Skip to content

Commit b7f826f

Browse files
authored
[pyright] analyzeUnannotatedFunctions (#26392)
Sibling to dagster-io/internal#12806, enable `analyzeUnannotatedFunctions` by using a script to insert comments on newly created type errors. `examples` is exempted from this as the type suppresion comments negatively impact using terse code snippets in docs etc. ## How I Tested These Changes make pyright
1 parent 132538e commit b7f826f

File tree

413 files changed

+2459
-2386
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

413 files changed

+2459
-2386
lines changed

.buildkite/dagster-buildkite/dagster_buildkite/package_spec.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -232,7 +232,7 @@ def build_steps(self) -> List[BuildkiteTopLevelStep]:
232232
@property
233233
def requirements(self):
234234
# First try to infer requirements from the python package
235-
package = PythonPackages.get(self.name)
235+
package = PythonPackages.get(self.name) # pyright: ignore[reportArgumentType]
236236
if package:
237237
return set.union(package.install_requires, *package.extras_require.values())
238238

.buildkite/dagster-buildkite/dagster_buildkite/utils.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -363,7 +363,7 @@ def skip_if_no_docs_changes():
363363
if message_contains("NO_SKIP"):
364364
return None
365365

366-
if not is_feature_branch(os.getenv("BUILDKITE_BRANCH")):
366+
if not is_feature_branch(os.getenv("BUILDKITE_BRANCH")): # pyright: ignore[reportArgumentType]
367367
return None
368368

369369
# If anything changes in the docs directory

docs/content/integrations/pandas.mdx

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -43,10 +43,10 @@ TripDataFrame = create_dagster_pandas_dataframe_type(
4343
PandasColumn.integer_column("bike_id", min_value=0),
4444
PandasColumn.categorical_column("color", categories={"red", "green", "blue"}),
4545
PandasColumn.datetime_column(
46-
"start_time", min_datetime=datetime(year=2020, month=2, day=10)
46+
"start_time", min_datetime=Timestamp(year=2020, month=2, day=10)
4747
),
4848
PandasColumn.datetime_column(
49-
"end_time", min_datetime=datetime(year=2020, month=2, day=10)
49+
"end_time", min_datetime=Timestamp(year=2020, month=2, day=10)
5050
),
5151
PandasColumn.string_column("station"),
5252
PandasColumn.exists("amount_paid"),

examples/docs_snippets/docs_snippets/legacy/dagster_pandas_guide/core_trip.py

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
from datetime import datetime
22

33
from dagster_pandas import PandasColumn, create_dagster_pandas_dataframe_type
4-
from pandas import DataFrame, read_csv
4+
from pandas import DataFrame, Timestamp, read_csv
55

66
from dagster import Out, file_relative_path, job, op
77

@@ -12,10 +12,10 @@
1212
PandasColumn.integer_column("bike_id", min_value=0),
1313
PandasColumn.categorical_column("color", categories={"red", "green", "blue"}),
1414
PandasColumn.datetime_column(
15-
"start_time", min_datetime=datetime(year=2020, month=2, day=10)
15+
"start_time", min_datetime=Timestamp(year=2020, month=2, day=10)
1616
),
1717
PandasColumn.datetime_column(
18-
"end_time", min_datetime=datetime(year=2020, month=2, day=10)
18+
"end_time", min_datetime=Timestamp(year=2020, month=2, day=10)
1919
),
2020
PandasColumn.string_column("station"),
2121
PandasColumn.exists("amount_paid"),

examples/experimental/assets_yaml_dsl/assets_yaml_dsl_tests/test_stocks_dsl.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,7 @@
1919
from dagster import AssetKey
2020
from dagster._core.definitions import materialize
2121
from dagster._core.pipes.subprocess import PipesSubprocessClient
22-
from examples.experimental.assets_yaml_dsl.assets_yaml_dsl.domain_specific_dsl.stocks_dsl import (
22+
from examples.experimental.assets_yaml_dsl.assets_yaml_dsl.domain_specific_dsl.stocks_dsl import ( # type: ignore
2323
build_stock_assets_object,
2424
)
2525

integration_tests/python_modules/dagster-k8s-test-infra/dagster_k8s_test_infra/cluster.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -71,7 +71,7 @@ def _cluster_provider(request):
7171
f"Found existing image tagged {docker_image}, skipping image build. To rebuild,"
7272
f" first run: docker rmi {docker_image}"
7373
)
74-
except docker.errors.ImageNotFound:
74+
except docker.errors.ImageNotFound: # pyright: ignore[reportAttributeAccessIssue]
7575
build_and_tag_test_image(docker_image)
7676
kind_load_images(
7777
cluster_name=cluster_config.name,
@@ -231,7 +231,7 @@ def check_export_runs(instance):
231231

232232
# example PYTEST_CURRENT_TEST: test_user_code_deployments.py::test_execute_on_celery_k8s (teardown)
233233
current_test = (
234-
os.environ.get("PYTEST_CURRENT_TEST").split()[0].replace("::", "-").replace(".", "-")
234+
os.environ.get("PYTEST_CURRENT_TEST").split()[0].replace("::", "-").replace(".", "-") # pyright: ignore[reportOptionalMemberAccess]
235235
)
236236

237237
for run in instance.get_runs():

integration_tests/test_suites/backcompat-test-suite/webserver_service/defs_for_earliest_tested_release.py

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,3 @@
1-
# type: ignore
2-
31
# Backcompat test definitions intended for use with our oldest testest release of Dagster. Does not
42
# use `Definitions` because it is not available in our oldest supported releases.
53

integration_tests/test_suites/celery-k8s-test-suite/conftest.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,7 @@ def dagster_docker_image():
3030
f"Found existing image tagged {docker_image}, skipping image build. To rebuild, first run: "
3131
f"docker rmi {docker_image}"
3232
)
33-
except docker.errors.ImageNotFound:
33+
except docker.errors.ImageNotFound: # pyright: ignore[reportAttributeAccessIssue]
3434
build_and_tag_test_image(docker_image)
3535

3636
return docker_image

integration_tests/test_suites/daemon-test-suite/monitoring_daemon_tests/test_monitoring.py

Lines changed: 16 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -96,7 +96,7 @@ def test_docker_monitoring(aws_env):
9696
find_local_test_image(docker_image)
9797

9898
run_config = merge_dicts(
99-
load_yaml_from_path(os.path.join(get_test_project_environments_path(), "env_s3.yaml")),
99+
load_yaml_from_path(os.path.join(get_test_project_environments_path(), "env_s3.yaml")), # pyright: ignore[reportArgumentType]
100100
{
101101
"ops": {
102102
"multiply_the_word_slow": {
@@ -139,21 +139,21 @@ def test_docker_monitoring(aws_env):
139139

140140
start_time = time.time()
141141
while time.time() - start_time < 60:
142-
run = instance.get_run_by_id(run.run_id)
143-
if run.status == DagsterRunStatus.STARTED:
142+
run = instance.get_run_by_id(run.run_id) # pyright: ignore[reportOptionalMemberAccess]
143+
if run.status == DagsterRunStatus.STARTED: # pyright: ignore[reportOptionalMemberAccess]
144144
break
145-
assert run.status == DagsterRunStatus.STARTING
145+
assert run.status == DagsterRunStatus.STARTING # pyright: ignore[reportOptionalMemberAccess]
146146
time.sleep(1)
147147

148148
time.sleep(3)
149149

150-
instance.run_launcher._get_container( # noqa: SLF001
151-
instance.get_run_by_id(run.run_id)
150+
instance.run_launcher._get_container( # noqa: SLF001 # pyright: ignore[reportAttributeAccessIssue]
151+
instance.get_run_by_id(run.run_id) # pyright: ignore[reportOptionalMemberAccess]
152152
).stop()
153153

154154
# daemon resumes the run
155-
poll_for_finished_run(instance, run.run_id, timeout=300)
156-
assert instance.get_run_by_id(run.run_id).status == DagsterRunStatus.SUCCESS
155+
poll_for_finished_run(instance, run.run_id, timeout=300) # pyright: ignore[reportOptionalMemberAccess]
156+
assert instance.get_run_by_id(run.run_id).status == DagsterRunStatus.SUCCESS # pyright: ignore[reportOptionalMemberAccess]
157157

158158

159159
@pytest.fixture
@@ -183,7 +183,7 @@ def test_docker_monitoring_run_out_of_attempts(aws_env):
183183
find_local_test_image(docker_image)
184184

185185
run_config = merge_dicts(
186-
load_yaml_from_path(os.path.join(get_test_project_environments_path(), "env_s3.yaml")),
186+
load_yaml_from_path(os.path.join(get_test_project_environments_path(), "env_s3.yaml")), # pyright: ignore[reportArgumentType]
187187
{
188188
"ops": {
189189
"multiply_the_word_slow": {
@@ -230,17 +230,17 @@ def test_docker_monitoring_run_out_of_attempts(aws_env):
230230

231231
start_time = time.time()
232232
while time.time() - start_time < 60:
233-
run = instance.get_run_by_id(run.run_id)
234-
if run.status == DagsterRunStatus.STARTED:
233+
run = instance.get_run_by_id(run.run_id) # pyright: ignore[reportOptionalMemberAccess]
234+
if run.status == DagsterRunStatus.STARTED: # pyright: ignore[reportOptionalMemberAccess]
235235
break
236-
assert run.status == DagsterRunStatus.STARTING
236+
assert run.status == DagsterRunStatus.STARTING # pyright: ignore[reportOptionalMemberAccess]
237237
time.sleep(1)
238238

239239
time.sleep(3)
240240

241-
instance.run_launcher._get_container( # noqa: SLF001
242-
instance.get_run_by_id(run.run_id)
241+
instance.run_launcher._get_container( # noqa: SLF001 # pyright: ignore[reportAttributeAccessIssue]
242+
instance.get_run_by_id(run.run_id) # pyright: ignore[reportOptionalMemberAccess]
243243
).stop(timeout=0)
244244

245-
poll_for_finished_run(instance, run.run_id, timeout=60)
246-
assert instance.get_run_by_id(run.run_id).status == DagsterRunStatus.FAILURE
245+
poll_for_finished_run(instance, run.run_id, timeout=60) # pyright: ignore[reportOptionalMemberAccess]
246+
assert instance.get_run_by_id(run.run_id).status == DagsterRunStatus.FAILURE # pyright: ignore[reportOptionalMemberAccess]

integration_tests/test_suites/daemon-test-suite/test_dagster_daemon_health.py

Lines changed: 13 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -242,14 +242,14 @@ def _get_error_number(error):
242242
)[SensorDaemon.daemon_type()]
243243

244244
# Errors build up until there are > 5, then pull off the last
245-
if status.healthy is False and len(status.last_heartbeat.errors) >= 5:
246-
first_error_number = _get_error_number(status.last_heartbeat.errors[0])
245+
if status.healthy is False and len(status.last_heartbeat.errors) >= 5: # pyright: ignore[reportArgumentType,reportOptionalMemberAccess]
246+
first_error_number = _get_error_number(status.last_heartbeat.errors[0]) # pyright: ignore[reportOptionalSubscript,reportOptionalMemberAccess]
247247

248248
if first_error_number > 5:
249249
# Verify error numbers decrease consecutively
250250
assert [
251251
_get_error_number(error)
252-
for error in status.last_heartbeat.errors
252+
for error in status.last_heartbeat.errors # pyright: ignore[reportOptionalIterable,reportOptionalMemberAccess]
253253
] == list(range(first_error_number, first_error_number - 5, -1))
254254

255255
assert not get_daemon_statuses(
@@ -276,10 +276,10 @@ def _get_error_number(error):
276276
)[SensorDaemon.daemon_type()]
277277

278278
# Error count does not rise above 5, continues to increase
279-
assert len(status.last_heartbeat.errors) == 5
279+
assert len(status.last_heartbeat.errors) == 5 # pyright: ignore[reportArgumentType,reportOptionalMemberAccess]
280280

281281
new_first_error_number = _get_error_number(
282-
status.last_heartbeat.errors[0]
282+
status.last_heartbeat.errors[0] # pyright: ignore[reportOptionalSubscript,reportOptionalMemberAccess]
283283
)
284284

285285
assert new_first_error_number > first_error_number
@@ -307,7 +307,7 @@ def _get_error_number(error):
307307
)[SensorDaemon.daemon_type()]
308308

309309
# Error count does not rise above 5
310-
if len(status.last_heartbeat.errors) == 0:
310+
if len(status.last_heartbeat.errors) == 0: # pyright: ignore[reportArgumentType,reportOptionalMemberAccess]
311311
break
312312

313313
if (now - init_time).total_seconds() > 15:
@@ -322,8 +322,8 @@ def test_multiple_error_daemon(monkeypatch):
322322

323323
def run_loop_error(_, _ctx, _shutdown_event):
324324
# ?message stack cls_name cause"
325-
yield SerializableErrorInfo("foobar", None, None, None)
326-
yield SerializableErrorInfo("bizbuz", None, None, None)
325+
yield SerializableErrorInfo("foobar", None, None, None) # pyright: ignore[reportArgumentType]
326+
yield SerializableErrorInfo("bizbuz", None, None, None) # pyright: ignore[reportArgumentType]
327327

328328
while True:
329329
yield
@@ -354,9 +354,9 @@ def run_loop_error(_, _ctx, _shutdown_event):
354354
instance, [SensorDaemon.daemon_type()], now.timestamp()
355355
)[SensorDaemon.daemon_type()]
356356

357-
if status.healthy is False and len(status.last_heartbeat.errors) == 2:
358-
assert status.last_heartbeat.errors[0].message.strip() == "bizbuz"
359-
assert status.last_heartbeat.errors[1].message.strip() == "foobar"
357+
if status.healthy is False and len(status.last_heartbeat.errors) == 2: # pyright: ignore[reportArgumentType,reportOptionalMemberAccess]
358+
assert status.last_heartbeat.errors[0].message.strip() == "bizbuz" # pyright: ignore[reportOptionalSubscript,reportOptionalMemberAccess]
359+
assert status.last_heartbeat.errors[1].message.strip() == "foobar" # pyright: ignore[reportOptionalSubscript,reportOptionalMemberAccess]
360360
break
361361

362362
if (now - init_time).total_seconds() > 10:
@@ -403,7 +403,7 @@ def test_warn_multiple_daemons(capsys):
403403
now.timestamp(),
404404
heartbeat_interval_seconds=heartbeat_interval_seconds,
405405
)[SensorDaemon.daemon_type()]
406-
last_heartbeat_time = status.last_heartbeat.timestamp
406+
last_heartbeat_time = status.last_heartbeat.timestamp # pyright: ignore[reportOptionalMemberAccess]
407407

408408
# No warning when a second controller starts up again
409409
with daemon_controller_from_instance(
@@ -437,7 +437,7 @@ def test_warn_multiple_daemons(capsys):
437437
now.timestamp(),
438438
heartbeat_interval_seconds=heartbeat_interval_seconds,
439439
)[SensorDaemon.daemon_type()]
440-
last_heartbeat_time = status.last_heartbeat.timestamp
440+
last_heartbeat_time = status.last_heartbeat.timestamp # pyright: ignore[reportOptionalMemberAccess]
441441

442442
# Starting up a controller while one is running produces the warning though
443443
with daemon_controller_from_instance(

0 commit comments

Comments
 (0)