forked from amundsen-io/amundsen
-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
feat: Add a transformer that adds tags to all tables created in a job (…
…amundsen-io#287) * initial commit * imports * remove debugging print * imports * tests * tests * print * lint * standardize on single quotes * fix python 2 compatibility
- Loading branch information
1 parent
22e26e8
commit c6a2637
Showing
4 changed files
with
123 additions
and
9 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
29 changes: 29 additions & 0 deletions
29
databuilder/databuilder/transformer/table_tag_transformer.py
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,29 @@ | ||
from pyhocon import ConfigFactory | ||
|
||
from databuilder.transformer.base_transformer import Transformer | ||
from databuilder.models.table_metadata import TableMetadata | ||
|
||
|
||
class TableTagTransformer(Transformer): | ||
"""Simple transformer that adds tags to all table nodes produced as part of a job.""" | ||
# Config | ||
TAGS = 'tags' | ||
DEFAULT_CONFIG = ConfigFactory.from_dict({TAGS: None}) | ||
|
||
def init(self, conf): | ||
conf = conf.with_fallback(TableTagTransformer.DEFAULT_CONFIG) | ||
tags = conf.get_string(TableTagTransformer.TAGS) | ||
|
||
self.tags = TableMetadata.format_tags(tags) | ||
|
||
def transform(self, record): | ||
if isinstance(record, TableMetadata): | ||
if record.tags: | ||
record.tags += self.tags | ||
else: | ||
record.tags = self.tags | ||
return record | ||
|
||
def get_scope(self): | ||
# type: () -> str | ||
return 'transformer.table_tag' |
77 changes: 77 additions & 0 deletions
77
databuilder/tests/unit/transformer/test_table_tag_transformer.py
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,77 @@ | ||
import unittest | ||
|
||
from pyhocon import ConfigFactory | ||
|
||
from databuilder.transformer.table_tag_transformer import TableTagTransformer | ||
from databuilder.models.table_metadata import TableMetadata | ||
|
||
|
||
class TestTableTagTransformer(unittest.TestCase): | ||
def test_single_tag(self): | ||
transformer = TableTagTransformer() | ||
config = ConfigFactory.from_dict({ | ||
TableTagTransformer.TAGS: 'foo', | ||
}) | ||
transformer.init(conf=config) | ||
|
||
result = transformer.transform(TableMetadata( | ||
database='test_db', | ||
cluster='test_cluster', | ||
schema='test_schema', | ||
name='test_table', | ||
description='', | ||
)) | ||
|
||
self.assertEqual(result.tags, ['foo']) | ||
|
||
def test_multiple_tags_comma_delimited(self): | ||
transformer = TableTagTransformer() | ||
config = ConfigFactory.from_dict({ | ||
TableTagTransformer.TAGS: 'foo,bar', | ||
}) | ||
transformer.init(conf=config) | ||
|
||
result = transformer.transform(TableMetadata( | ||
database='test_db', | ||
cluster='test_cluster', | ||
schema='test_schema', | ||
name='test_table', | ||
description='', | ||
)) | ||
|
||
self.assertEqual(result.tags, ['foo', 'bar']) | ||
|
||
def test_add_tag_to_existing_tags(self): | ||
transformer = TableTagTransformer() | ||
config = ConfigFactory.from_dict({ | ||
TableTagTransformer.TAGS: 'baz', | ||
}) | ||
transformer.init(conf=config) | ||
|
||
result = transformer.transform(TableMetadata( | ||
database='test_db', | ||
cluster='test_cluster', | ||
schema='test_schema', | ||
name='test_table', | ||
description='', | ||
tags='foo,bar', | ||
)) | ||
self.assertEqual(result.tags, ['foo', 'bar', 'baz']) | ||
|
||
def test_tags_not_added_to_other_objects(self): | ||
transformer = TableTagTransformer() | ||
config = ConfigFactory.from_dict({ | ||
TableTagTransformer.TAGS: 'new_tag', | ||
}) | ||
transformer.init(conf=config) | ||
|
||
class NotATable(): | ||
tags = 'existing_tag' | ||
|
||
result = transformer.transform(NotATable()) | ||
|
||
self.assertEqual(result.tags, 'existing_tag') | ||
|
||
|
||
if __name__ == '__main__': | ||
unittest.main() |