decorated classes trigger Incompatible types in "await" (actual type "DecoratedClass", expected type "Awaitable[Any]")
Nadie ha tomado este issue todavía.
- Lenguaje dominante
- Python
- Estrellas
- 20.6k
- Forks
- 3.3k
- Métricas de merge de PR
- Métricas de PR pendientes
Descripción
I have a program who defined a decorator , and decorated to a classes.
Its design intention is to implement network requests through direct class calls.
eg: RequietApiClass(data), then run RequietApiClass.call.inner_implement_func to complete HTTP request.
The following code is an example of a problem display。It run OK, but mypy check types error. But, i dont know how to fixed it.
please help me, thanks!
import asyncio
from typing import Any, Awaitable, Type
def apiwrapper(cls: Type):
return cls()
@apiwrapper
class RequestApiClass:
def __init__(self):
print("aaa")
async def __call__(self, data):
return data
async def test_api_cfg_ok():
testdata = {"a": "a"}
ret = DecoratedClass(testdata)
result = await ret
print(result)
asyncio.run(test_api_cfg_ok())
problem descript:
Too many arguments for "DecoratedClass"
Incompatible types in "await" (actual type "DecoratedClass", expected type "Awaitable[Any]")
if i conver class to sync, then will trigger new problem.
async_to_sync(DecoratedClass)({"a": "a"})
problem descript
Argument 1 to "async_to_sync" has incompatible type "Type[DecoratedClass]"; expected "Union[Callable[[], Coroutine[Any, Any, Never]], Callable[[], Awaitable[Never]]]"
environment:
python:3.8.10
mypy:1.10.0
mypy config:
[tool.mypy]
mypy_path = "./oemhasten/apps"
plugins = ["mypy_django_plugin.main", "mypy_drf_plugin.main"]
exclude = ["pyenv"]
explicit_package_bases = true
check_untyped_defs = true
disallow_untyped_decorators = true
[[tool.mypy.overrides]]
module = ["treebeard.*"]
ignore_missing_imports = true
[tool.django-stubs]
django_settings_module = "oemhasten.settings"
Guía de contribución
Primeros pasos
- Lee el issue completo y luego la guía de contribución del proyecto.
- Comenta en el issue que vas a ocuparte — evita que dos personas hagan lo mismo.
- Haz un fork del repositorio y trabaja en una rama.
- Abre un pull request que haga referencia al número del issue.
Línea de trabajo
Comienza con el ejemplo proporcionado del decorador y la clase decorada bajo Python 3.8.10 y mypy 1.10.0, y después reproduce los diagnósticos indicados con la configuración mostrada. Traza cómo se tipan la clase decorada y su async call; se considera terminado cuando el ejemplo deja de producir los errores de argumentos y await indicados, o cuando el comportamiento se documenta como esperado.
Escrito por el modelo de indexación a partir del texto del issue.
Evaluación
- Stack tecnológico
- python
- Área
- devtools
- Tipo de issue
- Error
- Dificultad
- 4/5
- Tiempo estimado
- 3-5 días
- Estado de actividad
- Estancado
- Claridad
- Necesita aclaración
- Aptitud para principiantes
- 25/100