web/views/management.py
branchstable
changeset 2312 af4d8f75c5db
parent 2270 70c0da0f2181
child 2381 caad2367d940
equal deleted inserted replaced
2311:f178182b1305 2312:af4d8f75c5db
     7 :license: GNU Lesser General Public License, v2.1 - http://www.gnu.org/licenses
     7 :license: GNU Lesser General Public License, v2.1 - http://www.gnu.org/licenses
     8 """
     8 """
     9 __docformat__ = "restructuredtext en"
     9 __docformat__ = "restructuredtext en"
    10 _ = unicode
    10 _ = unicode
    11 
    11 
    12 from logilab.mtconverter import html_escape
    12 from logilab.mtconverter import xml_escape
    13 
    13 
    14 from cubicweb.selectors import yes, none_rset, match_user_groups, authenticated_user
    14 from cubicweb.selectors import yes, none_rset, match_user_groups, authenticated_user
    15 from cubicweb.view import AnyRsetView, StartupView, EntityView
    15 from cubicweb.view import AnyRsetView, StartupView, EntityView
    16 from cubicweb.common.uilib import html_traceback, rest_traceback
    16 from cubicweb.common.uilib import html_traceback, rest_traceback
    17 from cubicweb.web import formwidgets as wdgs
    17 from cubicweb.web import formwidgets as wdgs
    82         entity = self.entity(row, col)
    82         entity = self.entity(row, col)
    83         w = self.w
    83         w = self.w
    84         _ = self.req._
    84         _ = self.req._
    85         w(u'<h1><span class="etype">%s</span> <a href="%s">%s</a></h1>'
    85         w(u'<h1><span class="etype">%s</span> <a href="%s">%s</a></h1>'
    86           % (entity.dc_type().capitalize(),
    86           % (entity.dc_type().capitalize(),
    87              html_escape(entity.absolute_url()),
    87              xml_escape(entity.absolute_url()),
    88              html_escape(entity.dc_title())))
    88              xml_escape(entity.dc_title())))
    89         # first show permissions defined by the schema
    89         # first show permissions defined by the schema
    90         self.w('<h2>%s</h2>' % _('schema\'s permissions definitions'))
    90         self.w('<h2>%s</h2>' % _('schema\'s permissions definitions'))
    91         self.schema_definition(entity.e_schema)
    91         self.schema_definition(entity.e_schema)
    92         self.w('<h2>%s</h2>' % _('manage security'))
    92         self.w('<h2>%s</h2>' % _('manage security'))
    93         # ownership information
    93         # ownership information
   139                 delurl = delurl.replace('%', '%%')
   139                 delurl = delurl.replace('%', '%%')
   140                 # don't give __delete value to build_url else it will be urlquoted
   140                 # don't give __delete value to build_url else it will be urlquoted
   141                 # and this will replace %s by %25s
   141                 # and this will replace %s by %25s
   142                 delurl += '&__delete=%s:require_permission:%%s' % entity.eid
   142                 delurl += '&__delete=%s:require_permission:%%s' % entity.eid
   143                 dellinktempl = u'[<a href="%s" title="%s">-</a>]&nbsp;' % (
   143                 dellinktempl = u'[<a href="%s" title="%s">-</a>]&nbsp;' % (
   144                     html_escape(delurl), _('delete this permission'))
   144                     xml_escape(delurl), _('delete this permission'))
   145             else:
   145             else:
   146                 dellinktempl = None
   146                 dellinktempl = None
   147             w(u'<table class="schemaInfo">')
   147             w(u'<table class="schemaInfo">')
   148             w(u'<tr><th>%s</th><th>%s</th></tr>' % (_("permission"),
   148             w(u'<tr><th>%s</th><th>%s</th></tr>' % (_("permission"),
   149                                                     _('granted to groups')))
   149                                                     _('granted to groups')))
   216             exclass = ex.__class__.__name__
   216             exclass = ex.__class__.__name__
   217             ex = exc_message(ex, req.encoding)
   217             ex = exc_message(ex, req.encoding)
   218         if excinfo is not None and self.config['print-traceback']:
   218         if excinfo is not None and self.config['print-traceback']:
   219             if exclass is None:
   219             if exclass is None:
   220                 w(u'<div class="tb">%s</div>'
   220                 w(u'<div class="tb">%s</div>'
   221                        % html_escape(ex).replace("\n","<br />"))
   221                        % xml_escape(ex).replace("\n","<br />"))
   222             else:
   222             else:
   223                 w(u'<div class="tb">%s: %s</div>'
   223                 w(u'<div class="tb">%s: %s</div>'
   224                        % (exclass, html_escape(ex).replace("\n","<br />")))
   224                        % (exclass, xml_escape(ex).replace("\n","<br />")))
   225             w(u'<hr />')
   225             w(u'<hr />')
   226             w(u'<div class="tb">%s</div>' % html_traceback(excinfo, ex, ''))
   226             w(u'<div class="tb">%s</div>' % html_traceback(excinfo, ex, ''))
   227         else:
   227         else:
   228             w(u'<div class="tb">%s</div>' % (html_escape(ex).replace("\n","<br />")))
   228             w(u'<div class="tb">%s</div>' % (xml_escape(ex).replace("\n","<br />")))
   229         # if excinfo is not None, it's probably not a bug
   229         # if excinfo is not None, it's probably not a bug
   230         if excinfo is None:
   230         if excinfo is None:
   231             return
   231             return
   232         vcconf = self.config.vc_config()
   232         vcconf = self.config.vc_config()
   233         w(u"<div>")
   233         w(u"<div>")
   270             return unicode(str(ex), encoding, 'replace')
   270             return unicode(str(ex), encoding, 'replace')
   271         except:
   271         except:
   272             return unicode(repr(ex), encoding, 'replace')
   272             return unicode(repr(ex), encoding, 'replace')
   273 
   273 
   274 def text_error_description(ex, excinfo, req, eversion, cubes):
   274 def text_error_description(ex, excinfo, req, eversion, cubes):
   275     binfo = rest_traceback(excinfo, html_escape(ex))
   275     binfo = rest_traceback(excinfo, xml_escape(ex))
   276     binfo += u'\n\n:URL: %s\n' % req.url()
   276     binfo += u'\n\n:URL: %s\n' % req.url()
   277     if not '__bugreporting' in req.form:
   277     if not '__bugreporting' in req.form:
   278         binfo += u'\n:form params:\n'
   278         binfo += u'\n:form params:\n'
   279         binfo += u'\n'.join(u'  * %s = %s' % (k, v) for k, v in req.form.iteritems())
   279         binfo += u'\n'.join(u'  * %s = %s' % (k, v) for k, v in req.form.iteritems())
   280     binfo += u'\n\n:CubicWeb version: %s\n'  % (eversion,)
   280     binfo += u'\n\n:CubicWeb version: %s\n'  % (eversion,)
   320             return
   320             return
   321         self.w(u'<h3>%s</h3>' % _('Environment'))
   321         self.w(u'<h3>%s</h3>' % _('Environment'))
   322         self.w(u'<table border="1">')
   322         self.w(u'<table border="1">')
   323         for attr in env.keys():
   323         for attr in env.keys():
   324             self.w(u'<tr><th align="left">%s</th><td>%s</td></tr>'
   324             self.w(u'<tr><th align="left">%s</th><td>%s</td></tr>'
   325                    % (attr, html_escape(env[attr])))
   325                    % (attr, xml_escape(env[attr])))
   326         self.w(u'</table>')
   326         self.w(u'</table>')
   327         self.w(u'<h3>%s</h3>' % _('Request'))
   327         self.w(u'<h3>%s</h3>' % _('Request'))
   328         self.w(u'<table border="1">')
   328         self.w(u'<table border="1">')
   329         for attr in ('filename', 'form', 'hostname', 'main', 'method',
   329         for attr in ('filename', 'form', 'hostname', 'main', 'method',
   330                      'path_info', 'protocol',
   330                      'path_info', 'protocol',
   331                      'search_state', 'the_request', 'unparsed_uri', 'uri'):
   331                      'search_state', 'the_request', 'unparsed_uri', 'uri'):
   332             val = getattr(req, attr)
   332             val = getattr(req, attr)
   333             self.w(u'<tr><th align="left">%s</th><td>%s</td></tr>'
   333             self.w(u'<tr><th align="left">%s</th><td>%s</td></tr>'
   334                    % (attr, html_escape(val)))
   334                    % (attr, xml_escape(val)))
   335         self.w(u'</table>')
   335         self.w(u'</table>')
   336         server = req.server
   336         server = req.server
   337         self.w(u'<h3>%s</h3>' % _('Server'))
   337         self.w(u'<h3>%s</h3>' % _('Server'))
   338         self.w(u'<table border="1">')
   338         self.w(u'<table border="1">')
   339         for attr in dir(server):
   339         for attr in dir(server):
   340             val = getattr(server, attr)
   340             val = getattr(server, attr)
   341             if attr.startswith('_') or callable(val):
   341             if attr.startswith('_') or callable(val):
   342                 continue
   342                 continue
   343             self.w(u'<tr><th align="left">%s</th><td>%s</td></tr>'
   343             self.w(u'<tr><th align="left">%s</th><td>%s</td></tr>'
   344                    % (attr, html_escape(val)))
   344                    % (attr, xml_escape(val)))
   345         self.w(u'</table>')
   345         self.w(u'</table>')
   346 
   346