dexter has uploaded this change for review. ( 
https://gerrit.osmocom.org/c/pysim/+/28160 )


Change subject: pySim-shell: extend walk() so that we can also have action of 
ADF or DF
......................................................................

pySim-shell: extend walk() so that we can also have action of ADF or DF

The walk() method that we use to traverse the whole file system tree is
currently only able to execute action callbacks on EFs. Lets add a
mechanism that allows us to have a second callback that is executed when
we hit a DF or ADF.

Change-Id: Iabcd78552a14a2d3f8f31273dda7731e1f640cdb
---
M pySim-shell.py
1 file changed, 15 insertions(+), 9 deletions(-)



  git pull ssh://gerrit.osmocom.org:29418/pysim refs/changes/60/28160/1

diff --git a/pySim-shell.py b/pySim-shell.py
index 5a51fcd..b1503a8 100755
--- a/pySim-shell.py
+++ b/pySim-shell.py
@@ -461,12 +461,18 @@
         self._cmd.poutput(directory_str)
         self._cmd.poutput("%d files" % len(selectables))

-    def walk(self, indent=0, action=None, context=None, opts={}):
+    def walk(self, indent=0, action_ef=None, action_df=None, context=None, 
opts={}):
         """Recursively walk through the file system, starting at the currently 
selected DF"""
+
+        if isinstance(self._cmd.rs.selected_file, CardDF):
+            if action_df:
+                action_df(context, opts)
+
         files = self._cmd.rs.selected_file.get_selectables(
             flags=['FNAMES', 'ANAMES'])
         for f in files:
-            if not action:
+            # special case: When no action is performed, just output a 
directory
+            if not action_ef and action_df:
                 output_str = "  " * indent + str(f) + (" " * 250)
                 output_str = output_str[0:25]
                 if isinstance(files[f], CardADF):
@@ -493,12 +499,12 @@
                 # If the DF was skipped, we never have entered the directory
                 # below, so we must not move up.
                 if skip_df == False:
-                    self.walk(indent + 1, action, context, opts)
+                    self.walk(indent + 1, action_ef, action_df, context, opts)
                     fcp_dec = self._cmd.rs.select("..", self._cmd)

-            elif action:
+            elif action_ef:
                 df_before_action = self._cmd.rs.selected_file
-                action(f, context, opts)
+                action_ef(f, context, opts)
                 # When walking through the file system tree the action must not
                 # always restore the currently selected file to the file that
                 # was selected before executing the action() callback.
@@ -510,8 +516,8 @@
         """Display a filesystem-tree with all selectable files"""
         self.walk()

-    def export(self, filename, context, opts):
-        """ Select and export a single file """
+    def export_ef(self, filename, context, opts):
+        """ Select and export a single elementry file (EF) """
         context['COUNT'] += 1
         df = self._cmd.rs.selected_file
         as_json = opts['JSON']
@@ -622,9 +628,9 @@
                    'DF_SKIP': 0, 'DF_SKIP_REASON': []}
         opts_export = {'JSON': opts.json}
         if opts.filename:
-            self.export(opts.filename, context, opts_export)
+            self.export_ef(opts.filename, context, opts_export)
         else:
-            self.walk(0, self.export, context, opts_export)
+            self.walk(0, self.export_ef, None, context, opts_export)

         self._cmd.poutput(boxed_heading_str("Export summary"))


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

Gerrit-Project: pysim
Gerrit-Branch: master
Gerrit-Change-Id: Iabcd78552a14a2d3f8f31273dda7731e1f640cdb
Gerrit-Change-Number: 28160
Gerrit-PatchSet: 1
Gerrit-Owner: dexter <[email protected]>
Gerrit-MessageType: newchange

Reply via email to