Skip to content
Snippets Groups Projects
Commit 94461add authored by Henrik tom Wörden's avatar Henrik tom Wörden
Browse files

TST: Created function _read_config_files

Created  function _read_config_files to read pycaosdb.ini files from different paths. Testfile changed accordingly.
parent c53e6f1f
No related branches found
No related tags found
1 merge request!4TST: refactor configuration test
...@@ -11,6 +11,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ...@@ -11,6 +11,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
* `etag` property for the `caosdb.Query` class. The etag allows to debug the * `etag` property for the `caosdb.Query` class. The etag allows to debug the
caching and to decide whether the server has changed between queries. caching and to decide whether the server has changed between queries.
* function `_read_config_files` to read `pycaosdb.ini` files from different paths.
### Changed ### ### Changed ###
...@@ -19,6 +20,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ...@@ -19,6 +20,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
### Removed ### ### Removed ###
### Fixed ### ### Fixed ###
* #45 - test_config_ini_via_envvar
### Security ### ### Security ###
......
...@@ -37,7 +37,7 @@ from os.path import expanduser, join ...@@ -37,7 +37,7 @@ from os.path import expanduser, join
import caosdb.apiutils import caosdb.apiutils
from caosdb.common import administration from caosdb.common import administration
from caosdb.common.datatype import (BOOLEAN, DATETIME, DOUBLE, FILE, INTEGER, from caosdb.common.datatype import (BOOLEAN, DATETIME, DOUBLE, FILE, INTEGER,
REFERENCE, TEXT, LIST) LIST, REFERENCE, TEXT)
# Import of the basic API classes: # Import of the basic API classes:
from caosdb.common.models import (ACL, ALL, FIX, NONE, OBLIGATORY, RECOMMENDED, from caosdb.common.models import (ACL, ALL, FIX, NONE, OBLIGATORY, RECOMMENDED,
SUGGESTED, Container, DropOffBox, Entity, SUGGESTED, Container, DropOffBox, Entity,
...@@ -45,15 +45,9 @@ from caosdb.common.models import (ACL, ALL, FIX, NONE, OBLIGATORY, RECOMMENDED, ...@@ -45,15 +45,9 @@ from caosdb.common.models import (ACL, ALL, FIX, NONE, OBLIGATORY, RECOMMENDED,
Query, QueryTemplate, Record, RecordType, Query, QueryTemplate, Record, RecordType,
delete, execute_query, get_global_acl, delete, execute_query, get_global_acl,
get_known_permissions, raise_errors) get_known_permissions, raise_errors)
from caosdb.configuration import configure, get_config from caosdb.configuration import _read_config_files, configure, get_config
from caosdb.connection.connection import configure_connection, get_connection from caosdb.connection.connection import configure_connection, get_connection
from caosdb.version import version as __version__
from caosdb.exceptions import * from caosdb.exceptions import *
from caosdb.version import version as __version__
# read configuration these files _read_config_files()
if "PYCAOSDBINI" in environ:
configure(expanduser(environ["PYCAOSDBINI"]))
else:
configure(expanduser('~/.pycaosdb.ini'))
configure(join(getcwd(), "pycaosdb.ini"))
...@@ -28,6 +28,9 @@ except ImportError: ...@@ -28,6 +28,9 @@ except ImportError:
# python3 # python3
from configparser import ConfigParser from configparser import ConfigParser
from os import environ, getcwd
from os.path import expanduser, join, isfile
def _reset_config(): def _reset_config():
global _pycaosdbconf global _pycaosdbconf
...@@ -49,3 +52,20 @@ def configure(inifile): ...@@ -49,3 +52,20 @@ def configure(inifile):
def get_config(): def get_config():
return _pycaosdbconf return _pycaosdbconf
def _read_config_files():
"""Function to read config files from different paths. Checks for path in $PYCAOSDBINI or home directory (.pycaosdb.ini) and in the current working directory (pycaosdb.ini).
Returns:
[list]: list with successfully parsed ini-files. Order: env_var or home directory, cwd. Used for testing the function.
"""
return_var = []
if "PYCAOSDBINI" in environ:
return_var.extend(configure(expanduser(environ["PYCAOSDBINI"])))
else:
return_var.extend(configure(expanduser('~/.pycaosdb.ini')))
if isfile(join(getcwd(), "pycaosdb.ini")):
return_var.extend(configure(join(getcwd(), "pycaosdb.ini")))
return return_var
...@@ -22,19 +22,45 @@ ...@@ -22,19 +22,45 @@
# ** end header # ** end header
# #
import pytest
import caosdb as db import caosdb as db
from os import environ, getcwd, remove
from os.path import expanduser, isfile, join
from pytest import raises from pytest import raises
def test_config_ini_via_envvar(): @pytest.fixture
from os import environ def temp_ini_files():
from os.path import expanduser created_temp_ini_cwd = False
created_temp_ini_home = False
if not isfile(join(getcwd(), "pycaosdb.ini")):
open("pycaosdb.ini", 'a').close() # create temporary ini file
created_temp_ini_cwd = True
if not isfile(expanduser("~/.pycaosdb.ini")):
open(expanduser("~/.pycaosdb.ini"), 'a').close() # create temporary ini file in home directory
created_temp_ini_home = True
yield 0
if created_temp_ini_cwd:
remove("pycaosdb.ini")
if created_temp_ini_home:
remove(expanduser("~/.pycaosdb.ini"))
environ["PYCAOSDBINI"] = "~/.pycaosdb.ini"
def test_config_ini_via_envvar(temp_ini_files):
with raises(KeyError): with raises(KeyError):
environ["PYCAOSDBINI"] environ["PYCAOSDBINI"]
environ["PYCAOSDBINI"] = "bla bla" environ["PYCAOSDBINI"] = "bla bla"
assert environ["PYCAOSDBINI"] == "bla bla" assert environ["PYCAOSDBINI"] == "bla bla"
assert db.configuration.configure(environ["PYCAOSDBINI"]) == [] # test wrong configuration file in envvar
assert not expanduser(environ["PYCAOSDBINI"]) in db.configuration._read_config_files()
# test good configuration file in envvar
environ["PYCAOSDBINI"] = "~/.pycaosdb.ini" environ["PYCAOSDBINI"] = "~/.pycaosdb.ini"
assert db.configuration.configure(expanduser(environ["PYCAOSDBINI"])) == [expanduser("~/.pycaosdb.ini")] assert expanduser("~/.pycaosdb.ini") in db.configuration._read_config_files()
# test without envvar
environ.pop("PYCAOSDBINI")
assert expanduser("~/.pycaosdb.ini") in db.configuration._read_config_files()
# test configuration file in cwd
assert join(getcwd(), "pycaosdb.ini") in db.configuration._read_config_files()
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment