xsdata.analyzer module¶
-
class
xsdata.analyzer.
ClassAnalyzer
(processed=<factory>, class_index=<factory>, substitutions_index=<factory>)[source]¶ Bases:
xsdata.utils.classes.ClassUtils
Class analyzer is responsible to minize the final classes footprint by merging and flattening extensions and attributes.
Also promotes the classes necessary for generation and demotes the classes to be used as common types for future runs.
- Parameters
-
processed
: List = None¶
-
class_index
: Dict[QName, List[Class]] = None¶
-
substitutions_index
: Dict[QName, List[Attr]] = None¶
-
process
(classes)[source]¶ Process class list in steps.
- Steps:
Create a class index.
Handle duplicate types.
Create a substitution index.
Flatten classes.
Return a final class list for code generators.
-
handle_duplicate_classes
()[source]¶ Remove if possible classes with the same qualified name.
- Steps:
Remove classes with missing extension type.
Merge redefined classes.
Fix implied abstract flags.
-
remove_invalid_classes
(classes)[source]¶ Remove from the given class list any class with missing extension type.
-
fetch_classes_for_generation
()[source]¶ Return the qualified classes to continue for code generation. Return all if there are not primary classes.
- Qualifications:
not an abstract
type: element | complexType | simpleType with enumerations
-
create_substitutions_index
()[source]¶ Create reference attributes for all the classes substitutions and group them by their fully qualified name.
-
attr_type_is_missing
(source, attr_type)[source]¶ Check if given type declaration is not native and is missing.
-
flatten_class
(target)[source]¶ Simplify class footprint by flattening class extensions, attributes and inner classes.
- Steps:
Expand attribute groups
Flatten extensions
Flatten attribute types
Add substitution attributes
Merge duplicate attributes
Create mixed content attribute
Flatten inner classes
- Parameters
target (
Class
) –
-
flatten_extension
(target, extension)[source]¶ Flatten target class extension based on the extension type.
- Types:
Native primitive type (int, str, float, etc)
Simple source type (simpleType, Extension)
Complex source type (ComplexType, Element)
Unknown type
-
flatten_extension_simple
(source, target, ext)[source]¶ Simple flatten extension handler for common classes eg SimpleType, Restriction.
- Steps:
If target is source: drop the extension.
If source is enumeration and target isn’t create default value attribute.
If both source and target are enumerations copy all attributes.
If both source and target are not enumerations copy all attributes.
If target is enumeration: drop the extension.
-
flatten_extension_complex
(source, target, ext)[source]¶ Complex flatten extension handler for primary classes eg ComplexType, Element.
- Drop extension when:
source includes all target attributes
- Copy all attributes when:
source includes some of the target attributes
source has suffix attribute and target has at least one attribute
target has at least one suffix attribute
source or target class is abstract
-
expand_attribute_group
(target, attr)[source]¶ Expand a group attribute with the source class attributes.
Clone the attributes and apply the group restrictions as well.
-
flatten_attribute_types
(target, attr)[source]¶ Loop over the the given attribute types to flatten simple definitions.
- Notes:
xs:pattern is not yet supported reset all native types to xs:string.
skip over forward references aka inner classes
-
flatten_attribute_type
(target, attr, attr_type)[source]¶ Flatten attribute type if it’s a simple type otherwise check for circular reference or missing type.