Hacktoberfest 2026: những issue maintainer đã đánh dấu cho tháng Mười, đang mở và phù hợp người mới. Xem issue Hacktoberfest

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

Đang mở
#184 2 bình luận 3 reaction 0 người được giao Xem trên GitHub

Chưa có ai nhận issue này.

Đánh giá

Độ khó
5/5
Thời gian dự kiến
Hơn một tuần
Mức phù hợp với người mới
32/100
Loại issue
Tính năng
Độ rõ ràng
Khá rõ ràng
Mức độ hoạt động
Đình trệ
Công nghệ
python
Lĩnh vực
backend

Hướng nghiên cứu

Bắt đầu trong box/box.py, tại phần mã constructor được liên kết trong issue, sau đó lần theo cách from_yaml và to_yaml xử lý ruamel.yaml RoundTripLoader, RoundTripDumper và CommentedMap. Xác nhận dữ liệu được chuyển đổi thành các đối tượng Box và được tuần tự hóa như thế nào. Được xem là hoàn tất khi các comment và thứ tự YAML vẫn được giữ nguyên qua một chu kỳ load/dot-notation/use/dump.

Do mô hình lập chỉ mục viết ra từ nội dung của issue.

Mô tả

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.

Ngôn ngữ chính
Python
Star
2.8k
Fork
145
Chỉ số merge pull request
Không có pull request nào được merge trong 30 ngày

Chuẩn bị môi trường

Bắt đầu từ đâu

  1. Đọc hết issue, rồi đọc hướng dẫn đóng góp của dự án.
  2. Bình luận trên issue rằng bạn sẽ nhận — tránh hai người làm cùng một việc.
  3. Fork repository và làm thay đổi trên một nhánh.
  4. Mở pull request có tham chiếu số hiệu của issue.

Issue khác của cdgriffith/Box

Tất cả issue của cdgriffith/Box

Issue tương tự

Thêm issue về Python

Nhận issue mới trong hộp thư của bạn

Bản tóm tắt ngắn những issue GitHub phù hợp với người mới.