pySim.esim.saip.File: Turn file_size into a computed property

This way, we can use file_size for both record-oriented and transparent EF

Change-Id: Ib787cabe969202073a8c10042e200f3d2c29db73
This commit is contained in:
Harald Welte
2024-09-01 19:32:13 +02:00
parent 73dd3d0637
commit 981220641d

View File

@@ -112,6 +112,7 @@ class File:
self.arr = None self.arr = None
self.rec_len: Optional[int] = None self.rec_len: Optional[int] = None
self.nb_rec: Optional[int] = None self.nb_rec: Optional[int] = None
self._file_size = 0
self.high_update: bool = False self.high_update: bool = False
self.shareable: bool = True self.shareable: bool = True
self.df_name = None self.df_name = None
@@ -129,6 +130,16 @@ class File:
return self.template.name return self.template.name
return None return None
@property
def file_size(self) -> Optional[int]:
"""Return the size of the file in bytes."""
if self.file_type in ['LF', 'CY']:
return self.nb_rec * self.rec_len
elif self.file_type in ['TR', 'BT']:
return self._file_size
else:
return None
@staticmethod @staticmethod
def get_tuplelist_item(l: List[Tuple], key: str): def get_tuplelist_item(l: List[Tuple], key: str):
"""get the [first] value matching given key from a list of (key, value) tuples.""" """get the [first] value matching given key from a list of (key, value) tuples."""
@@ -194,7 +205,7 @@ class File:
if self.file_type in ['LF', 'CY']: if self.file_type in ['LF', 'CY']:
fdb_dec['file_type'] = 'working_ef' fdb_dec['file_type'] = 'working_ef'
if self.nb_rec and self.rec_len: if self.nb_rec and self.rec_len:
fileDescriptor['efFileSize'] = self._encode_file_size(self.nb_rec * self.rec_len) fileDescriptor['efFileSize'] = self._encode_file_size(self.file_size)
if self.file_type == 'LF': if self.file_type == 'LF':
fdb_dec['structure'] = 'linear_fixed' fdb_dec['structure'] = 'linear_fixed'
elif self.file_type == 'CY': elif self.file_type == 'CY':
@@ -263,7 +274,7 @@ class File:
if fdb_dec['file_type'] == 'working_ef': if fdb_dec['file_type'] == 'working_ef':
efFileSize = fileDescriptor.get('efFileSize', None) efFileSize = fileDescriptor.get('efFileSize', None)
if efFileSize: if efFileSize:
self.file_size = self._decode_file_size(efFileSize) self._file_size = self._decode_file_size(efFileSize)
if fd_dec['num_of_rec']: if fd_dec['num_of_rec']:
self.nb_rec = fd_dec['num_of_rec'] self.nb_rec = fd_dec['num_of_rec']
if fd_dec['record_len']: if fd_dec['record_len']:
@@ -277,7 +288,7 @@ class File:
elif fdb_dec['structure'] == 'ber_tlv': elif fdb_dec['structure'] == 'ber_tlv':
self.file_type = 'BT' self.file_type = 'BT'
if 'maximumFileSize' in pefi: if 'maximumFileSize' in pefi:
self.file_size = self._decode_file_size(pefi['maximumFileSize']) self._file_size = self._decode_file_size(pefi['maximumFileSize'])
specialFileInformation = pefi.get('specialFileInformation', None) specialFileInformation = pefi.get('specialFileInformation', None)
if specialFileInformation: if specialFileInformation:
if specialFileInformation[0] & 0x80: if specialFileInformation[0] & 0x80: