Moved exceptions to own file; added some more tests
continuous-integration/drone the build failed
Details
continuous-integration/drone the build failed
Details
parent
ad31d9a979
commit
0dc1b3ded4
|
@ -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__()
|
|
@ -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:
|
||||||
|
|
|
@ -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"
|
||||||
|
|
Loading…
Reference in New Issue