diff options
author | Pavel Aharoni <pa0916@att.com> | 2017-06-11 14:33:57 +0300 |
---|---|---|
committer | Pavel Aharoni <pa0916@att.com> | 2017-06-11 14:33:57 +0300 |
commit | 04387deeab820e75c6d37d2ddd5b514cb7bcfd9e (patch) | |
tree | 2f4dfacba74ec390c4371c62dc96af2b1d5f19ef /jython-tosca-parser/src/main/resources/Lib/site-packages/babel-2.3.4-py2.7.egg/babel/support.py | |
parent | fff70fce14ebe7dec3a4d52b7b90cee4414d0562 (diff) |
[SDC-32] separate Tosca Parser from DC
Change-Id: I7e7f31ff2bd92fec22031f75b7051d129a21d01b
Signed-off-by: Pavel Aharoni <pa0916@att.com>
Diffstat (limited to 'jython-tosca-parser/src/main/resources/Lib/site-packages/babel-2.3.4-py2.7.egg/babel/support.py')
-rw-r--r-- | jython-tosca-parser/src/main/resources/Lib/site-packages/babel-2.3.4-py2.7.egg/babel/support.py | 609 |
1 files changed, 0 insertions, 609 deletions
diff --git a/jython-tosca-parser/src/main/resources/Lib/site-packages/babel-2.3.4-py2.7.egg/babel/support.py b/jython-tosca-parser/src/main/resources/Lib/site-packages/babel-2.3.4-py2.7.egg/babel/support.py deleted file mode 100644 index 24bc9aa..0000000 --- a/jython-tosca-parser/src/main/resources/Lib/site-packages/babel-2.3.4-py2.7.egg/babel/support.py +++ /dev/null @@ -1,609 +0,0 @@ -# -*- coding: utf-8 -*- -""" - babel.support - ~~~~~~~~~~~~~ - - Several classes and functions that help with integrating and using Babel - in applications. - - .. note: the code in this module is not used by Babel itself - - :copyright: (c) 2013 by the Babel Team. - :license: BSD, see LICENSE for more details. -""" - -import gettext -import locale - -from babel.core import Locale -from babel.dates import format_date, format_datetime, format_time, \ - format_timedelta -from babel.numbers import format_number, format_decimal, format_currency, \ - format_percent, format_scientific -from babel._compat import PY2, text_type, text_to_native - - -class Format(object): - """Wrapper class providing the various date and number formatting functions - bound to a specific locale and time-zone. - - >>> from babel.util import UTC - >>> from datetime import date - >>> fmt = Format('en_US', UTC) - >>> fmt.date(date(2007, 4, 1)) - u'Apr 1, 2007' - >>> fmt.decimal(1.2345) - u'1.234' - """ - - def __init__(self, locale, tzinfo=None): - """Initialize the formatter. - - :param locale: the locale identifier or `Locale` instance - :param tzinfo: the time-zone info (a `tzinfo` instance or `None`) - """ - self.locale = Locale.parse(locale) - self.tzinfo = tzinfo - - def date(self, date=None, format='medium'): - """Return a date formatted according to the given pattern. - - >>> from datetime import date - >>> fmt = Format('en_US') - >>> fmt.date(date(2007, 4, 1)) - u'Apr 1, 2007' - """ - return format_date(date, format, locale=self.locale) - - def datetime(self, datetime=None, format='medium'): - """Return a date and time formatted according to the given pattern. - - >>> from datetime import datetime - >>> from pytz import timezone - >>> fmt = Format('en_US', tzinfo=timezone('US/Eastern')) - >>> fmt.datetime(datetime(2007, 4, 1, 15, 30)) - u'Apr 1, 2007, 11:30:00 AM' - """ - return format_datetime(datetime, format, tzinfo=self.tzinfo, - locale=self.locale) - - def time(self, time=None, format='medium'): - """Return a time formatted according to the given pattern. - - >>> from datetime import datetime - >>> from pytz import timezone - >>> fmt = Format('en_US', tzinfo=timezone('US/Eastern')) - >>> fmt.time(datetime(2007, 4, 1, 15, 30)) - u'11:30:00 AM' - """ - return format_time(time, format, tzinfo=self.tzinfo, locale=self.locale) - - def timedelta(self, delta, granularity='second', threshold=.85, - format='medium', add_direction=False): - """Return a time delta according to the rules of the given locale. - - >>> from datetime import timedelta - >>> fmt = Format('en_US') - >>> fmt.timedelta(timedelta(weeks=11)) - u'3 months' - """ - return format_timedelta(delta, granularity=granularity, - threshold=threshold, - format=format, add_direction=add_direction, - locale=self.locale) - - def number(self, number): - """Return an integer number formatted for the locale. - - >>> fmt = Format('en_US') - >>> fmt.number(1099) - u'1,099' - """ - return format_number(number, locale=self.locale) - - def decimal(self, number, format=None): - """Return a decimal number formatted for the locale. - - >>> fmt = Format('en_US') - >>> fmt.decimal(1.2345) - u'1.234' - """ - return format_decimal(number, format, locale=self.locale) - - def currency(self, number, currency): - """Return a number in the given currency formatted for the locale. - """ - return format_currency(number, currency, locale=self.locale) - - def percent(self, number, format=None): - """Return a number formatted as percentage for the locale. - - >>> fmt = Format('en_US') - >>> fmt.percent(0.34) - u'34%' - """ - return format_percent(number, format, locale=self.locale) - - def scientific(self, number): - """Return a number formatted using scientific notation for the locale. - """ - return format_scientific(number, locale=self.locale) - - -class LazyProxy(object): - """Class for proxy objects that delegate to a specified function to evaluate - the actual object. - - >>> def greeting(name='world'): - ... return 'Hello, %s!' % name - >>> lazy_greeting = LazyProxy(greeting, name='Joe') - >>> print(lazy_greeting) - Hello, Joe! - >>> u' ' + lazy_greeting - u' Hello, Joe!' - >>> u'(%s)' % lazy_greeting - u'(Hello, Joe!)' - - This can be used, for example, to implement lazy translation functions that - delay the actual translation until the string is actually used. The - rationale for such behavior is that the locale of the user may not always - be available. In web applications, you only know the locale when processing - a request. - - The proxy implementation attempts to be as complete as possible, so that - the lazy objects should mostly work as expected, for example for sorting: - - >>> greetings = [ - ... LazyProxy(greeting, 'world'), - ... LazyProxy(greeting, 'Joe'), - ... LazyProxy(greeting, 'universe'), - ... ] - >>> greetings.sort() - >>> for greeting in greetings: - ... print(greeting) - Hello, Joe! - Hello, universe! - Hello, world! - """ - __slots__ = ['_func', '_args', '_kwargs', '_value', '_is_cache_enabled'] - - def __init__(self, func, *args, **kwargs): - is_cache_enabled = kwargs.pop('enable_cache', True) - # Avoid triggering our own __setattr__ implementation - object.__setattr__(self, '_func', func) - object.__setattr__(self, '_args', args) - object.__setattr__(self, '_kwargs', kwargs) - object.__setattr__(self, '_is_cache_enabled', is_cache_enabled) - object.__setattr__(self, '_value', None) - - @property - def value(self): - if self._value is None: - value = self._func(*self._args, **self._kwargs) - if not self._is_cache_enabled: - return value - object.__setattr__(self, '_value', value) - return self._value - - def __contains__(self, key): - return key in self.value - - def __nonzero__(self): - return bool(self.value) - - def __dir__(self): - return dir(self.value) - - def __iter__(self): - return iter(self.value) - - def __len__(self): - return len(self.value) - - def __str__(self): - return str(self.value) - - def __unicode__(self): - return unicode(self.value) - - def __add__(self, other): - return self.value + other - - def __radd__(self, other): - return other + self.value - - def __mod__(self, other): - return self.value % other - - def __rmod__(self, other): - return other % self.value - - def __mul__(self, other): - return self.value * other - - def __rmul__(self, other): - return other * self.value - - def __call__(self, *args, **kwargs): - return self.value(*args, **kwargs) - - def __lt__(self, other): - return self.value < other - - def __le__(self, other): - return self.value <= other - - def __eq__(self, other): - return self.value == other - - def __ne__(self, other): - return self.value != other - - def __gt__(self, other): - return self.value > other - - def __ge__(self, other): - return self.value >= other - - def __delattr__(self, name): - delattr(self.value, name) - - def __getattr__(self, name): - return getattr(self.value, name) - - def __setattr__(self, name, value): - setattr(self.value, name, value) - - def __delitem__(self, key): - del self.value[key] - - def __getitem__(self, key): - return self.value[key] - - def __setitem__(self, key, value): - self.value[key] = value - - def __copy__(self): - return LazyProxy( - self._func, - enable_cache=self._is_cache_enabled, - *self._args, - **self._kwargs - ) - - def __deepcopy__(self, memo): - from copy import deepcopy - return LazyProxy( - deepcopy(self._func, memo), - enable_cache=deepcopy(self._is_cache_enabled, memo), - *deepcopy(self._args, memo), - **deepcopy(self._kwargs, memo) - ) - - -class NullTranslations(gettext.NullTranslations, object): - - DEFAULT_DOMAIN = None - - def __init__(self, fp=None): - """Initialize a simple translations class which is not backed by a - real catalog. Behaves similar to gettext.NullTranslations but also - offers Babel's on *gettext methods (e.g. 'dgettext()'). - - :param fp: a file-like object (ignored in this class) - """ - # These attributes are set by gettext.NullTranslations when a catalog - # is parsed (fp != None). Ensure that they are always present because - # some *gettext methods (including '.gettext()') rely on the attributes. - self._catalog = {} - self.plural = lambda n: int(n != 1) - super(NullTranslations, self).__init__(fp=fp) - self.files = list(filter(None, [getattr(fp, 'name', None)])) - self.domain = self.DEFAULT_DOMAIN - self._domains = {} - - def dgettext(self, domain, message): - """Like ``gettext()``, but look the message up in the specified - domain. - """ - return self._domains.get(domain, self).gettext(message) - - def ldgettext(self, domain, message): - """Like ``lgettext()``, but look the message up in the specified - domain. - """ - return self._domains.get(domain, self).lgettext(message) - - def udgettext(self, domain, message): - """Like ``ugettext()``, but look the message up in the specified - domain. - """ - return self._domains.get(domain, self).ugettext(message) - # backward compatibility with 0.9 - dugettext = udgettext - - def dngettext(self, domain, singular, plural, num): - """Like ``ngettext()``, but look the message up in the specified - domain. - """ - return self._domains.get(domain, self).ngettext(singular, plural, num) - - def ldngettext(self, domain, singular, plural, num): - """Like ``lngettext()``, but look the message up in the specified - domain. - """ - return self._domains.get(domain, self).lngettext(singular, plural, num) - - def udngettext(self, domain, singular, plural, num): - """Like ``ungettext()`` but look the message up in the specified - domain. - """ - return self._domains.get(domain, self).ungettext(singular, plural, num) - # backward compatibility with 0.9 - dungettext = udngettext - - # Most of the downwards code, until it get's included in stdlib, from: - # http://bugs.python.org/file10036/gettext-pgettext.patch - # - # The encoding of a msgctxt and a msgid in a .mo file is - # msgctxt + "\x04" + msgid (gettext version >= 0.15) - CONTEXT_ENCODING = '%s\x04%s' - - def pgettext(self, context, message): - """Look up the `context` and `message` id in the catalog and return the - corresponding message string, as an 8-bit string encoded with the - catalog's charset encoding, if known. If there is no entry in the - catalog for the `message` id and `context` , and a fallback has been - set, the look up is forwarded to the fallback's ``pgettext()`` - method. Otherwise, the `message` id is returned. - """ - ctxt_msg_id = self.CONTEXT_ENCODING % (context, message) - missing = object() - tmsg = self._catalog.get(ctxt_msg_id, missing) - if tmsg is missing: - if self._fallback: - return self._fallback.pgettext(context, message) - return message - # Encode the Unicode tmsg back to an 8-bit string, if possible - if self._output_charset: - return text_to_native(tmsg, self._output_charset) - elif self._charset: - return text_to_native(tmsg, self._charset) - return tmsg - - def lpgettext(self, context, message): - """Equivalent to ``pgettext()``, but the translation is returned in the - preferred system encoding, if no other encoding was explicitly set with - ``bind_textdomain_codeset()``. - """ - ctxt_msg_id = self.CONTEXT_ENCODING % (context, message) - missing = object() - tmsg = self._catalog.get(ctxt_msg_id, missing) - if tmsg is missing: - if self._fallback: - return self._fallback.lpgettext(context, message) - return message - if self._output_charset: - return tmsg.encode(self._output_charset) - return tmsg.encode(locale.getpreferredencoding()) - - def npgettext(self, context, singular, plural, num): - """Do a plural-forms lookup of a message id. `singular` is used as the - message id for purposes of lookup in the catalog, while `num` is used to - determine which plural form to use. The returned message string is an - 8-bit string encoded with the catalog's charset encoding, if known. - - If the message id for `context` is not found in the catalog, and a - fallback is specified, the request is forwarded to the fallback's - ``npgettext()`` method. Otherwise, when ``num`` is 1 ``singular`` is - returned, and ``plural`` is returned in all other cases. - """ - ctxt_msg_id = self.CONTEXT_ENCODING % (context, singular) - try: - tmsg = self._catalog[(ctxt_msg_id, self.plural(num))] - if self._output_charset: - return text_to_native(tmsg, self._output_charset) - elif self._charset: - return text_to_native(tmsg, self._charset) - return tmsg - except KeyError: - if self._fallback: - return self._fallback.npgettext(context, singular, plural, num) - if num == 1: - return singular - else: - return plural - - def lnpgettext(self, context, singular, plural, num): - """Equivalent to ``npgettext()``, but the translation is returned in the - preferred system encoding, if no other encoding was explicitly set with - ``bind_textdomain_codeset()``. - """ - ctxt_msg_id = self.CONTEXT_ENCODING % (context, singular) - try: - tmsg = self._catalog[(ctxt_msg_id, self.plural(num))] - if self._output_charset: - return tmsg.encode(self._output_charset) - return tmsg.encode(locale.getpreferredencoding()) - except KeyError: - if self._fallback: - return self._fallback.lnpgettext(context, singular, plural, num) - if num == 1: - return singular - else: - return plural - - def upgettext(self, context, message): - """Look up the `context` and `message` id in the catalog and return the - corresponding message string, as a Unicode string. If there is no entry - in the catalog for the `message` id and `context`, and a fallback has - been set, the look up is forwarded to the fallback's ``upgettext()`` - method. Otherwise, the `message` id is returned. - """ - ctxt_message_id = self.CONTEXT_ENCODING % (context, message) - missing = object() - tmsg = self._catalog.get(ctxt_message_id, missing) - if tmsg is missing: - if self._fallback: - return self._fallback.upgettext(context, message) - return text_type(message) - return tmsg - - def unpgettext(self, context, singular, plural, num): - """Do a plural-forms lookup of a message id. `singular` is used as the - message id for purposes of lookup in the catalog, while `num` is used to - determine which plural form to use. The returned message string is a - Unicode string. - - If the message id for `context` is not found in the catalog, and a - fallback is specified, the request is forwarded to the fallback's - ``unpgettext()`` method. Otherwise, when `num` is 1 `singular` is - returned, and `plural` is returned in all other cases. - """ - ctxt_message_id = self.CONTEXT_ENCODING % (context, singular) - try: - tmsg = self._catalog[(ctxt_message_id, self.plural(num))] - except KeyError: - if self._fallback: - return self._fallback.unpgettext(context, singular, plural, num) - if num == 1: - tmsg = text_type(singular) - else: - tmsg = text_type(plural) - return tmsg - - def dpgettext(self, domain, context, message): - """Like `pgettext()`, but look the message up in the specified - `domain`. - """ - return self._domains.get(domain, self).pgettext(context, message) - - def udpgettext(self, domain, context, message): - """Like `upgettext()`, but look the message up in the specified - `domain`. - """ - return self._domains.get(domain, self).upgettext(context, message) - # backward compatibility with 0.9 - dupgettext = udpgettext - - def ldpgettext(self, domain, context, message): - """Equivalent to ``dpgettext()``, but the translation is returned in the - preferred system encoding, if no other encoding was explicitly set with - ``bind_textdomain_codeset()``. - """ - return self._domains.get(domain, self).lpgettext(context, message) - - def dnpgettext(self, domain, context, singular, plural, num): - """Like ``npgettext``, but look the message up in the specified - `domain`. - """ - return self._domains.get(domain, self).npgettext(context, singular, - plural, num) - - def udnpgettext(self, domain, context, singular, plural, num): - """Like ``unpgettext``, but look the message up in the specified - `domain`. - """ - return self._domains.get(domain, self).unpgettext(context, singular, - plural, num) - # backward compatibility with 0.9 - dunpgettext = udnpgettext - - def ldnpgettext(self, domain, context, singular, plural, num): - """Equivalent to ``dnpgettext()``, but the translation is returned in - the preferred system encoding, if no other encoding was explicitly set - with ``bind_textdomain_codeset()``. - """ - return self._domains.get(domain, self).lnpgettext(context, singular, - plural, num) - - if not PY2: - ugettext = gettext.NullTranslations.gettext - ungettext = gettext.NullTranslations.ngettext - - -class Translations(NullTranslations, gettext.GNUTranslations): - """An extended translation catalog class.""" - - DEFAULT_DOMAIN = 'messages' - - def __init__(self, fp=None, domain=None): - """Initialize the translations catalog. - - :param fp: the file-like object the translation should be read from - :param domain: the message domain (default: 'messages') - """ - super(Translations, self).__init__(fp=fp) - self.domain = domain or self.DEFAULT_DOMAIN - - if not PY2: - ugettext = gettext.GNUTranslations.gettext - ungettext = gettext.GNUTranslations.ngettext - - @classmethod - def load(cls, dirname=None, locales=None, domain=None): - """Load translations from the given directory. - - :param dirname: the directory containing the ``MO`` files - :param locales: the list of locales in order of preference (items in - this list can be either `Locale` objects or locale - strings) - :param domain: the message domain (default: 'messages') - """ - if locales is not None: - if not isinstance(locales, (list, tuple)): - locales = [locales] - locales = [str(locale) for locale in locales] - if not domain: - domain = cls.DEFAULT_DOMAIN - filename = gettext.find(domain, dirname, locales) - if not filename: - return NullTranslations() - with open(filename, 'rb') as fp: - return cls(fp=fp, domain=domain) - - def __repr__(self): - return '<%s: "%s">' % (type(self).__name__, - self._info.get('project-id-version')) - - def add(self, translations, merge=True): - """Add the given translations to the catalog. - - If the domain of the translations is different than that of the - current catalog, they are added as a catalog that is only accessible - by the various ``d*gettext`` functions. - - :param translations: the `Translations` instance with the messages to - add - :param merge: whether translations for message domains that have - already been added should be merged with the existing - translations - """ - domain = getattr(translations, 'domain', self.DEFAULT_DOMAIN) - if merge and domain == self.domain: - return self.merge(translations) - - existing = self._domains.get(domain) - if merge and existing is not None: - existing.merge(translations) - else: - translations.add_fallback(self) - self._domains[domain] = translations - - return self - - def merge(self, translations): - """Merge the given translations into the catalog. - - Message translations in the specified catalog override any messages - with the same identifier in the existing catalog. - - :param translations: the `Translations` instance with the messages to - merge - """ - if isinstance(translations, gettext.GNUTranslations): - self._catalog.update(translations._catalog) - if isinstance(translations, Translations): - self.files.extend(translations.files) - - return self |