From 00b077fc5b340a054db11155ff4a48421bc32c3c Mon Sep 17 00:00:00 2001 From: Mauricio Baeza Date: Wed, 14 Jul 2021 23:06:48 -0500 Subject: [PATCH] =?UTF-8?q?Consulta,=20verificaci=C3=B3n=20y=20descarga?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- source/cfdi-descarga.py | 9 ++--- source/sat/util.py | 73 +++++++++++++++++++++++++++++++++++++++-- 2 files changed, 73 insertions(+), 9 deletions(-) diff --git a/source/cfdi-descarga.py b/source/cfdi-descarga.py index 2606839..2c5d48c 100755 --- a/source/cfdi-descarga.py +++ b/source/cfdi-descarga.py @@ -21,6 +21,8 @@ def main(args): util.descargar_archivos(args) return + util.descargar(args) + return @@ -71,10 +73,3 @@ def _process_command_line_arguments(): if __name__ == '__main__': args = _process_command_line_arguments() main(args) - - -# ~ { - # ~ 'IdSolicitud': '307a22f0-1259-479c-96b1-2852f9072c58', - # ~ 'CodEstatus': '5000', - # ~ 'Mensaje': 'Solicitud Aceptada' -# ~ } diff --git a/source/sat/util.py b/source/sat/util.py index 8b93dbb..14b84d1 100644 --- a/source/sat/util.py +++ b/source/sat/util.py @@ -5,6 +5,7 @@ import uuid from calendar import monthrange from datetime import datetime from pathlib import Path +from time import sleep from .cfdi_cert import SATCertificate from .sat_web import SATWebService @@ -213,9 +214,15 @@ def _validate_download_args(args): log.error(msg) return False, {} + if not args.path_download: + msg = 'La ruta de descarga es requerida [-dd]' + log.error(msg) + return False, {} + data['cert'] = cert data['id'] = args.id_request data['id_file'] = args.id_file + data['path'] = args.path_download return True, data @@ -277,13 +284,75 @@ def descargar_archivos(args): if file_data is None: log.debug(result) else: - msg = f'Guardando: {f}.zip' + path_zip = join(data['path'], f'{f}.zip') + msg = f'Guardando: {path_zip}' log.info(msg) - with open(f"{f}.zip", 'wb') as f: + with open(path_zip, 'wb') as f: f.write(file_data) msg = f'\tArchivo guardado correctamente' log.info(msg) return +def _validate_args(args): + result, data = _validate_requests_args(args) + if not result: + return False, {} + + if not args.path_download: + msg = 'La ruta de descarga es requerida [-dd]' + log.error(msg) + return False, {} + + data['path'] = args.path_download + + return True, data + + +def descargar(args): + OK = '5000' + + result, data = _validate_args(args) + if not result: + return + + sat = SATWebService(data['cert']) + + if not sat.is_authenticate: + log.error(sat.error) + return + + result = sat.request_download(data) + if result['CodEstatus'] != OK: + log.error(result) + return + + data['id'] = result['IdSolicitud'] + while True: + result = sat.verify(data) + if result['EstadoSolicitud'] in ('1', '2'): + msg = 'Esperando un minuto para volver a verificar...' + log.info(msg) + sleep(60) + continue + + if result['EstadoSolicitud'] == '3': + for f in result['files']: + data['id_file'] = f + result, file_data = sat.download(data) + if file_data is None: + log.debug(result) + else: + path_zip = join(data['path'], f'{f}.zip') + msg = f'Guardando: {path_zip}' + log.info(msg) + with open(path_zip, 'wb') as f: + f.write(file_data) + msg = f'\tArchivo guardado correctamente' + log.info(msg) + break + + log.error(result) + + return