لینک کوتاه مطلب : https://hsgar.com/?p=4578

StrictYAML: پارسر (تجزیه کننده) ایمن YAML

StrictYAML یک است نوع ایمن تجزیه کننده YAML که زیرمجموعه محدودی از مشخصات YAML را تجزیه و تأیید می کند.

اولویت های:

  • API زیبا
  • امتناع از تجزیه ویژگی‌های زشت، خواندنی و ناامن YAML مانند مشکل نروژ.
  • اعتبارسنجی دقیق نشانه گذاری و ریخته گری نوع ساده.
  • استثناهای واضح و خوانا با قطعه کد و شماره خطوط.
  • به عنوان یک قطره تقریباً جایگزین برای pyyaml، ruamel.yaml یا poyo عمل می کند.
  • امکان خواندن در YAML، ایجاد تغییرات و نوشتن مجدد آن با حفظ نظرات.
  • سرعت نیست، در حال حاضر.

مثال ساده:

# All about the character
name: Ford Prefect
age: 42
possessions:
- Towel
from strictyaml import load, Map, Str, Int, Seq, YAMLError

نتیجه تجزیه پیش فرض:

>>> load(yaml_snippet)
YAML({'name': 'Ford Prefect', 'age': '42', 'possessions': ['Towel']})

همه داده ها رشته، لیست یا OrderedDict هستند:

>>> load(yaml_snippet).data
{'name': 'Ford Prefect', 'age': '42', 'possessions': ['Towel']}

شروع سریع با طرحواره:

from strictyaml import load, Map, Str, Int, Seq, YAMLError

schema = Map({"name": Str(), "age": Int(), "possessions": Seq(Str())})

42 اکنون به عنوان یک عدد صحیح تجزیه می شود:

>>> person = load(yaml_snippet, schema)
>>> person.data
{'name': 'Ford Prefect', 'age': 42, 'possessions': ['Towel']}

اگر مشکلات نحوی، نقض طرحواره شما یا استفاده از ویژگی‌های غیرمجاز YAML وجود داشته باشد، یک خطای YAMLE مطرح می‌شود:

# All about the character
name: Ford Prefect
age: 42

به عنوان مثال، نقض طرحواره:

try:
    person = load(yaml_snippet, schema)
except YAMLError as error:
    print(error)
while parsing a mapping
  in "<unicode string>", line 1, column 1:
    # All about the character
     ^ (line: 1)
required key(s) 'possessions' not found
  in "<unicode string>", line 3, column 1:
    age: '42'
    ^ (line: 3)

اگر به درستی تجزیه شود:

from strictyaml import load, Map, Str, Int, Seq, YAMLError, as_document

schema = Map({"name": Str(), "age": Int(), "possessions": Seq(Str())})

می توانید مقادیر را تغییر دهید و YAML را با حفظ نظرات بنویسید:

person = load(yaml_snippet, schema)
person['age'] = 43
print(person.as_yaml())
# All about the character
name: Ford Prefect
age: 43
possessions:
- Towel

و همچنین شماره خطوط را جستجو کنید:

>>> person = load(yaml_snippet, schema)
>>> person['possessions'][0].start_line
5

و اسناد YAML را از دیکته ها یا لیست ها بسازید:

print(as_document({"x": 1}).as_yaml())

نصب

چرا StrictYAML؟

تعدادی فرمت و رویکرد وجود دارد که می تواند کمابیش به همان هدفی که StrictYAML دست می یابد، دست یابد. من سعی کردم آن را به بهترین شکل تبدیل کنم. در زیر مجموعه ای از توجیهات مستند آورده شده است:

با استفاده از StrictYAML

چگونه:

اعتبار سنجی ترکیبی:

اعتبار سنجی اسکالر:

محدودیت های:

توجیهات طراحی

برخی تصمیمات طراحی در StrictYAML وجود دارد که بحث برانگیز و/یا واضح نیستند. آنها در اینجا مستند شده اند:

مشارکت کنندگان ستاره

  • @wwoods
  • @chrisburr
  • @jnichols0

سایر مشارکت کنندگان

  • @eulores
  • @WaltWoods
  • @ChristopherGS
  • @gvx
  • @AlexandreDecan
  • @lots0logs
  • @tobbez
  • @jaredsampson
  • @BoboTIG

StrictYAML همچنین شامل کد از ruamel.yaml، حق چاپ آنتون ون در نوت.

کمک کردن

  • قبل از نوشتن هر کدی، لطفاً آموزش مشارکت در کتابخانه های hitchdev را بخوانید.
  • قبل از نوشتن هر کدی، اگر ویژگی جدیدی را پیشنهاد می کنید، لطفاً آن را در github مطرح کنید. اگر یک ویژگی / اشکال موجود است، لطفاً نظر دهید و به طور خلاصه نحوه اجرای آن را توضیح دهید.
  • همه کدها باید همراه با داستانی باشند که آن را تمرین می کند یا تغییراتی در یک داستان موجود داشته باشد. این هم برای تست کد و هم برای ساخت مستندات استفاده می شود.

لینک منبع

ارسال یک پاسخ

آدرس ایمیل شما منتشر نخواهد شد.