laforge has submitted this change. ( 
https://gerrit.osmocom.org/c/pysim/+/37652?usp=email )

Change subject: pySim.filesystem: Add Path for abstraction/utility around file 
system paths
......................................................................

pySim.filesystem: Add Path for abstraction/utility around file system paths

Change-Id: I202baa378988431a318850e3593ff1929d94d268
---
M pySim/filesystem.py
1 file changed, 55 insertions(+), 1 deletion(-)

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




diff --git a/pySim/filesystem.py b/pySim/filesystem.py
index 5414fb9..0c7d51d 100644
--- a/pySim/filesystem.py
+++ b/pySim/filesystem.py
@@ -9,7 +9,7 @@
 not the actual contents / runtime state of interacting with a given smart card.
 """

-# (C) 2021 by Harald Welte <[email protected]>
+# (C) 2021-2024 by Harald Welte <[email protected]>
 #
 # This program is free software: you can redistribute it and/or modify
 # it under the terms of the GNU General Public License as published by
@@ -1448,3 +1448,48 @@
         for m in CardModel.__subclasses__():
             if m.match(scc):
                 m.add_files(rs)
+
+
+class Path:
+    """Representation of a file-system path."""
+    def __init__(self, p: Union[str, List[str]]):
+        # split if given as single string with slahes
+        if isinstance(p, str):
+            p = p.split('/')
+        # make sure internal representation alwas is uppercase only
+        self.list = [x.upper() for x in p]
+
+    def __str__(self) -> str:
+        return '/'.join(self.list)
+
+    def __repr__(self) -> str:
+        return 'Path(%s)' % (str(self))
+
+    def __eq__(self, other: 'Path') -> bool:
+        return self.list == other.list
+
+    def __getitem__(self, i):
+        return self.list[i]
+
+    def __add__(self, a):
+        if isinstance(a, list):
+            l = self.list + a
+        elif isinstance(a, Path):
+            l = self.list + a.list
+        else:
+            l = self.list + [a]
+        return Path(l)
+
+    def relative_to_mf(self) -> 'Path':
+        """Return a path relative to MF, i.e. without initial explicit MF."""
+        if self.list[0] == 'MF':
+            return Path(self.list[1:])
+        return self
+
+    def is_parent(self, other: 'Path') -> bool:
+        """Is this instance a parent of the given other instance?"""
+        if len(self.list) >= len(other.list):
+            return False
+        if other.list[:len(self.list)] == self.list:
+            return True
+        return False

--
To view, visit https://gerrit.osmocom.org/c/pysim/+/37652?usp=email
To unsubscribe, or for help writing mail filters, visit 
https://gerrit.osmocom.org/settings

Gerrit-Project: pysim
Gerrit-Branch: master
Gerrit-Change-Id: I202baa378988431a318850e3593ff1929d94d268
Gerrit-Change-Number: 37652
Gerrit-PatchSet: 1
Gerrit-Owner: laforge <[email protected]>
Gerrit-Reviewer: Jenkins Builder
Gerrit-Reviewer: laforge <[email protected]>
Gerrit-MessageType: merged

Reply via email to