Ejemplo n.º 1
0
    def init(cursor):
        from trytond.modules import get_module_info
        sql_file = os.path.join(os.path.dirname(__file__), 'init.sql')
        with open(sql_file) as fp:
            for line in fp.read().split(';'):
                if (len(line) > 0) and (not line.isspace()):
                    cursor.execute(line)

        ir_module = Table('ir_module_module')
        ir_module_dependency = Table('ir_module_module_dependency')
        for module in ('ir', 'res', 'webdav'):
            state = 'uninstalled'
            if module in ('ir', 'res'):
                state = 'to install'
            info = get_module_info(module)
            insert = ir_module.insert([
                ir_module.create_uid, ir_module.create_date, ir_module.name,
                ir_module.state
            ], [[0, Now(), module, state]])
            cursor.execute(*insert)
            cursor.execute('SELECT last_insert_rowid()')
            module_id, = cursor.fetchone()
            for dependency in info.get('depends', []):
                insert = ir_module_dependency.insert([
                    ir_module_dependency.create_uid,
                    ir_module_dependency.create_date,
                    ir_module_dependency.module, ir_module_dependency.name
                ], [[0, Now(), module_id, dependency]])
                cursor.execute(*insert)
Ejemplo n.º 2
0
    def table_query():
        pool = Pool()
        Move = pool.get('stock.move')
        Location = pool.get('stock.location')
        move = Move.__table__()

        product_id = Transaction().context.get('product')
        warehouse_id = Transaction().context.get('warehouse', -1)
        warehouse_query = Location.search([
                ('parent', 'child_of', [warehouse_id]),
                ], query=True, order=[])
        date_column = Coalesce(move.effective_date, move.planned_date
            ).as_('date')
        return move.select(
            Max(move.id).as_('id'),
            Literal(0).as_('create_uid'),
            Now().as_('create_date'),
            Literal(None).as_('write_uid'),
            Literal(None).as_('write_date'),
            date_column,
            where=(move.product == product_id)
            & (move.from_location.in_(warehouse_query)
                | move.to_location.in_(warehouse_query))
            & (Coalesce(move.effective_date, move.planned_date) != Null),
            group_by=(date_column, move.product))
Ejemplo n.º 3
0
 def resets(dbname):
     with Transaction().new_cursor():
         cursor = Transaction().cursor
         table = Table('ir_cache')
         with Cache._resets_lock:
             Cache._resets.setdefault(dbname, set())
             for name in Cache._resets[dbname]:
                 cursor.execute(
                     *table.select(table.name, where=table.name == name))
                 if cursor.fetchone():
                     # It would be better to insert only
                     cursor.execute(
                         *table.update([table.timestamp], [Now()],
                                       where=table.name == name))
                 else:
                     cursor.execute(*table.insert(
                         [table.timestamp, table.name], [[Now(), name]]))
             Cache._resets[dbname].clear()
         cursor.commit()
Ejemplo n.º 4
0
 def test_select_function(self):
     query = Now().select()
     self.assertEqual(str(query), 'SELECT * FROM NOW() AS "a"')
     self.assertEqual(query.params, ())
Ejemplo n.º 5
0
 def test_join_function(self):
     t1 = Table('t1')
     join = Join(t1, Now())
     with AliasManager():
         self.assertEqual(str(join), '"t1" AS "a" INNER JOIN NOW() AS "b"')
         self.assertEqual(join.params, ())
Ejemplo n.º 6
0
def load_module_graph(graph, pool, update=None, lang=None):
    if lang is None:
        lang = [config.get('database', 'language')]
    if update is None:
        update = []
    modules_todo = []
    models_to_update_history = set()
    cursor = Transaction().cursor

    modules = [x.name for x in graph]
    cursor.execute(*ir_module.select(
        ir_module.name, ir_module.state, where=ir_module.name.in_(modules)))
    module2state = dict(cursor.fetchall())

    for package in graph:
        module = package.name
        if module not in MODULES:
            continue
        logger.info(module)
        classes = pool.setup(module)
        package_state = module2state.get(module, 'uninstalled')
        if (is_module_to_install(module, update)
                or package_state in ('to install', 'to upgrade')):
            if package_state not in ('to install', 'to upgrade'):
                if package_state == 'installed':
                    package_state = 'to upgrade'
                elif package_state != 'to remove':
                    package_state = 'to install'
            for child in package.childs:
                module2state[child.name] = package_state
            for type in classes.keys():
                for cls in classes[type]:
                    logger.info('%s:register %s', module, cls.__name__)
                    cls.__register__(module)
            for model in classes['model']:
                if hasattr(model, '_history'):
                    models_to_update_history.add(model.__name__)

            # Instanciate a new parser for the package:
            tryton_parser = convert.TrytondXmlHandler(
                pool=pool, module=module, module_state=package_state)

            for filename in package.info.get('xml', []):
                filename = filename.replace('/', os.sep)
                logger.info('%s:loading %s', module, filename)
                # Feed the parser with xml content:
                with tools.file_open(OPJ(module, filename)) as fp:
                    tryton_parser.parse_xmlstream(fp)

            modules_todo.append((module, list(tryton_parser.to_delete)))

            for filename in iglob('%s/%s/*.po' %
                                  (package.info['directory'], 'locale')):
                filename = filename.replace('/', os.sep)
                lang2 = os.path.splitext(os.path.basename(filename))[0]
                if lang2 not in lang:
                    continue
                logger.info('%s:loading %s', module,
                            filename[len(package.info['directory']) + 1:])
                Translation = pool.get('ir.translation')
                Translation.translation_import(lang2, module, filename)

            if package_state == 'to remove':
                continue
            cursor.execute(*ir_module.select(
                ir_module.id, where=(ir_module.name == package.name)))
            try:
                module_id, = cursor.fetchone()
                cursor.execute(
                    *ir_module.update([ir_module.state], ['installed'],
                                      where=(ir_module.id == module_id)))
            except TypeError:
                cursor.execute(*ir_module.insert([
                    ir_module.create_uid, ir_module.create_date,
                    ir_module.name, ir_module.state
                ], [[0, Now(), package.name, 'installed']]))
            module2state[package.name] = 'installed'

        cursor.commit()

    for model_name in models_to_update_history:
        model = pool.get(model_name)
        if model._history:
            logger.info('history:update %s', model.__name__)
            model._update_history_table()

    # Vacuum :
    while modules_todo:
        (module, to_delete) = modules_todo.pop()
        convert.post_import(pool, module, to_delete)

    cursor.commit()