Esempio n. 1
0
    def test_buffered_mode_force_write_with_file_modification(self):
        job = self.project.open_job(dict(a=0))
        job.init()
        job.doc.a = True
        x = job.doc.a
        self.assertEqual(job.doc.a, x)
        with self.assertRaises(BufferedFileError):
            with signac.buffered():
                self.assertEqual(job.doc.a, x)
                job.doc.a = not x
                self.assertEqual(job.doc.a, not x)
                sleep(1.0)
                with open(job.doc._filename, 'wb') as file:
                    file.write(json.dumps({'a': x}).encode())
        self.assertFalse(signac.is_buffered())
        self.assertEqual(job.doc.a, x)

        with signac.buffered(force_write=True):
            self.assertEqual(job.doc.a, x)
            job.doc.a = not x
            self.assertEqual(job.doc.a, not x)
            sleep(1.0)
            with open(job.doc._filename, 'wb') as file:
                file.write(json.dumps({'a': x}).encode())
        self.assertEqual(job.doc.a, not x)
Esempio n. 2
0
    def test_buffered_mode_change_buffer_size(self):
        assert not signac.is_buffered()
        with signac.buffered(buffer_size=12):
            assert signac.buffered()
            assert signac.get_buffer_size() == 12

        assert not signac.is_buffered()
        with pytest.raises(TypeError):
            with signac.buffered(buffer_size=True):
                pass

        assert not signac.is_buffered()
        with signac.buffered(buffer_size=12):
            assert signac.buffered()
            assert signac.get_buffer_size() == 12
            with signac.buffered(buffer_size=12):
                assert signac.buffered()
                assert signac.get_buffer_size() == 12

        assert not signac.is_buffered()
        with pytest.raises(BufferException):
            with signac.buffered(buffer_size=12):
                assert signac.buffered()
                assert signac.get_buffer_size() == 12
                with signac.buffered(buffer_size=14):
                    pass
Esempio n. 3
0
    def test_buffered_mode_change_buffer_size(self):
        self.assertFalse(signac.is_buffered())
        with signac.buffered(buffer_size=12):
            self.assertTrue(signac.buffered())
            self.assertEqual(signac.get_buffer_size(), 12)

        self.assertFalse(signac.is_buffered())
        with self.assertRaises(TypeError):
            with signac.buffered(buffer_size=True):
                pass

        self.assertFalse(signac.is_buffered())
        with signac.buffered(buffer_size=12):
            self.assertTrue(signac.buffered())
            self.assertEqual(signac.get_buffer_size(), 12)
            with signac.buffered(buffer_size=12):
                self.assertTrue(signac.buffered())
                self.assertEqual(signac.get_buffer_size(), 12)

        self.assertFalse(signac.is_buffered())
        with self.assertRaises(BufferException):
            with signac.buffered(buffer_size=12):
                self.assertTrue(signac.buffered())
                self.assertEqual(signac.get_buffer_size(), 12)
                with signac.buffered(buffer_size=14):
                    pass
Esempio n. 4
0
    def test_buffered_mode_force_write_with_file_modification(self):
        job = self.project.open_job(dict(a=0))
        job.init()
        job.doc.a = True
        x = job.doc.a
        assert job.doc.a == x
        with pytest.raises(BufferedFileError):
            with signac.buffered():
                assert job.doc.a == x
                job.doc.a = not x
                assert job.doc.a == (not x)
                sleep(1.0)
                with open(job.doc._filename, "wb") as file:
                    file.write(json.dumps({"a": x}).encode())
        assert not signac.is_buffered()
        assert job.doc.a == x

        with signac.buffered(force_write=True):
            assert job.doc.a == x
            job.doc.a = not x
            assert job.doc.a == (not x)
            sleep(1.0)
            with open(job.doc._filename, "wb") as file:
                file.write(json.dumps({"a": x}).encode())
        assert job.doc.a == (not x)
Esempio n. 5
0
    def test_enter_exit_buffered_mode(self):
        self.assertFalse(signac.is_buffered())
        with signac.buffered():
            self.assertTrue(signac.is_buffered())
        self.assertFalse(signac.is_buffered())

        self.assertFalse(signac.is_buffered())
        with signac.buffered():
            self.assertTrue(signac.is_buffered())
            with signac.buffered():
                self.assertTrue(signac.is_buffered())
            self.assertTrue(signac.is_buffered())
        self.assertFalse(signac.is_buffered())
Esempio n. 6
0
    def test_enter_exit_buffered_mode(self):
        assert not signac.is_buffered()
        with signac.buffered():
            assert signac.is_buffered()
        assert not signac.is_buffered()

        assert not signac.is_buffered()
        with signac.buffered():
            assert signac.is_buffered()
            with signac.buffered():
                assert signac.is_buffered()
            assert signac.is_buffered()
        assert not signac.is_buffered()
Esempio n. 7
0
    def test_basic_and_nested(self):
        job = self.project.open_job(dict(a=0))
        job.init()
        self.assertNotIn('a', job.doc)
        with signac.buffered():
            self.assertNotIn('a', job.doc)
            job.doc.a = 0
            self.assertEqual(job.doc.a, 0)
        self.assertEqual(job.doc.a, 0)

        with signac.buffered():
            self.assertEqual(job.doc.a, 0)
            job.doc.a = 1
            self.assertEqual(job.doc.a, 1)
            with signac.buffered():
                self.assertEqual(job.doc.a, 1)
                job.doc.a = 2
                self.assertEqual(job.doc.a, 2)
            self.assertEqual(job.doc.a, 2)
        self.assertEqual(job.doc.a, 2)
Esempio n. 8
0
    def test_basic_and_nested(self):
        job = self.project.open_job(dict(a=0))
        job.init()
        assert "a" not in job.doc
        with signac.buffered():
            assert "a" not in job.doc
            job.doc.a = 0
            assert job.doc.a == 0
        assert job.doc.a == 0

        with signac.buffered():
            assert job.doc.a == 0
            job.doc.a = 1
            assert job.doc.a == 1
            with signac.buffered():
                assert job.doc.a == 1
                job.doc.a = 2
                assert job.doc.a == 2
            assert job.doc.a == 2
        assert job.doc.a == 2
Esempio n. 9
0
 def test_force_write_mode_with_permission_error(self):
     job = self.project.open_job(dict(a=0))
     job.init()
     job.doc.a = True
     x = job.doc.a
     path = os.path.dirname(job.doc._filename)
     mode = os.stat(path).st_mode
     logging.disable(logging.CRITICAL)
     try:
         self.assertEqual(job.doc.a, x)
         with self.assertRaises(BufferedFileError):
             with signac.buffered():
                 self.assertEqual(job.doc.a, x)
                 job.doc.a = not x
                 self.assertEqual(job.doc.a, not x)
                 os.chmod(path, S_IREAD)  # Trigger permissions error
     finally:
         logging.disable(logging.NOTSET)
         os.chmod(path, mode)
     self.assertEqual(job.doc.a, x)
Esempio n. 10
0
    def test_buffered_mode_force_write(self):
        with signac.buffered(force_write=False):
            with signac.buffered(force_write=False):
                pass
        self.assertFalse(signac.is_buffered())

        with signac.buffered(force_write=True):
            with signac.buffered(force_write=True):
                pass

        with self.assertRaises(Error):
            with signac.buffered():
                with signac.buffered(force_write=True):
                    pass
        self.assertFalse(signac.is_buffered())
Esempio n. 11
0
    def test_buffered_mode_force_write(self):
        with signac.buffered(force_write=False):
            with signac.buffered(force_write=False):
                pass
        assert not signac.is_buffered()

        with signac.buffered(force_write=True):
            with signac.buffered(force_write=True):
                pass

        with pytest.raises(Error):
            with signac.buffered():
                with signac.buffered(force_write=True):
                    pass
        assert not signac.is_buffered()
Esempio n. 12
0
    def test_buffered_mode_change_buffer_size(self):
        assert not signac.is_buffered()
        with signac.buffered(buffer_size=12):
            assert signac.buffered()
            assert signac.get_buffer_size() == 12

        assert not signac.is_buffered()

        assert not signac.is_buffered()
        with signac.buffered(buffer_size=12):
            assert signac.buffered()
            assert signac.get_buffer_size() == 12
            with signac.buffered():
                assert signac.buffered()
                assert signac.get_buffer_size() == 12

        assert not signac.is_buffered()
Esempio n. 13
0
    def test_integration(self):
        def routine():
            for i in range(1, 4):
                job = self.project.open_job(dict(a=i))
                job.doc.a = True

            for job in self.project:
                self.assertTrue(job.sp.a > 0)
                job.sp.a = -job.sp.a
                self.assertTrue(job.sp.a < 0)
                job2 = self.project.open_job(id=job.get_id())
                self.assertTrue(job2.sp.a < 0)
                job.sp.a = -job.sp.a
                self.assertTrue(job.sp.a > 0)
                job2 = self.project.open_job(id=job.get_id())
                self.assertTrue(job2.sp.a > 0)

            for job in self.project:
                self.assertTrue(job.doc.a)
                job.doc.a = not job.doc.a
                self.assertFalse(job.doc.a)
                job.doc.a = not job.doc.a
                self.assertTrue(job.doc.a)

        routine()
        with signac.buffered():
            self.assertTrue(signac.is_buffered())
            routine()

        for job in self.project:
            x = job.doc.a
            with signac.buffered():
                self.assertEqual(job.doc.a, x)
                job.doc.a = not job.doc.a
                self.assertEqual(job.doc.a, not x)
                job2 = self.project.open_job(id=job.get_id())
                self.assertEqual(job2.doc.a, not x)
            self.assertEqual(job.doc.a, not x)
            self.assertEqual(job2.doc.a, not x)

            job.doc.a = x
            with signac.buffered():
                self.assertEqual(job.doc.a, x)
                job.doc.a = not x
                self.assertEqual(job.doc.a, not x)
                job2.doc.a = x
                self.assertEqual(job.doc.a, x)
                self.assertEqual(job2.doc.a, x)
            self.assertEqual(job.doc.a, x)
            self.assertEqual(job2.doc.a, x)

            job.doc.a = x
            with signac.buffered():
                self.assertEqual(job.doc.a, x)
                job.doc.a = not x
                self.assertEqual(job.doc.a, not x)
                job2.doc.a = x
                self.assertEqual(job.doc.a, x)
                self.assertEqual(job2.doc.a, x)
                job.doc.a = not x
                self.assertEqual(job.doc.a, not x)
                self.assertEqual(job2.doc.a, not x)
            self.assertEqual(job.doc.a, not x)
            self.assertEqual(job2.doc.a, not x)

            self.assertEqual(job.doc.a, not x)
            with self.assertRaises(BufferedFileError) as cm:
                with signac.buffered():
                    self.assertEqual(job.doc.a, not x)
                    job.doc.a = x
                    self.assertEqual(job.doc.a, x)
                    sleep(1.0)
                    with open(job.doc._filename, 'wb') as file:
                        file.write(json.dumps({'a': not x}).encode())
            self.assertIn(job.doc._filename, cm.exception.files)

            break  # only test for one job
Esempio n. 14
0
    def test_integration(self):
        def routine():
            for i in range(1, 4):
                job = self.project.open_job(dict(a=i))
                job.doc.a = True

            for job in self.project:
                assert job.sp.a > 0
                job.sp.a = -job.sp.a
                assert job.sp.a < 0
                with pytest.deprecated_call():
                    job2 = self.project.open_job(id=job.get_id())
                assert job2.sp.a < 0
                job.sp.a = -job.sp.a
                assert job.sp.a > 0
                with pytest.deprecated_call():
                    job2 = self.project.open_job(id=job.get_id())
                assert job2.sp.a > 0

            for job in self.project:
                assert job.doc.a
                job.doc.a = not job.doc.a
                assert not job.doc.a
                job.doc.a = not job.doc.a
                assert job.doc.a

        routine()
        assert signac.get_buffer_load() == 0
        with signac.buffered():
            assert signac.is_buffered()
            routine()
            assert signac.get_buffer_load() > 0
        assert signac.get_buffer_load() == 0

        for job in self.project:
            x = job.doc.a
            with signac.buffered():
                assert signac.get_buffer_load() == 0
                assert job.doc.a == x
                assert signac.get_buffer_load() > 0
                job.doc.a = not job.doc.a
                assert job.doc.a == (not x)
                with pytest.deprecated_call():
                    job2 = self.project.open_job(id=job.get_id())
                assert job2.doc.a == (not x)
            assert signac.get_buffer_load() == 0
            assert job.doc.a == (not x)
            assert job2.doc.a == (not x)

            job.doc.a = x
            with signac.buffered():
                assert job.doc.a == x
                job.doc.a = not x
                assert job.doc.a == (not x)
                job2.doc.a = x
                assert job.doc.a == x
                assert job2.doc.a == x
            assert job.doc.a == x
            assert job2.doc.a == x

            job.doc.a = x
            with signac.buffered():
                assert job.doc.a == x
                job.doc.a = not x
                assert job.doc.a == (not x)
                job2.doc.a = x
                assert job.doc.a == x
                assert job2.doc.a == x
                job.doc.a = not x
                assert job.doc.a == (not x)
                assert job2.doc.a == (not x)
            assert job.doc.a == (not x)
            assert job2.doc.a == (not x)

            assert job.doc.a == (not x)
            with pytest.raises(BufferedFileError) as cm:
                with signac.buffered():
                    assert job.doc.a == (not x)
                    job.doc.a = x
                    assert job.doc.a == x
                    sleep(1.0)
                    with open(job.doc._filename, "wb") as file:
                        file.write(json.dumps({"a": not x}).encode())
            assert job.doc._filename in cm.value.files

            break  # only test for one job