goa/appobjects/components.py
changeset 0 b97547f5f1fa
child 237 3df2e0ae2eba
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/goa/appobjects/components.py	Wed Nov 05 15:52:50 2008 +0100
@@ -0,0 +1,100 @@
+"""overrides some base views for cubicweb on google appengine
+
+:organization: Logilab
+:copyright: 2008 LOGILAB S.A. (Paris, FRANCE), all rights reserved.
+:contact: http://www.logilab.fr/ -- mailto:contact@logilab.fr
+"""
+__docformat__ = "restructuredtext en"
+
+from os.path import join
+
+from logilab.mtconverter import html_escape
+from logilab.common.decorators import cached
+
+from cubicweb import typed_eid
+from cubicweb.schema import display_name
+from cubicweb.common.view import StartupView, EntityView
+from cubicweb.common.selectors import (onelinerset_selector, searchstate_selector,
+                                    accept_selector)
+from cubicweb.web import Redirect
+from cubicweb.web.views import vid_from_rset
+from cubicweb.goa.db import rset_from_objs
+
+from google.appengine.api import datastore, mail
+
+from main import APPLROOT
+
+
+class SearchForAssociationView(EntityView):
+    """view called by the edition view when the user asks
+    to search for something to link to the edited eid
+    """
+    id = 'search-associate'
+    
+    __selectors__ = (onelinerset_selector, searchstate_selector, accept_selector)
+    accepts = ('Any',)
+    search_states = ('linksearch',)
+
+    def cell_call(self, row, col):
+        entity = self.entity(0, 0)
+        role, eid, rtype, etype = self.req.search_state[1]
+        assert entity.eid == typed_eid(eid)
+        rset = entity.unrelated(rtype, etype, role, ordermethod='fetch_order')
+        vid = vid_from_rset(self.req, rset, self.schema)
+        self.w(u'<div id="search-associate-content">')
+        self.pagination(self.req, rset, w=self.w)
+        self.wview(vid, rset)
+        self.w(u'</div>')
+
+
+class SchemaImageView(StartupView):
+    id = 'schemagraph'
+    binary = True
+    content_type = 'image/png'
+    def call(self):
+        """display global schema information"""        
+        skipmeta = not int(self.req.form.get('withmeta', 0))
+        if skipmeta:
+            url = self.build_url('data/schema.png')
+        else:
+            url = self.build_url('data/metaschema.png')
+        raise Redirect(url)
+
+
+from cubicweb.web.views.baseviews import MetaDataView
+
+class GAEMetaDataView(MetaDataView):
+    show_eid = False
+
+
+from cubicweb.web.views.startup import ManageView
+
+def entity_types_no_count(self, eschemas):
+    """return a list of formatted links to get a list of entities of
+    a each entity's types
+    """
+    req = self.req
+    for eschema in eschemas:
+        if eschema.is_final() or not (eschema.has_perm(req, 'read') or
+                                      eschema.has_local_role('read')):
+            continue
+        etype = eschema.type
+        label = display_name(req, etype, 'plural')
+        view = self.vreg.select_view('list', req, req.etype_rset(etype))
+        url = view.url()
+        etypelink = u'&nbsp;<a href="%s">%s</a>' % (html_escape(url), label)
+        yield (label, etypelink, self.add_entity_link(eschema, req))
+
+ManageView.entity_types = entity_types_no_count
+
+
+from cubicweb.web.views.basecontrollers import SendMailController
+
+def sendmail(self, recipient, subject, body):
+    sender = '%s <%s>' % (
+        self.req.user.dc_title() or self.config['sender-name'],
+        self.req.user.get_email() or self.config['sender-addr'])
+    mail.send_mail(sender=sender, to=recipient,
+                   subject=subject, body=body)
+
+SendMailController.sendmail = sendmail