休息的好地方
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)
是一个休息的好地方。
吊床为开发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)