[nanny] [Get|Set]PkgFilterUserCategories exported to DBUS
- From: Roberto Majadas <telemaco src gnome org>
- To: svn-commits-list gnome org
- Cc:
- Subject: [nanny] [Get|Set]PkgFilterUserCategories exported to DBUS
- Date: Mon, 1 Feb 2010 15:25:06 +0000 (UTC)
commit 3c39c2a9b7fd59d8f492a31e2bfb4fecab90c919
Author: Roberto Majadas <roberto majadas openshine com>
Date: Mon Feb 1 12:47:44 2010 +0100
[Get|Set]PkgFilterUserCategories exported to DBUS
daemon/src/FilterManager.py | 99 ++++++++++++++++++++++++++++++++++++++++--
daemon/src/NannyDBus.py | 29 ++++++++----
2 files changed, 113 insertions(+), 15 deletions(-)
---
diff --git a/daemon/src/FilterManager.py b/daemon/src/FilterManager.py
index 7121ec2..09da7b2 100644
--- a/daemon/src/FilterManager.py
+++ b/daemon/src/FilterManager.py
@@ -25,6 +25,9 @@
import gobject
import os
+import pickle
+from glob import glob
+
from twisted.internet import reactor
from twisted.enterprise import adbapi
@@ -42,14 +45,17 @@ class FilterManager (gobject.GObject) :
gobject.GObject.__init__(self)
self.quarterback = quarterback
self.custom_filters_db = None
+ self.db_pools = {}
+ self.pkg_filters_conf = {}
reactor.addSystemEventTrigger("before", "startup", self.start)
reactor.addSystemEventTrigger("before", "shutdown", self.stop)
def start(self):
print "Start Filter Manager"
- os.system("mkdir -p /var/lib/nanny/lists")
+ os.system("mkdir -p /var/lib/nanny/pkg_filters")
self.custom_filters_db = self.__get_custom_filters_db()
+ self.__start_packaged_filters()
def stop(self):
print "Stop Filter Manager"
@@ -60,10 +66,6 @@ class FilterManager (gobject.GObject) :
def check_url(self, user_id, url):
pass
- def __open_db_pool(self, path):
- return adbapi.ConnectionPool('sqlite3', path,
- check_same_thread=False,
- cp_openfun=on_db_connect)
#Custom Filters methods
#------------------------------------
@@ -141,3 +143,90 @@ class FilterManager (gobject.GObject) :
print "Something goes wrong Updating Custom Filter"
return False
+
+ #Packaged filters
+ #-----------------------------------
+
+ def __start_packaged_filters(self):
+ ddbb = glob('/var/lib/nanny/pkg_filters/*/filters.db') + glob('/usr/share/nanny/pkg_filters/*/filters.db')
+ for db in ddbb :
+ self.db_pools[db] = adbapi.ConnectionPool('sqlite3', db,
+ check_same_thread=False,
+ cp_openfun=on_db_connect)
+
+ if not os.path.exists("/var/lib/nanny/pkg_filters/conf") :
+ for db in ddbb :
+ self.pkg_filters_conf[db] = {"categories" : [],
+ "users_info" : {}
+ }
+ else:
+ db = open("/var/lib/nanny/pkg_filters/conf", 'rb')
+ self.pkg_filters_conf = pickle.load(db)
+ print self.pkg_filters_conf
+ db.close()
+
+ def __save_pkg_filters_conf(self):
+ output = open("/var/lib/nanny/pkg_filters/conf", 'wb')
+ pickle.dump(self.pkg_filters_conf, output)
+ output.close()
+
+ def __get_categories_from_db(self, db):
+ if len(self.pkg_filters_conf[db]["categories"]) == 2 :
+ if os.path.getmtime(db) == self.pkg_filters_conf[db]["categories"][0] :
+ return self.pkg_filters_conf[db]["categories"][1]
+
+ sql_query = 'SELECT category FROM black_domains UNION SELECT category FROM black_urls UNION SELECT category FROM white_domains UNION SELECT category FROM white_urls'
+ query = self.db_pools[db].runQuery(sql_query)
+ block_d = BlockingDeferred(query)
+ try:
+ qr = block_d.blockOn()
+ cats = []
+ for c in qr :
+ if c[0] != "may_url_blocked" :
+ cats.append(c[0])
+
+ tmp_cat = [os.path.getmtime(db), cats]
+ self.pkg_filters_conf[db]["categories"] = tmp_cat
+ self.__save_pkg_filters_conf()
+ return self.pkg_filters_conf[db]["categories"][1]
+ except:
+ print "Something goes wrong getting categories from %s" % db
+ return []
+
+ def add_pkg_filter(self, path, name, description):
+ pass
+
+ def remove_pkg_filter(self):
+ pass
+
+ def update_pkg_filter(self):
+ pass
+
+ def list_pkg_filter(self):
+ ids = []
+ for x in self.pkg_filters_conf.keys():
+ ids.append(unicode(x))
+ return ids
+
+ def get_pkg_filter_user_categories(self, pkg_id, uid):
+ try:
+ name = "Here the name"
+ description = "Here the description"
+ categories = self.__get_categories_from_db(pkg_id)
+ if self.pkg_filters_conf[pkg_id]["users_info"].has_key(uid) :
+ user_categories = self.pkg_filters_conf[pkg_id]["users_info"][uid]
+ else:
+ user_categories = []
+ except:
+ return ["", "", [], []]
+
+ return [name, description, categories, user_categories]
+
+ def set_pkg_filter_user_categories(self, pkg_id, uid, list_categories):
+ self.pkg_filters_conf[pkg_id]["users_info"][uid] = list_categories
+ self.__save_pkg_filters_conf()
+ return True
+
+
+
+
diff --git a/daemon/src/NannyDBus.py b/daemon/src/NannyDBus.py
index 74d27e1..e8e73de 100644
--- a/daemon/src/NannyDBus.py
+++ b/daemon/src/NannyDBus.py
@@ -130,21 +130,30 @@ class NannyDBus(dbus.service.Object):
unicode(name),
unicode(description),
unicode(regex))
-
- #DEPRECATED
@dbus.service.method("org.gnome.Nanny.WebDatabase",
- in_signature='s', out_signature='a(issb)')
- def ListFilters(self, uid):
- return self.quarterback.filter_manager.list_custom_filters(int(uid))
+ in_signature='', out_signature='as')
+ def ListPkgFilters(self):
+ return self.quarterback.filter_manager.list_pkg_filter()
- #DEPRECATED
@dbus.service.method("org.gnome.Nanny.WebDatabase",
- in_signature='i', out_signature='b')
- def RemoveFilter(self, list_id):
- return self.quarterback.filter_manager.remove_custom_filter(int(list_id))
-
+ in_signature='ss', out_signature='ssasas')
+ def GetPkgFilterUserCategories(self, pkg_id, uid):
+ return self.quarterback.filter_manager.get_pkg_filter_user_categories(unicode(pkg_id),
+ str(uid)
+ )
@dbus.service.method("org.gnome.Nanny.WebDatabase",
+ in_signature='ssas', out_signature='b')
+ def SetPkgFilterUserCategories(self, pkg_id, uid, list_categories):
+ list_c = []
+ for x in list_categories :
+ list_c.append(unicode(x))
+
+ return self.quarterback.filter_manager.set_pkg_filter_user_categories(unicode(pkg_id),
+ str(uid),
+ list_c)
+
+ @dbus.service.method("org.gnome.Nanny.WebDatabase",
in_signature='ssss', out_signature='b')
def AddDansGuardianList(self, uid, name, description, list_url):
return self.quarterback.webcontent_filter.webdb.add_dans_guardian_list(str(uid),
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]