Moved exceptions to own file; added some more tests
continuous-integration/drone the build failed Details

pull/26/head
Jef Roosens 2021-05-15 13:46:36 +02:00
parent ad31d9a979
commit 0dc1b3ded4
Signed by: Jef Roosens
GPG Key ID: 955C0660072F691F
3 changed files with 73 additions and 35 deletions

36
app/exceptions.py 100644
View File

@ -0,0 +1,36 @@
"""Common exceptions raised by the program."""
from typing import Union, List
class InvalidKeyError(Exception):
"""Thrown when a config file contains an invalid key."""
def __init__(self, keys: Union[str, List[str]]):
"""Create a new InvalidKeyError object with the given key.
Args:
keys: the invalid key(s)
"""
if type(keys) == str:
keys = [keys]
self.message = "Invalid key(s): {}".format(", ".join(keys))
super().__init__()
class MissingKeyError(Exception):
"""Thrown when a required key is missing from a config."""
def __init__(self, keys: Union[str, List[str]]):
"""Create a new MissingKeyError object with the given key.
Args:
keys: the invalid key(s)
"""
if type(keys) == str:
keys = [keys]
self.message = "Missing key(s): {}".format(", ".join(keys))
super().__init__()

View File

@ -1,39 +1,6 @@
"""Handles merging with the skeleton config.""" """Handles merging with the skeleton config."""
from typing import Dict, Union, List from typing import Dict
from .exceptions import InvalidKeyError, MissingKeyError
class InvalidKeyError(Exception):
"""Thrown when a config file contains an invalid key."""
def __init__(self, keys: Union[str, List[str]]):
"""Create a new InvalidKeyError object with the given key.
Args:
keys: the invalid key(s)
"""
if type(keys) == str:
keys = [keys]
self.message = "Invalid key(s): {}".format(", ".join(keys))
super().__init__()
class MissingKeyError(Exception):
"""Thrown when a required key is missing from a config."""
def __init__(self, keys: Union[str, List[str]]):
"""Create a new MissingKeyError object with the given key.
Args:
keys: the invalid key(s)
"""
if type(keys) == str:
keys = [keys]
self.message = "Missing key(s): {}".format(", ".join(keys))
super().__init__()
def merge(*dicts: [Dict]) -> Dict: def merge(*dicts: [Dict]) -> Dict:

View File

@ -1,5 +1,6 @@
"""Tests wether the skeleton merge works.""" """Tests wether the skeleton merge works."""
from app.skeleton import merge_with_skeleton, MissingKeyError, InvalidKeyError from app.skeleton import merge_with_skeleton, MissingKeyError, InvalidKeyError
from app.exceptions import InvalidKeyError, MissingKeyError
import pytest import pytest
@ -19,6 +20,23 @@ def test_single_invalid_key():
assert e_info.value.message == "Invalid key(s): test2" assert e_info.value.message == "Invalid key(s): test2"
def test_multiple_invalid_keys():
"""Tests wether an InvalidKeyError is thrown for multiple keys."""
data = {
"test": 1,
"test2": "test",
"test3": "test",
}
skel = {
"test": None,
}
with pytest.raises(InvalidKeyError) as e_info:
merge_with_skeleton(data, skel)
assert e_info.value.message == "Invalid key(s): test2, test3"
def test_single_missing_key(): def test_single_missing_key():
"""Tests wether a MissingKeyError is correctly thrown for a single key.""" """Tests wether a MissingKeyError is correctly thrown for a single key."""
data = { data = {
@ -33,3 +51,20 @@ def test_single_missing_key():
merge_with_skeleton(data, skel) merge_with_skeleton(data, skel)
assert e_info.value.message == "Missing key(s): test2" assert e_info.value.message == "Missing key(s): test2"
def test_multiple_missing_keys():
"""Tests wether a MissingKeyError is correctly thrown for multiple keys."""
data = {
"test": 1,
}
skel = {
"test": None,
"test2": None,
"test3": None,
}
with pytest.raises(MissingKeyError) as e_info:
merge_with_skeleton(data, skel)
assert e_info.value.message == "Missing key(s): test2, test3"