Exemplo n.º 1
0
 def test_basic(self):
     raw_sql = 'select 1 as id'
     block = self.file_block_for(raw_sql, 'nested/analysis_1.sql')
     self.parser.parse_file(block)
     self.assert_has_results_length(self.parser.results, nodes=1)
     node = list(self.parser.results.nodes.values())[0]
     expected = ParsedAnalysisNode(
         alias='analysis_1',
         name='analysis_1',
         database='test',
         schema='analytics',
         resource_type=NodeType.Analysis,
         unique_id='analysis.snowplow.analysis_1',
         fqn=['snowplow', 'analysis', 'nested', 'analysis_1'],
         package_name='snowplow',
         original_file_path=normalize('analyses/nested/analysis_1.sql'),
         root_path=get_abs_os_path('./dbt_modules/snowplow'),
         depends_on=DependsOn(),
         config=NodeConfig(),
         path=normalize('analysis/nested/analysis_1.sql'),
         raw_sql=raw_sql,
     )
     self.assertEqual(node, expected)
     path = get_abs_os_path(
         './dbt_modules/snowplow/analyses/nested/analysis_1.sql')
     self.assertIn(path, self.parser.results.files)
     self.assertEqual(self.parser.results.files[path].nodes,
                      ['analysis.snowplow.analysis_1'])
Exemplo n.º 2
0
 def test_basic(self):
     raw_sql = '{{ config(materialized="table") }}select 1 as id'
     block = self.file_block_for(raw_sql, 'nested/model_1.sql')
     self.parser.parse_file(block)
     self.assert_has_results_length(self.parser.results, nodes=1)
     node = list(self.parser.results.nodes.values())[0]
     expected = ParsedModelNode(
         alias='model_1',
         name='model_1',
         database='test',
         schema='analytics',
         resource_type=NodeType.Model,
         unique_id='model.snowplow.model_1',
         fqn=['snowplow', 'nested', 'model_1'],
         package_name='snowplow',
         original_file_path=normalize('models/nested/model_1.sql'),
         root_path=get_abs_os_path('./dbt_modules/snowplow'),
         config=NodeConfig(materialized='table'),
         path=normalize('nested/model_1.sql'),
         raw_sql=raw_sql,
     )
     self.assertEqual(node, expected)
     path = get_abs_os_path(
         './dbt_modules/snowplow/models/nested/model_1.sql')
     self.assertIn(path, self.parser.results.files)
     self.assertEqual(self.parser.results.files[path].nodes,
                      ['model.snowplow.model_1'])
Exemplo n.º 3
0
 def patch_invalid(self):
     initial = self.ContractType(
         package_name='test',
         root_path='/root/',
         path='/root/x/path.sql',
         original_file_path='/root/path.sql',
         raw_sql='select * from wherever',
         name='foo',
         resource_type=NodeType.Model,
         unique_id='model.test.foo',
         fqn=['test', 'models', 'foo'],
         refs=[],
         sources=[],
         depends_on=DependsOn(),
         description='',
         database='test_db',
         schema='test_schema',
         alias='bar',
         tags=[],
         config=NodeConfig(),
     )
     # invalid patch: description can't be None
     patch = ParsedNodePatch(
         name='foo',
         yaml_key='models',
         package_name='test',
         description=None,
         original_file_path='/path/to/schema.yml',
         columns={},
         docs=Docs(),
     )
     with self.assertRaises(ValidationError):
         initial.patch(patch)
Exemplo n.º 4
0
    def test_ok(self):
        node_dict = self._hook_ok()
        node = self.ContractType(
            package_name='test',
            root_path='/root/',
            path='/root/x/path.sql',
            original_file_path='/root/path.sql',
            raw_sql='select * from wherever',
            name='foo',
            resource_type=NodeType.Operation,
            unique_id='model.test.foo',
            fqn=['test', 'models', 'foo'],
            refs=[],
            sources=[],
            depends_on=DependsOn(),
            description='',
            database='test_db',
            schema='test_schema',
            alias='bar',
            tags=[],
            config=NodeConfig(),
            index=10,
        )
        self.assert_symmetric(node, node_dict)
        self.assertFalse(node.empty)
        self.assertFalse(node.is_refable)
        self.assertEqual(node.get_materialization(), 'view')

        node.index = None
        minimum = {
            'name': 'foo',
            'root_path': '/root/',
            'resource_type': str(NodeType.Operation),
            'path': '/root/x/path.sql',
            'original_file_path': '/root/path.sql',
            'package_name': 'test',
            'raw_sql': 'select * from wherever',
            'unique_id': 'model.test.foo',
            'fqn': ['test', 'models', 'foo'],
            'database': 'test_db',
            'schema': 'test_schema',
            'alias': 'bar',
        }
        self.assert_from_dict(node, minimum)
        pickle.loads(pickle.dumps(node))
Exemplo n.º 5
0
    def test_complex(self):
        node_dict = {
            'name': 'foo',
            'root_path': '/root/',
            'resource_type': str(NodeType.Operation),
            'path': '/root/x/path.sql',
            'original_file_path': '/root/path.sql',
            'package_name': 'test',
            'raw_sql': 'select * from {{ ref("bar") }}',
            'unique_id': 'model.test.foo',
            'fqn': ['test', 'models', 'foo'],
            'refs': [],
            'sources': [],
            'depends_on': {
                'macros': [],
                'nodes': ['model.test.bar']
            },
            'database': 'test_db',
            'description': 'My parsed node',
            'schema': 'test_schema',
            'alias': 'bar',
            'tags': ['tag'],
            'meta': {},
            'config': {
                'column_types': {
                    'a': 'text'
                },
                'enabled': True,
                'materialized': 'table',
                'persist_docs': {},
                'post-hook': [],
                'pre-hook': [],
                'quoting': {},
                'tags': [],
                'vars': {},
            },
            'docs': {
                'show': True
            },
            'columns': {
                'a': {
                    'name': 'a',
                    'description': 'a text field',
                    'meta': {},
                    'tags': [],
                },
            },
            'index': 13,
        }

        node = self.ContractType(
            package_name='test',
            root_path='/root/',
            path='/root/x/path.sql',
            original_file_path='/root/path.sql',
            raw_sql='select * from {{ ref("bar") }}',
            name='foo',
            resource_type=NodeType.Operation,
            unique_id='model.test.foo',
            fqn=['test', 'models', 'foo'],
            refs=[],
            sources=[],
            depends_on=DependsOn(nodes=['model.test.bar']),
            description='My parsed node',
            database='test_db',
            schema='test_schema',
            alias='bar',
            tags=['tag'],
            meta={},
            config=NodeConfig(column_types={'a': 'text'},
                              materialized='table',
                              post_hook=[]),
            columns={'a': ColumnInfo('a', 'a text field', {})},
            index=13,
        )
        self.assert_symmetric(node, node_dict)
        self.assertFalse(node.empty)
        self.assertFalse(node.is_refable)
        self.assertEqual(node.get_materialization(), 'table')
Exemplo n.º 6
0
    def test_patch_ok(self):
        initial = self.ContractType(
            package_name='test',
            root_path='/root/',
            path='/root/x/path.sql',
            original_file_path='/root/path.sql',
            raw_sql='select * from wherever',
            name='foo',
            resource_type=NodeType.Model,
            unique_id='model.test.foo',
            fqn=['test', 'models', 'foo'],
            refs=[],
            sources=[],
            depends_on=DependsOn(),
            description='',
            database='test_db',
            schema='test_schema',
            alias='bar',
            tags=[],
            meta={},
            config=NodeConfig(),
        )
        patch = ParsedNodePatch(
            name='foo',
            yaml_key='models',
            package_name='test',
            description='The foo model',
            original_file_path='/path/to/schema.yml',
            columns={
                'a': ColumnInfo(name='a', description='a text field', meta={})
            },
            docs=Docs(),
            meta={},
        )

        initial.patch(patch)

        expected_dict = {
            'name': 'foo',
            'root_path': '/root/',
            'resource_type': str(NodeType.Model),
            'path': '/root/x/path.sql',
            'original_file_path': '/root/path.sql',
            'package_name': 'test',
            'raw_sql': 'select * from wherever',
            'unique_id': 'model.test.foo',
            'fqn': ['test', 'models', 'foo'],
            'refs': [],
            'sources': [],
            'depends_on': {
                'macros': [],
                'nodes': []
            },
            'database': 'test_db',
            'description': 'The foo model',
            'schema': 'test_schema',
            'alias': 'bar',
            'tags': [],
            'meta': {},
            'config': {
                'column_types': {},
                'enabled': True,
                'materialized': 'view',
                'persist_docs': {},
                'post-hook': [],
                'pre-hook': [],
                'quoting': {},
                'tags': [],
                'vars': {},
            },
            'patch_path': '/path/to/schema.yml',
            'columns': {
                'a': {
                    'name': 'a',
                    'description': 'a text field',
                    'meta': {},
                    'tags': [],
                },
            },
            'docs': {
                'show': True
            },
        }

        expected = self.ContractType(
            package_name='test',
            root_path='/root/',
            path='/root/x/path.sql',
            original_file_path='/root/path.sql',
            raw_sql='select * from wherever',
            name='foo',
            resource_type=NodeType.Model,
            unique_id='model.test.foo',
            fqn=['test', 'models', 'foo'],
            refs=[],
            sources=[],
            depends_on=DependsOn(),
            description='The foo model',
            database='test_db',
            schema='test_schema',
            alias='bar',
            tags=[],
            meta={},
            config=NodeConfig(),
            patch_path='/path/to/schema.yml',
            columns={
                'a': ColumnInfo(name='a', description='a text field', meta={})
            },
            docs=Docs(),
        )
        self.assert_symmetric(expected, expected_dict)  # sanity check
        self.assertEqual(initial, expected)
        self.assert_symmetric(initial, expected_dict)