Revision 5576e6dd snf-pithos-backend/pithos/backends/modular.py

b/snf-pithos-backend/pithos/backends/modular.py
614 614
            raise NotAllowedError
615 615
        if shared and public:
616 616
            # get shared first
617
            shared = self._list_object_permissions(
617
            shared_paths = self._list_object_permissions(
618 618
                user, account, container, prefix, shared=True, public=False)
619 619
            objects = set()
620
            if shared:
620
            if shared_paths:
621 621
                path, node = self._lookup_container(account, container)
622
                shared = self._get_formatted_paths(shared)
623
                objects |= set(self._list_object_properties(node, path, prefix, delimiter, marker, limit, virtual, domain, keys, until, size_range, shared, all_props))
622
                shared_paths = self._get_formatted_paths(shared_paths)
623
                objects |= set(self._list_object_properties(node, path, prefix, delimiter, marker, limit, virtual, domain, keys, until, size_range, shared_paths, all_props))
624 624

  
625 625
            # get public
626 626
            objects |= set(self._list_public_object_properties(
......
1516 1516
        for path in self.permissions.access_list_paths(user, account):
1517 1517
            allow.add(path.split('/', 2)[1])
1518 1518
        return sorted(allow)
1519

  
1520
    # Domain functions
1521

  
1522
    def _get_domain_objects(self, domain, user=None):
1523
        obj_list = self.node.domain_object_list(domain, CLUSTER_NORMAL)
1524
        if user != None:
1525
            obj_list = [t for t in obj_list \
1526
                if self._has_read_access(user, t[0])]
1527
        return [(path,
1528
                 self._build_metadata(props, user_defined_meta),
1529
                 self.permissions.access_get(path)) \
1530
            for path, props, user_defined_meta in obj_list]
1531

  
1532
    # util functions
1533

  
1534
    def _build_metadata(self, props, user_defined=None,
1535
                        include_user_defined=True):
1536
        meta = {'bytes': props[self.SIZE],
1537
                'type': props[self.TYPE],
1538
                'hash': props[self.HASH],
1539
                'version': props[self.SERIAL],
1540
                'version_timestamp': props[self.MTIME],
1541
                'modified_by': props[self.MUSER],
1542
                'uuid': props[self.UUID],
1543
                'checksum': props[self.CHECKSUM]}
1544
        if include_user_defined and user_defined != None:
1545
            meta.update(user_defined)
1546
        return meta
1547

  
1548
    def _has_read_access(self, user, path):
1549
        try:
1550
            account, container, object = path.split('/', 2)
1551
        except ValueError:
1552
            raise ValueError('Invalid object path')
1553

  
1554
        assert isinstance(user, basestring), "Invalid user"
1555

  
1556
        try:
1557
            self._can_read(user, account, container, object)
1558
        except NotAllowedError:
1559
            return False
1560
        else:
1561
            return True

Also available in: Unified diff