コード例 #1
0
ファイル: test_func.py プロジェクト: 4myPAL/odoo
    def test_frozendict_hash(self):
        """ Ensure that a frozendict is hashable. """
        # dict with simple values
        hash(frozendict({'name': 'Joe', 'age': 42}))

        # dict with tuples, lists, and embedded dicts
        hash(frozendict({
            'user_id': (42, 'Joe'),
            'line_ids': [(0, 0, {'values': [42]})],
        }))
コード例 #2
0
    def test_frozendict_hash(self):
        """ Ensure that a frozendict is hashable. """
        # dict with simple values
        hash(frozendict({'name': 'Joe', 'age': 42}))

        # dict with tuples, lists, and embedded dicts
        hash(
            frozendict({
                'user_id': (42, 'Joe'),
                'line_ids': [(0, 0, {
                    'values': [42]
                })],
            }))
コード例 #3
0
ファイル: test_func.py プロジェクト: 4myPAL/odoo
    def test_frozendict_immutable(self):
        """ Ensure that a frozendict is immutable. """
        vals = {'name': 'Joe', 'age': 42}
        frozen_vals = frozendict(vals)

        # check __setitem__, __delitem__
        with self.assertRaises(Exception):
            frozen_vals['surname'] = 'Jack'
        with self.assertRaises(Exception):
            frozen_vals['name'] = 'Jack'
        with self.assertRaises(Exception):
            del frozen_vals['name']

        # check update, setdefault, pop, popitem, clear
        with self.assertRaises(Exception):
            frozen_vals.update({'surname': 'Jack'})
        with self.assertRaises(Exception):
            frozen_vals.update({'name': 'Jack'})
        with self.assertRaises(Exception):
            frozen_vals.setdefault('surname', 'Jack')
        with self.assertRaises(Exception):
            frozen_vals.pop('surname', 'Jack')
        with self.assertRaises(Exception):
            frozen_vals.pop('name', 'Jack')
        with self.assertRaises(Exception):
            frozen_vals.popitem()
        with self.assertRaises(Exception):
            frozen_vals.clear()
コード例 #4
0
ファイル: api.py プロジェクト: rkhalil1990/addsol_hr
    def __new__(cls, cr, uid, context):
        assert context is not None
        args = (cr, uid, context)

        # if env already exists, return it
        if hasattr(cls._local, 'environments'):
            env, envs = None, cls._local.environments
        else:
            env, envs = None, Environments()
        for env in envs:
            if env.args == args:
                return env

        # otherwise create environment, and add it in the set
        self = object.__new__(cls)
        self.cr, self.uid, self.context = self.args = (cr, uid,
                                                       frozendict(context))
        self.registry = RegistryManager.get(cr.dbname)
        self.cache = defaultdict(dict)  # {field: {id: value, ...}, ...}
        self.prefetch = defaultdict(set)  # {model_name: set(id), ...}
        self.computed = defaultdict(set)  # {field: set(id), ...}
        self.dirty = defaultdict(set)  # {record: set(field_name), ...}
        self.all = envs
        envs.add(self)
        return self
コード例 #5
0
ファイル: api.py プロジェクト: zbqf109/goodo
    def __new__(cls, cr, uid, context):
        assert context is not None
        args = (cr, uid, context)

        # if env already exists, return it
        env, envs = None, cls.envs
        for env in envs:
            if env.args == args:
                return env

        # otherwise create environment, and add it in the set
        self = object.__new__(cls)
        self.cr, self.uid, self.context = self.args = (cr, uid, frozendict(context))
        try:
            dbname = context.get('dbname')
        except Exception as e:
            # TODO split `dbname` from `cr.connection.dsn`
            print e.message
            raise
        self.registry = RegistryManager.get(dbname)
        self.cache = defaultdict(dict)      # {field: {id: value, ...}, ...}
        self.prefetch = defaultdict(set)    # {model_name: set(id), ...}
        self.computed = defaultdict(set)    # {field: set(id), ...}
        self.dirty = defaultdict(set)       # {record: set(field_name), ...}
        self.all = envs
        envs.add(self)
        return self
コード例 #6
0
    def test_frozendict_immutable(self):
        """ Ensure that a frozendict is immutable. """
        vals = {'name': 'Joe', 'age': 42}
        frozen_vals = frozendict(vals)

        # check __setitem__, __delitem__
        with self.assertRaises(Exception):
            frozen_vals['surname'] = 'Jack'
        with self.assertRaises(Exception):
            frozen_vals['name'] = 'Jack'
        with self.assertRaises(Exception):
            del frozen_vals['name']

        # check update, setdefault, pop, popitem, clear
        with self.assertRaises(Exception):
            frozen_vals.update({'surname': 'Jack'})
        with self.assertRaises(Exception):
            frozen_vals.update({'name': 'Jack'})
        with self.assertRaises(Exception):
            frozen_vals.setdefault('surname', 'Jack')
        with self.assertRaises(Exception):
            frozen_vals.pop('surname', 'Jack')
        with self.assertRaises(Exception):
            frozen_vals.pop('name', 'Jack')
        with self.assertRaises(Exception):
            frozen_vals.popitem()
        with self.assertRaises(Exception):
            frozen_vals.clear()
コード例 #7
0
 def inter_call(self, data):
     cr, uid, context = self.env.args
     context = dict(context)
     context.update({'depends': {}})
     self.env.args = cr, uid, frozendict(context)
     res = base_module_save._create_module(self,
                                           self._cr,
                                           self.env.user.id,
                                           data,
                                           context=context)
     mod_obj = self.env['ir.model.data']
     model_data_ids = mod_obj.search([('model', '=', 'ir.ui.view'),
                                      ('name', '=',
                                       'module_create_form_view')])
     resource_id = model_data_ids.read(fields=['res_id'])[0]['res_id']
     context.update(res)
     return {
         'name': _('Module Recording'),
         'context': {
             'default_module_filename': ustr(res['module_filename']),
             'default_module_file': ustr(res['module_file']),
         },
         'view_type': 'form',
         'view_mode': 'form',
         'res_model': 'base.module.record.objects',
         'views': [(resource_id, 'form')],
         'type': 'ir.actions.act_window',
         'target': 'new',
     }
コード例 #8
0
 def recompute(self):
     """ Recompute stored function fields. The fields and records to
         recompute have been determined by method :meth:`modified`.
     """
     while self.env.has_todo():
         field, recs = self.env.get_todo()
         # determine the fields to recompute
         fs = self.env[field.model_name]._field_computed[field]
         ns = [f.name for f in fs if f.store]
         # evaluate fields, and group record ids by update
         updates = defaultdict(set)
         for rec in recs.exists():
             # Inicio HACK
             to_write = {}
             for n in ns:
                 try:
                     to_write[n] = rec[n]
                 except Exception, e:
                     print 'HACK "project_edt_idu/models/hack.py->project.recompute_hack" aplicado', rec._name, rec.id, n
                     pass
             vals = rec._convert_to_write(to_write)
             # Fin HACK
             # Original: vals = rec._convert_to_write({n: rec[n] for n in ns})
             updates[frozendict(vals)].add(rec.id)
         # update records in batch when possible
         with recs.env.norecompute():
             for vals, ids in updates.iteritems():
                 recs.browse(ids)._write(dict(vals))
         # mark computed fields as done
         map(recs._recompute_done, fs)
 def inter_call(self, data):
     cr, uid, context = self.env.args
     context = dict(context)
     context.update({'depends': {}})
     self.env.args = cr, uid, frozendict(context)
     res = base_module_save._create_module(self, self._cr,
                                           self.env.user.id, data,
                                           context=context)
     mod_obj = self.env['ir.model.data']
     model_data_ids = mod_obj.search([('model', '=', 'ir.ui.view'),
                                      ('name', '=',
                                       'module_create_form_view')])
     resource_id = model_data_ids.read(fields=['res_id'])[0]['res_id']
     context.update(res)
     return {
         'name': _('Module Recording'),
         'context': {
             'default_module_filename': ustr(res['module_filename']),
             'default_module_file': ustr(res['module_file']),
         },
         'view_type': 'form',
         'view_mode': 'form',
         'res_model': 'base.module.record.objects',
         'views': [(resource_id, 'form')],
         'type': 'ir.actions.act_window',
         'target': 'new',
     }
コード例 #10
0
 def recompute(self):
     """ Recompute stored function fields. The fields and records to
         recompute have been determined by method :meth:`modified`.
     """
     while self.env.has_todo():
         field, recs = self.env.get_todo()
         # determine the fields to recompute
         fs = self.env[field.model_name]._field_computed[field]
         ns = [f.name for f in fs if f.store]
         # evaluate fields, and group record ids by update
         updates = defaultdict(set)
         for rec in recs.exists():
             # Inicio HACK
             to_write = {}
             for n in ns:
                 try:
                     to_write[n] = rec[n]
                 except Exception, e:
                     print 'HACK "project_edt_idu/models/hack.py->project.recompute_hack" aplicado', rec._name, rec.id, n
                     pass
             vals = rec._convert_to_write(to_write)
             # Fin HACK
             # Original: vals = rec._convert_to_write({n: rec[n] for n in ns})
             updates[frozendict(vals)].add(rec.id)
         # update records in batch when possible
         with recs.env.norecompute():
             for vals, ids in updates.iteritems():
                 recs.browse(ids)._write(dict(vals))
         # mark computed fields as done
         map(recs._recompute_done, fs)
コード例 #11
0
 def _get_id(self, model, id):
     if type(id) == type(()):
         id = id[0]
     if (model, id) in self.blank_dict:
         res_id = self.blank_dict[(model, id)]
         return res_id, False
     dt = self.env['ir.model.data']
     obj = dt.search([('model', '=', model), ('res_id', '=', id)])
     if not obj:
         return False, None
     obj = obj[0]
     cr, uid, context = self.env.args
     context = dict(context)
     self.env.args = cr, uid, frozendict(context)
     depends = context.get('depends')
     depends[obj.module] = True
     return obj.module + '.' + obj.name, obj.noupdate
コード例 #12
0
 def _get_id(self, model, id):
     if type(id) == type(()):
         id = id[0]
     if (model, id) in self.blank_dict:
         res_id = self.blank_dict[(model, id)]
         return res_id, False
     dt = self.env['ir.model.data']
     obj = dt.search([('model', '=', model), ('res_id', '=', id)])
     if not obj:
         return False, None
     obj = obj[0]
     cr, uid, context = self.env.args
     context = dict(context)
     self.env.args = cr, uid, frozendict(context)
     depends = context.get('depends')
     depends[obj.module] = True
     return obj.module + '.' + obj.name, obj.noupdate
コード例 #13
0
    def __new__(cls, cr, uid, context):
        assert context is not None
        args = (cr, uid, context)

        # if env already exists, return it
        env, envs = None, cls.envs
        for env in envs:
            if env.args == args:
                return env

        # otherwise create environment, and add it in the set
        self = object.__new__(cls)
        self.cr, self.uid, self.context = self.args = (cr, uid, frozendict(context))
        self.registry = RegistryManager.get(cr.dbname)
        self.cache = defaultdict(dict)              # {field: {id: value, ...}, ...}
        self._protected = defaultdict(frozenset)    # {field: ids, ...}
        self.dirty = defaultdict(set)               # {record: set(field_name), ...}
        self.all = envs
        envs.add(self)
        return self
コード例 #14
0
    def _get_id(self, model, id):
        if isinstance(id, tuple):
            id = id[0]
        if (model, id) in self.blank_dict:
            res_id = self.blank_dict[(model, id)]
            return res_id, False
        dt = self.env['ir.model.data']
        obj = dt.search([('model', '=', model), ('res_id', '=', id)])
        if not obj:
            return False, None
        obj = obj[0]
        # obj = dt.browse(dtids[0])
        cr, uid, context = self.env.args
        context = dict(context)
#        context.update({'depends': {}})
#        self.depends[obj.module] = True
        self.env.args = cr, uid, frozendict(context)
        depends = context.get('depends')
        depends[obj.module] = True
        return obj.module + '.' + obj.name, obj.noupdate
コード例 #15
0
ファイル: api.py プロジェクト: 474416133/odoo
    def __new__(cls, cr, uid, context):
        assert context is not None
        args = (cr, uid, context)

        # if env already exists, return it
        env, envs = None, cls.envs
        for env in envs:
            if env.args == args:
                return env

        # otherwise create environment, and add it in the set
        self = object.__new__(cls)
        self.cr, self.uid, self.context = self.args = (cr, uid, frozendict(context))
        self.registry = RegistryManager.get(cr.dbname)
        self.cache = defaultdict(dict)      # {field: {id: value, ...}, ...}
        self.computed = defaultdict(set)    # {field: set(id), ...}
        self.dirty = defaultdict(set)       # {record: set(field_name), ...}
        self.all = envs
        envs.add(self)
        return self
コード例 #16
0
 def _get_id(self, model, id):
     if isinstance(id, tuple):
         id = id[0]
     if (model, id) in self.blank_dict:
         res_id = self.blank_dict[(model, id)]
         return res_id, False
     dt = self.env['ir.model.data']
     obj = dt.search([('model', '=', model), ('res_id', '=', id)])
     if not obj:
         return False, None
     obj = obj[0]
     #        obj = dt.browse(dtids[0])
     cr, uid, context = self.env.args
     context = dict(context)
     #        context.update({'depends': {}})
     #        self.depends[obj.module] = True
     self.env.args = cr, uid, frozendict(context)
     depends = context.get('depends')
     depends[obj.module] = True
     return obj.module + '.' + obj.name, obj.noupdate
    def record_objects(self):
        data = self.read([])[0]
        check_date = data['check_date']
        filter_cond = data['filter_cond']
#        user = (self.env['res.users'].browse(self.env.user.id)).login
#        mod = self.env['ir.module.record']
        mod_obj = self.env['ir.model']
#        mod.recording_data = []
        cr, uid, context = self.env.args
        context = dict(context)
        context.update({'recording_data': []})
        recording_data = context.get('recording_data')
        self.env.args = cr, uid, frozendict(context)
        for id in data['objects']:
            obj_name = (mod_obj.browse(id)).model
            obj_pool = self.env[obj_name]
            if filter_cond == 'created':
                search_condition = [('create_date', '>', check_date)]
            elif filter_cond == 'modified':
                search_condition = [('write_date', '>', check_date)]
            elif filter_cond == 'created_modified':
                search_condition = ['|', ('create_date', '>', check_date),
                                    ('write_date', '>', check_date)]
            if '_log_access' in dir(obj_pool):
                if not (obj_pool._log_access):
                    search_condition = []
                if '_auto' in dir(obj_pool):
                    if not obj_pool._auto:
                        continue
            search_ids = obj_pool.search(search_condition)
            for s_id in search_ids:
                dbname = self.env.cr.dbname
                args = (dbname, self.env.user.id, obj_name,
                        'copy', s_id.id, {})
                recording_data.append(('query', args, {}, s_id.id))
        mod_obj = self.env['ir.model.data']
        if len(recording_data):
            if data['info_yaml']:
                res = self._create_yaml(data)
            else:
                res = self._create_xml(data)
            model_data_ids = mod_obj.search([('model', '=', 'ir.ui.view'),
                                             ('name', '=',
                                              'module_create_xml_view')])
            resource_id = model_data_ids.read(['res_id'])[0]['res_id']
            return {
                'name': _('Data Recording'),
                'context': {'default_res_text': ustr(res['res_text'])},
                'view_type': 'form',
                'view_mode': 'form',
                'res_model': 'base.module.record.data',
                'views': [(resource_id, 'form')],
                'type': 'ir.actions.act_window',
                'target': 'new',
            }
        model_data_ids = mod_obj.search([('model', '=', 'ir.ui.view'),
                                         ('name', '=',
                                          'module_recording_message_view')])
        resource_id = model_data_ids.read(['res_id'])[0]['res_id']
        return {
            'name': _('Module Recording'),
            'context': {},
            'view_type': 'form',
            'view_mode': 'form',
            'res_model': 'base.module.record.objects',
            'views': [(resource_id, 'form')],
            'type': 'ir.actions.act_window',
            'target': 'new',
        }
コード例 #18
0
 def _create_yaml_record(self, model, data, record_id):
     record = {'model': model, 'id': str(record_id)}
     model_pool = self.env[model]
     data_pool = self.env['ir.model.data']
     lids = data_pool.search([('model', '=', model)])
     res = lids[:1].read(['module'])
     attrs = {}
     cr, uid, context = self.env.args
     context = dict(context)
     context.update({'depends': {}})
     depends = context.get('depends')
     self.env.args = cr, uid, frozendict(context)
     if res:
         depends[res[0]['module']] = True
         # if depends is None:
         # depends = {}
         # self.depends[res[0]['module']]=True
     fields = model_pool.fields_get()
     defaults = {}
     try:
         defaults[model] = model_pool.default_get(data)
     except:
         defaults[model] = {}
     for key, val in data.items():
         relation = fields.get(key, {}).get('relation')
         if ((key in defaults[model]) and (val == defaults[model][key]))\
                 and not(fields[key].get('required', False)):
             continue
         if fields[key]['type'] in ('integer', 'float'):
             if not val:
                 val = 0.0
             attrs[key] = val
         elif not (val or (fields[key]['type'] == 'function')):
             continue
         elif fields[key]['type'] in ('boolean',):
             if not val:
                 continue
             attrs[key] = val
         elif fields[key]['type'] in ('many2one',):
             if type(val) in (type(''), type(u'')):
                 id = val
             else:
                 id, update = self._get_id(relation, val)
             attrs[key] = str(id)
         elif fields[key]['type'] in ('one2many',):
             items = [[]]
             for valitem in (val or []):
                 if valitem[0] in (0, 1):
                     if key in model_pool._columns:
                         fname = model_pool._columns[key]._fields_id
                     else:
                         fname =\
                             model_pool._inherit_fields[key][2]._fields_id
                     # delete parent_field from child's fields list
                     del valitem[2][fname]
                     childrecord = self._create_yaml_record(relation,
                                                            valitem[2],
                                                            None)
                     items[0].append(childrecord['attrs'])
             attrs[key] = items
         elif fields[key]['type'] in ('many2many',):
             if (key in defaults[model]) and\
                     (val[0][2] == defaults[model][key]):
                 continue
             res = []
             for valitem in (val or []):
                 if valitem[0] == 6:
                     for id2 in valitem[2]:
                         id, update = self._get_id(relation, id2)
                         self.blank_dict[(relation, id2)] = id
                         res.append(str(id))
                     m2m = [res]
             if m2m[0]:
                 attrs[key] = m2m
         else:
             try:
                 attrs[key] = str(val)
             except:
                 attrs[key] = ustr(val)
             attrs[key] = attrs[key].replace('"', '\'')
     record['attrs'] = attrs
     return record
コード例 #19
0
 def _create_yaml_record(self, model, data, record_id):
     record = {'model': model, 'id': str(record_id)}
     model_pool = self.env[model]
     data_pool = self.env['ir.model.data']
     lids = data_pool.search([('model', '=', model)])
     res = lids[:1].read(['module'])
     attrs = {}
     cr, uid, context = self.env.args
     context = dict(context)
     context.update({'depends': {}})
     depends = context.get('depends')
     self.env.args = cr, uid, frozendict(context)
     if res:
         depends[res[0]['module']] = True
     fields = model_pool.fields_get()
     defaults = {}
     try:
         defaults[model] = model_pool.default_get(data)
     except:
         defaults[model] = {}
     for key, val in data.items():
         if ((key in defaults[model]) and
             (val == defaults[model][key])) and not (fields[key].get(
                 'required', False)):
             continue
         if fields[key]['type'] in ('integer', 'float'):
             if not val:
                 val = 0.0
             attrs[key] = val
         elif not (val or (fields[key]['type'] == 'function')):
             continue
         elif fields[key]['type'] in ('boolean', ):
             if not val:
                 continue
             attrs[key] = val
         elif fields[key]['type'] in ('many2one', ):
             if type(val) in (type(''), type(u'')):
                 id = val
             else:
                 id, update = self._get_id(fields[key]['relation'], val)
             attrs[key] = str(id)
         elif fields[key]['type'] in ('one2many', ):
             items = [[]]
             for valitem in (val or []):
                 if valitem[0] in (0, 1):
                     if key in model_pool._fields:
                         fname = model_pool._fields[key].inverse_name
                     else:
                         fname = model_pool._inherit_fields[key][
                             2].inverse_name
                     del valitem[2][
                         fname]  # delete parent_field from child's fields list
                     childrecord = self._create_yaml_record(
                         fields[key]['relation'], valitem[2], None)
                     items[0].append(childrecord['attrs'])
             attrs[key] = items
         elif fields[key]['type'] in ('many2many', ):
             if (key in defaults[model]) and (val[0][2]
                                              == defaults[model][key]):
                 continue
             res = []
             for valitem in (val or []):
                 if valitem[0] == 6:
                     for id2 in valitem[2]:
                         id, update = self._get_id(fields[key]['relation'],
                                                   id2)
                         self.blank_dict[(fields[key]['relation'],
                                          id2)] = id
                         res.append(str(id))
                     m2m = [res]
             if m2m[0]:
                 attrs[key] = m2m
         else:
             try:
                 attrs[key] = str(val)
             except:
                 attrs[key] = ustr(val)
             attrs[key] = attrs[key].replace('"', '\'')
     record['attrs'] = attrs
     return record
コード例 #20
0
import xmlrpclib
from operator import itemgetter
from psycopg2 import Binary

import openerp
import openerp.tools as tools
from openerp.sql_db import LazyCursor
from openerp.tools.translate import _
from openerp.tools import float_repr, float_round, frozendict, html_sanitize
import json
from openerp import SUPERUSER_ID

# deprecated; kept for backward compatibility only
_get_cursor = LazyCursor

EMPTY_DICT = frozendict()

_logger = logging.getLogger(__name__)


def _symbol_set(symb):
    if symb is None or symb == False:
        return None
    elif isinstance(symb, unicode):
        return symb.encode('utf-8')
    return str(symb)


class _column(object):
    """ Base of all fields, a database column
コード例 #21
0
 def _create_record(self, doc, model, data, record_id, noupdate=False):
     data_pool = self.env['ir.model.data']
     model_pool = self.env[model]
     record = doc.createElement('record')
     record.setAttribute("id", record_id)
     record.setAttribute("model", model)
     record_list = [record]
     lids = data_pool.search([('model', '=', model)])
     lids = lids[:1]
     res = lids.read(['module'])
     cr, uid, context = self.env.args
     context = dict(context)
     context.update({'depends': {}})
     depends = context.get('depends')
     self.env.args = cr, uid, frozendict(context)
     if res:
         depends[res[0]['module']] = True
     fields = model_pool.fields_get()
     for key, val in data.items():
         # functional fields check
         if key in model_pool._fields.keys(
         ) and not model_pool._fields[key].store:
             continue
         if not (val or (fields[key]['type'] == 'boolean')):
             continue
         if (fields[key]['type'] in ('integer', 'float')
                 or fields[key]['type'] == 'selection'
                 and isinstance(val, int)):
             field = doc.createElement('field')
             field.setAttribute("name", key)
             field.setAttribute("eval", val and str(val) or 'False')
             record.appendChild(field)
         elif fields[key]['type'] in ('boolean', ):
             field = doc.createElement('field')
             field.setAttribute("name", key)
             field.setAttribute("eval", val and '1' or '0')
             record.appendChild(field)
         elif fields[key]['type'] in ('many2one', ):
             field = doc.createElement('field')
             field.setAttribute("name", key)
             if type(val) in (type(''), type(u'')):
                 id = val
             else:
                 id, update = self._get_id(fields[key]['relation'], val)
                 noupdate = noupdate or update
             if not id:
                 relation_pool = self.env[fields[key]['relation']]
                 field.setAttribute("model", fields[key]['relation'])
                 fld_nm = relation_pool._rec_name
                 val = relation_pool.browse(val)
                 name = val.read([fld_nm])[0][fld_nm] or False
                 field.setAttribute("search",
                                    str([(str(fld_nm), '=', name)]))
             else:
                 field.setAttribute("ref", id)
             record.appendChild(field)
         elif fields[key]['type'] in ('one2many', ):
             for valitem in (val or []):
                 if valitem[0] in (0, 1):
                     if key in model_pool._fields:
                         model_pool._fields[key].inverse_name
                     else:
                         model_pool._inherit_fields[key][2].inverse_name
                     if valitem[0] == 0:
                         newid = self._create_id(fields[key]['relation'],
                                                 valitem[2])
                         valitem[1] = newid
                     else:
                         newid, update = self._get_id(
                             fields[key]['relation'], valitem[1])
                         if not newid:
                             newid = self._create_id(
                                 fields[key]['relation'], valitem[2])
                             valitem[1] = newid
                     self.blank_dict[(fields[key]['relation'],
                                      valitem[1])] = newid
                     childrecord, update = self._create_record(
                         doc, fields[key]['relation'], valitem[2], newid)
                     noupdate = noupdate or update
                     record_list += childrecord
                 else:
                     pass
         elif fields[key]['type'] in ('many2many', ):
             res = []
             for valitem in (val or []):
                 if valitem[0] == 6:
                     for id2 in valitem[2]:
                         id, update = self._get_id(fields[key]['relation'],
                                                   id2)
                         self.blank_dict[(fields[key]['relation'],
                                          id2)] = id
                         noupdate = noupdate or update
                         res.append(id)
                     field = doc.createElement('field')
                     field.setAttribute("name", key)
                     field.setAttribute(
                         "eval", "[(6,0,[" +
                         ','.join(map(lambda x: "ref('%s')" %
                                      (x, ), res)) + '])]')
                     record.appendChild(field)
         else:
             field = doc_createXElement(doc, 'field')
             field.setAttribute("name", key)
             field.appendChild(doc.createTextNode(ustr(val)))
             record.appendChild(field)
     return record_list, noupdate
コード例 #22
0
 def record_objects(self):
     data = self.read([])[0]
     check_date = data['check_date']
     filter_cond = data['filter_cond']
     #        user = (self.env['res.users'].browse(self.env.user.id)).login
     #        mod = self.env['ir.module.record']
     mod_obj = self.env['ir.model']
     #        mod.recording_data = []
     cr, uid, context = self.env.args
     context = dict(context)
     context.update({'recording_data': []})
     recording_data = context.get('recording_data')
     self.env.args = cr, uid, frozendict(context)
     for obj_id in data['objects']:
         obj_name = (mod_obj.browse(obj_id)).model
         obj_pool = self.env[obj_name]
         if filter_cond == 'created':
             search_condition = [('create_date', '>', check_date)]
         elif filter_cond == 'modified':
             search_condition = [('write_date', '>', check_date)]
         elif filter_cond == 'created_modified':
             search_condition = [
                 '|', ('create_date', '>', check_date),
                 ('write_date', '>', check_date)
             ]
         if '_log_access' in dir(obj_pool):
             if not (obj_pool._log_access):
                 search_condition = []
             if '_auto' in dir(obj_pool):
                 if not obj_pool._auto:
                     continue
         search_ids = obj_pool.search(search_condition)
         for s_id in search_ids:
             dbname = self.env.cr.dbname
             args = (dbname, self.env.user.id, obj_name, 'copy', s_id.id,
                     {})
             recording_data.append(('query', args, {}, s_id.id))
     mod_obj = self.env['ir.model.data']
     if len(recording_data):
         if data['info_yaml']:
             res = base_module_save._create_yaml(self, data)
             model_data_ids = mod_obj.search([('model', '=', 'ir.ui.view'),
                                              ('name', '=',
                                               'yml_save_form_view')])
             resource_id = model_data_ids.read(['res_id'])[0]['res_id']
             return {
                 'name': _('Module Recording'),
                 'context': {
                     'default_yaml_file': ustr(res['yaml_file']),
                     'default_module_filename': 'demo_yaml.yml',
                 },
                 'view_type': 'form',
                 'view_mode': 'form',
                 'res_model': 'base.module.record.objects',
                 'views': [(resource_id, 'form')],
                 'type': 'ir.actions.act_window',
                 'target': 'new',
             }
         else:
             model_data_ids = mod_obj.search([('model', '=', 'ir.ui.view'),
                                              ('name', '=',
                                               'info_start_form_view')])
             resource_id = model_data_ids.read(['res_id'])[0]['res_id']
             return {
                 'name': _('Module Recording'),
                 'context': context,
                 'view_type': 'form',
                 'view_mode': 'form',
                 'res_model': 'base.module.record.objects',
                 'views': [(resource_id, 'form')],
                 'type': 'ir.actions.act_window',
                 'target': 'new',
             }
     model_data_ids = mod_obj.search([('model', '=', 'ir.ui.view'),
                                      ('name', '=',
                                       'module_recording_message_view')])
     resource_id = model_data_ids.read(['res_id'])[0]['res_id']
     return {
         'name': _('Module Recording'),
         'context': self.env.context,
         'view_type': 'form',
         'view_mode': 'form',
         'res_model': 'base.module.record.objects',
         'views': [(resource_id, 'form')],
         'type': 'ir.actions.act_window',
         'target': 'new',
     }
コード例 #23
0
    def _create_record(self, doc, model, data, record_id, noupdate=False):
        data_pool = self.env['ir.model.data']
        model_pool = self.env[model]
#        cr, uid, context = self.env.args
#        context = dict(context)
        record = doc.createElement('record')
        record.setAttribute("id", record_id)
        record.setAttribute("model", model)
        record_list = [record]
        lids = data_pool.search([('model', '=', model)])
        lids = lids[:1]
        res = lids.read(['module'])
        cr, uid, context = self.env.args
        context = dict(context)
        context.update({'depends': {}})
        depends = context.get('depends')
        self.env.args = cr, uid, frozendict(context)
        if res:
            depends[res[0]['module']] = True
        fields = model_pool.fields_get()
        for key, val in data.items():
            relation = fields.get(key, {}).get('relation')
            if key in model_pool._columns.keys()\
                    and isinstance(model_pool._columns[key], function_field)\
                    and not model_pool._columns[key].store:
                continue
            if not (val or (fields[key]['type'] == 'boolean')):
                continue
            if (fields[key]['type'] in ('integer', 'float') or
                    fields[key]['type'] == 'selection' and
                    isinstance(val, int)):
                field = doc.createElement('field')
                field.setAttribute("name", key)
                field.setAttribute("eval", val and str(val) or 'False')
                record.appendChild(field)
            elif fields[key]['type'] in ('boolean',):
                field = doc.createElement('field')
                field.setAttribute("name", key)
                field.setAttribute("eval", val and '1' or '0')
                record.appendChild(field)
            elif fields[key]['type'] in ('many2one',):
                field = doc.createElement('field')
                field.setAttribute("name", key)
                if type(val) in (type(''), type(u'')):
                    id = val
                else:
                    id, update = self._get_id(relation, val)
                    noupdate = noupdate or update
                if not id:
                    relation_pool = self.env[relation]
                    field.setAttribute("model", relation)
                    fld_nm = relation_pool._rec_name
                    val = relation_pool.browse(val)
                    name = val.read([fld_nm])[0][fld_nm] or False
                    field.setAttribute("search",
                                       str([(str(fld_nm), '=', name)]))
                else:
                    field.setAttribute("ref", id)
                record.appendChild(field)
            elif fields[key]['type'] in ('one2many',):
                for valitem in (val or []):
                    if valitem[0] in (0, 1):
                        # if key in model_pool._columns:
                            # model_pool._columns[key]._fields_id
                        # else:
                            # model_pool._inherit_fields[key][2]._fields_id
                        if valitem[0] == 0:
                            newid = self._create_id(relation, valitem[2])
                            valitem[1] = newid
                        else:
                            newid, update = self._get_id(relation, valitem[1])
                            if not newid:
                                newid = self._create_id(relation, valitem[2])
                                valitem[1] = newid
                        self.blank_dict[(relation, valitem[1])] = newid
                        childrecord, update = self._create_record(doc,
                                                                  relation,
                                                                  valitem[2],
                                                                  newid)
                        noupdate = noupdate or update
                        record_list += childrecord
                    else:
                        pass
            elif fields[key]['type'] in ('many2many',):
                res = []
                for valitem in (val or []):
                    if valitem[0] == 6:
                        for id2 in valitem[2]:
                            id, update = self._get_id(relation, id2)
                            self.blank_dict[(relation, id2)] = id
                            noupdate = noupdate or update
                            res.append(id)
                        field = doc.createElement('field')
                        field.setAttribute("name", key)
                        field.setAttribute("eval", "[(6,0,[" +
                                           ','.join(map(lambda x: "ref('%s')"
                                                        % (x,), res)) + '])]')
                        record.appendChild(field)
            else:
                field = doc_createXElement(doc, 'field')
                field.setAttribute("name", key)
                field.appendChild(doc.createTextNode(val))
                record.appendChild(field)
        return record_list, noupdate