четверг, 29 ноября 2012 г.

pisa / xhtml2pdf, конвертер, написанный на Python (Перевод)



Какое-то время назад я познакомился с pisa, которая теперь называется xhtml2pdf. Она написана на Python и может быть использована для конвертации HTML/CSS в PDF.

Вот список некоторых возможностей xhtml2pdf:
  • Переводит HTML и CSS в PDF файлы
  • Написан только на Python и потому платформо-независим
  • Поддерживает колонки, заголовки, колонтитулы, номера страниц, пользовательские шрифты Postscript иTrueType и многое другое
  • Поддерживает фреймворки типа Django, Turbogears, CherryPy, Pylons, WSGI
  • Простая интеграция в программы на Python
  • Может быть использована как утилита командной строки для Windows, MacOS X and Linux (бинарники отсутствуют)
Выглядит, в общем, полезной штукой.

xhtml2pdf: конвертер HTML/CSS в PDF на Python

Согласно сайту, xhtml2pdf бесплатен для коммерческого и некоммерческого использования.

Источник

PyBooklet: создание PDF с двумя страницами на листе для печати (Перевод)


Интересная идея.
PyBooklet может быть полезным дополнением к моей утилите PDFBook (части xtopdf), которое может создавать книжки в PDF из набора текстовых файлов, используя при этом меньшее количество бумаги, что хорошо отразится на окружающей среде.

среда, 21 ноября 2012 г.

wxPython in Action. Часть 3. Продвинутое использование wxPython (Перевод)

Эту часть мы начнём с рассмотрения трёх более сложных виджетов и перейдём к возможностям, которые не будут использованы в каждой программе на wxPython, но тем не менее лучше быть с ними знакомым, чтобы использовать их когда это вдруг понадобится.
В главе 13, "Создание списков (list control) и управление им" мы рассмотрим списки, более продвинутую версию list box, который позволяет отображать элементы в стиле проводника windows с различными режимами. Вы узнаете как переключаться между этими режимами, добавлять в список текст и изображения, и реагировать на действия пользователей. Глава 14, "Работа с сеткой (grid control)", добавляет ещё одно измерение к списку. Сетки очень гибкие и мы покажем Вам способы работы с данными в сетке, так же как и механизмы настройки отображения сетки и её редактирования. Глава 15, "Взбираясь на дерево (tree control)", мы поговорим об элементе "дерево", который позволяет компактно отображать иерархию объектов. Мы узнаем как работать с данными в этом элементе, перемещаться по дереву и настраивать его отображение.
В главе 16, "Включение HTML в ваше приложение", мы увидим, что HTML - удобный способ настройки стилей отображения текстовых меток и вывода чего-либо на печать. Мы покажем как работает виджет HTML и какие ограничения он содержит относительно стандарта HTML. Глава 17, "Фреймворк для печати в wxPython", разбирается с проблемами вывода на печать, как рисовать в принтер и как работать со стандартным диалогом печати, чтобы обеспечить взаимодействие между wxPython и системой печати ОС. Кроме того, мы увидим как сделать предпросмотр перед печатью. Глава 18, "Использование оставшихся возможностей wxPython", расскажет обо всём остальном. Там мы поговорим о передаче данных через буфер обмена, работе в drag and drop, использовании таймеров и сделаем несколько замечаний об использовании потоков в приложениях wxPython.

понедельник, 19 ноября 2012 г.

Обзор книги: Steve Holden: Python для анализа данных (Перевод)


Python for Data Analysis; Wes McKinney. O'Reilly Media, October 2012
Эта книга является давно ожидаемым дополнением к священному писанию Python, и её стоит прочитать каждому, кто связан с анализом данных. C самой первой главы это чёткое и и качественное объяснение того, как можно использовать Python для этих целей. Автор подразумевает, что Python используется в качестве "готового" языка, так что в книжке не рассказывается о том, как реализовать аналитические методы на Python, вместо этого на практических примерах демонстрируется как использовать уже существующие, доступные, мощные инструменты.
После нескольких коротких мотивирующих примеров Вы прочитаете одно из наиболее ясных изложений преимуществ iPython, которое я только читал. Прочитав эту главу я не только убедился в этих преимуществах, но и завёл себе аккаунт на NotebookCloud*, который, мне кажется, поможет мне в моей преподавательской деятельности.
Следующая глава объясняет основы Numpy, затем идёт введение в библиотеку pandas. После чего идёт углубление в тему, сопровождаемое обильными примерами: очистка данных, различные важные изменения, создание графиков и визуализации, агрегация данных и группировка, временные ряды и финансовые приложения.
Последняя глава углубляет наши познания в Numpy и позволяет нам заглянуть под капот, чтобы помочь нам выжать максимум из этого пакета и понять, как лучше использовать доступные возможности. Приложение “Python Language Essentials” - хорошее введение в язык, что даст даже неопытным пользователям Python понять все приводимые примеры.
Книжка написана ясно, с большим количеством примеров и обсуждений. Для тех, кто хочет посмотреть на код - кода тут достаточно. Почти на каждой странице есть код на Python (а там, где его нет - скорее всего приводится результат выполнения кода с предыдущей страницы).
Wes McKinney принял решение сосредоточиться на Python 2.7, который используется большей частью научного и аналитического сообщества. Качественные текст и последние новости (что matplotlib** уже портирован на Python 3) облегчит переход на Python 3 в ближайшем будущем.
Если Вы хотите понять, как использовать Python в качестве аналитического инструмента - я крайне рекомендую эту книгу.

* Amazon Web Services account требуется для использования этого сервиса и он же будет использован для оплаты ваших вычислений
** То есть "Scientific tool chain" теперь доступен для Python 3

вторник, 13 ноября 2012 г.

Релиз: "Menno's Musings": IMAPClient 0.9.1 (Перевод)


Вышел IMAPClient 0.9.1! В этом релизе:
  • Поддержка OAUTH2: OAUTH v1 всё ещё поддерживается Gmail но уже не рекомендуется. Поэтому особая благодарность Zac Witte за реализацию поддержки версии 2.
  • Поддержка потоков: теперь возможно запустить IMAPClient как внешнюю команду для работы с IMAP сервером. Это полезно для экзотических соединений или настроек аутентификации. За это надо благодарить Dave Eckhardt.
  • обновлен livetest для работы с тем, как Gmail теперь обрабатывает новые сообщения.
Смотрите файл NEWS и руководство в поисках больших подробностей.
Как и раньше, IMAPClient может быть установлен из PyPI (pip install imapclient) или загружен с сайта IMAPClient..

понедельник, 12 ноября 2012 г.

Документация South - Перевод. Часть 3: Дополнительные команды и миграция данных

Последовательная работа с миграцией

Иногда Вы можете обнаружить, что изменения в модели требуют некоторых улучшений. Предположим, Вы определили модель:

 class Group(models.Model):
     name = models.TextField(verbose_name="Name")
     facebook_page__id = models.CharField(max_length=255)


и вы создали и применили миграцию:

 ./manage.py schemamigration southtut --auto
 ./manage.py migrate southtut

вторник, 6 ноября 2012 г.

Документация South - Перевод. Часть 2. Более сложные изменения схемы

Теперь, когда мы знаем как обслуживать простые изменения модели, давайте посмотрим на более сложные случаи, которые Вы так же можете обработать при помощи South.

Значение по умолчанию

Во-первых, давайте займёмся более хитрыми типами колонок. В прошлой части мы добавили BooleanField в таблицу - такую операцию БД легко обработать, так как у него есть значение по умолчанию (False). Это значение и будет установлено для всех уже имеющихся записей в БД.
Однако для некоторых колонок нет предопределённого значения по умолчанию. Если в колонке может присутствовать значение null, то есть null = True, тогда уже существующие записи получат значение null. В противном же случае, если колонка NOT NULL (null = False, свойство колонки по умолчанию), то в таком случае нет значения, которое БД могла бы присвоить уже имеющимся записям, так что Вы не сможете просто добавить колонку (однако, некоторые БД могут позволить Вам добавить колонку в пустую таблицу).
Если South обнаружит такую ситуацию, он тут же спросит у Вас что делать. Давайте посмотрим на это.

воскресенье, 4 ноября 2012 г.

Документация South - Перевод. Часть 1: Основы

Добро пожаловать в руководство. Тут мы постараемся рассказать об основах использования South и дать несколько общих советов как ещё его можно использовать.
Если Вы никогда не слышали о библиотеках для миграции, тогда сперва прочитайте раздел "что такое миграция". Это поможет Вам лучше понять для чего предназначены South и его альтернативы, такие как django-evolution.
В этом руководстве мы предполагаем, что South у Вас уже установлен и настроен, иначе смотрите раздел "установка".

Приступаем

В этом руководстве мы рассмотрим процесс миграции на новое приложение. Вопросы изменения схемы существующего приложения мы рассмотрим позже.

суббота, 3 ноября 2012 г.

Как создать генератор номера счёта? (Перевод)

Требования к генератору:
  1. Выдача псевдо-случайных последовательных номеров (уникальных для десятков миллионов записей)
  2. Простая проверка корректности (без обращения к БД)
Мы будем использовать сеть Фейстеля для создания псевдо-случайных чисел (только положительных) из последовательных чисел (т.е. возвращаемых при помощи nextval() для posgresql sequence). Этот алгоритм принимает базис для функции `make_feistel_number`, доступной в пакете wheezy.core.

Передача аргументов с неверным идентификатором (Перевод)


Я получил запрос на улучшение для hgapi, указывающий, что не возможно фильтровать логи Mercurial используя API, так как специального метода для этого нет, а запасной способ - указание именованных аргументов для дальнейшей передачи их в командную строку - не работает. Сам метод такой:
def hg_log(self, identifier=None, limit=None,
           template=None, branch=None, **kwargs):
где kwargs принимает ключи для передачи их командной строке. Таким образом, если мы хотим получить лог для ветки, то использование вызова
repo.hg_log(-b=mybranch)
должно бы сработать, пока Вы не заметите, что  '-b' некорректный идентификатор, так что код просто не будет работать. Но ведь почти все опции для работы с Mercurial, которые Вы можете захотеть передать, начинаются с -, так какой тогда смысл использовать kwargs вообще?
Примечание: То, что приведено дальше - плохой подход к коду!
И всё же возможно передать аргументы в функцию при помощи некорректного идентификатор, используя распаковку аргументов. Если взять функцию:
>>> def myfunc(positional, kwarg='Hello', **kwargs):
>>>     print(positional)
>>>     print(kwarg)
>>>     for key in kwargs:
>>>         print("%s: %s" % (key, kwargs[key]))
Вы можете передать любой словарь типа:
>>> myfunc(1, **{'-1-': 'dash-one-dash'})
1
Hello
-1-: dash-one-dash
Это, конечно, кривоватый способ, но он может быть полезен, например, в качестве запасного метода для поддержки аргументов, которые могут появиться в будущем, непонятных аргументов и вообще всего, что угодно.
(hgapi 1.3.1a3 был только что загружен на cheeseshop; hg_log теперь принимает аргумент 'branch')

Источник

Обновление статуса Py3k №7 (Перевод)


Это уже седьмое обновление статуса работы над py3k branch, что стало возможным благодаря людям, пожертвовавшим на развитие py3k.
Главная новость на данный момент в том, что Philip начал работать над py3k параллельно с Antonio. Соответственно, резко возросло количество проделанной работы.
Бот сборки теперь каждую ночь собирает новую версию и запускает тесты стандартной библиотеки Python. На данный момент мы проходим 160 тестов приблизительно 355 модулей CPython, проваливает 144 и пропускает около 51.

Релиз Pillow 1-7-8 (Перевод)


Pillow - "дружественный" форк PIL. Сперва это был лишь форк пакета, теперь он содержит исправления ошибок кода для изображений и поддержку Python 3. Чтобы сделать его дружелюбным мы отслеживаем все пожелания к PIL.

четверг, 1 ноября 2012 г.

Документация South - Перевод. Установка

Текущий релиз South - 0.7.6. Но документация написана для 0.7.5, так что имейте это ввиду.
Есть несколько способов установить South:

  • Используя easy_install или pip, что рекомендуется, если Вы хотите получить стабильный релиз
  • Используя Mercurial, что рекомендуется если Вы хотите получить самый последний релиз
  • Скачав архив, если у Вас нет ни easy_install, ни Mercurial
Некоторые дистрибутивы Linux (и UNIX, например, FreeBSD - прим. переводчика) уже содержат South в их репозитории, например, если Вы используете не стабильный Debian, то Вы можете использовать команду apt-get install python-django-south, а на Fedora - yum install Django-south. Обратите внимание, что таким образом Вы можете получить старую версию, так что проверьте сначала номер версии в репозитории.
South <=0.7.3 должен работать с версиями Django от 0.97-pre до 1.1
South >=0.7.4 должен работать с версиями Django начиная от версии 1.2
Пожалуйста, проверьте совместимость с вашей версией в заметках о релизе, чтобы быть в курсе последних изменений.

Документация South - Перевод. Что такое миграция?

Для непосвящённых: миграция (migrations), так же известная как 'schema evolution' или 'mutations' - это способ изменения схемы вашей БД с одной версии на другую. Django сам по себе может лишь добавлять новые модели, но почти во всех проектах часто происходят изменения самой модели - добавляются поля, изменятся свойства полей, и т.д.
South, и другие аналогичные решения, предоставляет способ обойти эту проблему, давая Вам инструмент для лёгкого и предсказуемого изменения схемы вашей БД. Вы пишете миграцию, которая говорит South как перейти с одной версии на другую, и, связывая эти миграции в цепочку, Вы можете двигаться вперёд или назад по истории изменений схемы вашей БД. 
В South, миграция это так же способ создания БД - первая миграция на самом деле миграция из пустой схемы к вашей схеме. Таким образом Вы можете как воссоздать самую последнюю версию схемы БД, так и проапгрейдить любую из устаревших, просто запустив миграцию с определённой точки. 
В процессе этого руководства мы покажем Вам как миграция работает и как она может быть полезна на разных примерах.


Документация South - Перевод. Про South



South привносит миграцию в приложения на Django. Его главная цель - предоставить простой, стабильный и независящий от БД слой миграции чтобы избавить Вас от хлопот по обслуживанию изменений схемы БД в ваших приложениях.