[Export] Remove pickle format
Pickling directly from a DB object will also save DB related attributes, namely the state of the object. When exporting values from a DB select, they will be in detached state, which means on the import, the session will not insert the object back into the DB, it already assumes they are there.
This commit is contained in:
parent
6574165f8f
commit
2cf0ba4374
@ -34,6 +34,7 @@ class ExportCommand(Command):
|
|||||||
with open(self.fn, "w", newline="") as f:
|
with open(self.fn, "w", newline="") as f:
|
||||||
json.dump([e.serialize() for e in values], f, indent=4)
|
json.dump([e.serialize() for e in values], f, indent=4)
|
||||||
case ExportFormat.pickle:
|
case ExportFormat.pickle:
|
||||||
|
raise AttributeError("pickle export not working at the moment!")
|
||||||
with open(self.fn, "wb") as f:
|
with open(self.fn, "wb") as f:
|
||||||
pickle.dump(values, f)
|
pickle.dump(values, f)
|
||||||
|
|
||||||
@ -58,6 +59,7 @@ class ImportCommand(Command):
|
|||||||
raise ImportFailedError(e)
|
raise ImportFailedError(e)
|
||||||
|
|
||||||
case ExportFormat.pickle:
|
case ExportFormat.pickle:
|
||||||
|
raise AttributeError("pickle import not working at the moment!")
|
||||||
with open(self.fn, "rb") as f:
|
with open(self.fn, "rb") as f:
|
||||||
values = pickle.load(f)
|
values = pickle.load(f)
|
||||||
|
|
||||||
|
|||||||
@ -79,6 +79,15 @@ class TestBackup:
|
|||||||
|
|
||||||
assert originals == imported
|
assert originals == imported
|
||||||
|
|
||||||
|
command = ExportCommand(client, what, file, ExportFormat.pickle)
|
||||||
|
with pytest.raises(AttributeError):
|
||||||
|
command.execute()
|
||||||
|
|
||||||
|
command = ImportCommand(other, what, file, ExportFormat.pickle)
|
||||||
|
with pytest.raises(AttributeError):
|
||||||
|
command.execute()
|
||||||
|
|
||||||
|
|
||||||
@pytest.mark.parametrize("input, what", not_serializable)
|
@pytest.mark.parametrize("input, what", not_serializable)
|
||||||
def test_try_backup_not_serializable(
|
def test_try_backup_not_serializable(
|
||||||
self, tmp_path: Path, input: Sequence[Any], what: Type[Any]
|
self, tmp_path: Path, input: Sequence[Any], what: Type[Any]
|
||||||
|
|||||||
@ -1,7 +1,6 @@
|
|||||||
from collections.abc import Sequence
|
from collections.abc import Sequence
|
||||||
import json
|
import json
|
||||||
from pathlib import Path
|
from pathlib import Path
|
||||||
import pickle
|
|
||||||
import pytest
|
import pytest
|
||||||
from typing import Any, cast
|
from typing import Any, cast
|
||||||
|
|
||||||
@ -68,28 +67,23 @@ class TestCommand:
|
|||||||
def test_export_pickle(self, tmp_path: Path, client: Client):
|
def test_export_pickle(self, tmp_path: Path, client: Client):
|
||||||
file = tmp_path / "test.pickle"
|
file = tmp_path / "test.pickle"
|
||||||
command = ExportCommand(client, Transaction, file, ExportFormat.pickle)
|
command = ExportCommand(client, Transaction, file, ExportFormat.pickle)
|
||||||
command.execute()
|
with pytest.raises(AttributeError):
|
||||||
|
command.execute()
|
||||||
|
|
||||||
with open(file, "rb") as f:
|
def test_import_json(self, tmp_path: Path, client: Client):
|
||||||
result = pickle.load(f)
|
|
||||||
assert result == mocks.transactions.simple
|
|
||||||
|
|
||||||
cast(FakeClient, client).transactions = mocks.transactions.simple_transformed
|
|
||||||
command.execute()
|
|
||||||
|
|
||||||
with open(file, "rb") as f:
|
|
||||||
result = pickle.load(f)
|
|
||||||
assert result == mocks.transactions.simple_transformed
|
|
||||||
|
|
||||||
def test_import(self, tmp_path: Path, client: Client):
|
|
||||||
file = tmp_path / "test"
|
file = tmp_path / "test"
|
||||||
for format in list(ExportFormat):
|
command = ExportCommand(client, Transaction, file, ExportFormat.JSON)
|
||||||
command = ExportCommand(client, Transaction, file, format)
|
command.execute()
|
||||||
command.execute()
|
|
||||||
|
|
||||||
command = ImportCommand(client, Transaction, file, format)
|
command = ImportCommand(client, Transaction, file, ExportFormat.JSON)
|
||||||
command.execute()
|
command.execute()
|
||||||
|
|
||||||
transactions = cast(FakeClient, client).transactions
|
transactions = cast(FakeClient, client).transactions
|
||||||
assert len(transactions) > 0
|
assert len(transactions) > 0
|
||||||
assert transactions == client.select(Transaction)
|
assert transactions == client.select(Transaction)
|
||||||
|
|
||||||
|
def test_import_pickle(self, tmp_path: Path, client: Client):
|
||||||
|
file = tmp_path / "test"
|
||||||
|
command = ExportCommand(client, Transaction, file, ExportFormat.pickle)
|
||||||
|
with pytest.raises(AttributeError):
|
||||||
|
command.execute()
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user