diff options
author | Brad Bishop <bradleyb@fuzziesquirrel.com> | 2016-08-29 15:53:25 -0400 |
---|---|---|
committer | Brad Bishop <bradleyb@fuzziesquirrel.com> | 2016-08-30 08:46:57 -0400 |
commit | 2c6fc760919cc214413874d60489e3643b639692 (patch) | |
tree | 65e57c81daf4a13fabc292c4e43eede7a472134f | |
parent | 803c6f1be7f589043c817a2b00fac5b0af93d200 (diff) | |
download | phosphor-rest-server-2c6fc760919cc214413874d60489e3643b639692.tar.gz phosphor-rest-server-2c6fc760919cc214413874d60489e3643b639692.zip |
Split server and application
Provide the REST server as a python module, enabling it to be hosted
by any WSGI provider.
Provide a Rocket startup script with configurable WSGI application.
Change-Id: I1a9c25b10c33b08dfb8f60dc6c33aaf727562a9f
Signed-off-by: Brad Bishop <bradleyb@fuzziesquirrel.com>
-rw-r--r-- | module/obmc/wsgi/apps/rest_dbus.py (renamed from phosphor-rest) | 26 | ||||
-rw-r--r-- | module/setup.py | 7 | ||||
-rw-r--r-- | servers/cert.pem (renamed from cert.pem) | 0 | ||||
l--------- | servers/rocket/cert.pem | 1 | ||||
-rw-r--r-- | servers/rocket/phosphor-rocket | 44 | ||||
l--------- | servers/rocket/setup.cfg | 1 | ||||
-rw-r--r-- | servers/rocket/setup.py | 8 | ||||
-rw-r--r-- | servers/setup.cfg (renamed from setup.cfg) | 0 | ||||
-rw-r--r-- | setup.py | 7 |
9 files changed, 63 insertions, 31 deletions
diff --git a/phosphor-rest b/module/obmc/wsgi/apps/rest_dbus.py index d8307ee..246396c 100644 --- a/phosphor-rest +++ b/module/obmc/wsgi/apps/rest_dbus.py @@ -1,5 +1,3 @@ -#!/usr/bin/env python - # Contributors Listed Below - COPYRIGHT 2016 # [+] International Business Machines Corp. # @@ -17,16 +15,12 @@ # permissions and limitations under the License. import os -import sys import dbus import dbus.exceptions import json -import logging from xml.etree import ElementTree -from rocket import Rocket from bottle import Bottle, abort, request, response, JSONPlugin, HTTPError import obmc.utils.misc -import obmc.utils.pathtree from obmc.dbuslib.introspection import IntrospectionNodeParser import obmc.mapper import spwd @@ -685,9 +679,9 @@ class JsonpPlugin(JsonApiErrorsPlugin): return self.to_jsonp(json) -class RestApp(Bottle): +class App(Bottle): def __init__(self): - super(RestApp, self).__init__(autojson=False) + super(App, self).__init__(autojson=False) self.bus = dbus.SystemBus() self.mapper = obmc.mapper.Mapper(self.bus) @@ -753,19 +747,3 @@ class RestApp(Bottle): trailing = ("", "/")[path[-1] == '/'] parts = filter(bool, path.split('/')) request.environ['PATH_INFO'] = '/' + '/'.join(parts) + trailing - -if __name__ == '__main__': - log = logging.getLogger('Rocket.Errors') - log.setLevel(logging.INFO) - log.addHandler(logging.StreamHandler(sys.stdout)) - - app = RestApp() - default_cert = os.path.join( - sys.prefix, 'share', os.path.basename(__file__), 'cert.pem') - - server = Rocket( - ('0.0.0.0', 443, default_cert, default_cert), - 'wsgi', {'wsgi_app': app}, - min_threads=1, - max_threads=1) - server.start() diff --git a/module/setup.py b/module/setup.py new file mode 100644 index 0000000..dd2ff3b --- /dev/null +++ b/module/setup.py @@ -0,0 +1,7 @@ +from distutils.core import setup + +setup( + name='phosphor-rest-dbus', + version='1.0', + py_modules=['obmc.wsgi.apps.rest_dbus'], + ) diff --git a/cert.pem b/servers/cert.pem index 095da08..095da08 100644 --- a/cert.pem +++ b/servers/cert.pem diff --git a/servers/rocket/cert.pem b/servers/rocket/cert.pem new file mode 120000 index 0000000..84d0899 --- /dev/null +++ b/servers/rocket/cert.pem @@ -0,0 +1 @@ +../cert.pem
\ No newline at end of file diff --git a/servers/rocket/phosphor-rocket b/servers/rocket/phosphor-rocket new file mode 100644 index 0000000..139509c --- /dev/null +++ b/servers/rocket/phosphor-rocket @@ -0,0 +1,44 @@ +#!/usr/bin/env python + +# Contributors Listed Below - COPYRIGHT 2016 +# [+] International Business Machines Corp. +# +# +# 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. + +import sys +import os +import logging +from rocket import Rocket + +if __name__ == '__main__': + if len(sys.argv) < 2: + sys.stderr.write('WSGI application required!') + sys.exit(1) + + exec 'from obmc.wsgi.apps.%s import App' % sys.argv[1] + + log = logging.getLogger('Rocket.Errors') + log.setLevel(logging.INFO) + log.addHandler(logging.StreamHandler(sys.stdout)) + + default_cert = os.path.join( + sys.prefix, 'share', os.path.basename(__file__), 'cert.pem') + + app = App() + server = Rocket( + ('0.0.0.0', 443, default_cert, default_cert), + 'wsgi', {'wsgi_app': app}, + min_threads=1, + max_threads=1) + server.start() diff --git a/servers/rocket/setup.cfg b/servers/rocket/setup.cfg new file mode 120000 index 0000000..29939b5 --- /dev/null +++ b/servers/rocket/setup.cfg @@ -0,0 +1 @@ +../setup.cfg
\ No newline at end of file diff --git a/servers/rocket/setup.py b/servers/rocket/setup.py new file mode 100644 index 0000000..08dfa39 --- /dev/null +++ b/servers/rocket/setup.py @@ -0,0 +1,8 @@ +from distutils.core import setup + +setup( + name='phosphor-rocket', + version='1.0', + scripts=['phosphor-rocket'], + data_files=[('phosphor-rocket', ['cert.pem'])], + ) diff --git a/setup.cfg b/servers/setup.cfg index ed3bf6e..ed3bf6e 100644 --- a/setup.cfg +++ b/servers/setup.cfg diff --git a/setup.py b/setup.py deleted file mode 100644 index 568a00b..0000000 --- a/setup.py +++ /dev/null @@ -1,7 +0,0 @@ -from distutils.core import setup - -setup(name='phosphor-rest', - version='1.0', - scripts=['phosphor-rest'], - data_files=[('phosphor-rest', ['cert.pem'])], - ) |