From 86f03cb2ffe55ff349eb705fca43186def12924f Mon Sep 17 00:00:00 2001 From: Mike McLean Date: Jun 27 2017 16:58:56 +0000 Subject: fakehub devel tool --- diff --git a/devtools/fakehub b/devtools/fakehub new file mode 100755 index 0000000..be3d82c --- /dev/null +++ b/devtools/fakehub @@ -0,0 +1,98 @@ +#!/usr/bin/python + +import ast +import cStringIO +import os +import os.path +import pprint +import sys +import xmlrpclib +from urllib import quote + +sys.path.insert(0, os.getcwd()) +sys.path.insert(1, os.path.join(os.getcwd(), 'hub')) +import koji +import kojixmlrpc + + +def get_url(environ): + url = environ['wsgi.url_scheme']+'://' + + if environ.get('HTTP_HOST'): + url += environ['HTTP_HOST'] + else: + url += environ['SERVER_NAME'] + + if environ['wsgi.url_scheme'] == 'https': + if environ['SERVER_PORT'] != '443': + url += ':' + environ['SERVER_PORT'] + else: + if environ['SERVER_PORT'] != '80': + url += ':' + environ['SERVER_PORT'] + + url += quote(environ.get('SCRIPT_NAME', '')) + url += quote(environ.get('PATH_INFO', '')) + if environ.get('QUERY_STRING'): + url += '?' + environ['QUERY_STRING'] + return url + + +def nice_literal(value): + try: + return ast.literal_eval(value) + except (ValueError, SyntaxError): + return value + + +def get_request(): + method = sys.argv[1] + args = [] + kwargs = {} + for s in sys.argv[2:]: + if '=' in s: + k, v = s.split('=', 1) + v = nice_literal(v) + kwargs[k] = v + else: + args.append(nice_literal(s)) + args = koji.encode_args(*args, **kwargs) + request = xmlrpclib.dumps(args, method, allow_none=1) + return request + + +def start_response(status, headers): + pprint.pprint("Status: %r" % status) + pprint.pprint("Headers: %r" % headers) + + +def parse_response(data): + p, u = xmlrpclib.getparser() + for chunk in data: + p.feed(chunk) + p.close() + result = u.close() + if len(result) == 1: + result = result[0] + return result + + +def main(): + environ = {} + environ['SCRIPT_FILENAME'] = kojixmlrpc.__file__ + environ['wsgi.url_scheme'] = 'https' + environ['SERVER_NAME'] = 'myserver' + environ['SERVER_PORT'] = '443' + environ['REQUEST_URI'] = get_url(environ) + environ['wsgi.input'] = cStringIO.StringIO(get_request()) + environ['REQUEST_METHOD'] = 'POST' + environ['CONTENT_TYPE'] = 'text/xml' + environ['koji.hub.ConfigFile'] = "%s/devtools/fakehub.conf" % os.getcwd() + environ['koji.hub.ConfigDir'] = "%s/devtools/fakehub.conf.d" % os.getcwd() + print('RESULT:') + data = kojixmlrpc.application(environ, start_response) + result = parse_response(data) + pprint.pprint(result) + + +if __name__ == '__main__': + main()