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