Skip to content

Commit

Permalink
python3, django>=1.11<=3.0
Browse files Browse the repository at this point in the history
  • Loading branch information
emorozov committed May 15, 2020
1 parent 8f61bcc commit 085ef13
Show file tree
Hide file tree
Showing 32 changed files with 106 additions and 856 deletions.
28 changes: 22 additions & 6 deletions .travis.yml
Original file line number Diff line number Diff line change
Expand Up @@ -3,12 +3,6 @@ sudo: false
dist: xenial
matrix:
include:
- python: "2.7"
env: TOXENV="py27-django11"
- python: "3.4"
env: TOXENV="py34-django11"
- python: "3.4"
env: TOXENV="py34-django20"
- python: "3.5"
env: TOXENV="py35-django11"
- python: "3.5"
Expand All @@ -25,5 +19,27 @@ matrix:
env: TOXENV="py36-django21"
- python: "3.6"
env: TOXENV="py36-django22"
- python: "3.6"
env: TOXENV="py36-django30"
- python: "3.7"
env: TOXENV="py37-django11"
- python: "3.7"
env: TOXENV="py37-django20"
- python: "3.7"
env: TOXENV="py37-django21"
- python: "3.7"
env: TOXENV="py37-django22"
- python: "3.7"
env: TOXENV="py37-django30"
- python: "3.8"
env: TOXENV="py38-django11"
- python: "3.8"
env: TOXENV="py38-django20"
- python: "3.8"
env: TOXENV="py38-django21"
- python: "3.8"
env: TOXENV="py38-django22"
- python: "3.8"
env: TOXENV="py38-django30"
install: pip install tox
script: tox -e $TOXENV
1 change: 0 additions & 1 deletion doc/examples-django/pytilsex/settings.py
Original file line number Diff line number Diff line change
@@ -1,5 +1,4 @@
# -*- coding: utf-8 -*-
from __future__ import unicode_literals

# Django settings for pytilsex project.

Expand Down
1 change: 0 additions & 1 deletion doc/examples-django/pytilsex/tests.py
Original file line number Diff line number Diff line change
@@ -1,6 +1,5 @@
# -*- encoding: utf-8 -*-

from __future__ import unicode_literals
from django.urls import reverse
from django.test import TestCase
from django.test.client import Client
Expand Down
30 changes: 9 additions & 21 deletions doc/examples/dt.distance_of_time_in_words.py
Original file line number Diff line number Diff line change
Expand Up @@ -5,18 +5,6 @@
import time
from pytils import dt

def print_(s):
# pytils всегда возвращает юникод (строка в Py3.x)
# обычно это ОК выводить юникод в терминал
# но если это неинтерактивный вывод
# (например, использования модуля subprocess)
# то для Py2.x нужно использовать перекодировку в utf-8
from pytils.third import six
if six.PY3:
out = s
else:
out = s.encode('UTF-8')
print(out)

# поддерживаются оба модуля работы со временем:
# time
Expand All @@ -37,30 +25,30 @@ def print_(s):

# если to_time не передано, считается от "сейчас",
# и тогда -1 день -> "вчера", а +1 день -> "завтра"
print_(dt.distance_of_time_in_words(in_past))
print(dt.distance_of_time_in_words(in_past))
#-> вчера
print_(dt.distance_of_time_in_words(dt_in_future))
print(dt.distance_of_time_in_words(dt_in_future))
#-> завтра


# а вот если передано to_time, то нельзя говорить "вчера",
# потому что to_time не обязательно "сейчас",
# поэтому -1 день -> "1 день назад"
print_(dt.distance_of_time_in_words(in_past, to_time=current_time))
print(dt.distance_of_time_in_words(in_past, to_time=current_time))
#-> 1 день назад

# увеличение точности отражается на результате
print_(dt.distance_of_time_in_words(in_past, accuracy=2))
print(dt.distance_of_time_in_words(in_past, accuracy=2))
#-> 1 день 3 часа назад
print_(dt.distance_of_time_in_words(in_past, accuracy=3))
print(dt.distance_of_time_in_words(in_past, accuracy=3))
#-> 1 день 3 часа 46 минут назад

# аналогично и с будущим временем:
print_(dt.distance_of_time_in_words(in_future))
print(dt.distance_of_time_in_words(in_future))
#-> завтра
print_(dt.distance_of_time_in_words(in_future, to_time=current_time))
print(dt.distance_of_time_in_words(in_future, to_time=current_time))
#-> через 1 день
print_(dt.distance_of_time_in_words(in_future, accuracy=2))
print(dt.distance_of_time_in_words(in_future, accuracy=2))
#-> через 1 день 3 часа
print_(dt.distance_of_time_in_words(in_future, accuracy=3))
print(dt.distance_of_time_in_words(in_future, accuracy=3))
#-> через 1 день 3 часа 46 минут
31 changes: 8 additions & 23 deletions doc/examples/dt.ru_strftime.py
Original file line number Diff line number Diff line change
@@ -1,60 +1,45 @@
#!/usr/bin/env python
# -*- coding: utf-8 -*-

from __future__ import unicode_literals

import datetime
from pytils import dt

def print_(s):
# pytils всегда возвращает юникод (строка в Py3.x)
# обычно это ОК выводить юникод в терминал
# но если это неинтерактивный вывод
# (например, использования модуля subprocess)
# то для Py2.x нужно использовать перекодировку в utf-8
from pytils.third import six
if six.PY3:
out = s
else:
out = s.encode('UTF-8')
print(out)


# действие ru_strftime аналогично оригинальному strftime
# только в %a, %A, %b и %B вместо английских названий будут русские

d = datetime.date(2006, 9, 15)

# оригинал
print_(d.strftime("%d.%m.%Y (%a)"))
print(d.strftime("%d.%m.%Y (%a)"))
# -> 15.09.2006 (Fri)

# теперь на русском
# (единственно, что нужно формат строки передавать в unicode
# в то время, как в оригинальном strftime это обязательно str)
print_(dt.ru_strftime("%d.%m.%Y (%a)", d))
print(dt.ru_strftime("%d.%m.%Y (%a)", d))
# -> 15.09.2006 (пт)

# %A дает полное название дня недели
print_(dt.ru_strftime("%d.%m.%Y (%A)", d))
print(dt.ru_strftime("%d.%m.%Y (%A)", d))
# -> 15.09.2006 (пятница)

# %B -- название месяца
print_(dt.ru_strftime("%d %B %Y", d))
print(dt.ru_strftime("%d %B %Y", d))
# -> 15 сентябрь 2006

# ru_strftime умеет правильно склонять месяц (опция inflected)
print_(dt.ru_strftime("%d %B %Y", d, inflected=True))
print(dt.ru_strftime("%d %B %Y", d, inflected=True))
# -> 15 сентября 2006

# ... и день (опция inflected_day)
print_(dt.ru_strftime("%d.%m.%Y, в %A", d, inflected_day=True))
print(dt.ru_strftime("%d.%m.%Y, в %A", d, inflected_day=True))
# -> 15.09.2006, в пятницу

# ... и добавлять правильный предлог (опция preposition)
print_(dt.ru_strftime("%d.%m.%Y, %A", d, preposition=True))
print(dt.ru_strftime("%d.%m.%Y, %A", d, preposition=True))
# -> 15.09.2006, в пятницу

# второй параметр можно не передавать, будет использована текущая дата
print_(dt.ru_strftime("%d %B %Y", inflected=True))
print(dt.ru_strftime("%d %B %Y", inflected=True))
# ->> 1 декабря 2013
29 changes: 7 additions & 22 deletions doc/examples/numeral.choose_plural.py
Original file line number Diff line number Diff line change
@@ -1,23 +1,8 @@
#!/usr/bin/env python
# -*- coding: utf-8 -*-

from __future__ import unicode_literals

from pytils import numeral

def print_(s):
# pytils всегда возвращает юникод (строка в Py3.x)
# обычно это ОК выводить юникод в терминал
# но если это неинтерактивный вывод
# (например, использования модуля subprocess)
# то для Py2.x нужно использовать перекодировку в utf-8
from pytils.third import six
if six.PY3:
out = s
else:
out = s.encode('UTF-8')
print(out)


# choose_plural нужен для выбора правильной формы
# существительного
Expand All @@ -30,28 +15,28 @@ def print_(s):
# (один, два, пять)
# т.е. для 1, 2 и 5 объектов, например для слова "пример"
# (пример, примера, примеров)
print_(numeral.choose_plural(21, ("пример", "примера", "примеров")))
print(numeral.choose_plural(21, ("пример", "примера", "примеров")))
#-> пример
print_(numeral.choose_plural(12, ("пример", "примера", "примеров")))
print(numeral.choose_plural(12, ("пример", "примера", "примеров")))
#-> примеров
print_(numeral.choose_plural(32, ("пример", "примера", "примеров")))
print(numeral.choose_plural(32, ("пример", "примера", "примеров")))
#-> примера

# также можно задавать варианты в одну строку, разделенные запятой
print_(numeral.choose_plural(32, "пример,примера, примеров"))
print(numeral.choose_plural(32, "пример,примера, примеров"))
#-> примера

# если в варианте используется запятая, она экранируется слешем
print_(numeral.choose_plural(35, "гвоздь, гвоздя, гвоздей\, шпунтов"))
print(numeral.choose_plural(35, "гвоздь, гвоздя, гвоздей\, шпунтов"))
#-> гвоздей, шпунтов

# зачастую требуется не просто вариант, а вместе с числительным
# в этом случае следует использовать get_plural
print_(numeral.get_plural(32, "пример,примера, примеров"))
print(numeral.get_plural(32, "пример,примера, примеров"))
#-> 32 примера

# часто хочется, чтобы в случае отсутсвия значения (т.е. количество равно нулю)
# выводилось не "0 примеров", а "примеров нет"
# в этом случае используйте третий параметр get_plural:
print_(numeral.get_plural(0, "пример,примера, примеров", "без примеров"))
print(numeral.get_plural(0, "пример,примера, примеров", "без примеров"))
# -> без примеров
28 changes: 7 additions & 21 deletions doc/examples/numeral.in_words.py
Original file line number Diff line number Diff line change
Expand Up @@ -3,44 +3,30 @@

from pytils import numeral

def print_(s):
# pytils всегда возвращает юникод (строка в Py3.x)
# обычно это ОК выводить юникод в терминал
# но если это неинтерактивный вывод
# (например, использования модуля subprocess)
# то для Py2.x нужно использовать перекодировку в utf-8
from pytils.third import six
if six.PY3:
out = s
else:
out = s.encode('UTF-8')
print(out)


# in_words нужен для представления цифр словами

print_(numeral.in_words(12))
print(numeral.in_words(12))
#-> двенадцать

# вторым параметром можно задать пол:
# мужской=numeral.MALE, женский=numeral.FEMALE, срелний=numeral.NEUTER (по умолчанию -- мужской)
print_(numeral.in_words(21))
print(numeral.in_words(21))
#-> двадцать один

# можно передавать неименованным параметром:
print_(numeral.in_words(21, numeral.FEMALE))
print(numeral.in_words(21, numeral.FEMALE))
#-> двадцать одна

# можно именованным
print_(numeral.in_words(21, gender=numeral.FEMALE))
print(numeral.in_words(21, gender=numeral.FEMALE))
#-> двадцать одна
print_(numeral.in_words(21, gender=numeral.NEUTER))
print(numeral.in_words(21, gender=numeral.NEUTER))
#-> двадцать одно

# можно и дробные
print_(numeral.in_words(12.5))
print(numeral.in_words(12.5))
#-> двенадцать целых пять десятых

# причем "пишутся" только значимые цифры
print_(numeral.in_words(5.30000))
print(numeral.in_words(5.30000))
#-> пять целых три десятых
22 changes: 4 additions & 18 deletions doc/examples/numeral.rubles.py
Original file line number Diff line number Diff line change
Expand Up @@ -3,32 +3,18 @@

from pytils import numeral

def print_(s):
# pytils всегда возвращает юникод (строка в Py3.x)
# обычно это ОК выводить юникод в терминал
# но если это неинтерактивный вывод
# (например, использования модуля subprocess)
# то для Py2.x нужно использовать перекодировку в utf-8
from pytils.third import six
if six.PY3:
out = s
else:
out = s.encode('UTF-8')
print(out)


# rubles служит для формирования строк с деньгами

print_(numeral.rubles(10))
print(numeral.rubles(10))
#-> десять рублей

# если нужно, то даже 0 копеек можно записать словами
print_(numeral.rubles(10, zero_for_kopeck=True))
print(numeral.rubles(10, zero_for_kopeck=True))
#-> десять рублей ноль копеек

print_(numeral.rubles(2.35))
print(numeral.rubles(2.35))
#-> два рубля тридцать пять копеек

# в случае чего, копейки округляются
print_(numeral.rubles(3.95754))
print(numeral.rubles(3.95754))
#-> три рубля девяносто шесть копеек
24 changes: 4 additions & 20 deletions doc/examples/numeral.sum_string.py
Original file line number Diff line number Diff line change
@@ -1,24 +1,8 @@
#!/usr/bin/env python
# -*- coding: utf-8 -*-

from __future__ import unicode_literals

from pytils import numeral

def print_(s):
# pytils всегда возвращает юникод (строка в Py3.x)
# обычно это ОК выводить юникод в терминал
# но если это неинтерактивный вывод
# (например, использования модуля subprocess)
# то для Py2.x нужно использовать перекодировку в utf-8
from pytils.third import six
if six.PY3:
out = s
else:
out = s.encode('UTF-8')
print(out)


# sum_string объединяет в себе choose_plural и in_words
# т.е. передаются и количество, и варианты названия объекта
# а на выходе получаем количество объектов в правильной форме
Expand All @@ -29,17 +13,17 @@ def print_(s):
# 3) items, варианты названий объекта (необязательно),
# правила аналогичны таковым у choose_plural

print_(numeral.sum_string(3, numeral.MALE, ("носок", "носка", "носков")))
print(numeral.sum_string(3, numeral.MALE, ("носок", "носка", "носков")))
#-> три носка

print_(numeral.sum_string(5, numeral.FEMALE, ("коробка", "коробки", "коробок")))
print(numeral.sum_string(5, numeral.FEMALE, ("коробка", "коробки", "коробок")))
#-> пять коробок

print_(numeral.sum_string(21, numeral.NEUTER, ("очко", "очка", "очков")))
print(numeral.sum_string(21, numeral.NEUTER, ("очко", "очка", "очков")))
#-> двадцать одно очко

# если варианты не указывать, то действие функции аналогично дейтсвию in_words
print_(numeral.sum_string(21, gender=numeral.NEUTER))
print(numeral.sum_string(21, gender=numeral.NEUTER))
#-> двадцать одно


Loading

0 comments on commit 085ef13

Please sign in to comment.