diff --git a/src/ssvc/namespaces.py b/src/ssvc/namespaces.py index 01f1834e..017f0aa1 100644 --- a/src/ssvc/namespaces.py +++ b/src/ssvc/namespaces.py @@ -23,10 +23,11 @@ # subject to its own license. # DM24-0278 +import re from enum import StrEnum from ssvc.utils.defaults import MAX_NS_LENGTH, MIN_NS_LENGTH, X_PFX -from ssvc.utils.patterns import NS_PATTERN +from ssvc.utils.patterns import NS_PATTERN_STR EXT_SEP = "/" FRAG_SEP = "#" @@ -86,7 +87,7 @@ def validate(cls, value: str) -> str: ValueError: if the value is not a valid namespace """ - valid = NS_PATTERN.match(value) + valid = re.match(NS_PATTERN_STR, value) if valid: # pattern matches, so we can proceed with further checks diff --git a/src/ssvc/utils/field_specs.py b/src/ssvc/utils/field_specs.py index 849c23fb..25295c78 100644 --- a/src/ssvc/utils/field_specs.py +++ b/src/ssvc/utils/field_specs.py @@ -27,7 +27,7 @@ from pydantic import Field from ssvc.utils.defaults import MAX_NS_LENGTH, MIN_NS_LENGTH -from ssvc.utils.patterns import NS_PATTERN, VERSION_PATTERN +from ssvc.utils.patterns import NS_PATTERN_STR, VERSION_PATTERN VersionString = Annotated[ str, @@ -50,7 +50,7 @@ "x_example.test#test//.example.test#private-extension", "ssvc/de-DE/.example.organization#reference-arch-1", ], - pattern=NS_PATTERN.pattern, + pattern=NS_PATTERN_STR, min_length=MIN_NS_LENGTH, max_length=MAX_NS_LENGTH, ), diff --git a/src/ssvc/utils/patterns.py b/src/ssvc/utils/patterns.py index f964e938..0580e608 100644 --- a/src/ssvc/utils/patterns.py +++ b/src/ssvc/utils/patterns.py @@ -22,8 +22,6 @@ # subject to its own license. # DM24-0278 -import re - # from https://semver.org/ VERSION_PATTERN = r"^(0|[1-9]\d*)\.(0|[1-9]\d*)\.(0|[1-9]\d*)(?:-((?:0|[1-9]\d*|\d*[a-zA-Z-][0-9a-zA-Z-]*)(?:\.(?:0|[1-9]\d*|\d*[a-zA-Z-][0-9a-zA-Z-]*))*))?(?:\+([0-9a-zA-Z-]+(?:\.[0-9a-zA-Z-]+)*))?$" """A regular expression pattern for semantic versioning (semver).""" @@ -81,5 +79,3 @@ # --- Combine all parts into the full namespace pattern --- NS_PATTERN_STR = rf"^{namespace}$" - -NS_PATTERN = re.compile(NS_PATTERN_STR) diff --git a/src/test/test_namespaces.py b/src/test/test_namespaces.py index c7d5dca5..9a66e4b3 100644 --- a/src/test/test_namespaces.py +++ b/src/test/test_namespaces.py @@ -16,11 +16,11 @@ # This Software includes and/or makes use of Third-Party Software each # subject to its own license. # DM24-0278 - +import re import unittest from ssvc.namespaces import NameSpace, RESERVED_NS -from ssvc.utils.patterns import NS_PATTERN +from ssvc.utils.patterns import NS_PATTERN_STR class MyTestCase(unittest.TestCase): @@ -41,7 +41,7 @@ def test_ns_pattern(self): for ns in should_match: with self.subTest(ns=ns): - self.assertTrue(NS_PATTERN.match(ns), ns) + self.assertTrue(re.match(NS_PATTERN_STR, ns), ns) should_not_match = [ "", @@ -62,8 +62,8 @@ def test_ns_pattern(self): failures = [] for ns in should_not_match: with self.subTest(ns=ns): - # re.search() to catch if NS_PATTERN is not anchored at start - match = NS_PATTERN.search(ns) + # re.search() to catch if NS_PATTERN_STR is not anchored at start + match = re.search(NS_PATTERN_STR, ns) if match: failures.append( f"Unexpected match for '{ns}': {match.group(0)}" diff --git a/src/test/test_namespaces_pattern.py b/src/test/test_namespaces_pattern.py index 981893aa..d105f3fb 100644 --- a/src/test/test_namespaces_pattern.py +++ b/src/test/test_namespaces_pattern.py @@ -27,7 +27,7 @@ BASE_PATTERN, EXT_SEGMENT_PATTERN, LENGTH_CHECK_PATTERN, - NS_PATTERN, + NS_PATTERN_STR, ) logger = logging.getLogger(__name__) @@ -98,7 +98,7 @@ def setUp(self): def test_ns_pattern(self): self._test_successes_failures( - NS_PATTERN.pattern, self.expect_fail, self.expect_success + NS_PATTERN_STR, self.expect_fail, self.expect_success ) def test_base_pattern(self): diff --git a/src/test/test_selections.py b/src/test/test_selections.py index f734f242..bc6977d0 100644 --- a/src/test/test_selections.py +++ b/src/test/test_selections.py @@ -23,7 +23,7 @@ from ssvc import selection from ssvc.selection import MinimalDecisionPointValue, SelectionList -from ssvc.utils.patterns import NS_PATTERN, VERSION_PATTERN +from ssvc.utils.patterns import NS_PATTERN_STR, VERSION_PATTERN class MyTestCase(unittest.TestCase): @@ -61,7 +61,7 @@ def test_minimal_selection_init(self): self.assertIsInstance(self.s1.namespace, str) self.assertRegex( self.s1.namespace, - NS_PATTERN, + NS_PATTERN_STR, "Namespace does not match the required pattern", )