6
6
import warnings
7
7
from typing import Any
8
8
from typing import Callable
9
+ from typing import cast
9
10
from typing import Pattern
10
11
from typing import TYPE_CHECKING
11
12
from typing import Union
@@ -70,7 +71,36 @@ def _lazy_tomli_load(data: str) -> dict[str, Any]:
70
71
return loads (data )
71
72
72
73
73
- VersionT = Union [Version , NonNormalizedVersion ]
74
+ _VersionT = Union [Version , NonNormalizedVersion ]
75
+
76
+
77
+ def _validate_version_cls (
78
+ version_cls : type [_VersionT ] | str | None , normalize : bool
79
+ ) -> type [_VersionT ]:
80
+ if not normalize :
81
+ # `normalize = False` means `version_cls = NonNormalizedVersion`
82
+ if version_cls is not None :
83
+ raise ValueError (
84
+ "Providing a custom `version_cls` is not permitted when "
85
+ "`normalize=False`"
86
+ )
87
+ return NonNormalizedVersion
88
+ else :
89
+ # Use `version_cls` if provided, default to packaging or pkg_resources
90
+ if version_cls is None :
91
+ return Version
92
+ elif isinstance (version_cls , str ):
93
+ try :
94
+ # Not sure this will work in old python
95
+ import importlib
96
+
97
+ pkg , cls_name = version_cls .rsplit ("." , 1 )
98
+ version_cls_host = importlib .import_module (pkg )
99
+ return cast (type [_VersionT ], getattr (version_cls_host , cls_name ))
100
+ except : # noqa
101
+ raise ValueError (f"Unable to import version_cls='{ version_cls } '" )
102
+ else :
103
+ return version_cls
74
104
75
105
76
106
class Configuration :
@@ -79,7 +109,7 @@ class Configuration:
79
109
parent : _t .PathT | None
80
110
_root : str
81
111
_relative_to : str | None
82
- version_cls : type [VersionT ]
112
+ version_cls : type [_VersionT ]
83
113
84
114
def __init__ (
85
115
self ,
@@ -98,11 +128,7 @@ def __init__(
98
128
parse : Any | None = None ,
99
129
git_describe_command : _t .CMD_TYPE | None = None ,
100
130
dist_name : str | None = None ,
101
- version_cls : type [Version ]
102
- | type [NonNormalizedVersion ]
103
- | type
104
- | str
105
- | None = None ,
131
+ version_cls : type [_VersionT ] | type | str | None = None ,
106
132
normalize : bool = True ,
107
133
search_parent_directories : bool = False ,
108
134
):
@@ -125,30 +151,7 @@ def __init__(
125
151
self .search_parent_directories = search_parent_directories
126
152
self .parent = None
127
153
128
- if not normalize :
129
- # `normalize = False` means `version_cls = NonNormalizedVersion`
130
- if version_cls is not None :
131
- raise ValueError (
132
- "Providing a custom `version_cls` is not permitted when "
133
- "`normalize=False`"
134
- )
135
- self .version_cls = NonNormalizedVersion
136
- else :
137
- # Use `version_cls` if provided, default to packaging or pkg_resources
138
- if version_cls is None :
139
- self .version_cls = Version
140
- elif isinstance (version_cls , str ):
141
- try :
142
- # Not sure this will work in old python
143
- import importlib
144
-
145
- pkg , cls_name = version_cls .rsplit ("." , 1 )
146
- version_cls_host = importlib .import_module (pkg )
147
- self .version_cls = getattr (version_cls_host , cls_name )
148
- except : # noqa
149
- raise ValueError (f"Unable to import version_cls='{ version_cls } '" )
150
- else :
151
- self .version_cls = version_cls
154
+ self .version_cls = _validate_version_cls (version_cls , normalize )
152
155
153
156
@property
154
157
def fallback_root (self ) -> str :
0 commit comments