Changeset bec0f91e7ebfaaa4dc1e68fc38b962a367de50cc


Ignore:
Timestamp:
29.07.2013 23:40:25 (8 years ago)
Author:
Stanislaw Klekot <dozzie@…>
Branches:
b66903eafbcb1d49112014abc82c8bf683413db0
Children:
d07daf77017d09ba3fc30d8f9a74fda6b355c25b
Parents:
e4fed12c4c7b0b5e55e7b13ae562d0e85b9216a7
git-author:
Stanislaw Klekot <dozzie@…> (29.07.2013 23:40:25)
git-committer:
Stanislaw Klekot <dozzie@…> (29.07.2013 23:40:25)
Message:

Added artificial safety wrapper for template tag.

This way it won't blow up whole application on any problem.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • dashwiki/markup/templatetags/dashmarkup.py

    r09576b rbec0f9  
    100100# dashmarkup_to_html() {{{ 
    101101 
    102 @register.filter(name = "dashmarkup") 
    103102def dashmarkup_to_html(tree): 
    104103  def skip_special(node, children): 
     
    126125# }}} 
    127126#----------------------------------------------------------------------------- 
     127# {{{ 
     128 
     129@register.filter(name = "dashmarkup") 
     130def dashmarkup_to_html_ensure_safe(tree): 
     131  import traceback 
     132  try: 
     133    return dashmarkup_to_html(tree) 
     134  except Exception, e: 
     135    e_type    = e.__class__.__name__ 
     136    e_module  = e.__class__.__module__ 
     137    e_message = str(e) 
     138    e_trace   = traceback.format_exc() 
     139 
     140    try: 
     141      from dashwiki.logging import getLogger, message as log 
     142      logger = getLogger(__name__) 
     143      # unfortunately I can't tell here which page is it 
     144      logger.warn(log( 
     145        'error in dashmarkup template tag, AST is invalid?', 
     146        exception = { 
     147          'type': '%s.%s' % (e_module, e_type), 
     148          'message': e_message, 
     149          'traceback': e_trace, 
     150        }, 
     151      )) 
     152    except: 
     153      # don't insist on logging if can't be done 
     154      pass 
     155 
     156    html = "\n".join([ 
     157      '<div class="error">', 
     158      'Error occurred in <i>dashmarkup</i> template tag.', 
     159      'This means that probably the syntax tree is incorrect somehow.', 
     160      'Please inform your system administrator about this issue.', 
     161      '<br/>', 
     162      '<br/>', 
     163      'Error type: <i>%s.%s</i>' % (e_module, e_type), 
     164      '<br/>', 
     165      'Message: <i>%s</i>' % escape(e_message), 
     166      '<br/>', 
     167      'Python stack trace:', 
     168      '<pre>', 
     169      escape(e_trace), 
     170      '</pre>', 
     171      '</div>', 
     172    ]) 
     173    return mark_safe(html) 
     174 
     175# }}} 
     176#----------------------------------------------------------------------------- 
    128177# vim:ft=python:foldmethod=marker 
Note: See TracChangeset for help on using the changeset viewer.