[Sugar-devel] [sugar 0.98 PATCH] sl#3800: In "My Settings" -> "ModemConfiguration", convert the procedure to process the results of "connection.get_secrets('gsm', _secrets_cb, _secrets_err_cb)" from pseudo-asynchronous to asynchronous.

James Cameron quozl at laptop.org
Sun Aug 12 19:31:29 EDT 2012


I like this change.  I have review comments below.

On Mon, Aug 13, 2012 at 03:18:33AM +0530, Ajay Garg wrote:
> In the method "get_modem_settings()", we call
> "connection.get_secrets('gsm', _secrets_cb, _secrets_err_cb)". This is
> an asynchronous call.
> 
> As of now, we busy wait, till the specified "result" callback is called
> (which in this case happens to be "def _secrets_cb(secrets)". After this
> is called, we return the modem-settings.
> 
> Instead of busy waiting, pass a callabck from the callee function.

                                      ^ typo

> Thereafter, when "def _secrets_cb(secrets)" is hit, execute this
> callback function, passing the modem-settings.
> 
>  extensions/cpsection/modemconfiguration/model.py |   15 ++++++++-------
>  extensions/cpsection/modemconfiguration/view.py  |    4 +++-
>  2 files changed, 11 insertions(+), 8 deletions(-)
> 
> diff --git a/extensions/cpsection/modemconfiguration/model.py b/extensions/cpsection/modemconfiguration/model.py
> index 969b5d9..8c900c9 100755
> --- a/extensions/cpsection/modemconfiguration/model.py
> +++ b/extensions/cpsection/modemconfiguration/model.py
> @@ -26,7 +26,7 @@ def get_connection():
>      return network.find_gsm_connection()
>  
>  
> -def get_modem_settings():
> +def get_modem_settings(callback):
>      modem_settings = {}
>      connection = get_connection()
>      if not connection:
> @@ -48,6 +48,10 @@ def get_modem_settings():
>          modem_settings['password'] = gsm_secrets.get('password', '')
>          modem_settings['pin'] = gsm_secrets.get('pin', '')
>  
> +        # sl#3800: We return the settings, via the "_secrets_cb()
> +        #          method", instead of busy-waiting.

The usefulness of this comment is obvious for patch review, but I
don't think it needs to be in the final.

> +        callback(modem_settings)
> +
>      def _secrets_err_cb(err):
>          secrets_call_done[0] = True
>          if isinstance(err, dbus.exceptions.DBusException) and \
> @@ -57,14 +61,11 @@ def get_modem_settings():
>              logging.error('Error retrieving GSM secrets: %s', err)
>  
>      # must be called asynchronously as this re-enters the GTK main loop

         ^ the above is no longer true, it no longer re-enters the
         main loop.

> +    #
> +    # sl#3800: We return the settings, via the "_secrets_cb()" method,
> +    #          instead of busy-waiting.

As before, comment adds nothing for eventual reader of code.

>      connection.get_secrets('gsm', _secrets_cb, _secrets_err_cb)
>  
> -    # wait til asynchronous execution completes
> -    while not secrets_call_done[0]:
> -        gtk.main_iteration()
> -
> -    return modem_settings
> -
>  
>  def _set_or_clear(_dict, key, value):
>      """Update a dictionary value for a specific key. If value is None or
> diff --git a/extensions/cpsection/modemconfiguration/view.py b/extensions/cpsection/modemconfiguration/view.py
> index 4ce6c0d..39a30c0 100644
> --- a/extensions/cpsection/modemconfiguration/view.py
> +++ b/extensions/cpsection/modemconfiguration/view.py
> @@ -118,7 +118,9 @@ class ModemConfiguration(SectionView):
>          entry.handler_unblock_by_func(self.__entry_changed_cb)
>  
>      def setup(self):
> -        settings = self._model.get_modem_settings()
> +        self._model.get_modem_settings(self.populate_entries)
> +
> +    def populate_entries(self, settings):
>          self._populate_entry(self._username_entry,
>              settings.get('username', ''))
>          self._populate_entry(self._number_entry, settings.get('number', ''))
> -- 
> 1.7.4.4
> 
> _______________________________________________
> Sugar-devel mailing list
> Sugar-devel at lists.sugarlabs.org
> http://lists.sugarlabs.org/listinfo/sugar-devel

Well done.

-- 
James Cameron
http://quozl.linux.org.au/


More information about the Sugar-devel mailing list