Skip to content

Commit e1578f6

Browse files
committed
be more specific about typing information
* add Optional where needed (even if it was implicit thru = None) * fix JailConfig type hints: we were pointing to the wrong thing * Logger now has types * error: take *Any* value, it's an error after all
1 parent 417c678 commit e1578f6

File tree

6 files changed

+60
-40
lines changed

6 files changed

+60
-40
lines changed

iocage/lib/Config/Jail/BaseConfig.py

Lines changed: 18 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -278,31 +278,43 @@ def _set_basejail(self, value, **kwargs):
278278
def _get_clonejail(self) -> bool:
279279
return iocage.lib.helpers.parse_bool(self.data["clonejail"])
280280

281-
def _set_clonejail(self, value, **kwargs):
281+
def _set_clonejail(
282+
self,
283+
value: str,
284+
**kwargs) -> typing.Optional[str]:
282285
self.data["clonejail"] = self.stringify(value)
283286

284-
def _get_defaultrouter(self):
287+
def _get_defaultrouter(self) -> typing.Optional[str]:
285288
value = self.data['defaultrouter']
286289
return value if (value != "none" and value is not None) else None
287290

288-
def _set_defaultrouter(self, value, **kwargs):
291+
def _set_defaultrouter(
292+
self,
293+
value: typing.Optional[str],
294+
**kwargs) -> None:
289295
if value is None:
290296
value = 'none'
291297
self.data['defaultrouter'] = value
292298

293-
def _get_defaultrouter6(self):
299+
def _get_defaultrouter6(self) -> typing.Optional[str]:
294300
value = self.data['defaultrouter6']
295301
return value if (value != "none" and value is not None) else None
296302

297-
def _set_defaultrouter6(self, value, **kwargs):
303+
def _set_defaultrouter6(
304+
self,
305+
value: typing.Optional[str],
306+
**kwargs) -> None:
298307
if value is None:
299308
value = 'none'
300309
self.data['defaultrouter6'] = value
301310

302311
def _get_vnet(self):
303312
return iocage.lib.helpers.parse_user_input(self.data["vnet"])
304313

305-
def _set_vnet(self, value, **kwargs):
314+
def _set_vnet(
315+
self,
316+
value: str,
317+
**kwargs) -> None:
306318
self.data["vnet"] = iocage.lib.helpers.to_string(
307319
value,
308320
true="on",

iocage/lib/Config/Jail/Properties/Addresses.py

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -32,7 +32,9 @@ class AddressSet(set):
3232

3333
def __init__(
3434
self,
35-
config: typing.Optional['iocage.lib.JailConfig.JailConfig']=None,
35+
config: typing.Optional[
36+
iocage.lib.Config.Jail.JailConfig.JailConfig
37+
]=None,
3638
property_name: str="ip4_address"
3739
) -> None:
3840

iocage/lib/Config/Jail/Properties/Interfaces.py

Lines changed: 9 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -25,16 +25,18 @@
2525

2626
import iocage.lib.helpers
2727

28-
_ConfigType = 'iocage.lib.Config.Jail.JailConfig.JailConfig'
28+
_ConfigType = iocage.lib.Config.Jail.JailConfig.JailConfig
2929

3030

3131
class BridgeSet(set):
3232

33-
config: 'iocage.lib.JailConfig.JailConfig'
33+
config: iocage.lib.Config.Jail.JailConfig.JailConfig
3434

3535
def __init__(
3636
self,
37-
config: typing.Optional['iocage.lib.JailConfig.JailConfig']=None
37+
config: typing.Optional[
38+
iocage.lib.Config.Jail.JailConfig.JailConfig
39+
]=None
3840
) -> None:
3941

4042
if config is not None:
@@ -58,12 +60,14 @@ def __notify(self) -> None:
5860

5961
class InterfaceProp(dict):
6062

61-
config: 'iocage.lib.Config.Jail.JailConfig.JailConfig'
63+
config: iocage.lib.Config.Jail.JailConfig.JailConfig
6264
property_name: str = "interfaces"
6365

6466
def __init__(
6567
self,
66-
config: typing.Optional['iocage.lib.JailConfig.JailConfig']=None,
68+
config: typing.Optional[
69+
iocage.lib.Config.Jail.JailConfig.JailConfig
70+
]=None,
6771
**kwargs
6872
) -> None:
6973

iocage/lib/Logger.py

Lines changed: 27 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -23,11 +23,10 @@
2323
# POSSIBILITY OF SUCH DAMAGE.
2424
import os
2525
import sys
26+
import typing
2627

2728
import iocage.lib.errors
2829

29-
from typing import List
30-
3130

3231
class LogEntry:
3332

@@ -102,42 +101,45 @@ class Logger:
102101

103102
INDENT_PREFIX = " "
104103

105-
PRINT_HISTORY: List[str] = []
104+
PRINT_HISTORY: typing.List[str] = []
106105

107-
def __init__(self, print_level=None, log_directory="/var/log/iocage"):
106+
def __init__(
107+
self,
108+
print_level: typing.Optional[str]=None,
109+
log_directory: str="/var/log/iocage"
110+
) -> None:
108111
self._print_level = print_level
109112
self._set_log_directory(log_directory)
110113

111114
@property
112-
def default_print_level(self):
115+
def default_print_level(self) -> str:
113116
return "info"
114117

115118
@property
116-
def print_level(self):
119+
def print_level(self) -> str:
117120
if self._print_level is None:
118121
return self.default_print_level
119122
else:
120123
return self._print_level
121124

122125
@print_level.setter
123-
def print_level(self, value):
126+
def print_level(self, value: str) -> None:
124127
self._print_level = value
125128

126-
def _set_log_directory(self, log_directory):
129+
def _set_log_directory(self, log_directory: str) -> None:
127130
self.log_directory = os.path.abspath(log_directory)
128131
if not os.path.isdir(log_directory):
129132
self._create_log_directory()
130133
self.log(f"Log directory set to '{log_directory}'", level="spam")
131134

132-
def log(self, *args, **kwargs):
133-
134-
args = list(args)
135+
def log(self, *args, **kwargs) -> LogEntry:
136+
log_args = list(args)
135137

136-
if ("message" not in kwargs) and (len(args) > 0):
137-
kwargs["message"] = args.pop(0)
138+
if ("message" not in kwargs) and (len(log_args) > 0):
139+
kwargs["message"] = log_args.pop(0)
138140

139-
if ("level" not in kwargs) and (len(args) > 0):
140-
kwargs["level"] = args.pop(0)
141+
if ("level" not in kwargs) and (len(log_args) > 0):
142+
kwargs["level"] = log_args.pop(0)
141143

142144
if "level" not in kwargs:
143145
kwargs["level"] = "info"
@@ -146,32 +148,32 @@ def log(self, *args, **kwargs):
146148

147149
if self._should_print_log_entry(log_entry):
148150
self._print_log_entry(log_entry)
149-
self.PRINT_HISTORY.append(log_entry)
151+
self.PRINT_HISTORY.append(log_entry.message)
150152

151153
return log_entry
152154

153-
def verbose(self, message, indent=0, **kwargs):
155+
def verbose(self, message: str, indent: int=0, **kwargs) -> LogEntry:
154156
return self.log(message, level="verbose", indent=indent, **kwargs)
155157

156-
def error(self, message, indent=0, **kwargs):
158+
def error(self, message: str, indent: int=0, **kwargs) -> LogEntry:
157159
return self.log(message, level="error", indent=indent, **kwargs)
158160

159-
def warn(self, message, indent=0, **kwargs):
161+
def warn(self, message: str, indent: int=0, **kwargs) -> LogEntry:
160162
return self.log(message, level="warn", indent=indent, **kwargs)
161163

162-
def debug(self, message, indent=0, **kwargs):
164+
def debug(self, message: str, indent: int=0, **kwargs) -> LogEntry:
163165
return self.log(message, level="debug", indent=indent, **kwargs)
164166

165-
def spam(self, message, indent=0, **kwargs):
167+
def spam(self, message: str, indent: int=0, **kwargs) -> LogEntry:
166168
return self.log(message, level="spam", indent=indent, **kwargs)
167169

168-
def screen(self, message, indent=0, **kwargs):
170+
def screen(self, message: str, indent: int=0, **kwargs) -> LogEntry:
169171
"""
170172
Screen never gets printed to log files
171173
"""
172174
return self.log(message, level="screen", indent=indent, **kwargs)
173175

174-
def redraw(self, log_entry):
176+
def redraw(self, log_entry: LogEntry) -> None:
175177

176178
if log_entry not in self.PRINT_HISTORY:
177179
raise iocage.lib.errors.CannotRedrawLine(
@@ -182,12 +184,12 @@ def redraw(self, log_entry):
182184
raise iocage.lib.errors.CannotRedrawLine(
183185
reason=(
184186
"Log level 'screen' is required to redraw, "
185-
f"but got '{self.level}'"
187+
f"but got '{log_entry.level}'"
186188
)
187189
)
188190

189191
# calculate the delta of messages printed since
190-
i = self.PRINT_HISTORY.index(log_entry)
192+
i = self.PRINT_HISTORY.index(log_entry.message)
191193
n = len(self.PRINT_HISTORY)
192194
delta = sum(map(lambda i: len(self.PRINT_HISTORY[i]), range(i, n)))
193195

iocage/lib/StandaloneJailStorage.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -24,13 +24,13 @@
2424

2525

2626
class StandaloneJailStorage:
27-
def apply(self, release):
27+
def apply(self, release) -> None:
2828
self.logger.warn(
2929
"Standalone jails do not require storage operations to start",
3030
jail=self.jail
3131
)
3232

33-
def setup(self, release):
33+
def setup(self, release) -> None:
3434

3535
self.logger.verbose("Cloning the release once to the root dataset")
3636
self.clone_release(release)

iocage/lib/errors.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -286,7 +286,7 @@ class UnmountFailed(IocageException):
286286

287287
def __init__(
288288
self,
289-
mountpoint: iocage.lib.Types.AbsolutePath,
289+
mountpoint: typing.Any,
290290
*args,
291291
**kwargs
292292
) -> None:

0 commit comments

Comments
 (0)