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.properties import HasProperties, Property
|
||||
|
||||
generalConfig.set_default('lazy_number_validation', False)
|
||||
|
||||
# *DEFAULT* limits for IntRange/ScaledIntegers transport serialisation
|
||||
DEFAULT_MIN_INT = -16777216
|
||||
DEFAULT_MAX_INT = 16777216
|
||||
|
@ -37,6 +37,7 @@ from secop.modules import Attached, Command, \
|
||||
Communicator, Done, Module, Parameter, Property
|
||||
from secop.lib import generalConfig
|
||||
|
||||
generalConfig.set_default('legacy_hasiodev', False)
|
||||
|
||||
HEX_CODE = re.compile(r'[0-9a-fA-F][0-9a-fA-F]$')
|
||||
|
||||
|
@ -32,12 +32,28 @@ from os import environ, path
|
||||
|
||||
|
||||
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):
|
||||
self._config = None
|
||||
self.defaults = {} #: default values. may be set before or after :meth:`init`
|
||||
|
||||
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 = {}
|
||||
mandatory = 'piddir', 'logdir', 'confdir'
|
||||
repodir = path.abspath(path.join(path.dirname(__file__), '..', '..'))
|
||||
@ -82,6 +98,11 @@ class GeneralConfig:
|
||||
self._config = cfg
|
||||
|
||||
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:
|
||||
return self._config[key]
|
||||
except KeyError:
|
||||
@ -94,12 +115,14 @@ class GeneralConfig:
|
||||
raise TypeError('generalConfig.init() has to be called first') from None
|
||||
|
||||
def get(self, key, default=None):
|
||||
"""access for keys not known to exist"""
|
||||
try:
|
||||
return self.__getitem__(key)
|
||||
except KeyError:
|
||||
return default
|
||||
|
||||
def getint(self, key, default=None):
|
||||
"""access and convert to int"""
|
||||
try:
|
||||
return int(self.__getitem__(key))
|
||||
except KeyError:
|
||||
@ -113,6 +136,11 @@ class GeneralConfig:
|
||||
def initialized(self):
|
||||
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):
|
||||
"""for test purposes"""
|
||||
self._config = kwds
|
||||
|
@ -39,6 +39,7 @@ from secop.params import Accessible, Command, Parameter
|
||||
from secop.properties import HasProperties, Property
|
||||
from secop.logging import RemoteLogHandler, HasComlog
|
||||
|
||||
generalConfig.set_default('disable_value_range_check', False) # check for problematic value range by default
|
||||
|
||||
Done = UniqueObject('Done')
|
||||
"""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.lib import generalConfig
|
||||
|
||||
generalConfig.set_default('tolerate_poll_property', False)
|
||||
|
||||
|
||||
class Accessible(HasProperties):
|
||||
"""base class for Parameter and Command
|
||||
|
@ -1,12 +1,6 @@
|
||||
# content of conftest.py
|
||||
|
||||
import pytest
|
||||
from secop.lib import generalConfig
|
||||
|
||||
|
||||
@pytest.fixture(scope="session", autouse=True)
|
||||
def general_config():
|
||||
generalConfig.testinit()
|
||||
|
||||
|
||||
@pytest.fixture(scope="module")
|
||||
|
Loading…
x
Reference in New Issue
Block a user