diff options
| author | pinky <> | 2006-12-07 13:41:40 +0000 |
|---|---|---|
| committer | pinky <> | 2006-12-07 13:41:40 +0000 |
| commit | 004a0b996ff8f269451e07346f71a129a1f3fbaf (patch) | |
| tree | 48f43c1fc2ca4c1f4d5648e7e73553d3f4ccae06 /bin/tinyerp-server.py | |
New trunk
bzr revid: pinky-3f10ee12cea3c4c75cef44ab04ad33ef47432907
Diffstat (limited to 'bin/tinyerp-server.py')
| -rwxr-xr-x | bin/tinyerp-server.py | 232 |
1 files changed, 232 insertions, 0 deletions
diff --git a/bin/tinyerp-server.py b/bin/tinyerp-server.py new file mode 100755 index 00000000000..12554098e82 --- /dev/null +++ b/bin/tinyerp-server.py @@ -0,0 +1,232 @@ +#!/usr/bin/python + +############################################################################## +# +# Copyright (c) 2004-2006 TINY SPRL. (http://tiny.be) +# +# $Id: tinyerp-server.py 1308 2005-09-08 18:02:01Z pinky $ +# +# WARNING: This program as such is intended to be used by professional +# programmers who take the whole responsability of assessing all potential +# consequences resulting from its eventual inadequacies and bugs +# End users who are looking for a ready-to-use solution with commercial +# garantees and support are strongly adviced to contact a Free Software +# Service Company +# +# This program is Free Software; you can redistribute it and/or +# modify it under the terms of the GNU General Public License +# as published by the Free Software Foundation; either version 2 +# of the License, or (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +# +############################################################################## + +""" +Tiny ERP - Server +Tiny ERP is an ERP+CRM program for small and medium businesses. + +The whole source code is distributed under the terms of the +GNU Public Licence. + +(c) 2003-TODAY, Fabien Pinckaers - Tiny sprl +""" + +__author__ = 'Fabien Pinckaers, <fp@tiny.be>' +__version__ = '4.0.0' + +import __builtin__ +__builtin__.__dict__['tinyerp_version'] = __version__ +__builtin__.__dict__['tinyerp_version_string'] = "Tiny ERP Server " + __version__ + + + +#---------------------------------------------------------- +# python imports +#---------------------------------------------------------- +import os, signal, sys + +#---------------------------------------------------------- +# get logger +#---------------------------------------------------------- +import netsvc + +netsvc.init_logger() + +logger = netsvc.Logger() + +#----------------------------------------------------------------------- +# import the tools module so that the commandline parameters are parsed +#----------------------------------------------------------------------- +import tools + +if sys.platform=='win32': + import mx.DateTime + import time + mx.DateTime.strptime = lambda x,y: mx.DateTime.mktime(time.strptime(x, y)) + +#os.chdir(tools.file_path_root) + +#---------------------------------------------------------- +# init net service +#---------------------------------------------------------- +logger.notifyChannel("objects", netsvc.LOG_INFO, 'initialising distributed objects services') + +dispatcher = netsvc.Dispatcher() +dispatcher.monitor(signal.SIGINT) + +#--------------------------------------------------------------- +# connect to the database and initialize it with base if needed +#--------------------------------------------------------------- +logger.notifyChannel("init", netsvc.LOG_INFO, 'connecting to database') + +import psycopg +import pooler + +# try to connect to the database +try: +# pooler.init() + pass +except psycopg.OperationalError, err: + logger.notifyChannel("init", netsvc.LOG_ERROR, "could not connect to database '%s'!" % (tools.config["db_name"],)) + + msg = str(err).replace("FATAL:","").strip() + db_msg = "database \"%s\" does not exist" % (tools.config["db_name"],) + + # Note: this is ugly but since psycopg only uses one exception for all errors + # I don't think it's possible to do differently + if msg == db_msg: + print """ + this database does not exist + +You need to create it using the command: + + createdb --encoding=UNICODE '%s' + +When you run tinyerp-server for the first time it will initialise the +database. You may force this behaviour at a later time by using the command: + + ./tinyerp-server --init=all + +Two accounts will be created by default: + 1. login: admin password : admin + 2. login: demo password : demo + +""" % (tools.config["db_name"]) + else: + print "\n "+msg+"\n" + sys.exit(1) + +db_name = tools.config["db_name"] + +# test whether it is needed to initialize the db (the db is empty) +try: + cr = pooler.get_db_only(db_name).cursor() +except psycopg.OperationalError: + logger.notifyChannel("init", netsvc.LOG_INFO, "could not connect to database '%s'!" % db_name,) + cr = None +if cr: + cr.execute("SELECT relname FROM pg_class WHERE relkind='r' AND relname='perm'") + if len(cr.fetchall())==0: +#if False: + print "init db" + tools.init_db(cr) + # in that case, force --init=all + tools.config["init"]["all"] = 1 + tools.config['update']['all'] = 1 + if not tools.config['without_demo']: + tools.config["demo"]['all'] = 1 + cr.close() + +#---------------------------------------------------------- +# launch modules install/upgrade/removes if needed +#---------------------------------------------------------- +if tools.config['upgrade']: + print 'Upgrading new modules...' + import tools.upgrade + (toinit, toupdate) = tools.upgrade.upgrade() + for m in toinit: + tools.config['init'][m] = 1 + for m in toupdate: + tools.config['update'][m] = 1 + +#---------------------------------------------------------- +# import basic modules +#---------------------------------------------------------- +import osv, workflow, report, service + +#---------------------------------------------------------- +# import addons +#---------------------------------------------------------- +import addons + +addons.register_classes() +if tools.config['init'] or tools.config['update']: + pooler.get_db_and_pool(tools.config['db_name'], update_module=True) + +#---------------------------------------------------------- +# translation stuff +#---------------------------------------------------------- +if tools.config["translate_out"]: + import csv + + logger.notifyChannel("init", netsvc.LOG_INFO, 'writing translation file for language %s to %s' % (tools.config["language"], tools.config["translate_out"])) + trans=tools.trans_generate(tools.config["language"], tools.config["translate_modules"]) + writer=csv.writer(file(tools.config["translate_out"], "w")) + for row in trans: + writer.writerow(row) + del trans + logger.notifyChannel("init", netsvc.LOG_INFO, 'translation file written succesfully') + sys.exit(0) + +if tools.config["translate_in"]: + tools.trans_load(tools.config["db_name"], tools.config["translate_in"], tools.config["language"]) + sys.exit(0) + +#---------------------------------------------------------------------------------- +# if we don't want the server to continue to run after initialization, we quit here +#---------------------------------------------------------------------------------- +if tools.config["stop_after_init"]: + sys.exit(0) + +#---------------------------------------------------------- +# Launch Server +#---------------------------------------------------------- +try: + port = int(tools.config["port"]) +except Exception: + logger.notifyChannel("init", netsvc.LOG_ERROR, "invalid port '%s'!" % (tools.config["port"],)) + sys.exit(1) +interface = tools.config["interface"] +secure = tools.config["secure"] + +httpd = netsvc.HttpDaemon(interface,port, secure) + +if tools.config["xmlrpc"]: + xml_gw = netsvc.xmlrpc.RpcGateway('web-services') + httpd.attach("/xmlrpc", xml_gw ) + logger.notifyChannel("web-services", netsvc.LOG_INFO, "starting XML-RPC services, port "+str(port)) + +# +#if tools.config["soap"]: +# soap_gw = netsvc.xmlrpc.RpcGateway('web-services') +# httpd.attach("/soap", soap_gw ) +# logger.notifyChannel("web-services", netsvc.LOG_INFO, 'starting SOAP services, port '+str(port)) +# +if not (netsvc.HAS_SSL and tools.config['secure']): + logger.notifyChannel("web-services", netsvc.LOG_INFO, "You are not using the SSL layer") +else: + logger.notifyChannel("web-services", netsvc.LOG_INFO, "You are using the SSL Layer") + +logger.notifyChannel("web-services", netsvc.LOG_INFO, 'the server is running, waiting for connections...') + + +httpd.start() +dispatcher.run() |
