Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Mypy fails in strict mode #117

Closed
alexreg opened this issue May 13, 2022 · 5 comments
Closed

Mypy fails in strict mode #117

alexreg opened this issue May 13, 2022 · 5 comments

Comments

@alexreg
Copy link
Contributor

alexreg commented May 13, 2022

Bug description

Mypy fails to type-check code that uses Cloup, when in strict mode.
(Note, this is in contrast with Click, which Mypy has no problem with.)

To Reproduce

Steps to reproduce the behavior:

  1. Install Cloup, e.g., using pip3 install cloup.
  2. Create file foo.py with the following contents.
import cloup

class Context(cloup.Context):
    pass
  1. Run mypy --strict foo.py.
  2. Observe errors in output.5.
foo.py:4: error: Name "cloup.Context" is not defined
foo.py:4: error: Class cannot subclass "Context" (has type "Any")
Found 2 errors in 1 file (checked 1 source file)

Expected behavior

Mypy should not give any errors.

Versions

macOS 12.3.1
Python 3.9.12
Cloup 0.14.0

@alexreg alexreg added the bug Something isn't working label May 13, 2022
@alexreg
Copy link
Contributor Author

alexreg commented May 13, 2022

Logs for mypy --strict -v foo.py may be more helpful.

LOG:  Mypy Version:           0.950
LOG:  Config File:            Default
LOG:  Configured Executable:  /opt/homebrew/opt/python@3.9/bin/python3.9
LOG:  Current Executable:     /opt/homebrew/opt/python@3.9/bin/python3.9
LOG:  Cache Dir:              .mypy_cache
LOG:  Compiled:               True
LOG:  Exclude:                []
LOG:  Found source:           BuildSource(path='foo.py', module='foo', has_text=False, base_dir='/Users/alex/Software')
LOG:  Could not load cache for foo: foo.meta.json
LOG:  Metadata not found for foo
LOG:  Parsing foo.py (foo)
LOG:  Metadata fresh for cloup: file /Users/alex/Software/cloup/cloup/__init__.py
LOG:  Metadata fresh for builtins: file /opt/homebrew/lib/python3.9/site-packages/mypy/typeshed/stdlib/builtins.pyi
LOG:  Metadata fresh for cloup._version: file /Users/alex/Software/cloup/cloup/_version.py
LOG:  Metadata fresh for cloup.warnings: file /Users/alex/Software/cloup/cloup/warnings.py
LOG:  Metadata fresh for click: file /Users/alex/Software/click/src/click/__init__.py
LOG:  Metadata fresh for cloup.styling: file /Users/alex/Software/cloup/cloup/styling.py
LOG:  Metadata fresh for cloup.formatting: file /Users/alex/Software/cloup/cloup/formatting/__init__.py
LOG:  Metadata fresh for cloup._context: file /Users/alex/Software/cloup/cloup/_context.py
LOG:  Metadata fresh for cloup._params: file /Users/alex/Software/cloup/cloup/_params.pyi
LOG:  Metadata fresh for cloup._option_groups: file /Users/alex/Software/cloup/cloup/_option_groups.py
LOG:  Metadata fresh for cloup._sections: file /Users/alex/Software/cloup/cloup/_sections.py
LOG:  Metadata fresh for cloup._commands: file /Users/alex/Software/cloup/cloup/_commands.py
LOG:  Metadata fresh for cloup.constraints: file /Users/alex/Software/cloup/cloup/constraints/__init__.py
LOG:  Metadata fresh for cloup.types: file /Users/alex/Software/cloup/cloup/types.py
LOG:  Metadata fresh for sys: file /opt/homebrew/lib/python3.9/site-packages/mypy/typeshed/stdlib/sys.pyi
LOG:  Metadata fresh for types: file /opt/homebrew/lib/python3.9/site-packages/mypy/typeshed/stdlib/types.pyi
LOG:  Metadata fresh for _ast: file /opt/homebrew/lib/python3.9/site-packages/mypy/typeshed/stdlib/_ast.pyi
LOG:  Metadata fresh for _collections_abc: file /opt/homebrew/lib/python3.9/site-packages/mypy/typeshed/stdlib/_collections_abc.pyi
LOG:  Metadata fresh for _typeshed: file /opt/homebrew/lib/python3.9/site-packages/mypy/typeshed/stdlib/_typeshed/__init__.pyi
LOG:  Metadata fresh for collections.abc: file /opt/homebrew/lib/python3.9/site-packages/mypy/typeshed/stdlib/collections/abc.pyi
LOG:  Metadata fresh for io: file /opt/homebrew/lib/python3.9/site-packages/mypy/typeshed/stdlib/io.pyi
LOG:  Metadata fresh for typing: file /opt/homebrew/lib/python3.9/site-packages/mypy/typeshed/stdlib/typing.pyi
LOG:  Metadata fresh for typing_extensions: file /opt/homebrew/lib/python3.9/site-packages/mypy/typeshed/stdlib/typing_extensions.pyi
LOG:  Metadata fresh for click.core: file /Users/alex/Software/click/src/click/core.py
LOG:  Metadata fresh for click.decorators: file /Users/alex/Software/click/src/click/decorators.py
LOG:  Metadata fresh for click.exceptions: file /Users/alex/Software/click/src/click/exceptions.py
LOG:  Metadata fresh for click.formatting: file /Users/alex/Software/click/src/click/formatting.py
LOG:  Metadata fresh for click.globals: file /Users/alex/Software/click/src/click/globals.py
LOG:  Metadata fresh for click.parser: file /Users/alex/Software/click/src/click/parser.py
LOG:  Metadata fresh for click.termui: file /Users/alex/Software/click/src/click/termui.py
LOG:  Metadata fresh for click.types: file /Users/alex/Software/click/src/click/types.py
LOG:  Metadata fresh for click.utils: file /Users/alex/Software/click/src/click/utils.py
LOG:  Metadata fresh for dataclasses: file /opt/homebrew/lib/python3.9/site-packages/mypy/typeshed/stdlib/dataclasses.pyi
LOG:  Metadata fresh for cloup._util: file /Users/alex/Software/cloup/cloup/_util.py
LOG:  Metadata fresh for cloup.formatting._formatter: file /Users/alex/Software/cloup/cloup/formatting/_formatter.py
LOG:  Metadata fresh for cloup.formatting._util: file /Users/alex/Software/cloup/cloup/formatting/_util.py
LOG:  Metadata fresh for warnings: file /opt/homebrew/lib/python3.9/site-packages/mypy/typeshed/stdlib/warnings.pyi
LOG:  Metadata fresh for cloup.typing: file /Users/alex/Software/cloup/cloup/typing.py
LOG:  Metadata fresh for textwrap: file /opt/homebrew/lib/python3.9/site-packages/mypy/typeshed/stdlib/textwrap.pyi
LOG:  Metadata fresh for collections: file /opt/homebrew/lib/python3.9/site-packages/mypy/typeshed/stdlib/collections/__init__.pyi
LOG:  Metadata fresh for inspect: file /opt/homebrew/lib/python3.9/site-packages/mypy/typeshed/stdlib/inspect.pyi
LOG:  Metadata fresh for difflib: file /opt/homebrew/lib/python3.9/site-packages/mypy/typeshed/stdlib/difflib.pyi
LOG:  Metadata fresh for re: file /opt/homebrew/lib/python3.9/site-packages/mypy/typeshed/stdlib/re.pyi
LOG:  Metadata fresh for cloup.constraints._conditional: file /Users/alex/Software/cloup/cloup/constraints/_conditional.py
LOG:  Metadata fresh for cloup.constraints._core: file /Users/alex/Software/cloup/cloup/constraints/_core.py
LOG:  Metadata fresh for cloup.constraints._support: file /Users/alex/Software/cloup/cloup/constraints/_support.py
LOG:  Metadata fresh for cloup.constraints.conditions: file /Users/alex/Software/cloup/cloup/constraints/conditions.py
LOG:  Metadata fresh for cloup.constraints.exceptions: file /Users/alex/Software/cloup/cloup/constraints/exceptions.py
LOG:  Metadata fresh for pathlib: file /opt/homebrew/lib/python3.9/site-packages/mypy/typeshed/stdlib/pathlib.pyi
LOG:  Metadata fresh for importlib.abc: file /opt/homebrew/lib/python3.9/site-packages/mypy/typeshed/stdlib/importlib/abc.pyi
LOG:  Metadata fresh for importlib.machinery: file /opt/homebrew/lib/python3.9/site-packages/mypy/typeshed/stdlib/importlib/machinery.pyi
LOG:  Metadata fresh for array: file /opt/homebrew/lib/python3.9/site-packages/mypy/typeshed/stdlib/array.pyi
LOG:  Metadata fresh for ctypes: file /opt/homebrew/lib/python3.9/site-packages/mypy/typeshed/stdlib/ctypes/__init__.pyi
LOG:  Metadata fresh for mmap: file /opt/homebrew/lib/python3.9/site-packages/mypy/typeshed/stdlib/mmap.pyi
LOG:  Metadata fresh for os: file /opt/homebrew/lib/python3.9/site-packages/mypy/typeshed/stdlib/os/__init__.pyi
LOG:  Metadata fresh for codecs: file /opt/homebrew/lib/python3.9/site-packages/mypy/typeshed/stdlib/codecs.pyi
LOG:  Metadata fresh for abc: file /opt/homebrew/lib/python3.9/site-packages/mypy/typeshed/stdlib/abc.pyi
LOG:  Metadata fresh for enum: file /opt/homebrew/lib/python3.9/site-packages/mypy/typeshed/stdlib/enum.pyi
LOG:  Metadata fresh for errno: file /opt/homebrew/lib/python3.9/site-packages/mypy/typeshed/stdlib/errno.pyi
LOG:  Metadata fresh for contextlib: file /opt/homebrew/lib/python3.9/site-packages/mypy/typeshed/stdlib/contextlib.pyi
LOG:  Metadata fresh for functools: file /opt/homebrew/lib/python3.9/site-packages/mypy/typeshed/stdlib/functools.pyi
LOG:  Metadata fresh for gettext: file /opt/homebrew/lib/python3.9/site-packages/mypy/typeshed/stdlib/gettext.pyi
LOG:  Metadata fresh for itertools: file /opt/homebrew/lib/python3.9/site-packages/mypy/typeshed/stdlib/itertools.pyi
LOG:  Metadata fresh for click.shell_completion: file /Users/alex/Software/click/src/click/shell_completion.py
LOG:  Metadata fresh for importlib_metadata: file /opt/homebrew/Cellar/python@3.9/3.9.12/Frameworks/Python.framework/Versions/3.9/lib/python3.9/site-packages/importlib_metadata/__init__.py
LOG:  Metadata fresh for importlib.metadata: file /opt/homebrew/lib/python3.9/site-packages/mypy/typeshed/stdlib/importlib/metadata/__init__.pyi
LOG:  Metadata fresh for importlib: file /opt/homebrew/lib/python3.9/site-packages/mypy/typeshed/stdlib/importlib/__init__.pyi
LOG:  Metadata fresh for click._compat: file /Users/alex/Software/click/src/click/_compat.py
LOG:  Metadata fresh for shutil: file /opt/homebrew/lib/python3.9/site-packages/mypy/typeshed/stdlib/shutil.pyi
LOG:  Metadata fresh for click._textwrap: file /Users/alex/Software/click/src/click/_textwrap.py
LOG:  Metadata fresh for threading: file /opt/homebrew/lib/python3.9/site-packages/mypy/typeshed/stdlib/threading.pyi
LOG:  Metadata fresh for shlex: file /opt/homebrew/lib/python3.9/site-packages/mypy/typeshed/stdlib/shlex.pyi
LOG:  Metadata fresh for getpass: file /opt/homebrew/lib/python3.9/site-packages/mypy/typeshed/stdlib/getpass.pyi
LOG:  Metadata fresh for click._termui_impl: file /Users/alex/Software/click/src/click/_termui_impl.py
LOG:  Metadata fresh for stat: file /opt/homebrew/lib/python3.9/site-packages/mypy/typeshed/stdlib/stat.pyi
LOG:  Metadata fresh for operator: file /opt/homebrew/lib/python3.9/site-packages/mypy/typeshed/stdlib/operator.pyi
LOG:  Metadata fresh for uuid: file /opt/homebrew/lib/python3.9/site-packages/mypy/typeshed/stdlib/uuid.pyi
LOG:  Metadata fresh for datetime: file /opt/homebrew/lib/python3.9/site-packages/mypy/typeshed/stdlib/datetime.pyi
LOG:  Metadata fresh for glob: file /opt/homebrew/lib/python3.9/site-packages/mypy/typeshed/stdlib/glob.pyi
LOG:  Metadata fresh for cloup.formatting.sep: file /Users/alex/Software/cloup/cloup/formatting/sep.py
LOG:  Metadata fresh for _warnings: file /opt/homebrew/lib/python3.9/site-packages/mypy/typeshed/stdlib/_warnings.pyi
LOG:  Metadata fresh for sre_compile: file /opt/homebrew/lib/python3.9/site-packages/mypy/typeshed/stdlib/sre_compile.pyi
LOG:  Metadata fresh for sre_constants: file /opt/homebrew/lib/python3.9/site-packages/mypy/typeshed/stdlib/sre_constants.pyi
LOG:  Metadata fresh for cloup.constraints.common: file /Users/alex/Software/cloup/cloup/constraints/common.py
LOG:  Metadata fresh for os.path: file /opt/homebrew/lib/python3.9/site-packages/mypy/typeshed/stdlib/os/path.pyi
LOG:  Metadata fresh for subprocess: file /opt/homebrew/lib/python3.9/site-packages/mypy/typeshed/stdlib/subprocess.pyi
LOG:  Metadata fresh for csv: file /opt/homebrew/lib/python3.9/site-packages/mypy/typeshed/stdlib/csv.pyi
LOG:  Metadata fresh for email: file /opt/homebrew/lib/python3.9/site-packages/mypy/typeshed/stdlib/email/__init__.pyi
LOG:  Metadata fresh for posixpath: file /opt/homebrew/lib/python3.9/site-packages/mypy/typeshed/stdlib/posixpath.pyi
LOG:  Metadata fresh for importlib_metadata._adapters: file /opt/homebrew/Cellar/python@3.9/3.9.12/Frameworks/Python.framework/Versions/3.9/lib/python3.9/site-packages/importlib_metadata/_adapters.py
LOG:  Metadata fresh for importlib_metadata._meta: file /opt/homebrew/Cellar/python@3.9/3.9.12/Frameworks/Python.framework/Versions/3.9/lib/python3.9/site-packages/importlib_metadata/_meta.py
LOG:  Metadata fresh for importlib_metadata._collections: file /opt/homebrew/Cellar/python@3.9/3.9.12/Frameworks/Python.framework/Versions/3.9/lib/python3.9/site-packages/importlib_metadata/_collections.py
LOG:  Metadata fresh for importlib_metadata._compat: file /opt/homebrew/Cellar/python@3.9/3.9.12/Frameworks/Python.framework/Versions/3.9/lib/python3.9/site-packages/importlib_metadata/_compat.py
LOG:  Metadata fresh for importlib_metadata._functools: file /opt/homebrew/Cellar/python@3.9/3.9.12/Frameworks/Python.framework/Versions/3.9/lib/python3.9/site-packages/importlib_metadata/_functools.py
LOG:  Metadata fresh for importlib_metadata._itertools: file /opt/homebrew/Cellar/python@3.9/3.9.12/Frameworks/Python.framework/Versions/3.9/lib/python3.9/site-packages/importlib_metadata/_itertools.py
LOG:  Metadata fresh for email.message: file /opt/homebrew/lib/python3.9/site-packages/mypy/typeshed/stdlib/email/message.pyi
LOG:  Metadata fresh for random: file /opt/homebrew/lib/python3.9/site-packages/mypy/typeshed/stdlib/random.pyi
LOG:  Metadata fresh for weakref: file /opt/homebrew/lib/python3.9/site-packages/mypy/typeshed/stdlib/weakref.pyi
LOG:  Metadata fresh for _thread: file /opt/homebrew/lib/python3.9/site-packages/mypy/typeshed/stdlib/_thread.pyi
LOG:  Metadata fresh for math: file /opt/homebrew/lib/python3.9/site-packages/mypy/typeshed/stdlib/math.pyi
LOG:  Metadata fresh for time: file /opt/homebrew/lib/python3.9/site-packages/mypy/typeshed/stdlib/time.pyi
LOG:  Metadata fresh for tempfile: file /opt/homebrew/lib/python3.9/site-packages/mypy/typeshed/stdlib/tempfile.pyi
LOG:  Metadata fresh for webbrowser: file /opt/homebrew/lib/python3.9/site-packages/mypy/typeshed/stdlib/webbrowser.pyi
LOG:  Metadata fresh for msvcrt: file /opt/homebrew/lib/python3.9/site-packages/mypy/typeshed/stdlib/msvcrt.pyi
LOG:  Metadata fresh for tty: file /opt/homebrew/lib/python3.9/site-packages/mypy/typeshed/stdlib/tty.pyi
LOG:  Metadata fresh for termios: file /opt/homebrew/lib/python3.9/site-packages/mypy/typeshed/stdlib/termios.pyi
LOG:  Metadata fresh for urllib.parse: file /opt/homebrew/lib/python3.9/site-packages/mypy/typeshed/stdlib/urllib/parse.pyi
LOG:  Metadata fresh for _stat: file /opt/homebrew/lib/python3.9/site-packages/mypy/typeshed/stdlib/_stat.pyi
LOG:  Metadata fresh for _operator: file /opt/homebrew/lib/python3.9/site-packages/mypy/typeshed/stdlib/_operator.pyi
LOG:  Metadata fresh for sre_parse: file /opt/homebrew/lib/python3.9/site-packages/mypy/typeshed/stdlib/sre_parse.pyi
LOG:  Metadata fresh for _csv: file /opt/homebrew/lib/python3.9/site-packages/mypy/typeshed/stdlib/_csv.pyi
LOG:  Metadata fresh for email.policy: file /opt/homebrew/lib/python3.9/site-packages/mypy/typeshed/stdlib/email/policy.pyi
LOG:  Metadata fresh for genericpath: file /opt/homebrew/lib/python3.9/site-packages/mypy/typeshed/stdlib/genericpath.pyi
LOG:  Metadata fresh for importlib_metadata._text: file /opt/homebrew/Cellar/python@3.9/3.9.12/Frameworks/Python.framework/Versions/3.9/lib/python3.9/site-packages/importlib_metadata/_text.py
LOG:  Metadata fresh for platform: file /opt/homebrew/lib/python3.9/site-packages/mypy/typeshed/stdlib/platform.pyi
LOG:  Metadata fresh for email.charset: file /opt/homebrew/lib/python3.9/site-packages/mypy/typeshed/stdlib/email/charset.pyi
LOG:  Metadata fresh for email.contentmanager: file /opt/homebrew/lib/python3.9/site-packages/mypy/typeshed/stdlib/email/contentmanager.pyi
LOG:  Metadata fresh for email.errors: file /opt/homebrew/lib/python3.9/site-packages/mypy/typeshed/stdlib/email/errors.pyi
LOG:  Metadata fresh for _random: file /opt/homebrew/lib/python3.9/site-packages/mypy/typeshed/stdlib/_random.pyi
LOG:  Metadata fresh for fractions: file /opt/homebrew/lib/python3.9/site-packages/mypy/typeshed/stdlib/fractions.pyi
LOG:  Metadata fresh for _weakrefset: file /opt/homebrew/lib/python3.9/site-packages/mypy/typeshed/stdlib/_weakrefset.pyi
LOG:  Metadata fresh for _weakref: file /opt/homebrew/lib/python3.9/site-packages/mypy/typeshed/stdlib/_weakref.pyi
LOG:  Metadata fresh for urllib: file /opt/homebrew/lib/python3.9/site-packages/mypy/typeshed/stdlib/urllib/__init__.pyi
LOG:  Metadata fresh for email.header: file /opt/homebrew/lib/python3.9/site-packages/mypy/typeshed/stdlib/email/header.pyi
LOG:  Metadata fresh for decimal: file /opt/homebrew/lib/python3.9/site-packages/mypy/typeshed/stdlib/decimal.pyi
LOG:  Metadata fresh for numbers: file /opt/homebrew/lib/python3.9/site-packages/mypy/typeshed/stdlib/numbers.pyi
LOG:  Loaded graph with 127 nodes (0.047 sec)
LOG:  Found 68 SCCs; largest has 34 nodes
LOG:  Processing 67 queued fresh SCCs
LOG:  Processing SCC singleton (foo) as inherently stale
foo.py:3: error: Name "cloup.Context" is not defined
foo.py:3: error: Class cannot subclass "Context" (has type "Any")
LOG:  Deleting foo foo.py foo.meta.json foo.data.json
LOG:  No fresh SCCs left in queue
LOG:  Build finished in 0.157 seconds with 127 modules, and 5 errors
Found 2 errors in 1 file (checked 1 source file)

@alexreg alexreg changed the title Mypy errors Mypy fails in strict mode May 13, 2022
@alexreg
Copy link
Contributor Author

alexreg commented May 13, 2022

I've narrowed down the issue to the --no-implicit-reexport option of mypy. If that is not included (but all the other strict options), then it passes.

@janluke
Copy link
Owner

janluke commented May 15, 2022

Thank you so much for reporting this with such so much precision! I guess, I'll have to write those __all__...

@alexreg
Copy link
Contributor Author

alexreg commented May 16, 2022

@janluke No problem. Appreciate you addressing this.

@janluke
Copy link
Owner

janluke commented May 31, 2022

Closed by

@janluke janluke closed this as completed May 31, 2022
@janluke janluke removed the bug Something isn't working label Oct 6, 2022
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging a pull request may close this issue.

2 participants