aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorPhilipp Maier <pmaier@sysmocom.de>2022-05-19 10:27:12 +0200
committerPhilipp Maier <pmaier@sysmocom.de>2022-05-19 11:40:03 +0200
commitb3fe6005ac5e2c77686b569cf65255920dba6da6 (patch)
treea84a8cb41f4eec92b6d3fcced9b244b7262c58d1
parent55205e2e6a332bdbc1aae4b8b50420d871b34140 (diff)
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
-rwxr-xr-xpySim-shell.py24
1 files changed, 15 insertions, 9 deletions
diff --git a/pySim-shell.py b/pySim-shell.py
index 5a51fcd..38c6a80 100755
--- a/pySim-shell.py
+++ b/pySim-shell.py
@@ -461,12 +461,18 @@ class PySimCommands(CommandSet):
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 not action_df:
output_str = " " * indent + str(f) + (" " * 250)
output_str = output_str[0:25]
if isinstance(files[f], CardADF):
@@ -493,12 +499,12 @@ class PySimCommands(CommandSet):
# 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 @@ class PySimCommands(CommandSet):
"""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 elementary file (EF) """
context['COUNT'] += 1
df = self._cmd.rs.selected_file
as_json = opts['JSON']
@@ -622,9 +628,9 @@ class PySimCommands(CommandSet):
'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"))