[aur-dev] [PATCH 06/17] Use setuptools to install Python modules

Lukas Fleischer lfleischer at archlinux.org
Mon Sep 26 07:24:50 UTC 2016


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 at archlinux.org>
---
 aurweb/__init__.py                  |  0
 {git-interface => aurweb}/config.py |  0
 {git-interface => aurweb}/db.py     | 16 +++++++--------
 git-interface/__init__.py           |  0
 git-interface/git-auth.py           | 14 ++++++-------
 git-interface/git-serve.py          | 40 ++++++++++++++++++-------------------
 git-interface/git-update.py         | 14 ++++++-------
 git-interface/test/setup.sh         |  4 ++++
 scripts/__init__.py                 |  0
 setup.py                            | 20 +++++++++++++++++++
 10 files changed, 66 insertions(+), 42 deletions(-)
 create mode 100644 aurweb/__init__.py
 rename {git-interface => aurweb}/config.py (100%)
 rename {git-interface => aurweb}/db.py (73%)
 create mode 100644 git-interface/__init__.py
 create mode 100644 scripts/__init__.py
 create mode 100644 setup.py

diff --git a/aurweb/__init__.py b/aurweb/__init__.py
new file mode 100644
index 0000000..e69de29
diff --git a/git-interface/config.py b/aurweb/config.py
similarity index 100%
rename from git-interface/config.py
rename to aurweb/config.py
diff --git a/git-interface/db.py b/aurweb/db.py
similarity index 73%
rename from git-interface/db.py
rename to aurweb/db.py
index 75d2283..0b58197 100644
--- a/git-interface/db.py
+++ b/aurweb/db.py
@@ -1,7 +1,7 @@
 import mysql.connector
 import sqlite3
 
-import config
+import aurweb.config
 
 
 class Connection:
@@ -9,14 +9,14 @@ class Connection:
     _paramstyle = None
 
     def __init__(self):
-        aur_db_backend = config.get('database', 'backend')
+        aur_db_backend = aurweb.config.get('database', 'backend')
 
         if aur_db_backend == 'mysql':
-            aur_db_host = config.get('database', 'host')
-            aur_db_name = config.get('database', 'name')
-            aur_db_user = config.get('database', 'user')
-            aur_db_pass = config.get('database', 'password')
-            aur_db_socket = config.get('database', 'socket')
+            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,
@@ -25,7 +25,7 @@ class Connection:
                                                  buffered=True)
             self._paramstyle = mysql.connector.paramstyle
         elif aur_db_backend == 'sqlite':
-            aur_db_name = config.get('database', 'name')
+            aur_db_name = aurweb.config.get('database', 'name')
             self._conn = sqlite3.connect(aur_db_name)
             self._paramstyle = sqlite3.paramstyle
         else:
diff --git a/git-interface/__init__.py b/git-interface/__init__.py
new file mode 100644
index 0000000..e69de29
diff --git a/git-interface/git-auth.py b/git-interface/git-auth.py
index d3b0188..022b0ff 100755
--- a/git-interface/git-auth.py
+++ b/git-interface/git-auth.py
@@ -4,8 +4,8 @@ import shlex
 import re
 import sys
 
-import config
-import db
+import aurweb.config
+import aurweb.db
 
 
 def format_command(env_vars, command, ssh_opts, ssh_key):
@@ -24,17 +24,17 @@ def format_command(env_vars, command, ssh_opts, ssh_key):
 
 
 def main():
-    valid_keytypes = config.get('auth', 'valid-keytypes').split()
-    username_regex = config.get('auth', 'username-regex')
-    git_serve_cmd = config.get('auth', 'git-serve-cmd')
-    ssh_opts = config.get('auth', 'ssh-options')
+    valid_keytypes = aurweb.config.get('auth', 'valid-keytypes').split()
+    username_regex = aurweb.config.get('auth', 'username-regex')
+    git_serve_cmd = aurweb.config.get('auth', 'git-serve-cmd')
+    ssh_opts = aurweb.config.get('auth', 'ssh-options')
 
     keytype = sys.argv[1]
     keytext = sys.argv[2]
     if keytype not in valid_keytypes:
         exit(1)
 
-    conn = db.Connection()
+    conn = aurweb.db.Connection()
 
     cur = conn.execute("SELECT Users.Username, Users.AccountTypeID FROM Users "
                        "INNER JOIN SSHPubKeys ON SSHPubKeys.UserID = Users.ID "
diff --git a/git-interface/git-serve.py b/git-interface/git-serve.py
index 8bcecd2..5f3b26d 100755
--- a/git-interface/git-serve.py
+++ b/git-interface/git-serve.py
@@ -7,23 +7,23 @@ import subprocess
 import sys
 import time
 
-import config
-import db
+import aurweb.config
+import aurweb.db
 
-notify_cmd = config.get('notifications', 'notify-cmd')
+notify_cmd = aurweb.config.get('notifications', 'notify-cmd')
 
-repo_path = config.get('serve', 'repo-path')
-repo_regex = config.get('serve', 'repo-regex')
-git_shell_cmd = config.get('serve', 'git-shell-cmd')
-git_update_cmd = config.get('serve', 'git-update-cmd')
-ssh_cmdline = config.get('serve', 'ssh-cmdline')
+repo_path = aurweb.config.get('serve', 'repo-path')
+repo_regex = aurweb.config.get('serve', 'repo-regex')
+git_shell_cmd = aurweb.config.get('serve', 'git-shell-cmd')
+git_update_cmd = aurweb.config.get('serve', 'git-update-cmd')
+ssh_cmdline = aurweb.config.get('serve', 'ssh-cmdline')
 
-enable_maintenance = config.getboolean('options', 'enable-maintenance')
-maintenance_exc = config.get('options', 'maintenance-exceptions').split()
+enable_maintenance = aurweb.config.getboolean('options', 'enable-maintenance')
+maintenance_exc = aurweb.config.get('options', 'maintenance-exceptions').split()
 
 
 def pkgbase_from_name(pkgbase):
-    conn = db.Connection()
+    conn = aurweb.db.Connection()
     cur = conn.execute("SELECT ID FROM PackageBases WHERE Name = ?", [pkgbase])
 
     row = cur.fetchone()
@@ -35,7 +35,7 @@ def pkgbase_exists(pkgbase):
 
 
 def list_repos(user):
-    conn = db.Connection()
+    conn = aurweb.db.Connection()
 
     cur = conn.execute("SELECT ID FROM Users WHERE Username = ?", [user])
     userid = cur.fetchone()[0]
@@ -55,7 +55,7 @@ def create_pkgbase(pkgbase, user):
     if pkgbase_exists(pkgbase):
         die('{:s}: package base already exists: {:s}'.format(action, pkgbase))
 
-    conn = db.Connection()
+    conn = aurweb.db.Connection()
 
     cur = conn.execute("SELECT ID FROM Users WHERE Username = ?", [user])
     userid = cur.fetchone()[0]
@@ -81,7 +81,7 @@ def pkgbase_adopt(pkgbase, user, privileged):
     if not pkgbase_id:
         die('{:s}: package base not found: {:s}'.format(action, pkgbase))
 
-    conn = db.Connection()
+    conn = aurweb.db.Connection()
 
     cur = conn.execute("SELECT ID FROM PackageBases WHERE ID = ? AND " +
                        "MaintainerUID IS NULL", [pkgbase_id])
@@ -111,7 +111,7 @@ def pkgbase_adopt(pkgbase, user, privileged):
 
 
 def pkgbase_get_comaintainers(pkgbase):
-    conn = db.Connection()
+    conn = aurweb.db.Connection()
 
     cur = conn.execute("SELECT UserName FROM PackageComaintainers " +
                        "INNER JOIN Users " +
@@ -132,7 +132,7 @@ def pkgbase_set_comaintainers(pkgbase, userlist, user, privileged):
     if not privileged and not pkgbase_has_full_access(pkgbase, user):
         die('{:s}: permission denied: {:s}'.format(action, user))
 
-    conn = db.Connection()
+    conn = aurweb.db.Connection()
 
     userlist_old = set(pkgbase_get_comaintainers(pkgbase))
 
@@ -198,7 +198,7 @@ def pkgbase_disown(pkgbase, user, privileged):
     comaintainers = []
     new_maintainer_userid = None
 
-    conn = db.Connection()
+    conn = aurweb.db.Connection()
 
     # Make the first co-maintainer the new maintainer, unless the action was
     # enforced by a Trusted User.
@@ -232,7 +232,7 @@ def pkgbase_set_keywords(pkgbase, keywords):
     if not pkgbase_id:
         die('{:s}: package base not found: {:s}'.format(action, pkgbase))
 
-    conn = db.Connection()
+    conn = aurweb.db.Connection()
 
     conn.execute("DELETE FROM PackageKeywords WHERE PackageBaseID = ?",
                  [pkgbase_id])
@@ -245,7 +245,7 @@ def pkgbase_set_keywords(pkgbase, keywords):
 
 
 def pkgbase_has_write_access(pkgbase, user):
-    conn = db.Connection()
+    conn = aurweb.db.Connection()
 
     cur = conn.execute("SELECT COUNT(*) FROM PackageBases " +
                        "LEFT JOIN PackageComaintainers " +
@@ -259,7 +259,7 @@ def pkgbase_has_write_access(pkgbase, user):
 
 
 def pkgbase_has_full_access(pkgbase, user):
-    conn = db.Connection()
+    conn = aurweb.db.Connection()
 
     cur = conn.execute("SELECT COUNT(*) FROM PackageBases " +
                        "INNER JOIN Users " +
diff --git a/git-interface/git-update.py b/git-interface/git-update.py
index 36c38ae..7337341 100755
--- a/git-interface/git-update.py
+++ b/git-interface/git-update.py
@@ -10,15 +10,15 @@ import time
 import srcinfo.parse
 import srcinfo.utils
 
-import config
-import db
+import aurweb.config
+import aurweb.db
 
-notify_cmd = config.get('notifications', 'notify-cmd')
+notify_cmd = aurweb.config.get('notifications', 'notify-cmd')
 
-repo_path = config.get('serve', 'repo-path')
-repo_regex = config.get('serve', 'repo-regex')
+repo_path = aurweb.config.get('serve', 'repo-path')
+repo_regex = aurweb.config.get('serve', 'repo-regex')
 
-max_blob_size = config.getint('update', 'max-blob-size')
+max_blob_size = aurweb.config.getint('update', 'max-blob-size')
 
 
 def size_humanize(num):
@@ -256,7 +256,7 @@ def main():
     if refname != "refs/heads/master":
         die("pushing to a branch other than master is restricted")
 
-    conn = db.Connection()
+    conn = aurweb.db.Connection()
 
     # Detect and deny non-fast-forwards.
     if sha1_old != "0" * 40 and not privileged:
diff --git a/git-interface/test/setup.sh b/git-interface/test/setup.sh
index f9c1616..d269af6 100644
--- a/git-interface/test/setup.sh
+++ b/git-interface/test/setup.sh
@@ -2,6 +2,10 @@ TEST_DIRECTORY="$(pwd)"
 
 . ./sharness.sh
 
+# Configure python search path.
+PYTHONPATH="$TEST_DIRECTORY/../../"
+export PYTHONPATH
+
 # Configure paths to the Git interface scripts.
 GIT_AUTH="$TEST_DIRECTORY/../git-auth.py"
 GIT_SERVE="$TEST_DIRECTORY/../git-serve.py"
diff --git a/scripts/__init__.py b/scripts/__init__.py
new file mode 100644
index 0000000..e69de29
diff --git a/setup.py b/setup.py
new file mode 100644
index 0000000..48eb176
--- /dev/null
+++ b/setup.py
@@ -0,0 +1,20 @@
+import re
+from setuptools import setup, find_packages
+import sys
+
+version = None
+with open('web/lib/version.inc.php', 'r') as f:
+    for line in f.readlines():
+        match = re.match(r'^define\("AURWEB_VERSION", "v([0-9.]+)"\);$', line)
+        if match:
+            version = match.group(1)
+
+if not version:
+    sys.stderr.write('error: Failed to parse version file!')
+    sys.exit(1)
+
+setup(
+    name="aurweb",
+    version=version,
+    packages=find_packages(),
+)
-- 
2.10.0


More information about the aur-dev mailing list