Skip to content

Commit d21baea

Browse files
committed
WIP
1 parent 8dd35cb commit d21baea

File tree

1 file changed

+48
-9
lines changed

1 file changed

+48
-9
lines changed

b2sdk/raw_api.py

Lines changed: 48 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,7 @@
2424
from .b2http import B2Http
2525
from .exception import FileOrBucketNotFound, ResourceNotFound, UnusableFileName, InvalidMetadataDirective, WrongEncryptionModeForBucketDefault
2626
from .encryption.setting import EncryptionAlgorithm, EncryptionMode, EncryptionSetting
27+
from .file_lock import RetentionMode, RetentionPeriod, RetentionSetting
2728
from .utils import b2_url_encode, hex_sha1_of_stream
2829

2930
# All possible capabilities
@@ -36,6 +37,12 @@
3637
'deleteBuckets',
3738
'readBucketEncryption',
3839
'writeBucketEncryption',
40+
'readBucketRetentions',
41+
'writeBucketRetentions',
42+
'writeFileRetentions',
43+
'writeFileLegalHolds',
44+
'readFileRetentions',
45+
'readFileLegalHolds',
3946
'listFiles',
4047
'readFiles',
4148
'shareFiles',
@@ -118,6 +125,7 @@ def create_bucket(
118125
cors_rules=None,
119126
lifecycle_rules=None,
120127
default_server_side_encryption: Optional[EncryptionSetting] = None,
128+
is_file_lock_enabled: Optional[bool] = None,
121129
):
122130
pass
123131

@@ -272,6 +280,7 @@ def update_bucket(
272280
lifecycle_rules=None,
273281
if_revision_is=None,
274282
default_server_side_encryption: Optional[EncryptionSetting] = None,
283+
default_retention: Optional[RetentionSetting] = None,
275284
):
276285
pass
277286

@@ -345,6 +354,16 @@ def _post_json(self, base_url, api_name, auth, **params) -> Dict[str, Any]:
345354
headers = {'Authorization': auth}
346355
return self.b2_http.post_json_return_json(url, headers, params)
347356

357+
def _get_json(self, base_url, api_name, auth, **params) -> Dict[str, Any]:
358+
# this is useful for testing purposes only
359+
url = '%s/b2api/%s/%s' % (base_url, API_VERSION, api_name)
360+
import urllib
361+
url += '?' + urllib.parse.urlencode(params)
362+
headers = {'Authorization': auth}
363+
print('eee')
364+
with self.b2_http.get_content(url, headers) as response:
365+
return response.json()
366+
348367
def authorize_account(self, realm_url, application_key_id, application_key):
349368
auth = b'Basic ' + base64.b64encode(
350369
('%s:%s' % (application_key_id, application_key)).encode()
@@ -364,7 +383,8 @@ def create_bucket(
364383
bucket_info=None,
365384
cors_rules=None,
366385
lifecycle_rules=None,
367-
default_server_side_encryption=None,
386+
default_server_side_encryption: Optional[EncryptionSetting] = None,
387+
is_file_lock_enabled: Optional[bool] = None,
368388
):
369389
kwargs = dict(
370390
accountId=account_id,
@@ -382,6 +402,10 @@ def create_bucket(
382402
raise WrongEncryptionModeForBucketDefault(default_server_side_encryption.mode)
383403
kwargs['defaultServerSideEncryption'
384404
] = default_server_side_encryption.serialize_to_json_for_request()
405+
if is_file_lock_enabled is not None:
406+
#kwargs['isFileLockEnabled'] = is_file_lock_enabled
407+
kwargs['isFileLockEnabled'] = is_file_lock_enabled and "true" or "false"
408+
#return self._get_json(
385409
return self._post_json(
386410
api_url,
387411
'b2_create_bucket',
@@ -653,7 +677,8 @@ def update_bucket(
653677
cors_rules=None,
654678
lifecycle_rules=None,
655679
if_revision_is=None,
656-
default_server_side_encryption=None,
680+
default_server_side_encryption: Optional[EncryptionSetting] = None,
681+
default_retention: Optional[RetentionSetting] = None,
657682
):
658683
assert bucket_info is not None or bucket_type is not None
659684

@@ -669,11 +694,12 @@ def update_bucket(
669694
if lifecycle_rules is not None:
670695
kwargs['lifecycleRules'] = lifecycle_rules
671696
if default_server_side_encryption is not None:
672-
if default_server_side_encryption is not None:
673-
if not default_server_side_encryption.mode.can_be_set_as_bucket_default():
674-
raise WrongEncryptionModeForBucketDefault(default_server_side_encryption.mode)
675-
kwargs['defaultServerSideEncryption'
676-
] = default_server_side_encryption.serialize_to_json_for_request()
697+
if not default_server_side_encryption.mode.can_be_set_as_bucket_default():
698+
raise WrongEncryptionModeForBucketDefault(default_server_side_encryption.mode)
699+
kwargs['defaultServerSideEncryption'
700+
] = default_server_side_encryption.serialize_to_json_for_request()
701+
if default_retention is not None:
702+
kwargs['defaultRetention'] = default_retention.serialize_to_json_for_request()
677703

678704
return self._post_json(
679705
api_url,
@@ -979,8 +1005,18 @@ def test_raw_api_helper(raw_api):
9791005
bucket_name = 'test-raw-api-%s-%d-%d' % (
9801006
account_id, int(time.time()), random.randint(1000, 9999)
9811007
)
1008+
1009+
import http.client
1010+
http.client.HTTPConnection.debuglevel = 1
1011+
9821012
bucket_dict = raw_api.create_bucket(
983-
api_url, account_auth_token, account_id, bucket_name, 'allPublic'
1013+
api_url,
1014+
account_auth_token,
1015+
account_id,
1016+
bucket_name,
1017+
'allPublic',
1018+
is_file_lock_enabled=False,
1019+
#is_file_lock_enabled=True,
9841020
)
9851021
bucket_id = bucket_dict['bucketId']
9861022
first_bucket_revision = bucket_dict['revision']
@@ -1186,7 +1222,10 @@ def test_raw_api_helper(raw_api):
11861222
account_id,
11871223
bucket_id,
11881224
'allPrivate',
1189-
bucket_info={'color': 'blue'}
1225+
bucket_info={'color': 'blue'},
1226+
default_retention=RetentionSetting(
1227+
mode=RetentionMode.GOVERNANCE, period=RetentionPeriod(days=1)
1228+
),
11901229
)
11911230
assert first_bucket_revision < updated_bucket['revision']
11921231

0 commit comments

Comments
 (0)