fakehub: --pdb option

This commit is contained in:
Mike McLean 2023-04-10 14:53:07 -04:00
parent 5307b3d2c5
commit 128d02be79

View file

@ -4,6 +4,7 @@ from __future__ import absolute_import, print_function
import ast
import io
import optparse
import os
import os.path
import pprint
@ -17,7 +18,7 @@ from kojihub import kojixmlrpc
import koji.xmlrpcplus
# replace handle_rpc
# alternate handle_rpc, used when --pdb is given
original_handle_rpc = kojixmlrpc.ModXMLRPCRequestHandler.handle_rpc
def handle_rpc(self, environ):
@ -32,8 +33,6 @@ def handle_rpc(self, environ):
# re-raise or the app handler will commit
raise
kojixmlrpc.ModXMLRPCRequestHandler.handle_rpc = handle_rpc
def get_url(environ):
url = environ['wsgi.url_scheme']+'://'
@ -64,20 +63,27 @@ def nice_literal(value):
return value
def get_request():
method = sys.argv[1]
args = []
def get_options():
parser = optparse.OptionParser(usage='%prog [options] <policy_file>')
parser.add_option('--pdb', action='store_true',
help='drop into pdb on error')
opts, args = parser.parse_args()
# parse request from args
method = args[0]
callargs = []
kwargs = {}
for s in sys.argv[2:]:
for s in args[1:]:
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 = koji.xmlrpcplus.dumps(args, method, allow_none=1)
return request
callargs.append(nice_literal(s))
callargs = koji.encode_args(*callargs, **kwargs)
opts.request = koji.xmlrpcplus.dumps(callargs, method, allow_none=1)
return opts
def start_response(status, headers):
@ -105,13 +111,17 @@ def set_config(environ):
def main():
options = get_options()
if options.pdb:
kojixmlrpc.ModXMLRPCRequestHandler.handle_rpc = handle_rpc
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'] = io.StringIO(get_request())
environ['wsgi.input'] = io.StringIO(options.request)
environ['REQUEST_METHOD'] = 'POST'
environ['CONTENT_TYPE'] = 'text/xml'
set_config(environ)