Esempio n. 1
0
 def transform(self, node: IntermediateSnapshotNode) -> ParsedSnapshotNode:
     try:
         parsed_node = ParsedSnapshotNode.from_dict(node.to_dict())
         self.set_snapshot_attributes(parsed_node)
         return parsed_node
     except ValidationError as exc:
         raise CompilationException(validator_error_message(exc), node)
Esempio n. 2
0
    def validate_snapshots(node):
        if node.resource_type == NodeType.Snapshot:
            try:
                parsed_node = ParsedSnapshotNode(**node.to_shallow_dict())
                return set_snapshot_attributes(parsed_node)

            except dbt.exceptions.JSONValidationException as exc:
                raise dbt.exceptions.CompilationException(str(exc), node)
        else:
            return node
Esempio n. 3
0
 def test_single_block(self):
     raw_sql = '''{{
             config(unique_key="id", target_schema="analytics",
                    target_database="dbt", strategy="timestamp",
                    updated_at="last_update")
         }}
         select 1 as id, now() as last_update'''
     full_file = '''
     {{% snapshot foo %}}{}{{% endsnapshot %}}
     '''.format(raw_sql)
     block = self.file_block_for(full_file, 'nested/snap_1.sql')
     self.parser.parse_file(block)
     self.assert_has_manifest_lengths(self.parser.manifest, nodes=1)
     node = list(self.parser.manifest.nodes.values())[0]
     expected = ParsedSnapshotNode(
         alias='foo',
         name='foo',
         # the `database` entry is overrridden by the target_database config
         database='dbt',
         schema='analytics',
         resource_type=NodeType.Snapshot,
         unique_id='snapshot.snowplow.foo',
         fqn=['snowplow', 'nested', 'snap_1', 'foo'],
         package_name='snowplow',
         original_file_path=normalize('snapshots/nested/snap_1.sql'),
         root_path=get_abs_os_path('./dbt_modules/snowplow'),
         config=SnapshotConfig(
             strategy='timestamp',
             updated_at='last_update',
             target_database='dbt',
             target_schema='analytics',
             unique_key='id',
             materialized='snapshot',
         ),
         path=normalize('nested/snap_1.sql'),
         raw_sql=raw_sql,
         checksum=block.file.checksum,
         unrendered_config={
             'unique_key': 'id',
             'target_schema': 'analytics',
             'target_database': 'dbt',
             'strategy': 'timestamp',
             'updated_at': 'last_update',
         },
     )
     self.assertEqual(node, expected)
     path = get_abs_os_path(
         './dbt_modules/snowplow/snapshots/nested/snap_1.sql')
     self.assertIn(path, self.parser.manifest.files)
     self.assertEqual(self.parser.manifest.files[path].nodes,
                      ['snapshot.snowplow.foo'])
Esempio n. 4
0
 def test_multi_block(self):
     raw_1 = '''
         {{
             config(unique_key="id", target_schema="analytics",
                    target_database="dbt", strategy="timestamp",
                    updated_at="last_update")
         }}
         select 1 as id, now() as last_update
     '''
     raw_2 = '''
         {{
             config(unique_key="id", target_schema="analytics",
                    target_database="dbt", strategy="timestamp",
                    updated_at="last_update")
         }}
         select 2 as id, now() as last_update
     '''
     full_file = '''
     {{% snapshot foo %}}{}{{% endsnapshot %}}
     {{% snapshot bar %}}{}{{% endsnapshot %}}
     '''.format(raw_1, raw_2)
     block = self.file_block_for(full_file, 'nested/snap_1.sql')
     self.parser.parse_file(block)
     self.assert_has_results_length(self.parser.results, nodes=2)
     nodes = sorted(self.parser.results.nodes.values(), key=lambda n: n.name)
     expect_foo = ParsedSnapshotNode(
         alias='foo',
         name='foo',
         database='dbt',
         schema='analytics',
         resource_type=NodeType.Snapshot,
         unique_id='snapshot.snowplow.foo',
         fqn=['snowplow', 'nested', 'snap_1', 'foo'],
         package_name='snowplow',
         original_file_path=normalize('snapshots/nested/snap_1.sql'),
         root_path=get_abs_os_path('./dbt_modules/snowplow'),
         config=TimestampSnapshotConfig(
             strategy=SnapshotStrategy.Timestamp,
             updated_at='last_update',
             target_database='dbt',
             target_schema='analytics',
             unique_key='id',
             materialized='snapshot',
         ),
         path=normalize('nested/snap_1.sql'),
         raw_sql=raw_1,
     )
     expect_bar = ParsedSnapshotNode(
         alias='bar',
         name='bar',
         database='dbt',
         schema='analytics',
         resource_type=NodeType.Snapshot,
         unique_id='snapshot.snowplow.bar',
         fqn=['snowplow', 'nested', 'snap_1', 'bar'],
         package_name='snowplow',
         original_file_path=normalize('snapshots/nested/snap_1.sql'),
         root_path=get_abs_os_path('./dbt_modules/snowplow'),
         config=TimestampSnapshotConfig(
             strategy=SnapshotStrategy.Timestamp,
             updated_at='last_update',
             target_database='dbt',
             target_schema='analytics',
             unique_key='id',
             materialized='snapshot',
         ),
         path=normalize('nested/snap_1.sql'),
         raw_sql=raw_2,
     )
     self.assertEqual(nodes[0], expect_bar)
     self.assertEqual(nodes[1], expect_foo)
     path = get_abs_os_path('./dbt_modules/snowplow/snapshots/nested/snap_1.sql')
     self.assertIn(path, self.parser.results.files)
     self.assertEqual(sorted(self.parser.results.files[path].nodes),
                      ['snapshot.snowplow.bar', 'snapshot.snowplow.foo'])