[Twisted-web] child page

Françoise Maguib fmaguib at yahoo.com
Wed Jun 29 03:31:44 MDT 2005


I'm really sorry,

there is the source:


import ldap
from twisted.application import internet,service

from nevow import appserver,inevow, loaders,
util,compy,rend, tags as T, url
from nevow.url import here
from nevow.tags import *

from formless import annotate
from formless import webform

mydata=[]

def findDetails(args):
    total=len(mydata)
    myerror=['','','']
    ok=False
    i=0
    while(not(ok) and i<total):
        if mydata[i][0]==args:
            ok=True
            indice=i
        else:
            i+=1
    if ok:
        return mydata[indice]
    else:
        return myerror
    



def doQuery(args):
    try:
        l=ldap.open("x,name):
       172.29.160.70")
        username=""
        password=""
        l.simple_bind_s(username,password)
        l.protocol_version=ldap.VERSION3
    except ldap.LDAPError,e:
        print e
    base="o=gouv,c=fr"
    scope=ldap.SCOPE_SUBTREE
    retrieve_attributes=None
    filter="uid="+args
    count = 0
    result_set=[]
           
    try:
       
ldap_result_id=l.search(base,scope,filter,retrieve_attributes)
        
        
        while 1:
           
result_type,result_data=l.result(ldap_result_id,0)
            
            if(result_data==[]):
                break
            else:
                if result_type==ldap.RES_SEARCH_ENTRY:
                    
                    result_set.append(result_data)
                    if len(result_set)==0:
                        return

                    for i in range(len(result_set)):
                        
                        for entry in result_set[i]:
                            try:
                                mydetail=[]
                               
mydetail.append(entry[1]['uid'][0])
                               
mydetail.append(entry[1]['cn'][0])
                               
mydetail.append(entry[1]['mail'][0])
                               
mydata.append(mydetail)
                                mydetail.remove
                                #count=count+1
                            except:
                                pass
        
    except ldap.LDAPError,e:
        print e
    
    return mydata


class IItemForChange(annotate.TypedInterface):
    def setSsa(self,ssa=annotate.String(label="Score
Spam Assassin")):
        pass
    setSsa=annotate.autocallable(setSsa)


class ChildPage(rend.Page):
   
__implements__=IItemForChange,rend.Page.__implements__
    addSlash=True

    def __init__(self,name):
        rend.Page.__init__(self)
        self.name=name
        
    def setSsa(self,ssa):
        valeur=ssa
            
    def render_viewSelector(self,context,data):
        args=inevow.IRequest(context).args
        view=args.get('view',['view'])[0]
        if view=='view':
            selector ="View|
",a(href=here.add('view','edit'))["Edit"]
            editor =''
        else:
           
selector=a(href=here.add('view','view'))["View"],"|
Edit"
            editor=context.onePattern('edit')()
        viewer=context.onePattern('view')()
        return selector,viewer,editor

    def render_itemDetail(self,context,data):
        thedetails=findDetails(self.name)
        return
h2["Name:",thedetails[1]],h2["Email:",thedetails[2]]

    docFactory= loaders.stan(
        T.html[
              T.body[
                    T.p[a(href=here.parent())["UP"]],
                    T.div(render=render_viewSelector)[
                         
T.p(pattern="edit")[webform.renderForms()],
                         
T.p(pattern="view")[render_itemDetail]
                          ]
                        ]
                ]
           )
                
class IFindUser(annotate.TypedInterface):
    def findUser(self,user=annotate.String()):
        pass
    findUser=annotate.autocallable(findUser)

class FatherPage(rend.Page):
    __implements__ =IFindUser,rend.Page.__implements__
    addSlash=True

    
    def __init__(self):
        rend.Page.__init__(self)
        self.currentuser=""
    
    
    def findUser(self,user):
        
        doQuery(user)

    def data_queryLdap(self,context,data):
        
        return doQuery(self.currentuser)
        
        
    def render_row(self,context,data):
        
        theuser=data
        return context.tag[
            a(href=theuser[0])[theuser[0]]
    ]


    
            

    docFactory=loaders.stan(
        T.html[
           T.body[
                T.h1["Welcome,user"],
               
T.ul(data=directive("queryLdap"),render=directive("sequence"))[
                  
T.li(pattern="item",render=render_row)
                   ],
                webform.renderForms()
                ]
           ]
        )

    def childFactory(self,ctx,name):
        try:
            return ChildPage(name)
        except ValueError:
            pass
        

        

    
           
                 
application=service.Application('monform2')
webserver=internet.TCPServer(8080,appserver.NevowSite(FatherPage()))
webserver.setServiceParent(application)

             
        
                                   
        




-- Tommi Virtanen <tv at twistedmatrix.com> a écrit :

> Françoise Maguib wrote:
> > I've made a small program. he aim is to access to
> a
> > Ldap server and to show details of each user. I
> have a
> > root page, and a child. When I run my program,I'm
> > unable to display items in the root page because
> on
> > click(in a button on the root page),the program
> goes
> > immediately in the child page(instead of
> displaying
> > items in the root page).I can't locate the
> problem.is
> > someone could help me?
> 
> My crystal ball is a bit dusty. Maybe you should put
> the source on the web so we can actually look at the
> program?
> 
> http://www.catb.org/~esr/faqs/smart-questions.html
> 
> _______________________________________________
> Twisted-web mailing list
> Twisted-web at twistedmatrix.com
>
http://twistedmatrix.com/cgi-bin/mailman/listinfo/twisted-web
> 



	

	
		
___________________________________________________________________________ 
Appel audio GRATUIT partout dans le monde avec le nouveau Yahoo! Messenger 
Téléchargez cette version sur http://fr.messenger.yahoo.com



More information about the Twisted-web mailing list