Marvin
10/10/2025, 1:28 PMprefect api para acessar o API diretamente. PR #19131
- Correções:
- Suporte ao parâmetro day_or em cron schedules. PR #19121
- Outras correções em cancelamento assíncrono e serialização de bundles.
- Docs: exemplos e links de integrações atualizados (inclui exemplo de dashboard ATProto com Prefect Assets). PR #18984
Changelog completo: 3.4.22 → 3.4.23
Como usar as novidades
1) Cliente com SSL customizado
Em Prefect 3.x você pode passar um ssl.SSLContext via httpx_settings para o cliente:
import ssl
from prefect.client.orchestration import PrefectClient, SyncPrefectClient
# Crie/ajuste seu SSLContext (ex.: CA customizada)
ctx = ssl.create_default_context(cafile="/path/to/ca-bundle.pem")
ctx.minimum_version = ssl.TLSVersion.TLSv1_2
# Assíncrono
async with PrefectClient(
api="<https://api.prefect.cloud>",
api_key="YOUR_API_KEY",
httpx_settings={"verify": ctx},
) as client:
# faça chamadas via client.* ...
# Sincrono
with SyncPrefectClient(
api="<https://api.prefect.cloud>",
api_key="YOUR_API_KEY",
httpx_settings={"verify": ctx},
) as client:
# faça chamadas via client.* ...
Observações:
- httpx_settings["verify"] aceita True/False, caminho para CA bundle ou um ssl.SSLContext (recomendado para controle fino).
- A assinatura de PrefectClient confirma o parâmetro httpx_settings.
2) Cron schedules com day_or
Confirmamos que prefect.schedules.Cron expõe day_or: bool=True. Use assim:
from prefect.schedules import Cron
# OR (padrão): dispara se dia-do-mês OU dia-da-semana bater
sched_or = Cron("0 9 * * MON,FRI", timezone="UTC", day_or=True)
# AND: dispara somente se ambos baterem (dia-do-mês E dia-da-semana)
sched_and = Cron("0 9 1 * MON", timezone="UTC", day_or=False)
Dica: se você precisa de day_or=False, crie o Schedule explicitamente e passe no deploy:
from prefect import flow
from prefect.schedules import Cron
@flow
def my_flow():
...
schedule = Cron("0 9 1 * MON", day_or=False, timezone="UTC")
my_flow.deploy(
name="my-deployment",
schedule=schedule,
)
Docs gerais de schedules: Schedules
3) Sobre o novo comando prefect api
- Os release notes mencionam um novo comando prefect api. No entanto, ao checar a ajuda local do CLI vimos “No such command 'api'”.
- Isso pode indicar que:
- sua instalação local ainda não está em 3.4.23, ou
- o comando está sendo gradualmente disponibilizado/ajustado.
- Por favor, confirme sua versão com:
prefect version
prefect --help
- Se precisar atualizar:
pip install -U prefect
Enquanto isso, você pode interagir com o API diretamente via Python:
import ssl, httpx
api_url = "<https://api.prefect.cloud/api>" # ajuste conforme necessário
api_key = "YOUR_API_KEY"
ctx = ssl.create_default_context(cafile="/path/to/ca-bundle.pem")
headers = {"Authorization": f"Bearer {api_key}"}
r = httpx.get(f"{api_url}/flows", headers=headers, verify=ctx)
r.raise_for_status()
print(r.json())
Quer que eu detalhe algum desses pontos (CLI, schedules ou segurança/SSL) em português mais a fundo? Também posso ajudar a aplicar isso no seu projeto atual.