testcontainers-python icon indicating copy to clipboard operation
testcontainers-python copied to clipboard

Mark packages as typed

Open jooola opened this issue 2 years ago • 8 comments

Describe the bug

Mypy is failing because the packages aren't marked as typed (missing py.typed file), but it seems that most of the packages have the type definitions.

Could the packages be marked as typed ?

To Reproduce

from testcontainers.compose import DockerCompose

with DockerCompose("."):
  pass
$ mypy tests
tests/e2e_test.py:12: error: Skipping analyzing "testcontainers.compose": module is installed, but missing library stubs or py.typed marker  [import]
tests/e2e_test.py:12: note: See https://mypy.readthedocs.io/en/stable/running_mypy.html#missing-imports

jooola avatar Feb 09 '23 18:02 jooola

Yes, that should definitely be possible. Would you be up for setting up a PR? We could also add mypy checks in the same PR.

tillahoffmann avatar Feb 16 '23 19:02 tillahoffmann

@jooola if you have any feedback about #504 it is welcome!

alexanderankin avatar Mar 30 '24 23:03 alexanderankin

Does anyone know off hand whether this one was ever resolved?

I'm kind of a Python noob and was trying to add type checking on a project's tests. I got almost all of it working, except for testcontainers:

tests/conftest.py:5: error: Skipping analyzing "testcontainers.postgres": module is installed, but missing library stubs or py.typed marker  [import-untyped]

Looking in the file I'm using, it is typed, but I think the problem is that it's not declaring itself as such. Fixing this might be as simple as adding a py.typed file to the project.

brandur avatar Jun 30 '24 20:06 brandur

there is a pr here but its not a top priority: #504 - almost immediately after i opened there were two pr's with minor typing fixes that conflicted with it, and i did not rebase in time. at this point it would be not only harder to rebase but also there are new modules that need types/mypy checking.

contributions would be accepted for it.

alexanderankin avatar Jun 30 '24 20:06 alexanderankin

Thanks. My Python skills are such that I'm already having enough trouble just wrangling types in one much smaller package so I don't think I'll try my hand at this yet, but it's good to know I'm not missing something.

In case this helps anyone else, here's a block that can be placed in mypy.ini to flag it as ignored so that MyPy can pass for everything else:

# testcontainers is typed, but it doesn't correctly declare itself as such.
# Hopefully it can be fixed one day:
#
# https://github.com/testcontainers/testcontainers-python/issues/305
[mypy-testcontainers.*]
ignore_missing_imports = True

brandur avatar Jun 30 '24 21:06 brandur

Has there been any update on this issue? It's been close to a year since the last comment

andres-ito-traversal avatar Apr 25 '25 21:04 andres-ito-traversal

It looks like the relevant PR is https://github.com/testcontainers/testcontainers-python/pull/810

andres-ito-traversal avatar Nov 12 '25 17:11 andres-ito-traversal

I attempted to resolve this with https://github.com/testcontainers/testcontainers-python/pull/918

I tested this PR locally by doing the following:

  1. I forked the testcontainers repo and cloned it locally
  2. In my working repo that is using testcontainers, I changed the dependency in pyproject.toml to not point to a release version but to instead point to a local directry. I did something like: uv pip install --editable "file:///Users/username/open-source/testcontainers-python[postgres]"
  3. Type checker validation: Executed Pyright against all the code in my directory
  pyright .
  0 errors, 0 warnings, 0 informations

andres-ito-traversal avatar Nov 12 '25 18:11 andres-ito-traversal