среда, 17 апреля 2019 г.

Пример проверки пользователя в LDAP

import  ldap
c = ldap.initialize("ldap://ldap.loc")
# Fix for MS AD
# https://www.python-ldap.org/en/latest/faq.html
c.set_option(ldap.OPT_REFERRALS, 0)
# Сначала получаем данные юзера от админа
c.bind_s('admin', 'admin_pass')
res = c.search_s('dc=ldap,dc=loc', ldap.SCOPE_SUBTREE, "SAMAccountName=USER",['objectclass'], 1)
new_cred = res[0][0]
# Теперь пробуем подключиться как нужный юзер
c.bind_s(new_cred, 'user_pass')
print "OK"

вторник, 30 января 2018 г.

python+yaml

yum install python-pip
pip install pyyaml


down vote
accepted
#!/usr/bin/env python

import yaml

with open("example.yaml", 'r') as stream:
    try:
        print(yaml.load(stream))
    except yaml.YAMLError as exc:
        print(exc)


Или вообще так
Dict = yaml.load(open('filename'))

Хотя он только yaml 1.1, и
Do not use PyYAML, it is long dead, use ruamel.yaml.
from ruamel import yaml

понедельник, 3 июля 2017 г.

json in bash

https://stackoverflow.com/questions/1955505/parsing-json-with-unix-tools

1) jq
curl -s 'https://api.github.com/users/lambda' | jq -r '.name'

2) python
Python 2:
export PYTHONIOENCODING=utf8
curl -s 'https://api.github.com/users/lambda' | \
    python -c "import sys, json; print json.load(sys.stdin)['name']"
Python 3:
curl -s 'https://api.github.com/users/lambda' | \
    python3 -c "import sys, json; print(json.load(sys.stdin)['name'])"

пятница, 19 августа 2016 г.

python: ошибка SyntaxError: invalid token у rpmbuild

Для питона достаточно бесполезный функционал компилирования иногда ломает сборку пакета. Фикс - в spec файл в начало добавляем
%global _python_bytecompile_errors_terminate_build 0

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

формирование tiff файла в ImageMagick

У tiff для отправки через факс есть ряд требований, искать RFC про TIFF-F.
Пример конвертации в ImageMagick
convert -density 204x196 -units PixelsPerInch -resize 1728x -monochrome -compress Fax IN OUT
где IN и OUT - входной и выходной файлы.
Также можно задать photometric interpretation:
        -define quantum:polarity=min-is-black
        -define quantum:polarity=min-is-white

density может меняться, варианты смотреть в RFC (начинать с 2306), вероятно можно задать и просто -density 204 (но что тогда будет со вторым значением?)

Вообще хорошо взять пришедший тифф за основу и через identify сравнивать, что получается у нас и в готовом файле, при этом крайне желательно иметь оригинал факс-файла и конвертировать его же.

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

python mailers

Совсем простой вариант - через email
https://docs.python.org/2/library/email-examples.html

Можно взять небольшую обёртку mailer, но размер кода оно сильно не уменьшит, а зависимость добавит.

Ими легко слать через системный почтовик и системные очереди. Если требуется подключаться к тому же gmail - код несколько усложняется - добавляются шаги авторизации, starttls итд, и тогда добавляется библиотека smtplib (или всякие yagmail)

Когда требуется поддержка юникода, добавляется она не сложно, только надо помнить что некоторые заголовки типа Subject, From, To требуют особого кодирования, недопустимо просто писать юникод-строку, так делают только быдлокодеры. Должно быть так:
from email.header import Header
msg = MIMEMultipart()
msg['Subject'] = "%s" % Header(subject, 'utf-8') - вообще тут надо отделить имя от адреса и преобразовать только имя, или наоборот склеивать преобразованное имя с адресом. Под рукой нет готового примера. При этом итоговый вариант будет таким:
From: =?UTF-8?B?0J0J0J0J0J0J=?= <mail@mail.me>

С текстом проще
msg.attach(MIMEText(text, 'plain', "UTF-8"))
msg.attach(MIMEText(html, 'html', 'UTF-8'))


Если используются фреймворки типа flask, там обычно есть свои обёртки/реализации, тот же flask-mailer
Также есть пакеты для более массовой рассылки, на базе шаблонов, тот же pymassmailer