Ejemplo n.º 1
0
 def __getitem__(self, item):
     if item == '.arvados#collection':
         if self.collection_record_file is None:
             self.collection_record_file = ObjectFile(self.inode, self.collection_record)
             self.inodes.add_entry(self.collection_record_file)
         return self.collection_record_file
     else:
         return super(CollectionDirectory, self).__getitem__(item)
Ejemplo n.º 2
0
    def update(self):
        if self.project_object_file == None:
            self.project_object_file = ObjectFile(self.inode,
                                                  self.project_object)
            self.inodes.add_entry(self.project_object_file)

        def namefn(i):
            if 'name' in i:
                if i['name'] is None or len(i['name']) == 0:
                    return None
                elif collection_uuid_pattern.match(
                        i['uuid']) or group_uuid_pattern.match(i['uuid']):
                    # collection or subproject
                    return i['name']
                elif link_uuid_pattern.match(
                        i['uuid']) and i['head_kind'] == 'arvados#collection':
                    # name link
                    return i['name']
                elif 'kind' in i and i['kind'].startswith('arvados#'):
                    # something else
                    return "{}.{}".format(i['name'], i['kind'][8:])
            else:
                return None

        def samefn(a, i):
            if isinstance(a, CollectionDirectory) or isinstance(
                    a, ProjectDirectory):
                return a.uuid() == i['uuid']
            elif isinstance(a, ObjectFile):
                return a.uuid() == i['uuid'] and not a.stale()
            return False

        try:
            with llfuse.lock_released:
                self._updating_lock.acquire()
                if not self.stale():
                    return

                if group_uuid_pattern.match(self.project_uuid):
                    self.project_object = self.api.groups().get(
                        uuid=self.project_uuid).execute(
                            num_retries=self.num_retries)
                elif user_uuid_pattern.match(self.project_uuid):
                    self.project_object = self.api.users().get(
                        uuid=self.project_uuid).execute(
                            num_retries=self.num_retries)

                contents = arvados.util.list_all(self.api.groups().contents,
                                                 self.num_retries,
                                                 uuid=self.project_uuid)

            # end with llfuse.lock_released, re-acquire lock

            self.merge(contents, namefn, samefn, self.createDirectory)
        finally:
            self._updating_lock.release()
Ejemplo n.º 3
0
 def createDirectory(self, i):
     if collection_uuid_pattern.match(i['uuid']):
         return CollectionDirectory(self.inode, self.inodes, self.api, self.num_retries, i)
     elif group_uuid_pattern.match(i['uuid']):
         return ProjectDirectory(self.inode, self.inodes, self.api, self.num_retries, i, self._poll, self._poll_time)
     elif link_uuid_pattern.match(i['uuid']):
         if i['head_kind'] == 'arvados#collection' or portable_data_hash_pattern.match(i['head_uuid']):
             return CollectionDirectory(self.inode, self.inodes, self.api, self.num_retries, i['head_uuid'])
         else:
             return None
     elif uuid_pattern.match(i['uuid']):
         return ObjectFile(self.parent_inode, i)
     else:
         return None
Ejemplo n.º 4
0
    def update(self):
        if self.project_object_file == None:
            self.project_object_file = ObjectFile(self.inode,
                                                  self.project_object)
            self.inodes.add_entry(self.project_object_file)

        if not self._full_listing:
            return True

        def samefn(a, i):
            if isinstance(a, CollectionDirectory) or isinstance(
                    a, ProjectDirectory):
                return a.uuid() == i['uuid']
            elif isinstance(a, ObjectFile):
                return a.uuid() == i['uuid'] and not a.stale()
            return False

        try:
            with llfuse.lock_released:
                self._updating_lock.acquire()
                if not self.stale():
                    return

                if group_uuid_pattern.match(self.project_uuid):
                    self.project_object = self.api.groups().get(
                        uuid=self.project_uuid).execute(
                            num_retries=self.num_retries)
                elif user_uuid_pattern.match(self.project_uuid):
                    self.project_object = self.api.users().get(
                        uuid=self.project_uuid).execute(
                            num_retries=self.num_retries)

                contents = arvados.util.list_all(
                    self.api.groups().list,
                    self.num_retries,
                    filters=[["owner_uuid", "=", self.project_uuid],
                             ["group_class", "=", "project"]])
                contents.extend(
                    arvados.util.list_all(
                        self.api.collections().list,
                        self.num_retries,
                        filters=[["owner_uuid", "=", self.project_uuid]]))

            # end with llfuse.lock_released, re-acquire lock

            self.merge(contents, self.namefn, samefn, self.createDirectory)
            return True
        finally:
            self._updating_lock.release()