laforge has submitted this change. ( https://gerrit.osmocom.org/c/pysim/+/41779?usp=email )
Change subject: personalization: refactor SmspTpScAddr ......................................................................
personalization: refactor SmspTpScAddr
Refactor SmspTpScAddr to the new ConfigurableParameter implementation style.
Change-Id: I2600369e195e9f5aed7f4e6ff99ae273ed3ab3bf --- M pySim/esim/saip/personalization.py 1 file changed, 19 insertions(+), 8 deletions(-)
Approvals: Jenkins Builder: Verified laforge: Looks good to me, approved
diff --git a/pySim/esim/saip/personalization.py b/pySim/esim/saip/personalization.py index 8415d64..75a43aa 100644 --- a/pySim/esim/saip/personalization.py +++ b/pySim/esim/saip/personalization.py @@ -338,10 +338,17 @@ class SmspTpScAddr(ConfigurableParameter): """Configurable SMSC (SMS Service Centre) TP-SC-ADDR. Expects to be a phone number in national or international format (designated by a leading +). Automatically sets the NPI to E.164 and the TON based on - presence or absence of leading +""" + presence or absence of leading +.""" + allow_chars = '+0123456789' + strip_chars = ' \t\r\n' + max_len = 21 # '+' and 20 digits + min_len = 1
- def validate(self): - addr_str = str(self.input_value) + + @classmethod + def validate_val(cls, val): + val = super().validate_val(val) + addr_str = str(val) if addr_str[0] == '+': digits = addr_str[1:] international = True @@ -349,13 +356,17 @@ digits = addr_str international = False if len(digits) > 20: - raise ValueError('TP-SC-ADDR must not exceed 20 digits') + raise ValueError(f'TP-SC-ADDR must not exceed 20 digits: {digits!r}') if not digits.isdecimal(): - raise ValueError('TP-SC-ADDR must only contain decimal digits') - self.value = (international, digits) + raise ValueError(f'TP-SC-ADDR must only contain decimal digits: {digits!r}') + return (international, digits)
- def apply(self, pes: ProfileElementSequence): - international, digits = self.value + @classmethod + def apply_val(cls, pes: ProfileElementSequence, val): + """val must be a tuple (international[bool], digits[str]). + For example, an input of "+1234" corresponds to (True, "1234"); + An input of "1234" corresponds to (False, "1234").""" + international, digits = val for pe in pes.get_pes_for_type('usim'): # obtain the File instance from the ProfileElementUSIM f_smsp = pe.files['ef-smsp']