Hacktoberfest 2026: as issues que os mantenedores marcaram para outubro, abertas e boas para iniciantes. Ver issues do Hacktoberfest

Distinguish unresolved from resolved-empty required resources

Aberta
#217 0 comentários 0 reações 0 responsáveis Ver no GitHub

Ninguém assumiu esta issue ainda.

Avaliação

Dificuldade
5/5
Tempo estimado
Mais de uma semana
Facilidade para iniciantes
42/100
Tipo de issue
Funcionalidade
Clareza
Razoavelmente clara
Status de atividade
Pouca atividade
Stack de tecnologia
python
Domínio
api

Direção de pesquisa

Comece lendo as APIs request.get_required_resource e get_required_resources e suas docstrings; depois, compare o comportamento análogo de require_schema/get_required_schema. Defina os casos compatíveis unresolved, absent e present e confirme com testes o formato de API escolhido; o trabalho estará concluído quando os chamadores puderem distinguir esses estados sem duplicar verificações de pertencimento.

Escrita pelo modelo de indexação a partir do texto da issue.

Descrição

enhancement
What problem are you facing?

request.get_required_resource (and get_required_resources) returns None/[] in two semantically different cases: the requirement hasn't been resolved by Crossplane yet, and the requirement resolved but matched nothing. The only way to tell them apart is to also check name in req.required_resources, which the get_required_resources docstring documents as a caveat the caller must handle by hand.

This distinction matters whenever a function gates on an external resource. "Not resolved yet" is transient — wait and let Crossplane re-call. "Resolved, matched nothing" is a real state — the resource was deleted, or its reference is a typo — and usually wants a different response (e.g. a warning, or holding steady rather than waiting). Functions end up reimplementing the same in-then-get dance. We hit it twice in one project: once gating a hydration Job on an auth Secret, and once gating replica placement on a referenced cache being resolvable.

How could this Function help solve your problem?

A small helper that classifies a required resource into the three states, so callers don't each re-derive it from the in check. Roughly:

class Resolution(enum.Enum):
    UNRESOLVED = "unresolved"  # Crossplane hasn't fetched it yet (key absent)
    ABSENT     = "absent"      # resolved, but nothing matched
    PRESENT    = "present"     # resolved and found

def resolve_required(req, name) -> tuple[Resolution, dict | None]: ...

A list variant (and possibly the same for require_schema/get_required_schema, which has the analogous distinction) would round it out. Naming/placement and whether this is an enum vs. a small result type are open — happy to send a PR once there's a preferred shape.

Linguagem predominante
Python
Estrelas
12
Forks
15
Merge médio
1d 12h
PRs com merge (30d)
7

Guia de contribuição

Nenhum guia de contribuição indexado para este repositório

Primeiros passos

  1. Leia a issue inteira e depois o guia de contribuição do projeto.
  2. Comente na issue dizendo que vai assumir — evita que duas pessoas façam o mesmo trabalho.
  3. Faça um fork do repositório e trabalhe em uma branch.
  4. Abra um pull request que referencie o número da issue.

Mais de crossplane/function-sdk-python

Todas as issues de crossplane/function-sdk-python

Issues semelhantes

Mais issues de Python

Receba novas issues na sua caixa de entrada

Um resumo curto de issues do GitHub para quem está começando.