import sys import click import logging.config logging.config.dictConfig({ 'version': 1, 'formatters': { 'verbose': { 'format': '%(name)s: %(message)s' } }, 'handlers': { 'console': { 'level': 'DEBUG', 'class': 'logging.StreamHandler', 'formatter': 'verbose', }, }, 'loggers': { 'zeep.transports': { 'level': 'DEBUG', 'propagate': True, 'handlers': ['console'], }, } }) @click.command() @click.option('--nit', required=True) @click.option('--nit-proveedor', required=True) @click.option('--id-software', required=True) @click.option('--username', required=True) @click.option('--password', required=True) def consultaResolucionesFacturacion(nit, nit_proveedor, id_software, username, password): from facho.fe.client import dian client_dian = dian.DianClient(username, password) resp = client_dian.request(dian.ConsultaResolucionesFacturacionPeticion( nit, nit_proveedor, id_software )) print(str(resp)) @click.command() @click.option('--private-key', required=True) @click.option('--public-key', required=True) @click.option('--password') @click.argument('filename', required=True) @click.argument('zipfile', type=click.Path(exists=True)) def SendTestSetAsync(private_key, public_key, password, filename, zipfile): from facho.fe.client import dian client = dian.DianSignatureClient(private_key, public_key, password=password) resp = client.request(dian.SendTestSetAsync( filename, open(zipfile, 'r').read().encode('utf-8') )) print(resp) @click.command() @click.option('--private-key', type=click.Path(exists=True)) @click.option('--passphrase') @click.argument('scriptname', type=click.Path(exists=True), required=True) def generate_invoice(private_key, passphrase, scriptname): """ imprime xml en pantalla. SCRIPTNAME espera def invoice() -> form.Invoice def extensions(form.Invoice): -> List[facho.FachoXMLExtension] """ import importlib.util spec = importlib.util.spec_from_file_location('invoice', scriptname) module = importlib.util.module_from_spec(spec) spec.loader.exec_module(module) import facho.fe.form as form from facho import fe invoice = module.invoice() invoice.calculate() xml = form.DIANInvoiceXML(invoice) extensions = module.extensions(invoice) for extension in extensions: xml.add_extension(extension) if private_key: signer = fe.DianXMLExtensionSigner(private_key, passphrase=passphrase) xml.add_extension(signer) print(str(xml)) @click.group() def main(): pass main.add_command(consultaResolucionesFacturacion) main.add_command(SendTestSetAsync) main.add_command(generate_invoice)