datajunction 0.0.2.dev0__tar.gz → 0.0.2.dev1__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.
Files changed (165) hide show
  1. {datajunction-0.0.2.dev0 → datajunction-0.0.2.dev1}/PKG-INFO +1 -1
  2. {datajunction-0.0.2.dev0 → datajunction-0.0.2.dev1}/datajunction/__about__.py +1 -1
  3. datajunction-0.0.2.dev1/tests/test_deploy.py +162 -0
  4. {datajunction-0.0.2.dev0 → datajunction-0.0.2.dev1}/.coveragerc +0 -0
  5. {datajunction-0.0.2.dev0 → datajunction-0.0.2.dev1}/.gitignore +0 -0
  6. {datajunction-0.0.2.dev0 → datajunction-0.0.2.dev1}/.isort.cfg +0 -0
  7. {datajunction-0.0.2.dev0 → datajunction-0.0.2.dev1}/.pre-commit-config.yaml +0 -0
  8. {datajunction-0.0.2.dev0 → datajunction-0.0.2.dev1}/LICENSE.txt +0 -0
  9. {datajunction-0.0.2.dev0 → datajunction-0.0.2.dev1}/Makefile +0 -0
  10. {datajunction-0.0.2.dev0 → datajunction-0.0.2.dev1}/README.md +0 -0
  11. {datajunction-0.0.2.dev0 → datajunction-0.0.2.dev1}/datajunction/__init__.py +0 -0
  12. {datajunction-0.0.2.dev0 → datajunction-0.0.2.dev1}/datajunction/_base.py +0 -0
  13. {datajunction-0.0.2.dev0 → datajunction-0.0.2.dev1}/datajunction/_internal.py +0 -0
  14. {datajunction-0.0.2.dev0 → datajunction-0.0.2.dev1}/datajunction/admin.py +0 -0
  15. {datajunction-0.0.2.dev0 → datajunction-0.0.2.dev1}/datajunction/builder.py +0 -0
  16. {datajunction-0.0.2.dev0 → datajunction-0.0.2.dev1}/datajunction/cli.py +0 -0
  17. {datajunction-0.0.2.dev0 → datajunction-0.0.2.dev1}/datajunction/client.py +0 -0
  18. {datajunction-0.0.2.dev0 → datajunction-0.0.2.dev1}/datajunction/compile.py +0 -0
  19. {datajunction-0.0.2.dev0 → datajunction-0.0.2.dev1}/datajunction/deployment.py +0 -0
  20. {datajunction-0.0.2.dev0 → datajunction-0.0.2.dev1}/datajunction/exceptions.py +0 -0
  21. {datajunction-0.0.2.dev0 → datajunction-0.0.2.dev1}/datajunction/models.py +0 -0
  22. {datajunction-0.0.2.dev0 → datajunction-0.0.2.dev1}/datajunction/nodes.py +0 -0
  23. {datajunction-0.0.2.dev0 → datajunction-0.0.2.dev1}/datajunction/seed/init_system_nodes.py +0 -0
  24. {datajunction-0.0.2.dev0 → datajunction-0.0.2.dev1}/datajunction/seed/nodes/date.dimension.yaml +0 -0
  25. {datajunction-0.0.2.dev0 → datajunction-0.0.2.dev1}/datajunction/seed/nodes/dimension_link.dimension.yaml +0 -0
  26. {datajunction-0.0.2.dev0 → datajunction-0.0.2.dev1}/datajunction/seed/nodes/dj.yaml +0 -0
  27. {datajunction-0.0.2.dev0 → datajunction-0.0.2.dev1}/datajunction/seed/nodes/is_active.dimension.yaml +0 -0
  28. {datajunction-0.0.2.dev0 → datajunction-0.0.2.dev1}/datajunction/seed/nodes/materialization.dimension.yaml +0 -0
  29. {datajunction-0.0.2.dev0 → datajunction-0.0.2.dev1}/datajunction/seed/nodes/node_type.dimension.yaml +0 -0
  30. {datajunction-0.0.2.dev0 → datajunction-0.0.2.dev1}/datajunction/seed/nodes/node_without_description.metric.yaml +0 -0
  31. {datajunction-0.0.2.dev0 → datajunction-0.0.2.dev1}/datajunction/seed/nodes/nodes.dimension.yaml +0 -0
  32. {datajunction-0.0.2.dev0 → datajunction-0.0.2.dev1}/datajunction/seed/nodes/number_of_materializations.metric.yaml +0 -0
  33. {datajunction-0.0.2.dev0 → datajunction-0.0.2.dev1}/datajunction/seed/nodes/number_of_nodes.metric.yaml +0 -0
  34. {datajunction-0.0.2.dev0 → datajunction-0.0.2.dev1}/datajunction/seed/nodes/user.dimension.yaml +0 -0
  35. {datajunction-0.0.2.dev0 → datajunction-0.0.2.dev1}/datajunction/tags.py +0 -0
  36. {datajunction-0.0.2.dev0 → datajunction-0.0.2.dev1}/pdm.lock +0 -0
  37. {datajunction-0.0.2.dev0 → datajunction-0.0.2.dev1}/pyproject.toml +0 -0
  38. {datajunction-0.0.2.dev0 → datajunction-0.0.2.dev1}/setup.cfg +0 -0
  39. {datajunction-0.0.2.dev0 → datajunction-0.0.2.dev1}/target/dj.yaml +0 -0
  40. {datajunction-0.0.2.dev0 → datajunction-0.0.2.dev1}/target/draft_ms.yaml +0 -0
  41. {datajunction-0.0.2.dev0 → datajunction-0.0.2.dev1}/target/draft_ms_with_qpd.yaml +0 -0
  42. {datajunction-0.0.2.dev0 → datajunction-0.0.2.dev1}/target/engagement_quality_score.yaml +0 -0
  43. {datajunction-0.0.2.dev0 → datajunction-0.0.2.dev1}/target/overall_streaming_lift.yaml +0 -0
  44. {datajunction-0.0.2.dev0 → datajunction-0.0.2.dev1}/target/playbacks.yaml +0 -0
  45. {datajunction-0.0.2.dev0 → datajunction-0.0.2.dev1}/target/qpd.yaml +0 -0
  46. {datajunction-0.0.2.dev0 → datajunction-0.0.2.dev1}/target/qpd_normalization__35.yaml +0 -0
  47. {datajunction-0.0.2.dev0 → datajunction-0.0.2.dev1}/target/total_missing_covariates.yaml +0 -0
  48. {datajunction-0.0.2.dev0 → datajunction-0.0.2.dev1}/tests/__init__.py +0 -0
  49. {datajunction-0.0.2.dev0 → datajunction-0.0.2.dev1}/tests/conftest.py +0 -0
  50. {datajunction-0.0.2.dev0 → datajunction-0.0.2.dev1}/tests/examples/deploy0/dj.yaml +0 -0
  51. {datajunction-0.0.2.dev0 → datajunction-0.0.2.dev1}/tests/examples/deploy0/roads/companies.yaml +0 -0
  52. {datajunction-0.0.2.dev0 → datajunction-0.0.2.dev1}/tests/examples/deploy0/roads/companies_dim.yaml +0 -0
  53. {datajunction-0.0.2.dev0 → datajunction-0.0.2.dev1}/tests/examples/deploy0/roads/contractor.yaml +0 -0
  54. {datajunction-0.0.2.dev0 → datajunction-0.0.2.dev1}/tests/examples/deploy0/roads/contractors.yaml +0 -0
  55. {datajunction-0.0.2.dev0 → datajunction-0.0.2.dev1}/tests/examples/deploy0/roads/us_state.yaml +0 -0
  56. {datajunction-0.0.2.dev0 → datajunction-0.0.2.dev1}/tests/examples/deploy0/roads/us_states.yaml +0 -0
  57. {datajunction-0.0.2.dev0 → datajunction-0.0.2.dev1}/tests/examples/project1/dj.yaml +0 -0
  58. {datajunction-0.0.2.dev0 → datajunction-0.0.2.dev1}/tests/examples/project1/roads/avg_length_of_employment.metric.yaml +0 -0
  59. {datajunction-0.0.2.dev0 → datajunction-0.0.2.dev1}/tests/examples/project1/roads/avg_repair_price.metric.yaml +0 -0
  60. {datajunction-0.0.2.dev0 → datajunction-0.0.2.dev1}/tests/examples/project1/roads/avg_time_to_dispatch.metric.yaml +0 -0
  61. {datajunction-0.0.2.dev0 → datajunction-0.0.2.dev1}/tests/examples/project1/roads/contractor.dimension.yaml +0 -0
  62. {datajunction-0.0.2.dev0 → datajunction-0.0.2.dev1}/tests/examples/project1/roads/contractors.source.yaml +0 -0
  63. {datajunction-0.0.2.dev0 → datajunction-0.0.2.dev1}/tests/examples/project1/roads/date.source.yaml +0 -0
  64. {datajunction-0.0.2.dev0 → datajunction-0.0.2.dev1}/tests/examples/project1/roads/date_dim.dimension.yaml +0 -0
  65. {datajunction-0.0.2.dev0 → datajunction-0.0.2.dev1}/tests/examples/project1/roads/dispatcher.dimension.yaml +0 -0
  66. {datajunction-0.0.2.dev0 → datajunction-0.0.2.dev1}/tests/examples/project1/roads/dispatchers.source.yaml +0 -0
  67. {datajunction-0.0.2.dev0 → datajunction-0.0.2.dev1}/tests/examples/project1/roads/hard_hat.dimension.yaml +0 -0
  68. {datajunction-0.0.2.dev0 → datajunction-0.0.2.dev1}/tests/examples/project1/roads/hard_hat_state.source.yaml +0 -0
  69. {datajunction-0.0.2.dev0 → datajunction-0.0.2.dev1}/tests/examples/project1/roads/hard_hats.source.yaml +0 -0
  70. {datajunction-0.0.2.dev0 → datajunction-0.0.2.dev1}/tests/examples/project1/roads/local_hard_hats.dimension.yaml +0 -0
  71. {datajunction-0.0.2.dev0 → datajunction-0.0.2.dev1}/tests/examples/project1/roads/municipality.source.yaml +0 -0
  72. {datajunction-0.0.2.dev0 → datajunction-0.0.2.dev1}/tests/examples/project1/roads/municipality_dim.dimension.yaml +0 -0
  73. {datajunction-0.0.2.dev0 → datajunction-0.0.2.dev1}/tests/examples/project1/roads/municipality_municipality_type.source.yaml +0 -0
  74. {datajunction-0.0.2.dev0 → datajunction-0.0.2.dev1}/tests/examples/project1/roads/municipality_type.source.yaml +0 -0
  75. {datajunction-0.0.2.dev0 → datajunction-0.0.2.dev1}/tests/examples/project1/roads/national_level_agg.transform.yaml +0 -0
  76. {datajunction-0.0.2.dev0 → datajunction-0.0.2.dev1}/tests/examples/project1/roads/num_repair_orders.metric.yaml +0 -0
  77. {datajunction-0.0.2.dev0 → datajunction-0.0.2.dev1}/tests/examples/project1/roads/regional_level_agg.transform.yaml +0 -0
  78. {datajunction-0.0.2.dev0 → datajunction-0.0.2.dev1}/tests/examples/project1/roads/regional_repair_efficiency.metric.yaml +0 -0
  79. {datajunction-0.0.2.dev0 → datajunction-0.0.2.dev1}/tests/examples/project1/roads/repair_order.dimension.yaml +0 -0
  80. {datajunction-0.0.2.dev0 → datajunction-0.0.2.dev1}/tests/examples/project1/roads/repair_order_details.source.yaml +0 -0
  81. {datajunction-0.0.2.dev0 → datajunction-0.0.2.dev1}/tests/examples/project1/roads/repair_order_transform.transform.yaml +0 -0
  82. {datajunction-0.0.2.dev0 → datajunction-0.0.2.dev1}/tests/examples/project1/roads/repair_orders.source.yaml +0 -0
  83. {datajunction-0.0.2.dev0 → datajunction-0.0.2.dev1}/tests/examples/project1/roads/repair_orders_cube.cube.yaml +0 -0
  84. {datajunction-0.0.2.dev0 → datajunction-0.0.2.dev1}/tests/examples/project1/roads/repair_type.source.yaml +0 -0
  85. {datajunction-0.0.2.dev0 → datajunction-0.0.2.dev1}/tests/examples/project1/roads/total_repair_cost.metric.yaml +0 -0
  86. {datajunction-0.0.2.dev0 → datajunction-0.0.2.dev1}/tests/examples/project1/roads/total_repair_order_discounts.metric.yaml +0 -0
  87. {datajunction-0.0.2.dev0 → datajunction-0.0.2.dev1}/tests/examples/project1/roads/us_region.source.yaml +0 -0
  88. {datajunction-0.0.2.dev0 → datajunction-0.0.2.dev1}/tests/examples/project1/roads/us_state.dimension.yaml +0 -0
  89. {datajunction-0.0.2.dev0 → datajunction-0.0.2.dev1}/tests/examples/project1/roads/us_states.source.yaml +0 -0
  90. {datajunction-0.0.2.dev0 → datajunction-0.0.2.dev1}/tests/examples/project10/dj.yaml +0 -0
  91. {datajunction-0.0.2.dev0 → datajunction-0.0.2.dev1}/tests/examples/project11/avg_length_of_employment.metric.yaml +0 -0
  92. {datajunction-0.0.2.dev0 → datajunction-0.0.2.dev1}/tests/examples/project11/avg_repair_price.metric.yaml +0 -0
  93. {datajunction-0.0.2.dev0 → datajunction-0.0.2.dev1}/tests/examples/project11/avg_time_to_dispatch.metric.yaml +0 -0
  94. {datajunction-0.0.2.dev0 → datajunction-0.0.2.dev1}/tests/examples/project11/contractor.dimension.yaml +0 -0
  95. {datajunction-0.0.2.dev0 → datajunction-0.0.2.dev1}/tests/examples/project11/contractors.source.yaml +0 -0
  96. {datajunction-0.0.2.dev0 → datajunction-0.0.2.dev1}/tests/examples/project11/date.source.yaml +0 -0
  97. {datajunction-0.0.2.dev0 → datajunction-0.0.2.dev1}/tests/examples/project11/date_dim.dimension.yaml +0 -0
  98. {datajunction-0.0.2.dev0 → datajunction-0.0.2.dev1}/tests/examples/project11/dispatcher.dimension.yaml +0 -0
  99. {datajunction-0.0.2.dev0 → datajunction-0.0.2.dev1}/tests/examples/project11/dispatchers.source.yaml +0 -0
  100. {datajunction-0.0.2.dev0 → datajunction-0.0.2.dev1}/tests/examples/project11/dj.yaml +0 -0
  101. {datajunction-0.0.2.dev0 → datajunction-0.0.2.dev1}/tests/examples/project11/hard_hat.dimension.yaml +0 -0
  102. {datajunction-0.0.2.dev0 → datajunction-0.0.2.dev1}/tests/examples/project11/hard_hat_state.source.yaml +0 -0
  103. {datajunction-0.0.2.dev0 → datajunction-0.0.2.dev1}/tests/examples/project11/hard_hats.source.yaml +0 -0
  104. {datajunction-0.0.2.dev0 → datajunction-0.0.2.dev1}/tests/examples/project11/local_hard_hats.dimension.yaml +0 -0
  105. {datajunction-0.0.2.dev0 → datajunction-0.0.2.dev1}/tests/examples/project11/municipality.source.yaml +0 -0
  106. {datajunction-0.0.2.dev0 → datajunction-0.0.2.dev1}/tests/examples/project11/municipality_dim.dimension.yaml +0 -0
  107. {datajunction-0.0.2.dev0 → datajunction-0.0.2.dev1}/tests/examples/project11/municipality_municipality_type.source.yaml +0 -0
  108. {datajunction-0.0.2.dev0 → datajunction-0.0.2.dev1}/tests/examples/project11/municipality_type.source.yaml +0 -0
  109. {datajunction-0.0.2.dev0 → datajunction-0.0.2.dev1}/tests/examples/project11/national_level_agg.transform.yaml +0 -0
  110. {datajunction-0.0.2.dev0 → datajunction-0.0.2.dev1}/tests/examples/project11/num_repair_orders.metric.yaml +0 -0
  111. {datajunction-0.0.2.dev0 → datajunction-0.0.2.dev1}/tests/examples/project11/regional_level_agg.transform.yaml +0 -0
  112. {datajunction-0.0.2.dev0 → datajunction-0.0.2.dev1}/tests/examples/project11/regional_repair_efficiency.metric.yaml +0 -0
  113. {datajunction-0.0.2.dev0 → datajunction-0.0.2.dev1}/tests/examples/project11/repair_order.dimension.yaml +0 -0
  114. {datajunction-0.0.2.dev0 → datajunction-0.0.2.dev1}/tests/examples/project11/repair_order_details.source.yaml +0 -0
  115. {datajunction-0.0.2.dev0 → datajunction-0.0.2.dev1}/tests/examples/project11/repair_order_transform.transform.yaml +0 -0
  116. {datajunction-0.0.2.dev0 → datajunction-0.0.2.dev1}/tests/examples/project11/repair_orders.source.yaml +0 -0
  117. {datajunction-0.0.2.dev0 → datajunction-0.0.2.dev1}/tests/examples/project11/repair_orders_cube.cube.yaml +0 -0
  118. {datajunction-0.0.2.dev0 → datajunction-0.0.2.dev1}/tests/examples/project11/repair_type.source.yaml +0 -0
  119. {datajunction-0.0.2.dev0 → datajunction-0.0.2.dev1}/tests/examples/project11/total_repair_cost.metric.yaml +0 -0
  120. {datajunction-0.0.2.dev0 → datajunction-0.0.2.dev1}/tests/examples/project11/total_repair_order_discounts.metric.yaml +0 -0
  121. {datajunction-0.0.2.dev0 → datajunction-0.0.2.dev1}/tests/examples/project11/us_region.source.yaml +0 -0
  122. {datajunction-0.0.2.dev0 → datajunction-0.0.2.dev1}/tests/examples/project11/us_state.dimension.yaml +0 -0
  123. {datajunction-0.0.2.dev0 → datajunction-0.0.2.dev1}/tests/examples/project11/us_states.source.yaml +0 -0
  124. {datajunction-0.0.2.dev0 → datajunction-0.0.2.dev1}/tests/examples/project12/dj.yaml +0 -0
  125. {datajunction-0.0.2.dev0 → datajunction-0.0.2.dev1}/tests/examples/project12/roads/companies.source.yaml +0 -0
  126. {datajunction-0.0.2.dev0 → datajunction-0.0.2.dev1}/tests/examples/project12/roads/companies_dim.dimension.yaml +0 -0
  127. {datajunction-0.0.2.dev0 → datajunction-0.0.2.dev1}/tests/examples/project12/roads/contractor.dimension.yaml +0 -0
  128. {datajunction-0.0.2.dev0 → datajunction-0.0.2.dev1}/tests/examples/project12/roads/contractors.source.yaml +0 -0
  129. {datajunction-0.0.2.dev0 → datajunction-0.0.2.dev1}/tests/examples/project12/roads/us_state.dimension.yaml +0 -0
  130. {datajunction-0.0.2.dev0 → datajunction-0.0.2.dev1}/tests/examples/project12/roads/us_states.source.yaml +0 -0
  131. {datajunction-0.0.2.dev0 → datajunction-0.0.2.dev1}/tests/examples/project2/.ipynb_checkpoints/some_node.source-checkpoint.yaml +0 -0
  132. {datajunction-0.0.2.dev0 → datajunction-0.0.2.dev1}/tests/examples/project2/dj.yaml +0 -0
  133. {datajunction-0.0.2.dev0 → datajunction-0.0.2.dev1}/tests/examples/project2/some_node.source.yaml +0 -0
  134. {datajunction-0.0.2.dev0 → datajunction-0.0.2.dev1}/tests/examples/project3/dj.yaml +0 -0
  135. {datajunction-0.0.2.dev0 → datajunction-0.0.2.dev1}/tests/examples/project3/some_node.yaml +0 -0
  136. {datajunction-0.0.2.dev0 → datajunction-0.0.2.dev1}/tests/examples/project4/dj.yaml +0 -0
  137. {datajunction-0.0.2.dev0 → datajunction-0.0.2.dev1}/tests/examples/project4/very/very/deeply/nested/namespace/some_node.source.yaml +0 -0
  138. {datajunction-0.0.2.dev0 → datajunction-0.0.2.dev1}/tests/examples/project5/dj.yaml +0 -0
  139. {datajunction-0.0.2.dev0 → datajunction-0.0.2.dev1}/tests/examples/project5/some_node.a.b.c.source.yaml +0 -0
  140. {datajunction-0.0.2.dev0 → datajunction-0.0.2.dev1}/tests/examples/project6/dj.yaml +0 -0
  141. {datajunction-0.0.2.dev0 → datajunction-0.0.2.dev1}/tests/examples/project6/roads/contractor.dimension.yaml +0 -0
  142. {datajunction-0.0.2.dev0 → datajunction-0.0.2.dev1}/tests/examples/project6/roads/contractors.source.yaml +0 -0
  143. {datajunction-0.0.2.dev0 → datajunction-0.0.2.dev1}/tests/examples/project7/dj.yaml +0 -0
  144. {datajunction-0.0.2.dev0 → datajunction-0.0.2.dev1}/tests/examples/project7/roads/contractor.dimension.yaml +0 -0
  145. {datajunction-0.0.2.dev0 → datajunction-0.0.2.dev1}/tests/examples/project7/roads/contractors.source.yaml +0 -0
  146. {datajunction-0.0.2.dev0 → datajunction-0.0.2.dev1}/tests/examples/project8/dj.yaml +0 -0
  147. {datajunction-0.0.2.dev0 → datajunction-0.0.2.dev1}/tests/examples/project9/dj.yaml +0 -0
  148. {datajunction-0.0.2.dev0 → datajunction-0.0.2.dev1}/tests/examples/project9/roads/companies.source.yaml +0 -0
  149. {datajunction-0.0.2.dev0 → datajunction-0.0.2.dev1}/tests/examples/project9/roads/companies_dim.dimension.yaml +0 -0
  150. {datajunction-0.0.2.dev0 → datajunction-0.0.2.dev1}/tests/examples/project9/roads/contractor.dimension.yaml +0 -0
  151. {datajunction-0.0.2.dev0 → datajunction-0.0.2.dev1}/tests/examples/project9/roads/contractors.source.yaml +0 -0
  152. {datajunction-0.0.2.dev0 → datajunction-0.0.2.dev1}/tests/examples/project9/roads/us_state.dimension.yaml +0 -0
  153. {datajunction-0.0.2.dev0 → datajunction-0.0.2.dev1}/tests/examples/project9/roads/us_states.source.yaml +0 -0
  154. {datajunction-0.0.2.dev0 → datajunction-0.0.2.dev1}/tests/examples.py +0 -0
  155. {datajunction-0.0.2.dev0 → datajunction-0.0.2.dev1}/tests/test__internal.py +0 -0
  156. {datajunction-0.0.2.dev0 → datajunction-0.0.2.dev1}/tests/test_admin.py +0 -0
  157. {datajunction-0.0.2.dev0 → datajunction-0.0.2.dev1}/tests/test_base.py +0 -0
  158. {datajunction-0.0.2.dev0 → datajunction-0.0.2.dev1}/tests/test_builder.py +0 -0
  159. {datajunction-0.0.2.dev0 → datajunction-0.0.2.dev1}/tests/test_cli.py +0 -0
  160. {datajunction-0.0.2.dev0 → datajunction-0.0.2.dev1}/tests/test_client.py +0 -0
  161. {datajunction-0.0.2.dev0 → datajunction-0.0.2.dev1}/tests/test_compile.py +0 -0
  162. {datajunction-0.0.2.dev0 → datajunction-0.0.2.dev1}/tests/test_generated_client.py +0 -0
  163. {datajunction-0.0.2.dev0 → datajunction-0.0.2.dev1}/tests/test_integration.py +0 -0
  164. {datajunction-0.0.2.dev0 → datajunction-0.0.2.dev1}/tests/test_models.py +0 -0
  165. {datajunction-0.0.2.dev0 → datajunction-0.0.2.dev1}/tox.ini +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.3
2
2
  Name: datajunction
3
- Version: 0.0.2.dev0
3
+ Version: 0.0.2.dev1
4
4
  Summary: DataJunction client library for connecting to a DataJunction server
5
5
  Project-URL: repository, https://github.com/DataJunction/dj
6
6
  Author-email: DataJunction Authors <yian.shang@gmail.com>
@@ -2,4 +2,4 @@
2
2
  Version for Hatch
3
3
  """
4
4
 
5
- __version__ = "0.0.2.dev0"
5
+ __version__ = "0.0.2.dev1"
@@ -0,0 +1,162 @@
1
+ import io
2
+ from pathlib import Path
3
+ import time
4
+ from unittest import mock
5
+ import pytest
6
+ from unittest.mock import MagicMock
7
+ from datajunction.deployment import DeploymentService
8
+ from datajunction.exceptions import DJClientException
9
+ import yaml
10
+ from rich.console import Console
11
+
12
+
13
+ def test_clean_dict_removes_nones_and_empty():
14
+ dirty = {
15
+ "a": None,
16
+ "b": [],
17
+ "c": {},
18
+ "d": {"x": None, "y": {"z": []}, "k": "keep"},
19
+ "e": [1, 2],
20
+ }
21
+ cleaned = DeploymentService.clean_dict(dirty)
22
+ assert cleaned == {"d": {"k": "keep"}, "e": [1, 2]}
23
+
24
+
25
+ def test_pull_writes_yaml_files(tmp_path):
26
+ # fake client returning a minimal deployment spec
27
+ client = MagicMock()
28
+ client._export_namespace_spec.return_value = {
29
+ "namespace": "foo.bar",
30
+ "nodes": [
31
+ {"name": "foo.bar.baz", "query": "SELECT 1"},
32
+ {"name": "foo.bar.qux", "query": "SELECT 2"},
33
+ ],
34
+ }
35
+ svc = DeploymentService(client)
36
+
37
+ svc.pull("foo.bar", tmp_path)
38
+
39
+ # project-level yaml
40
+ project_yaml = yaml.safe_load((tmp_path / "dj.yaml").read_text())
41
+ assert project_yaml["namespace"] == "foo.bar"
42
+
43
+ # node files
44
+ baz_file = tmp_path / "foo" / "bar" / "baz.yaml"
45
+ assert baz_file.exists()
46
+ assert yaml.safe_load(baz_file.read_text())["query"] == "SELECT 1"
47
+
48
+ qux_file = tmp_path / "foo" / "bar" / "qux.yaml"
49
+ assert qux_file.exists()
50
+
51
+
52
+ def test_pull_raises_if_target_not_empty(tmp_path):
53
+ (tmp_path / "something.txt").write_text("not empty")
54
+ client = MagicMock()
55
+ svc = DeploymentService(client)
56
+ with pytest.raises(DJClientException):
57
+ svc.pull("ns", tmp_path)
58
+
59
+
60
+ def test_build_table_has_expected_columns():
61
+ tbl = DeploymentService.build_table(
62
+ "abc-123",
63
+ {
64
+ "results": [
65
+ {
66
+ "deploy_type": "node",
67
+ "name": "some.random.node",
68
+ "operation": "create",
69
+ "status": "success",
70
+ "message": "ok",
71
+ },
72
+ ],
73
+ },
74
+ )
75
+ cols = [c.header for c in tbl.columns]
76
+ assert cols == ["Type", "Name", "Operation", "Status", "Message"]
77
+ row_values = [col._cells[0] for col in tbl.columns]
78
+ assert row_values == ["node", "some.random.node", "create", "success", "ok"]
79
+
80
+
81
+ def test_reconstruct_deployment_spec(tmp_path):
82
+ # set up a fake exported project
83
+ (tmp_path / "dj.yaml").write_text(
84
+ yaml.safe_dump({"namespace": "foo", "tags": ["t1"]}),
85
+ )
86
+ node_dir = tmp_path / "foo"
87
+ node_dir.mkdir()
88
+ node_file = node_dir / "bar.yaml"
89
+ node_file.write_text(yaml.safe_dump({"name": "foo.bar", "query": "SELECT 1"}))
90
+
91
+ svc = DeploymentService(MagicMock())
92
+ spec = svc._reconstruct_deployment_spec(tmp_path)
93
+ assert spec["namespace"] == "foo"
94
+ assert spec["tags"] == ["t1"]
95
+ assert spec["nodes"][0]["name"] == "foo.bar"
96
+
97
+
98
+ @pytest.mark.timeout(2)
99
+ def test_push_waits_until_success(monkeypatch, tmp_path):
100
+ # Create a fake project structure so _reconstruct_deployment_spec returns something
101
+ (tmp_path / "dj.yaml").write_text(yaml.safe_dump({"namespace": "foo"}))
102
+ (tmp_path / "foo.yaml").write_text(yaml.safe_dump({"name": "foo.bar"}))
103
+
104
+ # Fake client that returns "pending" once then "success"
105
+ client = MagicMock()
106
+ responses = [
107
+ {"uuid": "123", "status": "pending", "results": []},
108
+ {"uuid": "123", "status": "success", "results": []},
109
+ ]
110
+ client.deploy.return_value = responses[0]
111
+ client.check_deployment.side_effect = responses[1:]
112
+
113
+ svc = DeploymentService(client, console=Console(file=io.StringIO()))
114
+ monkeypatch.setattr(time, "sleep", lambda _: None)
115
+
116
+ svc.push(tmp_path) # should not raise
117
+
118
+ client.deploy.assert_called_once()
119
+ client.check_deployment.assert_called()
120
+
121
+
122
+ def test_push_times_out(monkeypatch, tmp_path):
123
+ # minimal project structure so _reconstruct_deployment_spec works
124
+ (tmp_path / "dj.yaml").write_text(yaml.safe_dump({"namespace": "foo"}))
125
+ (tmp_path / "foo.yaml").write_text(yaml.safe_dump({"name": "foo.bar"}))
126
+
127
+ # Fake client: deploy returns a uuid, check_deployment always 'pending'
128
+ client = MagicMock()
129
+ client.deploy.return_value = {"uuid": "123", "status": "pending", "results": []}
130
+ client.check_deployment.return_value = {
131
+ "uuid": "123",
132
+ "status": "pending",
133
+ "results": [],
134
+ }
135
+
136
+ svc = DeploymentService(client, console=Console(file=io.StringIO()))
137
+
138
+ # Patch time.sleep to skip waiting
139
+ monkeypatch.setattr(time, "sleep", lambda _: None)
140
+
141
+ # Simulate time moving past the timeout on the second call
142
+ start_time = 1_000_000
143
+ times = [start_time, start_time + 301] # second call is > 5 minutes later
144
+ monkeypatch.setattr(time, "time", lambda: times.pop(0))
145
+
146
+ with pytest.raises(DJClientException, match="Deployment timed out"):
147
+ svc.push(tmp_path)
148
+
149
+ client.deploy.assert_called_once()
150
+ client.check_deployment.assert_called()
151
+
152
+
153
+ def test_read_project_yaml_returns_empty(tmp_path: Path):
154
+ """
155
+ Verify that when dj.yaml is missing, _read_project_yaml returns an empty dict.
156
+ """
157
+ # Create a directory without dj.yaml
158
+ project_dir = tmp_path
159
+ client = mock.MagicMock()
160
+ svc = DeploymentService(client, console=Console(file=io.StringIO()))
161
+ result = svc._read_project_yaml(project_dir)
162
+ assert result == {}