diff --git a/openerp/addons/base/ir/ir_actions.py b/openerp/addons/base/ir/ir_actions.py index cbdddb4401c..cde6f6f9a91 100644 --- a/openerp/addons/base/ir/ir_actions.py +++ b/openerp/addons/base/ir/ir_actions.py @@ -28,13 +28,14 @@ import time import openerp from openerp import SUPERUSER_ID -from openerp import netsvc, tools +from openerp import tools from openerp.osv import fields, osv import openerp.report.interface from openerp.report.report_sxw import report_sxw, report_rml from openerp.tools.config import config from openerp.tools.safe_eval import safe_eval as eval from openerp.tools.translate import _ +import openerp.workflow _logger = logging.getLogger(__name__) @@ -667,12 +668,11 @@ class actions_server(osv.osv): _logger.warning('Failed to send email to: %s', addresses) if action.state == 'trigger': - wf_service = netsvc.LocalService("workflow") model = action.wkf_model_id.model m2o_field_name = action.trigger_obj_id.name target_id = obj_pool.read(cr, uid, context.get('active_id'), [m2o_field_name])[m2o_field_name] target_id = target_id[0] if isinstance(target_id,tuple) else target_id - wf_service.trg_validate(uid, model, int(target_id), action.trigger_name, cr) + openerp.workflow.trg_validate(uid, model, int(target_id), action.trigger_name, cr) if action.state == 'sms': #TODO: set the user and password from the system diff --git a/openerp/addons/base/ir/ir_mail_server.py b/openerp/addons/base/ir/ir_mail_server.py index 5a3c40552f0..10fc5f82187 100644 --- a/openerp/addons/base/ir/ir_mail_server.py +++ b/openerp/addons/base/ir/ir_mail_server.py @@ -41,6 +41,8 @@ import openerp.tools as tools from openerp.loglevels import ustr _logger = logging.getLogger(__name__) +_test_logger = logging.getLogger('openerp.tests') + class MailDeliveryException(osv.except_osv): """Specific exception subclass for mail delivery errors""" @@ -411,7 +413,7 @@ class ir_mail_server(osv.osv): # Do not actually send emails in testing mode! if getattr(threading.currentThread(), 'testing', False): - _logger.log(logging.TEST, "skip sending email in test mode") + _test_logger.info("skip sending email in test mode") return message['Message-Id'] # Get SMTP Server Details from Mail Server diff --git a/openerp/addons/base/ir/ir_model.py b/openerp/addons/base/ir/ir_model.py index 7de01aa3d11..f0bacc1cd32 100644 --- a/openerp/addons/base/ir/ir_model.py +++ b/openerp/addons/base/ir/ir_model.py @@ -26,7 +26,7 @@ import types import openerp from openerp import SUPERUSER_ID -from openerp import netsvc, tools +from openerp import tools from openerp.osv import fields,osv from openerp.osv.orm import Model from openerp.tools.safe_eval import safe_eval as eval @@ -1046,10 +1046,9 @@ class ir_model_data(osv.osv): wkf_todo.extend(cr.fetchall()) cr.execute("update wkf_transition set condition='True', group_id=NULL, signal=NULL,act_to=act_from,act_from=%s where act_to=%s", (res_id,res_id)) - wf_service = netsvc.LocalService("workflow") for model,res_id in wkf_todo: try: - wf_service.trg_write(uid, model, res_id, cr) + openerp.workflow.trg_write(uid, model, res_id, cr) except Exception: _logger.info('Unable to force processing of workflow for item %s@%s in order to leave activity to be deleted', res_id, model, exc_info=True) diff --git a/openerp/addons/base/ir/workflow/workflow.py b/openerp/addons/base/ir/workflow/workflow.py index 46884c5035b..0ce951940a9 100644 --- a/openerp/addons/base/ir/workflow/workflow.py +++ b/openerp/addons/base/ir/workflow/workflow.py @@ -21,7 +21,7 @@ from openerp.osv import fields, osv from openerp.tools.translate import _ -from openerp import netsvc +import openerp.workflow class workflow(osv.osv): _name = "workflow" @@ -40,8 +40,7 @@ class workflow(osv.osv): def write(self, cr, user, ids, vals, context=None): if not context: context={} - wf_service = netsvc.LocalService("workflow") - wf_service.clear_cache(cr, user) + openerp.workflow.clear_cache(cr, user) return super(workflow, self).write(cr, user, ids, vals, context=context) def get_active_workitems(self, cr, uid, res, res_id, context=None): @@ -62,8 +61,7 @@ class workflow(osv.osv): def create(self, cr, user, vals, context=None): if not context: context={} - wf_service = netsvc.LocalService("workflow") - wf_service.clear_cache(cr, user) + openerp.workflow.clear_cache(cr, user) return super(workflow, self).create(cr, user, vals, context=context) workflow() diff --git a/openerp/loglevels.py b/openerp/loglevels.py index 3172a2b2042..fdb32d8d2f0 100644 --- a/openerp/loglevels.py +++ b/openerp/loglevels.py @@ -20,80 +20,14 @@ ############################################################################## import sys -import logging LOG_NOTSET = 'notset' LOG_DEBUG = 'debug' -LOG_TEST = 'test' LOG_INFO = 'info' LOG_WARNING = 'warn' LOG_ERROR = 'error' LOG_CRITICAL = 'critical' -logging.TEST = logging.INFO - 5 -logging.addLevelName(logging.TEST, 'TEST') - -_logger = logging.getLogger(__name__) - -class Logger(object): - def __init__(self): - _logger.warning( - "The netsvc.Logger API shouldn't be used anymore, please " - "use the standard `logging.getLogger` API instead.") - super(Logger, self).__init__() - - def notifyChannel(self, name, level, msg): - _logger.warning( - "notifyChannel API shouldn't be used anymore, please use " - "the standard `logging` module instead.") - from service import common - - log = logging.getLogger(__name__ + '.deprecated.' + ustr(name)) - - if level in [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. diff --git a/openerp/modules/loading.py b/openerp/modules/loading.py index 3394aed82bd..73709055755 100644 --- a/openerp/modules/loading.py +++ b/openerp/modules/loading.py @@ -43,6 +43,7 @@ from openerp.modules.module import initialize_sys_path, \ load_openerp_module, init_module_models, adapt_version _logger = logging.getLogger(__name__) +_test_logger = logging.getLogger('openerp.tests') def load_module_graph(cr, graph, status=None, perform_checks=True, skip_modules=None, report=None): @@ -74,7 +75,7 @@ def load_module_graph(cr, graph, status=None, perform_checks=True, skip_modules= _load_data(cr, module_name, idref, mode, 'test') return True except Exception: - _logger.exception( + _test_logger.exception( 'module %s: an exception occurred in a test', module_name) return False finally: @@ -95,7 +96,7 @@ def load_module_graph(cr, graph, status=None, perform_checks=True, skip_modules= """ for filename in package.data[kind]: if kind == 'test': - _logger.log(logging.TEST, "module %s: loading %s", module_name, filename) + _test_logger.info("module %s: loading %s", module_name, filename) else: _logger.info("module %s: loading %s", module_name, filename) _, ext = os.path.splitext(filename) diff --git a/openerp/modules/module.py b/openerp/modules/module.py index e71c1f1c519..cc7b5904c73 100644 --- a/openerp/modules/module.py +++ b/openerp/modules/module.py @@ -43,6 +43,7 @@ from cStringIO import StringIO import logging _logger = logging.getLogger(__name__) +_test_logger = logging.getLogger('openerp.tests') _ad = os.path.join(os.path.dirname(os.path.dirname(__file__)), 'addons') # default addons path (base) ad_paths = [] @@ -503,7 +504,7 @@ def run_unit_tests(module_name): for m in ms: suite.addTests(unittest2.TestLoader().loadTestsFromModule(m)) if ms: - _logger.log(logging.TEST, 'module %s: executing %s `fast_suite` and/or `checks` sub-modules', module_name, len(ms)) + _test_logger.info('module %s: executing %s `fast_suite` and/or `checks` sub-modules', module_name, len(ms)) # Use a custom stream object to log the test executions. class MyStream(object): def __init__(self): @@ -518,7 +519,7 @@ def run_unit_tests(module_name): if not first: c = '` ' + c first = False - _logger.log(logging.TEST, c) + _test_logger.info(c) result = unittest2.TextTestRunner(verbosity=2, stream=MyStream()).run(suite) if result.wasSuccessful(): return True diff --git a/openerp/netsvc.py b/openerp/netsvc.py index ef70fcca174..6929b7a9289 100644 --- a/openerp/netsvc.py +++ b/openerp/netsvc.py @@ -36,8 +36,6 @@ try: except ImportError: psutil = None -# TODO modules that import netsvc only for things from loglevels must be changed to use loglevels. -from loglevels import * import tools import openerp @@ -79,7 +77,6 @@ COLOR_PATTERN = "%s%s%%s%s" % (COLOR_SEQ, COLOR_SEQ, RESET_SEQ) LEVEL_COLOR_MAPPING = { logging.DEBUG: (BLUE, DEFAULT), logging.INFO: (GREEN, DEFAULT), - logging.TEST: (WHITE, BLUE), logging.WARNING: (YELLOW, DEFAULT), logging.ERROR: (RED, DEFAULT), logging.CRITICAL: (WHITE, RED), @@ -177,7 +174,6 @@ PSEUDOCONFIG_MAPPER = { 'debug_rpc': ['openerp:DEBUG','openerp.netsvc.rpc.request:DEBUG'], 'debug': ['openerp:DEBUG'], 'debug_sql': ['openerp.sql_db:DEBUG'], - 'test': ['openerp:TEST'], 'info': [], 'warn': ['openerp:WARNING'], 'error': ['openerp:ERROR'], diff --git a/openerp/tools/config.py b/openerp/tools/config.py index 8fd85fa9dae..0ef288a7a3a 100644 --- a/openerp/tools/config.py +++ b/openerp/tools/config.py @@ -84,7 +84,7 @@ class configmanager(object): self.config_file = fname self.has_ssl = check_ssl() - self._LOGLEVELS = dict([(getattr(loglevels, 'LOG_%s' % x), getattr(logging, x)) for x in ('CRITICAL', 'ERROR', 'WARNING', 'INFO', 'TEST', 'DEBUG', 'NOTSET')]) + self._LOGLEVELS = dict([(getattr(loglevels, 'LOG_%s' % x), getattr(logging, x)) for x in ('CRITICAL', 'ERROR', 'WARNING', 'INFO', 'DEBUG', 'NOTSET')]) version = "%s %s" % (release.description, release.version) self.parser = parser = optparse.OptionParser(version=version, option_class=MyOption) diff --git a/openerp/tools/convert.py b/openerp/tools/convert.py index e2519f79cd7..cdcaff35b9e 100644 --- a/openerp/tools/convert.py +++ b/openerp/tools/convert.py @@ -29,8 +29,10 @@ import sys # for eval context: import time + import openerp -import openerp.release as release +import openerp.release +import openerp.workflow import assertion_report @@ -85,7 +87,7 @@ def _get_idref(self, cr, uid, model_str, context, idref): time=time, DateTime=datetime, timedelta=timedelta, - version=release.major_version, + version=openerp.release.major_version, ref=_ref(self, cr), pytz=pytz) if len(model_str): @@ -525,9 +527,7 @@ form: module.record_id""" % (xml_id,) 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, + openerp.workflow.trg_validate(uid, model, id, str(rec.get('action','')), cr) diff --git a/openerp/tools/test_reports.py b/openerp/tools/test_reports.py index cae54185c9f..874a8cced61 100644 --- a/openerp/tools/test_reports.py +++ b/openerp/tools/test_reports.py @@ -35,6 +35,8 @@ import os import tempfile _logger = logging.getLogger(__name__) +_test_logger = logging.getLogger('openerp.tests') + def try_report(cr, uid, rname, ids, data=None, context=None, our_module=None): """ Try to render a report with contents of ids @@ -49,7 +51,7 @@ def try_report(cr, uid, rname, ids, data=None, context=None, our_module=None): rname_s = rname[7:] else: rname_s = rname - _logger.log(logging.TEST, " - Trying %s.create(%r)", rname, ids) + _test_logger.info(" - Trying %s.create(%r)", rname, ids) res = openerp.report.render_report(cr, uid, ids, rname_s, data, context) if not isinstance(res, tuple): raise RuntimeError("Result of %s.create() should be a (data,format) tuple, now it is a %s" % \ @@ -92,7 +94,7 @@ def try_report(cr, uid, rname, ids, data=None, context=None, our_module=None): _logger.warning("Report %s produced a \"%s\" chunk, cannot examine it", rname, res_format) return False - _logger.log(logging.TEST, " + Report %s produced correctly.", rname) + _test_logger.info(" + Report %s produced correctly.", rname) return True def try_report_action(cr, uid, action_id, active_model=None, active_ids=None, @@ -126,7 +128,7 @@ def try_report_action(cr, uid, action_id, active_model=None, active_ids=None, registry = openerp.registry(cr.dbname) def log_test(msg, *args): - _logger.log(logging.TEST, " - " + msg, *args) + _test_logger.info(" - " + msg, *args) datas = {} if active_model: diff --git a/openerp/tools/yaml_import.py b/openerp/tools/yaml_import.py index e84da2924fd..6c2d459d6a8 100644 --- a/openerp/tools/yaml_import.py +++ b/openerp/tools/yaml_import.py @@ -7,6 +7,7 @@ import logging import openerp import openerp.sql_db as sql_db +import openerp.workflow import misc from config import config import yaml_tag @@ -588,9 +589,7 @@ class YamlInterpreter(object): 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) + openerp.workflow.trg_validate(uid, workflow.model, id, workflow.action, self.cr) def _eval_params(self, model, params): args = [] @@ -926,7 +925,7 @@ class YamlInterpreter(object): def yaml_import(cr, module, yamlfile, kind, idref=None, mode='init', noupdate=False, report=None): if idref is None: idref = {} - loglevel = logging.TEST if kind == 'test' else logging.DEBUG + loglevel = logging.INFO if kind == 'test' else logging.DEBUG yaml_string = yamlfile.read() yaml_interpreter = YamlInterpreter(cr, module, idref, mode, filename=yamlfile.name, report=report, noupdate=noupdate, loglevel=loglevel) yaml_interpreter.process(yaml_string) diff --git a/openerpcommand/initialize.py b/openerpcommand/initialize.py index 44fb084bd1e..9822dd5f5b2 100644 --- a/openerpcommand/initialize.py +++ b/openerpcommand/initialize.py @@ -47,7 +47,7 @@ def run(args): config = openerp.tools.config if args.tests: - config['log_handler'] = [':TEST'] + config['log_handler'] = [':INFO'] config['test_enable'] = True config['without_demo'] = False else: