def ru_strftime(date, format="%d.%m.%Y", inflected_day=False, preposition=False): """ Russian strftime, formats date with given format. Value is a date (supports datetime.date and datetime.datetime), parameter is a format (string). For explainings about format, see documentation for original strftime: http://docs.python.org/lib/module-time.html Examples:: {{ some_date|ru_strftime:"%d %B %Y, %A" }} """ try: uformat = pseudo_unicode(format, encoding, u"%d.%m.%Y") ures = dt.ru_strftime(uformat, date, inflected=True, inflected_day=inflected_day, preposition=preposition) res = pseudo_str(ures, encoding) except Exception, err: # because filter must die silently try: default_date = date.strftime(format) except Exception: default_date = str(date) res = default_value % {'error': err, 'value': default_date}
def sum_string(amount, gender, items): """ in_words and choose_plural in a one flask Makes in-words representation of value with choosing correct form of noun. First parameter is an amount of objects. Second is a gender (MALE, FEMALE, NEUTER). Third is a variants of forms for object name. Examples:: {% sum_string some_int MALE "пример,примера,примеров" %} {% sum_string some_other_int FEMALE "задача,задачи,задач" %} """ try: if isinstance(items, basestring): uitems = pseudo_unicode(items, encoding, default_uvalue) else: uitems = [pseudo_unicode(i, encoding, default_uvalue) for i in items] ures = numeral.sum_string(amount, getattr(numeral, str(gender), None), uitems) res = pseudo_str( ures, encoding, default_value ) except Exception, err: # because tag's renderer must die silently res = default_value % {'error': err, 'value': str(amount)}
def get_plural(amount, variants): """ Get proper form for plural and it value. Value is a amount, parameters are forms of noun. Forms are variants for 1, 2, 5 nouns. It may be tuple of elements, or string where variants separates each other by comma. You can append 'absence variant' after all over variants Examples:: {{ some_int|get_plural:"пример,примера,примеров,нет примеров" }} """ try: if isinstance(variants, basestring): uvariants = pseudo_unicode(variants, encoding, default_value) else: uvariants = [pseudo_unicode(v, encoding, default_uvalue) for v in variants] ures = numeral._get_plural_legacy(amount, uvariants) res = pseudo_str( ures, encoding, default_value ) except Exception, err: # because filter must die silently try: default_variant = variants except Exception: default_variant = "" res = default_value % {'error': err, 'value': default_variant}
def distance_of_time(from_time, accuracy=1): """ Display distance of time from current time. Parameter is an accuracy level (deafult is 1). Value must be numeral (i.e. time.time() result) or datetime.datetime (i.e. datetime.datetime.now() result). Examples:: {{ some_time|distance_of_time }} {{ some_dtime|distance_of_time:2 }} """ try: ures = dt.distance_of_time_in_words(from_time, accuracy) res = pseudo_str( ures, encoding, default_value) except Exception, err: # because filter must die silently try: default_distance = "%s seconds" % str(int(time.time() - from_time)) except Exception: default_distance = "" res = default_value % {'error': err, 'value': default_distance}
def sum_string(amount, gender, items): """ in_words and choose_plural in a one flask Makes in-words representation of value with choosing correct form of noun. First parameter is an amount of objects. Second is a gender (MALE, FEMALE, NEUTER). Third is a variants of forms for object name. Examples:: {% sum_string some_int MALE "пример,примера,примеров" %} {% sum_string some_other_int FEMALE "задача,задачи,задач" %} """ try: if isinstance(items, basestring): uitems = pseudo_unicode(items, encoding, default_uvalue) else: uitems = [ pseudo_unicode(i, encoding, default_uvalue) for i in items ] ures = numeral.sum_string(amount, getattr(numeral, str(gender), None), uitems) res = pseudo_str(ures, encoding, default_value) except Exception, err: # because tag's renderer must die silently res = default_value % {'error': err, 'value': str(amount)}
def choose_plural_amount(amount, variants): """ Choose proper form for plural. Value is a amount, parameters are forms of noun. Forms are variants for 1, 2, 5 nouns. It may be tuple of elements, or string where variants separates each other by comma. Examples:: {{ some_int|choose_plural:"пример,примера,примеров" }} """ try: if isinstance(variants, basestring): uvariants = pseudo_unicode(variants, encoding, default_value) else: uvariants = [pseudo_unicode(v, encoding, default_uvalue) for v in variants] ures = numeral.choose_plural_amount(amount, uvariants) res = pseudo_str( ures, encoding, default_value ) except Exception, err: # because filter must die silently try: default_variant = variants except Exception: default_variant = "" res = default_value % {'error': err, 'value': default_variant}
def get_plural(amount, variants): """ Get proper form for plural and it value. Value is a amount, parameters are forms of noun. Forms are variants for 1, 2, 5 nouns. It may be tuple of elements, or string where variants separates each other by comma. You can append 'absence variant' after all over variants Examples:: {{ some_int|get_plural:"пример,примера,примеров,нет примеров" }} """ try: if isinstance(variants, basestring): uvariants = pseudo_unicode(variants, encoding, default_value) else: uvariants = [ pseudo_unicode(v, encoding, default_uvalue) for v in variants ] ures = numeral._get_plural_legacy(amount, uvariants) res = pseudo_str(ures, encoding, default_value) except Exception, err: # because filter must die silently try: default_variant = variants except Exception: default_variant = "" res = default_value % {'error': err, 'value': default_variant}
def detranslify(stext): """Detranslify russian text""" try: ures = translit.detranslify(stext) res = pseudo_str(ures, encoding, default_uvalue) except Exception, err: # because filter must die silently res = default_value % {'error': err, 'value': stext}
def rubles(amount, zero_for_kopeck=False): """Converts float value to in-words representation (for money)""" try: ures = numeral.rubles(amount, zero_for_kopeck) res = pseudo_str(ures, encoding, default_value) except Exception, err: # because filter must die silently res = default_value % {"error": err, "value": str(amount)}
def detranslify(stext): """Detranslify russian text""" try: ures = translit.detranslify(stext) res = pseudo_str(ures, encoding, default_uvalue) except Exception, err: # because filter must die silently res = default_value % {"error": err, "value": stext}
def rubles(amount, zero_for_kopeck=False): """Converts float value to in-words representation (for money)""" try: ures = numeral.rubles(amount, zero_for_kopeck) res = pseudo_str(ures, encoding, default_value) except Exception, err: # because filter must die silently res = default_value % {'error': err, 'value': str(amount)}
def testPseudoStr(self): """ Unit-tests for pytils.templatetags.pseudo_str """ # in django unicode-branch either str() must return unicode # this test depends on Django unicode awareness if tt.unicode_aware: self.assertEquals(tt.pseudo_str(u'тест', 'utf-8'), u'тест') self.assertEquals(tt.pseudo_str(u'тест', 'utf-8'), u'тест') self.assertEquals(tt.pseudo_str('тест', 'utf-8'), '') self.assertEquals(tt.pseudo_str('тест', 'utf-8', u'опа'), u'опа') self.assertEquals(tt.pseudo_str(u'тест', 'ascii'), u'тест') self.assertEquals(tt.pseudo_str(u'тест', 'ascii', 'опа'), u'тест') else: self.assertEquals(tt.pseudo_str(u'тест', 'utf-8'), 'тест') self.assertEquals(tt.pseudo_str('тест', 'utf-8'), '') self.assertEquals(tt.pseudo_str(u'тест', 'ascii'), '') self.assertEquals(tt.pseudo_str(u'тест', 'ascii', 'опа'), 'опа') self.assertRaises(UnicodeEncodeError, tt.pseudo_str, u'тест', 'ascii', None)
def in_words(amount, gender=None): """ In-words representation of amount. Parameter is a gender: MALE, FEMALE or NEUTER Examples:: {{ some_int|in_words }} {{ some_other_int|in_words:FEMALE }} """ try: ures = numeral.in_words(amount, getattr(numeral, str(gender), None)) res = pseudo_str(ures, encoding, default_value) except Exception, err: # because filter must die silently res = default_value % {"error": err, "value": str(amount)}
def in_words(amount, gender=None): """ In-words representation of amount. Parameter is a gender: MALE, FEMALE or NEUTER Examples:: {{ some_int|in_words }} {{ some_other_int|in_words:FEMALE }} """ try: ures = numeral.in_words(amount, getattr(numeral, str(gender), None)) res = pseudo_str(ures, encoding, default_value) except Exception, err: # because filter must die silently res = default_value % {'error': err, 'value': str(amount)}
def ru_strftime_month(date, format="%B", inflected_day=False, preposition=False): """ Cover for ru_strftime from pytils. Differences: inflected=False and another format by default """ try: uformat = pseudo_unicode(format, encoding, u"%d.%m.%Y") ures = dt.ru_strftime(uformat, date, inflected=False, inflected_day=inflected_day, preposition=preposition) res = pseudo_str(ures, encoding) except Exception, err: # because filter must die silently try: default_distance = "%s seconds" % str(int(time.time() - from_time)) except Exception: default_distance = "" res = default_value % {'error': err, 'value': default_distance}
def in_words_ordinal(amount, gender=None): """ In-words representation of amount (ordinal numbers). Parameter is a gender: MALE (default), FEMALE or NEUTER Examples:: {{ some_int|in_words_ordinal }} {{ some_other_int|in_words_ordinal:FEMALE }} """ try: ures = numeral.in_words_ordinal(amount, getattr(numeral, str(gender), None)) res = pseudo_str( ures, encoding, default_value ) except Exception, err: # because filter must die silently res = default_value % {'error': err, 'value': str(amount)}
def pstr(ustr): """ Provide/Pseudo unicode """ return pseudo_str(ustr, encoding, None)