Subpy-это библиотека для определения подмножества языка питона и запроса ASTS для свойств языка, которые определены как наборы функций.
Многие проекты направлены на работу с конкретными подмножествами Python, которые поддаются статическому анализу и выводу типа , Subpy является просто статической библиотекой анализа для проверки подмножеств с намерением предоставить более информативную отчетность по ошибкам для конечных пользователей.
Вход в 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!' Например, если мы хотим исключить использование понимания списков и установить понимание, мы могли бы определить подмножество питона, которое исключает эти функции.
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 Нет никаких зависимостей, кроме стандартной библиотеки.
Copyright (C) 2013, Continuum Analytics, Inc. Все права защищены.
Перераспределение и использование в исходных и бинарных формах, с изменением или без них разрешены при условии, что следующие условия выполняются:
Перераспределение исходного кода должно сохранить вышеуказанное уведомление об авторском праве, этот список условий и следующее отказ от ответственности.
Перераспределение в двоичной форме должно воспроизводить вышеуказанное уведомление об авторском праве, этот список условий и следующее отказ от ответственности в документации и/или других материалах, предоставленных при распределении. Это программное обеспечение предоставляется владельцами авторского права и участниками «как есть», и любые явные или подразумеваемые гарантии, включая, но не ограничиваясь, подразумеваемые гарантии товарной пригодности и пригодности для определенной цели, отказаны. Ни в коем случае владелец авторского права не несет ответственности за любые прямые, косвенные, случайные, особые, примерные или косвенные убытки (включая, но не ограничиваясь, закупку заместительных товаров или услуг; потеря использования, данные или прибыль; или перерыв в бизнесе), однако, вызвана и по какой -либо теории, будь то в контракте, строгое лику Советуют о возможности такого ущерба.