Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Fix for Issue#518 #573

Open
wants to merge 5 commits into
base: master
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
5 changes: 3 additions & 2 deletions src/translators/crate.py
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
import json
import logging
from contextlib import contextmanager
from crate import client
from crate.client import exceptions
Expand All @@ -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
Expand Down Expand Up @@ -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))
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

If we make FloatRangeVar generic (see comment below) then I think this line should be

.read(FloatRangeVar(var_name='CRATE_BACKOFF_FACTOR', default_value=0.0, lo=0.0, hi=120.0)

if self.connection is None:
try:
self.connection = client.connect(
Expand Down
13 changes: 13 additions & 0 deletions src/utils/cfgreader.py
Original file line number Diff line number Diff line change
Expand Up @@ -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)


Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Can we make this class more generic so it works for any range, not just the 0-120 range?
e.g.

class FloatRangeVar(EVar):
   def __init__(var_name, default_value, mask_value, lo, hi):
    # super(var_name, default_value, mask_value)
    # ...check lo <= hi

   def _do_read(self, rep: str) -> float:
     value = float(rep)
     if value not in range(self.lo, self.hi):
       raise ValueError(...)
     return value

class BoolVar(EVar):
"""
An env value parsed as a boolean. It evaluates to true just in case the
Expand Down