def enable_disable_languages(store, request): cur_enabled_langs = EnabledLanguage.list(store) new_enabled_langs = [unicode(y) for y in request['languages_enabled']] if len(new_enabled_langs) < 1: raise errors.InvalidInputFormat("No languages enabled!") if request['default_language'] not in new_enabled_langs: raise errors.InvalidInputFormat( "Invalid lang code for chosen default_language") appdata = None for lang_code in new_enabled_langs: if lang_code not in LANGUAGES_SUPPORTED_CODES: raise errors.InvalidInputFormat("Invalid lang code: %s" % lang_code) if lang_code not in cur_enabled_langs: if appdata is None: appdata = load_appdata() log.debug("Adding a new lang %s" % lang_code) EnabledLanguage.add_new_lang(store, lang_code, appdata) to_remove = list(set(cur_enabled_langs) - set(new_enabled_langs)) if len(to_remove): users = store.find(models.User, In(models.User.language, to_remove)) for user in users: user.language = request['default_language'] EnabledLanguage.remove_old_langs(store, to_remove)
def enable_disable_languages(store, request): cur_enabled_langs = EnabledLanguage.get_all_strings(store) new_enabled_langs = [unicode(y) for y in request['languages_enabled']] if len(new_enabled_langs) < 1: raise errors.InvalidInputFormat("No languages enabled!") if request['default_language'] not in new_enabled_langs: raise errors.InvalidInputFormat( "Invalid lang code for chosen default_language") appdata = None for lang_code in new_enabled_langs: if lang_code not in LANGUAGES_SUPPORTED_CODES: raise errors.InvalidInputFormat("Invalid lang code: %s" % lang_code) if lang_code not in cur_enabled_langs: if appdata is None: appdata = load_appdata() log.debug("Adding a new lang %s" % lang_code) EnabledLanguage.add_new_lang(store, lang_code, appdata) for lang_code in cur_enabled_langs: if lang_code not in new_enabled_langs: EnabledLanguage.remove_old_lang(store, lang_code)
def enable_disable_languages(store, request): cur_enabled_langs = EnabledLanguage.list(store) new_enabled_langs = [unicode(y) for y in request['languages_enabled']] if len(new_enabled_langs) < 1: raise errors.InvalidInputFormat("No languages enabled!") if request['default_language'] not in new_enabled_langs: raise errors.InvalidInputFormat("Invalid lang code for chosen default_language") appdata = None for lang_code in new_enabled_langs: if lang_code not in LANGUAGES_SUPPORTED_CODES: raise errors.InvalidInputFormat("Invalid lang code: %s" % lang_code) if lang_code not in cur_enabled_langs: if appdata is None: appdata = load_appdata() log.debug("Adding a new lang %s" % lang_code) EnabledLanguage.add_new_lang(store, lang_code, appdata) to_remove = [] for lang_code in cur_enabled_langs: if lang_code not in new_enabled_langs: to_remove.append(lang_code) if len(to_remove): EnabledLanguage.remove_old_langs(store, to_remove)
def enable_disable_languages(store, request): cur_enabled_langs = EnabledLanguage.list(store) new_enabled_langs = [unicode(y) for y in request["languages_enabled"]] if len(new_enabled_langs) < 1: raise errors.InvalidInputFormat("No languages enabled!") if request["default_language"] not in new_enabled_langs: raise errors.InvalidInputFormat("Invalid lang code for chosen default_language") appdata = None for lang_code in new_enabled_langs: if lang_code not in LANGUAGES_SUPPORTED_CODES: raise errors.InvalidInputFormat("Invalid lang code: %s" % lang_code) if lang_code not in cur_enabled_langs: if appdata is None: appdata = load_appdata() log.debug("Adding a new lang %s" % lang_code) EnabledLanguage.add_new_lang(store, lang_code, appdata) to_remove = list(set(cur_enabled_langs) - set(new_enabled_langs)) if len(to_remove): users = store.find(models.User, In(models.User.language, to_remove)) for user in users: user.language = request["default_language"] EnabledLanguage.remove_old_langs(store, to_remove)
def init_db(store, use_single_lang=False): db_create_tables(store) appdata_dict = db_update_appdata(store) log.debug("Performing database initialization...") config.system_cfg_init(store) if GLSettings.skip_wizard: NodeFactory(store).set_val('wizard_done', True) log.debug("Inserting internationalized strings...") if not use_single_lang: EnabledLanguage.add_all_supported_langs(store, appdata_dict) else: EnabledLanguage.add_new_lang(store, u'en', appdata_dict) with open(os.path.join(GLSettings.client_path, 'logo.png'), 'r') as logo_file: data = logo_file.read() files.db_add_file(store, data, u'logo') with open(os.path.join(GLSettings.client_path, 'favicon.ico'), 'r') as favicon_file: data = favicon_file.read() files.db_add_file(store, data, u'favicon')
def wizard(store, request, language): node = NodeFactory(store) if node.get_val('wizard_done'): # TODO report as anomaly log.err("DANGER: Wizard already initialized!") raise errors.ForbiddenOperation try: node._query_group() node.set_val('name', request['node']['name']) node.set_val('default_language', language) node.set_val('wizard_done', True) if GLSettings.onionservice is not None: node.set_val('onionservice', GLSettings.onionservice) node_l10n = NodeL10NFactory(store) node_l10n.set_val('description', language, request['node']['description']) node_l10n.set_val('header_title_homepage', language, request['node']['name']) context = db_create_context(store, request['context'], language) langs_to_drop = EnabledLanguage.list(store) langs_to_drop.remove(language) if len(langs_to_drop): EnabledLanguage.remove_old_langs(store, langs_to_drop) request['receiver']['contexts'] = [context.id] request['receiver']['language'] = language db_create_receiver(store, request['receiver'], language) admin_dict = { 'username': u'admin', 'password': request['admin']['password'], 'role': u'admin', 'state': u'enabled', 'deletable': False, 'name': u'Admin', 'public_name': u'Admin', 'description': u'', 'mail_address': request['admin']['mail_address'], 'language': language, 'password_change_needed': False, 'pgp_key_remove': False, 'pgp_key_fingerprint': '', 'pgp_key_public': '', 'pgp_key_expiration': datetime_null() } db_create_admin_user(store, admin_dict, language) except Exception as excep: log.err("Failed wizard initialization %s" % excep) raise excep
def wizard(store, request, language): node = NodeFactory(store) if node.get_val('wizard_done'): # TODO report as anomaly log.err("DANGER: Wizard already initialized!") raise errors.ForbiddenOperation try: node._query_group() nn = unicode(request['node']['name']) node.set_val('name', nn) node.set_val('default_language', language) node.set_val('wizard_done', True) node_l10n = NodeL10NFactory(store) node_l10n.set_val('description', language, nn) node_l10n.set_val('header_title_homepage', language, nn) node_l10n.set_val('presentation', language, nn) context = db_create_context(store, request['context'], language) langs_to_drop = EnabledLanguage.list(store) langs_to_drop.remove(language) if len(langs_to_drop): EnabledLanguage.remove_old_langs(store, langs_to_drop) request['receiver']['contexts'] = [context.id] request['receiver']['language'] = language db_create_receiver(store, request['receiver'], language) admin_dict = { 'username': u'admin', 'password': request['admin']['password'], 'role': u'admin', 'state': u'enabled', 'deletable': False, 'name': u'Admin', 'public_name': u'Admin', 'description': u'', 'mail_address': request['admin']['mail_address'], 'language': language, 'password_change_needed': False, 'pgp_key_remove': False, 'pgp_key_fingerprint': '', 'pgp_key_public': '', 'pgp_key_expiration': datetime_null() } db_create_admin_user(store, admin_dict, language) except Exception as excep: log.err("Failed wizard initialization %s" % excep) raise excep
def disable_langs(self, store): c = len(EnabledLanguage.list(store)) i = store.find(ConfigL10N).count() n = i/c EnabledLanguage.remove_old_langs(store, [u'en']) c_f = len(EnabledLanguage.list(store)) i_f = store.find(ConfigL10N).count() self.assertTrue(i-i_f == n and c_f == c-1)
def migrate_User(self): default_language = NodeFactory(self.store_old).get_val('default_language') enabled_languages = EnabledLanguage.list(self.store_old) old_objs = self.store_old.find(self.model_from['User']) for old_obj in old_objs: new_obj = self.model_to['User']() for _, v in new_obj._storm_columns.iteritems(): if v.name in ['pgp_key_public', 'pgp_key_fingerprint']: if getattr(old_obj, v.name) is None: setattr(new_obj, v.name, '') continue elif v.name in ['pgp_key_expiration']: if getattr(old_obj, v.name) is None: setattr(new_obj, v.name, datetime_null()) continue elif v.name == 'language' and getattr(old_obj, v.name) not in enabled_languages: # fix users that have configured a language that has never been there setattr(new_obj, v.name, default_language) continue setattr(new_obj, v.name, getattr(old_obj, v.name)) self.store_new.add(new_obj)
def migrate_User(self): default_language = NodeFactory( self.store_old).get_val(u'default_language') enabled_languages = EnabledLanguage.list(self.store_old) old_objs = self.store_old.find(self.model_from['User']) for old_obj in old_objs: new_obj = self.model_to['User']() for _, v in new_obj._storm_columns.items(): if v.name in ['pgp_key_public', 'pgp_key_fingerprint']: if getattr(old_obj, v.name) is None: setattr(new_obj, v.name, '') continue elif v.name in ['pgp_key_expiration']: if getattr(old_obj, v.name) is None: setattr(new_obj, v.name, datetime_null()) continue elif v.name == 'language' and getattr( old_obj, v.name) not in enabled_languages: # fix users that have configured a language that has never been there setattr(new_obj, v.name, default_language) continue setattr(new_obj, v.name, getattr(old_obj, v.name)) self.store_new.add(new_obj)
def enable_langs(self, store): res = EnabledLanguage.list(store) self.assertTrue(u'en' in res) self.assertTrue(len(res) == len(LANGUAGES_SUPPORTED)) c = store.find(ConfigL10N).count() self.assertTrue(c > 1500 and c < 2300)
def enable_langs(self, store): res = EnabledLanguage.list(store) self.assertTrue(u'en' in res) self.assertTrue(len(res) == len(LANGUAGES_SUPPORTED)) c = store.find(ConfigL10N).count() self.assertTrue(1500 < c < 2300)
def test_migration_error_with_removed_language(self): store = Store(create_database(GLSettings.db_uri)) zyx = EnabledLanguage('zyx') store.add(zyx) store.commit() store.close() self.assertRaises(Exception, migration.perform_data_update, self.db_file)
def init_db(store, use_single_lang=False): db_create_tables(store) appdata_dict = db_update_appdata(store) log.debug("Performing database initialization...") config.system_cfg_init(store) if not use_single_lang: EnabledLanguage.add_all_supported_langs(store, appdata_dict) else: EnabledLanguage.add_new_lang(store, u'en', appdata_dict) with open(os.path.join(GLSettings.client_path, 'data/logo.png'), 'r') as logo_file: data = logo_file.read() files.db_add_file(store, data, u'logo') with open(os.path.join(GLSettings.client_path, 'data/favicon.ico'), 'r') as favicon_file: data = favicon_file.read() files.db_add_file(store, data, u'favicon')
def db_admin_serialize_node(store, language): node_dict = NodeFactory(store).admin_export() priv_dict = PrivateFactory(store) # Contexts and Receivers relationship configured = store.find(models.ReceiverContext).count() > 0 misc_dict = { 'version': priv_dict.get_val(u'version'), 'latest_version': priv_dict.get_val(u'latest_version'), 'languages_supported': LANGUAGES_SUPPORTED, 'languages_enabled': EnabledLanguage.list(store), 'configured': configured } l10n_dict = NodeL10NFactory(store).localized_dict(language) return utils.sets.merge_dicts(node_dict, misc_dict, l10n_dict)
def db_admin_serialize_node(store, language): node_dict = NodeFactory(store).admin_export() # Contexts and Receivers relationship configured = store.find(models.ReceiverContext).count() > 0 custom_homepage = os.path.isfile(os.path.join(GLSettings.static_path, "custom_homepage.html")) misc_dict = { "version": PrivateFactory(store).get_val("version"), "languages_supported": LANGUAGES_SUPPORTED, "languages_enabled": EnabledLanguage.list(store), "configured": configured, "custom_homepage": custom_homepage, } l10n_dict = NodeL10NFactory(store).localized_dict(language) return utils.sets.disjoint_union(node_dict, misc_dict, l10n_dict)
def db_admin_serialize_node(store, language): node_dict = NodeFactory(store).admin_export() # Contexts and Receivers relationship configured = store.find(models.ReceiverContext).count() > 0 custom_homepage = os.path.isfile(os.path.join(GLSettings.static_path, "custom_homepage.html")) misc_dict = { 'version': PrivateFactory(store).get_val('version'), 'languages_supported': LANGUAGES_SUPPORTED, 'languages_enabled': EnabledLanguage.list(store), 'configured': configured, 'custom_homepage': custom_homepage, } l10n_dict = NodeL10NFactory(store).localized_dict(language) return utils.sets.disjoint_union(node_dict, misc_dict, l10n_dict)