Merge "[CORD-967] Added status codes for unauthorized and forbidden"
diff --git a/main.py b/main.py
index 9c5912c..d394c4e 100755
--- a/main.py
+++ b/main.py
@@ -47,7 +47,8 @@
internal_host_address=os.environ.get('INTERNAL_HOST_ADDRESS',
get_my_primary_local_ipv4()),
rest_port=os.environ.get('REST_PORT', 8881),
- work_dir=os.environ.get('WORK_DIR', '/tmp/chameleon')
+ work_dir=os.environ.get('WORK_DIR', '/tmp/chameleon'),
+ swagger_url=os.environ.get('SWAGGER_URL', '/'),
)
@@ -159,6 +160,14 @@
default=False,
help=_help)
+ _help = ('override swagger url (default=%s)'
+ % defs['swagger_url'])
+ parser.add_argument('-S', '--swagger-url',
+ dest='swagger_url',
+ action='store',
+ default=defs['swagger_url'],
+ help=_help)
+
args = parser.parse_args()
# post-processing
@@ -227,7 +236,7 @@
self.grpc_client = yield \
GrpcClient(args.consul, args.work_dir, args.grpc_endpoint)
self.rest_server = yield \
- WebServer(args.rest_port, args.work_dir, self.grpc_client).start()
+ WebServer(args.rest_port, args.work_dir, args.swagger_url, self.grpc_client).start()
self.grpc_client.set_reconnect_callback(
self.rest_server.reload_generated_routes).start()
self.log.info('started-internal-services')
diff --git a/web_server/web_server.py b/web_server/web_server.py
index 5cd5c7a..7676b42 100644
--- a/web_server/web_server.py
+++ b/web_server/web_server.py
@@ -37,11 +37,12 @@
app = Klein()
- def __init__(self, port, work_dir, grpc_client):
+ def __init__(self, port, work_dir, swagger_url, grpc_client):
self.port = port
self.site = None
self.work_dir = work_dir
self.grpc_client = grpc_client
+ self.swagger_url = swagger_url
self.swagger_ui_root_dir = os.path.abspath(
os.path.join(os.path.dirname(__file__), '../swagger_ui'))
@@ -49,6 +50,26 @@
self.tcp_port = None
self.shutting_down = False
+ self.add_swagger_routes(self.app, swagger_url)
+
+ def add_swagger_routes(self, app, swagger_url):
+ log.info('Publishing swagger docs at %s' % swagger_url)
+
+ @app.route(swagger_url + '/', branch=True)
+ def static(self, request):
+ try:
+ log.debug(request=request)
+ return File(self.swagger_ui_root_dir)
+ except Exception, e:
+ log.exception('file-not-found', request=request)
+
+ @app.route(swagger_url + '/v1/swagger.json')
+ def swagger_json(self, request):
+ try:
+ return File(os.path.join(self.work_dir, 'swagger.json'))
+ except Exception, e:
+ log.exception('file-not-found', request=request)
+
@inlineCallbacks
def start(self):
log.debug('starting')
@@ -82,25 +103,6 @@
m.add_routes(self.app, self.grpc_client)
log.info('routes-loaded', module=module_name)
- # static swagger_ui website as landing page (for now)
-
- @app.route('/', branch=True)
- def static(self, request):
- try:
- log.debug(request=request)
- return File(self.swagger_ui_root_dir)
- except Exception, e:
- log.exception('file-not-found', request=request)
-
- # static swagger.json file to serve the schema
-
- @app.route('/v1/swagger.json')
- def swagger_json(self, request):
- try:
- return File(os.path.join(self.work_dir, 'swagger.json'))
- except Exception, e:
- log.exception('file-not-found', request=request)
-
@app.handle_errors(grpc._channel._Rendezvous)
def grpc_exception(self, request, failure):
code = failure.value.code()