metaflow 2.11.9__py2.py3-none-any.whl → 2.11.10__py2.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.
metaflow/decorators.py CHANGED
@@ -518,7 +518,8 @@ def _init_flow_decorators(
518
518
  else:
519
519
  # Each "non-multiple" flow decorator is only allowed to have one set of options
520
520
  deco_flow_init_options = {
521
- option: deco_options[option] for option in deco.options
521
+ option: deco_options[option.replace("-", "_")]
522
+ for option in deco.options
522
523
  }
523
524
  for deco in decorators:
524
525
  deco.flow_init(
@@ -312,6 +312,8 @@ KUBERNETES_CONTAINER_REGISTRY = from_conf(
312
312
  KUBERNETES_FETCH_EC2_METADATA = from_conf("KUBERNETES_FETCH_EC2_METADATA", False)
313
313
  # Shared memory in MB to use for this step
314
314
  KUBERNETES_SHARED_MEMORY = from_conf("KUBERNETES_SHARED_MEMORY", None)
315
+ # Default port number to open on the pods
316
+ KUBERNETES_PORT = from_conf("KUBERNETES_PORT", None)
315
317
 
316
318
  ARGO_WORKFLOWS_KUBERNETES_SECRETS = from_conf("ARGO_WORKFLOWS_KUBERNETES_SECRETS", "")
317
319
  ARGO_WORKFLOWS_ENV_VARS_TO_SKIP = from_conf("ARGO_WORKFLOWS_ENV_VARS_TO_SKIP", "")
@@ -1371,12 +1371,14 @@ class ArgoWorkflows(object):
1371
1371
  # Set shared_memory to 0 if it isn't specified. This results
1372
1372
  # in Kubernetes using it's default value when the pod is created.
1373
1373
  shared_memory = resources.get("shared_memory", 0)
1374
+ port = resources.get("port", None)
1375
+ if port:
1376
+ port = int(port)
1374
1377
 
1375
1378
  tmpfs_enabled = use_tmpfs or (tmpfs_size and not use_tmpfs)
1376
1379
 
1377
1380
  if tmpfs_enabled and tmpfs_tempdir:
1378
1381
  env["METAFLOW_TEMPDIR"] = tmpfs_path
1379
-
1380
1382
  # Create a ContainerTemplate for this node. Ideally, we would have
1381
1383
  # liked to inline this ContainerTemplate and avoid scanning the workflow
1382
1384
  # twice, but due to issues with variable substitution, we will have to
@@ -1435,6 +1437,9 @@ class ArgoWorkflows(object):
1435
1437
  kubernetes_sdk.V1Container(
1436
1438
  name=self._sanitize(node.name),
1437
1439
  command=cmds,
1440
+ ports=[kubernetes_sdk.V1ContainerPort(container_port=port)]
1441
+ if port
1442
+ else None,
1438
1443
  env=[
1439
1444
  kubernetes_sdk.V1EnvVar(name=k, value=str(v))
1440
1445
  for k, v in env.items()
@@ -1983,8 +1988,10 @@ class ArgoWorkflows(object):
1983
1988
  # Technically, we don't need to create
1984
1989
  # a payload carry-on and can stuff
1985
1990
  # everything within the body.
1986
- data_template="{{ .Input.body.payload.%s | toJson }}"
1987
- % v,
1991
+ # NOTE: We need the conditional logic in order to successfully fall back to the default value
1992
+ # when the event payload does not contain a key for a parameter.
1993
+ data_template='{{ if (hasKey $.Input.body.payload "%s") }}{{- (.Input.body.payload.%s | toJson) -}}{{- else -}}{{ (fail "use-default-instead") }}{{- end -}}'
1994
+ % (v, v),
1988
1995
  # Unfortunately the sensor needs to
1989
1996
  # record the default values for
1990
1997
  # the parameters - there doesn't seem
@@ -72,6 +72,7 @@ class ArgoWorkflowsInternalDecorator(StepDecorator):
72
72
  meta["argo-workflow-name"] = os.environ["ARGO_WORKFLOW_NAME"]
73
73
  meta["argo-workflow-namespace"] = os.environ["ARGO_WORKFLOW_NAMESPACE"]
74
74
  meta["auto-emit-argo-events"] = self.attributes["auto-emit-argo-events"]
75
+ meta["argo-workflow-template-owner"] = os.environ["METAFLOW_OWNER"]
75
76
  entries = [
76
77
  MetaDatum(
77
78
  field=k, value=v, type=k, tags=["attempt_id:{0}".format(retry_count)]
@@ -175,6 +175,7 @@ class Kubernetes(object):
175
175
  tolerations=None,
176
176
  labels=None,
177
177
  shared_memory=None,
178
+ port=None,
178
179
  ):
179
180
  if env is None:
180
181
  env = {}
@@ -215,6 +216,7 @@ class Kubernetes(object):
215
216
  tmpfs_path=tmpfs_path,
216
217
  persistent_volume_claims=persistent_volume_claims,
217
218
  shared_memory=shared_memory,
219
+ port=port,
218
220
  )
219
221
  .environment_variable("METAFLOW_CODE_SHA", code_package_sha)
220
222
  .environment_variable("METAFLOW_CODE_URL", code_package_url)
@@ -108,6 +108,7 @@ def kubernetes():
108
108
  multiple=False,
109
109
  )
110
110
  @click.option("--shared-memory", default=None, help="Size of shared memory in MiB")
111
+ @click.option("--port", default=None, help="Port number to expose from the container")
111
112
  @click.pass_context
112
113
  def step(
113
114
  ctx,
@@ -134,6 +135,7 @@ def step(
134
135
  persistent_volume_claims=None,
135
136
  tolerations=None,
136
137
  shared_memory=None,
138
+ port=None,
137
139
  **kwargs
138
140
  ):
139
141
  def echo(msg, stream="stderr", job_id=None, **kwargs):
@@ -248,6 +250,7 @@ def step(
248
250
  persistent_volume_claims=persistent_volume_claims,
249
251
  tolerations=tolerations,
250
252
  shared_memory=shared_memory,
253
+ port=port,
251
254
  )
252
255
  except Exception as e:
253
256
  traceback.print_exc(chain=False)
@@ -21,6 +21,7 @@ from metaflow.metaflow_config import (
21
21
  KUBERNETES_TOLERATIONS,
22
22
  KUBERNETES_SERVICE_ACCOUNT,
23
23
  KUBERNETES_SHARED_MEMORY,
24
+ KUBERNETES_PORT,
24
25
  )
25
26
  from metaflow.plugins.resources_decorator import ResourcesDecorator
26
27
  from metaflow.plugins.timeout_decorator import get_run_time_limit_for_task
@@ -90,6 +91,8 @@ class KubernetesDecorator(StepDecorator):
90
91
  volumes to the path to which the volume is to be mounted, e.g., `{'pvc-name': '/path/to/mount/on'}`.
91
92
  shared_memory: int, optional
92
93
  Shared memory size (in MiB) required for this step
94
+ port: int, optional
95
+ Port number to specify in the Kubernetes job object
93
96
  """
94
97
 
95
98
  name = "kubernetes"
@@ -113,6 +116,7 @@ class KubernetesDecorator(StepDecorator):
113
116
  "tmpfs_path": "/metaflow_temp",
114
117
  "persistent_volume_claims": None, # e.g., {"pvc-name": "/mnt/vol", "another-pvc": "/mnt/vol2"}
115
118
  "shared_memory": None,
119
+ "port": None,
116
120
  }
117
121
  package_url = None
118
122
  package_sha = None
@@ -200,6 +204,8 @@ class KubernetesDecorator(StepDecorator):
200
204
  self.attributes["tmpfs_size"] = int(self.attributes["memory"]) // 2
201
205
  if not self.attributes["shared_memory"]:
202
206
  self.attributes["shared_memory"] = KUBERNETES_SHARED_MEMORY
207
+ if not self.attributes["port"]:
208
+ self.attributes["port"] = KUBERNETES_PORT
203
209
 
204
210
  # Refer https://github.com/Netflix/metaflow/blob/master/docs/lifecycle.png
205
211
  def step_init(self, flow, graph, step, decos, environment, flow_datastore, logger):
@@ -118,6 +118,13 @@ class KubernetesJob(object):
118
118
  containers=[
119
119
  client.V1Container(
120
120
  command=self._kwargs["command"],
121
+ ports=[
122
+ client.V1ContainerPort(
123
+ container_port=int(self._kwargs["port"])
124
+ )
125
+ ]
126
+ if "port" in self._kwargs and self._kwargs["port"]
127
+ else None,
121
128
  env=[
122
129
  client.V1EnvVar(name=k, value=str(v))
123
130
  for k, v in self._kwargs.get(
metaflow/version.py CHANGED
@@ -1 +1 @@
1
- metaflow_version = "2.11.9"
1
+ metaflow_version = "2.11.10"
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: metaflow
3
- Version: 2.11.9
3
+ Version: 2.11.10
4
4
  Summary: Metaflow: More Data Science, Less Engineering
5
5
  Author: Metaflow Developers
6
6
  Author-email: help@metaflow.org
@@ -26,7 +26,7 @@ License-File: LICENSE
26
26
  Requires-Dist: requests
27
27
  Requires-Dist: boto3
28
28
  Provides-Extra: stubs
29
- Requires-Dist: metaflow-stubs ==2.11.9 ; extra == 'stubs'
29
+ Requires-Dist: metaflow-stubs ==2.11.10 ; extra == 'stubs'
30
30
 
31
31
  ![Metaflow_Logo_Horizontal_FullColor_Ribbon_Dark_RGB](https://user-images.githubusercontent.com/763451/89453116-96a57e00-d713-11ea-9fa6-82b29d4d6eff.png)
32
32
 
@@ -6,7 +6,7 @@ metaflow/cli_args.py,sha256=lcgBGNTvfaiPxiUnejAe60Upt9swG6lRy1_3OqbU6MY,2616
6
6
  metaflow/clone_util.py,sha256=ar4jSZt2aTd4monBpkIQmcLcsOd0relAB42qTUGt2j8,1810
7
7
  metaflow/cmd_with_io.py,sha256=kl53HkAIyv0ecpItv08wZYczv7u3msD1VCcciqigqf0,588
8
8
  metaflow/debug.py,sha256=HEmt_16tJtqHXQXsqD9pqOFe3CWR5GZ7VwpaYQgnRdU,1466
9
- metaflow/decorators.py,sha256=EGL1_nkdxoYG5AZiOQ8sLGA1bprGK8ENwlSIOYQmLhs,21357
9
+ metaflow/decorators.py,sha256=n91bvWA4JJWHwZnI02-rFGBZsWWMtaABYlWYcOvHuRw,21391
10
10
  metaflow/event_logger.py,sha256=joTVRqZPL87nvah4ZOwtqWX8NeraM_CXKXXGVpKGD8o,780
11
11
  metaflow/events.py,sha256=ahjzkSbSnRCK9RZ-9vTfUviz_6gMvSO9DGkJ86X80-k,5300
12
12
  metaflow/exception.py,sha256=KC1LHJQzzYkWib0DeQ4l_A2r8VaudywsSqIQuq1RDZU,4954
@@ -15,7 +15,7 @@ metaflow/graph.py,sha256=ZPxyG8uwVMk5YYgX4pQEQaPZtZM5Wy-G4NtJK73IEuA,11818
15
15
  metaflow/includefile.py,sha256=yHczcZ_U0SrasxSNhZb3DIBzx8UZnrJCl3FzvpEQLOA,19753
16
16
  metaflow/integrations.py,sha256=LlsaoePRg03DjENnmLxZDYto3NwWc9z_PtU6nJxLldg,1480
17
17
  metaflow/lint.py,sha256=_kYAbAtsP7IG1Rd0FqNbo8I8Zs66_0WXbaZJFARO3dE,10394
18
- metaflow/metaflow_config.py,sha256=dosV_Rg8lfOjUb-vUEH38jw2c068iHrQMbR3Yls1pqc,19775
18
+ metaflow/metaflow_config.py,sha256=7nb97lLxtgynWZNMsmFx43EBy-ngJ4RWKFDlf2cnoQ4,19870
19
19
  metaflow/metaflow_config_funcs.py,sha256=pCaiQ2ez9wXixJI3ehmf3QiW9lUqFrZnBZx1my_0wIg,4874
20
20
  metaflow/metaflow_current.py,sha256=sCENPBiji3LcPbwgOG0ukGd_yEc5tST8EowES8DzRtA,7430
21
21
  metaflow/metaflow_environment.py,sha256=JdsmQsYp1SDQniQ0-q1mKRrmzSFfYuzrf6jLEHmyaiM,7352
@@ -34,7 +34,7 @@ metaflow/task.py,sha256=ecGaULbK8kXPnyWzH1u6wtGclm0qeJm7K95amEL17sQ,25863
34
34
  metaflow/unbounded_foreach.py,sha256=p184WMbrMJ3xKYHwewj27ZhRUsSj_kw1jlye5gA9xJk,387
35
35
  metaflow/util.py,sha256=RrjsvADLKxSqjL76CxKh_J4OJl840B9Ak3V-vXleGas,13429
36
36
  metaflow/vendor.py,sha256=LZgXrh7ZSDmD32D1T5jj3OKKpXIqqxKzdMAOc5V0SD4,5162
37
- metaflow/version.py,sha256=OkpY9FVNJsM7jLoxdMEFOaORHx5QkbrPlWbDaBJl33U,28
37
+ metaflow/version.py,sha256=tdq0nGUyYAyRYN8zn0X6UUGfq_r_tUaaLh61XPNHXyU,29
38
38
  metaflow/_vendor/__init__.py,sha256=y_CiwUD3l4eAKvTVDZeqgVujMy31cAM1qjAB-HfI-9s,353
39
39
  metaflow/_vendor/click/__init__.py,sha256=FkyGDQ-cbiQxP_lxgUspyFYS48f2S_pTcfKPz-d_RMo,2463
40
40
  metaflow/_vendor/click/_bashcomplete.py,sha256=9J98IHQYmCAr2Jup6TDshUr5FJEen-AoQCZR0K5nKxQ,12309
@@ -149,9 +149,9 @@ metaflow/plugins/airflow/sensors/s3_sensor.py,sha256=JUKoGNoTCtrO9MNEneEC7ldRNwg
149
149
  metaflow/plugins/argo/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
150
150
  metaflow/plugins/argo/argo_client.py,sha256=MKKhMCbWOPzf6z5zQQiyDRHHkAXcO7ipboDZDqAAvOk,15849
151
151
  metaflow/plugins/argo/argo_events.py,sha256=_C1KWztVqgi3zuH57pInaE9OzABc2NnncC-zdwOMZ-w,5909
152
- metaflow/plugins/argo/argo_workflows.py,sha256=gKGmrcVwEktaqa7dOh9pWwAktGUQwwTACDT5-uUpJ4s,121723
152
+ metaflow/plugins/argo/argo_workflows.py,sha256=ufub5eTXZS9idWbVl37PW2vmbYsNxXYpVTw3hByrzrE,122350
153
153
  metaflow/plugins/argo/argo_workflows_cli.py,sha256=sZTpgfmc50eT3e0qIxpVqUgWhTcYlO1HM4gU6Oaya8g,33259
154
- metaflow/plugins/argo/argo_workflows_decorator.py,sha256=CfKVoHCOsCCQMghhPE30xw15gacwp3hR23HCo9ZZFVg,6580
154
+ metaflow/plugins/argo/argo_workflows_decorator.py,sha256=kCtwB6grJso5UwxKSirJn7L9BWP5rd3arBunAyS-uuU,6656
155
155
  metaflow/plugins/argo/process_input_paths.py,sha256=4SiUoxbnTX4rCt0RSLcxG5jysbyd8oU-5JT0UOgy-vk,555
156
156
  metaflow/plugins/aws/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
157
157
  metaflow/plugins/aws/aws_client.py,sha256=mO8UD6pxFaOnxDb3hTP3HB7Gqb_ZxoR-76LT683WHvI,4036
@@ -246,11 +246,11 @@ metaflow/plugins/gcp/gs_tail.py,sha256=Jl_wvnzU7dub07A-DOAuP5FeccNIrPM-CeL1xKFs1
246
246
  metaflow/plugins/gcp/gs_utils.py,sha256=ZmIGFse1qYyvAVrwga23PQUzF6dXEDLLsZ2F-YRmvow,2030
247
247
  metaflow/plugins/gcp/includefile_support.py,sha256=vIDeR-MiJuUh-2S2pV7Z7FBkhIWwtHXaRrj76MWGRiY,3869
248
248
  metaflow/plugins/kubernetes/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
249
- metaflow/plugins/kubernetes/kubernetes.py,sha256=-t5qKt8HeDyy3Ui9eHfDuttdfsMMcyfcgc7tnC-ShCs,17444
250
- metaflow/plugins/kubernetes/kubernetes_cli.py,sha256=tyRzzbqIAVaV_Oig_C94SPkGHXN0KprA5Tbc_b6Wr-w,9095
249
+ metaflow/plugins/kubernetes/kubernetes.py,sha256=tbM9lfJcii1iAQ5C4bo8vUvwkBroNRVvgrytpcDQkpo,17490
250
+ metaflow/plugins/kubernetes/kubernetes_cli.py,sha256=cGY-BM5REcVKQCi4JSYSK6PvA9M5TK0ikG09Yfct0jA,9224
251
251
  metaflow/plugins/kubernetes/kubernetes_client.py,sha256=irATJpAob4jINkJw0zT_Xoa6JHRtYxx2IOeimlbzvPo,2373
252
- metaflow/plugins/kubernetes/kubernetes_decorator.py,sha256=pwv5eNw_jzCHjDOjO_IPWMvoX0z41g9Y2SWGmQn25wM,21208
253
- metaflow/plugins/kubernetes/kubernetes_job.py,sha256=j9bH48SKFvHcvYv02aUU9bwskh4rwH9YpK9BJkX1yJc,31880
252
+ metaflow/plugins/kubernetes/kubernetes_decorator.py,sha256=StV8TnYtm4hpAGuyC6JQs_LUTHpa5lY-RtVBn9gC8E0,21429
253
+ metaflow/plugins/kubernetes/kubernetes_job.py,sha256=qDsvaOcwcaOOaqLePg0HN19LaeJNBEuik9b8ErF9lhg,32259
254
254
  metaflow/plugins/metadata/__init__.py,sha256=AbpHGcgLb-kRsJGnwFEktk7uzpZOCcBY74-YBdrKVGs,1
255
255
  metaflow/plugins/metadata/local.py,sha256=YhLJC5zjVJrvQFIyQ92ZBByiUmhCC762RUX7ITX12O8,22428
256
256
  metaflow/plugins/metadata/service.py,sha256=ihq5F7KQZlxvYwzH_-jyP2aWN_I96i2vp92j_d697s8,20204
@@ -298,9 +298,9 @@ metaflow/tutorials/07-worldview/README.md,sha256=5vQTrFqulJ7rWN6r20dhot9lI2sVj9W
298
298
  metaflow/tutorials/07-worldview/worldview.ipynb,sha256=ztPZPI9BXxvW1QdS2Tfe7LBuVzvFvv0AToDnsDJhLdE,2237
299
299
  metaflow/tutorials/08-autopilot/README.md,sha256=GnePFp_q76jPs991lMUqfIIh5zSorIeWznyiUxzeUVE,1039
300
300
  metaflow/tutorials/08-autopilot/autopilot.ipynb,sha256=DQoJlILV7Mq9vfPBGW-QV_kNhWPjS5n6SJLqePjFYLY,3191
301
- metaflow-2.11.9.dist-info/LICENSE,sha256=nl_Lt5v9VvJ-5lWJDT4ddKAG-VZ-2IaLmbzpgYDz2hU,11343
302
- metaflow-2.11.9.dist-info/METADATA,sha256=C4NSeaacDr1Rutj8fYdmN-QlO17srNLRFCnKweEKa-g,5906
303
- metaflow-2.11.9.dist-info/WHEEL,sha256=DZajD4pwLWue70CAfc7YaxT1wLUciNBvN_TTcvXpltE,110
304
- metaflow-2.11.9.dist-info/entry_points.txt,sha256=IKwTN1T3I5eJL3uo_vnkyxVffcgnRdFbKwlghZfn27k,57
305
- metaflow-2.11.9.dist-info/top_level.txt,sha256=v1pDHoWaSaKeuc5fKTRSfsXCKSdW1zvNVmvA-i0if3o,9
306
- metaflow-2.11.9.dist-info/RECORD,,
301
+ metaflow-2.11.10.dist-info/LICENSE,sha256=nl_Lt5v9VvJ-5lWJDT4ddKAG-VZ-2IaLmbzpgYDz2hU,11343
302
+ metaflow-2.11.10.dist-info/METADATA,sha256=jZ0uyd0DllaYU8fWXFEVX38oIsTJZg6NxSOz7ATZqyU,5908
303
+ metaflow-2.11.10.dist-info/WHEEL,sha256=DZajD4pwLWue70CAfc7YaxT1wLUciNBvN_TTcvXpltE,110
304
+ metaflow-2.11.10.dist-info/entry_points.txt,sha256=IKwTN1T3I5eJL3uo_vnkyxVffcgnRdFbKwlghZfn27k,57
305
+ metaflow-2.11.10.dist-info/top_level.txt,sha256=v1pDHoWaSaKeuc5fKTRSfsXCKSdW1zvNVmvA-i0if3o,9
306
+ metaflow-2.11.10.dist-info/RECORD,,