Skip to content

Commit 087f1aa

Browse files
committed
Update rcfile and banner normalization.
Also remove tests for bogus assignment and add type hints instead. This change moves the normalization from the property setters into the getters. Doing this makes sure we are checking the data as it comes in to the application rather than when it leaves the app. This also means that we are trusting data generated from within the app. And the type hints have been added to help check that the implementation is correct.
1 parent d283c22 commit 087f1aa

File tree

2 files changed

+13
-20
lines changed

2 files changed

+13
-20
lines changed

envlauncher/app.py

+9-12
Original file line numberDiff line numberDiff line change
@@ -155,8 +155,6 @@ def __init__(self, file_or_path):
155155
self._parser.read_string(string)
156156

157157
self._terminal_emulator_choices = get_terminal_emulators()
158-
self._rcfile = self._parser.get('X-EnvLauncher Options', 'Rcfile', fallback='')
159-
self._banner = self._parser.get('X-EnvLauncher Options', 'Banner', fallback='color')
160158
self._venv_number = itertools.count(1)
161159
self._app_data_subdir = 'envlauncher'
162160

@@ -209,13 +207,11 @@ def rcfile(self) -> str:
209207
"""An "rc" file to execute after activating the environment
210208
(e.g., ~/.bashrc).
211209
"""
212-
return self._rcfile
210+
return self._parser.get('X-EnvLauncher Options', 'Rcfile', fallback='')
213211

214212
@rcfile.setter
215-
def rcfile(self, value):
216-
if not isinstance(value, str):
217-
value = ''
218-
self._rcfile = value
213+
def rcfile(self, value: str):
214+
self._parser['X-EnvLauncher Options']['Rcfile'] = value
219215

220216
@property
221217
def terminal_emulator_choices(self) -> List[str]:
@@ -239,13 +235,14 @@ def terminal_emulator(self, value):
239235
@property
240236
def banner(self) -> str:
241237
"""Python logo banner option."""
242-
return self._banner
238+
value = self._parser.get('X-EnvLauncher Options', 'Banner', fallback='')
239+
if value not in {'color', 'plain', 'none'}:
240+
return 'color'
241+
return value
243242

244243
@banner.setter
245-
def banner(self, value):
246-
if value not in {'color', 'plain', 'none'}:
247-
value = 'color'
248-
self._banner = value
244+
def banner(self, value: str):
245+
self._parser['X-EnvLauncher Options']['Banner'] = value
249246

250247
@property
251248
def banner_resource(self) -> Optional[Tuple[str, str]]:

tests/test_app.py

+4-8
Original file line numberDiff line numberDiff line change
@@ -259,10 +259,6 @@ def test_set_value(self):
259259
self.settings.rcfile = '.venvrc'
260260
self.assertEqual(self.settings.rcfile, '.venvrc')
261261

262-
def test_invalid_value(self):
263-
self.settings.rcfile = 1234 # <- Bogus value.
264-
self.assertEqual(self.settings.rcfile, '') # <- Empty string.
265-
266262

267263
class TestSettingsTerminalEmulator(unittest.TestCase):
268264
def setUp(self):
@@ -309,17 +305,17 @@ def setUp(self):
309305
def test_read(self):
310306
self.assertEqual(self.settings.banner, 'color')
311307

308+
def test_read_bad_value(self):
309+
self.settings.banner = 'some bad value'
310+
self.assertEqual(self.settings.banner, 'color')
311+
312312
def test_set_value(self):
313313
self.settings.banner = 'plain'
314314
self.assertEqual(self.settings.banner, 'plain')
315315

316316
self.settings.banner = 'none'
317317
self.assertEqual(self.settings.banner, 'none')
318318

319-
def test_invalid_value(self):
320-
self.settings.banner = 1234 # <- Bogus value.
321-
self.assertEqual(self.settings.banner, 'color') # <- Defaults to color.
322-
323319
def test_banner_resource(self):
324320
self.assertEqual(self.settings.banner_resource,
325321
('envlauncher', 'banner-color.ascii'))

0 commit comments

Comments
 (0)