def after_update(self, context, pkg_dict): #if not custom.custom_field_table.exists(): # custom.init_db() # During the harvest the get_lang() is not defined if get_lang(): lang = get_lang()[0] for extra in pkg_dict.get('extras'): for field in self.custom_fields: if extra.get('key') == field[0]: log.info(':::::::::::::::Localizing custom field: %r', field[0]) f = custom.get_field(extra.get('key'), pkg_dict.get('id'), lang) if f: if extra.get('value') == '': f.purge() elif f.text != extra.get('value'): # Update the localized field value for the current language f.text = extra.get('value') f.save() log.info('Custom field updated successfully') elif extra.get('value') != '': # Create the localized field record self.createLocField(extra, lang, pkg_dict.get('id'))
def url(self): if self._url: try: lang = get_lang()[0] except TypeError: return self._url else: map = config['routes.map'].match(self._url) map['_lang'] = get_lang()[0] return url_for(**map) else: return None
def after_create(self, context, pkg_dict): #if not custom.custom_field_table.exists(): # custom.init_db() # During the harvest the get_lang() is not defined if get_lang(): lang = get_lang()[0] for extra in pkg_dict.get('extras'): for field in self.custom_fields: if extra.get('key') == field[0]: log.info(':::::::::::::::Localizing custom field: %r', field[0]) # Create the localized field record self.createLocField(extra, lang, pkg_dict.get('id'))
def get_news_preview(page): lang = get_lang()[0] log.info('Retrieving News page preview for current locale: %r', lang) news_page = db.Page.get(name=page, lang=lang) if news_page: #news_page = db.table_dictize(news_page, {}) parser = HTMLNewsFirstImage() parser.feed(news_page.content) img = parser.first_image pg_row = { 'title': news_page.title, 'content': news_page.content, 'name': news_page.name, 'publish_date': news_page.publish_date, 'group_id': news_page.group_id, 'page_type': news_page.page_type, } if img: pg_row['image'] = img extras = news_page.extras if extras: pg_row.update(json.loads(news_page.extras)) return pg_row else: return None
def getLocalizedPageLink(page): locale = get_lang()[0] if(page): url = "/" + locale + "/" + page return url
def getLocalizedPageLink(page): locale = get_lang()[0] if (page): url = "/" + locale + "/" + page return url
def get_language(): lang = get_lang() if lang is not None: lang = unicode(lang[0]) return lang
def _setup_template_variables(self, context, data_dict): c.is_sysadmin = authz.is_sysadmin(c.user) try: user_dict = get_action('user_show')(context, data_dict) except NotFound: abort(404, _('User not found')) except NotAuthorized: abort(401, _('Not authorized to see this page')) c.user_dict = user_dict lang = get_lang()[0] # MULTILANG - Localizing Datasets names and descriptions in search list for item in c.user_dict.get('datasets'): log.info(':::::::::::: Retrieving the corresponding localized title and abstract :::::::::::::::') q_results = model.Session.query(PackageMultilang).filter(PackageMultilang.package_id == item.get('id'), PackageMultilang.lang == lang).all() if q_results: for result in q_results: item[result.field] = result.text c.is_myself = user_dict['name'] == c.user c.about_formatted = h.render_markdown(user_dict['about'])
def get_language(): lang = get_lang() if lang and isinstance(lang, ( list, tuple, )): return lang[0] return lang
def js_localization(self): "return localized strings from cache or compute" locale = get_lang()[0] response.headers['Pragma'] = 'public' response.headers['Cache-Control'] = 'max-age=0' response.headers['Content-Type'] = 'text/javascript;charset=utf-8' if self.langchange: region_invalidate(self._js_localization, None, 'baruwajs', locale) return self._js_localization(locale)
def getLocalizedFieldValue(field=None, pkg_dict=None): if field and pkg_dict: lang = get_lang()[0] localized_value = custom.get_field(field, pkg_dict.get('id'), lang) if localized_value: return localized_value.text else: return None else: return None
def getLocalizedTagName(tag_name=None): if tag_name: lang = get_lang()[0] localized_tag_name = TagMultilang.by_name(tag_name, lang) if localized_tag_name: return localized_tag_name.text else: return None else: return None
def __before__(self): self.weekdays = {1:_(u'א'),2:_(u'ב'),3:_(u'ג'),4:_(u'ד'),5:_(u'ה'),6:_(u'ו'),7:_(u'ש')} #raise Exception(get_lang()) formencode.api.set_stdtranslation(domain="FormEncode", languages=get_lang()) c.weekdays = weekdays c.existings = ['existing_area'] c.existings_labels={'existing_area':_(u'תיחום'),'existing_marker':_(u'בית עסק')} c.activity_type=type(self).activity_type c.submit_button=_(u'הירשם') pass
def js_localization(self, domain='baruwajs'): "Return dict of localized strings for JS" locale_t = {} locale = get_lang()[0] path = os.path.join(config['pylons.paths']['root'], 'i18n') try: catalog = gettext.translation(domain, path, [locale]) except IOError: catalog = None if catalog is not None: locale_t.update(catalog._catalog) src = [LIBHEAD] plural = None if '' in locale_t: for l in locale_t[''].split('\n'): if l.startswith('Plural-Forms:'): plural = l.split(':', 1)[1].strip() if plural is not None: plural = [ el.strip() for el in plural.split(';') if el.strip().startswith('plural=') ][0].split('=', 1)[1] src.append(PLURALIDX % plural) else: src.append(SIMPLEPLURAL) csrc = [] pdict = {} for k, v in locale_t.items(): if k == '': continue if isinstance(k, basestring): csrc.append("catalog['%s'] = '%s';\n" % (quote_js(k), quote_js(v))) elif isinstance(k, tuple): if k[0] not in pdict: pdict[k[0]] = k[1] else: pdict[k[0]] = max(k[1], pdict[k[0]]) csrc.append("catalog['%s'][%d] = '%s';\n" % (quote_js(k[0]), k[1], quote_js(v))) else: raise TypeError(k) csrc.sort() for k, v in pdict.items(): src.append("catalog['%s'] = [%s];\n" % (quote_js(k), ','.join(["''"] * (v + 1)))) src.extend(csrc) src.append(LIBFOOT) src.append(INTERPOLATE) src = ''.join(src) del response.headers['Cache-Control'] del response.headers['Pragma'] response.cache_expires(seconds=360) response.headers['Content-Type'] = 'text/javascript;charset=utf-8' return src
def js_localization(self, domain='baruwajs'): "Return dict of localized strings for JS" locale_t = {} locale = get_lang()[0] path = os.path.join(config['pylons.paths']['root'], 'i18n') try: catalog = gettext.translation(domain, path, [locale]) except IOError: catalog = None if catalog is not None: locale_t.update(catalog._catalog) src = [LIBHEAD] plural = None if '' in locale_t: for l in locale_t[''].split('\n'): if l.startswith('Plural-Forms:'): plural = l.split(':', 1)[1].strip() if plural is not None: plural = [el.strip() for el in plural.split(';') if el.strip().startswith('plural=')][0].split('=', 1)[1] src.append(PLURALIDX % plural) else: src.append(SIMPLEPLURAL) csrc = [] pdict = {} for k, v in locale_t.items(): if k == '': continue if isinstance(k, basestring): csrc.append("catalog['%s'] = '%s';\n" % (quote_js(k), quote_js(v))) elif isinstance(k, tuple): if k[0] not in pdict: pdict[k[0]] = k[1] else: pdict[k[0]] = max(k[1], pdict[k[0]]) csrc.append("catalog['%s'][%d] = '%s';\n" % (quote_js(k[0]), k[1], quote_js(v))) else: raise TypeError(k) csrc.sort() for k, v in pdict.items(): src.append("catalog['%s'] = [%s];\n" % (quote_js(k), ','.join(["''"] * (v + 1)))) src.extend(csrc) src.append(LIBFOOT) src.append(INTERPOLATE) src = ''.join(src) del response.headers['Cache-Control'] del response.headers['Pragma'] response.cache_expires(seconds=360) response.headers['Content-Type'] = 'text/javascript;charset=utf-8' return src
def get_localized_org(org_id): # # Return the localized organization conresponding to the provided id # lang = get_lang()[0] q_results = model.Session.query(GroupMultilang).filter(GroupMultilang.group_id == org_id, GroupMultilang.lang == lang).all() display_name = None if q_results: for result in q_results: if result.field == 'title': display_name = result.text return display_name
def generate(self, route=None, *args, **kwargs): """Generate a route from a set of keywords If the `_lang` argument is not given, the curent language used for it. For a named route, a language tag will be prepended to the name depending on the `_lang` arument. """ try: lang = get_lang()[0] except TypeError: lang = None else: kwargs.setdefault('_lang', lang) if route and lang and '!!' not in route.name: return url_for(kwargs['_lang'] + '!!' + route.name, *args, **kwargs) else: return super(I18nMapper, self).generate(*args, **kwargs)
def dataset_facets(self, facets_dict, package_type): ''' Update the facets_dict and return it. ''' #facets_dict.update({ # 'organization': _('Organization'), # 'res_format': _('Format'), # 'aafc_sector': _('Sector'), # 'res_type': _('Resource Type'), # }) lang = "en" try: lang = get_lang()[0] except: log.info(">>>>get_lang() failed") pass bl_sector = {"en": "Sector", "fr": "Secteur"} #TODO: should use il8n, fix it when it's ready #facets_dict['aafc_sector'] = plugins.toolkit._('Sector') facets_dict['aafc_sector'] = bl_sector.get(lang, "Sector") return facets_dict
def test_mapping(self): # multilang requires lang to be set from pylons.i18n.translation import set_lang, get_lang import pylons class dummyreq(object): class p(object): translator = object() environ = {'pylons.pylons': p()} pylons.request = dummyreq() pylons.translator.pylons_lang = ['en_GB'] set_lang('en_GB') assert get_lang() == ['en_GB'] assert 'dcatapit_theme_group_mapper' in config['ckan.plugins'], "No dcatapit_theme_group_mapper plugin in config" contents = self._get_file_contents('dataset.rdf') p = RDFParser(profiles=['it_dcat_ap']) p.parse(contents) datasets = [d for d in p.datasets()] eq_(len(datasets), 1) package_dict = datasets[0] user = User.get('dummy') if not user: user = call_action('user_create', name='dummy', password='******', email='*****@*****.**') user_name = user['name'] else: user_name = user.name org = Group.by_name('dummy') if org is None: org = call_action('organization_create', context={'user': user_name}, name='dummy', identifier='aaaaaa') existing_g = Group.by_name('existing-group') if existing_g is None: existing_g = call_action('group_create', context={'user': user_name}, name='existing-group') context = {'user': '******', 'ignore_auth': True, 'defer_commit': False} package_schema = schema.default_create_package_schema() context['schema'] = package_schema _p = {'frequency': 'manual', 'publisher_name': 'dummy', 'extras': [{'key':'theme', 'value':['non-mappable', 'thememap1']}], 'groups': [], 'title': 'dummy', 'holder_name': 'dummy', 'holder_identifier': 'dummy', 'name': 'dummy', 'notes': 'dummy', 'owner_org': 'dummy', 'modified': datetime.now(), 'publisher_identifier': 'dummy', 'metadata_created' : datetime.now(), 'metadata_modified': datetime.now(), 'guid': unicode(uuid.uuid4), 'identifier': 'dummy'} package_dict.update(_p) config[DCATAPIT_THEME_TO_MAPPING_SOURCE] = '' package_data = call_action('package_create', context=context, **package_dict) p = Package.get(package_data['id']) # no groups should be assigned at this point (no map applied) assert {'theme': ['non-mappable', 'thememap1']} == p.extras, '{} vs {}'.format(_p['extras'], p.extras) assert [] == p.get_groups(group_type='group'), 'should be {}, got {}'.format([], p.get_groups(group_type='group')) package_data = call_action('package_show', context=context, id=package_data['id']) # use test mapping, which replaces thememap1 to thememap2 and thememap3 test_map_file = os.path.join(os.path.dirname(__file__), '..', '..', '..', 'examples', 'test_map.ini') config[DCATAPIT_THEME_TO_MAPPING_SOURCE] = test_map_file package_dict['theme'] = ['non-mappable', 'thememap1'] expected_groups_existing = ['existing-group'] expected_groups_new = expected_groups_existing + ['somegroup1', 'somegroup2'] expected_groups_multi = expected_groups_new + ['othergroup'] package_dict.pop('extras', None) p = Package.get(package_data['id']) context['package'] = p package_data = call_action('package_update', context=context, **package_dict) #meta.Session.flush() #meta.Session.revision = repo.new_revision() # check - only existing group should be assigned p = Package.get(package_data['id']) groups = [g.name for g in p.get_groups(group_type='group')] assert expected_groups_existing == groups, (expected_groups_existing, 'vs', groups,) config[DCATAPIT_THEME_TO_MAPPING_ADD_NEW_GROUPS] = 'true' package_dict['theme'] = ['non-mappable', 'thememap1'] package_data = call_action('package_update', context=context, **package_dict) meta.Session.flush() meta.Session.revision = repo.new_revision() # recheck - this time, new groups should appear p = Package.get(package_data['id']) groups = [g.name for g in p.get_groups(group_type='group')] assert len(expected_groups_new) == len(groups), (expected_groups_new, 'vs', groups,) assert set(expected_groups_new) == set(groups), (expected_groups_new, 'vs', groups,) package_dict['theme'] = ['non-mappable', 'thememap1', 'thememap-multi'] package_data = call_action('package_update', context=context, **package_dict) meta.Session.flush() meta.Session.revision = repo.new_revision() # recheck - there should be no duplicates p = Package.get(package_data['id']) groups = [g.name for g in p.get_groups(group_type='group')] assert len(expected_groups_multi) == len(groups), (expected_groups_multi, 'vs', groups,) assert set(expected_groups_multi) == set(groups), (expected_groups_multi, 'vs', groups,) package_data = call_action('package_update', context=context, **package_dict) meta.Session.flush() meta.Session.revision = repo.new_revision() # recheck - there still should be no duplicates p = Package.get(package_data['id']) groups = [g.name for g in p.get_groups(group_type='group')] assert len(expected_groups_multi) == len(groups), (expected_groups_multi, 'vs', groups,) assert set(expected_groups_multi) == set(groups), (expected_groups_multi, 'vs', groups,) meta.Session.rollback()
def attach_context_attributes(context): rc_config = SettingsModel().get_all_settings(cache=True) context.rhodecode_version = rhodecode.__version__ context.rhodecode_edition = config.get('rhodecode.edition') # unique secret + version does not leak the version but keep consistency context.rhodecode_version_hash = md5( config.get('beaker.session.secret', '') + rhodecode.__version__)[:8] # Default language set for the incoming request context.language = translation.get_lang()[0] # Visual options context.visual = AttributeDict({}) # DB store context.visual.show_public_icon = str2bool( rc_config.get('rhodecode_show_public_icon')) context.visual.show_private_icon = str2bool( rc_config.get('rhodecode_show_private_icon')) context.visual.stylify_metatags = str2bool( rc_config.get('rhodecode_stylify_metatags')) context.visual.dashboard_items = safe_int( rc_config.get('rhodecode_dashboard_items', 100)) context.visual.admin_grid_items = safe_int( rc_config.get('rhodecode_admin_grid_items', 100)) context.visual.repository_fields = str2bool( rc_config.get('rhodecode_repository_fields')) context.visual.show_version = str2bool( rc_config.get('rhodecode_show_version')) context.visual.use_gravatar = str2bool( rc_config.get('rhodecode_use_gravatar')) context.visual.gravatar_url = rc_config.get('rhodecode_gravatar_url') context.visual.default_renderer = rc_config.get( 'rhodecode_markup_renderer', 'rst') context.visual.rhodecode_support_url = \ rc_config.get('rhodecode_support_url') or url('rhodecode_support') context.pre_code = rc_config.get('rhodecode_pre_code') context.post_code = rc_config.get('rhodecode_post_code') context.rhodecode_name = rc_config.get('rhodecode_title') context.default_encodings = aslist(config.get('default_encoding'), sep=',') # if we have specified default_encoding in the request, it has more # priority if request.GET.get('default_encoding'): context.default_encodings.insert(0, request.GET.get('default_encoding')) context.clone_uri_tmpl = rc_config.get('rhodecode_clone_uri_tmpl') # INI stored context.labs_active = str2bool( config.get('labs_settings_active', 'false')) context.visual.allow_repo_location_change = str2bool( config.get('allow_repo_location_change', True)) context.visual.allow_custom_hooks_settings = str2bool( config.get('allow_custom_hooks_settings', True)) context.debug_style = str2bool(config.get('debug_style', False)) context.rhodecode_instanceid = config.get('instance_id') # AppEnlight context.appenlight_enabled = str2bool(config.get('appenlight', 'false')) context.appenlight_api_public_key = config.get( 'appenlight.api_public_key', '') context.appenlight_server_url = config.get('appenlight.server_url', '') # END CONFIG VARS # TODO: This dosn't work when called from pylons compatibility tween. # Fix this and remove it from base controller. # context.repo_name = get_repo_slug(request) # can be empty context.csrf_token = auth.get_csrf_token() context.backends = rhodecode.BACKENDS.keys() context.backends.sort() context.unread_notifications = NotificationModel().get_unread_cnt_for_user( context.rhodecode_user.user_id)
def get_locale(): lang = get_lang()[0] log.info('Retrieving Ckan current locale: %r', lang) return lang
'facet': u'false' } try: search_results = logic.get_action('package_search')(context, data_dict) except search.SearchError, e: log.error('Error searching for recently updated datasets') log.error(e) search_results = {} for item in search_results.get('results'): log.info( ':::::::::::: Retrieving the corresponding localized title and abstract :::::::::::::::' ) lang = get_lang()[0] q_results = model.Session.query(PackageMultilang).filter( PackageMultilang.package_id == item.get('id'), PackageMultilang.lang == lang).all() if q_results: for result in q_results: item[result.field] = result.text log.debug('Found %d recent updates:::::::: ' % len(search_results)) log.debug('Updates::::::::::::::::::::::: %r ' % search_results) return search_results.get('results', [])
'session': model.Session, 'user': p.toolkit.c.user or p.toolkit.c.author} data_dict = {'rows': n, 'sort': u'metadata_modified desc', 'facet': u'false'} try: search_results = logic.get_action('package_search')(context, data_dict) except search.SearchError, e: log.error('Error searching for recently updated datasets') log.error(e) search_results = {} for item in search_results.get('results'): log.info(':::::::::::: Retrieving the corresponding localized title and abstract :::::::::::::::') lang = get_lang()[0] q_results = model.Session.query(PackageMultilang).filter(PackageMultilang.package_id == item.get('id'), PackageMultilang.lang == lang).all() if q_results: for result in q_results: item[result.field] = result.text log.debug('Found %d recent updates:::::::: ' % len(search_results)) log.debug('Updates::::::::::::::::::::::: %r ' % search_results) return search_results.get('results', []) def getLocalizedFieldValue(field=None, pkg_dict=None): if field and pkg_dict: lang = get_lang()[0]