Skip to content

Commit

Permalink
More specific type annotation for BaseJobExec.parse_status()
Browse files Browse the repository at this point in the history
Add type annotation to ``BaseJobExec.parse_single_status()``

Follow-up on galaxyproject#17367 (comment) .

Needed to add ``TypeAlias`` to ``model.Job.states`` to fix:

```
lib/galaxy/jobs/runners/util/cli/job/__init__.py:67: error: Variable "galaxy.jobs.runners.util.cli.job.job_states" is not valid as a type  [valid-type]
        def parse_status(self, status: str, job_ids: List[str]) -> Dict[str, job_states]:
                                                                             ^
```

See https://mypy.readthedocs.io/en/stable/common_issues.html#variables-vs-type-aliases :

> You should always use ``TypeAlias`` to define a type alias in a class body
> or inside a function.
  • Loading branch information
nsoranzo committed Jan 29, 2024
1 parent 5c6dd8e commit dad746e
Show file tree
Hide file tree
Showing 3 changed files with 8 additions and 5 deletions.
8 changes: 5 additions & 3 deletions lib/galaxy/jobs/runners/util/cli/job/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -11,10 +11,12 @@
List,
)

from typing_extensions import TypeAlias

try:
from galaxy.model import Job

job_states = Job.states
job_states: TypeAlias = Job.states
except ImportError:
# Not in Galaxy, map Galaxy job states to Pulsar ones.
class job_states(str, Enum): # type: ignore[no-redef]
Expand Down Expand Up @@ -64,13 +66,13 @@ def get_single_status(self, job_id):
"""

@abstractmethod
def parse_status(self, status: str, job_ids: List[str]) -> Dict[str, str]:
def parse_status(self, status: str, job_ids: List[str]) -> Dict[str, job_states]:
"""
Parse the statuses of output from get_status command.
"""

@abstractmethod
def parse_single_status(self, status, job_id):
def parse_single_status(self, status: str, job_id: str) -> job_states:
"""
Parse the status of output from get_single_status command.
"""
Expand Down
2 changes: 1 addition & 1 deletion lib/galaxy/jobs/runners/util/cli/job/torque.py
Original file line number Diff line number Diff line change
Expand Up @@ -100,7 +100,7 @@ def parse_single_status(self, status, job_id):
# no state found, job has exited
return job_states.OK

def _get_job_state(self, state: str) -> str:
def _get_job_state(self, state: str) -> job_states:
try:
return {"E": job_states.RUNNING, "R": job_states.RUNNING, "Q": job_states.QUEUED, "C": job_states.OK}[state]
except KeyError:
Expand Down
3 changes: 2 additions & 1 deletion lib/galaxy/model/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -111,6 +111,7 @@
from typing_extensions import (
Literal,
Protocol,
TypeAlias,
TypedDict,
)

Expand Down Expand Up @@ -1380,7 +1381,7 @@ class Job(Base, JobLike, UsesCreateAndUpdateTime, Dictifiable, Serializable):
_numeric_metric = JobMetricNumeric
_text_metric = JobMetricText

states = JobState
states: TypeAlias = JobState

# states that are not expected to change, except through admin action or re-scheduling
terminal_states = [states.OK, states.ERROR, states.DELETED]
Expand Down

0 comments on commit dad746e

Please sign in to comment.