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