stepxmlclient 1.0.0__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (70) hide show
  1. stepxmlclient/__init__.py +22 -0
  2. stepxmlclient/client.py +373 -0
  3. stepxmlclient/creator.py +317 -0
  4. stepxmlclient/model/__init__.py +418 -0
  5. stepxmlclient/model/asset.py +250 -0
  6. stepxmlclient/model/attribute.py +288 -0
  7. stepxmlclient/model/business.py +233 -0
  8. stepxmlclient/model/classification.py +409 -0
  9. stepxmlclient/model/complex_elements.py +260 -0
  10. stepxmlclient/model/deletion.py +87 -0
  11. stepxmlclient/model/entity.py +368 -0
  12. stepxmlclient/model/metadata.py +199 -0
  13. stepxmlclient/model/organization.py +167 -0
  14. stepxmlclient/model/product.py +519 -0
  15. stepxmlclient/model/relations.py +105 -0
  16. stepxmlclient/model/replacement.py +417 -0
  17. stepxmlclient/parser.py +2805 -0
  18. stepxmlclient/rest_client/__init__.py +16 -0
  19. stepxmlclient/rest_client/base.py +388 -0
  20. stepxmlclient/rest_client/client.py +127 -0
  21. stepxmlclient/rest_client/exceptions.py +97 -0
  22. stepxmlclient/rest_client/models/__init__.py +175 -0
  23. stepxmlclient/rest_client/models/asset.py +253 -0
  24. stepxmlclient/rest_client/models/attribute.py +112 -0
  25. stepxmlclient/rest_client/models/background_process.py +23 -0
  26. stepxmlclient/rest_client/models/batch.py +41 -0
  27. stepxmlclient/rest_client/models/classification.py +57 -0
  28. stepxmlclient/rest_client/models/collection.py +26 -0
  29. stepxmlclient/rest_client/models/common.py +192 -0
  30. stepxmlclient/rest_client/models/context.py +16 -0
  31. stepxmlclient/rest_client/models/data_type_group.py +15 -0
  32. stepxmlclient/rest_client/models/entity.py +63 -0
  33. stepxmlclient/rest_client/models/event_processor.py +15 -0
  34. stepxmlclient/rest_client/models/import_export.py +43 -0
  35. stepxmlclient/rest_client/models/integration_endpoint.py +16 -0
  36. stepxmlclient/rest_client/models/product.py +200 -0
  37. stepxmlclient/rest_client/models/relations.py +280 -0
  38. stepxmlclient/rest_client/models/system_information.py +11 -0
  39. stepxmlclient/rest_client/models/user.py +28 -0
  40. stepxmlclient/rest_client/models/workflow.py +30 -0
  41. stepxmlclient/rest_client/operations/__init__.py +54 -0
  42. stepxmlclient/rest_client/operations/assets.py +652 -0
  43. stepxmlclient/rest_client/operations/attributes.py +252 -0
  44. stepxmlclient/rest_client/operations/background_processes.py +84 -0
  45. stepxmlclient/rest_client/operations/batch.py +28 -0
  46. stepxmlclient/rest_client/operations/classifications.py +248 -0
  47. stepxmlclient/rest_client/operations/collection_groups.py +46 -0
  48. stepxmlclient/rest_client/operations/collections.py +67 -0
  49. stepxmlclient/rest_client/operations/contexts.py +88 -0
  50. stepxmlclient/rest_client/operations/data_type_groups.py +68 -0
  51. stepxmlclient/rest_client/operations/entities.py +295 -0
  52. stepxmlclient/rest_client/operations/event_processors.py +109 -0
  53. stepxmlclient/rest_client/operations/exports.py +153 -0
  54. stepxmlclient/rest_client/operations/gateway.py +53 -0
  55. stepxmlclient/rest_client/operations/inbound.py +472 -0
  56. stepxmlclient/rest_client/operations/outbound.py +64 -0
  57. stepxmlclient/rest_client/operations/products.py +489 -0
  58. stepxmlclient/rest_client/operations/relations.py +349 -0
  59. stepxmlclient/rest_client/operations/reports.py +27 -0
  60. stepxmlclient/rest_client/operations/system_information.py +28 -0
  61. stepxmlclient/rest_client/operations/user_groups.py +79 -0
  62. stepxmlclient/rest_client/operations/users.py +119 -0
  63. stepxmlclient/rest_client/operations/workflow_tasks.py +61 -0
  64. stepxmlclient/rest_client/operations/workflows.py +50 -0
  65. stepxmlclient/upload.py +293 -0
  66. stepxmlclient-1.0.0.dist-info/METADATA +666 -0
  67. stepxmlclient-1.0.0.dist-info/RECORD +70 -0
  68. stepxmlclient-1.0.0.dist-info/WHEEL +5 -0
  69. stepxmlclient-1.0.0.dist-info/licenses/LICENSE +21 -0
  70. stepxmlclient-1.0.0.dist-info/top_level.txt +1 -0
@@ -0,0 +1,105 @@
1
+ """Cross-reference models for STEP XML Client.
2
+
3
+ Defines relationship/cross-reference classes for linking STEP entities together.
4
+ These are used to create various types of associations between products, assets,
5
+ classifications, and entities in the MDM system.
6
+ """
7
+
8
+ from typing import List, Optional
9
+ from . import BaseObject
10
+
11
+ class AssetCrossReference(BaseObject):
12
+ """Link between a product and an asset.
13
+
14
+ Represents a relationship from a product (or asset) to an asset file.
15
+ Includes optional type and qualifier information for classification of the link.
16
+
17
+ Attributes:
18
+ AssetID: ID of the asset being linked
19
+ Type: Optional link type (e.g., 'Image', 'Document')
20
+ QualifierID: Optional qualifier for context/language specificity
21
+ KeyValue: Optional key value reference
22
+ MetaData: Optional metadata for the relationship
23
+ """
24
+ _GROUP_NAME: Optional[str] = None # Used as child element only
25
+ _TAG_NAME: str = 'AssetCrossReference'
26
+ _ATTRIBUTE_NAMES: List[str] = ["AssetID", "Type", "QualifierID", "Changed"]
27
+ _TEXT_NAMES: List[str] = []
28
+ _CHILDREN_NAMES: List[str] = ["KeyValue", "MetaData"]
29
+
30
+
31
+ class ProductCrossReference(BaseObject):
32
+ """Link between two products.
33
+
34
+ Represents a relationship from one product to another (parent, related, component, etc.).
35
+ Includes optional type, qualifier, and mount location information.
36
+
37
+ Attributes:
38
+ ProductID: ID of the linked product
39
+ Type: Optional link type (e.g., 'Parent', 'Related', 'Component')
40
+ QualifierID: Optional qualifier for context/language specificity
41
+ MountLocation: Optional location where product is mounted/used
42
+ KeyValue: Optional key value reference
43
+ MetaData: Optional metadata for the relationship
44
+ """
45
+ _GROUP_NAME: Optional[str] = None # Used as child element only
46
+ _TAG_NAME: str = 'ProductCrossReference'
47
+ _ATTRIBUTE_NAMES: List[str] = ["ProductID", "Type", "QualifierID", "MountLocation", "Changed"]
48
+ _TEXT_NAMES: List[str] = []
49
+ _CHILDREN_NAMES: List[str] = ["KeyValue", "MetaData"]
50
+
51
+
52
+ class ClassificationCrossReference(BaseObject):
53
+ """Link between a product/classification and another classification.
54
+
55
+ Represents a relationship from a product or classification to a classification.
56
+ Used to associate products or classifications with categories in the taxonomy.
57
+
58
+ Attributes:
59
+ ClassificationID: ID of the classification being linked
60
+ Type: Optional link type for classification relationships
61
+ QualifierID: Optional qualifier for context/language specificity
62
+ MountLocation: Optional location/context for the classification
63
+ KeyValue: Optional key value reference
64
+ MetaData: Optional metadata for the relationship
65
+ """
66
+ _GROUP_NAME: Optional[str] = None # Used as child element only
67
+ _TAG_NAME: str = 'ClassificationCrossReference'
68
+ _ATTRIBUTE_NAMES: List[str] = ["ClassificationID", "Type", "QualifierID", "Changed"]
69
+ _TEXT_NAMES: List[str] = []
70
+ _CHILDREN_NAMES: List[str] = ["KeyValue", "MetaData"]
71
+
72
+
73
+ class ClassificationReference(BaseObject):
74
+ """Reference from an asset/product to a classification.
75
+
76
+ This relation uses the ``ClassificationReference`` tag (not
77
+ ``ClassificationCrossReference``) and is required for asset-to-classification
78
+ links according to STEP.xsd ``AssetType``.
79
+ """
80
+ _GROUP_NAME: Optional[str] = None # Used as child element only
81
+ _TAG_NAME: str = 'ClassificationReference'
82
+ _ATTRIBUTE_NAMES: List[str] = ["ClassificationID", "Type", "QualifierID", "Changed"]
83
+ _TEXT_NAMES: List[str] = []
84
+ _CHILDREN_NAMES: List[str] = ["KeyValue", "MetaData"]
85
+
86
+
87
+ class EntityCrossReference(BaseObject):
88
+ """Link between a product/entity and another entity.
89
+
90
+ Represents a relationship from a product or entity to an entity.
91
+ Entities can have various types of links to other entities for flexible data modeling.
92
+
93
+ Attributes:
94
+ EntityID: ID of the entity being linked
95
+ Type: Optional link type for entity relationships
96
+ QualifierID: Optional qualifier for context/language specificity
97
+ MountLocation: Optional location/context for the entity link
98
+ KeyValue: Optional key value reference
99
+ MetaData: Optional metadata for the relationship
100
+ """
101
+ _GROUP_NAME: Optional[str] = None # Used as child element only
102
+ _TAG_NAME: str = 'EntityCrossReference'
103
+ _ATTRIBUTE_NAMES: List[str] = ["EntityID", "Type", "QualifierID", "Changed"]
104
+ _TEXT_NAMES: List[str] = []
105
+ _CHILDREN_NAMES: List[str] = ["KeyValue", "MetaData"]
@@ -0,0 +1,417 @@
1
+ """Phase 7: Replacement Rules for bulk update operations.
2
+
3
+ Handles ReplaceValues, ReplaceCrossReferences, ReplaceAttributeLinks,
4
+ ReplaceClassificationReferences and their container classes for Products,
5
+ Classifications, Entities, and Assets.
6
+ """
7
+
8
+ from typing import List, Optional, TYPE_CHECKING
9
+ from . import BaseObject
10
+
11
+ if TYPE_CHECKING:
12
+ pass
13
+
14
+
15
+ class ReplaceValues(BaseObject):
16
+ """Replacement instruction for attribute values.
17
+
18
+ Child-only element used within ReplaceProducts, ReplaceClassifications,
19
+ ReplaceAssets, ReplaceEntities containers.
20
+
21
+ Attributes:
22
+ AttributeID: Reference to attribute being replaced
23
+ AttributeGroupID: Optional reference to attribute group
24
+ ContextID: Optional context for the replacement
25
+ """
26
+ _GROUP_NAME: Optional[str] = None
27
+ _TAG_NAME: str = 'ReplaceValues'
28
+ _ATTRIBUTE_NAMES: List[str] = ["AttributeID", "AttributeGroupID", "ContextID"]
29
+ _TEXT_NAMES: List[str] = []
30
+ _CHILDREN_NAMES: List[str] = []
31
+
32
+ def __init__(self, attribute_id: Optional[str] = None,
33
+ attribute_group_id: Optional[str] = None,
34
+ context_id: Optional[str] = None):
35
+ data = {}
36
+ if attribute_id is not None:
37
+ data["AttributeID"] = attribute_id
38
+ if attribute_group_id is not None:
39
+ data["AttributeGroupID"] = attribute_group_id
40
+ if context_id is not None:
41
+ data["ContextID"] = context_id
42
+ super().__init__(data)
43
+
44
+
45
+ class ReplaceCrossReferences(BaseObject):
46
+ """Replacement instruction for cross-references.
47
+
48
+ Child-only element used within ReplaceProducts, ReplaceClassifications,
49
+ ReplaceAssets, ReplaceEntities containers.
50
+
51
+ Attributes:
52
+ CrossReferenceID: Reference to the cross-reference being replaced
53
+ ContextID: Optional context for the replacement
54
+ MountLocation: Optional mount point location
55
+ """
56
+ _GROUP_NAME: Optional[str] = None
57
+ _TAG_NAME: str = 'ReplaceCrossReferences'
58
+ _ATTRIBUTE_NAMES: List[str] = ["CrossReferenceID", "ContextID", "MountLocation"]
59
+ _TEXT_NAMES: List[str] = []
60
+ _CHILDREN_NAMES: List[str] = []
61
+
62
+ def __init__(self, cross_reference_id: Optional[str] = None,
63
+ context_id: Optional[str] = None,
64
+ mount_location: Optional[str] = None):
65
+ data = {}
66
+ if cross_reference_id is not None:
67
+ data["CrossReferenceID"] = cross_reference_id
68
+ if context_id is not None:
69
+ data["ContextID"] = context_id
70
+ if mount_location is not None:
71
+ data["MountLocation"] = mount_location
72
+ super().__init__(data)
73
+
74
+
75
+ class ReplaceAttributeLinks(BaseObject):
76
+ """Replacement instruction for attribute links.
77
+
78
+ Child-only element used within ReplaceProducts, ReplaceClassifications
79
+ containers.
80
+
81
+ Attributes:
82
+ AttributeID: Reference to the attribute link being replaced
83
+ """
84
+ _GROUP_NAME: Optional[str] = None
85
+ _TAG_NAME: str = 'ReplaceAttributeLinks'
86
+ _ATTRIBUTE_NAMES: List[str] = ["AttributeID"]
87
+ _TEXT_NAMES: List[str] = []
88
+ _CHILDREN_NAMES: List[str] = []
89
+
90
+ def __init__(self, attribute_id: Optional[str] = None):
91
+ data = {}
92
+ if attribute_id is not None:
93
+ data["AttributeID"] = attribute_id
94
+ super().__init__(data)
95
+
96
+
97
+ class ReplaceClassificationReferences(BaseObject):
98
+ """Replacement instruction for classification references.
99
+
100
+ Child-only element used within ReplaceProducts, ReplaceClassifications
101
+ containers.
102
+ """
103
+ _GROUP_NAME: Optional[str] = None
104
+ _TAG_NAME: str = 'ReplaceClassificationReferences'
105
+ _ATTRIBUTE_NAMES: List[str] = []
106
+ _TEXT_NAMES: List[str] = []
107
+ _CHILDREN_NAMES: List[str] = []
108
+
109
+ def __init__(self):
110
+ super().__init__({})
111
+
112
+
113
+ class ReplaceProducts(BaseObject):
114
+ """Container for replacement rules for a product.
115
+
116
+ Used within ReplacementRules section. Supports four types of
117
+ replacements: ReplaceValues, ReplaceCrossReferences, ReplaceAttributeLinks,
118
+ ReplaceClassificationReferences.
119
+
120
+ Convenience Methods:
121
+ add_replace_values(attribute_id, attribute_group_id, context_id)
122
+ add_replace_cross_references(cross_reference_id, context_id, mount_location)
123
+ add_replace_attribute_links(attribute_id)
124
+ add_replace_classification_references()
125
+ """
126
+ _GROUP_NAME: Optional[str] = None # Child-only within ReplacementRules
127
+ _TAG_NAME: str = 'Products'
128
+ _ATTRIBUTE_NAMES: List[str] = []
129
+ _TEXT_NAMES: List[str] = []
130
+ _CHILDREN_NAMES: List[str] = ["ReplaceValues", "ReplaceCrossReferences",
131
+ "ReplaceAttributeLinks", "ReplaceClassificationReferences"]
132
+
133
+ def __init__(self):
134
+ super().__init__({})
135
+ self.ReplaceValues: List[BaseObject] = []
136
+ self.ReplaceCrossReferences: List[BaseObject] = []
137
+ self.ReplaceAttributeLinks: List[BaseObject] = []
138
+ self.ReplaceClassificationReferences: List[BaseObject] = []
139
+
140
+ def add_replace_values(self, attribute_id: Optional[str] = None,
141
+ attribute_group_id: Optional[str] = None,
142
+ context_id: Optional[str] = None) -> ReplaceValues:
143
+ """Add ReplaceValues instruction using parameters.
144
+
145
+ Args:
146
+ attribute_id: Reference to attribute being replaced
147
+ attribute_group_id: Optional reference to attribute group
148
+ context_id: Optional context for the replacement
149
+
150
+ Returns:
151
+ ReplaceValues: Created instruction object
152
+ """
153
+ rv = ReplaceValues(attribute_id, attribute_group_id, context_id)
154
+ self.ReplaceValues.append(rv)
155
+ return rv
156
+
157
+ def add_replace_values_obj(self, replace_values: ReplaceValues) -> ReplaceValues:
158
+ """Add ReplaceValues instruction using object.
159
+
160
+ Args:
161
+ replace_values: ReplaceValues object to add
162
+
163
+ Returns:
164
+ ReplaceValues: Added instruction object
165
+ """
166
+ self.ReplaceValues.append(replace_values)
167
+ return replace_values
168
+
169
+ def add_replace_cross_references(self, cross_reference_id: Optional[str] = None,
170
+ context_id: Optional[str] = None,
171
+ mount_location: Optional[str] = None) -> ReplaceCrossReferences:
172
+ """Add ReplaceCrossReferences instruction using parameters.
173
+
174
+ Args:
175
+ cross_reference_id: Reference to the cross-reference being replaced
176
+ context_id: Optional context for the replacement
177
+ mount_location: Optional mount point location
178
+
179
+ Returns:
180
+ ReplaceCrossReferences: Created instruction object
181
+ """
182
+ rcr = ReplaceCrossReferences(cross_reference_id, context_id, mount_location)
183
+ self.ReplaceCrossReferences.append(rcr)
184
+ return rcr
185
+
186
+ def add_replace_cross_references_obj(self, replace_cross_ref: ReplaceCrossReferences) -> ReplaceCrossReferences:
187
+ """Add ReplaceCrossReferences instruction using object.
188
+
189
+ Args:
190
+ replace_cross_ref: ReplaceCrossReferences object to add
191
+
192
+ Returns:
193
+ ReplaceCrossReferences: Added instruction object
194
+ """
195
+ self.ReplaceCrossReferences.append(replace_cross_ref)
196
+ return replace_cross_ref
197
+
198
+ def add_replace_attribute_links(self, attribute_id: Optional[str] = None) -> ReplaceAttributeLinks:
199
+ """Add ReplaceAttributeLinks instruction using parameters.
200
+
201
+ Args:
202
+ attribute_id: Reference to the attribute link being replaced
203
+
204
+ Returns:
205
+ ReplaceAttributeLinks: Created instruction object
206
+ """
207
+ ral = ReplaceAttributeLinks(attribute_id)
208
+ self.ReplaceAttributeLinks.append(ral)
209
+ return ral
210
+
211
+ def add_replace_attribute_links_obj(self, replace_attr_links: ReplaceAttributeLinks) -> ReplaceAttributeLinks:
212
+ """Add ReplaceAttributeLinks instruction using object.
213
+
214
+ Args:
215
+ replace_attr_links: ReplaceAttributeLinks object to add
216
+
217
+ Returns:
218
+ ReplaceAttributeLinks: Added instruction object
219
+ """
220
+ self.ReplaceAttributeLinks.append(replace_attr_links)
221
+ return replace_attr_links
222
+
223
+ def add_replace_classification_references(self) -> ReplaceClassificationReferences:
224
+ """Add ReplaceClassificationReferences instruction.
225
+
226
+ Returns:
227
+ ReplaceClassificationReferences: Created instruction object
228
+ """
229
+ rcr = ReplaceClassificationReferences()
230
+ self.ReplaceClassificationReferences.append(rcr)
231
+ return rcr
232
+
233
+ def add_replace_classification_references_obj(self, replace_class_refs: ReplaceClassificationReferences) -> ReplaceClassificationReferences:
234
+ """Add ReplaceClassificationReferences instruction using object.
235
+
236
+ Args:
237
+ replace_class_refs: ReplaceClassificationReferences object to add
238
+
239
+ Returns:
240
+ ReplaceClassificationReferences: Added instruction object
241
+ """
242
+ self.ReplaceClassificationReferences.append(replace_class_refs)
243
+ return replace_class_refs
244
+
245
+
246
+ class ReplaceClassifications(BaseObject):
247
+ """Container for replacement rules for classifications.
248
+
249
+ Supports ReplaceValues, ReplaceCrossReferences, and ReplaceAttributeLinks.
250
+ Similar to ReplaceProducts but without ReplaceClassificationReferences.
251
+
252
+ Convenience Methods:
253
+ add_replace_values(attribute_id, attribute_group_id, context_id)
254
+ add_replace_cross_references(cross_reference_id, context_id, mount_location)
255
+ add_replace_attribute_links(attribute_id)
256
+ """
257
+ _GROUP_NAME: Optional[str] = None # Child-only within ReplacementRules
258
+ _TAG_NAME: str = 'Classifications'
259
+ _ATTRIBUTE_NAMES: List[str] = []
260
+ _TEXT_NAMES: List[str] = []
261
+ _CHILDREN_NAMES: List[str] = ["ReplaceValues", "ReplaceCrossReferences",
262
+ "ReplaceAttributeLinks"]
263
+
264
+ def __init__(self):
265
+ super().__init__({})
266
+ self.ReplaceValues: List[BaseObject] = []
267
+ self.ReplaceCrossReferences: List[BaseObject] = []
268
+ self.ReplaceAttributeLinks: List[BaseObject] = []
269
+
270
+ def add_replace_values(self, attribute_id: Optional[str] = None,
271
+ attribute_group_id: Optional[str] = None,
272
+ context_id: Optional[str] = None) -> ReplaceValues:
273
+ """Add ReplaceValues instruction using parameters."""
274
+ rv = ReplaceValues(attribute_id, attribute_group_id, context_id)
275
+ self.ReplaceValues.append(rv)
276
+ return rv
277
+
278
+ def add_replace_values_obj(self, replace_values: ReplaceValues) -> ReplaceValues:
279
+ """Add ReplaceValues instruction using object."""
280
+ self.ReplaceValues.append(replace_values)
281
+ return replace_values
282
+
283
+ def add_replace_cross_references(self, cross_reference_id: Optional[str] = None,
284
+ context_id: Optional[str] = None,
285
+ mount_location: Optional[str] = None) -> ReplaceCrossReferences:
286
+ """Add ReplaceCrossReferences instruction using parameters."""
287
+ rcr = ReplaceCrossReferences(cross_reference_id, context_id, mount_location)
288
+ self.ReplaceCrossReferences.append(rcr)
289
+ return rcr
290
+
291
+ def add_replace_cross_references_obj(self, replace_cross_ref: ReplaceCrossReferences) -> ReplaceCrossReferences:
292
+ """Add ReplaceCrossReferences instruction using object."""
293
+ self.ReplaceCrossReferences.append(replace_cross_ref)
294
+ return replace_cross_ref
295
+
296
+ def add_replace_attribute_links(self, attribute_id: Optional[str] = None) -> ReplaceAttributeLinks:
297
+ """Add ReplaceAttributeLinks instruction using parameters."""
298
+ ral = ReplaceAttributeLinks(attribute_id)
299
+ self.ReplaceAttributeLinks.append(ral)
300
+ return ral
301
+
302
+ def add_replace_attribute_links_obj(self, replace_attr_links: ReplaceAttributeLinks) -> ReplaceAttributeLinks:
303
+ """Add ReplaceAttributeLinks instruction using object."""
304
+ self.ReplaceAttributeLinks.append(replace_attr_links)
305
+ return replace_attr_links
306
+
307
+
308
+ class ReplaceEntities(BaseObject):
309
+ """Container for replacement rules for entities.
310
+
311
+ Supports ReplaceValues and ReplaceCrossReferences (no attribute links or
312
+ classification references for entities).
313
+
314
+ Convenience Methods:
315
+ add_replace_values(attribute_id, attribute_group_id, context_id)
316
+ add_replace_cross_references(cross_reference_id, context_id, mount_location)
317
+ """
318
+ _GROUP_NAME: Optional[str] = None # Child-only within ReplacementRules
319
+ _TAG_NAME: str = 'Entities'
320
+ _ATTRIBUTE_NAMES: List[str] = []
321
+ _TEXT_NAMES: List[str] = []
322
+ _CHILDREN_NAMES: List[str] = ["ReplaceValues", "ReplaceCrossReferences"]
323
+
324
+ def __init__(self):
325
+ super().__init__({})
326
+ self.ReplaceValues: List[BaseObject] = []
327
+ self.ReplaceCrossReferences: List[BaseObject] = []
328
+
329
+ def add_replace_values(self, attribute_id: Optional[str] = None,
330
+ attribute_group_id: Optional[str] = None,
331
+ context_id: Optional[str] = None) -> ReplaceValues:
332
+ """Add ReplaceValues instruction using parameters."""
333
+ rv = ReplaceValues(attribute_id, attribute_group_id, context_id)
334
+ self.ReplaceValues.append(rv)
335
+ return rv
336
+
337
+ def add_replace_values_obj(self, replace_values: ReplaceValues) -> ReplaceValues:
338
+ """Add ReplaceValues instruction using object."""
339
+ self.ReplaceValues.append(replace_values)
340
+ return replace_values
341
+
342
+ def add_replace_cross_references(self, cross_reference_id: Optional[str] = None,
343
+ context_id: Optional[str] = None,
344
+ mount_location: Optional[str] = None) -> ReplaceCrossReferences:
345
+ """Add ReplaceCrossReferences instruction using parameters."""
346
+ rcr = ReplaceCrossReferences(cross_reference_id, context_id, mount_location)
347
+ self.ReplaceCrossReferences.append(rcr)
348
+ return rcr
349
+
350
+ def add_replace_cross_references_obj(self, replace_cross_ref: ReplaceCrossReferences) -> ReplaceCrossReferences:
351
+ """Add ReplaceCrossReferences instruction using object."""
352
+ self.ReplaceCrossReferences.append(replace_cross_ref)
353
+ return replace_cross_ref
354
+
355
+
356
+ class ReplaceAssets(BaseObject):
357
+ """Container for replacement rules for assets.
358
+
359
+ Supports ReplaceValues and ReplaceCrossReferences (no attribute links or
360
+ classification references for assets).
361
+
362
+ Convenience Methods:
363
+ add_replace_values(attribute_id, attribute_group_id, context_id)
364
+ add_replace_cross_references(cross_reference_id, context_id, mount_location)
365
+ """
366
+ _GROUP_NAME: Optional[str] = None # Child-only within ReplacementRules
367
+ _TAG_NAME: str = 'Assets'
368
+ _ATTRIBUTE_NAMES: List[str] = []
369
+ _TEXT_NAMES: List[str] = []
370
+ _CHILDREN_NAMES: List[str] = ["ReplaceValues", "ReplaceCrossReferences"]
371
+
372
+ def __init__(self):
373
+ super().__init__({})
374
+ self.ReplaceValues: List[BaseObject] = []
375
+ self.ReplaceCrossReferences: List[BaseObject] = []
376
+
377
+ def add_replace_values(self, attribute_id: Optional[str] = None,
378
+ attribute_group_id: Optional[str] = None,
379
+ context_id: Optional[str] = None) -> ReplaceValues:
380
+ """Add ReplaceValues instruction using parameters."""
381
+ rv = ReplaceValues(attribute_id, attribute_group_id, context_id)
382
+ self.ReplaceValues.append(rv)
383
+ return rv
384
+
385
+ def add_replace_values_obj(self, replace_values: ReplaceValues) -> ReplaceValues:
386
+ """Add ReplaceValues instruction using object."""
387
+ self.ReplaceValues.append(replace_values)
388
+ return replace_values
389
+
390
+ def add_replace_cross_references(self, cross_reference_id: Optional[str] = None,
391
+ context_id: Optional[str] = None,
392
+ mount_location: Optional[str] = None) -> ReplaceCrossReferences:
393
+ """Add ReplaceCrossReferences instruction using parameters."""
394
+ rcr = ReplaceCrossReferences(cross_reference_id, context_id, mount_location)
395
+ self.ReplaceCrossReferences.append(rcr)
396
+ return rcr
397
+
398
+ def add_replace_cross_references_obj(self, replace_cross_ref: ReplaceCrossReferences) -> ReplaceCrossReferences:
399
+ """Add ReplaceCrossReferences instruction using object."""
400
+ self.ReplaceCrossReferences.append(replace_cross_ref)
401
+ return replace_cross_ref
402
+
403
+
404
+ class ReplaceAttributes(BaseObject):
405
+ """Container for replacement rules for attributes (empty container).
406
+
407
+ Currently a simple container with no child elements defined in the schema.
408
+ Provides expansion point for future attribute-specific replacements.
409
+ """
410
+ _GROUP_NAME: Optional[str] = None # Child-only within ReplacementRules
411
+ _TAG_NAME: str = 'Attributes'
412
+ _ATTRIBUTE_NAMES: List[str] = []
413
+ _TEXT_NAMES: List[str] = []
414
+ _CHILDREN_NAMES: List[str] = []
415
+
416
+ def __init__(self):
417
+ super().__init__({})