Mercurial > p > roundup > code
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)) |
