diff options
author | Kristofer Hallin <kristofer@sunet.se> | 2021-10-06 08:43:07 +0200 |
---|---|---|
committer | Kristofer Hallin <kristofer@sunet.se> | 2021-10-06 08:43:07 +0200 |
commit | 0dac1d1f4138419fbf4d0ff65a0ecad1b8220920 (patch) | |
tree | 8122acc889b539725d2a8e23988912c01609c246 | |
parent | e65ebe9010f618dfa81d7d26d8bad456accfcd6e (diff) |
Now easier to put UWSGI and NGINX in front of the API.
-rwxr-xr-x | src/wsgi.py | 64 |
1 files changed, 26 insertions, 38 deletions
diff --git a/src/wsgi.py b/src/wsgi.py index 3c3d363..b7de59f 100755 --- a/src/wsgi.py +++ b/src/wsgi.py @@ -10,6 +10,16 @@ from db import DictDB from base64 import b64decode from wsgiref.simple_server import make_server +try: + database = os.environ['COUCHDB_NAME'] + hostname = os.environ['COUCHDB_HOSTNAME'] + username = os.environ['COUCHDB_USER'] + password = os.environ['COUCHDB_PASSWORD'] +except KeyError: + print('The environment variables COUCHDB_NAME, COUCHDB_HOSTNAME,' + + ' COUCHDB_USER and COUCHDB_PASSWORD must be set.') + sys.exit(-1) + class CollectorResource(): def __init__(self, db, users): @@ -103,49 +113,27 @@ class EPAdd(CollectorResource): resp.text = repr(keys) + '\n' -def init(url_res_map, addr='', port=8000): +def main(port=8000, wsgi_helper=False): + db = DictDB(database, hostname, username, password) + users = authn.UserDB('wsgi_demo_users.yaml') + resources_map = [ + ('/sc/v0/add', EPAdd(db, users)), + ('/sc/v0/get', EPGet(db, users)) + ] app = falcon.App(cors_enable=True) - for url, res in url_res_map: + + for url, res in resources_map: app.add_route(url, res) - return make_server(addr, port, app) - - -def main(): - # Simple demo. Run it from the demo directory where a sample user - # database can be found: - # - # $ cd demo && ../src/wsgi.py - # Serving on port 8000... - # - # 1. Try adding some observations, basic auth user:pw from - # wsgi_demo_users.yaml, including {"domain": "sunet.se"} in at - # least one of them: - # - # $ echo '[{"ip": "192.168.0.1", "port": 80, "domain": "sunet.se"}]' | curl -s -u user3:pw3 --data-binary @- http://localhost:8000/sc/v0/add - # - # 2. Try retreiving all observations for a user with read access - # to 'sunet.se': - # - # $ curl -s -u user1:pw1 http://localhost:8000/sc/v0/get | json_pp -json_opt utf8,pretty - - try: - database = os.environ['DB_NAME'] - hostname = os.environ['DB_HOSTNAME'] - username = os.environ['DB_USERNAME'] - password = os.environ['DB_PASSWORD'] - except KeyError: - print('The environment variables DB_NAME, DB_HOSTNAME, DB_USERNAME ' + - 'and DB_PASSWORD must be set.') - sys.exit(-1) - db = DictDB(database, hostname, username, password) - users = authn.UserDB('wsgi_demo_users.yaml') + if not wsgi_helper: + print('Serving on port 8000...') + httpd = make_server('', port, app) + httpd.serve_forever() - httpd = init([('/sc/v0/add', EPAdd(db, users)), - ('/sc/v0/get', EPGet(db, users))]) - print('Serving on port 8000...') - httpd.serve_forever() + return app if __name__ == '__main__': sys.exit(main()) +else: + app = main(port=8000, wsgi_helper=True) |