Tag Archives: tidy

Я и Python, или…

Наверно никому не секрет, что я интересуюсь Python, этим прекрасным, динамическим объектно-ориентированным языком программирования.

Первый раз я его попробовал довольно давно. И меня до сих пор “колбасит” от правил табуляции кода. Тогда мне показалось это ужасным, а теперь уже привык.

Несколько недель назад я собрал интерфейс на TkInter, использующий threading для закачивания файла при помощи XML-RPC на один сервер. Уникальность работы была в том, что файл перед загрузкой бился на часто по 1,5 Мб, что-бы не изменять настройки сервера (максимальный размер операции POST на сервере ограничен). На сервере, по мере поступления частей, файл собирался. Во время испытаний всё работало отлично даже через reverse-proxy на Apache 2.2.

Правда, при работе с Python и его библиотекой md5 или hashlib я был удивлён, что нет отдельной функции для работы с большими файлами. Конечно я встал на грабли с чтением всего файла в переменную, причём с современными компьютерами данная операция проходит отлично (изза кол-ва оперативной памяти) и вылезла когда я уже начал тестировать на старенькой машинке.

Python Imaging Library (PIL) приятно удивил. Это был запасной план. Значит задача была: согласно определённым правилам, забирать данные о товарах с картинками с определённого сайта, картинкам изменять размер и ложить это всё в базу (данные и связь с картинкой) и на диск (саму картинку, в базе ей делать нечего), причём всё это было написано на Zend Framewrok и должно было работать “демоном” на CentOS 5.1, но переставало после часа работы, скушав всю оперативную память. Не то tidy порол, не то SimpleXML, а может всё вместе: там было PHP 5.1.6. За пару выходных в спокойном режиме, дома, я собрал на Python модель, выполняющую всё тоже, что и выше описанный скрипт на PHP (зацепил меня Python). Но, потом, с утра, на работе, я сам, из исходников собрал PHP 5.2.6 и утечка памяти испарилась.

А вот MySQLdb у Python меня не радует. Нет, я ничего не имею против написания запросов руками. Но вот передавать параметры через %s или %d, при этом динамически формируя запрос, не очень как-то получается.

µTidylib – TidyLib Python wrapper, ведёт себя абсолютно как оригинальный HTML Tidy, что на этих выходных меня озадачило. Он нагло отказался превратить в валидный xHTML одину страницу сайтов (это было http://www.delfi.lt/, содержащее 706 ошибок в данный момент времени), причём tidy, входящий в PHP 5.2.6 это делает. Вобщем, плохо думать о вещах со стороны PHP.

Опробовал я и Django 0.96. Правда я пока сомневаюсь, что он for perfectionists with deadlines. Как-то пока тяжело мне понять его логику. На платформе одной известной компании он устанавливается только после бубна, на нормальных платформах намного быстрее. Автоматический генерируемый админ не сильно удобный, особенно если у вас в базе скажем 5000 записей и они соединены с другим объектом в режиме ManyToMany. Пока мне остро не хватает документации и, конечно, опыта использования. И язык шаблонов, хочется большего. Конечно, местами присутствующая простота очень радует.

Ах, да, камень надо бросить в огород создателей Python за httplib — HTTP protocol client. Он не способен нормально передать при помощи POST или PUT большой файл на сервер, не загружая его целиком в память и загонять в переменную. Пришлось самому писать “костыль”, способный параметры принимать как dictionary и проверять, строка это или объект типа file, и, если это file, посылать его прямо в stream. Надо будет его как следует оттестировать и выложить в публичный доступ.

Ну и о предстоящем EuroPython 2008, который пройдёт с 7 по 9 июля в Вильнюсе. Организаторы подтвердили моё участие в конференции, так что я буду среди слушателей. Теперь осталось выбрать, куда я пойду, так как программа очень насыщенная.