#!/usr/bin/env python import logging from pathlib import Path from uuid import UUID from .cfdi_cert import SATCertificate from .portal_sat import PortalSAT from conf import RUTA_FIEL, NOMBRE_FIEL LOG_FORMAT = '%(asctime)s - %(levelname)s - %(message)s' LOG_DATE = '%d/%m/%Y %H:%M:%S' logging.addLevelName(logging.ERROR, '\033[1;41mERROR\033[1;0m') logging.addLevelName(logging.DEBUG, '\x1b[33mDEBUG\033[1;0m') logging.addLevelName(logging.INFO, '\x1b[32mINFO\033[1;0m') logging.basicConfig(level=logging.DEBUG, format=LOG_FORMAT, datefmt=LOG_DATE) log = logging.getLogger(__name__) def validate_uuid(value): try: UUID(value) return True except ValueError: return False def validate_fiel(rfc): cert = {} error = '' fiel_cer = f'{NOMBRE_FIEL}.cer' fiel_pem = f'{NOMBRE_FIEL}.pem' path_fiel = Path(RUTA_FIEL) / rfc.lower() path_fiel_cer = path_fiel / fiel_cer path_fiel_pem = path_fiel / fiel_pem if not path_fiel_cer.exists(): error = f'No se encontró el archivo: {path_fiel_cer}' return cert, error if not path_fiel_pem.exists(): error = f'No se encontró el archivo: {path_fiel_pem}' return cert, error cert = SATCertificate(str(path_fiel_cer), str(path_fiel_pem)) return cert, error def get_uuid(rfc, tipo, cfdi_uuid): data = {'error': '', 'xml': ''} if not validate_uuid(cfdi_uuid): data['error'] = 'UUID inválido' return data if not tipo.lower() in ('e', 'r'): data['error'] = 'Tipo inválido, debe ser e o r' return data cert, error = validate_fiel(rfc) if not cert: data['error'] = error return data try: sat = PortalSAT() sat.login(cert) if not sat.is_connect: sat.logout() data['error'] = sat.error log.error(sat.error) return data data = sat.get_uuid(tipo, cfdi_uuid) sat.logout() except Exception as e: log.error(e) data['xml'] = '' data['error'] = str(e) return data