Skip to content

odoo-plus/odootools-openapi

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

57 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

OdooTools OpenAPI

This package is a library and an a plugin for odoo-tools.

When used as a library, it define an orm that helps unwrap json body into python objects and Odoo objects back into JSON.

When used as a command, it will generate an Odoo Module with api models and controllers as defined in an openapi3 spec with custom extensions for Odoo.

The command can be invoked as such:

odootools gen openapi --destination my_module_api --path path_to_spec
odootools gen openapi --destination my_module_api --url url_to_spec

Then the module will be created inside the destination path. It will use the title/description of the api to define the name/summary of the module.

Example API:

openapi: 3.0.0
info:
  contact:
    email: info@odoo.plus
    name: Loïc Faure-Lacroix
    url: https://www.odoo.plus
  description: ''
  license:
    name: Apache 2.0
    url: https://www.apache.org/licenses/LICENSE-2.0.html
  title: ''
  version: '1'

tags:
  - name: projects
    description: Super projects

components:
  schemas:
    ApiResult:
      description: Api Result
      properties:
        id:
          title: Resource Id
          type: integer
      type: object
    Project:
      description: Project
      x-model: project.project
      properties:
        id:
          title: ID
          type: integer
        name:
          title: Name
          type: string

paths:
  /project/{project}:
    get:
      tags:
        - projects
      parameters:
        - name: project
          x-model:
            $ref: "#/components/schemas/Project"
          in: path
          required: true
          schema:
            type: integer
      description: Get a project
      operationId: get_project
      responses:
        200:
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ApiResult'
          description: Project

Result controller:

from odootools_openapi.odoo.http import request, route, Controller

from ..api_models.apiresult import ApiResult


class Projects(Controller):
    """
    Super projects
    """

    @route(
        route=["/project/<model('project.project'):project>"],
        methods=['GET'],
        csrf=False,
        type='plainjson',
        auth='none',
    )
    def get_project(self, project):
        """
        Get a project
        """
        pass