diff --git a/openerp/addons/base/ir/ir_actions.py b/openerp/addons/base/ir/ir_actions.py index a5d04d7f1bc..019ef62a6bd 100644 --- a/openerp/addons/base/ir/ir_actions.py +++ b/openerp/addons/base/ir/ir_actions.py @@ -35,6 +35,7 @@ from tools.config import config from tools.safe_eval import safe_eval as eval from tools.translate import _ from socket import gethostname +from openerp import SUPERUSER_ID _logger = logging.getLogger(__name__) @@ -271,7 +272,7 @@ class act_window(osv.osv): :return: A read() view of the ir.actions.act_window """ dataobj = self.pool.get('ir.model.data') - data_id = dataobj._get_id (cr, 1, module, xml_id) + data_id = dataobj._get_id (cr, SUPERUSER_ID, module, xml_id) res_id = dataobj.browse(cr, uid, data_id, context).res_id return self.read(cr, uid, res_id, [], context) diff --git a/openerp/addons/base/ir/ir_config_parameter.py b/openerp/addons/base/ir/ir_config_parameter.py index f21c2db8d0a..120fcfca554 100644 --- a/openerp/addons/base/ir/ir_config_parameter.py +++ b/openerp/addons/base/ir/ir_config_parameter.py @@ -26,6 +26,7 @@ from osv import osv,fields import uuid import datetime from tools import misc, config +from openerp import SUPERUSER_ID """ A dictionary holding some configuration parameters to be initialized when the database is created. @@ -55,9 +56,9 @@ class ir_config_parameter(osv.osv): Initializes the parameters listed in _default_parameters. """ for key, func in _default_parameters.iteritems(): - ids = self.search(cr, 1, [('key','=',key)]) + ids = self.search(cr, SUPERUSER_ID, [('key','=',key)]) if not ids: - self.set_param(cr, 1, key, func()) + self.set_param(cr, SUPERUSER_ID, key, func()) def get_param(self, cr, uid, key, default=False, context=None): """Retrieve the value for a given key. diff --git a/openerp/addons/base/ir/ir_rule.py b/openerp/addons/base/ir/ir_rule.py index 2b864a7f8c6..75882051e6b 100644 --- a/openerp/addons/base/ir/ir_rule.py +++ b/openerp/addons/base/ir/ir_rule.py @@ -44,7 +44,7 @@ class ir_rule(osv.osv): def _eval_context(self, cr, uid): """Returns a dictionary to use as evaluation context for ir.rule domains.""" - return {'user': self.pool.get('res.users').browse(cr, 1, uid), + return {'user': self.pool.get('res.users').browse(cr, SUPERUSER_ID, uid), 'time':time} def _domain_force_get(self, cr, uid, ids, field_name, arg, context=None): @@ -152,7 +152,7 @@ class ir_rule(osv.osv): # involve objects on which the real uid has no acces rights. # This means also there is no implicit restriction (e.g. an object # references another object the user can't see). - query = self.pool.get(model_name)._where_calc(cr, 1, dom, active_test=False) + query = self.pool.get(model_name)._where_calc(cr, SUPERUSER_ID, dom, active_test=False) return query.where_clause, query.where_clause_params, query.tables return [], [], ['"'+self.pool.get(model_name)._table+'"'] diff --git a/openerp/addons/base/ir/ir_ui_menu.py b/openerp/addons/base/ir/ir_ui_menu.py index 77c0c4d738a..add4a39a182 100644 --- a/openerp/addons/base/ir/ir_ui_menu.py +++ b/openerp/addons/base/ir/ir_ui_menu.py @@ -28,6 +28,7 @@ import tools import openerp.modules from osv import fields, osv from tools.translate import _ +from openerp import SUPERUSER_ID def one_in(setA, setB): """Check the presence of an element of setA in setB @@ -59,7 +60,7 @@ class ir_ui_menu(osv.osv): """ with self.cache_lock: modelaccess = self.pool.get('ir.model.access') - user_groups = set(self.pool.get('res.users').read(cr, 1, uid, ['groups_id'])['groups_id']) + user_groups = set(self.pool.get('res.users').read(cr, SUPERUSER_ID, uid, ['groups_id'])['groups_id']) result = [] for menu in self.browse(cr, uid, ids, context=context): # this key works because user access rights are all based on user's groups (cfr ir_model_access.check) diff --git a/openerp/addons/base/res/res_company.py b/openerp/addons/base/res/res_company.py index c1062f2af2c..f6f0d1808e4 100644 --- a/openerp/addons/base/res/res_company.py +++ b/openerp/addons/base/res/res_company.py @@ -24,6 +24,7 @@ from osv import fields import os import tools import openerp +from openerp import SUPERUSER_ID from tools.translate import _ from tools.safe_eval import safe_eval as eval @@ -156,7 +157,7 @@ class res_company(osv.osv): # select only the currently visible companies (according to rules, # which are probably to allow to see the child companies) even if # she belongs to some other companies. - user = self.pool.get('res.users').browse(cr, 1, uid, context=context) + user = self.pool.get('res.users').browse(cr, SUPERUSER_ID, uid, context=context) cmp_ids = list(set([user.company_id.id] + [cmp.id for cmp in user.company_ids])) return cmp_ids return super(res_company, self)._search(cr, uid, args, offset=offset, limit=limit, order=order, diff --git a/openerp/addons/base/res/res_users.py b/openerp/addons/base/res/res_users.py index f802a7065bd..6394a703811 100644 --- a/openerp/addons/base/res/res_users.py +++ b/openerp/addons/base/res/res_users.py @@ -26,6 +26,7 @@ import logging from lxml import etree from lxml.builder import E import netsvc +from openerp import SUPERUSER_ID import openerp import openerp.exceptions from osv import fields,osv @@ -233,9 +234,9 @@ class res_users(osv.osv): dataobj = self.pool.get('ir.model.data') result = [] try: - dummy,group_id = dataobj.get_object_reference(cr, 1, 'base', 'group_user') + dummy,group_id = dataobj.get_object_reference(cr, SUPERUSER_ID, 'base', 'group_user') result.append(group_id) - dummy,group_id = dataobj.get_object_reference(cr, 1, 'base', 'group_partner_manager') + dummy,group_id = dataobj.get_object_reference(cr, SUPERUSER_ID, 'base', 'group_partner_manager') result.append(group_id) except ValueError: # If these groups does not exists anymore @@ -275,7 +276,7 @@ class res_users(osv.osv): break else: if 'company_id' in values: - if not (values['company_id'] in self.read(cr, 1, uid, ['company_ids'], context=context)['company_ids']): + if not (values['company_id'] in self.read(cr, SUPERUSER_ID, uid, ['company_ids'], context=context)['company_ids']): del values['company_id'] uid = 1 # safe fields only, so we write as super-user to bypass access rights @@ -327,7 +328,7 @@ class res_users(osv.osv): return super(res_users, self).copy(cr, uid, id, copydef, context) def context_get(self, cr, uid, context=None): - user = self.browse(cr, 1, uid, context) + user = self.browse(cr, SUPERUSER_ID, uid, context) result = {} for k in self._all_columns.keys(): if k.startswith('context_'): @@ -345,7 +346,7 @@ class res_users(osv.osv): def action_get(self, cr, uid, context=None): dataobj = self.pool.get('ir.model.data') - data_id = dataobj._get_id(cr, 1, 'base', 'action_res_users_my') + data_id = dataobj._get_id(cr, SUPERUSER_ID, 'base', 'action_res_users_my') return dataobj.browse(cr, uid, data_id, context=context).res_id def check_super(self, passwd): @@ -356,7 +357,7 @@ class res_users(osv.osv): def check_credentials(self, cr, uid, password): """ Override this method to plug additional authentication methods""" - res = self.search(cr, 1, [('id','=',uid),('password','=',password)]) + res = self.search(cr, SUPERUSER_ID, [('id','=',uid),('password','=',password)]) if not res: raise openerp.exceptions.AccessDenied() @@ -372,7 +373,7 @@ class res_users(osv.osv): # of them rolled back due to a concurrent access.) cr.autocommit(True) # check if user exists - res = self.search(cr, 1, [('login','=',login)]) + res = self.search(cr, SUPERUSER_ID, [('login','=',login)]) if res: user_id = res[0] # check credentials @@ -537,7 +538,7 @@ class groups_implied(osv.osv): return memo[g] res = {} - for g in self.browse(cr, 1, ids, context): + for g in self.browse(cr, SUPERUSER_ID, ids, context): res[g.id] = map(int, computed_set(g)) return res @@ -682,7 +683,7 @@ class groups_view(osv.osv): def get_user_groups_view(self, cr, uid, context=None): try: - view = self.pool.get('ir.model.data').get_object(cr, 1, 'base', 'user_groups_view', context) + view = self.pool.get('ir.model.data').get_object(cr, SUPERUSER_ID, 'base', 'user_groups_view', context) assert view and view._table_name == 'ir.ui.view' except Exception: view = False diff --git a/openerp/modules/loading.py b/openerp/modules/loading.py index 8a2c43e6ed2..86e69fa64ba 100644 --- a/openerp/modules/loading.py +++ b/openerp/modules/loading.py @@ -39,6 +39,7 @@ import openerp.pooler as pooler import openerp.release as release import openerp.tools as tools import openerp.tools.assertion_report as assertion_report +from openerp import SUPERUSER_ID from openerp import SUPERUSER_ID from openerp.tools.translate import _ @@ -296,7 +297,7 @@ def load_modules(db, force_demo=False, status=None, update_module=False): modobj = pool.get('ir.module.module') if ('base' in tools.config['init']) or ('base' in tools.config['update']): _logger.info('updating modules list') - modobj.update_list(cr, 1) + modobj.update_list(cr, SUPERUSER_ID) _check_module_names(cr, itertools.chain(tools.config['init'].keys(), tools.config['update'].keys())) diff --git a/openerp/osv/fields.py b/openerp/osv/fields.py index 5a47601f8a5..b6b43f3f4c9 100644 --- a/openerp/osv/fields.py +++ b/openerp/osv/fields.py @@ -46,6 +46,7 @@ from openerp.tools.translate import _ from openerp.tools import float_round, float_repr import simplejson from openerp.tools.html_sanitize import html_sanitize +from openerp import SUPERUSER_ID _logger = logging.getLogger(__name__) @@ -444,7 +445,7 @@ class many2one(_column): # build a dictionary of the form {'id_of_distant_resource': name_of_distant_resource} # we use uid=1 because the visibility of a many2one field value (just id and name) # must be the access right of the parent form and not the linked object itself. - records = dict(obj.name_get(cr, 1, + records = dict(obj.name_get(cr, SUPERUSER_ID, list(set([x for x in res.values() if isinstance(x, (int,long))])), context=context)) for id in res: @@ -1200,7 +1201,7 @@ class related(function): else: res = {}.fromkeys(ids, False) - objlst = obj.browse(cr, 1, ids, context=context) + objlst = obj.browse(cr, SUPERUSER_ID, ids, context=context) for data in objlst: if not data: continue @@ -1230,7 +1231,7 @@ class related(function): # name_get as root, as seeing the name of a related # object depends on access right of source document, # not target, so user may not have access. - ng = dict(obj.pool.get(self._obj).name_get(cr, 1, ids, context=context)) + ng = dict(obj.pool.get(self._obj).name_get(cr, SUPERUSER_ID, ids, context=context)) for r in res: if res[r]: res[r] = (res[r], ng[res[r]]) @@ -1495,7 +1496,7 @@ class property(function): # not target, so user may not have access) in order to avoid # pointing on an unexisting record. if property_destination_obj: - if res[id][prop_name] and obj.pool.get(property_destination_obj).exists(cr, 1, res[id][prop_name].id): + if res[id][prop_name] and obj.pool.get(property_destination_obj).exists(cr, SUPERUSER_ID, res[id][prop_name].id): name_get_ids[id] = res[id][prop_name].id else: res[id][prop_name] = False @@ -1503,7 +1504,7 @@ class property(function): # name_get as root (as seeing the name of a related # object depends on access right of source document, # not target, so user may not have access.) - name_get_values = dict(obj.pool.get(property_destination_obj).name_get(cr, 1, name_get_ids.values(), context=context)) + name_get_values = dict(obj.pool.get(property_destination_obj).name_get(cr, SUPERUSER_ID, name_get_ids.values(), context=context)) # the property field is a m2o, we need to return a tuple with (id, name) for k, v in name_get_ids.iteritems(): if res[k][prop_name]: diff --git a/openerp/osv/orm.py b/openerp/osv/orm.py index 7c8085ea8ed..a9be954b5ac 100644 --- a/openerp/osv/orm.py +++ b/openerp/osv/orm.py @@ -63,6 +63,7 @@ from openerp.tools.safe_eval import safe_eval as eval from openerp.tools.translate import _ from openerp import SUPERUSER_ID from query import Query +from openerp import SUPERUSER_ID _logger = logging.getLogger(__name__) _schema = logging.getLogger(__name__ + '.schema') @@ -773,7 +774,7 @@ class BaseModel(object): } if getattr(f, 'serialization_field', None): # resolve link to serialization_field if specified by name - serialization_field_id = ir_model_fields_obj.search(cr, 1, [('model','=',vals['model']), ('name', '=', f.serialization_field)]) + serialization_field_id = ir_model_fields_obj.search(cr, SUPERUSER_ID, [('model','=',vals['model']), ('name', '=', f.serialization_field)]) if not serialization_field_id: raise except_orm(_('Error'), _("Serialization field `%s` not found for sparse field `%s`!") % (f.serialization_field, k)) vals['serialization_field_id'] = serialization_field_id[0] diff --git a/openerp/service/web_services.py b/openerp/service/web_services.py index 7c08003bf7a..d8a7c663dbe 100644 --- a/openerp/service/web_services.py +++ b/openerp/service/web_services.py @@ -40,6 +40,7 @@ import openerp.tools as tools import openerp.modules import openerp.exceptions from openerp.service import http_server +from openerp import SUPERUSER_ID #.apidoc title: Exported Service methods #.apidoc module-mods: member-order: bysource @@ -72,8 +73,8 @@ def _initialize_db(serv, id, db_name, demo, lang, user_password): if lang: modobj = pool.get('ir.module.module') - mids = modobj.search(cr, 1, [('state', '=', 'installed')]) - modobj.update_translations(cr, 1, mids, lang) + mids = modobj.search(cr, SUPERUSER_ID, [('state', '=', 'installed')]) + modobj.update_translations(cr, SUPERUSER_ID, mids, lang) cr.execute('UPDATE res_users SET password=%s, lang=%s, active=True WHERE login=%s', ( user_password, lang, 'admin')) diff --git a/openerp/tools/translate.py b/openerp/tools/translate.py index eb5dbe24077..5239b37bd2d 100644 --- a/openerp/tools/translate.py +++ b/openerp/tools/translate.py @@ -43,6 +43,7 @@ import misc from misc import UpdateableStr from misc import SKIPPED_ELEMENT_TYPES import osutil +from openerp import SUPERUSER_ID _logger = logging.getLogger(__name__) @@ -214,7 +215,7 @@ class GettextAlias(object): if cr: # Try to use ir.translation to benefit from global cache if possible pool = pooler.get_pool(cr.dbname) - res = pool.get('ir.translation')._get_source(cr, 1, None, ('code','sql_constraint'), lang, source) + res = pool.get('ir.translation')._get_source(cr, SUPERUSER_ID, None, ('code','sql_constraint'), lang, source) else: _logger.debug('no context cursor detected, skipping translation for "%r"', source) else: @@ -872,7 +873,7 @@ def trans_load_data(cr, fileobj, fileformat, lang, lang_name=None, verbose=True, if not ids: # lets create the language with locale information - lang_obj.load_lang(cr, 1, lang=lang, lang_name=lang_name) + lang_obj.load_lang(cr, SUPERUSER_ID, lang=lang, lang_name=lang_name) # now, the serious things: we read the language file diff --git a/openerp/tools/yaml_import.py b/openerp/tools/yaml_import.py index 57af9e45e89..6171b2ebd21 100644 --- a/openerp/tools/yaml_import.py +++ b/openerp/tools/yaml_import.py @@ -13,6 +13,7 @@ import yaml_tag import yaml import re from lxml import etree +from openerp import SUPERUSER_ID # YAML import needs both safe and unsafe eval, but let's # default to /safe/. @@ -286,20 +287,20 @@ class YamlInterpreter(object): view_id = record.view if view_id and (view_id is not True): - view_id = self.pool.get('ir.model.data').get_object_reference(self.cr, 1, self.module, record.view)[1] + view_id = self.pool.get('ir.model.data').get_object_reference(self.cr, SUPERUSER_ID, self.module, record.view)[1] if model.is_transient(): record_dict=self.create_osv_memory_record(record, fields) else: self.validate_xml_id(record.id) try: - self.pool.get('ir.model.data')._get_id(self.cr, 1, self.module, record.id) + self.pool.get('ir.model.data')._get_id(self.cr, SUPERUSER_ID, self.module, record.id) default = False except ValueError: default = True if self.isnoupdate(record) and self.mode != 'init': - id = self.pool.get('ir.model.data')._update_dummy(self.cr, 1, record.model, self.module, record.id) + id = self.pool.get('ir.model.data')._update_dummy(self.cr, SUPERUSER_ID, record.model, self.module, record.id) # check if the resource already existed at the last update if id: self.id_map[record] = int(id) @@ -315,12 +316,12 @@ class YamlInterpreter(object): if view_id: varg = view_id if view_id is True: varg = False - view = model.fields_view_get(self.cr, 1, varg, 'form', context) + view = model.fields_view_get(self.cr, SUPERUSER_ID, varg, 'form', context) view_id = etree.fromstring(view['arch'].encode('utf-8')) record_dict = self._create_record(model, fields, view_id, default=default) _logger.debug("RECORD_DICT %s" % record_dict) - id = self.pool.get('ir.model.data')._update(self.cr, 1, record.model, \ + id = self.pool.get('ir.model.data')._update(self.cr, SUPERUSER_ID, record.model, \ self.module, record_dict, record.id, noupdate=self.isnoupdate(record), mode=self.mode, context=context) self.id_map[record.id] = int(id) if config.get('import_partial'): @@ -328,8 +329,8 @@ class YamlInterpreter(object): def _create_record(self, model, fields, view=False, parent={}, default=True): if view is not False: - defaults = default and model._add_missing_default_values(self.cr, 1, {}, context=self.context) or {} - fg = model.fields_get(self.cr, 1, context=self.context) + defaults = default and model._add_missing_default_values(self.cr, SUPERUSER_ID, {}, context=self.context) or {} + fg = model.fields_get(self.cr, SUPERUSER_ID, context=self.context) else: defaults = {} fg = {} @@ -360,7 +361,7 @@ class YamlInterpreter(object): if (view is not False) and (fg[field_name]['type']=='one2many'): view2 = view.find("field[@name='%s']/form"%(field_name,)) if not view2: - view2 = self.pool.get(fg[field_name]['relation']).fields_view_get(self.cr, 1, False, 'form', self.context) + view2 = self.pool.get(fg[field_name]['relation']).fields_view_get(self.cr, SUPERUSER_ID, False, 'form', self.context) view2 = etree.fromstring(view2['arch'].encode('utf-8')) field_value = self._eval_field(model, field_name, fields[field_name], view2, parent=record_dict, default=default) @@ -395,7 +396,7 @@ class YamlInterpreter(object): # Evaluation args args = map(lambda x: eval(x, ctx), match.group(2).split(',')) - result = getattr(model, match.group(1))(self.cr, 1, [], *args) + result = getattr(model, match.group(1))(self.cr, SUPERUSER_ID, [], *args) for key, val in (result or {}).get('value', {}).items(): if key not in fields: assert key in fg, "The returning field '%s' from your on_change call '%s' does not exist on the object '%s'" % (key, match.group(1), model._name) @@ -491,7 +492,7 @@ class YamlInterpreter(object): python, statements = node.items()[0] model = self.get_model(python.model) statements = statements.replace("\r\n", "\n") - code_context = {'model': model, 'cr': self.cr, 'uid': self.uid, 'log': self._log, 'context': self.context} + code_context = { 'model': model, 'cr': self.cr, 'uid': self.uid, 'log': self._log, 'context': self.context } code_context.update({'self': model}) # remove me when no !python block test uses 'self' anymore try: code_obj = compile(statements, self.filename, 'exec') @@ -655,7 +656,7 @@ class YamlInterpreter(object): self._set_group_values(node, values) - pid = self.pool.get('ir.model.data')._update(self.cr, 1, \ + pid = self.pool.get('ir.model.data')._update(self.cr, SUPERUSER_ID, \ 'ir.ui.menu', self.module, values, node.id, mode=self.mode, \ noupdate=self.isnoupdate(node), res_id=res and res[0] or False) @@ -666,7 +667,7 @@ class YamlInterpreter(object): action_type = node.type or 'act_window' action_id = self.get_id(node.action) action = "ir.actions.%s,%d" % (action_type, action_id) - self.pool.get('ir.model.data').ir_set(self.cr, 1, 'action', \ + self.pool.get('ir.model.data').ir_set(self.cr, SUPERUSER_ID, 'action', \ 'tree_but_open', 'Menuitem', [('ir.ui.menu', int(parent_id))], action, True, True, xml_id=node.id) def process_act_window(self, node): @@ -700,7 +701,7 @@ class YamlInterpreter(object): if node.target: values['target'] = node.target - id = self.pool.get('ir.model.data')._update(self.cr, 1, \ + id = self.pool.get('ir.model.data')._update(self.cr, SUPERUSER_ID, \ 'ir.actions.act_window', self.module, values, node.id, mode=self.mode) self.id_map[node.id] = int(id) @@ -708,7 +709,7 @@ class YamlInterpreter(object): keyword = 'client_action_relate' value = 'ir.actions.act_window,%s' % id replace = node.replace or True - self.pool.get('ir.model.data').ir_set(self.cr, 1, 'action', keyword, \ + self.pool.get('ir.model.data').ir_set(self.cr, SUPERUSER_ID, 'action', keyword, \ node.id, [node.src_model], value, replace=replace, noupdate=self.isnoupdate(node), isobject=True, xml_id=node.id) # TODO add remove ir.model.data @@ -729,7 +730,7 @@ class YamlInterpreter(object): res = {'name': node.name, 'url': node.url, 'target': node.target} - id = self.pool.get('ir.model.data')._update(self.cr, 1, \ + id = self.pool.get('ir.model.data')._update(self.cr, SUPERUSER_ID, \ "ir.actions.url", self.module, res, node.id, mode=self.mode) self.id_map[node.id] = int(id) # ir_set @@ -737,7 +738,7 @@ class YamlInterpreter(object): keyword = node.keyword or 'client_action_multi' value = 'ir.actions.url,%s' % id replace = node.replace or True - self.pool.get('ir.model.data').ir_set(self.cr, 1, 'action', \ + self.pool.get('ir.model.data').ir_set(self.cr, SUPERUSER_ID, 'action', \ keyword, node.url, ["ir.actions.url"], value, replace=replace, \ noupdate=self.isnoupdate(node), isobject=True, xml_id=node.id) @@ -752,7 +753,7 @@ class YamlInterpreter(object): else: value = expression res[fieldname] = value - self.pool.get('ir.model.data').ir_set(self.cr, 1, res['key'], res['key2'], \ + self.pool.get('ir.model.data').ir_set(self.cr, SUPERUSER_ID, res['key'], res['key2'], \ res['name'], res['models'], res['value'], replace=res.get('replace',True), \ isobject=res.get('isobject', False), meta=res.get('meta',None)) @@ -781,7 +782,7 @@ class YamlInterpreter(object): self._set_group_values(node, values) - id = self.pool.get('ir.model.data')._update(self.cr, 1, "ir.actions.report.xml", \ + id = self.pool.get('ir.model.data')._update(self.cr, SUPERUSER_ID, "ir.actions.report.xml", \ self.module, values, xml_id, noupdate=self.isnoupdate(node), mode=self.mode) self.id_map[xml_id] = int(id) @@ -789,7 +790,7 @@ class YamlInterpreter(object): keyword = node.keyword or 'client_print_multi' value = 'ir.actions.report.xml,%s' % id replace = node.replace or True - self.pool.get('ir.model.data').ir_set(self.cr, 1, 'action', \ + self.pool.get('ir.model.data').ir_set(self.cr, SUPERUSER_ID, 'action', \ keyword, values['name'], [values['model']], value, replace=replace, isobject=True, xml_id=xml_id) def process_none(self):