forked from EDA2021-1-SEC02-G07/LabMaps-S02-G07
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathcontroller.py
150 lines (116 loc) · 3.55 KB
/
controller.py
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
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
"""
* Copyright 2020, Departamento de sistemas y Computación,
* Universidad de Los Andes
*
*
* Desarrolado para el curso ISIS1225 - Estructuras de Datos y Algoritmos
*
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along withthis program. If not, see <http://www.gnu.org/licenses/>.
"""
import config as cf
import model
import csv
"""
El controlador se encarga de mediar entre la vista y el modelo.
"""
# Inicialización del Catálogo de libros
def initCatalog():
"""
Llama la funcion de inicializacion del catalogo del modelo.
"""
catalog = model.newCatalog()
return catalog
# Funciones para la carga de datos
def loadData(catalog):
"""
Carga los datos de los archivos y cargar los datos en la
estructura de datos
"""
loadBooks(catalog)
loadTags(catalog)
loadBooksTags(catalog)
def loadBooks(catalog):
"""
Carga los libros del archivo. Por cada libro se indica al
modelo que debe adicionarlo al catalogo.
"""
booksfile = cf.data_dir + 'GoodReads/books-small.csv'
input_file = csv.DictReader(open(booksfile, encoding='utf-8'))
for book in input_file:
model.addBook(catalog, book)
def loadTags(catalog):
"""
Carga todos los tags del archivo e indica al modelo
que los adicione al catalogo
"""
tagsfile = cf.data_dir + 'GoodReads/tags.csv'
input_file = csv.DictReader(open(tagsfile, encoding='utf-8'))
for tag in input_file:
model.addTag(catalog, tag)
def loadBooksTags(catalog):
"""
Carga la información que asocia tags con libros en el catalogo
"""
booktagsfile = cf.data_dir + 'GoodReads/book_tags-small.csv'
input_file = csv.DictReader(open(booktagsfile, encoding='utf-8'))
for booktag in input_file:
model.addBookTag(catalog, booktag)
# Funciones de consulta sobre el catálogo
def getBestBooks(catalog, number):
"""
Retorna los mejores libros según su promedio
"""
bestbooks = model.getBestBooks(catalog, number)
return bestbooks
def countBooksByTag(catalog, tag):
"""
Retorna los libros que fueron etiquetados con el tag
"""
return model.countBooksByTag(catalog, tag)
def booksSize(catalog):
"""
Numero de libros cargados al catalogo
"""
return model.booksSize(catalog)
def authorsSize(catalog):
"""
Numero de autores cargados al catalogo
"""
return model.authorsSize(catalog)
def tagsSize(catalog):
"""
Numero de tags cargados al catalogo
"""
return model.tagsSize(catalog)
def getBooksByAuthor(catalog, authorname):
"""
Retorna los libros de un autor
"""
authorinfo = model.getBooksByAuthor(catalog, authorname)
return authorinfo
def getBooksByTag(catalog, tagname):
"""
Retorna los libros que han sido marcados con
una etiqueta
"""
books = model.getBooksByTag(catalog, tagname)
return books
def getBooksYear(catalog, year):
"""
Retorna los libros que fueron publicados
en un año
"""
books = model.getBooksByYear(catalog, year)
return books