from . import BASIC, COMFORT, EXTENDED, NS_RAM
from .elements import Element
from .fields import (
- CurrencyField,
- DateTimeField,
- DecimalField,
- IndicatorField,
- MultiField,
- QuantityField,
- StringField,
- MultiCurrencyField,
+ CurrencyField, DateTimeField, DecimalField, IndicatorField,
+ MultiCurrencyField, MultiField, QuantityField, StringField,
)
_d="Grund der Steuerbefreiung (Code)",
)
tax_point_date = DateTimeField(
- NS_RAM,
- "TaxPointDate",
- required=False,
- profile=COMFORT
+ NS_RAM, "TaxPointDate", required=False, profile=COMFORT
)
due_date_type_code = StringField(
NS_RAM,
id = StringField(
NS_RAM, "ID", required=True, profile=EXTENDED, _d="Buchungsreferenz"
)
- type_code = StringField(
- NS_RAM, "TypeCode", required=True, profile=EXTENDED
- )
+ type_code = StringField(NS_RAM, "TypeCode", required=True, profile=EXTENDED)
class Meta:
namespace = NS_RAM
NS_RAM, "TaxTotalAmount", profile=EXTENDED, _d="Steuergesamtbetrag"
)
rounding_amount = DecimalField(
- NS_RAM, "RoundingAmount", required=False, profile=COMFORT,
+ NS_RAM,
+ "RoundingAmount",
+ required=False,
+ profile=COMFORT,
)
grand_total = CurrencyField(
NS_RAM, "GrandTotalAmount", required=True, profile=BASIC, _d="Bruttosumme"
from . import BASIC, EXTENDED, NS_RAM
from .elements import Element
from .fields import DateTimeField, Field, StringField
-from .party import ShipFromTradeParty, ShipToTradeParty, UltimateShipToTradeParty
-from .references import DeliveryNoteReferencedDocument, DespatchAdviceReferencedDocument
+from .party import (
+ ShipFromTradeParty, ShipToTradeParty, UltimateShipToTradeParty,
+)
+from .references import (
+ DeliveryNoteReferencedDocument, DespatchAdviceReferencedDocument,
+)
class SupplyChainEvent(Element):
import xml.etree.cElementTree as ET
from drafthorse.models.note import IncludedNote
-from . import BASIC, EXTENDED, NS_RAM, NS_UDT, NS_RSM, NS_QDT, NS_A
+
+from . import BASIC, EXTENDED, NS_A, NS_QDT, NS_RAM, NS_RSM, NS_UDT
from .elements import Element
from .fields import (
- DateTimeField,
- Field,
- IndicatorField,
- MultiField,
- MultiStringField,
+ DateTimeField, Field, IndicatorField, MultiField, MultiStringField,
StringField,
)
from .trade import TradeTransaction
from decimal import Decimal
from drafthorse.utils import validate_xml
+
from . import NS_UDT
from .container import Container
from .fields import Field
self.to_etree(), "utf-8"
)
return validate_xml(xmlout=xml, schema=schema)
-
+
def __setattr__(self, key, value):
- if not hasattr(self, key) and not key.startswith("_") and not key in ("required",):
- raise AttributeError(f"Element {type(self)} has no attribute '{key}'. If you set it, it would not be included in the output.")
+ if (
+ not hasattr(self, key)
+ and not key.startswith("_")
+ and not key in ("required",)
+ ):
+ raise AttributeError(
+ f"Element {type(self)} has no attribute '{key}'. If you set it, it would not be included in the output."
+ )
return super().__setattr__(key, value)
def from_etree(self, root):
from decimal import Decimal
from . import BASIC
-from .container import Container, CurrencyContainer, IDContainer, StringContainer
+from .container import (
+ Container, CurrencyContainer, IDContainer, StringContainer,
+)
class Field:
line_two = StringField(NS_RAM, "LineTwo", required=False, profile=BASIC)
line_three = StringField(NS_RAM, "LineThree", required=False, profile=BASIC)
city_name = StringField(NS_RAM, "CityName", required=False, profile=BASIC)
- country_subdivision = StringField(NS_RAM, "CountrySubDivisionName", required=False, profile=EXTENDED)
+ country_subdivision = StringField(
+ NS_RAM, "CountrySubDivisionName", required=False, profile=EXTENDED
+ )
country_id = StringField(NS_RAM, "CountryID", required=False, profile=BASIC)
class Meta:
from . import BASIC, COMFORT, EXTENDED, NS_RAM
from .elements import Element
from .fields import (
- DateTimeField,
- DecimalField,
- Field,
- MultiStringField,
- QuantityField,
- StringField,
- MultiCurrencyField,
+ DateTimeField, DecimalField, Field, MultiCurrencyField, MultiStringField,
+ QuantityField, StringField,
)
from . import COMFORT, EXTENDED, NS_RAM
from .elements import Element
-from .fields import ClassificationField, IDField, MultiField, QuantityField, StringField
+from .fields import (
+ ClassificationField, IDField, MultiField, QuantityField, StringField,
+)
class ProductCharacteristic(Element):
from . import COMFORT, EXTENDED, NS_RAM
from .elements import Element
-from .fields import DirectDateTimeField, StringField, BinaryObjectField
+from .fields import BinaryObjectField, DirectDateTimeField, StringField
class ProcuringProjectType(Element):
)
uri_id = StringField(NS_RAM, "URIID", required=False, profile=EXTENDED)
line_id = StringField(NS_RAM, "LineID", required=False, profile=EXTENDED)
- type_code = StringField(
- NS_RAM, "TypeCode", required=False, profile=EXTENDED
- )
- name = StringField(
- NS_RAM, "Name", required=False, profile=EXTENDED
- )
+ type_code = StringField(NS_RAM, "TypeCode", required=False, profile=EXTENDED)
+ name = StringField(NS_RAM, "Name", required=False, profile=EXTENDED)
date_time_string = DirectDateTimeField(
NS_RAM, "FormattedIssueDateTime", required=False, profile=COMFORT
)
from . import BASIC, COMFORT, EXTENDED, NS_RAM, NS_RSM
from .accounting import (
- ApplicableTradeTax,
- AppliedTradeTax,
- MonetarySummation,
- ReceivableAccountingAccount,
- TradeAllowanceCharge,
- BillingSpecifiedPeriod,
- SellerOrderReferencedDocument,
+ ApplicableTradeTax, AppliedTradeTax, BillingSpecifiedPeriod,
+ MonetarySummation, ReceivableAccountingAccount,
+ SellerOrderReferencedDocument, TradeAllowanceCharge,
)
from .delivery import TradeDelivery
from .elements import Element
-from .fields import DecimalField, Field, MultiField, StringField, DateTimeField
+from .fields import DateTimeField, DecimalField, Field, MultiField, StringField
from .party import (
- BuyerTradeParty,
- EndUserTradeParty,
- InvoiceeTradeParty,
- PayeeTradeParty,
- SellerTradeParty,
- SellerTaxRepresentativeTradeParty, InvoicerTradeParty,
+ BuyerTradeParty, EndUserTradeParty, InvoiceeTradeParty, InvoicerTradeParty,
+ PayeeTradeParty, SellerTaxRepresentativeTradeParty, SellerTradeParty,
+)
+from .payment import (
+ PaymentMeans, PaymentTerms, TaxApplicableTradeCurrencyExchange,
)
-from .payment import PaymentMeans, PaymentTerms, TaxApplicableTradeCurrencyExchange
from .references import (
- AdditionalReferencedDocument,
- ContractReferencedDocument,
- UltimateCustomerOrderReferencedDocument,
- ProcuringProjectType,
- InvoiceReferencedDocument, BuyerOrderReferencedDocument,
+ AdditionalReferencedDocument, BuyerOrderReferencedDocument,
+ ContractReferencedDocument, InvoiceReferencedDocument,
+ ProcuringProjectType, UltimateCustomerOrderReferencedDocument,
)
from .tradelines import LineItem
profile=EXTENDED,
_d="Detailinformationen zur Buchungsreferenz",
)
- advance_payment = MultiField(
- AdvancePayment, required=False, profile=EXTENDED
- )
+ advance_payment = MultiField(AdvancePayment, required=False, profile=EXTENDED)
invoice_referenced_document = Field(
InvoiceReferencedDocument, required=False, profile=BASIC
)
from . import BASIC, COMFORT, EXTENDED, NS_RAM
from .accounting import (
- AccountingAccount,
- ApplicableTradeTax,
- BillingSpecifiedPeriod,
- TradeAllowanceCharge,
- ReceivableAccountingAccount,
+ AccountingAccount, ApplicableTradeTax, BillingSpecifiedPeriod,
+ ReceivableAccountingAccount, TradeAllowanceCharge,
)
from .delivery import SupplyChainEvent
from .elements import Element
-from .fields import DecimalField, Field, MultiField, QuantityField, StringField, DateTimeField
+from .fields import (
+ DateTimeField, DecimalField, Field, MultiField, QuantityField, StringField,
+)
from .note import IncludedNote
from .party import ShipToTradeParty, UltimateShipToTradeParty
from .product import TradeProduct
from .references import (
- LineAdditionalReferencedDocument,
- LineBuyerOrderReferencedDocument,
- LineContractReferencedDocument,
- LineUltimateCustomerOrderReferencedDocument,
- LineDeliveryNoteReferencedDocument,
- LineDespatchAdviceReferencedDocument,
+ InvoiceReferencedDocument, LineAdditionalReferencedDocument,
+ LineBuyerOrderReferencedDocument, LineContractReferencedDocument,
+ LineDeliveryNoteReferencedDocument, LineDespatchAdviceReferencedDocument,
LineReceivingAdviceReferencedDocument,
- InvoiceReferencedDocument,
+ LineUltimateCustomerOrderReferencedDocument,
)
import datetime
import os
from io import BytesIO
-
from lxml import etree
from PyPDF2 import PdfReader, PdfWriter
from PyPDF2.generic import (
- ArrayObject,
- DecodedStreamObject,
- DictionaryObject,
- NameObject,
+ ArrayObject, DecodedStreamObject, DictionaryObject, NameObject,
createStringObject,
)
fx_conformance_level.text = level
xmp_file = os.path.join(
- os.path.dirname(__file__), "schema", "ZUGFeRD2p2_extension_schema.xmp".format(level)
+ os.path.dirname(__file__),
+ "schema",
+ "ZUGFeRD2p2_extension_schema.xmp".format(level),
)
# Reason for defining a parser below:
# http://lxml.de/FAQ.html#why-doesn-t-the-pretty-print-option-reformat-my-xml-output
xml_str = etree.tostring(
root, pretty_print=True, encoding="UTF-8", xml_declaration=False
)
- head = u'<?xpacket begin="\ufeff" id="W5M0MpCehiHzreSzNTczkc9d"?>'.encode("utf-8")
- tail = u'<?xpacket end="w"?>'.encode("utf-8")
+ head = '<?xpacket begin="\ufeff" id="W5M0MpCehiHzreSzNTczkc9d"?>'.encode("utf-8")
+ tail = '<?xpacket end="w"?>'.encode("utf-8")
xml_final_str = head + xml_str + tail
return xml_final_str
fname_obj = createStringObject("factur-x.xml")
filespec_dict = DictionaryObject(
{
- NameObject("/AFRelationship"): NameObject("/Data" if facturx_level in ("BASIC-WL", "MINIMUM") else "/Alternative"),
+ NameObject("/AFRelationship"): NameObject(
+ "/Data" if facturx_level in ("BASIC-WL", "MINIMUM") else "/Alternative"
+ ),
NameObject("/Desc"): createStringObject(
"Invoice metadata conforming to ZUGFeRD standard (http://www.ferd-net.de/front_content.php?idcat=231&lang=4)"
),
import sys
from codecs import open
from os import path
-
from setuptools import find_packages, setup
from drafthorse import version
def test_readme_construction_example():
doc = Document()
- doc.context.guideline_parameter.id = "urn:cen.eu:en16931:2017#conformant#urn:factur-x.eu:1p0:extended"
+ doc.context.guideline_parameter.id = (
+ "urn:cen.eu:en16931:2017#conformant#urn:factur-x.eu:1p0:extended"
+ )
doc.header.id = "RE1337"
doc.header.type_code = "380"
doc.header.name = "RECHNUNG"
doc.trade.settlement.monetary_summation.due_amount = Decimal("999.00")
xml = doc.serialize(schema="FACTUR-X_EXTENDED")
- with open(os.path.join(os.path.dirname(__file__), "samples", "Empty.pdf"), "rb") as original_file:
- assert attach_xml(original_file.read(), xml, 'EXTENDED')
+ with open(
+ os.path.join(os.path.dirname(__file__), "samples", "Empty.pdf"), "rb"
+ ) as original_file:
+ assert attach_xml(original_file.read(), xml, "EXTENDED")
+import lxml.etree
import os
-from difflib import unified_diff
-
import pytest
-import lxml.etree
+from difflib import unified_diff
from drafthorse.models.document import Document
from drafthorse.utils import prettify, validate_xml
-samples = [f for f in os.listdir(os.path.join(os.path.dirname(__file__), "samples")) if f.endswith(".xml")]
+samples = [
+ f
+ for f in os.listdir(os.path.join(os.path.dirname(__file__), "samples"))
+ if f.endswith(".xml")
+]
def _diff_xml(a, b):