Пример #1
0
    def find_package(self, **kwargs):
        results = PackageItem()
        added_packages = []
        object_items = {
            'metadata_keys': {
                0: 'id',
                1: 'repo',
                2: 'category',
                3: 'name',
                4: 'version',
                5: 'slot',
                6: 'arch',
            },
            'dependency_keys': {
                7: 'options',
                8: 'optional_depends_build',
                9: 'optional_depends_runtime',
                10: 'optional_depends_postmerge',
                11: 'optional_depends_conflict',
                12: 'static_depends_build',
                13: 'static_depends_runtime',
                14: 'static_depends_postmerge',
                15: 'static_depends_conflict'
            }
        }

        # Set the keywords
        name = kwargs.get("package_name", None)
        p_id = kwargs.get("package_id", None)
        if p_id is None and name is None:
            raise DatabaseAPIError("you must give package_name parameter.")
        repo = kwargs.get("package_repo", None)
        category = kwargs.get("package_category", None)
        version = kwargs.get("package_version", None)
        slot = kwargs.get("package_slot", None)
        available_arches = kwargs.get("available_arches", None)

        # Get the package query
        package_query = self.database.find_package(
            package_id=p_id,
            package_repo=repo,
            package_category=category,
            package_name=name,
            package_version=version,
            package_slot=slot,
            package_available_arches=available_arches,
        )

        # Create a LCollect object
        pkg_obj = LCollect()

        # Add the packages to the object
        for package in package_query:
            # [0] => repo, [1] => category [2] => name, [3] => version, [6] => arch
            if not (package[1], package[2], package[3], package[4],
                    package[6]) in added_packages:
                added_packages.append((package[1], package[2], package[3],
                                       package[4], package[6]))
            else:
                continue
            for index, item in object_items['metadata_keys'].iteritems():
                setattr(pkg_obj, item, package[index])

            for index, item in object_items['dependency_keys'].iteritems():
                setattr(pkg_obj, item, pickle.loads(str(package[index])))

            pkg_obj.pk = pkg_obj.category + "/" + pkg_obj.name + "/" + pkg_obj.slot
            results.add(pkg_obj)

            # Delete the object to prevent overrides
            del pkg_obj
            # Create it again
            pkg_obj = LCollect()

        return results