From 45537a9f657f8e9b509adbff607466dfbd36265c Mon Sep 17 00:00:00 2001 From: Leopold Talirz Date: Thu, 14 Feb 2019 15:14:03 +0100 Subject: [PATCH] prevent tests from deleting the default user PR #2214 stripped of safeguards that prevented the default user from being deleted in between tests. Since AiiDA expects a default user in many operations, leaving the DB in a state with no default user is not ideal. This commit reintroduces safeguards that result in the default user remaining untouched. --- aiida/backends/djsite/db/testbase.py | 6 +++++- aiida/backends/testimplbase.py | 15 ++++++++++----- 2 files changed, 15 insertions(+), 6 deletions(-) diff --git a/aiida/backends/djsite/db/testbase.py b/aiida/backends/djsite/db/testbase.py index 1d5400f9d2..7210a20ffe 100644 --- a/aiida/backends/djsite/db/testbase.py +++ b/aiida/backends/djsite/db/testbase.py @@ -43,6 +43,9 @@ def setUpClass_method(self): def clean_db(self): from aiida.backends.djsite.db import models + from aiida.manage import get_config + + email = get_config().current_profile.default_user_email # I first need to delete the links, because in principle I could not delete input nodes, only outputs. # For simplicity, since I am deleting everything, I delete the links first @@ -52,7 +55,8 @@ def clean_db(self): models.DbLog.objects.all().delete() models.DbNode.objects.all().delete() # pylint: disable=no-member models.DbWorkflow.objects.all().delete() # pylint: disable=no-member - models.DbUser.objects.all().delete() # pylint: disable=no-member + # The default user is needed for many operations in AiiDA; do not delete it. + models.DbUser.objects.exclude(email=email).delete() # pylint: disable=no-member models.DbComputer.objects.all().delete() models.DbGroup.objects.all().delete() diff --git a/aiida/backends/testimplbase.py b/aiida/backends/testimplbase.py index 320ffed7ec..b26f002d7b 100644 --- a/aiida/backends/testimplbase.py +++ b/aiida/backends/testimplbase.py @@ -14,7 +14,7 @@ import six -from aiida.common.exceptions import InternalError +from aiida.common.exceptions import InternalError, NotExistent from aiida import orm @@ -87,10 +87,15 @@ def insert_data(self): backend=self.backend ).store() - config = get_config() - email = config.current_profile.default_user_email - self.user = orm.User(email=email).store() - self.user_email = email + # Since the default user is needed for many operations in AiiDA, it is not deleted by clean_db. + # In principle, it should therefore always exist - if not we create it anyhow. + default_user_email = get_config().current_profile.default_user_email + try: + self.user = orm.User.objects.get(email=default_user_email) + except NotExistent: + self.user = orm.User(email=email).store() + + self.user_email = self.user.email def get_computer(self): """