Removing pydantic from POL charm

Change-Id: I0c8a7cac50f7f81f61fb151d8166846cf4c4fd18
Signed-off-by: sousaedu <eduardo.sousa@canonical.com>
diff --git a/installers/charm/pol/src/charm.py b/installers/charm/pol/src/charm.py
index 649e15b..6d15c57 100755
--- a/installers/charm/pol/src/charm.py
+++ b/installers/charm/pol/src/charm.py
@@ -21,7 +21,6 @@
 ##
 
 import logging
-from pydantic import ValidationError
 from typing import Any, Dict, NoReturn
 
 from ops.charm import CharmBase, CharmEvents
@@ -99,10 +98,8 @@
         Args:
             event (EventBase): Kafka relation event.
         """
-        data_loc = event.unit if event.unit else event.app
-
-        message_host = event.relation.data[data_loc].get("host")
-        message_port = event.relation.data[data_loc].get("port")
+        message_host = event.relation.data[event.unit].get("host")
+        message_port = event.relation.data[event.unit].get("port")
 
         if (
             message_host
@@ -132,9 +129,7 @@
         Args:
             event (EventBase): DB relation event.
         """
-        data_loc = event.unit if event.unit else event.app
-
-        database_uri = event.relation.data[data_loc].get("connection_string")
+        database_uri = event.relation.data[event.unit].get("connection_string")
 
         if database_uri and self.state.database_uri != database_uri:
             self.state.database_uri = database_uri
@@ -215,7 +210,7 @@
                 self.relation_state,
                 self.model.app.name,
             )
-        except ValidationError as exc:
+        except ValueError as exc:
             logger.exception("Config/Relation data validation error")
             self.unit.status = BlockedStatus(str(exc))
             return
diff --git a/installers/charm/pol/src/pod_spec.py b/installers/charm/pol/src/pod_spec.py
index 2caafbd..ec7f2d9 100644
--- a/installers/charm/pol/src/pod_spec.py
+++ b/installers/charm/pol/src/pod_spec.py
@@ -21,24 +21,46 @@
 ##
 
 import logging
-from pydantic import BaseModel, constr, PositiveInt
-from typing import Any, Dict, List
+from typing import Any, Dict, List, NoReturn
 
 logger = logging.getLogger(__name__)
 
 
-class ConfigData(BaseModel):
-    """Configuration data model."""
+def _validate_data(
+    config_data: Dict[str, Any], relation_data: Dict[str, Any]
+) -> NoReturn:
+    """Validate input data.
 
-    log_level: constr(regex=r"^(INFO|DEBUG)$")
+    Args:
+        config_data (Dict[str, Any]): configuration data.
+        relation_data (Dict[str, Any]): relation data.
+    """
+    config_validators = {
+        "log_level": lambda value, _: isinstance(value, str)
+        and value in ("INFO", "DEBUG"),
+    }
+    relation_validators = {
+        "message_host": lambda value, _: isinstance(value, str) and len(value) > 0,
+        "message_port": lambda value, _: isinstance(value, int) and value > 0,
+        "database_uri": lambda value, _: isinstance(value, str)
+        and value.startswith("mongodb://"),
+    }
+    problems = []
 
+    for key, validator in config_validators.items():
+        valid = validator(config_data.get(key), config_data)
 
-class RelationData(BaseModel):
-    """Relation data model."""
+        if not valid:
+            problems.append(key)
 
-    message_host: constr(min_length=1)
-    message_port: PositiveInt
-    database_uri: constr(regex=r"^(mongodb://)")
+    for key, validator in relation_validators.items():
+        valid = validator(relation_data.get(key), relation_data)
+
+        if not valid:
+            problems.append(key)
+
+    if len(problems) > 0:
+        raise ValueError("Errors found in: {}".format(", ".join(problems)))
 
 
 def _make_pod_ports(port: int) -> List[Dict[str, Any]]:
@@ -152,8 +174,7 @@
     if not image_info:
         return None
 
-    ConfigData(**(config))
-    RelationData(**(relation_state))
+    _validate_data(config, relation_state)
 
     ports = _make_pod_ports(port)
     env_config = _make_pod_envconfig(config, relation_state)