lib: Enable reading and writing text DataFiles
Signed-off-by: Anna Schumaker <Anna@NoWheyCreamery.com>
This commit is contained in:
parent
7b901b8380
commit
e2bb85b854
16
lib/data.py
16
lib/data.py
|
@ -10,6 +10,8 @@ if os.environ.get("EMMENTAL_TESTING"):
|
|||
|
||||
READ = 'rb'
|
||||
WRITE = 'wb'
|
||||
READ_TEXT = 'r'
|
||||
WRITE_TEXT = 'w'
|
||||
|
||||
emmental_data = pathlib.Path(xdg.BaseDirectory.save_data_path(__resource))
|
||||
|
||||
|
@ -21,9 +23,9 @@ class DataFile:
|
|||
self.file = None
|
||||
|
||||
def __enter__(self):
|
||||
if self.mode == WRITE:
|
||||
if self.mode in [ WRITE, WRITE_TEXT ]:
|
||||
self.file = self.temp.open(self.mode)
|
||||
elif self.mode == READ and self.path.exists():
|
||||
elif self.mode in [ READ, READ_TEXT ] and self.path.exists():
|
||||
self.file = self.path.open(self.mode)
|
||||
return self
|
||||
|
||||
|
@ -31,7 +33,7 @@ class DataFile:
|
|||
if self.file:
|
||||
self.file.flush()
|
||||
self.file.close()
|
||||
if self.mode == WRITE:
|
||||
if self.mode in [ WRITE, WRITE_TEXT ] and exp_type == None:
|
||||
self.temp.replace(self.path)
|
||||
self.file = None
|
||||
return exp_type == None
|
||||
|
@ -43,6 +45,10 @@ class DataFile:
|
|||
if self.file:
|
||||
pickle.dump(obj, self.file, pickle.HIGHEST_PROTOCOL)
|
||||
|
||||
def read(self):
|
||||
if self.file:
|
||||
return self.file.read()
|
||||
|
||||
def remove(self):
|
||||
if self.file == None:
|
||||
self.path.unlink(missing_ok = True)
|
||||
|
@ -50,3 +56,7 @@ class DataFile:
|
|||
def unpickle(self):
|
||||
if self.file:
|
||||
return pickle.load(self.file)
|
||||
|
||||
def write(self, text):
|
||||
if self.file:
|
||||
self.file.write(text)
|
||||
|
|
|
@ -20,6 +20,8 @@ class TestDataModule(unittest.TestCase):
|
|||
self.assertTrue(testing_data.is_dir())
|
||||
self.assertEqual(data.READ, 'rb')
|
||||
self.assertEqual(data.WRITE, 'wb')
|
||||
self.assertEqual(data.READ_TEXT, 'r')
|
||||
self.assertEqual(data.WRITE_TEXT, 'w')
|
||||
|
||||
def test_data_file_init(self):
|
||||
f = data.DataFile("test.file", data.READ)
|
||||
|
@ -68,3 +70,45 @@ class TestDataModule(unittest.TestCase):
|
|||
f = data.DataFile("test.file", data.READ)
|
||||
f.remove()
|
||||
self.assertFalse(f.exists())
|
||||
|
||||
def test_data_file_read_write_text(self):
|
||||
test = "test saving a string"
|
||||
with data.DataFile("test.file", data.READ_TEXT) as f:
|
||||
self.assertIsNone(f.file)
|
||||
f.write(test)
|
||||
self.assertIsNone(f.read())
|
||||
f.remove()
|
||||
self.assertFalse(f.exists())
|
||||
|
||||
with data.DataFile("test.file", data.WRITE_TEXT) as f:
|
||||
self.assertIsNotNone(f.file)
|
||||
self.assertEqual(pathlib.Path(f.file.name), testing_temp)
|
||||
self.assertFalse(f.exists())
|
||||
self.assertTrue(testing_temp.exists())
|
||||
f.write(test)
|
||||
f.remove()
|
||||
self.assertFalse(f.exists())
|
||||
|
||||
self.assertIsNone(f.file)
|
||||
self.assertFalse(testing_temp.exists())
|
||||
self.assertTrue(f.exists())
|
||||
|
||||
with data.DataFile("test.file", data.READ_TEXT) as f:
|
||||
self.assertIsNotNone(f.file)
|
||||
self.assertEqual(pathlib.Path(f.file.name), testing_file)
|
||||
txt = f.read()
|
||||
self.assertEqual(test, txt)
|
||||
f.remove()
|
||||
self.assertTrue(f.exists())
|
||||
|
||||
f = data.DataFile("test.file", data.READ)
|
||||
f.remove()
|
||||
self.assertFalse(f.exists())
|
||||
|
||||
def test_data_file_exception(self):
|
||||
f = data.DataFile("test.file", data.WRITE_TEXT)
|
||||
with self.assertRaises(Exception):
|
||||
with f:
|
||||
f.write("test")
|
||||
raise Exception("Test Exception")
|
||||
self.assertFalse(f.exists())
|
||||
|
|
Loading…
Reference in New Issue