休息的好地方

hammock-rest的Python项目详细描述


#吊床
是一个休息的好地方。
吊床为开发rest服务器的资源提供了友好的方法。
当前支持falcon。

在项目中的某个地方制作一个资源包(使用init.py等等)。
2.将您的资源添加到该包中(请参见下文)。
3.将资源添加到Falcon API(见下文)。
4.使用自动生成的客户端。

资源类:
允许在resources/hello world.py中创建helloworld资源:
``python
import hammock


class helloworld(hammock.resource):
@hammock.get()
def say(self):
return"hello world"
``

url`/helloworld`."hammock.get"decorator将say方法定义为"get/helloworld"的rest方法。

资源)
``

` hammock.patch`或hammock.delete`.
开发人员可以编写一个获取参数或关键字参数的方法,并返回
一些内容,通常是可以在响应体中转换为json格式的对象。参数
将从请求url查询或json正文(取决于使用的方法)自动解析,返回值
将写入响应消息。

此路径可能包含变量,
用大括号括起来,就像在falcon中一样。
-成功代码(默认值:200):将随http响应返回的代码,
如果没有出现错误。
-result_content_type(默认为"application/json"):将在响应头中的内容类型。
-rule_name:请参阅[策略](策略),在下面。

route参数类型

您可以为route方法的参数添加类型。
这些类型在方法的docstring中给出,也会影响cli。
若要记录参数,请向docstring添加行:
`` python
""
:param[<;可选的param type>;]<;param name>;:<;param doc(multiline)>;
"
```
>定义参数类型时,在输入方法之前,参数将转换为正确的类型。如果在转换过程中发生错误,将引发http 400(错误请求)
。特殊情况:

-如果类型为"list",并且将给定单个项,则该项将转换为包含一个项的列表。
-值"none"将不会转换,而是按原样传递。在'list'类型的情况下,将向方法传递一个空列表


可能会导致不同的行为:
-``u headers`:将传递给方法的参数是请求的头。
-``u file`:此方法要求"application/octet stream"作为请求的内容类型,并且流
将传递给``u file`参数。请注意,此方法必须是"put"或"post"。
其他参数将通过url查询参数传递。
-``u list`:当json主体是列表(而不是dict)时,主体将转到此变量。

类名。
例如,如果您的echo class在"your.project.resources.tools.echo.echo"中,
然后将包"your.project.resources"添加到rest.rest类中,资源url将是:
`/tools/echo`,因为它的类名是echo,并且在子包工具中。

包的url组件与其名称不同,
您可以将其添加到包的"init.py"文件:`path="some other name"`。这将用url中的"其他名称"替换包的名称。
-对于类:添加path class member
``python
class some resource(hammock.resource):
path="some other name"
```

在生成的客户机中展开到不同的
方法。您可以使用route`client_method s`
参数,并将方法名映射到将作为客户端请求的
一部分实施的kwargs。


您可以看到这个[示例](./tests/client_methods.py)。


policy


使用策略json文件定义路由策略。
规则是根据[oslo.policy]制定的(http://docs.openstack.org/developer/oslo.policy)。
要使用策略文件,使用
policy_file关键字参数实例化吊床实例。
规则有一个名称和一个布尔表达式,该表达式使用头和目标资源参数进行求值。
-规则名称由规则组和规则名称组合而成资源类名,小写,
,可以使用"policy\u group\u name"类成员重写。将此
成员设置为"false"将不会对该类强制执行策略。
-规则名称是路由方法名称,并且可以使用路由装饰器中的
`rule-name`关键字参数重写。
-全名是`{rule-group}:{rule-name}`
-默认情况下,使用[credentials](./hammock/types/credentials.py)类将头转换为凭据dict,

但可以使用credentials_class参数进行自定义。
-使用吊床引擎将请求转换为dict,并作为目标字段传递给oslo.policy。
-计算表达式:
表达式为key:value tuple。密钥可能是:
*`rule`:则目标引用另一个规则。
*`role`:然后在凭据dict中存储在密钥"role s"中的列表中查找该值。
*项目ID/用户ID/域ID:凭据的项目ID/用户ID/域ID。
*其他:密钥是在凭据规则中搜索,然后,在对python表达式求值之后比较该值:value%target
*[引用](http://docs.openstack.org/developer/oslo.policy/api/oslo_policy.html policy rule expression s)。
*示例:
规则是"凭据项:%(target_entry)s",然后
如果凭据是{credentials{entry':'x'},目标是{target{entry':'x'},
则规则计算为true。
-表达式可能有和/或括号。


方法入口级别。
可以使用
关键字参数将凭据dict注入route方法。例如:

``python
import hammock
import manager


class mysecuredresource(hammock.resource):
@hammock.get()
def get(self,u credentials,resource id):
resource=manager.get(resource id)
="u凭据['project_id']:
引发异常。未授权('get secured resource{}'。格式(resource_id))
返回vm
````

cli

可以使用"hammock.cli.app.app"类启动吊床自动生成客户端的cli。
在您的项目中,覆盖提示、说明、版本或属性。
您可以使用列表启动它吊床客户类。注意,它需要类而不是实例。所有客户端都合并到一个cli中。


\或资源嵌套类作为子命令(递归)。资源和路由方法的名称将自动转换为命令名(无大写、破折号等),但您可以重写此名称,如下所示:

` cli_command_name`属性,对于路由方法,在定义时使用'cli_command_name'参数。其效果如下:

-`none`无效,命令名将从包/类/方法名转换。
-`false'将从cli中删除包/类/方法(及其所有嵌套依赖项)。
-任何其他字符串将用作命令名称。

命令参数

-命令的参数取自它所表示的路由方法。
-`args`转换为位置参数。` kwargs`转换为可选参数。
-类型和文档字符串取自doc string方法:如果doc字符串包含一行:`:param[<;optional param type>;]<;param name>;:<;param help(multi line)>;`。
*类型可以是'str`,`bool`,` int`of`float`指定类型。
*`list`将定义一个cli argparser`nargs='*'`.
*`bool[false]`或'bool[true]`将分别使用'action='store'`或'action='store''false',并键入bool。
-可以使用文档字符串行定义方法的返回值:`:return<;return type>;:<;return help(multi line)>;`,返回值对命令的影响如下:
*`dict`:表示返回值是项,cli将打印一个包含dict键和值的表。cli将添加选项"-f",该选项可以更改输出格式(json、yaml等)。
*`list`:表示返回值是项列表。cli将为每个项打印一个值表,添加可以定义格式的"-f"标志,"-c"选择特定列等。最好返回一个包含相同键的dict列表。如果返回其他类型的列表,cli将把它转换成包含一个键"value"的dict列表。
*其他类型的dict将被打印到cli的stdout。



-命令的文档字符串取自route method doc字符串。

[包](./tests/resources)。
*看看示例[项目](./examples/phoenix)

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

推荐PyPI第三方库


热门话题
java使用AssertJ检查单元测试中映射项内的列表   java如何避免在使用Observable#observeOn时丢失BackPressureException?   java从web服务器读取XML文件   java Spring计划未运行多线程   来自bean的JavaEE扫描注释   java如何将hashMap转换为Json文件   Java中的Scala方法重写   java GUI未按预期显示   用java中属性文件的值替换字符串   java使用不同版本的Excel(2003和2010)对相同字段进行不同格式设置   java简易Android计步器不工作   IDE中的java数据库位置   java如何让for循环迭代超过2.17b次?   java为什么要使用多态性?   java如何设置javax。usb。macos中的属性类   “java”动作:考虑在你的配置中定义一个类型为“org,prprgFrask.Security .Coras.UsDebug,UsDebug”的bean。我做错什么了?   java正在从notifyDataSetChanged上的RecyclerView删除占位符视图?   在java中合并PDF的最佳方法是什么