From d68b124368dab4a3ec229da8e331957b90f1d650 Mon Sep 17 00:00:00 2001
From: Alex <akreft@trineo.org>
Date: Wed, 24 Mar 2021 10:58:32 +0100
Subject: [PATCH] resolve threads from merge request

---
 CHANGELOG.md                    | 19 ++------------
 src/caosdb/__init__.py          |  2 +-
 src/caosdb/configuration.py     | 20 +++++++-------
 unittests/test_configuration.py | 46 +++++++++++++++++++++++----------
 4 files changed, 44 insertions(+), 43 deletions(-)

diff --git a/CHANGELOG.md b/CHANGELOG.md
index c964b84d..d464d725 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -9,25 +9,9 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
 
 ### Added ###
 
-* function `_read_config_files` to read `pycaosdb.ini` files from different paths.
-
-### Changed ###
-
-### Deprecated ###
-
-### Removed ###
-
-### Fixed ###
-- #45 test_config_ini_via_envvar
-
-### Security ###
-
-## [Unreleased] ##
-
-### Added ###
-
 * `etag` property for the `caosdb.Query` class. The etag allows to debug the
   caching and to decide whether the server has changed between queries.
+* function `_read_config_files` to read `pycaosdb.ini` files from different paths.
 
 ### Changed ###
 
@@ -36,6 +20,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
 ### Removed ###
 
 ### Fixed ###
+* #45 - test_config_ini_via_envvar
 
 ### Security ###
 
diff --git a/src/caosdb/__init__.py b/src/caosdb/__init__.py
index ba1b535f..2f8f0821 100644
--- a/src/caosdb/__init__.py
+++ b/src/caosdb/__init__.py
@@ -50,4 +50,4 @@ from caosdb.connection.connection import configure_connection, get_connection
 from caosdb.version import version as __version__
 from caosdb.exceptions import *
 
-_read_config_files("PYCAOSDBINI")
\ No newline at end of file
+_read_config_files()
\ No newline at end of file
diff --git a/src/caosdb/configuration.py b/src/caosdb/configuration.py
index 70031ce6..6e8a9c6f 100644
--- a/src/caosdb/configuration.py
+++ b/src/caosdb/configuration.py
@@ -29,7 +29,7 @@ except ImportError:
     from configparser import ConfigParser
 
 from os import environ, getcwd
-from os.path import expanduser, join,isfile
+from os.path import expanduser, join, isfile
 
 
 def _reset_config():
@@ -53,21 +53,19 @@ def configure(inifile):
 def get_config():
     return _pycaosdbconf
 
-def _read_config_files(env = "PYCAOSDBINI"):
-    """Function to read config files from different paths
 
-    Args:
-        env (string): environment string
+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
-    """    
+        [list]: list with successfully parsed ini-files. Order: env_var or home directory, cwd. Used for testing the function.
+    """
     return_var = []
-    if env in environ:
-        return_var.extend(configure(expanduser(environ[env])))
+    if "PYCAOSDBINI" in environ:
+        return_var.extend(configure(expanduser(environ["PYCAOSDBINI"])))
     else:
-       return_var.extend(configure(expanduser('~/.pycaosdb.ini')))
-    
+        return_var.extend(configure(expanduser('~/.pycaosdb.ini')))
+
     if isfile(join(getcwd(), "pycaosdb.ini")):
         return_var.extend(configure(join(getcwd(), "pycaosdb.ini")))
     return return_var
diff --git a/unittests/test_configuration.py b/unittests/test_configuration.py
index ab6cd482..b135e7cd 100644
--- a/unittests/test_configuration.py
+++ b/unittests/test_configuration.py
@@ -22,27 +22,45 @@
 # ** end header
 #
 
+import pytest
 import caosdb as db
+from os import environ, getcwd, remove
+from os.path import expanduser, isfile, join
 from pytest import raises
 
 
-def test_config_ini_via_envvar():
-    from os import environ,getcwd,remove
-    from os.path import expanduser, isfile,join
+@pytest.fixture
+def temp_ini_files():
+    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):
         environ["PYCAOSDBINI"]
-    
+
     environ["PYCAOSDBINI"] = "bla bla"
     assert environ["PYCAOSDBINI"] == "bla bla"
-    assert not expanduser(environ["PYCAOSDBINI"]) in db.configuration._read_config_files("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"
-    if isfile(expanduser(environ["PYCAOSDBINI"])):
-        assert expanduser("~/.pycaosdb.ini") in db.configuration._read_config_files("PYCAOSDBINI")
-
-    if isfile(join(getcwd(), )):
-        assert join(getcwd(), "pycaosdb.ini") in db.configuration._read_config_files("PYCAOSDBINI")
-    else:
-        open("pycaosdb.ini", 'a').close() #create temporary ini file
-        assert join(getcwd(), "pycaosdb.ini") in db.configuration._read_config_files("PYCAOSDBINI")
-        remove("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()
-- 
GitLab