Skip to content

Commit 65b4267

Browse files
authored
♻️Maintenance: mypy fixes for AWS-library, Dask-task-lib (#6116)
1 parent 1047339 commit 65b4267

File tree

5 files changed

+54
-14
lines changed

5 files changed

+54
-14
lines changed

.github/workflows/ci-testing-deploy.yml

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -899,7 +899,6 @@ jobs:
899899
run: ./ci/github/unit-testing/aws-library.bash install
900900
- name: typecheck
901901
run: ./ci/github/unit-testing/aws-library.bash typecheck
902-
continue-on-error: true
903902
- name: test
904903
if: always()
905904
run: ./ci/github/unit-testing/aws-library.bash test
@@ -942,7 +941,6 @@ jobs:
942941
run: ./ci/github/unit-testing/dask-task-models-library.bash install
943942
- name: typecheck
944943
run: ./ci/github/unit-testing/dask-task-models-library.bash typecheck
945-
continue-on-error: true
946944
- name: test
947945
if: always()
948946
run: ./ci/github/unit-testing/dask-task-models-library.bash test

packages/aws-library/requirements/_test.txt

Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,13 +18,21 @@ boto3==1.34.131
1818
# -c requirements/_base.txt
1919
# aws-sam-translator
2020
# moto
21+
boto3-stubs==1.34.149
22+
# via types-boto3
2123
botocore==1.34.131
2224
# via
2325
# -c requirements/_base.txt
2426
# aws-xray-sdk
2527
# boto3
2628
# moto
2729
# s3transfer
30+
botocore-stubs==1.34.144
31+
# via
32+
# -c requirements/_base.txt
33+
# boto3-stubs
34+
# types-aioboto3
35+
# types-aiobotocore
2836
certifi==2024.7.4
2937
# via
3038
# -c requirements/../../../requirements/constraints.txt
@@ -242,15 +250,34 @@ tomli==2.0.1
242250
# via
243251
# coverage
244252
# pytest
253+
types-aioboto3==13.1.1
254+
# via -r requirements/_test.in
255+
types-aiobotocore==2.13.1
256+
# via
257+
# -c requirements/_base.txt
258+
# types-aioboto3
259+
types-awscrt==0.21.2
260+
# via
261+
# -c requirements/_base.txt
262+
# botocore-stubs
263+
types-boto3==1.0.2
264+
# via -r requirements/_test.in
265+
types-s3transfer==0.10.1
266+
# via
267+
# boto3-stubs
268+
# types-aioboto3
245269
typing-extensions==4.12.2
246270
# via
247271
# -c requirements/_base.txt
248272
# aws-sam-translator
273+
# boto3-stubs
249274
# cfn-lint
250275
# flexcache
251276
# flexparser
252277
# pint
253278
# pydantic
279+
# types-aioboto3
280+
# types-aiobotocore
254281
urllib3==2.2.2
255282
# via
256283
# -c requirements/../../../requirements/constraints.txt

packages/aws-library/setup.cfg

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,3 +15,7 @@ test = pytest
1515

1616
[tool:pytest]
1717
asyncio_mode = auto
18+
19+
[mypy]
20+
plugins =
21+
pydantic.mypy

packages/dask-task-models-library/src/dask_task_models_library/container_tasks/events.py

Lines changed: 11 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22
from abc import ABC, abstractmethod
33
from typing import Any, ClassVar, TypeAlias
44

5+
import dask.typing
56
from distributed.worker import get_worker
67
from pydantic import BaseModel, Extra, validator
78

@@ -22,6 +23,14 @@ class Config:
2223
extra = Extra.forbid
2324

2425

26+
def _dask_key_to_dask_task_id(key: dask.typing.Key) -> str:
27+
if isinstance(key, bytes):
28+
return key.decode("utf-8")
29+
if isinstance(key, tuple):
30+
return "(" + ", ".join(_dask_key_to_dask_task_id(k) for k in key) + ")"
31+
return f"{key}"
32+
33+
2534
class TaskProgressEvent(BaseTaskEvent):
2635
progress: float
2736

@@ -37,7 +46,7 @@ def from_dask_worker(
3746
job_id = worker.get_current_task()
3847

3948
return cls(
40-
job_id=job_id,
49+
job_id=_dask_key_to_dask_task_id(job_id),
4150
progress=progress,
4251
task_owner=task_owner,
4352
)
@@ -97,7 +106,7 @@ def from_dask_worker(
97106
worker = get_worker()
98107
job_id = worker.get_current_task()
99108
return cls(
100-
job_id=job_id,
109+
job_id=_dask_key_to_dask_task_id(job_id),
101110
log=log,
102111
log_level=log_level,
103112
task_owner=task_owner,

packages/dask-task-models-library/src/dask_task_models_library/container_tasks/io.py

Lines changed: 12 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1,21 +1,21 @@
11
import json
22
from contextlib import suppress
33
from pathlib import Path
4-
from typing import Any, ClassVar, Union, cast
4+
from typing import Any, ClassVar, TypeAlias, Union
55

66
from models_library.basic_regex import MIME_TYPE_RE, PROPERTY_KEY_RE
77
from models_library.generics import DictModel
88
from pydantic import (
99
AnyUrl,
1010
BaseModel,
11+
ConstrainedStr,
1112
Extra,
1213
Field,
1314
StrictBool,
1415
StrictFloat,
1516
StrictInt,
1617
StrictStr,
1718
)
18-
from pydantic.types import constr
1919

2020
TaskCancelEventName = "cancel_event_{}"
2121

@@ -81,8 +81,11 @@ class Config:
8181
}
8282

8383

84-
PortKey = constr(regex=PROPERTY_KEY_RE)
85-
PortValue = Union[
84+
class PortKey(ConstrainedStr):
85+
regex = PROPERTY_KEY_RE
86+
87+
88+
PortValue: TypeAlias = Union[
8689
StrictBool,
8790
StrictInt,
8891
StrictFloat,
@@ -95,7 +98,7 @@ class Config:
9598

9699

97100
class TaskInputData(DictModel[PortKey, PortValue]):
98-
class Config(DictModel.Config):
101+
class Config:
99102
schema_extra: ClassVar[dict[str, Any]] = {
100103
"examples": [
101104
{
@@ -109,7 +112,7 @@ class Config(DictModel.Config):
109112
}
110113

111114

112-
PortSchemaValue = Union[PortSchema, FilePortSchema]
115+
PortSchemaValue: TypeAlias = Union[PortSchema, FilePortSchema]
113116

114117

115118
class TaskOutputDataSchema(DictModel[PortKey, PortSchemaValue]):
@@ -119,7 +122,7 @@ class TaskOutputDataSchema(DictModel[PortKey, PortSchemaValue]):
119122
# does not work well in that case. For that reason, the schema is
120123
# sent as a json-schema instead of with a dynamically-created model class
121124
#
122-
class Config(DictModel.Config):
125+
class Config:
123126
schema_extra: ClassVar[dict[str, Any]] = {
124127
"examples": [
125128
{
@@ -171,10 +174,9 @@ def from_task_output(
171174
msg = f"Could not locate '{output_key}' in {output_data_file}"
172175
raise ValueError(msg)
173176

174-
# NOTE: this cast is necessary to make mypy happy
175-
return cast(TaskOutputData, cls.parse_obj(data))
177+
return cls.parse_obj(data)
176178

177-
class Config(DictModel.Config):
179+
class Config:
178180
schema_extra: ClassVar[dict[str, Any]] = {
179181
"examples": [
180182
{

0 commit comments

Comments
 (0)