3 ========================
5 ========================
7 This chapter covers the libraries that GNU MediaGoblin uses as well as
8 various recipes for getting things done.
12 This chapter is in flux. Clearly there are things here that aren't
13 documented. If there's something you have questions about, please
16 See `the join page on the website <http://mediagoblin.org/join/>`_
17 for where we hang out.
19 For more information on how to get started hacking on GNU MediaGoblin,
20 see :ref:`hacking-howto`.
26 * Project infrastructure
28 * `Python <http://python.org/>`_: the language we're using to write
31 * `Nose <http://somethingaboutorange.com/mrl/projects/nose/>`_:
34 * `buildout <http://www.buildout.org/>`_: for getting dependencies,
35 building a runtime environment, ...
39 * `MongoDB <http://www.mongodb.org/>`_: the document database backend
44 * `Paste Deploy <http://pythonpaste.org/deploy/>`_ and
45 `Paste Script <http://pythonpaste.org/script/>`_: we'll use this for
46 configuring and launching the application
48 * `WebOb <http://pythonpaste.org/webob/>`_: nice abstraction layer
49 from HTTP requests, responses and WSGI bits
51 * `Routes <http://routes.groovie.org/>`_: for URL routing
53 * `Beaker <http://beaker.groovie.org/>`_: for handling sessions
55 * `Jinja2 <http://jinja.pocoo.org/docs/>`_: the templating engine
57 * `MongoKit <http://namlook.github.com/mongokit/>`_: the lightweight
58 ORM for MongoDB we're using which will make it easier to define
59 structures and all that
61 * `WTForms <http://wtforms.simplecodes.com/>`_: for handling,
62 validation, and abstraction from HTML forms
64 * `Celery <http://celeryproject.org/>`_: for task queuing (resizing
65 images, encoding video, ...)
67 * `RabbitMQ <http://www.rabbitmq.com/>`_: for sending tasks to celery
71 * `JQuery <http://jquery.com/>`_: for groovy JavaScript things
78 After you've run buildout, you're faced with the following directory
82 |- mediagoblin/ #source code
87 |- docs/ #documentation
89 | #the below directories are generated by
95 |- mediagoblin.egg-info/
97 |- user_dev/ #sessions, etc
100 As you can see, all the code for GNU MediaGoblin is in the
101 ``mediagoblin`` directory.
103 Here are some interesting files and what they do:
105 :routing.py: maps url paths to views
106 :views.py: views handle http requests
107 :models.py: holds the mongodb schemas---these are the data structures
110 You'll notice that there are several sub-directories: tests,
111 templates, auth, submit, ...
113 ``tests`` holds the unit test code.
115 ``templates`` holds all the templates for the output.
117 ``auth`` and ``submit`` are modules that enacpsulate authentication
118 and media item submission. If you look in these directories, you'll
119 see they have their own ``routing.py``, ``view.py``, and
120 ``models.py`` in addition to some other code.