demo/demo/controllers/root.py | 7 ++---
demo/demo/producer.py | 2 -
demo/demo/widget.py | 11 --------
demo/demo/widgets/basic.py | 11 ++++++++
demo/demo/widgets/live.py | 11 ++++++++
demo/setup.py | 3 +-
docs/main/HelloWorld.rst | 53 ++++++++++++++++++++++++++++++++++++++--
moksha/api/widgets/amqp/amqp.py | 3 +-
8 files changed, 81 insertions(+), 20 deletions(-)
New commits:
commit 4a478e34a34c29f826cd9bd97fe7d58da84f08d7
Author: Luke Macken <lmacken(a)redhat.com>
Date: Tue Oct 19 13:31:03 2010 -0400
More demo improvements
diff --git a/demo/demo/controllers/root.py b/demo/demo/controllers/root.py
index 1f77d96..35593b1 100644
--- a/demo/demo/controllers/root.py
+++ b/demo/demo/controllers/root.py
@@ -29,11 +29,10 @@ class Root(object):
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,
+ entries = mycache.get_value(key='entries', createfunc=self._get_entries,
expiretime=3600)
return dict(entries=entries)
- def _expensive_call(self, *args, **kwargs):
+ def _get_entries(self, *args, **kwargs):
from demo.model import DBSession, HelloWorldModel
- entries = DBSession.query(HelloWorldModel).all()
- return entries
+ return DBSession.query(HelloWorldModel).all()
diff --git a/demo/demo/producer.py b/demo/demo/producer.py
index bfd44f4..7ad039d 100644
--- a/demo/demo/producer.py
+++ b/demo/demo/producer.py
@@ -1,5 +1,5 @@
-from moksha.api.hub.producer import PollingProducer
from datetime import timedelta
+from moksha.api.hub.producer import PollingProducer
class HelloWorldProducer(PollingProducer):
frequency = timedelta(seconds=3)
diff --git a/demo/demo/widget.py b/demo/demo/widget.py
deleted file mode 100644
index f9d0ad4..0000000
--- a/demo/demo/widget.py
+++ /dev/null
@@ -1,11 +0,0 @@
-from moksha.api.widgets.live import LiveWidget
-
-class HelloWorldWidget(LiveWidget):
- topic = "helloworld"
- template = """
- <b>Hello World Widget</b>
- <ul id="data"/>
- """
- onmessage = """
- $('<li/>').text(json.msg).prependTo('#data');
- """
diff --git a/demo/demo/widgets/__init__.py b/demo/demo/widgets/__init__.py
new file mode 100644
index 0000000..e69de29
diff --git a/demo/demo/widgets/basic.py b/demo/demo/widgets/basic.py
new file mode 100644
index 0000000..7b7e48a
--- /dev/null
+++ b/demo/demo/widgets/basic.py
@@ -0,0 +1,11 @@
+from tw.api import Widget
+
+class HelloWorldWidget(Widget):
+ params = ['msg']
+ msg = 'Hello World'
+ template = '${msg}'
+ engine_name = 'mako'
+
+ def update_params(self, d):
+ """ Render-time logic """
+ super(HelloWorldWidget, self).update_params(d)
diff --git a/demo/demo/widgets/live.py b/demo/demo/widgets/live.py
new file mode 100644
index 0000000..f9d0ad4
--- /dev/null
+++ b/demo/demo/widgets/live.py
@@ -0,0 +1,11 @@
+from moksha.api.widgets.live import LiveWidget
+
+class HelloWorldWidget(LiveWidget):
+ topic = "helloworld"
+ template = """
+ <b>Hello World Widget</b>
+ <ul id="data"/>
+ """
+ onmessage = """
+ $('<li/>').text(json.msg).prependTo('#data');
+ """
diff --git a/demo/setup.py b/demo/setup.py
index 10868ef..03e57d8 100644
--- a/demo/setup.py
+++ b/demo/setup.py
@@ -28,7 +28,8 @@ setup(
helloworld = demo.consumer:HelloWorldConsumer
[moksha.widget]
- helloworld = demo.widget:HelloWorldWidget
+ basic = demo.widgets.basic:HelloWorldWidget
+ live = demo.widgets.live:HelloWorldWidget
"""
)
diff --git a/docs/main/HelloWorld.rst b/docs/main/HelloWorld.rst
index ae46ee3..3c6e8e4 100644
--- a/docs/main/HelloWorld.rst
+++ b/docs/main/HelloWorld.rst
@@ -50,7 +50,6 @@ Running the Moksha stack
Bringing a templating engine into the mix
-----------------------------------------
-
The previous example just returned a string from our controller. What if we
want to use one of the many powerful templating engines out there?
@@ -78,7 +77,57 @@ Now let's plug in our Mako template into our Root controller.
return {'msg': 'Hello World!'}
-** Messaging **
+Building a basic Widget
+-----------------------
+
+.. code-block:: python
+
+ from tw.api import Widget
+
+ class HelloWorldWidget(Widget):
+ params = ['msg']
+ msg = 'Hello World'
+ template = '${msg}'
+ engine_name = 'mako'
+
+ def update_params(self, d):
+ """ Render-time logic """
+ super(HelloWorldWidget, self).update_params(d)
+
+
+`setup.py`
+
+.. code-block:: python
+
+ [moksha.widget]
+ helloworld = demo.widgets:HelloWorldWidget
+
+.. code-block:: bash
+
+ $ curl
http://localhost:8080/widgets/basic
+
+.. code-block:: html
+
+ <html>
+ <head></head>
+ <body>Hello World</body>
+ </html>
+
+.. code-block:: bash
+
+ $ curl
http://localhost:8080/widgets/basic?msg=foobar
+
+.. code-block:: html
+
+ <html>
+ <head></head>
+ <body>foobar</body>
+ </html>
+
+.. seealso::
+
+ `ToscaWidgets documentation
<
http://toscawidgets.org/documentation/ToscaWidgets>`_
+ `ToscaWidgets2 documentation <
http://toscawidgets.org/documentation/tw2.core>`_
Creating a message producer
---------------------------
commit 2690232e93fea5a926cc6782ed33370d67f5af89
Author: Luke Macken <lmacken(a)redhat.com>
Date: Fri Oct 15 02:11:04 2010 -0400
Have our AMQPSocket require moksha_js
diff --git a/moksha/api/widgets/amqp/amqp.py b/moksha/api/widgets/amqp/amqp.py
index 2dd6664..75da86e 100644
--- a/moksha/api/widgets/amqp/amqp.py
+++ b/moksha/api/widgets/amqp/amqp.py
@@ -29,6 +29,7 @@ from paste.deploy.converters import asbool
from moksha.api.widgets.orbited import orbited_host, orbited_port, orbited_url
from moksha.api.widgets.orbited import orbited_js
from moksha.lib.helpers import defaultdict, listify
+from moksha.widgets.moksha_js import moksha_js
from moksha.widgets.notify import moksha_notify
from moksha.widgets.json import jquery_json_js
@@ -66,7 +67,7 @@ def amqp_unsubscribe(topic):
class AMQPSocket(Widget):
callbacks = ['onconnectedframe', 'onmessageframe']
- javascript = [jquery_json_js, kamaloka_qpid_js]
+ javascript = [jquery_json_js, moksha_js, kamaloka_qpid_js]
params = callbacks[:] + ['topics', 'notify', 'orbited_host',
'orbited_port', 'orbited_url', 'orbited_js',
'amqp_broker_host',
'amqp_broker_port', 'amqp_broker_user',
'amqp_broker_pass',