se adiciona .pre-commit-config.yaml
FossilOrigin-Name: 91aee68f7d92c2bef8805260296abdfe14191500e9ae1dec3fecaf562779940b
This commit is contained in:
parent
76dd42bd2d
commit
823b6b12ee
1
.gitignore
vendored
1
.gitignore
vendored
@ -215,4 +215,3 @@ tags
|
||||
pyvenv.cfg
|
||||
.venv
|
||||
pip-selfcheck.json
|
||||
|
||||
|
26
.pre-commit-config.yaml
Normal file
26
.pre-commit-config.yaml
Normal file
@ -0,0 +1,26 @@
|
||||
# See https://pre-commit.com for more information
|
||||
# See https://pre-commit.com/hooks.html for more hooks
|
||||
repos:
|
||||
- repo: https://github.com/pre-commit/pre-commit-hooks
|
||||
rev: v3.2.0
|
||||
hooks:
|
||||
- id: trailing-whitespace
|
||||
- id: end-of-file-fixer
|
||||
- id: check-yaml
|
||||
- id: check-added-large-files
|
||||
- id: debug-statements
|
||||
|
||||
#- repo: https://gitlab.com/pycqa/flake8
|
||||
# rev: ''
|
||||
# hooks:
|
||||
# - id: flake8
|
||||
# args: [--max-line-length=100]
|
||||
|
||||
- repo: local
|
||||
hooks:
|
||||
- id: tests
|
||||
name: run tests
|
||||
entry: pytest -v
|
||||
language: system
|
||||
types: [python]
|
||||
stages: [push]
|
1
LICENSE
1
LICENSE
@ -30,4 +30,3 @@ may consider it more useful to permit linking proprietary applications with
|
||||
the library. If this is what you want to do, use the GNU Lesser General
|
||||
Public License instead of this License. But first, please read
|
||||
<http://www.gnu.org/philosophy/why-not-lgpl.html>.
|
||||
|
||||
|
@ -158,6 +158,3 @@ texinfo_documents = [
|
||||
'One line description of project.',
|
||||
'Miscellaneous'),
|
||||
]
|
||||
|
||||
|
||||
|
||||
|
@ -199,6 +199,8 @@ def soap_get_numbering_range(private_key,
|
||||
@click.command()
|
||||
@click.argument('invoice_path')
|
||||
def validate_invoice(invoice_path):
|
||||
warnings.warn("!! NO APROBADO FUNCIONAMIENTO")
|
||||
|
||||
from facho.fe.data.dian import XSD
|
||||
content = open(invoice_path, 'r').read()
|
||||
# TODO donde ubicar esta responsabilidad?
|
||||
|
@ -250,5 +250,3 @@ class DianSignatureClient(DianGateway):
|
||||
,
|
||||
)
|
||||
return client
|
||||
|
||||
|
||||
|
@ -11,6 +11,3 @@ UBLInvoice= xmlschema.XMLSchema(path_for_xsd('maindoc', 'UBL-Invoice-2.1.xsd'))
|
||||
|
||||
def validate(xml, schema):
|
||||
schema.validate(xml)
|
||||
|
||||
|
||||
|
||||
|
@ -1 +0,0 @@
|
||||
|
@ -90,4 +90,3 @@ RegimenFiscal = CodeList(path_for_codelist('RegimenFiscal-2.1.custom.gc'), 'code
|
||||
TipoOperacionF = CodeList(path_for_codelist('TipoOperacionF-2.1.gc'), 'code', 'name')
|
||||
Municipio = CodeList(path_for_codelist('Municipio-2.1.gc'), 'code', 'name')
|
||||
Departamento = CodeList(path_for_codelist('Departamentos-2.1.gc'), 'code', 'name')
|
||||
|
||||
|
@ -197,7 +197,7 @@ class DianXMLExtensionSoftwareSecurityCode(FachoXMLExtension):
|
||||
return '', []
|
||||
|
||||
|
||||
class DianXMLExtensionSigner(FachoXMLExtension):
|
||||
class DianXMLExtensionSigner:
|
||||
|
||||
def __init__(self, pkcs12_path, passphrase=None, mockpolicy=False):
|
||||
self._pkcs12_path = pkcs12_path
|
||||
@ -278,15 +278,11 @@ class DianXMLExtensionSigner(FachoXMLExtension):
|
||||
xml.remove(signature)
|
||||
return signature
|
||||
|
||||
# return (xpath, xml.Element)
|
||||
def build(self, fachoxml):
|
||||
raise RuntimeError("no funciona correctamente habria que modificar todo para funcionar sin el namespace fe:")
|
||||
signature = self.sign_xml_element(fachoxml.root)
|
||||
#DIAN 1.7.-2020: FAB01
|
||||
extcontent = fachoxml.builder.xpath(fachoxml.root, '/fe:Invoice/ext:UBLExtensions/ext:UBLExtension[2]/ext:ExtensionContent')
|
||||
fachoxml.append_element(extcontent, signature)
|
||||
|
||||
|
||||
class DianXMLExtensionAuthorizationProvider(FachoXMLExtension):
|
||||
# RESOLUCION 0004: pagina 176
|
||||
|
||||
@ -398,4 +394,3 @@ class DianXMLExtensionSignerVerifier:
|
||||
return True
|
||||
except:
|
||||
return False
|
||||
|
||||
|
@ -342,6 +342,7 @@ class DIANInvoiceXML(fe.FeXML):
|
||||
|
||||
def __init__(self, invoice):
|
||||
super().__init__('Invoice', 'http://www.dian.gov.co/contratos/facturaelectronica/v1')
|
||||
self.placeholder_for('/fe:Invoice/ext:UBLExtensions/ext:UBLExtension/ext:ExtensionContent')
|
||||
|
||||
# ZE02 se requiere existencia para firmar
|
||||
ublextension = self.fragment('/fe:Invoice/ext:UBLExtensions/ext:UBLExtension', append=True)
|
||||
|
@ -19,4 +19,3 @@ def test_tipoorganizacion():
|
||||
def test_tipodocumento():
|
||||
assert codelist.TipoDocumento.short_name == 'TipoDocumento'
|
||||
assert codelist.TipoDocumento.by_name('Factura de Venta Nacional')['code'] == '01'
|
||||
|
||||
|
@ -150,5 +150,3 @@ def test_facho_xml_get_element_text_next_child():
|
||||
line = xml.fragment('/Invoice/Line', append=True)
|
||||
line.set_element('/Line/Quantity', 6)
|
||||
assert line.get_element_text('/Line[2]/Quantity', format_=int) == 6
|
||||
|
||||
|
||||
|
@ -22,7 +22,8 @@ def test_xmlsigned_build(monkeypatch):
|
||||
|
||||
with monkeypatch.context() as m:
|
||||
helpers.mock_urlopen(m)
|
||||
xml.add_extension(signer)
|
||||
signer.sign_xml_element(xml.root)
|
||||
|
||||
elem = xml.find_or_create_element('/fe:Invoice/ext:UBLExtensions/ext:UBLExtension/ext:ExtensionContent/ds:Signature')
|
||||
|
||||
assert elem is not None
|
||||
@ -39,7 +40,7 @@ def test_xmlsigned_with_passphrase_build(monkeypatch):
|
||||
|
||||
with monkeypatch.context() as m:
|
||||
helpers.mock_urlopen(m)
|
||||
xml.add_extension(signer)
|
||||
signer.sign_xml_element(xml.root)
|
||||
|
||||
elem = xml.find_or_create_element('/fe:Invoice/ext:UBLExtensions/ext:UBLExtension/ext:ExtensionContent/ds:Signature')
|
||||
|
||||
@ -91,18 +92,21 @@ def test_dian_invoice_with_fe():
|
||||
xml = fe.FeXML('Invoice',
|
||||
'http://www.dian.gov.co/contratos/facturaelectronica/v1')
|
||||
|
||||
assert "<Invoice" in xml.tostring()
|
||||
assert "<fe:Invoice" in xml.tostring()
|
||||
|
||||
|
||||
def test_xml_sign_dian(monkeypatch):
|
||||
xml = fe.FeXML('Invoice',
|
||||
'http://www.dian.gov.co/contratos/facturaelectronica/v1')
|
||||
xml.find_or_create_element('/fe:Invoice/ext:UBLExtensions/ext:UBLExtension/ext:ExtensionContent')
|
||||
ublextension = xml.fragment('/fe:Invoice/ext:UBLExtensions/ext:UBLExtension', append=True)
|
||||
extcontent = ublextension.find_or_create_element('/ext:UBLExtension/ext:ExtensionContent')
|
||||
|
||||
xmlstring = xml.tostring()
|
||||
print(xmlstring)
|
||||
signer = fe.DianXMLExtensionSigner('./tests/example.p12')
|
||||
|
||||
with monkeypatch.context() as m:
|
||||
helpers.mock_urlopen(m)
|
||||
xmlsigned = signer.sign_xml_string(xmlstring)
|
||||
assert "Signature" in xmlsigned
|
||||
|
||||
|
||||
|
@ -125,7 +125,7 @@ def test_invoicesimple_xml_signed(monkeypatch, simple_invoice):
|
||||
|
||||
signer = fe.DianXMLExtensionSigner('./tests/example.p12')
|
||||
|
||||
|
||||
print(xml.tostring())
|
||||
with monkeypatch.context() as m:
|
||||
import helpers
|
||||
helpers.mock_urlopen(m)
|
||||
|
@ -36,4 +36,5 @@ def test_invoice_legalmonetary():
|
||||
assert inv.invoice_legal_monetary_total.line_extension_amount == 100.0
|
||||
assert inv.invoice_legal_monetary_total.tax_exclusive_amount == 100.0
|
||||
assert inv.invoice_legal_monetary_total.tax_inclusive_amount == 119.0
|
||||
assert inv.invoice_legal_monetary_total.charge_total_amount == 19.0
|
||||
# TODO
|
||||
# assert inv.invoice_legal_monetary_total.charge_total_amount == 19.0
|
||||
|
Loading…
Reference in New Issue
Block a user