Skip to content

Commit ff5d069

Browse files
committed
[feat] Added support for IndistinctRelationship
1 parent 39ac36c commit ff5d069

File tree

10 files changed

+919
-854
lines changed

10 files changed

+919
-854
lines changed

pyatlan/generator/class_generator.py

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1010,9 +1010,8 @@ def filter_attributes_of_custom_entity_type():
10101010
generator.render_module(asset_info, EnumDefInfo.enum_def_info)
10111011

10121012
for file in (ASSETS_RELATIONS_DIR).glob("*.py"):
1013-
# Remove all files in the core assets
1014-
# directory except `relationship_attributes.py`
1015-
if file.name == "relationship_attributes.py":
1013+
# Ignore non-generator files
1014+
if file.name in ("relationship_attributes.py", "indistinct_relationship.py"):
10161015
continue
10171016
file.unlink()
10181017

pyatlan/generator/templates/relations_init.jinja2

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@ import lazy_loader as lazy
44

55
__PYATLAN_ASSET_RELATIONS__ = {
66
"relationship_attributes": ["RelationshipAttributes"],
7+
"indistinct_relationship": ["IndistinctRelationship"],
78
{% for relation in relation_def_infos -%}
89
"{{ relation.relationship_def.name | to_snake_case }}": ["{{ relation.relationship_def.name | to_cls_name}}"],
910
{% endfor %}

pyatlan/generator/templates/relations_mypy_init.jinja2

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,12 +2,14 @@
22

33
__all__ = [
44
"RelationshipAttributes",
5+
"IndistinctRelationship",
56
{% for relation in relation_def_infos -%}
67
"{{ relation.relationship_def.name | to_cls_name}}",
78
{% endfor %}
89
]
910

1011
from .relationship_attributes import RelationshipAttributes
12+
from .indistinct_relationship import IndistinctRelationship
1113
{% for relation in relation_def_infos -%}
1214
from .{{ relation.relationship_def.name | to_snake_case }} import {{ relation.relationship_def.name | to_cls_name }}
1315
{% endfor %}

pyatlan/model/assets/relations/__init__.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44

55
__PYATLAN_ASSET_RELATIONS__ = {
66
"relationship_attributes": ["RelationshipAttributes"],
7+
"indistinct_relationship": ["IndistinctRelationship"],
78
"custom_parent_entity_custom_child_entities": [
89
"CustomParentEntityCustomChildEntities"
910
],

pyatlan/model/assets/relations/__init__.pyi

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22

33
__all__ = [
44
"RelationshipAttributes",
5+
"IndistinctRelationship",
56
"CustomParentEntityCustomChildEntities",
67
"AtlasGlossaryAntonym",
78
"AtlasGlossarySynonym",
@@ -33,5 +34,6 @@ from .custom_parent_entity_custom_child_entities import (
3334
from .custom_related_from_entities_custom_related_to_entities import (
3435
CustomRelatedFromEntitiesCustomRelatedToEntities,
3536
)
37+
from .indistinct_relationship import IndistinctRelationship
3638
from .relationship_attributes import RelationshipAttributes
3739
from .user_def_relationship import UserDefRelationship
Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
from __future__ import annotations
2+
3+
from typing import Any, Dict, Optional
4+
5+
from pydantic.v1 import Field
6+
7+
from .relationship_attributes import RelationshipAttributes
8+
9+
10+
class IndistinctRelationship(RelationshipAttributes):
11+
type_name: str = Field(
12+
default="IndistinctRelationship",
13+
description="Name of the relationship type that defines the relationship.",
14+
)
15+
attributes: Optional[Dict[str, Any]] = Field(
16+
default=None,
17+
description="Map of attributes in the instance and their values",
18+
)

pyatlan/model/assets/relations/relationship_attributes.py

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,13 @@ def _parse_relationship_attributes(cls, data):
3333
relationship_attribute_cls = getattr(
3434
importlib.import_module("pyatlan.model.assets.relations"),
3535
to_python_class_name(type_name),
36-
RelationshipAttributes,
36+
None,
3737
)
38+
39+
# If relationship is not modeled in the SDK
40+
# use IndistinctRelationship model for deserialization
41+
if not relationship_attribute_cls:
42+
from .indistinct_relationship import IndistinctRelationship
43+
44+
relationship_attribute_cls = IndistinctRelationship
3845
return relationship_attribute_cls(**data)
Lines changed: 78 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,78 @@
1+
{
2+
"typeName": "AtlasGlossaryTerm",
3+
"attributes": {
4+
"validValues": [
5+
{
6+
"guid": "color-red-guid",
7+
"typeName": "AtlasGlossaryTerm",
8+
"attributes": {
9+
"relationshipAttributes": {
10+
"typeName": "UnknownRelationship1",
11+
"attributes": {
12+
"description": "test description 11",
13+
"expression": "test expression 11",
14+
"status": "ACTIVE"
15+
}
16+
},
17+
"name": "red"
18+
},
19+
"uniqueAttributes": {
20+
"qualifiedName": "red@color-values"
21+
}
22+
},
23+
{
24+
"guid": "color-blue-guid",
25+
"typeName": "AtlasGlossaryTerm",
26+
"attributes": {
27+
"relationshipAttributes": {
28+
"typeName": "AtlasGlossaryValidValue",
29+
"attributes": {
30+
"description": "test description 12",
31+
"expression": "test expression 12",
32+
"status": "ACTIVE"
33+
}
34+
},
35+
"name": "blue"
36+
},
37+
"uniqueAttributes": {
38+
"qualifiedName": "blue@color-values"
39+
}
40+
}
41+
],
42+
"validValuesFor": [
43+
{
44+
"guid": "parent-concept-guid",
45+
"typeName": "AtlasGlossaryTerm",
46+
"attributes": {
47+
"relationshipAttributes": {
48+
"typeName": "UnknownRelationship2",
49+
"attributes": {
50+
"description": "test description 21",
51+
"alias": "test alias 21",
52+
"status": "ACTIVE"
53+
}
54+
},
55+
"name": "visual-attributes"
56+
},
57+
"uniqueAttributes": {
58+
"qualifiedName": "visual-attributes@business-glossary"
59+
}
60+
}
61+
],
62+
"qualifiedName": "color@business-glossary",
63+
"name": "color"
64+
},
65+
"guid": "color-term-guid",
66+
"status": "ACTIVE",
67+
"displayText": "color",
68+
"classificationNames": [],
69+
"classifications": [],
70+
"meaningNames": [],
71+
"meanings": [],
72+
"isIncomplete": false,
73+
"labels": [],
74+
"createdBy": "data-modeler",
75+
"updatedBy": "data-modeler",
76+
"createTime": 1750078015371,
77+
"updateTime": 1750156224299
78+
}

0 commit comments

Comments
 (0)