PyYaml là một thư viện tuyệt vời. Tuy nhiên, có một chút khó khăn đối với bất kỳ ai khi thêm khả năng yaml vào các lớp của họ trong khi vẫn kiểm soát những gì đang xảy ra. Lớp trợ giúp
property_a: 1 property_b: '2' part_config: property_c: '2019-06-25 13:33:30'7 của nó là bước đầu tiên nhưng nó có hai nhược điểm
- người ta phải thành thạo các tính năng bên trong của PyYaml Loader/Dumper để hiểu họ đang làm gì
- có một siêu dữ liệu bắt buộc, có thể ngăn cản việc áp dụng rộng rãi [đa kế thừa với siêu dữ liệu. ]
property_a: 1 property_b: '2' part_config: property_c: '2019-06-25 13:33:30'8 cung cấp một cách rất dễ dàng để bạn tận dụng PyYaml mà không thấy sự phức tạp. chỉ cần kế thừa từ
property_a: 1 property_b: '2' part_config: property_c: '2019-06-25 13:33:30'9, trang trí bằng
property_a: 1 property_b: '2' part_config: property_c: '2019-06-25 13:33:30'0 và bạn đã sẵn sàng
Sau đó, bạn có thể tùy ý ghi đè các phương thức
property_a: 1 property_b: '2' part_config: property_c: '2019-06-25 13:33:30'1 và
property_a: 1 property_b: '2' part_config: property_c: '2019-06-25 13:33:30'2 để ghi/tải từ một từ điển, để điều chỉnh khả năng yaml cho phù hợp với nhu cầu lớp học của bạn
Ngoài ra,
property_a: 1 property_b: '2' part_config: property_c: '2019-06-25 13:33:30'8 cung cấp cách tạo codec Yaml cho nhiều loại đối tượng cùng một lúc [
property_a: 1 property_b: '2' part_config: property_c: '2019-06-25 13:33:30'4]
Khi sử dụng pyyaml để nhập YAML, các giá trị là chính tả và liệt kê các đối tượng. Sử dụng đối tượng dict hoặc list sẽ gây nhầm lẫn như vậy
- Thuộc tính không tồn tại tham chiếu cho loại phiên bản không mong muốn
- Đánh máy chỉ mục hoặc tên khóa
Để tránh những nhầm lẫn này, một trong những cách tốt là sử dụng đối tượng làm mô hình và python có một mô-đun Data Classes tốt cho mục đích này
2. Truy cập toàn cầu và kiểm tra đơn vị dễ dàng
Bạn sẽ muốn gọi cấu hình là toàn cầu vì thật rắc rối khi chuyển giá trị cấu hình làm đối số lặp đi lặp lại giống như một lữ đoàn xô
Tuy nhiên, khi kiểm tra đơn vị, nếu tệp YAML được tải tự động khi nhập định nghĩa toàn cầu, bạn sẽ gặp phải vấn đề là bạn không thể thay thế tệp YAML cấu hình bằng tệp để kiểm tra đơn vị. Cấu hình lớp dữ liệu YAML có thể phân chia thời gian giữa phiên bản toàn cầu định nghĩa và tải tệp YAML để bạn có thể thay thế tệp YAML để kiểm tra đơn vị
Bắt đầu nhanh
1. Cài đặt
pip install yamldataclassconfig
2. Chuẩn bị file YAML cấu hình
Đặt
property_a: 1 property_b: '2' part_config: property_c: '2019-06-25 13:33:30'0 Lớp dữ liệu YAML Cấu hình tải
property_a: 1 property_b: '2' part_config: property_c: '2019-06-25 13:33:30'0 trên thư mục thực thi Python theo mặc định
property_a: 1 property_b: '2' part_config: property_c: '2019-06-25 13:33:30'
3. Tạo lớp cấu hình
Ở đâu cũng được, ví dụ, tôi thích đặt trên
property_a: 1 property_b: '2' part_config: property_c: '2019-06-25 13:33:30'2
from dataclasses import dataclass, field from datetime import datetime from dataclasses_json import DataClassJsonMixin from marshmallow import fields from yamldataclassconfig.config import YamlDataClassConfig @dataclass class PartConfig[DataClassJsonMixin]: property_c: datetime = field[metadata={'dataclasses_json': { 'encoder': datetime.isoformat, 'decoder': datetime.fromisoformat, 'mm_field': fields.DateTime[format='iso'] }}] @dataclass class Config[YamlDataClassConfig]: property_a: int = None property_b: str = None part_config: PartConfig = field[ default=None, metadata={'dataclasses_json': {'mm_field': PartConfig}} ]
4. Xác định là toàn cầu
Ngoài ra, ở đâu cũng được, ví dụ, tôi thích đặt trên
property_a: 1 property_b: '2' part_config: property_c: '2019-06-25 13:33:30'3
from myproduct.config import Config CONFIG: Config = Config[]
5. Tải cuộc gọi trước giá trị cấu hình tham chiếu
________số 8Làm thế nào để tôi
Sửa đường dẫn đến tệp yaml độc lập trên thư mục thực thi Python?
ghi đè thuộc tính
property_a: 1 property_b: '2' part_config: property_c: '2019-06-25 13:33:30'4
Bán tại
property_a: 1 property_b: '2' part_config: property_c: '2019-06-25 13:33:30'0
Chuyển tệp cấu hình YAML đích sang tệp để thử nghiệm đơn vị?
Khi thiết lập thử nghiệm đơn vị, bạn có thể gọi
property_a: 1 property_b: '2' part_config: property_c: '2019-06-25 13:33:30'5 với đối số
Trường hợp khi unittest
property_a: 1 property_b: '2' part_config: property_c: '2019-06-25 13:33:30'2
Trường hợp khi pytest
property_a: 1 property_b: '2' part_config: property_c: '2019-06-25 13:33:30'3
Sử dụng đường dẫn đến tệp cấu hình YAML giống như sản xuất khi kiểm tra?
fixturefilehandler có thể thay thế cấu hình. yml với các bài kiểm tra/cấu hình. yml. xa một cách dễ dàng. Vui lòng gọi tất cả
property_a: 1 property_b: '2' part_config: property_c: '2019-06-25 13:33:30'6 với đối số phiên bản
property_a: 1 property_b: '2' part_config: property_c: '2019-06-25 13:33:30'7 để tạo ConfigDeployer. Sau đó, đặt thư mục đích mà cấu hình. yml nên được đặt vào
property_a: 1 property_b: '2' part_config: property_c: '2019-06-25 13:33:30'8