예제 #1
0
파일: channels.py 프로젝트: djibi2/pdk
    def iter_package_info(self):
        '''Iterate over ghost_package, blob_id, locator for this section.

        The directory is visited recursively and in a repeatable order.
        '''
        for root, dirnames, files in os.walk(self.full_path,
                                             topdown = True):
            dirnames.sort()
            files.sort()
            for candidate in files:
                full_path = pjoin(root, candidate)
                try:
                    package_type = get_package_type(filename = candidate)
                except UnknownPackageTypeError:
                    # if we don't know the the file is, we skip it.
                    continue
                control = package_type.extract_header(full_path)
                iterator = gen_file_fragments(full_path)
                md51_digest = md5()
                for block in iterator:
                    md51_digest.update(block)
                size = get_size(full_path)
                blob_id = 'md5:' + md51_digest.hexdigest()
                url = 'file://' + cpath(root)
                locator = FileLocator(url, candidate, blob_id, size,
                                      self.loader_factory)
                package = package_type.parse(control, blob_id)
                yield package, control, blob_id, locator
                for extra_blob_id, extra_size, extra_filename \
                        in package.extra_files:
                    make_extra = locator.make_extra_file_locator
                    extra_locator = make_extra(extra_filename,
                                               extra_blob_id,
                                               extra_size)
                    yield None, None, extra_blob_id, extra_locator
예제 #2
0
파일: channels.py 프로젝트: pombredanne/pdk
    def iter_package_info(self):
        '''Iterate over ghost_package, blob_id, locator for this section.

        The directory is visited recursively and in a repeatable order.
        '''
        for root, dirnames, files in os.walk(self.full_path, topdown=True):
            dirnames.sort()
            files.sort()
            for candidate in files:
                full_path = pjoin(root, candidate)
                try:
                    package_type = get_package_type(filename=candidate)
                except UnknownPackageTypeError:
                    # if we don't know the the file is, we skip it.
                    continue
                control = package_type.extract_header(full_path)
                iterator = gen_file_fragments(full_path)
                md51_digest = md5()
                for block in iterator:
                    md51_digest.update(block)
                size = get_size(full_path)
                blob_id = 'md5:' + md51_digest.hexdigest()
                url = 'file://' + cpath(root)
                locator = FileLocator(url, candidate, blob_id, size,
                                      self.loader_factory)
                package = package_type.parse(control, blob_id)
                yield package, control, blob_id, locator
                for extra_blob_id, extra_size, extra_filename \
                        in package.extra_files:
                    make_extra = locator.make_extra_file_locator
                    extra_locator = make_extra(extra_filename, extra_blob_id,
                                               extra_size)
                    yield None, None, extra_blob_id, extra_locator
예제 #3
0
파일: channels.py 프로젝트: djibi2/pdk
 def get_package(self, blob_id, type_string):
     '''Get a (ghost) package object for the blob_id.'''
     headers = self.index_file.get(('ent-id', blob_id), 1)
     for header in headers:
         if header is None:
             continue
         package_type = get_package_type(format = type_string)
         return package_type.parse(header, blob_id)
예제 #4
0
 def get_package(self, blob_id, type_string):
     '''Get a (ghost) package object for the blob_id.'''
     headers = self.index_file.get(('ent-id', blob_id), 1)
     for header in headers:
         if header is None:
             continue
         package_type = get_package_type(format=type_string)
         return package_type.parse(header, blob_id)
예제 #5
0
파일: channels.py 프로젝트: djibi2/pdk
 def iter_world_items(records, section_name):
     '''Get WorldItems for all the objects in the given (one) channel.
     '''
     for type_string, header, blob_id, locator in records:
         if type_string and header:
             package_type = get_package_type(format = type_string)
             package = package_type.parse(header, blob_id)
             found_filename = os.path.basename(locator.filename)
             package['pdk', 'found-filename'] = found_filename
         else:
             package = None
         item = WorldItem(section_name, package, blob_id, locator)
         yield item
예제 #6
0
 def iter_world_items(records, section_name):
     '''Get WorldItems for all the objects in the given (one) channel.
     '''
     for type_string, header, blob_id, locator in records:
         if type_string and header:
             package_type = get_package_type(format=type_string)
             package = package_type.parse(header, blob_id)
             found_filename = os.path.basename(locator.filename)
             package['pdk', 'found-filename'] = found_filename
         else:
             package = None
         item = WorldItem(section_name, package, blob_id, locator)
         yield item
예제 #7
0
    def load_package(self, blob_id, package_format):
        """Load the raw header data into memory from a package
        """
        package_type = get_package_type(format=package_format)
        header_file = self.get_header_filename(blob_id)

        # check if the header file is already present
        # don't bother with synchronization issues.
        if os.path.basename(header_file) not in self:
            # Suck the header out and install it
            blob_filename = self.file_path(blob_id)
            try:
                header = package_type.extract_header(blob_filename)
            except IOError, error:
                if error.errno == 2:
                    message = "Missing package file in file cache\n"
                    message += "ref = '%s'\n" % blob_id
                    message += "Consider running pdk download on any new "
                    message += "or recently modified components."
                    raise SemanticError, message
            self.add_header(header, blob_id)
예제 #8
0
파일: cache.py 프로젝트: 64studio/pdk
    def load_package(self, blob_id, package_format):
        """Load the raw header data into memory from a package
        """
        package_type = get_package_type(format = package_format)
        header_file = self.get_header_filename(blob_id)

        # check if the header file is already present
        # don't bother with synchronization issues.
        if os.path.basename(header_file) not in self:
            # Suck the header out and install it
            blob_filename = self.file_path(blob_id)
            try:
                header = package_type.extract_header(blob_filename)
            except IOError, error:
                if error.errno == 2:
                    message = "Missing package file in file cache\n"
                    message += "ref = '%s'\n" % blob_id
                    message += "Consider running pdk download on any new "
                    message += "or recently modified components."
                    raise SemanticError, message
            self.add_header(header, blob_id)
예제 #9
0
    def test_get_package_type(self):
        self.assert_equal(deb, get_package_type(filename='a.deb'))
        self.assert_equals(udeb, get_package_type(filename='a.udeb'))
        self.assert_equal(dsc, get_package_type(filename='a.dsc'))
        self.assert_equals(srpm, get_package_type(filename='a.src.rpm'))
        self.assert_equals(rpm, get_package_type(filename='a.rpm'))

        self.assert_equals(deb, get_package_type(format='deb'))
        self.assert_equals(udeb, get_package_type(format='udeb'))
        self.assert_equals(dsc, get_package_type(format='dsc'))
        self.assert_equals(srpm, get_package_type(format='srpm'))
        self.assert_equals(rpm, get_package_type(format='rpm'))

        try:
            get_package_type(filename='a')
        except UnknownPackageTypeError:
            pass
        else:
            self.fail('"a" is an invalid filetype')

        try:
            get_package_type(format='a')
        except UnknownPackageTypeError:
            pass
        else:
            self.fail('"a" is an invalid package format')
예제 #10
0
    def test_get_package_type(self):
        self.assert_equal(deb, get_package_type(filename = 'a.deb'))
        self.assert_equals(udeb, get_package_type(filename = 'a.udeb'))
        self.assert_equal(dsc, get_package_type(filename = 'a.dsc'))
        self.assert_equals(srpm, get_package_type(filename = 'a.src.rpm'))
        self.assert_equals(rpm, get_package_type(filename = 'a.rpm'))

        self.assert_equals(deb, get_package_type(format = 'deb'))
        self.assert_equals(udeb, get_package_type(format = 'udeb'))
        self.assert_equals(dsc, get_package_type(format = 'dsc'))
        self.assert_equals(srpm, get_package_type(format = 'srpm'))
        self.assert_equals(rpm, get_package_type(format = 'rpm'))

        try:
            get_package_type(filename = 'a')
        except UnknownPackageTypeError:
            pass
        else:
            self.fail('"a" is an invalid filetype')

        try:
            get_package_type(format = 'a')
        except UnknownPackageTypeError:
            pass
        else:
            self.fail('"a" is an invalid package format')