datajunction-server 0.0.2.dev4__py3-none-any.whl → 0.0.2.dev5__py3-none-any.whl
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.
- datajunction_server/__about__.py +1 -1
- datajunction_server/database/node.py +4 -10
- datajunction_server/internal/deployment.py +109 -47
- datajunction_server/internal/nodes.py +1 -1
- datajunction_server/models/deployment.py +36 -32
- {datajunction_server-0.0.2.dev4.dist-info → datajunction_server-0.0.2.dev5.dist-info}/METADATA +1 -1
- {datajunction_server-0.0.2.dev4.dist-info → datajunction_server-0.0.2.dev5.dist-info}/RECORD +9 -9
- {datajunction_server-0.0.2.dev4.dist-info → datajunction_server-0.0.2.dev5.dist-info}/WHEEL +0 -0
- {datajunction_server-0.0.2.dev4.dist-info → datajunction_server-0.0.2.dev5.dist-info}/entry_points.txt +0 -0
datajunction_server/__about__.py
CHANGED
|
@@ -390,8 +390,11 @@ class Node(Base):
|
|
|
390
390
|
for col in self.current.columns
|
|
391
391
|
if col.dimension_id and col.dimension_column
|
|
392
392
|
]
|
|
393
|
+
col_specs = [col.to_spec() for col in self.current.columns]
|
|
393
394
|
extra_kwargs.update(
|
|
394
|
-
primary_key=[
|
|
395
|
+
primary_key=[
|
|
396
|
+
col.name for col in col_specs if "primary_key" in col.attributes
|
|
397
|
+
],
|
|
395
398
|
dimension_links=join_link_specs + ref_link_specs,
|
|
396
399
|
)
|
|
397
400
|
|
|
@@ -438,15 +441,6 @@ class Node(Base):
|
|
|
438
441
|
node_spec_cls = node_spec_class_map[self.type]
|
|
439
442
|
return node_spec_cls(**base_kwargs, **extra_kwargs)
|
|
440
443
|
|
|
441
|
-
@classmethod
|
|
442
|
-
def default_load_options(cls) -> List[ExecutableOption]:
|
|
443
|
-
return [
|
|
444
|
-
joinedload(Node.current).options(*NodeRevision.default_load_options()),
|
|
445
|
-
selectinload(Node.tags),
|
|
446
|
-
selectinload(Node.created_by),
|
|
447
|
-
selectinload(Node.owners),
|
|
448
|
-
]
|
|
449
|
-
|
|
450
444
|
@classmethod
|
|
451
445
|
def cube_load_options(cls) -> List[ExecutableOption]:
|
|
452
446
|
return [
|
|
@@ -51,6 +51,7 @@ from datajunction_server.internal.nodes import (
|
|
|
51
51
|
create_a_cube,
|
|
52
52
|
create_a_node,
|
|
53
53
|
create_a_source_node,
|
|
54
|
+
hard_delete_node,
|
|
54
55
|
refresh_source,
|
|
55
56
|
remove_dimension_link,
|
|
56
57
|
set_node_column_attributes,
|
|
@@ -103,18 +104,6 @@ async def safe_task(
|
|
|
103
104
|
)
|
|
104
105
|
|
|
105
106
|
|
|
106
|
-
async def find_existing_nodes(
|
|
107
|
-
session: AsyncSession,
|
|
108
|
-
nodes: list[NodeSpec],
|
|
109
|
-
) -> dict[str, NodeSpec]:
|
|
110
|
-
non_cubes = [n.rendered_name for n in nodes if n.node_type != NodeType.CUBE]
|
|
111
|
-
cubes = [n.rendered_name for n in nodes if n.node_type == NodeType.CUBE]
|
|
112
|
-
all_nodes = await Node.get_by_names(session, non_cubes) + [
|
|
113
|
-
await Node.get_cube_by_name(session, cube) for cube in cubes
|
|
114
|
-
]
|
|
115
|
-
return {node.name: await node.to_spec(session) for node in all_nodes if node}
|
|
116
|
-
|
|
117
|
-
|
|
118
107
|
async def deploy(
|
|
119
108
|
deployment_id: str,
|
|
120
109
|
deployment: DeploymentSpec,
|
|
@@ -149,8 +138,6 @@ async def deploy(
|
|
|
149
138
|
current_user,
|
|
150
139
|
save_history,
|
|
151
140
|
)
|
|
152
|
-
|
|
153
|
-
# async with session_context(request) as session:
|
|
154
141
|
all_nodes = await NodeNamespace.list_all_nodes(
|
|
155
142
|
session,
|
|
156
143
|
deployment.namespace,
|
|
@@ -174,7 +161,7 @@ async def deploy(
|
|
|
174
161
|
for node_spec in to_skip
|
|
175
162
|
],
|
|
176
163
|
)
|
|
177
|
-
if not to_deploy:
|
|
164
|
+
if not to_deploy and not to_delete:
|
|
178
165
|
logger.info(
|
|
179
166
|
"No changes detected, skipping deployment. Total elapsed: %.3fs",
|
|
180
167
|
time.perf_counter() - start_total,
|
|
@@ -182,9 +169,10 @@ async def deploy(
|
|
|
182
169
|
return deployed_results
|
|
183
170
|
|
|
184
171
|
logger.info(
|
|
185
|
-
"Found %d nodes to deploy
|
|
172
|
+
"Found %d nodes to deploy, skipped %d nodes, deleting %d nodes",
|
|
186
173
|
len(to_deploy),
|
|
187
174
|
len(to_skip),
|
|
175
|
+
len(to_delete),
|
|
188
176
|
)
|
|
189
177
|
|
|
190
178
|
node_graph = extract_node_graph(
|
|
@@ -255,9 +243,16 @@ async def deploy(
|
|
|
255
243
|
DeploymentStatus.RUNNING,
|
|
256
244
|
deployed_results,
|
|
257
245
|
)
|
|
246
|
+
|
|
258
247
|
logger.info("Starting deletion of %d nodes", len(to_delete))
|
|
259
|
-
|
|
260
|
-
|
|
248
|
+
for node_spec in to_delete:
|
|
249
|
+
deployed_results.append(
|
|
250
|
+
await deploy_delete_node(
|
|
251
|
+
node_name=node_spec.rendered_name,
|
|
252
|
+
current_username=current_username,
|
|
253
|
+
save_history=save_history,
|
|
254
|
+
),
|
|
255
|
+
)
|
|
261
256
|
logger.info("Finished deploying namespace %s", deployment.namespace)
|
|
262
257
|
return deployed_results
|
|
263
258
|
|
|
@@ -417,6 +412,11 @@ def filter_nodes_to_deploy(
|
|
|
417
412
|
len(to_skip),
|
|
418
413
|
[result.rendered_name for result in to_skip],
|
|
419
414
|
)
|
|
415
|
+
logger.info(
|
|
416
|
+
"Deleting %d nodes: %s",
|
|
417
|
+
len(to_delete),
|
|
418
|
+
to_delete,
|
|
419
|
+
)
|
|
420
420
|
return to_create + to_update, to_skip, to_delete
|
|
421
421
|
|
|
422
422
|
|
|
@@ -565,7 +565,6 @@ async def deploy_links_for_node(
|
|
|
565
565
|
deployment_result = await deploy_dimension_link_from_spec(
|
|
566
566
|
node_spec=node_spec,
|
|
567
567
|
link_spec=link,
|
|
568
|
-
request=request,
|
|
569
568
|
current_username=current_username,
|
|
570
569
|
save_history=save_history,
|
|
571
570
|
existing_node_links=existing_node_links,
|
|
@@ -662,17 +661,17 @@ async def run_tasks_with_semaphore(
|
|
|
662
661
|
)
|
|
663
662
|
|
|
664
663
|
|
|
665
|
-
async def deploy_node_tags(node_name: str,
|
|
664
|
+
async def deploy_node_tags(node_name: str, tag_names: list[str]) -> None:
|
|
666
665
|
async with session_context() as session:
|
|
667
666
|
node = await Node.get_by_name(session=session, name=node_name)
|
|
668
|
-
tags = await get_tags_by_name(session, names=
|
|
667
|
+
tags = await get_tags_by_name(session, names=tag_names or [])
|
|
669
668
|
node.tags = tags # type: ignore
|
|
670
669
|
session.add(node)
|
|
671
670
|
await session.commit()
|
|
672
671
|
await session.refresh(node)
|
|
673
672
|
|
|
674
673
|
|
|
675
|
-
async def
|
|
674
|
+
async def deploy_column_properties(
|
|
676
675
|
node_name: str,
|
|
677
676
|
node_spec: NodeSpec,
|
|
678
677
|
current_username: str,
|
|
@@ -685,30 +684,43 @@ async def deploy_column_attributes(
|
|
|
685
684
|
desired_column_state = {col.name: col for col in node_spec.columns or []}
|
|
686
685
|
for col in node.current.columns: # type: ignore
|
|
687
686
|
if desired_col := desired_column_state.get(col.name):
|
|
688
|
-
#
|
|
689
|
-
if
|
|
687
|
+
# Set column display name and description
|
|
688
|
+
if (
|
|
689
|
+
col.display_name != desired_col.display_name
|
|
690
|
+
and desired_col.display_name is not None
|
|
691
|
+
):
|
|
690
692
|
col.display_name = desired_col.display_name
|
|
691
693
|
changed_columns.add(col.name)
|
|
692
694
|
if col.description != desired_col.description:
|
|
693
695
|
col.description = desired_col.description
|
|
694
696
|
changed_columns.add(col.name)
|
|
695
|
-
|
|
696
|
-
|
|
697
|
-
|
|
698
|
-
partition
|
|
699
|
-
|
|
700
|
-
|
|
701
|
-
|
|
702
|
-
|
|
703
|
-
|
|
704
|
-
|
|
705
|
-
|
|
706
|
-
else None
|
|
697
|
+
|
|
698
|
+
# Set column partition
|
|
699
|
+
if desired_col.partition is None and col.partition:
|
|
700
|
+
session.delete(col.partition)
|
|
701
|
+
changed_columns.add(col.name)
|
|
702
|
+
elif col.partition is None and desired_col.partition:
|
|
703
|
+
partition = Partition(
|
|
704
|
+
column_id=col.id,
|
|
705
|
+
type_=desired_col.partition.type,
|
|
706
|
+
format=desired_col.partition.format,
|
|
707
|
+
granularity=desired_col.partition.granularity,
|
|
707
708
|
)
|
|
708
|
-
|
|
709
|
-
session.add(partition)
|
|
709
|
+
session.add(partition)
|
|
710
710
|
col.partition = partition
|
|
711
711
|
changed_columns.add(col.name)
|
|
712
|
+
elif (
|
|
713
|
+
desired_col.partition
|
|
714
|
+
and col.partition
|
|
715
|
+
and desired_col.partition != col.partition.to_spec()
|
|
716
|
+
):
|
|
717
|
+
col.partition.type_ = desired_col.partition.type
|
|
718
|
+
col.partition.format = desired_col.partition.format
|
|
719
|
+
col.partition.granularity = desired_col.partition.granularity
|
|
720
|
+
session.add(col)
|
|
721
|
+
changed_columns.add(col.name)
|
|
722
|
+
|
|
723
|
+
# Set column attributes
|
|
712
724
|
if set(desired_col.attributes) != set(col.attribute_names()):
|
|
713
725
|
await set_node_column_attributes(
|
|
714
726
|
session=session,
|
|
@@ -717,6 +729,11 @@ async def deploy_column_attributes(
|
|
|
717
729
|
attributes=[
|
|
718
730
|
AttributeTypeIdentifier(name=attr)
|
|
719
731
|
for attr in desired_col.attributes
|
|
732
|
+
]
|
|
733
|
+
+ [
|
|
734
|
+
AttributeTypeIdentifier(name=attr)
|
|
735
|
+
for attr in col.attribute_names()
|
|
736
|
+
if attr == "primary_key"
|
|
720
737
|
],
|
|
721
738
|
current_user=current_user,
|
|
722
739
|
save_history=save_history,
|
|
@@ -726,8 +743,14 @@ async def deploy_column_attributes(
|
|
|
726
743
|
# If the column is not explicitly defined, reset it to default
|
|
727
744
|
col.display_name = labelize(col.name)
|
|
728
745
|
col.description = ""
|
|
729
|
-
col.partition
|
|
730
|
-
|
|
746
|
+
if col.partition:
|
|
747
|
+
session.delete(col.partition)
|
|
748
|
+
col.attributes = [
|
|
749
|
+
attr
|
|
750
|
+
for attr in col.attributes
|
|
751
|
+
if attr.attribute_type.name == "primary_key"
|
|
752
|
+
]
|
|
753
|
+
# col.attributes = [AttributeTypeIdentifier(name=attr) for attr in col.attributes if attr == "primary_key"]
|
|
731
754
|
|
|
732
755
|
session.add(col)
|
|
733
756
|
await session.commit()
|
|
@@ -787,7 +810,7 @@ async def deploy_node_from_spec(
|
|
|
787
810
|
) if changed_fields else ""
|
|
788
811
|
|
|
789
812
|
if set(node_spec.tags) != set([tag.name for tag in node.tags]):
|
|
790
|
-
await deploy_node_tags(node_name=node.name,
|
|
813
|
+
await deploy_node_tags(node_name=node.name, tag_names=node_spec.tags)
|
|
791
814
|
tags_list = ", ".join([f"`{tag}`" for tag in node_spec.tags])
|
|
792
815
|
changelog.append(f"└─ Set tags to {tags_list}.")
|
|
793
816
|
if node.type in (
|
|
@@ -796,7 +819,7 @@ async def deploy_node_from_spec(
|
|
|
796
819
|
NodeType.DIMENSION,
|
|
797
820
|
NodeType.CUBE,
|
|
798
821
|
):
|
|
799
|
-
changed_columns = await
|
|
822
|
+
changed_columns = await deploy_column_properties(
|
|
800
823
|
node_name=node.name,
|
|
801
824
|
node_spec=node_spec,
|
|
802
825
|
current_username=current_username,
|
|
@@ -963,6 +986,12 @@ async def deploy_transform_dimension_node_from_spec(
|
|
|
963
986
|
save_history=save_history,
|
|
964
987
|
cache=cache,
|
|
965
988
|
)
|
|
989
|
+
created_node = await Node.get_by_name( # type: ignore
|
|
990
|
+
session,
|
|
991
|
+
node_spec.rendered_name,
|
|
992
|
+
options=NodeOutput.load_options(),
|
|
993
|
+
raise_if_not_exists=True,
|
|
994
|
+
)
|
|
966
995
|
return created_node
|
|
967
996
|
|
|
968
997
|
|
|
@@ -1123,7 +1152,6 @@ async def deploy_cube_node_from_spec(
|
|
|
1123
1152
|
async def deploy_dimension_link_from_spec(
|
|
1124
1153
|
node_spec: NodeSpec,
|
|
1125
1154
|
link_spec: DimensionLinkSpec,
|
|
1126
|
-
request: Request,
|
|
1127
1155
|
current_username: str,
|
|
1128
1156
|
save_history: Callable,
|
|
1129
1157
|
existing_node_links: dict[
|
|
@@ -1138,13 +1166,15 @@ async def deploy_dimension_link_from_spec(
|
|
|
1138
1166
|
if link_spec.rendered_dimension_node not in existing_node_links
|
|
1139
1167
|
else DeploymentResult.Operation.UPDATE
|
|
1140
1168
|
)
|
|
1141
|
-
async with session_context(
|
|
1169
|
+
async with session_context() as session:
|
|
1142
1170
|
current_user = cast(
|
|
1143
1171
|
User,
|
|
1144
1172
|
await User.get_by_username(session, current_username),
|
|
1145
1173
|
)
|
|
1146
1174
|
if link_spec.type == LinkType.JOIN:
|
|
1147
|
-
existing = existing_node_links.get(
|
|
1175
|
+
existing = existing_node_links.get(
|
|
1176
|
+
(link_spec.rendered_dimension_node, link_spec.role),
|
|
1177
|
+
)
|
|
1148
1178
|
join_link = cast(DimensionJoinLinkSpec, link_spec)
|
|
1149
1179
|
if existing != join_link:
|
|
1150
1180
|
if join_link.node_column:
|
|
@@ -1240,11 +1270,43 @@ async def deploy_remove_dimension_link(
|
|
|
1240
1270
|
status=DeploymentResult.Status.SUCCESS,
|
|
1241
1271
|
operation=DeploymentResult.Operation.DELETE,
|
|
1242
1272
|
)
|
|
1243
|
-
except Exception as exc:
|
|
1244
|
-
return DeploymentResult(
|
|
1273
|
+
except Exception as exc:
|
|
1274
|
+
return DeploymentResult(
|
|
1245
1275
|
deploy_type=DeploymentResult.Type.LINK,
|
|
1246
1276
|
name=f"{node_name} -> {link.rendered_dimension_node}",
|
|
1247
1277
|
status=DeploymentResult.Status.FAILED,
|
|
1248
1278
|
operation=DeploymentResult.Operation.DELETE,
|
|
1249
1279
|
message=str(exc),
|
|
1250
1280
|
)
|
|
1281
|
+
|
|
1282
|
+
|
|
1283
|
+
async def deploy_delete_node(
|
|
1284
|
+
node_name: str,
|
|
1285
|
+
current_username: str,
|
|
1286
|
+
save_history: Callable,
|
|
1287
|
+
) -> DeploymentResult:
|
|
1288
|
+
async with session_context() as session:
|
|
1289
|
+
current_user = cast(User, await User.get_by_username(session, current_username))
|
|
1290
|
+
try:
|
|
1291
|
+
await hard_delete_node(
|
|
1292
|
+
name=node_name,
|
|
1293
|
+
session=session,
|
|
1294
|
+
current_user=current_user,
|
|
1295
|
+
save_history=save_history,
|
|
1296
|
+
)
|
|
1297
|
+
return DeploymentResult(
|
|
1298
|
+
name=node_name,
|
|
1299
|
+
deploy_type=DeploymentResult.Type.NODE,
|
|
1300
|
+
status=DeploymentResult.Status.SUCCESS,
|
|
1301
|
+
operation=DeploymentResult.Operation.DELETE,
|
|
1302
|
+
message=f"Node {node_name} has been removed.",
|
|
1303
|
+
)
|
|
1304
|
+
except Exception as exc:
|
|
1305
|
+
logger.exception(exc)
|
|
1306
|
+
return DeploymentResult(
|
|
1307
|
+
name=node_name,
|
|
1308
|
+
deploy_type=DeploymentResult.Type.NODE,
|
|
1309
|
+
status=DeploymentResult.Status.FAILED,
|
|
1310
|
+
operation=DeploymentResult.Operation.DELETE,
|
|
1311
|
+
message=str(exc),
|
|
1312
|
+
)
|
|
@@ -2746,7 +2746,7 @@ async def hard_delete_node(
|
|
|
2746
2746
|
name,
|
|
2747
2747
|
options=[joinedload(Node.current), joinedload(Node.revisions)],
|
|
2748
2748
|
include_inactive=True,
|
|
2749
|
-
raise_if_not_exists=
|
|
2749
|
+
raise_if_not_exists=True,
|
|
2750
2750
|
)
|
|
2751
2751
|
downstream_nodes = await get_downstream_nodes(session=session, node_name=name)
|
|
2752
2752
|
|
|
@@ -5,6 +5,7 @@ from typing import Any, Literal, Union
|
|
|
5
5
|
|
|
6
6
|
from datajunction_server.models.partition import Granularity, PartitionType
|
|
7
7
|
from datajunction_server.errors import DJInvalidInputException
|
|
8
|
+
from datajunction_server.models.base import labelize
|
|
8
9
|
from datajunction_server.models.dimensionlink import JoinType, LinkType
|
|
9
10
|
from datajunction_server.models.node import (
|
|
10
11
|
MetricDirection,
|
|
@@ -291,11 +292,6 @@ class LinkableNodeSpec(NodeSpec):
|
|
|
291
292
|
other.dimension_links or [],
|
|
292
293
|
key=lambda link: link.rendered_dimension_node,
|
|
293
294
|
)
|
|
294
|
-
print(
|
|
295
|
-
"Comparing LinkableNodeSpec",
|
|
296
|
-
self.rendered_name,
|
|
297
|
-
eq_columns(self.columns, other.columns),
|
|
298
|
-
)
|
|
299
295
|
return (
|
|
300
296
|
super().__eq__(other)
|
|
301
297
|
and eq_columns(self.columns, other.columns)
|
|
@@ -434,11 +430,6 @@ class CubeSpec(NodeSpec):
|
|
|
434
430
|
]
|
|
435
431
|
|
|
436
432
|
def __eq__(self, other: Any) -> bool:
|
|
437
|
-
print(
|
|
438
|
-
"Comparing CubeSpec",
|
|
439
|
-
self.rendered_name,
|
|
440
|
-
eq_columns(self.columns, other.columns),
|
|
441
|
-
)
|
|
442
433
|
return (
|
|
443
434
|
super().__eq__(other)
|
|
444
435
|
and eq_columns(self.columns, other.columns)
|
|
@@ -575,25 +566,38 @@ def eq_columns(a: list[ColumnSpec] | None, b: list[ColumnSpec] | None) -> bool:
|
|
|
575
566
|
- None or [] is considered equivalent to a list where every column only has 'primary_key'
|
|
576
567
|
in attributes and partition is None.
|
|
577
568
|
"""
|
|
578
|
-
|
|
579
|
-
|
|
580
|
-
|
|
581
|
-
|
|
582
|
-
|
|
583
|
-
|
|
584
|
-
|
|
585
|
-
|
|
586
|
-
|
|
587
|
-
|
|
588
|
-
|
|
589
|
-
|
|
590
|
-
|
|
591
|
-
|
|
592
|
-
|
|
593
|
-
if
|
|
594
|
-
|
|
595
|
-
|
|
596
|
-
|
|
597
|
-
|
|
598
|
-
|
|
599
|
-
|
|
569
|
+
a_map = {col.name: col for col in a or []}
|
|
570
|
+
b_map = {col.name: col for col in b or []}
|
|
571
|
+
a_cols, b_cols = [], []
|
|
572
|
+
for col_name in set(a_map.keys()).union(set(b_map.keys())):
|
|
573
|
+
a_col = a_map.get(col_name)
|
|
574
|
+
b_col = b_map.get(col_name)
|
|
575
|
+
if not a_col:
|
|
576
|
+
a_col = ColumnSpec(
|
|
577
|
+
name=col_name,
|
|
578
|
+
display_name=labelize(col_name),
|
|
579
|
+
type=b_col.type if b_col else "",
|
|
580
|
+
attributes=[],
|
|
581
|
+
)
|
|
582
|
+
if not a_col.display_name:
|
|
583
|
+
a_col.display_name = labelize(col_name)
|
|
584
|
+
if not a_col.description:
|
|
585
|
+
a_col.description = ""
|
|
586
|
+
if not b_col:
|
|
587
|
+
b_col = ColumnSpec(
|
|
588
|
+
name=col_name,
|
|
589
|
+
display_name=labelize(col_name),
|
|
590
|
+
type=a_col.type if a_col else "",
|
|
591
|
+
attributes=[],
|
|
592
|
+
)
|
|
593
|
+
if not b_col.display_name:
|
|
594
|
+
b_col.display_name = labelize(col_name)
|
|
595
|
+
if not b_col.description:
|
|
596
|
+
b_col.description = ""
|
|
597
|
+
if "primary_key" in a_col.attributes:
|
|
598
|
+
a_col.attributes = list(set(a_col.attributes) - {"primary_key"})
|
|
599
|
+
if "primary_key" in b_col.attributes:
|
|
600
|
+
b_col.attributes = list(set(b_col.attributes) - {"primary_key"})
|
|
601
|
+
a_cols.append(a_col)
|
|
602
|
+
b_cols.append(b_col)
|
|
603
|
+
return a_cols == b_cols
|
{datajunction_server-0.0.2.dev4.dist-info → datajunction_server-0.0.2.dev5.dist-info}/METADATA
RENAMED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.3
|
|
2
2
|
Name: datajunction-server
|
|
3
|
-
Version: 0.0.2.
|
|
3
|
+
Version: 0.0.2.dev5
|
|
4
4
|
Summary: DataJunction server library for running to a DataJunction server
|
|
5
5
|
Project-URL: Homepage, https://datajunction.io
|
|
6
6
|
Project-URL: Repository, https://github.com/DataJunction/dj
|
{datajunction_server-0.0.2.dev4.dist-info → datajunction_server-0.0.2.dev5.dist-info}/RECORD
RENAMED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
datajunction_server/__about__.py,sha256=
|
|
1
|
+
datajunction_server/__about__.py,sha256=s6aBpR8toU4qlGgMXWyqsgZXfKeMKdKuQ7QP7uwKle8,54
|
|
2
2
|
datajunction_server/__init__.py,sha256=nN5-uJoSVEwuc8n-wMygqeF0Xhxi_zqqbCgutZvAt3E,384
|
|
3
3
|
datajunction_server/alembic.ini,sha256=mclJ_xx8pHfRyZ69SA9ZPqUwZaaQCTyxZ6wBmbrf1bo,3024
|
|
4
4
|
datajunction_server/config.py,sha256=L1zkaiF82S-ciR-wVeILx7CWKSOPPJ90a9zooXVNHEc,5641
|
|
@@ -128,7 +128,7 @@ datajunction_server/database/materialization.py,sha256=7_w5ay2RXukTaRS03UILsMFrN
|
|
|
128
128
|
datajunction_server/database/measure.py,sha256=iwZQIhM-_OlZ4v2a3BmZrhpC4ej-MGh6rLqGB70XGYo,6387
|
|
129
129
|
datajunction_server/database/metricmetadata.py,sha256=jKh58lOf5_MoFyDTVtpWhK9-Ox22ryWK2XtBKjPApc4,2084
|
|
130
130
|
datajunction_server/database/namespace.py,sha256=T5GF4eDLgw51xdjWC0T5G_mcAgL4E7OrYuk6x552dhM,5685
|
|
131
|
-
datajunction_server/database/node.py,sha256=
|
|
131
|
+
datajunction_server/database/node.py,sha256=M9a0BcBvhVtIKrOBxDoBECRzsO8tXkfTagnywjqWgv8,44770
|
|
132
132
|
datajunction_server/database/nodeowner.py,sha256=YydIO1F-S-J6qyNW8ui71H-l6aENbW7RhdX5koIBq8E,1196
|
|
133
133
|
datajunction_server/database/notification_preference.py,sha256=uLy60fWLWLJE940Qj7bY0Rq5b5flEkgcq2uxx4pRvPE,1892
|
|
134
134
|
datajunction_server/database/partition.py,sha256=312KyT0IbaKk-lXxMRvAphJDfA83Wm1RsGp7-dT-U0g,5242
|
|
@@ -138,12 +138,12 @@ datajunction_server/database/user.py,sha256=-zW5ssf2IWgSjvZbOljOzVoqynBtNp3gQxHm
|
|
|
138
138
|
datajunction_server/internal/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
139
139
|
datajunction_server/internal/client.py,sha256=hpManY1PTGQxAzx4S-1aUAoMvlWfPPU1wgL9iLlAg7o,11442
|
|
140
140
|
datajunction_server/internal/cube_materializations.py,sha256=SJYIZfjAQr8n-pgECKoroGfOhoR_J0vnMmpCQ0mbLlY,10695
|
|
141
|
-
datajunction_server/internal/deployment.py,sha256=
|
|
141
|
+
datajunction_server/internal/deployment.py,sha256=snlmwkoWF0tUvIRpMYIhqpw5PYm8uEaqUYcXj1UGWcY,47416
|
|
142
142
|
datajunction_server/internal/engines.py,sha256=RKIYIYJQMjRIFS7YXIW-q6vLUxilc3sd3eWHwTmDDu0,858
|
|
143
143
|
datajunction_server/internal/history.py,sha256=MAj2ZTUCGgSLCaS1uB5dWtTqvb2SE_5HHLo0RReCRAc,816
|
|
144
144
|
datajunction_server/internal/materializations.py,sha256=HVc1RPiarOBksvzyLP8Mt5GFvyEPlOqgIe151I_ZZMY,18184
|
|
145
145
|
datajunction_server/internal/namespaces.py,sha256=Ff020CvpzWeypqReU5sPl3kNbHj1aQpw_6MI2DJhFSw,20713
|
|
146
|
-
datajunction_server/internal/nodes.py,sha256=
|
|
146
|
+
datajunction_server/internal/nodes.py,sha256=tTS4_oEgtSdf0PVorQ4toEr3iNyIrR8Q0AH4A9fLmWQ,103714
|
|
147
147
|
datajunction_server/internal/notifications.py,sha256=8aP8KBs8k4kKXnQXIUPWyHa4uKsyV0oERipyP0LR0bs,1724
|
|
148
148
|
datajunction_server/internal/seed.py,sha256=mc2TQP4dMwAyWTfGKj5b6wK6pvVyU6azHfxSozPElY0,2363
|
|
149
149
|
datajunction_server/internal/sql.py,sha256=bboANhvtKufVYOOI6RF719GXQFWv-toVXIQQtKIFCtA,18475
|
|
@@ -185,7 +185,7 @@ datajunction_server/models/column.py,sha256=3TCa9dDAb9Q2WEAzpcdqAjKSX3PutbwlS8qG
|
|
|
185
185
|
datajunction_server/models/cube.py,sha256=p6KmqoOVGlziH5k0wXs6qBvgWWQs984Ho6SGplDbtAQ,4459
|
|
186
186
|
datajunction_server/models/cube_materialization.py,sha256=ydMRepDM95b4BBVay_nOYlRtK7OFG3pCDDTRdHe2awU,15787
|
|
187
187
|
datajunction_server/models/database.py,sha256=xhCllbq5ikFNnrPvzuchxQUC9RWogzh73Eqz7Jj0i38,499
|
|
188
|
-
datajunction_server/models/deployment.py,sha256=
|
|
188
|
+
datajunction_server/models/deployment.py,sha256=DDK-vEoWJWTGX_761kzFtgH3uk4m20jQfxDOSf9O67U,18185
|
|
189
189
|
datajunction_server/models/dialect.py,sha256=uifriawtKR4vi-GG2rdp4eeQkAkD6iLNuarCLQanTxY,3825
|
|
190
190
|
datajunction_server/models/dimensionlink.py,sha256=WaCarxhawOiQqtH1EVS0RQRu9D8Bx6GFonLsdSVgXSs,1551
|
|
191
191
|
datajunction_server/models/engine.py,sha256=Ebuy4HLkURr7mj0pxTj_Y4fEmF0oDen393rnj9fBnR0,466
|
|
@@ -226,7 +226,7 @@ datajunction_server/sql/parsing/backends/grammar/generated/SqlBaseParser.py,sha2
|
|
|
226
226
|
datajunction_server/sql/parsing/backends/grammar/generated/SqlBaseParser.tokens,sha256=JDrzbaKDwIaimAZPYIUzCgzkOEgq0X5-a6_lz78lqgs,8131
|
|
227
227
|
datajunction_server/sql/parsing/backends/grammar/generated/SqlBaseParserListener.py,sha256=vp8wduYkB-T5Xr6HZCSdzAxTHHPrDI5UJZXRJSVhAGA,102464
|
|
228
228
|
datajunction_server/sql/parsing/backends/grammar/generated/SqlBaseParserVisitor.py,sha256=w3V03LgPIHCiqojNyuekBDYqskjOKlKrd0sczQAB_WQ,60290
|
|
229
|
-
datajunction_server-0.0.2.
|
|
230
|
-
datajunction_server-0.0.2.
|
|
231
|
-
datajunction_server-0.0.2.
|
|
232
|
-
datajunction_server-0.0.2.
|
|
229
|
+
datajunction_server-0.0.2.dev5.dist-info/METADATA,sha256=wMmDeSs0m497HHgebVNxT01FnVOg9esWyRtkzfvbLx8,3769
|
|
230
|
+
datajunction_server-0.0.2.dev5.dist-info/WHEEL,sha256=1yFddiXMmvYK7QYTqtRNtX66WJ0Mz8PYEiEUoOUUxRY,87
|
|
231
|
+
datajunction_server-0.0.2.dev5.dist-info/entry_points.txt,sha256=MOInJGdcQ10bDEl-XW4UMokEgx-ypINqBhObeDI8KiQ,74
|
|
232
|
+
datajunction_server-0.0.2.dev5.dist-info/RECORD,,
|
|
File without changes
|
|
File without changes
|