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)
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'
# ~ }

View File

@ -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