######################################################################
#
# File: b2sdk/v2/file_version.py
#
# Copyright 2019 Backblaze Inc. All Rights Reserved.
#
# License https://www.backblaze.com/using_b2_code.html
#
######################################################################
from __future__ import annotations
from typing import TYPE_CHECKING
from b2sdk.v2 import EncryptionSetting
from b2sdk.v2 import NO_RETENTION_FILE_SETTING, FileRetentionSetting, LegalHold
from b2sdk.v2 import ReplicationStatus
from b2sdk import _v3 as v3
if TYPE_CHECKING:
from .api import B2Api
UNVERIFIED_CHECKSUM_PREFIX = 'unverified:'
[docs]class FileVersion(v3.FileVersion):
"""
A structure which represents a version of a file (in B2 cloud).
:ivar str ~.id_: ``fileId``
:ivar str ~.file_name: full file name (with path)
:ivar ~.size: size in bytes, can be ``None`` (unknown)
:ivar str ~.content_type: RFC 822 content type, for example ``"application/octet-stream"``
:ivar ~.upload_timestamp: in milliseconds since :abbr:`epoch (1970-01-01 00:00:00)`. Can be ``None`` (unknown).
:ivar str ~.action: ``"upload"``, ``"hide"`` or ``"delete"``
"""
__slots__ = ['cache_control']
def __init__(
self,
api: B2Api,
id_: str,
file_name: str,
size: int | None | str,
content_type: str | None,
content_sha1: str | None,
file_info: dict[str, str],
upload_timestamp: int,
account_id: str,
bucket_id: str,
action: str,
content_md5: str | None,
server_side_encryption: EncryptionSetting,
file_retention: FileRetentionSetting = NO_RETENTION_FILE_SETTING,
legal_hold: LegalHold = LegalHold.UNSET,
replication_status: ReplicationStatus | None = None,
cache_control: str | None = None,
):
self.cache_control = cache_control
if self.cache_control is None:
self.cache_control = (file_info or {}).get('b2-cache-control')
super().__init__(
api=api,
id_=id_,
file_name=file_name,
size=size,
content_type=content_type,
content_sha1=content_sha1,
file_info=file_info,
upload_timestamp=upload_timestamp,
account_id=account_id,
bucket_id=bucket_id,
action=action,
content_md5=content_md5,
server_side_encryption=server_side_encryption,
file_retention=file_retention,
legal_hold=legal_hold,
replication_status=replication_status,
)
[docs] def as_dict(self):
result = super().as_dict()
if self.cache_control is not None:
result['cacheControl'] = self.cache_control
return result
class FileVersionFactory(v3.FileVersionFactory):
FILE_VERSION_CLASS = FileVersion