generated from jCloud/repository-template
feat(python-namespaces)!: add validation for namespace names
Added more strict validation for namespaces names to PythonNamespace than before and updated error messages. All tests depending on this were updated to the new behavior.
This commit is contained in:
19 files changed
+78
-109
No files matched your search
@@ -14,6 +14,7 @@
|
||||
|
||||
from __future__ import annotations
|
||||
|
||||
import keyword
|
||||
from typing import TypeAlias, Union
|
||||
|
||||
from ...exceptions import (
|
||||
@@ -24,27 +25,47 @@ from ...exceptions import (
|
||||
from ...utils import assert_that_is_instance
|
||||
|
||||
__all__ = [
|
||||
'validate_namespace_name',
|
||||
'PythonNamespace',
|
||||
'PythonPackageNamespace',
|
||||
'PythonModuleNamespace',
|
||||
]
|
||||
|
||||
|
||||
def validate_namespace_name(name: str) -> bool:
|
||||
"""
|
||||
Checks whether a namespace name is valid. Namespace names are valid
|
||||
if they contain no dots and are valid Python identifiers.
|
||||
|
||||
:param name: The namespace name to validate.
|
||||
:type name: str
|
||||
|
||||
:returns: Whether the namespace name is valid.
|
||||
:rtype: bool
|
||||
"""
|
||||
|
||||
if not isinstance(name, str):
|
||||
return False
|
||||
|
||||
return name.isidentifier() and not keyword.iskeyword(name)
|
||||
|
||||
|
||||
class PythonNamespace:
|
||||
"""
|
||||
The base class for all Python namespaces such as modules or packages.
|
||||
|
||||
:param name: The name of the namespace.
|
||||
:type name: str
|
||||
|
||||
:raises InvalidNamespaceError: If the namespace name is invalid.
|
||||
"""
|
||||
|
||||
def __init__(self, name: str) -> None:
|
||||
assert_that_is_instance(name, str)
|
||||
|
||||
if not name.strip():
|
||||
if not validate_namespace_name(name):
|
||||
raise InvalidNamespaceError(
|
||||
'invalid namespace',
|
||||
namespace_identifier=name,
|
||||
'invalid namespace', namespace_identifier=name
|
||||
)
|
||||
|
||||
self.name = name
|
||||
@@ -70,6 +91,8 @@ class PythonPackageNamespace(PythonNamespace):
|
||||
:type name: str
|
||||
:param sub_namespaces: The sub-namespaces.
|
||||
:type sub_namespaces: list[PythonNamespace]
|
||||
|
||||
:raises InvalidNamespaceError: If the namespace name is invalid.
|
||||
"""
|
||||
|
||||
def __init__(
|
||||
|
||||
Reference in new issue
Block a user