summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--portato/db/__init__.py14
-rw-r--r--portato/db/database.py17
-rw-r--r--portato/db/dict.py16
-rw-r--r--portato/db/sql.py16
-rw-r--r--portato/gui/windows/main.py3
5 files changed, 42 insertions, 24 deletions
diff --git a/portato/db/__init__.py b/portato/db/__init__.py
index 5787c56..122940a 100644
--- a/portato/db/__init__.py
+++ b/portato/db/__init__.py
@@ -9,3 +9,17 @@
# There is NO WARRANTY, to the extent permitted by law.
#
# Written by René 'Necoro' Neumann <necoro@necoro.net>
+
+from __future__ import absolute_import
+
+from ..constants import USE_SQL
+from ..helper import debug
+
+if USE_SQL:
+ debug("Using SQLDatabase")
+ from .sql import SQLDatabase
+ Database = SQLDatabase
+else:
+ debug("Using DictDatabase")
+ from .dict import DictDatabase
+ Database = DictDatabase
diff --git a/portato/db/database.py b/portato/db/database.py
index 7d8e378..941c3a3 100644
--- a/portato/db/database.py
+++ b/portato/db/database.py
@@ -12,6 +12,9 @@
from __future__ import absolute_import, with_statement
+from threading import RLock
+from functools import wraps
+
class PkgData (object):
__slots__ = ("cat", "pkg", "inst")
@@ -33,6 +36,20 @@ class Database (object):
ALL = _("ALL")
+ def __init__ (self):
+ self._lock = RLock()
+
+ @staticmethod
+ def lock (f):
+ @wraps(f)
+ def wrapper (self, *args, **kwargs):
+ with self._lock:
+ r = f(self, *args, **kwargs)
+
+ return r
+
+ return wrapper
+
def populate (self, category = None):
"""Populates the database.
diff --git a/portato/db/dict.py b/portato/db/dict.py
index 435cdd9..5c5ca49 100644
--- a/portato/db/dict.py
+++ b/portato/db/dict.py
@@ -14,7 +14,7 @@ from __future__ import absolute_import, with_statement
import re
from collections import defaultdict
-from functools import wraps
+from threading import RLock
from ..backend import system
from .database import Database, PkgData
@@ -22,21 +22,15 @@ from .database import Database, PkgData
class DictDatabase (Database):
"""An internal database which holds a simple dictionary cat -> [package_list]."""
+ lock = Database.lock
+
def __init__ (self):
"""Constructor."""
+ Database.__init__(self)
+
self.__initialize()
- self._lock = RLock()
self.populate()
- def lock (f):
- @wraps(f)
- def wrapper (self, *args, **kwargs):
- with self._lock:
- r = f(self, *args, **kwargs)
- return r
-
- return wrapper
-
def __initialize (self):
self._db = defaultdict(list)
self.inst_cats = set([self.ALL])
diff --git a/portato/db/sql.py b/portato/db/sql.py
index c80fd91..e7be91e 100644
--- a/portato/db/sql.py
+++ b/portato/db/sql.py
@@ -22,8 +22,8 @@ import hashlib
import os
from functools import wraps
-from threading import RLock
+from ..constants import SESSION_DIR
from ..helper import info, error, debug
from ..backend import system
from .database import Database, PkgData
@@ -31,11 +31,13 @@ from .database import Database, PkgData
class SQLDatabase (Database):
FORBIDDEN = (".bzr", ".svn", ".git", "CVS", ".hg", "_darcs")
+ lock = Database.lock
def __init__ (self):
"""Constructor."""
+ Database.__init__(self)
+
self._restrict = ""
- self._lock = RLock()
pkgdb = os.path.join(SESSION_DIR, "package.db")
pkgdb_existed = os.path.exists(pkgdb)
@@ -130,16 +132,6 @@ class SQLDatabase (Database):
return changed
- def lock (f):
- @wraps(f)
- def wrapper (self, *args, **kwargs):
- with self._lock:
- r = f(self, *args, **kwargs)
-
- return r
-
- return wrapper
-
def con (f):
@wraps(f)
def wrapper (*args, **kwargs):
diff --git a/portato/gui/windows/main.py b/portato/gui/windows/main.py
index 0882c2a..b8d3c17 100644
--- a/portato/gui/windows/main.py
+++ b/portato/gui/windows/main.py
@@ -26,11 +26,12 @@ from ...backend import flags, system # must be the first to avoid circular deps
from ... import get_listener, plugin
from ...helper import debug, warning, error, info, unique_array
from ...session import Session
+from ...db import Database
from ...constants import CONFIG_LOCATION, VERSION, APP_ICON, ICON_DIR
from ...backend.exceptions import PackageNotFoundException, BlockedException
# more GUI stuff
-from ..utils import Database, Config, GtkThread, get_color
+from ..utils import Config, GtkThread, get_color
from ..queue import EmergeQueue
from ..session import SESSION_VERSION, SessionException, OldSessionException, NewSessionException
from ..wrapper import GtkTree, GtkConsole