<matrixBuild _class='hudson.matrix.MatrixBuild'><action _class='hudson.model.CauseAction'><cause _class='org.jenkinsci.plugins.workflow.support.steps.build.BuildUpstreamCause'><shortDescription>Started by upstream project "gerrit-pysim" build number 2,151</shortDescription><upstreamBuild>2151</upstreamBuild><upstreamProject>gerrit-pysim</upstreamProject><upstreamUrl>job/gerrit-pysim/</upstreamUrl></cause></action><action></action><action _class='hudson.model.ParametersAction'><parameter _class='hudson.model.StringParameterValue'><name>COMMENT_TYPE</name><value></value></parameter><parameter _class='hudson.model.StringParameterValue'><name>DISTRO</name><value></value></parameter><parameter _class='hudson.model.StringParameterValue'><name>GERRIT_BRANCH</name><value>master</value></parameter><parameter _class='hudson.model.StringParameterValue'><name>GERRIT_CHANGE_NUMBER</name><value>39742</value></parameter><parameter _class='hudson.model.StringParameterValue'><name>GERRIT_HOST</name><value>gerrit.osmocom.org</value></parameter><parameter _class='hudson.model.StringParameterValue'><name>GERRIT_PATCHSET_NUMBER</name><value>5</value></parameter><parameter _class='hudson.model.StringParameterValue'><name>GERRIT_PATCHSET_REVISION</name><value>3a2cb239bcc6b4dd71107a2b522da581599931b2</value></parameter><parameter _class='hudson.model.StringParameterValue'><name>GERRIT_PATCHSET_UPLOADER_NAME</name><value>neels</value></parameter><parameter _class='hudson.model.StringParameterValue'><name>GERRIT_PORT</name><value>29418</value></parameter><parameter _class='hudson.model.StringParameterValue'><name>GERRIT_PROJECT</name><value>pysim</value></parameter><parameter _class='hudson.model.StringParameterValue'><name>GERRIT_REFSPEC</name><value>refs/changes/42/39742/5</value></parameter><parameter _class='hudson.model.StringParameterValue'><name>GERRIT_REPO_URL</name><value>ssh://jenkins@gerrit.osmocom.org:29418/pysim</value></parameter><parameter _class='hudson.model.StringParameterValue'><name>PIPELINE_BUILD_URL</name><value>https://jenkins.osmocom.org/jenkins/job/gerrit-pysim/2151/</value></parameter><parameter _class='hudson.model.StringParameterValue'><name>PROJECT_NAME</name><value>pysim</value></parameter><parameter _class='hudson.model.StringParameterValue'><name>BRANCH_CI</name><value>master</value></parameter></action><action _class='jenkins.metrics.impl.TimeInQueueAction'><blockedDurationMillis>0</blockedDurationMillis><blockedTimeMillis>0</blockedTimeMillis><buildableDurationMillis>0</buildableDurationMillis><buildableTimeMillis>0</buildableTimeMillis><buildingDurationMillis>734725</buildingDurationMillis><executingTimeMillis>734725</executingTimeMillis><executorUtilization>1.0</executorUtilization><queuingDurationMillis>6772</queuingDurationMillis><queuingTimeMillis>6772</queuingTimeMillis><subTaskCount>0</subTaskCount><totalDurationMillis>741497</totalDurationMillis><waitingDurationMillis>6770</waitingDurationMillis><waitingTimeMillis>6770</waitingTimeMillis></action><action></action><action _class='hudson.plugins.git.util.BuildData'><buildsByBranchName><master _class='hudson.plugins.git.util.Build'><buildNumber>2142</buildNumber><marked><SHA1>3a2cb239bcc6b4dd71107a2b522da581599931b2</SHA1><branch><SHA1>3a2cb239bcc6b4dd71107a2b522da581599931b2</SHA1><name>master</name></branch></marked><revision><SHA1>3a2cb239bcc6b4dd71107a2b522da581599931b2</SHA1><branch><SHA1>3a2cb239bcc6b4dd71107a2b522da581599931b2</SHA1><name>master</name></branch></revision></master></buildsByBranchName><lastBuiltRevision><SHA1>3a2cb239bcc6b4dd71107a2b522da581599931b2</SHA1><branch><SHA1>3a2cb239bcc6b4dd71107a2b522da581599931b2</SHA1><name>master</name></branch></lastBuiltRevision><remoteUrl>ssh://jenkins@gerrit.osmocom.org:29418/pysim</remoteUrl><scmName></scmName></action><action></action><action></action><action _class='org.jenkinsci.plugins.displayurlapi.actions.RunDisplayAction'><artifactsUrl>https://jenkins.osmocom.org/jenkins/view/osmo-gsm-tester/job/gerrit-pysim-build/2142/artifact</artifactsUrl><changesUrl>https://jenkins.osmocom.org/jenkins/view/osmo-gsm-tester/job/gerrit-pysim-build/changes</changesUrl><displayUrl>https://jenkins.osmocom.org/jenkins/view/osmo-gsm-tester/job/gerrit-pysim-build/2142/</displayUrl><testsUrl>https://jenkins.osmocom.org/jenkins/view/osmo-gsm-tester/job/gerrit-pysim-build/2142/testReport</testsUrl></action><building>false</building><displayName>#2142</displayName><duration>734725</duration><estimatedDuration>1309811</estimatedDuration><fullDisplayName>gerrit-pysim-build #2142</fullDisplayName><id>2142</id><inProgress>false</inProgress><keepLog>true</keepLog><number>2142</number><queueId>1838567</queueId><result>FAILURE</result><timestamp>1741611676595</timestamp><url>https://jenkins.osmocom.org/jenkins/view/osmo-gsm-tester/job/gerrit-pysim-build/2142/</url><builtOn></builtOn><changeSet _class='hudson.plugins.git.GitChangeSetList'><item _class='hudson.plugins.git.GitChangeSet'><affectedPath>pySim/esim/saip/personalization.py</affectedPath><commitId>3a2cb239bcc6b4dd71107a2b522da581599931b2</commitId><timestamp>1741611631000</timestamp><author><absoluteUrl>https://jenkins.osmocom.org/jenkins/user/neels</absoluteUrl><fullName>Neels Hofmeyr</fullName></author><authorEmail>nhofmeyr@sysmocom.de</authorEmail><comment>[2/7] personalization: refactor ConfigurableParameter, Iccid, Imsi

Main points/rationales of the refactoring, details below:
1) common validation implementation
2) offer classmethods

The new features are optional, and will be heavily used by batch
personalization patches coming soon.

Implement Iccid and Imsi to use the new way, with a common abstract
DecimalParam implementation.

So far leave the other parameter classes working as they always did, to
follow suit in subsequent commits.

Details:

1) common validation implementation:
There are very common validation steps in the various parameter
implementations. It is more convenient and much more readable to
implement those once and set simple validation parameters per subclass.
So there now is a validate_val() classmethod, which subclasses can use
as-is to apply the validation parameters -- or subclasses can override
their cls.validate_val() for specialized validation.
(Those subclasses that this patch doesn't touch still override the
self.validate() instance method. Hence they still work as before this
patch, but don't use the new common features yet.)

2) offer stateless classmethods:
It is useful for...
- batch processing of multiple profiles (in upcoming patches) and
- user input validation
to be able to have classmethods that do what self.validate() and
self.apply() do, but do not modify any self.* members.
So far the paradigm was to create a class instance to keep state about
the value. This remains available, but in addition we make available the
paradigm of a singleton that is stateless (the classmethods).
Using self.validate() and self.apply() still work the same as before
this patch, i.e. via self.input_value and self.value -- but in addition,
there are now classmethods that don't touch self.* members.

Related: SYS#6768
Change-Id: I6522be4c463e34897ca9bff2309b3706a88b3ce8
</comment><date>2025-03-10 14:00:31 +0100</date><id>3a2cb239bcc6b4dd71107a2b522da581599931b2</id><msg>[2/7] personalization: refactor ConfigurableParameter, Iccid, Imsi</msg><path><editType>edit</editType><file>pySim/esim/saip/personalization.py</file></path></item><kind>git</kind></changeSet><culprit><absoluteUrl>https://jenkins.osmocom.org/jenkins/user/neels</absoluteUrl><description></description><fullName>Neels Hofmeyr</fullName><id>neels</id></culprit><run><action _class='hudson.matrix.MatrixChildParametersAction'><parameter _class='hudson.model.StringParameterValue'><name>COMMENT_TYPE</name><value></value></parameter><parameter _class='hudson.model.StringParameterValue'><name>DISTRO</name><value></value></parameter><parameter _class='hudson.model.StringParameterValue'><name>GERRIT_BRANCH</name><value>master</value></parameter><parameter _class='hudson.model.StringParameterValue'><name>GERRIT_CHANGE_NUMBER</name><value>39742</value></parameter><parameter _class='hudson.model.StringParameterValue'><name>GERRIT_HOST</name><value>gerrit.osmocom.org</value></parameter><parameter _class='hudson.model.StringParameterValue'><name>GERRIT_PATCHSET_NUMBER</name><value>5</value></parameter><parameter _class='hudson.model.StringParameterValue'><name>GERRIT_PATCHSET_REVISION</name><value>3a2cb239bcc6b4dd71107a2b522da581599931b2</value></parameter><parameter _class='hudson.model.StringParameterValue'><name>GERRIT_PATCHSET_UPLOADER_NAME</name><value>neels</value></parameter><parameter _class='hudson.model.StringParameterValue'><name>GERRIT_PORT</name><value>29418</value></parameter><parameter _class='hudson.model.StringParameterValue'><name>GERRIT_PROJECT</name><value>pysim</value></parameter><parameter _class='hudson.model.StringParameterValue'><name>GERRIT_REFSPEC</name><value>refs/changes/42/39742/5</value></parameter><parameter _class='hudson.model.StringParameterValue'><name>GERRIT_REPO_URL</name><value>ssh://jenkins@gerrit.osmocom.org:29418/pysim</value></parameter><parameter _class='hudson.model.StringParameterValue'><name>PIPELINE_BUILD_URL</name><value>https://jenkins.osmocom.org/jenkins/job/gerrit-pysim/2151/</value></parameter><parameter _class='hudson.model.StringParameterValue'><name>PROJECT_NAME</name><value>pysim</value></parameter><parameter _class='hudson.model.StringParameterValue'><name>BRANCH_CI</name><value>master</value></parameter></action><action></action><action _class='hudson.model.CauseAction'><cause _class='hudson.model.Cause$UpstreamCause'><shortDescription>Started by upstream project "gerrit-pysim-build" build number 2,142</shortDescription><upstreamBuild>2142</upstreamBuild><upstreamProject>gerrit-pysim-build</upstreamProject><upstreamUrl>job/gerrit-pysim-build/</upstreamUrl></cause></action><action _class='jenkins.metrics.impl.TimeInQueueAction'><blockedDurationMillis>0</blockedDurationMillis><blockedTimeMillis>0</blockedTimeMillis><buildableDurationMillis>0</buildableDurationMillis><buildableTimeMillis>0</buildableTimeMillis><buildingDurationMillis>7015</buildingDurationMillis><executingTimeMillis>7015</executingTimeMillis><executorUtilization>1.0</executorUtilization><subTaskCount>0</subTaskCount><waitingDurationMillis>18</waitingDurationMillis><waitingTimeMillis>18</waitingTimeMillis></action><action></action><action _class='hudson.plugins.git.util.BuildData'><buildsByBranchName><master _class='hudson.plugins.git.util.Build'><buildNumber>2142</buildNumber><marked><SHA1>3a2cb239bcc6b4dd71107a2b522da581599931b2</SHA1><branch><SHA1>3a2cb239bcc6b4dd71107a2b522da581599931b2</SHA1><name>master</name></branch></marked><revision><SHA1>3a2cb239bcc6b4dd71107a2b522da581599931b2</SHA1><branch><SHA1>3a2cb239bcc6b4dd71107a2b522da581599931b2</SHA1><name>master</name></branch></revision></master></buildsByBranchName><lastBuiltRevision><SHA1>3a2cb239bcc6b4dd71107a2b522da581599931b2</SHA1><branch><SHA1>3a2cb239bcc6b4dd71107a2b522da581599931b2</SHA1><name>master</name></branch></lastBuiltRevision><remoteUrl>ssh://jenkins@gerrit.osmocom.org:29418/pysim</remoteUrl><scmName></scmName></action><action></action><action _class='org.jenkinsci.plugins.displayurlapi.actions.RunDisplayAction'></action><building>false</building><displayName>#2142</displayName><duration>7015</duration><estimatedDuration>8804</estimatedDuration><fullDisplayName>gerrit-pysim-build » distcheck,a1=default,a3=default,a4=default,osmocom-gerrit #2142</fullDisplayName><id>2142</id><inProgress>false</inProgress><keepLog>false</keepLog><number>2142</number><queueId>1838572</queueId><result>SUCCESS</result><timestamp>1741611676595</timestamp><url>https://jenkins.osmocom.org/jenkins/view/osmo-gsm-tester/job/gerrit-pysim-build/JOB_TYPE=distcheck,a1=default,a3=default,a4=default,label=osmocom-gerrit/2142/</url><builtOn>build5-deb12build-ansible</builtOn><changeSet _class='hudson.plugins.git.GitChangeSetList'><item _class='hudson.plugins.git.GitChangeSet'><affectedPath>pySim/esim/saip/personalization.py</affectedPath><commitId>3a2cb239bcc6b4dd71107a2b522da581599931b2</commitId><timestamp>1741611631000</timestamp><author><absoluteUrl>https://jenkins.osmocom.org/jenkins/user/neels</absoluteUrl><fullName>Neels Hofmeyr</fullName></author><authorEmail>nhofmeyr@sysmocom.de</authorEmail><comment>[2/7] personalization: refactor ConfigurableParameter, Iccid, Imsi

Main points/rationales of the refactoring, details below:
1) common validation implementation
2) offer classmethods

The new features are optional, and will be heavily used by batch
personalization patches coming soon.

Implement Iccid and Imsi to use the new way, with a common abstract
DecimalParam implementation.

So far leave the other parameter classes working as they always did, to
follow suit in subsequent commits.

Details:

1) common validation implementation:
There are very common validation steps in the various parameter
implementations. It is more convenient and much more readable to
implement those once and set simple validation parameters per subclass.
So there now is a validate_val() classmethod, which subclasses can use
as-is to apply the validation parameters -- or subclasses can override
their cls.validate_val() for specialized validation.
(Those subclasses that this patch doesn't touch still override the
self.validate() instance method. Hence they still work as before this
patch, but don't use the new common features yet.)

2) offer stateless classmethods:
It is useful for...
- batch processing of multiple profiles (in upcoming patches) and
- user input validation
to be able to have classmethods that do what self.validate() and
self.apply() do, but do not modify any self.* members.
So far the paradigm was to create a class instance to keep state about
the value. This remains available, but in addition we make available the
paradigm of a singleton that is stateless (the classmethods).
Using self.validate() and self.apply() still work the same as before
this patch, i.e. via self.input_value and self.value -- but in addition,
there are now classmethods that don't touch self.* members.

Related: SYS#6768
Change-Id: I6522be4c463e34897ca9bff2309b3706a88b3ce8
</comment><date>2025-03-10 14:00:31 +0100</date><id>3a2cb239bcc6b4dd71107a2b522da581599931b2</id><msg>[2/7] personalization: refactor ConfigurableParameter, Iccid, Imsi</msg><path><editType>edit</editType><file>pySim/esim/saip/personalization.py</file></path></item><kind>git</kind></changeSet><culprit><absoluteUrl>https://jenkins.osmocom.org/jenkins/user/neels</absoluteUrl><fullName>Neels Hofmeyr</fullName></culprit></run><run><action _class='hudson.matrix.MatrixChildParametersAction'><parameter _class='hudson.model.StringParameterValue'><name>COMMENT_TYPE</name><value></value></parameter><parameter _class='hudson.model.StringParameterValue'><name>DISTRO</name><value></value></parameter><parameter _class='hudson.model.StringParameterValue'><name>GERRIT_BRANCH</name><value>master</value></parameter><parameter _class='hudson.model.StringParameterValue'><name>GERRIT_CHANGE_NUMBER</name><value>39742</value></parameter><parameter _class='hudson.model.StringParameterValue'><name>GERRIT_HOST</name><value>gerrit.osmocom.org</value></parameter><parameter _class='hudson.model.StringParameterValue'><name>GERRIT_PATCHSET_NUMBER</name><value>5</value></parameter><parameter _class='hudson.model.StringParameterValue'><name>GERRIT_PATCHSET_REVISION</name><value>3a2cb239bcc6b4dd71107a2b522da581599931b2</value></parameter><parameter _class='hudson.model.StringParameterValue'><name>GERRIT_PATCHSET_UPLOADER_NAME</name><value>neels</value></parameter><parameter _class='hudson.model.StringParameterValue'><name>GERRIT_PORT</name><value>29418</value></parameter><parameter _class='hudson.model.StringParameterValue'><name>GERRIT_PROJECT</name><value>pysim</value></parameter><parameter _class='hudson.model.StringParameterValue'><name>GERRIT_REFSPEC</name><value>refs/changes/42/39742/5</value></parameter><parameter _class='hudson.model.StringParameterValue'><name>GERRIT_REPO_URL</name><value>ssh://jenkins@gerrit.osmocom.org:29418/pysim</value></parameter><parameter _class='hudson.model.StringParameterValue'><name>PIPELINE_BUILD_URL</name><value>https://jenkins.osmocom.org/jenkins/job/gerrit-pysim/2151/</value></parameter><parameter _class='hudson.model.StringParameterValue'><name>PROJECT_NAME</name><value>pysim</value></parameter><parameter _class='hudson.model.StringParameterValue'><name>BRANCH_CI</name><value>master</value></parameter></action><action></action><action _class='hudson.model.CauseAction'><cause _class='hudson.model.Cause$UpstreamCause'><shortDescription>Started by upstream project "gerrit-pysim-build" build number 2,142</shortDescription><upstreamBuild>2142</upstreamBuild><upstreamProject>gerrit-pysim-build</upstreamProject><upstreamUrl>job/gerrit-pysim-build/</upstreamUrl></cause></action><action _class='jenkins.metrics.impl.TimeInQueueAction'><blockedDurationMillis>0</blockedDurationMillis><blockedTimeMillis>0</blockedTimeMillis><buildableDurationMillis>0</buildableDurationMillis><buildableTimeMillis>0</buildableTimeMillis><buildingDurationMillis>11267</buildingDurationMillis><executingTimeMillis>11267</executingTimeMillis><executorUtilization>1.0</executorUtilization><subTaskCount>0</subTaskCount><waitingDurationMillis>0</waitingDurationMillis><waitingTimeMillis>0</waitingTimeMillis></action><action></action><action _class='hudson.plugins.git.util.BuildData'><buildsByBranchName><master _class='hudson.plugins.git.util.Build'><buildNumber>2142</buildNumber><marked><SHA1>3a2cb239bcc6b4dd71107a2b522da581599931b2</SHA1><branch><SHA1>3a2cb239bcc6b4dd71107a2b522da581599931b2</SHA1><name>master</name></branch></marked><revision><SHA1>3a2cb239bcc6b4dd71107a2b522da581599931b2</SHA1><branch><SHA1>3a2cb239bcc6b4dd71107a2b522da581599931b2</SHA1><name>master</name></branch></revision></master></buildsByBranchName><lastBuiltRevision><SHA1>3a2cb239bcc6b4dd71107a2b522da581599931b2</SHA1><branch><SHA1>3a2cb239bcc6b4dd71107a2b522da581599931b2</SHA1><name>master</name></branch></lastBuiltRevision><remoteUrl>ssh://jenkins@gerrit.osmocom.org:29418/pysim</remoteUrl><scmName></scmName></action><action></action><action _class='org.jenkinsci.plugins.displayurlapi.actions.RunDisplayAction'></action><building>false</building><displayName>#2142</displayName><duration>11267</duration><estimatedDuration>27389</estimatedDuration><fullDisplayName>gerrit-pysim-build » docs,a1=default,a3=default,a4=default,osmocom-gerrit #2142</fullDisplayName><id>2142</id><inProgress>false</inProgress><keepLog>false</keepLog><number>2142</number><queueId>1838574</queueId><result>SUCCESS</result><timestamp>1741611676595</timestamp><url>https://jenkins.osmocom.org/jenkins/view/osmo-gsm-tester/job/gerrit-pysim-build/JOB_TYPE=docs,a1=default,a3=default,a4=default,label=osmocom-gerrit/2142/</url><builtOn>build5-deb12build-ansible</builtOn><changeSet _class='hudson.plugins.git.GitChangeSetList'><item _class='hudson.plugins.git.GitChangeSet'><affectedPath>pySim/esim/saip/personalization.py</affectedPath><commitId>3a2cb239bcc6b4dd71107a2b522da581599931b2</commitId><timestamp>1741611631000</timestamp><author><absoluteUrl>https://jenkins.osmocom.org/jenkins/user/neels</absoluteUrl><fullName>Neels Hofmeyr</fullName></author><authorEmail>nhofmeyr@sysmocom.de</authorEmail><comment>[2/7] personalization: refactor ConfigurableParameter, Iccid, Imsi

Main points/rationales of the refactoring, details below:
1) common validation implementation
2) offer classmethods

The new features are optional, and will be heavily used by batch
personalization patches coming soon.

Implement Iccid and Imsi to use the new way, with a common abstract
DecimalParam implementation.

So far leave the other parameter classes working as they always did, to
follow suit in subsequent commits.

Details:

1) common validation implementation:
There are very common validation steps in the various parameter
implementations. It is more convenient and much more readable to
implement those once and set simple validation parameters per subclass.
So there now is a validate_val() classmethod, which subclasses can use
as-is to apply the validation parameters -- or subclasses can override
their cls.validate_val() for specialized validation.
(Those subclasses that this patch doesn't touch still override the
self.validate() instance method. Hence they still work as before this
patch, but don't use the new common features yet.)

2) offer stateless classmethods:
It is useful for...
- batch processing of multiple profiles (in upcoming patches) and
- user input validation
to be able to have classmethods that do what self.validate() and
self.apply() do, but do not modify any self.* members.
So far the paradigm was to create a class instance to keep state about
the value. This remains available, but in addition we make available the
paradigm of a singleton that is stateless (the classmethods).
Using self.validate() and self.apply() still work the same as before
this patch, i.e. via self.input_value and self.value -- but in addition,
there are now classmethods that don't touch self.* members.

Related: SYS#6768
Change-Id: I6522be4c463e34897ca9bff2309b3706a88b3ce8
</comment><date>2025-03-10 14:00:31 +0100</date><id>3a2cb239bcc6b4dd71107a2b522da581599931b2</id><msg>[2/7] personalization: refactor ConfigurableParameter, Iccid, Imsi</msg><path><editType>edit</editType><file>pySim/esim/saip/personalization.py</file></path></item><kind>git</kind></changeSet><culprit><absoluteUrl>https://jenkins.osmocom.org/jenkins/user/neels</absoluteUrl><fullName>Neels Hofmeyr</fullName></culprit></run><run><action _class='hudson.matrix.MatrixChildParametersAction'><parameter _class='hudson.model.StringParameterValue'><name>COMMENT_TYPE</name><value></value></parameter><parameter _class='hudson.model.StringParameterValue'><name>DISTRO</name><value></value></parameter><parameter _class='hudson.model.StringParameterValue'><name>GERRIT_BRANCH</name><value>master</value></parameter><parameter _class='hudson.model.StringParameterValue'><name>GERRIT_CHANGE_NUMBER</name><value>39742</value></parameter><parameter _class='hudson.model.StringParameterValue'><name>GERRIT_HOST</name><value>gerrit.osmocom.org</value></parameter><parameter _class='hudson.model.StringParameterValue'><name>GERRIT_PATCHSET_NUMBER</name><value>5</value></parameter><parameter _class='hudson.model.StringParameterValue'><name>GERRIT_PATCHSET_REVISION</name><value>3a2cb239bcc6b4dd71107a2b522da581599931b2</value></parameter><parameter _class='hudson.model.StringParameterValue'><name>GERRIT_PATCHSET_UPLOADER_NAME</name><value>neels</value></parameter><parameter _class='hudson.model.StringParameterValue'><name>GERRIT_PORT</name><value>29418</value></parameter><parameter _class='hudson.model.StringParameterValue'><name>GERRIT_PROJECT</name><value>pysim</value></parameter><parameter _class='hudson.model.StringParameterValue'><name>GERRIT_REFSPEC</name><value>refs/changes/42/39742/5</value></parameter><parameter _class='hudson.model.StringParameterValue'><name>GERRIT_REPO_URL</name><value>ssh://jenkins@gerrit.osmocom.org:29418/pysim</value></parameter><parameter _class='hudson.model.StringParameterValue'><name>PIPELINE_BUILD_URL</name><value>https://jenkins.osmocom.org/jenkins/job/gerrit-pysim/2151/</value></parameter><parameter _class='hudson.model.StringParameterValue'><name>PROJECT_NAME</name><value>pysim</value></parameter><parameter _class='hudson.model.StringParameterValue'><name>BRANCH_CI</name><value>master</value></parameter></action><action></action><action _class='hudson.model.CauseAction'><cause _class='hudson.model.Cause$UpstreamCause'><shortDescription>Started by upstream project "gerrit-pysim-build" build number 2,142</shortDescription><upstreamBuild>2142</upstreamBuild><upstreamProject>gerrit-pysim-build</upstreamProject><upstreamUrl>job/gerrit-pysim-build/</upstreamUrl></cause></action><action _class='jenkins.metrics.impl.TimeInQueueAction'><blockedDurationMillis>0</blockedDurationMillis><blockedTimeMillis>0</blockedTimeMillis><buildableDurationMillis>0</buildableDurationMillis><buildableTimeMillis>0</buildableTimeMillis><buildingDurationMillis>11843</buildingDurationMillis><executingTimeMillis>11843</executingTimeMillis><executorUtilization>1.0</executorUtilization><subTaskCount>0</subTaskCount><waitingDurationMillis>0</waitingDurationMillis><waitingTimeMillis>0</waitingTimeMillis></action><action></action><action _class='hudson.plugins.git.util.BuildData'><buildsByBranchName><master _class='hudson.plugins.git.util.Build'><buildNumber>2142</buildNumber><marked><SHA1>3a2cb239bcc6b4dd71107a2b522da581599931b2</SHA1><branch><SHA1>3a2cb239bcc6b4dd71107a2b522da581599931b2</SHA1><name>master</name></branch></marked><revision><SHA1>3a2cb239bcc6b4dd71107a2b522da581599931b2</SHA1><branch><SHA1>3a2cb239bcc6b4dd71107a2b522da581599931b2</SHA1><name>master</name></branch></revision></master></buildsByBranchName><lastBuiltRevision><SHA1>3a2cb239bcc6b4dd71107a2b522da581599931b2</SHA1><branch><SHA1>3a2cb239bcc6b4dd71107a2b522da581599931b2</SHA1><name>master</name></branch></lastBuiltRevision><remoteUrl>ssh://jenkins@gerrit.osmocom.org:29418/pysim</remoteUrl><scmName></scmName></action><action></action><action _class='org.jenkinsci.plugins.displayurlapi.actions.RunDisplayAction'></action><building>false</building><displayName>#2142</displayName><duration>11843</duration><estimatedDuration>14849</estimatedDuration><fullDisplayName>gerrit-pysim-build » pylint,a1=default,a3=default,a4=default,osmocom-gerrit #2142</fullDisplayName><id>2142</id><inProgress>false</inProgress><keepLog>false</keepLog><number>2142</number><queueId>1838573</queueId><result>SUCCESS</result><timestamp>1741611676595</timestamp><url>https://jenkins.osmocom.org/jenkins/view/osmo-gsm-tester/job/gerrit-pysim-build/JOB_TYPE=pylint,a1=default,a3=default,a4=default,label=osmocom-gerrit/2142/</url><builtOn>build4-deb12build-ansible</builtOn><changeSet _class='hudson.plugins.git.GitChangeSetList'><item _class='hudson.plugins.git.GitChangeSet'><affectedPath>pySim/esim/saip/personalization.py</affectedPath><commitId>3a2cb239bcc6b4dd71107a2b522da581599931b2</commitId><timestamp>1741611631000</timestamp><author><absoluteUrl>https://jenkins.osmocom.org/jenkins/user/neels</absoluteUrl><fullName>Neels Hofmeyr</fullName></author><authorEmail>nhofmeyr@sysmocom.de</authorEmail><comment>[2/7] personalization: refactor ConfigurableParameter, Iccid, Imsi

Main points/rationales of the refactoring, details below:
1) common validation implementation
2) offer classmethods

The new features are optional, and will be heavily used by batch
personalization patches coming soon.

Implement Iccid and Imsi to use the new way, with a common abstract
DecimalParam implementation.

So far leave the other parameter classes working as they always did, to
follow suit in subsequent commits.

Details:

1) common validation implementation:
There are very common validation steps in the various parameter
implementations. It is more convenient and much more readable to
implement those once and set simple validation parameters per subclass.
So there now is a validate_val() classmethod, which subclasses can use
as-is to apply the validation parameters -- or subclasses can override
their cls.validate_val() for specialized validation.
(Those subclasses that this patch doesn't touch still override the
self.validate() instance method. Hence they still work as before this
patch, but don't use the new common features yet.)

2) offer stateless classmethods:
It is useful for...
- batch processing of multiple profiles (in upcoming patches) and
- user input validation
to be able to have classmethods that do what self.validate() and
self.apply() do, but do not modify any self.* members.
So far the paradigm was to create a class instance to keep state about
the value. This remains available, but in addition we make available the
paradigm of a singleton that is stateless (the classmethods).
Using self.validate() and self.apply() still work the same as before
this patch, i.e. via self.input_value and self.value -- but in addition,
there are now classmethods that don't touch self.* members.

Related: SYS#6768
Change-Id: I6522be4c463e34897ca9bff2309b3706a88b3ce8
</comment><date>2025-03-10 14:00:31 +0100</date><id>3a2cb239bcc6b4dd71107a2b522da581599931b2</id><msg>[2/7] personalization: refactor ConfigurableParameter, Iccid, Imsi</msg><path><editType>edit</editType><file>pySim/esim/saip/personalization.py</file></path></item><kind>git</kind></changeSet><culprit><absoluteUrl>https://jenkins.osmocom.org/jenkins/user/neels</absoluteUrl><fullName>Neels Hofmeyr</fullName></culprit></run><run><action _class='hudson.matrix.MatrixChildParametersAction'><parameter _class='hudson.model.StringParameterValue'><name>COMMENT_TYPE</name><value></value></parameter><parameter _class='hudson.model.StringParameterValue'><name>DISTRO</name><value></value></parameter><parameter _class='hudson.model.StringParameterValue'><name>GERRIT_BRANCH</name><value>master</value></parameter><parameter _class='hudson.model.StringParameterValue'><name>GERRIT_CHANGE_NUMBER</name><value>39742</value></parameter><parameter _class='hudson.model.StringParameterValue'><name>GERRIT_HOST</name><value>gerrit.osmocom.org</value></parameter><parameter _class='hudson.model.StringParameterValue'><name>GERRIT_PATCHSET_NUMBER</name><value>5</value></parameter><parameter _class='hudson.model.StringParameterValue'><name>GERRIT_PATCHSET_REVISION</name><value>3a2cb239bcc6b4dd71107a2b522da581599931b2</value></parameter><parameter _class='hudson.model.StringParameterValue'><name>GERRIT_PATCHSET_UPLOADER_NAME</name><value>neels</value></parameter><parameter _class='hudson.model.StringParameterValue'><name>GERRIT_PORT</name><value>29418</value></parameter><parameter _class='hudson.model.StringParameterValue'><name>GERRIT_PROJECT</name><value>pysim</value></parameter><parameter _class='hudson.model.StringParameterValue'><name>GERRIT_REFSPEC</name><value>refs/changes/42/39742/5</value></parameter><parameter _class='hudson.model.StringParameterValue'><name>GERRIT_REPO_URL</name><value>ssh://jenkins@gerrit.osmocom.org:29418/pysim</value></parameter><parameter _class='hudson.model.StringParameterValue'><name>PIPELINE_BUILD_URL</name><value>https://jenkins.osmocom.org/jenkins/job/gerrit-pysim/2151/</value></parameter><parameter _class='hudson.model.StringParameterValue'><name>PROJECT_NAME</name><value>pysim</value></parameter><parameter _class='hudson.model.StringParameterValue'><name>BRANCH_CI</name><value>master</value></parameter></action><action></action><action _class='hudson.model.CauseAction'><cause _class='hudson.model.Cause$UpstreamCause'><shortDescription>Started by upstream project "gerrit-pysim-build" build number 2,142</shortDescription><upstreamBuild>2142</upstreamBuild><upstreamProject>gerrit-pysim-build</upstreamProject><upstreamUrl>job/gerrit-pysim-build/</upstreamUrl></cause></action><action _class='jenkins.metrics.impl.TimeInQueueAction'><blockedDurationMillis>0</blockedDurationMillis><blockedTimeMillis>0</blockedTimeMillis><buildableDurationMillis>0</buildableDurationMillis><buildableTimeMillis>0</buildableTimeMillis><buildingDurationMillis>732882</buildingDurationMillis><executingTimeMillis>732882</executingTimeMillis><executorUtilization>1.0</executorUtilization><subTaskCount>0</subTaskCount><waitingDurationMillis>0</waitingDurationMillis><waitingTimeMillis>0</waitingTimeMillis></action><action></action><action _class='hudson.plugins.git.util.BuildData'><buildsByBranchName><master _class='hudson.plugins.git.util.Build'><buildNumber>2142</buildNumber><marked><SHA1>3a2cb239bcc6b4dd71107a2b522da581599931b2</SHA1><branch><SHA1>3a2cb239bcc6b4dd71107a2b522da581599931b2</SHA1><name>master</name></branch></marked><revision><SHA1>3a2cb239bcc6b4dd71107a2b522da581599931b2</SHA1><branch><SHA1>3a2cb239bcc6b4dd71107a2b522da581599931b2</SHA1><name>master</name></branch></revision></master></buildsByBranchName><lastBuiltRevision><SHA1>3a2cb239bcc6b4dd71107a2b522da581599931b2</SHA1><branch><SHA1>3a2cb239bcc6b4dd71107a2b522da581599931b2</SHA1><name>master</name></branch></lastBuiltRevision><remoteUrl>ssh://jenkins@gerrit.osmocom.org:29418/pysim</remoteUrl><scmName></scmName></action><action></action><action _class='org.jenkinsci.plugins.displayurlapi.actions.RunDisplayAction'></action><building>false</building><displayName>#2142</displayName><duration>732882</duration><estimatedDuration>1031283</estimatedDuration><fullDisplayName>gerrit-pysim-build » test,a1=default,a3=default,a4=default,simtester #2142</fullDisplayName><id>2142</id><inProgress>false</inProgress><keepLog>true</keepLog><number>2142</number><queueId>1838571</queueId><result>FAILURE</result><timestamp>1741611676595</timestamp><url>https://jenkins.osmocom.org/jenkins/view/osmo-gsm-tester/job/gerrit-pysim-build/JOB_TYPE=test,a1=default,a3=default,a4=default,label=simtester/2142/</url><builtOn>simtester</builtOn><changeSet _class='hudson.plugins.git.GitChangeSetList'><item _class='hudson.plugins.git.GitChangeSet'><affectedPath>pySim/esim/saip/personalization.py</affectedPath><commitId>3a2cb239bcc6b4dd71107a2b522da581599931b2</commitId><timestamp>1741611631000</timestamp><author><absoluteUrl>https://jenkins.osmocom.org/jenkins/user/neels</absoluteUrl><fullName>Neels Hofmeyr</fullName></author><authorEmail>nhofmeyr@sysmocom.de</authorEmail><comment>[2/7] personalization: refactor ConfigurableParameter, Iccid, Imsi

Main points/rationales of the refactoring, details below:
1) common validation implementation
2) offer classmethods

The new features are optional, and will be heavily used by batch
personalization patches coming soon.

Implement Iccid and Imsi to use the new way, with a common abstract
DecimalParam implementation.

So far leave the other parameter classes working as they always did, to
follow suit in subsequent commits.

Details:

1) common validation implementation:
There are very common validation steps in the various parameter
implementations. It is more convenient and much more readable to
implement those once and set simple validation parameters per subclass.
So there now is a validate_val() classmethod, which subclasses can use
as-is to apply the validation parameters -- or subclasses can override
their cls.validate_val() for specialized validation.
(Those subclasses that this patch doesn't touch still override the
self.validate() instance method. Hence they still work as before this
patch, but don't use the new common features yet.)

2) offer stateless classmethods:
It is useful for...
- batch processing of multiple profiles (in upcoming patches) and
- user input validation
to be able to have classmethods that do what self.validate() and
self.apply() do, but do not modify any self.* members.
So far the paradigm was to create a class instance to keep state about
the value. This remains available, but in addition we make available the
paradigm of a singleton that is stateless (the classmethods).
Using self.validate() and self.apply() still work the same as before
this patch, i.e. via self.input_value and self.value -- but in addition,
there are now classmethods that don't touch self.* members.

Related: SYS#6768
Change-Id: I6522be4c463e34897ca9bff2309b3706a88b3ce8
</comment><date>2025-03-10 14:00:31 +0100</date><id>3a2cb239bcc6b4dd71107a2b522da581599931b2</id><msg>[2/7] personalization: refactor ConfigurableParameter, Iccid, Imsi</msg><path><editType>edit</editType><file>pySim/esim/saip/personalization.py</file></path></item><kind>git</kind></changeSet><culprit><absoluteUrl>https://jenkins.osmocom.org/jenkins/user/neels</absoluteUrl><fullName>Neels Hofmeyr</fullName></culprit></run></matrixBuild>