从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

附录2

当从json请求中取消序列化时,swagger-marshmallow-codegen可能会有帮助。

0.1.3

  • DOCTSHIR>

    0.1.2

    • 修复合并检测错误
    • 在“方法”部分包含参数时发生修复错误

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

推荐PyPI第三方库


热门话题
java在Android Studio中使用while循环显示包含textview对象的数据   创建名为“userController”的bean时发生java错误:通过字段“userService”表示未满足的依赖关系   java PDFBox PDFImageWrite。writeImage未正确处理所有字符   java无法识别代码中的nzec错误   无法更改java TabLayout字体   在Java中使用子字符串删除部分字符串   Java中的listener addPropertyChangeListener方法   java可以同时拖动多个对象   java如何将数组中的值添加到向量中   java为什么在Camel 3.7.3中无法正确计算属性?   与后端问题不同的机器中的java客户端资源   带字符串的java分割字节数组?   java On_选项_项目_选择的方法说明   java如何在画布的父画中画一个圆?   连接超时和打开连接数的java Netty通道配置   java mysql中如何防止向数据库中插入重复数据   升级到macOS Big Sur后,java无法启动Neo4j控制台应用程序   在Java中使用XSLT将XML转换为HTMLString的ajax   java无法使用Apache POI获取Excel工作表中的数据