dataflow-core 2.1.31__tar.gz → 2.1.32__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {dataflow_core-2.1.31 → dataflow_core-2.1.32}/PKG-INFO +4 -2
- {dataflow_core-2.1.31 → dataflow_core-2.1.32}/dataflow/models/__init__.py +1 -0
- dataflow_core-2.1.32/dataflow/models/dbml_diagram.py +58 -0
- {dataflow_core-2.1.31 → dataflow_core-2.1.32}/dataflow/models/project_details.py +16 -1
- {dataflow_core-2.1.31 → dataflow_core-2.1.32}/dataflow/scripts/build_from_upper.sh +1 -1
- {dataflow_core-2.1.31 → dataflow_core-2.1.32}/dataflow_core.egg-info/PKG-INFO +4 -2
- {dataflow_core-2.1.31 → dataflow_core-2.1.32}/dataflow_core.egg-info/SOURCES.txt +3 -0
- {dataflow_core-2.1.31 → dataflow_core-2.1.32}/dataflow_core.egg-info/requires.txt +3 -1
- dataflow_core-2.1.32/dfmigration/versions/028_create_diagram_table.py +60 -0
- dataflow_core-2.1.32/dfmigration/versions/029_project_studio_source.py +40 -0
- {dataflow_core-2.1.31 → dataflow_core-2.1.32}/setup.py +4 -2
- {dataflow_core-2.1.31 → dataflow_core-2.1.32}/README.md +0 -0
- {dataflow_core-2.1.31 → dataflow_core-2.1.32}/authenticator/__init__.py +0 -0
- {dataflow_core-2.1.31 → dataflow_core-2.1.32}/authenticator/dataflowairflowauthenticator.py +0 -0
- {dataflow_core-2.1.31 → dataflow_core-2.1.32}/authenticator/dataflowhubauthenticator.py +0 -0
- {dataflow_core-2.1.31 → dataflow_core-2.1.32}/authenticator/dataflowsupersetauthenticator.py +0 -0
- {dataflow_core-2.1.31 → dataflow_core-2.1.32}/authenticator/utils/__init__.py +0 -0
- {dataflow_core-2.1.31 → dataflow_core-2.1.32}/authenticator/utils/verify_email_domain.py +0 -0
- {dataflow_core-2.1.31 → dataflow_core-2.1.32}/dataflow/__init__.py +0 -0
- {dataflow_core-2.1.31 → dataflow_core-2.1.32}/dataflow/configuration.py +0 -0
- {dataflow_core-2.1.31 → dataflow_core-2.1.32}/dataflow/database_manager.py +0 -0
- {dataflow_core-2.1.31 → dataflow_core-2.1.32}/dataflow/dataflow.py +0 -0
- {dataflow_core-2.1.31 → dataflow_core-2.1.32}/dataflow/db.py +0 -0
- {dataflow_core-2.1.31 → dataflow_core-2.1.32}/dataflow/environment.py +0 -0
- {dataflow_core-2.1.31 → dataflow_core-2.1.32}/dataflow/models/active_server_view.py +0 -0
- {dataflow_core-2.1.31 → dataflow_core-2.1.32}/dataflow/models/ai_provider.py +0 -0
- {dataflow_core-2.1.31 → dataflow_core-2.1.32}/dataflow/models/app_types.py +0 -0
- {dataflow_core-2.1.31 → dataflow_core-2.1.32}/dataflow/models/blacklist_library.py +0 -0
- {dataflow_core-2.1.31 → dataflow_core-2.1.32}/dataflow/models/connection.py +0 -0
- {dataflow_core-2.1.31 → dataflow_core-2.1.32}/dataflow/models/connection_type.py +0 -0
- {dataflow_core-2.1.31 → dataflow_core-2.1.32}/dataflow/models/container.py +0 -0
- {dataflow_core-2.1.31 → dataflow_core-2.1.32}/dataflow/models/container_session_history.py +0 -0
- {dataflow_core-2.1.31 → dataflow_core-2.1.32}/dataflow/models/dataflow_setting.py +0 -0
- {dataflow_core-2.1.31 → dataflow_core-2.1.32}/dataflow/models/dataflow_zone.py +0 -0
- {dataflow_core-2.1.31 → dataflow_core-2.1.32}/dataflow/models/environment.py +0 -0
- {dataflow_core-2.1.31 → dataflow_core-2.1.32}/dataflow/models/environment_status.py +0 -0
- {dataflow_core-2.1.31 → dataflow_core-2.1.32}/dataflow/models/git_ssh.py +0 -0
- {dataflow_core-2.1.31 → dataflow_core-2.1.32}/dataflow/models/inference_service.py +0 -0
- {dataflow_core-2.1.31 → dataflow_core-2.1.32}/dataflow/models/onboarding_project.py +0 -0
- {dataflow_core-2.1.31 → dataflow_core-2.1.32}/dataflow/models/org_associations.py +0 -0
- {dataflow_core-2.1.31 → dataflow_core-2.1.32}/dataflow/models/organization.py +0 -0
- {dataflow_core-2.1.31 → dataflow_core-2.1.32}/dataflow/models/otp.py +0 -0
- {dataflow_core-2.1.31 → dataflow_core-2.1.32}/dataflow/models/pinned_projects.py +0 -0
- {dataflow_core-2.1.31 → dataflow_core-2.1.32}/dataflow/models/pod_activity.py +0 -0
- {dataflow_core-2.1.31 → dataflow_core-2.1.32}/dataflow/models/pod_session_history.py +0 -0
- {dataflow_core-2.1.31 → dataflow_core-2.1.32}/dataflow/models/recent_project_studio.py +0 -0
- {dataflow_core-2.1.31 → dataflow_core-2.1.32}/dataflow/models/recent_projects.py +0 -0
- {dataflow_core-2.1.31 → dataflow_core-2.1.32}/dataflow/models/role.py +0 -0
- {dataflow_core-2.1.31 → dataflow_core-2.1.32}/dataflow/models/role_server.py +0 -0
- {dataflow_core-2.1.31 → dataflow_core-2.1.32}/dataflow/models/role_zone.py +0 -0
- {dataflow_core-2.1.31 → dataflow_core-2.1.32}/dataflow/models/server_config.py +0 -0
- {dataflow_core-2.1.31 → dataflow_core-2.1.32}/dataflow/models/session.py +0 -0
- {dataflow_core-2.1.31 → dataflow_core-2.1.32}/dataflow/models/subscription.py +0 -0
- {dataflow_core-2.1.31 → dataflow_core-2.1.32}/dataflow/models/team.py +0 -0
- {dataflow_core-2.1.31 → dataflow_core-2.1.32}/dataflow/models/user.py +0 -0
- {dataflow_core-2.1.31 → dataflow_core-2.1.32}/dataflow/models/user_team.py +0 -0
- {dataflow_core-2.1.31 → dataflow_core-2.1.32}/dataflow/models/variables.py +0 -0
- {dataflow_core-2.1.31 → dataflow_core-2.1.32}/dataflow/schemas/__init__.py +0 -0
- {dataflow_core-2.1.31 → dataflow_core-2.1.32}/dataflow/schemas/ai_api_key.py +0 -0
- {dataflow_core-2.1.31 → dataflow_core-2.1.32}/dataflow/schemas/connection.py +0 -0
- {dataflow_core-2.1.31 → dataflow_core-2.1.32}/dataflow/schemas/git_ssh.py +0 -0
- {dataflow_core-2.1.31 → dataflow_core-2.1.32}/dataflow/schemas/secret.py +0 -0
- {dataflow_core-2.1.31 → dataflow_core-2.1.32}/dataflow/scripts/clone_environment.sh +0 -0
- {dataflow_core-2.1.31 → dataflow_core-2.1.32}/dataflow/scripts/create_environment.sh +0 -0
- {dataflow_core-2.1.31 → dataflow_core-2.1.32}/dataflow/secrets_manager/__init__.py +0 -0
- {dataflow_core-2.1.31 → dataflow_core-2.1.32}/dataflow/secrets_manager/factory.py +0 -0
- {dataflow_core-2.1.31 → dataflow_core-2.1.32}/dataflow/secrets_manager/interface.py +0 -0
- {dataflow_core-2.1.31 → dataflow_core-2.1.32}/dataflow/secrets_manager/providers/__init__.py +0 -0
- {dataflow_core-2.1.31 → dataflow_core-2.1.32}/dataflow/secrets_manager/providers/aws_manager.py +0 -0
- {dataflow_core-2.1.31 → dataflow_core-2.1.32}/dataflow/secrets_manager/providers/azure_manager.py +0 -0
- {dataflow_core-2.1.31 → dataflow_core-2.1.32}/dataflow/secrets_manager/providers/gcp_manager.py +0 -0
- {dataflow_core-2.1.31 → dataflow_core-2.1.32}/dataflow/secrets_manager/providers/infisical_manager.py +0 -0
- {dataflow_core-2.1.31 → dataflow_core-2.1.32}/dataflow/secrets_manager/providers/ovh_manager.py +0 -0
- {dataflow_core-2.1.31 → dataflow_core-2.1.32}/dataflow/secrets_manager/service.py +0 -0
- {dataflow_core-2.1.31 → dataflow_core-2.1.32}/dataflow/secrets_manager/utils.py +0 -0
- {dataflow_core-2.1.31 → dataflow_core-2.1.32}/dataflow/utils/__init__.py +0 -0
- {dataflow_core-2.1.31 → dataflow_core-2.1.32}/dataflow/utils/blocked_domains.py +0 -0
- {dataflow_core-2.1.31 → dataflow_core-2.1.32}/dataflow/utils/exceptions.py +0 -0
- {dataflow_core-2.1.31 → dataflow_core-2.1.32}/dataflow/utils/get_current_user.py +0 -0
- {dataflow_core-2.1.31 → dataflow_core-2.1.32}/dataflow/utils/local_env_validation.py +0 -0
- {dataflow_core-2.1.31 → dataflow_core-2.1.32}/dataflow/utils/logger.py +0 -0
- {dataflow_core-2.1.31 → dataflow_core-2.1.32}/dataflow_core.egg-info/dependency_links.txt +0 -0
- {dataflow_core-2.1.31 → dataflow_core-2.1.32}/dataflow_core.egg-info/entry_points.txt +0 -0
- {dataflow_core-2.1.31 → dataflow_core-2.1.32}/dataflow_core.egg-info/top_level.txt +0 -0
- {dataflow_core-2.1.31 → dataflow_core-2.1.32}/dfmigration/__init__.py +0 -0
- {dataflow_core-2.1.31 → dataflow_core-2.1.32}/dfmigration/env.py +0 -0
- {dataflow_core-2.1.31 → dataflow_core-2.1.32}/dfmigration/versions/001_initial_baseline_migration.py +0 -0
- {dataflow_core-2.1.31 → dataflow_core-2.1.32}/dfmigration/versions/002_user_onboarding_migration.py +0 -0
- {dataflow_core-2.1.31 → dataflow_core-2.1.32}/dfmigration/versions/003_runtime_visibility.py +0 -0
- {dataflow_core-2.1.31 → dataflow_core-2.1.32}/dfmigration/versions/004_runtime_custom_image.py +0 -0
- {dataflow_core-2.1.31 → dataflow_core-2.1.32}/dfmigration/versions/005_session_table_migration.py +0 -0
- {dataflow_core-2.1.31 → dataflow_core-2.1.32}/dfmigration/versions/006_super_admin_migration.py +0 -0
- {dataflow_core-2.1.31 → dataflow_core-2.1.32}/dfmigration/versions/007_show_walkthrough_and_org_email_migration.py +0 -0
- {dataflow_core-2.1.31 → dataflow_core-2.1.32}/dfmigration/versions/008_costing_migration.py +0 -0
- {dataflow_core-2.1.31 → dataflow_core-2.1.32}/dfmigration/versions/009_session_migration.py +0 -0
- {dataflow_core-2.1.31 → dataflow_core-2.1.32}/dfmigration/versions/010_add_environment_job_table.py +0 -0
- {dataflow_core-2.1.31 → dataflow_core-2.1.32}/dfmigration/versions/011_connection_type_migration.py +0 -0
- {dataflow_core-2.1.31 → dataflow_core-2.1.32}/dfmigration/versions/012_app_type_public_and_project_description.py +0 -0
- {dataflow_core-2.1.31 → dataflow_core-2.1.32}/dfmigration/versions/013_add_container_table.py +0 -0
- {dataflow_core-2.1.31 → dataflow_core-2.1.32}/dfmigration/versions/014_active_server_view_can_spawn.py +0 -0
- {dataflow_core-2.1.31 → dataflow_core-2.1.32}/dfmigration/versions/015_add_agent_enabled_org.py +0 -0
- {dataflow_core-2.1.31 → dataflow_core-2.1.32}/dfmigration/versions/016_org_server_visibility_controls.py +0 -0
- {dataflow_core-2.1.31 → dataflow_core-2.1.32}/dfmigration/versions/017_add_created_at_to_user.py +0 -0
- {dataflow_core-2.1.31 → dataflow_core-2.1.32}/dfmigration/versions/018_add_inference_service_table.py +0 -0
- {dataflow_core-2.1.31 → dataflow_core-2.1.32}/dfmigration/versions/019_user_onboarding_demo_selection.py +0 -0
- {dataflow_core-2.1.31 → dataflow_core-2.1.32}/dfmigration/versions/020_create_onboarding_project_table.py +0 -0
- {dataflow_core-2.1.31 → dataflow_core-2.1.32}/dfmigration/versions/021_create_ai_byok_tables.py +0 -0
- {dataflow_core-2.1.31 → dataflow_core-2.1.32}/dfmigration/versions/022_shared_airflow_tenancy.py +0 -0
- {dataflow_core-2.1.31 → dataflow_core-2.1.32}/dfmigration/versions/023_session_history_table_update_container_table.py +0 -0
- {dataflow_core-2.1.31 → dataflow_core-2.1.32}/dfmigration/versions/024_add_status_reason_to_local_environment.py +0 -0
- {dataflow_core-2.1.31 → dataflow_core-2.1.32}/dfmigration/versions/025_add_project_preview_image.py +0 -0
- {dataflow_core-2.1.31 → dataflow_core-2.1.32}/dfmigration/versions/026_runtime_costing.py +0 -0
- {dataflow_core-2.1.31 → dataflow_core-2.1.32}/dfmigration/versions/027_local_environment_workset_columns.py +0 -0
- {dataflow_core-2.1.31 → dataflow_core-2.1.32}/dfmigration/versions/__init__.py +0 -0
- {dataflow_core-2.1.31 → dataflow_core-2.1.32}/setup.cfg +0 -0
|
@@ -1,14 +1,16 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: dataflow-core
|
|
3
|
-
Version: 2.1.
|
|
3
|
+
Version: 2.1.32
|
|
4
4
|
Summary: Dataflow core package
|
|
5
5
|
Author: Dataflow
|
|
6
6
|
Author-email:
|
|
7
|
-
Requires-Dist: sqlalchemy
|
|
7
|
+
Requires-Dist: sqlalchemy<2.1
|
|
8
8
|
Requires-Dist: alembic
|
|
9
9
|
Requires-Dist: boto3
|
|
10
10
|
Requires-Dist: psycopg2-binary
|
|
11
11
|
Requires-Dist: pymysql
|
|
12
|
+
Requires-Dist: pymssql<3,>=2.2.8
|
|
13
|
+
Requires-Dist: sqlalchemy-bigquery<2,>=1.12.1
|
|
12
14
|
Requires-Dist: requests
|
|
13
15
|
Requires-Dist: azure-identity
|
|
14
16
|
Requires-Dist: azure-keyvault-secrets
|
|
@@ -36,3 +36,4 @@ from .active_server_view import ActiveServerView
|
|
|
36
36
|
from .inference_service import InferenceService, InferenceStatus
|
|
37
37
|
from .onboarding_project import OnboardingProject
|
|
38
38
|
from .ai_provider import AIProvider, AIModel, AIUserProviderKey
|
|
39
|
+
from .dbml_diagram import Diagram
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
from sqlalchemy import Column, Integer, String, ForeignKey, Text, DateTime, func, Enum, Index, text
|
|
2
|
+
from sqlalchemy.dialects.postgresql import JSONB, UUID
|
|
3
|
+
from dataflow.db import Base
|
|
4
|
+
import uuid
|
|
5
|
+
|
|
6
|
+
|
|
7
|
+
class Diagram(Base):
|
|
8
|
+
|
|
9
|
+
"""TABLE 'DBML_DIAGRAM'
|
|
10
|
+
|
|
11
|
+
Stores a user-authored database ER diagram. The DBML source is the single source of
|
|
12
|
+
truth for the schema itself (tables, columns, relationships, header colours); the
|
|
13
|
+
layout column only holds presentation state that DBML has no syntax for, i.e. where
|
|
14
|
+
each table sits on the canvas and the last viewport.
|
|
15
|
+
|
|
16
|
+
Attributes:
|
|
17
|
+
id (int): Primary key for the diagram entry.
|
|
18
|
+
uid (UUID): Public identifier used in URLs, so the internal id is never exposed.
|
|
19
|
+
name (str): Display name of the diagram, unique per user within an organization.
|
|
20
|
+
description (str): Optional description of the diagram.
|
|
21
|
+
org_id (int): Foreign key referencing the ORGANIZATION table.
|
|
22
|
+
user_id (int): Foreign key referencing the USER table (the owner).
|
|
23
|
+
dbml_source (str): The DBML document defining the schema.
|
|
24
|
+
layout (dict): Canvas presentation state. Shape:
|
|
25
|
+
{"tables": {"public.users": {"x": 40, "y": 120}}, "viewport": {"x": 0, "y": 0, "zoom": 1}}
|
|
26
|
+
visibility (str): 'PRIVATE' or 'ORG'. Reserved for org sharing; currently always PRIVATE.
|
|
27
|
+
created_at (datetime): Timestamp of when the diagram was created.
|
|
28
|
+
updated_at (datetime): Timestamp of the last update to the diagram.
|
|
29
|
+
deleted_at (datetime): Soft delete timestamp; NULL while the diagram is active.
|
|
30
|
+
|
|
31
|
+
Constraints:
|
|
32
|
+
Index: Partial unique index ensuring a user cannot have two active diagrams
|
|
33
|
+
with the same name in the same organization.
|
|
34
|
+
"""
|
|
35
|
+
|
|
36
|
+
__tablename__ = 'DBML_DIAGRAM'
|
|
37
|
+
|
|
38
|
+
id = Column(Integer, primary_key=True, autoincrement=True, nullable=False)
|
|
39
|
+
uid = Column(UUID(as_uuid=True), default=uuid.uuid4, nullable=False, unique=True, server_default=text("gen_random_uuid()"))
|
|
40
|
+
name = Column(String, nullable=False)
|
|
41
|
+
description = Column(Text, nullable=True)
|
|
42
|
+
org_id = Column(Integer, ForeignKey("ORGANIZATION.id", ondelete="CASCADE"), index=True, nullable=False)
|
|
43
|
+
user_id = Column(Integer, ForeignKey("USER.user_id", ondelete="CASCADE"), index=True, nullable=False)
|
|
44
|
+
dbml_source = Column(Text, nullable=False, server_default='')
|
|
45
|
+
layout = Column(JSONB, nullable=True)
|
|
46
|
+
visibility = Column(Enum("PRIVATE", "ORG", name="diagram_visibility"), default="PRIVATE", server_default="PRIVATE", nullable=False)
|
|
47
|
+
created_at = Column(DateTime(timezone=True), server_default=func.now())
|
|
48
|
+
updated_at = Column(DateTime(timezone=True), server_default=func.now(), onupdate=func.now())
|
|
49
|
+
deleted_at = Column(DateTime(timezone=True), nullable=True)
|
|
50
|
+
|
|
51
|
+
__table_args__ = (
|
|
52
|
+
Index(
|
|
53
|
+
'uq_active_diagram_name',
|
|
54
|
+
'name', 'user_id', 'org_id',
|
|
55
|
+
unique=True,
|
|
56
|
+
postgresql_where=deleted_at.is_(None)
|
|
57
|
+
),
|
|
58
|
+
)
|
|
@@ -36,7 +36,13 @@ class ProjectDetails(Base):
|
|
|
36
36
|
exposed_port (int): Port exposed by the custom image.
|
|
37
37
|
private_repo (bool): Whether the image repository is private.
|
|
38
38
|
registry_secret_id (int): Foreign key referencing the VARIABLE table for registry credentials.
|
|
39
|
-
|
|
39
|
+
source_type (str): Where the project's code comes from: GIT (cloned from git_url) or STUDIO
|
|
40
|
+
(synced from the creator's Studio folder into the runtime's projects volume).
|
|
41
|
+
studio_source_path (str): For STUDIO projects, the source folder relative to the creator's
|
|
42
|
+
/home/jovyan.
|
|
43
|
+
last_synced_at (datetime): For STUDIO projects, when files were last synced from Studio.
|
|
44
|
+
synced_by (str): For STUDIO projects, the user who ran the last sync.
|
|
45
|
+
|
|
40
46
|
Relationships:
|
|
41
47
|
app_type: Relationship to the AppType model.
|
|
42
48
|
"""
|
|
@@ -87,6 +93,15 @@ class ProjectDetails(Base):
|
|
|
87
93
|
resource_config = Column(JSONB, nullable=True)
|
|
88
94
|
cost_incurred = Column(JSONB, nullable=True)
|
|
89
95
|
runtime_cost_state = Column(JSONB, nullable=True)
|
|
96
|
+
source_type = Column(
|
|
97
|
+
Enum("GIT", "STUDIO", name="project_source_type"),
|
|
98
|
+
nullable=False,
|
|
99
|
+
default="GIT",
|
|
100
|
+
server_default="GIT",
|
|
101
|
+
)
|
|
102
|
+
studio_source_path = Column(String, nullable=True)
|
|
103
|
+
last_synced_at = Column(DateTime(timezone=True), nullable=True)
|
|
104
|
+
synced_by = Column(String, nullable=True)
|
|
90
105
|
|
|
91
106
|
__table_args__ = (
|
|
92
107
|
Index(
|
|
@@ -81,7 +81,7 @@ if [ "$base_prefix" = "$target_prefix" ]; then
|
|
|
81
81
|
# mounted. Squash it as-is.
|
|
82
82
|
squashfs_source="$merged_dir"
|
|
83
83
|
else
|
|
84
|
-
echo "base_prefix} to ${target_prefix}; cloning environment"
|
|
84
|
+
echo "${base_prefix} to ${target_prefix}; cloning environment"
|
|
85
85
|
|
|
86
86
|
export PIP_NO_CACHE_DIR=1
|
|
87
87
|
export CONDA_PKGS_DIRS="${scratch_dir}/pkgs/${env_name_with_version}/"
|
|
@@ -1,14 +1,16 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: dataflow-core
|
|
3
|
-
Version: 2.1.
|
|
3
|
+
Version: 2.1.32
|
|
4
4
|
Summary: Dataflow core package
|
|
5
5
|
Author: Dataflow
|
|
6
6
|
Author-email:
|
|
7
|
-
Requires-Dist: sqlalchemy
|
|
7
|
+
Requires-Dist: sqlalchemy<2.1
|
|
8
8
|
Requires-Dist: alembic
|
|
9
9
|
Requires-Dist: boto3
|
|
10
10
|
Requires-Dist: psycopg2-binary
|
|
11
11
|
Requires-Dist: pymysql
|
|
12
|
+
Requires-Dist: pymssql<3,>=2.2.8
|
|
13
|
+
Requires-Dist: sqlalchemy-bigquery<2,>=1.12.1
|
|
12
14
|
Requires-Dist: requests
|
|
13
15
|
Requires-Dist: azure-identity
|
|
14
16
|
Requires-Dist: azure-keyvault-secrets
|
|
@@ -23,6 +23,7 @@ dataflow/models/container.py
|
|
|
23
23
|
dataflow/models/container_session_history.py
|
|
24
24
|
dataflow/models/dataflow_setting.py
|
|
25
25
|
dataflow/models/dataflow_zone.py
|
|
26
|
+
dataflow/models/dbml_diagram.py
|
|
26
27
|
dataflow/models/environment.py
|
|
27
28
|
dataflow/models/environment_status.py
|
|
28
29
|
dataflow/models/git_ssh.py
|
|
@@ -107,4 +108,6 @@ dfmigration/versions/024_add_status_reason_to_local_environment.py
|
|
|
107
108
|
dfmigration/versions/025_add_project_preview_image.py
|
|
108
109
|
dfmigration/versions/026_runtime_costing.py
|
|
109
110
|
dfmigration/versions/027_local_environment_workset_columns.py
|
|
111
|
+
dfmigration/versions/028_create_diagram_table.py
|
|
112
|
+
dfmigration/versions/029_project_studio_source.py
|
|
110
113
|
dfmigration/versions/__init__.py
|
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
"""Create DBML_DIAGRAM table for DBML ER diagrams
|
|
2
|
+
|
|
3
|
+
Revision ID: 028
|
|
4
|
+
Revises: 027
|
|
5
|
+
Create Date: 2026-08-17
|
|
6
|
+
"""
|
|
7
|
+
from alembic import op
|
|
8
|
+
import sqlalchemy as sa
|
|
9
|
+
from sqlalchemy.dialects import postgresql
|
|
10
|
+
|
|
11
|
+
revision = "028"
|
|
12
|
+
down_revision = "027"
|
|
13
|
+
branch_labels = None
|
|
14
|
+
depends_on = None
|
|
15
|
+
|
|
16
|
+
|
|
17
|
+
def upgrade():
|
|
18
|
+
op.create_table(
|
|
19
|
+
"DBML_DIAGRAM",
|
|
20
|
+
sa.Column("id", sa.Integer(), autoincrement=True, nullable=False),
|
|
21
|
+
sa.Column("uid", postgresql.UUID(as_uuid=True), server_default=sa.text("gen_random_uuid()"), nullable=False),
|
|
22
|
+
sa.Column("name", sa.String(), nullable=False),
|
|
23
|
+
sa.Column("description", sa.Text(), nullable=True),
|
|
24
|
+
sa.Column("org_id", sa.Integer(), sa.ForeignKey("ORGANIZATION.id", ondelete="CASCADE"), nullable=False),
|
|
25
|
+
sa.Column("user_id", sa.Integer(), sa.ForeignKey("USER.user_id", ondelete="CASCADE"), nullable=False),
|
|
26
|
+
sa.Column("dbml_source", sa.Text(), server_default=sa.text("''"), nullable=False),
|
|
27
|
+
sa.Column("layout", postgresql.JSONB(), nullable=True),
|
|
28
|
+
sa.Column(
|
|
29
|
+
"visibility",
|
|
30
|
+
sa.Enum("PRIVATE", "ORG", name="diagram_visibility"),
|
|
31
|
+
server_default=sa.text("'PRIVATE'"),
|
|
32
|
+
nullable=False,
|
|
33
|
+
),
|
|
34
|
+
sa.Column("created_at", sa.DateTime(timezone=True), server_default=sa.text("now()"), nullable=False),
|
|
35
|
+
sa.Column("updated_at", sa.DateTime(timezone=True), server_default=sa.text("now()"), nullable=False),
|
|
36
|
+
sa.Column("deleted_at", sa.DateTime(timezone=True), nullable=True),
|
|
37
|
+
sa.PrimaryKeyConstraint("id"),
|
|
38
|
+
sa.UniqueConstraint("uid", name="uq_diagram_uid"),
|
|
39
|
+
)
|
|
40
|
+
|
|
41
|
+
op.create_index("ix_DBML_DIAGRAM_org_id", "DBML_DIAGRAM", ["org_id"], unique=False)
|
|
42
|
+
op.create_index("ix_DBML_DIAGRAM_user_id", "DBML_DIAGRAM", ["user_id"], unique=False)
|
|
43
|
+
|
|
44
|
+
# A user cannot have two ACTIVE diagrams with the same name in the same org.
|
|
45
|
+
# Soft-deleted rows are excluded so a name can be reused after deletion.
|
|
46
|
+
op.create_index(
|
|
47
|
+
"uq_active_diagram_name",
|
|
48
|
+
"DBML_DIAGRAM",
|
|
49
|
+
["name", "user_id", "org_id"],
|
|
50
|
+
unique=True,
|
|
51
|
+
postgresql_where=sa.text("deleted_at IS NULL"),
|
|
52
|
+
)
|
|
53
|
+
|
|
54
|
+
|
|
55
|
+
def downgrade():
|
|
56
|
+
op.drop_index("uq_active_diagram_name", table_name="DBML_DIAGRAM")
|
|
57
|
+
op.drop_index("ix_DBML_DIAGRAM_user_id", table_name="DBML_DIAGRAM")
|
|
58
|
+
op.drop_index("ix_DBML_DIAGRAM_org_id", table_name="DBML_DIAGRAM")
|
|
59
|
+
op.drop_table("DBML_DIAGRAM")
|
|
60
|
+
op.execute("DROP TYPE IF EXISTS diagram_visibility")
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
"""add studio source columns to project details
|
|
2
|
+
|
|
3
|
+
Revision ID: 029
|
|
4
|
+
Revises: 028
|
|
5
|
+
Create Date: 2026-10-13
|
|
6
|
+
|
|
7
|
+
Lets a project deployed to a runtime take its code from the creator's Studio folder
|
|
8
|
+
(synced into the runtime's projects volume) instead of a Git repository.
|
|
9
|
+
"""
|
|
10
|
+
|
|
11
|
+
from alembic import op
|
|
12
|
+
import sqlalchemy as sa
|
|
13
|
+
|
|
14
|
+
|
|
15
|
+
revision = "029"
|
|
16
|
+
down_revision = "028"
|
|
17
|
+
branch_labels = None
|
|
18
|
+
depends_on = None
|
|
19
|
+
|
|
20
|
+
|
|
21
|
+
project_source_type = sa.Enum("GIT", "STUDIO", name="project_source_type")
|
|
22
|
+
|
|
23
|
+
|
|
24
|
+
def upgrade() -> None:
|
|
25
|
+
project_source_type.create(op.get_bind(), checkfirst=True)
|
|
26
|
+
op.add_column(
|
|
27
|
+
'PROJECT_DETAIL',
|
|
28
|
+
sa.Column('source_type', project_source_type, nullable=False, server_default='GIT'),
|
|
29
|
+
)
|
|
30
|
+
op.add_column('PROJECT_DETAIL', sa.Column('studio_source_path', sa.String(), nullable=True))
|
|
31
|
+
op.add_column('PROJECT_DETAIL', sa.Column('last_synced_at', sa.DateTime(timezone=True), nullable=True))
|
|
32
|
+
op.add_column('PROJECT_DETAIL', sa.Column('synced_by', sa.String(), nullable=True))
|
|
33
|
+
|
|
34
|
+
|
|
35
|
+
def downgrade() -> None:
|
|
36
|
+
op.drop_column('PROJECT_DETAIL', 'synced_by')
|
|
37
|
+
op.drop_column('PROJECT_DETAIL', 'last_synced_at')
|
|
38
|
+
op.drop_column('PROJECT_DETAIL', 'studio_source_path')
|
|
39
|
+
op.drop_column('PROJECT_DETAIL', 'source_type')
|
|
40
|
+
project_source_type.drop(op.get_bind(), checkfirst=True)
|
|
@@ -14,18 +14,20 @@ class PostInstall(install):
|
|
|
14
14
|
|
|
15
15
|
setup(
|
|
16
16
|
name="dataflow-core",
|
|
17
|
-
version="2.1.
|
|
17
|
+
version="2.1.32",
|
|
18
18
|
packages=find_packages(include=["dataflow", "dataflow.*", "authenticator", "authenticator.*", "dfmigration", "dfmigration.*"]),
|
|
19
19
|
include_package_data=True,
|
|
20
20
|
package_data={
|
|
21
21
|
"dataflow": ["scripts/*.sh"],
|
|
22
22
|
},
|
|
23
23
|
install_requires=[
|
|
24
|
-
'sqlalchemy',
|
|
24
|
+
'sqlalchemy<2.1',
|
|
25
25
|
'alembic',
|
|
26
26
|
'boto3',
|
|
27
27
|
'psycopg2-binary',
|
|
28
28
|
'pymysql',
|
|
29
|
+
'pymssql>=2.2.8,<3',
|
|
30
|
+
'sqlalchemy-bigquery>=1.12.1,<2',
|
|
29
31
|
'requests',
|
|
30
32
|
'azure-identity',
|
|
31
33
|
'azure-keyvault-secrets',
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{dataflow_core-2.1.31 → dataflow_core-2.1.32}/authenticator/dataflowsupersetauthenticator.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{dataflow_core-2.1.31 → dataflow_core-2.1.32}/dataflow/secrets_manager/providers/__init__.py
RENAMED
|
File without changes
|
{dataflow_core-2.1.31 → dataflow_core-2.1.32}/dataflow/secrets_manager/providers/aws_manager.py
RENAMED
|
File without changes
|
{dataflow_core-2.1.31 → dataflow_core-2.1.32}/dataflow/secrets_manager/providers/azure_manager.py
RENAMED
|
File without changes
|
{dataflow_core-2.1.31 → dataflow_core-2.1.32}/dataflow/secrets_manager/providers/gcp_manager.py
RENAMED
|
File without changes
|
|
File without changes
|
{dataflow_core-2.1.31 → dataflow_core-2.1.32}/dataflow/secrets_manager/providers/ovh_manager.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{dataflow_core-2.1.31 → dataflow_core-2.1.32}/dfmigration/versions/001_initial_baseline_migration.py
RENAMED
|
File without changes
|
{dataflow_core-2.1.31 → dataflow_core-2.1.32}/dfmigration/versions/002_user_onboarding_migration.py
RENAMED
|
File without changes
|
{dataflow_core-2.1.31 → dataflow_core-2.1.32}/dfmigration/versions/003_runtime_visibility.py
RENAMED
|
File without changes
|
{dataflow_core-2.1.31 → dataflow_core-2.1.32}/dfmigration/versions/004_runtime_custom_image.py
RENAMED
|
File without changes
|
{dataflow_core-2.1.31 → dataflow_core-2.1.32}/dfmigration/versions/005_session_table_migration.py
RENAMED
|
File without changes
|
{dataflow_core-2.1.31 → dataflow_core-2.1.32}/dfmigration/versions/006_super_admin_migration.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{dataflow_core-2.1.31 → dataflow_core-2.1.32}/dfmigration/versions/010_add_environment_job_table.py
RENAMED
|
File without changes
|
{dataflow_core-2.1.31 → dataflow_core-2.1.32}/dfmigration/versions/011_connection_type_migration.py
RENAMED
|
File without changes
|
|
File without changes
|
{dataflow_core-2.1.31 → dataflow_core-2.1.32}/dfmigration/versions/013_add_container_table.py
RENAMED
|
File without changes
|
|
File without changes
|
{dataflow_core-2.1.31 → dataflow_core-2.1.32}/dfmigration/versions/015_add_agent_enabled_org.py
RENAMED
|
File without changes
|
|
File without changes
|
{dataflow_core-2.1.31 → dataflow_core-2.1.32}/dfmigration/versions/017_add_created_at_to_user.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{dataflow_core-2.1.31 → dataflow_core-2.1.32}/dfmigration/versions/021_create_ai_byok_tables.py
RENAMED
|
File without changes
|
{dataflow_core-2.1.31 → dataflow_core-2.1.32}/dfmigration/versions/022_shared_airflow_tenancy.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{dataflow_core-2.1.31 → dataflow_core-2.1.32}/dfmigration/versions/025_add_project_preview_image.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|