As much as anything, I'm just tired of seeing a bunch or piecemeal fixes. Note that we *need* to include from __future__ import print_function in order to support things like print() # Would print "()" (the repr of an empty tuple) otherwise print(foo, end='') # Would SyntaxError print(bar, file=sys.stderr) # Would SyntaxError Change-Id: I8fdf0740e292eb1ee785512d02e8c552781dcae1
		
			
				
	
	
		
			91 lines
		
	
	
		
			3.0 KiB
		
	
	
	
		
			Python
		
	
	
		
			Executable File
		
	
	
	
	
			
		
		
	
	
			91 lines
		
	
	
		
			3.0 KiB
		
	
	
	
		
			Python
		
	
	
		
			Executable File
		
	
	
	
	
#!/usr/bin/env python
 | 
						|
# Licensed under the Apache License, Version 2.0 (the "License");
 | 
						|
# you may not use this file except in compliance with the License.
 | 
						|
# You may obtain a copy of the License at
 | 
						|
#
 | 
						|
#    http://www.apache.org/licenses/LICENSE-2.0
 | 
						|
#
 | 
						|
# Unless required by applicable law or agreed to in writing, software
 | 
						|
# distributed under the License is distributed on an "AS IS" BASIS,
 | 
						|
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
 | 
						|
# implied.
 | 
						|
# See the License for the specific language governing permissions and
 | 
						|
# limitations under the License.
 | 
						|
 | 
						|
from __future__ import print_function
 | 
						|
import optparse
 | 
						|
import os
 | 
						|
import sys
 | 
						|
 | 
						|
from swift.common.manager import Server
 | 
						|
from swift.common.utils import readconf
 | 
						|
from swift.common.wsgi import appconfig
 | 
						|
 | 
						|
parser = optparse.OptionParser('%prog [options] SERVER')
 | 
						|
parser.add_option('-c', '--config-num', metavar="N", type="int",
 | 
						|
                  dest="number", default=0,
 | 
						|
                  help="parse config for the Nth server only")
 | 
						|
parser.add_option('-s', '--section', help="only display matching sections")
 | 
						|
parser.add_option('-w', '--wsgi', action='store_true',
 | 
						|
                  help="use wsgi/paste parser instead of readconf")
 | 
						|
 | 
						|
 | 
						|
def _context_name(context):
 | 
						|
    return ':'.join((context.object_type.name, context.name))
 | 
						|
 | 
						|
 | 
						|
def inspect_app_config(app_config):
 | 
						|
    conf = {}
 | 
						|
    context = app_config.context
 | 
						|
    section_name = _context_name(context)
 | 
						|
    conf[section_name] = context.config()
 | 
						|
    if context.object_type.name == 'pipeline':
 | 
						|
        filters = context.filter_contexts
 | 
						|
        pipeline = []
 | 
						|
        for filter_context in filters:
 | 
						|
            conf[_context_name(filter_context)] = filter_context.config()
 | 
						|
            pipeline.append(filter_context.entry_point_name)
 | 
						|
        app_context = context.app_context
 | 
						|
        conf[_context_name(app_context)] = app_context.config()
 | 
						|
        pipeline.append(app_context.entry_point_name)
 | 
						|
        conf[section_name]['pipeline'] = ' '.join(pipeline)
 | 
						|
    return conf
 | 
						|
 | 
						|
 | 
						|
def main():
 | 
						|
    options, args = parser.parse_args()
 | 
						|
    options = dict(vars(options))
 | 
						|
 | 
						|
    if not args:
 | 
						|
        return 'ERROR: specify type of server or conf_path'
 | 
						|
    conf_files = []
 | 
						|
    for arg in args:
 | 
						|
        if os.path.exists(arg):
 | 
						|
            conf_files.append(arg)
 | 
						|
        else:
 | 
						|
            conf_files += Server(arg).conf_files(**options)
 | 
						|
    for conf_file in conf_files:
 | 
						|
        print('# %s' % conf_file)
 | 
						|
        if options['wsgi']:
 | 
						|
            app_config = appconfig(conf_file)
 | 
						|
            conf = inspect_app_config(app_config)
 | 
						|
        else:
 | 
						|
            conf = readconf(conf_file)
 | 
						|
        flat_vars = {}
 | 
						|
        for k, v in conf.items():
 | 
						|
            if options['section'] and k != options['section']:
 | 
						|
                continue
 | 
						|
            if not isinstance(v, dict):
 | 
						|
                flat_vars[k] = v
 | 
						|
                continue
 | 
						|
            print('[%s]' % k)
 | 
						|
            for opt, value in v.items():
 | 
						|
                print('%s = %s' % (opt, value))
 | 
						|
            print()
 | 
						|
        for k, v in flat_vars.items():
 | 
						|
            print('# %s = %s' % (k, v))
 | 
						|
        print()
 | 
						|
 | 
						|
if __name__ == "__main__":
 | 
						|
    sys.exit(main())
 |