Hi all

May I chime in with a question as a newbie?

I get the feeling from this particular thread that I am completely on the wrong course with my experiments ( http://telinfo.thie.ch ) on hooking together my Swiss telephonebook library with a 'live' app in the browser window. Mainly because I am using nevow 0.8, MochiKit 1.3.1 and athena for the implementation (Safari was never considered to work with this code, although it would be nice to have it on board).

If I am wrong in mixing these components, could someone please advise what I am supposed to change in my code for not getting some nasty surprises in the future when there are updates to nevow?

I like the TechnoTurkeys adventures a lot and would like to provide some help although I doubt that I have enough knowledge to help out with more than some light testing.

Thxs,
Werner Thie

Experience is what you get, when you expected something else.

Server side code of telinfo.thie.ch attached for reference
---------------------------------------------------------------
# telinfoweb.py - web service functionality test of the PYTHON telinfo package
#
# author   : wthie, wth
# last edit: 22.05.2005
# modhistory:
#   28.04.2005 - wth, created
# 22.05.2005 - wth, fiddled with result and status delivery, could do a whole
#                     lot more, but we leave it at that for the moment

import sys
import os
import simple_json

if '2.3' in sys.version:
 path = os.path.abspath('./python23/telinfo')

if '2.4' in sys.version:
 path = os.path.abspath('./python24/telinfo')

sys.path.append(path)

import telinfo

tcdpath = 'C:\\Program Files\\telcd\\teldata\\data'
verz = telinfo.SM_TELVERZ | telinfo.SM_PRIVAT | telinfo.SM_PROF

from zope.interface import implements, Interface
from twisted.python.components import registerAdapter
from nevow import athena, inevow, loaders, tags, util, static

class ITelinfoweb(Interface):
 def Search():
   pass

 def SearchExtended():
   pass


class Telinfoweb(object):
 def __init__(self):
   self.limit = 15
   self.result = ''

 def DoSearchPattern(self, pb, pattern):
   pat = pattern.replace(u'\xf6', 'o')
   pat = pat.replace(u'\xfc', 'u')
   pat = pat.replace(u'\xe4', 'a')
   pat = pat.replace(u'\xef', 'i')
   pat = pat.replace(u'\xe7', 'c')
   pat = pat.replace(u'\xe8', 'e')
   pat = pat.replace(u'\xe9', 'e')

   srchpat = pat.split('%')

   for i in range(0, len(srchpat)-1, 2):
     tagname = srchpat[i]
     spat    = srchpat[i+1]

     if (len(spat) > 0):
       tag = telinfo.ILLEGAL_SEARCH

       if (tagname == 'name'):
         tag = telinfo.NAMESEARCH
       elif (tagname == 'vorname'):
         tag = telinfo.FNAMESEARCH
       elif (tagname == 'strasse'):
         tag = telinfo.STREETSEARCH
       elif (tagname == 'ort'):
         tag = telinfo.ORTSEARCH
       elif (tagname == 'beruf'):
         tag = telinfo.BERUFSEARCH
       elif (tagname == 'ledig'):
         tag = telinfo.LEDIGSEARCH
       elif (tagname == 'zusatz'):
         tag = telinfo.ZUSATZSEARCH

       if (tag != telinfo.ILLEGAL_SEARCH):
         pb.Search(tag, spat)

   return


 def BuildResult(self, pb):
   cnt = pb.GetElemCount()
   d = {}
   d['count'] = str(cnt)
   d['limit'] = str(self.limit)
d['columns'] = ['rvorname', 'rname', 'rstrasse', 'rnr', 'rtelno', 'rplz', 'rort' ]
   d['rows']    = []

   if cnt > 0:
     if cnt > self.limit:                            #limited to some value
       cnt = self.limit

   i = 0
   while (i < cnt):
     row = []
row.append(unicode(pb.RetrieveField(i, telinfo.VORNAMETAG), 'iso-8859-1')) row.append(unicode(pb.RetrieveField(i, telinfo.NAMETAG), 'iso-8859-1')) row.append(unicode(pb.RetrieveField(i, telinfo.STRASSETAG), 'iso-8859-1')) row.append(unicode(pb.RetrieveField(i, telinfo.HAUSNUMMERTAG), 'iso-8859-1')) row.append(unicode(pb.RetrieveField(i, telinfo.RUFNUMMERTAG), 'iso-8859-1'))
     row.append(unicode(pb.RetrieveField(i, telinfo.PLZTAG), 'iso-8859-1'))
     row.append(unicode(pb.RetrieveField(i, telinfo.ORTTAG), 'iso-8859-1'))

     d['rows'].append(row)

     i = i + 1

   pb.DropAll()
   return unicode(simple_json.dumps(d))


 def Search(self, pattern):
   pb = telinfo.pypbdb(tcdpath, tcdpath, 20, 0)
   pb.OpenSearchSimple(0, verz, '')
   self.DoSearchPattern(pb, pattern)
   pb.CloseSearch()
   return self.BuildResult(pb)


 def SearchExtended(self, pattern):
   pb = telinfo.pypbdb(tcdpath, tcdpath, 20, 0)
   pb.OpenSearchSimple(1, verz, '')
   self.DoSearchPattern(pb, pattern)
   pb.CloseSearch()
   return self.BuildResult(pb)


class TelinfowebResource(athena.LivePage):
   """
   telinfo in its web incarnation

   All buttons presses in the browser are sent to the server. The server
   evaluates the expression and sets the output in the browser.
   """
   addSlash = True

#child_html = static.File('html') #this trick did not work out with topstyles preview feature #will contact the author about that problem
   child_images  = static.File('images')
   child_scripts = static.File('scripts')
   child_css = static.File('css')

docFactory = loaders.xmlfile(util.resource_filename('telinfoweb', 'html/telinfoweb.html'))


if __name__ == '__main__':
 if True:
   from twisted.internet import reactor
   from twisted.python import log
   from nevow import appserver

   def TelinfowebResourceFactory(original):
       return TelinfowebResource(ITelinfoweb, original)

   registerAdapter(TelinfowebResourceFactory, Telinfoweb, inevow.IResource)

   log.startLogging(sys.stdout)
   site = appserver.NevowSite(Telinfoweb())
   reactor.listenTCP(80, site)
   reactor.run()
 else:
   tstpb = Telinfoweb()
   tstpb.SearchExtended('name%Thie%vorname%W*%')




_______________________________________________
Twisted-web mailing list
[email protected]
http://twistedmatrix.com/cgi-bin/mailman/listinfo/twisted-web

Reply via email to