Skip to content

Commit c81ea9f

Browse files
committed
Add test and flake8
Signed-off-by: popcorny <[email protected]>
1 parent 0cf4f03 commit c81ea9f

File tree

6 files changed

+67
-11
lines changed

6 files changed

+67
-11
lines changed

.flake8

+15
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
[flake8]
2+
ignore = W605, F401, E501, E125, E126
3+
max-line-length = 120
4+
exclude = tests,
5+
docs,
6+
.git,
7+
.venv,
8+
venv,
9+
debug,
10+
build,
11+
dist,
12+
images,
13+
js,
14+
*.egg-info
15+

Makefile

+5
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
flake8:
2+
@flake8
3+
@echo "Passed"
4+
test:
5+
@pytest tests

recce/dbt.py

+22-3
Original file line numberDiff line numberDiff line change
@@ -5,10 +5,15 @@
55
from dbt.adapters.factory import get_adapter_by_type
66
from dbt.adapters.sql import SQLAdapter
77
from dbt.cli.main import dbtRunner
8+
from dbt.config.profile import Profile
9+
from dbt.config.project import Project
810
from dbt.config.runtime import load_profile, load_project
911
from dbt.contracts.graph.manifest import WritableManifest, Manifest
10-
from dbt.config.project import Project
11-
from dbt.config.profile import Profile
12+
from dbt.contracts.results import CatalogArtifact
13+
14+
15+
def hello():
16+
return 'world'
1217

1318

1419
@dataclass
@@ -19,6 +24,8 @@ class DBTContext:
1924
manifest: Manifest
2025
curr_manifest: WritableManifest = None
2126
base_manifest: WritableManifest = None
27+
curr_catalog: CatalogArtifact = None
28+
base_catalog: CatalogArtifact = None
2229

2330
@classmethod
2431
def load(cls, target=None):
@@ -36,12 +43,24 @@ def load(cls, target=None):
3643
curr_manifest = WritableManifest.read_and_check_versions('target/manifest.json')
3744
base_manifest = WritableManifest.read_and_check_versions('target-base/manifest.json')
3845

46+
curr_catalog = None
47+
if os.path.isfile('target/catalog.json'):
48+
curr_catalog = CatalogArtifact.read_and_check_versions('target/catalog.json')
49+
50+
base_catalog = None
51+
if os.path.isfile('target-base/manifest.json'):
52+
base_catalog = CatalogArtifact.read_and_check_versions('target-base/manifest.json')
53+
54+
CatalogArtifact.to_dict()
55+
3956
return cls(profile=profile,
4057
project=project,
4158
adapter=adapter,
4259
manifest=manifest,
4360
curr_manifest=curr_manifest,
44-
base_manifest=base_manifest)
61+
base_manifest=base_manifest,
62+
curr_catalog=curr_catalog,
63+
base_catalog=base_catalog)
4564

4665
def find_resource_by_name(self, resource_name, base=False):
4766

recce/diff.py

+2-1
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
import difflib
2+
23
import pandas as pd
34

45

@@ -27,5 +28,5 @@ def diff_dataframe(before: pd.DataFrame, after: pd.DataFrame):
2728
return
2829

2930
before_aligned, after_aligned = before.align(after)
30-
diff = before_aligned.compare(after_aligned, result_names=('base', 'current'))
31+
diff = before_aligned.compare(after_aligned, result_names=('base', 'current'))
3132
print(diff.to_string(na_rep='-'))

recce/impact.py

+3-2
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,11 @@
11
import csv
22
import io
3+
34
import agate
45
import pandas as pd
6+
from dbt.contracts.graph.nodes import ModelNode, AnalysisNode
57

68
from .dbt import DBTContext
7-
from dbt.contracts.graph.nodes import ModelNode, AnalysisNode
89

910

1011
def _dump_result(result: agate.Table):
@@ -35,7 +36,7 @@ def inspect_model_summary(dbt_context: DBTContext, model: ModelNode):
3536

3637
output += f"identity: {model.identifier}\n"
3738
output += f"rows: {row_count}\n"
38-
output += f"columns:\n"
39+
output += "columns:\n"
3940
for column in columns:
4041
output += f" {column.name} {column.dtype}\n"
4142

recce/server.py

+20-5
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,13 @@
1+
from pathlib import Path
12
from typing import Optional
23

34
from fastapi import FastAPI, Request, HTTPException
45
from fastapi.middleware.cors import CORSMiddleware
56
from fastapi.staticfiles import StaticFiles
6-
from pathlib import Path
7+
from pydantic import BaseModel
8+
79
from .dbt import DBTContext
810
from .impact import inspect_sql
9-
from pydantic import BaseModel
1011

1112
app = FastAPI()
1213
dbt_context: DBTContext = None
@@ -65,9 +66,8 @@ async def get_lineage(base: Optional[bool] = False):
6566

6667
manifest = dbt_context.curr_manifest if base is False else dbt_context.base_manifest
6768

68-
parent_map = json.loads(json.dumps(manifest.parent_map, cls=dbt.utils.JSONEncoder))
69-
70-
69+
parent_map: dict = json.loads(json.dumps(manifest.parent_map, cls=dbt.utils.JSONEncoder))
70+
parent_map = {k: v for k, v in parent_map.items() if not k.startswith('test.')}
7171

7272
nodes = {}
7373

@@ -99,6 +99,21 @@ async def get_lineage(base: Optional[bool] = False):
9999
'resource_type': exposure['resource_type'],
100100
'package_name': exposure['package_name'],
101101
}
102+
for metric in json.loads(json.dumps(manifest.metrics, cls=dbt.utils.JSONEncoder)).values():
103+
nodes[metric['unique_id']] = {
104+
'id': metric['unique_id'],
105+
'name': metric['name'],
106+
'resource_type': metric['resource_type'],
107+
'package_name': metric['package_name'],
108+
}
109+
110+
for semantic_models in json.loads(json.dumps(manifest.semantic_models, cls=dbt.utils.JSONEncoder)).values():
111+
nodes[semantic_models['unique_id']] = {
112+
'id': semantic_models['unique_id'],
113+
'name': semantic_models['name'],
114+
'resource_type': semantic_models['resource_type'],
115+
'package_name': semantic_models['package_name'],
116+
}
102117

103118
return dict(parent_map=parent_map, nodes=nodes)
104119
except Exception as e:

0 commit comments

Comments
 (0)