Se agrega soporte para rangos de fechas y últimos días

This commit is contained in:
Mauricio Baeza 2021-07-30 22:46:25 -05:00
commit d6b1125968
4 changed files with 68 additions and 13 deletions

View File

@ -1,6 +1,12 @@
# Lista de cambios # Lista de cambios
## v 0.3.0 [30-Jul-21]
---
* Se agrega soporte para consultar por los últimos X días
* Se agrega soporte para consultar por rangos de fechas
## v 0.2.1 [16-Jul-21] ## v 0.2.1 [16-Jul-21]
--- ---
* Fix - Issue #1 * Fix - Issue #1

View File

@ -1 +1 @@
0.2.1 0.3.0

View File

@ -41,13 +41,26 @@ def _process_command_line_arguments():
parser.add_argument('-fn', '--fiel-nombre', help=help, default='fiel') parser.add_argument('-fn', '--fiel-nombre', help=help, default='fiel')
help = "Descargar por Tipo: t=todos(default), e=emitidas, r=recibidas" help = "Descargar por Tipo: t=todos(default), e=emitidas, r=recibidas"
parser.add_argument('-t', '--tipo', help=help, dest='type', default='t', choices=['t', 'e', 'r']) parser.add_argument('-t', '--tipo', help=help,
dest='type', default='t', choices=['t', 'e', 'r'])
help = "Año de la descarga entre 2014 y el año actual (predeterminado)." help = "Año de la descarga entre 2014 y el año actual (predeterminado)."
parser.add_argument('-a', '--año', help=help, dest='year', default=year, type=int, choices=range(2014, year+1)) parser.add_argument('-a', '--año', help=help,
dest='year', default=year, type=int, choices=range(2014, year+1))
help = "Mes de la descarga, el mes actual es el predeterminado" help = "Mes de la descarga, el mes actual es el predeterminado"
parser.add_argument('-m', '--mes', help=help, dest='month', default=0, type=int, choices=range(13)) parser.add_argument('-m', '--mes', help=help,
dest='month', default=0, type=int, choices=range(13))
help = "Día de la descarga, de forma predeterminada no se usa" help = "Día de la descarga, de forma predeterminada no se usa"
parser.add_argument('-d', '--dia', help=help, dest='day', default=0, type=int, choices=range(32)) parser.add_argument('-d', '--dia', help=help,
dest='day', default=0, type=int, choices=range(32))
help = "Intervalo de días a partir de la fecha actual y hacia a atras"
parser.add_argument('-ud', '--ultimos-dias', help=help,
dest='last_days', default=0, type=int, choices=range(30))
help = "Fecha inicial AAAA-MM-DD"
parser.add_argument('-fi', '--fecha-inicial', help=help,
dest='date_start', default='')
help = "Fecha final AAAA-MM-DD"
parser.add_argument('-ff', '--fecha-final', help=help,
dest='date_end', default='')
help = 'Solicitar descarga' help = 'Solicitar descarga'
parser.add_argument('-sd', '--solicitar-descarga', help=help, parser.add_argument('-sd', '--solicitar-descarga', help=help,
@ -59,9 +72,11 @@ def _process_command_line_arguments():
parser.add_argument('-da', '--descargar-archivos', help=help, parser.add_argument('-da', '--descargar-archivos', help=help,
action='store_true', default=False, required=False) action='store_true', default=False, required=False)
help = 'ID de solicitud' help = 'ID de solicitud'
parser.add_argument('-id', '--id-solicitud', dest='id_request', help=help, default='') parser.add_argument('-id', '--id-solicitud', dest='id_request',
help=help, default='')
help = 'ID archivo' help = 'ID archivo'
parser.add_argument('-ida', '--id-archivo', dest='id_file', help=help, default='') parser.add_argument('-ida', '--id-archivo', dest='id_file',
help=help, default='')
help = 'Ruta de descarga de archivos' help = 'Ruta de descarga de archivos'
parser.add_argument('-dd', '--directorio-descargas', dest='path_download', parser.add_argument('-dd', '--directorio-descargas', dest='path_download',
help=help, default='') help=help, default='')

View File

@ -3,7 +3,7 @@
import getpass import getpass
import uuid import uuid
from calendar import monthrange from calendar import monthrange
from datetime import datetime from datetime import datetime, timedelta
from pathlib import Path from pathlib import Path
from time import sleep from time import sleep
@ -123,6 +123,20 @@ def _get_cert(data):
cert = SATCertificate(cer, key, pem) cert = SATCertificate(cer, key, pem)
return cert return cert
def _to_date(str_date, end=False):
error = ''
dt = None
try:
parts = str_date.split('-')
if end:
dt = datetime(parts[0], parts[1], parts[2], 23, 59, 59)
else:
dt = datetime(parts[0], parts[1], parts[2], 0, 0, 0)
except Exception as e:
error = 'Fecha inválida'
return error, dt
def _validate_requests_args(args): def _validate_requests_args(args):
result, data = _validate_fiel_args(args) result, data = _validate_fiel_args(args)
@ -134,9 +148,6 @@ def _validate_requests_args(args):
log.error(msg) log.error(msg)
return False, {} return False, {}
# ~ cer = data['path_cer'].read_bytes()
# ~ key = data['path_enc'].read_bytes()
# ~ cert = SATCertificate(cer, key)
cert = _get_cert(data) cert = _get_cert(data)
if not cert.is_valid_time: if not cert.is_valid_time:
@ -150,14 +161,37 @@ def _validate_requests_args(args):
data['month'] = args.month data['month'] = args.month
data['day'] = args.day data['day'] = args.day
now = today()
if args.last_days:
date_start = now.replace(hour=0, minute=0, second=0, microsecond=0) \
- timedelta(days=args.last_days)
date_end = now.replace(hour=23, minute=59, second=59, microsecond=0)
data['date_start'] = date_start
data['date_end'] = date_end
return True, data
if args.date_start and args.date_end:
error, date_start = _to_date(args.date_start)
if error:
log.error(error)
return False, {}
error, date_end = _to_date(args.date_end, True)
if error:
log.error(error)
return False, {}
data['date_start'] = date_start
data['date_end'] = date_end
return True, data
if data['day']: if data['day']:
if not validate_date(data['year'], data['month'], data['day']): if not validate_date(data['year'], data['month'], data['day']):
msg = 'Fecha inválida' msg = 'Fecha inválida'
log.error(msg) log.error(msg)
return False, {} return False, {}
now = today()
month1 = month2 = data['month'] month1 = month2 = data['month']
if month1 == 0: if month1 == 0:
month1 = 1 month1 = 1