Skip to content

Commit feac55b

Browse files
committed
feat: add class to generate table CSVs
1 parent 1302c2e commit feac55b

File tree

3 files changed

+141
-1
lines changed

3 files changed

+141
-1
lines changed

home/service/details_csv.py

+51
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,51 @@
1+
from home.service.details import DatabaseDetailsService, DatasetDetailsService
2+
3+
4+
class DatasetDetailsCsvFormatter:
5+
def __init__(self, details_service: DatasetDetailsService):
6+
self.details_service = details_service
7+
8+
def data(self):
9+
return [
10+
(
11+
column.name,
12+
column.display_name,
13+
column.is_primary_key,
14+
column.type,
15+
column.nullable,
16+
column.description,
17+
)
18+
for column in self.details_service.table_metadata.column_details
19+
]
20+
21+
def headers(self):
22+
return [
23+
"name",
24+
"display_name",
25+
"is_primary_key",
26+
"type",
27+
"nullable",
28+
"description",
29+
]
30+
31+
32+
class DatabaseDetailsCsvFormatter:
33+
def __init__(self, details_service: DatabaseDetailsService):
34+
self.details_service = details_service
35+
36+
def data(self):
37+
return [
38+
(
39+
table.entity_ref.urn,
40+
table.entity_ref.display_name,
41+
table.description,
42+
)
43+
for table in self.details_service.entities_in_database
44+
]
45+
46+
def headers(self):
47+
return [
48+
"urn",
49+
"display_name",
50+
"description",
51+
]

lib/datahub-client/data_platform_catalogue/entities.py

+1-1
Original file line numberDiff line numberDiff line change
@@ -265,7 +265,7 @@ class EntitySummary(BaseModel):
265265
)
266266
description: str = Field(description="A description of the entity")
267267
entity_type: str = Field(
268-
description="indicates the tpye of entity that is summarised"
268+
description="indicates the type of entity that is summarised"
269269
)
270270
tags: list[TagRef] = Field(description="Any tags associated with the entity")
271271

+89
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,89 @@
1+
from unittest.mock import MagicMock
2+
3+
from data_platform_catalogue.entities import Column, EntityRef, EntitySummary
4+
5+
from home.service.details import DatabaseDetailsService, DatasetDetailsService
6+
from home.service.details_csv import (
7+
DatabaseDetailsCsvFormatter,
8+
DatasetDetailsCsvFormatter,
9+
)
10+
11+
12+
def test_dataset_details_csv_formatter(example_table):
13+
details_service = MagicMock(spec=DatasetDetailsService)
14+
columns = [
15+
Column(
16+
name="foo",
17+
display_name="Foo",
18+
type="string",
19+
description="an example",
20+
nullable=False,
21+
is_primary_key=True,
22+
),
23+
Column(
24+
name="bar",
25+
display_name="Bar",
26+
type="integer",
27+
description="another example",
28+
nullable=True,
29+
is_primary_key=False,
30+
),
31+
]
32+
details_service.table_metadata = example_table
33+
example_table.column_details = columns
34+
csv_formatter = DatasetDetailsCsvFormatter(details_service)
35+
36+
assert csv_formatter.headers() == [
37+
"name",
38+
"display_name",
39+
"is_primary_key",
40+
"type",
41+
"nullable",
42+
"description",
43+
]
44+
assert csv_formatter.data() == [
45+
(
46+
"foo",
47+
"Foo",
48+
True,
49+
"string",
50+
False,
51+
"an example",
52+
),
53+
(
54+
"bar",
55+
"Bar",
56+
False,
57+
"integer",
58+
True,
59+
"another example",
60+
),
61+
]
62+
63+
64+
def test_database_details_csv_formatter(example_database):
65+
tables = [
66+
EntitySummary(
67+
entity_ref=EntityRef(display_name="foo", urn="urn:foo"),
68+
description="an example",
69+
entity_type="Table",
70+
tags=[],
71+
),
72+
EntitySummary(
73+
entity_ref=EntityRef(display_name="bar", urn="urn:bar"),
74+
description="another example",
75+
entity_type="Table",
76+
tags=[],
77+
),
78+
]
79+
80+
details_service = MagicMock(spec=DatabaseDetailsService)
81+
details_service.entities_in_database = tables
82+
83+
csv_formatter = DatabaseDetailsCsvFormatter(details_service)
84+
85+
assert csv_formatter.headers() == ["urn", "display_name", "description"]
86+
assert csv_formatter.data() == [
87+
("urn:foo", "foo", "an example"),
88+
("urn:bar", "bar", "another example"),
89+
]

0 commit comments

Comments
 (0)