| Django + mod_auth_ntlm_winbind + LDAP(?) |
[30 Apr 2013|10:45pm] |
Всем привет.
Есть связка Django & WSGI с прикрученным mod_auth_ntlm_winbind в качестве auth-бекенда. Успешно работает SSO и при первом заходе автоматически создаются юзеры через request.get.META['REMOTE_USER']
Но хочется большего, типа управления правами и группами (как в http://pythonhosted.org/django-auth-ldap/, например).
Вопрос: кто-нибудь с подобным уже заморачивался?
|
|
| Кодировки и прочее. urllib. |
[18 Mar 2013|11:19am] |
Коллеги, добрый день.
Когда-то гражданин Сугубый написал пост про внутренние кодировки питона, который я до сих пор использую как подсказку: http://wadimsha.livejournal.com/5354.html Тут более-менее всё понятно, если дополнительно учесть, что кодировка консоли может отличаться от кодировки например, файла, куда я делаю write.
Но сейчас я встретился с другой проблемой. >>> import urllib >>> urllib.urlencode({'name':'Василий'}) 'name=%C2%E0%F1%E8%EB%E8%E9' >>> urllib.urlencode({'name':'Пупкин'}) 'name=%CF%F3%EF%EA%E8%ED' Это мне понятно, я предполагаю, что так должно быть.
Однако, при тестировании сайта я встретился с тем, что при общении с сервером имя уходит вот в таком виде: %D0%B0%C2%92%D0%B0%C2%90%D0%B0%D0%81%D0%B0%C2%98%D0%B0%C2%9B%D0%B0%C2%98%D0%B0%C2%99 (Василий) %D0%B0%C2%9F%D0%B0%D0%83%D0%B0%C2%9F%D0%B0%C2%9A%D0%B0%C2%98%D0%B0%C2%9D (Пупкин)
и в дебаге яваскрипт-алёрт показывает "ааЃаааа аааЁаааа".
Как это распарсить в питоне? Что за кодировка, как её определить? >>> print urllib.unquote('%D0%B0%C2%92%D0%B0%C2%90%D0%B0%D0%81%D0%B0%C2%98%D0%B0%C2%9B%D0%B0%C2%98%D0%B0%C2%99') аааЁаааа
|
|
| Python Developer (Минск) |
[15 Mar 2013|05:26pm] |
МИНСК Очень хочется поработать вместе с активными, мыслящими единомышленниками.
С людьми, имеющими: * богатый опыт разработки программного обеспечения для Web (например, на Ruby, Perl, JavaScript, Php) * страстное желание освоить или усовершенствовать знания Python. Писать будем на Python! * желание развивать большой высоконагруженный проект, освоить современные технологии и подходы к работе с большими нагрузками * привычку работать на результат и отвечать за свой код ( Подробности...Collapse )
Присоединяйтесь к команде сильных специалистов ;)
|
|
| посоветуйте практичный pylint |
[28 Feb 2013|11:43pm] |
Добрались руки до настройки подсветки предупреждений в vim
Плагин syntastic предлагает на выбор pyflakes, pylint, flake8
Подскажите, какой лучше всего в смысле обнаружения багов (не обязательно из этого списка). Какой линтер делает упор именно на качественное обнаружение ошибок (поменьше false positive и побольше true positive), а не на стиль программирования?
Какие линтеры могут осмысленно проверять файл в отрыве от проекта и других модулей, а какие имеют возможность настроить "проект" с python path и проверять правильность взаимосвязей модулей? Так же желательна легкая возможность игнорить warnings для файла целиком или для конкретной строчки исходника.
Я пару лет назад работал с плагином для IDEA (который из IDEA делает PyCharm в подсветке опечаток), мне понравилось, любопытно можно ли сделать так же хорошо в vim (я наверное смогу подключить любой адекватный и быстрый lint-ер, так что то что это vim - не очень важно).
----- Попробовал pylint, вроде ok, после игнора наиболее назойливых предупреждений выдает всякие полезняшки "переменная есть, но не используется", "переменная не определена", "у вас спейсы с табами смешаны" и тд, можно игнорировать предупреждения для конкретной строчки
Сравнение таки интересно.
|
|
| починить кодировки в библиотеке - как? |
[13 Feb 2013|03:47am] |
всем привет, такой вопрос при запуске вот этого скрипта http://pygtalkrobot.googlecode.com/svn/trunk/pygtalkrobot/src/sampleRobot.py мой бот подключается на секунду, а потом отваливается с ошибкой: File "/opt/mybot/PyGtalkRobot.py", line 209, in start self.GoOn() File "/opt/mybot/PyGtalkRobot.py", line 170, in GoOn while self.StepOn(): pass File "/opt/mybot/PyGtalkRobot.py", line 164, in StepOn self.conn.Process(1) File "build/bdist.linux-mips/egg/xmpp/dispatcher.py", line 303, in dispatch File "/opt/mybot/PyGtalkRobot.py", line 156, in presenceHandler print presence.getFrom(), ",", presence.getFrom().getResource(), ",", presence.getType(), ",", presence.getStatus(), ",", presence.getShow() UnicodeEncodeError: 'ascii' codec can't encode characters in position 0-3: ordinal not in range(128)
допер, что ошибка вылезает в том случае, если в контактах у бота есть собеседники, чей статус написан кирилицей. я полный ноль в питоне - смогу я починить эту ошибку, или нет смысла ковыряться и проще попробовать поискать другую библиотеку?
|
|
| RawQuerySet в Django |
[08 Jan 2013|01:30pm] |
1. В Django при выполнении raw SQL-запроса (queryset=Модель.objects.raw('SELECT ...') вместо обычного QuerySet возвращается RawQuerySet.
При попытке использования его в шаблоне обнаружились странные грабли: если набор непустой, то итерации по нему успешно работают, данные извлекаются, всё как задумано. А вот если пустой... то типичная проверка {% if queryset %} срабатывает, хотя по идее не должна. Но итерации по пустому набору, естественно, не выполняются ни разу. Что ещё интереснее, {% queryset|length %} печатает не 0, как ожидалось, а пустую строку.
Это какой-то известный баг, или я наступил на неизведанные грабли?
2. Для обхода этой вредности пришлось в программе вручную проверять размер возвращаемого набора, и если он 0, то передавать в шаблон сообщение об ошибке, а в шаблоне проверять на непустоту не сам набор, а это сообщение. Проверка выглядит так: if len(list(queryset)): ... Для пустых наборов оно работает, а для непустых обнаружилось, что запрос к базе выполняется два раза. Я так понимаю, первый раз при преобразовании набора в список в этой проверке, второй - при итерациях по набору в шаблоне.
Некоторая логика в повторном выполнении запроса при каждом цикле итераций по его результатам есть, но я не встретил в документации описания этой фичи. Это действительно так задумано? Для обычных QuerySet оно так же? И как избежать повторного выполнения запросов, если по результатам надо пройтись больше одного раза? Достаточно ли будет, например, преобразовать его в список посредством list()?
|
|
| time zone |
[05 Dec 2012|03:56pm] |
Хочу разобраться как работают с таймзонами в python.
Команда date "+%Y-%m-%d_%H-%M-%S_%z" выводит правильное локальное время и правильную таймзону: 2012-12-05_19-57-37_+0400
Если использовать python -c 'import datetime, time ; date_time = datetime.datetime.now() ; print date_time.strftime("%Y-%m-%d_%H-%M-%S_%z")' то печатается пустая строка вместо %z. 2012-12-05_15-59-58_
Как портируемым образом отформатировать объект datetime как локальное время с таймзоной? Или придётся отказаться от datetime в пользу модуля time? В time тоже не всё впорядке - time.strftime('%Y-%m-%d_%H-%M-%S_%z', time.localtime()) пишет время в GMT, не местное, и почему-то вместо числового смещения - название зоны: '2012-12-05_16-04-23_Eur'
У меня голова кругом, кажется в области работы с timezone питон не питон :/
upd: наверное проще всего взять таймзону из time.timezone или вычислить как t = time(); int(mktime(localtime(t)) - mktime(gmtime(t)))
|
|
| Алло! Мы ищем таланты: веб-программиста и ведущего веб-разработчика в Москве |
[27 Nov 2012|06:53pm] |
Наша студия цифрового маркетинга ищет новых друзей на полный рабочий день.
Первый - веб-программист, в возрасте от 23 до 32 лет который знает и умеет:- программировать клиентские приложения,
- верстать страницы, интегрировать их с серверной частью и оптимизировать то, что было реализовано ранее
- магию HTML5, CSS3, AJAX и Python 2.x
- немного работать c Photoshop ( нарезка и оптимизация макета)
- что такое PostgreSQL, Flask и SQLAlchemy
Второй - ведущий веб-разработчик до 32 лет для разработки веб-приложений, который знает и умеет:- проектировать веб-приложения и программировать их серверную часть.
- оптимизировать быстродействие и выявлять критические точки в работе тех самых веб-приложений и оптимизировать код реализованных ранее проектов
- Python 2.x на уровне суперспособностей
- PostgreSQL и мастер оптимизации SQL запросов
- ООП, классические алгоритмы и структуры данных
(Хотя ты же много раз проектировал высоконагруженные системы и незачем тебе все это рассказывать.)
И будет отлично, если об этом вы умеете читать на английском и понимать прочитанное.
А уж если вы самостоятельны, организованы, умеете играть в команде и у вас все в порядке с чувством юмора - то это просто праздник какой-то.
А вот что предлагаем мы нашим потенциальным друзьям: деньги, которые растут; уютный офис в ЦАО, в котором обстановка - как дома у друзей, где утро начинается в 11-12 дня. Коллектив, который всегда поддержит, поймет и поможет, если что-то случилось. Научит, если не умеешь, расскажет, если не знаешь и услышии, если скажешь. А еще у нас гора печенья, вкусный кофе и чай, и, время от времени, шумные пятницы всем составом. Для работы предлагаем макинтош, Windows или Linux на выбор.
Чтобы связаться с нами - используй личные сообщения. Мы там все обсудим и обо всем договоримся!
|
|
| suds и cookies |
[09 Oct 2012|11:38am] |
Коллеги, подскажите. Чего-то не как не могу разобраться, как используя suds получить куку, которую сервер присылает в ответ на вызов метода авторизации. Куку надо сохранить, и посылать при дальнейшем вызове методов. Вот кусок лога. client = suds.client.Client(url, location=loc, timeout=10) login = client.service.Login(**d) print client.options.transport.cookiejar
Отдает пустышку.
[ Error: Irreparable invalid markup ('<cookielib.cookiejar[]>') in entry. Owner must fix manually. Raw contents below.] Коллеги, подскажите. Чего-то не как не могу разобраться, как используя suds получить куку, которую сервер присылает в ответ на вызов метода авторизации. Куку надо сохранить, и посылать при дальнейшем вызове методов. Вот кусок лога. client = suds.client.Client(url, location=loc, timeout=10) login = client.service.Login(**d) print client.options.transport.cookiejar
Отдает пустышку. <cookielib.CookieJar[]>
Хотя в хедерах отдача куки есть. HEADERS: {'set-cookie': 'lbsvsrv=7c3258b56dfcdbdc8fc4b05a46...
|
|
| Python 3.3 |
[29 Sep 2012|10:37pm] |
|
Всех питонистов поздравляю с выходом новой версии Питона — лучшей из когда-либо выпущенных! Если вы всё ещё сидите на второй версии, самое время подумать о переходе на третью, — с Питоном 3.3 переход упростится и в новой версии появилось много очень вкусных вещей. Их так много, что трудно выделить несколько самых важных, — каждый найдёт для себя киллер-фичи. В общем, читайте whatsnew (впрочем, он не полон, обращайте также внимание на метки «New in version 3.3» и «Changed in version 3.3» в документации).
|
|
| Интерактивный курс. |
[29 Aug 2012|12:59am] |
Да не сочтут участники и смотрители этого сообщества сей пост рекламой. Впрочем, если он покажется таковым - можете смело его удалять.
Существует такой интересный англоязычный портал Coursera, на котором несколько британских и американских преподавателей организуют бесплатные онлайн курсы для всех желающих (на английском языке, естественно).
15 октября стартует интересный курс "An Introduction to Interactive Programming in Python". Собственно, ссылка: https://www.coursera.org/course/interactivepython
Курс подойдет тем, кто еще не знаком с Python, да и, наверное, поможет тем, кто уже что-то умеет, но хочет расширить свои познания и попрактиковаться.
Я записался, жду курса. Вы со мной?
|
|
| Вычисление экспоненты натуральными методами |
[12 Sep 2012|07:13pm] |
Почему эта программа вычисляет число, которое меньше экспоненты натуральной базы почти на полтора порядка?
#!/usr/bin/python
import sys
def test(x,y):
y[0]+=1
try:
try:
return test(x ^ 0x5f3759df,y)
finally:
return test(x>>1,y)
finally:
return test(x & 0x5f3759df,y )
DEPTH=12
sys.setrecursionlimit(DEPTH)
answer=[0]
try:
print test(0x5f3759df,answer)
except:
print answer[0]
|
|
| Нужна помощь коллективного разума |
[09 Sep 2012|03:27pm] |
Есть некий скрипт, который собирает инфу о системе из /proc/stat, /proc/net/dev etc. и выдает данные в процентах. Так как счетчики нужно сравнивать между запусками, то время работы, как минимум, чуть больше секунды.
Пример запуска:
root@dev:~# time python test.py {'mem': 13, 'net': [0, 0], 'cpu': 1} real 0m1.187s user 0m0.132s sys 0m0.040s Для визуализации есть html-страница c гугловским gauge chart, ктоторый посредством setInterval(update, 1000) должен обновлять график. На этом, в принципе, можно было и остановиться, но хочется следующего. Сделать из скрипта демон, который бы слушал на определенном порту и выдавал данные. Но как разумнее это сделать, чтобы ответ был как бы моментальным? Как работает сейчас: root@dev:~# python jsonserver.py 127.0.0.1:1337 Listening for incoming connections on 127.0.0.1:1337... root@dev:~# time python jsonclient.py 127.0.0.1:1337 {'mem': 13, 'net': [0, 0], 'cpu': 2} real 0m1.183s user 0m0.128s sys 0m0.036s Как хотелось бы: root@dev:~# time python jsonclient.py 127.0.0.1:1337 {'mem': 13, 'net': [0, 0], 'cpu': 2} real 0m0.183s user 0m0.128s sys 0m0.036s
|
|
| wsgi + pypy |
[28 Aug 2012|05:40am] |
|
Доброе утро! Кто-нибудь дружил nginx и pypy через wsgi? У меня не один wsgi сервер (uwsgi, gunicorn) не хочет работать с pypy. Третий день мучаюсь!
|
|
| Retry in recursion |
[27 Aug 2012|07:48pm] |
Добрый день, уважаемое сообщество.
Решил поделиться с Вами своим "велосипедным" открытием и, в то же время, уточнить, насколько это безопасно, логично и рационаьно.
Суть задачи: имеется цикл, в теле которого происходит какой-либо запрос (пусть будет сетевой), который имеет свойство прерываться в связи с нестабильным соединением. Задача состоит в том, чтобы не прерывая исполнения кода, выполнить любое возможное количество повторных запросов, пока один из них не будет успешным.
Стандартное решение: обычно организуется вложенный цикл, в котором проверяется состояние, либо отлавливаются исключения и в соответствии с результатом запрос зацикливается, либо продолжается нормальное исполнение кода.
Моё решение: вместо организации вложенного цикла, определяется функция, в которой происходит запрос и в ней же проверяется состояние этого запроса. Если состояние неудовлетворительное - функция вызывается рекурсивно.
Пример:
def retrieve(something): data = get_data(something)
if not data: data = retrieve(something)
return data
Любой контроль можно добавить, как и в случае с вложенным циклом. Однако, возвращаясь к моему вопросу, покритикуйте, плох ли этот метод и чем он хуже обычного цикла?
|
|
| navigation |
| [ |
viewing |
| |
most recent entries |
] |
| [ |
go |
| |
earlier |
] |
|
|
|
|