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