Subpy é uma biblioteca para definir subconjuntos da linguagem Python e consultar as ASTs para propriedades em nível de idioma especificadas como conjuntos de recursos.
Muitos projetos visam trabalhar com subconjuntos específicos de Python que são passíveis de análise estática e inferência de tipo , a subpy é simplesmente uma biblioteca de análises estáticas para verificar subconjuntos com a intenção de fornecer relatórios de erro mais informativos para usuários finais.
A entrada para o checker pode ser um módulo, função ou código -fonte como string. Ele retorna um dicionário de listas digitadas pelo código de enumeração feature e pelos valores com os números de linha em que o recurso é detectado.
> >> 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 ]} Combinando os códigos de recursos com as chaves no dicionário, vemos as informações que isso está nos dizendo que no módulo io na biblioteca padrão:
Um exemplo usando o verificador de nível de função:
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!' Por exemplo, se quisermos excluir o uso de compreensões da lista e definir compreensões, poderíamos definir um subconjunto de Python que exclui esses recursos.
MyPythonSubset = FullPython - { ListComp , SetComp } O comando validator pode ser usado para aumentar quando os recursos não suportados são detectados na fonte fornecida. Por exemplo, apoiaremos o conjunto de recursos do Python, excluindo compreensões da lista e definirmos compreensões.
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 : ListCompAtualmente, a Subpy é capaz de analisar toda a biblioteca padrão e pode ser usada para consultar alguns fatos interessantes das curiosidades.
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
Ou para consultar a execução de código potencialmente insegura:
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
Os recursos atualmente suportados são uma enumeração com os valores abaixo:
Para testar a execução:
$ python -m unittest discover subpy/tests A lógica do núcleo é independente em features.py e validate.py que funcionarão como módulos independentes sem pacote de subpy, que inclui o conjunto de testes. Não há outras dependências além da biblioteca padrão.
Copyright (c) 2013, Continuum Analytics, Inc. Todos os direitos reservados.
Redistribuição e uso em formulários de origem e binária, com ou sem modificação, são permitidos, desde que as seguintes condições sejam atendidas:
As redistribuições do código -fonte devem manter o aviso de direitos autorais acima, esta lista de condições e o seguinte aviso.
As redistribuições em formato binário devem reproduzir o aviso de direitos autorais acima, esta lista de condições e o seguinte aviso na documentação e/ou outros materiais fornecidos com a distribuição. Este software é fornecido pelos detentores de direitos autorais e colaboradores "como está" e quaisquer garantias expressas ou implícitas, incluindo, entre outros, as garantias implícitas de comercialização e condicionamento físico para um determinado objetivo. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF Aconselhado sobre a possibilidade de tais danos.