summaryrefslogtreecommitdiffstats
path: root/testapi
diff options
context:
space:
mode:
authorSerenaFeng <feng.xiaowei@zte.com.cn>2017-05-12 17:02:35 +0800
committerSerenaFeng <feng.xiaowei@zte.com.cn>2017-05-12 17:07:47 +0800
commite401fd7efbf74c7cdc5334c380c79b45ad9271e0 (patch)
treec94c4147b3ee71479abbec8be7165367734a4781 /testapi
parent909be5b53a6141f84480dc29eb5dbfffe5c35fad (diff)
refactor config parser to facilitate adding new configs
refactor hardcoded config.py to facilitate adding new configurations come along with web portal and Authentication features Change-Id: Ibc16166ade0d6e730bb4c9d81e9b9bc9b297faa1 Signed-off-by: SerenaFeng <feng.xiaowei@zte.com.cn>
Diffstat (limited to 'testapi')
-rw-r--r--testapi/opnfv_testapi/cmd/server.py8
-rw-r--r--testapi/opnfv_testapi/common/config.py100
-rw-r--r--testapi/opnfv_testapi/tests/unit/common/test_config.py32
3 files changed, 40 insertions, 100 deletions
diff --git a/testapi/opnfv_testapi/cmd/server.py b/testapi/opnfv_testapi/cmd/server.py
index fa2b722..8b092b8 100644
--- a/testapi/opnfv_testapi/cmd/server.py
+++ b/testapi/opnfv_testapi/cmd/server.py
@@ -48,7 +48,9 @@ def parse_config(argv=[]):
parser.add_argument("-c", "--config-file", dest='config_file',
help="Config file location")
args = parser.parse_args(argv)
- CONF = config.APIConfig().parse(args.config_file)
+ if args.config_file:
+ config.Config.CONFIG = args.config_file
+ CONF = config.Config()
def get_db():
@@ -60,8 +62,8 @@ def make_app():
return swagger.Application(
url_mappings.mappings,
db=get_db(),
- debug=CONF.api_debug_on,
- auth=CONF.api_authenticate_on
+ debug=CONF.api_debug,
+ auth=CONF.api_authenticate
)
diff --git a/testapi/opnfv_testapi/common/config.py b/testapi/opnfv_testapi/common/config.py
index 362fca6..70d7bd6 100644
--- a/testapi/opnfv_testapi/common/config.py
+++ b/testapi/opnfv_testapi/common/config.py
@@ -11,83 +11,41 @@ import ConfigParser
import os
-class ParseError(Exception):
- """
- Custom exception class for config file
- """
-
- def __init__(self, message):
- self.msg = message
-
- def __str__(self):
- return 'error parsing config file : %s' % self.msg
-
-
-class APIConfig(object):
- """
- The purpose of this class is to load values correctly from the config file.
- Each key is declared as an attribute in __init__() and linked in parse()
- """
+class Config(object):
+ CONFIG = None
def __init__(self):
- self._set_default_config()
- self.mongo_url = None
- self.mongo_dbname = None
- self.api_port = None
- self.api_debug_on = None
- self.api_authenticate_on = None
- self._parser = None
- self.swagger_base_url = None
+ self.file = self.CONFIG if self.CONFIG else self._default_config()
+ self._parse()
- def _set_default_config(self):
- venv = os.getenv('VIRTUAL_ENV')
- self._default_config = os.path.join('/' if not venv else venv,
- 'etc/opnfv_testapi/config.ini')
+ def _parse(self):
+ if not os.path.exists(self.file):
+ raise Exception("%s not found" % self.file)
- def _get_parameter(self, section, param):
- try:
- return self._parser.get(section, param)
- except ConfigParser.NoOptionError:
- raise ParseError("No parameter: [%s.%s]" % (section, param))
-
- def _get_int_parameter(self, section, param):
- try:
- return int(self._get_parameter(section, param))
- except ValueError:
- raise ParseError("Not int: [%s.%s]" % (section, param))
+ config = ConfigParser.RawConfigParser()
+ config.read(self.file)
+ self._parse_section(config)
- def _get_bool_parameter(self, section, param):
- result = self._get_parameter(section, param)
- if str(result).lower() == 'true':
- return True
- if str(result).lower() == 'false':
- return False
+ def _parse_section(self, config):
+ [self._parse_item(config, section) for section in (config.sections())]
- raise ParseError(
- "Not boolean: [%s.%s : %s]" % (section, param, result))
+ def _parse_item(self, config, section):
+ [setattr(self, '{}_{}'.format(section, k), self._parse_value(v))
+ for k, v in config.items(section)]
@staticmethod
- def parse(config_location=None):
- obj = APIConfig()
-
- if config_location is None:
- config_location = obj._default_config
-
- if not os.path.exists(config_location):
- raise ParseError("%s not found" % config_location)
-
- obj._parser = ConfigParser.SafeConfigParser()
- obj._parser.read(config_location)
-
- # Linking attributes to keys from file with their sections
- obj.mongo_url = obj._get_parameter("mongo", "url")
- obj.mongo_dbname = obj._get_parameter("mongo", "dbname")
-
- obj.api_port = obj._get_int_parameter("api", "port")
- obj.api_debug_on = obj._get_bool_parameter("api", "debug")
- obj.api_authenticate_on = obj._get_bool_parameter("api",
- "authenticate")
-
- obj.swagger_base_url = obj._get_parameter("swagger", "base_url")
+ def _parse_value(value):
+ try:
+ value = int(value)
+ except:
+ if str(value).lower() == 'true':
+ value = True
+ elif str(value).lower() == 'false':
+ value = False
+ return value
- return obj
+ @staticmethod
+ def _default_config():
+ is_venv = os.getenv('VIRTUAL_ENV')
+ return os.path.join('/' if not is_venv else is_venv,
+ 'etc/opnfv_testapi/config.ini')
diff --git a/testapi/opnfv_testapi/tests/unit/common/test_config.py b/testapi/opnfv_testapi/tests/unit/common/test_config.py
index aaff6bb..446b944 100644
--- a/testapi/opnfv_testapi/tests/unit/common/test_config.py
+++ b/testapi/opnfv_testapi/tests/unit/common/test_config.py
@@ -1,36 +1,16 @@
-import ConfigParser
import os
-import pytest
-
from opnfv_testapi.common import config
-@pytest.fixture()
-def config_dir():
- return os.path.dirname(__file__)
-
-
-@pytest.mark.parametrize('exception, config_file, excepted', [
- (config.ParseError, None, '/etc/opnfv_testapi/config.ini not found'),
- (ConfigParser.NoSectionError, 'nosection.ini', 'No section:'),
- (config.ParseError, 'noparam.ini', 'No parameter:'),
- (config.ParseError, 'notint.ini', 'Not int:'),
- (config.ParseError, 'notboolean.ini', 'Not boolean:')])
-def pytest_config_exceptions(config_dir, exception, config_file, excepted):
- file = '{}/{}'.format(config_dir, config_file) if config_file else None
- with pytest.raises(exception) as error:
- config.APIConfig().parse(file)
- assert excepted in str(error.value)
-
-
def test_config_success():
- config_dir = os.path.join(os.path.dirname(__file__),
- '../../../../etc/config.ini')
- conf = config.APIConfig().parse(config_dir)
+ config_file = os.path.join(os.path.dirname(__file__),
+ '../../../../etc/config.ini')
+ config.Config.CONFIG = config_file
+ conf = config.Config()
assert conf.mongo_url == 'mongodb://127.0.0.1:27017/'
assert conf.mongo_dbname == 'test_results_collection'
assert conf.api_port == 8000
- assert conf.api_debug_on is True
- assert conf.api_authenticate_on is False
+ assert conf.api_debug is True
+ assert conf.api_authenticate is False
assert conf.swagger_base_url == 'http://localhost:8000'