
مكتبة Python لتحليل مستندات SPDX والتحقق منها وإنشائها.
حالة CI (Linux وmacOS وWindows):
يرجى العلم أن الإصدار القادم 0.8 قد خضع لإعادة هيكلة كبيرة استعدادًا للإصدار القادم من SPDX v3.0، مما يؤدي إلى تغييرات جذرية في API. يرجى الرجوع إلى دليل الترحيل لتحديث الكود الموجود لديك.
الميزات الرئيسية للإصدار v0.8 هي:
لاحظ أن v0.8 يدعم الكتابة فقط، وليس قراءة مستندات SPDX 3.0. انظر #760 للتفاصيل.
تنفذ هذه المكتبة محللات ومحولات ومدققات ومعالجات SPDX في بايثون.
تتم مشاركة التحديثات المهمة المتعلقة بهذه المكتبة عبر القائمة البريدية التقنية لـ SPDX: https://lists.spdx.org/g/Spdx-tech.
AGraph.
ملاحظة: هذه ميزة اختيارية وتتطلب
تثبيتًا إضافيًا للتبعيات الاختياريةانظر بدء سريع مع SPDX 3.0 أدناه. يعتمد التنفيذ على ملفات Markdown الوصفية في المستودع https://github.com/spdx/spdx-3-model (commit: a5372a3c145dbdfc1381fc1f791c68889aafc7ff). أحدث نموذج لـ SPDX 3.0 متاح على https://spdx.github.io/spdx-spec/v3.0/serializations/.
كما هو الحال دائمًا، يجب أن تعمل في بيئة افتراضية (venv). يمكنك تثبيت نسخة محلية
من هذا المستودع باستخدام yourenv/bin/pip install . أو تثبيتها من PyPI
(تحقق من أحدث إصدار وقم بتثبيته مثل
yourenv/bin/pip install spdx-tools==0.8.3). لاحظ أنه على Windows سيكون Scripts
بدلاً من bin.
التحليل/التحقق (لتحليل أي تنسيق):
استخدم pyspdxtools -i <filename> حيث <filename> هو موقع الملف. يتم استنتاج تنسيق الإدخال تلقائيًا من نهاية الملف.
إذا كنت تستخدم توزيعة مصدرية، جرب تشغيل:
pyspdxtools -i tests/spdx/data/SPDXJSONExample-v2.3.spdx.json
التحويل (لتحويل تنسيق إلى آخر):
استخدم pyspdxtools -i <input_file> -o <output_file> حيث <input_file> هو موقع الملف المراد تحويله
و<output_file> هو موقع ملف الإخراج. يتم استنتاج تنسيقات الإدخال والإخراج تلقائيًا من نهايات الملفات.
إذا كنت تستخدم توزيعة مصدرية، جرب تشغيل:
pyspdxtools -i tests/spdx/data/SPDXJSONExample-v2.3.spdx.json -o output.tag
إذا كنت تريد تخطي عملية التحقق، قم بتوفير العلم --novalidation، كما يلي:
pyspdxtools -i tests/spdx/data/SPDXJSONExample-v2.3.spdx.json -o output.tag --novalidation
(استخدم هذا بحذر: لاحظ أن المستندات غير الصالحة غير المكتشفة قد تؤدي إلى سلوك غير متوقع للأداة)
للمساعدة استخدم pyspdxtools --help
توليد الرسم البياني (ميزة اختيارية)
تولد هذه الميزة رسمًا بيانيًا يمثل جميع العناصر في مستند SPDX واتصالاتها بناءً على
العلاقات المقدمة. يمكن عرض الرسم البياني كصورة. فيما يلي مثال للملف tests/spdx/data/SPDXJSONExample-v2.3.spdx.json:

تأكد من تثبيت التبعيات الاختيارية networkx وpygraphviz. للقيام بذلك، شغّل pip install ".[graph_generation]".
استخدم pyspdxtools -i <input_file> --graph -o <output_file> حيث <output_file> هو اسم ملف إخراج بتنسيق صالح لـ pygraphviz (تحقق
من التوثيق هنا).
إذا كنت تستخدم توزيعة مصدرية، جرب تشغيل
pyspdxtools -i tests/spdx/data/SPDXJSONExample-v2.3.spdx.json --graph -o SPDXJSONExample-v2.3.spdx.png لتوليد
ملف png مع نظرة عامة على بنية ملف المثال.
نموذج البيانات
spdx_tools.spdx.model نموذج بيانات SPDX v2.3 الداخلي (v2.2 هو ببساطة مجموعة فرعية منه). جميع الفئات ذات الصلة لإنشاء مستندات SPDX معروضة في __init__.py الموجود هنا.@dataclass_with_properties، وهو امتداد مخصص لـ @dataclass.ConstructorTypeError أو TypeError، على التوالي). هذا يجعل من السهل اكتشاف الخصائص غير الصالحة مبكرًا وبناء مستندات صالحة فقط.list.append(item) ستلتف على فحص الأنواع (سيتم إثارة TypeError مع ذلك عند قراءة list مرة أخرى). نوصي باستخدام list = list + [item] بدلاً من ذلك.Document من وحدة document.py، والتي ترتبط بجميع الفئات الأخرى.documentDescribes وhasFiles: سيتم تحويل هذه الحقول إلى علاقات في نموذج البيانات الداخلي. نظرًا لأنها مهملة، لن تتم كتابة هذه الحقول في المخرجات.التحليل
parse_file(file_name) من وحدة parse_anything.py لتحليل أي ملف بأحد نهايات الملفات المدعومة.Document. التحليل غير الناجح سيثير SPDXParsingError مع قائمة بجميع المشكلات التي تمت مواجهتها.التحقق
validate_full_spdx_document(document) للتحقق من مثيل من فئة Document.ValidationMessage، يتكون كل منها من سلسلة تصف عدم الصلاحية وValidationContext لتحديد مصدر خطأ التحقق بدقة.SPDX-2.2 وSPDX-2.3 فقط مدعومان من هذه الأداة.الكتابة
write_file(document, file_name) من وحدة write_anything.py لكتابة مثيل Document إلى الملف المحدد.
يتم تحديد تنسيق التسلسل من نهاية اسم الملف.write_file(document, file_name, validate=False).
تحذير: يمكن تسلسل المستندات الصالحة فقط بشكل موثوق؛ تسلسل المستندات غير الصالحة غير مدعوم.فيما يلي بعض الأمثلة على حالات الاستخدام الممكنة لمساعدتك على البدء بسرعة مع spdx-tools. إذا كنت تريد المزيد من الأمثلة، مثل كيفية إنشاء مستند SPDX من الصفر، ألقِ نظرة على مجلد الأمثلة.
import logging
from license_expression import get_spdx_licensing