Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
33 commits
Select commit Hold shift + click to select a range
962d298
refactored github_to_ui4t
Jun 26, 2024
f2be50b
Merge branch 'main' into importdbtproject
Jun 30, 2024
b5f3ae1
Merge branch 'main' into importdbtproject
Jul 11, 2024
a233b8a
Merge branch 'main' into importdbtproject
Jul 23, 2024
1c27955
Merge branch 'main' into importdbtproject
Jul 26, 2024
476d6d9
Merge branch 'main' into importdbtproject
Aug 24, 2024
d11b2fe
Merge branch 'main' into importdbtproject
Sep 2, 2024
9e90731
Merge branch 'main' into importdbtproject
Sep 16, 2024
16da711
Merge branch 'main' into importdbtproject
Sep 29, 2024
8f07cdf
Merge branch 'main' into importdbtproject
Nov 11, 2024
d9487e0
Merge branch 'main' into importdbtproject
Nov 19, 2024
2784f79
Merge branch 'main' into importdbtproject
Nov 25, 2024
e468763
Merge branch 'main' into importdbtproject
Nov 27, 2024
4b345d2
Merge branch 'main' into importdbtproject
Dec 9, 2024
71c02c6
Merge branch 'main' into importdbtproject
Dec 22, 2024
5a3bac5
Merge branch 'main' into importdbtproject
Feb 6, 2025
a7e1e7d
Merge branch 'main' into importdbtproject
Feb 7, 2025
914c10c
Merge branch 'main' into importdbtproject
Feb 19, 2025
ff49987
Merge branch 'main' into importdbtproject
Mar 4, 2025
740d7b5
Merge branch 'main' into importdbtproject
Mar 6, 2025
282c635
Merge branch 'main' into importdbtproject
Mar 20, 2025
692ed89
Merge branch 'main' into importdbtproject
Apr 3, 2025
3335eec
Merge branch 'main' into importdbtproject
May 13, 2025
fb1f26c
Merge branch 'main' into importdbtproject
May 20, 2025
f0d7795
Merge branch 'main' into importdbtproject
Jun 11, 2025
728b82d
Merge branch 'main' into importdbtproject
Jun 25, 2025
9349986
Merge branch 'main' into importdbtproject
Jul 3, 2025
23feb71
Merge branch 'main' into importdbtproject
Jul 13, 2025
a37ff78
Merge branch 'main' into importdbtproject
Jul 13, 2025
d63a7bf
black formatting
Jul 13, 2025
a496d82
tests from forgecode
Jul 13, 2025
827aaed
deepsource fussiness
Jul 13, 2025
ece1ffb
all db ops in a transaction
Jul 13, 2025
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion ddpui/ddpdbt/schema.py
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
from typing import Union
from ninja import Schema
from pathlib import Path
from ninja import Schema


class DbtProjectParams(Schema):
Expand Down
83 changes: 83 additions & 0 deletions ddpui/management/commands/github_to_ui4t_2.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,83 @@
"""management/commands/github_to_ui4t.py {org} {file_path}"""

import json
from django.core.management.base import BaseCommand, CommandError
from django.db import transaction
from ddpui.models.org import Org, OrgDbt
from ddpui.utils import importdbtproject


class Command(BaseCommand):
"""Load DBT manifest data into the database"""

help = "Load DBT manifest data into the database"
exclude_schemas = [
"elementary",
"prod_elementary",
"intermediate_elementary",
"information_schema",
"pg_catalog",
"public",
]

def add_arguments(self, parser):
"""command line arguments for the script"""
parser.add_argument("org", type=str, help="Org slug")
parser.add_argument("file_path", type=str, help="Path to the DBT manifest JSON file")

def handle(self, *args, **options):
"""Loads DBT manifest data into the database for a specified organization."""
org = Org.objects.filter(slug=options["org"]).first()
if org is None:
print(f"Org with slug {options['org']} does not exist")
return
orgdbt = OrgDbt.objects.filter(org=org).first()
if orgdbt is None:
raise CommandError(f"No OrgDbt for {org.slug}")

try:
with open(options["file_path"], "r", encoding="utf-8") as f:
manifest_data = json.load(f)
except FileNotFoundError as err:
raise CommandError(f"File not found: {options['file_path']}") from err
except json.JSONDecodeError as e:
raise CommandError(f"Invalid JSON in file {options['file_path']}: {e}") from e
except Exception as e:
raise CommandError(f"Error reading file {options['file_path']}: {e}") from e

models_metadata = importdbtproject.extract_models(manifest_data)

try:
with transaction.atomic():
print("create OrgDbtModel:models")
for modelname, model_metadata in models_metadata.items():
if model_metadata.dbschema in self.exclude_schemas:
continue
print(modelname)
importdbtproject.create_orgdbtmodel_model(orgdbt, model_metadata)

print("create OrgDbtModel:sources")
sources_metadata = importdbtproject.extract_sources(manifest_data)
for sourcename, source_metadata in sources_metadata.items():
if source_metadata.dbschema in self.exclude_schemas:
continue
print(sourcename)
importdbtproject.create_orgdbtmodel_source(orgdbt, source_metadata)

print("creating DbtEdges")
for modelname, model_metadata in models_metadata.items():
if model_metadata.dbschema in self.exclude_schemas:
continue
print(modelname)
importdbtproject.create_orgdbtedges(orgdbt, model_metadata)

print("creating DbtOperations")
for modelname, model_metadata in models_metadata.items():
if model_metadata.dbschema in self.exclude_schemas:
continue
print(modelname)
importdbtproject.create_orgdbtoperation(orgdbt, model_metadata)

print("completed importing dbt project")
except Exception as e:
raise CommandError(f"Error importing dbt project: {e}") from e
Loading