summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorLuke Macken <lmacken@redhat.com>2008-06-27 22:58:13 -0400
committerLuke Macken <lmacken@redhat.com>2008-06-27 22:58:13 -0400
commit0cd53a74a183c57b950f636f0da1917ad2a844de (patch)
tree5175fe6af10f4062e3d9dccb15bc612aa7c77886
parented633ea60f03becbf1a7689179112aab883ee57d (diff)
downloadmanas-0cd53a74a183c57b950f636f0da1917ad2a844de.tar.gz
manas-0cd53a74a183c57b950f636f0da1917ad2a844de.tar.xz
manas-0cd53a74a183c57b950f636f0da1917ad2a844de.zip
Add our initial root controller
-rw-r--r--manas/controllers/root.py132
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):