aboutsummaryrefslogtreecommitdiffstats
path: root/mediagoblin/app.py
diff options
context:
space:
mode:
Diffstat (limited to 'mediagoblin/app.py')
-rw-r--r--mediagoblin/app.py40
1 files changed, 32 insertions, 8 deletions
diff --git a/mediagoblin/app.py b/mediagoblin/app.py
index 9bbccf24..ce4b0bec 100644
--- a/mediagoblin/app.py
+++ b/mediagoblin/app.py
@@ -20,7 +20,10 @@ import urllib
import routes
from webob import Request, exc
-from mediagoblin import routing, util, middleware
+from mediagoblin import routing, middleware
+from mediagoblin.tools import common, translate, template
+from mediagoblin.tools.response import render_404
+from mediagoblin.tools import request as mg_request
from mediagoblin.mg_globals import setup_globals
from mediagoblin.init.celery import setup_celery_from_config
from mediagoblin.init import (get_jinja_loader, get_staticdirector,
@@ -98,7 +101,7 @@ class MediaGoblinApp(object):
setup_workbench()
# instantiate application middleware
- self.middleware = [util.import_component(m)(self)
+ self.middleware = [common.import_component(m)(self)
for m in middleware.ENABLED_MIDDLEWARE]
def __call__(self, environ, start_response):
@@ -114,6 +117,17 @@ class MediaGoblinApp(object):
path_info = request.path_info
route_match = self.routing.match(path_info)
+ # By using fcgi, mediagoblin can run under a base path
+ # like /mediagoblin/. request.path_info contains the
+ # path inside mediagoblin. If the something needs the
+ # full path of the current page, that should include
+ # the basepath.
+ # Note: urlgen and routes are fine!
+ request.full_path = environ["SCRIPT_NAME"] + request.path_info
+ # python-routes uses SCRIPT_NAME. So let's use that too.
+ # The other option would be:
+ # request.full_path = environ["SCRIPT_URL"]
+
## Attach utilities to the request object
request.matchdict = route_match
request.urlgen = routes.URLGenerator(self.routing, environ)
@@ -122,14 +136,14 @@ class MediaGoblinApp(object):
# Attach self as request.app
# Also attach a few utilities from request.app for convenience?
request.app = self
- request.locale = util.get_locale_from_request(request)
+ request.locale = translate.get_locale_from_request(request)
- request.template_env = util.get_jinja_env(
+ request.template_env = template.get_jinja_env(
self.template_loader, request.locale)
request.db = self.db
request.staticdirect = self.staticdirector
- util.setup_user_in_request(request)
+ mg_request.setup_user_in_request(request)
# No matching page?
if route_match is None:
@@ -147,9 +161,9 @@ class MediaGoblinApp(object):
# Okay, no matches. 404 time!
request.matchdict = {} # in case our template expects it
- return util.render_404(request)(environ, start_response)
+ return render_404(request)(environ, start_response)
- controller = util.import_component(route_match['controller'])
+ controller = common.import_component(route_match['controller'])
request.start_response = start_response
# get the response from the controller
@@ -163,6 +177,16 @@ class MediaGoblinApp(object):
def paste_app_factory(global_config, **app_config):
- mgoblin_app = MediaGoblinApp(app_config['config'])
+ configs = app_config['config'].split()
+ mediagoblin_config = None
+ for config in configs:
+ if os.path.exists(config) and os.access(config, os.R_OK):
+ mediagoblin_config = config
+ break
+
+ if not mediagoblin_config:
+ raise IOError("Usable mediagoblin config not found.")
+
+ mgoblin_app = MediaGoblinApp(mediagoblin_config)
return mgoblin_app