This is merely a historical archive of years 2008-2021, before the migration to mailman3.
A maintained and still updated list archive can be found at https://lists.osmocom.org/hyperkitty/list/gerrit-log@lists.osmocom.org/.
laforge gerrit-no-reply at lists.osmocom.orglaforge has uploaded this change for review. ( https://gerrit.osmocom.org/c/pysim/+/23681 )
Change subject: shell: add edit_{record,binary}_decoded shell commands
......................................................................
shell: add edit_{record,binary}_decoded shell commands
This allows the user to edit the file/record contents in its
JSON representation inside the standard system text editor.
Change-Id: Icf6a6e8529e7664c5645519fb4bdd55b35f34664
---
M docs/shell.rst
M pySim/filesystem.py
2 files changed, 86 insertions(+), 0 deletions(-)
git pull ssh://gerrit.osmocom.org:29418/pysim refs/changes/81/23681/1
diff --git a/docs/shell.rst b/docs/shell.rst
index 652e572..3ea6c56 100644
--- a/docs/shell.rst
+++ b/docs/shell.rst
@@ -206,6 +206,24 @@
:func: LinFixedEF.ShellCommands.upd_rec_dec_parser
+edit_record_decoded
+~~~~~~~~~~~~~~~~~~~
+.. argparse::
+ :module: pySim.filesystem
+ :func: LinFixedEF.ShellCommands.edit_rec_dec_parser
+
+This command will read the selected record, decode it to its JSON representation, save
+that JSON to a temporary file on your computer, and launch your configured text editor.
+
+You may then perform whatever modifications to the JSON representation, save + leave your
+text editor.
+
+Afterwards, the modified JSON will be re-encoded to the binary format, and the result written
+back to the record on the SIM card.
+
+This allows for easy interactive modification of records.
+
+
Transparent EF commands
-----------------------
@@ -268,6 +286,23 @@
}
+edit_binary_decoded
+~~~~~~~~~~~~~~~~~~~
+.. argparse::
+ :module: pySim.filesystem
+ :func: TransparentEF.ShellCommands.edit_bin_dec_parser
+
+This command will read the selected binary EF, decode it to its JSON representation, save
+that JSON to a temporary file on your computer, and launch your configured text editor.
+
+You may then perform whatever modifications to the JSON representation, save + leave your
+text editor.
+
+Afterwards, the modified JSON will be re-encoded to the binary format, and the result written
+to the SIM card.
+
+This allows for easy interactive modification of file contents.
+
cmd2 settable parameters
------------------------
diff --git a/pySim/filesystem.py b/pySim/filesystem.py
index e97fbf6..ad93cff 100644
--- a/pySim/filesystem.py
+++ b/pySim/filesystem.py
@@ -25,6 +25,8 @@
# along with this program. If not, see <http://www.gnu.org/licenses/>.
import code
+import tempfile
+import shutil
import json
import cmd2
@@ -433,6 +435,29 @@
if data:
self._cmd.poutput_json(data)
+ def do_edit_binary_decoded(self, opts):
+ """Edit the JSON representation of the EF contents in an editor."""
+ (orig_json, sw) = self._cmd.rs.read_binary_dec()
+ dirname = tempfile.mkdtemp(prefix='pysim_')
+ try:
+ filename = '%s/file' % dirname
+ # write existing data as JSON to file
+ with open(filename, 'w') as text_file:
+ json.dump(orig_json, text_file, indent=4)
+ # run a text editor
+ self._cmd._run_editor(filename)
+ with open(filename, 'r') as text_file:
+ edited_json = json.load(text_file)
+ if edited_json == orig_json:
+ self._cmd.poutput("Data not modified, skipping write")
+ else:
+ (data, sw) = self._cmd.rs.update_binary_dec(edited_json)
+ if data:
+ self._cmd.poutput_json(data)
+ finally:
+ shutil.rmtree(dirname)
+
+
def __init__(self, fid:str, sfid:str=None, name:str=None, desc:str=None, parent:CardDF=None,
size={1,None}):
"""
@@ -622,6 +647,32 @@
if data:
self._cmd.poutput(data)
+ edit_rec_dec_parser = argparse.ArgumentParser()
+ edit_rec_dec_parser.add_argument('record_nr', type=int, help='Number of record to be edited')
+ @cmd2.with_argparser(edit_rec_dec_parser)
+ def do_edit_record_decoded(self, opts):
+ """Edit the JSON representation of one record in an editor."""
+ (orig_json, sw) = self._cmd.rs.read_record_dec(opts.record_nr)
+ dirname = tempfile.mkdtemp(prefix='pysim_')
+ try:
+ filename = '%s/file' % dirname
+ # write existing data as JSON to file
+ with open(filename, 'w') as text_file:
+ json.dump(orig_json, text_file, indent=4)
+ # run a text editor
+ self._cmd._run_editor(filename)
+ with open(filename, 'r') as text_file:
+ edited_json = json.load(text_file)
+ if edited_json == orig_json:
+ self._cmd.poutput("Data not modified, skipping write")
+ else:
+ (data, sw) = self._cmd.rs.update_record_dec(opts.record_nr, edited_json)
+ if data:
+ self._cmd.poutput_json(data)
+ finally:
+ shutil.rmtree(dirname)
+
+
def __init__(self, fid:str, sfid:str=None, name:str=None, desc:str=None,
parent:Optional[CardDF]=None, rec_len={1,None}):
"""
--
To view, visit https://gerrit.osmocom.org/c/pysim/+/23681
To unsubscribe, or for help writing mail filters, visit https://gerrit.osmocom.org/settings
Gerrit-Project: pysim
Gerrit-Branch: master
Gerrit-Change-Id: Icf6a6e8529e7664c5645519fb4bdd55b35f34664
Gerrit-Change-Number: 23681
Gerrit-PatchSet: 1
Gerrit-Owner: laforge <laforge at osmocom.org>
Gerrit-MessageType: newchange
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.osmocom.org/pipermail/gerrit-log/attachments/20210408/83091f93/attachment.htm>