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()