Example #1
0
 def open_connection(self):
     """
     Internal function to open the connection to the database. Only after this function is called the database is
     accessable.
     """
     if self._database is None:
         self._database = DatabaseAccess(self._configuration['sql_connection_string'],
                                         self._configuration['sql_table_name'])
Example #2
0
 def setUpClass(cls):
     """
     Set up whole class for testing
     Returns:
     """
     # we assume everything working on sqlite, should also work on postgres in sqlalchemy
     cls.database = DatabaseAccess("sqlite:///test_database.db",
                                   "simulation")
Example #3
0
 def switch_to_central_database(self):
     if self._use_local_database:
         self.close_connection()
         self._database = DatabaseAccess(
             self._configuration['sql_connection_string'],
             self._configuration['sql_table_name'])
         self._use_local_database = False
     else:
         print('Database is already in central mode!')
Example #4
0
 def open_connection(self):
     """
     Internal function to open the connection to the database. Only after this function is called the database is
     accessable.
     """
     if self._database is None and not self.database_is_disabled:
         self._database = DatabaseAccess(
             self._configuration["sql_connection_string"],
             self._configuration["sql_table_name"],
         )
Example #5
0
 def setUp(self):
     self.jobstatus = JobStatus()
     self.database = DatabaseAccess('sqlite:///test_job_status.db',
                                    'simulation')
     par_dict = {
         'chemicalformula': 'H',
         'computer': 'localhost',
         'hamilton': 'Test',
         'hamversion': '0.1',
         'job': 'testing',
         'parentid': 0,
         'project': 'database.testing',
         'projectpath': '/TESTING',
         'status': 'initialized',
         'timestart': datetime(2016, 5, 2, 11, 31, 4, 253377),
         'timestop': datetime(2016, 5, 2, 11, 31, 4, 371165),
         'totalcputime': 0.117788,
         'username': '******'
     }
     self.job_id = self.database.add_item_dict(par_dict)
     self.jobstatus_database = JobStatus(db=self.database,
                                         job_id=self.job_id)
Example #6
0
 def switch_to_central_database(self):
     """
     Switch to central database
     """
     if self._use_local_database and not self.database_is_disabled:
         self.close_connection()
         self._database = DatabaseAccess(
             self._configuration["sql_connection_string"],
             self._configuration["sql_table_name"],
         )
         self._use_local_database = False
     else:
         print("Database is already in central mode or disabled!")
Example #7
0
 def switch_to_local_database(self, file_name='pyiron.db', cwd=None):
     if not self._use_local_database:
         if cwd is None and not os.path.isabs(file_name):
             file_name = os.path.join(os.path.abspath(os.path.curdir),
                                      file_name)
         elif cwd is not None:
             file_name = os.path.join(cwd, file_name)
         self.close_connection()
         self._database = DatabaseAccess(
             'sqlite:///' + file_name,
             self._configuration['sql_table_name'])
         self._use_local_database = True
     else:
         print('Database is already in local mode!')
Example #8
0
 def switch_to_user_mode(self):
     """
     Switch from viewer mode to user mode - if viewer_mode is enable pyiron has read only access to the database.
     """
     if self._configuration['sql_view_connection_string'] is not None:
         if self._database.viewer_mode:
             self.close_connection()
             self._database = DatabaseAccess(self._configuration['sql_connection_string'],
                                             self._configuration['sql_table_name'])
             self._database.viewer_mode = True
         else:
             print('Database is already in user mode!')
     else:
         print('Viewer Mode is not available on this pyiron installation.')
Example #9
0
 def switch_to_user_mode(self):
     """
     Switch from viewer mode to user mode - if viewer_mode is enable pyiron has read only access to the database.
     """
     if self._configuration["sql_view_connection_string"] is not None and not self.database_is_disabled:
         if self._database.viewer_mode:
             self.close_connection()
             self._database = DatabaseAccess(
                 self._configuration["sql_connection_string"],
                 self._configuration["sql_table_name"],
             )
             self._database.viewer_mode = True
         else:
             print("Database is already in user mode!")
     else:
         print("Viewer Mode is not available on this pyiron installation.")
 def setUpClass(cls):
     cls.sub_status = SubmissionStatus()
     cls.database = DatabaseAccess('sqlite:///test_sub_status.db', 'simulation')
     par_dict = {'chemicalformula': 'H',
                 'computer': 'localhost#1#3',
                 'hamilton': 'Test',
                 'hamversion': '0.1',
                 'job': 'testing',
                 'parentid': 0,
                 'project': 'database.testing',
                 'projectpath': '/TESTING',
                 'status': 'suspended',
                 'timestart': datetime(2016, 5, 2, 11, 31, 4, 253377),
                 'timestop': datetime(2016, 5, 2, 11, 31, 4, 371165),
                 'totalcputime': 0.117788,
                 'username': '******'}
     cls.job_id = cls.database.add_item_dict(par_dict)
     cls.sub_status_database = SubmissionStatus(db=cls.database, job_id=cls.job_id)
Example #11
0
class TestSubmissionStatus(unittest.TestCase):
    def setUp(self):
        self.sub_status = SubmissionStatus()
        self.database = DatabaseAccess('sqlite:///test_sub_status.db',
                                       'simulation')
        par_dict = {
            'chemicalformula': 'H',
            'computer': 'localhost#1#3',
            'hamilton': 'Test',
            'hamversion': '0.1',
            'job': 'testing',
            'parentid': 0,
            'project': 'database.testing',
            'projectpath': '/TESTING',
            'status': 'suspended',
            'timestart': datetime(2016, 5, 2, 11, 31, 4, 253377),
            'timestop': datetime(2016, 5, 2, 11, 31, 4, 371165),
            'totalcputime': 0.117788,
            'username': '******'
        }
        self.job_id = self.database.add_item_dict(par_dict)
        self.sub_status_database = SubmissionStatus(db=self.database,
                                                    job_id=self.job_id)

    def doCleanups(self):
        self.database.conn.close()
        os.remove('test_sub_status.db')

    def test_submit_next(self):
        before = self.sub_status.submitted_jobs
        self.sub_status.submit_next()
        self.assertEqual(before + 1, self.sub_status.submitted_jobs)
        before = self.sub_status_database.submitted_jobs
        self.sub_status_database.submit_next()
        self.assertEqual(before + 1, self.sub_status_database.submitted_jobs)

    def test_refresh(self):
        self.sub_status.submitted_jobs = 5
        self.sub_status.refresh()
        self.assertEqual(5, self.sub_status.submitted_jobs)
        self.sub_status_database.submitted_jobs = 5
        self.sub_status_database.refresh()
        self.assertEqual(5, self.sub_status_database.submitted_jobs)
Example #12
0
    def switch_to_local_database(self, file_name='pyiron.db', cwd=None):
        """
        Swtich to an local SQLite based database.

        Args:
            file_name (str): SQLite database file name
            cwd (str/None): directory where the SQLite database file is located in
        """
        if not self._use_local_database:
            if cwd is None and not os.path.isabs(file_name):
                file_name = os.path.join(os.path.abspath(os.path.curdir), file_name)
            elif cwd is not None:
                file_name = os.path.join(cwd, file_name)
            self.close_connection()
            self._database = DatabaseAccess('sqlite:///' + file_name,
                                            self._configuration['sql_table_name'])
            self._use_local_database = True 
        else:
            print('Database is already in local mode!')
Example #13
0
 def setUpClass(cls):
     cls.sub_status = SubmissionStatus()
     cls.database = DatabaseAccess("sqlite:///test_sub_status.db", "simulation")
     par_dict = {
         "chemicalformula": "H",
         "computer": "localhost#1#3",
         "hamilton": "Test",
         "hamversion": "0.1",
         "job": "testing",
         "parentid": 0,
         "project": "database.testing",
         "projectpath": "/TESTING",
         "status": "suspended",
         "timestart": datetime(2016, 5, 2, 11, 31, 4, 253377),
         "timestop": datetime(2016, 5, 2, 11, 31, 4, 371165),
         "totalcputime": 0.117788,
         "username": "******",
     }
     cls.job_id = cls.database.add_item_dict(par_dict)
     cls.sub_status_database = SubmissionStatus(db=cls.database, job_id=cls.job_id)
Example #14
0
class TestJobStatus(unittest.TestCase):
    def setUp(self):
        self.jobstatus = JobStatus()
        self.database = DatabaseAccess('sqlite:///test_job_status.db',
                                       'simulation')
        par_dict = {
            'chemicalformula': 'H',
            'computer': 'localhost',
            'hamilton': 'Test',
            'hamversion': '0.1',
            'job': 'testing',
            'parentid': 0,
            'project': 'database.testing',
            'projectpath': '/TESTING',
            'status': 'initialized',
            'timestart': datetime(2016, 5, 2, 11, 31, 4, 253377),
            'timestop': datetime(2016, 5, 2, 11, 31, 4, 371165),
            'totalcputime': 0.117788,
            'username': '******'
        }
        self.job_id = self.database.add_item_dict(par_dict)
        self.jobstatus_database = JobStatus(db=self.database,
                                            job_id=self.job_id)

    def doCleanups(self):
        self.database.conn.close()
        os.remove('test_job_status.db')

    def test_initialized(self):
        self.assertTrue(self.jobstatus.initialized)
        self.jobstatus.string = 'finished'
        self.assertFalse(self.jobstatus.initialized)
        self.assertFalse(self.jobstatus.appended)
        self.assertFalse(self.jobstatus.created)
        self.assertFalse(self.jobstatus.submitted)
        self.assertFalse(self.jobstatus.running)
        self.assertFalse(self.jobstatus.aborted)
        self.assertFalse(self.jobstatus.collect)
        self.assertFalse(self.jobstatus.suspended)
        self.assertFalse(self.jobstatus.refresh)
        self.assertFalse(self.jobstatus.busy)
        self.assertTrue(self.jobstatus.finished)
        self.jobstatus.initialized = True
        self.assertTrue(self.jobstatus.initialized)
        self.assertFalse(self.jobstatus.appended)
        self.assertFalse(self.jobstatus.created)
        self.assertFalse(self.jobstatus.submitted)
        self.assertFalse(self.jobstatus.running)
        self.assertFalse(self.jobstatus.aborted)
        self.assertFalse(self.jobstatus.collect)
        self.assertFalse(self.jobstatus.suspended)
        self.assertFalse(self.jobstatus.refresh)
        self.assertFalse(self.jobstatus.busy)
        self.assertFalse(self.jobstatus.finished)

    def test_appended(self):
        self.jobstatus.appended = True
        self.assertFalse(self.jobstatus.initialized)
        self.assertTrue(self.jobstatus.appended)
        self.assertFalse(self.jobstatus.created)
        self.assertFalse(self.jobstatus.submitted)
        self.assertFalse(self.jobstatus.running)
        self.assertFalse(self.jobstatus.aborted)
        self.assertFalse(self.jobstatus.collect)
        self.assertFalse(self.jobstatus.suspended)
        self.assertFalse(self.jobstatus.refresh)
        self.assertFalse(self.jobstatus.busy)
        self.assertFalse(self.jobstatus.finished)

    def test_created(self):
        self.jobstatus.created = True
        self.assertFalse(self.jobstatus.initialized)
        self.assertFalse(self.jobstatus.appended)
        self.assertTrue(self.jobstatus.created)
        self.assertFalse(self.jobstatus.submitted)
        self.assertFalse(self.jobstatus.running)
        self.assertFalse(self.jobstatus.aborted)
        self.assertFalse(self.jobstatus.collect)
        self.assertFalse(self.jobstatus.suspended)
        self.assertFalse(self.jobstatus.refresh)
        self.assertFalse(self.jobstatus.busy)
        self.assertFalse(self.jobstatus.finished)

    def test_submitted(self):
        self.jobstatus.submitted = True
        self.assertFalse(self.jobstatus.initialized)
        self.assertFalse(self.jobstatus.appended)
        self.assertFalse(self.jobstatus.created)
        self.assertTrue(self.jobstatus.submitted)
        self.assertFalse(self.jobstatus.running)
        self.assertFalse(self.jobstatus.aborted)
        self.assertFalse(self.jobstatus.collect)
        self.assertFalse(self.jobstatus.suspended)
        self.assertFalse(self.jobstatus.refresh)
        self.assertFalse(self.jobstatus.busy)
        self.assertFalse(self.jobstatus.finished)

    def test_running(self):
        self.jobstatus.running = True
        self.assertFalse(self.jobstatus.initialized)
        self.assertFalse(self.jobstatus.appended)
        self.assertFalse(self.jobstatus.created)
        self.assertFalse(self.jobstatus.submitted)
        self.assertTrue(self.jobstatus.running)
        self.assertFalse(self.jobstatus.aborted)
        self.assertFalse(self.jobstatus.collect)
        self.assertFalse(self.jobstatus.suspended)
        self.assertFalse(self.jobstatus.refresh)
        self.assertFalse(self.jobstatus.busy)
        self.assertFalse(self.jobstatus.finished)

    def test_aborted(self):
        self.jobstatus.aborted = True
        self.assertFalse(self.jobstatus.initialized)
        self.assertFalse(self.jobstatus.appended)
        self.assertFalse(self.jobstatus.created)
        self.assertFalse(self.jobstatus.submitted)
        self.assertFalse(self.jobstatus.running)
        self.assertTrue(self.jobstatus.aborted)
        self.assertFalse(self.jobstatus.collect)
        self.assertFalse(self.jobstatus.suspended)
        self.assertFalse(self.jobstatus.refresh)
        self.assertFalse(self.jobstatus.busy)
        self.assertFalse(self.jobstatus.finished)

    def test_collect(self):
        self.jobstatus.collect = True
        self.assertFalse(self.jobstatus.initialized)
        self.assertFalse(self.jobstatus.appended)
        self.assertFalse(self.jobstatus.created)
        self.assertFalse(self.jobstatus.submitted)
        self.assertFalse(self.jobstatus.running)
        self.assertFalse(self.jobstatus.aborted)
        self.assertTrue(self.jobstatus.collect)
        self.assertFalse(self.jobstatus.suspended)
        self.assertFalse(self.jobstatus.refresh)
        self.assertFalse(self.jobstatus.busy)
        self.assertFalse(self.jobstatus.finished)

    def test_suspended(self):
        self.jobstatus.suspended = True
        self.assertFalse(self.jobstatus.initialized)
        self.assertFalse(self.jobstatus.appended)
        self.assertFalse(self.jobstatus.created)
        self.assertFalse(self.jobstatus.submitted)
        self.assertFalse(self.jobstatus.running)
        self.assertFalse(self.jobstatus.aborted)
        self.assertFalse(self.jobstatus.collect)
        self.assertTrue(self.jobstatus.suspended)
        self.assertFalse(self.jobstatus.refresh)
        self.assertFalse(self.jobstatus.busy)
        self.assertFalse(self.jobstatus.finished)

    def test_refresh(self):
        self.jobstatus.refresh = True
        self.assertFalse(self.jobstatus.initialized)
        self.assertFalse(self.jobstatus.appended)
        self.assertFalse(self.jobstatus.created)
        self.assertFalse(self.jobstatus.submitted)
        self.assertFalse(self.jobstatus.running)
        self.assertFalse(self.jobstatus.aborted)
        self.assertFalse(self.jobstatus.collect)
        self.assertFalse(self.jobstatus.suspended)
        self.assertTrue(self.jobstatus.refresh)
        self.assertFalse(self.jobstatus.busy)
        self.assertFalse(self.jobstatus.finished)

    def test_busy(self):
        self.jobstatus.busy = True
        self.assertFalse(self.jobstatus.initialized)
        self.assertFalse(self.jobstatus.appended)
        self.assertFalse(self.jobstatus.created)
        self.assertFalse(self.jobstatus.submitted)
        self.assertFalse(self.jobstatus.running)
        self.assertFalse(self.jobstatus.aborted)
        self.assertFalse(self.jobstatus.collect)
        self.assertFalse(self.jobstatus.suspended)
        self.assertFalse(self.jobstatus.refresh)
        self.assertTrue(self.jobstatus.busy)
        self.assertFalse(self.jobstatus.finished)

    def test_finished(self):
        self.jobstatus.finished = True
        self.assertFalse(self.jobstatus.initialized)
        self.assertFalse(self.jobstatus.appended)
        self.assertFalse(self.jobstatus.created)
        self.assertFalse(self.jobstatus.submitted)
        self.assertFalse(self.jobstatus.running)
        self.assertFalse(self.jobstatus.aborted)
        self.assertFalse(self.jobstatus.collect)
        self.assertFalse(self.jobstatus.suspended)
        self.assertFalse(self.jobstatus.refresh)
        self.assertFalse(self.jobstatus.busy)
        self.assertTrue(self.jobstatus.finished)

    def test_string(self):
        self.jobstatus.string = 'initialized'
        self.assertTrue(self.jobstatus.initialized)
        self.assertEqual(str(self.jobstatus), 'initialized')
        self.assertEqual(self.jobstatus.string, 'initialized')
        self.jobstatus.string = 'appended'
        self.assertTrue(self.jobstatus.appended)
        self.assertEqual(str(self.jobstatus), 'appended')
        self.assertEqual(self.jobstatus.string, 'appended')
        self.jobstatus.string = 'created'
        self.assertTrue(self.jobstatus.created)
        self.assertEqual(str(self.jobstatus), 'created')
        self.assertEqual(self.jobstatus.string, 'created')
        self.jobstatus.string = 'submitted'
        self.assertTrue(self.jobstatus.submitted)
        self.assertEqual(str(self.jobstatus), 'submitted')
        self.assertEqual(self.jobstatus.string, 'submitted')
        self.jobstatus.string = 'running'
        self.assertTrue(self.jobstatus.running)
        self.assertEqual(str(self.jobstatus), 'running')
        self.assertEqual(self.jobstatus.string, 'running')
        self.jobstatus.string = 'aborted'
        self.assertTrue(self.jobstatus.aborted)
        self.assertEqual(str(self.jobstatus), 'aborted')
        self.assertEqual(self.jobstatus.string, 'aborted')
        self.jobstatus.string = 'collect'
        self.assertTrue(self.jobstatus.collect)
        self.assertEqual(str(self.jobstatus), 'collect')
        self.assertEqual(self.jobstatus.string, 'collect')
        self.jobstatus.string = 'suspended'
        self.assertTrue(self.jobstatus.suspended)
        self.assertEqual(str(self.jobstatus), 'suspended')
        self.assertEqual(self.jobstatus.string, 'suspended')
        self.jobstatus.string = 'refresh'
        self.assertTrue(self.jobstatus.refresh)
        self.assertEqual(str(self.jobstatus), 'refresh')
        self.assertEqual(self.jobstatus.string, 'refresh')
        self.jobstatus.string = 'busy'
        self.assertTrue(self.jobstatus.busy)
        self.assertEqual(str(self.jobstatus), 'busy')
        self.assertEqual(self.jobstatus.string, 'busy')
        self.jobstatus.string = 'finished'
        self.assertTrue(self.jobstatus.finished)
        self.assertEqual(str(self.jobstatus), 'finished')
        self.assertEqual(self.jobstatus.string, 'finished')

    def test_database_connection(self):
        current_status = self.database.get_item_by_id(self.job_id)["status"]
        self.assertTrue(self.jobstatus_database.initialized)
        self.assertEqual(current_status, str(self.jobstatus_database))
        self.jobstatus_database.created = True
        new_status = self.database.get_item_by_id(self.job_id)["status"]
        self.assertTrue(self.jobstatus_database.created)
        self.assertNotEqual(current_status, str(self.jobstatus_database))
        self.assertEqual(new_status, str(self.jobstatus_database))
        self.database.item_update({'status': 'finished'}, self.job_id)
        finished_status = self.database.get_item_by_id(self.job_id)["status"]
        self.assertTrue(self.jobstatus_database.finished)
        self.assertNotEqual(current_status, str(self.jobstatus_database))
        self.assertNotEqual(new_status, str(self.jobstatus_database))
        self.assertEqual(finished_status, str(self.jobstatus_database))