Skip to content

Commit ca566bb

Browse files
committed
mark constants with no href with special type in stubs
Signed-off-by: oleg.hoefling <[email protected]>
1 parent d5f5306 commit ca566bb

File tree

2 files changed

+29
-11
lines changed

2 files changed

+29
-11
lines changed

src/xmlsec/constants.pyi

Lines changed: 16 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -7,11 +7,20 @@ else:
77
from typing_extensions import Final
88

99
class __KeyData(NamedTuple): # __KeyData type
10-
href: str | None
10+
href: str
11+
name: str
12+
13+
class __KeyDataNoHref(NamedTuple): # __KeyData type
14+
href: None
1115
name: str
1216

1317
class __Transform(NamedTuple): # __Transform type
14-
href: str | None
18+
href: str
19+
name: str
20+
usage: int
21+
22+
class __TransformNoHref(NamedTuple): # __Transform type
23+
href: None
1524
name: str
1625
usage: int
1726

@@ -32,9 +41,9 @@ KeyDataFormatPkcs8Der: Final[int]
3241
KeyDataFormatPkcs8Pem: Final[int]
3342
KeyDataFormatUnknown: Final[int]
3443
KeyDataHmac: Final[__KeyData]
35-
KeyDataName: Final[__KeyData]
44+
KeyDataName: Final[__KeyDataNoHref]
3645
KeyDataRawX509Cert: Final[__KeyData]
37-
KeyDataRetrievalMethod: Final[__KeyData]
46+
KeyDataRetrievalMethod: Final[__KeyDataNoHref]
3847
KeyDataRsa: Final[__KeyData]
3948
KeyDataTypeAny: Final[int]
4049
KeyDataTypeNone: Final[int]
@@ -45,7 +54,7 @@ KeyDataTypeSession: Final[int]
4554
KeyDataTypeSymmetric: Final[int]
4655
KeyDataTypeTrusted: Final[int]
4756
KeyDataTypeUnknown: Final[int]
48-
KeyDataValue: Final[__KeyData]
57+
KeyDataValue: Final[__KeyDataNoHref]
4958
KeyDataX509: Final[__KeyData]
5059
NodeCanonicalizationMethod: Final[str]
5160
NodeCipherData: Final[str]
@@ -110,7 +119,7 @@ TransformKWAes192: Final[__Transform]
110119
TransformKWAes256: Final[__Transform]
111120
TransformKWDes3: Final[__Transform]
112121
TransformMd5: Final[__Transform]
113-
TransformRemoveXmlTagsC14N: Final[__Transform]
122+
TransformRemoveXmlTagsC14N: Final[__TransformNoHref]
114123
TransformRipemd160: Final[__Transform]
115124
TransformRsaMd5: Final[__Transform]
116125
TransformRsaOaep: Final[__Transform]
@@ -133,7 +142,7 @@ TransformUsageDigestMethod: Final[int]
133142
TransformUsageEncryptionMethod: Final[int]
134143
TransformUsageSignatureMethod: Final[int]
135144
TransformUsageUnknown: Final[int]
136-
TransformVisa3DHack: Final[__Transform]
145+
TransformVisa3DHack: Final[__TransformNoHref]
137146
TransformXPath: Final[__Transform]
138147
TransformXPath2: Final[__Transform]
139148
TransformXPointer: Final[__Transform]

tests/test_type_stubs.py

Lines changed: 13 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -18,17 +18,23 @@
1818
else:
1919
from typing_extensions import Final
2020
21-
2221
class __KeyData(NamedTuple): # __KeyData type
23-
href: str | None
22+
href: str
2423
name: str
2524
25+
class __KeyDataNoHref(NamedTuple): # __KeyData type
26+
href: None
27+
name: str
2628
2729
class __Transform(NamedTuple): # __Transform type
28-
href: str | None
30+
href: str
2931
name: str
3032
usage: int
3133
34+
class __TransformNoHref(NamedTuple): # __Transform type
35+
href: None
36+
name: str
37+
usage: int
3238
3339
"""
3440

@@ -44,7 +50,10 @@ def gen_constants_stub():
4450
def process_constant(name):
4551
"""Generate line in stub file for constant name."""
4652
obj = getattr(xmlsec.constants, name)
47-
return '{name}: Final[{type_name}]'.format(name=name, type_name=type(obj).__name__)
53+
type_name = type(obj).__name__
54+
if type_name in ('__KeyData', '__Transform') and obj.href is None:
55+
type_name += 'NoHref'
56+
return '{name}: Final[{type_name}]'.format(name=name, type_name=type_name)
4857

4958
names = list(sorted(name for name in dir(xmlsec.constants) if not name.startswith('__')))
5059
lines = [process_constant(name) for name in names]

0 commit comments

Comments
 (0)