Initial mediagoblin structure
This commit is contained in:
commit
31a8ff4288
9
.gitignore
vendored
Normal file
9
.gitignore
vendored
Normal file
@ -0,0 +1,9 @@
|
|||||||
|
dist/
|
||||||
|
bin/
|
||||||
|
develop-eggs/
|
||||||
|
build/
|
||||||
|
eggs/
|
||||||
|
.installed.cfg
|
||||||
|
wsgit.egg-info
|
||||||
|
*.pyc
|
||||||
|
*.pyo
|
0
mediagoblin/__init__.py
Normal file
0
mediagoblin/__init__.py
Normal file
64
mediagoblin/app.py
Normal file
64
mediagoblin/app.py
Normal file
@ -0,0 +1,64 @@
|
|||||||
|
import sys
|
||||||
|
import urllib
|
||||||
|
|
||||||
|
from webob import Request, exc
|
||||||
|
import routes
|
||||||
|
|
||||||
|
from mediagoblin import routing, util
|
||||||
|
|
||||||
|
|
||||||
|
class Error(Exception): pass
|
||||||
|
class ImproperlyConfigured(Error): pass
|
||||||
|
|
||||||
|
|
||||||
|
def load_controller(string):
|
||||||
|
module_name, func_name = string.split(':', 1)
|
||||||
|
__import__(module_name)
|
||||||
|
module = sys.modules[module_name]
|
||||||
|
func = getattr(module, func_name)
|
||||||
|
return func
|
||||||
|
|
||||||
|
|
||||||
|
class MediagoblinApp(object):
|
||||||
|
"""
|
||||||
|
Really basic wsgi app using routes and WebOb.
|
||||||
|
"""
|
||||||
|
def __init__(self, user_template_path=None):
|
||||||
|
self.template_env = util.get_jinja_env(user_template_path)
|
||||||
|
|
||||||
|
def __call__(self, environ, start_response):
|
||||||
|
request = Request(environ)
|
||||||
|
path_info = request.path_info
|
||||||
|
route_match = routing.mapping.match(path_info)
|
||||||
|
|
||||||
|
# No matching page?
|
||||||
|
if route_match is None:
|
||||||
|
# Try to do see if we have a match with a trailing slash
|
||||||
|
# added and if so, redirect
|
||||||
|
if not path_info.endswith('/') \
|
||||||
|
and request.method == 'GET' \
|
||||||
|
and routing.mapping.match(path_info + '/'):
|
||||||
|
new_path_info = path_info + '/'
|
||||||
|
if request.GET:
|
||||||
|
new_path_info = '%s?%s' % (
|
||||||
|
new_path_info, urllib.urlencode(request.GET))
|
||||||
|
redirect = exc.HTTPTemporaryRedirect(location=new_path_info)
|
||||||
|
return request.get_response(redirect)(environ, start_response)
|
||||||
|
|
||||||
|
# Okay, no matches. 404 time!
|
||||||
|
return exc.HTTPNotFound()(environ, start_response)
|
||||||
|
|
||||||
|
controller = load_controller(route_match['controller'])
|
||||||
|
request.start_response = start_response
|
||||||
|
|
||||||
|
request.matchdict = route_match
|
||||||
|
request.app = self
|
||||||
|
request.template_env = self.template_env
|
||||||
|
request.urlgen = routes.URLGenerator(routing.mapping, environ)
|
||||||
|
|
||||||
|
return controller(request)(environ, start_response)
|
||||||
|
|
||||||
|
|
||||||
|
def paste_app_factory(global_config, **kw):
|
||||||
|
return MediagoblinApp(
|
||||||
|
user_template_path=kw.get('local_templates'))
|
7
mediagoblin/routing.py
Normal file
7
mediagoblin/routing.py
Normal file
@ -0,0 +1,7 @@
|
|||||||
|
from routes import Mapper
|
||||||
|
|
||||||
|
mapping = Mapper()
|
||||||
|
mapping.minimization = False
|
||||||
|
|
||||||
|
mapping.connect(
|
||||||
|
"index", "/", controller="mediagoblin.views:root_view")
|
11
mediagoblin/util.py
Normal file
11
mediagoblin/util.py
Normal file
@ -0,0 +1,11 @@
|
|||||||
|
import jinja2
|
||||||
|
|
||||||
|
def get_jinja_env(user_template_path=None):
|
||||||
|
if user_template_path:
|
||||||
|
loader = jinja2.ChoiceLoader(
|
||||||
|
[jinja2.FileSystemLoader(user_template_path),
|
||||||
|
jinja2.PackageLoader('mediagoblin', 'templates')])
|
||||||
|
else:
|
||||||
|
loader = jinja2.PackageLoader('mediagoblin', 'templates')
|
||||||
|
|
||||||
|
return jinja2.Environment(loader=loader, autoescape=True)
|
4
mediagoblin/views.py
Normal file
4
mediagoblin/views.py
Normal file
@ -0,0 +1,4 @@
|
|||||||
|
from webob import Response, exc
|
||||||
|
|
||||||
|
def root_view(request):
|
||||||
|
return Response("This is the root")
|
17
setup.py
Normal file
17
setup.py
Normal file
@ -0,0 +1,17 @@
|
|||||||
|
from setuptools import setup, find_packages
|
||||||
|
|
||||||
|
import sys
|
||||||
|
|
||||||
|
setup(
|
||||||
|
name = "mediagoblin",
|
||||||
|
version = "0.0.1",
|
||||||
|
packages=find_packages(exclude=['ez_setup', 'examples', 'tests']),
|
||||||
|
zip_safe=False,
|
||||||
|
license = 'AGPLv3',
|
||||||
|
author = 'Christopher Webber',
|
||||||
|
author_email = 'cwebber@dustycloud.org',
|
||||||
|
entry_points = """\
|
||||||
|
[paste.app_factory]
|
||||||
|
mediagoblin = mediagoblin.app:paste_app_factory
|
||||||
|
""",
|
||||||
|
)
|
Loading…
x
Reference in New Issue
Block a user