File size: 2,209 Bytes
1bc7a0c
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
import pandas as pd


"""
Small Database for managing prompts, estimates, and votes in a simple arena-like application.
Les données sont stockées dans des fichiers CSV.
Il faut toujours se référer au fichier et pas à la variable en mémoire.
La mémoire est propre à chaque utilisateur. 
Pour être à jour des mises à jours des autres utilisateurs, il faut recharger les données depuis le fichier.
"""

DATABASE = {
    "prompts": {
        "filename": "database/prompts.csv",
        "columns": ["id", "name", "text"],
    },
    "estimates": {
        "filename": "database/estimates.csv",
        "columns": ["id", "prompt_id", "mu", "sigma"],
    },
    "votes": {
        "filename": "database/votes.csv",
        "columns": ["id", "winner_id", "loser_id"],
    },
}


def load(table_name: str) -> pd.DataFrame:
    try:
        result = pd.read_csv(DATABASE[table_name]["filename"])
    except FileNotFoundError:
        result = pd.DataFrame(columns=DATABASE[table_name]["columns"])
    return result


def insert(table_name: str, data: dict) -> None:
    """Inserts data into the specified table.
    Id is automatically generated .
    example:
        db.insert("prompts", {"name": "Test", "text": "This is a test prompt."})
    """
    df = load(table_name)
    data["id"] = 1 if df.empty else df["id"].max() + 1
    df = pd.concat([df, pd.DataFrame([data])], ignore_index=True)
    df.to_csv(DATABASE[table_name]["filename"], index=False)


def update(table_name: str, row_id: int, data: dict) -> None:
    """
    Met à jour les estimations d'un prompt dans la table spécifiée par son id d'estimation.
    Exemple :
        db.update("estimates", 3, {"mu": 25.0, "sigma": 8.3})
    """
    df = load(table_name)
    idx = df.index[df["id"] == row_id]
    if not idx.empty:
        for key, value in data.items():
            df.loc[idx, key] = value
        df.to_csv(DATABASE[table_name]["filename"], index=False)


def replace(table_name: str, df: pd.DataFrame) -> None:
    """
    Remplace la totalité du contenu de la table spécifiée par le DataFrame fourni.
    Exemple :
        db.replace("prompts", df)
    """
    df.to_csv(DATABASE[table_name]["filename"], index=False)