Ticket #1075: xmlrpc-datetime.patch

File xmlrpc-datetime.patch, 5.7 kB (added by eblot, 1 year ago)

Cumulative patch: supersedes the previous patch, add support for datetime API

  • 0.10/tracrpc/api.py

    old new  
    224224        version number, second is the minor. Changes to the major version 
    225225        indicate API breaking changes, while minor version changes are simple 
    226226        additions, bug fixes, etc. """ 
    227         return [0, 2
     227        return [0, 3
  • 0.10/tracrpc/web_ui.py

    old new  
     1from pkg_resources import resource_filename 
    12from trac.core import * 
    23from trac.web.main import IRequestHandler 
    34from trac.web.chrome import ITemplateProvider, add_stylesheet 
     
    7374        return [] 
    7475 
    7576    def get_templates_dirs(self): 
    76         from pkg_resources import resource_filename 
    7777        return [resource_filename(__name__, 'templates')] 
  • 0.10/tracrpc/util.py

    old new  
    11import time 
     2import xmlrpclib 
    23 
    34def to_timestamp(datetime): 
    45    """ Convert xmlrpclib.DateTime string representation to UNIX timestamp. """ 
    56    return time.mktime(time.strptime('%s UTC' % datetime.value, '%Y%m%dT%H:%M:%S %Z')) - time.timezone 
     7 
     8def to_datetime(dt): 
     9    """ Convert a datetime.datetime object to a xmlrpclib DateTime object """ 
     10    return xmlrpclib.DateTime(dt.utctimetuple()) 
  • 0.10/tracrpc/ticket.py

    old new  
    11from trac.attachment import Attachment 
    22from trac.core import * 
    33from tracrpc.api import IXMLRPCHandler, expose_rpc 
    4 from tracrpc.util import to_timestamp 
     4from tracrpc.util import to_timestamp, to_datetime 
    55import trac.ticket.model as model 
    66import trac.ticket.query as query 
    77from trac.ticket.api import TicketSystem 
     
    4242    # Exported methods 
    4343    def query(self, req, qstr='status!=closed'): 
    4444        """ Perform a ticket query, returning a list of ticket ID's. """ 
    45         q = query.Query.from_string(self.env, qstr) 
     45        q = query.Query.from_string(self.env, req, qstr) 
    4646        out = [] 
    4747        for t in q.execute(req): 
    4848            out.append(t['id']) 
     
    6969    def get(self, req, id): 
    7070        """ Fetch a ticket. Returns [id, time_created, time_changed, attributes]. """ 
    7171        t = model.Ticket(self.env, id) 
    72         return (t.id, t.time_created, t.time_changed, t.values) 
     72        return (t.id, to_datetime(t.time_created),  
     73                to_datetime(t.time_changed), t.values) 
    7374 
    7475    def create(self, req, summary, description, attributes = {}, notify=False): 
    7576        """ Create a new ticket, returning the ticket ID. """ 
     
    126127        """ Lists attachments for a given ticket. Returns (filename, 
    127128        description, size, time, author) for each attachment.""" 
    128129        for t in Attachment.select(self.env, 'ticket', ticket): 
    129             yield (t.filename, t.description or '', t.size, t.time, t.author) 
     130            yield (t.filename, t.description or '', t.size,  
     131                   to_datetime(t.date), t.author) 
    130132 
    131133    def getAttachment(self, req, ticket, filename): 
    132134        """ returns the content of an attachment. """ 
  • 0.10/tracrpc/wiki.py

    old new  
    44    from StringIO import StringIO 
    55import xmlrpclib 
    66import posixpath 
     7import time 
    78 
    89from trac.core import * 
    910from trac.perm import IPermissionRequestor 
     
    1213from trac.wiki.formatter import wiki_to_html 
    1314from trac.attachment import Attachment 
    1415from tracrpc.api import IXMLRPCHandler, expose_rpc 
    15 from tracrpc.util import to_timestamp 
     16from tracrpc.util import to_timestamp, to_datetime 
    1617 
    1718class WikiRPC(Component): 
    1819    """ Implementation of the [http://www.jspwiki.org/Wiki.jsp?page=WikiRPCInterface2 WikiRPC API]. """ 
     
    9293        page = WikiPage(self.env, pagename, version) 
    9394        if page.exists: 
    9495            last_update = page.get_history().next() 
    95             return self._page_info(page.name, last_update[1], last_update[2], 
    96                                    page.version) 
     96            return self._page_info(page.name,  
     97                                   time.mktime(last_update[1].utctimetuple()),  
     98                                   last_update[2], page.version) 
    9799 
    98100    def putPage(self, req, pagename, content, attributes): 
    99101        """ writes the content of the page. """ 
  • 0.10/tracrpc/search.py

    old new  
    11from trac.core import * 
    22from tracrpc.api import IXMLRPCHandler 
    3 from trac.Search import ISearchSource 
     3from tracrpc.util import to_datetime 
     4from trac.search import ISearchSource 
    45 
    56try: 
    67    a = set() 
     
    4647        self.env.log.debug("Searching with %s" % filters) 
    4748 
    4849        results = [] 
     50        converters = [unicode, unicode, to_datetime, unicode, unicode]           
    4951        for source in self.search_sources: 
    5052            for result in source.get_search_results(req, query, filters): 
    51                 result = map(unicode, result) 
     53                result = [f(v) for f,v in zip(converters, result)] 
    5254                results.append(['/'.join(req.base_url.split('/')[0:3]) 
    5355                                + result[0]] + list(result[1:])) 
    5456        return results