diff options
author | 2018-02-13 13:11:57 +0100 | |
---|---|---|
committer | 2018-02-13 12:11:57 +0000 | |
commit | f92946e12f9acfa394c04a140a2a4d025a5fe3ca (patch) | |
tree | a74a0874c842952899f3d10ff2df8397fb89560d /pysite/database.py | |
parent | Websocket echo test (diff) |
RethinkDB API Views #yqhg
* Refactoring the database implementation into a class of its own.
* Refactoring the database implementation into a class of its own.
* healthcheck should belong to the API.
* dynamic subdomain loading, setting up basic handling for staff.pythondiscord.com, and started on a TagView for a bot tag feature.
* Oops, forgot to fix some merges.
* Some quality of life updates - default values for env variables that aren't secret, and starting to get through the tag view.
* Refactoring the database implementation into a class of its own.
* healthcheck should belong to the API.
* dynamic subdomain loading, setting up basic handling for staff.pythondiscord.com, and started on a TagView for a bot tag feature.
* Oops, forgot to fix some merges.
* Some quality of life updates - default values for env variables that aren't secret, and starting to get through the tag view.
* API validation added to the APIView class, TagView should be finished as well.
* super important commit you guys
* fixed a bug with the RethinkDB class where host and port attributes were accessed before being created
* Fixed my editor now you guys
* Fixing up some of the problems brought up in gdude's review
* Handling GET requests with param indata and POST with JSON. Fixed error handling to use the constants and the baseclass self.error().
* Get API-key from headers, context manage the db assignment, and default env var values
* Changed API-KEY header to X_API_Key. Added a default for secret key. it should no longer be necessary with environment variables to run this system locally.
* Changing back the nav to have relative paths
* Why am I like this
Diffstat (limited to 'pysite/database.py')
-rw-r--r-- | pysite/database.py | 43 |
1 files changed, 43 insertions, 0 deletions
diff --git a/pysite/database.py b/pysite/database.py new file mode 100644 index 00000000..75f01378 --- /dev/null +++ b/pysite/database.py @@ -0,0 +1,43 @@ +# coding=utf-8 + +import os + +from flask import abort + +import rethinkdb + + +class RethinkDB: + + def __init__(self, loop_type: str = "gevent"): + self.host = os.environ.get("RETHINKDB_HOST", "127.0.0.1") + self.port = os.environ.get("RETHINKDB_PORT", "28016") + self.database = os.environ.get("RETHINKDB_DATABASE", "pythondiscord") + self.conn = None + + rethinkdb.set_loop_type(loop_type) + + with self.get_connection(connect_database=False) as conn: + try: + rethinkdb.db_create(self.database).run(conn) + print(f"Database created: {self.database}") + except rethinkdb.RqlRuntimeError: + print(f"Database found: {self.database}") + + def get_connection(self, connect_database: bool = True): + if connect_database: + return rethinkdb.connect(host=self.host, port=self.port, db=self.database) + else: + return rethinkdb.connect(host=self.host, port=self.port) + + def before_request(self): + try: + self.conn = self.get_connection() + except rethinkdb.RqlDriverError: + abort(503, "Database connection could not be established.") + + def teardown_request(self, _): + try: + self.conn.close() + except AttributeError: + pass |