initiallyqq opened a new issue, #176:
URL: https://github.com/apache/dolphinscheduler-sdk-python/issues/176

   The shipped example `examples/yaml_define/Kubernetes.yaml` declares 
`task_type: K8S` but fails to load:
   
   ```
   pydolphinscheduler.exceptions.PyDSTaskNoFoundException: cant not find task 
K8S
   ```
   
   The YAML loader resolves a task type to its task class **by class name 
only**. In
   `src/pydolphinscheduler/core/yaml_workflow.py`, `get_task_cls()` builds
   `{type_.capitalize(): type_ for type_ in tasks.__all__}` and looks up
   `task_type.capitalize()`. So it expects `"Kubernetes"` (the class name), but 
the
   documented/constant task type is `K8S`:
   
   - `"K8S".capitalize()` → `"K8s"`, which is **not** in the class-name map.
   - The internal constant is `TaskType.KUBERNETES = "K8S"` (`constants.py`), 
i.e. the
     rest of the SDK and the backend use `"K8S"`, but the YAML loader never 
consults
     `TaskType` — only class names. The loader and the rest of the SDK disagree 
on the
     K8S identifier.
   
   There is a **second** bug in the same example: it uses camelCase field names
   `minCpuCores` / `minMemorySpace`, but the `Kubernetes` task constructor 
expects
   snake_case `min_cpu_cores` / `min_memory_space`. After getting past the 
loader you
   then hit:
   
   ```
   TypeError: __init__() missing 2 required positional arguments: 
'min_cpu_cores' and 'min_memory_space'
   ```
   
   **Why CI never caught it**
   
   `Kubernetes.yaml` is the only one of the 22 examples **omitted** from the 
parametrize list in
   `tests/core/test_yaml_workflow.py::test_get_create_workflow` (all others are 
covered).
   So the broken example ships untested and CI stays green.
   
   **To Reproduce**
   
   ```python
   from pydolphinscheduler.core.yaml_workflow import create_workflow
   create_workflow("examples/yaml_define/Kubernetes.yaml")
   # -> PyDSTaskNoFoundException: cant not find task K8S
   ```
   
   Or just the resolver:
   
   ```python
   from pydolphinscheduler.core.yaml_workflow import get_task_cls
   get_task_cls("K8S")   # -> PyDSTaskNoFoundException: cant not find task K8S
   get_task_cls("Kubernetes")  # OK (only the class name works today)
   ```
   
   **Which version are you using?**
   
   Reproduced on:
   - **PyPI release `apache-dolphinscheduler` 4.1.0** (latest release).
   - **`main` branch HEAD** — `get_task_cls`, `Kubernetes.yaml`, and the 
parametrize
     list are byte-for-byte the same as 4.1.0, confirming this is a current 
defect
     rather than a released-only regression.
   
   **Expected behavior**
   
   `task_type: K8S` (the documented constant value) should resolve to the 
`Kubernetes`
   task class, and the shipped `Kubernetes.yaml` example should parse and be 
covered by CI.
   
   **Additional context**
   
   I'll open a PR that (1) makes the loader fall back to `TaskType` constant 
values,
   (2) fixes the camelCase fields in the example, and (3) adds the example +
   `K8S`/`k8s`/`Kubernetes` cases to the tests.


-- 
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

To unsubscribe, e-mail: 
[email protected]

For queries about this service, please contact Infrastructure at:
[email protected]

Reply via email to