diff --git a/src/translators/crate.py b/src/translators/crate.py index ff5379bf..a66613a8 100644 --- a/src/translators/crate.py +++ b/src/translators/crate.py @@ -1,4 +1,5 @@ import json +import logging from contextlib import contextmanager from crate import client from crate.client import exceptions @@ -13,7 +14,7 @@ NGSI_LD_GEOMETRY, TIME_INDEX, METADATA_TABLE_NAME, FIWARE_SERVICEPATH import logging from .crate_geo_query import from_ngsi_query -from utils.cfgreader import EnvReader, StrVar, IntVar, FloatVar +from utils.cfgreader import EnvReader, StrVar, IntVar, FloatVar, FloatRangeVar from utils.connection_manager import ConnectionManager # CRATE TYPES @@ -58,7 +59,7 @@ def setup(self): # Added backoff_factor for retry interval between attempt of # consecutive retries backoff_factor = EnvReader(log=logging.getLogger(__name__).debug) \ - .read(FloatVar('CRATE_BACKOFF_FACTOR', 0.0)) + .read(FloatRangeVar('CRATE_BACKOFF_FACTOR', 0.0)) if self.connection is None: try: self.connection = client.connect( diff --git a/src/utils/cfgreader.py b/src/utils/cfgreader.py index 7704ff82..ad9c2ce2 100644 --- a/src/utils/cfgreader.py +++ b/src/utils/cfgreader.py @@ -79,6 +79,19 @@ def _do_read(self, rep: str) -> float: return float(rep) +class FloatRangeVar(EVar): + """ + An env value parsed as a FloatRange. Value of "CRATE_BACKOFF_FACTOR" + expected to be in range of 0 to 120 otherwise it will raise Value error. + """ + + def _do_read(self, rep: str) -> float: + backoff_factor = int(os.environ.get('CRATE_BACKOFF_FACTOR')) + if backoff_factor not in range(0,120): + raise ValueError('value out of range: {}'.format(backoff_factor)) + return float(rep) + + class BoolVar(EVar): """ An env value parsed as a boolean. It evaluates to true just in case the