Skip to content
Snippets Groups Projects
Commit 476c33a1 authored by Jorrit Schaap's avatar Jorrit Schaap
Browse files

SW-415: automatically create dbcredentials file with sane defaults when no...

SW-415: automatically create dbcredentials file with sane defaults when no credentials are found. added tests.
parent c55f04ea
No related branches found
No related tags found
1 merge request!87Lsmr epic
...@@ -131,7 +131,7 @@ class Credentials: ...@@ -131,7 +131,7 @@ class Credentials:
class DBCredentials: class DBCredentials:
def __init__(self, filepatterns=None): def __init__(self, filepatterns=None):
self.filepatterns = filepatterns if filepatterns else [ self.filepatterns = filepatterns if filepatterns is not None else [
"{LOFARROOT}/etc/dbcredentials/*.ini", "{LOFARROOT}/etc/dbcredentials/*.ini",
"{HOME}/.lofar/dbcredentials/*.ini", "{HOME}/.lofar/dbcredentials/*.ini",
] ]
...@@ -182,13 +182,17 @@ class DBCredentials: ...@@ -182,13 +182,17 @@ class DBCredentials:
creates a dbcredentials file with defaults in ~/.lofar/dbcredentials/<database>.ini creates a dbcredentials file with defaults in ~/.lofar/dbcredentials/<database>.ini
:param database: name of the database/file :param database: name of the database/file
""" """
new_path = os.path.join(user_info.pw_dir, '.lofar', 'dbcredentials', database+'.ini') extensions = list(set(os.path.splitext(pat)[1] for pat in self.filepatterns))
if not os.path.exists(os.path.dirname(new_path)): if extensions:
os.makedirs(os.path.dirname(new_path)) #pick first extension
with open(new_path, 'w') as new_file: extension = extensions[0]
new_file.write("[database:%s]\nhost=localhost\nuser=%s\npassword=unknown\ntype=unknown\nport=0\ndatabase=%s" new_path = os.path.join(user_info.pw_dir, '.lofar', 'dbcredentials', database+extension)
% (database,user_info.pw_name,database)) if not os.path.exists(os.path.dirname(new_path)):
logger.info("created default dbcredentials file for database=%s at %s", database, new_path) os.makedirs(os.path.dirname(new_path))
with open(new_path, 'w') as new_file:
new_file.write("[database:%s]\nhost=localhost\nuser=%s\npassword=unknown\ntype=unknown\nport=0\ndatabase=%s"
% (database,user_info.pw_name,database))
logger.info("created default dbcredentials file for database=%s at %s", database, new_path)
def get(self, database): def get(self, database):
""" """
......
#!/usr/bin/env python #!/usr/bin/env python
import os
import unittest import unittest
import tempfile import tempfile
from uuid import uuid4
from lofar.common.dbcredentials import * from lofar.common.dbcredentials import *
try:
#python2
from ConfigParser import NoSectionError
except ImportError:
#python3
from configparser import NoSectionError
def setUpModule(): def setUpModule():
pass pass
...@@ -53,8 +61,21 @@ class TestDBCredentials(unittest.TestCase): ...@@ -53,8 +61,21 @@ class TestDBCredentials(unittest.TestCase):
def test_get_non_existing(self): def test_get_non_existing(self):
dbc = DBCredentials(filepatterns=[]) dbc = DBCredentials(filepatterns=[])
with self.assertRaises(DBCredentials.NoSectionError): non_existing_db_name = "UNKNOWN-%s" % (uuid4(),)
dbc.get("UNKNOWN") with self.assertRaises(NoSectionError):
dbc.get(non_existing_db_name)
def test_creation_for_non_existing(self):
dbc = DBCredentials(filepatterns=["{HOME}/.lofar/dbcredentials/*.test_extension"])
non_existing_db_name = "UNKNOWN-%s" % (uuid4(),)
creds = dbc.get(non_existing_db_name)
self.assertTrue(creds)
self.assertEqual(non_existing_db_name, creds.database)
expected_path = os.path.expanduser("~/.lofar/dbcredentials/%s.test_extension" % (non_existing_db_name,))
self.assertTrue(os.path.exists(expected_path))
os.remove(expected_path)
def test_list(self): def test_list(self):
dbc = DBCredentials(filepatterns=[]) dbc = DBCredentials(filepatterns=[])
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment