pyforge/docs/_static/images/plugins.png to pyforge/docs/_static/images/tools.png
File was renamed.
pyforge/docs/tutorials/wiki-plugin.rst to pyforge/docs/tutorials/wiki-tool.rst
--- a/pyforge/docs/tutorials/wiki-plugin.rst +++ b/pyforge/docs/tutorials/wiki-tool.rst @@ -1,22 +1,22 @@ -Creating your first PyForge Plugin +Creating your first PyForge Tool ===================================================================== -Adding your PyForge Plugin to a PyForge Install +Adding your PyForge Tool to a PyForge Install ===================================================================== -Writing a Wiki Plugin Part 1: Pages +Writing a Wiki Tool Part 1: Pages ===================================================================== -Writing a wiki Plugin Part 2: Links +Writing a wiki Tool Part 2: Links ===================================================================== -Writing a wiki Plugin Part 3: Revisions +Writing a wiki Tool Part 3: Revisions ===================================================================== -Testing your Plugin +Testing your Tool =========================== -Testing the controllers and models of a new Forge plugin is fairly +Testing the controllers and models of a new Forge tool is fairly straightforward. Generally, you should follow the example of tests in the `pyforge/tests/functional` directory for controller tests and `pyforge.tests.model` for model tests. For functional tests, the Forge platform @@ -24,10 +24,10 @@ class which is used as the application root for the :class:`pyforge.tests.TestController` class. -In order to test your new plugin controllers, you simply need to use the `self.app.get()` +In order to test your new tool controllers, you simply need to use the `self.app.get()` and `self.app.post()` methods of your test controller. The test harness makes -all the plugins available in the system available under the URL /*entry point -name*/. So to test the :mod:`pyforge.ext.project_home` plugin, for instance, we +all the tools available in the system available under the URL /*entry point +name*/. So to test the :mod:`pyforge.ext.project_home` tool, for instance, we need only write the following:: from pyforge.tests import TestController @@ -39,11 +39,11 @@ Whenever you use the :class:`pyforge.tests.TestController` app property, the test harness sets up the context so that `c.project` is always the -`projects/test` project and whichever plugin name you request is mounted at its -entry point (so the Wiki plugin will be mounted at /Wiki/). `c.user` is always -set to the `test_admin` user to avoid authentication issues. +`projects/test` project and whichever tool name you request is mounted at its +entry point (so the Wiki tool will be mounted at /Wiki/). `c.user` is always +set to the `test_admin` user to avoid authentication issues. -The framework used to generate the WSGI environment for testing your plugins is +The framework used to generate the WSGI environment for testing your tools is provided by the `WebTest <http://pythonpaste.org/webtest/>`_ module, where you can find further documentation for the `.get()` and `.post()` methods. @@ -53,7 +53,7 @@ import mock from pylons import c, g - + from pyforge.lib.app_globals import Globals from pyforge import model as M @@ -67,4 +67,3 @@ Testing the reactors/auditors is similar to testing models. Generally, you will simply want to call your callback methods directly rather than setting up a full mocking infrastructure for the messaging system provided by RabbitMQ. -
pyforge/docs/plugins.rst to pyforge/docs/tools.rst
--- a/pyforge/docs/plugins.rst +++ b/pyforge/docs/tools.rst @@ -2,38 +2,36 @@ --------------------------------------------------------------------- Our event system is driven by RabbitMQ, most of which you can ignore, -because we've simplified it down to two kinds of event listeners: +because we've simplified it down to two kinds of event listeners: .. image:: _static/images/amqp.png - :alt: App Plugins + :alt: App Tools -Basically you either get: +Basically you either get: * Immediate, best effort messages * Queue based messages will be processed (eventually) -The pyforge platform creates a pool of queue consumers that handle messages, -and it calls all the Reactors that are registered for that event. +The pyforge platform creates a pool of queue consumers that handle messages, +and it calls all the Reactors that are registered for that event. -Or, you can ask for immediate message receipt, with now guarantee of delivery. +Or, you can ask for immediate message receipt, with now guarantee of delivery. Writing your own WebHooks ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -There's no reason a event listener can't call out over HTTP to some web +There's no reason a event listener can't call out over HTTP to some web service... -TODO: Document reactors that implement web-hooks after we write some ;) +TODO: Document reactors that implement web-hooks after we write some ;) Extending the pyforge markup ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -There is a special kind of queue based pluging that allows you to +There is a special kind of queue based tool that allows you to extend the standard artifact reference system to add new artifact types (eg: sf:tg:ticket:149) and extend the syntax of our markup language (based on Waylan Limberg's excellent markdown implementation -for python). +for python). http://www.freewisdom.org/projects/python-markdown - -
pyforge/pyforge/ext/admin/templates/widgets/plugin_status.html to pyforge/pyforge/ext/admin/templates/widgets/tool_status.html
--- a/pyforge/pyforge/ext/admin/templates/widgets/plugin_status.html +++ b/pyforge/pyforge/ext/admin/templates/widgets/tool_status.html @@ -1,10 +1,10 @@ -<!DOCTYPE div PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" +<!DOCTYPE div PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <div xmlns="http://www.w3.org/1999/xhtml" xmlns:py="http://genshi.edgewall.org/" xmlns:xi="http://www.w3.org/2001/XInclude" class="portlet"> - <h4>Plugin Status</h4> + <h4>Tool Status</h4> <dl> <py:for each="mp, alinks in links.iteritems()"> <dt>$mp</dt>