Hi all,

I'm trying to get a simple UserKit user management to work, but I have
a bit of a problem with this. It might be my missing understanding of
how UserKit is supposed to work, but nevertheless: 

In my the incomplete draft of the user management, only the "Create"
_action_ of a WebKit page is implemented so far.  self.mgr is an
instance of UserManagerToFile in the following. In the instantiation I
added a call to self.mgr.clearCache()

"Create" calls a function with two strings 'name' and 'password'
        
        def add(self, name, password=None):
                newUser = self.mgr.createUser(name, password)
                return newUser

This is intentionally written without error checking. Now if I call
this from a page form like this:
                
                if req.hasValue('username'):
                        name = req.value('username')
                if req.hasValue('password'):
                        passwd = req.value('password')
                        
                newUser = self.hood.add(name, passwd)

it works for the first user, that tries to create herself. I get a
file "1.user" im my user dir.

But if I try to create another user, this fails with: 
  
  
  File "/dos/ibm/hdc18/f/src/python/webware/workdir/thehood/Main.py", line 71, in 
Create
    newUser = self.hood.add(name, passwd)
  File "/dos/ibm/hdc18/f/src/python/webware/workdir/thehood/Main.py", line 22, in add
    newUser = self.mgr.createUser(name, password)
  File "./UserKit/UserManager.py", line 146, in createUser
  File "./UserKit/UserManagerToFile.py", line 109, in addUser
  File "./UserKit/UserManager.py", line 152, in addUser
AssertionError

Line 152 in UserManager.py says: 

assert not self._cachedUsersBySerialNum.has_key(user.serialNum())

So it seems, that the second attempt to create a user runs into a
caching problem. 

Do I miss something in my way, how to use UserKit? This all is under
WebWare 0.7 and running under OneShot.cgi or the AppServer

I attached the complete file as well.

ciao
-- 
 Frank Barknecht                               _ ______footils.org__
from WebKit.Page import Page
from UserKit.UserManagerToFile import UserManagerToFile
from UserKit.User import User

from os import path

class TheHood:
        
        def __init__(self, user_dir):
                if not path.isdir(user_dir):
                        raise "Not a directory: %s" % user_dir
                else: 
                        # create manager
                        self.mgr = UserManagerToFile()
                        # set user directory
                        self.mgr.setUserDir(user_dir)
                        # clear cache:
                        self.mgr.clearCache()


        def add(self, name, password=None):
                newUser = self.mgr.createUser(name, password)
                # newUser = User(self.mgr, name, password)
                # self.mgr.addUser(newUser)
                return newUser

        def isMember(self, name):
                pass



class Main(Page):
        def __init__(self, page_name=None):
                Page.__init__(self)
                self.hood = 
TheHood("/dos/ibm/hdc18/f/src/python/webware/workdir/pydiddy/user")
                self.msg = 'Hi!<br>'
                self.footer = """
                <form action="post">
                        Username:<br>
                        <input name="username" type="text"><br>
                        Password:<br>
                        <input name="username" type="password"><br>
                        <input name="_action_" value="Create" type="submit">
                </form>
                """

        def writeContent(self, msg=None):
                self.writeln("""<h1>UserKit Testpage</h1>
                <p>""")
                self.writeln(self.msg)
                self.writeln("""</p>""")
                self.writeln(self.footer)
        
        def setMsg(self, msg=None):
                self.msg = msg

        def actions(self):
                return Page.actions(self) + ['Login', 'Create']

        def Login(self,trans):
                pass
        
        def Create(self,trans):
                req = trans.request()
                name = ''
                passwd = ''
                if req.hasValue('username'):
                        name = req.value('username')
                if req.hasValue('password'):
                        passwd = req.value('password')
                        
                newUser = self.hood.add(name, passwd)
                if (newUser):
                        self.msg = """New user created. <br> 
                        ID: %s, <br>Name: %s,<br> Password: %s
                        """ % ( newUser.externalId(), 
newUser.name(),newUser.password() )
                else: 
                        self.msg = """Couldn't create user: %s""" % name
                
                self.writeHTML()

Reply via email to