Форум сайта python.su
C Twisted разбираюсь первый раз. Вот код:
import sys
from wx import Frame, DefaultPosition, Size, Menu, MenuBar, App
from wx import EVT_MENU, EVT_CLOSE
from twisted.python import log
from twisted.internet import wxreactor
wxreactor.install()
# import t.i.reactor only after installing wxreactor:
from twisted.internet import protocol, reactor, defer
from twisted.protocols import basic
from twisted.enterprise import adbapi
from twisted.web import xmlrpc, server
dbpool = adbapi.ConnectionPool("sqlite3", 'ren.db')
#import row_object
ID_EXIT = 101
def sql_gen(i):
return """select * from %s;""" % i
def select_bd(table):
return dbpool.runQuery(sql_gen(table))
def printResult(i):
if len(i):
print i
return `i`
else:
return '0'
class MyFrame(Frame):
def __init__(self, parent, ID, title):
Frame.__init__(self, parent, ID, title, DefaultPosition, Size(300, 200))
menu = Menu()
menu.Append(ID_EXIT, "E&xit", "Terminate the program")
menuBar = MenuBar()
menuBar.Append(menu, "&File")
self.SetMenuBar(menuBar)
EVT_MENU(self, ID_EXIT, self.DoExit)
# make sure reactor.stop() is used to stop event loop:
EVT_CLOSE(self, lambda evt: reactor.stop())
def DoExit(self, event):
reactor.stop()
class MyApp(App, xmlrpc.XMLRPC):
allowNone=False
useDateTime=False
def OnInit(self):
frame = MyFrame(None, -1, "Hello, world")
#frame.Show(True)
#self.SetTopWindow(frame)
# look, we can use twisted calls!
return True
def xmlrpc_select(self,table):
print self.server()
return select_bd(table).addCallback(printResult)
def demo():
log.startLogging(sys.stdout)
# register the App instance with Twisted:
app = MyApp(0)
reactor.registerWxApp(app)
reactor.listenTCP(8000, server.Site(app))
# start the event loop:
reactor.run()
if __name__ == '__main__':
demo()
Офлайн
На второй вопрос отвечу сам:
from wx import Frame, DefaultPosition, Size, Menu, MenuBar, App
from wx import EVT_MENU, EVT_CLOSE
import xmlrpclib
from twisted.python import log
from twisted.internet import wxreactor
wxreactor.install()
# import t.i.reactor only after installing wxreactor:
from twisted.internet import protocol, reactor, defer
from twisted.protocols import basic
from twisted.enterprise import adbapi
from twisted.web import xmlrpc, server
dbpool = adbapi.ConnectionPool("sqlite3", 'ren.db')
#import row_object
ID_EXIT = 101
def sql_gen(i):
return """select * from %s;""" % i
def select_bd(table):
return dbpool.runQuery(sql_gen(table))
def printResult(i):
if len(i):
print i
return `i`
else:
return '0'
class MyFrame(Frame):
def __init__(self, parent, ID, title):
Frame.__init__(self, parent, ID, title, DefaultPosition, Size(300, 200))
menu = Menu()
menu.Append(ID_EXIT, "E&xit", "Terminate the program")
menuBar = MenuBar()
menuBar.Append(menu, "&File")
self.SetMenuBar(menuBar)
EVT_MENU(self, ID_EXIT, self.DoExit)
# make sure reactor.stop() is used to stop event loop:
EVT_CLOSE(self, lambda evt: reactor.stop())
def DoExit(self, event):
reactor.stop()
class MyApp(App, xmlrpc.XMLRPC):
allowNone=False
useDateTime=False
def OnInit(self):
frame = MyFrame(None, -1, "Hello, world")
#frame.Show(True)
#self.SetTopWindow(frame)
# look, we can use twisted calls!
return True
def xmlrpc_select(self,table):
return select_bd(table).addCallback(printResult)
def render(self, request):
print request.getHost().host
Fault = xmlrpclib.Fault
args, functionPath = xmlrpclib.loads(request.content.read())
try:
function = self._getFunction(functionPath)
except Fault, f:
self._cbRender(f, request)
else:
request.setHeader("content-type", "text/xml")
defer.maybeDeferred(function, *args).addErrback(
self._ebRender
).addCallback(
self._cbRender, request
)
return server.NOT_DONE_YET
def demo():
log.startLogging(sys.stdout)
# register the App instance with Twisted:
app = MyApp(0)
reactor.registerWxApp(app)
reactor.listenTCP(8000, server.Site(app))
# start the event loop:
reactor.run()
if __name__ == '__main__':
demo()
Офлайн
молчание знак чего?
у меня все правильно или у меня все плохо?
Ведь есть же знающие люди на форуме, у которых Twisted любимый инструмент. Это мой первый опыт работы с Twisted. Проконсультироваться в городе, где я живу не с кем, поэтому и выложил на форум скрипт. Twisted не тот инструмент, с которым как с сашкой на ура без определенных знаний можно воевать.
хотя б что-то скажите….
Офлайн
А что вы хотите? Ваш код, похоже, работает.
И он совсем простой - вопросов нет.
Некоторое недоумение вызывает только то, зачем потребовалось переопределять .render?
Почему стандартного xmlrpc.XMLRPC не хватило?
Офлайн
Андрей Светловчестно говоря мне этот путь тоже кажется несколько через ж…
Некоторое недоумение вызывает только то, зачем потребовалось переопределять .render?
Почему стандартного xmlrpc.XMLRPC не хватило?
Офлайн