diff --git a/README.md b/README.md index f50f0f7..75cf8c0 100644 --- a/README.md +++ b/README.md @@ -208,7 +208,7 @@ fiable_db.find_one(id=1) # Default table Save the database to a file. ```python -fiable_db.save(filename, data) +fiable_db.save() ``` ### Other help functions @@ -229,6 +229,14 @@ Load a file into the database. fiable_db.load(filename) ``` +### Save file + +Save a file into the database. + +```python +fiable_db.save(filename) +``` + ## Implementations in other languages - [Clojure](https://github.com/Toni-zgz/db_inmutable). diff --git a/fiable_db.py b/fiable_db.py index a3ad9b8..6b09282 100644 --- a/fiable_db.py +++ b/fiable_db.py @@ -17,8 +17,7 @@ class TypeData(TypedDict): Type_Data_List = Tuple[TypeData] Type_Add_Data = Union[Dict, Sequence[Dict]] -Type_Add_Return = Union[Tuple[int, int, Dict], - Tuple[Tuple[int, int, Dict]], None] +Type_Add_Return = Union[Tuple[int, int, Dict], Tuple[Tuple[int, int, Dict]], None] Type_Update_Return = Union[Tuple[Tuple[int, int, Dict]]] Type_Delete_Return = Union[Tuple[Tuple[int, int, Dict]]] Type_Find_One_Return = TypeData @@ -26,6 +25,7 @@ Type_Find_All_Return = Tuple[Type_Find_One_Return] # Functions + def get_next_id(table: str = "default") -> int: """Get the next id for a table""" global database @@ -39,18 +39,20 @@ def start(file_name: str = "") -> str: Returns: str: The file used """ + global FILE global database - my_file_name = file_name if file_name else FILE + my_file_name = file_name if file_name != "" else FILE if path.exists(my_file_name): # Load the database load(my_file_name) else: # Create the database - save(my_file_name, database) + database = [] + save(my_file_name) return my_file_name -def save(file_name: str = "", data: TypeData = {}) -> bool: +def save(file_name: str = "") -> bool: """Save the database Args: file_name (str, optional): The file to save to. Defaults to "". @@ -58,10 +60,11 @@ def save(file_name: str = "", data: TypeData = {}) -> bool: Returns: bool: True if the data was saved, False otherwise """ + global FILE global database - my_file_name = file_name if file_name else FILE + my_file_name = file_name if file_name != "" else FILE with open(my_file_name, "w") as f: - database = json.dump({}, f) + json.dump(database, f) return True diff --git a/test/test_add.py b/test/test_add.py index 46c1117..c9acab3 100644 --- a/test/test_add.py +++ b/test/test_add.py @@ -11,7 +11,6 @@ def test_add_two(): """Add two items to the database.""" add({"name": "John", "age": 12}) add({"name": "Jane", "age": 34}) - print(get_database()) assert get_database() == [ {"id": 1, "rev": 1, "data": {"name": "John", "age": 42}}, {"id": 2, "rev": 1, "data": {"name": "John", "age": 12}}, diff --git a/test/test_save.py b/test/test_save.py new file mode 100644 index 0000000..44a4e1c --- /dev/null +++ b/test/test_save.py @@ -0,0 +1,47 @@ +import os +from fiable_db import start, add, save, get_database, load + +filename = "fiabledb.json" + +def delete_file(): + """Delete the database file.""" + if os.path.exists(filename): + os.remove(filename) + +def test_save_empty(): + """Test that save() works when the database is empty.""" + delete_file() + start() + save() + global database + database = [] + load() + assert get_database() == [] + + +def test_save_one(): + """Test that save() works when the database has one entry.""" + delete_file() + start() + add({"name": "John", "age": 30}) + save() + global database + database = [] + load() + assert get_database() == [{"id": 1, "rev": 1, "data": {"name": "John", "age": 30}}] + + +def test_save_two(): + """Test that save() works when the database has two entries.""" + delete_file() + start() + add({"name": "John", "age": 30}) + add({"name": "Jane", "age": 28}) + save() + global database + database = [] + load() + assert get_database() == [ + {"id": 1, "rev": 1, "data": {"name": "John", "age": 30}}, + {"id": 2, "rev": 1, "data": {"name": "Jane", "age": 28}}, + ]