[nanny] First code for the packaged filters configuration
- From: Cesar Garcia Tapia <ctapia src gnome org>
- To: svn-commits-list gnome org
- Cc:
- Subject: [nanny] First code for the packaged filters configuration
- Date: Mon, 1 Feb 2010 17:53:52 +0000 (UTC)
commit e01d43fb14328bfe7d15f0fe34caec7b3e7f6ef6
Author: Cesar Garcia Tapia <cesar garcia tapia openshine com>
Date: Mon Feb 1 18:52:15 2010 +0100
First code for the packaged filters configuration
client/common/src/DBusClient.py | 24 ++++++
client/gnome/admin/data/glade/nac_wcf_dialog.glade | 45 ++++++++++-
client/gnome/admin/src/ConfigureProxyDialog.py | 79 +++++++++++++++++++-
daemon/src/FilterManager.py | 16 +++-
daemon/src/NannyDBus.py | 12 ++--
5 files changed, 156 insertions(+), 20 deletions(-)
---
diff --git a/client/common/src/DBusClient.py b/client/common/src/DBusClient.py
index 3e0be87..413f8bc 100644
--- a/client/common/src/DBusClient.py
+++ b/client/common/src/DBusClient.py
@@ -137,6 +137,30 @@ class DBusClient(gobject.GObject):
def remove_custom_filter (self, filter_id, reply_handler, error_handler):
return self.nanny_wcf.RemoveCustomFilter (filter_id, reply_handler=reply_handler, error_handler=error_handler, timeout=2000000)
+ def add_pkg_filter (self, name, description, path):
+ return self.nanny_wcf.AddPkgFilter(name, description, path)
+
+ def remove_pkg_filter (self, pkg_id):
+ return self.nanny_wcf.RemovePkgFilter(pkg_id)
+
+ def update_pkg_filter (self, pkg_id, new_db_path):
+ return self.nanny_wcf.UpdatePkgFilter(pkg_id, new_db_path)
+
+ def list_pkg_filters (self):
+ return self.nanny_wcf.ListPkgFilters()
+
+ def get_pkg_filter_metadata (self, pkg_id):
+ return self.nanny_wcf.GetPkgFilterMetadata(pkg_id)
+
+ def set_pkg_filter_metadata (self, pkg_id, name, description):
+ return self.nanny_wcf.SetPkgFilterMetadata(pkg_id, name, description)
+
+ def get_pkg_filter_user_categories (self, pkg_id, uid):
+ return self.nanny_wcf.GetPkgFilterUserCategories(pkg_id, uid)
+
+ def set_pkg_filter_user_categories (self, pkg_id, uid, list_categories):
+ return self.nanny_wcf.SetPkgFilterUserCategories(pkg_id, uid, list_categories)
+
def add_dansguardian_list (self, uid, name, description, list_url, reply_handler, error_handler):
self.nanny_wcf.AddDansGuardianList (uid, name, description, list_url, reply_handler=reply_handler, error_handler=error_handler, timeout=2000000)
diff --git a/client/gnome/admin/data/glade/nac_wcf_dialog.glade b/client/gnome/admin/data/glade/nac_wcf_dialog.glade
index 528dead..65884d3 100644
--- a/client/gnome/admin/data/glade/nac_wcf_dialog.glade
+++ b/client/gnome/admin/data/glade/nac_wcf_dialog.glade
@@ -30,6 +30,7 @@
<object class="GtkTreeView" id="wcfd_custom_blacklist_treeview">
<property name="visible">True</property>
<property name="can_focus">True</property>
+ <property name="headers_visible">False</property>
</object>
</child>
</object>
@@ -125,6 +126,7 @@
<object class="GtkTreeView" id="wcfd_custom_whitelist_treeview">
<property name="visible">True</property>
<property name="can_focus">True</property>
+ <property name="headers_visible">False</property>
</object>
</child>
</object>
@@ -229,17 +231,50 @@
</packing>
</child>
<child>
- <object class="GtkScrolledWindow" id="scrolledwindow3">
+ <object class="GtkHPaned" id="hpaned1">
<property name="visible">True</property>
<property name="can_focus">True</property>
- <property name="hscrollbar_policy">never</property>
- <property name="vscrollbar_policy">automatic</property>
- <property name="shadow_type">etched-in</property>
+ <property name="position">300</property>
+ <property name="position_set">True</property>
+ <child>
+ <object class="GtkScrolledWindow" id="scrolledwindow3">
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="hscrollbar_policy">never</property>
+ <property name="vscrollbar_policy">automatic</property>
+ <property name="shadow_type">etched-in</property>
+ <child>
+ <object class="GtkTreeView" id="wcfd_packaged_blacklist_treeview">
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="headers_visible">False</property>
+ </object>
+ </child>
+ </object>
+ <packing>
+ <property name="resize">False</property>
+ <property name="shrink">True</property>
+ </packing>
+ </child>
<child>
- <object class="GtkTreeView" id="wcfd_packaged_blacklist_treeview">
+ <object class="GtkScrolledWindow" id="scrolledwindow4">
<property name="visible">True</property>
<property name="can_focus">True</property>
+ <property name="hscrollbar_policy">never</property>
+ <property name="vscrollbar_policy">automatic</property>
+ <property name="shadow_type">etched-in</property>
+ <child>
+ <object class="GtkTreeView" id="wcfd_packaged_blacklist_categories_treeview">
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="headers_visible">False</property>
+ </object>
+ </child>
</object>
+ <packing>
+ <property name="resize">True</property>
+ <property name="shrink">True</property>
+ </packing>
</child>
</object>
<packing>
diff --git a/client/gnome/admin/src/ConfigureProxyDialog.py b/client/gnome/admin/src/ConfigureProxyDialog.py
index 330510c..09ad949 100644
--- a/client/gnome/admin/src/ConfigureProxyDialog.py
+++ b/client/gnome/admin/src/ConfigureProxyDialog.py
@@ -54,23 +54,29 @@ class ConfigureProxyDialog (gtk.Dialog):
self.custom_whitelist_edit_button.connect ('clicked', self.__on_custom_whitelist_edit_button_clicked)
self.custom_whitelist_remove_button.connect ('clicked', self.__on_custom_whitelist_remove_button_clicked)
- self.__init_treeview (self.custom_blacklist_treeview)
- self.__init_treeview (self.custom_whitelist_treeview)
- self.__init_treeview (self.packaged_blacklist_treeview)
+ self.__init_custom_treeview (self.custom_blacklist_treeview)
+ self.__init_custom_treeview (self.custom_whitelist_treeview)
+ self.__init_pkg_treeview (self.packaged_blacklist_treeview)
+ self.__init_pkg_categories_treeview (self.packaged_blacklist_categories_treeview)
self.__fill_treeviews ()
selection = self.custom_blacklist_treeview.get_selection()
selection.connect ('changed', self.__on_custom_blacklist_selection_changed)
self.__on_custom_blacklist_selection_changed (selection)
+
selection = self.custom_whitelist_treeview.get_selection()
selection.connect ('changed', self.__on_custom_whitelist_selection_changed)
self.__on_custom_whitelist_selection_changed (selection)
+ selection = self.packaged_blacklist_treeview.get_selection()
+ selection.connect ('changed', self.__on_packaged_blacklist_selection_changed)
+ self.__on_packaged_blacklist_selection_changed (selection)
+
self.resize (700, 460)
self.show_all ()
- def __init_treeview (self, treeview):
+ def __init_custom_treeview (self, treeview):
base_id = 0
for field in ["id", "description"]:
col = gtk.TreeViewColumn(field)
@@ -94,6 +100,50 @@ class ConfigureProxyDialog (gtk.Dialog):
treeview.set_model (store)
+ def __init_pkg_treeview (self, treeview):
+ base_id = 0
+ for field in ["id", "description"]:
+ col = gtk.TreeViewColumn(field)
+ treeview.append_column(col)
+ cell = gtk.CellRendererText()
+ cell.set_property("ellipsize", pango.ELLIPSIZE_END)
+ col.pack_start(cell, True)
+ col.add_attribute(cell, 'markup', base_id)
+ if field != "id":
+ col.set_visible (True)
+ else:
+ col.set_visible (False)
+
+ base_id = base_id + 1
+
+ store = gtk.ListStore (gobject.TYPE_STRING,
+ gobject.TYPE_STRING)
+
+ treeview.set_model (store)
+
+ def __init_pkg_categories_treeview (self, treeview):
+ base_id = 0
+ for field in ["selected", "description"]:
+ col = gtk.TreeViewColumn(field)
+ treeview.append_column(col)
+ if field == "description":
+ cell = gtk.CellRendererText()
+ cell.set_property("ellipsize", pango.ELLIPSIZE_END)
+ col.pack_start(cell, True)
+ col.add_attribute(cell, 'markup', base_id)
+ else:
+ cell = gtk.CellRendererToggle()
+ col.pack_start(cell, True)
+ col.add_attribute(cell, 'active', base_id)
+ col.set_visible (True)
+
+ base_id = base_id + 1
+
+ store = gtk.ListStore (gobject.TYPE_BOOLEAN,
+ gobject.TYPE_STRING)
+
+ treeview.set_model (store)
+
def __fill_treeviews (self):
custom_blacklist_model = self.custom_blacklist_treeview.get_model()
custom_blacklist_model.clear()
@@ -101,6 +151,9 @@ class ConfigureProxyDialog (gtk.Dialog):
custom_whitelist_model = self.custom_whitelist_treeview.get_model()
custom_whitelist_model.clear()
+ packaged_blacklist_model = self.packaged_blacklist_treeview.get_model()
+ packaged_blacklist_model.clear()
+
filters = self.dbus_client.list_custom_filters (self.__selected_user_id)
for filter_id, filter_name, filter_description, filter_regex, is_black in filters:
if is_black:
@@ -108,6 +161,11 @@ class ConfigureProxyDialog (gtk.Dialog):
else:
custom_whitelist_model.append ((filter_id, "<b>%s</b>\n %s" % (filter_name, filter_description), filter_name, filter_description, filter_regex))
+ pkg_filters = self.dbus_client.list_pkg_filters ()
+ for filter_id, readonly in pkg_filters:
+ filter_name, filter_description = self.dbus_client.get_pkg_filter_metadata(filter_id)
+ packaged_blacklist_model.append ((filter_id, "<b>%s</b>\n %s" % (filter_name, filter_description)))
+
def __on_custom_blacklist_add_button_clicked (self, widget, data=None):
xml = self.__load_dialog ()
self.proxy_rule_dialog = xml.get_object ('wcfed_dialog')
@@ -358,6 +416,19 @@ class ConfigureProxyDialog (gtk.Dialog):
self.custom_whitelist_edit_button.set_sensitive (False)
self.custom_whitelist_remove_button.set_sensitive (False)
+ def __on_packaged_blacklist_selection_changed (self, selection, data=None):
+ packaged_blacklist_categories_model = self.packaged_blacklist_categories_treeview.get_model()
+ packaged_blacklist_categories_model.clear()
+
+ if selection.count_selected_rows () > 0:
+ model, iter = selection.get_selected()
+ if iter:
+ filter_id = model.get_value (iter, 0)
+
+ categories = self.dbus_client.get_pkg_filter_user_categories (filter_id, self.__selected_user_id)
+ for category, user_category in categories:
+ packaged_blacklist_categories_model.append ((user_category, category))
+
def __load_dialog (self):
glade_file = os.path.join (nanny.client.gnome.admin.glade_files_dir, "nac_wcf_edit_dialog.glade")
xml = gtk.Builder ()
diff --git a/daemon/src/FilterManager.py b/daemon/src/FilterManager.py
index bf20877..280932e 100644
--- a/daemon/src/FilterManager.py
+++ b/daemon/src/FilterManager.py
@@ -372,8 +372,8 @@ class FilterManager (gobject.GObject) :
def get_pkg_filter_user_categories(self, pkg_id, uid):
try:
- name = ""
- description = ""
+ return_categories = []
+
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]
@@ -388,11 +388,17 @@ class FilterManager (gobject.GObject) :
user_categories = tmp_user_categories
self.pkg_filters_conf[pkg_id]["users_info"][uid] = user_categories
self.__save_pkg_filters_conf()
+
+ for category in categories:
+ if category in user_categories:
+ return_categories.append ((category, True))
+ else:
+ return_categories.append ((category, False))
+
+ return return_categories
except:
- return [[], []]
-
- return [categories, user_categories]
+ return []
def set_pkg_filter_user_categories(self, pkg_id, uid, user_categories):
categories = self.__get_categories_from_db(pkg_id)
diff --git a/daemon/src/NannyDBus.py b/daemon/src/NannyDBus.py
index 1847b3b..3d8e7a3 100644
--- a/daemon/src/NannyDBus.py
+++ b/daemon/src/NannyDBus.py
@@ -134,17 +134,17 @@ class NannyDBus(dbus.service.Object):
@dbus.service.method("org.gnome.Nanny.WebDatabase",
in_signature='sss', out_signature='b')
def AddPkgFilter(self, name, description, path):
- return self.quarterback.filter_manager.add_pkg_filter(name, description, path)
+ return self.quarterback.filter_manager.add_pkg_filter(unicode(name), unicode(description), str(path))
@dbus.service.method("org.gnome.Nanny.WebDatabase",
in_signature='s', out_signature='b')
def RemovePkgFilter(self, pkg_id):
- return self.quarterback.filter_manager.remove_pkg_filter(pkg_id)
+ return self.quarterback.filter_manager.remove_pkg_filter(str(pkg_id))
@dbus.service.method("org.gnome.Nanny.WebDatabase",
in_signature='ss', out_signature='b')
def UpdatePkgFilter(self, pkg_id, new_db_path):
- return self.quarterback.filter_manager.update_pkg_filter(pkg_id, new_db_path)
+ return self.quarterback.filter_manager.update_pkg_filter(str(pkg_id), str (new_db_path))
@dbus.service.method("org.gnome.Nanny.WebDatabase",
in_signature='', out_signature='a(sb)')
@@ -154,15 +154,15 @@ class NannyDBus(dbus.service.Object):
@dbus.service.method("org.gnome.Nanny.WebDatabase",
in_signature='s', out_signature='ss')
def GetPkgFilterMetadata(self, pkg_id):
- return self.quarterback.filter_manager.get_pkg_filter_metadata(pkg_id)
+ return self.quarterback.filter_manager.get_pkg_filter_metadata(str(pkg_id))
@dbus.service.method("org.gnome.Nanny.WebDatabase",
in_signature='sss', out_signature='b')
def SetPkgFilterMetadata(self, pkg_id, name, description):
- return self.quarterback.filter_manager.set_pkg_filter_metadata(pkg_id, name, description)
+ return self.quarterback.filter_manager.set_pkg_filter_metadata(str(pkg_id), unicode(name), unicode(description))
@dbus.service.method("org.gnome.Nanny.WebDatabase",
- in_signature='ss', out_signature='asas')
+ in_signature='ss', out_signature='a(sb)')
def GetPkgFilterUserCategories(self, pkg_id, uid):
return self.quarterback.filter_manager.get_pkg_filter_user_categories(unicode(pkg_id),
str(uid)
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]