[Kimchi-devel] [PATCH][Wok] Do not use default value when declare a function
Rodrigo Trujillo
rodrigo.trujillo at linux.vnet.ibm.com
Tue Jun 7 13:15:42 UTC 2016
Reviewed-by: Rodrigo Trujillo <rodrigo.trujillo at linux.vnet.ibm.com>
On 06/07/2016 01:29 AM, Ramon Medeiros wrote:
> For mutable object as a default parameter in function and
> method-declarations the problem is, that the evaluation and creation
> takes place at exactly the same moment. The python-parser reads the
> function-head and evaluates it at the same moment.
>
> Most beginers assume that a new object is created at every call, but
> that's not correct. One object (in your example a list) is created at
> the moment of declaration and not on demand when you are calling the
> method.
>
> For imutable objects that's not a problem, because even if all calls
> share the same object, it's imutable and therefore it's properties
> remain the same.
>
> As a convention, must be used the None object for defaults to indicate
> the use of a default initialization, which now can take place in the
> function-body, which naturally is evaluated at call-time.
>
> Signed-off-by: Ramon Medeiros <ramonn at linux.vnet.ibm.com>
> ---
> src/wok/exception.py | 4 +++-
> src/wok/message.py | 4 +++-
> src/wok/model/notifications.py | 4 +++-
> 3 files changed, 9 insertions(+), 3 deletions(-)
>
> diff --git a/src/wok/exception.py b/src/wok/exception.py
> index 52f007e..90b6410 100644
> --- a/src/wok/exception.py
> +++ b/src/wok/exception.py
> @@ -25,7 +25,9 @@ from wok.message import WokMessage
>
>
> class WokException(Exception):
> - def __init__(self, code='', args={}):
> + def __init__(self, code='', args=None):
> + if args is None:
> + args = {}
> self.code = code
> msg = WokMessage(code, args).get_text()
> cherrypy.log.error_log.error(msg)
> diff --git a/src/wok/message.py b/src/wok/message.py
> index a7162c7..4c35747 100644
> --- a/src/wok/message.py
> +++ b/src/wok/message.py
> @@ -26,7 +26,9 @@ from wok.template import get_lang, validate_language
>
>
> class WokMessage(object):
> - def __init__(self, code='', args={}, plugin=None):
> + def __init__(self, code='', args=None, plugin=None):
> + if args is None:
> + args = {}
> # make all args unicode
> for key, value in args.iteritems():
> if isinstance(value, unicode):
> diff --git a/src/wok/model/notifications.py b/src/wok/model/notifications.py
> index e83ac56..bdb7c78 100644
> --- a/src/wok/model/notifications.py
> +++ b/src/wok/model/notifications.py
> @@ -27,7 +27,9 @@ from wok.utils import wok_log
> notificationsStore = {}
>
>
> -def add_notification(code, args={}, plugin_name=None):
> +def add_notification(code, args=None, plugin_name=None):
> + if args is None:
> + args = {}
> if not code:
> wok_log.error("Unable to add notification: invalid code '%(code)s'" %
> {'code': str(code)})
More information about the Kimchi-devel
mailing list