You are viewing ru_python

python по русски [entries|friends|calendar]
Ру_питон

[ userinfo | livejournal userinfo ]
[ calendar | livejournal calendar ]

Django + mod_auth_ntlm_winbind + LDAP(?) [30 Apr 2013|10:45pm]

unixblog
Всем привет.

Есть связка Django & WSGI с прикрученным mod_auth_ntlm_winbind в качестве auth-бекенда.
Успешно работает SSO и при первом заходе автоматически создаются юзеры через request.get.META['REMOTE_USER']

Но хочется большего, типа управления правами и группами (как в http://pythonhosted.org/django-auth-ldap/, например).

Вопрос: кто-нибудь с подобным уже заморачивался?
post comment

Кодировки и прочее. urllib. [18 Mar 2013|11:19am]

gonewizard
Коллеги, добрый день.

Когда-то гражданин Сугубый написал пост про внутренние кодировки питона, который я до сих пор использую как подсказку:
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')
а’ааЁа˜а›а˜а™
22 comments|post comment

Python Developer (Минск) [15 Mar 2013|05:26pm]
mellicenta
МИНСК
Очень хочется поработать вместе с активными, мыслящими единомышленниками.

С людьми, имеющими:
* богатый опыт разработки программного обеспечения для Web (например, на Ruby, Perl, JavaScript, Php)
* страстное желание освоить или усовершенствовать знания Python. Писать будем на Python!
* желание развивать большой высоконагруженный проект, освоить современные технологии и подходы к работе с большими нагрузками
* привычку работать на результат и отвечать за свой код
Подробности...Collapse )

Присоединяйтесь к команде сильных специалистов ;)

Django-Python
4 comments|post comment

посоветуйте практичный pylint [28 Feb 2013|11:43pm]

_winnie
Добрались руки до настройки подсветки предупреждений в vim

Плагин syntastic предлагает на выбор pyflakes, pylint, flake8

Подскажите, какой лучше всего в смысле обнаружения багов (не обязательно из этого списка). Какой линтер делает упор именно на качественное обнаружение ошибок (поменьше false positive и побольше true positive), а не на стиль программирования?

Какие линтеры могут осмысленно проверять файл в отрыве от проекта и других модулей, а какие имеют возможность настроить "проект" с python path и проверять правильность взаимосвязей модулей? Так же желательна легкая возможность игнорить warnings для файла целиком или для конкретной строчки исходника.

Я пару лет назад работал с плагином для IDEA (который из IDEA делает PyCharm в подсветке опечаток), мне понравилось, любопытно можно ли сделать так же хорошо в vim (я наверное смогу подключить любой адекватный и быстрый lint-ер, так что то что это vim - не очень важно).

-----
Попробовал pylint, вроде ok, после игнора наиболее назойливых предупреждений выдает всякие полезняшки "переменная есть, но не используется", "переменная не определена", "у вас спейсы с табами смешаны" и тд, можно игнорировать предупреждения для конкретной строчки

Сравнение таки интересно.
5 comments|post comment

починить кодировки в библиотеке - как? [13 Feb 2013|03:47am]

redddis
всем привет, такой вопрос
при запуске вот этого скрипта
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)

допер, что ошибка вылезает в том случае, если в контактах у бота есть собеседники, чей статус написан кирилицей.
я полный ноль в питоне - смогу я починить эту ошибку, или нет смысла ковыряться и проще попробовать поискать другую библиотеку?
10 comments|post comment

Предневогодняя игра для питонистов [28 Dec 2012|11:27am]

suguby

Вот статью опубликовал  http://habrahabr.ru/post/164229/  Приглашаю поразвлекаться и собрать как можно больше мёду :) Код можно выкладывать здесь, а соревнования самим устраивать :)

С Наступающим!

2 comments|post comment

RawQuerySet в Django [08 Jan 2013|01:30pm]

dil
1. В Django при выполнении raw SQL-запроса (queryset=Модель.objects.raw('SELECT ...') вместо обычного QuerySet возвращается RawQuerySet.

При попытке использования его в шаблоне обнаружились странные грабли: если набор непустой, то итерации по нему успешно работают, данные извлекаются, всё как задумано.
А вот если пустой... то типичная проверка {% if queryset %} срабатывает, хотя по идее не должна. Но итерации по пустому набору, естественно, не выполняются ни разу. Что ещё интереснее, {% queryset|length %} печатает не 0, как ожидалось, а пустую строку.

Это какой-то известный баг, или я наступил на неизведанные грабли?

2. Для обхода этой вредности пришлось в программе вручную проверять размер возвращаемого набора, и если он 0, то передавать в шаблон сообщение об ошибке, а в шаблоне проверять на непустоту не сам набор, а это сообщение. Проверка выглядит так: if len(list(queryset)): ...
Для пустых наборов оно работает, а для непустых обнаружилось, что запрос к базе выполняется два раза. Я так понимаю, первый раз при преобразовании набора в список в этой проверке, второй - при итерациях по набору в шаблоне.

Некоторая логика в повторном выполнении запроса при каждом цикле итераций по его результатам есть, но я не встретил в документации описания этой фичи. Это действительно так задумано?
Для обычных QuerySet оно так же?
И как избежать повторного выполнения запросов, если по результатам надо пройтись больше одного раза? Достаточно ли будет, например, преобразовать его в список посредством list()?
4 comments|post comment

Был взломан wiki.python.org [08 Jan 2013|04:52pm]

phd
http://mail.python.org/pipermail/python-dev/2013-January/123499.html

Если кто ещё не знает — был взломан wiki.python.org. Всем, имеющим там аккаунты рекомендуется сменить пароли.
post comment

Ван Россум переходит из Гугля в Dropbox [08 Dec 2012|02:42pm]

phd
http://developers.slashdot.org/story/12/12/07/2242237/python-creator-guido-van-rossum-leaves-google-for-dropbox

Неожиданно.
3 comments|post comment

time zone [05 Dec 2012|03:56pm]

_winnie
Хочу разобраться как работают с таймзонами в 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)))
12 comments|post comment

Началось поступление в школу программистов hh.ru [20 Sep 2012|05:49pm]

padlik
вступительный тест на сайтике — http://school.hh.ru
Нам нужны питонистэ!
(бан сет?)
4 comments|post comment

Алло! Мы ищем таланты: веб-программиста и ведущего веб-разработчика в Москве [27 Nov 2012|06:53pm]
fevralskij
Наша студия цифрового маркетинга ищет новых друзей на полный рабочий день.

Первый - веб-программист, в возрасте от 23 до 32 лет который знает и умеет:
  • программировать клиентские приложения, 
  • верстать страницы, интегрировать их с серверной частью и оптимизировать то, что было реализовано ранее
  • магию HTML5, CSS3, AJAX и Python 2.x
  • немного работать c Photoshop ( нарезка и оптимизация макета)
  • что такое PostgreSQL, Flask и SQLAlchemy

Второй - ведущий веб-разработчик до 32 лет для разработки веб-приложений, который знает и умеет:
  • проектировать веб-приложения и программировать их серверную часть.
  • оптимизировать быстродействие и выявлять критические точки в работе тех самых веб-приложений и оптимизировать код реализованных ранее проектов
  • Python 2.x на уровне суперспособностей
  • PostgreSQL и мастер оптимизации SQL запросов
  • ООП, классические алгоритмы и структуры данных
      (Хотя ты же много раз проектировал высоконагруженные системы и незачем тебе все это рассказывать.) 

И будет отлично, если об этом вы умеете читать на английском и понимать прочитанное.

А уж если вы самостоятельны, организованы, умеете играть в команде и у вас все в порядке с чувством юмора - то это просто праздник какой-то.

А вот что предлагаем мы нашим потенциальным друзьям: деньги, которые растут; уютный офис в ЦАО, в котором обстановка - как дома у друзей, где утро начинается в 11-12 дня. Коллектив, который всегда поддержит, поймет и поможет, если что-то случилось. Научит, если не умеешь, расскажет, если не знаешь и услышии, если скажешь. 
А еще у нас гора печенья, вкусный кофе и чай, и, время от времени, шумные пятницы всем составом. Для работы предлагаем макинтош, Windows или Linux на выбор.

Чтобы связаться с нами - используй личные сообщения. Мы там все обсудим и обо всем договоримся!
13 comments|post comment

suds и cookies [09 Oct 2012|11:38am]

yurik_hashev
Коллеги, подскажите. Чего-то не как не могу разобраться, как используя 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...
3 comments|post comment

Python 3.3 [29 Sep 2012|10:37pm]

gegmopo4

Всех питонистов поздравляю с выходом новой версии Питона — лучшей из когда-либо выпущенных! Если вы всё ещё сидите на второй версии, самое время подумать о переходе на третью, — с Питоном 3.3 переход упростится и в новой версии появилось много очень вкусных вещей. Их так много, что трудно выделить несколько самых важных, — каждый найдёт для себя киллер-фичи. В общем, читайте whatsnew (впрочем, он не полон, обращайте также внимание на метки «New in version 3.3» и «Changed in version 3.3» в документации).

27 comments|post comment

guestfs-python и запись в файлы внутри виртуалки [13 Sep 2012|06:52pm]

eking_go
Кто-то с ней (libguestfs.org/guestfs-python.3.html) работал?
Код, который не работает...Collapse )
UPD: [SOLVED] Удаляем файл, потом создаем заново:
try :
     g.rm(resolvconffile)
except RuntimeError as msg:
     print "%s (ignored)" % msg
g.write(resolvconffile,resolvconf)
4 comments|post comment

Интерактивный курс. [29 Aug 2012|12:59am]

nothingbutapage
Да не сочтут участники и смотрители этого сообщества сей пост рекламой.
Впрочем, если он покажется таковым - можете смело его удалять.

Существует такой интересный англоязычный портал Coursera, на котором несколько британских и американских преподавателей организуют бесплатные онлайн курсы для всех желающих (на английском языке, естественно).

15 октября стартует интересный курс "An Introduction to Interactive Programming in Python". Собственно, ссылка: https://www.coursera.org/course/interactivepython

Курс подойдет тем, кто еще не знаком с Python, да и, наверное, поможет тем, кто уже что-то умеет, но хочет расширить свои познания и попрактиковаться.

Я записался, жду курса.
Вы со мной? 
4 comments|post comment

Вычисление экспоненты натуральными методами [12 Sep 2012|07:13pm]

amarao_san
Почему эта программа вычисляет число, которое меньше экспоненты натуральной базы почти на полтора порядка?

#!/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]
9 comments|post comment

Нужна помощь коллективного разума [09 Sep 2012|03:27pm]

unixblog
Есть некий скрипт, который собирает инфу о системе из /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

7 comments|post comment

wsgi + pypy [28 Aug 2012|05:40am]

ext_646925
[ mood | working ]

Доброе утро!

Кто-нибудь дружил nginx и pypy через wsgi? У меня не один wsgi сервер (uwsgi, gunicorn) не хочет работать с pypy. Третий день мучаюсь!

4 comments|post comment

Retry in recursion [27 Aug 2012|07:48pm]

jezuz_chrizt
Добрый день, уважаемое сообщество.

Решил поделиться с Вами своим "велосипедным" открытием и, в то же время, уточнить, насколько это безопасно, логично и рационаьно.

Суть задачи: имеется цикл, в теле которого происходит какой-либо запрос (пусть будет сетевой), который имеет свойство прерываться в связи с нестабильным соединением. Задача состоит в том, чтобы не прерывая исполнения кода, выполнить любое возможное количество повторных запросов, пока один из них не будет успешным.

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

Моё решение: вместо организации вложенного цикла, определяется функция, в которой происходит запрос и в ней же проверяется состояние этого запроса. Если состояние неудовлетворительное - функция вызывается рекурсивно.

Пример:

def retrieve(something):
    data = get_data(something)

    if not data:
        data = retrieve(something)

    return data


Любой контроль можно добавить, как и в случае с вложенным циклом.
Однако, возвращаясь к моему вопросу, покритикуйте, плох ли этот метод и чем он хуже обычного цикла?
37 comments|post comment

navigation
[ viewing | most recent entries ]
[ go | earlier ]