Fixes
- Fix typing annotations deprecation warning in Python 3.13 (#1077)
Features
- Allow generators as array elements (#1074)
Features
- Improve XML parsing performance on union elements with fixed attributes (#1066)
- Skip optional and nillable elements on XML Serializer (#1066)
Fixes
- Reset attr types derived from missing simple types (#1062)
Fixes
- Ruff check command typo breaks generator with v0.5.0 (#1061)
Features
- Add class and field info in parsing warnings (#1036)
- Remove whitespace from bytes encoded xml strings (#1037)
- Improve codegen performance (#1043)
Fixes
- JSON serializer fails on derived elements (#1053)
- Update typing-extensions minimum version (#1039)
- Avoid using not-threadsafe warnings.catch_warning (#1042)
- Unnest classes doesn't update inner classes recursively (#1047)
- Restore support for optional lists (#1053)
Features
- Rewrite TreeSerializer, drop support for native python ElementTree (#1032)
- Validate fields fixed values (#1013)
- Detect optional fields in dict mapper
- Refactor typing annotations analyze process
- Generate ForwardRef() instead of Type[]
Fixes
- Allow soap client config subclassing (#1010)
- Avoid recursive error on nested group references (#1016)
- Add warning for same module designation (#1018)
Features
- Add xml and lxml tree serializers (#975)
- Capture namespace prefixes in user dicts (#978)
- Add cli option to generate wrapper fields (#982)
- Support wrapper fields in JSON data bindings (#982)
- Use abstract suffixes to resolve class name conflicts (#985)
- Add the version number in the cli cache key (#990)
- Use unicodedata.name for attrs with only special characters (#993)
- Add src code excerpts on ruff errors (#996)
- Detect circular imports and raise appropriate error (#999)
- Add support for Python 3.13 (#1001)
- Add cli debug messages with performance stats
Fixes
- Use deepcopy to clone codegen models (#980)
- Generate type hints for compound fields with token elements (#997)
- Protect prohibited attrs from turning into lists (#998)
- Convert child attr to list when parent is list (#998)
Fixes
- Unnest class with circular reference (#974)
Features
- Avoid flattening root elements (#945)
- Avoid generating ambiguous choices (#946)
- Added various type reference validations (#966, #967, #968)
- Calculate circular references more accurately (#969)
- Prettify codegen errors (#970)
- Use Ruff to sort imports (#972)
Fixes
- Move ruff format in the code generator (#964)
- Added Dict encoder/decoder (#921)
- Deprecated Serializer config pretty_print/pretty_print_indentation (#942)
- Fixed lxml event writer to respect the encoding configuration (#940)
- Migrated documentation to mkdocs with markdown
- Refactored project docstrings
- Fixed XmlParser to ignore xsi attrs when fail on unknown attributes is enabled (#846)
- Fixed parsing mandatory byte elements with no value (#873)
- Fixed issue in json binding with union fields (#864)
- Fixed PycodeSerializer to escape unicode characters in string values (#877)
- Fixed compound field choices with forward references (#886)
- Fixed google style docstrings to add missing colon (#884)
- Fixed deprecation warnings for datetime.datetime.utcnow()
- Fixed XmlSerializer to ignore empty non-nillable/required tokens (#902)
- Fixed issue with invalid variable names when using originalCase naming convention (#881)
- Added type hints for compound fields (#858, #885)
- Added http header when loading remote resources (#867)
- Added warning when converting parent field to a list (#871)
- Added ruff to format generated code (#892)
- Added option to use substitution group names for compound field name (#905)
- Updated base64 decoding to enable validation (#875)
- Updated generator to render prohibited parent fields with restriction extensions (#908)
- Updated generator so plugins can easily override templates
- Removed Python 3.7 support
- Fixed PycodeSerializer not adding imports for nested classes
- Fixed imports ordering
- Added support for strict content wildcard processing (#803)
- Fixed decimal converter to avoid scientific notations (#826)
- Fixed nympy parameter docstring format (#827)
- Fixed optional/required override validation (#820)
- Fixed WSDL mapper to respect the elements original location (#832)
- Added Python 3.12 support
- Fixed conflicting enum values leading to wrong default values (#806)
- Added support for custom decorators and base classes (#793)
- Added parser config to load external dtd to resolve entities (#797)
- Added requests sessions on the wsdl client transport (#798)
- Added support subscriptable types and UnionType (#801)
- Added option to restrict models package for auto-locator (#809)
- Updated context to only cache supported classes (#796)
- Removed tox requirement (#800)
- Converted to pyproject.toml (#802)
- Fixed XML meta var index conflicts.
- Fixed mixed content handling for DTD elements. (#749, #762)
- Fixed an issue with required attributes turning into optional ones.
- Fixed calculation of min/max occurs when parsing XML/JSON documents. (#756)
- Fixed calculation of min/max occurs when parsing DTD choice content types. (#760)
- Fixed an issue when parsing tail content for compound wildcard elements.
- Fixed an issue with the code analyzer not fully processing some classes.
- Fixed an issue with the code analyzer taking forever to process very large enumerations. (#776)
- Fixed an issue in the JSON parser with optional choice elements.
- Updated the transformer to silently ignore malformed JSON files. (#750)
- Updated the override attribute handler to fix naming conflicts.
- Updated the override attribute handler to allow wildcard overrides.
- Updated conditions on extensions flattening (over-flattening). (#754)
- Updated Group, AttributeGroup handling, skipping a few cases.
- Updated how min/max occurs are calculated with nested containers.
- Updated handling of element substitutions to treat them as choices. (#786)
- Updated Pycodeserializer to skip default field values.
- Updated flattening restriction base classes when sequence elements are out of order.
- Updated docformatter to v1.6.5.
- Added support to override compound fields.
- Added support for multiple sequential groups in a class.
- Added support for non-list compound fields.
- Added support to mix list and non-list fields with sequence groups.
- Added an option to include headers in generated files. (#746)
- Added an option to cache the initial load and mapping of resources.
- Added support for regular expressions in config substitutions. (#755)
- Added a pretty print indentation option in the serializer config. (#780)
- Added an option to set the encoding in the SOAP Client. (#773)
- Added a CLI flag to show debug messages.
- Added a debug message for possible circular references during code generation.
- Added support to generate prohibited fields when they restrict parent fields. (#781)
This release is bigger than intended and includes many major changes, that's why it took so long.
- Added option to ignore xml pattern restrictions #727
- Added globalns support via SerializerConfig #724
- Pinned docformatter version to v1.5.0 #729
- Added list wrapper for elements and primitive nodes #710
- Fixed code generation inconsistencies in different operating systems.
- Fixed circular imports error #706
- Fixed naming conflicts in imports #706
- Fixed issue with wrong occurrences in DTD code generation #705
- Fixed xs:group and xs:attrGroup name conflicts #702
- Added mathml3 in standard schemas
- Added pycode serializer #626
- Added option to filter out unused global types #691
- Avoid using generics for mixed content when possible #696
- Removed support for python 3.6 #671
- Fix empty lists do not get serialized #686
- Added external DTD code generator #688
- Added support for python 3.11
In the next release we will drop python 3.6 support!!!
- Added support for xml date/time nanoseconds #679
- Added config option to unnest classes
- Added new class meta option global_type, to hide classes from discovery
- Removed min/max length restrictions for enum type fields
- Allow builtin xml types to be fully extended #672
- Added official support for python 3.11
- Fixed enumerations restricting complex types #659
- Fixed attribute name duplicate check to avoid invalid slugs
- Fixed substitution groups on duplicate global types #648
- Added Postponed Annotations config option #646
- Added support for subclasses with different namespaces #654
- Added recursive glob for cli dir source #643
- Added cfg options to change/force compound field names #639
- Fixed wsdl generator to use operation name for rpc input messages #609
- Fixed wsdl generator to check for qualified elements for message part types #612
- Fixed compound field matcher to prefer exact types over derived #617
- Added async to the reserved keywords #600
- Added generator config for search & replace substitutions #624
- Updated code generator to remove abstract elements from class attrs #627
- Updated code generator to filter out all unused types #629
- Fixed unescaped quotes in regex pattern #592
- Added config option fail_on_unknown_attributes #597
- Fixed build for python 3.10
-
Automate cli generate options #578
- Generate cli options by the config model
- Allow to enable/disable any flag
- Allow to bypass any value from the config
- Removed -cf/-ri as we can't have switches with short names
-
Fixed generator not cascading default values to inner classes #579
-
Re-raise xml syntax errors as xsdata.exceptions.ParserError #571
-
Added cli summary with recovered warnings and issues #583
-
Removed the native and lxml SAX handlers #582
-
Deprecated JsonSerializer indent property, use SerializerConfig instead
-
Fixed SchemaMapper assigning wrong namespace for imported unqualified elements
-
Fixed AttributeTypeHandler to maintain occurs between any flattening
-
Fixed missing required field metadata property
-
Fixed nillable fields not being marked as optional
-
Fixed fields ordering during class reduce process (Codegen from xml/json)
-
Added support for xs:defaultOpenContent:appliesToEmpty attribute
-
Added ParserConfig class factory option #549
-
Added SerializerConfig option to ignore optional default attributes #555
-
Added warning on unexpected duplicate types #564
-
Added GeneratorConfig support for kw_only and slots for python >= 3.10
-
Added structure style namespace-clusters #573
-
Updated text fields default value to empty string and marked as required #570
-
Updated fields derived from xs:substitutionGroups to optional
-
Updated fields derived from xs:any to optional
-
Updated AttributeDefaultValueHandler to preserve acceptable default values
-
Updated AttributeDefaultValueHandler to mark as optional any xsi:type attribute
-
Updated xs:alternative handling to resemble xs:choice
-
Updated mixed content handler to group all elements under wildcard
-
Updated ElementMapper to detect nillable types
-
Updated DictMapper to generate list of xs:anySimpleType for empty list nodes
-
Updated the compatibility layer for dataclass style plugins
-
Updated namespaces structure style to convert namespaces similar to jaxb
http://www.w3.org/XML/1998/namespace
toorg.w3.XML.1998.namespace
-
Update binding process for nillable types and fields
- nillable types can be initialized
- nillable fields are initialized with None values
- Fixed docstrings backslash escaping #518
- Fixed analyzer flattening bare types #541
- Fixed multiple issues with compound fields and override fields #533
- Fixed missing derived elements types during xml parsing #541
- Added structure style: clusters for smaller packages #509
- Added configuration to generate relative imports #519
- Added configuration to toggle all dataclasses features #529
- Added binding support for tuple typing annotations (frozen dataclasses) #529
- Added support to bind data directly from xml/lxml Element and ElementTree #531 #546
- Updated analyzer to avoid same name for outer-inner classes #511
- Updated cli to fail early if config file is invalid #514
- Updated cli to remove setuptools from runtime dependencies #515
- Updated analyzer to relax override field validations completely #516
- Updated analyzer to sort classes before class name conflict resolution #517
- Updated JSON parser to attempt binding against subclasses #527
- Updated analyzer to guard against multiple substitution group runs #538
- Updated code generation to use case-sensitive reserved words #545
-
Fixed no args Dict annotation, raising an exception #494
-
Fixed original name case not working for field names #498
-
Fixed element type resolution with duplicate name conflicts #503
-
Added handler to flatten bare inner classes
-
Added the ability for custom types to subclass named tuples
-
Added keyword meta in the reserved words #491
-
Added new xml type
Ignore
to skip fields during binding #504 -
Updated generic model DerivedElement.substituted flag with xsi:type
-
Updated core components to improve binding performance
- Converted almost all internal dataclasses to simple objects with slots
- Converted the internal xml date/time types to named tuples
- Reduced models metadata lookup times and memory footprint
-
Updated JSON parser #495
- Support failing on unknown properties
- Support required properties
- Support parser config
- Stricter binding process
- Enhance DerivedElement support
-
Moved Definitive XML Schema tests to the samples repository
- Added output structure style single-package #469
- Added support for marshalling array of objects for json #448
- Added support to generate code from raw json documents #445
- Added docstring style Blank to avoid generating them #460
- Added validations for non-supported type hints
- Added support for python 3.10
- Generate package all lists #459
- Generate factory for xs:list enumeration default values #471
- Avoid generating prohibited elements with maxOccurs==0 #478
- Avoid generating identical overriding fields #466
- Fixed flattening base classes if they are also subclasses #473
- Fixed unchecked class name conflict resolution #457
- Refactored context components to improve binding performance #476
- Split requirements to extras cli, soap and lxml #419
- Fixed parser conflict when an attribute and element field have the same qualified name
- Added cli auto-detection for source types, removed cli flag
--wsdl
- Added cli support to generate code from raw xml documents
- Added cli entry point to allow pluggable output formats #429
- Added cli short flags for all options and flags
- Added handler to set effective choice groups #433
- Moved plantUML output format to a standalone plugin
- Updated xml parser to allow unions of primitive and class types
- Updated XmlDateTime parser to catch invalid cases with extra leading zeros
- Updated QName converter to validate uri/ncname when parsing string representations
- Updated JsonParser to allow parsing from filename string
- Updated cli option
--compound-fields
to a boolean flag
- Added constant name convention config #407
- Added naming schemes screaming snake case and original case
- Updated xsi:lookup on xs:any derived elements #315
- Updated fields restriction inheritance #417
- Updated cli to allow package override from arguments #416
- Updated code generation to merge duplicate global types earlier #406
- Fixed docstrings issue breaking python syntax #403
- Fixed bindings for nillable content without workarounds #408
- Fixed resolver to apply aliases on extensions and choice fields #414
- Fixed schema models limiting xs:appinfo occurrences #420
- Decoupled core systems from click and lxml
Notice: In the next release installation profiles will be introduced that will turn the cli, lxml and soap features optional.
- Added class name context for user naming schemes #348
- Added mixed pascal naming scheme #348
- Added access to element/attribute name generators #381
- Added XmlHexBinary/XmlBase64Binary builtin data types #387
- Added support for xs:anyType root elements #399
- Updated JSON binding modules to use the fields local name #389
- Updated enum classes generation
- Updated parsers accuracy for Union types
- Updated dependency resolution accuracy
- Update base classes generation strategies
- Updated builtin data types with helper constructors/methods
- Fixed inner class names conflicts #375
- Fixed issue not generating fields derived from xs:alternative elements #393
- Fixed duplicate root class name regression from v20.12
- Fixed issue adding unused lib imports
- Fixed issue adding unused name properties to choice elements
This is a sleeper release ✨✨✨ so many code generation improvements and finally the JSON binding is aligned with XML.
- Fixed XmlWriter converting attribute keys to QName. #346
- Set empty complexType base to anySimpleType #349
- Improve duplicate attr names detection #351
- Add SerializerConfig::xml_declaration option #357
- Generate default value/factory for compound fields #359
- Fixed default value for token fields #360
- Add doc metadata for compound fields #362
- JsonParser: handle class and primitive unions #369
- Update python mappings #366
- Map xs:hexBinary and xs:base64Binary to bytes
- Map xs:date/time types to builtin types XmlDate/Time
- Map xs:duration to builtin type XmlDuration
- Map xs:g[Year[Month[Day]]] to builtin type XmlPeriod
- Map xs:Notation to QName
- Add converter adapters for datetime.date/time
- Add fields metadata key 'format' for time/date/binary types
- Fixed issues with default literal values
- Fixed issue with random field types order
- Added SerializerConfig with new options. #268, #320
- Added docstring styles: rst, google, numpy, accessible. #318, #340
- Added
max line length
generator configuration. #342 - Added dynamic type locator for parsers. #332
- Fixed multiple issues with json binding. `987% successful roundtrips
- Catch all type errors on xsi cache build #316
- Added sub command to download remote schemas and definitions. #279
- Added new optional xml type
Elements
to maintain ordering for repeatable choices. #296 - Added xsi:type lookup procedure for xs:anyType derived elements. #306
- Updated simple type flattening detection. #286
- Updated generator to allow namespace structure on schemas without target namespace.
- Updated generator to avoid writing min/max occurs metadata for implied values. #297
- Update generator to use literal dictionary initialization.
- Updated parser security, disable lxml network and entities resolve.
- Fixed field types detection for elements with xs:alternative children. #284
- Fixed file generation to enforce default charset UTF-8. #302
- Fixed jinja2 undefined namespace var collision. #298
- Fixed import class name collision. #300
- Fixed restriction inheritance on xs:group elements. #301
- Fixed generator adding multiple default value fields. #249
- Fixed generator not applying nested container restrictions. #263
- Fixed generator to avoid case insensitive class name conflicts. #269
- Fixed generator rendering unused simple types.
- Fixed generator unsorted libraries imports.
- Fixed JsonParser trying to parse init=False fields. #253
- Fixed NodeParser binding tail content more than once with mixed vars. #256
- Added XmlWriter interface to decouple serialize from lxml. #247
- Added native python xml content writer XmlEventWriter. ✨✨✨
- Added lxml based content writer LxmlEventWriter.
- Added generator config with options to control naming cases and aliases. #265
- Updated field xml type auto-detection to be more flexible. #246
- Updated EnumConverter to resort to canonical form matching as last resort. #273
- Updated support for derived elements. #267
This is my favorite release so far, maybe because xsdata reached one year of development ✨✨✨ or maybe because some of the last original components finally got the rewrite they deserved.
- Added field metadata key
tokens
for xs:list or xs:NMTOKENS derived elements. - Added datatype factory to register custom converters.
- Added XmlHandler interface to decouple parsing from lxml.
- Added lxml based content handlers: LxmlEventHandler, LxmlSaxHandler
- Added native python xml content handlers: XmlEventHandler, XmlSaxHandler
- Added support for python >= 3.6 #241
- Added codegen for soap 1.1 fault messages.
- Fixed converting to enum members derived from xs:NMTOKENS.
- Fixed package level import naming conflicts. #228
- Fixed xml serializing to allow empty strings in attribute values. #230
- Fixed xml serializing for mixed content with non generics. #238
- Added codegen support for WSDL 1.1 and SOAP 1.1 bindings.
- Added experimental web services client.
- Added cli flag
--ns-struct
to group classes by target namespaces. #206 - Added parser config to support xinclude statements. #207
- Added new xml union node to improve bindings for fields with union type. #207
- Fixed class resolve issue with mixed namespaces. #204
- Fixed attribute comparison issue. #209
- Fixed data type mapping for various schema elements. #221
- Fixed mixed content handling. #213
- Code cleanup & 100% coverage.
- Updated analyzer to allow abstract types to be generated. #199
- Removed support to generate code from multiple sources. #172
- Fixed naming conflict with AttributeGroup analyzer handler. #194
- Fixed analyzer to merge redefined attribute groups. #196
- Fixed analyzer to block inheritance on xs:override derived types. #198
- Refactored code to prepare for wsdl support.
- Updated XmlSerializer to render default namespace whenever possible.
- Fixed issue generating modules outside the target package.
- Fixed issue not creating nested package init files.
- Code cleanup & docstrings
- Added version option in the xsdata cli.
- Added generation of missing python init files.
- Added support for default values to inner enum classes.
- Fixed multiple issues with abstract classes and attributes/extension flattening.
- Fixed instance cross references causing codegen unpredictable results.
- Fixed xml serialization of wildcard attributes with user defined model values.
- Fixed issue with redefined/override elements with annotations.
- Fixed expand attribute groups recursively.
- Fixed false positive circular references.
- Fixed enumeration unions detection.
- Refactored ClassAnalyzer to smaller components.
- Fix flattening enumeration unions.
- Fix generation for enum fields with default/fixed value.
- Fix duplicate attribute names handler to be case-insensitive.
- Added support to fetch remote schemas.
- Updated duplicate attribute names handling.
- Updated code generation for enum type fields and default values.
- Fixed issue not generating classes derived from simple types.
- Fixed analyzer reaching the maximum recursion depth.
- Fixed analyzer to flatten properly inner self referencing classes.
- Moved dataclasses python conventions to jinja filters.
- Updated codegen cli to accept multiple definitions or directories as argument.
- Update ClassBuilder to recursively search for anonymous types.
- Updated XmlParser to be thread-safe.
- Added performance tweaks on XmlParser.
- Added parser config to fail or not on unknown properties.
- Fixed primitive types being marked as forward references.
- Fixed nested restrictions on xs:simpleType.
- Fixed ClassAnalyzer to recover/ignore missing types.
- Added support for abstract xsi:types in XmlParser.
- Added cache for event names in XmlParser.
- Added sanitization for generated module names.
- Fixed not flattening abstract extension.
- Fixed extension name conflicts between simple and complex types.
- Fixed possible memory leak in CodeWriter.
- Fixed looping variables twice to find next node in XmlParser.
- Fixed CodeWriter adding unnecessary new lines.
- Fixed open content attribute with mode suffix to be generated last.
- Fixed issues with wildcard and mixed content parsing.
- Updated xs:qname mapping to lxml.QName
- Updated support for xs:list.
- Updated parser to ignore xsi:type attributes default/fixed values.
- Refactored code components.
- Pass more than 99% of the `W3C XML Schema 1.1 test cases https://travis-ci.org/tefra/xsdata-w3c-tests
- Added support for sequential fields.
- Added support for open content.
- Added support multiple redefined elements.
- Updated support for wildcards to be aware of generic namespaces.
- Updated support for wildcards to be aware of non-generic objects.
- Updated codegen to run after fully parsing all the definitions.
- Updated codegen to skip unresolved schema locations.
- Updated xml parser to ignore comments.
- Updated xml parser to retain a copy of the input namespaces.
- Fixed issues with nillable fields being ignored.
- Fixed multiple issues with wrong restrictions being applied.
- Fixed binding issues when there are naming conflicts.
- Fixed serialization for inf/nan/exponential float and decimal values.
- Fixed naming conflicts with class/package names.
- Fixed multiple circular import issues during parsing and code generation.
- Pass more than 98% of the `W3C XML Schema 1.1 test cases https://travis-ci.org/tefra/xsdata-w3c-tests
- Added copies of common schemas xlink, xsi, xml.
- Added XML Schema 1.1 models and properties.
- Added support for redefines, overrides, alternatives and default attributes.
- Added missing xsd data types: dateTimestamp, anyType, anyAtomicType.
- Added protection against duplicate class fields enumerations.
- Added python common types to the stop word list.
- Updated wildcards parsing to avoid duplicate elements.
- Updated native datatype detection made stricter.
- Updated enumerations generation to sort and filter values.
- Updated mapping xs:decimal to python Decimal
- Fixed elements/attribute not inheriting namespaces from references.
- Fixed module names collisions.
- Fixed self referencing classes.
- Fixed class name collisions complexTypes vs elements.
- Fixed parsers not respecting default values.
- Fixed AbstractXmlParser to handle leafless root nodes.
- Pass more than 90% of the `W3C XML Schema 1.1 test cases https://travis-ci.org/tefra/xsdata-w3c-tests.
- Added support xs:any and xs:anyAttribute elements.
- Added support for auto-detecting XML Schema namespace prefix.
- Added support for xml datatypes lang and base.
- Refactored SchemaParser to use the XmlParser.
- Updated XmlParser to bind after elements are fully parsed.
- Fixed elements min|man occurs inheritance from their container.
- Fixed global elements and attributes are now always qualified.
- Fixed including no namespace schemas.
- Fixed list elements attribute handling.
- Added support for unqualified elements.
- Added support for qualified attributes.
- Added support for nillable elements.
- Added support for unions of member and simple types.
- Added binding test suite
- Generate anonymous Enumerations
- Generate attributes from List and Union elements
- Fix restriction inheritance
- Officially support python 3.8
- Completely migrate to setup.cfg
- Introduce integration test suite
- Change print mode to print rendered output
- Added new format PlantUML class diagram to replace the old print/debug mode
- Initial release