~ubuntu-branches/ubuntu/precise/trac/precise

« back to all changes in this revision

Viewing changes to trac/web/clearsilver.py

  • Committer: Bazaar Package Importer
  • Author(s): Luis Matos
  • Date: 2008-07-13 23:46:20 UTC
  • mfrom: (1.1.13 upstream)
  • Revision ID: james.westby@ubuntu.com-20080713234620-13ynpdpkbaymfg1z
Tags: 0.11-2
* Re-added python-setup-tools to build dependences. Closes: #490320 #468705
* New upstream release Closes: 489727
* Added sugestion for other vcs support available: git bazaar mercurial 
* Added spamfilter plugin to sugests
* Moved packaging from python-support to python-central
* Added an entry to the NEWS about the cgi Closes: #490275
* Updated 10_remove_trac_suffix_from_title patch to be used in 0.11

Show diffs side-by-side

added added

removed removed

Lines of Context:
108
108
    False
109
109
    """
110
110
 
 
111
    has_clearsilver = None
 
112
    
111
113
    def __init__(self, loadpaths=[]):
112
114
        """Create a new HDF dataset.
113
115
        
131
133
            neo_cgi.update()
132
134
            import neo_util
133
135
            self.hdf = neo_util.HDF()
 
136
            self.has_clearsilver = True
134
137
        except ImportError, e:
135
 
            raise TracError, "ClearSilver not installed (%s)" % e
 
138
            self.has_clearsilver = False
136
139
        
137
140
        self['hdf.loadpaths'] = loadpaths
138
141
 
 
142
    def __repr__(self):
 
143
        return '<HDFWrapper 0x%x>' % id(self)
 
144
 
 
145
    def __nonzero__(self):
 
146
        return self.has_clearsilver
 
147
 
139
148
    def __getattr__(self, name):
140
149
        # For backwards compatibility, expose the interface of the underlying HDF
141
150
        # object
142
 
        return getattr(self.hdf, name)
 
151
        if self.has_clearsilver:
 
152
            return getattr(self.hdf, name)
 
153
        else:
 
154
            return None
143
155
 
144
156
    def __contains__(self, name):
145
157
        return self.hdf.getObj(str(name)) != None
209
221
        """
210
222
        Add data to the HDF dataset.
211
223
        """
 
224
        if not self.has_clearsilver:
 
225
            return
212
226
        def set_unicode(prefix, value):
213
227
            self.hdf.setValue(prefix.encode('utf-8'), value.encode('utf-8'))
214
228
        def set_str(prefix, value):
234
248
                    set_unicode(prefix, value)
235
249
            elif isinstance(value, dict):
236
250
                for k in value.keys():
237
 
                    add_value('%s.%s' % (prefix, k), value[k])
 
251
                    add_value('%s.%s' % (prefix, to_unicode(k)), value[k])
238
252
            else:
239
253
                if hasattr(value, '__iter__') or \
240
254
                        isinstance(value, (list, tuple)):
285
299
        """
286
300
        if isinstance(template, basestring):
287
301
            filename = template
288
 
            import neo_cs
 
302
            try:
 
303
                import neo_cs
 
304
            except ImportError:
 
305
                raise TracError("You're using a plugin which requires "
 
306
                                "the Clearsilver template engine and "
 
307
                                "Clearsilver is not installed. "
 
308
                                "Either disable that plugin or install "
 
309
                                "Clearsilver.")
289
310
            template = neo_cs.CS(self.hdf)
290
311
            template.parseFile(filename)
291
312
 
302
323
class FormTokenInjector(HTMLParser):
303
324
    """Identify and protect forms from CSRF attacks
304
325
 
305
 
    This filter works by adding a hidden input field to all POST forms.
 
326
    This filter works by adding a input type=hidden field to POST forms.
306
327
    """
307
328
    def __init__(self, form_token, out):
308
329
        HTMLParser.__init__(self)
314
335
        if tag.lower() == 'form':
315
336
            for name, value in attrs:
316
337
                if name.lower() == 'method' and value.lower() == 'post':
317
 
                    self.out.write('<div><input type="hidden" '
318
 
                                   ' name="__FORM_TOKEN" value="%s" /></div>'
319
 
                                   % self.token)
 
338
                    self.out.write('<input type="hidden" name="__FORM_TOKEN"'
 
339
                                   ' value="%s"/>' % self.token)
320
340
                    break
321
 
 
 
341
                    
322
342
    def handle_startendtag(self, tag, attrs):
323
343
        self.out.write(self.get_starttag_text())
324
 
 
 
344
        
325
345
    def handle_charref(self, name):
326
346
        self.out.write('&#%s;' % name)
327
347
 
335
355
        self.out.write('<!%s>' % data)
336
356
 
337
357
    def handle_pi(self, data):
338
 
        self.out.write('<?%s>' % data)
 
358
        self.out.write('<?%s?>' % data)
339
359
 
340
360
    def handle_data(self, data):
341
361
        self.out.write(data)