dagster-k8s 0.25.5__py3-none-any.whl → 0.25.7__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 dagster-k8s might be problematic. Click here for more details.

dagster_k8s/client.py CHANGED
@@ -468,7 +468,7 @@ class DagsterKubernetesClient:
468
468
  try:
469
469
  job = self.batch_api.read_namespaced_job_status(job_name, namespace=namespace)
470
470
  except kubernetes.client.rest.ApiException as e:
471
- if e.reason == "Not Found":
471
+ if e.status == 404:
472
472
  return None
473
473
  else:
474
474
  raise
@@ -518,14 +518,14 @@ class DagsterKubernetesClient:
518
518
  for error in errors:
519
519
  if not (
520
520
  isinstance(error, kubernetes.client.rest.ApiException)
521
- and error.reason == "Not Found"
521
+ and error.status == 404
522
522
  ):
523
523
  raise error
524
524
  raise errors[0]
525
525
 
526
526
  return True
527
527
  except kubernetes.client.rest.ApiException as e:
528
- if e.reason == "Not Found":
528
+ if e.status == 404:
529
529
  return False
530
530
  raise e
531
531
 
@@ -673,7 +673,6 @@ class DagsterKubernetesClient:
673
673
  # State checks below, see:
674
674
  # https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.18/#containerstate-v1-core
675
675
  state = container_status.state
676
-
677
676
  if state.running is not None:
678
677
  if wait_for_state == WaitForPodState.Ready:
679
678
  # ready is boolean field of container status
@@ -684,6 +683,11 @@ class DagsterKubernetesClient:
684
683
  continue
685
684
  else:
686
685
  ready_containers.add(container_status.name)
686
+ if container_status.name in initcontainers:
687
+ self.logger(
688
+ f'Init container "{container_status.name}" is ready, waiting for non-init containers...'
689
+ )
690
+ continue
687
691
  if initcontainers.issubset(exited_containers | ready_containers):
688
692
  self.logger(f'Pod "{pod_name}" is ready, done waiting')
689
693
  break
dagster_k8s/executor.py CHANGED
@@ -237,9 +237,10 @@ class K8sStepHandler(StepHandler):
237
237
  user_defined_k8s_config = get_user_defined_k8s_config(
238
238
  step_handler_context.step_tags[step_key]
239
239
  )
240
-
240
+ step_context = step_handler_context.get_step_context(step_key)
241
+ op_name = step_context.step.op_name
241
242
  per_op_override = UserDefinedDagsterK8sConfig.from_dict(
242
- self._per_step_k8s_config.get(step_key, {})
243
+ self._per_step_k8s_config.get(op_name, {})
243
244
  )
244
245
 
245
246
  return context.merge(K8sContainerContext(run_k8s_config=user_defined_k8s_config)).merge(
@@ -332,7 +333,7 @@ class K8sStepHandler(StepHandler):
332
333
  container_context = self._get_container_context(step_handler_context)
333
334
 
334
335
  status = self._api_client.get_job_status(
335
- namespace=container_context.namespace,
336
+ namespace=container_context.namespace, # pyright: ignore[reportArgumentType]
336
337
  job_name=job_name,
337
338
  )
338
339
  if not status:
dagster_k8s/launcher.py CHANGED
@@ -400,7 +400,7 @@ class K8sRunLauncher(RunLauncher, ConfigurableClass):
400
400
  )
401
401
 
402
402
  else:
403
- job_debug_info = self._api_client.get_job_debug_info(job_name, namespace=namespace)
403
+ job_debug_info = self._api_client.get_job_debug_info(job_name, namespace=namespace) # pyright: ignore[reportArgumentType]
404
404
  full_msg = (
405
405
  full_msg
406
406
  + "\n\n"
@@ -419,7 +419,7 @@ class K8sRunLauncher(RunLauncher, ConfigurableClass):
419
419
  )
420
420
  try:
421
421
  status = self._api_client.get_job_status(
422
- namespace=container_context.namespace,
422
+ namespace=container_context.namespace, # pyright: ignore[reportArgumentType]
423
423
  job_name=job_name,
424
424
  )
425
425
  except Exception:
dagster_k8s/models.py CHANGED
@@ -69,7 +69,7 @@ def _k8s_parse_value(data: Any, classname: str, attr_name: str) -> Any:
69
69
  elif klass == object:
70
70
  return data
71
71
  elif klass == datetime.date:
72
- return parse(data).date()
72
+ return parse(data).date() # pyright: ignore[reportAttributeAccessIssue]
73
73
  elif klass == datetime.datetime:
74
74
  return parse(data)
75
75
  else:
@@ -371,7 +371,10 @@ def execute_k8s_job(
371
371
  watch = kubernetes.watch.Watch() # consider moving in to api_client
372
372
 
373
373
  api_client.wait_for_pod(
374
- pod_to_watch, namespace, wait_timeout=timeout, start_time=start_time
374
+ pod_to_watch,
375
+ namespace, # pyright: ignore[reportArgumentType]
376
+ wait_timeout=timeout,
377
+ start_time=start_time, # pyright: ignore[reportArgumentType]
375
378
  )
376
379
 
377
380
  log_stream = watch.stream(
@@ -416,6 +419,20 @@ def execute_k8s_job(
416
419
  num_pods_to_wait_for=num_pods_to_wait_for,
417
420
  )
418
421
  except (DagsterExecutionInterruptedError, Exception) as e:
422
+ try:
423
+ pods = api_client.get_pod_names_in_job(job_name=job_name, namespace=namespace)
424
+ pod_debug_info = "\n\n".join(
425
+ [api_client.get_pod_debug_info(pod_name, namespace) for pod_name in pods]
426
+ )
427
+ except Exception:
428
+ context.log.exception(
429
+ f"Error trying to get pod debug information for failed k8s job {job_name}"
430
+ )
431
+ else:
432
+ context.log.error(
433
+ f"Debug information for failed k8s job {job_name}:\n\n{pod_debug_info}"
434
+ )
435
+
419
436
  if delete_failed_k8s_jobs:
420
437
  context.log.info(
421
438
  f"Deleting Kubernetes job {job_name} in namespace {namespace} due to exception"
dagster_k8s/version.py CHANGED
@@ -1 +1 @@
1
- __version__ = "0.25.5"
1
+ __version__ = "0.25.7"
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: dagster-k8s
3
- Version: 0.25.5
3
+ Version: 0.25.7
4
4
  Summary: A Dagster integration for k8s
5
5
  Home-page: https://github.com/dagster-io/dagster/tree/master/python_modules/libraries/dagster-k8s
6
6
  Author: Dagster Labs
@@ -14,7 +14,7 @@ Classifier: License :: OSI Approved :: Apache Software License
14
14
  Classifier: Operating System :: OS Independent
15
15
  Requires-Python: >=3.9,<3.13
16
16
  License-File: LICENSE
17
- Requires-Dist: dagster ==1.9.5
17
+ Requires-Dist: dagster ==1.9.7
18
18
  Requires-Dist: kubernetes <32
19
19
  Requires-Dist: google-auth !=2.23.1
20
20
 
@@ -1,20 +1,20 @@
1
1
  dagster_k8s/__init__.py,sha256=7LyrMxxhXKdGQYClq7OJwMiVJW0KYPP-8lTDrWLwyzU,750
2
- dagster_k8s/client.py,sha256=YA24A2uSmjesCAI3Y40Y8yy3-OcWs5UMvPVd8iyqRM8,39748
2
+ dagster_k8s/client.py,sha256=OiYQmjtX1_pvyCcwsRXrcJgA8rEs3Eayo-aO7rxs7ro,40020
3
3
  dagster_k8s/container_context.py,sha256=47gts4BKPrlL624rT8MMKOn8kQtY3_f2FI2nmgsDPvU,22637
4
- dagster_k8s/executor.py,sha256=Py2t7VVHdL542fL5YIQLEPmFWD6f21oG0N-AUTrXfbw,14680
4
+ dagster_k8s/executor.py,sha256=CioPhq2nrILR1A1zPAuQdqQts-0o-Q4vCCbIkH_0FSw,14832
5
5
  dagster_k8s/job.py,sha256=-GzUcz80cwF9NwDAv3QdE6GezSSpUzF0kLRkj1oTO34,43046
6
6
  dagster_k8s/kubernetes_version.py,sha256=jIBF12yvVweYUCmhC5AJ2Lb1JPcHxJfohJ1_hHfzS4o,38
7
- dagster_k8s/launcher.py,sha256=Ld94KR6AoNy-Qdu7lFQM_UYPd2V_Lrmcr9rZAjRudnI,16511
8
- dagster_k8s/models.py,sha256=OPksL8WjsdqJtGcw4WLkvsnrm1WA6vCUjqHL9dA2oYQ,6270
7
+ dagster_k8s/launcher.py,sha256=6PIlu8b9NyXAFRlw2OKhF-Mb6-QO5gL9mkXmdmlXoCw,16589
8
+ dagster_k8s/models.py,sha256=2ZFgAhcSR06qLlMzLnEtMgZVJ8R2PKsVGu_f6K5nx3E,6317
9
9
  dagster_k8s/pipes.py,sha256=kRHLYJfZi23GJe1_TW3Z3FglEpMrMLT43UV7YpTmKr8,30439
10
10
  dagster_k8s/py.typed,sha256=la67KBlbjXN-_-DfGNcdOcjYumVpKG_Tkw-8n5dnGB4,8
11
11
  dagster_k8s/test.py,sha256=cNtcbzxytiZtd01wY5ip7KPi01y0BUQuQhohoIfAFUM,684
12
12
  dagster_k8s/utils.py,sha256=c1bHqh5f1p5RZ0JCT6WEbPPjDvbgUp3pl4nYZRaaI4s,786
13
- dagster_k8s/version.py,sha256=9zCh_8lz8S_e8JlXmwkSbkp_uQhvRgQSEOH1abFGMw8,23
13
+ dagster_k8s/version.py,sha256=C9UDSxAgbu6RAIQvHS6_OpZMJWGe74K5VElCoECo0YA,23
14
14
  dagster_k8s/ops/__init__.py,sha256=ur-9GrE_DRfnsFCpYan03qOY9cWbjagC8KHZFZuiCmc,113
15
- dagster_k8s/ops/k8s_job_op.py,sha256=uLpQE3ZJbXDiGyyRZydyp-oDQn5XvQuhRcUwd2qiJho,21124
16
- dagster_k8s-0.25.5.dist-info/LICENSE,sha256=TMatHW4_G9ldRdodEAp-l2Xa2WvsdeOh60E3v1R2jis,11349
17
- dagster_k8s-0.25.5.dist-info/METADATA,sha256=QtoJfKSEkMlqOmiXumJfMFEqf3D-WaFDsq35DCLD0J4,732
18
- dagster_k8s-0.25.5.dist-info/WHEEL,sha256=yQN5g4mg4AybRjkgi-9yy4iQEFibGQmlz78Pik5Or-A,92
19
- dagster_k8s-0.25.5.dist-info/top_level.txt,sha256=wFPjskoWPlk2hOLugYCaoZhSiZdUcbCA1QZe9I4dals,12
20
- dagster_k8s-0.25.5.dist-info/RECORD,,
15
+ dagster_k8s/ops/k8s_job_op.py,sha256=ZZUz_fYXL6cxOmKJfL56wa_q6Kvh-qjYYBaYEZIMK2s,21815
16
+ dagster_k8s-0.25.7.dist-info/LICENSE,sha256=TMatHW4_G9ldRdodEAp-l2Xa2WvsdeOh60E3v1R2jis,11349
17
+ dagster_k8s-0.25.7.dist-info/METADATA,sha256=wGHj5wT2YyqjveYgyuv0g1Lk_bOKss-2flyKY5TQGCM,732
18
+ dagster_k8s-0.25.7.dist-info/WHEEL,sha256=yQN5g4mg4AybRjkgi-9yy4iQEFibGQmlz78Pik5Or-A,92
19
+ dagster_k8s-0.25.7.dist-info/top_level.txt,sha256=wFPjskoWPlk2hOLugYCaoZhSiZdUcbCA1QZe9I4dals,12
20
+ dagster_k8s-0.25.7.dist-info/RECORD,,