从swagger的定义文件生成view的代码。
pyramid-swagger-router的Python项目详细描述
从swagger的定义文件生成view的代码。
激励
这个计划的动机如下。
Code generation is better than meta-programming, and onetime scaffold is simply bad.
代码生成比元编程好
理性:
- 读取生成的代码比读取元编程代码更容易
- 如果要停止代码生成,只需停止它(停止使用代码生成比停止元编程更容易)
一次性脚手架很糟糕
一次性脚手架(像一个炊事员)对第一次创造是好的。但是,在改变scaffold实现之后,迁移过去生成的代码,手工处理(自己)。所以,这很糟糕。
可以,多次调用棱锥体swagger路由器命令(因为通过fst(完整语法树)合并代码(thunks to redbaron))。
路由器在哪里?
什么都没有。这是用于路由设置(包括视图配置)的代码生成工具。
如何使用
如何使用这个。
$ pip install pyramid-swagger-router $ pyramid-swagger-router <swagger.yaml> <dst>
如果你经过下面这样的大摇大摆。
swagger:'2.0'info:title:Pet Shop Example APIversion:"0.1"consumes:-app.pet.views.ication/jsonproduces:-app.pet.views.ication/jsonpaths:/pets:x-pyramid-route-name:petsget:tags:[Pets]operationId:app.pet.views.get_petssummary:Get all petsparameters:-name:animal_typein:querytype:stringpattern:"^[a-zA-Z0-9]*$"-name:limitin:querytype:integerminimum:0default:100responses:200:description:Return petsschema:type:arrayitems:$ref:'#/definitions/Pet'/pets/{pet_id}:x-pyramid-route-name:petget:tags:[Pets]operationId:app.pet.views.get_petsummary:Get a single petparameters:-$ref:'#/parameters/pet_id'responses:200:description:Return petschema:$ref:'#/definitions/Pet'404:description:Pet does not existput:tags:[Pets]operationId:app.pet.views.put_petsummary:Create or update a petparameters:-$ref:'#/parameters/pet_id'-name:petin:bodyschema:$ref:'#/definitions/Pet'responses:200:description:Pet updated201:description:New pet createddelete:tags:[Pets]operationId:app.pet.views.delete_petsummary:Remove a petparameters:-$ref:'#/parameters/pet_id'responses:204:description:Pet was deleted404:description:Pet does not existparameters:pet_id:name:pet_iddescription:Pet's Unique identifierin:pathtype:stringrequired:truepattern:"^[a-zA-Z0-9-]+$"definitions:Pet:type:objectrequired:-name-animal_typeproperties:id:type:stringdescription:Unique identifierexample:"123"readOnly:truename:type:stringdescription:Pet's nameexample:"Susie"minLength:1maxLength:100animal_type:type:stringdescription:Kind of animalexample:"cat"minLength:1tags:type:objectdescription:Custom tagscreated:type:stringformat:date-timedescription:Creation timeexample:"2015-07-07T15:49:51.230+02:00"readOnly:true
输出代码如下。
app/pet/初始化py
defincludeme_swagger_router(config):config.add_route('pets','/pets')config.add_route('pet','/pets/{pet_id}')config.scan('.views')defincludeme(config):config.include(includeme_swagger_router)
app/pet/views.py
frompyramid.viewimport(view_config)@view_config(renderer='json',request_method='GET',route_name='pets')defget_pets(context,request):""" Get all pets request.GET: * 'animal_type' - `{"type": "string", "pattern": "^[a-zA-Z0-9]*$"}` * 'limit' - `{"type": "integer", "minimum": 0, "default": 100}` """return{}@view_config(renderer='json',request_method='GET',route_name='pet')defget_pet(context,request):""" Get a single pet request.matchdict: * 'pet_id' Pet's Unique identifier `{"type": "string", "required": true, "pattern": "^[a-zA-Z0-9-]+$"}` """return{}@view_config(renderer='json',request_method='PUT',route_name='pet')defput_pet(context,request):""" Create or update a pet request.matchdict: * 'pet_id' Pet's Unique identifier `{"type": "string", "required": true, "pattern": "^[a-zA-Z0-9-]+$"}` request.json_body: ``` { "type": "object", "required": [ "name", "animal_type" ], "properties": { "id": { "type": "string", "description": "Unique identifier", "example": "123", "readOnly": true }, "name": { "type": "string", "description": "Pet's name", "example": "Susie", "minLength": 1, "maxLength": 100 }, "animal_type": { "type": "string", "description": "Kind of animal", "example": "cat", "minLength": 1 }, "tags": { "type": "object", "description": "Custom tags" }, "created": { "type": "string", "format": "date-time", "description": "Creation time", "example": "2015-07-07T15:49:51.230+02:00", "readOnly": true } } } ``` """return{}@view_config(renderer='json',request_method='DELETE',route_name='pet')defdelete_pet(context,request):""" Remove a pet request.matchdict: * 'pet_id' Pet's Unique identifier `{"type": "string", "required": true, "pattern": "^[a-zA-Z0-9-]+$"}` """return{}
附录1
如果要设置自定义路由名称,请使用x-pyramid-route-name。