ob-metaflow-extensions 1.1.42__tar.gz → 1.1.42rc0__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 (23) hide show
  1. {ob-metaflow-extensions-1.1.42 → ob-metaflow-extensions-1.1.42rc0}/PKG-INFO +1 -1
  2. ob-metaflow-extensions-1.1.42rc0/metaflow_extensions/outerbounds/__init__.py +5 -0
  3. {ob-metaflow-extensions-1.1.42 → ob-metaflow-extensions-1.1.42rc0}/metaflow_extensions/outerbounds/config/__init__.py +0 -2
  4. {ob-metaflow-extensions-1.1.42 → ob-metaflow-extensions-1.1.42rc0}/metaflow_extensions/outerbounds/plugins/__init__.py +0 -79
  5. {ob-metaflow-extensions-1.1.42 → ob-metaflow-extensions-1.1.42rc0}/metaflow_extensions/outerbounds/plugins/auth_server.py +1 -6
  6. ob-metaflow-extensions-1.1.42rc0/metaflow_extensions/outerbounds/plugins/perimeters.py +27 -0
  7. {ob-metaflow-extensions-1.1.42 → ob-metaflow-extensions-1.1.42rc0}/ob_metaflow_extensions.egg-info/PKG-INFO +1 -1
  8. {ob-metaflow-extensions-1.1.42 → ob-metaflow-extensions-1.1.42rc0}/ob_metaflow_extensions.egg-info/SOURCES.txt +1 -1
  9. ob-metaflow-extensions-1.1.42rc0/ob_metaflow_extensions.egg-info/requires.txt +3 -0
  10. {ob-metaflow-extensions-1.1.42 → ob-metaflow-extensions-1.1.42rc0}/setup.py +2 -2
  11. ob-metaflow-extensions-1.1.42/metaflow_extensions/outerbounds/__init__.py +0 -0
  12. ob-metaflow-extensions-1.1.42/metaflow_extensions/outerbounds/toplevel/plugins/gcp/__init__.py +0 -1
  13. ob-metaflow-extensions-1.1.42/ob_metaflow_extensions.egg-info/requires.txt +0 -3
  14. {ob-metaflow-extensions-1.1.42 → ob-metaflow-extensions-1.1.42rc0}/README.md +0 -0
  15. {ob-metaflow-extensions-1.1.42 → ob-metaflow-extensions-1.1.42rc0}/metaflow_extensions/outerbounds/plugins/kubernetes/__init__.py +0 -0
  16. {ob-metaflow-extensions-1.1.42 → ob-metaflow-extensions-1.1.42rc0}/metaflow_extensions/outerbounds/plugins/kubernetes/kubernetes_client.py +0 -0
  17. {ob-metaflow-extensions-1.1.42 → ob-metaflow-extensions-1.1.42rc0}/metaflow_extensions/outerbounds/toplevel/__init__.py +0 -0
  18. {ob-metaflow-extensions-1.1.42 → ob-metaflow-extensions-1.1.42rc0}/metaflow_extensions/outerbounds/toplevel/global_aliases_for_metaflow_package.py +0 -0
  19. {ob-metaflow-extensions-1.1.42 → ob-metaflow-extensions-1.1.42rc0}/metaflow_extensions/outerbounds/toplevel/plugins/azure/__init__.py +0 -0
  20. {ob-metaflow-extensions-1.1.42 → ob-metaflow-extensions-1.1.42rc0}/metaflow_extensions/outerbounds/toplevel/plugins/kubernetes/__init__.py +0 -0
  21. {ob-metaflow-extensions-1.1.42 → ob-metaflow-extensions-1.1.42rc0}/ob_metaflow_extensions.egg-info/dependency_links.txt +0 -0
  22. {ob-metaflow-extensions-1.1.42 → ob-metaflow-extensions-1.1.42rc0}/ob_metaflow_extensions.egg-info/top_level.txt +0 -0
  23. {ob-metaflow-extensions-1.1.42 → ob-metaflow-extensions-1.1.42rc0}/setup.cfg +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: ob-metaflow-extensions
3
- Version: 1.1.42
3
+ Version: 1.1.42rc0
4
4
  Summary: Outerbounds Platform Extensions for Metaflow
5
5
  Author: Outerbounds, Inc.
6
6
  License: Commercial
@@ -0,0 +1,5 @@
1
+ from metaflow_extensions.outerbounds.plugins.perimeters import (
2
+ override_metaflow_profile_with_perimeter,
3
+ )
4
+
5
+ override_metaflow_profile_with_perimeter()
@@ -1,5 +1,3 @@
1
1
  DEFAULT_AWS_CLIENT_PROVIDER = "obp"
2
2
 
3
3
  DEFAULT_AZURE_CLIENT_PROVIDER = "obp"
4
-
5
- DEFAULT_GCP_CLIENT_PROVIDER = "obp"
@@ -1,5 +1,4 @@
1
1
  import os
2
- import json
3
2
  import tempfile
4
3
  from contextlib import contextmanager
5
4
 
@@ -162,81 +161,3 @@ class ObpAzureAuthProvider(object):
162
161
 
163
162
 
164
163
  AZURE_CLIENT_PROVIDERS_DESC = [("obp", ".ObpAzureAuthProvider")]
165
-
166
- import threading
167
- import time
168
-
169
- _gcp_client_cache = dict()
170
-
171
-
172
- def _get_cache_key():
173
- return os.getpid(), threading.get_ident()
174
-
175
-
176
- class ObpGcpAuthProvider(object):
177
- name = "obp"
178
-
179
- @staticmethod
180
- def get_gs_storage_client(*args, **kwargs):
181
-
182
- import sys
183
- from metaflow_extensions.outerbounds.plugins.auth_server import get_token
184
-
185
- cache_key = _get_cache_key()
186
- if _gcp_client_cache.get(cache_key):
187
- # Don't cache the client for more than 5 minutes as it may have
188
- # expired.
189
- if _gcp_client_cache[cache_key]._created_at < time.time() - 300:
190
- del _gcp_client_cache[cache_key]
191
- else:
192
- return _gcp_client_cache[cache_key]
193
-
194
- from hashlib import sha256
195
- from metaflow.util import get_username
196
-
197
- user = get_username()
198
-
199
- token_info = get_token("/generate/gcp")
200
- token_file = "/tmp/obp_token." + sha256(user.encode("utf-8")).hexdigest()[:16]
201
- credentials_file = (
202
- "/tmp/obp_credentials." + sha256(user.encode("utf-8")).hexdigest()[:16]
203
- )
204
-
205
- with tempfile.NamedTemporaryFile("w", delete=False) as f:
206
- f.write(token_info["token"])
207
- tmp_token_file = f.name
208
- os.rename(tmp_token_file, token_file)
209
-
210
- credentials_json = {
211
- "type": "external_account",
212
- "audience": f"//iam.googleapis.com/projects/{token_info['gcpProjectNumber']}/locations/global/workloadIdentityPools/{token_info['gcpWorkloadIdentityPool']}/providers/{token_info['gcpWorkloadIdentityPoolProvider']}",
213
- "subject_token_type": "urn:ietf:params:oauth:token-type:jwt",
214
- "token_url": "https://sts.googleapis.com/v1/token",
215
- "service_account_impersonation_url": f"https://iamcredentials.googleapis.com/v1/projects/-/serviceAccounts/{token_info['gcpServiceAccountEmail']}:generateAccessToken",
216
- "credential_source": {
217
- "file": token_file,
218
- "format": {"type": "text"},
219
- },
220
- }
221
-
222
- with tempfile.NamedTemporaryFile("w", delete=False) as f:
223
- f.write(json.dumps(credentials_json))
224
- tmp_credentials_file = f.name
225
- os.rename(tmp_credentials_file, credentials_file)
226
-
227
- os.environ["GOOGLE_APPLICATION_CREDENTIALS"] = credentials_file
228
- from google.cloud import storage
229
-
230
- storage_client = storage.Client(project=token_info["gcpProjectId"])
231
- storage_client._created_at = time.time()
232
- _gcp_client_cache[cache_key] = storage_client
233
- return storage_client
234
-
235
- @staticmethod
236
- def get_credentials(scopes, *args, **kwargs):
237
- import google.auth
238
-
239
- return google.auth.default(scopes=scopes)
240
-
241
-
242
- GCP_CLIENT_PROVIDERS_DESC = [("obp", ".ObpGcpAuthProvider")]
@@ -25,7 +25,7 @@ def read_mf_config():
25
25
  return config
26
26
 
27
27
 
28
- def get_token_url_and_headers(url_path):
28
+ def get_token(url_path):
29
29
  from metaflow.metaflow_config import (
30
30
  SERVICE_HEADERS,
31
31
  from_conf,
@@ -44,11 +44,6 @@ def get_token_url_and_headers(url_path):
44
44
  assert url_path.startswith("/")
45
45
  url = "https://" + authServer + url_path
46
46
  headers = SERVICE_HEADERS
47
- return url, headers
48
-
49
-
50
- def get_token(url_path):
51
- url, headers = get_token_url_and_headers(url_path)
52
47
  try:
53
48
  r = requests.get(url, headers=headers)
54
49
  r.raise_for_status()
@@ -0,0 +1,27 @@
1
+ import os
2
+ import fcntl
3
+ from os import path
4
+ import json
5
+
6
+
7
+ def override_metaflow_profile_with_perimeter():
8
+ # If OBP_CONFIG_DIR is set, use that, otherwise use METAFLOW_HOME
9
+ # If neither are set, use ~/.metaflowconfig
10
+ obp_config_dir = path.expanduser(
11
+ os.environ.get(
12
+ "OBP_CONFIG_DIR", os.environ.get("METAFLOW_HOME", "~/.metaflowconfig")
13
+ )
14
+ )
15
+
16
+ file_path = os.path.join(obp_config_dir, "ob_config.json")
17
+
18
+ if os.path.exists(file_path):
19
+ # Acquire a shared read lock on the file
20
+ fd = os.open(file_path, os.O_RDONLY)
21
+ fcntl.flock(fd, fcntl.LOCK_SH)
22
+
23
+ with open(file_path, "r") as f:
24
+ ob_config = json.loads(f.read())
25
+
26
+ if "OB_CURRENT_PERIMETER" in ob_config:
27
+ os.environ["METAFLOW_PROFILE"] = ob_config["OB_CURRENT_PERIMETER"]
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: ob-metaflow-extensions
3
- Version: 1.1.42
3
+ Version: 1.1.42rc0
4
4
  Summary: Outerbounds Platform Extensions for Metaflow
5
5
  Author: Outerbounds, Inc.
6
6
  License: Commercial
@@ -4,12 +4,12 @@ metaflow_extensions/outerbounds/__init__.py
4
4
  metaflow_extensions/outerbounds/config/__init__.py
5
5
  metaflow_extensions/outerbounds/plugins/__init__.py
6
6
  metaflow_extensions/outerbounds/plugins/auth_server.py
7
+ metaflow_extensions/outerbounds/plugins/perimeters.py
7
8
  metaflow_extensions/outerbounds/plugins/kubernetes/__init__.py
8
9
  metaflow_extensions/outerbounds/plugins/kubernetes/kubernetes_client.py
9
10
  metaflow_extensions/outerbounds/toplevel/__init__.py
10
11
  metaflow_extensions/outerbounds/toplevel/global_aliases_for_metaflow_package.py
11
12
  metaflow_extensions/outerbounds/toplevel/plugins/azure/__init__.py
12
- metaflow_extensions/outerbounds/toplevel/plugins/gcp/__init__.py
13
13
  metaflow_extensions/outerbounds/toplevel/plugins/kubernetes/__init__.py
14
14
  ob_metaflow_extensions.egg-info/PKG-INFO
15
15
  ob_metaflow_extensions.egg-info/SOURCES.txt
@@ -0,0 +1,3 @@
1
+ boto3
2
+ kubernetes
3
+ ob-metaflow==2.11.0.3
@@ -2,7 +2,7 @@ from setuptools import setup, find_namespace_packages
2
2
  from pathlib import Path
3
3
 
4
4
 
5
- version = "1.1.42"
5
+ version = "1.1.42rc0"
6
6
  this_directory = Path(__file__).parent
7
7
  long_description = (this_directory / "README.md").read_text()
8
8
 
@@ -15,5 +15,5 @@ setup(
15
15
  packages=find_namespace_packages(include=["metaflow_extensions.*"]),
16
16
  long_description=long_description,
17
17
  long_description_content_type="text/markdown",
18
- install_requires=["boto3", "kubernetes", "ob-metaflow == 2.11.0.4"],
18
+ install_requires=["boto3", "kubernetes", "ob-metaflow == 2.11.0.3"],
19
19
  )
@@ -1 +0,0 @@
1
- __mf_promote_submodules__ = ["plugins.gcp.gs_storage_client_factory"]
@@ -1,3 +0,0 @@
1
- boto3
2
- kubernetes
3
- ob-metaflow==2.11.0.4