1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
|
=======
Stack
=======
The software stack for this project might change over time, but this
is what we're thinking right now.
There's some explanation of design decisions in the
:ref:`design-decisions-chapter`.
Python
======
* http://python.org/
The core team does a lot of work in Python and it's the language we're
most likely to do a project like this in.
MongoDB
=======
* http://www.mongodb.org/
A "document database". Because it's extremely flexible and scales up
well, but I guess not down well.
MongoKit
========
* http://namlook.github.com/mongokit/
A lightweight ORM for mongodb. Helps us define our structures better,
does schema validation, schema evolution, and helps make things more
fun and pythonic.
Jinja2
======
* http://jinja.pocoo.org/docs/
For templating. Pretty much django templates++ but allows us to pass
arguments into method calls instead of writing custom tags.
WTForms
=======
* http://wtforms.simplecodes.com/
For form handling, validation, abstraction. Almost just like Django's
templates.
WebOb
=====
* http://pythonpaste.org/webob/
Gives nice request/response objects (also somewhat Django-ish).
Paste Deploy and Paste Script
=============================
* http://pythonpaste.org/deploy/
* http://pythonpaste.org/script/
This will be the default way of configuring and launching the
application. Since GNU MediaGoblin will be fairly WSGI minimalist though,
you can probably use other ways to launch it, though this will be the
default.
Routes
======
* http://routes.groovie.org/
For URL Routing. It works well enough.
JQuery
======
* http://jquery.com/
For all sorts of things on the JavaScript end of things, for all sorts
of reasons.
Beaker
======
* http://beaker.groovie.org/
For sessions, because that seems like it's generally considered the
way to go I guess.
Nose
====
* http://somethingaboutorange.com/mrl/projects/nose/1.0.0/
For unit tests because it makes testing a bit nicer.
Celery
======
* http://celeryproject.org/
For task queueing (resizing images, encoding video, ...).
RabbitMQ
========
* http://www.rabbitmq.com/
For sending tasks to celery, because I guess that's what most people
do. Might be optional, might also let people use MongoDB for this if
they want.
|