AIdeaText commited on
Commit
5af2aec
·
verified ·
1 Parent(s): 59e689e

Upload 2 files

Browse files
modules/database/mongo_db.py CHANGED
@@ -1,83 +1,62 @@
1
- from .database_init import get_mongodb
2
- import logging
3
-
4
- logger = logging.getLogger(__name__)
5
-
6
- def get_collection(collection_name):
7
- try:
8
- db = get_mongodb()
9
- if db is None:
10
- logger.error(f"No se pudo obtener la base de datos para {collection_name}")
11
- return None
12
-
13
- collection = db[collection_name]
14
- logger.info(f"Colección {collection_name} obtenida exitosamente")
15
- return collection
16
-
17
- except Exception as e:
18
- logger.error(f"Error al obtener colección {collection_name}: {str(e)}")
19
- return None
20
-
21
-
22
-
23
-
24
- ########################################################
25
- #def insert_document(collection_name, document):
26
- # collection = get_collection(collection_name)
27
- # try:
28
- # result = collection.insert_one(document)
29
- # logger.info(f"Documento insertado en {collection_name} con ID: {result.inserted_id}")
30
- # return result.inserted_id
31
- # except Exception as e:
32
- # logger.error(f"Error al insertar documento en {collection_name}: {str(e)}")
33
- # return None
34
- ##################################################
35
- def insert_document(collection_name, document):
36
- try:
37
- collection = get_collection(collection_name)
38
- if collection is None:
39
- logger.error(f"No se pudo obtener la colección {collection_name}")
40
- return None
41
-
42
- # Insertar documento
43
- result = collection.insert_one(document)
44
- logger.debug(f"Resultado de inserción: {result.inserted_id}")
45
- return result.inserted_id
46
-
47
- except Exception as e:
48
- logger.error(f"Error al insertar documento en {collection_name}: {str(e)}")
49
- return None
50
-
51
- #######################################################
52
- def find_documents(collection_name, query, sort=None, limit=None):
53
- collection = get_collection(collection_name)
54
- try:
55
- cursor = collection.find(query)
56
- if sort:
57
- cursor = cursor.sort(sort)
58
- if limit:
59
- cursor = cursor.limit(limit)
60
- return list(cursor)
61
- except Exception as e:
62
- logger.error(f"Error al buscar documentos en {collection_name}: {str(e)}")
63
- return []
64
-
65
- def update_document(collection_name, query, update):
66
- collection = get_collection(collection_name)
67
- try:
68
- result = collection.update_one(query, update)
69
- logger.info(f"Documento actualizado en {collection_name}: {result.modified_count} modificado(s)")
70
- return result.modified_count
71
- except Exception as e:
72
- logger.error(f"Error al actualizar documento en {collection_name}: {str(e)}")
73
- return 0
74
-
75
- def delete_document(collection_name, query):
76
- collection = get_collection(collection_name)
77
- try:
78
- result = collection.delete_one(query)
79
- logger.info(f"Documento eliminado de {collection_name}: {result.deleted_count} eliminado(s)")
80
- return result.deleted_count
81
- except Exception as e:
82
- logger.error(f"Error al eliminar documento de {collection_name}: {str(e)}")
83
  return 0
 
1
+ from .database_init import get_mongodb
2
+ import logging
3
+
4
+ logger = logging.getLogger(__name__)
5
+
6
+ def get_collection(collection_name):
7
+ try:
8
+ db = get_mongodb()
9
+ if db is None:
10
+ logger.error(f"No se pudo obtener la base de datos para {collection_name}")
11
+ return None
12
+
13
+ collection = db[collection_name]
14
+ logger.info(f"Colección {collection_name} obtenida exitosamente")
15
+ return collection
16
+
17
+ except Exception as e:
18
+ logger.error(f"Error al obtener colección {collection_name}: {str(e)}")
19
+ return None
20
+
21
+ def insert_document(collection_name, document):
22
+ collection = get_collection(collection_name)
23
+ try:
24
+ result = collection.insert_one(document)
25
+ logger.info(f"Documento insertado en {collection_name} con ID: {result.inserted_id}")
26
+ return result.inserted_id
27
+ except Exception as e:
28
+ logger.error(f"Error al insertar documento en {collection_name}: {str(e)}")
29
+ return None
30
+
31
+ def find_documents(collection_name, query, sort=None, limit=None):
32
+ collection = get_collection(collection_name)
33
+ try:
34
+ cursor = collection.find(query)
35
+ if sort:
36
+ cursor = cursor.sort(sort)
37
+ if limit:
38
+ cursor = cursor.limit(limit)
39
+ return list(cursor)
40
+ except Exception as e:
41
+ logger.error(f"Error al buscar documentos en {collection_name}: {str(e)}")
42
+ return []
43
+
44
+ def update_document(collection_name, query, update):
45
+ collection = get_collection(collection_name)
46
+ try:
47
+ result = collection.update_one(query, update)
48
+ logger.info(f"Documento actualizado en {collection_name}: {result.modified_count} modificado(s)")
49
+ return result.modified_count
50
+ except Exception as e:
51
+ logger.error(f"Error al actualizar documento en {collection_name}: {str(e)}")
52
+ return 0
53
+
54
+ def delete_document(collection_name, query):
55
+ collection = get_collection(collection_name)
56
+ try:
57
+ result = collection.delete_one(query)
58
+ logger.info(f"Documento eliminado de {collection_name}: {result.deleted_count} eliminado(s)")
59
+ return result.deleted_count
60
+ except Exception as e:
61
+ logger.error(f"Error al eliminar documento de {collection_name}: {str(e)}")
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
62
  return 0
modules/database/semantic_mongo_db.py CHANGED
@@ -1,167 +1,160 @@
1
- #/modules/database/semantic_mongo_db.py
2
-
3
- # Importaciones estándar
4
- import io
5
- import base64
6
- from datetime import datetime, timezone
7
- import logging
8
-
9
- # Importaciones de terceros
10
- import matplotlib.pyplot as plt
11
-
12
- # Importaciones locales
13
- from .mongo_db import (
14
- get_collection,
15
- insert_document,
16
- find_documents,
17
- update_document,
18
- delete_document
19
- )
20
-
21
- # Configuración del logger
22
- logger = logging.getLogger(__name__) # Cambiado de name a __name__
23
- COLLECTION_NAME = 'student_semantic_analysis'
24
-
25
- ############################################################
26
-
27
- def store_student_semantic_result(username, text, analysis_result):
28
- """
29
- Guarda el resultado del análisis semántico en MongoDB.
30
- """
31
- try:
32
- # El gráfico ya viene en bytes, solo necesitamos codificarlo a base64
33
- concept_graph_data = None
34
- if 'concept_graph' in analysis_result and analysis_result['concept_graph'] is not None:
35
- try:
36
- # Ya está en bytes, solo codificar a base64
37
- concept_graph_data = base64.b64encode(analysis_result['concept_graph']).decode('utf-8')
38
- except Exception as e:
39
- logger.error(f"Error al codificar gráfico conceptual: {str(e)}")
40
-
41
- # Crear documento para MongoDB
42
- analysis_document = {
43
- 'username': username,
44
- 'timestamp': datetime.now(timezone.utc).isoformat(),
45
- 'text': text,
46
- 'analysis_type': 'semantic',
47
- 'key_concepts': analysis_result.get('key_concepts', []),
48
- 'concept_graph': concept_graph_data
49
- }
50
-
51
- logger.debug(f"Intentando insertar documento para usuario: {username}")
52
- logger.debug(f"Documento: {analysis_document}")
53
-
54
- # Insertar en MongoDB
55
- result = insert_document(COLLECTION_NAME, analysis_document)
56
- if result:
57
- logger.info(f"Análisis semántico guardado con ID: {result} para el usuario: {username}")
58
- return True
59
-
60
- logger.error("No se pudo insertar el documento en MongoDB")
61
- return False
62
-
63
- except Exception as e:
64
- logger.error(f"Error al guardar el análisis semántico: {str(e)}")
65
- return False
66
-
67
-
68
-
69
- ####################################################################################
70
- def get_student_semantic_analysis(username, limit=10):
71
- """
72
- Recupera los análisis semánticos de un estudiante.
73
- """
74
- try:
75
- # Obtener la colección
76
- collection = get_collection(COLLECTION_NAME)
77
- if collection is None: # Cambiado de if not collection a if collection is None
78
- logger.error("No se pudo obtener la colección semantic")
79
- return []
80
-
81
- # Consulta
82
- query = {
83
- "username": username,
84
- "analysis_type": "semantic"
85
- }
86
-
87
- # Campos a recuperar
88
- projection = {
89
- "timestamp": 1,
90
- "concept_graph": 1,
91
- "_id": 1
92
- }
93
-
94
- # Ejecutar consulta
95
- try:
96
- cursor = collection.find(query, projection).sort("timestamp", -1)
97
- if limit:
98
- cursor = cursor.limit(limit)
99
-
100
- # Convertir cursor a lista
101
- results = list(cursor)
102
- logger.info(f"Recuperados {len(results)} análisis semánticos para {username}")
103
- return results
104
-
105
- except Exception as db_error:
106
- logger.error(f"Error en la consulta a MongoDB: {str(db_error)}")
107
- return []
108
-
109
- except Exception as e:
110
- logger.error(f"Error recuperando análisis semántico: {str(e)}")
111
- return []
112
- ####################################################################################################
113
-
114
-
115
- def update_student_semantic_analysis(analysis_id, update_data):
116
- """
117
- Actualiza un análisis semántico existente.
118
- Args:
119
- analysis_id: ID del análisis a actualizar
120
- update_data: Datos a actualizar
121
- """
122
- query = {"_id": analysis_id}
123
- update = {"$set": update_data}
124
- return update_document(COLLECTION_NAME, query, update)
125
-
126
- def delete_student_semantic_analysis(analysis_id):
127
- """
128
- Elimina un análisis semántico.
129
- Args:
130
- analysis_id: ID del análisis a eliminar
131
- """
132
- query = {"_id": analysis_id}
133
- return delete_document(COLLECTION_NAME, query)
134
-
135
- def get_student_semantic_data(username):
136
- """
137
- Obtiene todos los análisis semánticos de un estudiante.
138
- Args:
139
- username: Nombre del usuario
140
- Returns:
141
- dict: Diccionario con todos los análisis del estudiante
142
- """
143
- analyses = get_student_semantic_analysis(username, limit=None)
144
-
145
- formatted_analyses = []
146
- for analysis in analyses:
147
- formatted_analysis = {
148
- 'timestamp': analysis['timestamp'],
149
- 'text': analysis['text'],
150
- 'key_concepts': analysis['key_concepts'],
151
- 'entities': analysis['entities']
152
- # No incluimos los gráficos en el resumen general
153
- }
154
- formatted_analyses.append(formatted_analysis)
155
-
156
- return {
157
- 'entries': formatted_analyses
158
- }
159
-
160
- # Exportar las funciones necesarias
161
- __all__ = [
162
- 'store_student_semantic_result',
163
- 'get_student_semantic_analysis',
164
- 'update_student_semantic_analysis',
165
- 'delete_student_semantic_analysis',
166
- 'get_student_semantic_data'
167
  ]
 
1
+ #/modules/database/semantic_mongo_db.py
2
+
3
+ # Importaciones estándar
4
+ import io
5
+ import base64
6
+ from datetime import datetime, timezone
7
+ import logging
8
+
9
+ # Importaciones de terceros
10
+ import matplotlib.pyplot as plt
11
+
12
+ # Importaciones locales
13
+ from .mongo_db import (
14
+ get_collection,
15
+ insert_document,
16
+ find_documents,
17
+ update_document,
18
+ delete_document
19
+ )
20
+
21
+ # Configuración del logger
22
+ logger = logging.getLogger(__name__) # Cambiado de name a __name__
23
+ COLLECTION_NAME = 'student_semantic_analysis'
24
+
25
+ def store_student_semantic_result(username, text, analysis_result):
26
+ """
27
+ Guarda el resultado del análisis semántico en MongoDB.
28
+ """
29
+ try:
30
+ # El gráfico ya viene en bytes, solo necesitamos codificarlo a base64
31
+ concept_graph_data = None
32
+ if 'concept_graph' in analysis_result and analysis_result['concept_graph'] is not None:
33
+ try:
34
+ # Ya está en bytes, solo codificar a base64
35
+ concept_graph_data = base64.b64encode(analysis_result['concept_graph']).decode('utf-8')
36
+ except Exception as e:
37
+ logger.error(f"Error al codificar gráfico conceptual: {str(e)}")
38
+
39
+ # Crear documento para MongoDB
40
+ analysis_document = {
41
+ 'username': username,
42
+ 'timestamp': datetime.now(timezone.utc).isoformat(),
43
+ 'text': text,
44
+ 'analysis_type': 'semantic',
45
+ 'key_concepts': analysis_result.get('key_concepts', []),
46
+ 'concept_graph': concept_graph_data
47
+ }
48
+
49
+ # Insertar en MongoDB
50
+ result = insert_document(COLLECTION_NAME, analysis_document)
51
+ if result:
52
+ logger.info(f"Análisis semántico guardado con ID: {result} para el usuario: {username}")
53
+ return True
54
+
55
+ logger.error("No se pudo insertar el documento en MongoDB")
56
+ return False
57
+
58
+ except Exception as e:
59
+ logger.error(f"Error al guardar el análisis semántico: {str(e)}")
60
+ return False
61
+
62
+ ####################################################################################
63
+ def get_student_semantic_analysis(username, limit=10):
64
+ """
65
+ Recupera los análisis semánticos de un estudiante.
66
+ """
67
+ try:
68
+ # Obtener la colección
69
+ collection = get_collection(COLLECTION_NAME)
70
+ if collection is None: # Cambiado de if not collection a if collection is None
71
+ logger.error("No se pudo obtener la colección semantic")
72
+ return []
73
+
74
+ # Consulta
75
+ query = {
76
+ "username": username,
77
+ "analysis_type": "semantic"
78
+ }
79
+
80
+ # Campos a recuperar
81
+ projection = {
82
+ "timestamp": 1,
83
+ "concept_graph": 1,
84
+ "_id": 1
85
+ }
86
+
87
+ # Ejecutar consulta
88
+ try:
89
+ cursor = collection.find(query, projection).sort("timestamp", -1)
90
+ if limit:
91
+ cursor = cursor.limit(limit)
92
+
93
+ # Convertir cursor a lista
94
+ results = list(cursor)
95
+ logger.info(f"Recuperados {len(results)} análisis semánticos para {username}")
96
+ return results
97
+
98
+ except Exception as db_error:
99
+ logger.error(f"Error en la consulta a MongoDB: {str(db_error)}")
100
+ return []
101
+
102
+ except Exception as e:
103
+ logger.error(f"Error recuperando análisis semántico: {str(e)}")
104
+ return []
105
+ ####################################################################################################
106
+
107
+
108
+ def update_student_semantic_analysis(analysis_id, update_data):
109
+ """
110
+ Actualiza un análisis semántico existente.
111
+ Args:
112
+ analysis_id: ID del análisis a actualizar
113
+ update_data: Datos a actualizar
114
+ """
115
+ query = {"_id": analysis_id}
116
+ update = {"$set": update_data}
117
+ return update_document(COLLECTION_NAME, query, update)
118
+
119
+ def delete_student_semantic_analysis(analysis_id):
120
+ """
121
+ Elimina un análisis semántico.
122
+ Args:
123
+ analysis_id: ID del análisis a eliminar
124
+ """
125
+ query = {"_id": analysis_id}
126
+ return delete_document(COLLECTION_NAME, query)
127
+
128
+ def get_student_semantic_data(username):
129
+ """
130
+ Obtiene todos los análisis semánticos de un estudiante.
131
+ Args:
132
+ username: Nombre del usuario
133
+ Returns:
134
+ dict: Diccionario con todos los análisis del estudiante
135
+ """
136
+ analyses = get_student_semantic_analysis(username, limit=None)
137
+
138
+ formatted_analyses = []
139
+ for analysis in analyses:
140
+ formatted_analysis = {
141
+ 'timestamp': analysis['timestamp'],
142
+ 'text': analysis['text'],
143
+ 'key_concepts': analysis['key_concepts'],
144
+ 'entities': analysis['entities']
145
+ # No incluimos los gráficos en el resumen general
146
+ }
147
+ formatted_analyses.append(formatted_analysis)
148
+
149
+ return {
150
+ 'entries': formatted_analyses
151
+ }
152
+
153
+ # Exportar las funciones necesarias
154
+ __all__ = [
155
+ 'store_student_semantic_result',
156
+ 'get_student_semantic_analysis',
157
+ 'update_student_semantic_analysis',
158
+ 'delete_student_semantic_analysis',
159
+ 'get_student_semantic_data'
 
 
 
 
 
 
 
160
  ]