fakehub: --pdb option
This commit is contained in:
parent
5307b3d2c5
commit
128d02be79
1 changed files with 22 additions and 12 deletions
|
|
@ -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)
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue