comparison roundup/xmlrpc.py @ 3985:f7f3068b32a1

Add filter() to XML-RPC interface [SF#966456]
author Richard Jones <richard@users.sourceforge.net>
date Thu, 07 Aug 2008 06:21:07 +0000
parents 85cbaa50eba1
children edf526c91412
comparison
equal deleted inserted replaced
3984:e8b93eba63a4 3985:f7f3068b32a1
74 try: 74 try:
75 return self.db.getclass(classname) 75 return self.db.getclass(classname)
76 except KeyError: 76 except KeyError:
77 raise UsageError, 'no such class "%s"'%classname 77 raise UsageError, 'no such class "%s"'%classname
78 78
79 def props_from_args(self, cl, args): 79 def props_from_args(self, cl, args, itemid=None):
80 """Construct a list of properties from the given arguments, 80 """Construct a list of properties from the given arguments,
81 and return them after validation.""" 81 and return them after validation."""
82 82
83 props = {} 83 props = {}
84 for arg in args: 84 for arg in args:
88 if len(l) < 2: 88 if len(l) < 2:
89 raise UsageError, 'argument "%s" not propname=value'%arg 89 raise UsageError, 'argument "%s" not propname=value'%arg
90 key, value = l[0], '='.join(l[1:]) 90 key, value = l[0], '='.join(l[1:])
91 if value: 91 if value:
92 try: 92 try:
93 props[key] = hyperdb.rawToHyperdb(self.db, cl, None, 93 props[key] = hyperdb.rawToHyperdb(self.db, cl, itemid,
94 key, value) 94 key, value)
95 except hyperdb.HyperdbValueError, message: 95 except hyperdb.HyperdbValueError, message:
96 raise UsageError, message 96 raise UsageError, message
97 else: 97 else:
98 props[key] = None 98 props[key] = None
119 result = [cl.get(itemid, propname) 119 result = [cl.get(itemid, propname)
120 for itemid in cl.list() 120 for itemid in cl.list()
121 if r.db.security.hasPermission('View', r.userid, 121 if r.db.security.hasPermission('View', r.userid,
122 classname, propname, itemid) 122 classname, propname, itemid)
123 ] 123 ]
124 finally:
125 r.close()
126 return result
127
128 def filter(self, username, password, classname, search_matches, filterspec,
129 sort=[], group=[]):
130 r = RoundupRequest(self.tracker, username, password)
131 try:
132 cl = r.get_class(classname)
133 result = cl.filter(search_matches, filterspec, sort=sort, group=group)
124 finally: 134 finally:
125 r.close() 135 r.close()
126 return result 136 return result
127 137
128 def display(self, username, password, designator, *properties): 138 def display(self, username, password, designator, *properties):
170 def set(self, username, password, designator, *args): 180 def set(self, username, password, designator, *args):
171 r = RoundupRequest(self.tracker, username, password) 181 r = RoundupRequest(self.tracker, username, password)
172 try: 182 try:
173 classname, itemid = hyperdb.splitDesignator(designator) 183 classname, itemid = hyperdb.splitDesignator(designator)
174 cl = r.get_class(classname) 184 cl = r.get_class(classname)
175 props = r.props_from_args(cl, args) # convert types 185 props = r.props_from_args(cl, args, itemid) # convert types
176 for p in props.iterkeys (): 186 for p in props.iterkeys ():
177 if not r.db.security.hasPermission('Edit', r.userid, 187 if not r.db.security.hasPermission('Edit', r.userid,
178 classname, p, itemid): 188 classname, p, itemid):
179 raise Unauthorised('Permission to edit %s of %s denied'% 189 raise Unauthorised('Permission to edit %s of %s denied'%
180 (p, designator)) 190 (p, designator))

Roundup Issue Tracker: http://roundup-tracker.org/