ext/rest.py
branchstable
changeset 6938 6c1a960735f5
parent 6275 20f30e01ae59
child 7577 9892937d9041
equal deleted inserted replaced
6937:a0d626cc538d 6938:6c1a960735f5
    45 from logilab.mtconverter import ESC_UCAR_TABLE, ESC_CAR_TABLE, xml_escape
    45 from logilab.mtconverter import ESC_UCAR_TABLE, ESC_CAR_TABLE, xml_escape
    46 
    46 
    47 from cubicweb import UnknownEid
    47 from cubicweb import UnknownEid
    48 from cubicweb.ext.html4zope import Writer
    48 from cubicweb.ext.html4zope import Writer
    49 
    49 
       
    50 from cubicweb.web.views import vid_from_rset # XXX better not to import c.w.views here...
       
    51 
    50 # We provide our own parser as an attempt to get rid of
    52 # We provide our own parser as an attempt to get rid of
    51 # state machine reinstanciation
    53 # state machine reinstanciation
    52 
    54 
    53 import re
    55 import re
    54 # compile states.Body patterns
    56 # compile states.Body patterns
    91         ref = refedentity.absolute_url()
    93         ref = refedentity.absolute_url()
    92     set_classes(options)
    94     set_classes(options)
    93     return [nodes.reference(rawtext, utils.unescape(rest), refuri=ref,
    95     return [nodes.reference(rawtext, utils.unescape(rest), refuri=ref,
    94                             **options)], []
    96                             **options)], []
    95 
    97 
       
    98 def rql_role(role, rawtext, text, lineno, inliner, options={}, content=[]):
       
    99     """:rql:`Any X,Y WHERE X is CWUser, X login Y:table`"""
       
   100     _cw = inliner.document.settings.context._cw
       
   101     text = text.strip()
       
   102     if ':' in text:
       
   103         rql, vid = text.rsplit(u':', 1)
       
   104         rql = rql.strip()
       
   105     else:
       
   106         rql, vid = text, None
       
   107     _cw.ensure_ro_rql(rql)
       
   108     rset = _cw.execute(rql, {'userid': _cw.user.eid})
       
   109     if vid is None:
       
   110         vid = vid_from_rset(_cw, rset, _cw.vreg.schema)
       
   111     view = _cw.vreg['views'].select(vid, _cw, rset=rset)
       
   112     content = view.render()
       
   113     set_classes(options)
       
   114     return [nodes.raw('', content, format='html')], []
    96 
   115 
    97 def winclude_directive(name, arguments, options, content, lineno,
   116 def winclude_directive(name, arguments, options, content, lineno,
    98                        content_offset, block_text, state, state_machine):
   117                        content_offset, block_text, state, state_machine):
    99     """Include a reST file as part of the content of this reST file.
   118     """Include a reST file as part of the content of this reST file.
   100 
   119 
   286     global _INITIALIZED
   305     global _INITIALIZED
   287     if _INITIALIZED:
   306     if _INITIALIZED:
   288         return
   307         return
   289     _INITIALIZED = True
   308     _INITIALIZED = True
   290     register_canonical_role('eid', eid_reference_role)
   309     register_canonical_role('eid', eid_reference_role)
       
   310     register_canonical_role('rql', rql_role)
   291     directives.register_directive('winclude', winclude_directive)
   311     directives.register_directive('winclude', winclude_directive)
   292     if pygments_directive is not None:
   312     if pygments_directive is not None:
   293         directives.register_directive('sourcecode', pygments_directive)
   313         directives.register_directive('sourcecode', pygments_directive)