Skip to content

Commit 357685b

Browse files
ErnestoLomaAryamanz29
authored andcommitted
Initial version
1 parent 554460a commit 357685b

File tree

3 files changed

+184
-1
lines changed

3 files changed

+184
-1
lines changed

pyatlan/model/assets/core/procedure.py

Lines changed: 101 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,18 +4,68 @@
44

55
from __future__ import annotations
66

7-
from typing import ClassVar, List, Optional
7+
from typing import ClassVar, List, Optional, overload
88

99
from pydantic.v1 import Field, validator
1010

1111
from pyatlan.model.fields.atlan_fields import RelationField, TextField
12+
from pyatlan.utils import init_guid, validate_required_fields
1213

14+
from ...enums import AtlanConnectorType
1315
from .s_q_l import SQL
1416

1517

1618
class Procedure(SQL):
1719
"""Description"""
1820

21+
@overload
22+
@classmethod
23+
def creator(
24+
cls,
25+
*,
26+
name: str,
27+
schema_qualified_name: str,
28+
definition: str,
29+
) -> Procedure: ...
30+
31+
@overload
32+
@classmethod
33+
def creator(
34+
cls,
35+
*,
36+
name: str,
37+
schema_qualified_name: str,
38+
schema_name: str,
39+
database_name: str,
40+
database_qualified_name: str,
41+
connection_qualified_name: str,
42+
definition: str,
43+
) -> Procedure: ...
44+
45+
@classmethod
46+
@init_guid
47+
def creator(
48+
cls,
49+
*,
50+
name: str,
51+
definition: str,
52+
schema_qualified_name: str,
53+
schema_name: Optional[str] = None,
54+
database_name: Optional[str] = None,
55+
database_qualified_name: Optional[str] = None,
56+
connection_qualified_name: Optional[str] = None,
57+
) -> Procedure:
58+
attributes = Procedure.Attributes.create(
59+
name=name,
60+
definition=definition,
61+
schema_qualified_name=schema_qualified_name,
62+
schema_name=schema_name,
63+
database_name=database_name,
64+
database_qualified_name=database_qualified_name,
65+
connection_qualified_name=connection_qualified_name,
66+
)
67+
return cls(attributes=attributes)
68+
1969
type_name: str = Field(default="Procedure", allow_mutation=False)
2070

2171
@validator("type_name")
@@ -70,6 +120,56 @@ class Attributes(SQL.Attributes):
70120
default=None, description=""
71121
) # relationship
72122

123+
@classmethod
124+
@init_guid
125+
def create(
126+
cls,
127+
*,
128+
name: str,
129+
definition: str,
130+
schema_qualified_name: Optional[str] = None,
131+
schema_name: Optional[str] = None,
132+
database_name: Optional[str] = None,
133+
database_qualified_name: Optional[str] = None,
134+
connection_qualified_name: Optional[str] = None,
135+
) -> Procedure.Attributes:
136+
validate_required_fields(
137+
["name", "definition", "schema_qualified_name"],
138+
[name, definition, schema_qualified_name],
139+
)
140+
assert schema_qualified_name # noqa: S101
141+
if connection_qualified_name:
142+
connector_name = AtlanConnectorType.get_connector_name(
143+
connection_qualified_name
144+
)
145+
else:
146+
connection_qn, connector_name = AtlanConnectorType.get_connector_name(
147+
schema_qualified_name, "schema_qualified_name", 5
148+
)
149+
150+
fields = schema_qualified_name.split("/")
151+
qualified_name = f"{schema_qualified_name}/_procedures_/{name}"
152+
connection_qualified_name = connection_qualified_name or connection_qn
153+
database_name = database_name or fields[3]
154+
schema_name = schema_name or fields[4]
155+
database_qualified_name = (
156+
database_qualified_name
157+
or f"{connection_qualified_name}/{database_name}"
158+
)
159+
160+
return Procedure.Attributes(
161+
name=name,
162+
definition=definition,
163+
qualified_name=qualified_name,
164+
database_name=database_name,
165+
database_qualified_name=database_qualified_name,
166+
schema_name=schema_name,
167+
schema_qualified_name=schema_qualified_name,
168+
atlan_schema=Schema.ref_by_qualified_name(schema_qualified_name),
169+
connector_name=connector_name,
170+
connection_qualified_name=connection_qualified_name,
171+
)
172+
73173
attributes: Procedure.Attributes = Field(
74174
default_factory=lambda: Procedure.Attributes(),
75175
description=(

tests/unit/model/constants.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -237,3 +237,4 @@
237237
SUPERSET_DATASET_QUALIFIED_NAME = (
238238
f"{SUPERSET_DASHBOARD_QUALIFIED_NAME}/{SUPERSET_DATASET_NAME}"
239239
)
240+
PROCEDURE_NAME = "test-procedure"

tests/unit/model/procedure_test.py

Lines changed: 82 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,82 @@
1+
import pytest
2+
3+
from pyatlan.model.assets import Procedure
4+
from tests.unit.model.constants import (
5+
CONNECTION_QUALIFIED_NAME,
6+
CONNECTOR_TYPE,
7+
DATABASE_NAME,
8+
DATABASE_QUALIFIED_NAME,
9+
PROCEDURE_NAME,
10+
SCHEMA_NAME,
11+
SCHEMA_QUALIFIED_NAME,
12+
)
13+
14+
DEFINITION = """
15+
BEGIN
16+
insert into `atlanhq.testing_lineage.INSTACART_ALCOHOL_ORDER_TIME_copy`
17+
select * from `atlanhq.testing_lineage.INSTACART_ALCOHOL_ORDER_TIME`;
18+
END
19+
"""
20+
21+
22+
@pytest.mark.parametrize(
23+
"name, definition, schema_qualified_name, message",
24+
[
25+
(None, DEFINITION, SCHEMA_QUALIFIED_NAME, "name is required"),
26+
(PROCEDURE_NAME, None, SCHEMA_QUALIFIED_NAME, "definition is required"),
27+
(PROCEDURE_NAME, DEFINITION, None, "schema_qualified_name is required"),
28+
],
29+
)
30+
def test_create_with_missing_parameters_raise_value_error(
31+
name: str, definition: str, schema_qualified_name: str, message: str
32+
):
33+
with pytest.raises(ValueError, match=message):
34+
Procedure.create(
35+
name=name,
36+
definition=definition,
37+
schema_qualified_name=schema_qualified_name,
38+
)
39+
40+
41+
def test_creator():
42+
sut = Procedure.create(
43+
name=PROCEDURE_NAME,
44+
definition=DEFINITION,
45+
schema_qualified_name=SCHEMA_QUALIFIED_NAME,
46+
)
47+
48+
assert sut.name == PROCEDURE_NAME
49+
assert sut.database_name == DATABASE_NAME
50+
assert sut.connection_qualified_name == CONNECTION_QUALIFIED_NAME
51+
assert sut.database_qualified_name == DATABASE_QUALIFIED_NAME
52+
assert (
53+
sut.qualified_name == f"{SCHEMA_QUALIFIED_NAME}/_procedures_/{PROCEDURE_NAME}"
54+
)
55+
assert sut.schema_qualified_name == SCHEMA_QUALIFIED_NAME
56+
assert sut.schema_name == SCHEMA_NAME
57+
assert sut.connector_name == CONNECTOR_TYPE
58+
assert sut.atlan_schema.qualified_name == SCHEMA_QUALIFIED_NAME
59+
60+
61+
def test_overload_creator():
62+
sut = Procedure.creator(
63+
name=PROCEDURE_NAME,
64+
definition=DEFINITION,
65+
schema_qualified_name=SCHEMA_QUALIFIED_NAME,
66+
schema_name=SCHEMA_NAME,
67+
database_name=DATABASE_NAME,
68+
database_qualified_name=DATABASE_QUALIFIED_NAME,
69+
connection_qualified_name=CONNECTION_QUALIFIED_NAME,
70+
)
71+
72+
assert sut.name == PROCEDURE_NAME
73+
assert sut.database_name == DATABASE_NAME
74+
assert sut.connection_qualified_name == CONNECTION_QUALIFIED_NAME
75+
assert sut.database_qualified_name == DATABASE_QUALIFIED_NAME
76+
assert (
77+
sut.qualified_name == f"{SCHEMA_QUALIFIED_NAME}/_procedures_/{PROCEDURE_NAME}"
78+
)
79+
assert sut.schema_qualified_name == SCHEMA_QUALIFIED_NAME
80+
assert sut.schema_name == SCHEMA_NAME
81+
assert sut.connector_name == CONNECTOR_TYPE
82+
assert sut.atlan_schema.qualified_name == SCHEMA_QUALIFIED_NAME

0 commit comments

Comments
 (0)