feat: add agents/app
This commit is contained in:
		
							
								
								
									
										128
									
								
								agents/app/seller/catalog_tools.py
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										128
									
								
								agents/app/seller/catalog_tools.py
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,128 @@ | ||||
| from abc import ABC, abstractmethod | ||||
| import requests | ||||
| import json | ||||
|  | ||||
|  | ||||
| class CatalogAbstract(ABC): | ||||
|     @abstractmethod | ||||
|     def list_products(self): | ||||
|         """ | ||||
|         Lista todos los productos disponibles en el catálogo con su disponibilidad | ||||
|         """ | ||||
|         pass | ||||
|  | ||||
|     @abstractmethod | ||||
|     def search_products(self): | ||||
|         """ | ||||
|         Busca productos en el catálogo que coincidan con la consulta | ||||
|         """ | ||||
|         raise NotImplementedError | ||||
|  | ||||
|     @abstractmethod | ||||
|     def check_price(self): | ||||
|         """ | ||||
|         Verifica el precio de un producto específico | ||||
|         """ | ||||
|         raise NotImplementedError | ||||
|  | ||||
|     @abstractmethod | ||||
|     def check_availability(self): | ||||
|         """ | ||||
|         Verifica la disponibilidad de un producto espécifico | ||||
|         """ | ||||
|         raise NotImplementedError | ||||
|  | ||||
|     @abstractmethod | ||||
|     def get_product_details(self): | ||||
|         """ | ||||
|         Obtiene detalles completos de un producto | ||||
|         """ | ||||
|         raise NotImplementedError | ||||
|  | ||||
|     @abstractmethod | ||||
|     def list_tools(self): | ||||
|         """Retorna los metodos de esta clase en una lista""" | ||||
|         raise NotImplementedError | ||||
|  | ||||
|  | ||||
| class CatalogTrytonTools(CatalogAbstract): | ||||
|     def __init__(self, url, application_name, key, db): | ||||
|         self.tryton_url = url | ||||
|         self.application_name = application_name | ||||
|         self.tryton_db = db | ||||
|         self.tryton_key = key | ||||
|         self.base_url = "{}/{}/{}".format( | ||||
|             self.tryton_url, | ||||
|             self.tryton_db, | ||||
|             self.application_name, | ||||
|         ) | ||||
|  | ||||
|     def list_products(self) -> list: | ||||
|         """ | ||||
|         Lista todos los productos disponibles en el catálogo con su disponibilidad | ||||
|         """ | ||||
|         endpoint = f"{self.base_url}/products" | ||||
|         products = requests.get( | ||||
|             endpoint, | ||||
|             headers={ | ||||
|                 "Authorization": f"bearer {self.tryton_key}", | ||||
|             }, | ||||
|         ) | ||||
|  | ||||
|         return products.json() | ||||
|  | ||||
|     def search_products(self, product_name) -> list: | ||||
|         """ | ||||
|         Busca productos en el catálogo que coincidan con la consulta | ||||
|         """ | ||||
|  | ||||
|         endpoint = f"{self.base_url}/search_products/{product_name}" | ||||
|         products = requests.get( | ||||
|             endpoint, | ||||
|             headers={ | ||||
|                 "Authorization": f"bearer {self.tryton_key}", | ||||
|             }, | ||||
|         ) | ||||
|  | ||||
|         return products.json() | ||||
|  | ||||
|     def check_price(self, product_name): | ||||
|         """ | ||||
|         Verifica el precio de un producto específico | ||||
|         """ | ||||
|         products = self.search_products(product_name) | ||||
|  | ||||
|         return products.json() | ||||
|  | ||||
|     def check_availability(self, product_name): | ||||
|         """ | ||||
|         Verifica la disponibilidad de un producto espécifico | ||||
|         """ | ||||
|         keys = ["id", "name", "template"] | ||||
|         products = self.clean_keys_from_records( | ||||
|             self.search_products(product_name), keys | ||||
|         ) | ||||
|  | ||||
|         return products.json() | ||||
|  | ||||
|     def get_product_details(self, product_name): | ||||
|         """ | ||||
|         Obtiene detalles completos de un producto | ||||
|         """ | ||||
|         keys = ["id", "name", "description"] | ||||
|         products = self.search_products(product_name) | ||||
|  | ||||
|         return products.json() | ||||
|  | ||||
|     def list_tools(self): | ||||
|         """Retorna los metodos de esta clase en una lista""" | ||||
|         raise NotImplementedError | ||||
|  | ||||
|     def clean_keys_from_records(self, keys, records): | ||||
|         # Iterar sobre cada registro y eliminar las claves no deseadas | ||||
|         for record in records: | ||||
|             for clave in keys: | ||||
|                 record.pop(clave, None)  # Elimina la clave si existe | ||||
|  | ||||
|         # Mostrar el resultado | ||||
|         return json.dumps(records, indent=4, ensure_ascii=False) | ||||
		Reference in New Issue
	
	Block a user