f4b0370943fd5459850098b1a61b89675f79240a
This commit is the 6th commit of a comprehensive refactor of our HTTP framework. See odoo/odoo#78857 for complete historic, discussions and rationnals. There are some routes that must work even when the user is not connected to a database yet. Two obvious examples are the index (/) and the database selector (/web/database/selector). Accessing those routes should be possible even when the user is not connected to a database yet, the `nodb_routing_map` and the `_serve_nodb` method fulfill this need. Along with the introduction of the `_serve_nodb` method, we also introduce the match -> pre dispatch -> dispatch -> post dispatch sequence. `match` matches an endpoint using the http path, `pre_dispatch` prepares the system, `dispatch` is the actual endpoint call, `post_dispatch` cleanups the system and add some http headers to the http response. At the beginning, when an endpoint is matched, we retrieve the `routing` dictionnary that is attached to the endpoint method. This dictionnary contains the information set by the `@route` decorator, among other values is the routing type `http` or `json`. This routing type is used to specialize the request via one of the dispatchers: HttpDispatcher for http and JsonDispatcher for json. Via the dispatchers, it is possible to add custom behavior in the form of (pre_|post_)dispatch override. One example of such custom behavior is the way the request body will be loaded: urllib.parse.parse_qs (http) vs json.loads (json). Before this work, it was not possible for multiple dispatchers to be compatible with a same request mimetype. Because `JsonRequest` was implementing the support for `application/json` (and like) mimetypes, all requests having a body's mimetype `application/json` were considered JSON-RPC2 (the protocol implemented by `JsonRequest`) even if the request was actually bare json data. With the introduction of the `is_compatible_with` classmethod, multiple dispatchers can be compatible with a same mimetype and it is up to the `@route(type=...)` param to define which dispatcher should be used with this route. PR: odoo#78857 Task: 2571224
…
…
…
Odoo
Odoo is a suite of web based open source business apps.
The main Odoo Apps include an Open Source CRM, Website Builder, eCommerce, Warehouse Management, Project Management, Billing & Accounting, Point of Sale, Human Resources, Marketing, Manufacturing, ...
Odoo Apps can be used as stand-alone applications, but they also integrate seamlessly so you get a full-featured Open Source ERP when you install several Apps.
Getting started with Odoo
For a standard installation please follow the Setup instructions from the documentation.
To learn the software, we recommend the Odoo eLearning, or Scale-up, the business game. Developers can start with the developer tutorials
Languages
Python
49.6%
JavaScript
47.8%
SCSS
2%
CSS
0.3%
HTML
0.2%