Уведомления

Группа в Telegram: @pythonsu

Уведомления

  • Found 3483 posts.

Python для новичков » Teredo » Июнь 2, 2009 22:37:26

Здравствуйте! Интересует протокол Teredo, точнее как его можно использовать в программах на питоне.
Сам знаю мало, прошу сильно не ругать, сталкивался только с IPv4 и мне трудно понять новую идею, хотя и нравится.
Реализацию увидел в Utorrent под вистой. Там данные передаются через teredo, если указать это в опциях. И это показалось мне очень удобным способом, ведь своего постоянного ip-адреса у меня нет.

Если есть примеры реализаций, или другое подобное, но более простое, с нетерпением жду! :)

GUI » wx.MessageBox Не понятна логика.. » Июнь 1, 2009 10:47:20

Всем привет.
Есть код:
# -*- coding: cp1251 -*-
import wx

class Panel(wx.Panel):
def __init__(self, parent, *args, **kwargs):
wx.Panel.__init__(self, parent, *args, **kwargs)
sizer = wx.BoxSizer(wx.VERTICAL)
self.dat = wx.DatePickerCtrl(self, style=wx.DP_DROPDOWN)
sizer.Add(self.dat)
self.SetSizer(sizer)
wx.EVT_DATE_CHANGED(self.dat, self.dat.GetId(), self.DateChanged)
def DateChanged(self, evt):
wx.MessageBox('message text', 'message caption', wx.ICON_ERROR|wx.OK, self)
class MainFrame(wx.Frame):
def __init__(self, parent):
wx.Frame.__init__(self, parent)
self.panel = Panel(self)

class App(wx.App):
def __init__(self):
wx.App.__init__(self)
# wx.App.__init__(self, True, 'log.txt')
frame = MainFrame(None)
frame.Show(True)

if __name__ == "__main__":
app = App()
app.MainLoop()
При попытке изменить дату, выпадает календарь на текущий месяц. В левом и правом уголках этого календаря есть кнопки для прокрутки месяца – месяц назад и месяц вперед соответственно. Но это все стандартно. Так вот, при клике по одной из этих кнопок, событие изменения даты обрабатывается в методе DateChanged и , собственно, в нем вызов MessageBox. Вроде все нормально, никакиз аномалий. Но..когда сообщение закрываешь, нажатая кнопка на каледаре “западает” – месяца начинают переключаться беспрерывно и, также беспрерывно, начинают появляться новые сообщения. Переписал код так:
# -*- coding: cp1251 -*-

import wx

class Panel(wx.Panel):
def __init__(self, parent, *args, **kwargs):
wx.Panel.__init__(self, parent, *args, **kwargs)
sizer = wx.BoxSizer(wx.VERTICAL)
self.dat = wx.DatePickerCtrl(self, style=wx.DP_DROPDOWN)
sizer.Add(self.dat)
self.SetSizer(sizer)
wx.EVT_DATE_CHANGED(self.dat, self.dat.GetId(), self.DateChanged)
def show_mes(self, text):
wx.MessageBox(text,'message caption', wx.ICON_ERROR|wx.OK, self)
def DateChanged(self, evt):
wx.CallAfter(self.show_mes, 'message text')
class MainFrame(wx.Frame):
def __init__(self, parent):
wx.Frame.__init__(self, parent)
self.panel = Panel(self)

class App(wx.App):
def __init__(self):
wx.App.__init__(self)
# wx.App.__init__(self, True, 'log.txt')
frame = MainFrame(None)
frame.Show(True)

if __name__ == "__main__":
app = App()
app.MainLoop()
проблема решилась. Но все таки осталось непонятным, почему вообще появилась такая проблема “зацикливания” события? Проблема в кривых руках или MessageBox извращенным способом играется с какими-то событиями? Кто-нибудь может все по полочкам разложить?

З.Ы. Думал как это лучше объяснить, надеюсь получилось понятно :)

Web » Кто-нибудь использует Pyjamas? » Май 29, 2009 02:55:04

http://pyjs.org/

Здесь он упоминается пару раз мельком, что мол есть такой проект, да заброшен. Но вот смотрю, последний релиз апрельский. Кому-нибудь пригождался?

Python для экспертов » pythonOCC + Qt4 » Май 27, 2009 10:11:12

Всем здравствуйте!
Может ли кто-нибудь помочь готовым примерчиком, как увязать python + OpenCASCADE + Qt4
Собственно заминка в том, чтобы отобразить 3D-сцену каскада на qt-форме

Pyramid / Pylons / TurboGears » i18n и routes » Май 26, 2009 07:28:51

Возникла потребность в i18n и хотелось бы реализовать его в ссылках как это везде принято, т.е. “/locale/*url”. У меня к тому же нужно что бы ссылки были без “/locale” и открывали язык по умолчанию. И по этому я сделал обертку:
def locale(map, *args, **kwargs):
map.connect("/:locale"+args[0],*args[1:],**kwargs)
map.connect(locale='en', *args, **kwargs)
Как можно это реализовать лучше?

GUI » wxPython IEHtmlWindow прокрутка страницы программно » Май 25, 2009 09:06:04

Привет всем.
Появилась некая трудность. Есть экземпляр IEHtmlWindow, в него подгружается html форматированный текст из переменной методом LoadString. Текст может быть очень длинным. Необходимо сразу после загрузки прокрутить весь текст вниз до конца.
Над проблемой размышлял с товарищем – безрезультатно. Пробовали метод SetScrollPos, не работает – ни ошибок, ни результата работы.
Также пробовали ScrollLines и ScrollPages – также неработают…
В итоге в html код вставили javascript, который после загрузки страницы сам ее прокручивает вниз и были счастливы :) Но не долго…
Оказалось, что не на всех машинах включен javascript…Поэтому и прокрутка, сделанная таким образом, несрабатывает.
# -*- coding: cp1251 -*-

import wx
from wx.lib.iewin import IEHtmlWindow

html = """<HTML><TITLE></TITLE><HEAD>
<script language="JavaScript">
function scroll()
{
h = getDocumentHeight();
setscroll(h)
}
function getDocumentHeight()
{
return (document.body.scrollHeight > document.body.offsetHeight)?
document.body.scrollHeight:
document.body.offsetHeight;
}
function setscroll(h)
{
window.scrollTo(0,h);
}
</script>
</HEAD>
<BODY onLoad="scroll();">
<p>Форматированный текст Форматированный текст Форматированный текст
Форматированный текст Форматированный текст Форматированный текст
Форматированный текст Форматированный текст Форматированный текст
Форматированный текст Форматированный текст Форматированный текст
Форматированный текст Форматированный текст Форматированный текст
Форматированный текст Форматированный текст Форматированный текст
Форматированный текст Форматированный текст Форматированный текст
Форматированный текст Форматированный текст Форматированный текст
Форматированный текст Форматированный текст Форматированный текст
Форматированный текст Форматированный текст Форматированный текст
Форматированный текст Форматированный текст Форматированный текст
Форматированный текст Форматированный текст Форматированный текст
Форматированный текст Форматированный текст Форматированный текст
Форматированный текст Форматированный текст Форматированный текст
Форматированный текст Форматированный текст Форматированный текст
Форматированный текст Форматированный текст Форматированный текст
</BODY>
</HTML>"""

class Frame(wx.Frame):
def __init__(self, parent):
wx.Frame.__init__(self, parent)
self.ie = IEHtmlWindow(self)
self.ie.LoadString(html)
# while self.ie.ScrollLines(1):
# pass
class App(wx.App):
def __init__(self):
wx.App.__init__(self, True, 'log.txt')
frame = Frame(None)
self.SetTopWindow(frame)
frame.Show()

if __name__ == "__main__":
app = App()
app.MainLoop()
1. Может кто сталкивался с такими вещами и знает почему не работает и как заставить IEHtmlWindow прокрутить текст?
2. Если 1ый вопрос не решится, то придется насильно включать javascript на клиентских машинах. Править реестр – первое что пришло в голову. Может есть иные методы?

GUI » Стандартные картинки для Toolbar'а » Май 23, 2009 11:59:29

Когда я создаю wx.MenuItem со стандартным идентификтором (например, wx.ID_NEW) она автоматически получает соответствующую иконку, специфичную для платформы, на которой запускается приложние. Есть ли возможность получить стандартные иконки для кнопок Toolbar'a?

Спасибо.

Network » telnet client под windows » Май 21, 2009 20:09:33

import sys
import telnetlib

HOST = "localhost"
tn = telnetlib.Telnet(HOST);
data = tn.read_very_eager()
print (data)
tn.close();
Может кто подскажет подключаюсь к windows telnet server и получаю пустую строку.

Python для новичков » Radmin + PrintScreen » Май 21, 2009 16:37:28

Привет всем!!!
Есть сервер Windows 2003 на нем настроен сервер терминалов и установлен Radmin и есть еще SSHd. Хочу чтобы при заходе браузером на страничку запускался скрипт, который бы запускал Radmin, проходил авторизацию, делал принтскрин и слаживал мне все это в папку. В принципе накодил такой, не доконца, до веб странички еще не добрался, и этот скрипт работает только при условии что запущен сеанс, а вот если подключиться через ssh и пнуть его, то не получается снять принскин, экзепшн вываливается, ну оно то и понятно, окна то нет. Как пофиксить или может есть какие другие пути решения?
Код скрипта:
import win32gui, win32ui, win32process, win32com.client
import os
import subprocess
import errno
import time
import sys
import win32api
import win32com.client

def get_screen(path):

hwnd = win32gui.GetDesktopWindow()
l,t,r,b = win32gui.GetWindowRect(hwnd)
h = b-t
w = r-l
hDC = win32gui.GetWindowDC(hwnd)
myDC = win32ui.CreateDCFromHandle(hDC)
newDC = myDC.CreateCompatibleDC()
myBitMap = win32ui.CreateBitmap()
myBitMap.CreateCompatibleBitmap(myDC, w, h)
newDC.SelectObject(myBitMap)
newDC.BitBlt((0,0),(w, h) , myDC, (0,0), win32con.SRCCOPY)
myBitMap.Paint(newDC)
myBitMap.SaveBitmapFile(newDC, path)

def radmin_auth(password, delay):

shell = win32com.client.Dispatch("WScript.Shell")
#shell.AppActivate("remote")
#win32api.Sleep(1000)
time.sleep(1)
shell.SendKeys(password)
shell.SendKeys("{TAB}")
time.sleep(1)
shell.SendKeys("{ENTER}")
time.sleep(delay)

#==========================================================

if __name__ == "__main__":

bankomat_name = { 'aaa:1' }

bankomat_ip = ['1.1.1.1]

bankomat_pass = ['123']
bankomat_delay = [3, ]
bankomat_photo = [ 'atmb1701.bmp' ]

try:
bankomat = sys.argv[1]
number = bankomat_name[bankomat]
except:
print "enter bankomat number"
sys.exit(1)
photo_path = "C:\\temp\\atmb\\"
path = "\"C:\\Program Files\\Radmin\\radmin.exe \" /connect:" + bankomat_ip[number] + ":4899 /noinput /fullscreen"
proc = subprocess.Popen(path)
time.sleep(1)
radmin_auth(bankomat_pass[number], bankomat_delay[number])
try:
get_screen(photo_path+bankomat_photo[number])
except:
print "can't get printscreen"
time.sleep(1)
proc.terminate()

Python для экспертов » pysvn cached creditials » Май 19, 2009 09:21:31

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

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

Python для новичков » вопрос по cx_Oracle и Ораклу в целом... » Май 18, 2009 16:33:13

есть тесты…которые проверяют расчеты в БД Oracle.
некотроые запросы идут по 5-10 мин…
как через cx_Oracle удостовериться что сессия оборвалась..и не продолжает безконтрольно орудовать в базе?

Web » mod_apache: Загрузка и выгрузка модулей handler'ов » Май 18, 2009 12:07:11

Доброе время суток!
Для разработки веб-приложений использую apache+mod_python и его publisher handler (процесс разработки упрощается и нет проблем со статическим контентом). Для подключения к БД использую пул SQLAlchemy. Все работает, все прекрасно.
Когда возникла необходимость держать пул POP3-подключений, пришлось немного поимпровизировать:
1) в модуле index.py, содержащем все обработчики, объявлен словарь:
pop3_pool = {}
2) при обработке запроса проверяется, содержит ли “пул” подключение для текущей сессии:
if session.id() in pop3_pool:
3) если подключение не установлено, происходит редирект на страницу логина, в противном случае запрос обрабатывается (отображается список писем, отображается выбранное письмо и т.д.)
Однако, через некоторое время заметил фичу: если не отправлять запросы серверу некоторое время, словарь pop3_pool опустошается. Проверка подтвердила, что при отсутствии запросов модуль выгружается из памяти, и его глобальные переменные, соответственно, инициализируются заново. При использовании пула подключений к БД я этого не замечал, поскольку переподключение при вызове create_engine происходило автоматически. В данном случае такое поведение неприемлемо, т.к. при переподключении индекс письма может измениться (например, при удалении письма с другого подключения) и операция будет произведена не над тем письмом, которое было выбрано для обработки.
Как можете посоветовать решить такую проблему? WSGI, FastCGI (не сталкивался ранее ни с тем, ни с другим)? Опции Python* в .htaccess'е?
Заранее спасибо!

Zope/Plone/Bluebream » Обзор обновлений некоторых продуктов Plone » Май 14, 2009 16:06:29

Обзор включает в себя информацию об изменениях и обновлениях в следующих продуктах Plone:

* Plone Comments
* PloneFormGen
* Poi
* Faculty Staff Directory
* PloneSEO
* Real Estate Broker
* Plone Get Paid
* Singing & Dancing
* Plone True Gallery

Обзор опубликован в разделе Plone: Обзор недавних релизов Продуктов Plone.

Оригинал статьи на www.contentmanagementsoftware.info
http://www.komtet.ru/info/plone/obzor-nedavnih-relizov-produktov-plone

Pyramid / Pylons / TurboGears » Открыт код движка Orphereus » Май 14, 2009 08:45:41

Новость с ЛОР:
Состоялся релиз движка имиджборд «Orphereus» - системы, разработанной на Python-фреймворке Pylons и включающей множество новаторских возможностей. под GPLv2
http://code.google.com/p/orphereus/source/browse/

Интересно будет код посмотреть ;)

Network » структура приложения для twisted-based » Май 10, 2009 10:59:47

У меня похоже совершенно не совместимая с twisted версия мозга… Все эти tap'ки и tac'и… :/ А пока я жду выхода апдейта не подскажите ли какую структуру лучше сделать для следующего приложения:

Есть основная часть которая представляет из себя только совокупность сервисов сетевых (если быть точным то conch который SSH, web и pymodbus) и должна запускаеться как демон и есть отдельный модуль-сервис который не занимается сетью напрямую а представляет из себя только тред для вычислений (спасибо тов. bw) который со всем остальным взаимодействует через контексты. Последний сервис должен иметь возможность динамически подгружаться/выгружаться (тоесть можно стартовать и без него), конфиг для него очень большой и посему а также по еще некоторым причинам будет лежать в недрах яйца как просто .py-файл…

Вот как лучше сие реализовать? Всё запихнуть в один плагин или всё запихнуть в один плагин а последний модуль в другой? или всё сделать через .tac? или может есть еще варианты?

Python проекты » pylibcurl - обёртка ctypes для curl'a » Май 6, 2009 18:34:06

привет, любители питона.
представляю вам обёртку ctypes для курла, теперь не нужно ставить pycurl

особенности:

* более питонически стиль
* работает из “коробки” не нужно ставитьт pycurl (нужна только библиотека libcurl)
* работает со stackless'ом (возможна работа на greenlet'ах (не тестировал) c эмуляцией или без stackless'а)


подробнее в моём блоге
ссылка на pylibcurl

пример:
from pylibcurl import Curl, const, lib, CurlError

header = []
c = Curl() # или все опции вставить в конструктор c = Curl('http://www.yandex.ru', followlocation=1, maxredirs=20, encoding='')
c.url = 'http://www.yandex.ru'
c.setopt(followlocation=1, maxredirs=20, encoding='')
c.httpheader = ['X-Client: 1', 'Bot: 1']
c.httpheader = ['X-Client: 2', 'Bot: 2']
c.useragent = 'Opera' # или таким образом устанавливаем опции
c.autoreferer = 1

cookie_file = 'cookie.txt'
c.cookiefile = cookie_file
c.cookiejar = cookie_file

c.writefunction = lambda x: x

c.headerfunction = header.append
c.verbose = 0
c.perform()
print c.effective_url # думаю смысл понятен

Django » как правильно массово продекорировать view-шки? » Май 5, 2009 17:57:28

нужно продекорировать все вьюхи из конкретного urls.py
соответственно вопрос: как написать единый декоратор для всех урлов или где про это можно почерпнуть

Network » OpenSSL. Как установить соединение? » Май 5, 2009 11:59:55

Доброго времени суток.
У меня есть тестовый ssl сервер. Сервер не мой. Запускается с ключами:
testssl -cacertfile=<какой-то файл> -certfile=<какой-то файл> -keyfile=<…> -keypass<…>

К нему шли файлы server.pem и client.pem

Работало так:
testssl -cacertfile=server.pem -certfile=server.pem -keyfile=server.pem -port=8888

Код клиента на питоне (2.6 версии):

from socket import socket
import ssl

s = socket()
c = ssl.wrap_socket(s, cert_reqs=ssl.CERT_REQUIRED, ssl_version=ssl.PROTOCOL_SSLv3, ca_certs='client.pem')
c.connect(('localhost', 8888))
cert = c.getpeercert()
print cert
c.write('dsafsadfasfsafads')
c.close()
s.close()
Сервер кидал на консоль строку: dsafsadfasfsafads
Клиент выдавал сведения о сертификате.

Теперь сервер говорит, что срок годности клиента истек.
Ладно, достал openssl и пытался насоздать сам файлов для сервера и клиента, но на любые попытки и любые файлы, или сервер ругается, что они невалидные, или клиент выкидывает такое:
Traceback (most recent call last):
File "D:\projects\sslclient.py", line 6, in <module>
c.connect(('localhost', 8888))
File "D:\Python26\lib\ssl.py", line 309, in connect
self.do_handshake()
File "D:\Python26\lib\ssl.py", line 293, in do_handshake
self._sslobj.do_handshake()
ssl.SSLError: [Errno 1] _ssl.c:480: error:14090086:SSL routines:SSL3_GET_SERVER_CERTIFICATE:certificate verify failed
а иногда такое:
Traceback (most recent call last):
File "D:\projects\sslclient.py", line 6, in <module>
c.connect(('localhost', 8888))
File "D:\Python26\lib\ssl.py", line 309, in connect
self.do_handshake()
File "D:\Python26\lib\ssl.py", line 293, in do_handshake
self._sslobj.do_handshake()
ssl.SSLError: [Errno 1] _ssl.c:480: error:14094410:SSL routines:SSL3_READ_BYTES: sslv3 alert handshake failure
Я точно знаю, что server.pem и client.pem созданы так же в openssl и являются self-signed.

Вопрос: Как создать подобные файлы для сервера и клиента?
пробовал:
http://www.octaldream.com/~scottm/talks/ssl/opensslca.html
http://blog.taragana.com/index.php/archive/openssl-how-to-create-self-signed-certificate/ru/
http://www.dylanbeattie.net/docs/openssl_iis_ssl_howto.html
В общем:
http://www.google.ru/search?hl=ru&client=firefox-a&rls=org.mozilla%3Aru%3Aofficial&hs=2Zu&q=openssl+Generate+certificate+authority+using+openssl&btnG=%D0%9F%D0%BE%D0%B8%D1%81%D0%BA&lr=

CA.pl -newca
CA.pl -newreq
CA.pl -sign

Не подходят вообще никак.
Или: есть толковая дока по openSSL? Из серии “для чайников”, чтоб с самого начала, что, где и как применяется, что это за файлы сервера (cacertfile certfile keyfile) и что надо указывать в качестве сертификата клиенту.

Неделю уже не могу достучаться до сервера.

Python для новичков » fapws2 freebsd amd64 » Апрель 30, 2009 20:45:37

сие чудо не хочет правильно работать на amd64, сорибаю его на i386 с той же версией питона и libevent-а и все ок.
кто-то пробывал? можно ли его как-то пофиксить?
проверяю очень просто
python sample/hello/hello_world.py
i386
GET /hello HTTP/1.0
HTTP/1.0 200 WHYNOT
Date: Thu, 30 Apr 2009 20:40:03 GMT
toto: 4444
Server: fapws2/0.3
Hello World!!Connection closed by foreign host.

amd64
GET /hello HTTP/1.0
HTTP/1.0 200 WHYNOT
Hello World!!Connection closed by foreign host.
fapws не отдает header-ы
python 2.5.4
libevent 1.3d

Python для новичков » где взять mod_python 2.6 (при обнолении python 2.5 win32) » Апрель 28, 2009 10:11:27

Всем привет,
решил обновить питон с 2.5 на 2.6, но столкнулся с отсутствием под 2.6 mod_python
http://mirror.prvtgeo.com/apache/httpd/modpython/win/3.3.1/
Как под виндой заставить работать mod_python с апач?
Или пока вернутся на 2.5?
P.S. Я не силен чтобы под виндой компилировать mod_python.