Skip to content

Commit

Permalink
Added LookupValidation Class to be used in LookupData.validate()
Browse files Browse the repository at this point in the history
  • Loading branch information
iwpnd committed Feb 20, 2020
1 parent 2d2b76e commit c4bf253
Show file tree
Hide file tree
Showing 2 changed files with 60 additions and 16 deletions.
70 changes: 57 additions & 13 deletions flashgeotext/lookup.py
Original file line number Diff line number Diff line change
Expand Up @@ -37,36 +37,80 @@ def __init__(self, message: str):
self.message = message


class LookupData(BaseModel):
class LookupValidation:
"""Data validation container object
Args:
status (str): Humanreadible string containing the Error status.
error_count (int): Error count in validation data.
errors (dict):
Example: {
"Berlin": [
"Berlin missing in list of synonyms",
"data['Berlin'] is not a list of synonyms"
]
}
Arguments:
status (str): Humanreadible string containing the Error status.
error_count (int): Error count in validation data.
errors (dict):
Example: {
"Berlin": [
"Berlin missing in list of synonyms",
"data['Berlin'] is not a list of synonyms"
]
}
"""

def __init__(
self,
status: str = "No errors detected",
error_count: int = 0,
errors: dict = {},
):
self.status = status
self.error_count = error_count
self.errors = {}


class LookupData(BaseModel):
"""Data that is supposed to be looked up in a text
Args:
name (pydantic.StrictStr): Human readable name as string describing the data.
data (dict): dictionary containing data to lookup and their synonyms
Attributes:
name (pydantic.StrictStr): Human readable name as string describing the data.
data (dict): dictionary containing data to lookup and their synonyms
"""

name: StrictStr
data: dict

def validate(self) -> dict:
validation = {}
validation["status"] = "No errors detected"
validation["error_count"] = 0
validation["errors"] = {}
validation = LookupValidation()

for key, value in self.data.items():
if not isinstance(value, list):
validation["errors"][key] = [f"data[{key}] is not a list of synonyms"]
validation["error_count"] = validation["error_count"] + 1
validation.errors[key] = [f"data[{key}] is not a list of synonyms"]
validation.error_count = validation.error_count + 1

if key not in value:
if key in validation["errors"]:
validation["errors"][key] = validation["errors"][key] + [
if key in validation.errors:
validation.errors[key] = validation.errors[key] + [
f"{key} missing in list of synonyms"
]
else:
validation["errors"][key] = [f"{key} missing in list of synonyms"]
validation.errors[key] = [f"{key} missing in list of synonyms"]

validation["error_count"] = validation["error_count"] + 1
validation.error_count = validation.error_count + 1

if validation["error_count"] > 0:
validation["status"] = f"Found {validation['error_count']} errors"
if validation.error_count > 0:
validation.status = f"Found {validation.error_count} errors"

return validation

Expand Down
6 changes: 3 additions & 3 deletions tests/unit/test_lookup_data.py
Original file line number Diff line number Diff line change
Expand Up @@ -48,7 +48,7 @@ def test_lookup_data_validate(id, name, data, error_count):

validation = lookup.validate()

assert validation["error_count"] == error_count
assert validation.error_count == error_count


@pytest.mark.parametrize(
Expand All @@ -58,6 +58,6 @@ def test_lookup_data_validate(id, name, data, error_count):
def test_lookup_data_demo_data(id, name, demodata):
lookup = LookupData(name=name, data=load_data_from_file(demodata))

validation_result = lookup.validate()
validation = lookup.validate()

assert validation_result["error_count"] == 0
assert validation.error_count == 0

0 comments on commit c4bf253

Please sign in to comment.