Thanks to visit codestin.com
Credit goes to github.com

Skip to content

chore: update pydantic and other outdated packages#44

Open
bluesdog164 wants to merge 12 commits intoasync-worker:mainfrom
bluesdog164:chore/update-pydantic-and-other-outdated-packages
Open

chore: update pydantic and other outdated packages#44
bluesdog164 wants to merge 12 commits intoasync-worker:mainfrom
bluesdog164:chore/update-pydantic-and-other-outdated-packages

Conversation

@bluesdog164
Copy link

What

Updates outdated packages, mainly pydantic

Why

Current pydantic version

  • has vulnerabilities issues
  • has compatibility issues most recent fastapi versions and other packages/frameworks

P.S.: Eu falo português, então se quiser edito o PR para ficar em português, e podem deixar comentários em pt-br

@bluesdog164 bluesdog164 marked this pull request as ready for review June 10, 2025 14:20
@daltonmatos
Copy link
Member

Obrigado @bluesdog164 ! Aprovei a execução dos checks do PR. Vou reservar um tempo para analisar o PR com mais calma.

Obrigado!

@daltonmatos
Copy link
Member

Acabou que não tinha aprovado. 😔 Agora aprovei e estão rodando.

@daltonmatos
Copy link
Member

Vou tentar rodar os testes com um pipenv mais atual pra ver se o erro que está acontecendo é por causa disso.

@daltonmatos
Copy link
Member

Oi @bluesdog164, tudo bem?

Você conseguiu rodar os testes localmente com as dependências nessas novas versões? Como especificado na doc do async-worker tentamos suportar as versões ativas do python (preciso inclusive resolver as quebras no py3.12 e 3.13).

Não consegui também gerar um novo pipfile.lock com base nesse Pipfile do PR. Precisamos conseguir gerá-lo usando o py3.9 (que é a versão mais antiga suportada pelo projeto). Mas mesmo tentando gerar usando py3.10 e 3.11 não consegui regerar o .lock.

Atualizei os workflows de PR e o main para usarem uma versão mais atual do pip e pipenv (isso estava causando problemas também). Você pode atualizar sua branch com esses novos commits para podermos ver os novos erros?

(Talvez tenhamos que atualizar as dependências mais devagar. Primeiro as dependencias secundárias e depois as principais (aiohttp e pydantic)).

Obrigado!

@daltonmatos
Copy link
Member

Olá @bluesdog164, tudo bem?

Consegui corrigir todos os workflows com om mínimo possível de atualizações (PR #47). Agora todos os testes rodam em todas as versões propostas do python pelo projeto.

Adicionei também uma checagem para confirmar que o lockfile está apto a ser re-gerado. Isso vai ajudar a saber, de forma automatizada, se um PR está apto para ser mergeado.

Queria te pedir para ajustar seu PR para que faça update apenas do pydantic. Veja se é possível. Se não for, atualize o mínimo de dependências possivel e depois atualizamos o restante.

Obrigado.

@daltonmatos
Copy link
Member

Consegui chegar nessa configuração de dependências:

Pipfile

[packages]
pydantic = ">=2.0.0"
aiohttp = "==3.9.0"
aiologger = "==0.7.0"
aioamqp = "==0.15.0"
pydantic-settings = "==2.10.1"

[dev-packages]
pytest = "==8.4.1"
pytest-cov = "==4.0.0"
freezegun = "==1.5.2"
async-worker = {editable = true,path = "."}
mypy = "==1.0.0"
black = "==23.1.0"
lxml = "==5.0.0"
isort = "==5.12.0"
sphinx = "==4.5.0"
sphinx-intl = "==2.1.0"
twine = "==4.0.2"
sphinx-issues = "*"
cryptography = "==39.0.1"
sphinx-book-theme = "==0.3.3"

setup.py

    install_requires=[
        "aioamqp==0.15.0",
        "aiologger==0.7.0",
        "pydantic >= 2.0.0",
        "cached-property==1.5.1",
        "aiohttp==3.9.0",
        "prometheus_client==0.22.1",
    ],

Com isso os testes rodam corretamente nos pythons: 3.10 até o 3.13. Mas falham no 3.9 com o seguinte erro:

from asyncworker.utils import Timeit
asyncworker/__init__.py:1: in <module>
    from asyncworker.app import App
asyncworker/app.py:9: in <module>
    from asyncworker.http.entrypoints import HTTPEntryPointImpl
asyncworker/http/entrypoints.py:6: in <module>
    from asyncworker.entrypoints import EntrypointInterface, _extract_async_callable
asyncworker/entrypoints.py:6: in <module>
    from asyncworker.routes import RouteHandler
asyncworker/routes.py:99: in <module>
    class HTTPRoute(Route):
asyncworker/routes.py:101: in HTTPRoute
    methods: str | List[str] = ["GET"]
E   TypeError: unsupported operand type(s) for |: 'type' and '_GenericAlias'

Que é por causa dessa modificação:

class HTTPRoute(Route):
     type: RouteTypes = RouteTypes.HTTP
-    methods: List[str]
+    methods: str | List[str] = ["GET"]
     options: _RouteOptions = _RouteOptions()

Aí precisamos pensar:

  • Ou podemos apenas abandonar o suporte ao py3.9, já que ele terá seu EOL em menos +-4 meses?
  • Revertemos apenas essa mudança e deixamos como está até chegar no EOL do py3.9?
    • Aqui podemos também apenas reverter parte, deixando annotation como List[str] = ["GET"] (isso vai fazer funcionar)

Aqui cabe um outro ponto também: Não lembro de cabeça se de fato o código do asyncworker aceita "str" nesse atributo method. Caso aceite, talvez valha a pena ajustar o código para aceitar somente List[str], mesmo que isso gere uma breaking-change.

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 this pull request may close these issues.

2 participants