限制python方法

restrict的Python项目详细描述


限制

限制python方法

示例1

fromrestrictimport*importbuiltinsr=Restrictor()restriction=Restriction(builtins,['__import__','__build_class__'],Access.BY_CASE)r.restrict(restriction)withcase(hash(id(restriction)))asensured_call:collections=ensured_call(builtins.__import__,'collections')Y=ensured_call(builtins.__build_class__,lambda:...,'Y')assertisinstance(Y,type)print(collections.defaultdict(list))try:importmathexceptCaseError:print('Case error on import')try:classX:passexceptCaseError:print('Case error on build class')

输出

defaultdict(<class 'list'>, {})
Case error on import
Case error on build class

例2

fromrestrictimport*classTaskManager:def__init__(self):self.tasks={}defadd_task(self,task:str,*items):self.tasks[task]=itemsdefpop_task(self):returnself.tasks.popitem()defget_tasks(self,task:str):returnself.tasks[task]defadd(self,x1,x2):returnx1+x2restrictor=Restrictor()

按情况

restriction=Restriction(TaskManager,["add_task","pop_task",TaskManager.get_tasks,"add"],Access.BY_CASE)restrictor.restrict(restriction)t=TaskManager()try:t.add(3,2)exceptCaseError:print("A case error just occured")withcase(hash(id(restriction)))asensured_call:z=ensured_call(t.add,3,2)assertz==5

输出

A case error just occured

按所有者

restrictor = Restrictor()
restriction = Restriction(
    TaskManager, ["add_task", "pop_task", TaskManager.get_tasks, "add"], Access.BY_OWNER
)
restrictor.restrict(restriction)
t = TaskManager()
t.add_task("a", "b")
y = t.add(3, 2)
assert y == 5
try:
    z = TaskManager.add(object(), 3, 2)
    assert z == 5
except OwnerError as exc:
    print("An owner error just occured")

输出

An owner error just occured

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
用于切换状态结果的枚举的java输入   检测*NIX上打开的端口时出现java问题   java捕获和保存屏幕截图   java SLF4JLogback:基于日志级别的多模式   Java从字符串中删除动态子字符串   在spring引导中contextLoads测试时运行java Liquibase   基于规则集的任意嵌套POJO的java任意就地转换   java如何做,边做边循环这段代码?   java是什么导致jmh测量中的错误?   java Spring RabbitTemplate执行方法可见性   java jms创建连接http超时weblogic   java如何在JMapViewer中的两点之间放置像箭头一样的图像   在我的形状计算器Java程序中使用带有Switch/Case语句的循环   字符串如何在Java中比较字符和数字