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

REQ: Support ruamel.yaml's RoundTripLoader/Dumper for retaining comments

Abierto
#184 2 comentarios 3 reacciones 0 asignados Ver en GitHub

Nadie ha tomado este issue todavía.

Evaluación

Dificultad
5/5
Tiempo estimado
Más de una semana
Aptitud para principiantes
32/100
Tipo de issue
Nueva funcionalidad
Claridad
Bastante claro
Estado de actividad
Estancado
Stack tecnológico
python
Área
backend

Línea de trabajo

Comienza en box/box.py, alrededor del código del constructor enlazado en el issue, y luego sigue el manejo de ruamel.yaml RoundTripLoader, RoundTripDumper y CommentedMap en from_yaml y to_yaml. Confirma cómo se convierten los datos en objetos Box y cómo se serializan. Se considera terminado cuando los comentarios y el orden de YAML sobreviven a un ciclo de load/dot-notation/use/dump.

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

Descripción

enhancement help wanted

Now that the default YAML library is ruamel.yaml, and its notable feature is round trip comment preservation, my expectation is that this should work:

In [1]: from box import Box      
In [2]: yaml_doc = """--- 
   ...: # This is my YAML doc 
   ...: zlast: 1   # This is a line comment on zlast 
   ...: afirst: 2  # This should be shown second, not first!"""    
In [3]: mybox = Box.from_yaml(yaml_doc)                            
In [4]: print(mybox.to_yaml())   
afirst: 2
zlast: 1

Unordered, and no comments! However ruamel.yaml has RoundTripLoader and RoundTripDumper available!

In [8]: import ruamel.yaml as yaml                                 
In [9]: data = yaml.load(yaml_doc, Loader=yaml.RoundTripLoader)         
In [10]: print(yaml.dump(data, Dumper=yaml.RoundTripDumper))            
# This is my YAML doc
zlast: 1   # This is a line comment on zlast
afirst: 2  # This should be shown second, not first!

But using them with Box only helps resolve the creation order issue -- the comments are gone:

In [11]: mybox = Box.from_yaml(yaml_doc, Loader=yaml.RoundTripLoader)    
In [11]: print(mybox.to_yaml(Dumper=yaml.RoundTripDumper))               
zlast: 1
afirst: 2

Naturally -- as the incoming data is unrolled into a Box in the constructor:
https://github.com/cdgriffith/Box/blob/4a505124686c1f0b79ea84bb292aec331ee70f51/box/box.py#L223

I'm not sure if there's reasonable way for Box to coexist with the ruamel.yaml.CommentedMap, but it would be VERY convenient to work with my YAML files in box dot notation, while leaving the human readable comments intact.

Lenguaje dominante
Python
Estrellas
2.8k
Forks
145
Métricas de merge de PR
Sin PR fusionados en 30 d

Preparar el entorno

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 cdgriffith/Box

Todos los issues de cdgriffith/Box

Issues similares

Más issues de Python

Recibe los nuevos issues en tu correo

Un resumen breve de issues de GitHub para principiantes.