demo/demo/consumer.py | 7 +++++
demo/demo/controllers/root.py | 39 +++++++++++++++++++++++++++++++++
demo/demo/model/__init__.py | 15 ++++++++++++
demo/demo/model/model.py | 12 ++++++++++
demo/demo/root.py | 12 ----------
demo/demo/template.mak | 8 ------
demo/demo/templates/model.mak | 7 +++++
demo/demo/templates/template.mak | 8 ++++++
demo/demo/widget.py | 6 +++--
demo/setup.py | 5 +++-
docs/apps/MokshaMenus.rst | 5 ----
docs/main/MokshaLabs.rst | 2 -
moksha/apps/menus/docs/MokshaMenus.rst | 5 ++++
moksha/commands/cli.py | 5 ++--
14 files changed, 105 insertions(+), 31 deletions(-)
New commits:
commit c1aca721ea7ce38eadd60e2f7f6ab5035524e944
Author: Luke Macken <lmacken(a)redhat.com>
Date: Fri Oct 8 15:31:04 2010 -0400
More updates to our Hello World demo app
diff --git a/demo/demo/consumer.py b/demo/demo/consumer.py
index c32fea6..10f4e3b 100644
--- a/demo/demo/consumer.py
+++ b/demo/demo/consumer.py
@@ -1,7 +1,14 @@
from moksha.api.hub.consumer import Consumer
+from demo.model import HelloWorldModel
class HelloWorldConsumer(Consumer):
topic = 'helloworld'
+ app = 'helloworld'
def consume(self, message):
self.log.info('Received message: ' + message['body']['msg'])
+
+ entry = HelloWorldModel()
+ entry.message = message['body']['msg']
+ self.DBSession.add(entry)
+ self.DBSession.commit()
diff --git a/demo/demo/controllers/__init__.py b/demo/demo/controllers/__init__.py
new file mode 100644
index 0000000..e69de29
diff --git a/demo/demo/controllers/root.py b/demo/demo/controllers/root.py
new file mode 100644
index 0000000..1f77d96
--- /dev/null
+++ b/demo/demo/controllers/root.py
@@ -0,0 +1,39 @@
+import moksha
+
+from tg import expose, tmpl_context
+
+class Root(object):
+
+ @expose()
+ def index(self, *args, **kwargs):
+ return 'Hello World!'
+
+ @expose('mako:demo.templates.template')
+ def mako(self, *args, **kwargs):
+ """ An example controller method exposed with a Mako template """
+ return {'msg': 'Hello World!'}
+
+ @expose('mako:moksha.templates.widget')
+ def livewidget(self, *args, **kwargs):
+ tmpl_context.widget = moksha.get_widget('helloworld')
+ tmpl_context.moksha_socket = moksha.get_widget('moksha_socket')
+ return dict(options={})
+
+ @expose('mako:demo.templates.model')
+ def model(self, *args, **kwargs):
+ from demo.model import DBSession, HelloWorldModel
+ entries = DBSession.query(HelloWorldModel).all()
+ return dict(entries=entries)
+
+ @expose('mako:demo.templates.model')
+ def cached_model(self, *args, **kwargs):
+ from pylons import cache
+ mycache = cache.get_cache('helloworld')
+ entries = mycache.get_value(key='entries', createfunc=self._expensive_call,
+ expiretime=3600)
+ return dict(entries=entries)
+
+ def _expensive_call(self, *args, **kwargs):
+ from demo.model import DBSession, HelloWorldModel
+ entries = DBSession.query(HelloWorldModel).all()
+ return entries
diff --git a/demo/demo/model/__init__.py b/demo/demo/model/__init__.py
new file mode 100644
index 0000000..b425716
--- /dev/null
+++ b/demo/demo/model/__init__.py
@@ -0,0 +1,15 @@
+from zope.sqlalchemy import ZopeTransactionExtension
+from sqlalchemy.orm import scoped_session, sessionmaker
+from sqlalchemy.ext.declarative import declarative_base
+
+maker = sessionmaker(autoflush=True, autocommit=False,
+ extension=ZopeTransactionExtension())
+DBSession = scoped_session(maker)
+DeclarativeBase = declarative_base()
+metadata = DeclarativeBase.metadata
+
+def init_model(engine):
+ print "init_model(%s)" % engine
+ DBSession.configure(bind=engine)
+
+from model import HelloWorldModel
diff --git a/demo/demo/model/model.py b/demo/demo/model/model.py
new file mode 100644
index 0000000..0f8dbf7
--- /dev/null
+++ b/demo/demo/model/model.py
@@ -0,0 +1,12 @@
+from datetime import datetime
+from sqlalchemy import Integer, Text, DateTime, Column
+from demo.model import DeclarativeBase
+
+class HelloWorldModel(DeclarativeBase):
+ __tablename__ = 'helloworld'
+
+ id = Column(Integer, autoincrement=True, primary_key=True)
+
+ message = Column(Text)
+
+ timestamp = Column(DateTime, default=datetime.now)
diff --git a/demo/demo/root.py b/demo/demo/root.py
deleted file mode 100644
index 3574b84..0000000
--- a/demo/demo/root.py
+++ /dev/null
@@ -1,12 +0,0 @@
-from tg import expose
-
-class Root(object):
-
- @expose()
- def index(self, *args, **kwargs):
- return 'Hello World!'
-
- @expose('mako:demo.template')
- def mako(self, *args, **kwargs):
- """ An example controller method exposed with a Mako template """
- return {'msg': 'Hello World!'}
diff --git a/demo/demo/template.mak b/demo/demo/template.mak
deleted file mode 100644
index 2010e44..0000000
--- a/demo/demo/template.mak
+++ /dev/null
@@ -1,8 +0,0 @@
-<html>
- <head>
- <title>${msg}</title>
- </head>
- <body>
- ${msg}
- </body>
-</html>
diff --git a/demo/demo/templates/__init__.py b/demo/demo/templates/__init__.py
new file mode 100644
index 0000000..e69de29
diff --git a/demo/demo/templates/model.mak b/demo/demo/templates/model.mak
new file mode 100644
index 0000000..af50fed
--- /dev/null
+++ b/demo/demo/templates/model.mak
@@ -0,0 +1,7 @@
+<h1>Entries in the HelloWorld model</h1>
+
+<ul>
+ % for entry in entries[::-1]:
+ <li>${str(entry.id)} - ${entry.message} - ${str(entry.timestamp)}</li>
+ % endfor
+</ul>
diff --git a/demo/demo/templates/template.mak b/demo/demo/templates/template.mak
new file mode 100644
index 0000000..2010e44
--- /dev/null
+++ b/demo/demo/templates/template.mak
@@ -0,0 +1,8 @@
+<html>
+ <head>
+ <title>${msg}</title>
+ </head>
+ <body>
+ ${msg}
+ </body>
+</html>
diff --git a/demo/demo/widget.py b/demo/demo/widget.py
index 631ea07..f9d0ad4 100644
--- a/demo/demo/widget.py
+++ b/demo/demo/widget.py
@@ -4,8 +4,8 @@ class HelloWorldWidget(LiveWidget):
topic = "helloworld"
template = """
<b>Hello World Widget</b>
- <div id="data"/>
+ <ul id="data"/>
"""
onmessage = """
- $('#data').append(json.msg).append('<br/>');
+ $('<li/>').text(json.msg).prependTo('#data');
"""
diff --git a/demo/setup.py b/demo/setup.py
index 8cc041e..10868ef 100644
--- a/demo/setup.py
+++ b/demo/setup.py
@@ -16,7 +16,10 @@ setup(
entry_points="""
[moksha.root]
- root = demo.root:Root
+ root = demo.controllers.root:Root
+
+ [moksha.application]
+ helloworld = demo.controllers.root:Root
[moksha.producer]
helloworld = demo.producer:HelloWorldProducer
diff --git a/moksha/commands/cli.py b/moksha/commands/cli.py
index 2563a17..f44ce2d 100644
--- a/moksha/commands/cli.py
+++ b/moksha/commands/cli.py
@@ -61,8 +61,8 @@ class MokshaCLI(object):
orbited += ['-c', '/etc/moksha/orbited.cfg']
self._exec(*orbited)
- self._exec('moksha-hub')
self._exec('paster', 'serve', get_moksha_config_path())
+ self._exec('moksha-hub')
def list(self):
""" List all available apps, widgets, producers and consumers """
commit 16bbeb391be3b4116a51b2b0bfaa239c38aa81e0
Author: Luke Macken <lmacken(a)redhat.com>
Date: Fri Oct 8 13:54:12 2010 -0400
Trivial formatting tweak in the live widget demo
diff --git a/demo/demo/widget.py b/demo/demo/widget.py
index 32b9aff..631ea07 100644
--- a/demo/demo/widget.py
+++ b/demo/demo/widget.py
@@ -6,4 +6,6 @@ class HelloWorldWidget(LiveWidget):
<b>Hello World Widget</b>
<div id="data"/>
"""
- onmessage = "$('#data').append(json.msg).append('<br/>');"
+ onmessage = """
+ $('#data').append(json.msg).append('<br/>');
+ """
commit d3aac8496ef2b4a10c09c8eb35d6c1d851ff8cc8
Author: Luke Macken <lmacken(a)redhat.com>
Date: Fri Oct 8 13:53:49 2010 -0400
Add the current directory to pkg_resources.working_set in the moksha cli
diff --git a/moksha/commands/cli.py b/moksha/commands/cli.py
index a1ffa56..2563a17 100644
--- a/moksha/commands/cli.py
+++ b/moksha/commands/cli.py
@@ -99,7 +99,6 @@ class MokshaCLI(object):
reactor.run()
-
def get_parser():
usage = 'usage: %prog [command]'
parser = OptionParser(usage, description=__doc__)
@@ -115,6 +114,8 @@ def get_parser():
def main():
parser = get_parser()
opts, args = parser.parse_args()
+ pkg_resources.working_set.add_entry(os.getcwd())
+
moksha = MokshaCLI()
logging.basicConfig(level=logging.INFO, format=
commit c32e12fcfa0e1c6b54a9acc4db94c79d73e5f21a
Author: Luke Macken <lmacken(a)redhat.com>
Date: Fri Oct 8 13:23:32 2010 -0400
Move our MokshaMenu's docs out into the app itself.
Eventually, Moksha should handle compiling docs for apps, but in the mean time
this doc requires the moksha.menus app, which is not installed by default.
diff --git a/docs/apps/MokshaMenus.rst b/docs/apps/MokshaMenus.rst
deleted file mode 100644
index cf14e5d..0000000
--- a/docs/apps/MokshaMenus.rst
+++ /dev/null
@@ -1,5 +0,0 @@
-.. automodule:: moksha.apps.menus.widgets
-
-.. widgetbrowser:: moksha.apps.menus.default.MokshaDefaultMenu
- :tabs: demo, source
- :size: large
diff --git a/docs/main/MokshaLabs.rst b/docs/main/MokshaLabs.rst
index d6bdc41..1c74b16 100644
--- a/docs/main/MokshaLabs.rst
+++ b/docs/main/MokshaLabs.rst
@@ -10,6 +10,6 @@ The Moksha Labs is an experimental R&D playground for reusable apps & widgets.
Feeds
MokshaContainerWidgets
Connectors
- ../apps/MokshaMenus
Blueprint
+ #../apps/MokshaMenus
diff --git a/moksha/apps/menus/docs/MokshaMenus.rst b/moksha/apps/menus/docs/MokshaMenus.rst
new file mode 100644
index 0000000..cf14e5d
--- /dev/null
+++ b/moksha/apps/menus/docs/MokshaMenus.rst
@@ -0,0 +1,5 @@
+.. automodule:: moksha.apps.menus.widgets
+
+.. widgetbrowser:: moksha.apps.menus.default.MokshaDefaultMenu
+ :tabs: demo, source
+ :size: large