用于WSGI应用的灵活调度器

gargant.dispatch的Python项目详细描述


适用于WSGI的灵活调度程序。

基本用法

编写dispathing tree,并将wsgi应用程序注册到case

from wsgiref.simple_server import make_server
from gargant.dispatch import Node, path_matching, make_wsgi_app

from path.to.yours import wsgi_app


tree = Node((path_matching(['']),),
            case=wsgi_app,
            name='first')

app = make_wsgi_app(tree)

httpd = make_server('', 8000, app)
httpb.serve_forever()

当路径为“/”时,将调用已注册的应用程序(wsgi_app)。

节点

dispatch不仅仅用于创建wsgi应用程序。 它可以处理environ并根据需要返回一个值。

您可以对案例应用任何内容

>>> tree = Node((path_matching(['']),),
...             case='dolls')
>>>
>>> node = tree({'PATH_INFO': '/'})
>>> node.case  # 'dolls'

层次结构

节点类可以采用如下参数“children”:

>>> tree = Node((path_matching(['']),),
...             case='dolls',
...             children=(
...                 Node((path_matching['fifth']),
...                      case='shinku'),
...             ))
>>>
>>> node = tree({'PATH_INFO': '/fifth'})
>>> node.case  # 'shinku'

没有匹配的子级,将匹配父级:

>>> node = tree({'PATH_INFO': '/'})
>>> node.case  # 'dolls'

匹配

路径匹配只是匹配模式之一, 您也可以使用方法匹配:

>>> tree = Node((path_matching(['']),
                 method_matching('get')),
...             case='dolls',
...             )
>>>
>>> node = tree({'PATH_INFO': '/',
...              'REQUEST_METHOD': 'GET'})
>>> node.case  # 'dolls'

方法模式返回接受environ并返回 一些价值观。 匹配返回的所有值都可以作为true处理。 节点将是“匹配”的句柄。

匹配返回的值将存储在 node.matched作为这些的列表。

url参数

使用此行为,路径匹配可以从url获取参数:

>>> tree = Node((path_matching(['']),),
...             case='doll_list',
...             children=(
...                 Node((path_matching(['{doll}']),),
...                       case='doll_detail',
...                 ),
...             ))
>>>
>>> node = tree({'PATH_INFO': '/first'})
>>> node.case  # 'doll_detail'
>>> node.matched[0]['doll']  # 'first'

适配器

节点可以使用名为adapter\u factory的关键字arg。 它接受node.matched并返回一些您喜欢的可调用项:

>>> tree = Node((path_matching(['']),),
...             case='dolls',
...             children=(
...                 Node((path_matching(['fifth']),),
...                       case='shinku',
...                       adapter_factory=lambda matched: lambda x: x + ' kawaii'
...                 ),
...             ),
...             adapter_factory=lambda matched: lambda x: x + ' is'
...             )
>>>
>>> node = tree({'PATH_INFO': '/fifth'})
>>> node.case  # 'shinku'
>>> doll = 'shinku'
>>> root_to_leaf = reversed(list(node))  # [dolls node, shinku node]
>>> for node in root_to_leaf:
...     doll = node.adapter(doll)
...
>>> doll  # 'shinku is kawaii'

在这种情况下,这些适配器工厂将返回简单的函数, 但是gargant.dispatch假设您返回适配器类。

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

推荐PyPI第三方库


热门话题
导入javalibGDX项目后发生eclipse错误   如何将简单java游戏放入窗口(小程序)   jakarta ee Java从字节数组读取数据结构   使用工厂方法的Java抽象工厂与原型   java分配给字符串变量的内存和时间代价是多少?   onStart()中的java无止境循环   java如何从命令行运行Altium designer录制的宏?   使用向量、距离和图形   java局部旋转在openGL和LWJGL中的具体实现   测试从java运行Vasco OTP exe,并获取我的应用程序中使用的生成OTP   java从数据库查询中重新格式化json   java我需要用过滤的数组项检索MongoDB的对象   流简单Java服务器/客户端不工作?   Java从字符串的int-like子字符串中获取数字?   线程“AWTEventQueue0”java中的Swing异常中的VLCJ。lang.AbstractMethodError   jframe将素因子代码合并到JPanel Java中   Java中定义字符串常量的编程实践   java如何将安卓 ImageView捕捉到屏幕上的某个位置?   使用SeleniumWebDriver和Java测试开关选项卡