|
54 | 54 | from google.cloud.storage.notification import NONE_PAYLOAD_FORMAT |
55 | 55 |
|
56 | 56 |
|
| 57 | +_UBLA_BPO_ENABLED_MESSAGE = ( |
| 58 | + "Pass only one of 'uniform_bucket_level_access_enabled' / " |
| 59 | + "'bucket_policy_only_enabled' to 'IAMConfiguration'." |
| 60 | +) |
| 61 | +_BPO_ENABLED_MESSAGE = ( |
| 62 | + "'IAMConfiguration.bucket_policy_only_enabled' is deprecated. " |
| 63 | + "Instead, use 'IAMConfiguration.uniform_bucket_level_access_enabled'." |
| 64 | +) |
| 65 | +_UBLA_BPO_LOCK_TIME_MESSAGE = ( |
| 66 | + "Pass only one of 'uniform_bucket_level_access_lock_time' / " |
| 67 | + "'bucket_policy_only_lock_time' to 'IAMConfiguration'." |
| 68 | +) |
| 69 | +_BPO_LOCK_TIME_MESSAGE = ( |
| 70 | + "'IAMConfiguration.bucket_policy_only_lock_time' is deprecated. " |
| 71 | + "Instead, use 'IAMConfiguration.uniform_bucket_level_access_lock_time'." |
| 72 | +) |
57 | 73 | _LOCATION_SETTER_MESSAGE = ( |
58 | 74 | "Assignment to 'Bucket.location' is deprecated, as it is only " |
59 | 75 | "valid before the bucket is created. Instead, pass the location " |
@@ -286,29 +302,66 @@ def from_api_repr(cls, resource): |
286 | 302 | return instance |
287 | 303 |
|
288 | 304 |
|
| 305 | +_default = object() |
| 306 | + |
| 307 | + |
289 | 308 | class IAMConfiguration(dict): |
290 | 309 | """Map a bucket's IAM configuration. |
291 | 310 |
|
292 | 311 | :type bucket: :class:`Bucket` |
293 | 312 | :params bucket: Bucket for which this instance is the policy. |
294 | 313 |
|
| 314 | + :type uniform_bucket_level_access_enabled: bool |
| 315 | + :params bucket_policy_only_enabled: |
| 316 | + (optional) whether the IAM-only policy is enabled for the bucket. |
| 317 | +
|
| 318 | + :type uniform_bucket_level_locked_time: :class:`datetime.datetime` |
| 319 | + :params uniform_bucket_level_locked_time: |
| 320 | + (optional) When the bucket's IAM-only policy was enabled. |
| 321 | + This value should normally only be set by the back-end API. |
| 322 | +
|
295 | 323 | :type bucket_policy_only_enabled: bool |
296 | | - :params bucket_policy_only_enabled: (optional) whether the IAM-only policy is enabled for the bucket. |
| 324 | + :params bucket_policy_only_enabled: |
| 325 | + Deprecated alias for :data:`uniform_bucket_level_access_enabled`. |
297 | 326 |
|
298 | 327 | :type bucket_policy_only_locked_time: :class:`datetime.datetime` |
299 | | - :params bucket_policy_only_locked_time: (optional) When the bucket's IAM-only policy was ehabled. This value should normally only be set by the back-end API. |
| 328 | + :params bucket_policy_only_locked_time: |
| 329 | + Deprecated alias for :data:`uniform_bucket_level_access_locked_time`. |
300 | 330 | """ |
301 | 331 |
|
302 | 332 | def __init__( |
303 | 333 | self, |
304 | 334 | bucket, |
305 | | - bucket_policy_only_enabled=False, |
306 | | - bucket_policy_only_locked_time=None, |
| 335 | + uniform_bucket_level_access_enabled=_default, |
| 336 | + uniform_bucket_level_access_locked_time=_default, |
| 337 | + bucket_policy_only_enabled=_default, |
| 338 | + bucket_policy_only_locked_time=_default, |
307 | 339 | ): |
308 | | - data = {"bucketPolicyOnly": {"enabled": bucket_policy_only_enabled}} |
309 | | - if bucket_policy_only_locked_time is not None: |
310 | | - data["bucketPolicyOnly"]["lockedTime"] = _datetime_to_rfc3339( |
311 | | - bucket_policy_only_locked_time |
| 340 | + if bucket_policy_only_enabled is not _default: |
| 341 | + |
| 342 | + if uniform_bucket_level_access_enabled is not _default: |
| 343 | + raise ValueError(_UBLA_BPO_ENABLED_MESSAGE) |
| 344 | + |
| 345 | + warnings.warn(_BPO_ENABLED_MESSAGE, DeprecationWarning, stacklevel=2) |
| 346 | + uniform_bucket_level_access_enabled = bucket_policy_only_enabled |
| 347 | + |
| 348 | + if bucket_policy_only_locked_time is not _default: |
| 349 | + |
| 350 | + if uniform_bucket_level_access_locked_time is not _default: |
| 351 | + raise ValueError(_UBLA_BPO_LOCK_TIME_MESSAGE) |
| 352 | + |
| 353 | + warnings.warn(_BPO_LOCK_TIME_MESSAGE, DeprecationWarning, stacklevel=2) |
| 354 | + uniform_bucket_level_access_locked_time = bucket_policy_only_locked_time |
| 355 | + |
| 356 | + if uniform_bucket_level_access_enabled is _default: |
| 357 | + uniform_bucket_level_access_enabled = False |
| 358 | + |
| 359 | + data = { |
| 360 | + "uniformBucketLevelAccess": {"enabled": uniform_bucket_level_access_enabled} |
| 361 | + } |
| 362 | + if uniform_bucket_level_access_locked_time is not _default: |
| 363 | + data["uniformBucketLevelAccess"]["lockedTime"] = _datetime_to_rfc3339( |
| 364 | + uniform_bucket_level_access_locked_time |
312 | 365 | ) |
313 | 366 | super(IAMConfiguration, self).__init__(data) |
314 | 367 | self._bucket = bucket |
@@ -340,41 +393,66 @@ def bucket(self): |
340 | 393 | return self._bucket |
341 | 394 |
|
342 | 395 | @property |
343 | | - def bucket_policy_only_enabled(self): |
| 396 | + def uniform_bucket_level_access_enabled(self): |
344 | 397 | """If set, access checks only use bucket-level IAM policies or above. |
345 | 398 |
|
346 | 399 | :rtype: bool |
347 | 400 | :returns: whether the bucket is configured to allow only IAM. |
348 | 401 | """ |
349 | | - bpo = self.get("bucketPolicyOnly", {}) |
350 | | - return bpo.get("enabled", False) |
| 402 | + ubla = self.get("uniformBucketLevelAccess", {}) |
| 403 | + return ubla.get("enabled", False) |
351 | 404 |
|
352 | | - @bucket_policy_only_enabled.setter |
353 | | - def bucket_policy_only_enabled(self, value): |
354 | | - bpo = self.setdefault("bucketPolicyOnly", {}) |
355 | | - bpo["enabled"] = bool(value) |
| 405 | + @uniform_bucket_level_access_enabled.setter |
| 406 | + def uniform_bucket_level_access_enabled(self, value): |
| 407 | + ubla = self.setdefault("uniformBucketLevelAccess", {}) |
| 408 | + ubla["enabled"] = bool(value) |
356 | 409 | self.bucket._patch_property("iamConfiguration", self) |
357 | 410 |
|
358 | 411 | @property |
359 | | - def bucket_policy_only_locked_time(self): |
360 | | - """Deadline for changing :attr:`bucket_policy_only_enabled` from true to false. |
| 412 | + def uniform_bucket_level_access_locked_time(self): |
| 413 | + """Deadline for changing :attr:`uniform_bucket_level_access_enabled` from true to false. |
361 | 414 |
|
362 | | - If the bucket's :attr:`bucket_policy_only_enabled` is true, this property |
| 415 | + If the bucket's :attr:`uniform_bucket_level_access_enabled` is true, this property |
363 | 416 | is time time after which that setting becomes immutable. |
364 | 417 |
|
365 | | - If the bucket's :attr:`bucket_policy_only_enabled` is false, this property |
| 418 | + If the bucket's :attr:`uniform_bucket_level_access_enabled` is false, this property |
366 | 419 | is ``None``. |
367 | 420 |
|
368 | 421 | :rtype: Union[:class:`datetime.datetime`, None] |
369 | | - :returns: (readonly) Time after which :attr:`bucket_policy_only_enabled` will |
| 422 | + :returns: (readonly) Time after which :attr:`uniform_bucket_level_access_enabled` will |
370 | 423 | be frozen as true. |
371 | 424 | """ |
372 | | - bpo = self.get("bucketPolicyOnly", {}) |
373 | | - stamp = bpo.get("lockedTime") |
| 425 | + ubla = self.get("uniformBucketLevelAccess", {}) |
| 426 | + stamp = ubla.get("lockedTime") |
374 | 427 | if stamp is not None: |
375 | 428 | stamp = _rfc3339_to_datetime(stamp) |
376 | 429 | return stamp |
377 | 430 |
|
| 431 | + @property |
| 432 | + def bucket_policy_only_enabled(self): |
| 433 | + """Deprecated alias for :attr:`uniform_bucket_level_access_enabled`. |
| 434 | +
|
| 435 | + :rtype: bool |
| 436 | + :returns: whether the bucket is configured to allow only IAM. |
| 437 | + """ |
| 438 | + return self.uniform_bucket_level_access_enabled |
| 439 | + |
| 440 | + @bucket_policy_only_enabled.setter |
| 441 | + def bucket_policy_only_enabled(self, value): |
| 442 | + warnings.warn(_BPO_ENABLED_MESSAGE, DeprecationWarning, stacklevel=2) |
| 443 | + self.uniform_bucket_level_access_enabled = value |
| 444 | + |
| 445 | + @property |
| 446 | + def bucket_policy_only_locked_time(self): |
| 447 | + """Deprecated alias for :attr:`uniform_bucket_level_access_locked_time`. |
| 448 | +
|
| 449 | + :rtype: Union[:class:`datetime.datetime`, None] |
| 450 | + :returns: |
| 451 | + (readonly) Time after which :attr:`bucket_policy_only_enabled` will |
| 452 | + be frozen as true. |
| 453 | + """ |
| 454 | + return self.uniform_bucket_level_access_locked_time |
| 455 | + |
378 | 456 |
|
379 | 457 | class Bucket(_PropertyMixin): |
380 | 458 | """A class representing a Bucket on Cloud Storage. |
|
0 commit comments