def run(options): main_lang = config.get('database', 'language') init = {} for db_name in options.database_names: init[db_name] = False database = backend.Database(db_name) database.connect() if options.update: if not database.test(): logger.info("init db") database.init() init[db_name] = True elif not database.test(): raise Exception('"%s" is not a Tryton database.' % db_name) for db_name in options.database_names: if options.update: with Transaction().start(db_name, 0) as transaction,\ transaction.connection.cursor() as cursor: database = backend.Database(db_name) database.connect() if not database.test(): raise Exception('"%s" is not a Tryton database.' % db_name) lang = Table('ir_lang') cursor.execute(*lang.select( lang.code, where=lang.translatable == Literal(True))) lang = set([x[0] for x in cursor]) lang.add(main_lang) else: lang = set() lang |= set(options.languages) pool = Pool(db_name) pool.init(update=options.update, lang=list(lang), activatedeps=options.activatedeps) if options.update_modules_list: with Transaction().start(db_name, 0) as transaction: Module = pool.get('ir.module') Module.update_list() if lang: with Transaction().start(db_name, 0) as transaction: pool = Pool() Lang = pool.get('ir.lang') languages = Lang.search([ ('code', 'in', lang), ]) Lang.write(languages, { 'translatable': True, }) for db_name in options.database_names: with Transaction().start(db_name, 0) as transaction: pool = Pool() User = pool.get('res.user') Configuration = pool.get('ir.configuration') configuration = Configuration(1) with transaction.set_context(active_test=False): admin, = User.search([('login', '=', 'admin')]) if options.email is not None: admin.email = options.email elif init[db_name]: admin.email = input('"admin" email for "%s": ' % db_name) if init[db_name] or options.password: configuration.language = main_lang # try to read password from environment variable # TRYTONPASSFILE, empty TRYTONPASSFILE ignored passpath = os.getenv('TRYTONPASSFILE') password = '' if passpath: try: with open(passpath) as passfile: password, = passfile.read().splitlines() except Exception as err: sys.stderr.write('Can not read password ' 'from "%s": "%s"\n' % (passpath, err)) if not password and not options.reset_password: while True: password = getpass('"admin" password for "%s": ' % db_name) password2 = getpass('"admin" password confirmation: ') if password != password2: sys.stderr.write( '"admin" password confirmation ' 'doesn\'t match "admin" password.\n') continue if not password: sys.stderr.write('"admin" password is required.\n') continue break if not options.reset_password: admin.password = password admin.save() if options.reset_password: User.reset_password([admin]) if options.test_email: send_test_email(options.test_email) if options.hostname is not None: configuration.hostname = options.hostname or None configuration.save() with Transaction().start(db_name, 0, readonly=True): if options.validate is not None: validate(options.validate, options.validate_percentage)
def run(options): Database = backend.get('Database') init = {} for db_name in options.database_names: init[db_name] = False with Transaction().start(db_name, 0, _nocache=True): database = Database(db_name) database.connect() if options.update: if not database.test(): logger.info("init db") database.init() init[db_name] = True elif not database.test(): raise Exception('"%s" is not a Tryton database.' % db_name) for db_name in options.database_names: if options.update: with Transaction().start(db_name, 0) as transaction,\ transaction.connection.cursor() as cursor: database = Database(db_name) database.connect() if not database.test(): raise Exception('"%s" is not a Tryton database.' % db_name) lang = Table('ir_lang') cursor.execute(*lang.select(lang.code, where=lang.translatable == True)) lang = set([x[0] for x in cursor.fetchall()]) main_lang = config.get('database', 'language') lang.add(main_lang) else: lang = set() lang |= set(options.languages) pool = Pool(db_name) pool.init(update=options.update, lang=list(lang), installdeps=options.installdeps) if options.update_modules_list: with Transaction().start(db_name, 0) as transaction: Module = pool.get('ir.module') Module.update_list() if lang: with Transaction().start(db_name, 0) as transaction: pool = Pool() Lang = pool.get('ir.lang') languages = Lang.search([ ('code', 'in', lang), ]) Lang.write(languages, { 'translatable': True, }) for db_name in options.database_names: if init[db_name] or options.password: # try to read password from environment variable # TRYTONPASSFILE, empty TRYTONPASSFILE ignored passpath = os.getenv('TRYTONPASSFILE') password = '' if passpath: try: with open(passpath) as passfile: password, = passfile.read().splitlines() except Exception, err: sys.stderr.write('Can not read password ' 'from "%s": "%s"\n' % (passpath, err)) if not password: while True: password = getpass('"admin" password for "%s": ' % db_name) password2 = getpass('"admin" password confirmation: ') if password != password2: sys.stderr.write('"admin" password confirmation ' 'doesn\'t match "admin" password.\n') continue if not password: sys.stderr.write('"admin" password is required.\n') continue break with Transaction().start(db_name, 0) as transaction: pool = Pool() User = pool.get('res.user') admin, = User.search([('login', '=', 'admin')]) User.write([admin], { 'password': password, })
def run(options): Database = backend.get('Database') main_lang = config.get('database', 'language') init = {} for db_name in options.database_names: init[db_name] = False database = Database(db_name) database.connect() if options.update: if not database.test(): logger.info("init db") database.init() init[db_name] = True elif not database.test(): raise Exception('"%s" is not a Tryton database.' % db_name) for db_name in options.database_names: if options.update: with Transaction().start(db_name, 0) as transaction,\ transaction.connection.cursor() as cursor: database = Database(db_name) database.connect() if not database.test(): raise Exception('"%s" is not a Tryton database.' % db_name) lang = Table('ir_lang') cursor.execute( *lang.select(lang.code, where=lang.translatable == True)) lang = set([x[0] for x in cursor.fetchall()]) lang.add(main_lang) else: lang = set() lang |= set(options.languages) pool = Pool(db_name) # XUNG # Create upgrade version control table if it doesn't exist _init_upgrade_version_control_table(db_name) with Transaction().start(db_name, 0) as transaction: # This lock of table will block others workers / # processes until the current upgrade is finished # Attention: lock activated only when -cu is activated # -u can do the update normally cursor = transaction.connection.cursor() if options.check_update: cursor.execute( "LOCK upgrade_version_control IN EXCLUSIVE MODE;") is_upgrade_needed, new_version = _check_update_needed( db_name, options, transaction) if not is_upgrade_needed: options.update = [] options.check_update = [] pool.init(update=options.update or options.check_update, lang=list(lang), activatedeps=options.activatedeps) if is_upgrade_needed: # If upgrade finishes correctly->update version in database try: version_control_table = Table('upgrade_version_control') cursor = transaction.connection.cursor() cursor.execute(*version_control_table.update( columns=[version_control_table.current_version], values=[new_version])) transaction.commit() except: transaction.rollback() raise if options.update_modules_list: with Transaction().start(db_name, 0) as transaction: Module = pool.get('ir.module') Module.update_list() if lang: with Transaction().start(db_name, 0) as transaction: pool = Pool() Lang = pool.get('ir.lang') languages = Lang.search([ ('code', 'in', lang), ]) Lang.write(languages, { 'translatable': True, }) for db_name in options.database_names: with Transaction().start(db_name, 0) as transaction: pool = Pool() User = pool.get('res.user') Configuration = pool.get('ir.configuration') configuration = Configuration(1) with transaction.set_context(active_test=False): admin, = User.search([('login', '=', 'admin')]) if options.email is not None: admin.email = options.email elif init[db_name]: admin.email = input('"admin" email for "%s": ' % db_name) if init[db_name] or options.password: configuration.language = main_lang # try to read password from environment variable # TRYTONPASSFILE, empty TRYTONPASSFILE ignored passpath = os.getenv('TRYTONPASSFILE') password = '' if passpath: try: with open(passpath) as passfile: password, = passfile.read().splitlines() except Exception as err: sys.stderr.write('Can not read password ' 'from "%s": "%s"\n' % (passpath, err)) if not password and not options.reset_password: while True: password = getpass('"admin" password for "%s": ' % db_name) password2 = getpass('"admin" password confirmation: ') if password != password2: sys.stderr.write( '"admin" password confirmation ' 'doesn\'t match "admin" password.\n') continue if not password: sys.stderr.write('"admin" password is required.\n') continue break if not options.reset_password: admin.password = password admin.save() if options.reset_password: User.reset_password([admin]) if options.hostname is not None: configuration.hostname = options.hostname or None configuration.save()