aboutsummaryrefslogtreecommitdiffstats
path: root/docs/source
diff options
context:
space:
mode:
Diffstat (limited to 'docs/source')
-rw-r--r--docs/source/index.rst1
-rw-r--r--docs/source/pluginwriter/api.rst26
-rw-r--r--docs/source/pluginwriter/tests.rst64
-rw-r--r--docs/source/siteadmin/media-types.rst15
-rw-r--r--docs/source/siteadmin/relnotes.rst23
5 files changed, 127 insertions, 2 deletions
diff --git a/docs/source/index.rst b/docs/source/index.rst
index 7f692d57..d71f39f8 100644
--- a/docs/source/index.rst
+++ b/docs/source/index.rst
@@ -73,6 +73,7 @@ This guide covers writing new GNU MediaGoblin plugins.
pluginwriter/quickstart
pluginwriter/database
pluginwriter/api
+ pluginwriter/tests
Part 4: Developer's Zone
diff --git a/docs/source/pluginwriter/api.rst b/docs/source/pluginwriter/api.rst
index 66def173..29adb691 100644
--- a/docs/source/pluginwriter/api.rst
+++ b/docs/source/pluginwriter/api.rst
@@ -69,6 +69,32 @@ example might look like::
This means that when people enable your plugin in their config you'll
be able to provide defaults as well as type validation.
+You can access this via the app_config variables in mg_globals, or you
+can use a shortcut to get your plugin's config section::
+
+ >>> from mediagoblin.tools import pluginapi
+ # Replace with the path to your plugin.
+ # (If an external package, it won't be part of mediagoblin.plugins)
+ >>> floobie_config = pluginapi.get_config('mediagoblin.plugins.floobifier')
+ >>> floobie_dir = floobie_config['floobie_dir']
+ # This is the same as the above
+ >>> from mediagoblin import mg_globals
+ >>> config = mg_globals.global_config['plugins']['mediagoblin.plugins.floobifier']
+ >>> floobie_dir = floobie_config['floobie_dir']
+
+A tip: you have access to the `%(here)s` variable in your config,
+which is the directory that the user's mediagoblin config is running
+out of. So for example, your plugin may need a "floobie" directory to
+store floobs in. You could give them a reasonable default that makes
+use of the default `user_dev` location, but allow users to override
+it, like so::
+
+ [plugin_spec]
+ floobie_dir = string(default="%(here)s/user_dev/floobs/")
+
+Note, this is relative to the user's mediagoblin config directory,
+*not* your plugin directory!
+
Context Hooks
-------------
diff --git a/docs/source/pluginwriter/tests.rst b/docs/source/pluginwriter/tests.rst
new file mode 100644
index 00000000..fe99688f
--- /dev/null
+++ b/docs/source/pluginwriter/tests.rst
@@ -0,0 +1,64 @@
+.. MediaGoblin Documentation
+
+ Written in 2013 by MediaGoblin contributors
+
+ To the extent possible under law, the author(s) have dedicated all
+ copyright and related and neighboring rights to this software to
+ the public domain worldwide. This software is distributed without
+ any warranty.
+
+ You should have received a copy of the CC0 Public Domain
+ Dedication along with this software. If not, see
+ <http://creativecommons.org/publicdomain/zero/1.0/>.
+
+==============================
+Writing unit tests for plugins
+==============================
+
+Here's a brief guide to writing unit tests for plugins. However, it
+isn't really ideal. It also hasn't been well tested... yes, there's
+some irony there :)
+
+Some notes: we're using py.test and webtest for unit testing stuff.
+Keep that in mind.
+
+My suggestion is to mime the behavior of `mediagoblin/tests/` and put
+that in your own plugin, like `myplugin/tests/`. Copy over
+`conftest.py` and `pytest.ini` to your tests directory, but possibly
+change the `test_app` fixture to match your own tests' config needs.
+For example::
+
+ import pkg_resources
+ # [...]
+
+ @pytest.fixture()
+ def test_app(request):
+ return get_app(
+ request,
+ mgoblin_config=pkg_resources.resource_filename(
+ 'myplugin.tests', 'myplugin_mediagoblin.ini'))
+
+In any test module in your tests directory you can then do::
+
+ def test_somethingorother(test_app):
+ # real code goes here
+ pass
+
+And you'll get a mediagoblin application wrapped in webtest passed in
+to your environment.
+
+If your plugin needs to define multiple configuration setups, you can
+actually set up multiple fixtures very easily for this. You can just
+set up multiple fixtures with different names that point to different
+configs and pass them in as that named argument.
+
+To run the tests, from mediagoblin's directory (make sure that your
+plugin has been added to your mediagoblin checkout's virtualenv!) do::
+
+ ./runtests.sh /path/to/myplugin/tests/
+
+replacing `/path/to/myplugin/` with the actual path to your plugin.
+
+NOTE: again, the above is untested, but it should probably work. If
+you run into trouble, `contact us
+<http://mediagoblin.org/pages/join.html>`_, preferably on IRC!
diff --git a/docs/source/siteadmin/media-types.rst b/docs/source/siteadmin/media-types.rst
index 210094b9..1527bc70 100644
--- a/docs/source/siteadmin/media-types.rst
+++ b/docs/source/siteadmin/media-types.rst
@@ -199,8 +199,16 @@ will be able to present them to your wide audience of admirers!
PDF and Document
================
-To enable the "PDF and Document" support plugin, you need pdftocairo, pdfinfo,
-unoconv with headless support. All executables must be on your execution path.
+To enable the "PDF and Document" support plugin, you need:
+
+1. pdftocairo and pdfinfo for pdf only support.
+
+2. unoconv with headless support to support converting libreoffice supported
+ documents as well, such as doc/ppt/xls/odf/odg/odp and more.
+ For the full list see mediagoblin/media_types/pdf/processing.py,
+ unoconv_supported.
+
+All executables must be on your execution path.
To install this on Fedora:
@@ -208,6 +216,9 @@ To install this on Fedora:
sudo yum install -y poppler-utils unoconv libreoffice-headless
+Note: You can leave out unoconv and libreoffice-headless if you want only pdf
+support. This will result in a much smaller list of dependencies.
+
pdf.js relies on git submodules, so be sure you have fetched them:
.. code-block:: bash
diff --git a/docs/source/siteadmin/relnotes.rst b/docs/source/siteadmin/relnotes.rst
index 9c9d311c..7b6d8353 100644
--- a/docs/source/siteadmin/relnotes.rst
+++ b/docs/source/siteadmin/relnotes.rst
@@ -39,6 +39,13 @@ carefully, or at least skim over it.
alias /srv/mediagoblin.example.org/mediagoblin/user_dev/plugin_static/;
}
+ Similarly, if you've got a modified paste config, you may want to
+ borrow the app:plugin_static section from the default paste.ini
+ file.
+5. We now use itsdangerous for sessions; if you had any references to
+ beaker in your paste config you can remove them. Again, see the
+ default paste.ini config
+
**For theme authors**
If you have your own theme or you have any "user modified templates",
@@ -51,7 +58,23 @@ please note the following:
You can easily customize this to give a welcome page appropriate to
your site.
+
**New features**
+* PDF media type!
+* Improved plugin system. More flexible, better documented, with a
+ new plugin authoring section of the docs.
+* itsdangerous based sessions. No more beaker!
+* New, experimental Piwigo-based API. This means you should be able
+ to use MediaGoblin with something like Shotwell. (Again, a word of
+ caution: this is *very experimental*!)
+* Human readable timestamps, and the option to display the original
+ date of an image when available (available as the
+ "original_date_visible" variable)
+* Moved unit testing system from nosetests to py.test so we can better
+ handle issues with sqlalchemy exploding with different database
+ configurations. Long story :)
+* You can now disable the ability to post comments.
+* Tags now can be up to length 255 characters by default.
0.3.3