summaryrefslogtreecommitdiff
path: root/bin/tools
diff options
context:
space:
mode:
authornvi-openerp <nicolas.vanhoren@openerp.com>2010-12-08 11:52:49 +0100
committernvi-openerp <nicolas.vanhoren@openerp.com>2010-12-08 11:52:49 +0100
commit38569b7754bb2e1dc1b6e8d58df626ff0fafaedb (patch)
treee0ad1d56381f8f0e4d288c0f50407191ab8ac7a7 /bin/tools
parent8cc1c1086d2243678e2fef9c1631758ac517d097 (diff)
parent00f2f6b97d71f43fe38c0ade7875864dd7ef564b (diff)
[merge]
bzr revid: nicolas.vanhoren@openerp.com-20101206091222-miwtrvjkfh8hy8ec bzr revid: nicolas.vanhoren@openerp.com-20101206174010-f819dzx7vyw2jntk bzr revid: nicolas.vanhoren@openerp.com-20101207132443-z0wabhbh0ruzwoo2 bzr revid: nicolas.vanhoren@openerp.com-20101208105249-qfjalxkboqpi9xr0
Diffstat (limited to 'bin/tools')
-rw-r--r--bin/tools/convert.py62
-rw-r--r--bin/tools/misc.py56
-rw-r--r--bin/tools/translate.py6
-rw-r--r--bin/tools/yaml_import.py12
-rw-r--r--bin/tools/yaml_tag.py2
5 files changed, 71 insertions, 67 deletions
diff --git a/bin/tools/convert.py b/bin/tools/convert.py
index 0f091ad4a56..49d56b15b1e 100644
--- a/bin/tools/convert.py
+++ b/bin/tools/convert.py
@@ -62,7 +62,7 @@ class ConvertError(Exception):
return 'Exception:\n\t%s\nUsing file:\n%s' % (self.orig, self.d)
def _ref(self, cr):
- return lambda x: self.id_get(cr, False, x)
+ return lambda x: self.id_get(cr, x)
def _obj(pool, cr, uid, model_str, context=None):
model = pool.get(model_str)
@@ -139,7 +139,7 @@ def _eval_xml(self, node, pool, cr, uid, idref, context=None):
m = re.findall('[^%]%\((.*?)\)[ds]', s)
for id in m:
if not id in idref:
- idref[id]=self.id_get(cr, False, id)
+ idref[id]=self.id_get(cr, id)
return s % idref
_fix_multiple_roots(node)
return '<?xml version="1.0"?>\n'\
@@ -177,7 +177,7 @@ def _eval_xml(self, node, pool, cr, uid, idref, context=None):
args = []
a_eval = node.get('eval','')
if a_eval:
- idref['ref'] = lambda x: self.id_get(cr, False, x)
+ idref['ref'] = lambda x: self.id_get(cr, x)
args = unsafe_eval(a_eval, idref)
for n in node:
return_val = _eval_xml(self,n, pool, cr, uid, idref, context)
@@ -262,7 +262,7 @@ class xml_import(object):
def get_uid(self, cr, uid, data_node, node):
node_uid = node.get('uid','') or (len(data_node) and data_node.get('uid',''))
if node_uid:
- return self.id_get(cr, None, node_uid)
+ return self.id_get(cr, node_uid)
return uid
def _test_xml_id(self, xml_id):
@@ -290,7 +290,7 @@ form: module.record_id""" % (xml_id,)
ids = self.pool.get(d_model).search(cr, self.uid, unsafe_eval(d_search, idref))
if d_id:
try:
- ids.append(self.id_get(cr, d_model, d_id))
+ ids.append(self.id_get(cr, d_id))
except:
# d_id cannot be found. doesn't matter in this case
pass
@@ -334,10 +334,10 @@ form: module.record_id""" % (xml_id,)
groups_value = []
for group in g_names:
if group.startswith('-'):
- group_id = self.id_get(cr, 'res.groups', group[1:])
+ group_id = self.id_get(cr, group[1:])
groups_value.append((3, group_id))
else:
- group_id = self.id_get(cr, 'res.groups', group)
+ group_id = self.id_get(cr, group)
groups_value.append((4, group_id))
res['groups_id'] = groups_value
@@ -377,10 +377,10 @@ form: module.record_id""" % (xml_id,)
groups_value = []
for group in g_names:
if group.startswith('-'):
- group_id = self.id_get(cr, 'res.groups', group[1:])
+ group_id = self.id_get(cr, group[1:])
groups_value.append((3, group_id))
else:
- group_id = self.id_get(cr, 'res.groups', group)
+ group_id = self.id_get(cr, group)
groups_value.append((4, group_id))
res['groups_id'] = groups_value
@@ -425,8 +425,8 @@ form: module.record_id""" % (xml_id,)
self._test_xml_id(xml_id)
type = rec.get('type','').encode('utf-8') or 'ir.actions.act_window'
view_id = False
- if rec.get('view'):
- view_id = self.id_get(cr, 'ir.actions.act_window', rec.get('view','').encode('utf-8'))
+ if rec.get('view_id'):
+ view_id = self.id_get(cr, rec.get('view_id','').encode('utf-8'))
domain = rec.get('domain','').encode('utf-8') or '{}'
res_model = rec.get('res_model','').encode('utf-8')
src_model = rec.get('src_model','').encode('utf-8')
@@ -438,7 +438,7 @@ form: module.record_id""" % (xml_id,)
uid = self.uid
active_id = str("active_id") # for further reference in client/bin/tools/__init__.py
def ref(str_id):
- return self.id_get(cr, None, str_id)
+ return self.id_get(cr, str_id)
# Include all locals() in eval_context, for backwards compatibility
eval_context = {
@@ -489,10 +489,10 @@ form: module.record_id""" % (xml_id,)
groups_value = []
for group in g_names:
if group.startswith('-'):
- group_id = self.id_get(cr, 'res.groups', group[1:])
+ group_id = self.id_get(cr, group[1:])
groups_value.append((3, group_id))
else:
- group_id = self.id_get(cr, 'res.groups', group)
+ group_id = self.id_get(cr, group)
groups_value.append((4, group_id))
res['groups_id'] = groups_value
@@ -527,7 +527,7 @@ form: module.record_id""" % (xml_id,)
model = str(rec.get('model',''))
w_ref = rec.get('ref','')
if w_ref:
- id = self.id_get(cr, model, w_ref)
+ id = self.id_get(cr, w_ref)
else:
number_children = len(rec)
assert number_children > 0,\
@@ -579,7 +579,7 @@ form: module.record_id""" % (xml_id,)
# The parent attribute was specified, if non-empty determine its ID, otherwise
# explicitly make a top-level menu
if rec.get('parent'):
- menu_parent_id = self.id_get(cr, 'ir.ui.menu', rec.get('parent',''))
+ menu_parent_id = self.id_get(cr, rec.get('parent',''))
else:
# we get here with <menuitem parent="">, explicit clear of parent, or
# if no parent attribute at all but menu name is not a menu path
@@ -588,7 +588,7 @@ form: module.record_id""" % (xml_id,)
if rec.get('name'):
values['name'] = rec.get('name')
try:
- res = [ self.id_get(cr, 'ir.ui.menu', rec.get('id','')) ]
+ res = [ self.id_get(cr, rec.get('id','')) ]
except:
res = None
@@ -603,7 +603,7 @@ form: module.record_id""" % (xml_id,)
}
values['icon'] = icons.get(a_type,'STOCK_NEW')
if a_type=='act_window':
- a_id = self.id_get(cr, 'ir.actions.%s'% a_type, a_action)
+ a_id = self.id_get(cr, a_action)
cr.execute('select view_type,view_mode,name,view_id,target from ir_act_window where id=%s', (int(a_id),))
rrres = cr.fetchone()
assert rrres, "No window action defined for this id %s !\n" \
@@ -628,7 +628,7 @@ form: module.record_id""" % (xml_id,)
if not values.get('name', False):
values['name'] = action_name
elif a_type=='wizard':
- a_id = self.id_get(cr, 'ir.actions.%s'% a_type, a_action)
+ a_id = self.id_get(cr, a_action)
cr.execute('select name from ir_act_wizard where id=%s', (int(a_id),))
resw = cr.fetchone()
if (not values.get('name', False)) and resw:
@@ -647,10 +647,10 @@ form: module.record_id""" % (xml_id,)
groups_value = []
for group in g_names:
if group.startswith('-'):
- group_id = self.id_get(cr, 'res.groups', group[1:])
+ group_id = self.id_get(cr, group[1:])
groups_value.append((3, group_id))
else:
- group_id = self.id_get(cr, 'res.groups', group)
+ group_id = self.id_get(cr, group)
groups_value.append((4, group_id))
values['groups_id'] = groups_value
@@ -664,7 +664,7 @@ form: module.record_id""" % (xml_id,)
if rec.get('action') and pid:
a_action = rec.get('action').encode('utf8')
a_type = rec.get('type','').encode('utf8') or 'act_window'
- a_id = self.id_get(cr, 'ir.actions.%s' % a_type, a_action)
+ a_id = self.id_get(cr, a_action)
action = "ir.actions.%s,%d" % (a_type, a_id)
self.pool.get('ir.model.data').ir_set(cr, self.uid, 'action', 'tree_but_open', 'Menuitem', [('ir.ui.menu', int(pid))], action, True, True, xml_id=rec_id)
return ('ir.ui.menu', pid)
@@ -692,7 +692,7 @@ form: module.record_id""" % (xml_id,)
context = self.get_context(data_node, rec, eval_dict)
uid = self.get_uid(cr, self.uid, data_node, rec)
if rec_id:
- ids = [self.id_get(cr, rec_model, rec_id)]
+ ids = [self.id_get(cr, rec_id)]
elif rec_src:
q = unsafe_eval(rec_src, eval_dict)
ids = self.pool.get(rec_model).search(cr, uid, q, context=context)
@@ -814,10 +814,10 @@ form: module.record_id""" % (xml_id,)
else:
if f_name in model._columns \
and model._columns[f_name]._type == 'reference':
- val = self.model_id_get(cr, f_model, f_ref)
+ val = self.model_id_get(cr, f_ref)
f_val = val[0] + ',' + str(val[1])
else:
- f_val = self.id_get(cr, f_model, f_ref)
+ f_val = self.id_get(cr, f_ref)
else:
f_val = _eval_xml(self,field, self.pool, cr, self.uid, self.idref)
if model._columns.has_key(f_name):
@@ -832,23 +832,19 @@ form: module.record_id""" % (xml_id,)
cr.commit()
return rec_model, id
- def id_get(self, cr, model, id_str):
+ def id_get(self, cr, id_str):
if id_str in self.idref:
return self.idref[id_str]
- res = self.model_id_get(cr, model, id_str)
+ res = self.model_id_get(cr, id_str)
if res and len(res)>1: res = res[1]
return res
- def model_id_get(self, cr, model, id_str):
+ def model_id_get(self, cr, id_str):
model_data_obj = self.pool.get('ir.model.data')
mod = self.module
if '.' in id_str:
mod,id_str = id_str.split('.')
- result = model_data_obj._get_id(cr, self.uid, mod, id_str)
- res = model_data_obj.read(cr, self.uid, [result], ['model', 'res_id'])
- if res and res[0] and res[0]['res_id']:
- return res[0]['model'], int(res[0]['res_id'])
- return False
+ return model_data_obj.get_object_reference(cr, self.uid, mod, id_str)
def parse(self, de):
if not de.tag in ['terp', 'openerp']:
diff --git a/bin/tools/misc.py b/bin/tools/misc.py
index 7a416052d21..59230d5f141 100644
--- a/bin/tools/misc.py
+++ b/bin/tools/misc.py
@@ -76,20 +76,19 @@ def init_db(cr):
p_id = None
while categs:
if p_id is not None:
- cr.execute('select id \
- from ir_module_category \
- where name=%s and parent_id=%s', (categs[0], p_id))
+ cr.execute('SELECT id \
+ FROM ir_module_category \
+ WHERE name=%s AND parent_id=%s', (categs[0], p_id))
else:
- cr.execute('select id \
- from ir_module_category \
- where name=%s and parent_id is NULL', (categs[0],))
+ cr.execute('SELECT id \
+ FROM ir_module_category \
+ WHERE name=%s AND parent_id IS NULL', (categs[0],))
c_id = cr.fetchone()
if not c_id:
- cr.execute('select nextval(\'ir_module_category_id_seq\')')
+ cr.execute('INSERT INTO ir_module_category \
+ (name, parent_id) \
+ VALUES (%s, %s) RETURNING id', (categs[0], p_id))
c_id = cr.fetchone()[0]
- cr.execute('insert into ir_module_category \
- (id, name, parent_id) \
- values (%s, %s, %s)', (c_id, categs[0], p_id))
else:
c_id = c_id[0]
p_id = c_id
@@ -104,23 +103,23 @@ def init_db(cr):
state = 'uninstalled'
else:
state = 'uninstallable'
- cr.execute('select nextval(\'ir_module_module_id_seq\')')
- id = cr.fetchone()[0]
- cr.execute('insert into ir_module_module \
- (id, author, website, name, shortdesc, description, \
- category_id, state, certificate, web) \
- values (%s, %s, %s, %s, %s, %s, %s, %s, %s, %s)', (
- id, info.get('author', ''),
+ cr.execute('INSERT INTO ir_module_module \
+ (author, website, name, shortdesc, description, \
+ category_id, state, certificate, web, license) \
+ VALUES (%s, %s, %s, %s, %s, %s, %s, %s, %s, %s) RETURNING id', (
+ info.get('author', ''),
info.get('website', ''), i, info.get('name', False),
info.get('description', ''), p_id, state, info.get('certificate') or None,
- info.get('web') or False))
- cr.execute('insert into ir_model_data \
- (name,model,module, res_id, noupdate) values (%s,%s,%s,%s,%s)', (
+ info.get('web') or False,
+ info.get('license') or 'AGPL-3'))
+ id = cr.fetchone()[0]
+ cr.execute('INSERT INTO ir_model_data \
+ (name,model,module, res_id, noupdate) VALUES (%s,%s,%s,%s,%s)', (
'module_meta_information', 'ir.module.module', i, id, True))
dependencies = info.get('depends', [])
for d in dependencies:
- cr.execute('insert into ir_module_module_dependency \
- (module_id,name) values (%s, %s)', (id, d))
+ cr.execute('INSERT INTO ir_module_module_dependency \
+ (module_id,name) VALUES (%s, %s)', (id, d))
cr.commit()
def find_in_path(name):
@@ -142,15 +141,15 @@ def exec_pg_command(name, *args):
prog = find_pg_tool(name)
if not prog:
raise Exception('Couldn\'t find %s' % name)
- args2 = (os.path.basename(prog),) + args
+ args2 = (prog,) + args
- return subprocess.call(args2, executable=prog)
+ return subprocess.call(args2)
def exec_pg_command_pipe(name, *args):
prog = find_pg_tool(name)
if not prog:
raise Exception('Couldn\'t find %s' % name)
- pop = subprocess.Popen(args, executable=prog, shell=True, bufsize= -1,
+ pop = subprocess.Popen((prog,) + args, bufsize= -1,
stdin=subprocess.PIPE, stdout=subprocess.PIPE, close_fds=True)
return (pop.stdin, pop.stdout)
@@ -158,7 +157,7 @@ def exec_command_pipe(name, *args):
prog = find_in_path(name)
if not prog:
raise Exception('Couldn\'t find %s' % name)
- pop = subprocess.Popen(args, executable=prog, shell=True, bufsize= -1,
+ pop = subprocess.Popen((prog,) + args, bufsize= -1,
stdin=subprocess.PIPE, stdout=subprocess.PIPE, close_fds=True)
return (pop.stdin, pop.stdout)
@@ -913,6 +912,8 @@ def get_iso_codes(lang):
return lang
def get_languages():
+ # The codes below are those from Launchpad's Rosetta, with the exception
+ # of some trivial codes where the Launchpad code is xx and we have xx_XX.
languages={
'ab_RU': u'Abkhazian / аҧсуа',
'ar_AR': u'Arabic / الْعَرَبيّة',
@@ -979,7 +980,8 @@ def get_languages():
'sl_SI': u'Slovenian / slovenščina',
'sk_SK': u'Slovak / Slovenský jazyk',
'sq_AL': u'Albanian / Shqip',
- 'sr_RS': u'Serbian / српски језик',
+ 'sr_RS': u'Serbian (Cyrillic) / српски',
+ 'sr@latin': u'Serbian (Latin) / srpski',
'sv_SE': u'Swedish / svenska',
'te_IN': u'Telugu / తెలుగు',
'tr_TR': u'Turkish / Türkçe',
diff --git a/bin/tools/translate.py b/bin/tools/translate.py
index e0379a71eef..11ce59e1019 100644
--- a/bin/tools/translate.py
+++ b/bin/tools/translate.py
@@ -167,7 +167,7 @@ class GettextAlias(object):
cr = pooler.get_db(dbs[0]).cursor()
is_new_cr = True
return cr, is_new_cr
-
+
def _get_lang(self, frame):
lang = frame.f_locals.get('context', {}).get('lang', False)
if not lang:
@@ -179,7 +179,7 @@ class GettextAlias(object):
c = getattr(s, 'localcontext', {})
lang = c.get('lang', False)
return lang
-
+
def __call__(self, source):
is_new_cr = False
res = source
@@ -469,6 +469,8 @@ def trans_parse_view(de):
res.append(de.get('string').encode("utf8"))
if de.get("sum"):
res.append(de.get('sum').encode("utf8"))
+ if de.get("confirm"):
+ res.append(de.get('confirm').encode("utf8"))
for n in de:
res.extend(trans_parse_view(n))
return res
diff --git a/bin/tools/yaml_import.py b/bin/tools/yaml_import.py
index 0098e4e2117..6e5a581be73 100644
--- a/bin/tools/yaml_import.py
+++ b/bin/tools/yaml_import.py
@@ -34,7 +34,8 @@ def is_comment(node):
return isinstance(node, types.StringTypes)
def is_assert(node):
- return _is_yaml_mapping(node, yaml_tag.Assert)
+ return isinstance(node, yaml_tag.Assert) \
+ or _is_yaml_mapping(node, yaml_tag.Assert)
def is_record(node):
return _is_yaml_mapping(node, yaml_tag.Record)
@@ -218,19 +219,22 @@ class YamlInterpreter(object):
elif assertion.search:
q = eval(assertion.search, self.eval_context)
ids = self.pool.get(assertion.model).search(self.cr, self.uid, q, context=assertion.context)
- if not ids:
+ else:
raise YamlImportException('Nothing to assert: you must give either an id or a search criteria.')
return ids
def process_assert(self, node):
- assertion, expressions = node.items()[0]
+ if isinstance(node, dict):
+ assertion, expressions = node.items()[0]
+ else:
+ assertion, expressions = node, []
if self.isnoupdate(assertion) and self.mode != 'init':
self.logger.warn('This assertion was not evaluated ("%s").' % assertion.string)
return
model = self.get_model(assertion.model)
ids = self._get_assertion_id(assertion)
- if assertion.count and len(ids) != assertion.count:
+ if assertion.count is not None and len(ids) != assertion.count:
msg = 'assertion "%s" failed!\n' \
' Incorrect search count:\n' \
' expected count: %d\n' \
diff --git a/bin/tools/yaml_tag.py b/bin/tools/yaml_tag.py
index e12aecdcd96..20aabf1c54c 100644
--- a/bin/tools/yaml_tag.py
+++ b/bin/tools/yaml_tag.py
@@ -16,7 +16,7 @@ class YamlTag(object):
return "<%s %s>" % (self.__class__.__name__, sorted(self.__dict__.items()))
class Assert(YamlTag):
- def __init__(self, model, id, severity=logging.WARNING, string="NONAME", **kwargs):
+ def __init__(self, model, id=None, severity=logging.WARNING, string="NONAME", **kwargs):
self.model = model
self.id = id
self.severity = severity