summaryrefslogtreecommitdiffstats
path: root/aurweb
diff options
context:
space:
mode:
authorLukas Fleischer <lfleischer@archlinux.org>2016-09-20 20:18:24 +0200
committerLukas Fleischer <lfleischer@archlinux.org>2016-09-29 22:07:06 +0200
commitdc3fd60715a5b17b9542ec888c6eaeb14c284e2b (patch)
tree18d9f17b8d582409f0db55ee32fc5efa674aaa2e /aurweb
parent1946486a67d6085318e00c753d341ab05d12904c (diff)
downloadaur-dc3fd60715a5b17b9542ec888c6eaeb14c284e2b.tar.gz
aur-dc3fd60715a5b17b9542ec888c6eaeb14c284e2b.tar.xz
Use setuptools to install Python modules
Instead of using relative imports, add support for installing the config and db Python modules to a proper location using setuptools. Change all git-interface scripts to access those modules from the search path. Signed-off-by: Lukas Fleischer <lfleischer@archlinux.org>
Diffstat (limited to 'aurweb')
-rw-r--r--aurweb/__init__.py0
-rw-r--r--aurweb/config.py31
-rw-r--r--aurweb/db.py51
3 files changed, 82 insertions, 0 deletions
diff --git a/aurweb/__init__.py b/aurweb/__init__.py
new file mode 100644
index 00000000..e69de29b
--- /dev/null
+++ b/aurweb/__init__.py
diff --git a/aurweb/config.py b/aurweb/config.py
new file mode 100644
index 00000000..aac188b1
--- /dev/null
+++ b/aurweb/config.py
@@ -0,0 +1,31 @@
+import configparser
+import os
+
+_parser = None
+
+
+def _get_parser():
+ global _parser
+
+ if not _parser:
+ _parser = configparser.RawConfigParser()
+ if 'AUR_CONFIG' in os.environ:
+ path = os.environ.get('AUR_CONFIG')
+ else:
+ relpath = "/../conf/config"
+ path = os.path.dirname(os.path.realpath(__file__)) + relpath
+ _parser.read(path)
+
+ return _parser
+
+
+def get(section, option):
+ return _get_parser().get(section, option)
+
+
+def getboolean(section, option):
+ return _get_parser().getboolean(section, option)
+
+
+def getint(section, option):
+ return _get_parser().getint(section, option)
diff --git a/aurweb/db.py b/aurweb/db.py
new file mode 100644
index 00000000..0b581970
--- /dev/null
+++ b/aurweb/db.py
@@ -0,0 +1,51 @@
+import mysql.connector
+import sqlite3
+
+import aurweb.config
+
+
+class Connection:
+ _conn = None
+ _paramstyle = None
+
+ def __init__(self):
+ aur_db_backend = aurweb.config.get('database', 'backend')
+
+ if aur_db_backend == 'mysql':
+ aur_db_host = aurweb.config.get('database', 'host')
+ aur_db_name = aurweb.config.get('database', 'name')
+ aur_db_user = aurweb.config.get('database', 'user')
+ aur_db_pass = aurweb.config.get('database', 'password')
+ aur_db_socket = aurweb.config.get('database', 'socket')
+ self._conn = mysql.connector.connect(host=aur_db_host,
+ user=aur_db_user,
+ passwd=aur_db_pass,
+ db=aur_db_name,
+ unix_socket=aur_db_socket,
+ buffered=True)
+ self._paramstyle = mysql.connector.paramstyle
+ elif aur_db_backend == 'sqlite':
+ aur_db_name = aurweb.config.get('database', 'name')
+ self._conn = sqlite3.connect(aur_db_name)
+ self._paramstyle = sqlite3.paramstyle
+ else:
+ raise ValueError('unsupported database backend')
+
+ def execute(self, query, params=()):
+ if self._paramstyle in ('format', 'pyformat'):
+ query = query.replace('%', '%%').replace('?', '%s')
+ elif self._paramstyle == 'qmark':
+ pass
+ else:
+ raise ValueError('unsupported paramstyle')
+
+ cur = self._conn.cursor()
+ cur.execute(query, params)
+
+ return cur
+
+ def commit(self):
+ self._conn.commit()
+
+ def close(self):
+ self._conn.close()