Subpy هي مكتبة لتحديد مجموعات فرعية من لغة Python والاستعلام عن ASTS لخصائص مستوى اللغة المحددة كمجموعات من الميزات.
تهدف العديد من المشاريع إلى العمل مع مجموعات فرعية محددة من Python قابلة للتحليل الثابت والاستدلال على النوع ، وهي ببساطة مكتبة تحليل ثابت للتحقق من مجموعات فرعية بقصد توفير المزيد من الإبلاغ عن خطأ مفيد للمستخدمين النهائيين.
يمكن أن تكون الإدخال إلى checker إما وحدة أو دالة أو رمز المصدر كسلسلة. يقوم بإرجاع قاموس القوائم المرتبطة برمز تعداد feature والقيم بأرقام الأسطر التي يتم فيها اكتشاف الميزة.
> >> from subpy import checker
> >> import io
> >> print checker ( io )
{ 3 : [ 98 ],
5 : [ 78 , 81 , 84 , 87 ],
9 : [ 78 , 81 , 84 , 87 ],
10 : [ 81 , 84 , 87 ],
32 : [ 92 , 96 ],
34 : [ 79 ]} مطابقة رموز الميزات مع المفاتيح في القاموس نرى المعلومات التي تخبرنا أنه في وحدة io في المكتبة القياسية:
مثال باستخدام مدقق مستوى الوظيفة:
from subpy import checker
from subpy . features import ListComp
def example1 ():
return [ x ** 2 for x in range ( 25 )]
def example2 ():
return 'hello'
features = checker ( example1 )
if ListComp in features :
print 'You used a list comprehension on lines %r' % ( features [ ListComp ])
features = checker ( example2 )
if ListComp not in features :
print 'You did not use any list comprehensions!' على سبيل المثال ، إذا كنا نريد استبعاد استخدام اختصارات القائمة وتحديد الشاملات ، فيمكننا تحديد مجموعة فرعية من Python التي تستبعد هذه الميزات.
MyPythonSubset = FullPython - { ListComp , SetComp } يمكن استخدام أمر validator لرفعه عند اكتشاف الميزات غير المدعومة في المصدر المحدد. على سبيل المثال ، سندعم مجموعة ميزة Python باستثناء اختصارات القائمة وتعيين الشاملات.
from subpy import validator , FullPython , FeatureNotSupported
from subpy . features import ListComp , SetComp
def example ():
return [ x ** 2 for x in range ( 25 )]
my_features = FullPython - { ListComp , SetComp }
validator ( example , features = my_features ) File "<stdin>" , line 2
return [ x ** 2 for x in range ( 25 )]
^
subpy . validate . FeatureNotSupported : ListCompSubpy قادر حاليًا على تحليل المكتبة القياسية بأكملها ويمكن استخدامها للاستعلام عن بعض حقائق التوافه المثيرة للاهتمام.
from subpy import detect
from subpy . stdlib import libraries
from subpy . features import Metaclasses , MInheritance , Exec
import importlib
print ( 'Libraries with Multiple Inheritance and Metaclasses:' )
for lib in libraries :
mod = importlib . import_module ( lib )
features = detect ( mod )
if Metaclasses in features and MInheritance in features :
print ( lib ) Libraries with Multiple Inheritance and Metaclasses:
io
أو للاستعلام عن تنفيذ رمز غير آمن:
print ( 'Libraries with Exec' )
for lib in libraries :
mod = importlib . import_module ( lib )
features = detect ( mod )
if Exec in features :
print ( lib ) Libraries with Exec
ihooks
site
cgi
rexec
Bastion
imputil
trace
timeit
cProfile
doctest
code
bdb
runpy
profile
collections
الميزات المدعومة حاليًا هي تعداد مع القيم الواردة أدناه:
لاختبار التشغيل:
$ python -m unittest discover subpy/tests المنطق الأساسي مكتفي ذاتيًا في features.py و validate.py التي ستعمل كوحدات مستقلة بدون حزمة فرعية ، والتي تتضمن مجموعة الاختبار. لا توجد تبعيات غير المكتبة القياسية.
حقوق الطبع والنشر (C) 2013 ، Continuum Analytics ، Inc. جميع الحقوق محفوظة.
يُسمح بإعادة التوزيع والاستخدام في النماذج المصدر والثنائية ، مع أو بدون تعديل ، شريطة استيفاء الشروط التالية:
يجب أن تحتفظ إعادة توزيع رمز المصدر بإشعار حقوق الطبع والنشر أعلاه ، وقائمة الشروط هذه وإخلاء المسؤولية التالية.
يجب أن تقوم إعادة التوزيع في النموذج الثنائي بإعادة إنتاج إشعار حقوق الطبع والنشر أعلاه ، وقائمة الشروط هذه وإخلاء المسؤولية التالية في الوثائق و/أو المواد الأخرى المتوفرة مع التوزيع. يتم توفير هذا البرنامج من قبل حاملي حقوق الطبع والنشر والمساهمين "كما هو" وأي ضمانات صريحة أو ضمنية ، بما في ذلك ، على سبيل المثال لا الحصر ، الضمانات الضمنية للتسويق والملاءمة لغرض معين. لا يجوز بأي حال من الأحوال أن يتحمل حامل حقوق الطبع والنشر أو المساهمين أي أضرار مباشرة أو غير مباشرة أو عرضية أو خاصة أو مثالية أو مثالية (بما في ذلك ، على سبيل المثال لا الحصر ، شراء السلع أو الخدمات البديلة ؛ إمكانية هذا الضرر.