Change in pysim[master]: filesystem: add flags to filter selectables

laforge gerrit-no-reply at lists.osmocom.org
Fri Mar 12 07:35:37 UTC 2021


laforge has submitted this change. ( https://gerrit.osmocom.org/c/pysim/+/23204 )

Change subject: filesystem: add flags to filter selectables
......................................................................

filesystem: add flags to filter selectables

When requesting what DF/EF/ADF are selectable it is useful to have some
control of what we do not want in the resulting list.

Change-Id: Idb50a512bfdbfdf2e98f2ce0e89928cb0ff19f5e
Related: OS#4963
---
M pySim/filesystem.py
1 file changed, 36 insertions(+), 25 deletions(-)

Approvals:
  laforge: Looks good to me, approved
  Jenkins Builder: Verified



diff --git a/pySim/filesystem.py b/pySim/filesystem.py
index 2bcbe10..a9f2318 100644
--- a/pySim/filesystem.py
+++ b/pySim/filesystem.py
@@ -86,33 +86,38 @@
             node = node.parent
         return node
 
-    def _get_self_selectables(self, alias=None):
+    def _get_self_selectables(self, alias=None, flags = []):
         """Return a dict of {'identifier': self} tuples"""
         sels = {}
         if alias:
             sels.update({alias: self})
-        if self.fid:
+        if self.fid and (flags == [] or 'FIDS' in flags):
             sels.update({self.fid: self})
-        if self.name:
+        if self.name and (flags == [] or 'NAMES' in flags):
             sels.update({self.name: self})
         return sels
 
-    def get_selectables(self):
+    def get_selectables(self, flags = []):
         """Return a dict of {'identifier': File} that is selectable from the current file."""
+        sels = {}
         # we can always select ourself
-        sels = self._get_self_selectables('.')
+        if flags == [] or 'SELF' in flags:
+            sels = self._get_self_selectables('.', flags)
         # we can always select our parent
-        sels = self.parent._get_self_selectables('..')
+        if flags == [] or 'PARENT' in flags:
+            sels = self.parent._get_self_selectables('..', flags)
         # if we have a MF, we can always select its applications
-        mf = self.get_mf()
-        if mf:
-            sels.update(mf._get_self_selectables())
-            sels.update(mf.get_app_selectables())
+        if flags == [] or 'MF' in flags:
+            mf = self.get_mf()
+            if mf:
+                sels.update(mf._get_self_selectables(flags = flags))
+                if flags == [] or 'APPS' in flags:
+                    sels.update(mf.get_app_selectables(flags))
         return sels
 
-    def get_selectable_names(self):
+    def get_selectable_names(self, flags = []):
         """Return a list of strings for all identifiers that are selectable from the current file."""
-        sels = self.get_selectables()
+        sels = self.get_selectables(flags)
         return sels.keys()
 
     def decode_select_response(self, data_hex):
@@ -158,12 +163,14 @@
         for child in children:
             self.add_file(child, ignore_existing)
 
-    def get_selectables(self):
+    def get_selectables(self, flags = []):
         """Get selectable (DF/EF names) from current DF"""
         # global selectables + our children
-        sels = super().get_selectables()
-        sels.update({x.fid: x for x in self.children.values() if x.fid})
-        sels.update({x.name: x for x in self.children.values() if x.name})
+        sels = super().get_selectables(flags)
+        if flags == [] or 'FIDS' in flags:
+                sels.update({x.fid: x for x in self.children.values() if x.fid})
+        if flags == [] or 'NAMES' in flags:
+                sels.update({x.name: x for x in self.children.values() if x.name})
         return sels
 
     def lookup_file_by_name(self, name):
@@ -216,16 +223,20 @@
         """Get list of completions (AID names)"""
         return [x.name for x in self.applications]
 
-    def get_selectables(self):
+    def get_selectables(self, flags = []):
         """Get list of completions (DF/EF/ADF names) from current DF"""
-        sels = super().get_selectables()
-        sels.update(self.get_app_selectables())
+        sels = super().get_selectables(flags)
+        if flags == [] or 'APPS' in flags:
+                sels.update(self.get_app_selectables(flags))
         return sels
 
-    def get_app_selectables(self):
-        # applications by AID + name
-        sels = {x.aid: x for x in self.applications.values()}
-        sels.update({x.name: x for x in self.applications.values() if x.name})
+    def get_app_selectables(self, flags = []):
+        """Get applications by AID + name"""
+        sels = {}
+        if flags == [] or 'FIDS' in flags:
+                sels.update({x.aid: x for x in self.applications.values()})
+        if flags == [] or 'NAMES' in flags:
+                sels.update({x.name: x for x in self.applications.values() if x.name})
         return sels
 
     def decode_select_response(self, data_hex):
@@ -261,10 +272,10 @@
     def __str__(self):
         return "EF(%s)" % (super().__str__())
 
-    def get_selectables(self):
+    def get_selectables(self, flags = []):
         """Get list of completions (EF names) from current DF"""
         #global selectable names + those of the parent DF
-        sels = super().get_selectables()
+        sels = super().get_selectables(flags)
         sels.update({x.name:x for x in self.parent.children.values() if x != self})
         return sels
 

-- 
To view, visit https://gerrit.osmocom.org/c/pysim/+/23204
To unsubscribe, or for help writing mail filters, visit https://gerrit.osmocom.org/settings

Gerrit-Project: pysim
Gerrit-Branch: master
Gerrit-Change-Id: Idb50a512bfdbfdf2e98f2ce0e89928cb0ff19f5e
Gerrit-Change-Number: 23204
Gerrit-PatchSet: 3
Gerrit-Owner: laforge <laforge at osmocom.org>
Gerrit-Reviewer: Jenkins Builder
Gerrit-Reviewer: laforge <laforge at osmocom.org>
Gerrit-MessageType: merged
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.osmocom.org/pipermail/gerrit-log/attachments/20210312/42c39b75/attachment.htm>


More information about the gerrit-log mailing list