Subpyは、Python言語のサブセットを定義し、機能のセットとして指定された言語レベルのプロパティのASTをクエリするライブラリです。
多くのプロジェクトは、静的分析とタイプの推論に適した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!' たとえば、リストの包含の使用を除外し、包含を設定する場合は、これらの機能を除外する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に自己完結型です。テストスイートを含むサブピーパッケージのないスタンドアロンモジュールとして機能します。標準ライブラリ以外に依存関係はありません。
Copyright(C)2013、Continuum Analytics、Inc。All Rights Reserved。
変更とバイナリ形式での再配布と使用は、変更を伴うまたは伴わない場合、次の条件が満たされている場合が許可されています。
ソースコードの再配布は、上記の著作権通知、この条件リスト、および次の免責事項を保持する必要があります。
バイナリ形式の再配布は、上記の著作権通知、この条件リスト、および分布に提供されたドキュメントおよび/またはその他の資料の次の免責事項を再現する必要があります。このソフトウェアは、著作権所有者と貢献者によって「現状のまま」、および商品性と特定の目的に対する適合性の暗黙の保証を含むがこれらに限定されない明示的または黙示的な保証が否認されます。いかなる場合でも、著作権所有者または貢献者は、直接的、間接的、偶発的、特別な、例示的、または結果的な損害賠償(代替品またはサービスの調達を含むがこれらに限定されない)に対して責任を負いません。そのような損害の可能性の。