[Dextrose] [Sugar-devel] [PATCH] fix network disconnect and discard history
Esteban Arias
earias at plan.ceibal.edu.uy
Thu Oct 28 14:11:35 EDT 2010
Hi,
I press "discard history" and shell.logs shows:
/usr/lib/python2.6/site-packages/dbus/connection.py:242: DeprecationWarning:
object.__init__() takes no parameters
super(Connection, self).__init__(*args, **kwargs)
Traceback (most recent call last):
File "/usr/share/sugar/extensions/cpsection/network/view.py", line 254, in
__network_configuration_reset_cb
self._model.clear_networks()
File "/usr/share/sugar/extensions/cpsection/network/model.py", line 120,
in clear_networks
network.clear_wifi_connections()
File "/usr/lib/python2.6/site-packages/jarabe/model/network.py", line 934,
in clear_wifi_connections
_nm_settings.clear_wifi_connections()
File "/usr/lib/python2.6/site-packages/jarabe/model/network.py", line 506,
in clear_wifi_connections
* if conn.type == NM_CONNECTION_TYPE_802_11_WIRELESS:*
*AttributeError: 'NMSettingsConnection' object has no attribute 'type'*
If I switch "*conn.type*" to "*conn._settings.connection*" runs ok.
2010/5/25 James Cameron <quozl at laptop.org>
> User interface changes:
>
> - enable the disconnect button on the access point menu in the
> neighbourhood view, (rather than the button doing nothing),
>
> - fix the disconnect button on the wireless device icon in the frame
> so that the disconnection remains effective, (rather than
> disconnecting and then reconnecting automatically),
>
> - enable the discard network history button in the network control
> panel, which also now forces a disconnect, and will be insensitive
> if there are no networks to be discarded, (rather than the button
> doing nothing),
>
> - enforce consistency between the neighbourhood view, the frame, and
> the control panel, with respect to how the access point is shown.
>
> References:
>
> http://dev.laptop.org/ticket/9977 (fixes a workaround)
> http://bugs.sugarlabs.org/ticket/1673
> http://bugs.sugarlabs.org/ticket/1802
> http://bugs.sugarlabs.org/ticket/1737
> http://bugs.sugarlabs.org/ticket/1736
> http://bugs.sugarlabs.org/ticket/1608
> http://dev.laptop.org/ticket/9788
> ---
> extensions/cpsection/network/model.py | 12 ++++--
> extensions/cpsection/network/view.py | 8 ++++-
> extensions/deviceicon/network.py | 37 ++++++++++---------
> src/jarabe/desktop/meshbox.py | 61
> +++++++++++++++++++++----------
> src/jarabe/model/network.py | 62
> ++++++++++++++++++++++++++------
> 5 files changed, 125 insertions(+), 55 deletions(-)
>
> diff --git a/extensions/cpsection/network/model.py
> b/extensions/cpsection/network/model.py
> index e1c3dab..2bc5e3a 100644
> --- a/extensions/cpsection/network/model.py
> +++ b/extensions/cpsection/network/model.py
> @@ -17,6 +17,7 @@
>
> import dbus
> from gettext import gettext as _
> +from jarabe.model import network
> import gconf
>
> _NM_SERVICE = 'org.freedesktop.NetworkManager'
> @@ -68,7 +69,7 @@ def get_radio():
> try:
> bus = dbus.SystemBus()
> obj = bus.get_object(_NM_SERVICE, _NM_PATH)
> - nm_props = dbus.Interface(obj, 'org.freedesktop.DBus.Properties')
> + nm_props = dbus.Interface(obj, dbus.PROPERTIES_IFACE)
> except dbus.DBusException:
> raise ReadError('%s service not available' % _NM_SERVICE)
>
> @@ -89,7 +90,7 @@ def set_radio(state):
> try:
> bus = dbus.SystemBus()
> obj = bus.get_object(_NM_SERVICE, _NM_PATH)
> - nm_props = dbus.Interface(obj,
> 'org.freedesktop.DBus.Properties')
> + nm_props = dbus.Interface(obj, dbus.PROPERTIES_IFACE)
> except dbus.DBusException:
> raise ReadError('%s service not available' % _NM_SERVICE)
> nm_props.Set(_NM_IFACE, 'WirelessEnabled', True)
> @@ -97,7 +98,7 @@ def set_radio(state):
> try:
> bus = dbus.SystemBus()
> obj = bus.get_object(_NM_SERVICE, _NM_PATH)
> - nm_props = dbus.Interface(obj,
> 'org.freedesktop.DBus.Properties')
> + nm_props = dbus.Interface(obj, dbus.PROPERTIES_IFACE)
> except dbus.DBusException:
> raise ReadError('%s service not available' % _NM_SERVICE)
> nm_props.Set(_NM_IFACE, 'WirelessEnabled', False)
> @@ -116,7 +117,10 @@ def clear_registration():
> def clear_networks():
> """Clear saved passwords and network configurations.
> """
> - pass
> + network.clear_wifi_connections()
> +
> +def count_networks():
> + return network.count_wifi_connections()
>
> def get_publish_information():
> client = gconf.client_get_default()
> diff --git a/extensions/cpsection/network/view.py
> b/extensions/cpsection/network/view.py
> index 588daeb..b0f1336 100644
> --- a/extensions/cpsection/network/view.py
> +++ b/extensions/cpsection/network/view.py
> @@ -104,6 +104,8 @@ class Network(SectionView):
> self._clear_history_button = gtk.Button()
> self._clear_history_button.set_label(_('Discard network history'))
> box_clear_history.pack_start(self._clear_history_button,
> expand=False)
> + if self._model.count_networks() == 0:
> + self._clear_history_button.set_sensitive(False)
> self._clear_history_button.show()
> box_wireless.pack_start(box_clear_history, expand=False)
> box_clear_history.show()
> @@ -217,7 +219,9 @@ class Network(SectionView):
> self._radio_alert.props.msg = detail
> self._radio_valid = False
> else:
> - self._radio_valid = True
> + self._radio_valid = True
> + if self._model.count_networks() != 0:
> + self._clear_history_button.set_sensitive(True)
>
> self._validate()
> return False
> @@ -248,3 +252,5 @@ class Network(SectionView):
>
> def __network_configuration_reset_cb(self, widget):
> self._model.clear_networks()
> + if self._model.count_networks() == 0:
> + self._clear_history_button.set_sensitive(False)
> diff --git a/extensions/deviceicon/network.py
> b/extensions/deviceicon/network.py
> index 94a4293..a828497 100644
> --- a/extensions/deviceicon/network.py
> +++ b/extensions/deviceicon/network.py
> @@ -352,8 +352,7 @@ class WirelessDeviceView(ToolButton):
> self.set_palette(self._palette)
> self._palette.set_group_id('frame')
>
> - self._device_props = dbus.Interface(self._device,
> -
> 'org.freedesktop.DBus.Properties')
> + self._device_props = dbus.Interface(self._device,
> dbus.PROPERTIES_IFACE)
> self._device_props.GetAll(_NM_DEVICE_IFACE, byte_arrays=True,
>
> reply_handler=self.__get_device_props_reply_cb,
>
> error_handler=self.__get_device_props_error_cb)
> @@ -394,7 +393,7 @@ class WirelessDeviceView(ToolButton):
> return
> self._active_ap_op = active_ap_op
> active_ap = self._bus.get_object(_NM_SERVICE, active_ap_op)
> - props = dbus.Interface(active_ap,
> 'org.freedesktop.DBus.Properties')
> + props = dbus.Interface(active_ap, dbus.PROPERTIES_IFACE)
>
> props.GetAll(_NM_ACCESSPOINT_IFACE, byte_arrays=True,
> reply_handler=self.__get_all_ap_props_reply_cb,
> @@ -508,17 +507,21 @@ class WirelessDeviceView(ToolButton):
> self._icon.props.base_color = self._color
>
> def __deactivate_connection_cb(self, palette, data=None):
> + connection = network.find_connection_by_ssid(self._name)
> + if connection:
> + if self._mode == network.NM_802_11_MODE_INFRA:
> + connection.set_disconnected()
> +
> if self._active_ap_op is not None:
> obj = self._bus.get_object(_NM_SERVICE, _NM_PATH)
> netmgr = dbus.Interface(obj, _NM_IFACE)
> - netmgr_props = dbus.Interface(
> - netmgr, 'org.freedesktop.DBus.Properties')
> + netmgr_props = dbus.Interface(netmgr, dbus.PROPERTIES_IFACE)
> active_connections_o = netmgr_props.Get(_NM_IFACE,
> 'ActiveConnections')
>
> for conn_o in active_connections_o:
> obj = self._bus.get_object(_NM_IFACE, conn_o)
> - props = dbus.Interface(obj,
> 'org.freedesktop.DBus.Properties')
> + props = dbus.Interface(obj, dbus.PROPERTIES_IFACE)
> ap_op = props.Get(_NM_ACTIVE_CONN_IFACE, 'SpecificObject')
> if ap_op == self._active_ap_op:
> netmgr.DeactivateConnection(conn_o)
> @@ -608,8 +611,7 @@ class OlpcMeshDeviceView(ToolButton):
> self.set_palette(self._palette)
> self._palette.set_group_id('frame')
>
> - self._device_props = dbus.Interface(self._device,
> -
> 'org.freedesktop.DBus.Properties')
> + self._device_props = dbus.Interface(self._device,
> dbus.PROPERTIES_IFACE)
> self._device_props.GetAll(_NM_DEVICE_IFACE, byte_arrays=True,
>
> reply_handler=self.__get_device_props_reply_cb,
>
> error_handler=self.__get_device_props_error_cb)
> @@ -681,19 +683,19 @@ class OlpcMeshDeviceView(ToolButton):
> def __deactivate_connection(self, palette, data=None):
> obj = self._bus.get_object(_NM_SERVICE, _NM_PATH)
> netmgr = dbus.Interface(obj, _NM_IFACE)
> - netmgr_props = dbus.Interface(netmgr,
> 'org.freedesktop.DBus.Properties')
> + netmgr_props = dbus.Interface(netmgr, dbus.PROPERTIES_IFACE)
> active_connections_o = netmgr_props.Get(_NM_IFACE,
> 'ActiveConnections')
>
> for conn_o in active_connections_o:
> # The connection path for a mesh connection is the device
> itself.
> obj = self._bus.get_object(_NM_IFACE, conn_o)
> - props = dbus.Interface(obj, 'org.freedesktop.DBus.Properties')
> + props = dbus.Interface(obj, dbus.PROPERTIES_IFACE)
> ap_op = props.Get(_NM_ACTIVE_CONN_IFACE, 'SpecificObject')
>
> try:
> obj = self._bus.get_object(_NM_IFACE, ap_op)
> - props = dbus.Interface(obj,
> 'org.freedesktop.DBus.Properties')
> + props = dbus.Interface(obj, dbus.PROPERTIES_IFACE)
> type = props.Get(_NM_DEVICE_IFACE, 'DeviceType')
> if type == network.DEVICE_TYPE_802_11_OLPC_MESH:
> netmgr.DeactivateConnection(conn_o)
> @@ -756,7 +758,7 @@ class GsmDeviceView(TrayIcon):
>
> self._palette = palette
>
> - props = dbus.Interface(self._device,
> 'org.freedesktop.DBus.Properties')
> + props = dbus.Interface(self._device, dbus.PROPERTIES_IFACE)
> props.GetAll(_NM_DEVICE_IFACE, byte_arrays=True,
> reply_handler=self.__current_state_check_cb,
> error_handler=self.__current_state_check_error_cb)
> @@ -785,12 +787,12 @@ class GsmDeviceView(TrayIcon):
> def __gsm_disconnect_cb(self, palette, data=None):
> obj = self._bus.get_object(_NM_SERVICE, _NM_PATH)
> netmgr = dbus.Interface(obj, _NM_IFACE)
> - netmgr_props = dbus.Interface(netmgr,
> 'org.freedesktop.DBus.Properties')
> + netmgr_props = dbus.Interface(netmgr, dbus.PROPERTIES_IFACE)
> active_connections_o = netmgr_props.Get(_NM_IFACE,
> 'ActiveConnections')
>
> for conn_o in active_connections_o:
> obj = self._bus.get_object(_NM_IFACE, conn_o)
> - props = dbus.Interface(obj, 'org.freedesktop.DBus.Properties')
> + props = dbus.Interface(obj, dbus.PROPERTIES_IFACE)
> devices = props.Get(_NM_ACTIVE_CONN_IFACE, 'Devices')
> if self._device.object_path in devices:
> netmgr.DeactivateConnection(
> @@ -910,7 +912,7 @@ class WiredDeviceObserver(object):
> self._device_view = None
> self._tray = tray
>
> - props = dbus.Interface(self._device,
> 'org.freedesktop.DBus.Properties')
> + props = dbus.Interface(self._device, dbus.PROPERTIES_IFACE)
> props.GetAll(_NM_DEVICE_IFACE, byte_arrays=True,
> reply_handler=self.__get_device_props_reply_cb,
> error_handler=self.__get_device_props_error_cb)
> @@ -938,8 +940,7 @@ class WiredDeviceObserver(object):
>
> def _update_state(self, state):
> if state == network.DEVICE_STATE_ACTIVATED:
> - props = dbus.Interface(self._device,
> - 'org.freedesktop.DBus.Properties')
> + props = dbus.Interface(self._device, dbus.PROPERTIES_IFACE)
> address = props.Get(_NM_DEVICE_IFACE, 'Ip4Address')
> speed = props.Get(_NM_WIRED_IFACE, 'Speed')
> self._device_view = WiredDeviceView(speed, address)
> @@ -997,7 +998,7 @@ class NetworkManagerObserver(object):
>
> def _check_device(self, device_op):
> nm_device = self._bus.get_object(_NM_SERVICE, device_op)
> - props = dbus.Interface(nm_device,
> 'org.freedesktop.DBus.Properties')
> + props = dbus.Interface(nm_device, dbus.PROPERTIES_IFACE)
>
> device_type = props.Get(_NM_DEVICE_IFACE, 'DeviceType')
> if device_type == network.DEVICE_TYPE_802_3_ETHERNET:
> diff --git a/src/jarabe/desktop/meshbox.py b/src/jarabe/desktop/meshbox.py
> index a04922b..280adb9 100644
> --- a/src/jarabe/desktop/meshbox.py
> +++ b/src/jarabe/desktop/meshbox.py
> @@ -86,7 +86,6 @@ class WirelessNetworkView(CanvasPulsingIcon):
> self._rsn_flags = initial_ap.rsn_flags
> self._device_caps = 0
> self._device_state = None
> - self._connection = None
> self._color = None
>
> if self._mode == network.NM_802_11_MODE_ADHOC \
> @@ -115,18 +114,9 @@ class WirelessNetworkView(CanvasPulsingIcon):
> self.set_palette(self._palette)
> self._palette_icon.props.xo_color = self._color
>
> - if network.find_connection_by_ssid(self._name) is not None:
> - self.props.badge_name = "emblem-favorite"
> - self._palette_icon.props.badge_name = "emblem-favorite"
> - elif initial_ap.flags == network.NM_802_11_AP_FLAGS_PRIVACY:
> - self.props.badge_name = "emblem-locked"
> - self._palette_icon.props.badge_name = "emblem-locked"
> - else:
> - self.props.badge_name = None
> - self._palette_icon.props.badge_name = None
> + self._update_badge()
>
> - interface_props = dbus.Interface(self._device,
> -
> 'org.freedesktop.DBus.Properties')
> + interface_props = dbus.Interface(self._device,
> dbus.PROPERTIES_IFACE)
> interface_props.Get(_NM_DEVICE_IFACE, 'State',
> reply_handler=self.__get_device_state_reply_cb,
> error_handler=self.__get_device_state_error_cb)
> @@ -174,6 +164,7 @@ class WirelessNetworkView(CanvasPulsingIcon):
> def __device_state_changed_cb(self, new_state, old_state, reason):
> self._device_state = new_state
> self._update_state()
> + self._update_badge()
>
> def __update_active_ap(self, ap_path):
> if ap_path in self._access_points:
> @@ -214,6 +205,7 @@ class WirelessNetworkView(CanvasPulsingIcon):
> def _update(self):
> self._update_state()
> self._update_color()
> + self._update_badge()
>
> def _update_state(self):
> if self._active_ap is not None:
> @@ -266,8 +258,40 @@ class WirelessNetworkView(CanvasPulsingIcon):
> else:
> self.props.base_color = self._color
>
> + def _update_badge(self):
> + if network.find_connection_by_ssid(self._name) is not None:
> + self.props.badge_name = "emblem-favorite"
> + self._palette_icon.props.badge_name = "emblem-favorite"
> + elif self._flags == network.NM_802_11_AP_FLAGS_PRIVACY:
> + self.props.badge_name = "emblem-locked"
> + self._palette_icon.props.badge_name = "emblem-locked"
> + else:
> + self.props.badge_name = None
> + self._palette_icon.props.badge_name = None
> +
> def _disconnect_activate_cb(self, item):
> - pass
> + connection = network.find_connection_by_ssid(self._name)
> + if connection:
> + if self._mode == network.NM_802_11_MODE_INFRA:
> + connection.set_disconnected()
> +
> + obj = self._bus.get_object(_NM_SERVICE, _NM_PATH)
> + netmgr = dbus.Interface(obj, _NM_IFACE)
> +
> + netmgr_props = dbus.Interface(netmgr, dbus.PROPERTIES_IFACE)
> + active_connections_o = netmgr_props.Get(_NM_IFACE,
> 'ActiveConnections')
> +
> + for conn_o in active_connections_o:
> + obj = self._bus.get_object(_NM_IFACE, conn_o)
> + props = dbus.Interface(obj, dbus.PROPERTIES_IFACE)
> + state = props.Get(_NM_ACTIVE_CONN_IFACE, 'State')
> + if state == network.NM_ACTIVE_CONNECTION_STATE_ACTIVATED:
> + ap_o = props.Get(_NM_ACTIVE_CONN_IFACE, 'SpecificObject')
> + if ap_o != '/' and self.find_ap(ap_o) is not None:
> + netmgr.DeactivateConnection(conn_o)
> + else:
> + logging.error('Could not determine AP for'
> + ' specific object %s' % conn_o)
>
> def _add_ciphers_from_flags(self, flags, pairwise):
> ciphers = []
> @@ -456,14 +480,12 @@ class OlpcMeshView(CanvasPulsingIcon):
> self._greyed_out = False
> self._name = ''
> self._device_state = None
> - self._connection = None
> self._active = False
> device = mesh_mgr.mesh_device
>
> self.connect('button-release-event',
> self.__button_release_event_cb)
>
> - interface_props = dbus.Interface(device,
> -
> 'org.freedesktop.DBus.Properties')
> + interface_props = dbus.Interface(device, dbus.PROPERTIES_IFACE)
> interface_props.Get(_NM_DEVICE_IFACE, 'State',
> reply_handler=self.__get_device_state_reply_cb,
> error_handler=self.__get_device_state_error_cb)
> @@ -849,13 +871,12 @@ class NetworkManagerObserver(object):
> # FIXME It would be better to do all of this async, but I cannot
> think
> # of a good way to. NM could really use some love here.
>
> - netmgr_props = dbus.Interface(
> - self._netmgr,
> 'org.freedesktop.DBus.Properties')
> + netmgr_props = dbus.Interface(self._netmgr, dbus.PROPERTIES_IFACE)
> active_connections_o = netmgr_props.Get(_NM_IFACE,
> 'ActiveConnections')
>
> for conn_o in active_connections_o:
> obj = self._bus.get_object(_NM_IFACE, conn_o)
> - props = dbus.Interface(obj, 'org.freedesktop.DBus.Properties')
> + props = dbus.Interface(obj, dbus.PROPERTIES_IFACE)
> state = props.Get(_NM_ACTIVE_CONN_IFACE, 'State')
> if state == network.NM_ACTIVE_CONNECTION_STATE_ACTIVATING:
> ap_o = props.Get(_NM_ACTIVE_CONN_IFACE, 'SpecificObject')
> @@ -879,7 +900,7 @@ class NetworkManagerObserver(object):
>
> def _check_device(self, device_o):
> device = self._bus.get_object(_NM_SERVICE, device_o)
> - props = dbus.Interface(device, 'org.freedesktop.DBus.Properties')
> + props = dbus.Interface(device, dbus.PROPERTIES_IFACE)
>
> device_type = props.Get(_NM_DEVICE_IFACE, 'DeviceType')
> if device_type == network.DEVICE_TYPE_802_11_WIRELESS:
> diff --git a/src/jarabe/model/network.py b/src/jarabe/model/network.py
> index 3a949da..33088c4 100644
> --- a/src/jarabe/model/network.py
> +++ b/src/jarabe/model/network.py
> @@ -330,6 +330,13 @@ class NMSettings(dbus.service.Object):
> self.secrets_request.send(self, connection=sender,
> response=kwargs['response'])
>
> + def clear_wifi_connections(self):
> + for uuid in self.connections.keys():
> + conn = self.connections[uuid]
> + if conn.type == NM_CONNECTION_TYPE_802_11_WIRELESS:
> + conn.Removed()
> + self.connections.pop(uuid)
> +
> class SecretsResponse(object):
> ''' Intermediate object to report the secrets from the dialog
> back to the connection object and which will inform NM
> @@ -358,6 +365,16 @@ class NMSettingsConnection(dbus.service.Object):
> self._settings = settings
> self._secrets = secrets
>
> + @dbus.service.signal(dbus_interface=NM_CONNECTION_IFACE,
> + signature='')
> + def Removed(self):
> + pass
> +
> + @dbus.service.signal(dbus_interface=NM_CONNECTION_IFACE,
> + signature='a{sa{sv}}')
> + def Updated(self, settings):
> + pass
> +
> def set_connected(self):
> if self._settings.connection.type == NM_CONNECTION_TYPE_GSM:
> self._settings.connection.timestamp = int(time.time())
> @@ -366,8 +383,17 @@ class NMSettingsConnection(dbus.service.Object):
> self._settings.connection.autoconnect = True
> self._settings.connection.timestamp = int(time.time())
> if self._settings.connection.type ==
> NM_CONNECTION_TYPE_802_11_WIRELESS:
> + self.Updated(self._settings.get_dict())
> self.save()
>
> + def set_disconnected(self):
> + if self._settings.connection.type != NM_CONNECTION_TYPE_GSM and \
> + self._settings.connection.autoconnect:
> + self._settings.connection.autoconnect = False
> + self._settings.connection.timestamp = None
> + self.Updated(self._settings.get_dict())
> + self.save()
> +
> def set_secrets(self, secrets):
> self._secrets = secrets
> if self._settings.connection.type ==
> NM_CONNECTION_TYPE_802_11_WIRELESS:
> @@ -377,8 +403,7 @@ class NMSettingsConnection(dbus.service.Object):
> return self._settings
>
> def save(self):
> - profile_path = env.get_profile_path()
> - config_path = os.path.join(profile_path, 'nm', 'connections.cfg')
> + config_path = _get_wifi_connections_path()
>
> config = ConfigParser.ConfigParser()
> try:
> @@ -477,8 +502,7 @@ class AccessPoint(gobject.GObject):
> self.mode = 0
>
> def initialize(self):
> - model_props = dbus.Interface(self.model,
> - 'org.freedesktop.DBus.Properties')
> + model_props = dbus.Interface(self.model, dbus.PROPERTIES_IFACE)
> model_props.GetAll(NM_ACCESSPOINT_IFACE, byte_arrays=True,
> reply_handler=self._ap_properties_changed_cb,
> error_handler=self._get_all_props_error_cb)
> @@ -590,19 +614,23 @@ def add_connection(uuid, settings, secrets=None):
> _nm_settings.add_connection(uuid, conn)
> return conn
>
> -def load_wifi_connections():
> +def _get_wifi_connections_path():
> profile_path = env.get_profile_path()
> - config_path = os.path.join(profile_path, 'nm', 'connections.cfg')
> + return os.path.join(profile_path, 'nm', 'connections.cfg')
>
> - config = ConfigParser.ConfigParser()
> +def _create_wifi_connections(config_path):
> + if not os.path.exists(os.path.dirname(config_path)):
> + os.makedirs(os.path.dirname(config_path), 0755)
> + f = open(config_path, 'w')
> + f.close()
> +
> +def load_wifi_connections():
> + config_path = _get_wifi_connections_path()
>
> if not os.path.exists(config_path):
> - if not os.path.exists(os.path.dirname(config_path)):
> - os.makedirs(os.path.dirname(config_path), 0755)
> - f = open(config_path, 'w')
> - config.write(f)
> - f.close()
> + _create_wifi_connections(config_path)
>
> + config = ConfigParser.ConfigParser()
> try:
> if not config.read(config_path):
> logging.error('Error reading the nm config file')
> @@ -708,3 +736,13 @@ def find_gsm_connection():
>
> logging.debug('There is no gsm connection in the NMSettings.')
> return None
> +
> +def count_wifi_connections():
> + return len(get_settings().connections)
> +
> +def clear_wifi_connections():
> + if _nm_settings is not None:
> + _nm_settings.clear_wifi_connections()
> +
> + config_path = _get_wifi_connections_path()
> + _create_wifi_connections(config_path)
> --
> 1.7.1
>
> _______________________________________________
> Sugar-devel mailing list
> Sugar-devel at lists.sugarlabs.org
> http://lists.sugarlabs.org/listinfo/sugar-devel
>
--
Esteban Arias
Investigación y Desarrollo - Plan Ceibal
Avda. Italia 6201
Montevideo - Uruguay.
Tel.: 2601.57.73 Interno 2228
E-mail : earias at plan.ceibal.edu.uy
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.sugarlabs.org/archive/dextrose/attachments/20101028/67564456/attachment-0001.html>
More information about the Dextrose
mailing list