среда, 16 декабря 2015 г.

decoder jpeg not available (вариант encoder libtiff not available)

доставить библиотеки
yum install libjpeg-devel
yum install freetype-devel
yum install libpng-devel

также может требоваться конкретная версия либы
yum install libjpeg-devel zlib1g-devel libpng12-devel

sudo aptitude install libjpeg62 libjpeg62-dev zlib1g-dev
sudo apt-get install libjpeg8-dev

в особо запущенных случаях
sudo ln -s /usr/lib/x86_64-linux-gnu/libjpeg.so /usr/lib

pip uninstall pil
pip install pillow

если уже стояло
# reinstall pillow
pip install --no-cache-dir -I pillow

SQLAlchemy Custom Types

http://docs.sqlalchemy.org/en/latest/core/custom_types.html
http://docs.sqlalchemy.org/en/latest/orm/composites.html

Допустим, есть у нас задача - на лету переводить столбец uuid в unhex-представление.
class HashColumn(VARBINARY):
  def bind_expression(self, bindvalue):
  #bindvalue = type_coerce(bindvalue, Binary)
  return func.unhex(func.replace(bindvalue, '-', ''))

  def column_expression(self, col):
    return func.lower(func.hex(col))

def select(table_name):
  table = Table(table_name, self.metadata, Column("uuid", HashColumn(20)), autoload=True, extend_existing=True)
  select = table.select()
  ...
Казалось бы, тут был бы логичнее TypeDecorator, но..

<Elmer> oh yeah that TypeDecorator doesn't work because the process_bind_param and process_result_value methods should be Python code, func.hex/func.unhex create SQL function calls

Правильно создаём table и получаем автоматом преобразование.

http://stackoverflow.com/questions/33923914/python-sqlalchemy-binary-column-type-hex-and-unhex/33925980#33925980
http://stackoverflow.com/questions/34039039/python-sqlalchemy-binary-column-type-hex-and-unhex-with-autoloaded-table

вторник, 8 декабря 2015 г.

python: inline картинки

Суть:

msgRoot = MIMEMultipart('related')
html = """\
    <p>This is an inline image<br/>
        <img src="cid:image1">
    </p>
"""
msgHtml = MIMEText(html, 'html')

Подробнее:

пятница, 4 декабря 2015 г.

InsecureRequestWarning: Unverified HTTPS request is being made.

При использовании requests, даже когда выставляем verify=False, в логи может сыпать варнингами
InsecureRequestWarning: Unverified HTTPS request is being made.

Как отключить этот crap:
https://urllib3.readthedocs.org/en/latest/security.html#disabling-warnings

в случае прямого использования urllib3
import urllib3
urllib3.disable_warnings()

В случае requests
import requests.packages.urllib3 as urllib3
urllib3.disable_warnings()

четверг, 3 декабря 2015 г.

python+mysql

во 2 питоне есть MySQLdb, в 3 его нет. Самая простая замена:
import pymysql
pymysql.install_as_MySQLdb()

Более полный список вариантов

вторник, 11 августа 2015 г.

Делаем цветной вывод логов

Самый простой вариант -- используя цветовые коды и print
print u"\x1b[31;40mЧто-то красное на чёрном\x1b[0m"

Но использовать такую конструкцию очень сложно, особенно если цветовых вариантов больше одного. Да и замена цвета будет той ещё головной болью...
Можно составить "карту" цветов и использовать в виде переменных (или подключить colorama), но это очень неудобно. Примеры в комментах. Или.
Особенно, когда нужно несколько цветов по разным уровням ошибки, и появляется обёртка вида
def mylog-red-black(string):
    print u"\x1b[31;40m%s\x1b[0m" % (string,)
....

понедельник, 8 июня 2015 г.

python: замеряем время выполнения блока

time.time

Очень простой и вполне рабочий метод на базе time, работает даже во 2 питоне (в 3 есть ещё несколько функций в модуле, с бОльшей точностью)