facho/cli.py: nuevo comando generate-invoice, el permite crear imprimir una factura xml desde un script

FossilOrigin-Name: ee656a60b05a0efb5c1f4e3ea517e28e01d7cd6b95fc5074c9f7cbf70b16c1d6
This commit is contained in:
bit4bit@riseup.net 2020-05-25 17:52:47 +00:00
parent a369585f73
commit 95b79407a8
4 changed files with 50 additions and 4 deletions

View File

@ -53,10 +53,44 @@ def SendTestSetAsync(private_key, public_key, password, filename, zipfile):
client = dian.DianSignatureClient(private_key, public_key, password=password)
resp = client.request(dian.SendTestSetAsync(
filename, zipfile.read().encode('utf-8')
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()
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)
xml.attach_extensions()
print(str(xml))
@click.group()
def main():
@ -64,3 +98,4 @@ def main():
main.add_command(consultaResolucionesFacturacion)
main.add_command(SendTestSetAsync)
main.add_command(generate_invoice)

View File

@ -6,6 +6,12 @@ from lxml.etree import Element, SubElement, tostring
import re
class FachoXMLExtension:
def build(self, fachoxml):
raise NotImplementedError
class LXMLBuilder:
"""
extrae la manipulacion de XML

View File

@ -1,7 +1,7 @@
# This file is part of facho. The COPYRIGHT file at the top level of
# this repository contains the full copyright notices and license terms.
from ..facho import FachoXML
from ..facho import FachoXML, FachoXMLExtension
import xmlsig
import xades
from datetime import datetime
@ -40,7 +40,7 @@ class FeXML(FachoXML):
class DianXMLExtensionSoftwareSecurityCode:
class DianXMLExtensionSoftwareSecurityCode(FachoXMLExtension):
# RESOLUCION 0001: pagina 535
def __init__(self, id_software: str, pin: str, invoice_ident: str):
@ -56,7 +56,8 @@ class DianXMLExtensionSoftwareSecurityCode:
return dian_path, m.hexdigest()
class DianXMLExtensionSigner:
class DianXMLExtensionSigner(FachoXMLExtension):
# RESOLUCION 0001: pagina 516
POLICY_ID = 'https://facturaelectronica.dian.gov.co/politicadefirma/v2/politicadefirmav2.pdf'
POLICY_NAME = 'Dian'

View File

@ -45,6 +45,10 @@ setup(
license="GNU General Public License v3",
long_description=readme + '\n\n' + history,
include_package_data=True,
package_data = {
# If any package contains *.txt or *.rst files, include them:
'': ['*.gc']
},
keywords='facho',
name='facho',
packages=find_packages(exclude=("tests",)),