This commit is the 14th commit of a comprehensive refactor of our HTTP framework. See odoo/odoo#78857 for complete historic, discussions and rationnals. * `request.uid = x` => `request.update_env(user=x)`. * `request.context = x` => `request.update_env(context=x)`. * `request.context = dict(request.context, x=y)` => `request.update_context(x=y)`. * `request.cr = None` => `request.cr.close()`. * `http.mono_db()` => `request.db`. * `http.dispatch_rpc()` => `service.dispatch_rpc()`. * `@service.model.check` => `service.model.retrying()`. * `request.endpoint` => `env['ir.http']._match(request.httprequest.path)[0].endpoint`. * `request.routing_iteration `=> `removed`. * `request.jsonrequest` => `request.dispatcher.jsonrequest`. Note that `request.params` is now set much later in the process. If you are in a situation where you values from the query string or the http body you can use `request.get_http_params()`. Note that using the new `request.future_response`, it is possible to add headers and cookies on the response object before the response object is initialized. Please note that headers/cookies saved on the future response will NOT be injected in case of error. PR: odoo#78857 Task: 2571224
40 lines
1.0 KiB
Python
40 lines
1.0 KiB
Python
# Part of Odoo. See LICENSE file for full copyright and licensing details.
|
|
|
|
from . import common
|
|
from . import db
|
|
from . import model
|
|
from . import server
|
|
|
|
import logging
|
|
import threading
|
|
|
|
#.apidoc title: RPC Services
|
|
|
|
""" Classes of this module implement the network protocols that the
|
|
OpenERP server uses to communicate with remote clients.
|
|
|
|
Some classes are mostly utilities, whose API need not be visible to
|
|
the average user/developer. Study them only if you are about to
|
|
implement an extension to the network protocols, or need to debug some
|
|
low-level behavior of the wire.
|
|
"""
|
|
|
|
_dispatchers = {
|
|
'common': common.dispatch,
|
|
'db': db.dispatch,
|
|
'object': model.dispatch,
|
|
}
|
|
|
|
def dispatch_rpc(service_name, method, params):
|
|
""" Handle a RPC call.
|
|
|
|
This is pure Python code, the actual marshalling (from/to XML/JSON)
|
|
is done in a upper layer.
|
|
"""
|
|
threading.current_thread().uid = None
|
|
threading.current_thread().dbname = None
|
|
|
|
dispatch = _dispatchers[service_name]
|
|
|
|
return dispatch(method, params)
|