Hacktoberfest 2026: los issues que los mantenedores marcaron para octubre, abiertos y aptos para principiantes. Explorar issues de Hacktoberfest

Python wrapper API has changed; python examples are not working

Abierto
#48 1 comentario 0 reacciones 0 asignados Ver en GitHub

Nadie ha tomado este issue todavía.

Evaluación

Dificultad
3/5
Tiempo estimado
1-2 días
Aptitud para principiantes
45/100
Tipo de issue
Error
Claridad
Bastante claro
Estado de actividad
Estancado
Stack tecnológico
python
Área
api

Línea de trabajo

Comienza con python/examples/read_way.py y python/examples/augmented_diff.py; después inspecciona las rutas del wrapper de Python detrás de nodes.get() y ways.get(), junto con la versión de la dependencia pycapnp. Reproduce los comandos mostrados en el issue y determina el enfoque de compatibilidad adecuado. Se considera terminado cuando ambos ejemplos se ejecutan sin los errores de atributos del context manager indicados y el comportamiento del wrapper es coherente con la versión de pycapnp compatible.

Escrito por el modelo de indexación a partir del texto del issue.

Descripción

The python examples in the repository aren't working. As an example, here's me running read_way.py.

$ python python/examples/read_way.py washington.osmx 761811137
Traceback (most recent call last):
  File "/Users/jake/Code/FOSS/protomaps/OSMExpress/python/examples/read_way.py", line 18, in <module>
    for node_id in way.nodes:
                   ^^^^^^^^^
AttributeError: '_GeneratorContextManager' object has no attribute 'nodes'

The augmented_diff.py script fails similarly:

python python/examples/augmented_diff.py washington.osmx 155421965.osc 155421965.adiff
No old loc found for tagless node 5694096597
Traceback (most recent call last):
  File "/Users/jake/Code/FOSS/protomaps/OSMExpress/python/examples/augmented_diff.py", line 138, in <module>
    set_old_metadata(prev_version)
  File "/Users/jake/Code/FOSS/protomaps/OSMExpress/python/examples/augmented_diff.py", line 74, in set_old_metadata
    elem.set('version',str(o.metadata.version))
                           ^^^^^^^^^^
AttributeError: '_GeneratorContextManager' object has no attribute 'metadata'

The root cause is that pycapnp from_bytes() now returns a context manager, requiring callers to change from this:

way = messages_capnp.Way.from_bytes(msg)
# do stuff with way

...to this:

with messages_capnp.Way.from_bytes(msg) as way:
    # do stuff with way

This change was introduced in pycapnp 1.1.1. It looks like the Python examples were developed against an older version of OSMX that used pycapnp 0.6.4, but #46 bumped the pycapnp version to 2.0.0. This effectively changed the API of nodes.get(), ways.get(), etc by making them return context managers rather than return nodes/ways/etc directly, but I assume this wasn't noticed at the time and the examples weren't updated to match.

I think there are two possible fixes: either downgrade the Python osmx wrapper to use pycapnp <= 1.1.0, or change the Python examples to use with. I'm not sure which is more appropriate. It's worth noting that if pycapnp ~= 2.0.0 is kept, the next release of osmx will be a breaking API change for any users of the Python wrapper.

EDIT: Actually it looks like a version with the new context-manager API has already been published, though as a 0.0.x release I think most users would know not to expect a stable API 😉

I might be able to work on a PR for this at some point soon, but wanted to open this issue for now in case I don't end up having time to.

Lenguaje dominante
C++
Estrellas
274
Forks
23
Métricas de merge de PR
Sin PR fusionados en 30 d

Preparar el entorno

  • Incluye un Dockerfile o un archivo de Docker Compose
  • Sin plantilla de pull request
  • Sin guía de contribución

Primeros pasos

  1. Lee el issue completo y luego la guía de contribución del proyecto.
  2. Comenta en el issue que vas a ocuparte — evita que dos personas hagan lo mismo.
  3. Haz un fork del repositorio y trabaja en una rama.
  4. Abre un pull request que haga referencia al número del issue.

Más de bdon/OSMExpress

Todos los issues de bdon/OSMExpress

Issues similares

Más issues de C++

Recibe los nuevos issues en tu correo

Un resumen breve de issues de GitHub para principiantes.