iatoolkit 0.59.1__tar.gz → 0.59.2__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.

Potentially problematic release.


This version of iatoolkit might be problematic. Click here for more details.

Files changed (118) hide show
  1. {iatoolkit-0.59.1 → iatoolkit-0.59.2}/PKG-INFO +1 -1
  2. {iatoolkit-0.59.1 → iatoolkit-0.59.2}/pyproject.toml +1 -1
  3. {iatoolkit-0.59.1 → iatoolkit-0.59.2}/src/iatoolkit/base_company.py +3 -1
  4. {iatoolkit-0.59.1 → iatoolkit-0.59.2}/src/iatoolkit/iatoolkit.py +1 -1
  5. {iatoolkit-0.59.1 → iatoolkit-0.59.2}/src/iatoolkit/repositories/models.py +1 -1
  6. iatoolkit-0.59.2/src/iatoolkit/services/user_feedback_service.py +103 -0
  7. {iatoolkit-0.59.1 → iatoolkit-0.59.2}/src/iatoolkit/static/js/chat_feedback.js +1 -3
  8. {iatoolkit-0.59.1 → iatoolkit-0.59.2}/src/iatoolkit/views/user_feedback_api_view.py +0 -10
  9. {iatoolkit-0.59.1 → iatoolkit-0.59.2}/src/iatoolkit.egg-info/PKG-INFO +1 -1
  10. iatoolkit-0.59.1/src/iatoolkit/services/user_feedback_service.py +0 -64
  11. {iatoolkit-0.59.1 → iatoolkit-0.59.2}/readme.md +0 -0
  12. {iatoolkit-0.59.1 → iatoolkit-0.59.2}/requirements.txt +0 -0
  13. {iatoolkit-0.59.1 → iatoolkit-0.59.2}/setup.cfg +0 -0
  14. {iatoolkit-0.59.1 → iatoolkit-0.59.2}/src/iatoolkit/__init__.py +0 -0
  15. {iatoolkit-0.59.1 → iatoolkit-0.59.2}/src/iatoolkit/cli_commands.py +0 -0
  16. {iatoolkit-0.59.1 → iatoolkit-0.59.2}/src/iatoolkit/common/__init__.py +0 -0
  17. {iatoolkit-0.59.1 → iatoolkit-0.59.2}/src/iatoolkit/common/exceptions.py +0 -0
  18. {iatoolkit-0.59.1 → iatoolkit-0.59.2}/src/iatoolkit/common/routes.py +0 -0
  19. {iatoolkit-0.59.1 → iatoolkit-0.59.2}/src/iatoolkit/common/session_manager.py +0 -0
  20. {iatoolkit-0.59.1 → iatoolkit-0.59.2}/src/iatoolkit/common/util.py +0 -0
  21. {iatoolkit-0.59.1 → iatoolkit-0.59.2}/src/iatoolkit/company_registry.py +0 -0
  22. {iatoolkit-0.59.1 → iatoolkit-0.59.2}/src/iatoolkit/infra/__init__.py +0 -0
  23. {iatoolkit-0.59.1 → iatoolkit-0.59.2}/src/iatoolkit/infra/call_service.py +0 -0
  24. {iatoolkit-0.59.1 → iatoolkit-0.59.2}/src/iatoolkit/infra/connectors/__init__.py +0 -0
  25. {iatoolkit-0.59.1 → iatoolkit-0.59.2}/src/iatoolkit/infra/connectors/file_connector.py +0 -0
  26. {iatoolkit-0.59.1 → iatoolkit-0.59.2}/src/iatoolkit/infra/connectors/file_connector_factory.py +0 -0
  27. {iatoolkit-0.59.1 → iatoolkit-0.59.2}/src/iatoolkit/infra/connectors/google_cloud_storage_connector.py +0 -0
  28. {iatoolkit-0.59.1 → iatoolkit-0.59.2}/src/iatoolkit/infra/connectors/google_drive_connector.py +0 -0
  29. {iatoolkit-0.59.1 → iatoolkit-0.59.2}/src/iatoolkit/infra/connectors/local_file_connector.py +0 -0
  30. {iatoolkit-0.59.1 → iatoolkit-0.59.2}/src/iatoolkit/infra/connectors/s3_connector.py +0 -0
  31. {iatoolkit-0.59.1 → iatoolkit-0.59.2}/src/iatoolkit/infra/gemini_adapter.py +0 -0
  32. {iatoolkit-0.59.1 → iatoolkit-0.59.2}/src/iatoolkit/infra/google_chat_app.py +0 -0
  33. {iatoolkit-0.59.1 → iatoolkit-0.59.2}/src/iatoolkit/infra/llm_client.py +0 -0
  34. {iatoolkit-0.59.1 → iatoolkit-0.59.2}/src/iatoolkit/infra/llm_proxy.py +0 -0
  35. {iatoolkit-0.59.1 → iatoolkit-0.59.2}/src/iatoolkit/infra/llm_response.py +0 -0
  36. {iatoolkit-0.59.1 → iatoolkit-0.59.2}/src/iatoolkit/infra/mail_app.py +0 -0
  37. {iatoolkit-0.59.1 → iatoolkit-0.59.2}/src/iatoolkit/infra/openai_adapter.py +0 -0
  38. {iatoolkit-0.59.1 → iatoolkit-0.59.2}/src/iatoolkit/infra/redis_session_manager.py +0 -0
  39. {iatoolkit-0.59.1 → iatoolkit-0.59.2}/src/iatoolkit/repositories/__init__.py +0 -0
  40. {iatoolkit-0.59.1 → iatoolkit-0.59.2}/src/iatoolkit/repositories/database_manager.py +0 -0
  41. {iatoolkit-0.59.1 → iatoolkit-0.59.2}/src/iatoolkit/repositories/document_repo.py +0 -0
  42. {iatoolkit-0.59.1 → iatoolkit-0.59.2}/src/iatoolkit/repositories/llm_query_repo.py +0 -0
  43. {iatoolkit-0.59.1 → iatoolkit-0.59.2}/src/iatoolkit/repositories/profile_repo.py +0 -0
  44. {iatoolkit-0.59.1 → iatoolkit-0.59.2}/src/iatoolkit/repositories/tasks_repo.py +0 -0
  45. {iatoolkit-0.59.1 → iatoolkit-0.59.2}/src/iatoolkit/repositories/vs_repo.py +0 -0
  46. {iatoolkit-0.59.1 → iatoolkit-0.59.2}/src/iatoolkit/services/__init__.py +0 -0
  47. {iatoolkit-0.59.1 → iatoolkit-0.59.2}/src/iatoolkit/services/auth_service.py +0 -0
  48. {iatoolkit-0.59.1 → iatoolkit-0.59.2}/src/iatoolkit/services/benchmark_service.py +0 -0
  49. {iatoolkit-0.59.1 → iatoolkit-0.59.2}/src/iatoolkit/services/branding_service.py +0 -0
  50. {iatoolkit-0.59.1 → iatoolkit-0.59.2}/src/iatoolkit/services/dispatcher_service.py +0 -0
  51. {iatoolkit-0.59.1 → iatoolkit-0.59.2}/src/iatoolkit/services/document_service.py +0 -0
  52. {iatoolkit-0.59.1 → iatoolkit-0.59.2}/src/iatoolkit/services/excel_service.py +0 -0
  53. {iatoolkit-0.59.1 → iatoolkit-0.59.2}/src/iatoolkit/services/file_processor_service.py +0 -0
  54. {iatoolkit-0.59.1 → iatoolkit-0.59.2}/src/iatoolkit/services/history_service.py +0 -0
  55. {iatoolkit-0.59.1 → iatoolkit-0.59.2}/src/iatoolkit/services/jwt_service.py +0 -0
  56. {iatoolkit-0.59.1 → iatoolkit-0.59.2}/src/iatoolkit/services/load_documents_service.py +0 -0
  57. {iatoolkit-0.59.1 → iatoolkit-0.59.2}/src/iatoolkit/services/mail_service.py +0 -0
  58. {iatoolkit-0.59.1 → iatoolkit-0.59.2}/src/iatoolkit/services/onboarding_service.py +0 -0
  59. {iatoolkit-0.59.1 → iatoolkit-0.59.2}/src/iatoolkit/services/profile_service.py +0 -0
  60. {iatoolkit-0.59.1 → iatoolkit-0.59.2}/src/iatoolkit/services/prompt_manager_service.py +0 -0
  61. {iatoolkit-0.59.1 → iatoolkit-0.59.2}/src/iatoolkit/services/query_service.py +0 -0
  62. {iatoolkit-0.59.1 → iatoolkit-0.59.2}/src/iatoolkit/services/search_service.py +0 -0
  63. {iatoolkit-0.59.1 → iatoolkit-0.59.2}/src/iatoolkit/services/sql_service.py +0 -0
  64. {iatoolkit-0.59.1 → iatoolkit-0.59.2}/src/iatoolkit/services/tasks_service.py +0 -0
  65. {iatoolkit-0.59.1 → iatoolkit-0.59.2}/src/iatoolkit/services/user_session_context_service.py +0 -0
  66. {iatoolkit-0.59.1 → iatoolkit-0.59.2}/src/iatoolkit/static/images/fernando.jpeg +0 -0
  67. {iatoolkit-0.59.1 → iatoolkit-0.59.2}/src/iatoolkit/static/js/chat_context_reload.js +0 -0
  68. {iatoolkit-0.59.1 → iatoolkit-0.59.2}/src/iatoolkit/static/js/chat_filepond.js +0 -0
  69. {iatoolkit-0.59.1 → iatoolkit-0.59.2}/src/iatoolkit/static/js/chat_history.js +0 -0
  70. {iatoolkit-0.59.1 → iatoolkit-0.59.2}/src/iatoolkit/static/js/chat_main.js +0 -0
  71. {iatoolkit-0.59.1 → iatoolkit-0.59.2}/src/iatoolkit/static/js/chat_onboarding.js +0 -0
  72. {iatoolkit-0.59.1 → iatoolkit-0.59.2}/src/iatoolkit/static/styles/chat_iatoolkit.css +0 -0
  73. {iatoolkit-0.59.1 → iatoolkit-0.59.2}/src/iatoolkit/static/styles/chat_info.css +0 -0
  74. {iatoolkit-0.59.1 → iatoolkit-0.59.2}/src/iatoolkit/static/styles/chat_modal.css +0 -0
  75. {iatoolkit-0.59.1 → iatoolkit-0.59.2}/src/iatoolkit/static/styles/landing_page.css +0 -0
  76. {iatoolkit-0.59.1 → iatoolkit-0.59.2}/src/iatoolkit/static/styles/llm_output.css +0 -0
  77. {iatoolkit-0.59.1 → iatoolkit-0.59.2}/src/iatoolkit/static/styles/onboarding.css +0 -0
  78. {iatoolkit-0.59.1 → iatoolkit-0.59.2}/src/iatoolkit/system_prompts/format_styles.prompt +0 -0
  79. {iatoolkit-0.59.1 → iatoolkit-0.59.2}/src/iatoolkit/system_prompts/query_main.prompt +0 -0
  80. {iatoolkit-0.59.1 → iatoolkit-0.59.2}/src/iatoolkit/system_prompts/sql_rules.prompt +0 -0
  81. {iatoolkit-0.59.1 → iatoolkit-0.59.2}/src/iatoolkit/templates/_branding_styles.html +0 -0
  82. {iatoolkit-0.59.1 → iatoolkit-0.59.2}/src/iatoolkit/templates/_login_widget.html +0 -0
  83. {iatoolkit-0.59.1 → iatoolkit-0.59.2}/src/iatoolkit/templates/_navbar.html +0 -0
  84. {iatoolkit-0.59.1 → iatoolkit-0.59.2}/src/iatoolkit/templates/about.html +0 -0
  85. {iatoolkit-0.59.1 → iatoolkit-0.59.2}/src/iatoolkit/templates/base.html +0 -0
  86. {iatoolkit-0.59.1 → iatoolkit-0.59.2}/src/iatoolkit/templates/change_password.html +0 -0
  87. {iatoolkit-0.59.1 → iatoolkit-0.59.2}/src/iatoolkit/templates/chat.html +0 -0
  88. {iatoolkit-0.59.1 → iatoolkit-0.59.2}/src/iatoolkit/templates/chat_modals.html +0 -0
  89. {iatoolkit-0.59.1 → iatoolkit-0.59.2}/src/iatoolkit/templates/error.html +0 -0
  90. {iatoolkit-0.59.1 → iatoolkit-0.59.2}/src/iatoolkit/templates/forgot_password.html +0 -0
  91. {iatoolkit-0.59.1 → iatoolkit-0.59.2}/src/iatoolkit/templates/header.html +0 -0
  92. {iatoolkit-0.59.1 → iatoolkit-0.59.2}/src/iatoolkit/templates/index.html +0 -0
  93. {iatoolkit-0.59.1 → iatoolkit-0.59.2}/src/iatoolkit/templates/login_simulation.html +0 -0
  94. {iatoolkit-0.59.1 → iatoolkit-0.59.2}/src/iatoolkit/templates/onboarding_shell.html +0 -0
  95. {iatoolkit-0.59.1 → iatoolkit-0.59.2}/src/iatoolkit/templates/signup.html +0 -0
  96. {iatoolkit-0.59.1 → iatoolkit-0.59.2}/src/iatoolkit/templates/test.html +0 -0
  97. {iatoolkit-0.59.1 → iatoolkit-0.59.2}/src/iatoolkit/views/__init__.py +0 -0
  98. {iatoolkit-0.59.1 → iatoolkit-0.59.2}/src/iatoolkit/views/base_login_view.py +0 -0
  99. {iatoolkit-0.59.1 → iatoolkit-0.59.2}/src/iatoolkit/views/change_password_view.py +0 -0
  100. {iatoolkit-0.59.1 → iatoolkit-0.59.2}/src/iatoolkit/views/chat_token_request_view.py +0 -0
  101. {iatoolkit-0.59.1 → iatoolkit-0.59.2}/src/iatoolkit/views/external_login_view.py +0 -0
  102. {iatoolkit-0.59.1 → iatoolkit-0.59.2}/src/iatoolkit/views/file_store_api_view.py +0 -0
  103. {iatoolkit-0.59.1 → iatoolkit-0.59.2}/src/iatoolkit/views/forgot_password_view.py +0 -0
  104. {iatoolkit-0.59.1 → iatoolkit-0.59.2}/src/iatoolkit/views/history_api_view.py +0 -0
  105. {iatoolkit-0.59.1 → iatoolkit-0.59.2}/src/iatoolkit/views/index_view.py +0 -0
  106. {iatoolkit-0.59.1 → iatoolkit-0.59.2}/src/iatoolkit/views/init_context_api_view.py +0 -0
  107. {iatoolkit-0.59.1 → iatoolkit-0.59.2}/src/iatoolkit/views/llmquery_api_view.py +0 -0
  108. {iatoolkit-0.59.1 → iatoolkit-0.59.2}/src/iatoolkit/views/login_simulation_view.py +0 -0
  109. {iatoolkit-0.59.1 → iatoolkit-0.59.2}/src/iatoolkit/views/login_view.py +0 -0
  110. {iatoolkit-0.59.1 → iatoolkit-0.59.2}/src/iatoolkit/views/prompt_api_view.py +0 -0
  111. {iatoolkit-0.59.1 → iatoolkit-0.59.2}/src/iatoolkit/views/signup_view.py +0 -0
  112. {iatoolkit-0.59.1 → iatoolkit-0.59.2}/src/iatoolkit/views/tasks_review_view.py +0 -0
  113. {iatoolkit-0.59.1 → iatoolkit-0.59.2}/src/iatoolkit/views/tasks_view.py +0 -0
  114. {iatoolkit-0.59.1 → iatoolkit-0.59.2}/src/iatoolkit/views/verify_user_view.py +0 -0
  115. {iatoolkit-0.59.1 → iatoolkit-0.59.2}/src/iatoolkit.egg-info/SOURCES.txt +0 -0
  116. {iatoolkit-0.59.1 → iatoolkit-0.59.2}/src/iatoolkit.egg-info/dependency_links.txt +0 -0
  117. {iatoolkit-0.59.1 → iatoolkit-0.59.2}/src/iatoolkit.egg-info/requires.txt +0 -0
  118. {iatoolkit-0.59.1 → iatoolkit-0.59.2}/src/iatoolkit.egg-info/top_level.txt +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: iatoolkit
3
- Version: 0.59.1
3
+ Version: 0.59.2
4
4
  Summary: IAToolkit
5
5
  Author: Fernando Libedinsky
6
6
  License-Expression: MIT
@@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"
4
4
 
5
5
  [project]
6
6
  name = "iatoolkit"
7
- version = "0.59.1"
7
+ version = "0.59.2"
8
8
  requires-python = ">=3.12"
9
9
  description = "IAToolkit"
10
10
  readme = "readme.md"
@@ -29,11 +29,13 @@ class BaseCompany(ABC):
29
29
  def _create_company(self,
30
30
  short_name: str,
31
31
  name: str,
32
+ parameters: dict | None = None,
32
33
  branding: dict | None = None,
33
- onboarding_cards: dict | None = None
34
+ onboarding_cards: dict | None = None,
34
35
  ) -> Company:
35
36
  company_obj = Company(short_name=short_name,
36
37
  name=name,
38
+ parameters=parameters,
37
39
  branding=branding,
38
40
  onboarding_cards=onboarding_cards)
39
41
  self.company = self.profile_repo.create_company(company_obj)
@@ -19,7 +19,7 @@ from werkzeug.middleware.proxy_fix import ProxyFix
19
19
  from injector import Binder, singleton, Injector
20
20
  from importlib.metadata import version as _pkg_version, PackageNotFoundError
21
21
 
22
- IATOOLKIT_VERSION = "0.59.1"
22
+ IATOOLKIT_VERSION = "0.59.2"
23
23
 
24
24
  # global variable for the unique instance of IAToolkit
25
25
  _iatoolkit_instance: Optional['IAToolkit'] = None
@@ -60,7 +60,7 @@ class Company(Base):
60
60
 
61
61
  branding = Column(JSON, nullable=True)
62
62
  onboarding_cards = Column(JSON, nullable=True)
63
- parameters = Column(JSON, nullable=True, default={})
63
+ parameters = Column(JSON, nullable=True)
64
64
  created_at = Column(DateTime, default=datetime.now)
65
65
  allow_jwt = Column(Boolean, default=True, nullable=True)
66
66
 
@@ -0,0 +1,103 @@
1
+ # Copyright (c) 2024 Fernando Libedinsky
2
+ # Product: IAToolkit
3
+ #
4
+ # IAToolkit is open source software.
5
+
6
+ from iatoolkit.repositories.models import UserFeedback, Company
7
+ from injector import inject
8
+ from iatoolkit.repositories.profile_repo import ProfileRepo
9
+ from iatoolkit.infra.google_chat_app import GoogleChatApp
10
+ from iatoolkit.infra.mail_app import MailApp # <-- 1. Importar MailApp
11
+ import logging
12
+
13
+
14
+ class UserFeedbackService:
15
+ @inject
16
+ def __init__(self,
17
+ profile_repo: ProfileRepo,
18
+ google_chat_app: GoogleChatApp,
19
+ mail_app: MailApp):
20
+ self.profile_repo = profile_repo
21
+ self.google_chat_app = google_chat_app
22
+ self.mail_app = mail_app
23
+
24
+ def _send_google_chat_notification(self, space_name: str, message_text: str):
25
+ """Envía una notificación de feedback a un espacio de Google Chat."""
26
+ try:
27
+ chat_data = {
28
+ "type": "MESSAGE_TRIGGER",
29
+ "space": {"name": space_name},
30
+ "message": {"text": message_text}
31
+ }
32
+ chat_result = self.google_chat_app.send_message(message_data=chat_data)
33
+ if not chat_result.get('success'):
34
+ logging.warning(f"Error al enviar notificación a Google Chat: {chat_result.get('message')}")
35
+ except Exception as e:
36
+ logging.exception(f"Fallo inesperado al enviar notificación a Google Chat: {e}")
37
+
38
+ def _send_email_notification(self, destination_email: str, company_name: str, message_text: str):
39
+ """Envía una notificación de feedback por correo electrónico."""
40
+ try:
41
+ subject = f"Nuevo Feedback de {company_name}"
42
+ # Convertir el texto plano a un HTML simple para mantener los saltos de línea
43
+ html_body = message_text.replace('\n', '<br>')
44
+ self.mail_app.send_email(to=destination_email, subject=subject, body=html_body)
45
+ except Exception as e:
46
+ logging.exception(f"Fallo inesperado al enviar email de feedback: {e}")
47
+
48
+ def _handle_notification(self, company: Company, message_text: str):
49
+ """Lee la configuración de la empresa y envía la notificación al canal correspondiente."""
50
+ feedback_params = company.parameters.get('user_feedback')
51
+ if not isinstance(feedback_params, dict):
52
+ logging.warning(f"No se encontró configuración de 'user_feedback' para la empresa {company.short_name}.")
53
+ return
54
+
55
+ # get channel and destination
56
+ channel = feedback_params.get('channel')
57
+ destination = feedback_params.get('destination')
58
+ if not channel or not destination:
59
+ logging.warning(f"Configuración 'user_feedback' incompleta para {company.short_name}. Faltan 'channel' o 'destination'.")
60
+ return
61
+
62
+ if channel == 'google_chat':
63
+ self._send_google_chat_notification(space_name=destination, message_text=message_text)
64
+ elif channel == 'email':
65
+ self._send_email_notification(destination_email=destination, company_name=company.short_name, message_text=message_text)
66
+ else:
67
+ logging.warning(f"Canal de feedback '{channel}' no reconocido para la empresa {company.short_name}.")
68
+
69
+ def new_feedback(self,
70
+ company_short_name: str,
71
+ message: str,
72
+ user_identifier: str,
73
+ rating: int = None) -> dict:
74
+ try:
75
+ # 1. Validar empresa
76
+ company = self.profile_repo.get_company_by_short_name(company_short_name)
77
+ if not company:
78
+ return {'error': f'No existe la empresa: {company_short_name}'}
79
+
80
+ # 2. Enviar notificación según la configuración de la empresa
81
+ notification_text = (f"*Nuevo feedback de {company_short_name}*:\n"
82
+ f"*Usuario:* {user_identifier}\n"
83
+ f"*Mensaje:* {message}\n"
84
+ f"*Calificación:* {rating if rating is not None else 'N/A'}")
85
+ self._handle_notification(company, notification_text)
86
+
87
+ # 3. Guardar el feedback en la base de datos (independientemente del éxito de la notificación)
88
+ new_feedback_obj = UserFeedback(
89
+ company_id=company.id,
90
+ message=message,
91
+ user_identifier=user_identifier,
92
+ rating=rating
93
+ )
94
+ saved_feedback = self.profile_repo.save_feedback(new_feedback_obj)
95
+ if not saved_feedback:
96
+ logging.error(f"No se pudo guardar el feedback para el usuario {user_identifier} en la empresa {company_short_name}")
97
+ return {'error': 'No se pudo guardar el feedback'}
98
+
99
+ return {'message': 'Feedback guardado correctamente'}
100
+
101
+ except Exception as e:
102
+ logging.exception(f"Error crítico en el servicio de feedback: {e}")
103
+ return {'error': str(e)}
@@ -101,12 +101,10 @@ const sendFeedback = async function(message) {
101
101
  "user_identifier": window.user_identifier,
102
102
  "message": message,
103
103
  "rating": activeStars,
104
- "space": "spaces/AAQAupQldd4", // Este valor podría necesitar ser dinámico
105
- "type": "MESSAGE_TRIGGER"
106
104
  };
107
105
  try {
108
106
  // Asumiendo que callLLMAPI está definido globalmente en otro archivo (ej. chat_main.js)
109
- const responseData = await callToolkit('/feedback', data, "POST");
107
+ const responseData = await callToolkit('/api/feedback', data, "POST");
110
108
  return responseData;
111
109
  } catch (error) {
112
110
  console.error("Error al enviar feedback:", error);
@@ -37,14 +37,6 @@ class UserFeedbackApiView(MethodView):
37
37
  if not message:
38
38
  return jsonify({"error_message": "Falta el mensaje de feedback"}), 400
39
39
 
40
- space = data.get("space")
41
- if not space:
42
- return jsonify({"error_message": "Falta el espacio de Google Chat"}), 400
43
-
44
- type = data.get("type")
45
- if not type:
46
- return jsonify({"error_message": "Falta el tipo de feedback"}), 400
47
-
48
40
  rating = data.get("rating")
49
41
  if not rating:
50
42
  return jsonify({"error_message": "Falta la calificación"}), 400
@@ -54,8 +46,6 @@ class UserFeedbackApiView(MethodView):
54
46
  company_short_name=company_short_name,
55
47
  message=message,
56
48
  user_identifier=user_identifier,
57
- space=space,
58
- type=type,
59
49
  rating=rating
60
50
  )
61
51
 
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: iatoolkit
3
- Version: 0.59.1
3
+ Version: 0.59.2
4
4
  Summary: IAToolkit
5
5
  Author: Fernando Libedinsky
6
6
  License-Expression: MIT
@@ -1,64 +0,0 @@
1
- # Copyright (c) 2024 Fernando Libedinsky
2
- # Product: IAToolkit
3
- #
4
- # IAToolkit is open source software.
5
-
6
- from iatoolkit.repositories.models import UserFeedback
7
- from injector import inject
8
- from iatoolkit.repositories.profile_repo import ProfileRepo
9
- from iatoolkit.infra.google_chat_app import GoogleChatApp
10
- import logging
11
-
12
-
13
- class UserFeedbackService:
14
- @inject
15
- def __init__(self, profile_repo: ProfileRepo, google_chat_app: GoogleChatApp):
16
- self.profile_repo = profile_repo
17
- self.google_chat_app = google_chat_app
18
-
19
- def new_feedback(self,
20
- company_short_name: str,
21
- message: str,
22
- user_identifier: str,
23
- space: str = None,
24
- type: str = None,
25
- rating: int = None) -> dict:
26
- try:
27
- # validate company
28
- company = self.profile_repo.get_company_by_short_name(company_short_name)
29
- if not company:
30
- return {'error': f'No existe la empresa: {company_short_name}'}
31
-
32
- # send notification to Google Chat
33
- chat_message = f"*Nuevo feedback de {company_short_name}*:\n*Usuario:* {user_identifier}\n*Mensaje:* {message}\n*Calificación:* {rating}"
34
-
35
- # TO DO: get the space and type from the input data
36
- chat_data = {
37
- "type": type,
38
- "space": {
39
- "name": space
40
- },
41
- "message": {
42
- "text": chat_message
43
- }
44
- }
45
-
46
- chat_result = self.google_chat_app.send_message(message_data=chat_data)
47
- if not chat_result.get('success'):
48
- logging.warning(f"Error al enviar notificación a Google Chat: {chat_result.get('message')}")
49
-
50
- # create the UserFeedback object
51
- new_feedback = UserFeedback(
52
- company_id=company.id,
53
- message=message,
54
- user_identifier=user_identifier,
55
- rating=rating
56
- )
57
- new_feedback = self.profile_repo.save_feedback(new_feedback)
58
- if not new_feedback:
59
- return {'error': 'No se pudo guardar el feedback'}
60
-
61
- return {'message': 'Feedback guardado correctamente'}
62
-
63
- except Exception as e:
64
- return {'error': str(e)}
File without changes
File without changes
File without changes