[nanny/win32: 49/75] Create PyroBlockingCallFromThread
- From: Roberto Majadas <telemaco src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [nanny/win32: 49/75] Create PyroBlockingCallFromThread
- Date: Tue, 2 Nov 2010 18:55:04 +0000 (UTC)
commit 99e6727d90a74a5919ae4f824c87b0ef03d4cec9
Author: Roberto Majadas <roberto majadas openshine com>
Date: Tue Sep 28 02:57:08 2010 +0200
Create PyroBlockingCallFromThread
daemon/src/NannyPyroBus.py | 65 +++++++++++++++++++++++++++++---------------
1 files changed, 43 insertions(+), 22 deletions(-)
---
diff --git a/daemon/src/NannyPyroBus.py b/daemon/src/NannyPyroBus.py
index 0ee5bfb..2ce3571 100644
--- a/daemon/src/NannyPyroBus.py
+++ b/daemon/src/NannyPyroBus.py
@@ -21,10 +21,30 @@
# USA
from twisted.internet import threads, reactor, defer
+from twisted.python import failure
import Pyro.core
import threading
import time
+import Queue
+from threading import Semaphore
+
+
+def PyroBlockingCallFromThread(reactor, f, *a, **kw):
+ queue = Queue.Queue()
+ se = Semaphore(1)
+
+ def _callFromThread():
+ if se._Semaphore__value == 1 :
+ se.acquire()
+ else:
+ return
+ result = f(*a, **kw)
+ queue.put(result)
+
+ reactor.callFromThread(_callFromThread)
+ result = queue.get()
+ return result
class OrgGnomeNanny(Pyro.core.ObjBase):
def __init__(self, quarterback):
@@ -40,26 +60,26 @@ class OrgGnomeNanny(Pyro.core.ObjBase):
return True
def ListUsers(self):
- return threads.blockingCallFromThread(reactor, self.quarterback.usersmanager.get_users)
+ return PyroBlockingCallFromThread(reactor, self.quarterback.usersmanager.get_users)
def SetBlocks(self, user_id, app_id, blocks):
- threads.blockingCallFromThread(reactor, self.quarterback.set_blocks, str(user_id), int(app_id), blocks)
+ PyroBlockingCallFromThread(reactor, self.quarterback.set_blocks, str(user_id), int(app_id), blocks)
return True
def GetBlocks(self, user_id, app_id) :
- return threads.blockingCallFromThread(reactor, self.quarterback.get_blocks, user_id, app_id)
+ return PyroBlockingCallFromThread(reactor, self.quarterback.get_blocks, user_id, app_id)
def SetActiveWCF(self, active, uid):
- threads.blockingCallFromThread(reactor, self.quarterback.set_wcf, bool(active), str(uid))
+ PyroBlockingCallFromThread(reactor, self.quarterback.set_wcf, bool(active), str(uid))
def ListWCF(self):
- return threads.blockingCallFromThread(reactor, self.quarterback.list_wcf_uids)
+ return PyroBlockingCallFromThread(reactor, self.quarterback.list_wcf_uids)
def SetMaxUseTime(self, user_id, app_id, mins):
- threads.blockingCallFromThread(reactor, self.quarterback.set_max_use_time, str(user_id), int(app_id), int(mins))
+ PyroBlockingCallFromThread(reactor, self.quarterback.set_max_use_time, str(user_id), int(app_id), int(mins))
def GetMaxUseTime(self, user_id, app_id):
- return threads.blockingCallFromThread(reactor, self.quarterback.get_max_use_time , user_id, app_id)
+ return PyroBlockingCallFromThread(reactor, self.quarterback.get_max_use_time , user_id, app_id)
# FIXME : Singal
#def UpdateUsersInfo(self):
@@ -114,41 +134,42 @@ class OrgGnomeNannyWebDatabase(Pyro.core.ObjBase):
self.quarterback = quarterback
def AddCustomFilter(self, uid, is_black, name, description, regex):
- return threads.blockingCallFromThread(reactor, self.quarterback.filter_manager.add_custom_filter, str(uid), bool(is_black), unicode(name),
+ return PyroBlockingCallFromThread(reactor, self.quarterback.filter_manager.add_custom_filter, str(uid), bool(is_black), unicode(name),
unicode(description), unicode(regex))
def ListCustomFilters(self, uid):
- return threads.blockingCallFromThread(reactor, self.quarterback.filter_manager.list_custom_filters, int(uid))
-
+ ret = PyroBlockingCallFromThread(reactor, self.quarterback.filter_manager.list_custom_filters, int(uid))
+ return ret
+
def RemoveCustomFilter(self, list_id):
- return threads.blockingCallFromThread(reactor, self.quarterback.filter_manager.remove_custom_filter, int(list_id))
+ return PyroBlockingCallFromThread(reactor, self.quarterback.filter_manager.remove_custom_filter, int(list_id))
def UpdateCustomFilter(self, list_id, name, description, regex):
- return threads.blockingCallFromThread(reactor, self.quarterback.filter_manager.update_custom_filter, int(list_id),
+ return PyroBlockingCallFromThread(reactor, self.quarterback.filter_manager.update_custom_filter, int(list_id),
unicode(name),
unicode(description),
unicode(regex))
def AddPkgFilter(self, path):
- return threads.blockingCallFromThread(reactor, self.quarterback.filter_manager.add_pkg_filter, str(path))
+ return PyroBlockingCallFromThread(reactor, self.quarterback.filter_manager.add_pkg_filter, str(path))
def RemovePkgFilter(self, pkg_id):
- return threads.blockingCallFromThread(reactor, self.quarterback.filter_manager.remove_pkg_filter, str(pkg_id))
+ return PyroBlockingCallFromThread(reactor, self.quarterback.filter_manager.remove_pkg_filter, str(pkg_id))
def UpdatePkgFilter(self, pkg_id, new_db_path):
- return threads.blockingCallFromThread(reactor, self.quarterback.filter_manager.update_pkg_filter, str(pkg_id), str (new_db_path))
+ return PyroBlockingCallFromThread(reactor, self.quarterback.filter_manager.update_pkg_filter, str(pkg_id), str (new_db_path))
def ListPkgFilters(self):
- return threads.blockingCallFromThread(reactor, self.quarterback.filter_manager.list_pkg_filter)
+ return PyroBlockingCallFromThread(reactor, self.quarterback.filter_manager.list_pkg_filter)
def GetPkgFilterMetadata(self, pkg_id):
- return threads.blockingCallFromThread(reactor, self.quarterback.filter_manager.get_pkg_filter_metadata, str(pkg_id))
+ return PyroBlockingCallFromThread(reactor, self.quarterback.filter_manager.get_pkg_filter_metadata, str(pkg_id))
def SetPkgFilterMetadata(self, pkg_id, name, description):
- return threads.blockingCallFromThread(reactor, self.quarterback.filter_manager.set_pkg_filter_metadata, str(pkg_id), unicode(name), unicode(description))
+ return PyroBlockingCallFromThread(reactor, self.quarterback.filter_manager.set_pkg_filter_metadata, str(pkg_id), unicode(name), unicode(description))
def GetPkgFilterUserCategories(self, pkg_id, uid):
- return threads.blockingCallFromThread(reactor, self.quarterback.filter_manager.get_pkg_filter_user_categories, unicode(pkg_id),
+ return PyroBlockingCallFromThread(reactor, self.quarterback.filter_manager.get_pkg_filter_user_categories, unicode(pkg_id),
str(uid)
)
@@ -157,15 +178,15 @@ class OrgGnomeNannyWebDatabase(Pyro.core.ObjBase):
for x in list_categories :
list_c.append(unicode(x))
- return threads.blockingCallFromThread(reactor, self.quarterback.filter_manager.set_pkg_filter_user_categories, unicode(pkg_id),
+ return PyroBlockingCallFromThread(reactor, self.quarterback.filter_manager.set_pkg_filter_user_categories, unicode(pkg_id),
str(uid),
list_c)
def CheckDomain(self, uid, domain):
- return threads.blockingCallFromThread(reactor, self.quarterback.filter_manager.check_domain, uid, domain)
+ return PyroBlockingCallFromThread(reactor, self.quarterback.filter_manager.check_domain, uid, domain)
def AddDansGuardianList(self, uid, name, description, list_url):
- return threads.blockingCallFromThread(reactor, self.quarterback.webcontent_filter.webdb.add_dans_guardian_list, str(uid),
+ return PyroBlockingCallFromThread(reactor, self.quarterback.webcontent_filter.webdb.add_dans_guardian_list, str(uid),
unicode(name),
unicode(description),
unicode(list_url))
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]