python / python/mypy

Mypy doesn't see typing info when it checks the whole package

Aperta
#10,260 4 commenti 0 reazioni 0 assegnatari Vedi su GitHub

Nessuno ha ancora preso questa issue.

bug topic-usability
Lingua principale
Python
Stelle
20.6k
Fork
3.3k
Metriche di merge delle PR
Metriche PR in attesa

Descrizione

Bug Report

Mypy returns errors when it's used to check the whole package but doesn't return any errors when it's run on individual files.

These errors are the same as when you don't have corresponding package (zeroconf in this case) installed. But zeroconf==0.29.0 is installed and it exports typing information (marked with py.typed).

Maybe I'm doing something wrong but I don't get why mypy can't see this typing info.

❯ mypy homeassistant
homeassistant/components/zeroconf/models.py:3: error: Module 'zeroconf' has no attribute 'DNSPointer'  [attr-defined]
homeassistant/components/zeroconf/models.py:3: error: Module 'zeroconf' has no attribute 'DNSRecord'  [attr-defined]
homeassistant/components/zeroconf/models.py:3: error: Module 'zeroconf' has no attribute 'ServiceBrowser'  [attr-defined]
homeassistant/components/zeroconf/models.py:3: error: Module 'zeroconf' has no attribute 'Zeroconf'  [attr-defined]
homeassistant/components/zeroconf/models.py:6: error: Class cannot subclass 'Zeroconf' (has type 'Any')  [misc]
homeassistant/components/zeroconf/models.py:15: error: Class cannot subclass 'ServiceBrowser' (has type 'Any')  [misc]
homeassistant/components/zeroconf/usage.py:23: error: Name 'zeroconf.Zeroconf' is not defined  [name-defined]
homeassistant/components/zeroconf/usage.py:29: error: Name 'zeroconf.Zeroconf' is not defined  [name-defined]
homeassistant/components/zeroconf/__init__.py:13: error: Module 'zeroconf' has no attribute 'Error'  [attr-defined]
homeassistant/components/zeroconf/__init__.py:13: error: Module 'zeroconf' has no attribute 'InterfaceChoice'  [attr-defined]
homeassistant/components/zeroconf/__init__.py:13: error: Module 'zeroconf' has no attribute 'IPVersion'  [attr-defined]
homeassistant/components/zeroconf/__init__.py:13: error: Module 'zeroconf' has no attribute 'NonUniqueNameException'  [attr-defined]
homeassistant/components/zeroconf/__init__.py:13: error: Module 'zeroconf' has no attribute 'ServiceInfo'  [attr-defined]
homeassistant/components/zeroconf/__init__.py:13: error: Module 'zeroconf' has no attribute 'ServiceStateChange'  [attr-defined]
homeassistant/components/zeroconf/__init__.py:13: error: Module 'zeroconf' has no attribute 'Zeroconf'  [attr-defined]
Found 15 errors in 3 files (checked 3823 source files)

❯ mypy homeassistant/components/zeroconf/models.py
Success: no issues found in 1 source file

❯ mypy homeassistant/components/zeroconf/__init__.py
Success: no issues found in 1 source file

❯ mypy homeassistant/components/zeroconf/usage.py
Success: no issues found in 1 source file

This may be relevant. Sometimes I have mypy crashing with:

❯ mypy homeassistant
Traceback (most recent call last):
  File "/Users/sayfutdinov/Project/github/core/venv/bin/mypy", line 8, in <module>
    sys.exit(console_entry())
  File "/Users/sayfutdinov/Project/github/core/venv/lib/python3.9/site-packages/mypy/__main__.py", line 11, in console_entry
    main(None, sys.stdout, sys.stderr)
  File "mypy/main.py", line 90, in main
  File "mypy/build.py", line 179, in build
  File "mypy/build.py", line 253, in _build
  File "mypy/build.py", line 2638, in dispatch
  File "mypy/build.py", line 2955, in process_graph
  File "mypy/build.py", line 3033, in process_fresh_modules
  File "mypy/build.py", line 1977, in fix_cross_refs
  File "mypy/fixup.py", line 26, in fixup_module
  File "mypy/fixup.py", line 77, in visit_symbol_table
  File "mypy/fixup.py", line 301, in lookup_qualified_stnode
  File "mypy/lookup.py", line 47, in lookup_fully_qualified
AssertionError: Cannot find component 'DNSPointer' for 'zeroconf.DNSPointer'

This is probably related to https://github.com/python/mypy/issues/7281
It disappears after removing .mypy_cache but may appear again after some time.

To Reproduce
I'm experiencing this on https://github.com/home-assistant/core/pull/48450

  1. git clone https://github.com/home-assistant/core.git && cd core
  2. git fetch origin pull/48450/head:zeroconf-typing
  3. git checkout zeroconf-typing
  4. script/setup
  5. source venv/bin/activate
  6. pip install xknx zeroconf
  7. mypy homeassistant

Expected Behavior

Mypy doesn't return errors in all these cases.

Actual Behavior

Mypy returns errors when it's run for the whole package but doesn't return any errors when it's run on individual files.

Your Environment

  • Mypy version used: mypy 0.812
  • Mypy command-line flags: mypy homeassistant
  • Mypy configuration options from mypy.ini (and other config files): setup.cfg
  • Python version used: 3.9.2
  • Operating system and version: MacOS, Ubuntu

Guida per i contributori

Apri la guida per i contributori

Come iniziare

  1. Leggi tutta la issue e poi la guida ai contributi del progetto.
  2. Commenta sulla issue per dire che te ne occupi tu — evita che due persone facciano lo stesso lavoro.
  3. Fai un fork del repository e lavora su un branch.
  4. Apri una pull request che faccia riferimento al numero della issue.

Direzione di ricerca

Riproduci i comandi whole-package e single-file dell’issue, incluso il comportamento di svuotamento della cache. Inizia tracciando il percorso di elaborazione dei pacchetti in mypy/build.py, quindi esamina fixup.py e lookup.py intorno all’assertion segnalata. Il lavoro è completato quando il controllo dell’intero pacchetto gestisce in modo coerente le informazioni di typing di zeroconf senza gli errori elencati né crash correlati alla cache.

Scritto dal modello di indicizzazione a partire dal testo della issue.

Valutazione

Stack tecnologico
python
Ambito
devtools
Tipo di issue
Bug
Difficoltà
4/5
Tempo stimato
3-5 giorni
Stato di attività
Ferma
Chiarezza
Abbastanza chiara
Idoneità per principianti
38/100

Ricevi le nuove issue nella tua casella

Un breve riepilogo di issue GitHub adatte ai principianti.