1
1
from dataclasses import dataclass
2
2
from enum import Enum
3
- from typing import TYPE_CHECKING , Any , override
3
+ from typing import TYPE_CHECKING , TypedDict , override
4
4
5
5
if TYPE_CHECKING :
6
6
from collections .abc import Callable
@@ -103,6 +103,9 @@ def _check_password_strength(
103
103
return PasswordStrength .VERY_WEAK
104
104
105
105
106
+ _UserSerialization = TypedDict ('_UserSerialization' , {'username' : str , '!password' : str , 'sudo' : bool })
107
+
108
+
106
109
@dataclass
107
110
class User :
108
111
username : str
@@ -115,15 +118,15 @@ def groups(self) -> list[str]:
115
118
# if it's every going to be used
116
119
return []
117
120
118
- def json (self ) -> dict [ str , str | bool ] :
121
+ def json (self ) -> _UserSerialization :
119
122
return {
120
123
'username' : self .username ,
121
124
'!password' : self .password ,
122
125
'sudo' : self .sudo
123
126
}
124
127
125
128
@classmethod
126
- def _parse (cls , config_users : list [dict [ str , Any ] ]) -> list ['User' ]:
129
+ def _parse (cls , config_users : list [_UserSerialization ]) -> list ['User' ]:
127
130
users = []
128
131
129
132
for entry in config_users :
@@ -153,8 +156,8 @@ def _parse_backwards_compatible(cls, config_users: dict[str, dict[str, str]], su
153
156
@classmethod
154
157
def parse_arguments (
155
158
cls ,
156
- config_users : list [dict [ str , str ] ] | dict [str , dict [str , str ]],
157
- config_superusers : list [ dict [str , str ]] | dict [str , dict [ str , str ]]
159
+ config_users : list [_UserSerialization ] | dict [str , dict [str , str ]],
160
+ config_superusers : dict [str , dict [str , str ]] | None
158
161
) -> list ['User' ]:
159
162
users = []
160
163
0 commit comments