X-Git-Url: https://osm.etsi.org/gitweb/?a=blobdiff_plain;f=installers%2Fcharm%2Fpol%2Fsrc%2Fpod_spec.py;h=5ad4217a5d0260a0c9c49f6a1ce55692f8468ee6;hb=49379ced23b5e344a773ce77ac9cb59c1864e19b;hp=2caafbd9179819dcf8b100ac8fece6d6106f3825;hpb=cab58cb714924d6a6f2d4bc83dcc29445cf84bf4;p=osm%2Fdevops.git diff --git a/installers/charm/pol/src/pod_spec.py b/installers/charm/pol/src/pod_spec.py index 2caafbd9..5ad4217a 100644 --- a/installers/charm/pol/src/pod_spec.py +++ b/installers/charm/pol/src/pod_spec.py @@ -21,24 +21,48 @@ ## 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) + + if not valid: + problems.append(key) + for key, validator in relation_validators.items(): + valid = validator(relation_data.get(key), relation_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://)") + if len(problems) > 0: + raise ValueError("Errors found in: {}".format(", ".join(problems))) def _make_pod_ports(port: int) -> List[Dict[str, Any]]: @@ -152,8 +176,7 @@ def make_pod_spec( 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)