summaryrefslogtreecommitdiff
path: root/database.py
diff options
context:
space:
mode:
authorschneefux <schneefux+commit@schneefux.xyz>2017-01-23 12:58:12 +0100
committerschneefux <schneefux+commit@schneefux.xyz>2017-01-23 13:02:09 +0100
commit068035760ca3abd22b67d0b53bf73f2e83209b53 (patch)
tree86d4fcdeab7cc4f6f993c7fe04e496b2116f2149 /database.py
parentc121a662e16c5ff17bb8a0ed64875dd8a1a8f2b0 (diff)
downloadapigrabber-068035760ca3abd22b67d0b53bf73f2e83209b53.tar.gz
apigrabber-068035760ca3abd22b67d0b53bf73f2e83209b53.zip
api: send requests synchronously
Diffstat (limited to 'database.py')
-rw-r--r--database.py40
1 files changed, 40 insertions, 0 deletions
diff --git a/database.py b/database.py
index 8cdf1f8..8fad408 100644
--- a/database.py
+++ b/database.py
@@ -79,6 +79,46 @@ class Database(object):
tasks.append(task)
await asyncio.gather(*tasks)
+ async def meta(self, key, value=None):
+ """Sets or gets data into a dictionary-like database object.
+
+ :param key: ID of the value.
+ :type key: str
+ :param value: (optional) Value to set.
+ :type value: object
+ :return: If `value` is None, the value the database entry.
+ :rtype: object
+ """
+ async with self._pool.acquire() as conn:
+ async with conn.transaction():
+ await conn.execute("CREATE TABLE IF NOT EXISTS meta " +
+ "(key TEXT PRIMARY KEY, value json)")
+ if value is not None:
+ value = json.dumps(value)
+ await conn.execute("INSERT INTO meta(key, value) " +
+ "VALUES ($1, $2) " +
+ "ON CONFLICT (key) DO " +
+ "UPDATE SET value=$2",
+ key, value)
+ else:
+ result = await conn.fetch("SELECT value FROM meta " +
+ "WHERE key='" + key + "'")
+ if len(result) == 0:
+ raise KeyError
+ return result[0]["value"]
+
+ async def execute(self, query, args):
+ """Runs an SQL statement.
+
+ :param query: SQL query to execute.
+ :type query: str
+ :param args: Query arguments.
+ :type args: list of objects
+ """
+ async with self._pool.acquire() as conn:
+ async with conn.transaction():
+ await conn.execute(query, args)
+
async def select(self, query):
"""Returns the result of an SQL query.