personalization: indicate default ParamSource per ConfigurableParameter

Add default_source class members pointing to ParamSource classes to all
ConfigurableParameter subclasses.

This is useful to automatically set up a default ParamSource for a given
ConfigurableParameter subclass, during user interaction to produce a
batch personalization.

For example, if the user selects a Pin1 parameter, a calling program can
implicitly set this to a RandomDigitSource, which will magically make it
work the way that most users need.

BTW, default_source and default_value can be combined to configure a
matching ParamSource instance:

  my_source = MyParam.default_source.from_str( MyParam.default_value )

Change-Id: Ie58d13bce3fa1aa2547cf3cee918c2f5b30a8b32
This commit is contained in:
Neels Hofmeyr
2025-03-01 21:20:17 +01:00
parent 7cc607e73b
commit 1c622a6101

View File

@@ -131,6 +131,7 @@ class ConfigurableParameter:
max_len = None max_len = None
allow_len = None # a list of specific lengths allow_len = None # a list of specific lengths
default_value = None default_value = None
default_source = None # a param_source.ParamSource subclass
def __init__(self, input_value=None): def __init__(self, input_value=None):
self.input_value = input_value # the raw input value as given by caller self.input_value = input_value # the raw input value as given by caller
@@ -346,6 +347,7 @@ class Iccid(DecimalParam):
min_len = 18 min_len = 18
max_len = 20 max_len = 20
default_value = '0' * 18 default_value = '0' * 18
default_source = param_source.IncDigitSource
@classmethod @classmethod
def validate_val(cls, val): def validate_val(cls, val):
@@ -379,6 +381,7 @@ class Imsi(DecimalParam):
min_len = 6 min_len = 6
max_len = 15 max_len = 15
default_value = '00101' + ('0' * 10) default_value = '00101' + ('0' * 10)
default_source = param_source.IncDigitSource
@classmethod @classmethod
def apply_val(cls, pes: ProfileElementSequence, val): def apply_val(cls, pes: ProfileElementSequence, val):
@@ -411,6 +414,7 @@ class SdKey(BinaryParam):
key_id = None key_id = None
kvn = None kvn = None
key_usage_qual = None key_usage_qual = None
default_source = param_source.RandomHexDigitSource
@classmethod @classmethod
def _apply_sd(cls, pe: ProfileElement, value): def _apply_sd(cls, pe: ProfileElement, value):
@@ -567,6 +571,7 @@ class Puk(DecimalHexParam):
rpad = 16 rpad = 16
keyReference = None keyReference = None
default_value = '0' * allow_len default_value = '0' * allow_len
default_source = param_source.RandomDigitSource
@classmethod @classmethod
def apply_val(cls, pes: ProfileElementSequence, val): def apply_val(cls, pes: ProfileElementSequence, val):
@@ -604,6 +609,7 @@ class Pin(DecimalHexParam):
min_len = 4 min_len = 4
max_len = 8 max_len = 8
default_value = '0' * max_len default_value = '0' * max_len
default_source = param_source.RandomDigitSource
keyReference = None keyReference = None
@staticmethod @staticmethod
@@ -715,6 +721,7 @@ class AlgorithmID(DecimalParam, AlgoConfig):
algo_config_key = 'algorithmID' algo_config_key = 'algorithmID'
allow_len = 1 allow_len = 1
default_value = 1 # Milenage default_value = 1 # Milenage
default_source = param_source.ConstantSource
@classmethod @classmethod
def validate_val(cls, val): def validate_val(cls, val):
@@ -733,6 +740,7 @@ class K(BinaryParam, AlgoConfig):
algo_config_key = 'key' algo_config_key = 'key'
allow_len = int(128/8) # length in bytes (from BinaryParam) allow_len = int(128/8) # length in bytes (from BinaryParam)
default_value = '00' * allow_len default_value = '00' * allow_len
default_source = param_source.RandomHexDigitSource
class Opc(K): class Opc(K):
name = 'OPc' name = 'OPc'