Skip to content

Commit f363382

Browse files
authored
Merge pull request #38 from atlanhq/update_create_functions
Update create functions
2 parents 956071d + 4038555 commit f363382

File tree

6 files changed

+271
-99
lines changed

6 files changed

+271
-99
lines changed

HISTORY.md

+6
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,9 @@
1+
## 0.0.22 (Apr 12, 2023)
2+
3+
* Added create method to Column
4+
* Updated Schema.create method to add schema to Database schemas collection
5+
* Updated Table.create method to add table to Schema tables collection
6+
17
## 0.0.21 (Apr 11, 2023)
28

39
* Added relation_attributes parameter to IndexSearchRequest to specify the attributes to be included in each relationship that is included in the results of the search

pyatlan/generator/templates/entity.jinja2

+66-3
Original file line numberDiff line numberDiff line change
@@ -447,10 +447,14 @@ class {{ entity_def.name }}({{super_classes[0]}} {%- if "Asset" in super_classes
447447
{%- elif entity_def.name == "Schema" %}
448448
@classmethod
449449
# @validate_arguments()
450-
def create(cls, *, name: str, database_qualified_name: str)->{{ entity_def.name }}.Attributes:
450+
def create(
451+
cls, *, name: str, database_qualified_name: str
452+
) -> Schema.Attributes:
451453
if not name:
452454
raise ValueError("name cannot be blank")
453-
validate_required_fields(["database_qualified_name"], [database_qualified_name])
455+
validate_required_fields(
456+
["database_qualified_name"], [database_qualified_name]
457+
)
454458
fields = database_qualified_name.split("/")
455459
if len(fields) != 4:
456460
raise ValueError("Invalid database_qualified_name")
@@ -465,11 +469,12 @@ class {{ entity_def.name }}({{super_classes[0]}} {%- if "Asset" in super_classes
465469
database_qualified_name=database_qualified_name,
466470
qualified_name=f"{database_qualified_name}/{name}",
467471
connector_name=connector_type.value,
472+
database=Database.ref_by_qualified_name(database_qualified_name),
468473
)
469474
{%- elif entity_def.name == "Table" or entity_def.name == "View" %}
470475
@classmethod
471476
# @validate_arguments()
472-
def create(cls, *, name: str, schema_qualified_name: str)->{{ entity_def.name }}.Attributes:
477+
def create(cls, *, name: str, schema_qualified_name: str) -> {{ entity_def.name }}.Attributes:
473478
if not name:
474479
raise ValueError("name cannot be blank")
475480
validate_required_fields(["schema_qualified_name"], [schema_qualified_name])
@@ -489,7 +494,65 @@ class {{ entity_def.name }}({{super_classes[0]}} {%- if "Asset" in super_classes
489494
schema_qualified_name=schema_qualified_name,
490495
schema_name=fields[4],
491496
connector_name=connector_type.value,
497+
atlan_schema=Schema.ref_by_qualified_name(schema_qualified_name),
492498
)
499+
{%- elif entity_def.name == "Column" %}
500+
@classmethod
501+
# @validate_arguments()
502+
def create(
503+
cls, *, name: str, parent_qualified_name: str, parent_type: type, order: int
504+
) -> Column.Attributes:
505+
if not name:
506+
raise ValueError("name cannot be blank")
507+
validate_required_fields(["parent_qualified_name"], [parent_qualified_name])
508+
fields = parent_qualified_name.split("/")
509+
if len(fields) != 6:
510+
raise ValueError("Invalid parent_qualified_name")
511+
try:
512+
connector_type = AtlanConnectorType(fields[1]) # type:ignore
513+
except ValueError as e:
514+
raise ValueError("Invalid parent_qualified_name") from e
515+
ret_value = Column.Attributes(
516+
name=name,
517+
qualified_name=f"{parent_qualified_name}/{name}",
518+
connector_name=connector_type.value,
519+
schema_name=fields[4],
520+
schema_qualified_name=f"{fields[0]}/{fields[1]}/{fields[2]}/{fields[3]}/{fields[4]}",
521+
database_name=fields[3],
522+
database_qualified_name=f"{fields[0]}/{fields[1]}/{fields[2]}/{fields[3]}",
523+
connection_qualified_name=f"{fields[0]}/{fields[1]}/{fields[2]}",
524+
order=order,
525+
)
526+
if parent_type == Table:
527+
ret_value.table_qualified_name = parent_qualified_name
528+
ret_value.table = Table.ref_by_qualified_name(parent_qualified_name)
529+
elif parent_type == View:
530+
ret_value.view_qualified_name = parent_qualified_name
531+
ret_value.view = View.ref_by_qualified_name(parent_qualified_name)
532+
elif parent_type == MaterialisedView:
533+
ret_value.view_qualified_name = parent_qualified_name
534+
ret_value.materialised_view = MaterialisedView.ref_by_qualified_name(
535+
parent_qualified_name
536+
)
537+
else:
538+
raise ValueError(
539+
f"parent_type must be either Table, View or MaterializeView"
540+
)
541+
return ret_value
542+
543+
@classmethod
544+
# @validate_arguments()
545+
def create(
546+
cls, *, name: str, parent_qualified_name: str, parent_type: type, order: int
547+
) -> Column:
548+
return Column(
549+
attributes=Column.Attributes.create(
550+
name=name,
551+
parent_qualified_name=parent_qualified_name,
552+
parent_type=parent_type,
553+
order=order,
554+
)
555+
)
493556
{%- elif entity_def.name == "S3Bucket" %}
494557
@classmethod
495558
# @validate_arguments()

pyatlan/model/assets.py

+60
Original file line numberDiff line numberDiff line change
@@ -9098,6 +9098,7 @@ def create(cls, *, name: str, schema_qualified_name: str) -> Table.Attributes:
90989098
schema_qualified_name=schema_qualified_name,
90999099
schema_name=fields[4],
91009100
connector_name=connector_type.value,
9101+
atlan_schema=Schema.ref_by_qualified_name(schema_qualified_name),
91019102
)
91029103

91039104
attributes: "Table.Attributes" = Field(
@@ -10021,6 +10022,63 @@ class Attributes(SQL.Attributes):
1002110022
None, description="", alias="columnDbtModelColumns"
1002210023
) # relationship
1002310024

10025+
@classmethod
10026+
# @validate_arguments()
10027+
def create(
10028+
cls, *, name: str, parent_qualified_name: str, parent_type: type, order: int
10029+
) -> Column.Attributes:
10030+
if not name:
10031+
raise ValueError("name cannot be blank")
10032+
validate_required_fields(["parent_qualified_name"], [parent_qualified_name])
10033+
fields = parent_qualified_name.split("/")
10034+
if len(fields) != 6:
10035+
raise ValueError("Invalid parent_qualified_name")
10036+
try:
10037+
connector_type = AtlanConnectorType(fields[1]) # type:ignore
10038+
except ValueError as e:
10039+
raise ValueError("Invalid parent_qualified_name") from e
10040+
ret_value = Column.Attributes(
10041+
name=name,
10042+
qualified_name=f"{parent_qualified_name}/{name}",
10043+
connector_name=connector_type.value,
10044+
schema_name=fields[4],
10045+
schema_qualified_name=f"{fields[0]}/{fields[1]}/{fields[2]}/{fields[3]}/{fields[4]}",
10046+
database_name=fields[3],
10047+
database_qualified_name=f"{fields[0]}/{fields[1]}/{fields[2]}/{fields[3]}",
10048+
connection_qualified_name=f"{fields[0]}/{fields[1]}/{fields[2]}",
10049+
order=order,
10050+
)
10051+
if parent_type == Table:
10052+
ret_value.table_qualified_name = parent_qualified_name
10053+
ret_value.table = Table.ref_by_qualified_name(parent_qualified_name)
10054+
elif parent_type == View:
10055+
ret_value.view_qualified_name = parent_qualified_name
10056+
ret_value.view = View.ref_by_qualified_name(parent_qualified_name)
10057+
elif parent_type == MaterialisedView:
10058+
ret_value.view_qualified_name = parent_qualified_name
10059+
ret_value.materialised_view = MaterialisedView.ref_by_qualified_name(
10060+
parent_qualified_name
10061+
)
10062+
else:
10063+
raise ValueError(
10064+
"parent_type must be either Table, View or MaterializeView"
10065+
)
10066+
return ret_value
10067+
10068+
@classmethod
10069+
# @validate_arguments()
10070+
def create(
10071+
cls, *, name: str, parent_qualified_name: str, parent_type: type, order: int
10072+
) -> Column:
10073+
return Column(
10074+
attributes=Column.Attributes.create(
10075+
name=name,
10076+
parent_qualified_name=parent_qualified_name,
10077+
parent_type=parent_type,
10078+
order=order,
10079+
)
10080+
)
10081+
1002410082
attributes: "Column.Attributes" = Field(
1002510083
None,
1002610084
description="Map of attributes in the instance and their values. The specific keys of this map will vary by "
@@ -10148,6 +10206,7 @@ def create(
1014810206
database_qualified_name=database_qualified_name,
1014910207
qualified_name=f"{database_qualified_name}/{name}",
1015010208
connector_name=connector_type.value,
10209+
database=Database.ref_by_qualified_name(database_qualified_name),
1015110210
)
1015210211

1015310212
attributes: "Schema.Attributes" = Field(
@@ -10785,6 +10844,7 @@ def create(cls, *, name: str, schema_qualified_name: str) -> View.Attributes:
1078510844
schema_qualified_name=schema_qualified_name,
1078610845
schema_name=fields[4],
1078710846
connector_name=connector_type.value,
10847+
atlan_schema=Schema.ref_by_qualified_name(schema_qualified_name),
1078810848
)
1078910849

1079010850
attributes: "View.Attributes" = Field(

pyatlan/model/enums.py

+11
Original file line numberDiff line numberDiff line change
@@ -198,6 +198,17 @@ class AtlanConnectionCategory(Enum):
198198
class AtlanConnectorType(str, Enum):
199199
category: AtlanConnectionCategory
200200

201+
@classmethod
202+
def _get_connector_type_from_qualified_name(
203+
cls, qualified_name: str
204+
) -> "AtlanConnectorType":
205+
tokens = qualified_name.split("/")
206+
if len(tokens) > 1:
207+
return AtlanConnectorType[tokens[1].upper()]
208+
raise ValueError(
209+
f"Could not determine AtlanConnectorType from {qualified_name}"
210+
)
211+
201212
def __new__(
202213
cls, value: str, category: AtlanConnectionCategory
203214
) -> "AtlanConnectorType":

pyatlan/version.txt

+1-1
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
0.0.21
1+
0.0.22

0 commit comments

Comments
 (0)