flatten_class_extensions
xsdata.codegen.handlers.flatten_class_extensions
FlattenClassExtensions
Bases: RelativeHandlerInterface
Reduce class extensions by copying or creating new attributes.
Source code in xsdata/codegen/handlers/flatten_class_extensions.py
11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363 364 365 366 367 368 369 370 371 372 373 374 375 376 377 378 379 380 381 382 383 384 385 386 387 388 389 |
|
process(target)
Process a class' extensions.
Parameters:
Name | Type | Description | Default |
---|---|---|---|
target | Class | The target class instance | required |
Source code in xsdata/codegen/handlers/flatten_class_extensions.py
16 17 18 19 20 21 22 23 |
|
process_extension(target, extension)
Process a class extension.
Slit the process to native xsd extensions and user defined types.
Parameters:
Name | Type | Description | Default |
---|---|---|---|
target | Class | The target class instance | required |
extension | Extension | The class extension instance | required |
Source code in xsdata/codegen/handlers/flatten_class_extensions.py
25 26 27 28 29 30 31 32 33 34 35 36 37 38 |
|
process_native_extension(target, extension)
classmethod
Native type flatten handler.
In case of enumerations copy the native data type to all enum members, otherwise add a default text attr with the extension attributes.
Parameters:
Name | Type | Description | Default |
---|---|---|---|
target | Class | The target class instance | required |
extension | Extension | The class extension instance | required |
Source code in xsdata/codegen/handlers/flatten_class_extensions.py
40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 |
|
process_dependency_extension(target, extension)
Process user defined extension types.
Case
- Extension source is missing
- Target class is an enumeration
- Extension source is a simple type or an enumeration
- Extension source is a complex type
Parameters:
Name | Type | Description | Default |
---|---|---|---|
target | Class | The target class instance | required |
extension | Extension | The class extension instance | required |
Source code in xsdata/codegen/handlers/flatten_class_extensions.py
57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 |
|
process_enum_extension(source, target, extension)
Process an enumeration class extension.
Cases
- Source is an enumeration: merge them
- Source is a simple type: copy all source attr types
- Source is a complex type 3.1 Target has a single member: Restrict default value 3.2 Target has multiple members: unsupported reset enumeration
Parameters:
Name | Type | Description | Default |
---|---|---|---|
source | Class | The source class instance | required |
target | Class | The target class instance | required |
extension | Optional[Extension] | The class extension instance | required |
Source code in xsdata/codegen/handlers/flatten_class_extensions.py
81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 |
|
merge_enumerations(source, target)
classmethod
Merge enumeration members from source to target class.
Parameters:
Name | Type | Description | Default |
---|---|---|---|
source | Class | The source class instance | required |
target | Class | The target class instance | required |
Source code in xsdata/codegen/handlers/flatten_class_extensions.py
118 119 120 121 122 123 124 125 126 127 128 129 130 |
|
merge_enumeration_types(source, target)
Merge the enumeration attr types and restrictions.
Parameters:
Name | Type | Description | Default |
---|---|---|---|
source | Class | The source class instance | required |
target | Class | The target class instance | required |
Source code in xsdata/codegen/handlers/flatten_class_extensions.py
132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 |
|
set_default_value(source, target)
classmethod
Set the default value from the source single enumeration.
When a simple type is a restriction of an enumeration with only one member, we can safely set its default value to that member value as fixed.
Parameters:
Name | Type | Description | Default |
---|---|---|---|
source | Class | The source class instance | required |
target | Class | The target class instance | required |
Source code in xsdata/codegen/handlers/flatten_class_extensions.py
153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 |
|
process_simple_extension(source, target, ext)
classmethod
Process simple type extensions.
Cases
- 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 target is enumeration: drop the extension.
Parameters:
Name | Type | Description | Default |
---|---|---|---|
source | Class | The source class instance | required |
target | Class | The target class instance | required |
ext | Extension | The extension class instance | required |
Source code in xsdata/codegen/handlers/flatten_class_extensions.py
171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 |
|
process_complex_extension(source, target, ext)
classmethod
Process complex type extensions.
Compare source and target classes and either remove the extension completely, copy all source attributes to the target class or leave the extension alone.
Parameters:
Name | Type | Description | Default |
---|---|---|---|
source | Class | The source class instance | required |
target | Class | The target class instance | required |
ext | Extension | The extension class instance | required |
Source code in xsdata/codegen/handlers/flatten_class_extensions.py
195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 |
|
find_dependency(attr_type)
Find dependency for the given extension type with priority.
Search priority: xs:SimpleType > xs:ComplexType
Parameters:
Name | Type | Description | Default |
---|---|---|---|
attr_type | AttrType | The attr type instance | required |
Returns:
Type | Description |
---|---|
Optional[Class] | The class instance or None if it's undefined. |
Source code in xsdata/codegen/handlers/flatten_class_extensions.py
215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 |
|
should_remove_extension(source, target, extension)
classmethod
Return whether the extension should be removed.
Violations
- Circular Reference
- Forward Reference
- Unordered sequences
- MRO Violation A(B), C(B) and extensions includes A, B, C
Parameters:
Name | Type | Description | Default |
---|---|---|---|
source | Class | The source class instance | required |
target | Class | The target class instance | required |
extension | Extension | The extension class instance | required |
Source code in xsdata/codegen/handlers/flatten_class_extensions.py
238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 |
|
should_flatten_extension(source, target)
classmethod
Return whether the extension should be flattened.
Rules
- Source doesn't have a parent class
- Source class is a simple type
- Source class has a suffix attr and target has its own attrs
- Target class has a suffix attr
Parameters:
Name | Type | Description | Default |
---|---|---|---|
source | Class | The source class instance | required |
target | Class | The target class instance | required |
Source code in xsdata/codegen/handlers/flatten_class_extensions.py
269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 |
|
have_unordered_sequences(source, target, extension)
classmethod
Validate overriding sequence attrs are in order.
Dataclasses fields ordering follows the python mro pattern, the parent fields are always first, and they are updated if the subclass is overriding any of them but the overall ordering doesn't change!
@todo This needs a complete rewrite and most likely it needs to @todo move way down in the process chain.
Parameters:
Name | Type | Description | Default |
---|---|---|---|
source | Class | The source class instance | required |
target | Class | The target class instance | required |
extension | Extension | The extension class instance | required |
Source code in xsdata/codegen/handlers/flatten_class_extensions.py
292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 |
|
replace_attributes_type(target, extension)
classmethod
Replace all attrs types with the extension's type.
The extension is a native xsd datatype.
Parameters:
Name | Type | Description | Default |
---|---|---|---|
target | Class | The target class instance | required |
extension | Extension | The extension class instance | required |
Source code in xsdata/codegen/handlers/flatten_class_extensions.py
329 330 331 332 333 334 335 336 337 338 339 340 341 342 |
|
add_default_attribute(target, extension)
classmethod
Convert extension to a value text attr.
If the extension type is xs:anyType convert the attr into a wildcard attr to match everything.
Parameters:
Name | Type | Description | Default |
---|---|---|---|
target | Class | The target class instance | required |
extension | Extension | The extension class instance | required |
Source code in xsdata/codegen/handlers/flatten_class_extensions.py
344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363 364 365 366 367 368 |
|
get_or_create_attribute(target, name, tag)
classmethod
Find or create an attr with the given name and tag.
If the attr doesn't exist, create a new required attr and prepend it in the attrs list.
Parameters:
Name | Type | Description | Default |
---|---|---|---|
target | Class | The target class instance | required |
name | str | The attr name | required |
tag | str | The attr tag name | required |
Source code in xsdata/codegen/handlers/flatten_class_extensions.py
370 371 372 373 374 375 376 377 378 379 380 381 382 383 384 385 386 387 388 389 |
|