def test_dict_input_lang(self): """Test dict input, with a language change along the way.""" inp = {"xx": "Fancy Blog", "zz": "Schmancy Blog"} S = TranslatableSetting("S", inp) S.default_lang = "xx" S.lang = "xx" try: u = unicode(S) except NameError: # Python 3 u = str(S) cn = S() self.assertEqual(inp["xx"], u) self.assertEqual(inp["xx"], cn) # Change the language. # WARNING: DO NOT set lang locally in real code! Set it globally # instead! (TranslatableSetting.lang = ...) # WARNING: TranslatableSetting.lang is used to override the current # locale settings returned by LocaleBorg! Use with care! S.lang = "zz" try: u = unicode(S) except NameError: # Python 3 u = str(S) cn = S() self.assertEqual(inp["zz"], u) self.assertEqual(inp["zz"], cn)
def test_dict_input_lang(self): """Test dict input, with a language change along the way.""" inp = {'xx': 'Fancy Blog', 'zz': 'Schmancy Blog'} S = TranslatableSetting('S', inp, {'xx': '', 'zz': ''}) S.default_lang = 'xx' S.lang = 'xx' u = str(S) cn = S() self.assertEqual(inp['xx'], u) self.assertEqual(inp['xx'], cn) # Change the language. # WARNING: DO NOT set lang locally in real code! Set it globally # instead! (TranslatableSetting.lang = ...) # WARNING: TranslatableSetting.lang is used to override the current # locale settings returned by LocaleBorg! Use with care! S.lang = 'zz' u = str(S) cn = S() self.assertEqual(inp['zz'], u) self.assertEqual(inp['zz'], cn)
def test_dict_input_default_lang(self): """Test dict input, with a default language change along the way.""" inp = {'xx': 'Fancy Blog', 'zz': 'Schmancy Blog'} S = TranslatableSetting(inp) S.default_lang = 'xx' S.lang = 'xx' try: u = unicode(S) except NameError: # Python 3 u = str(S) cn = S() self.assertEqual(inp['xx'], u) self.assertEqual(inp['xx'], cn) # Change the default language. # WARNING: DO NOT set default_lang locally in real code! # Set it globally instead! S.default_lang = 'zz' try: u = unicode(S) except NameError: # Python 3 u = str(S) cn = S() cf = S('ff') self.assertEqual(inp['xx'], u) self.assertEqual(inp['xx'], cn) self.assertEqual(inp['zz'], cf)
def test_dict_input_lang(self): """Test dict input, with a language change along the way.""" inp = {'xx': 'Fancy Blog', 'zz': 'Schmancy Blog'} S = TranslatableSetting('S', inp, {'xx': '', 'zz': ''}) S.default_lang = 'xx' S.lang = 'xx' try: u = unicode(S) except NameError: # Python 3 u = str(S) cn = S() self.assertEqual(inp['xx'], u) self.assertEqual(inp['xx'], cn) # Change the language. # WARNING: DO NOT set lang locally in real code! Set it globally # instead! (TranslatableSetting.lang = ...) # WARNING: TranslatableSetting.lang is used to override the current # locale settings returned by LocaleBorg! Use with care! S.lang = 'zz' try: u = unicode(S) except NameError: # Python 3 u = str(S) cn = S() self.assertEqual(inp['zz'], u) self.assertEqual(inp['zz'], cn)
def test_dict_input_default_lang(self): """Test dict input, with a default language change along the way.""" inp = {"xx": "Fancy Blog", "zz": "Schmancy Blog"} S = TranslatableSetting("S", inp) S.default_lang = "xx" S.lang = "xx" try: u = unicode(S) except NameError: # Python 3 u = str(S) cn = S() self.assertEqual(inp["xx"], u) self.assertEqual(inp["xx"], cn) # Change the default language. # WARNING: DO NOT set default_lang locally in real code! # Set it globally instead! S.default_lang = "zz" try: u = unicode(S) except NameError: # Python 3 u = str(S) cn = S() cf = S("ff") self.assertEqual(inp["xx"], u) self.assertEqual(inp["xx"], cn) self.assertEqual(inp["zz"], cf)
def test_TranslatableSetting_with_dict_input(): """Tests for translatable setting with dict input.""" inp = {"xx": "Fancy Blog", "zz": "Schmancy Blog"} setting = TranslatableSetting("TestSetting", inp, {"xx": "", "zz": ""}) setting.default_lang = "xx" setting.lang = "xx" assert inp["xx"] == str(setting) assert inp["xx"] == setting() # no language specified assert inp["xx"] == setting("xx") # real language specified assert inp["zz"] == setting("zz") # fake language specified assert inp["xx"] == setting("ff")
def test_TranslatableSettingsTest_with_string_input(): """Test ing translatable settings with string input.""" inp = "Fancy Blog" setting = TranslatableSetting("TestSetting", inp, {"xx": ""}) setting.default_lang = "xx" setting.lang = "xx" assert inp == str(setting) assert inp == setting() # no language specified assert inp == setting("xx") # real language specified assert inp == setting("zz") # fake language specified assert setting.lang == "xx" assert setting.default_lang == "xx"
def test_string_input(self): """Tests for string input.""" inp = 'Fancy Blog' S = TranslatableSetting('S', inp, {'xx': ''}) S.default_lang = 'xx' S.lang = 'xx' u = str(S) cn = S() # no language specified cr = S('xx') # real language specified cf = S('zz') # fake language specified self.assertEqual(inp, u) self.assertEqual(inp, cn) self.assertEqual(inp, cr) self.assertEqual(inp, cf) self.assertEqual(S.lang, 'xx') self.assertEqual(S.default_lang, 'xx')
def test_format_date_translatablesetting(base_config, lang, expected_string): df = TranslatableSetting("DATE_FORMAT", { "en": "'en' MMMM", "pl": "MMMM 'pl'" }, { "en": "", "pl": "" }) assert LocaleBorg().formatted_date(df, TESLA_BIRTHDAY_DT, lang) == expected_string
def test_TranslatableSetting_with_language_change(): """Test translatable setting with language change along the way.""" inp = {"xx": "Fancy Blog", "zz": "Schmancy Blog"} setting = TranslatableSetting("TestSetting", inp, {"xx": "", "zz": ""}) setting.default_lang = "xx" setting.lang = "xx" assert inp["xx"] == str(setting) assert inp["xx"] == setting() # Change the language. # WARNING: DO NOT set lang locally in real code! Set it globally # instead! (TranslatableSetting.lang = ...) # WARNING: TranslatableSetting.lang is used to override the current # locale settings returned by LocaleBorg! Use with care! setting.lang = "zz" assert inp["zz"] == str(setting) assert inp["zz"] == setting()
def test_dict_input(self): """Tests for dict input.""" inp = {'xx': 'Fancy Blog', 'zz': 'Schmancy Blog'} S = TranslatableSetting('S', inp, {'xx': '', 'zz': ''}) S.default_lang = 'xx' S.lang = 'xx' u = str(S) cn = S() cx = S('xx') cz = S('zz') cf = S('ff') self.assertEqual(inp['xx'], u) self.assertEqual(inp['xx'], cn) self.assertEqual(inp['xx'], cx) self.assertEqual(inp['zz'], cz) self.assertEqual(inp['xx'], cf)
def test_format_date_translatablesetting(localeborg_base): df = TranslatableSetting("DATE_FORMAT", { 'en': "'en' MMMM", 'pl': "MMMM 'pl'" }, { 'en': '', 'pl': '' }) assert LocaleBorg().formatted_date(df, TESLA_BIRTHDAY_DT, 'en') == 'en July' assert LocaleBorg().formatted_date(df, TESLA_BIRTHDAY_DT, 'pl') == 'lipca pl'
def test_string_input(self): """Tests for string input.""" inp = "Fancy Blog" S = TranslatableSetting("S", inp) S.default_lang = "xx" S.lang = "xx" try: u = unicode(S) except NameError: # Python 3 u = str(S) cn = S() # no language specified cr = S("xx") # real language specified cf = S("zz") # fake language specified self.assertEqual(inp, u) self.assertEqual(inp, cn) self.assertEqual(inp, cr) self.assertEqual(inp, cf) self.assertEqual(S.lang, "xx") self.assertEqual(S.default_lang, "xx")
def config(blog_url, default_locale): fake_conf = defaultdict(str) fake_conf["TIMEZONE"] = "UTC" fake_conf["__tzinfo__"] = dateutil.tz.tzutc() fake_conf["DEFAULT_LANG"] = default_locale fake_conf["TRANSLATIONS"] = {default_locale: ""} fake_conf["BASE_URL"] = blog_url fake_conf["BLOG_AUTHOR"] = TranslatableSetting("BLOG_AUTHOR", "Nikola Tesla", [default_locale]) fake_conf["TRANSLATIONS_PATTERN"] = "{path}.{lang}.{ext}" return fake_conf
def test_dict_input_both_langs(self): """Test dict input, with both languages changed along the way.""" inp = {'xx': 'Fancy Blog', 'yy': 'Dancy Blog', 'zz': 'Schmancy Blog'} S = TranslatableSetting(inp) S.default_lang = 'xx' S.lang = 'xx' try: u = unicode(S) except NameError: # Python 3 u = str(S) cn = S() self.assertEqual(inp['xx'], u) self.assertEqual(inp['xx'], cn) # Change the default language. # WARNING: DO NOT set those locally in real code! # Set it globally instead! # WARNING: TranslatableSetting.lang is used to override the current # locale settings returned by LocaleBorg! Use with care! S.default_lang = 'zz' S.lang = 'yy' try: u = unicode(S) except NameError: # Python 3 u = str(S) cn = S() cf = S('ff') self.assertEqual(inp['yy'], u) self.assertEqual(inp['yy'], cn) self.assertEqual(inp['zz'], cf)
def test_string_input(self): """Tests for string input.""" inp = 'Fancy Blog' S = TranslatableSetting(inp) S.default_lang = 'xx' S.lang = 'xx' try: u = unicode(S) except NameError: # Python 3 u = str(S) cn = S() # no language specified cr = S('xx') # real language specified cf = S('zz') # fake language specified self.assertEqual(inp, u) self.assertEqual(inp, cn) self.assertEqual(inp, cr) self.assertEqual(inp, cf) self.assertEqual(S.lang, 'xx') self.assertEqual(S.default_lang, 'xx')
def test_dict_input(self): """Tests for dict input.""" inp = {'xx': 'Fancy Blog', 'zz': 'Schmancy Blog'} S = TranslatableSetting(inp) S.default_lang = 'xx' S.lang = 'xx' try: u = unicode(S) except NameError: # Python 3 u = str(S) cn = S() cx = S('xx') cz = S('zz') cf = S('ff') self.assertEqual(inp['xx'], u) self.assertEqual(inp['xx'], cn) self.assertEqual(inp['xx'], cx) self.assertEqual(inp['zz'], cz) self.assertEqual(inp['xx'], cf)
def test_dict_input(self): """Tests for dict input.""" inp = {"xx": "Fancy Blog", "zz": "Schmancy Blog"} S = TranslatableSetting("S", inp) S.default_lang = "xx" S.lang = "xx" try: u = unicode(S) except NameError: # Python 3 u = str(S) cn = S() cx = S("xx") cz = S("zz") cf = S("ff") self.assertEqual(inp["xx"], u) self.assertEqual(inp["xx"], cn) self.assertEqual(inp["xx"], cx) self.assertEqual(inp["zz"], cz) self.assertEqual(inp["xx"], cf)
def configure_site(): """Configure the Nikola site for Coil CMS.""" global _site, site, db, q nikola.__main__._RETURN_DOITNIKOLA = True _dn = nikola.__main__.main([]) _site = _dn.nikola _site.init_plugins() _dn.sub_cmds = _dn.get_cmds() app.config['NIKOLA_ROOT'] = os.getcwd() app.config['DEBUG'] = False # Logging configuration logf = (u'[{record.time:%Y-%m-%dT%H:%M:%SZ}] {record.level_name}: ' u'{record.channel}: {record.message}') logh = (u'[{record.time:%Y-%m-%dT%H:%M:%SZ}] {record.channel} ' u'{record.message}') loghandlers = [ ColorfulStderrHandler(level=logbook.DEBUG, format_string=logf, bubble=True), logbook.FileHandler('coil.log', 'a', 'utf-8', logbook.DEBUG, logf, bubble=True) ] hloghandlers = [ ColorfulStderrHandler(level=logbook.DEBUG, format_string=logh, bubble=True), logbook.FileHandler('coil.log', 'a', 'utf-8', logbook.DEBUG, logh, bubble=True) ] _site.loghandlers = loghandlers nikola.utils.LOGGER.handlers = loghandlers nikola.plugins.command.new_post.POSTLOGGER.handlers = loghandlers nikola.plugins.command.new_post.PAGELOGGER.handlers = loghandlers app.config['LOGGER_NAME'] = 'Coil' app._logger = get_logger('Coil', loghandlers) app.http_logger = get_logger('CoilHTTP', hloghandlers) if not _site.configured: app.logger("Not a Nikola site.") return app.secret_key = _site.config.get('COIL_SECRET_KEY') app.config['COIL_URL'] = _site.config.get('COIL_URL') app.config['COIL_LOGIN_CAPTCHA'] = _site.config.get( 'COIL_LOGIN_CAPTCHA', {'enabled': False, 'site_key': '', 'secret_key': ''}) app.config['COIL_USERS_PREVENT_EDITING'] = _site.config.get('COIL_USERS_PREVENT_EDITING', []) app.config['COIL_LIMITED'] = _site.config.get('COIL_LIMITED', False) app.config['REDIS_URL'] = _site.config.get('COIL_REDIS_URL', 'redis://localhost:6379/0') if app.config['COIL_LIMITED']: app.config['COIL_USERS'] = _site.config.get('COIL_USERS', {}) _site.coil_needs_rebuild = '0' else: db = redis.StrictRedis.from_url(app.config['REDIS_URL']) q = rq.Queue(name='coil', connection=db) _site.template_hooks['menu'].append(generate_menu) _site.template_hooks['menu_alt'].append(generate_menu_alt) app.config['NIKOLA_URL'] = _site.config['SITE_URL'] _site.config['NAVIGATION_LINKS'] = { _site.default_lang: ( (app.config['NIKOLA_URL'], '<i class="fa fa-globe"></i> View Site'), ('http://coil.readthedocs.io/user/', '<i class="fa fa-question-circle"></i> Help'), ) } _site.GLOBAL_CONTEXT['navigation_links'] = _site.config['NAVIGATION_LINKS'] TITLE = _site.GLOBAL_CONTEXT['blog_title']() + ' Administration' _site.config['BLOG_TITLE'] = TranslatableSetting( 'BLOG_TITLE', TITLE, _site.config['TRANSLATIONS']) _site.GLOBAL_CONTEXT['blog_title'] = _site.config['BLOG_TITLE'] _site.GLOBAL_CONTEXT['lang'] = _site.default_lang _site.GLOBAL_CONTEXT['extra_head_data'] = TranslatableSetting( 'EXTRA_HEAD_DATA', """<link href="//maxcdn.bootstrapcdn.com/font-awesome/4.2.0/css/""" """font-awesome.min.css" rel="stylesheet">\n""" """<link href="/coil_assets/css/coil.css" rel="stylesheet">""", _site.config['TRANSLATIONS']) # HACK: body_end appears after extra_js from templates, so we must use # social_buttons_code instead _site.GLOBAL_CONTEXT['social_buttons_code'] = TranslatableSetting( 'SOCIAL_BUTTONS_CODE', """<script src="/coil_assets/js/coil.js"></script>""", _site.config['TRANSLATIONS']) # Theme must inherit from bootstrap3, because we have hardcoded HTML. themes = [os.path.basename(x) for x in _site.THEMES] bs3 = (('bootstrap3' in themes) or ('bootstrap3-jinja' in themes)) if not bs3: app.logger.notice("THEME does not inherit from 'bootstrap3' or " "'bootstrap3-jinja', using 'bootstrap3' instead.") _site.config['THEME'] = 'bootstrap3' # Reloading some things _site._THEMES = None _site._get_themes() _site._template_system = None _site._get_template_system() if 'has_custom_css' in _site._GLOBAL_CONTEXT: del _site._GLOBAL_CONTEXT['has_custom_css'] _site._get_global_context() tmpl_dir = pkg_resources.resource_filename( 'coil', os.path.join('data', 'templates', _site.template_system.name)) if os.path.isdir(tmpl_dir): # Inject tmpl_dir low in the theme chain _site.template_system.inject_directory(tmpl_dir) # Commands proxy (only for Nikola commands) _site.commands = nikola.utils.Commands( _site.doit, None, {'cmds': _site._commands} ) # Site proxy if app.config['COIL_LIMITED']: site = _site scan_site() else: site = SiteProxy(db, _site, app.logger) configure_url(app.config['COIL_URL'])