pySim/filesystem: fix mutable default list/dict arguments

Having lists and dictionaries as default argument values is a bad
idea, because the same instance of list/dict will be used by all
objects instantiated using such constructor:

  def appendItem(itemName, itemList=[]):
      itemList.append(itemName)
      return itemList

  print(appendItem('notebook'))
  print(appendItem('pencil'))
  print(appendItem('eraser'))

Output:

  ['notebook']
  ['notebook', 'pencil']
  ['notebook', 'pencil', 'eraser']

Change-Id: I83d718ff9c3ff6aef47930f38d7f50424f9b880f
This commit is contained in:
Vadim Yanitskiy
2021-03-27 01:25:46 +01:00
committed by laforge
parent 24f7bd3ab5
commit 98f872bed1

View File

@@ -706,10 +706,10 @@ def interpret_sw(sw_data, sw):
class CardApplication(object): class CardApplication(object):
"""A card application is represented by an ADF (with contained hierarchy) and optionally """A card application is represented by an ADF (with contained hierarchy) and optionally
some SW definitions.""" some SW definitions."""
def __init__(self, name, adf=None, sw={}): def __init__(self, name, adf=None, sw=None):
self.name = name self.name = name
self.adf = adf self.adf = adf
self.sw = sw self.sw = sw or dict()
def __str__(self): def __str__(self):
return "APP(%s)" % (self.name) return "APP(%s)" % (self.name)
@@ -723,13 +723,13 @@ class CardProfile(object):
"""A Card Profile describes a card, it's filessystem hierarchy, an [initial] list of """A Card Profile describes a card, it's filessystem hierarchy, an [initial] list of
applications as well as profile-specific SW and shell commands. Every card has applications as well as profile-specific SW and shell commands. Every card has
one card profile, but there may be multiple applications within that profile.""" one card profile, but there may be multiple applications within that profile."""
def __init__(self, name, desc=None, files_in_mf=[], sw=[], applications=[], shell_cmdsets=[]): def __init__(self, name, **kw):
self.name = name self.name = name
self.desc = desc self.desc = kw.get("desc", None)
self.files_in_mf = files_in_mf self.files_in_mf = kw.get("files_in_mf", [])
self.sw = sw self.sw = kw.get("sw", [])
self.applications = applications self.applications = kw.get("applications", [])
self.shell_cmdsets = shell_cmdsets self.shell_cmdsets = kw.get("shell_cmdsets", [])
def __str__(self): def __str__(self):
return self.name return self.name