From e78372f338eee04333d4499fceb098ac5ced1b90 Mon Sep 17 00:00:00 2001 From: Jiachen Yang Date: Tue, 28 Feb 2012 01:43:36 +0900 Subject: [PATCH 1/3] import unittest if cannot found unittest2 --- pelican/contents.py | 6 +++--- tests/test_contents.py | 5 ++++- tests/test_readers.py | 6 +++++- tests/test_settings.py | 6 +++++- 4 files changed, 17 insertions(+), 6 deletions(-) diff --git a/pelican/contents.py b/pelican/contents.py index bdf3c9f0..f1006875 100644 --- a/pelican/contents.py +++ b/pelican/contents.py @@ -86,9 +86,9 @@ class Page(object): else: self.date_format = settings['DEFAULT_DATE_FORMAT'] - if isinstance(self.date_format, tuple): - locale.setlocale(locale.LC_ALL, self.date_format[0]) - self.date_format = self.date_format[1] + if isinstance(self.date_format, tuple): + locale.setlocale(locale.LC_ALL, self.date_format[0]) + self.date_format = self.date_format[1] if hasattr(self, 'date'): if platform == 'win32': diff --git a/tests/test_contents.py b/tests/test_contents.py index df2c00e6..3c58d0e5 100644 --- a/tests/test_contents.py +++ b/tests/test_contents.py @@ -1,5 +1,8 @@ from __future__ import with_statement -from unittest2 import TestCase +try: + from unittest2 import TestCase +except ImportError, e: + from unittest import TestCase from pelican.contents import Page from pelican.settings import _DEFAULT_CONFIG diff --git a/tests/test_readers.py b/tests/test_readers.py index bf7504fb..211fb9be 100644 --- a/tests/test_readers.py +++ b/tests/test_readers.py @@ -1,5 +1,9 @@ # coding: utf-8 -import unittest2 +try: + import unittest2 +except ImportError, e: + import unittest as unittest2 + import os import datetime from pelican import readers diff --git a/tests/test_settings.py b/tests/test_settings.py index e32fcef4..571f66a1 100644 --- a/tests/test_settings.py +++ b/tests/test_settings.py @@ -1,4 +1,8 @@ -import unittest2 +try: + import unittest2 +except ImportError, e: + import unittest as unittest2 + from os.path import dirname, abspath, join from pelican.settings import read_settings, _DEFAULT_CONFIG From 76ee6c214995cf3c0ecfbcc4928abf87193a7bf7 Mon Sep 17 00:00:00 2001 From: Jiachen Yang Date: Tue, 28 Feb 2012 03:08:39 +0900 Subject: [PATCH 2/3] Added document and test case for #215 --- docs/settings.rst | 54 +++++++++++++++++++++++++++++++++++++++--- tests/test_contents.py | 33 ++++++++++++++++++++++++++ 2 files changed, 84 insertions(+), 3 deletions(-) diff --git a/docs/settings.rst b/docs/settings.rst index 0fd8652e..d8ce9b8a 100644 --- a/docs/settings.rst +++ b/docs/settings.rst @@ -31,7 +31,8 @@ Setting name (default value) what does it do? `.html`, so you will have to setup URL rewriting on your web server. `DATE_FORMATS` (``{}``) If you do manage multiple languages, you can - set the date formatting here. + set the date formatting here. See "Date format and locales" + section below for details. `DEFAULT_CATEGORY` (``'misc'``) The default category to fallback on. `DEFAULT_DATE_FORMAT` (``'%a %d %B %Y'``) The default date format you want to use. `DISPLAY_PAGES_ON_MENU` (``True``) Display or not the pages on the menu of the @@ -43,7 +44,7 @@ Setting name (default value) what does it do? `JINJA_EXTENSIONS` (``[]``) A list of any Jinja2 extensions you want to use. `DELETE_OUTPUT_DIRECTORY` (``False``) Delete the output directory and just the generated files. -`LOCALE` (''[1]_) Change the locale. A list of locales can be provided +`LOCALE` (''[#]_) Change the locale. A list of locales can be provided here or a single string representing one locale. When providing a list, all the locales will be tried until one works. @@ -75,7 +76,7 @@ Setting name (default value) what does it do? section below for more info. ================================================ ===================================================== -.. [1] Default is the system locale. Default is to delete the output directory. +.. [#] Default is the system locale. Default is to delete the output directory. Article permalink structure --------------------------- @@ -119,6 +120,53 @@ timezone. .. _the wikipedia page: http://en.wikipedia.org/wiki/List_of_tz_database_time_zones + +Date format and locale +---------------------- + +If no DATE_FORMAT is set, failback to DEFAULT_DATE_FORMAT. If you need to +maintain multiple languages with different date format, you can set this dict +using language name( ``lang`` in your posts) as key. About available format +codes, see `strftime document of python`_ : + + DATE_FORMAT = { + 'en': '%a, %d %b %Y', + 'jp': '%Y-%m-%d(%a)', + } + +You can set locale to further control date format: + + LOCALE = ('usa', 'jpn', # On Windows + 'en_US', 'ja_JP' # On Unix/Linux + ) + +Also, it is possible to set different locale settings for each language, if you +put (locale, format) tuple in dict, and this will override the LOCALE setting +above: + + # On Unix/Linux + DATE_FORMAT = { + 'en': ('en_US','%a, %d %b %Y'), + 'jp': ('ja_JP','%Y-%m-%d(%a)'), + } + + # On Windows + DATE_FORMAT = { + 'en': ('usa','%a, %d %b %Y'), + 'jp': ('jpn','%Y-%m-%d(%a)'), + } + +For available list of `locales on Windows` . On Unix/Linux usually you can get +a list of available locales with command ``locale -a``, see manpage `locale(1)` +for help. + + +.. _strftime document of python: http://docs.python.org/library/datetime.html#strftime-strptime-behavior + +.. _locales on Windows: http://msdn.microsoft.com/en-us/library/cdax410z%28VS.71%29.aspx + +.. _locale(1): http://linux.die.net/man/1/locale + Feed settings ============= diff --git a/tests/test_contents.py b/tests/test_contents.py index 581f3f63..d5648f62 100644 --- a/tests/test_contents.py +++ b/tests/test_contents.py @@ -65,3 +65,36 @@ class TestPage(TestCase): self.page_kwargs['metadata'].update({'lang': 'fr', }) page = Page(**self.page_kwargs) self.assertEqual(page.save_as, "foo-bar-fr.html") + + def test_datetime(self): + """If DATETIME is set to a tuple, it should be used to override LOCALE + """ + from datetime import datetime + from sys import platform + dt = datetime(2015,9,13) + # make a deep copy of page_kawgs + page_kwargs = {key:self.page_kwargs[key] for key in self.page_kwargs} + for key in page_kwargs: + if not isinstance(page_kwargs[key], dict): break + page_kwargs[key] = {subkey:page_kwargs[key][subkey] for subkey in page_kwargs[key]} + # set its date to dt + page_kwargs['metadata']['date'] = dt + page = Page( **page_kwargs) + + self.assertEqual(page.locale_date, dt.strftime(_DEFAULT_CONFIG['DEFAULT_DATE_FORMAT'])) + + + page_kwargs['settings'] = {x:_DEFAULT_CONFIG[x] for x in _DEFAULT_CONFIG} + # I doubt this can work on all platforms ... + if platform == "win32": + locale = 'jpn' + else: + locale = 'ja_JP' + page_kwargs['settings']['DATE_FORMATS'] = {'jp':(locale,'%Y-%m-%d(%a)')} + page_kwargs['metadata']['lang'] = 'jp' + page = Page( **page_kwargs) + self.assertEqual(page.locale_date, u'2015-09-13(\u65e5)') + # above is unicode in Japanese: 2015-09-13(“ú) + + + From 3ccbe19c8ac552cfb7f4fd03e6f293ada973d928 Mon Sep 17 00:00:00 2001 From: Jiachen Yang Date: Tue, 28 Feb 2012 03:37:58 +0900 Subject: [PATCH 3/3] typo in docs/settings.rst#date format and locales --- docs/settings.rst | 9 ++++----- 1 file changed, 4 insertions(+), 5 deletions(-) diff --git a/docs/settings.rst b/docs/settings.rst index d8ce9b8a..9d34fae0 100644 --- a/docs/settings.rst +++ b/docs/settings.rst @@ -124,9 +124,9 @@ timezone. Date format and locale ---------------------- -If no DATE_FORMAT is set, failback to DEFAULT_DATE_FORMAT. If you need to +If no DATE_FORMAT is set, fallback to DEFAULT_DATE_FORMAT. If you need to maintain multiple languages with different date format, you can set this dict -using language name( ``lang`` in your posts) as key. About available format +using language name (``lang`` in your posts) as key. About available format codes, see `strftime document of python`_ : DATE_FORMAT = { @@ -156,9 +156,8 @@ above: 'jp': ('jpn','%Y-%m-%d(%a)'), } -For available list of `locales on Windows` . On Unix/Linux usually you can get -a list of available locales with command ``locale -a``, see manpage `locale(1)` -for help. +For available list of `locales on Windows`_ . On Unix/Linux usually you can get +a list of available locales with command ``locale -a``, see manpage `locale(1)`_ for help. .. _strftime document of python: http://docs.python.org/library/datetime.html#strftime-strptime-behavior