An empty list or mapping is expanded as a defined value: `{x,v}` with `v=[]` gives `1,`, `{#v}` gives `#`, `{;v}` gives `;v=`
Ninguém assumiu esta issue ainda.
Avaliação
- Dificuldade
- 2/5
- Tempo estimado
- 1-3 horas
- Facilidade para iniciantes
- 78/100
Direção de pesquisa
Leia uritemplate/variable.py, especialmente _string_expansion e _semi_path_expansion, e compare como eles tratam listas e mapeamentos vazios com _query_expansion e _label_path_expansion. Reproduza os casos relatados com o comando Python da issue e, em seguida, execute as suítes de testes do projeto e do RFC uritemplate-test. O trabalho estará concluído quando as coleções vazias forem tratadas como indefinidas nas expansões afetadas e as saídas esperadas listadas passarem.
Escrita pelo modelo de indexação a partir do texto da issue.
Descrição
Versions tested: uritemplate 4.2.0 from PyPI (the newest release on 2026-10-23) and the main branch at
8e46228e5a1ad3f688b21c6b3917d15dd0f7c581 (its head on 2026-10-23); CPython 3.10 and 3.11 on Linux.
Reproduce (one command):
python3 -c 'from uritemplate import expand; print(repr(expand("{x,v}", {"x": "1", "v": []})))'
An empty list is an ordinary value for a variable that has none to give, and RFC 6570 covers it.
Expected: '1'. RFC 6570 section 2.3: "A variable defined as a list value is considered undefined if the list contains zero members. A
variable defined as an associative array of (name, value) pairs is considered undefined if the array contains zero members or if all member
names in the array are associated with undefined values." Section 3.2.1: "A variable that is undefined (Section 2.3) has no value and is ignored by the expansion process. If all of the
variables in an expression are undefined, then the expression's expansion is the empty string." The algorithm in Appendix A says the same:
"If the varname is unknown or corresponds to a variable with an undefined value (Section 2.3), then skip to the next varspec". The separator
is appended only between defined variables.
Observed (the same on 4.2.0 and on main):
'1,'
More cases, all with x="1" (tool output / what the RFC text gives):
| template | v | observed | expected |
|---|---|---|---|
{+x,v} |
[] |
1, |
1 |
{#x,v} |
[] |
#1, |
#1 |
{#v} |
[] or {} |
# |
(empty) |
{;x,v} |
[] |
;x=1;v= |
;x=1 |
{;v} |
{} |
;v= |
(empty) |
{;v*} |
{} |
; |
(empty) |
Controls, correct today: {/x,v} -> /1, {.x,v} -> .1, {?x,v} -> ?x=1, {&x,v} -> &x=1, and {x,w} with w not given -> 1.
Where
In uritemplate/variable.py (same on main and in 4.2.0), _query_expansion returns None for an empty list or mapping (if not value: return None, in both the list and the mapping branch) and _label_path_expansion does the same (len(value) == 0), which is why /, ., ? and & are correct. _string_expansion (used by the simple, + and # operators) has no such check, and _semi_path_expansion has it only in its list-explode branch ({;v*} with [] correctly gives ''), so in the other cases the empty collection is expanded as a defined, empty value. Adding the same early return to those two functions made every case above agree with the RFC text and left the project's own test suite and the RFC's uritemplate-test suite green on this machine; that is only a local check, not a proposed patch.
Found by comparing the library with a small model of the RFC's expansion algorithm on generated templates and values, then confirmed against an independent implementation (uri-template 1.3.0 on PyPI), which gives '1', '' and ';v' for the three cases.
- Linguagem predominante
- Python
- Estrelas
- 246
- Forks
- 41
- Merge médio
- 8h 20min
- PRs com merge (30d)
- 3
Preparar o ambiente
Este projeto não oferece contêiner de desenvolvimento, Dockerfile nem guia de contribuição, então a configuração fica por sua conta: comece pelo README e veja nosso guia da primeira contribuição para os passos gerais.
Primeiros passos
- Leia a issue inteira e depois o guia de contribuição do projeto.
- Comente na issue dizendo que vai assumir — evita que duas pessoas façam o mesmo trabalho.
- Faça um fork do repositório e trabalhe em uma branch.
- Abra um pull request que referencie o número da issue.
Mais de python-hyper/uritemplate
-
Dificuldade 2/5 1-3 horas Facilidade para iniciantes 85/100
python-hyper/uritemplate#163 ·
-
Dificuldade 3/5 1-2 dias Facilidade para iniciantes 35/100
python-hyper/uritemplate#51 ·
-
Dificuldade 5/5 Mais de uma semana Facilidade para iniciantes 25/100
python-hyper/uritemplate#34 · 4 comentários ·
-
Provide an API for validating URI TemplatesTalvez já em andamento @sigmavirus24 assumiu há 3380 dias. Aberta
Dificuldade 5/5 Mais de uma semana Facilidade para iniciantes 35/100
python-hyper/uritemplate#33 · 9 comentários ·
-
Add Contributor CovenantAbertaenhancement
Dificuldade 2/5 1-3 horas Facilidade para iniciantes 45/100
python-hyper/uritemplate#15 ·
Todas as issues de python-hyper/uritemplate
Issues semelhantes
-
Dificuldade 2/5 1-3 horas Facilidade para iniciantes 67/100
MISP/misp-workbench#496 ·
Mantenedores costumam responder em até 1 dia
-
Dificuldade 2/5 1-3 horas Facilidade para iniciantes 66/100
Mantenedores costumam responder em até 1 dia
-
Dificuldade 1/5 1-3 horas Facilidade para iniciantes 88/100
fossasia/visdom-dev#69 ·
Mantenedores costumam responder em até 3 dias
-
[Bug] Parameters named like a property break to_xcal()Talvez já em andamento @atharvasalunke1267 assumiu hoje. Aberta
Dificuldade 2/5 1-3 horas Facilidade para iniciantes 65/100
collective/icalendar#2018 · 2 comentários ·
Mantenedores costumam responder em até 1 dia
-
Dificuldade 2/5 1-3 horas Facilidade para iniciantes 75/100
Mantenedores costumam responder em até 1 dia