The use of an entry point was considered in order to provide an `odoo` command in the path for the packages users, but the generated entry point will first check that all the things in install_requires were provided in a not bright way: it'll check that it matches a distribution name. This does not work because python-chart does not have the distrubtion name "pychart" which is provided by the python-pychart package in debian jessie. Same for suds-jurko which is provided by python-suds in debian stretch but does not have the distribution name "suds". Also, adapted the packages tests to these cli changes.
54 lines
1.8 KiB
Python
54 lines
1.8 KiB
Python
# -*- coding: utf-8 -*-
|
|
|
|
import servicemanager
|
|
import win32api
|
|
import win32process
|
|
import win32service
|
|
import win32serviceutil
|
|
|
|
import subprocess
|
|
import sys
|
|
from os.path import dirname, join, split
|
|
|
|
|
|
execfile(join(dirname(__file__), '..', 'server', 'odoo', 'release.py'))
|
|
|
|
|
|
class OdooService(win32serviceutil.ServiceFramework):
|
|
_svc_name_ = nt_service_name
|
|
_svc_display_name_ = "%s %s" % (nt_service_name, serie)
|
|
|
|
def __init__(self, args):
|
|
win32serviceutil.ServiceFramework.__init__(self, args)
|
|
self.odooprocess = None # Reference to the server's process
|
|
|
|
def SvcStop(self):
|
|
# Before we do anything, tell the SCM we are starting the stop process.
|
|
self.ReportServiceStatus(win32service.SERVICE_STOP_PENDING)
|
|
# Stop the running Odoo: say it's a normal exit
|
|
win32api.TerminateProcess(int(self.odooprocess._handle), 0)
|
|
servicemanager.LogInfoMsg("Odoo stopped correctly")
|
|
|
|
def SvcDoRun(self):
|
|
# We start Odoo as an independent process, but we keep its handle
|
|
service_dir = dirname(sys.argv[0])
|
|
server_dir = split(service_dir)[0]
|
|
server_path = join(server_dir, 'server', 'odoo-bin.exe')
|
|
self.odooprocess = subprocess.Popen(
|
|
[server_path], cwd=server_dir, creationflags=win32process.CREATE_NO_WINDOW
|
|
)
|
|
servicemanager.LogInfoMsg('Odoo up and running')
|
|
# exit with same exit code as Odoo process
|
|
sys.exit(self.odooprocess.wait())
|
|
|
|
|
|
def option_handler(opts):
|
|
# configure the service to auto restart on failures...
|
|
subprocess.call([
|
|
'sc', 'failure', nt_service_name, 'reset=', '0', 'actions=', 'restart/0/restart/0/restart/0'
|
|
])
|
|
|
|
|
|
if __name__ == '__main__':
|
|
win32serviceutil.HandleCommandLine(OdooService, customOptionHandler=option_handler)
|