[nanny] [Get|Set]PkgFilterUserCategories exported to DBUS



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]