Changeset 26


Ignore:
Timestamp:
02/11/12 08:06:13 (16 months ago)
Author:
matobaa
Message:

add snapshot for Report

Location:
trunk/Snapshot
Files:
3 edited

Legend:

Unmodified
Added
Removed
  • trunk/Snapshot/setup.py

    r21 r26  
    1212    url='http://trac-hacks.org/wiki/matobaa', 
    1313    description='store query result to wiki as static snapshot', 
    14     zip_safe=False, 
     14    zip_safe=True, 
    1515    packages=find_packages(exclude=['*.tests']), 
    1616    include_package_data=True, 
  • trunk/Snapshot/snapshot/macro.py

    r25 r26  
    4646            for field in ticket_fields: 
    4747                fields[field['name']] = {'label': field['label']} # transform list to expected dict 
     48            # fail safe 
     49            fields[None] = 'NONE' 
     50            for group in groups.keys(): 
     51                if not fields.has_key(group): 
     52                    fields[group] = group 
    4853            # 
    4954            group_name = 'group' in args and args['group'] or None 
  • trunk/Snapshot/snapshot/query.py

    r24 r26  
    66from genshi.filters.transform import Transformer 
    77from trac.core import Component, implements 
    8 from trac.util.datefmt import format_datetime 
     8from trac.resource import get_resource_url, Resource 
     9from trac.util.datefmt import format_datetime, format_time, from_utimestamp, \ 
     10    format_date 
    911from trac.web.api import ITemplateStreamFilter 
    1012from trac.wiki.model import WikiPage 
    1113 
    12 class SaveToWiki(Component): 
     14class Query(Component): 
    1315    implements (ITemplateStreamFilter) 
    1416     
     
    3335        text = '= Snapshot of [%s the query]: =\n' % query_string 
    3436        text += '{{{#!QueryResults(group=%s) \n' % data['query'].group 
    35         text += '||= href =||= ' + ' =||= '.join(cols) 
    36         text += '\n' 
     37        text += '||= href =||= %s\n' % ' =||= '.join(cols) 
    3738        for (group_name, tickets) in data['groups']: 
    3839            text += '|| group: %s\n' % group_name 
     
    4647                      tag.input(name='page', value=page_name)) 
    4748        return stream | Transformer('//div[@id="content"]/div[@class="buttons"]') \ 
    48             .append(tag.form(div, action='wiki')) 
     49            .append(tag.form(div, action=get_resource_url(self.env, Resource('wiki'), self.env.href))) 
     50             
     51class Report(Component): 
     52    implements(ITemplateStreamFilter) 
     53 
     54    @classmethod 
     55    def formatter(self, col, cell_value): 
     56        if col == 'time': 
     57            return cell_value != '' and format_time(from_utimestamp(long(cell_value))) or '--' 
     58        if col in ('date', 'created', 'modified'): 
     59            return cell_value != '' and format_date(from_utimestamp(long(cell_value))) or '--' 
     60        if col == 'datetime': 
     61            return cell_value != '' and format_datetime(from_utimestamp(long(cell_value))) or '--' 
     62        return cell_value 
     63 
     64    #ITemplateStreamFilter methods 
     65    def filter_stream(self, req, method, filename, stream, data): 
     66        if filename != 'report_view.html': 
     67            return stream 
     68        page_name = 'report:%s' % data['context'].resource.id 
     69        page_label = data['title'] 
     70        page = WikiPage(self.env, page_name) 
     71        if 'WIKI_MODIFY' not in req.perm(page.resource): 
     72            return stream 
     73        text = '= Snapshot of [%s %s]: =\n' % (page_name, page_label) 
     74        text += '{{{#!QueryResults\n' 
     75        cols = [header['col'] for header in data['header_groups'][0] if not header['hidden']] 
     76        text += '||= href =||= %s\n' % ' =||= '.join(cols) 
     77        for  groupindex, row_group in data['row_groups']: 
     78            text += '|| group: %s\n' % groupindex 
     79            for row in row_group: 
     80                row = row['cell_groups'][0] 
     81                ticket = {} 
     82                for value in row: 
     83                    ticket[value['header']['col']] = value['value'] 
     84                ticket['href'] = get_resource_url(self.env, Resource('ticket',ticket.get('ticket',0)), self.env.href) 
     85                text += '|| %s || %s\n' % ( ticket['href'] , 
     86                    ' || '.join([self.formatter(col, ticket[col]) for col in cols])) 
     87        text += '}}}' 
     88        div = tag.div(tag.input(value='Save as wiki:', type='submit'), 
     89                      tag.input(name='action', value='edit', type='hidden'), 
     90                          tag.input(name='text', value=text, type='hidden'), 
     91                      tag.input(name='page', value=page_name)) 
     92        return stream | Transformer('//div[@id="content"]/div[@class="buttons"]') \ 
     93            .append(tag.form(div, action=get_resource_url(self.env, Resource('wiki'), self.env.href))) 
Note: See TracChangeset for help on using the changeset viewer.