IPv6 node addresses produce an invalid request URL
Avaliação
- Dificuldade
- 2/5
- Tempo estimado
- 1-3 horas
- Facilidade para iniciantes
- 82/100
- Tipo de issue
- Bug
- Clareza
- Claramente especificada
- Status de atividade
- Ativa
- Stack de tecnologia
- python
- Domínio
- backend, networking
Direção de pesquisa
Comece lendo Node.url() e Node.from_url(), pois a issue identifica ambos como pontos em que os colchetes de IPv6 são perdidos ou omitidos. Reproduza o problema com os exemplos fornecidos de URL e node dict e, em seguida, confira os testes do cliente para a construção de URLs de nós. O trabalho estará concluído quando ambas as configurações produzirem http://[::1]:8108 e a requisição não falhar mais com httpx.InvalidURL.
Escrita pelo modelo de indexação a partir do texto da issue.
Descrição
A node with an IPv6 address can't be reached. Node.url() joins the host and port as {host}:{port} without enclosing an IPv6 literal in brackets, so every request fails with httpx.InvalidURL before it is sent.
Both ways of configuring a node are affected:
- A URL string such as
"http://[::1]:8108".Node.from_urltakes the host fromurlparse(url).hostname, which strips the brackets, so the host is stored as::1. - A node dict such as
{"host": "::1", "port": 8108, "protocol": "http"}.
Steps to reproduce
import typesense
client = typesense.Client({
"api_key": "xyz",
"nodes": ["http://[::1]:8108"],
"num_retries": 0,
})
print(client.api_call.node_manager.nodes[0].url())
client.operations.is_healthy()
Actual behavior
http://::1:8108
httpx.InvalidURL: Invalid port: ':1:8108'
Expected behavior
The client sends requests to http://[::1]:8108.
Environment
- typesense-python:
master(8727d2b) - httpx 0.28.1
- Linguagem predominante
- Python
- Estrelas
- 247
- Forks
- 66
- Merge médio
- 1d 1h
- PRs com merge (30d)
- 7
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 typesense/typesense-python
-
`MultiSearchResponse` type does not account for union search response shapeTalvez já em andamento @tharropoulos assumiu há 171 dias. Aberta
Dificuldade 2/5 1-3 horas Facilidade para iniciantes 78/100
typesense/typesense-python#128 ·
-
`documents.Documents.import_()` `batch_size` argument is ignored, type of `import_parameters` is missing `batch_size`Talvez já em andamento @tharropoulos assumiu há 244 dias. Aberta
Dificuldade 2/5 1-2 dias Facilidade para iniciantes 68/100
typesense/typesense-python#124 ·
-
Dificuldade 1/5 Menos de uma hora Facilidade para iniciantes 68/100
typesense/typesense-python#100 ·
-
Dificuldade 3/5 1-2 dias Facilidade para iniciantes 35/100
typesense/typesense-python#122 · 3 comentários ·
-
[Bug] - DeprecationWarning on instantiation of ClientTalvez já em andamento @tharropoulos assumiu há 265 dias. Aberta
Dificuldade 3/5 1-2 dias Facilidade para iniciantes 55/100
typesense/typesense-python#114 · 8 comentários ·
Todas as issues de typesense/typesense-python
Issues semelhantes
-
Dificuldade 2/5 1-3 horas Facilidade para iniciantes 77/100
khuisman/mcp-gee-sweet#1166 ·
Mantenedores costumam responder em até 1 dia
-
bug
Dificuldade 2/5 1-3 horas Facilidade para iniciantes 70/100
lugassawan/swe-workbench#823 ·
Mantenedores costumam responder em até 1 dia
-
Dificuldade 2/5 1-3 horas Facilidade para iniciantes 85/100
gramaziokohler/compas_timber#870 ·
-
security-scan-failure
Dificuldade 2/5 1-3 horas Facilidade para iniciantes 78/100
semantica-agi/semantica#2089 ·
Mantenedores costumam responder em até 1 dia
-
bug
Dificuldade 2/5 1-3 horas Facilidade para iniciantes 82/100
autowarefoundation/autoware_carla_scenario#500 ·
Mantenedores costumam responder em até 1 dia