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@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@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',