Consulta, verificación y descarga

This commit is contained in:
Mauricio Baeza 2021-07-14 23:06:48 -05:00
parent 56ac8e20b8
commit 00b077fc5b
2 changed files with 73 additions and 9 deletions

View File

@ -21,6 +21,8 @@ def main(args):
util.descargar_archivos(args) util.descargar_archivos(args)
return return
util.descargar(args)
return return
@ -71,10 +73,3 @@ def _process_command_line_arguments():
if __name__ == '__main__': if __name__ == '__main__':
args = _process_command_line_arguments() args = _process_command_line_arguments()
main(args) main(args)
# ~ {
# ~ 'IdSolicitud': '307a22f0-1259-479c-96b1-2852f9072c58',
# ~ 'CodEstatus': '5000',
# ~ 'Mensaje': 'Solicitud Aceptada'
# ~ }

View File

@ -5,6 +5,7 @@ import uuid
from calendar import monthrange from calendar import monthrange
from datetime import datetime from datetime import datetime
from pathlib import Path from pathlib import Path
from time import sleep
from .cfdi_cert import SATCertificate from .cfdi_cert import SATCertificate
from .sat_web import SATWebService from .sat_web import SATWebService
@ -213,9 +214,15 @@ def _validate_download_args(args):
log.error(msg) log.error(msg)
return False, {} return False, {}
if not args.path_download:
msg = 'La ruta de descarga es requerida [-dd]'
log.error(msg)
return False, {}
data['cert'] = cert data['cert'] = cert
data['id'] = args.id_request data['id'] = args.id_request
data['id_file'] = args.id_file data['id_file'] = args.id_file
data['path'] = args.path_download
return True, data return True, data
@ -277,13 +284,75 @@ def descargar_archivos(args):
if file_data is None: if file_data is None:
log.debug(result) log.debug(result)
else: else:
msg = f'Guardando: {f}.zip' path_zip = join(data['path'], f'{f}.zip')
msg = f'Guardando: {path_zip}'
log.info(msg) log.info(msg)
with open(f"{f}.zip", 'wb') as f: with open(path_zip, 'wb') as f:
f.write(file_data) f.write(file_data)
msg = f'\tArchivo guardado correctamente' msg = f'\tArchivo guardado correctamente'
log.info(msg) log.info(msg)
return 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