--- a/view.py Wed Sep 23 19:26:38 2009 +0200
+++ b/view.py Wed Sep 23 19:40:19 2009 +0200
@@ -106,7 +106,7 @@
@property
def content_type(self):
- return self.req.html_content_type()
+ return self._cw.html_content_type()
def set_stream(self, w=None):
if self.w is not None:
@@ -155,8 +155,8 @@
"""
from cubicweb.ext.tal import CubicWebContext
context = CubicWebContext()
- context.update({'self': self, 'rset': self.rset, '_' : self.req._,
- 'req': self.req, 'user': self.req.user})
+ context.update({'self': self, 'rset': self.cw_rset, '_' : self._cw._,
+ 'req': self._cw, 'user': self._cw.user})
context.update(variables)
output = UStringIO()
template.expand(context, output)
@@ -175,14 +175,14 @@
Views applicable on None result sets have to override this method
"""
- rset = self.rset
+ rset = self.cw_rset
if rset is None:
raise NotImplementedError, self
wrap = self.templatable and len(rset) > 1 and self.add_div_section
for i in xrange(len(rset)):
if wrap:
self.w(u'<div class="section">')
- self.wview(self.id, rset, row=i, **kwargs)
+ self.wview(self.__regid__, rset, row=i, **kwargs)
if wrap:
self.w(u"</div>")
@@ -200,23 +200,23 @@
return True
def is_primary(self):
- return self.id == 'primary'
+ return self.__regid__ == 'primary'
def url(self):
"""return the url associated with this view. Should not be
necessary for non linkable views, but a default implementation
is provided anyway.
"""
- rset = self.rset
+ rset = self.cw_rset
if rset is None:
- return self.build_url('view', vid=self.id)
+ return self._cw.build_url('view', vid=self.__regid__)
coltypes = rset.column_types(0)
if len(coltypes) == 1:
etype = iter(coltypes).next()
- if not self.schema.eschema(etype).is_final():
+ if not self._cw.schema.eschema(etype).is_final():
if len(rset) == 1:
entity = rset.get_entity(0, 0)
- return entity.absolute_url(vid=self.id)
+ return entity.absolute_url(vid=self.__regid__)
# don't want to generate /<etype> url if there is some restriction
# on something else than the entity type
restr = rset.syntax_tree().children[0].where
@@ -226,25 +226,25 @@
norestriction = (isinstance(restr, nodes.Relation) and
restr.is_types_restriction())
if norestriction:
- return self.build_url(etype.lower(), vid=self.id)
- return self.build_url('view', rql=rset.printable_rql(), vid=self.id)
+ return self._cw.build_url(etype.lower(), vid=self.__regid__)
+ return self._cw.build_url('view', rql=rset.printable_rql(), vid=self.__regid__)
def set_request_content_type(self):
"""set the content type returned by this view"""
- self.req.set_content_type(self.content_type)
+ self._cw.set_content_type(self.content_type)
# view utilities ##########################################################
def wview(self, __vid, rset=None, __fallback_vid=None, **kwargs):
"""shortcut to self.view method automatically passing self.w as argument
"""
- self.view(__vid, rset, __fallback_vid, w=self.w, **kwargs)
+ self._cw.view(__vid, rset, __fallback_vid, w=self.w, **kwargs)
# XXX Template bw compat
template = deprecated('[3.4] .template is deprecated, use .view')(wview)
def whead(self, data):
- self.req.html_headers.write(data)
+ self._cw.html_headers.write(data)
def wdata(self, data):
"""simple helper that escapes `data` and writes into `self.w`"""
@@ -262,34 +262,34 @@
"""returns a title according to the result set - used for the
title in the HTML header
"""
- vtitle = self.req.form.get('vtitle')
+ vtitle = self._cw.form.get('vtitle')
if vtitle:
- return self.req._(vtitle)
+ return self._cw._(vtitle)
# class defined title will only be used if the resulting title doesn't
# seem clear enough
vtitle = getattr(self, 'title', None) or u''
if vtitle:
- vtitle = self.req._(vtitle)
- rset = self.rset
+ vtitle = self._cw._(vtitle)
+ rset = self.cw_rset
if rset and rset.rowcount:
if rset.rowcount == 1:
try:
- entity = self.complete_entity(0)
+ entity = rset.complete_entity(0, 0)
# use long_title to get context information if any
clabel = entity.dc_long_title()
except NotAnEntity:
- clabel = display_name(self.req, rset.description[0][0])
+ clabel = display_name(self._cw, rset.description[0][0])
clabel = u'%s (%s)' % (clabel, vtitle)
else :
etypes = rset.column_types(0)
if len(etypes) == 1:
etype = iter(etypes).next()
- clabel = display_name(self.req, etype, 'plural')
+ clabel = display_name(self._cw, etype, 'plural')
else :
clabel = u'#[*] (%s)' % vtitle
else:
clabel = vtitle
- return u'%s (%s)' % (clabel, self.req.property_value('ui.site-title'))
+ return u'%s (%s)' % (clabel, self._cw.property_value('ui.site-title'))
def output_url_builder( self, name, url, args ):
self.w(u'<script language="JavaScript"><!--\n' \
@@ -305,7 +305,7 @@
def create_url(self, etype, **kwargs):
""" return the url of the entity creation form for a given entity type"""
- return self.req.build_url('add/%s'%etype, **kwargs)
+ return self._cw.build_url('add/%s'%etype, **kwargs)
def field(self, label, value, row=True, show_label=True, w=None, tr=True):
""" read-only field """
@@ -315,7 +315,7 @@
w(u'<div class="row">')
if show_label and label:
if tr:
- label = display_name(self.req, label)
+ label = display_name(self._cw, label)
w(u'<span class="label">%s</span>' % label)
w(u'<div class="field">%s</div>' % value)
if row:
@@ -370,11 +370,11 @@
"""override call to execute rql returned by the .startup_rql method if
necessary
"""
- if self.rset is None:
- self.rset = self.req.execute(self.startup_rql())
- rset = self.rset
+ rset = self.cw_rset
+ if rset is None:
+ rset = self.cw_rset = self._cw.execute(self.startup_rql())
for i in xrange(len(rset)):
- self.wview(self.id, rset, row=i, **kwargs)
+ self.wview(self.__regid__, rset, row=i, **kwargs)
class AnyRsetView(View):
@@ -385,18 +385,18 @@
def columns_labels(self, mainindex=0, tr=True):
if tr:
- translate = lambda val, req=self.req: display_name(req, val)
+ translate = lambda val, req=self._cw: display_name(req, val)
else:
translate = lambda val: val
# XXX [0] because of missing Union support
- rqlstdescr = self.rset.syntax_tree().get_description(mainindex,
- translate)[0]
+ rqlstdescr = self.cw_rset.syntax_tree().get_description(mainindex,
+ translate)[0]
labels = []
for colindex, label in enumerate(rqlstdescr):
# compute column header
if label == 'Any': # find a better label
label = ','.join(translate(et)
- for et in self.rset.column_types(colindex))
+ for et in self.cw_rset.column_types(colindex))
labels.append(label)
return labels
@@ -411,7 +411,7 @@
@property
def doctype(self):
- if self.req.xhtml_browser():
+ if self._cw.xhtml_browser():
return STRICT_DOCTYPE
return STRICT_DOCTYPE_NOEXT
@@ -422,7 +422,7 @@
if self.binary:
self._stream = stream = StringIO()
else:
- self._stream = stream = HTMLStream(self.req)
+ self._stream = stream = HTMLStream(self._cw)
w = stream.write
else:
stream = None
@@ -447,18 +447,18 @@
"""register the given user callback and return an url to call it ready to be
inserted in html
"""
- self.req.add_js('cubicweb.ajax.js')
+ self._cw.add_js('cubicweb.ajax.js')
if nonify:
_cb = cb
def cb(*args):
_cb(*args)
- cbname = self.req.register_onetime_callback(cb, *args)
+ cbname = self._cw.register_onetime_callback(cb, *args)
return self.build_js(cbname, xml_escape(msg or ''))
def build_update_js_call(self, cbname, msg):
- rql = xml_escape(self.rset.printable_rql())
+ rql = xml_escape(self.cw_rset.printable_rql())
return "javascript:userCallbackThenUpdateUI('%s', '%s', '%s', '%s', '%s', '%s')" % (
- cbname, self.id, rql, msg, self.__registry__, self.div_id())
+ cbname, self.__regid__, rql, msg, self.__registry__, self.div_id())
def build_reload_js_call(self, cbname, msg):
return "javascript:userCallbackThenReloadPage('%s', '%s')" % (cbname, msg)
@@ -477,8 +477,8 @@
# XXX huummm, much probably useless
htmlclass = 'mainRelated'
def div_class(self):
- return '%s %s' % (self.htmlclass, self.id)
+ return '%s %s' % (self.htmlclass, self.__regid__)
- # XXX a generic '%s%s' % (self.id, self.__registry__.capitalize()) would probably be nicer
+ # XXX a generic '%s%s' % (self.__regid__, self.__registry__.capitalize()) would probably be nicer
def div_id(self):
- return '%sComponent' % self.id
+ return '%sComponent' % self.__regid__