diff options
author | Luke Macken <lmacken@redhat.com> | 2008-06-27 22:58:13 -0400 |
---|---|---|
committer | Luke Macken <lmacken@redhat.com> | 2008-06-27 22:58:13 -0400 |
commit | 0cd53a74a183c57b950f636f0da1917ad2a844de (patch) | |
tree | 5175fe6af10f4062e3d9dccb15bc612aa7c77886 | |
parent | ed633ea60f03becbf1a7689179112aab883ee57d (diff) | |
download | manas-0cd53a74a183c57b950f636f0da1917ad2a844de.tar.gz manas-0cd53a74a183c57b950f636f0da1917ad2a844de.tar.xz manas-0cd53a74a183c57b950f636f0da1917ad2a844de.zip |
Add our initial root controller
-rw-r--r-- | manas/controllers/root.py | 132 |
1 files changed, 109 insertions, 23 deletions
diff --git a/manas/controllers/root.py b/manas/controllers/root.py index afd47c1..77699b3 100644 --- a/manas/controllers/root.py +++ b/manas/controllers/root.py @@ -1,35 +1,121 @@ -"""Main Controller""" -from manas.lib.base import BaseController -from tg import expose, flash -from pylons.i18n import ugettext as _ -#from tg import redirect, validate -#from manas.model import DBSession, metadata -#from dbsprockets.dbmechanic.frameworks.tg2 import DBMechanic -#from dbsprockets.saprovider import SAProvider +# Authors: Luke Macken <lmacken@redhat.com> +import pylons + +from tg import expose, flash, validate, redirect, url from tg.ext.repoze.who import authorize -from manas.controllers.secc import Secc +from formencode import validators +from pylons.i18n import ugettext as _ +from dbsprockets.dbmechanic.frameworks.tg2 import DBMechanic +from dbsprockets.saprovider import SAProvider + +from manas.model import DBSession, metadata, Idea, Comment, Tag +from manas.widgets import LatestIdeas, IdeaWidget, NewIdeaForm, NewCommentForm +from manas.lib.base import BaseController + +# Initialize our orbited connection from pyorbited.simple import Client +from pyorbited.simple import Client +orbited = Client() +orbited.connect() + +# Instantiate our widgets +idea_widget = IdeaWidget() +new_idea_form = NewIdeaForm('new_idea_form', action=url('/save')) +comment_form = NewCommentForm("comment_form", action=url('/comment')) + class RootController(BaseController): - #admin = DBMechanic(SAProvider(metadata), '/admin') - secc = Secc() + admin = DBMechanic(SAProvider(metadata), '/admin') + users = [] @expose('manas.templates.index') + #@authorize.require(authorize.not_anonymous()) def index(self): - return dict(page='index') + return dict() - @expose('manas.templates.about') - def about(self): - return dict(page='about') + @expose('manas.templates.ideas') + def ideas(self): + ideas = DBSession.query(Idea).order_by('karma') + pylons.tmpl_context.w.idea = idea_widget + return dict(ideas=ideas) - @expose('manas.templates.index') - @authorize.require(authorize.has_permission('manage')) - def manage_permission_only(self, **kw): - return dict(page='managers stuff') + @expose('manas.templates.new') + #@authorize.require(authorize.not_anonymous()) + def new(self, **kw): + print "new(%s)" % kw + pylons.tmpl_context.w.new_idea_form = new_idea_form + return {} - @expose('manas.templates.index') - @authorize.require(authorize.is_user('editor')) - def editor_user_only(self, **kw): - return dict(page='editor stuff') + @expose('manas.templates.idea') + def idea(self, id, *args, **kw): + idea = DBSession.query(Idea).filter_by(id=id).one() + pylons.tmpl_context.w.idea = idea_widget + pylons.tmpl_context.w.comment_form = comment_form + return dict(idea=idea) + + @expose('json') + @validate(comment_form) + #@authorize.require(authorize.not_anonymous()) + def comment(self, text, *args, **kw): + print "comment(%s, %s)" % (args, kw) + if pylons.tmpl_context.form_errors: + print "comment failure!" + return dict(idea='fail') + return dict(author='bobvila', timestamp='now', text=text) + + @expose('json') + @validate(validators={'value': validators.Int()}) + def karma(self, id, value, *args, **kw): + print "karma(%s, %s, %s,%s)" % (id, value, args, kw) + if pylons.tmpl_context.form_errors: + print "karma form_errors!" + idea = DBSession.query(Idea).filter_by(id=id).one() + idea.karma += value + print "Updated %s karma to %d" % (idea.title, idea.karma) + DBSession.save(idea) + DBSession.commit() + return dict(karma=idea.karma) + + @expose('manas.templates.tag') + def tag(self, tag): + print "tag(%s)" % tag + return dict() + + @expose('json') + @validate(new_idea_form) + #@authorize.require(authorize.not_anonymous()) + def save(self, title, description, tags, **kw): + print "save(%s, %s, %s, %s)" % (title, description, tags, kw) + if pylons.tmpl_context.form_errors: + print "fail!" + return dict(idea='fail') + idea = Idea(title=title, description=description, author=u'FIXME') + DBSession.save(idea) + for tag in tags.split(','): + tag = Tag(name=tag) + idea.tags.append(tag) + DBSession.save(tag) + DBSession.commit() + flash("Your idea was successfully created!") + orbited.event(self._user_keys(), [{'id': idea.id, 'title': idea.title}]) + print "returning idea=", idea + return dict(idea=idea) + + def _user_keys(self): + return ["%s, %s, /orbited" % (user[0], str(user[1])) + for user in self.users] + + @expose() + def join(self, user): + print "join(%s)" % user + if (user, '0') not in self.users: + self.users.append((user, '0')) + + # Bring the user up to speed with the latest entries + for idea in DBSession.query(Idea).order_by('timestamp')[:10]: + orbited.event(['%s, 0, /orbited' % user], + [{'id': idea.id, 'title': idea.title}]) + + return 'ok' @expose('manas.templates.login') def login(self, **kw): |