← Back to team overview

openerp-dev-web team mailing list archive

[Merge] lp:~openerp-dev/openobject-server/vmt-server-lib into lp:openobject-server

 

Olivier Dony (OpenERP) has proposed merging lp:~openerp-dev/openobject-server/vmt-server-lib into lp:openobject-server.

Requested reviews:
  OpenERP Core Team (openerp)

For more details, see:
https://code.launchpad.net/~openerp-dev/openobject-server/vmt-server-lib/+merge/48887
-- 
https://code.launchpad.net/~openerp-dev/openobject-server/vmt-server-lib/+merge/48887
Your team OpenERP R&D Team is subscribed to branch lp:~openerp-dev/openobject-server/vmt-server-lib.
=== renamed directory 'bin' => 'openerp'
=== renamed file 'bin/openerp-server.py' => 'openerp-server.py'
--- bin/openerp-server.py	2011-01-26 16:50:30 +0000
+++ openerp-server.py	2011-02-08 09:37:03 +0000
@@ -40,7 +40,7 @@
 import threading
 import traceback
 
-import release
+import openerp.release as release
 __author__ = release.author
 __version__ = release.version
 
@@ -52,16 +52,19 @@
         sys.stderr.write("Attempted to run OpenERP server as root. This is not good, aborting.\n")
         sys.exit(1)
 
+#-----------------------------------------------------------------------
+# import the tools module so that the commandline parameters are parsed
+#-----------------------------------------------------------------------
+import openerp.tools as tools
+tools.config.parse_config(sys.argv[1:])
+
 #----------------------------------------------------------
 # get logger
 #----------------------------------------------------------
-import netsvc
+import openerp.netsvc as netsvc
+netsvc.init_logger()
 logger = logging.getLogger('server')
 
-#-----------------------------------------------------------------------
-# import the tools module so that the commandline parameters are parsed
-#-----------------------------------------------------------------------
-import tools
 logger.info("OpenERP version - %s", release.version)
 for name, value in [('addons_path', tools.config['addons_path']),
                     ('database hostname', tools.config['db_host'] or 'localhost'),
@@ -84,37 +87,37 @@
 #---------------------------------------------------------------
 # connect to the database and initialize it with base if needed
 #---------------------------------------------------------------
-import pooler
+import openerp.pooler as pooler
 
 #----------------------------------------------------------
 # import basic modules
 #----------------------------------------------------------
-import osv
-import workflow
-import report
-import service
+import openerp.osv as osv
+import openerp.workflow as workflow
+import openerp.report as report
+import openerp.service as service
 
 #----------------------------------------------------------
 # import addons
 #----------------------------------------------------------
 
-import addons
+import openerp.addons as addons
 
 #----------------------------------------------------------
 # Load and update databases if requested
 #----------------------------------------------------------
 
-import service.http_server
+import openerp.service.http_server as service_http_server
 
 if not ( tools.config["stop_after_init"] or \
     tools.config["translate_in"] or \
     tools.config["translate_out"] ):
-    service.http_server.init_servers()
-    service.http_server.init_xmlrpc()
-    service.http_server.init_static_http()
+    service_http_server.init_servers()
+    service_http_server.init_xmlrpc()
+    service_http_server.init_static_http()
 
-    import service.netrpc_server
-    service.netrpc_server.init_servers()
+    import openerp.service.netrpc_server as service_netrpc_server
+    service_netrpc_server.init_servers()
 
 if tools.config['db_name']:
     for dbname in tools.config['db_name'].split(','):

=== modified file 'openerp/__init__.py'
--- bin/__init__.py	2009-10-20 10:52:23 +0000
+++ openerp/__init__.py	2011-02-08 09:37:03 +0000
@@ -19,6 +19,23 @@
 #
 ##############################################################################
 
+import addons
+import ir
+import loglevels
+import netsvc
+import osv
+import pooler
+import pychart
+import release
+import report
+import run_tests
+import service
+import sql_db
+import test
+import tiny_socket
+import tools
+import wizard
+import workflow
 
 # vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:
 

=== modified file 'openerp/addons/__init__.py'
--- bin/addons/__init__.py	2011-02-03 23:00:23 +0000
+++ openerp/addons/__init__.py	2011-02-08 09:37:03 +0000
@@ -25,17 +25,17 @@
 import itertools
 import zipimport
 
-import osv
-import tools
-import tools.osutil
-from tools.safe_eval import safe_eval as eval
-import pooler
-from tools.translate import _
+import openerp.osv as osv
+import openerp.tools as tools
+import openerp.tools.osutil as osutil
+from openerp.tools.safe_eval import safe_eval as eval
+import openerp.pooler as pooler
+from openerp.tools.translate import _
 
-import netsvc
+import openerp.netsvc as netsvc
 
 import zipfile
-import release
+import openerp.release as release
 
 import re
 import base64
@@ -44,25 +44,32 @@
 
 import logging
 
-
 logger = netsvc.Logger()
 
-_ad = os.path.abspath(opj(tools.ustr(tools.config['root_path']), u'addons'))     # default addons path (base)
-ad_paths= map(lambda m: os.path.abspath(tools.ustr(m.strip())), tools.config['addons_path'].split(','))
-
-sys.path.insert(1, _ad)
-
-ad_cnt=1
-for adp in ad_paths:
-    if adp != _ad:
-        sys.path.insert(ad_cnt, adp)
-        ad_cnt+=1
-
-ad_paths.append(_ad)    # for get_module_path
+_ad = os.path.dirname(__file__) # default addons path (base)
+ad_paths = []
 
 # Modules already loaded
 loaded = []
 
+def initialize_sys_path():
+    global ad_paths
+
+    if ad_paths:
+        return
+
+    ad_paths = map(lambda m: os.path.abspath(tools.ustr(m.strip())), tools.config['addons_path'].split(','))
+
+    sys.path.insert(1, _ad)
+
+    ad_cnt=1
+    for adp in ad_paths:
+        if adp != _ad:
+            sys.path.insert(ad_cnt, adp)
+            ad_cnt+=1
+
+    ad_paths.append(_ad)    # for get_module_path
+
 class Graph(dict):
 
     def addNode(self, name, deps):
@@ -186,7 +193,7 @@
         zip = zipfile.ZipFile(path + ".zip")
         files = ['/'.join(f.split('/')[1:]) for f in zip.namelist()]
     else:
-        files = tools.osutil.listdir(path, True)
+        files = osutil.listdir(path, True)
 
     tree = {}
     for f in files:
@@ -218,7 +225,7 @@
     def _zippy(archive, path, src=True):
         path = os.path.abspath(path)
         base = os.path.basename(path)
-        for f in tools.osutil.listdir(path, True):
+        for f in osutil.listdir(path, True):
             bf = os.path.basename(f)
             if not RE_exclude.search(bf) and (src or bf in ('__openerp__.py', '__terp__.py') or not bf.endswith('.py')):
                 archive.write(os.path.join(path, f), os.path.join(base, f))
@@ -559,7 +566,7 @@
             a.update(b)
             return a
 
-        from tools.parse_version import parse_version
+        from openerp.tools.parse_version import parse_version
 
         parsed_installed_version = parse_version(pkg.installed_version or '')
         current_version = parse_version(convert_version(pkg.data.get('version', '0')))
@@ -798,6 +805,14 @@
             logging.getLogger('init').warning('invalid module names, ignored: %s', ", ".join(incorrect_names))
 
 def load_modules(db, force_demo=False, status=None, update_module=False):
+
+    initialize_sys_path()
+
+    # Backward compatibility: addons don't have to import openerp.xxx, they still can import xxx
+    for k, v in list(sys.modules.items()):
+        if k.startswith('openerp.') and sys.modules.get(k[8:]) is None:
+            sys.modules[k[8:]] = v
+
     if not status:
         status = {}
     cr = db.cursor()

=== modified file 'openerp/ir/ir.py'
--- bin/ir/ir.py	2010-07-22 13:28:35 +0000
+++ openerp/ir/ir.py	2011-02-08 09:37:03 +0000
@@ -20,8 +20,8 @@
 ##############################################################################
 
 import pickle
-import osv
-import pooler
+import openerp.osv as osv
+import openerp.pooler as pooler
 
 def ir_set(cr, uid, key, key2, name, models, value, replace=True, isobject=False, meta=None):
     obj = pooler.get_pool(cr.dbname).get('ir.values')

=== added file 'openerp/loglevels.py'
--- openerp/loglevels.py	1970-01-01 00:00:00 +0000
+++ openerp/loglevels.py	2011-02-08 09:37:03 +0000
@@ -0,0 +1,175 @@
+# -*- coding: utf-8 -*-
+##############################################################################
+#
+#    OpenERP, Open Source Management Solution
+#    Copyright (C) 2004-2009 Tiny SPRL (<http://tiny.be>).
+#
+#    This program is free software: you can redistribute it and/or modify
+#    it under the terms of the GNU Affero General Public License as
+#    published by the Free Software Foundation, either version 3 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 Affero General Public License for more details.
+#
+#    You should have received a copy of the GNU Affero General Public License
+#    along with this program.  If not, see <http://www.gnu.org/licenses/>.
+#
+##############################################################################
+
+import sys
+import logging
+import warnings
+
+LOG_NOTSET = 'notset'
+LOG_DEBUG_SQL = 'debug_sql'
+LOG_DEBUG_RPC_ANSWER = 'debug_rpc_answer'
+LOG_DEBUG_RPC = 'debug_rpc'
+LOG_DEBUG = 'debug'
+LOG_TEST = 'test'
+LOG_INFO = 'info'
+LOG_WARNING = 'warn'
+LOG_ERROR = 'error'
+LOG_CRITICAL = 'critical'
+
+logging.DEBUG_RPC_ANSWER = logging.DEBUG - 4
+logging.addLevelName(logging.DEBUG_RPC_ANSWER, 'DEBUG_RPC_ANSWER')
+logging.DEBUG_RPC = logging.DEBUG - 2
+logging.addLevelName(logging.DEBUG_RPC, 'DEBUG_RPC')
+logging.DEBUG_SQL = logging.DEBUG_RPC - 3
+logging.addLevelName(logging.DEBUG_SQL, 'DEBUG_SQL')
+
+logging.TEST = logging.INFO - 5
+logging.addLevelName(logging.TEST, 'TEST')
+
+class Logger(object):
+    def __init__(self):
+        warnings.warn("The netsvc.Logger API shouldn't be used anymore, please "
+                      "use the standard `logging.getLogger` API instead",
+                      PendingDeprecationWarning, stacklevel=2)
+        super(Logger, self).__init__()
+
+    def notifyChannel(self, name, level, msg):
+        warnings.warn("notifyChannel API shouldn't be used anymore, please use "
+                      "the standard `logging` module instead",
+                      PendingDeprecationWarning, stacklevel=2)
+        from service.web_services import common
+
+        log = logging.getLogger(ustr(name))
+
+        if level in [LOG_DEBUG_RPC, LOG_TEST] and not hasattr(log, level):
+            fct = lambda msg, *args, **kwargs: log.log(getattr(logging, level.upper()), msg, *args, **kwargs)
+            setattr(log, level, fct)
+
+
+        level_method = getattr(log, level)
+
+        if isinstance(msg, Exception):
+            msg = exception_to_unicode(msg)
+
+        try:
+            msg = ustr(msg).strip()
+            if level in (LOG_ERROR, LOG_CRITICAL): # and tools.config.get_misc('debug','env_info',False):
+                msg = common().exp_get_server_environment() + "\n" + msg
+
+            result = msg.split('\n')
+        except UnicodeDecodeError:
+            result = msg.strip().split('\n')
+        try:
+            if len(result)>1:
+                for idx, s in enumerate(result):
+                    level_method('[%02d]: %s' % (idx+1, s,))
+            elif result:
+                level_method(result[0])
+        except IOError:
+            # TODO: perhaps reset the logger streams?
+            #if logrotate closes our files, we end up here..
+            pass
+        except Exception:
+            # better ignore the exception and carry on..
+            pass
+
+    def set_loglevel(self, level, logger=None):
+        if logger is not None:
+            log = logging.getLogger(str(logger))
+        else:
+            log = logging.getLogger()
+        log.setLevel(logging.INFO) # make sure next msg is printed
+        log.info("Log level changed to %s" % logging.getLevelName(level))
+        log.setLevel(level)
+
+    def shutdown(self):
+        logging.shutdown()
+
+# TODO get_encodings, ustr and exception_to_unicode were originally from tools.misc.
+# There are here until we refactor tools so that this module doesn't depends on tools.
+
+def get_encodings(hint_encoding='utf-8'):
+    fallbacks = {
+	'latin1': 'latin9',
+	'iso-8859-1': 'iso8859-15',
+	'cp1252': '1252',
+    }
+    if hint_encoding:
+	yield hint_encoding
+	if hint_encoding.lower() in fallbacks:
+	    yield fallbacks[hint_encoding.lower()]
+
+    # some defaults (also taking care of pure ASCII)
+    for charset in ['utf8','latin1']:
+	if not (hint_encoding) or (charset.lower() != hint_encoding.lower()):
+	    yield charset
+
+    from locale import getpreferredencoding
+    prefenc = getpreferredencoding()
+    if prefenc and prefenc.lower() != 'utf-8':
+	yield prefenc
+	prefenc = fallbacks.get(prefenc.lower())
+	if prefenc:
+	    yield prefenc
+
+def ustr(value, hint_encoding='utf-8'):
+    """This method is similar to the builtin `str` method, except
+       it will return unicode() string.
+
+    @param value: the value to convert
+    @param hint_encoding: an optional encoding that was detected
+			  upstream and should be tried first to
+			  decode ``value``.
+
+    @rtype: unicode
+    @return: unicode string
+    """
+    if isinstance(value, Exception):
+	return exception_to_unicode(value)
+
+    if isinstance(value, unicode):
+	return value
+
+    if not isinstance(value, basestring):
+	try:
+	    return unicode(value)
+	except Exception:
+	    raise UnicodeError('unable to convert %r' % (value,))
+
+    for ln in get_encodings(hint_encoding):
+	try:
+	    return unicode(value, ln)
+	except Exception:
+	    pass
+    raise UnicodeError('unable to convert %r' % (value,))
+
+
+def exception_to_unicode(e):
+    if (sys.version_info[:2] < (2,6)) and hasattr(e, 'message'):
+	return ustr(e.message)
+    if hasattr(e, 'args'):
+	return "\n".join((ustr(a) for a in e.args))
+    try:
+	return ustr(e)
+    except Exception:
+	return u"Unknown message"
+
+# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:

=== modified file 'openerp/netsvc.py'
--- bin/netsvc.py	2011-01-26 16:50:30 +0000
+++ openerp/netsvc.py	2011-02-08 09:37:03 +0000
@@ -37,6 +37,10 @@
 import warnings
 import heapq
 
+# TODO modules that import netsvc only for things from loglevels must be changed to use loglevels.
+from loglevels import *
+import tools
+
 class Service(object):
     """ Base class for *Local* services
 
@@ -130,27 +134,6 @@
         else:
             raise
 
-LOG_NOTSET = 'notset'
-LOG_DEBUG_SQL = 'debug_sql'
-LOG_DEBUG_RPC_ANSWER = 'debug_rpc_answer'
-LOG_DEBUG_RPC = 'debug_rpc'
-LOG_DEBUG = 'debug'
-LOG_TEST = 'test'
-LOG_INFO = 'info'
-LOG_WARNING = 'warn'
-LOG_ERROR = 'error'
-LOG_CRITICAL = 'critical'
-
-logging.DEBUG_RPC_ANSWER = logging.DEBUG - 4
-logging.addLevelName(logging.DEBUG_RPC_ANSWER, 'DEBUG_RPC_ANSWER')
-logging.DEBUG_RPC = logging.DEBUG - 2
-logging.addLevelName(logging.DEBUG_RPC, 'DEBUG_RPC')
-logging.DEBUG_SQL = logging.DEBUG_RPC - 3
-logging.addLevelName(logging.DEBUG_SQL, 'DEBUG_SQL')
-
-logging.TEST = logging.INFO - 5
-logging.addLevelName(logging.TEST, 'TEST')
-
 BLACK, RED, GREEN, YELLOW, BLUE, MAGENTA, CYAN, WHITE, _NOTHING, DEFAULT = range(10)
 #The background is set with 40 plus the number of the color, and the foreground with 30
 #These are the sequences need to get colored ouput
@@ -226,72 +209,10 @@
 
     # add the handler to the root logger
     logger = logging.getLogger()
+    logger.handlers = []
     logger.addHandler(handler)
     logger.setLevel(int(tools.config['log_level'] or '0'))
 
-
-class Logger(object):
-    def __init__(self):
-        warnings.warn("The netsvc.Logger API shouldn't be used anymore, please "
-                      "use the standard `logging.getLogger` API instead",
-                      PendingDeprecationWarning, stacklevel=2)
-        super(Logger, self).__init__()
-
-    def notifyChannel(self, name, level, msg):
-        warnings.warn("notifyChannel API shouldn't be used anymore, please use "
-                      "the standard `logging` module instead",
-                      PendingDeprecationWarning, stacklevel=2)
-        from service.web_services import common
-
-        log = logging.getLogger(tools.ustr(name))
-
-        if level in [LOG_DEBUG_RPC, LOG_TEST] and not hasattr(log, level):
-            fct = lambda msg, *args, **kwargs: log.log(getattr(logging, level.upper()), msg, *args, **kwargs)
-            setattr(log, level, fct)
-
-
-        level_method = getattr(log, level)
-
-        if isinstance(msg, Exception):
-            msg = tools.exception_to_unicode(msg)
-
-        try:
-            msg = tools.ustr(msg).strip()
-            if level in (LOG_ERROR, LOG_CRITICAL) and tools.config.get_misc('debug','env_info',False):
-                msg = common().exp_get_server_environment() + "\n" + msg
-
-            result = msg.split('\n')
-        except UnicodeDecodeError:
-            result = msg.strip().split('\n')
-        try:
-            if len(result)>1:
-                for idx, s in enumerate(result):
-                    level_method('[%02d]: %s' % (idx+1, s,))
-            elif result:
-                level_method(result[0])
-        except IOError:
-            # TODO: perhaps reset the logger streams?
-            #if logrotate closes our files, we end up here..
-            pass
-        except Exception:
-            # better ignore the exception and carry on..
-            pass
-
-    def set_loglevel(self, level, logger=None):
-        if logger is not None:
-            log = logging.getLogger(str(logger))
-        else:
-            log = logging.getLogger()
-        log.setLevel(logging.INFO) # make sure next msg is printed
-        log.info("Log level changed to %s" % logging.getLevelName(level))
-        log.setLevel(level)
-
-    def shutdown(self):
-        logging.shutdown()
-
-import tools
-init_logger()
-
 class Agent(object):
     """Singleton that keeps track of cancellable tasks to run at a given
        timestamp.

=== modified file 'openerp/osv/expression.py'
--- bin/osv/expression.py	2011-01-17 08:41:08 +0000
+++ openerp/osv/expression.py	2011-02-08 09:37:03 +0000
@@ -20,7 +20,7 @@
 #
 ##############################################################################
 
-from tools import flatten, reverse_enumerate
+from openerp.tools import flatten, reverse_enumerate
 import fields
 
 

=== modified file 'openerp/osv/fields.py'
--- bin/osv/fields.py	2011-02-07 10:26:52 +0000
+++ openerp/osv/fields.py	2011-02-08 09:37:03 +0000
@@ -38,9 +38,9 @@
 import xmlrpclib
 from psycopg2 import Binary
 
-import netsvc
-import tools
-from tools.translate import _
+import openerp.netsvc as netsvc
+import openerp.tools as tools
+from openerp.tools.translate import _
 
 def _symbol_set(symb):
     if symb == None or symb == False:

=== modified file 'openerp/osv/orm.py'
--- bin/osv/orm.py	2011-02-07 15:27:47 +0000
+++ openerp/osv/orm.py	2011-02-08 09:37:03 +0000
@@ -49,18 +49,18 @@
 import traceback
 import types
 
-import netsvc
+import openerp.netsvc as netsvc
 from lxml import etree
-from tools.config import config
-from tools.translate import _
+from openerp.tools.config import config
+from openerp.tools.translate import _
 
 import fields
 from query import Query
-import tools
-from tools.safe_eval import safe_eval as eval
+import openerp.tools as tools
+from openerp.tools.safe_eval import safe_eval as eval
 
 # List of etree._Element subclasses that we choose to ignore when parsing XML.
-from tools import SKIPPED_ELEMENT_TYPES
+from openerp.tools import SKIPPED_ELEMENT_TYPES
 
 regex_order = re.compile('^(([a-z0-9_]+|"[a-z0-9_]+")( *desc| *asc)?( *, *|))+$', re.I)
 

=== modified file 'openerp/osv/osv.py'
--- bin/osv/osv.py	2011-01-17 09:47:50 +0000
+++ openerp/osv/osv.py	2011-02-08 09:37:03 +0000
@@ -24,13 +24,13 @@
 #
 
 import orm
-import netsvc
-import pooler
+import openerp.netsvc as netsvc
+import openerp.pooler as pooler
 import copy
 import logging
 from psycopg2 import IntegrityError, errorcodes
-from tools.func import wraps
-from tools.translate import translate
+from openerp.tools.func import wraps
+from openerp.tools.translate import translate
 
 module_list = []
 module_class_list = {}

=== modified file 'openerp/pooler.py'
--- bin/pooler.py	2010-10-01 11:25:52 +0000
+++ openerp/pooler.py	2011-02-08 09:37:03 +0000
@@ -30,9 +30,9 @@
     if db_name in pool_dic:
         pool = pool_dic[db_name]
     else:
-        import addons
-        import osv.osv
-        pool = osv.osv.osv_pool()
+        import openerp.addons as addons
+        import openerp.osv.osv as osv_osv
+        pool = osv_osv.osv_pool()
         pool_dic[db_name] = pool
 
         try:
@@ -66,7 +66,7 @@
     # sql_db must not be loaded before the logger is initialized.
     # sql_db import psycopg2.tool which create a default logger if there is not.
     # this resulting of having the logs outputed twice...
-    import sql_db
+    import openerp.sql_db as sql_db
     db = sql_db.db_connect(db_name)
     return db
 

=== modified file 'openerp/report/__init__.py'
--- bin/report/__init__.py	2009-10-20 10:52:23 +0000
+++ openerp/report/__init__.py	2011-02-08 09:37:03 +0000
@@ -24,7 +24,7 @@
 import print_fnc
 import custom
 import render
-import pychart
+import openerp.pychart
 import int_to_text
 
 import report_sxw

=== modified file 'openerp/report/custom.py'
--- bin/report/custom.py	2010-09-23 10:01:45 +0000
+++ openerp/report/custom.py	2011-02-08 09:37:03 +0000
@@ -21,23 +21,23 @@
 
 import os
 import time
-import netsvc
+import openerp.netsvc as netsvc
 
-import tools
-from tools.safe_eval import safe_eval as eval
+import openerp.tools as tools
+from openerp.tools.safe_eval import safe_eval as eval
 import print_xml
 import render
 from interface import report_int
 import common
-from osv.osv import except_osv
-from osv.orm import browse_null
-from osv.orm import browse_record_list
-import pooler
+from openerp.osv.osv import except_osv
+from openerp.osv.orm import browse_null
+from openerp.osv.orm import browse_record_list
+import openerp.pooler as pooler
 from pychart import *
 import misc
 import cStringIO
 from lxml import etree
-from tools.translate import _
+from openerp.tools.translate import _
 
 class external_pdf(render.render):
     def __init__(self, pdf):

=== modified file 'openerp/report/interface.py'
--- bin/report/interface.py	2011-01-17 18:44:44 +0000
+++ openerp/report/interface.py	2011-02-08 09:37:03 +0000
@@ -23,11 +23,11 @@
 import re
 
 from lxml import etree
-import netsvc
-import pooler
+import openerp.netsvc as netsvc
+import openerp.pooler as pooler
 
-import tools
-import addons
+import openerp.tools as tools
+import openerp.addons as addons
 import print_xml
 import render
 import urllib

=== modified file 'openerp/report/print_xml.py'
--- bin/report/print_xml.py	2011-01-04 10:13:35 +0000
+++ openerp/report/print_xml.py	2011-02-08 09:37:03 +0000
@@ -21,13 +21,13 @@
 
 import os,types
 from lxml import etree
-import netsvc
-import tools
-from tools.safe_eval import safe_eval
+import openerp.netsvc as netsvc
+import openerp.tools as tools
+from openerp.tools.safe_eval import safe_eval
 import print_fnc
 import copy
-from osv.orm import browse_null, browse_record
-import pooler
+from openerp.osv.orm import browse_null, browse_record
+import openerp.pooler as pooler
 
 class InheritDict(dict):
     # Might be usefull when we're doing name lookup for call or eval.

=== modified file 'openerp/report/printscreen/ps_form.py'
--- bin/report/printscreen/ps_form.py	2010-09-06 08:11:04 +0000
+++ openerp/report/printscreen/ps_form.py	2011-02-08 09:37:03 +0000
@@ -19,11 +19,11 @@
 #
 ##############################################################################
 
-from report.interface import report_int
-import pooler
-import tools
+from openerp.report.interface import report_int
+import openerp.pooler as pooler
+import openerp.tools as tools
 
-from report import render
+from openerp.report import render
 from lxml import etree
 
 import time, os

=== modified file 'openerp/report/printscreen/ps_list.py'
--- bin/report/printscreen/ps_list.py	2010-10-11 09:37:09 +0000
+++ openerp/report/printscreen/ps_list.py	2011-02-08 09:37:03 +0000
@@ -19,18 +19,17 @@
 #
 ##############################################################################
 
-from report.interface import report_int
-import pooler
-import tools
-from tools.safe_eval import safe_eval as eval
+from openerp.report.interface import report_int
+import openerp.pooler as pooler
+import openerp.tools as tools
+from openerp.tools.safe_eval import safe_eval as eval
 from lxml  import etree
-from report import render
+from openerp.report import render, report_sxw
 import locale
 
 import time, os
 from operator import itemgetter
 from datetime import datetime
-from report import report_sxw
 
 class report_printscreen_list(report_int):
     def __init__(self, name):

=== modified file 'openerp/report/render/html2html/html2html.py'
--- bin/report/render/html2html/html2html.py	2009-12-02 09:30:08 +0000
+++ openerp/report/render/html2html/html2html.py	2011-02-08 09:37:03 +0000
@@ -19,10 +19,10 @@
 #
 ##############################################################################
 
-from report.render.rml2pdf import utils
+from openerp.report.render.rml2pdf import utils
 from lxml import etree
 import copy
-import pooler 
+import openerp.pooler  as pooler
 import base64
 import cStringIO
 import re

=== modified file 'openerp/report/render/makohtml2html/makohtml2html.py'
--- bin/report/render/makohtml2html/makohtml2html.py	2009-12-15 05:22:39 +0000
+++ openerp/report/render/makohtml2html/makohtml2html.py	2011-02-08 09:37:03 +0000
@@ -22,7 +22,7 @@
 from lxml import etree
 from mako.template import Template
 from mako.lookup import TemplateLookup
-import netsvc
+import openerp.netsvc as netsvc
 import traceback, sys, os
 
 class makohtml2html(object):
@@ -130,4 +130,4 @@
 
 def parseNode(html, localcontext = {}):
     r = makohtml2html(html, localcontext)
-    return r.render()
\ No newline at end of file
+    return r.render()

=== modified file 'openerp/report/render/odt2odt/odt2odt.py'
--- bin/report/render/odt2odt/odt2odt.py	2009-10-20 10:52:23 +0000
+++ openerp/report/render/odt2odt/odt2odt.py	2011-02-08 09:37:03 +0000
@@ -19,7 +19,7 @@
 #
 ##############################################################################
 
-from report.render.rml2pdf import utils
+from openerp.report.render.rml2pdf import utils
 from lxml import etree
 import copy
 

=== modified file 'openerp/report/render/rml2html/rml2html.py'
--- bin/report/render/rml2html/rml2html.py	2010-01-12 10:48:30 +0000
+++ openerp/report/render/rml2html/rml2html.py	2011-02-08 09:37:03 +0000
@@ -40,7 +40,7 @@
 from lxml import etree
 import copy
 import utils
-from report.render.rml2pdf import utils
+from openerp.report.render.rml2pdf import utils
 
 class _flowable(object):
     def __init__(self, template, doc, localcontext = None):

=== modified file 'openerp/report/render/rml2pdf/customfonts.py'
--- bin/report/render/rml2pdf/customfonts.py	2010-12-20 05:48:43 +0000
+++ openerp/report/render/rml2pdf/customfonts.py	2011-02-08 09:37:03 +0000
@@ -26,7 +26,7 @@
 import platform
 from reportlab import rl_config
 
-from tools import config
+from openerp.tools import config
 
 """This module allows the mapping of some system-available TTF fonts to
 the reportlab engine.

=== modified file 'openerp/report/render/rml2pdf/trml2pdf.py'
--- bin/report/render/rml2pdf/trml2pdf.py	2011-01-04 10:13:35 +0000
+++ openerp/report/render/rml2pdf/trml2pdf.py	2011-02-08 09:37:03 +0000
@@ -33,9 +33,9 @@
 from lxml import etree
 import base64
 from reportlab.platypus.doctemplate import ActionFlowable
-from tools.safe_eval import safe_eval as eval
+from openerp.tools.safe_eval import safe_eval as eval
 from reportlab.lib.units import inch,cm,mm
-from tools.misc import file_open
+from openerp.tools.misc import file_open
 from reportlab.pdfbase import pdfmetrics
 
 try:

=== modified file 'openerp/report/render/rml2pdf/utils.py'
--- bin/report/render/rml2pdf/utils.py	2010-12-28 11:09:29 +0000
+++ openerp/report/render/rml2pdf/utils.py	2011-02-08 09:37:03 +0000
@@ -43,9 +43,9 @@
 import re
 import reportlab
 
-import tools
-from tools.safe_eval import safe_eval as eval
-from tools import ustr
+import openerp.tools as tools
+from openerp.tools.safe_eval import safe_eval as eval
+from openerp.tools.misc import ustr
 
 _regex = re.compile('\[\[(.+?)\]\]')
 

=== modified file 'openerp/report/render/rml2txt/utils.py'
--- bin/report/render/rml2txt/utils.py	2010-05-03 23:49:53 +0000
+++ openerp/report/render/rml2txt/utils.py	2011-02-08 09:37:03 +0000
@@ -23,7 +23,7 @@
 import reportlab
 import reportlab.lib.units
 from lxml import etree
-from tools.safe_eval import safe_eval as eval
+from openerp.tools.safe_eval import safe_eval as eval
 
 _regex = re.compile('\[\[(.+?)\]\]')
 

=== modified file 'openerp/report/report_sxw.py'
--- bin/report/report_sxw.py	2011-01-10 13:28:32 +0000
+++ openerp/report/report_sxw.py	2011-02-08 09:37:03 +0000
@@ -29,12 +29,12 @@
 from interface import report_rml
 import preprocess
 import logging
-import pooler
-import tools
+import openerp.pooler as pooler
+import openerp.tools as tools
 import zipfile
 import common
-from osv.fields import float as float_class, function as function_class
-from osv.orm import browse_record
+from openerp.osv.fields import float as float_class, function as function_class
+from openerp.osv.orm import browse_record
 
 DT_FORMAT = '%Y-%m-%d'
 DHM_FORMAT = '%Y-%m-%d %H:%M:%S'

=== modified file 'openerp/service/http_server.py'
--- bin/service/http_server.py	2011-01-18 23:50:33 +0000
+++ openerp/service/http_server.py	2011-02-08 09:37:03 +0000
@@ -31,10 +31,10 @@
 
 """
 from websrv_lib import *
-import netsvc
+import openerp.netsvc as netsvc
 import errno
 import threading
-import tools
+import openerp.tools as tools
 import posixpath
 import urllib
 import os

=== modified file 'openerp/service/netrpc_server.py'
--- bin/service/netrpc_server.py	2011-01-18 23:50:33 +0000
+++ openerp/service/netrpc_server.py	2011-02-08 09:37:03 +0000
@@ -30,9 +30,9 @@
 import threading
 import traceback
 
-import netsvc
-import tiny_socket
-import tools
+import openerp.netsvc as netsvc
+import openerp.tiny_socket as tiny_socket
+import openerp.tools as tools
 
 class TinySocketClientThread(threading.Thread, netsvc.OpenERPDispatcher):
     def __init__(self, sock, threads):

=== modified file 'openerp/service/security.py'
--- bin/service/security.py	2010-06-07 16:16:36 +0000
+++ openerp/service/security.py	2011-02-08 09:37:03 +0000
@@ -19,8 +19,8 @@
 #
 ##############################################################################
 
-import pooler
-import tools
+import openerp.pooler as pooler
+import openerp.tools as tools
 
 # When rejecting a password, hide the traceback
 class ExceptionNoTb(Exception):

=== modified file 'openerp/service/web_services.py'
--- bin/service/web_services.py	2011-01-15 17:04:10 +0000
+++ openerp/service/web_services.py	2011-02-08 09:37:03 +0000
@@ -27,14 +27,14 @@
 import time
 import sys
 import platform
-from tools.translate import _
-import addons
-import ir
-import netsvc
-import pooler
-import release
-import sql_db
-import tools
+from openerp.tools.translate import _
+import openerp.addons as addons
+import openerp.ir
+import openerp.netsvc as netsvc
+import openerp.pooler as pooler
+import openerp.release as release
+import openerp.sql_db as sql_db
+import openerp.tools as tools
 import locale
 import logging
 from cStringIO import StringIO
@@ -327,8 +327,8 @@
 
     def exp_migrate_databases(self,databases):
 
-        from osv.orm import except_orm
-        from osv.osv import except_osv
+        from openerp.osv.orm import except_orm
+        from openerp.osv.osv import except_osv
 
         l = netsvc.Logger()
         for db in databases:
@@ -441,7 +441,7 @@
         return tools.misc.get_server_timezone()
 
     def exp_get_available_updates(self, contract_id, contract_password):
-        import tools.maintenance as tm
+        import openerp.tools.maintenance as tm
         try:
             rc = tm.remote_contract(contract_id, contract_password)
             if not rc.id:
@@ -455,7 +455,7 @@
 
     def exp_get_migration_scripts(self, contract_id, contract_password):
         l = netsvc.Logger()
-        import tools.maintenance as tm
+        import openerp.tools.maintenance as tm
         try:
             rc = tm.remote_contract(contract_id, contract_password)
             if not rc.id:
@@ -564,7 +564,6 @@
         return res
 
     def exp_list_http_services(self):
-        from service import http_server
         return http_server.list_http_services()
 
     def exp_check_connectivity(self):

=== modified file 'openerp/test/test_osv.py'
--- bin/test/test_osv.py	2010-10-01 16:54:11 +0000
+++ openerp/test/test_osv.py	2011-02-08 09:37:03 +0000
@@ -20,7 +20,7 @@
 ##############################################################################
 
 import unittest
-from osv.query import Query
+from openerp.osv.query import Query
 
 class QueryTestCase(unittest.TestCase):
 

=== modified file 'openerp/test/test_translate.py'
--- bin/test/test_translate.py	2010-11-16 12:43:28 +0000
+++ openerp/test/test_translate.py	2011-02-08 09:37:03 +0000
@@ -20,7 +20,7 @@
 ##############################################################################
 
 import unittest
-from tools.translate import quote, unquote
+from openerp.tools.translate import quote, unquote
 
 class TranslationToolsTestCase(unittest.TestCase):
 

=== modified file 'openerp/tools/__init__.py'
--- bin/tools/__init__.py	2011-01-26 16:50:30 +0000
+++ openerp/tools/__init__.py	2011-02-08 09:37:03 +0000
@@ -21,7 +21,7 @@
 
 import copy
 import win32
-from config import *
+from config import config
 from misc import *
 from convert import *
 from translate import *

=== modified file 'openerp/tools/amount_to_text_en.py'
--- bin/tools/amount_to_text_en.py	2011-01-26 16:50:30 +0000
+++ openerp/tools/amount_to_text_en.py	2011-02-08 09:37:03 +0000
@@ -22,7 +22,7 @@
 #-------------------------------------------------------------
 #ENGLISH
 #-------------------------------------------------------------
-from tools.translate import _
+from translate import _
 
 to_19 = ( 'Zero',  'One',   'Two',  'Three', 'Four',   'Five',   'Six',
           'Seven', 'Eight', 'Nine', 'Ten',   'Eleven', 'Twelve', 'Thirteen',
@@ -99,13 +99,13 @@
     Example:
         1654: thousands six cent cinquante-quatre.
     """
-    import netsvc
+    import openerp.loglevels as loglevels
 #    if nbr > 10000000:
 #        netsvc.Logger().notifyChannel('translate', netsvc.LOG_WARNING, _("Number too large '%d', can not translate it"))
 #        return str(nbr)
     
     if not _translate_funcs.has_key(lang):
-        netsvc.Logger().notifyChannel('translate', netsvc.LOG_WARNING, _("no translation function found for lang: '%s'" % (lang,)))
+        loglevels.Logger().notifyChannel('translate', loglevels.LOG_WARNING, _("no translation function found for lang: '%s'" % (lang,)))
         #TODO: (default should be en) same as above
         lang = 'en'
     return _translate_funcs[lang](abs(nbr), currency)

=== modified file 'openerp/tools/config.py'
--- bin/tools/config.py	2011-02-07 17:03:17 +0000
+++ openerp/tools/config.py	2011-02-08 09:37:03 +0000
@@ -23,9 +23,10 @@
 import optparse
 import os
 import sys
-import netsvc
+import openerp
+import openerp.loglevels as loglevels
 import logging
-import release
+import openerp.release as release
 
 def check_ssl():
     try:
@@ -102,7 +103,7 @@
         self.config_file = fname
         self.has_ssl = check_ssl()
 
-        self._LOGLEVELS = dict([(getattr(netsvc, 'LOG_%s' % x), getattr(logging, x))
+        self._LOGLEVELS = dict([(getattr(loglevels, 'LOG_%s' % x), getattr(logging, x))
                           for x in ('CRITICAL', 'ERROR', 'WARNING', 'INFO', 'TEST', 'DEBUG', 'DEBUG_RPC', 'DEBUG_SQL', 'DEBUG_RPC_ANSWER','NOTSET')])
 
         version = "%s %s" % (release.description, release.version)
@@ -226,6 +227,7 @@
         security.add_option('--no-database-list', action="store_false", dest='list_db', help="disable the ability to return the list of databases")
         parser.add_option_group(security)
 
+<<<<<<< TREE
         # Advanced options
         group = optparse.OptionGroup(parser, "Advanced options")
         group.add_option("--cache-timeout", dest="cache_timeout",
@@ -238,6 +240,12 @@
 
     def parse_config(self):
         opt = self.parser.parse_args()[0]
+=======
+        self.parse_config()
+
+    def parse_config(self, args=[]):
+        opt = self.parser.parse_args(args)[0]
+>>>>>>> MERGE-SOURCE
 
         def die(cond, msg):
             if cond:
@@ -320,7 +328,7 @@
             self.options['log_level'] = self._LOGLEVELS.get(self.options['log_level']) or int(self.options['log_level'])
 
         if not self.options['root_path'] or self.options['root_path']=='None':
-            self.options['root_path'] = os.path.abspath(os.path.dirname(sys.argv[0]))
+            self.options['root_path'] = os.path.dirname(openerp.__file__)
         if not self.options['addons_path'] or self.options['addons_path']=='None':
             self.options['addons_path'] = os.path.join(self.options['root_path'], 'addons')
 
@@ -500,8 +508,3 @@
 
 config = configmanager()
 
-# FIXME:following line should be called explicitly by the server
-# when it starts, to allow doing 'import tools.config' from
-# other python executables without parsing *their* args.
-config.parse_config()
-

=== modified file 'openerp/tools/convert.py'
--- bin/tools/convert.py	2011-01-26 16:50:30 +0000
+++ openerp/tools/convert.py	2011-02-08 09:37:03 +0000
@@ -28,7 +28,7 @@
 
 # for eval context:
 import time
-import release
+import openerp.release as release
 try:
     import pytz
 except:
@@ -41,21 +41,20 @@
 from datetime import datetime, timedelta
 from lxml import etree
 import misc
-import netsvc
-import osv
-import pooler
+import openerp.loglevels as loglevels
+import openerp.pooler as pooler
 from config import config
-from tools.translate import _
+from translate import _
 from yaml_import import convert_yaml_import
 
 # List of etree._Element subclasses that we choose to ignore when parsing XML.
-from tools import SKIPPED_ELEMENT_TYPES
+from misc import SKIPPED_ELEMENT_TYPES
 
 # Import of XML records requires the unsafe eval as well,
 # almost everywhere, which is ok because it supposedly comes
 # from trusted data, but at least we make it obvious now.
 unsafe_eval = eval
-from tools.safe_eval import safe_eval as eval
+from safe_eval import safe_eval as eval
 
 class ConvertError(Exception):
     def __init__(self, doc, orig_excpt):
@@ -541,6 +540,7 @@
             id = _eval_xml(self, rec[0], self.pool, cr, self.uid, self.idref)
 
         uid = self.get_uid(cr, self.uid, data_node, rec)
+        import openerp.netsvc as netsvc
         wf_service = netsvc.LocalService("workflow")
         wf_service.trg_validate(uid, model,
             id,
@@ -688,7 +688,7 @@
         rec_src = rec.get("search",'').encode('utf8')
         rec_src_count = rec.get("count")
 
-        severity = rec.get("severity",'').encode('ascii') or netsvc.LOG_ERROR
+        severity = rec.get("severity",'').encode('ascii') or loglevels.LOG_ERROR
         rec_string = rec.get("string",'').encode('utf8') or 'unknown'
 
         ids = None
@@ -825,6 +825,7 @@
             else:
                 f_val = _eval_xml(self,field, self.pool, cr, self.uid, self.idref)
                 if model._columns.has_key(f_name):
+                    import openerp.osv as osv
                     if isinstance(model._columns[f_name], osv.fields.integer):
                         f_val = int(f_val)
             res[f_name] = f_val
@@ -964,9 +965,9 @@
     try:
         relaxng.assert_(doc)
     except Exception:
-        logger = netsvc.Logger()
-        logger.notifyChannel('init', netsvc.LOG_ERROR, 'The XML file does not fit the required schema !')
-        logger.notifyChannel('init', netsvc.LOG_ERROR, misc.ustr(relaxng.error_log.last_error))
+        logger = loglevels.Logger()
+        logger.notifyChannel('init', loglevels.LOG_ERROR, 'The XML file does not fit the required schema !')
+        logger.notifyChannel('init', loglevels.LOG_ERROR, misc.ustr(relaxng.error_log.last_error))
         raise
 
     if idref is None:

=== modified file 'openerp/tools/misc.py'
--- bin/tools/misc.py	2011-02-03 23:00:23 +0000
+++ openerp/tools/misc.py	2011-02-08 09:37:03 +0000
@@ -55,10 +55,14 @@
 except ImportError:
     html2text = None
 
-import netsvc
+import openerp.loglevels as loglevels
 from config import config
 from lru import LRU
 
+# get_encodings, ustr and exception_to_unicode were originally from tools.misc.
+# There are moved to loglevels until we refactor tools.
+from openerp.loglevels import get_encodings, ustr, exception_to_unicode
+
 _logger = logging.getLogger('tools')
 
 # List of etree._Element subclasses that we choose to ignore when parsing XML.
@@ -67,7 +71,7 @@
 
 # initialize a database with base/base.sql
 def init_db(cr):
-    import addons
+    import openerp.addons as addons
     f = addons.get_module_resource('base', 'base.sql')
     base_sql_file = file_open(f)
     try:
@@ -200,7 +204,7 @@
 
     @return: fileobject if pathinfo is False else (fileobject, filepath)
     """
-    import addons
+    import openerp.addons as addons
     adps = addons.ad_paths
     rtp = os.path.normcase(os.path.abspath(config['root_path']))
 
@@ -434,10 +438,10 @@
     """
     class WriteToLogger(object):
         def __init__(self):
-            self.logger = netsvc.Logger()
+            self.logger = loglevels.Logger()
 
         def write(self, s):
-            self.logger.notifyChannel('email_send', netsvc.LOG_DEBUG, s)
+            self.logger.notifyChannel('email_send', loglevels.LOG_DEBUG, s)
 
     if openobject_id:
         message['Message-Id'] = generate_tracking_message_id(openobject_id)
@@ -841,74 +845,6 @@
 def to_xml(s):
     return s.replace('&','&amp;').replace('<','&lt;').replace('>','&gt;')
 
-def get_encodings(hint_encoding='utf-8'):
-    fallbacks = {
-        'latin1': 'latin9',
-        'iso-8859-1': 'iso8859-15',
-        'cp1252': '1252',
-    }
-    if hint_encoding:
-        yield hint_encoding
-        if hint_encoding.lower() in fallbacks:
-            yield fallbacks[hint_encoding.lower()]
-
-    # some defaults (also taking care of pure ASCII)
-    for charset in ['utf8','latin1']:
-        if not (hint_encoding) or (charset.lower() != hint_encoding.lower()):
-            yield charset
-
-    from locale import getpreferredencoding
-    prefenc = getpreferredencoding()
-    if prefenc and prefenc.lower() != 'utf-8':
-        yield prefenc
-        prefenc = fallbacks.get(prefenc.lower())
-        if prefenc:
-            yield prefenc
-
-
-def ustr(value, hint_encoding='utf-8'):
-    """This method is similar to the builtin `str` method, except
-       it will return unicode() string.
-
-    @param value: the value to convert
-    @param hint_encoding: an optional encoding that was detected
-                          upstream and should be tried first to
-                          decode ``value``.
-
-    @rtype: unicode
-    @return: unicode string
-    """
-    if isinstance(value, Exception):
-        return exception_to_unicode(value)
-
-    if isinstance(value, unicode):
-        return value
-
-    if not isinstance(value, basestring):
-        try:
-            return unicode(value)
-        except Exception:
-            raise UnicodeError('unable to convert %r' % (value,))
-
-    for ln in get_encodings(hint_encoding):
-        try:
-            return unicode(value, ln)
-        except Exception:
-            pass
-    raise UnicodeError('unable to convert %r' % (value,))
-
-
-def exception_to_unicode(e):
-    if (sys.version_info[:2] < (2,6)) and hasattr(e, 'message'):
-        return ustr(e.message)
-    if hasattr(e, 'args'):
-        return "\n".join((ustr(a) for a in e.args))
-    try:
-        return ustr(e)
-    except Exception:
-        return u"Unknown message"
-
-
 # to be compatible with python 2.4
 import __builtin__
 if not hasattr(__builtin__, 'all'):
@@ -1077,7 +1013,7 @@
     return "%0.2f %s" % (s, units[i])
 
 def logged(f):
-    from tools.func import wraps
+    from func import wraps
 
     @wraps(f)
     def wrapper(*args, **kwargs):
@@ -1094,7 +1030,7 @@
 
         vector.append('  result: %s' % pformat(res))
         vector.append('  time delta: %s' % (time.time() - timeb4))
-        netsvc.Logger().notifyChannel('logged', netsvc.LOG_DEBUG, '\n'.join(vector))
+        loglevels.Logger().notifyChannel('logged', loglevels.LOG_DEBUG, '\n'.join(vector))
         return res
 
     return wrapper
@@ -1104,7 +1040,7 @@
         self.fname = fname
 
     def __call__(self, f):
-        from tools.func import wraps
+        from func import wraps
 
         @wraps(f)
         def wrapper(*args, **kwargs):
@@ -1300,7 +1236,7 @@
     try:
         import pytz
     except Exception:
-        netsvc.Logger().notifyChannel("detect_server_timezone", netsvc.LOG_WARNING,
+        loglevels.Logger().notifyChannel("detect_server_timezone", loglevels.LOG_WARNING,
             "Python pytz module is not available. Timezone will be set to UTC by default.")
         return 'UTC'
 
@@ -1334,14 +1270,14 @@
         if value:
             try:
                 tz = pytz.timezone(value)
-                netsvc.Logger().notifyChannel("detect_server_timezone", netsvc.LOG_INFO,
+                loglevels.Logger().notifyChannel("detect_server_timezone", loglevels.LOG_INFO,
                     "Using timezone %s obtained from %s." % (tz.zone,source))
                 return value
             except pytz.UnknownTimeZoneError:
-                netsvc.Logger().notifyChannel("detect_server_timezone", netsvc.LOG_WARNING,
+                loglevels.Logger().notifyChannel("detect_server_timezone", loglevels.LOG_WARNING,
                     "The timezone specified in %s (%s) is invalid, ignoring it." % (source,value))
 
-    netsvc.Logger().notifyChannel("detect_server_timezone", netsvc.LOG_WARNING,
+    loglevels.Logger().notifyChannel("detect_server_timezone", loglevels.LOG_WARNING,
         "No valid timezone could be detected, using default UTC timezone. You can specify it explicitly with option 'timezone' in the server configuration.")
     return 'UTC'
 

=== modified file 'openerp/tools/test_reports.py'
--- bin/tools/test_reports.py	2011-01-04 08:15:08 +0000
+++ openerp/tools/test_reports.py	2011-02-08 09:37:03 +0000
@@ -25,11 +25,11 @@
     through the code of yaml tests.
 """
 
-import netsvc
-import tools
+import openerp.netsvc as netsvc
+import openerp.tools as tools
 import logging
-import pooler
-from tools.safe_eval import safe_eval
+import openerp.pooler as pooler
+from openerp.tools.safe_eval import safe_eval
 from subprocess import Popen, PIPE
 import os
 import tempfile

=== modified file 'openerp/tools/translate.py'
--- bin/tools/translate.py	2011-02-03 23:00:23 +0000
+++ openerp/tools/translate.py	2011-02-08 09:37:03 +0000
@@ -26,7 +26,7 @@
 import itertools
 import locale
 import os
-import pooler
+import openerp.pooler as pooler
 import re
 import logging
 import tarfile
@@ -37,10 +37,9 @@
 from datetime import datetime
 from lxml import etree
 
-import tools
-import netsvc
-from tools.misc import UpdateableStr
-from tools.misc import SKIPPED_ELEMENT_TYPES
+import misc
+from misc import UpdateableStr
+from misc import SKIPPED_ELEMENT_TYPES
 
 _LOCALE2WIN32 = {
     'af_ZA': 'Afrikaans_South Africa',
@@ -353,7 +352,7 @@
         return type, name, res_id, source, trad
 
     def write_infos(self, modules):
-        import release
+        import openerp.release as release
         self.buffer.write("# Translation of %(project)s.\n" \
                           "# This file contains the translation of the following modules:\n" \
                           "%(modules)s" \
@@ -418,7 +417,7 @@
                 writer.writerow(row)
         elif format == 'po':
             rows.pop(0)
-            writer = tools.TinyPoFile(buffer)
+            writer = TinyPoFile(buffer)
             writer.write_infos(modules)
 
             # we now group the translations by source. That means one translation per source.
@@ -587,6 +586,7 @@
                 push_translation(module, 'view', encode(obj.model), 0, t)
         elif model=='ir.actions.wizard':
             service_name = 'wizard.'+encode(obj.wiz_name)
+            import openerp.netsvc as netsvc
             if netsvc.Service._services.get(service_name):
                 obj2 = netsvc.Service._services[service_name]
                 for state_name, state_def in obj2.states.iteritems():
@@ -677,7 +677,7 @@
                 report_type = "xsl"
             if fname and obj.report_type in ('pdf', 'xsl'):
                 try:
-                    report_file = tools.file_open(fname)
+                    report_file = misc.file_open(fname)
                     try:
                         d = etree.parse(report_file)
                         for t in parse_func(d.iter()):
@@ -726,8 +726,8 @@
     def get_module_from_path(path, mod_paths=None):
         if not mod_paths:
             # First, construct a list of possible paths
-            def_path = os.path.abspath(os.path.join(tools.config['root_path'], 'addons'))     # default addons path (base)
-            ad_paths= map(lambda m: os.path.abspath(m.strip()),tools.config['addons_path'].split(','))
+            def_path = os.path.abspath(os.path.join(config.config['root_path'], 'addons'))     # default addons path (base)
+            ad_paths= map(lambda m: os.path.abspath(m.strip()),config.config['addons_path'].split(','))
             mod_paths=[def_path]
             for adp in ad_paths:
                 mod_paths.append(adp)
@@ -745,9 +745,9 @@
     installed_modids = modobj.search(cr, uid, [('state', '=', 'installed')])
     installed_modules = map(lambda m: m['name'], modobj.read(cr, uid, installed_modids, ['name']))
 
-    root_path = os.path.join(tools.config['root_path'], 'addons')
+    root_path = os.path.join(config.config['root_path'], 'addons')
 
-    apaths = map(os.path.abspath, map(str.strip, tools.config['addons_path'].split(',')))
+    apaths = map(os.path.abspath, map(str.strip, config.config['addons_path'].split(',')))
     if root_path in apaths:
         path_list = apaths
     else :
@@ -755,7 +755,7 @@
 
     # Also scan these non-addon paths
     for bin_path in ['osv', 'report' ]:
-        path_list.append(os.path.join(tools.config['root_path'], bin_path))
+        path_list.append(os.path.join(config.config['root_path'], bin_path))
 
     logger.debug("Scanning modules at paths: ", path_list)
 
@@ -772,7 +772,7 @@
         is_mod_installed = module in installed_modules
         if (('all' in modules) or (module in modules)) and is_mod_installed:
             logger.debug("Scanning code of %s at module: %s", frelativepath, module)
-            src_file = tools.file_open(fabsolutepath, subdir='')
+            src_file = misc.file_open(fabsolutepath, subdir='')
             try:
                 code_string = src_file.read()
             finally:
@@ -816,7 +816,7 @@
 
     for path in path_list:
         logger.debug("Scanning files of modules at %s", path)
-        for root, dummy, files in tools.osutil.walksymlinks(path):
+        for root, dummy, files in osutil.walksymlinks(path):
             for fname in itertools.chain(fnmatch.filter(files, '*.py')):
                 export_code_terms_from_file(fname, path, root, 'code')
             for fname in itertools.chain(fnmatch.filter(files, '*.mako')):
@@ -860,7 +860,7 @@
     lang_obj = pool.get('res.lang')
     trans_obj = pool.get('ir.translation')
     model_data_obj = pool.get('ir.model.data')
-    iso_lang = tools.get_iso_codes(lang)
+    iso_lang = misc.get_iso_codes(lang)
     try:
         uid = 1
         ids = lang_obj.search(cr, uid, [('code','=', lang)])

=== modified file 'openerp/tools/yaml_import.py'
--- bin/tools/yaml_import.py	2011-01-26 16:50:30 +0000
+++ openerp/tools/yaml_import.py	2011-02-08 09:37:03 +0000
@@ -4,8 +4,7 @@
 from datetime import datetime, timedelta
 import logging
 
-import pooler
-import netsvc
+import openerp.pooler as pooler
 import misc
 from config import config
 import yaml_tag
@@ -14,7 +13,7 @@
 # YAML import needs both safe and unsafe eval, but let's
 # default to /safe/.
 unsafe_eval = eval
-from tools.safe_eval import safe_eval as eval
+from safe_eval import safe_eval as eval
 
 logger_channel = 'tests'
 
@@ -297,7 +296,7 @@
         return record_dict
 
     def process_record(self, node):
-        import osv
+        import openerp.osv as osv
         record, fields = node.items()[0]
         model = self.get_model(record.model)
         if isinstance(model, osv.osv.osv_memory):
@@ -448,6 +447,7 @@
         signals=[x['signal'] for x in self.cr.dictfetchall()]
         if workflow.action not in signals:
             raise YamlImportException('Incorrect action %s. No such action defined' % workflow.action)
+        import openerp.netsvc as netsvc
         wf_service = netsvc.LocalService("workflow")
         wf_service.trg_validate(uid, workflow.model, id, workflow.action, self.cr)
     

=== modified file 'openerp/wizard/__init__.py'
--- bin/wizard/__init__.py	2010-02-16 06:31:14 +0000
+++ openerp/wizard/__init__.py	2011-02-08 09:37:03 +0000
@@ -19,18 +19,18 @@
 #
 ##############################################################################
 
-import netsvc
-from tools import copy
-from tools.misc import UpdateableStr, UpdateableDict
-from tools.translate import translate
+import openerp.netsvc as netsvc
+from openerp.tools import copy
+from openerp.tools.misc import UpdateableStr, UpdateableDict
+from openerp.tools.translate import translate
 from lxml import etree
 
-import ir
-import pooler
+import openerp.ir as ir
+import openerp.pooler as pooler
 
-from osv.osv import except_osv
-from osv.orm import except_orm
-from netsvc import Logger, LOG_ERROR
+from openerp.osv.osv import except_osv
+from openerp.osv.orm import except_orm
+from openerp.netsvc import Logger, LOG_ERROR
 import sys
 
 class except_wizard(Exception):

=== modified file 'openerp/workflow/instance.py'
--- bin/workflow/instance.py	2010-06-18 10:16:41 +0000
+++ openerp/workflow/instance.py	2011-02-08 09:37:03 +0000
@@ -22,8 +22,8 @@
 import wkf_logs
 import workitem
 
-import netsvc
-import pooler
+import openerp.netsvc as netsvc
+import openerp.pooler as pooler
 
 def create(cr, ident, wkf_id):
     (uid,res_type,res_id) = ident

=== modified file 'openerp/workflow/wkf_expr.py'
--- bin/workflow/wkf_expr.py	2010-10-13 21:53:40 +0000
+++ openerp/workflow/wkf_expr.py	2011-02-08 09:37:03 +0000
@@ -20,10 +20,10 @@
 ##############################################################################
 
 import sys
-import netsvc
-import osv as base
-import pooler
-from tools.safe_eval import safe_eval as eval
+import openerp.netsvc as netsvc
+import openerp.osv as base
+import openerp.pooler as pooler
+from openerp.tools.safe_eval import safe_eval as eval
 
 class Env(dict):
     def __init__(self, cr, uid, model, ids):

=== modified file 'openerp/workflow/wkf_logs.py'
--- bin/workflow/wkf_logs.py	2009-10-20 10:52:23 +0000
+++ openerp/workflow/wkf_logs.py	2011-02-08 09:37:03 +0000
@@ -22,7 +22,7 @@
 #
 # May be uncommented to logs workflows modifications
 #
-import netsvc
+import openerp.netsvc as netsvc
 
 def log(cr,ident,act_id,info=''):
     return 

=== modified file 'openerp/workflow/wkf_service.py'
--- bin/workflow/wkf_service.py	2009-10-20 10:52:23 +0000
+++ openerp/workflow/wkf_service.py	2011-02-08 09:37:03 +0000
@@ -23,8 +23,8 @@
 import workitem
 import instance
 
-import netsvc
-import pooler
+import openerp.netsvc as netsvc
+import openerp.pooler as pooler
 
 class workflow_service(netsvc.Service):
     def __init__(self, name='workflow', audience='*'):

=== modified file 'openerp/workflow/workitem.py'
--- bin/workflow/workitem.py	2010-06-18 10:16:41 +0000
+++ openerp/workflow/workitem.py	2011-02-08 09:37:03 +0000
@@ -24,7 +24,7 @@
 # cr.execute('delete from wkf_triggers where model=%s and res_id=%s', (res_type,res_id))
 #
 
-import netsvc
+import openerp.netsvc as netsvc
 import instance
 
 import wkf_expr


Follow ups