Initial jinja2 porting work

This commit is contained in:
Mike McLean 2025-03-01 22:39:47 -05:00 committed by Tomas Kopecek
parent dbb60e91f3
commit dee1127ce8
59 changed files with 3129 additions and 2797 deletions

View file

@ -2,9 +2,11 @@
from __future__ import absolute_import, print_function
import ast
import mimetypes
import os
import os.path
import optparse
import pprint
import sys
from urllib.parse import quote
@ -17,6 +19,7 @@ sys.path.insert(0, CWD)
sys.path.insert(1, os.path.join(CWD, 'www/lib'))
sys.path.insert(1, os.path.join(CWD, 'www/kojiweb'))
import wsgi_publisher
import index as kojiweb_handlers
def get_url(environ):
@ -122,11 +125,75 @@ def application(environ, start_response):
return wsgi_publisher.application(environ, start_response)
def nice_literal(value):
try:
return ast.literal_eval(value)
except (ValueError, SyntaxError):
return value
def get_options():
parser = optparse.OptionParser(usage='%prog [options]')
# parser.add_option('--pdb', action='store_true',
# help='drop into pdb on error')
parser.add_option('--user', '-u', help='fake login as user')
parser.add_option('-o', '--config-option', help='override config option',
action='append', metavar='NAME=VALUE')
opts, args = parser.parse_args()
if args:
parser.error('This command takes no args, just options')
if opts.config_option:
overrides = {}
for s in opts.config_option:
k, v = s.split('=', 1)
v = nice_literal(v)
overrides[k] = v
opts.config_option = overrides
return opts
def override_load_config(opts):
original_load_config = wsgi_publisher.Dispatcher.load_config
def my_load_config(_self, environ):
oldopts = original_load_config(_self, environ)
oldopts.update(opts)
_self.options = oldopts
return oldopts
wsgi_publisher.Dispatcher.load_config = my_load_config
def fake_login(user):
original_assertLogin = kojiweb_handlers._assertLogin
original_getServer = kojiweb_handlers._getServer
def my_assertLogin(environ):
pass
def my_getServer(environ):
session = original_getServer(environ)
environ['koji.currentUser'] = session.getUser(user)
return session
kojiweb_handlers._assertLogin = my_assertLogin
kojiweb_handlers._getServer = my_getServer
def main():
options = get_options()
if options.config_option:
override_load_config(options.config_option)
if options.user:
fake_login(options.user)
# koji.add_file_logger('koji', 'fakeweb.log')
httpd = make_server('', 8000, application)
print("Serving kojiweb on http://localhost:8000 ...")
httpd.serve_forever()
if __name__ == '__main__':
main()