From d364174ca094f4adfff1030652d55e68d078f505 Mon Sep 17 00:00:00 2001 From: Neels Hofmeyr Date: Sun, 25 Jan 2026 19:51:39 +0100 Subject: [PATCH] saip: SmspTpScAddr: fix get_values_from_pes Change-Id: I2010305340499c907bb7618c04c61e194db34814 --- pySim/esim/saip/personalization.py | 30 ++++++++++++++++++++++++------ 1 file changed, 24 insertions(+), 6 deletions(-) diff --git a/pySim/esim/saip/personalization.py b/pySim/esim/saip/personalization.py index 7d24453b..de6e6ce3 100644 --- a/pySim/esim/saip/personalization.py +++ b/pySim/esim/saip/personalization.py @@ -554,21 +554,39 @@ class SmspTpScAddr(ConfigurableParameter): example_input = '+49301234567' default_source = param_source.ConstantSource - @classmethod - def validate_val(cls, val): - val = super().validate_val(val) - addr_str = str(val) + @staticmethod + def str_to_tuple(addr_str): if addr_str[0] == '+': digits = addr_str[1:] international = True else: digits = addr_str international = False + return (international, digits) + + @staticmethod + def tuple_to_str(addr_tuple): + international, digits = addr_tuple + if international: + ret = '+' + else: + ret = '' + ret += digits + return ret + + @classmethod + def validate_val(cls, val): + val = super().validate_val(val) + + addr_tuple = cls.str_to_tuple(str(val)) + + international, digits = addr_tuple if len(digits) > 20: raise ValueError(f'TP-SC-ADDR must not exceed 20 digits: {digits!r}') if not digits.isdecimal(): raise ValueError(f'TP-SC-ADDR must only contain decimal digits: {digits!r}') - return (international, digits) + + return addr_tuple @classmethod def apply_val(cls, pes: ProfileElementSequence, val): @@ -627,7 +645,7 @@ class SmspTpScAddr(ConfigurableParameter): continue international = (international == 'international') - yield (international, digits) + yield { cls.name: cls.tuple_to_str((international, digits)) } class SdKey(BinaryParam):