summaryrefslogtreecommitdiff
path: root/portato/gui
diff options
context:
space:
mode:
Diffstat (limited to '')
-rw-r--r--portato/gui/utils.py19
1 files changed, 18 insertions, 1 deletions
diff --git a/portato/gui/utils.py b/portato/gui/utils.py
index 0c25463..a6bd800 100644
--- a/portato/gui/utils.py
+++ b/portato/gui/utils.py
@@ -10,12 +10,14 @@
#
# Written by René 'Necoro' Neumann <necoro@necoro.net>
-from __future__ import absolute_import
+from __future__ import absolute_import, with_statement
# some stuff needed
import re
import logging
from collections import defaultdict
+from threading import RLock
+from functools import wraps
# some backend things
from ..backend import flags, system, set_system
@@ -135,6 +137,16 @@ class Database (object):
def __init__ (self):
"""Constructor."""
self.__initialize()
+ self._lock = RLock()
+
+ 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)
@@ -144,6 +156,7 @@ class Database (object):
def __sort_key (self, x):
return x.pkg.lower()
+ @lock
def populate (self, category = None):
"""Populates the database.
@@ -169,6 +182,7 @@ class Database (object):
for key in self._db: # sort alphabetically
self._db[key].sort(key = self.__sort_key)
+ @lock
def get_cat (self, cat = None, byName = True):
"""Returns the packages in the category.
@@ -207,6 +221,7 @@ class Database (object):
except KeyError: # cat is in category list - but not in portage
info(_("Catched KeyError => %s seems not to be an available category. Have you played with rsync-excludes?"), cat)
+ @lock
def get_categories (self, installed = False):
"""Returns all categories.
@@ -233,6 +248,7 @@ class Database (object):
return (cat for cat in cats)
+ @lock
def reload (self, cat = None):
"""Reloads the given category.
@@ -256,6 +272,7 @@ class Database (object):
def get_restrict (self):
return self._restrict
+ @lock
def set_restrict (self, restrict):
if not restrict:
self._restrict = None
09 13:22:00 +0200'>2009-08-09Add support for repo.commit-filter and repo.source-filterLars Hjemli6-21/+35 2009-08-08Expose file extension in tree lists as class to allow nicer tree stylingMartin Szulecki1-1/+7 2009-08-08Introduce noplainemail option to hide email adresses from spambotsMartin Szulecki7-7/+22 2009-07-31ui-commit: add support for 'commit-filter' optionLars Hjemli4-0/+17 2009-07-31ui-tree: add support for source-filter optionLars Hjemli4-4/+25 2009-07-31ui-snapshot: use cgit_{open|close}_filter() to execute compressorsLars Hjemli1-28/+7 2009-07-31Add generic filter/plugin infrastructureLars Hjemli3-0/+62 2009-07-25Add support for mime type registration and lookupLars Hjemli4-5/+45 2009-07-25cgit.h: keep config flags sortedLars Hjemli1-2/+2 2009-07-25cgitrc.5.txt: document 'embedded' and 'noheader'Lars Hjemli1-0/+9 2009-07-25Add support for 'noheader' optionLars Hjemli3-7/+16 2009-07-25cgitrc.5.txt: document 'head-include'Lars Hjemli1-0/+4 2009-07-25ui-blob: return 'application/octet-stream' for binary blobsLars Hjemli1-1/+7 2009-07-25ui-plain: Return 'application/octet-stream' for binary files.Remko Tronçon1-1/+4 2009-06-11use cgit_httpscheme() for atom feedDiego Ongaro2-3/+6 2009-06-11add cgit_httpscheme() -> http:// or https://Diego Ongaro2-0/+12 2009-06-07Return http statuscode 404 on unknown branchLars Hjemli3-0/+6 2009-06-07Add head-include configuration option.Mark Lodato3-1/+6 2009-03-15CGIT 0.8.2.1v0.8.2.1Lars Hjemli1-1/+1 2009-03-15Fix doc-related glitches in Makefile and .gitignoreLars Hjemli2-1/+6 2009-03-15ui-snapshot: avoid segfault when no filename is specifiedLars Hjemli1-6/+17 2009-03-15fix segfault when displaying empty blobsEric Wong1-5/+8 2009-02-19Add support for HEAD requestsLars Hjemli2-0/+7 2009-02-19Add support for ETag in 'plain' viewLars Hjemli4-0/+5 2009-02-12ui-tree: escape ascii-text properly in hexdump viewLars Hjemli1-4/+9 2009-02-12Makefile: add doc-related targetsLars Hjemli1-2/+17