diff -r 000000000000 -r b97547f5f1fa goa/appobjects/components.py --- /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'
') + self.pagination(self.req, rset, w=self.w) + self.wview(vid, rset) + self.w(u'
') + + +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' %s' % (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