diff --git a/openerp/netsvc.py b/openerp/netsvc.py index ebe5a127271..fead3bd7908 100644 --- a/openerp/netsvc.py +++ b/openerp/netsvc.py @@ -50,9 +50,9 @@ def abort_response(dummy_1, description, dummy_2, details): raise openerp.osv.osv.except_osv(description, details) class Service(object): - """ Base class for *Local* services - - Functionality here is trusted, no authentication. + """ Base class for Local services + Functionality here is trusted, no authentication. + Workflow engine and reports subclass this. """ _services = {} def __init__(self, name): diff --git a/openerp/service/__init__.py b/openerp/service/__init__.py index 736f7d46278..f8752732cdf 100644 --- a/openerp/service/__init__.py +++ b/openerp/service/__init__.py @@ -28,12 +28,12 @@ import cron import netrpc_server import web_services import web_services +import wsgi_server import openerp.modules import openerp.netsvc import openerp.osv import openerp.tools -import openerp.service.wsgi_server #.apidoc title: RPC Services @@ -69,33 +69,32 @@ def start_internal(): return openerp.netsvc.init_logger() openerp.modules.loading.open_openerp_namespace() + # Instantiate local services (this is a legacy design). openerp.osv.osv.start_object_proxy() # Export (for RPC) services. - web_services.start_web_services() + web_services.start_service() + load_server_wide_modules() start_internal_done = True def start_services(): """ Start all services including http, netrpc and cron """ start_internal() - # Initialize the NETRPC server. - netrpc_server.init_servers() - - # Start the main cron thread. - cron.start_master_thread() - + netrpc_server.start_service() # Start the WSGI server. - openerp.service.wsgi_server.start_server() + wsgi_server.start_service() + # Start the main cron thread. + cron.start_service() def stop_services(): """ Stop all services. """ - # stop scheduling new jobs; we will have to wait for the jobs to complete below - openerp.cron.cancel_all() + # stop services + cron.stop_service() + netrpc_server.stop_service() + wsgi_server.stop_service() - netrpc_server.Server.quitAll() - openerp.service.wsgi_server.stop_server() _logger.info("Initiating shutdown") _logger.info("Hit CTRL-C again or send a second signal to force the shutdown.") logging.shutdown() diff --git a/openerp/service/cron.py b/openerp/service/cron.py index 08ce6793c75..077d19bbc71 100644 --- a/openerp/service/cron.py +++ b/openerp/service/cron.py @@ -52,7 +52,7 @@ def cron_runner(number): if not acquired: break -def start_master_thread(): +def start_service(): """ Start the above runner function in a daemon thread. The thread is a typical daemon thread: it will never quit and must be @@ -68,4 +68,7 @@ def start_master_thread(): t.start() _logger.debug("cron%d started!" % i) +def stop_service(): + pass + # vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: diff --git a/openerp/service/http_server.py b/openerp/service/http_server.py index 20206cf147d..1496ea71646 100644 --- a/openerp/service/http_server.py +++ b/openerp/service/http_server.py @@ -176,6 +176,4 @@ class OpenERPAuthProvider(AuthProvider): self.auth_tries += 1 raise AuthRequiredExc(atype='Basic', realm=self.realm) -#eof - # vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: diff --git a/openerp/service/netrpc_server.py b/openerp/service/netrpc_server.py index 677f9b33900..a3e4ade7210 100644 --- a/openerp/service/netrpc_server.py +++ b/openerp/service/netrpc_server.py @@ -254,9 +254,12 @@ class TinySocketServerThread(threading.Thread,Server): netrpcd = None -def init_servers(): +def start_service(): global netrpcd if tools.config.get('netrpc', False): netrpcd = TinySocketServerThread(tools.config.get('netrpc_interface', ''), int(tools.config.get('netrpc_port', 8070))) +def stop_service(): + Server.quitAll() + # vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: diff --git a/openerp/service/web_services.py b/openerp/service/web_services.py index 19be853859d..5ce5b546dc7 100644 --- a/openerp/service/web_services.py +++ b/openerp/service/web_services.py @@ -605,63 +605,6 @@ class objects_proxy(netsvc.ExportService): return res -# -# Wizard ID: 1 -# - None = end of wizard -# -# Wizard Type: 'form' -# - form -# - print -# -# Wizard datas: {} -# TODO: change local request to OSE request/reply pattern -# -class wizard(netsvc.ExportService): - def __init__(self, name='wizard'): - netsvc.ExportService.__init__(self,name) - self.id = 0 - self.wiz_datas = {} - self.wiz_name = {} - self.wiz_uid = {} - - def dispatch(self, method, params): - (db, uid, passwd ) = params[0:3] - threading.current_thread().uid = uid - params = params[3:] - if method not in ['execute','create']: - raise KeyError("Method not supported %s" % method) - security.check(db,uid,passwd) - fn = getattr(self, 'exp_'+method) - res = fn(db, uid, *params) - return res - - def _execute(self, db, uid, wiz_id, datas, action, context): - self.wiz_datas[wiz_id].update(datas) - wiz = netsvc.LocalService('wizard.'+self.wiz_name[wiz_id]) - return wiz.execute(db, uid, self.wiz_datas[wiz_id], action, context) - - def exp_create(self, db, uid, wiz_name, datas=None): - if not datas: - datas={} -#FIXME: this is not thread-safe - self.id += 1 - self.wiz_datas[self.id] = {} - self.wiz_name[self.id] = wiz_name - self.wiz_uid[self.id] = uid - return self.id - - def exp_execute(self, db, uid, wiz_id, datas, action='init', context=None): - if not context: - context={} - - if wiz_id in self.wiz_uid: - if self.wiz_uid[wiz_id] == uid: - return self._execute(db, uid, wiz_id, datas, action, context) - else: - raise openerp.exceptions.AccessDenied() - else: - raise openerp.exceptions.Warning('Wizard not found.') - # # TODO: set a maximum report number per user to avoid DOS attacks # @@ -798,13 +741,11 @@ class report_spool(netsvc.ExportService): raise Exception, 'ReportNotFound' -def start_web_services(): +def start_service(): db() common() objects_proxy() - wizard() report_spool() # vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: - diff --git a/openerp/service/wsgi_server.py b/openerp/service/wsgi_server.py index a73617d8510..f6d7a0582f7 100644 --- a/openerp/service/wsgi_server.py +++ b/openerp/service/wsgi_server.py @@ -428,14 +428,14 @@ def serve(): _logger.info('HTTP service (werkzeug) running on %s:%s', interface, port) httpd.serve_forever() -def start_server(): +def start_service(): """ Call serve() in its own thread. The WSGI server can be shutdown with stop_server() below. """ threading.Thread(target=serve).start() -def stop_server(): +def stop_service(): """ Initiate the shutdown of the WSGI server. The server is supposed to have been started by start_server() above.