@@ -158,7 +158,7 @@ def getContext(self, client, classname, request):
158158 }
159159 # add in the item if there is one
160160 if client .nodeid :
161- c ['item' ] = HTMLItem (client . db , classname , client .nodeid )
161+ c ['item' ] = HTMLItem (client , classname , client .nodeid )
162162 c [classname ] = c ['item' ]
163163 else :
164164 c [classname ] = c ['klass' ]
@@ -219,10 +219,11 @@ def __repr__(self):
219219 return '<HTMLClass(0x%x) %s>' % (id (self ), self .classname )
220220
221221 def __getitem__ (self , item ):
222- ''' return an HTMLItem instance'''
223- #print 'getitem', (self, attr)
222+ ''' return an HTMLProperty instance
223+ '''
224+ #print 'getitem', (self, item)
224225 if item == 'creator' :
225- return HTMLUser (self .client )
226+ return HTMLUser (self .client , 'user' , client . userid )
226227
227228 if not self .props .has_key (item ):
228229 raise KeyError , item
@@ -235,7 +236,7 @@ def __getitem__(self, item):
235236 else :
236237 value = None
237238 if isinstance (prop , klass ):
238- return htmlklass (self .db , '' , prop , item , value )
239+ return htmlklass (self .client , '' , prop , item , value )
239240
240241 # no good
241242 raise KeyError , item
@@ -258,11 +259,15 @@ def properties(self):
258259 else :
259260 value = None
260261 if isinstance (prop , klass ):
261- l .append (htmlklass (self .db , '' , prop , name , value ))
262+ l .append (htmlklass (self .client , '' , prop , name , value ))
262263 return l
263264
264265 def list (self ):
265- l = [HTMLItem (self .db , self .classname , x ) for x in self .klass .list ()]
266+ if self .classname == 'user' :
267+ klass = HTMLUser
268+ else :
269+ klass = HTMLItem
270+ l = [klass (self .client , self .classname , x ) for x in self .klass .list ()]
266271 return l
267272
268273 def csv (self ):
@@ -307,7 +312,11 @@ def filter(self, request=None):
307312 filterspec = request .filterspec
308313 sort = request .sort
309314 group = request .group
310- l = [HTMLItem (self .db , self .classname , x )
315+ if self .classname == 'user' :
316+ klass = HTMLUser
317+ else :
318+ klass = HTMLItem
319+ l = [klass (self .client , self .classname , x )
311320 for x in self .klass .filter (None , filterspec , sort , group )]
312321 return l
313322
@@ -357,8 +366,9 @@ def renderWith(self, name, **kwargs):
357366class HTMLItem :
358367 ''' Accesses through an *item*
359368 '''
360- def __init__ (self , db , classname , nodeid ):
361- self .db = db
369+ def __init__ (self , client , classname , nodeid ):
370+ self .client = client
371+ self .db = client .db
362372 self .classname = classname
363373 self .nodeid = nodeid
364374 self .klass = self .db .getclass (classname )
@@ -368,7 +378,9 @@ def __repr__(self):
368378 return '<HTMLItem(0x%x) %s %s>' % (id (self ), self .classname , self .nodeid )
369379
370380 def __getitem__ (self , item ):
371- ''' return an HTMLItem instance'''
381+ ''' return an HTMLProperty instance
382+ '''
383+ #print 'getitem', (self, item)
372384 if item == 'id' :
373385 return self .nodeid
374386 if not self .props .has_key (item ):
@@ -384,7 +396,7 @@ def __getitem__(self, item):
384396 # look up the correct HTMLProperty class
385397 for klass , htmlklass in propclasses :
386398 if isinstance (prop , klass ):
387- return htmlklass (self .db , self .nodeid , prop , item , value )
399+ return htmlklass (self .client , self .nodeid , prop , item , value )
388400
389401 raise KeyErorr , item
390402
@@ -556,10 +568,9 @@ def remove(self):
556568class HTMLUser (HTMLItem ):
557569 ''' Accesses through the *user* (a special case of item)
558570 '''
559- def __init__ (self , client ):
560- HTMLItem .__init__ (self , client . db , 'user' , client . userid )
571+ def __init__ (self , client , classname , nodeid ):
572+ HTMLItem .__init__ (self , client , 'user' , nodeid )
561573 self .default_classname = client .classname
562- self .userid = client .userid
563574
564575 # used for security checks
565576 self .security = client .db .security
@@ -572,15 +583,16 @@ def hasPermission(self, role, classname=_marker):
572583 '''
573584 if classname is self ._marker :
574585 classname = self .default_classname
575- return self .security .hasPermission (role , self .userid , classname )
586+ return self .security .hasPermission (role , self .nodeid , classname )
576587
577588class HTMLProperty :
578589 ''' String, Number, Date, Interval HTMLProperty
579590
580591 A wrapper object which may be stringified for the plain() behaviour.
581592 '''
582- def __init__ (self , db , nodeid , prop , name , value ):
583- self .db = db
593+ def __init__ (self , client , nodeid , prop , name , value ):
594+ self .client = client
595+ self .db = client .db
584596 self .nodeid = nodeid
585597 self .prop = prop
586598 self .name = name
@@ -730,7 +742,11 @@ def __getattr__(self, attr):
730742 #print 'getattr', (self, attr, self.value)
731743 if not self .value :
732744 raise AttributeError , "Can't access missing value"
733- i = HTMLItem (self .db , self .prop .classname , self .value )
745+ if self .prop .classname == 'user' :
746+ klass = HTMLItem
747+ else :
748+ klass = HTMLUser
749+ i = klass (self .client , self .prop .classname , self .value )
734750 return getattr (i , attr )
735751
736752 def plain (self , escape = 0 ):
@@ -853,16 +869,26 @@ def __getattr__(self, attr):
853869 raise AttributeError , attr
854870
855871 def __getitem__ (self , num ):
856- ''' iterate and return a new HTMLItem '''
872+ ''' iterate and return a new HTMLItem
873+ '''
857874 #print 'getitem', (self, num)
858875 value = self .value [num ]
859- return HTMLItem (self .db , self .prop .classname , value )
876+ if self .prop .classname == 'user' :
877+ klass = HTMLUser
878+ else :
879+ klass = HTMLItem
880+ return klass (self .client , self .prop .classname , value )
860881
861882 def reverse (self ):
862- ''' return the list in reverse order '''
883+ ''' return the list in reverse order
884+ '''
863885 l = self .value [:]
864886 l .reverse ()
865- return [HTMLItem (self .db , self .prop .classname , value ) for value in l ]
887+ if self .prop .classname == 'user' :
888+ klass = HTMLUser
889+ else :
890+ klass = HTMLItem
891+ return [klass (self .client , self .prop .classname , value ) for value in l ]
866892
867893 def plain (self , escape = 0 ):
868894 linkcl = self .db .classes [self .prop .classname ]
@@ -1003,7 +1029,7 @@ def __init__(self, client):
10031029 self .env = client .env
10041030 self .base = client .base
10051031 self .url = client .url
1006- self .user = HTMLUser (client )
1032+ self .user = HTMLUser (client , 'user' , client . userid )
10071033
10081034 # store the current class name and action
10091035 self .classname = client .classname
@@ -1240,7 +1266,11 @@ def __getitem__(self, index):
12401266 self .last_index = index
12411267
12421268 # wrap the return in an HTMLItem
1243- self .current_item = HTMLItem (self .client .db , self .classname ,
1269+ if self .classname == 'user' :
1270+ klass = HTMLUser
1271+ else :
1272+ klass = HTMLItem
1273+ self .current_item = klass (self .client , self .classname ,
12441274 self ._sequence [index + self .first ])
12451275 return self .current_item
12461276
0 commit comments