Changeset 4092

Show
Ignore:
Timestamp:
07/31/08 08:01:17 (4 months ago)
Author:
athomas
Message:

Branch 0.11 version. Fix some FD leaks, use config.Option, make Wiki
formatting work.

Files:

Legend:

Unmodified
Added
Removed
Modified
Copied
Moved
  • pollmacro/0.11/setup.py

    r675 r4092  
    22 
    33setup(name='TracPoll', 
    4       version='0.1', 
     4      version='0.2', 
    55      packages=['tracpoll'], 
    66      entry_points = {'trac.plugins': ['tracpoll = tracpoll']}, 
  • pollmacro/0.11/tracpoll/tracpoll.py

    r1156 r4092  
    44from StringIO import StringIO 
    55from trac.core import * 
     6from trac.config import Option 
    67from trac.perm import IPermissionRequestor 
    78from trac.util import sorted, escape 
    89from trac.wiki.formatter import wiki_to_oneliner 
     10from trac.wiki.macros import WikiMacroBase 
    911from trac.web.chrome import ITemplateProvider, add_stylesheet 
    1012 
     
    2224        self.votes = {} 
    2325        if os.path.isfile(self.store): 
    24             poll = pickle.load(open(self.store, 'r')) 
     26            fd = open(self.store, 'r') 
     27            try: 
     28                poll = pickle.load(fd) 
     29            finally: 
     30                fd.close() 
    2531            assert self.title == poll['title'], \ 
    2632                   'Stored poll is not the same as this one.' 
     
    3339        data = {'title': self.title, 
    3440                'votes': self.votes} 
    35         pickle.dump(data, open(self.store, 'w')) 
     41        if not os.path.exists(os.path.dirname(self.store)): 
     42            raise TracError('Vote path %s does not exist.' % self.store) 
     43        fd = open(self.store, 'w') 
     44        try: 
     45            pickle.dump(data, fd) 
     46        finally: 
     47            fd.close() 
    3648 
    3749    def populate(self, req): 
     
    8597        return out.getvalue() 
    8698 
    87 try: 
    88     from trac.wiki.macros import WikiMacroBase 
    89 except ImportError: 
    90     # TODO Remove this when ported to 0.10 
    91     from trac.wiki.api import IWikiMacroProvider 
    92  
    93     class WikiMacroBase(Component): 
    94         """Abstract base class for wiki macros.""" 
    95  
    96         implements(IWikiMacroProvider) 
    97         abstract = True 
    98  
    99         def get_macros(self): 
    100             """Yield the name of the macro based on the class name.""" 
    101             name = self.__class__.__name__ 
    102             if name.endswith('Macro'): 
    103                 name = name[:-5] 
    104             yield name 
    105  
    106         def get_macro_description(self, name): 
    107             """Return the subclass's docstring.""" 
    108             return inspect.getdoc(self.__class__) 
    109  
    110         def render_macro(self, req, name, content): 
    111             raise NotImplementedError 
    11299 
    113100class PollMacro(WikiMacroBase): 
     
    132119    implements(IPermissionRequestor, ITemplateProvider) 
    133120 
    134     base_dir = property(lambda self: self.env.config.get('poll', 'base_dir', '/tmp')) 
     121    base_dir = Option('poll', 'base_dir', '/tmp', 
     122                      'Path where poll pickle dumps should be stored.') 
    135123 
    136124    def render_macro(self, req, name, content): 
     
    163151            else: 
    164152                all_votes.append(('%08x' % abs(hash(vote)), None, 
    165                                  wiki_to_oneliner(vote, self.env))) 
     153                                 wiki_to_oneliner(vote, self.env, req=req))) 
    166154 
    167155            # Make tickets look pretty 
     
    173161                summary = ticket['summary'] + ' (#%i)' % id 
    174162                priority = Priority(self.env, ticket['priority']).value 
    175                 summary = wiki_to_oneliner(summary, self.env
     163                summary = wiki_to_oneliner(summary, self.env, req=req
    176164 
    177165                all_votes.append((str(id), "ticket prio%s%s%s" %