Skip to content

Commit

Permalink
Merge pull request #401 from DalgoT4D/show-entities
Browse files Browse the repository at this point in the history
Show entities
  • Loading branch information
fatchat authored Dec 30, 2023
2 parents a76a6ef + de24f36 commit 9f51bd7
Show file tree
Hide file tree
Showing 3 changed files with 145 additions and 22 deletions.
8 changes: 5 additions & 3 deletions ddpui/management/commands/deleteorg.py
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@
from django.core.management.base import BaseCommand

from ddpui.models.org_user import Org
from ddpui.utils.deleteorg import delete_one_org
from ddpui.utils.deleteorg import delete_one_org, display_org


load_dotenv()
Expand All @@ -25,7 +25,7 @@ def handle(self, *args, **options):
"""Docstring"""
if options["org_name"] == "ALL":
for org in Org.objects.all():
delete_one_org(org, options["yes_really"])
display_org(org)
else:
org = Org.objects.filter(name=options["org_name"]).first()
if org is None:
Expand All @@ -34,4 +34,6 @@ def handle(self, *args, **options):
print("no such org")
return

delete_one_org(org, options["yes_really"])
display_org(org)
if options["yes_really"]:
delete_one_org(org)
117 changes: 117 additions & 0 deletions ddpui/management/commands/showentities.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,117 @@
"""shows blocks and tasks for an org"""
from django.core.management.base import BaseCommand
from django.utils.text import slugify

from ddpui.models.orgjobs import DataflowBlock
from ddpui.models.org import Org, OrgPrefectBlock, OrgDataFlow
from ddpui.models.tasks import OrgTask, OrgDataFlowv1


class Command(BaseCommand):
"""
This script displays dataflows and prefect blocks in the django db
"""

help = "Displays dataflows and prefect blocks in the django db"

def add_arguments(self, parser): # skipcq: PYL-R0201
parser.add_argument("--org")

def show_orgprefectblocks(self, org: Org):
"""shows all OrgPrefectBlocks for an org"""
print("Blocks for " + org.slug + ":")
for opb in OrgPrefectBlock.objects.filter(org=org).order_by("block_type"):
if opb.block_type == "Airbyte Server":
print(f" {opb.block_type}")
elif opb.block_type == "Airbyte Connection":
print(f" {opb.block_name}")
elif opb.block_type.find("Shell") == 0:
print(f" {opb.command}")
else:
print(f" dbt {opb.command}")

def show_manual_dataflows(self, org: Org):
"""shows all manual OrgDataFlows for an org"""
print("Manual Dataflows for " + org.slug + ":")
for dataflow in OrgDataFlow.objects.filter(org=org).filter(
dataflow_type="manual"
):
assert DataflowBlock.objects.filter(dataflow=dataflow).count() == 1
dfb = DataflowBlock.objects.filter(dataflow=dataflow).first()
print(
f" {dataflow.deployment_name:50} [{dfb.opb.block_type:20}] {dfb.opb.command}"
)

def show_orchestrated_dataflows(self, org: Org):
"""shows all orchestrated OrgDataFlows for an org"""
print("Orchestrated Dataflows for " + org.slug + ":")
for dataflow in OrgDataFlow.objects.filter(org=org).filter(
dataflow_type="orchestrate"
):
q_dfdfb = DataflowBlock.objects.filter(dataflow=dataflow)
if (
q_dfdfb.filter(opb__block_type="Airbyte Connection").count() == 1
and q_dfdfb.filter(opb__block_type="Shell Operation").count() == 1
and q_dfdfb.filter(opb__block_type="dbt Core Operation").count() == 5
):
print(f" {dataflow.deployment_name:50} [with all 7 blocks]")
else:
for dfb in q_dfdfb:
opb = dfb.opb
print(
f" {dataflow.deployment_name:50} [{opb.block_type:20}] {opb.command}"
)
print("")

def show_org_tasks(self, org: Org):
"""shows all tasks for an org"""
print("OrgTasks for " + org.slug + ":")
for orgtask in OrgTask.objects.filter(org=org):
print(
f" {orgtask.task.type} {orgtask.task.label} {orgtask.connection_id if orgtask.connection_id else ''}"
)

def show_v1_manual_dataflows(self, org: Org):
"""show the v1 dataflows"""
print("v1 Manual Dataflows for " + org.slug + ":")
for dataflow in OrgDataFlowv1.objects.filter(org=org).filter(
dataflow_type="manual"
):
print(f" {dataflow.deployment_name:50} ")

def show_v1_orchestrated_dataflows(self, org: Org):
"""show the v1 dataflows"""
print("v1 orchestrated Dataflows for " + org.slug + ":")
for dataflow in OrgDataFlowv1.objects.filter(org=org).filter(
dataflow_type="orchestrate"
):
print(f" {dataflow.deployment_name:50} ")

def show_org_entities(self, org: Org):
"""shows all entities for an org"""

if org.slug is None:
org.slug = slugify(org.name)[:20]
org.save()
print(f"{org.slug}")
self.show_orgprefectblocks(org)
print("")
self.show_org_tasks(org)
print("")
self.show_manual_dataflows(org)
print("")
self.show_v1_manual_dataflows(org)
print("")
self.show_orchestrated_dataflows(org)
print("")
self.show_v1_orchestrated_dataflows(org)
print("=" * 80)

def handle(self, *args, **options):
"""filters on --org if provided"""
if options["org"]:
org = Org.objects.filter(slug=options["org"]).first()
self.show_org_entities(org)
else:
for org in Org.objects.all():
self.show_org_entities(org)
42 changes: 23 additions & 19 deletions ddpui/utils/deleteorg.py
Original file line number Diff line number Diff line change
Expand Up @@ -112,10 +112,11 @@ def delete_airbyte_workspace(org: Org): # skipcq: PYL-R0201
secretsmanager.delete_warehouse_credentials(warehouse)
warehouse.delete()

try:
airbyte_service.delete_workspace(org.airbyte_workspace_id)
except Exception:
pass
if is_valid_uuid(org.airbyte_workspace_id):
try:
airbyte_service.delete_workspace(org.airbyte_workspace_id)
except Exception:
pass


def delete_warehouse_v1(org: Org): # skipcq: PYL-R0201
Expand Down Expand Up @@ -203,10 +204,10 @@ def delete_airbyte_workspace_v1(org: Org): # skipcq: PYL-R0201
logger.info("deleting source in Airbyte " + source["sourceId"])
airbyte_service.delete_source(org.airbyte_workspace_id, source["sourceId"])

try:
airbyte_service.delete_workspace(org.airbyte_workspace_id)
except Exception:
pass
try:
airbyte_service.delete_workspace(org.airbyte_workspace_id)
except Exception:
pass


def delete_orgusers(org: Org): # skipcq: PYL-R0201
Expand All @@ -216,8 +217,8 @@ def delete_orgusers(org: Org): # skipcq: PYL-R0201
# this deletes the orguser as well via CASCADE


def delete_one_org(org: Org, yes_really: bool):
"""delete one org"""
def display_org(org: Org):
"""show org"""
account_admin = OrgUser.objects.filter(
org=org, role=OrgUserRole.ACCOUNT_MANAGER
).first()
Expand All @@ -228,12 +229,15 @@ def delete_one_org(org: Org, yes_really: bool):
org.airbyte_workspace_id,
account_admin.user.email if account_admin else "<unknonw>",
)
if yes_really:
delete_prefect_deployments(org)
delete_dbt_workspace(org)
if org.airbyte_workspace_id:
delete_airbyte_workspace(org)
delete_airbyte_workspace_v1(org)
delete_prefect_shell_blocks(org)
delete_orgusers(org)
org.delete()


def delete_one_org(org: Org):
"""delete one org"""
delete_prefect_deployments(org)
delete_dbt_workspace(org)
if org.airbyte_workspace_id:
delete_airbyte_workspace(org)
delete_airbyte_workspace_v1(org)
delete_prefect_shell_blocks(org)
delete_orgusers(org)
org.delete()

0 comments on commit 9f51bd7

Please sign in to comment.