reintroduced individual init of generalConfig.defaults
revert basically the former change "init generalConfig.defaults only in secop-server" The problem of import order when setting generalConfig.defaults has to be solved by not overriding already existing keys when setting the default. Change-Id: I82121e346607dd74146279c4241e13ab63c14096 Reviewed-on: https://forge.frm2.tum.de/review/c/sine2020/secop/playground/+/28011 Tested-by: Jenkins Automated Tests <pedersen+jenkins@frm2.tum.de> Reviewed-by: Enrico Faulhaber <enrico.faulhaber@frm2.tum.de> Reviewed-by: Markus Zolliker <markus.zolliker@psi.ch>
This commit is contained in:
parent
16a9550080
commit
bb097ac3ba
@ -35,6 +35,8 @@ from secop.lib.enum import Enum
|
|||||||
from secop.parse import Parser
|
from secop.parse import Parser
|
||||||
from secop.properties import HasProperties, Property
|
from secop.properties import HasProperties, Property
|
||||||
|
|
||||||
|
generalConfig.set_default('lazy_number_validation', False)
|
||||||
|
|
||||||
# *DEFAULT* limits for IntRange/ScaledIntegers transport serialisation
|
# *DEFAULT* limits for IntRange/ScaledIntegers transport serialisation
|
||||||
DEFAULT_MIN_INT = -16777216
|
DEFAULT_MIN_INT = -16777216
|
||||||
DEFAULT_MAX_INT = 16777216
|
DEFAULT_MAX_INT = 16777216
|
||||||
|
@ -37,6 +37,7 @@ from secop.modules import Attached, Command, \
|
|||||||
Communicator, Done, Module, Parameter, Property
|
Communicator, Done, Module, Parameter, Property
|
||||||
from secop.lib import generalConfig
|
from secop.lib import generalConfig
|
||||||
|
|
||||||
|
generalConfig.set_default('legacy_hasiodev', False)
|
||||||
|
|
||||||
HEX_CODE = re.compile(r'[0-9a-fA-F][0-9a-fA-F]$')
|
HEX_CODE = re.compile(r'[0-9a-fA-F][0-9a-fA-F]$')
|
||||||
|
|
||||||
|
@ -32,12 +32,28 @@ from os import environ, path
|
|||||||
|
|
||||||
|
|
||||||
class GeneralConfig:
|
class GeneralConfig:
|
||||||
|
"""generalConfig holds server configuration items
|
||||||
|
|
||||||
|
generalConfig.init is to be called before starting the server.
|
||||||
|
Accessing generalConfig.<key> raises an error, when generalConfig.init is
|
||||||
|
not yet called, except when a default for <key> is set.
|
||||||
|
For tests and for imports from client code, a module may access generalConfig
|
||||||
|
without calling generalConfig.init before. For this, it should call
|
||||||
|
generalConfig.set_default on import to define defaults for the needed keys.
|
||||||
|
"""
|
||||||
|
|
||||||
def __init__(self):
|
def __init__(self):
|
||||||
self._config = None
|
self._config = None
|
||||||
self.defaults = {} #: default values. may be set before or after :meth:`init`
|
self.defaults = {} #: default values. may be set before or after :meth:`init`
|
||||||
|
|
||||||
def init(self, configfile=None):
|
def init(self, configfile=None):
|
||||||
|
"""init default server configuration
|
||||||
|
|
||||||
|
:param configfile: if present, keys and values from the [FRAPPY] section are read
|
||||||
|
|
||||||
|
if configfile is not given, it tries to guess the location of the configfile
|
||||||
|
or determine 'piddir', 'logdir', 'confdir' and 'basedir' from the environment.
|
||||||
|
"""
|
||||||
cfg = {}
|
cfg = {}
|
||||||
mandatory = 'piddir', 'logdir', 'confdir'
|
mandatory = 'piddir', 'logdir', 'confdir'
|
||||||
repodir = path.abspath(path.join(path.dirname(__file__), '..', '..'))
|
repodir = path.abspath(path.join(path.dirname(__file__), '..', '..'))
|
||||||
@ -82,6 +98,11 @@ class GeneralConfig:
|
|||||||
self._config = cfg
|
self._config = cfg
|
||||||
|
|
||||||
def __getitem__(self, key):
|
def __getitem__(self, key):
|
||||||
|
"""access for keys known to exist
|
||||||
|
|
||||||
|
:param key: the key (raises an error when key is not available)
|
||||||
|
:return: the value
|
||||||
|
"""
|
||||||
try:
|
try:
|
||||||
return self._config[key]
|
return self._config[key]
|
||||||
except KeyError:
|
except KeyError:
|
||||||
@ -94,12 +115,14 @@ class GeneralConfig:
|
|||||||
raise TypeError('generalConfig.init() has to be called first') from None
|
raise TypeError('generalConfig.init() has to be called first') from None
|
||||||
|
|
||||||
def get(self, key, default=None):
|
def get(self, key, default=None):
|
||||||
|
"""access for keys not known to exist"""
|
||||||
try:
|
try:
|
||||||
return self.__getitem__(key)
|
return self.__getitem__(key)
|
||||||
except KeyError:
|
except KeyError:
|
||||||
return default
|
return default
|
||||||
|
|
||||||
def getint(self, key, default=None):
|
def getint(self, key, default=None):
|
||||||
|
"""access and convert to int"""
|
||||||
try:
|
try:
|
||||||
return int(self.__getitem__(key))
|
return int(self.__getitem__(key))
|
||||||
except KeyError:
|
except KeyError:
|
||||||
@ -113,6 +136,11 @@ class GeneralConfig:
|
|||||||
def initialized(self):
|
def initialized(self):
|
||||||
return bool(self._config)
|
return bool(self._config)
|
||||||
|
|
||||||
|
def set_default(self, key, value):
|
||||||
|
"""set a default value, in case not set already"""
|
||||||
|
if key not in self.defaults:
|
||||||
|
self.defaults[key] = value
|
||||||
|
|
||||||
def testinit(self, **kwds):
|
def testinit(self, **kwds):
|
||||||
"""for test purposes"""
|
"""for test purposes"""
|
||||||
self._config = kwds
|
self._config = kwds
|
||||||
|
@ -39,6 +39,7 @@ from secop.params import Accessible, Command, Parameter
|
|||||||
from secop.properties import HasProperties, Property
|
from secop.properties import HasProperties, Property
|
||||||
from secop.logging import RemoteLogHandler, HasComlog
|
from secop.logging import RemoteLogHandler, HasComlog
|
||||||
|
|
||||||
|
generalConfig.set_default('disable_value_range_check', False) # check for problematic value range by default
|
||||||
|
|
||||||
Done = UniqueObject('Done')
|
Done = UniqueObject('Done')
|
||||||
"""a special return value for a read/write function
|
"""a special return value for a read/write function
|
||||||
|
@ -32,6 +32,8 @@ from secop.errors import BadValueError, ProgrammingError
|
|||||||
from secop.properties import HasProperties, Property
|
from secop.properties import HasProperties, Property
|
||||||
from secop.lib import generalConfig
|
from secop.lib import generalConfig
|
||||||
|
|
||||||
|
generalConfig.set_default('tolerate_poll_property', False)
|
||||||
|
|
||||||
|
|
||||||
class Accessible(HasProperties):
|
class Accessible(HasProperties):
|
||||||
"""base class for Parameter and Command
|
"""base class for Parameter and Command
|
||||||
|
@ -1,12 +1,6 @@
|
|||||||
# content of conftest.py
|
# content of conftest.py
|
||||||
|
|
||||||
import pytest
|
import pytest
|
||||||
from secop.lib import generalConfig
|
|
||||||
|
|
||||||
|
|
||||||
@pytest.fixture(scope="session", autouse=True)
|
|
||||||
def general_config():
|
|
||||||
generalConfig.testinit()
|
|
||||||
|
|
||||||
|
|
||||||
@pytest.fixture(scope="module")
|
@pytest.fixture(scope="module")
|
||||||
|
Loading…
x
Reference in New Issue
Block a user