Compare commits

..

No commits in common. "main" and "0.1.1" have entirely different histories.
main ... 0.1.1

6 changed files with 18 additions and 501 deletions

1
.gitignore vendored
View File

@ -1,4 +1,3 @@
dist/ dist/
build/ build/
fiable_db.egg-info/ fiable_db.egg-info/
/fiabledb.json

View File

@ -109,7 +109,14 @@ You can be specific by using the `id`.
```python ```python
fiable_db.delete(id=4) fiable_db.delete(id=4)
# {"id": 4, "rev": 6, "table": "default", "data": {}} # {"id": 4, "rev": 6, "table": "default", "data": None}
```
And you can delete by performing a search for their values:
```python
fiable_db.delete(data={"name": "Javier"})
# {"id": 4, "rev": 6, "table": "default", "data": None}
``` ```
### Step 5: Find one ### Step 5: Find one

View File

@ -2,7 +2,6 @@ from typing import Dict, Tuple, Union, Sequence, TypedDict
from functools import reduce from functools import reduce
import json import json
from os import path from os import path
from copy import deepcopy
# Variables # Variables
FILE = "fiabledb.json" FILE = "fiabledb.json"
@ -20,8 +19,8 @@ class TypeData(TypedDict):
Type_Data_List = Tuple[TypeData] Type_Data_List = Tuple[TypeData]
Type_Add_Data = Union[Dict, Sequence[Dict]] 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]], None] Type_Update_Return = Union[Tuple[Tuple[int, int, Dict]]]
Type_Delete_Return = Union[Tuple[Tuple[int, int, Dict]], None] Type_Delete_Return = Union[Tuple[Tuple[int, int, Dict]]]
Type_Find_One_Return = TypeData Type_Find_One_Return = TypeData
Type_Find_All_Return = Tuple[Type_Find_One_Return] Type_Find_All_Return = Tuple[Type_Find_One_Return]
@ -38,7 +37,6 @@ def get_next_id(table: str = "default") -> int:
return row["id"] return row["id"]
else: else:
return current_id return current_id
last_id = reduce(get_id, database[::-1], None) last_id = reduce(get_id, database[::-1], None)
# Return the next id, or 1 if there is no last id # Return the next id, or 1 if there is no last id
return last_id + 1 if last_id else 1 return last_id + 1 if last_id else 1
@ -111,31 +109,6 @@ def get_database() -> Type_Data_List:
return database return database
def get_pos_by_id(id: int, table: str = "") -> int:
"""Get the position of the data by id
Args:
id (int): The id of the data
table (str, optional): The table to search in. Defaults to "".
Returns:
int: The position of the data
"""
global database
def get_key(
current_key: Union[TypeData, None], key_and_row: TypeData
) -> Union[int, None]:
"""Function to get the key of the data"""
if (
current_key is None
and key_and_row[1]["id"] == id
and key_and_row[1]["table"] == table
):
return key_and_row[0]
return current_key
return reduce(get_key, list(enumerate(database))[::-1], None)
def add(new_data: Type_Add_Data, table: str = "default") -> Type_Add_Return: def add(new_data: Type_Add_Data, table: str = "default") -> Type_Add_Return:
"""Add data to the database """Add data to the database
Args: Args:
@ -158,7 +131,7 @@ def add(new_data: Type_Add_Data, table: str = "default") -> Type_Add_Return:
def update( def update(
id: int, new_data: dict, table: str = "default", force: bool = False id: int, new_data: dict, table: str = "", force: bool = False
) -> Type_Update_Return: ) -> Type_Update_Return:
"""Update data in the database """Update data in the database
Args: Args:
@ -167,27 +140,12 @@ def update(
table (str, optional): The table to update. Defaults to "". table (str, optional): The table to update. Defaults to "".
force (bool, optional): Force the update. Defaults to False. force (bool, optional): Force the update. Defaults to False.
Returns: Returns:
dict[int, int, dict] or None: The data updated dict[int, int, dict]: The data updated
""" """
global database print("Function not implemented yet")
# Get the key to update
key = get_pos_by_id(id, table)
if key is not None:
row = deepcopy(database[key])
my_new_data = deepcopy(new_data)
if force:
row["data"] = my_new_data
else:
row["data"].update(my_new_data)
new_rev = row["rev"] + 1
new_data_to_row = row["data"]
new_row = {"id": id, "rev": new_rev, "table": table, "data": new_data_to_row}
database.append(new_row)
return new_row
return None
def delete(id: int, table: str = "default") -> Type_Delete_Return: def delete(id: int, data: dict, table: str = "") -> Type_Delete_Return:
"""Delete data from the database """Delete data from the database
Args: Args:
id (int): The id of the data to delete id (int): The id of the data to delete
@ -196,7 +154,7 @@ def delete(id: int, table: str = "default") -> Type_Delete_Return:
Returns: Returns:
dict[int, int, dict]: The data deleted dict[int, int, dict]: The data deleted
""" """
return update(id=id, new_data={}, table=table, force=True) print("Function not implemented yet")
def find_one( def find_one(

View File

@ -1,126 +0,0 @@
from fiable_db import start, add, delete, get_database
def test_delete_simple():
"""Test delete in the default table."""
start()
add(
[
{"name": "Noelia", "age": 34, "height": 165},
{"name": "Juan", "age": 41, "height": 187},
{"name": "Valentina", "age": 12, "height": 142},
]
)
delete(1)
assert get_database() == [
{
"id": 1,
"rev": 1,
"table": "default",
"data": {"name": "Noelia", "age": 34, "height": 165},
},
{
"id": 2,
"rev": 1,
"table": "default",
"data": {"name": "Juan", "age": 41, "height": 187},
},
{
"id": 3,
"rev": 1,
"table": "default",
"data": {"name": "Valentina", "age": 12, "height": 142},
},
{"id": 1, "rev": 2, "table": "default", "data": {}},
]
def test_delete_multiple():
"""Test delete two rows"""
start()
add(
[
{"name": "Noelia", "age": 34, "height": 165},
{"name": "Juan", "age": 41, "height": 187},
{"name": "Valentina", "age": 12, "height": 142},
]
)
delete(2)
delete(3)
assert get_database() == [
{
"id": 1,
"rev": 1,
"table": "default",
"data": {"name": "Noelia", "age": 34, "height": 165},
},
{
"id": 2,
"rev": 1,
"table": "default",
"data": {"name": "Juan", "age": 41, "height": 187},
},
{
"id": 3,
"rev": 1,
"table": "default",
"data": {"name": "Valentina", "age": 12, "height": 142},
},
{"id": 2, "rev": 2, "table": "default", "data": {}},
{"id": 3, "rev": 2, "table": "default", "data": {}},
]
def test_delete_with_table():
"""Test delete two rows"""
start()
add(
[
{"name": "Noelia", "age": 34, "height": 165},
{"name": "Juan", "age": 41, "height": 187},
{"name": "Valentina", "age": 12, "height": 142},
],
table="people",
)
add(
[
{"name": "Mortadelo", "age": 22, "height": 184},
{"name": "Filemon", "age": 25, "height": 185},
],
)
delete(2, table="people")
delete(1)
assert get_database() == [
{
"id": 1,
"rev": 1,
"table": "people",
"data": {"name": "Noelia", "age": 34, "height": 165},
},
{
"id": 2,
"rev": 1,
"table": "people",
"data": {"name": "Juan", "age": 41, "height": 187},
},
{
"id": 3,
"rev": 1,
"table": "people",
"data": {"name": "Valentina", "age": 12, "height": 142},
},
{
"id": 1,
"rev": 1,
"table": "default",
"data": {"name": "Mortadelo", "age": 22, "height": 184},
},
{
"id": 2,
"rev": 1,
"table": "default",
"data": {"name": "Filemon", "age": 25, "height": 185},
},
{"id": 2, "rev": 2, "table": "people", "data": {}},
{"id": 1, "rev": 2, "table": "default", "data": {}},
]

View File

@ -1,320 +0,0 @@
from fiable_db import start, add, update, get_database
def test_update_simple():
"""Test update in the default table."""
start()
add(
[
{"name": "Noelia", "age": 34, "height": 165},
{"name": "Juan", "age": 41, "height": 187},
{"name": "Valentina", "age": 12, "height": 142},
]
)
update(2, {"age": 99})
assert get_database() == [
{
"id": 1,
"rev": 1,
"table": "default",
"data": {"name": "Noelia", "age": 34, "height": 165},
},
{
"id": 2,
"rev": 1,
"table": "default",
"data": {"name": "Juan", "age": 41, "height": 187},
},
{
"id": 3,
"rev": 1,
"table": "default",
"data": {"name": "Valentina", "age": 12, "height": 142},
},
{
"id": 2,
"rev": 2,
"table": "default",
"data": {"name": "Juan", "age": 99, "height": 187},
},
]
update(2, {"name": "Cristo"})
assert get_database() == [
{
"id": 1,
"rev": 1,
"table": "default",
"data": {"name": "Noelia", "age": 34, "height": 165},
},
{
"id": 2,
"rev": 1,
"table": "default",
"data": {"name": "Juan", "age": 41, "height": 187},
},
{
"id": 3,
"rev": 1,
"table": "default",
"data": {"name": "Valentina", "age": 12, "height": 142},
},
{
"id": 2,
"rev": 2,
"table": "default",
"data": {"name": "Juan", "age": 99, "height": 187},
},
{
"id": 2,
"rev": 3,
"table": "default",
"data": {"name": "Cristo", "age": 99, "height": 187},
},
]
update(1, {"height": 150})
assert get_database() == [
{
"id": 1,
"rev": 1,
"table": "default",
"data": {"name": "Noelia", "age": 34, "height": 165},
},
{
"id": 2,
"rev": 1,
"table": "default",
"data": {"name": "Juan", "age": 41, "height": 187},
},
{
"id": 3,
"rev": 1,
"table": "default",
"data": {"name": "Valentina", "age": 12, "height": 142},
},
{
"id": 2,
"rev": 2,
"table": "default",
"data": {"name": "Juan", "age": 99, "height": 187},
},
{
"id": 2,
"rev": 3,
"table": "default",
"data": {"name": "Cristo", "age": 99, "height": 187},
},
{
"id": 1,
"rev": 2,
"table": "default",
"data": {"name": "Noelia", "age": 34, "height": 150},
},
]
def test_update_table():
"""Test update in a table."""
add({"name": "Antony", "age": 77, "height": 188}, table="users")
update(1, {"age": 99}, table="users")
assert get_database() == [
{
"id": 1,
"rev": 1,
"table": "default",
"data": {"name": "Noelia", "age": 34, "height": 165},
},
{
"id": 2,
"rev": 1,
"table": "default",
"data": {"name": "Juan", "age": 41, "height": 187},
},
{
"id": 3,
"rev": 1,
"table": "default",
"data": {"name": "Valentina", "age": 12, "height": 142},
},
{
"id": 2,
"rev": 2,
"table": "default",
"data": {"name": "Juan", "age": 99, "height": 187},
},
{
"id": 2,
"rev": 3,
"table": "default",
"data": {"name": "Cristo", "age": 99, "height": 187},
},
{
"id": 1,
"rev": 2,
"table": "default",
"data": {"name": "Noelia", "age": 34, "height": 150},
},
{
"id": 1,
"rev": 1,
"table": "users",
"data": {"name": "Antony", "age": 77, "height": 188},
},
{
"id": 1,
"rev": 2,
"table": "users",
"data": {"name": "Antony", "age": 99, "height": 188},
},
]
def test_update_table_not_exists():
"""Test update in a table that not exists."""
start()
add({"name": "Antony", "age": 77, "height": 188}, table="users")
update(1, {"name": "David"}, table="boo")
assert get_database() == [
{
"id": 1,
"rev": 1,
"table": "users",
"data": {"name": "Antony", "age": 77, "height": 188},
}
]
def test_update_id_not_exists():
"""Test update with an id that not exists."""
start()
add({"name": "Antony", "age": 77, "height": 188}, table="users")
update(2, {"name": "David"}, table="users")
assert get_database() == [
{
"id": 1,
"rev": 1,
"table": "users",
"data": {"name": "Antony", "age": 77, "height": 188},
}
]
def test_update_multiple_values_default():
"""Test update multiple values in the default table."""
start()
add({"name": "Antony", "age": 77, "height": 188})
add({"name": "Dolores", "age": 32})
update(1, {"name": "David", "age": 9})
assert get_database() == [
{
"id": 1,
"rev": 1,
"table": "default",
"data": {"name": "Antony", "age": 77, "height": 188},
},
{
"id": 2,
"rev": 1,
"table": "default",
"data": {"name": "Dolores", "age": 32},
},
{
"id": 1,
"rev": 2,
"table": "default",
"data": {"name": "David", "age": 9, "height": 188},
},
]
def test_update_multiple_values_table():
"""Test update multiple values in a table."""
start()
add({"name": "Antony", "age": 77, "height": 188}, table="users")
add({"name": "Dolores", "age": 32}, table="users")
update(1, {"name": "David", "age": 9}, table="users")
assert get_database() == [
{
"id": 1,
"rev": 1,
"table": "users",
"data": {"name": "Antony", "age": 77, "height": 188},
},
{
"id": 2,
"rev": 1,
"table": "users",
"data": {"name": "Dolores", "age": 32},
},
{
"id": 1,
"rev": 2,
"table": "users",
"data": {"name": "David", "age": 9, "height": 188},
},
]
def test_update_with_keys_not_exists():
"""Test update with keys that not exists."""
start()
add({"name": "Antony", "age": 77, "height": 188})
add({"name": "Dolores", "age": 32})
update(1, {"is_active": True, "eyes": "blue"})
assert get_database() == [
{
"id": 1,
"rev": 1,
"table": "default",
"data": {
"name": "Antony",
"age": 77,
"height": 188,
},
},
{
"id": 2,
"rev": 1,
"table": "default",
"data": {"name": "Dolores", "age": 32},
},
{
"id": 1,
"rev": 2,
"table": "default",
"data": {
"name": "Antony",
"age": 77,
"height": 188,
"is_active": True,
"eyes": "blue",
},
},
]
def test_update_with_force():
"""Test update with force."""
start()
add({"name": "Antony", "age": 77, "height": 188})
add({"name": "Dolores", "age": 32})
update(1, {"name": "David", "age": 9}, force=True)
assert get_database() == [
{
"id": 1,
"rev": 1,
"table": "default",
"data": {"name": "Antony", "age": 77, "height": 188},
},
{
"id": 2,
"rev": 1,
"table": "default",
"data": {"name": "Dolores", "age": 32},
},
{
"id": 1,
"rev": 2,
"table": "default",
"data": {"name": "David", "age": 9},
},
]

View File

@ -1,6 +1,5 @@
* Tasks * Tasks
** TODO Test Find one ** DONE Add table in add testing
** TODO Function Find one ** IN PROGRESS Test update
** TODO Test Find All ** TODO Function update
** TODO Function Find All