Revision fe2db49d

b/snf-pithos-backend/pithos/backends/modular.py
190 190
    def get_account_meta(self, user, account, domain, until=None, include_user_defined=True):
191 191
        """Return a dictionary with the account metadata for the domain."""
192 192
        
193
        logger.debug("get_account_meta: %s %s %s", account, domain, until)
193
        logger.debug("get_account_meta: %s %s %s %s", user, account, domain, until)
194 194
        path, node = self._lookup_account(account, user == account)
195 195
        if user != account:
196 196
            if until or node is None or account not in self._allowed_accounts(user):
......
225 225
    def update_account_meta(self, user, account, domain, meta, replace=False):
226 226
        """Update the metadata associated with the account for the domain."""
227 227
        
228
        logger.debug("update_account_meta: %s %s %s %s", account, domain, meta, replace)
228
        logger.debug("update_account_meta: %s %s %s %s %s", user, account, domain, meta, replace)
229 229
        if user != account:
230 230
            raise NotAllowedError
231 231
        path, node = self._lookup_account(account, True)
......
235 235
    def get_account_groups(self, user, account):
236 236
        """Return a dictionary with the user groups defined for this account."""
237 237
        
238
        logger.debug("get_account_groups: %s", account)
238
        logger.debug("get_account_groups: %s %s", user, account)
239 239
        if user != account:
240 240
            if account not in self._allowed_accounts(user):
241 241
                raise NotAllowedError
......
247 247
    def update_account_groups(self, user, account, groups, replace=False):
248 248
        """Update the groups associated with the account."""
249 249
        
250
        logger.debug("update_account_groups: %s %s %s", account, groups, replace)
250
        logger.debug("update_account_groups: %s %s %s %s", user, account, groups, replace)
251 251
        if user != account:
252 252
            raise NotAllowedError
253 253
        self._lookup_account(account, True)
......
264 264
    def get_account_policy(self, user, account):
265 265
        """Return a dictionary with the account policy."""
266 266
        
267
        logger.debug("get_account_policy: %s", account)
267
        logger.debug("get_account_policy: %s %s", user, account)
268 268
        if user != account:
269 269
            if account not in self._allowed_accounts(user):
270 270
                raise NotAllowedError
......
276 276
    def update_account_policy(self, user, account, policy, replace=False):
277 277
        """Update the policy associated with the account."""
278 278
        
279
        logger.debug("update_account_policy: %s %s %s", account, policy, replace)
279
        logger.debug("update_account_policy: %s %s %s %s", user, account, policy, replace)
280 280
        if user != account:
281 281
            raise NotAllowedError
282 282
        path, node = self._lookup_account(account, True)
......
287 287
    def put_account(self, user, account, policy={}):
288 288
        """Create a new account with the given name."""
289 289
        
290
        logger.debug("put_account: %s %s", account, policy)
290
        logger.debug("put_account: %s %s %s", user, account, policy)
291 291
        if user != account:
292 292
            raise NotAllowedError
293 293
        node = self.node.node_lookup(account)
......
302 302
    def delete_account(self, user, account):
303 303
        """Delete the account with the given name."""
304 304
        
305
        logger.debug("delete_account: %s", account)
305
        logger.debug("delete_account: %s %s", user, account)
306 306
        if user != account:
307 307
            raise NotAllowedError
308 308
        node = self.node.node_lookup(account)
......
316 316
    def list_containers(self, user, account, marker=None, limit=10000, shared=False, until=None, public=False):
317 317
        """Return a list of containers existing under an account."""
318 318
        
319
        logger.debug("list_containers: %s %s %s %s %s %s", account, marker, limit, shared, until, public)
319
        logger.debug("list_containers: %s %s %s %s %s %s %s", user, account, marker, limit, shared, until, public)
320 320
        if user != account:
321 321
            if until or account not in self._allowed_accounts(user):
322 322
                raise NotAllowedError
......
340 340
    def list_container_meta(self, user, account, container, domain, until=None):
341 341
        """Return a list with all the container's object meta keys for the domain."""
342 342
        
343
        logger.debug("list_container_meta: %s %s %s %s", account, container, domain, until)
343
        logger.debug("list_container_meta: %s %s %s %s %s", user, account, container, domain, until)
344 344
        allowed = []
345 345
        if user != account:
346 346
            if until:
......
357 357
    def get_container_meta(self, user, account, container, domain, until=None, include_user_defined=True):
358 358
        """Return a dictionary with the container metadata for the domain."""
359 359
        
360
        logger.debug("get_container_meta: %s %s %s %s", account, container, domain, until)
360
        logger.debug("get_container_meta: %s %s %s %s %s", user, account, container, domain, until)
361 361
        if user != account:
362 362
            if until or container not in self._allowed_containers(user, account):
363 363
                raise NotAllowedError
......
388 388
    def update_container_meta(self, user, account, container, domain, meta, replace=False):
389 389
        """Update the metadata associated with the container for the domain."""
390 390
        
391
        logger.debug("update_container_meta: %s %s %s %s %s", account, container, domain, meta, replace)
391
        logger.debug("update_container_meta: %s %s %s %s %s %s", user, account, container, domain, meta, replace)
392 392
        if user != account:
393 393
            raise NotAllowedError
394 394
        path, node = self._lookup_container(account, container)
......
402 402
    def get_container_policy(self, user, account, container):
403 403
        """Return a dictionary with the container policy."""
404 404
        
405
        logger.debug("get_container_policy: %s %s", account, container)
405
        logger.debug("get_container_policy: %s %s %s", user, account, container)
406 406
        if user != account:
407 407
            if container not in self._allowed_containers(user, account):
408 408
                raise NotAllowedError
......
414 414
    def update_container_policy(self, user, account, container, policy, replace=False):
415 415
        """Update the policy associated with the container."""
416 416
        
417
        logger.debug("update_container_policy: %s %s %s %s", account, container, policy, replace)
417
        logger.debug("update_container_policy: %s %s %s %s %s", user, account, container, policy, replace)
418 418
        if user != account:
419 419
            raise NotAllowedError
420 420
        path, node = self._lookup_container(account, container)
......
425 425
    def put_container(self, user, account, container, policy={}):
426 426
        """Create a new container with the given name."""
427 427
        
428
        logger.debug("put_container: %s %s %s", account, container, policy)
428
        logger.debug("put_container: %s %s %s %s", user, account, container, policy)
429 429
        if user != account:
430 430
            raise NotAllowedError
431 431
        try:
......
441 441
        self._put_policy(node, policy, True)
442 442
    
443 443
    @backend_method
444
    def delete_container(self, user, account, container, until=None):
444
    def delete_container(self, user, account, container, until=None, prefix='', delimiter=None):
445 445
        """Delete/purge the container with the given name."""
446 446
        
447
        logger.debug("delete_container: %s %s %s", account, container, until)
447
        logger.debug("delete_container: %s %s %s %s %s %s", user, account, container, until, prefix, delimiter)
448 448
        if user != account:
449 449
            raise NotAllowedError
450 450
        path, node = self._lookup_container(account, container)
......
499 499
    def list_objects(self, user, account, container, prefix='', delimiter=None, marker=None, limit=10000, virtual=True, domain=None, keys=[], shared=False, until=None, size_range=None, public=False):
500 500
        """Return a list of object (name, version_id) tuples existing under a container."""
501 501
        
502
        logger.debug("list_objects: %s %s %s %s %s %s %s %s %s %s %s %s %s", account, container, prefix, delimiter, marker, limit, virtual, domain, keys, shared, until, size_range, public)
502
        logger.debug("list_objects: %s %s %s %s %s %s %s %s %s %s %s %s %s %s", user, account, container, prefix, delimiter, marker, limit, virtual, domain, keys, shared, until, size_range, public)
503 503
        return self._list_objects(user, account, container, prefix, delimiter, marker, limit, virtual, domain, keys, shared, until, size_range, False, public)
504 504
    
505 505
    @backend_method
506 506
    def list_object_meta(self, user, account, container, prefix='', delimiter=None, marker=None, limit=10000, virtual=True, domain=None, keys=[], shared=False, until=None, size_range=None, public=False):
507 507
        """Return a list of object metadata dicts existing under a container."""
508 508
        
509
        logger.debug("list_object_meta: %s %s %s %s %s %s %s %s %s %s %s %s %s", account, container, prefix, delimiter, marker, limit, virtual, domain, keys, shared, until, size_range, public)
509
        logger.debug("list_object_meta: %s %s %s %s %s %s %s %s %s %s %s %s %s %s", user, account, container, prefix, delimiter, marker, limit, virtual, domain, keys, shared, until, size_range, public)
510 510
        props = self._list_objects(user, account, container, prefix, delimiter, marker, limit, virtual, domain, keys, shared, until, size_range, True, public)
511 511
        objects = []
512 512
        for p in props:
......
529 529
    def list_object_permissions(self, user, account, container, prefix=''):
530 530
        """Return a list of paths that enforce permissions under a container."""
531 531
        
532
        logger.debug("list_object_permissions: %s %s %s", account, container, prefix)
532
        logger.debug("list_object_permissions: %s %s %s %s", user, account, container, prefix)
533 533
        return self._list_object_permissions(user, account, container, prefix, True, False)
534 534
    
535 535
    @backend_method
536 536
    def list_object_public(self, user, account, container, prefix=''):
537 537
        """Return a dict mapping paths to public ids for objects that are public under a container."""
538 538
        
539
        logger.debug("list_object_public: %s %s %s", account, container, prefix)
539
        logger.debug("list_object_public: %s %s %s %s", user, account, container, prefix)
540 540
        public = {}
541 541
        for path, p in self.permissions.public_list('/'.join((account, container, prefix))):
542 542
            public[path] = p + ULTIMATE_ANSWER
......
546 546
    def get_object_meta(self, user, account, container, name, domain, version=None, include_user_defined=True):
547 547
        """Return a dictionary with the object metadata for the domain."""
548 548
        
549
        logger.debug("get_object_meta: %s %s %s %s %s", account, container, name, domain, version)
549
        logger.debug("get_object_meta: %s %s %s %s %s %s", user, account, container, name, domain, version)
550 550
        self._can_read(user, account, container, name)
551 551
        path, node = self._lookup_object(account, container, name)
552 552
        props = self._get_version(node, version)
......
580 580
    def update_object_meta(self, user, account, container, name, domain, meta, replace=False):
581 581
        """Update the metadata associated with the object for the domain and return the new version."""
582 582
        
583
        logger.debug("update_object_meta: %s %s %s %s %s %s", account, container, name, domain, meta, replace)
583
        logger.debug("update_object_meta: %s %s %s %s %s %s %s", user, account, container, name, domain, meta, replace)
584 584
        self._can_write(user, account, container, name)
585 585
        path, node = self._lookup_object(account, container, name)
586 586
        src_version_id, dest_version_id = self._put_metadata(user, node, domain, meta, replace)
......
593 593
        from which the object gets its permissions from,
594 594
        along with a dictionary containing the permissions."""
595 595
        
596
        logger.debug("get_object_permissions: %s %s %s", account, container, name)
596
        logger.debug("get_object_permissions: %s %s %s %s", user, account, container, name)
597 597
        allowed = 'write'
598 598
        permissions_path = self._get_permissions_path(account, container, name)
599 599
        if user != account:
......
610 610
    def update_object_permissions(self, user, account, container, name, permissions):
611 611
        """Update the permissions associated with the object."""
612 612
        
613
        logger.debug("update_object_permissions: %s %s %s %s", account, container, name, permissions)
613
        logger.debug("update_object_permissions: %s %s %s %s %s", user, account, container, name, permissions)
614 614
        if user != account:
615 615
            raise NotAllowedError
616 616
        path = self._lookup_object(account, container, name)[0]
......
622 622
    def get_object_public(self, user, account, container, name):
623 623
        """Return the public id of the object if applicable."""
624 624
        
625
        logger.debug("get_object_public: %s %s %s", account, container, name)
625
        logger.debug("get_object_public: %s %s %s %s", user, account, container, name)
626 626
        self._can_read(user, account, container, name)
627 627
        path = self._lookup_object(account, container, name)[0]
628 628
        p = self.permissions.public_get(path)
......
634 634
    def update_object_public(self, user, account, container, name, public):
635 635
        """Update the public status of the object."""
636 636
        
637
        logger.debug("update_object_public: %s %s %s %s", account, container, name, public)
637
        logger.debug("update_object_public: %s %s %s %s %s", user, account, container, name, public)
638 638
        self._can_write(user, account, container, name)
639 639
        path = self._lookup_object(account, container, name)[0]
640 640
        if not public:
......
646 646
    def get_object_hashmap(self, user, account, container, name, version=None):
647 647
        """Return the object's size and a list with partial hashes."""
648 648
        
649
        logger.debug("get_object_hashmap: %s %s %s %s", account, container, name, version)
649
        logger.debug("get_object_hashmap: %s %s %s %s %s", user, account, container, name, version)
650 650
        self._can_read(user, account, container, name)
651 651
        path, node = self._lookup_object(account, container, name)
652 652
        props = self._get_version(node, version)
......
694 694
    def update_object_hashmap(self, user, account, container, name, size, type, hashmap, checksum, domain, meta={}, replace_meta=False, permissions=None):
695 695
        """Create/update an object with the specified size and partial hashes."""
696 696
        
697
        logger.debug("update_object_hashmap: %s %s %s %s %s %s %s", account, container, name, size, type, hashmap, checksum)
697
        logger.debug("update_object_hashmap: %s %s %s %s %s %s %s %s", user, account, container, name, size, type, hashmap, checksum)
698 698
        if size == 0: # No such thing as an empty hashmap.
699 699
            hashmap = [self.put_block('')]
700 700
        map = HashMap(self.block_size, self.hash_algorithm)
......
714 714
    def update_object_checksum(self, user, account, container, name, version, checksum):
715 715
        """Update an object's checksum."""
716 716
        
717
        logger.debug("update_object_checksum: %s %s %s %s %s", account, container, name, version, checksum)
717
        logger.debug("update_object_checksum: %s %s %s %s %s %s", user, account, container, name, version, checksum)
718 718
        # Update objects with greater version and same hashmap and size (fix metadata updates).
719 719
        self._can_write(user, account, container, name)
720 720
        path, node = self._lookup_object(account, container, name)
......
741 741
    def copy_object(self, user, src_account, src_container, src_name, dest_account, dest_container, dest_name, type, domain, meta={}, replace_meta=False, permissions=None, src_version=None):
742 742
        """Copy an object's data and metadata."""
743 743
        
744
        logger.debug("copy_object: %s %s %s %s %s %s %s %s %s %s %s %s", src_account, src_container, src_name, dest_account, dest_container, dest_name, type, domain, meta, replace_meta, permissions, src_version)
744
        logger.debug("copy_object: %s %s %s %s %s %s %s %s %s %s %s %s %s", user, src_account, src_container, src_name, dest_account, dest_container, dest_name, type, domain, meta, replace_meta, permissions, src_version)
745 745
        dest_version_id = self._copy_object(user, src_account, src_container, src_name, dest_account, dest_container, dest_name, type, domain, meta, replace_meta, permissions, src_version, False)
746 746
        return dest_version_id
747 747
    
......
749 749
    def move_object(self, user, src_account, src_container, src_name, dest_account, dest_container, dest_name, type, domain, meta={}, replace_meta=False, permissions=None):
750 750
        """Move an object's data and metadata."""
751 751
        
752
        logger.debug("move_object: %s %s %s %s %s %s %s %s %s %s %s", src_account, src_container, src_name, dest_account, dest_container, dest_name, type, domain, meta, replace_meta, permissions)
752
        logger.debug("move_object: %s %s %s %s %s %s %s %s %s %s %s %s", user, src_account, src_container, src_name, dest_account, dest_container, dest_name, type, domain, meta, replace_meta, permissions)
753 753
        if user != src_account:
754 754
            raise NotAllowedError
755 755
        dest_version_id = self._copy_object(user, src_account, src_container, src_name, dest_account, dest_container, dest_name, type, domain, meta, replace_meta, permissions, None, True)
......
757 757
            self._delete_object(user, src_account, src_container, src_name)
758 758
        return dest_version_id
759 759
    
760
    def _delete_object(self, user, account, container, name, until=None):
760
    def _delete_object(self, user, account, container, name, until=None, prefix='', delimiter=None):
761 761
        if user != account:
762 762
            raise NotAllowedError
763 763
        
......
793 793
        self.permissions.access_clear(path)
794 794
    
795 795
    @backend_method
796
    def delete_object(self, user, account, container, name, until=None):
796
    def (self, user, account, container, name, until=None, prefix='', delimiter=None):
797 797
        """Delete/purge an object."""
798 798
        
799
        logger.debug("delete_object: %s %s %s %s", account, container, name, until)
799
        logger.debug("delete_object: %s %s %s %s %s %s %s", user, account, container, name, until, prefix, delimiter)
800 800
        self._delete_object(user, account, container, name, until)
801 801
    
802 802
    @backend_method
803 803
    def list_versions(self, user, account, container, name):
804 804
        """Return a list of all (version, version_timestamp) tuples for an object."""
805 805
        
806
        logger.debug("list_versions: %s %s %s", account, container, name)
806
        logger.debug("list_versions: %s %s %s %s", user, account, container, name)
807 807
        self._can_read(user, account, container, name)
808 808
        path, node = self._lookup_object(account, container, name)
809 809
        versions = self.node.node_get_versions(node)
......
813 813
    def get_uuid(self, user, uuid):
814 814
        """Return the (account, container, name) for the UUID given."""
815 815
        
816
        logger.debug("get_uuid: %s", uuid)
816
        logger.debug("get_uuid: %s %s", user, uuid)
817 817
        info = self.node.latest_uuid(uuid)
818 818
        if info is None:
819 819
            raise NameError
......
826 826
    def get_public(self, user, public):
827 827
        """Return the (account, container, name) for the public id given."""
828 828
        
829
        logger.debug("get_public: %s", public)
829
        logger.debug("get_public: %s %s", user, public)
830 830
        if public is None or public < ULTIMATE_ANSWER:
831 831
            raise NameError
832 832
        path = self.permissions.public_path(public - ULTIMATE_ANSWER)

Also available in: Unified diff