This repository was archived by the owner on Jun 4, 2025. It is now read-only.
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathmodels.py
More file actions
113 lines (83 loc) · 3.25 KB
/
models.py
File metadata and controls
113 lines (83 loc) · 3.25 KB
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
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
import random
import string
from datetime import datetime
from typing import Optional
from pydantic import BaseModel
from typing_extensions import override
# Modelos - Version de FastAPI
# Helper function to generate unique IDs
def generate_id():
return ''.join(random.choices(string.ascii_uppercase + string.digits, k=5))
# Models
class EntradaLista(BaseModel):
entrada_id: str
texto: str
class Autor(BaseModel):
autor_id: str
nombre: str
class Lista(BaseModel):
lista_id: str
nombre: str
_entradas: dict[str, EntradaLista] = {}
autor: Optional[Autor] = None
def add_entrada(self, entrada: EntradaLista):
if entrada.entrada_id not in self._entradas:
self._entradas[entrada.entrada_id] = entrada
def get_entradas(self) -> list[EntradaLista]:
return list(self._entradas.values())
def get_entrada(self, entrada_id: str) -> EntradaLista:
return self._entradas.get(entrada_id)
def delete_entrada(self, entrada_id: str) -> bool:
if entrada_id in self._entradas:
del self._entradas[entrada_id]
return True
return False
class ListaCompra(Lista):
_cantidades: dict[str, int] = {}
def get_cantidad(self, entrada_id: str) -> int:
return self._cantidades.get(entrada_id, 0)
@override
def add_entrada(self, entrada: EntradaLista, cantidad: int = 1):
super().add_entrada(entrada)
self._cantidades[entrada.entrada_id] = cantidad
class ListaTrabajo(Lista):
fecha_limite: Optional[datetime] = None
class TodoList:
def __init__(self):
self._listas: dict[str, Lista] = {}
self._autores: dict[str, Autor] = {}
def add_lista(self, lista: Lista):
if lista.lista_id not in self._listas:
self._listas[lista.lista_id] = lista
def get_lista(self, lista_id: str) -> Lista:
return self._listas.get(lista_id)
def delete_lista(self, lista_id: str):
if lista_id in self._listas:
del self._listas[lista_id]
def add_autor(self, autor: Autor):
if autor.autor_id not in self._autores:
self._autores[autor.autor_id] = autor
def get_autor(self, autor_id: str) -> Autor:
return self._autores.get(autor_id)
def delete_autor(self, autor_id: str) -> bool:
if autor_id in self._autores:
del self._autores[autor_id]
return True
return False
def clear_listas(self):
self._listas.clear()
def get_listas(self) -> list[Lista]:
return list(self._listas.values())
def get_listas_compra(self) -> list[ListaCompra]:
return [l for l in self._listas.values() if isinstance(l, ListaCompra)]
def get_listas_trabajo(self) -> list[ListaTrabajo]:
return [l for l in self._listas.values() if isinstance(l, ListaTrabajo)]
def clear_autores(self):
self._autores.clear()
def get_autores(self) -> list[Autor]:
return list(self._autores.values())
def get_listas_by_autor(self, autor_id: str) -> list[Lista]:
return [l for l in self._listas.values() if l.autor and l.autor.autor_id == autor_id]
def delete_listas_by_autor(self, autor_id: str):
for l in self.get_listas_by_autor(autor_id):
self.delete_lista(l.lista_id)