.. _codebase-chapter:
========================
Codebase Documentation
========================
This chapter covers the libraries that GNU MediaGoblin uses as well as
various recipes for getting things done.
.. Note::
This chapter is in flux. Clearly there are things here that aren't
documented. If there's something you have questions about, please
ask!
See `the join page on the website `_
for where we hang out.
For more information on how to get started hacking on GNU MediaGoblin,
see :ref:`hacking-howto`.
Software Stack
==============
* Project infrastructure
* `Python `_: the language we're using to write
this
* `Nose `_:
for unit tests
* `buildout `_: for getting dependencies,
building a runtime environment, ...
* Data storage
* `MongoDB `_: the document database backend
for storage
* Web application
* `Paste Deploy `_ and
`Paste Script `_: we'll use this for
configuring and launching the application
* `WebOb `_: nice abstraction layer
from HTTP requests, responses and WSGI bits
* `Routes `_: for URL routing
* `Beaker `_: for handling sessions
* `Jinja2 `_: the templating engine
* `MongoKit `_: the lightweight
ORM for MongoDB we're using which will make it easier to define
structures and all that
* `WTForms `_: for handling,
validation, and abstraction from HTML forms
* `Celery `_: for task queuing (resizing
images, encoding video, ...)
* `RabbitMQ `_: for sending tasks to celery
* Front end
* `JQuery `_: for groovy JavaScript things
What's where
============
After you've run buildout, you're faced with the following directory
tree::
mediagoblin/
|- mediagoblin/ #source code
| |- tests/
| |- templates/
| |- auth/
| \- submit/
|- docs/ #documentation
|
| #the below directories are generated by
| #buildout.
|
|- bin/ #scripts
|- develop-eggs/
|- eggs/
|- mediagoblin.egg-info/
|- parts/
|- user_dev/ #sessions, etc
As you can see, all the code for GNU MediaGoblin is in the
``mediagoblin`` directory.
Here are some interesting files and what they do:
:routing.py: maps url paths to views
:views.py: views handle http requests
:models.py: holds the mongodb schemas---these are the data structures
we're working with
You'll notice that there are several sub-directories: tests,
templates, auth, submit, ...
``tests`` holds the unit test code.
``templates`` holds all the templates for the output.
``auth`` and ``submit`` are modules that enacpsulate authentication
and media item submission. If you look in these directories, you'll
see they have their own ``routing.py``, ``view.py``, and
``models.py`` in addition to some other code.
Recipes
=======
FIXME - write this