def get_dependencies_for_product(self, product: BaseProduct): """ для онкретного продукта получить его зависимости, без рекурсии :param product: :return: """ if not product: return None # logging.debug("Get dependency for '{0}'".format(product)) dependencies_names = product.get_dependencies() dependencies = ProductCollection() if not dependencies_names: # logging.debug("There are no dependencies for '{0}'".format(product)) pass else: for name in dependencies_names: if isinstance(name, list): name = self.get_first_or_installed(name) logging.debug("choice dependence '{0}'".format(name)) dependent_product = self.core.feed.get_product_or_exception( name) dependencies.add_product(dependent_product) return dependencies
def get_dependencies_for_product(self, product: BaseProduct): """ для онкретного продукта получить его зависимости, без рекурсии :param product: :return: """ if not product: return None #logging.debug("Get dependency for '{0}'".format(product)) dependencies_names = product.get_dependencies() dependencies = ProductCollection() if not dependencies_names: #logging.debug("There are no dependencies for '{0}'".format(product)) pass else: for name in dependencies_names: if isinstance(name, list): name = self.get_first_or_installed(name) logging.debug("choice dependence '{0}'".format(name)) dependent_product = self.core.feed.get_product_or_exception(name) dependencies.add_product(dependent_product) return dependencies
def _get_products_with_dependencies(self, products: ProductCollection, result: ProductCollection): """ вспомогательная рекурсивная функция для поиска зависимостей :param products: :param result: :return: """ if not products: logging.debug("products is None") return for p in products: if not result.product_in_coll(p): result.add_product(p) logging.debug("Added '{0}'".format( p.get_product_with_version())) dependencies = self.get_dependencies_for_product(p) if dependencies and len(dependencies) > 0: # recursion ! for dep in dependencies: logging.debug("\tdependant from: '{0}'".format( dep.get_product_with_version())) self._get_products_with_dependencies(dependencies, result)
def _get_products_with_dependencies(self, products: ProductCollection, result: ProductCollection): """ вспомогательная рекурсивная функция для поиска зависимостей :param products: :param result: :return: """ if not products: logging.debug("products is None") return for p in products: if not result.product_in_coll(p): result.add_product(p) logging.debug("Added '{0}'".format(p.get_product_with_version())) dependencies = self.get_dependencies_for_product(p) if dependencies and len(dependencies) > 0: # recursion ! for dep in dependencies: logging.debug("\tdependant from: '{0}'".format(dep.get_product_with_version())) self._get_products_with_dependencies(dependencies, result)