mage-ai 0.8.97__py3-none-any.whl → 0.8.99__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.

Potentially problematic release.


This version of mage-ai might be problematic. Click here for more details.

Files changed (152) hide show
  1. mage_ai/api/policies/AutocompleteItemPolicy.py +2 -1
  2. mage_ai/api/policies/BasePolicy.py +2 -2
  3. mage_ai/api/policies/BlockTemplatePolicy.py +2 -1
  4. mage_ai/api/policies/ClusterPolicy.py +2 -1
  5. mage_ai/api/policies/DataProviderPolicy.py +2 -1
  6. mage_ai/api/policies/EventRulePolicy.py +2 -1
  7. mage_ai/api/policies/ExtensionOptionPolicy.py +2 -1
  8. mage_ai/api/policies/FileVersionPolicy.py +2 -1
  9. mage_ai/api/policies/GitBranchPolicy.py +9 -0
  10. mage_ai/api/policies/KernelPolicy.py +2 -1
  11. mage_ai/api/policies/LogPolicy.py +2 -2
  12. mage_ai/api/policies/OauthPolicy.py +15 -0
  13. mage_ai/api/policies/OutputPolicy.py +2 -2
  14. mage_ai/api/policies/PipelinePolicy.py +2 -2
  15. mage_ai/api/policies/PipelineRunPolicy.py +2 -2
  16. mage_ai/api/policies/PipelineSchedulePolicy.py +2 -2
  17. mage_ai/api/policies/PullRequestPolicy.py +64 -0
  18. mage_ai/api/policies/SessionPolicy.py +4 -1
  19. mage_ai/api/policies/VariablePolicy.py +2 -2
  20. mage_ai/api/policies/WidgetPolicy.py +2 -2
  21. mage_ai/api/policies/WorkspacePolicy.py +3 -3
  22. mage_ai/api/presenters/PipelinePresenter.py +1 -0
  23. mage_ai/api/presenters/PullRequestPresenter.py +16 -0
  24. mage_ai/api/presenters/StatusPresenter.py +2 -0
  25. mage_ai/api/presenters/SyncPresenter.py +1 -0
  26. mage_ai/api/presenters/WorkspacePresenter.py +2 -0
  27. mage_ai/api/resources/GitBranchResource.py +81 -26
  28. mage_ai/api/resources/OauthResource.py +31 -4
  29. mage_ai/api/resources/PipelineResource.py +8 -1
  30. mage_ai/api/resources/PullRequestResource.py +87 -0
  31. mage_ai/api/resources/RoleResource.py +6 -3
  32. mage_ai/api/resources/SecretResource.py +2 -5
  33. mage_ai/api/resources/SessionResource.py +18 -0
  34. mage_ai/api/resources/StatusResource.py +7 -3
  35. mage_ai/api/resources/UserResource.py +11 -16
  36. mage_ai/api/resources/WorkspaceResource.py +83 -53
  37. mage_ai/authentication/oauth/active_directory.py +17 -0
  38. mage_ai/authentication/oauth/constants.py +9 -0
  39. mage_ai/authentication/oauth/utils.py +2 -1
  40. mage_ai/authentication/oauth2.py +9 -3
  41. mage_ai/cli/main.py +94 -51
  42. mage_ai/cluster_manager/kubernetes/workload_manager.py +141 -45
  43. mage_ai/data_preparation/git/__init__.py +86 -16
  44. mage_ai/data_preparation/git/api.py +175 -0
  45. mage_ai/data_preparation/models/block/dbt/utils/__init__.py +49 -14
  46. mage_ai/data_preparation/models/block/sql/__init__.py +3 -2
  47. mage_ai/data_preparation/models/pipeline.py +4 -1
  48. mage_ai/data_preparation/models/pipelines/integration_pipeline.py +7 -3
  49. mage_ai/data_preparation/preferences.py +4 -2
  50. mage_ai/data_preparation/repo_manager.py +41 -10
  51. mage_ai/data_preparation/shared/secrets.py +5 -6
  52. mage_ai/data_preparation/sync/__init__.py +2 -1
  53. mage_ai/data_preparation/sync/git_sync.py +2 -5
  54. mage_ai/data_preparation/templates/utils.py +2 -0
  55. mage_ai/orchestration/db/models/oauth.py +22 -4
  56. mage_ai/orchestration/pipeline_scheduler.py +19 -8
  57. mage_ai/orchestration/queue/process_queue.py +15 -12
  58. mage_ai/server/api/clusters.py +21 -11
  59. mage_ai/server/constants.py +1 -1
  60. mage_ai/server/frontend_dist/404.html +2 -2
  61. mage_ai/server/frontend_dist/404.html.html +2 -2
  62. mage_ai/server/frontend_dist/_next/static/WRxCTOtmZhTqQws_7OJZD/_buildManifest.js +1 -0
  63. mage_ai/server/frontend_dist/_next/static/chunks/{1286-993725c925c56a98.js → 1286-b90bd4b7f8abfc3a.js} +1 -1
  64. mage_ai/server/frontend_dist/_next/static/chunks/{1424-f475cae42f8a7fca.js → 1424-90c0f66ba2f86b88.js} +1 -1
  65. mage_ai/server/frontend_dist/_next/static/chunks/3883-c95563b9f60ae526.js +1 -0
  66. mage_ai/server/frontend_dist/_next/static/chunks/6694-c8f2a68074420906.js +1 -0
  67. mage_ai/server/frontend_dist/_next/static/chunks/{9350-1ff50f1d7b9ee754.js → 9350-5191c83a8d0cf454.js} +1 -1
  68. mage_ai/server/frontend_dist/_next/static/chunks/pages/{_app-3527178abd99bc87.js → _app-171846e16d26855a.js} +1 -1
  69. mage_ai/server/frontend_dist/_next/static/chunks/pages/files-e4e778f8f5e1bf2e.js +1 -0
  70. mage_ai/server/frontend_dist/_next/static/chunks/pages/manage/settings-c788c1b127999825.js +1 -0
  71. mage_ai/server/frontend_dist/_next/static/chunks/pages/manage/users/[user]-b4650224a19e8fe6.js +1 -0
  72. mage_ai/server/frontend_dist/_next/static/chunks/pages/manage/users/new-931eb719e3fae29c.js +1 -0
  73. mage_ai/server/frontend_dist/_next/static/chunks/pages/manage/users-d3724bde0b186dd9.js +1 -0
  74. mage_ai/server/frontend_dist/_next/static/chunks/pages/manage-af11f9cf94024ac0.js +1 -0
  75. mage_ai/server/frontend_dist/_next/static/chunks/pages/pipelines/[pipeline]/backfills/{[...slug]-3ec5eb9562e4bff4.js → [...slug]-34326db259f922d1.js} +1 -1
  76. mage_ai/server/frontend_dist/_next/static/chunks/pages/pipelines/[pipeline]/edit-503ecb7a72257b79.js +1 -0
  77. mage_ai/server/frontend_dist/_next/static/chunks/pages/pipelines/[pipeline]/runs/{[run]-7667080098731e30.js → [run]-2994b8ab7862c07b.js} +1 -1
  78. mage_ai/server/frontend_dist/_next/static/chunks/pages/pipelines/[pipeline]/runs-7b31b851e2544b42.js +1 -0
  79. mage_ai/server/frontend_dist/_next/static/chunks/pages/pipelines/[pipeline]/triggers/{[...slug]-e18058e13882b20d.js → [...slug]-4445619d4eabe065.js} +1 -1
  80. mage_ai/server/frontend_dist/_next/static/chunks/pages/pipelines/[pipeline]/{triggers-6854c10d5589d394.js → triggers-b7db0b682fadb840.js} +1 -1
  81. mage_ai/server/frontend_dist/_next/static/chunks/pages/settings/account/profile-ee0931af3abb55b3.js +1 -0
  82. mage_ai/server/frontend_dist/_next/static/chunks/pages/settings/workspace/preferences-f8a59d718751be9a.js +1 -0
  83. mage_ai/server/frontend_dist/_next/static/chunks/pages/settings/workspace/sync-data-90f8830890036eb2.js +1 -0
  84. mage_ai/server/frontend_dist/_next/static/chunks/pages/settings/workspace/users-9f82673fc438ea83.js +1 -0
  85. mage_ai/server/frontend_dist/_next/static/chunks/pages/sign-in-a1871b8a537d823c.js +1 -0
  86. mage_ai/server/frontend_dist/_next/static/chunks/pages/version-control-48859b4e9c846212.js +1 -0
  87. mage_ai/server/frontend_dist/files.html +2 -2
  88. mage_ai/server/frontend_dist/index.html +2 -2
  89. mage_ai/server/frontend_dist/manage/settings.html +24 -0
  90. mage_ai/server/frontend_dist/manage/users/[user].html +2 -2
  91. mage_ai/server/frontend_dist/manage/users/new.html +24 -0
  92. mage_ai/server/frontend_dist/manage/users.html +2 -2
  93. mage_ai/server/frontend_dist/manage.html +2 -2
  94. mage_ai/server/frontend_dist/pipeline-runs.html +2 -2
  95. mage_ai/server/frontend_dist/pipelines/[pipeline]/backfills/[...slug].html +2 -2
  96. mage_ai/server/frontend_dist/pipelines/[pipeline]/backfills.html +2 -2
  97. mage_ai/server/frontend_dist/pipelines/[pipeline]/edit.html +2 -2
  98. mage_ai/server/frontend_dist/pipelines/[pipeline]/logs.html +2 -2
  99. mage_ai/server/frontend_dist/pipelines/[pipeline]/monitors/block-runs.html +2 -2
  100. mage_ai/server/frontend_dist/pipelines/[pipeline]/monitors/block-runtime.html +2 -2
  101. mage_ai/server/frontend_dist/pipelines/[pipeline]/monitors.html +2 -2
  102. mage_ai/server/frontend_dist/pipelines/[pipeline]/runs/[run].html +2 -2
  103. mage_ai/server/frontend_dist/pipelines/[pipeline]/runs.html +2 -2
  104. mage_ai/server/frontend_dist/pipelines/[pipeline]/settings.html +2 -2
  105. mage_ai/server/frontend_dist/pipelines/[pipeline]/syncs.html +2 -2
  106. mage_ai/server/frontend_dist/pipelines/[pipeline]/triggers/[...slug].html +2 -2
  107. mage_ai/server/frontend_dist/pipelines/[pipeline]/triggers.html +2 -2
  108. mage_ai/server/frontend_dist/pipelines/[pipeline].html +2 -2
  109. mage_ai/server/frontend_dist/pipelines.html +2 -2
  110. mage_ai/server/frontend_dist/settings/account/profile.html +2 -2
  111. mage_ai/server/frontend_dist/settings/workspace/preferences.html +2 -2
  112. mage_ai/server/frontend_dist/settings/workspace/sync-data.html +2 -2
  113. mage_ai/server/frontend_dist/settings/workspace/users.html +2 -2
  114. mage_ai/server/frontend_dist/settings.html +2 -2
  115. mage_ai/server/frontend_dist/sign-in.html +2 -2
  116. mage_ai/server/frontend_dist/terminal.html +2 -2
  117. mage_ai/server/frontend_dist/test.html +2 -2
  118. mage_ai/server/frontend_dist/triggers.html +2 -2
  119. mage_ai/server/frontend_dist/version-control.html +2 -2
  120. mage_ai/server/scheduler_manager.py +7 -2
  121. mage_ai/server/server.py +37 -3
  122. mage_ai/server/terminal_server.py +2 -2
  123. mage_ai/server/websocket_server.py +6 -2
  124. mage_ai/services/newrelic/__init__.py +21 -0
  125. mage_ai/settings/__init__.py +32 -0
  126. mage_ai/shared/hash.py +2 -0
  127. mage_ai/tests/api/test_utils.py +29 -2
  128. mage_ai/tests/data_preparation/models/test_pipeline.py +5 -0
  129. {mage_ai-0.8.97.dist-info → mage_ai-0.8.99.dist-info}/METADATA +8 -3
  130. {mage_ai-0.8.97.dist-info → mage_ai-0.8.99.dist-info}/RECORD +136 -127
  131. mage_ai/data_preparation/templates/main/projects/__init__.py +0 -0
  132. mage_ai/server/frontend_dist/_next/static/YLZRSrQ0aqtl-GGePfsMB/_buildManifest.js +0 -1
  133. mage_ai/server/frontend_dist/_next/static/chunks/3077-d58f18ed770e5137.js +0 -1
  134. mage_ai/server/frontend_dist/_next/static/chunks/3714-b676173cd4d8d86c.js +0 -1
  135. mage_ai/server/frontend_dist/_next/static/chunks/pages/files-82b5409dac9564f4.js +0 -1
  136. mage_ai/server/frontend_dist/_next/static/chunks/pages/manage/users/[user]-bb6aaa23e92a5add.js +0 -1
  137. mage_ai/server/frontend_dist/_next/static/chunks/pages/manage/users-c91ee702a4cd7a6f.js +0 -1
  138. mage_ai/server/frontend_dist/_next/static/chunks/pages/manage-7961010cb0fb9abd.js +0 -1
  139. mage_ai/server/frontend_dist/_next/static/chunks/pages/pipelines/[pipeline]/edit-7b8ce89f0d717465.js +0 -1
  140. mage_ai/server/frontend_dist/_next/static/chunks/pages/pipelines/[pipeline]/runs-5bd17a8f3f3d57ef.js +0 -1
  141. mage_ai/server/frontend_dist/_next/static/chunks/pages/settings/account/profile-7d75e42d5f4936bb.js +0 -1
  142. mage_ai/server/frontend_dist/_next/static/chunks/pages/settings/workspace/preferences-8220c1200472bf70.js +0 -1
  143. mage_ai/server/frontend_dist/_next/static/chunks/pages/settings/workspace/sync-data-b602fa9b6ffabd12.js +0 -1
  144. mage_ai/server/frontend_dist/_next/static/chunks/pages/settings/workspace/users-3f9d5800f268a263.js +0 -1
  145. mage_ai/server/frontend_dist/_next/static/chunks/pages/sign-in-2925c2c1b0c5559a.js +0 -1
  146. mage_ai/server/frontend_dist/_next/static/chunks/pages/version-control-5ffc663cfb0ec81e.js +0 -1
  147. /mage_ai/server/frontend_dist/_next/static/{YLZRSrQ0aqtl-GGePfsMB → WRxCTOtmZhTqQws_7OJZD}/_middlewareManifest.js +0 -0
  148. /mage_ai/server/frontend_dist/_next/static/{YLZRSrQ0aqtl-GGePfsMB → WRxCTOtmZhTqQws_7OJZD}/_ssgManifest.js +0 -0
  149. {mage_ai-0.8.97.dist-info → mage_ai-0.8.99.dist-info}/LICENSE +0 -0
  150. {mage_ai-0.8.97.dist-info → mage_ai-0.8.99.dist-info}/WHEEL +0 -0
  151. {mage_ai-0.8.97.dist-info → mage_ai-0.8.99.dist-info}/entry_points.txt +0 -0
  152. {mage_ai-0.8.97.dist-info → mage_ai-0.8.99.dist-info}/top_level.txt +0 -0
@@ -0,0 +1,21 @@
1
+ import newrelic.agent
2
+
3
+ from mage_ai.settings import ENABLE_NEW_RELIC, NEW_RELIC_CONFIG_PATH
4
+
5
+
6
+ def initialize_new_relic():
7
+ enable_new_relic = ENABLE_NEW_RELIC
8
+ application = None
9
+ if ENABLE_NEW_RELIC:
10
+ try:
11
+ newrelic.agent.initialize(NEW_RELIC_CONFIG_PATH)
12
+ application = newrelic.agent.register_application(timeout=10)
13
+ except newrelic.api.exceptions.ConfigurationError as error:
14
+ print(f"Configuration error with new relic initialization. Disable "
15
+ f"new relic reporting. Message: {error}")
16
+ enable_new_relic = False
17
+ except Exception as error:
18
+ print("Unexpected error with new relic initialization. Disable "
19
+ f"new relic reporting. Message: {error}")
20
+ enable_new_relic = False
21
+ return (enable_new_relic, application)
@@ -23,6 +23,7 @@ def is_disable_pipeline_edit_access():
23
23
  return DISABLE_NOTEBOOK_EDIT_ACCESS >= 1
24
24
 
25
25
 
26
+ # ----------------- Authentication settings ----------------
26
27
  REQUIRE_USER_AUTHENTICATION = \
27
28
  os.getenv('REQUIRE_USER_AUTHENTICATION', 'False').lower() in ('true', '1', 't')
28
29
  AUTHENTICATION_MODE = os.getenv('AUTHENTICATION_MODE', 'LOCAL')
@@ -38,6 +39,10 @@ LDAP_ADMIN_USERNAME = os.getenv('LDAP_ADMIN_USERNAME', 'admin')
38
39
  # values: Viewer, Editor, Admin
39
40
  LDAP_DEFAULT_ACCESS = os.getenv('LDAP_DEFAULT_ACCESS', None)
40
41
 
42
+ ACTIVE_DIRECTORY_DIRECTORY_ID = os.getenv('ACTIVE_DIRECTORY_DIRECTORY_ID', None)
43
+
44
+ # ----------------------------------------------------------
45
+
41
46
  SERVER_VERBOSITY = os.getenv('SERVER_VERBOSITY', 'info') or 'info'
42
47
 
43
48
  SHELL_COMMAND = os.getenv('SHELL_COMMAND', None)
@@ -47,5 +52,32 @@ USE_UNIQUE_TERMINAL = os.getenv('USE_UNIQUE_TERMINAL', None)
47
52
  SENTRY_DSN = os.getenv('SENTRY_DSN', None)
48
53
  SENTRY_TRACES_SAMPLE_RATE = os.getenv('SENTRY_TRACES_SAMPLE_RATE', 1.0)
49
54
 
55
+ # New relic enable environment variable
56
+ ENABLE_NEW_RELIC = os.getenv('ENABLE_NEW_RELIC', False)
57
+ NEW_RELIC_CONFIG_PATH = os.getenv('NEW_RELIC_CONFIG_PATH', '')
58
+
50
59
  DEFAULT_LOCALHOST_URL = 'http://localhost:6789'
51
60
  MAGE_PUBLIC_HOST = os.getenv('MAGE_PUBLIC_HOST') or DEFAULT_LOCALHOST_URL
61
+
62
+ # List of environment variables used to configure Mage. The value of these settings
63
+ # will be copied between workspaces.
64
+ MAGE_SETTINGS_ENVIRONMENT_VARIABLES = [
65
+ 'DISABLE_NOTEBOOK_EDIT_ACCESS',
66
+ 'REQUIRE_USER_AUTHENTICATION',
67
+ 'AUTHENTICATION_MODE',
68
+ 'LDAP_SERVER',
69
+ 'LDAP_BIND_DN',
70
+ 'LDAP_BIND_PASSWORD',
71
+ 'LDAP_BASE_DN',
72
+ 'LDAP_AUTHENTICATION_FILTER',
73
+ 'LDAP_AUTHORIZATION_FILTER',
74
+ 'LDAP_ADMIN_USERNAME',
75
+ 'LDAP_DEFAULT_ACCESS',
76
+ 'SERVER_VERBOSITY',
77
+ 'SHELL_COMMAND',
78
+ 'USE_UNIQUE_TERMINAL',
79
+ 'SENTRY_DSN',
80
+ 'SENTRY_TRACES_SAMPLE_RATE',
81
+ 'MAGE_PUBLIC_HOST',
82
+ 'ACTIVE_DIRECTORY_DIRECTORY_ID',
83
+ ]
mage_ai/shared/hash.py CHANGED
@@ -107,6 +107,8 @@ def index_by(func, arr):
107
107
 
108
108
  def merge_dict(a, b):
109
109
  c = a.copy()
110
+ if not b:
111
+ return c
110
112
  c.update(b)
111
113
  return c
112
114
 
@@ -39,6 +39,29 @@ class UtilsTest(DBTestCase):
39
39
  },
40
40
  )
41
41
 
42
+ def test_get_user_access_for_user_with_no_permissions(self):
43
+ password_salt = generate_salt()
44
+ user = User.create(
45
+ email='no_access@admin.com',
46
+ password_hash=create_bcrypt_hash('admin', password_salt),
47
+ password_salt=password_salt,
48
+ username='no_access',
49
+ )
50
+
51
+ access = user.get_access(None)
52
+ self.assertEqual(0, access)
53
+
54
+ access = user.get_access(Permission.Entity.ANY)
55
+ self.assertEqual(0, access)
56
+
57
+ access = user.get_access(Permission.Entity.GLOBAL, None)
58
+ self.assertEqual(0, access)
59
+
60
+ access = user.get_access(Permission.Entity.PIPELINE, 'test')
61
+ self.assertEqual(0, access)
62
+
63
+ self.assertFalse(is_owner(user))
64
+
42
65
  def test_get_user_access_for_global_owner(self):
43
66
  password_salt = generate_salt()
44
67
  user = User.create(
@@ -48,7 +71,11 @@ class UtilsTest(DBTestCase):
48
71
  roles_new=[Role.query.filter(Role.name == 'Owner').first()],
49
72
  username='admin',
50
73
  )
74
+
51
75
  access = user.get_access(None)
76
+ self.assertEqual(0, access)
77
+
78
+ access = user.get_access(Permission.Entity.ANY)
52
79
  self.assertEqual(1, access)
53
80
 
54
81
  access = user.get_access(Permission.Entity.GLOBAL, None)
@@ -77,7 +104,7 @@ class UtilsTest(DBTestCase):
77
104
  )],
78
105
  username='editor',
79
106
  )
80
- access = user.get_access(None)
107
+ access = user.get_access(Permission.Entity.ANY)
81
108
  self.assertEqual(4, access)
82
109
 
83
110
  access = user.get_access(Permission.Entity.GLOBAL, None)
@@ -124,7 +151,7 @@ class UtilsTest(DBTestCase):
124
151
  )],
125
152
  username='editor2',
126
153
  )
127
- access = user.get_access(None)
154
+ access = user.get_access(Permission.Entity.ANY)
128
155
  self.assertEqual(12, access)
129
156
 
130
157
  access = user.get_access(Permission.Entity.GLOBAL, None)
@@ -36,6 +36,7 @@ class PipelineTest(DBTestCase):
36
36
  executor_count=1,
37
37
  executor_type=None,
38
38
  name='test pipeline 2',
39
+ notification_config=dict(),
39
40
  uuid='test_pipeline_2',
40
41
  spark_config=dict(),
41
42
  type='python',
@@ -173,6 +174,7 @@ class PipelineTest(DBTestCase):
173
174
  executor_count=1,
174
175
  executor_type=None,
175
176
  name='test pipeline 3',
177
+ notification_config=dict(),
176
178
  uuid='test_pipeline_3',
177
179
  spark_config=dict(),
178
180
  type='python',
@@ -253,6 +255,7 @@ class PipelineTest(DBTestCase):
253
255
  executor_count=1,
254
256
  executor_type=None,
255
257
  name='test pipeline 4',
258
+ notification_config=dict(),
256
259
  uuid='test_pipeline_4',
257
260
  spark_config=dict(),
258
261
  type='python',
@@ -355,6 +358,7 @@ class PipelineTest(DBTestCase):
355
358
  executor_count=1,
356
359
  executor_type=None,
357
360
  name='test pipeline 5',
361
+ notification_config=dict(),
358
362
  uuid='test_pipeline_5',
359
363
  spark_config=dict(),
360
364
  type='python',
@@ -586,6 +590,7 @@ class PipelineTest(DBTestCase):
586
590
  "executor_type": None,
587
591
  "extensions": {},
588
592
  "name": "test_pipeline_9",
593
+ "notification_config": {},
589
594
  "spark_config": {},
590
595
  "type": "integration",
591
596
  "updated_at": None,
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: mage-ai
3
- Version: 0.8.97
3
+ Version: 0.8.99
4
4
  Summary: Mage is a tool for building and deploying data pipelines.
5
5
  Home-page: https://github.com/mage-ai/mage-ai
6
6
  Author: Mage
@@ -14,6 +14,7 @@ License-File: LICENSE
14
14
  Requires-Dist: Faker (==4.14.0)
15
15
  Requires-Dist: GitPython (==3.1.31)
16
16
  Requires-Dist: Jinja2 (==3.1.2)
17
+ Requires-Dist: PyGithub (==1.59.0)
17
18
  Requires-Dist: PyJWT (==2.6.0)
18
19
  Requires-Dist: aiofiles (==22.1.0)
19
20
  Requires-Dist: alembic (>=1.7.5)
@@ -34,6 +35,7 @@ Requires-Dist: jupyter-server-proxy (==3.2.1)
34
35
  Requires-Dist: jupyter-server (==1.23.5)
35
36
  Requires-Dist: jupyter-client (==7.3.4)
36
37
  Requires-Dist: ldap3 (==2.9.1)
38
+ Requires-Dist: newrelic (==8.8.0)
37
39
  Requires-Dist: numpy (>=1.21.0)
38
40
  Requires-Dist: pandas (>=1.3.0)
39
41
  Requires-Dist: polars
@@ -54,11 +56,12 @@ Requires-Dist: tornado (==6.1)
54
56
  Requires-Dist: typer[all] (==0.7.0)
55
57
  Requires-Dist: typing-extensions (==4.5.0)
56
58
  Provides-Extra: all
59
+ Requires-Dist: PyGithub (==1.59.0) ; extra == 'all'
57
60
  Requires-Dist: aws-secretsmanager-caching (==1.1.1.5) ; extra == 'all'
58
61
  Requires-Dist: azure-eventhub (==5.11.2) ; extra == 'all'
59
62
  Requires-Dist: azure-identity (==1.11.0) ; extra == 'all'
60
- Requires-Dist: azure-keyvault-secrets (==4.6.0) ; extra == 'all'
61
63
  Requires-Dist: azure-keyvault-certificates (==4.6.0) ; extra == 'all'
64
+ Requires-Dist: azure-keyvault-secrets (==4.6.0) ; extra == 'all'
62
65
  Requires-Dist: azure-storage-blob (==12.14.1) ; extra == 'all'
63
66
  Requires-Dist: boto3 (==1.26.60) ; extra == 'all'
64
67
  Requires-Dist: botocore (==1.29.60) ; extra == 'all'
@@ -73,6 +76,7 @@ Requires-Dist: dbt-snowflake (==1.4.0) ; extra == 'all'
73
76
  Requires-Dist: dbt-spark (==1.4.0) ; extra == 'all'
74
77
  Requires-Dist: dbt-sqlserver (==1.3.1) ; extra == 'all'
75
78
  Requires-Dist: dbt-trino (==1.4.0) ; extra == 'all'
79
+ Requires-Dist: dbt-clickhouse (==1.4.0) ; extra == 'all'
76
80
  Requires-Dist: google-api-core (==2.11.0) ; extra == 'all'
77
81
  Requires-Dist: google-api-python-client (==2.70.0) ; extra == 'all'
78
82
  Requires-Dist: google-cloud-bigquery (~=3.0) ; extra == 'all'
@@ -86,8 +90,8 @@ Requires-Dist: kubernetes (==25.3.0) ; extra == 'all'
86
90
  Requires-Dist: ldap3 (==2.9.1) ; extra == 'all'
87
91
  Requires-Dist: opensearch-py (==2.0.0) ; extra == 'all'
88
92
  Requires-Dist: pika (==1.3.1) ; extra == 'all'
89
- Requires-Dist: psycopg2 (==2.9.3) ; extra == 'all'
90
93
  Requires-Dist: psycopg2-binary (==2.9.3) ; extra == 'all'
94
+ Requires-Dist: psycopg2 (==2.9.3) ; extra == 'all'
91
95
  Requires-Dist: pydruid (==0.6.5) ; extra == 'all'
92
96
  Requires-Dist: pymongo (==4.3.3) ; extra == 'all'
93
97
  Requires-Dist: pyodbc (==4.0.35) ; extra == 'all'
@@ -115,6 +119,7 @@ Requires-Dist: dbt-snowflake (==1.4.0) ; extra == 'dbt'
115
119
  Requires-Dist: dbt-spark (==1.4.0) ; extra == 'dbt'
116
120
  Requires-Dist: dbt-sqlserver (==1.3.1) ; extra == 'dbt'
117
121
  Requires-Dist: dbt-trino (==1.4.0) ; extra == 'dbt'
122
+ Requires-Dist: dbt-clickhouse (==1.4.0) ; extra == 'dbt'
118
123
  Provides-Extra: google-cloud-storage
119
124
  Requires-Dist: google-cloud-storage (==2.5.0) ; extra == 'google-cloud-storage'
120
125
  Provides-Extra: hdf5