Changeset 229
- Timestamp:
- 12/27/05 08:00:27 (3 years ago)
- Files:
-
- xmlrpcplugin/0.9/tracrpc/api.py (modified) (7 diffs)
- xmlrpcplugin/0.9/tracrpc/ticket.py (modified) (14 diffs)
- xmlrpcplugin/0.9/tracrpc/web_ui.py (modified) (1 diff)
- xmlrpcplugin/0.9/tracrpc/wiki.py (modified) (10 diffs)
Legend:
- Unmodified
- Added
- Removed
- Modified
- Copied
- Moved
xmlrpcplugin/0.9/tracrpc/api.py
r228 r229 63 63 self.description = pydoc.getdoc(callable) 64 64 if name is None: 65 self.name = provider.xmlrpc_namespace() + '.' + signature[2].__name__65 self.name = provider.xmlrpc_namespace() + '.' + callable.__name__ 66 66 else: 67 67 self.name = provider.xmlrpc_namespace() + '.' + name … … 124 124 return self.rpc_signatures 125 125 126 class XMLRPCSystem( AbstractRPCHandler):126 class XMLRPCSystem(Component): 127 127 """ Core of the XML-RPC system. """ 128 implements(IPermissionRequestor )128 implements(IPermissionRequestor, IXMLRPCHandler) 129 129 130 130 method_handlers = ExtensionPoint(IXMLRPCHandler) … … 137 137 def xmlrpc_namespace(self): 138 138 return 'system' 139 140 def xmlrpc_methods(self): 141 yield ('XML_RPC', ((list, list),), self.multicall) 142 yield ('XML_RPC', ((list,),), self.listMethods) 143 yield ('XML_RPC', ((str, str),), self.methodHelp) 144 yield ('XML_RPC', ((list, str),), self.methodSignature) 139 145 140 146 def get_method(self, method): … … 157 163 yield c 158 164 159 @expose_rpc('XML_RPC', list, list)160 165 def multicall(self, req, signatures): 161 166 """ Takes an array of XML-RPC calls encoded as structs of the form (in … … 172 177 yield xmlrpclib.Fault(2, "'%s' while executing '%s()'" % (str(e), signature['methodName'])) 173 178 174 @expose_rpc('XML_RPC', list)175 179 def listMethods(self, req): 176 180 """ This method returns a list of strings, one for each (non-system) … … 179 183 yield method.name 180 184 181 @expose_rpc('XML_RPC', str, str)182 185 def methodHelp(self, req, method): 183 186 """ This method takes one parameter, the name of a method implemented … … 189 192 return '\n'.join((p.signature, '', p.description)) 190 193 191 @expose_rpc('XML_RPC', list, str)192 194 def methodSignature(self, req, method): 193 195 """ This method takes one parameter, the name of a method implemented xmlrpcplugin/0.9/tracrpc/ticket.py
r226 r229 1 1 from trac.core import * 2 from tracrpc.api import AbstractRPCHandler, expose_rpc2 from tracrpc.api import IXMLRPCHandler, expose_rpc 3 3 import trac.ticket.model as model 4 4 import trac.ticket.query as query … … 6 6 import xmlrpclib 7 7 8 class TicketRPC( AbstractRPCHandler):8 class TicketRPC(Component): 9 9 """ An interface to Trac's ticketing system. """ 10 11 implements(IXMLRPCHandler) 10 12 11 13 # IXMLRPCHandler methods … … 13 15 return 'ticket' 14 16 17 def xmlrpc_methods(self): 18 yield ('TICKET_VIEW', ((list,), (list, str)), self.query) 19 yield ('TICKET_VIEW', ((list, int),), self.get) 20 yield ('TICKET_CREATE', ((int, str, str), (int, str, str, dict)), self.create) 21 yield ('TICKET_APPEND', ((list, int, str), (list, int, str, dict)), self.update) 22 yield ('TICKET_ADMIN', ((None, int),), self.delete) 23 yield ('TICKET_VIEW', ((dict, int), (dict, int, int)), self.changeLog) 24 15 25 # Exported methods 16 @expose_rpc('TICKET_VIEW', list)17 @expose_rpc('TICKET_VIEW', list, str)18 26 def query(self, qstr = 'status!=closed'): 19 27 """ Perform a ticket query, returning a list of ticket ID's. """ … … 24 32 return out 25 33 26 @expose_rpc('TICKET_VIEW', list, int)27 34 def get(self, id): 28 35 """ Fetch a ticket. Returns [id, time_created, time_changed, attributes]. """ … … 30 37 return (t.id, t.time_created, t.time_changed, t.values) 31 38 32 @expose_rpc('TICKET_CREATE', int, str, str)33 @expose_rpc('TICKET_CREATE', int, str, str, dict)34 39 def create(self, summary, description, attributes = {}): 35 40 """ Create a new ticket, returning the ticket ID. """ … … 42 47 return t.id 43 48 44 @expose_rpc('TICKET_APPEND', list, int, str)45 @expose_rpc('TICKET_APPEND', list, int, str, dict)46 49 def update(self, req, id, comment, attributes = {}): 47 50 """ Update a ticket, returning the new ticket in the same form as getTicket(). """ … … 52 55 return self.getTicket(t.id) 53 56 54 @expose_rpc('TICKET_ADMIN', str, int)55 57 def delete(self, id): 56 58 """ Delete ticket with the given id. """ … … 58 60 t.delete() 59 61 60 @expose_rpc('TICKET_VIEW', dict, int)61 @expose_rpc('TICKET_VIEW', dict, int, int)62 62 def changeLog(self, id, when = 0): 63 63 t = model.Ticket(self.env, id) … … 70 70 def ticketModelFactory(cls, cls_attributes): 71 71 """ Return a class which exports an interface to trac.ticket.model.<cls>. """ 72 class TicketModelImpl(AbstractRPCHandler): 72 class TicketModelImpl(Component): 73 implements(IXMLRPCHandler) 74 73 75 def xmlrpc_namespace(self): 74 76 return 'ticket.' + cls.__name__.lower() 75 77 76 @expose_rpc('TICKET_VIEW', list) 78 def xmlrpc_methods(self): 79 yield ('TICKET_VIEW', ((list,),), self.getAll) 80 yield ('TICKET_VIEW', ((dict, str),), self.get) 81 yield ('TICKET_ADMIN', ((None, str,),), self.delete) 82 yield ('TICKET_ADMIN', ((None, str, dict),), self.create) 83 yield ('TICKET_ADMIN', ((None, str, dict),), self.update) 84 77 85 def getAll(self): 78 86 for i in cls.select(self.env): … … 80 88 getAll.__doc__ = """ Get a list of all ticket %s names. """ % cls.__name__.lower() 81 89 82 @expose_rpc('TICKET_VIEW', dict, str)83 90 def get(self, name): 84 91 i = cls(self.env, name) … … 89 96 get.__doc__ = """ Get a ticket %s. """ % cls.__name__.lower() 90 97 91 @expose_rpc('TICKET_ADMIN', None, str)92 98 def delete(self, name): 93 99 cls(self.env, name).delete() 94 100 delete.__doc__ = """ Delete a ticket %s """ % cls.__name__.lower() 95 101 96 @expose_rpc('TICKET_ADMIN', None, str, dict)97 102 def create(self, name, attributes): 98 103 self._updateHelper(name, attributes).insert() 99 104 create.__doc__ = """ Create a new ticket %s with the given attributes. """ % cls.__name__.lower() 100 105 101 @expose_rpc('TICKET_ADMIN', None, str, dict)102 106 def update(self, name, attributes): 103 107 self._updateHelper(name, attributes).update() … … 116 120 def ticketEnumFactory(cls): 117 121 """ Return a class which exports an interface to one of the Trac ticket abstract enum types. """ 118 class AbstractEnumImpl(AbstractRPCHandler): 122 class AbstractEnumImpl(Component): 123 implements(IXMLRPCHandler) 124 119 125 def xmlrpc_namespace(self): 120 126 return 'ticket.' + cls.__name__.lower() 121 127 122 @expose_rpc('TICKET_VIEW', list) 128 def xmlrpc_methods(self): 129 yield ('TICKET_VIEW', ((list,),), self.getAll) 130 yield ('TICKET_VIEW', ((str, str),), self.get) 131 yield ('TICKET_ADMIN', ((None, str,),), self.delete) 132 yield ('TICKET_ADMIN', ((None, str, str),), self.create) 133 yield ('TICKET_ADMIN', ((None, str, str),), self.update) 134 123 135 def getAll(self): 124 136 for i in cls.select(self.env): … … 126 138 getAll.__doc__ = """ Get a list of all ticket %s names. """ % cls.__name__.lower() 127 139 128 @expose_rpc('TICKET_VIEW', str, str)129 140 def get(self, name): 130 141 i = cls(self.env, name) … … 132 143 get.__doc__ = """ Get a ticket %s. """ % cls.__name__.lower() 133 144 134 @expose_rpc('TICKET_ADMIN', None, str)135 145 def delete(self, name): 136 146 cls(self.env, name).delete() 137 147 delete.__doc__ = """ Delete a ticket %s """ % cls.__name__.lower() 138 148 139 @expose_rpc('TICKET_ADMIN', None, str, str)140 149 def create(self, name, value): 141 150 self._updateHelper(name, value).insert() 142 151 create.__doc__ = """ Create a new ticket %s with the given value. """ % cls.__name__.lower() 143 152 144 @expose_rpc('TICKET_ADMIN', None, str, str)145 153 def update(self, name, value): 146 154 self._updateHelper(name, value).update() xmlrpcplugin/0.9/tracrpc/web_ui.py
r227 r229 39 39 'namespace' : method.namespace, 40 40 } 41 namespaces[namespace]['methods'].append((method.signature, wiki_to_oneliner(method.description, self.env), method.permission)) 41 try: 42 namespaces[namespace]['methods'].append((method.signature, wiki_to_oneliner(method.description, self.env), method.permission)) 43 except Exception, e: 44 raise Exception('%s: %s' % (method.name, str(e))) 42 45 req.hdf['xmlrpc.functions'] = namespaces 43 46 return 'xmlrpclist.cs', None xmlrpcplugin/0.9/tracrpc/wiki.py
r225 r229 12 12 from trac.wiki.formatter import wiki_to_html 13 13 from trac.attachment import Attachment 14 from tracrpc.api import AbstractRPCHandler, expose_rpc14 from tracrpc.api import IXMLRPCHandler, expose_rpc 15 15 16 class WikiRPC( AbstractRPCHandler):16 class WikiRPC(Component): 17 17 """ Implementation of the [http://www.jspwiki.org/Wiki.jsp?page=WikiRPCInterface2 WikiRPC API]. """ 18 19 implements(IXMLRPCHandler) 18 20 19 21 def __init__(self): … … 22 24 def xmlrpc_namespace(self): 23 25 return 'wiki' 26 27 def xmlrpc_methods(self): 28 yield ('WIKI_VIEW', ((dict, xmlrpclib.DateTime),), self.getRecentChanges) 29 yield ('WIKI_VIEW', ((int,),), self.getRPCVersionSupported) 30 yield ('WIKI_VIEW', ((str, str), (str, str, int),), self.getPage) 31 yield ('WIKI_VIEW', ((str, str, int),), self.getPage, 'getPageVersion') 32 yield ('WIKI_VIEW', ((str, str), (str, str, int)), self.getPageHTML) 33 yield ('WIKI_VIEW', ((str, str), (str, str, int)), self.getPageHTML, 'getPageHTMLVersion') 34 yield ('WIKI_VIEW', ((list,),), self.getAllPages) 35 yield ('WIKI_VIEW', ((dict, str), (dict, str, int)), self.getPageInfo) 36 yield ('WIKI_VIEW', ((dict, str, int),), self.getPageInfo, 'getPageInfoVersion') 37 yield ('WIKI_VIEW', ((bool, str, str, dict),), self.putPage) 38 yield ('WIKI_VIEW', ((list, str),), self.listAttachments) 39 yield ('WIKI_VIEW', ((xmlrpclib.Binary, str),), self.getAttachment) 40 yield ('WIKI_MODIFY', ((bool, str, str, xmlrpclib.Binary),), self.putAttachment) 41 yield ('WIKI_VIEW', ((list, str),), self.listLinks) 24 42 25 43 def _to_timestamp(self, datetime): … … 31 49 author=author, version=int(version)) 32 50 33 @expose_rpc('WIKI_VIEW', dict, xmlrpclib.DateTime)34 51 def getRecentChanges(self, since): 35 52 """ Get list of changed pages since timestamp """ … … 44 61 return result 45 62 46 @expose_rpc('WIKI_VIEW', int)47 63 def getRPCVersionSupported(self): 48 64 """ Returns 2 with this version of the Trac API. """ 49 65 return 2 50 66 51 @expose_rpc('WIKI_VIEW', str, str)52 @expose_rpc('WIKI_VIEW', str, str, int)53 67 def getPage(self, pagename, version=None): 54 68 """ Get the raw Wiki text of page, latest version. """ … … 62 76 raise xmlrpclib.Fault(0, msg) 63 77 64 getPageVersion = getPage65 66 @expose_rpc('WIKI_VIEW', str, str)67 @expose_rpc('WIKI_VIEW', str, str, int)68 78 def getPageHTML(self, req, pagename, version=None): 69 79 """ Return page in rendered HTML, latest version. """ … … 72 82 return '<html><body>%s</body></html>' % html 73 83 74 getPageHTMLVersion = getPageHTML75 76 @expose_rpc('WIKI_VIEW', list)77 84 def getAllPages(self): 78 85 """ Returns a list of all pages. The result is an array of utf8 pagenames. """ 79 86 return list(self.wiki.get_pages()) 80 87 81 @expose_rpc('WIKI_VIEW', dict, str)82 @expose_rpc('WIKI_VIEW', dict, str, int)83 88 def getPageInfo(self, pagename, version=None): 84 89 """ Returns information about the given page. """ … … 88 93 page.version) 89 94 90 getPageInfoVersion = getPageInfo91 92 @expose_rpc('WIKI_VIEW', bool, str, str, dict)93 95 def putPage(self, req, pagename, content, attributes): 94 96 """ writes the content of the page. """ … … 110 112 return True 111 113 112 @expose_rpc('WIKI_VIEW', list, str)113 114 def listAttachments(self, pagename): 114 115 """ Lists attachments on a given page. """ 115 116 return [pagename + '/' + a.filename for a in Attachment.select(self.env, 'wiki', pagename)] 116 117 117 @expose_rpc('WIKI_VIEW', xmlrpclib.Binary, str)118 118 def getAttachment(self, path): 119 119 """ returns the content of an attachment. """ … … 122 122 return xmlrpclib.Binary(attachment.open().read()) 123 123 124 @expose_rpc('WIKI_MODIFY', bool, str, str, xmlrpclib.Binary)125 124 def putAttachment(self, path, data): 126 125 """ (over)writes an attachment. """ … … 132 131 return True 133 132 134 @expose_rpc('WIKI_VIEW', list, str)135 133 def listLinks(self, pagename): 136 134 """ ''Not implemented'' """
