def _extractFormats(self, formats_node, lengthNodeName, formatNodeName): """Extract all format entries from formats_node and return a tuple of the form (defaultFormatType, [LocaleFormatLength, ...]). Example:: >>> factory = LocaleFactory(None) >>> from xml.dom.minidom import parseString >>> xml = _u(''' ... <dateFormats> ... <default type="medium"/> ... <dateFormatLength type="full"> ... <dateFormat> ... <pattern>EEEE, MMMM d, yyyy</pattern> ... </dateFormat> ... </dateFormatLength> ... <dateFormatLength type="medium"> ... <default type="DateFormatsKey2"/> ... <dateFormat type="DateFormatsKey2"> ... <displayName>Standard Date</displayName> ... <pattern>MMM d, yyyy</pattern> ... </dateFormat> ... <dateFormat type="DateFormatsKey3"> ... <pattern>MMM dd, yyyy</pattern> ... </dateFormat> ... </dateFormatLength> ... </dateFormats>''') >>> dom = parseString(xml) >>> default, lengths = factory._extractFormats( ... dom.documentElement, 'dateFormatLength', 'dateFormat') >>> default u'medium' >>> lengths[_u("full")].formats[None].pattern u'EEEE, MMMM d, yyyy' >>> lengths[_u("medium")].default u'DateFormatsKey2' >>> lengths[_u("medium")].formats['DateFormatsKey3'].pattern u'MMM dd, yyyy' >>> lengths[_u("medium")].formats['DateFormatsKey2'].displayName u'Standard Date' """ formats_default = None default_nodes = formats_node.getElementsByTagName('default') if default_nodes: formats_default = default_nodes[0].getAttribute('type') lengths = InheritingDictionary() for length_node in formats_node.getElementsByTagName(lengthNodeName): type = length_node.getAttribute('type') or None length = LocaleFormatLength(type) default_nodes = length_node.getElementsByTagName('default') if default_nodes: length.default = default_nodes[0].getAttribute('type') if length_node.getElementsByTagName(formatNodeName): length.formats = InheritingDictionary() for format_node in length_node.getElementsByTagName(formatNodeName): format = LocaleFormat() format.type = format_node.getAttribute('type') or None pattern_node = format_node.getElementsByTagName('pattern')[0] format.pattern = self._getText(pattern_node.childNodes) name_nodes = format_node.getElementsByTagName('displayName') if name_nodes: format.displayName = self._getText(name_nodes[0].childNodes) length.formats[format.type] = format lengths[length.type] = length return (formats_default, lengths)
def _extractFormats(self, formats_node, lengthNodeName, formatNodeName): """Extract all format entries from formats_node and return a tuple of the form (defaultFormatType, [LocaleFormatLength, ...]). Example:: >>> factory = LocaleFactory(None) >>> from xml.dom.minidom import parseString >>> xml = u''' ... <dateFormats> ... <default type="medium"/> ... <dateFormatLength type="full"> ... <dateFormat> ... <pattern>EEEE, MMMM d, yyyy</pattern> ... </dateFormat> ... </dateFormatLength> ... <dateFormatLength type="medium"> ... <default type="DateFormatsKey2"/> ... <dateFormat type="DateFormatsKey2"> ... <displayName>Standard Date</displayName> ... <pattern>MMM d, yyyy</pattern> ... </dateFormat> ... <dateFormat type="DateFormatsKey3"> ... <pattern>MMM dd, yyyy</pattern> ... </dateFormat> ... </dateFormatLength> ... </dateFormats>''' >>> dom = parseString(xml) >>> default, lengths = factory._extractFormats( ... dom.documentElement, 'dateFormatLength', 'dateFormat') >>> default u'medium' >>> lengths[u'full'].formats[None].pattern u'EEEE, MMMM d, yyyy' >>> lengths[u'medium'].default u'DateFormatsKey2' >>> lengths[u'medium'].formats['DateFormatsKey3'].pattern u'MMM dd, yyyy' >>> lengths[u'medium'].formats['DateFormatsKey2'].displayName u'Standard Date' """ formats_default = None default_nodes = formats_node.getElementsByTagName('default') if default_nodes: formats_default = default_nodes[0].getAttribute('type') lengths = InheritingDictionary() for length_node in formats_node.getElementsByTagName(lengthNodeName): type = length_node.getAttribute('type') or None length = LocaleFormatLength(type) default_nodes = length_node.getElementsByTagName('default') if default_nodes: length.default = default_nodes[0].getAttribute('type') if length_node.getElementsByTagName(formatNodeName): length.formats = InheritingDictionary() for format_node in length_node.getElementsByTagName(formatNodeName): format = LocaleFormat() format.type = format_node.getAttribute('type') or None pattern_node = format_node.getElementsByTagName('pattern')[0] format.pattern = self._getText(pattern_node.childNodes) name_nodes = format_node.getElementsByTagName('displayName') if name_nodes: format.displayName = self._getText(name_nodes[0].childNodes) length.formats[format.type] = format lengths[length.type] = length return (formats_default, lengths)
# -*- coding: utf-8 -*- import datetime import pytz from cromlech.i18n import ILanguage from zope.i18n.locales import LocaleFormat, locales BASE = pytz.utc PARIS = pytz.timezone('Europe/Paris') DATETIME_SHORT = '%Y-%m-%d %H:%M' # This needs proper registration # And localization. base_format = LocaleFormat() base_format.pattern = u'dd/MM/yyyy' def date_parser(request, date, size='short'): language = ILanguage(request, None) locale = locales.getLocale(language=language) formatter = locale.dates.getFormatter('date', length=size) return formatter.parse(date) def date_formatter(request, date, size='short'): language = ILanguage(request, None) locale = locales.getLocale(language=language) formatter = locale.dates.getFormatter('date', length=size) return formatter.format(date)