iatoolkit 0.7.10__py3-none-any.whl → 0.7.12__py3-none-any.whl
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.
- iatoolkit/__init__.py +18 -14
- iatoolkit/base_company.py +5 -5
- iatoolkit/cli_commands.py +5 -3
- {common → iatoolkit/common}/auth.py +3 -3
- {common → iatoolkit/common}/routes.py +19 -19
- {common → iatoolkit/common}/util.py +2 -2
- iatoolkit/iatoolkit.py +37 -38
- {infra → iatoolkit/infra}/call_service.py +1 -1
- {infra → iatoolkit/infra}/connectors/file_connector_factory.py +5 -5
- {infra → iatoolkit/infra}/connectors/google_cloud_storage_connector.py +1 -1
- {infra → iatoolkit/infra}/connectors/google_drive_connector.py +1 -1
- {infra → iatoolkit/infra}/connectors/local_file_connector.py +2 -2
- {infra → iatoolkit/infra}/connectors/s3_connector.py +1 -1
- {infra → iatoolkit/infra}/gemini_adapter.py +2 -2
- {infra → iatoolkit/infra}/google_chat_app.py +1 -1
- {infra → iatoolkit/infra}/llm_client.py +7 -7
- {infra → iatoolkit/infra}/llm_proxy.py +6 -6
- {infra → iatoolkit/infra}/mail_app.py +1 -1
- {infra → iatoolkit/infra}/openai_adapter.py +2 -2
- {repositories → iatoolkit/repositories}/database_manager.py +1 -1
- {repositories → iatoolkit/repositories}/document_repo.py +3 -3
- {repositories → iatoolkit/repositories}/llm_query_repo.py +2 -2
- {repositories → iatoolkit/repositories}/profile_repo.py +2 -2
- {repositories → iatoolkit/repositories}/tasks_repo.py +2 -2
- {repositories → iatoolkit/repositories}/vs_repo.py +3 -3
- {services → iatoolkit/services}/benchmark_service.py +3 -3
- {services → iatoolkit/services}/dispatcher_service.py +9 -8
- {services → iatoolkit/services}/document_service.py +1 -1
- {services → iatoolkit/services}/excel_service.py +2 -2
- {services → iatoolkit/services}/file_processor_service.py +2 -2
- {services → iatoolkit/services}/history_service.py +4 -3
- {services → iatoolkit/services}/load_documents_service.py +11 -10
- {services → iatoolkit/services}/mail_service.py +2 -2
- {services → iatoolkit/services}/profile_service.py +6 -6
- {services → iatoolkit/services}/prompt_manager_service.py +5 -4
- {services → iatoolkit/services}/query_service.py +12 -11
- {services → iatoolkit/services}/search_service.py +2 -2
- {services → iatoolkit/services}/sql_service.py +4 -3
- {services → iatoolkit/services}/tasks_service.py +6 -6
- {services → iatoolkit/services}/user_feedback_service.py +3 -3
- {services → iatoolkit/services}/user_session_context_service.py +1 -1
- iatoolkit/static/images/arrow_up.png +0 -0
- iatoolkit/static/images/diagrama_iatoolkit.jpg +0 -0
- iatoolkit/static/images/logo_clinica.png +0 -0
- iatoolkit/static/images/logo_iatoolkit.png +0 -0
- iatoolkit/static/images/logo_maxxa.png +0 -0
- iatoolkit/static/images/logo_notaria.png +0 -0
- iatoolkit/static/images/logo_tarjeta.png +0 -0
- iatoolkit/static/images/logo_umayor.png +0 -0
- iatoolkit/static/images/upload.png +0 -0
- iatoolkit/static/js/chat_feedback.js +115 -0
- iatoolkit/static/js/chat_filepond.js +85 -0
- iatoolkit/static/js/chat_history.js +117 -0
- iatoolkit/static/js/chat_main.js +436 -0
- iatoolkit/static/styles/chat_iatoolkit.css +701 -0
- iatoolkit/static/styles/chat_info.css +53 -0
- iatoolkit/static/styles/chat_modal.css +136 -0
- iatoolkit/static/styles/llm_output.css +115 -0
- iatoolkit/static/temp/024f44a9-cc7e-4bde-9a3c-11903a8f5d3d.xlsx +0 -0
- iatoolkit/static/temp/0b97768e-79e8-43ec-b17e-ba3137f94e93.xlsx +0 -0
- iatoolkit/static/temp/202883ee-763e-4b40-9bb6-bfacfc5e65fe.xlsx +0 -0
- iatoolkit/static/temp/28287491-08b7-4863-a2a3-49fcb64a0906.xlsx +0 -0
- iatoolkit/static/temp/36780cac-7a46-4db4-ac98-7338a51aaf52.xlsx +0 -0
- iatoolkit/static/temp/5c1b66f6-d58f-4684-8a7a-df3bb1a35eaa.xlsx +0 -0
- iatoolkit/static/temp/5d5a3500-ec57-4e07-a554-8799a906d1ab.xlsx +0 -0
- iatoolkit/static/temp/65887e40-cf64-49aa-8d1f-651cb0f8cdf0.xlsx +0 -0
- iatoolkit/static/temp/6fa64b13-e8e5-40ad-8257-00fd1682dad8.xlsx +0 -0
- iatoolkit/static/temp/7ab7071f-ad9b-49e6-8e63-f08410625ce7.xlsx +0 -0
- iatoolkit/static/temp/824346d9-d54d-40c6-b5c2-9e1d84d0ae90.xlsx +0 -0
- iatoolkit/static/temp/9ca80c3d-d196-4dfc-8179-582584fae04c.xlsx +0 -0
- iatoolkit/static/temp/a34cb8a6-85fb-4ea8-aabe-889967cd83b5.xlsx +0 -0
- iatoolkit/static/temp/a7fc9c13-c509-4499-b4be-23bfa57cac31.xlsx +0 -0
- iatoolkit/static/temp/b83084f5-fe54-4580-885e-412b4388cbda.xlsx +0 -0
- iatoolkit/static/temp/c17c6864-34e1-448f-b0e9-380354256ea9.xlsx +0 -0
- iatoolkit/static/temp/customer_clusters.parquet +0 -0
- iatoolkit/static/temp/customer_clusters.xlsx +0 -0
- iatoolkit/static/temp/d1af98b8-18a9-4b94-b9bc-607d19a87d0d.xlsx +0 -0
- iatoolkit/templates/about.html +13 -0
- iatoolkit/templates/base.html +45 -0
- iatoolkit/templates/change_password.html +45 -0
- iatoolkit/templates/chat.html +180 -0
- iatoolkit/templates/chat_modals.html +115 -0
- iatoolkit/templates/error.html +15 -0
- iatoolkit/templates/forgot_password.html +33 -0
- iatoolkit/templates/header.html +31 -0
- iatoolkit/templates/home.html +201 -0
- iatoolkit/templates/login.html +43 -0
- iatoolkit/templates/signup.html +78 -0
- iatoolkit/templates/test.html +9 -0
- {views → iatoolkit/views}/change_password_view.py +1 -1
- {views → iatoolkit/views}/chat_token_request_view.py +2 -2
- {views → iatoolkit/views}/chat_view.py +3 -3
- {views → iatoolkit/views}/download_file_view.py +3 -3
- {views → iatoolkit/views}/external_chat_login_view.py +5 -5
- {views → iatoolkit/views}/external_login_view.py +2 -2
- {views → iatoolkit/views}/file_store_view.py +2 -2
- {views → iatoolkit/views}/forgot_password_view.py +1 -1
- {views → iatoolkit/views}/history_view.py +2 -2
- {views → iatoolkit/views}/home_view.py +1 -1
- {views → iatoolkit/views}/llmquery_view.py +2 -2
- {views → iatoolkit/views}/login_view.py +1 -1
- {views → iatoolkit/views}/prompt_view.py +2 -2
- {views → iatoolkit/views}/signup_view.py +1 -1
- {views → iatoolkit/views}/tasks_review_view.py +2 -2
- {views → iatoolkit/views}/tasks_view.py +2 -2
- {views → iatoolkit/views}/user_feedback_view.py +2 -2
- {views → iatoolkit/views}/verify_user_view.py +1 -1
- {iatoolkit-0.7.10.dist-info → iatoolkit-0.7.12.dist-info}/METADATA +1 -1
- iatoolkit-0.7.12.dist-info/RECORD +194 -0
- iatoolkit-0.7.12.dist-info/top_level.txt +2 -0
- tests/__init__.py +5 -0
- tests/common/__init__.py +0 -0
- tests/common/test_auth.py +279 -0
- tests/common/test_routes.py +42 -0
- tests/common/test_session_manager.py +59 -0
- tests/common/test_util.py +444 -0
- tests/companies/__init__.py +5 -0
- tests/conftest.py +36 -0
- tests/infra/__init__.py +5 -0
- tests/infra/connectors/__init__.py +5 -0
- tests/infra/connectors/test_google_drive_connector.py +107 -0
- tests/infra/connectors/test_local_file_connector.py +85 -0
- tests/infra/connectors/test_s3_connector.py +95 -0
- tests/infra/test_call_service.py +92 -0
- tests/infra/test_database_manager.py +59 -0
- tests/infra/test_gemini_adapter.py +137 -0
- tests/infra/test_google_chat_app.py +68 -0
- tests/infra/test_llm_client.py +165 -0
- tests/infra/test_llm_proxy.py +122 -0
- tests/infra/test_mail_app.py +94 -0
- tests/infra/test_openai_adapter.py +105 -0
- tests/infra/test_redis_session_manager_service.py +117 -0
- tests/repositories/__init__.py +5 -0
- tests/repositories/test_database_manager.py +87 -0
- tests/repositories/test_document_repo.py +76 -0
- tests/repositories/test_llm_query_repo.py +340 -0
- tests/repositories/test_models.py +38 -0
- tests/repositories/test_profile_repo.py +142 -0
- tests/repositories/test_tasks_repo.py +76 -0
- tests/repositories/test_vs_repo.py +107 -0
- tests/services/__init__.py +5 -0
- tests/services/test_dispatcher_service.py +274 -0
- tests/services/test_document_service.py +181 -0
- tests/services/test_excel_service.py +208 -0
- tests/services/test_file_processor_service.py +121 -0
- tests/services/test_history_service.py +164 -0
- tests/services/test_jwt_service.py +255 -0
- tests/services/test_load_documents_service.py +112 -0
- tests/services/test_mail_service.py +70 -0
- tests/services/test_profile_service.py +379 -0
- tests/services/test_prompt_manager_service.py +190 -0
- tests/services/test_query_service.py +243 -0
- tests/services/test_search_service.py +39 -0
- tests/services/test_sql_service.py +160 -0
- tests/services/test_tasks_service.py +252 -0
- tests/services/test_user_feedback_service.py +389 -0
- tests/services/test_user_session_context_service.py +132 -0
- tests/views/__init__.py +5 -0
- tests/views/test_change_password_view.py +191 -0
- tests/views/test_chat_token_request_view.py +188 -0
- tests/views/test_chat_view.py +98 -0
- tests/views/test_download_file_view.py +149 -0
- tests/views/test_external_chat_login_view.py +120 -0
- tests/views/test_external_login_view.py +102 -0
- tests/views/test_file_store_view.py +128 -0
- tests/views/test_forgot_password_view.py +142 -0
- tests/views/test_history_view.py +336 -0
- tests/views/test_home_view.py +61 -0
- tests/views/test_llm_query_view.py +154 -0
- tests/views/test_login_view.py +114 -0
- tests/views/test_prompt_view.py +111 -0
- tests/views/test_signup_view.py +140 -0
- tests/views/test_tasks_review_view.py +104 -0
- tests/views/test_tasks_view.py +130 -0
- tests/views/test_user_feedback_view.py +214 -0
- tests/views/test_verify_user_view.py +110 -0
- iatoolkit-0.7.10.dist-info/RECORD +0 -80
- iatoolkit-0.7.10.dist-info/top_level.txt +0 -6
- {common → iatoolkit/common}/__init__.py +0 -0
- {common → iatoolkit/common}/exceptions.py +0 -0
- {common → iatoolkit/common}/session_manager.py +0 -0
- {infra → iatoolkit/infra}/__init__.py +0 -0
- {infra → iatoolkit/infra}/connectors/__init__.py +0 -0
- {infra → iatoolkit/infra}/connectors/file_connector.py +0 -0
- {infra → iatoolkit/infra}/llm_response.py +0 -0
- {infra → iatoolkit/infra}/redis_session_manager.py +0 -0
- {repositories → iatoolkit/repositories}/__init__.py +0 -0
- {repositories → iatoolkit/repositories}/models.py +0 -0
- {services → iatoolkit/services}/__init__.py +0 -0
- {services → iatoolkit/services}/jwt_service.py +0 -0
- {views → iatoolkit/views}/__init__.py +0 -0
- {iatoolkit-0.7.10.dist-info → iatoolkit-0.7.12.dist-info}/WHEEL +0 -0
|
@@ -5,8 +5,8 @@
|
|
|
5
5
|
|
|
6
6
|
from flask import request, jsonify, render_template
|
|
7
7
|
from flask.views import MethodView
|
|
8
|
-
from services.query_service import QueryService
|
|
9
|
-
from common.auth import IAuthentication
|
|
8
|
+
from iatoolkit.services.query_service import QueryService
|
|
9
|
+
from iatoolkit.common.auth import IAuthentication
|
|
10
10
|
from injector import inject
|
|
11
11
|
import logging
|
|
12
12
|
|
|
@@ -6,7 +6,7 @@
|
|
|
6
6
|
from flask.views import MethodView
|
|
7
7
|
from flask import request, redirect, render_template, url_for
|
|
8
8
|
from injector import inject
|
|
9
|
-
from services.profile_service import ProfileService
|
|
9
|
+
from iatoolkit.services.profile_service import ProfileService
|
|
10
10
|
|
|
11
11
|
class LoginView(MethodView):
|
|
12
12
|
@inject
|
|
@@ -5,8 +5,8 @@
|
|
|
5
5
|
|
|
6
6
|
from flask import jsonify
|
|
7
7
|
from flask.views import MethodView
|
|
8
|
-
from services.prompt_manager_service import PromptService
|
|
9
|
-
from common.auth import IAuthentication
|
|
8
|
+
from iatoolkit.services.prompt_manager_service import PromptService
|
|
9
|
+
from iatoolkit.common.auth import IAuthentication
|
|
10
10
|
from injector import inject
|
|
11
11
|
import logging
|
|
12
12
|
|
|
@@ -5,7 +5,7 @@
|
|
|
5
5
|
|
|
6
6
|
from flask.views import MethodView
|
|
7
7
|
from flask import render_template
|
|
8
|
-
from services.profile_service import ProfileService
|
|
8
|
+
from iatoolkit.services.profile_service import ProfileService
|
|
9
9
|
from injector import inject
|
|
10
10
|
from itsdangerous import URLSafeTimedSerializer
|
|
11
11
|
from flask import url_for, request
|
|
@@ -5,8 +5,8 @@
|
|
|
5
5
|
|
|
6
6
|
from flask.views import MethodView
|
|
7
7
|
from flask import request, jsonify
|
|
8
|
-
from services.tasks_service import TaskService
|
|
9
|
-
from repositories.profile_repo import ProfileRepo
|
|
8
|
+
from iatoolkit.services.tasks_service import TaskService
|
|
9
|
+
from iatoolkit.repositories.profile_repo import ProfileRepo
|
|
10
10
|
from injector import inject
|
|
11
11
|
import logging
|
|
12
12
|
from typing import Optional
|
|
@@ -5,8 +5,8 @@
|
|
|
5
5
|
|
|
6
6
|
from flask.views import MethodView
|
|
7
7
|
from flask import request, jsonify
|
|
8
|
-
from services.tasks_service import TaskService
|
|
9
|
-
from repositories.profile_repo import ProfileRepo
|
|
8
|
+
from iatoolkit.services.tasks_service import TaskService
|
|
9
|
+
from iatoolkit.repositories.profile_repo import ProfileRepo
|
|
10
10
|
from injector import inject
|
|
11
11
|
from datetime import datetime
|
|
12
12
|
import logging
|
|
@@ -5,8 +5,8 @@
|
|
|
5
5
|
|
|
6
6
|
from flask import request, jsonify, render_template
|
|
7
7
|
from flask.views import MethodView
|
|
8
|
-
from services.user_feedback_service import UserFeedbackService
|
|
9
|
-
from common.auth import IAuthentication
|
|
8
|
+
from iatoolkit.services.user_feedback_service import UserFeedbackService
|
|
9
|
+
from iatoolkit.common.auth import IAuthentication
|
|
10
10
|
from injector import inject
|
|
11
11
|
import logging
|
|
12
12
|
|
|
@@ -5,7 +5,7 @@
|
|
|
5
5
|
|
|
6
6
|
from flask.views import MethodView
|
|
7
7
|
from flask import render_template
|
|
8
|
-
from services.profile_service import ProfileService
|
|
8
|
+
from iatoolkit.services.profile_service import ProfileService
|
|
9
9
|
from itsdangerous import URLSafeTimedSerializer, SignatureExpired
|
|
10
10
|
from injector import inject
|
|
11
11
|
import os
|
|
@@ -0,0 +1,194 @@
|
|
|
1
|
+
iatoolkit/__init__.py,sha256=yi7Uw68KajDWUUo-v4xV31Nt7hjr_-2gCXbkhdiDl44,1887
|
|
2
|
+
iatoolkit/base_company.py,sha256=gM3X7xedNaVLodOObvjUN9eJKPO5-HmSLaBFa9jowCk,4277
|
|
3
|
+
iatoolkit/cli_commands.py,sha256=lMOz5ZCuYhkIXde86Gg0cxm530lPZ7H8D1qpYj5jPPI,2286
|
|
4
|
+
iatoolkit/company_registry.py,sha256=tduqt3oV8iDX_IB1eA7KIgvIxE4edTcy-3qZIXh3Lzw,2549
|
|
5
|
+
iatoolkit/iatoolkit.py,sha256=bdw5VrMyfYWGeFGLxDR4ZJYyMJQwEXNW6BUUZxTTc3w,15841
|
|
6
|
+
iatoolkit/common/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
7
|
+
iatoolkit/common/auth.py,sha256=8NH6MQXfddLQd1GxrO2op3IYrrP4SMQKoKzj1o1jZmc,8486
|
|
8
|
+
iatoolkit/common/exceptions.py,sha256=EXx40n5htp7UiOM6P1xfJ9U6NMcADqm62dlFaKz7ICU,1154
|
|
9
|
+
iatoolkit/common/routes.py,sha256=zs883Xa1zoJgUYS4HKDUnnR4-fa-Sxg0SLWmU1Q1nPo,4378
|
|
10
|
+
iatoolkit/common/session_manager.py,sha256=7D_RuJs60w-1zDr3fOGEz9JW7IZlSXuUHgUT87CzaUo,472
|
|
11
|
+
iatoolkit/common/util.py,sha256=08js3KLJTXICOd5sgwDp2u_kDaZO_0xG4BIuzWZnLo8,15535
|
|
12
|
+
iatoolkit/infra/__init__.py,sha256=5JqK9sZ6jBuK83zDQokUhxQ0wuJJJ9DXB8pYCLkX7X4,102
|
|
13
|
+
iatoolkit/infra/call_service.py,sha256=iRk9VxbXaAwlLIl8fUzGDWIAdzwfsbs1MtP84YeENxg,4929
|
|
14
|
+
iatoolkit/infra/gemini_adapter.py,sha256=kXV-t5i9GmWBafUPX2kAyiqvcT7GPoxHylcCUWG_c_U,15051
|
|
15
|
+
iatoolkit/infra/google_chat_app.py,sha256=_uKWxeacHH6C5a4FVx0YZjBn1tL-x_MIQV9gqgWGAjo,1937
|
|
16
|
+
iatoolkit/infra/llm_client.py,sha256=3w2BUQmnyq9Tbc9_CI2JjxZQ7pGVlMF_GmUdqBa9O7Y,18618
|
|
17
|
+
iatoolkit/infra/llm_proxy.py,sha256=cHyNxUpVE4UDoWUfvSGfGCrIUFPTrpWZOixELQTsGFY,5744
|
|
18
|
+
iatoolkit/infra/llm_response.py,sha256=YUUQPBHzmP3Ce6-t0kKMRIpowvh7de1odSoefEByIvI,904
|
|
19
|
+
iatoolkit/infra/mail_app.py,sha256=PLGZdEs7LQ_9bmMRRxz0iqQdNa4xToAFyf9tg75wK8U,6103
|
|
20
|
+
iatoolkit/infra/openai_adapter.py,sha256=Z1JSi3Tw2mXQ7JAh6yR79Ri_9yZJcJpcZLOLL3Mfda8,3530
|
|
21
|
+
iatoolkit/infra/redis_session_manager.py,sha256=Dkwii8fns0_Vd9hm9GmotmrKtSCxVps868U5sqj7FAE,2278
|
|
22
|
+
iatoolkit/infra/connectors/__init__.py,sha256=5JqK9sZ6jBuK83zDQokUhxQ0wuJJJ9DXB8pYCLkX7X4,102
|
|
23
|
+
iatoolkit/infra/connectors/file_connector.py,sha256=HOjRTFd-WfDOcFyvHncAhnGNZuFgChIwC-P6osPo9ZM,352
|
|
24
|
+
iatoolkit/infra/connectors/file_connector_factory.py,sha256=3qvyfH4ZHKuiMxJFkawOxhW2-TGKKtsBYHgoPpZMuKU,2118
|
|
25
|
+
iatoolkit/infra/connectors/google_cloud_storage_connector.py,sha256=IXpL3HTo7Ft4EQsYiQq5wXRRQK854jzOEB7ZdWjLa4U,2050
|
|
26
|
+
iatoolkit/infra/connectors/google_drive_connector.py,sha256=WR1AlO5-Bl3W89opdja0kKgHTJzVOjTsy3H4SlIvwVg,2537
|
|
27
|
+
iatoolkit/infra/connectors/local_file_connector.py,sha256=hrzIgpMJOTuwTqzlQeTIU_50ZbZ6yl8lcWPv6hMnoqI,1739
|
|
28
|
+
iatoolkit/infra/connectors/s3_connector.py,sha256=Nj4_YaLobjfcnbZewJf21_K2EXohgcc3mJll1Pzn4zg,1123
|
|
29
|
+
iatoolkit/repositories/__init__.py,sha256=5JqK9sZ6jBuK83zDQokUhxQ0wuJJJ9DXB8pYCLkX7X4,102
|
|
30
|
+
iatoolkit/repositories/database_manager.py,sha256=UaU7k3s7IRuXhCHTy9GoCeP9K1ad0LBdj_n1a_QjGS0,3108
|
|
31
|
+
iatoolkit/repositories/document_repo.py,sha256=Y7bF1kZB1HWJsAGjWdF7P2aVYeTYNufq9ngQXp7mDkY,1124
|
|
32
|
+
iatoolkit/repositories/llm_query_repo.py,sha256=YT_t7cYGQk8rwzH_17-28aTzO-e2jUfa2rvXy8tugvA,3612
|
|
33
|
+
iatoolkit/repositories/models.py,sha256=RJH0dtq2VIDJFaFDufV05NUnNW4WtNpdTjhONtfLyCw,13179
|
|
34
|
+
iatoolkit/repositories/profile_repo.py,sha256=ZULbh7ZOI9BFVi7HEfXtx3SaStgFnsCBVM_zuli_F8I,4062
|
|
35
|
+
iatoolkit/repositories/tasks_repo.py,sha256=icVO_r2oPagGnnBhwVFzznnvEEU2EAx-2dlWuWvoDC4,1745
|
|
36
|
+
iatoolkit/repositories/vs_repo.py,sha256=UkpmQQiocgM5IwRBmmWhw3HHzHP6zK1nN3J3TcQgjhc,5300
|
|
37
|
+
iatoolkit/services/__init__.py,sha256=5JqK9sZ6jBuK83zDQokUhxQ0wuJJJ9DXB8pYCLkX7X4,102
|
|
38
|
+
iatoolkit/services/benchmark_service.py,sha256=CdbFYyS3FHFhNzWQEa9ZNjUlmON10DT1nKNbZQ1EUi8,5880
|
|
39
|
+
iatoolkit/services/dispatcher_service.py,sha256=ykR1ye6McyCCuaBgwH6r3-PqcLAr4v4ApkPazMSBzbs,14040
|
|
40
|
+
iatoolkit/services/document_service.py,sha256=nMXrNtbHQuc9pSaten0LvKY0kT8_WngBDmZJUP3jNPw,5936
|
|
41
|
+
iatoolkit/services/excel_service.py,sha256=etb77aCOiHe3_6hG7BKxXn23P1BF1tXMp6YhYYSVWA4,3579
|
|
42
|
+
iatoolkit/services/file_processor_service.py,sha256=B1sUUhZNFf-rT4_1wrD38GKNoBFMp2g0dYrXYMCWe2E,4122
|
|
43
|
+
iatoolkit/services/history_service.py,sha256=JwW958tYTrcdWSP5TRoDgDtBdGCvWIG4fnmHsrXLQ-8,1617
|
|
44
|
+
iatoolkit/services/jwt_service.py,sha256=YoZ9h7_o9xBko-arNQv4MbcwnxoSWVNj4VbZmMo_QGY,3908
|
|
45
|
+
iatoolkit/services/load_documents_service.py,sha256=ZpB0BZ3qX1fGJGBtZtMLbFdWWx0hkPoeCS3OqJKwCTs,7291
|
|
46
|
+
iatoolkit/services/mail_service.py,sha256=2h-fcF3swZDya_o7IpgXkmuj3iEVHVCiHi7oVxU99sQ,2182
|
|
47
|
+
iatoolkit/services/profile_service.py,sha256=azaCQtRJwQayg-3NV6k0lX97SFiF12emhz60S4CWv-M,17621
|
|
48
|
+
iatoolkit/services/prompt_manager_service.py,sha256=U-XmSpkeXvv1KRN4dytdMxSYBMRSB7y-UHcb18mk0nA,8342
|
|
49
|
+
iatoolkit/services/query_service.py,sha256=CI_LUBdqolvsuh7TjY23oaQcc8s6rmmr4LqnjE81ZJc,15394
|
|
50
|
+
iatoolkit/services/search_service.py,sha256=i1xGWu7ORKIIDH0aAQBkF86dVVbLQ0Yrooz5TiZ6aGo,1823
|
|
51
|
+
iatoolkit/services/sql_service.py,sha256=MIslAtpJWnTMgSD74nnqTvQj27p-lHiyRXc6OiA2C_c,2172
|
|
52
|
+
iatoolkit/services/tasks_service.py,sha256=g0rBku8JSRuludFKJFNfKARJoKdX9JXISKNVe7wtH5A,6850
|
|
53
|
+
iatoolkit/services/user_feedback_service.py,sha256=KW3VMgsH_ZNlBZIHr8eF49oO7jr75lPpr_1wWTEQYsc,2472
|
|
54
|
+
iatoolkit/services/user_session_context_service.py,sha256=j8mKgmSyma6k_1FyXOXwpnYi9CrdEBCpPJA1eLHYZsg,3807
|
|
55
|
+
iatoolkit/static/images/arrow_up.png,sha256=vPcWMebWVOOt13x5U7pzsyukysoiXO0siSyErUMleHw,2781
|
|
56
|
+
iatoolkit/static/images/diagrama_iatoolkit.jpg,sha256=GhauwUVqWjt9dWtsW53Uon_mo61j73brmC4ogQc6tkY,93527
|
|
57
|
+
iatoolkit/static/images/logo_clinica.png,sha256=vLX6X7O9RPUHYTQHvO_Fx28sI4JulpRZsRpkuJ9XIu0,56806
|
|
58
|
+
iatoolkit/static/images/logo_iatoolkit.png,sha256=7XSxLy8v_mGxQMM8EA0gund-MmnQoIy1RV6DkJ-eukI,185089
|
|
59
|
+
iatoolkit/static/images/logo_maxxa.png,sha256=X4JtTu6ooe2RUHRo1stxGGquXlkiEWcTUxH5vbFdMv0,10592
|
|
60
|
+
iatoolkit/static/images/logo_notaria.png,sha256=FLDK1mHydFpzudKLKQSqHdSqq6vbqs77a_bO0PI_yHE,105105
|
|
61
|
+
iatoolkit/static/images/logo_tarjeta.png,sha256=HQe2lp_jHFWq5hnx3SCBEcqW5IFfvSCktv9oyN--5cQ,1700
|
|
62
|
+
iatoolkit/static/images/logo_umayor.png,sha256=FHr1wvI8uDn1YRbRcLSRLBOc0mYusHx9Um6ZzVZUbOQ,19199
|
|
63
|
+
iatoolkit/static/images/upload.png,sha256=zh5FiINURpaWZQF86bF_gALBX4W1c4aLp5wPQO9xGXI,296
|
|
64
|
+
iatoolkit/static/js/chat_feedback.js,sha256=_izl49hFEUZYREcJoaPukpTs0YjDgJYUu-QfPt5Ll2s,4398
|
|
65
|
+
iatoolkit/static/js/chat_filepond.js,sha256=mzXafm7a506EpM37KATTK3zvAswO1E0KSUY1vKbwuRc,3163
|
|
66
|
+
iatoolkit/static/js/chat_history.js,sha256=_bmwmMl9DL37FWJgoSS74j3LSqckD93C6fktB9-PxZk,3901
|
|
67
|
+
iatoolkit/static/js/chat_main.js,sha256=zVDERp3_WZBTeP3N-gCf0IVTWbKToUB6L_lUaEi56A8,15149
|
|
68
|
+
iatoolkit/static/styles/chat_iatoolkit.css,sha256=ZPQAgLT0HIeXjZC_EY8xACmVdjEp7spdPKFsTTIB-k0,20283
|
|
69
|
+
iatoolkit/static/styles/chat_info.css,sha256=17DbgoNYE21VYWfb5L9-QLCpD2R1idK4imKRLwXtJLY,1058
|
|
70
|
+
iatoolkit/static/styles/chat_modal.css,sha256=67qwltu-QS-sU0d_fSeTIiXwcNjfAnQQtmsgStx-ezk,3047
|
|
71
|
+
iatoolkit/static/styles/llm_output.css,sha256=AlxgRSOleeCk2dLAqFWVaQ-jwZiJjcpC5rHuUv3T6VU,2312
|
|
72
|
+
iatoolkit/static/temp/024f44a9-cc7e-4bde-9a3c-11903a8f5d3d.xlsx,sha256=_6n2A4apLWkQvORpQOAAKGYlQyCHlCUDPJDzJ4Ons14,8788
|
|
73
|
+
iatoolkit/static/temp/0b97768e-79e8-43ec-b17e-ba3137f94e93.xlsx,sha256=hxkJNPzqfSRcYUO6sxD1X8O8o0ULO0lBCj0ifsDfwBU,6937
|
|
74
|
+
iatoolkit/static/temp/202883ee-763e-4b40-9bb6-bfacfc5e65fe.xlsx,sha256=reGomquStUq8iH3rByXJSPH4DH7MpdGxqy3puQ3jYHM,6103
|
|
75
|
+
iatoolkit/static/temp/28287491-08b7-4863-a2a3-49fcb64a0906.xlsx,sha256=7rQMpkXfXlFdyAhTWM3m_7EO-FCVNXLk1Hexd97mspk,9517
|
|
76
|
+
iatoolkit/static/temp/36780cac-7a46-4db4-ac98-7338a51aaf52.xlsx,sha256=DUKW7DUaMAgFbKHm3vYK6GezRMq58fHBJCNMokyuQ9k,5426
|
|
77
|
+
iatoolkit/static/temp/5c1b66f6-d58f-4684-8a7a-df3bb1a35eaa.xlsx,sha256=c8157lfVgtcbw94fqS1GkW2eO3VZ9MVtkWouC4jC_Lo,7605
|
|
78
|
+
iatoolkit/static/temp/5d5a3500-ec57-4e07-a554-8799a906d1ab.xlsx,sha256=8dnb4nba-5g2aRYXSBwVSJ5EV4Ah-4dCV7cqSxhJVgk,5794
|
|
79
|
+
iatoolkit/static/temp/65887e40-cf64-49aa-8d1f-651cb0f8cdf0.xlsx,sha256=_AGAhHHQo9pCXOgvDZ83K25dOrelfuxwjTJW85QcWGM,9055
|
|
80
|
+
iatoolkit/static/temp/6fa64b13-e8e5-40ad-8257-00fd1682dad8.xlsx,sha256=FYOJNCZOwXFK_2Ork7vL4pGqZyJR5hLv09RrH_tosJk,7339
|
|
81
|
+
iatoolkit/static/temp/7ab7071f-ad9b-49e6-8e63-f08410625ce7.xlsx,sha256=JWbGzhnwErg4V5jrCXGUZafxduCKcPHagM8TTsAMJro,5806
|
|
82
|
+
iatoolkit/static/temp/824346d9-d54d-40c6-b5c2-9e1d84d0ae90.xlsx,sha256=czRFxIL1opDDaqnDePF8aqIu7tQDmDB8hvyuZRes09w,5843
|
|
83
|
+
iatoolkit/static/temp/9ca80c3d-d196-4dfc-8179-582584fae04c.xlsx,sha256=DUQWwcMkq3UkUCr3TxqJuHx3ODwS5jxYCrgHnBaxcCI,6525
|
|
84
|
+
iatoolkit/static/temp/a34cb8a6-85fb-4ea8-aabe-889967cd83b5.xlsx,sha256=3O6b2c29sYOZ1vfW9eHnNl-7bpyxcyX9h2MC6Xlq0JA,8968
|
|
85
|
+
iatoolkit/static/temp/a7fc9c13-c509-4499-b4be-23bfa57cac31.xlsx,sha256=EIO1XPlO-TBQq5gd8pJ3t2SiEwDkFynkkALSXP4yMog,5379
|
|
86
|
+
iatoolkit/static/temp/b83084f5-fe54-4580-885e-412b4388cbda.xlsx,sha256=mQc6ZBWOLLUMhPJmsfqlb0heAVCrwjkt65mqkVg3Y7c,9041
|
|
87
|
+
iatoolkit/static/temp/c17c6864-34e1-448f-b0e9-380354256ea9.xlsx,sha256=WDvGGyxAhl96CeV-1Co9OGCOBmMIOD1UODHzj-wA0a0,5266
|
|
88
|
+
iatoolkit/static/temp/customer_clusters.parquet,sha256=vlzC453Aqu-QXOzCksgeyKleuHFctr-fEcVy4ejJJak,15177
|
|
89
|
+
iatoolkit/static/temp/customer_clusters.xlsx,sha256=7lN6Q0_GDj8VI5_-oMPbFHT9DxBRiK64PVH6js3PWNI,9920
|
|
90
|
+
iatoolkit/static/temp/d1af98b8-18a9-4b94-b9bc-607d19a87d0d.xlsx,sha256=lY4DGo1L-bLcK3j5wioLC0SwDLSw0SjyKUmISaKuSdU,5787
|
|
91
|
+
iatoolkit/system_prompts/format_styles.prompt,sha256=MSMe1qvR3cF_0IbFshn8R0z6Wx6VCHQq1p37rpu5wwk,3576
|
|
92
|
+
iatoolkit/system_prompts/query_main.prompt,sha256=w_9ybgWgiQH4V_RbAXqsvz0M7oOuiyhxcwf-D0CgfA4,3017
|
|
93
|
+
iatoolkit/system_prompts/sql_rules.prompt,sha256=y4nURVnb9AyFwt-lrbMNBHHtZlhk6kC9grYoOhRnrJo,59174
|
|
94
|
+
iatoolkit/templates/about.html,sha256=ciC08grUVz5qLzdzDDqDX31xirg5PrJIRYabWpV9oA8,294
|
|
95
|
+
iatoolkit/templates/base.html,sha256=LXXB8oPrcBFkf2pLfOSyAaSh66kHbs4SEujpFL3h9Nw,2163
|
|
96
|
+
iatoolkit/templates/change_password.html,sha256=DFfQSFcZ2YJZNFis2IXfzEKStxTf4i9f4eQ_6GiyNs8,2342
|
|
97
|
+
iatoolkit/templates/chat.html,sha256=YZKHn0VINtAFoyAISgahMD29iNO_oHON2N5EZkoCkE4,8219
|
|
98
|
+
iatoolkit/templates/chat_modals.html,sha256=9OtJHRMeBup8zojPnUqSl7Fd5StPdvOZMs2MiJPqVFY,5704
|
|
99
|
+
iatoolkit/templates/error.html,sha256=BNF-7z8AYL5vF4ZMUFMrOBt8c85kCFrm9qSHn9EiHWg,540
|
|
100
|
+
iatoolkit/templates/forgot_password.html,sha256=1lUbKg9CKnQdnySplceY_pibwYne1-mOlM38fqI1kW8,1563
|
|
101
|
+
iatoolkit/templates/header.html,sha256=179agI7rnYwP_rvJNXIiVde5E8Ec5649_XKq6eew2Hk,1263
|
|
102
|
+
iatoolkit/templates/home.html,sha256=h6qZ6d5tPYAGeHsVr-o6NFG3YMs1QeDVCxFlnPneFEA,8345
|
|
103
|
+
iatoolkit/templates/login.html,sha256=r4hy7MsQkfDqi6pBRNkkRiFr3GPSoHCT89R5lQLUWZc,1991
|
|
104
|
+
iatoolkit/templates/signup.html,sha256=J8wOjUhUe_KozyThDTWHjXpSJ1ubR2IDVobThtkSRuo,3819
|
|
105
|
+
iatoolkit/templates/test.html,sha256=rwNtxC83tbCl5COZFXYvmRBxxmgFJtPNuVBd_nq9KWY,133
|
|
106
|
+
iatoolkit/views/__init__.py,sha256=5JqK9sZ6jBuK83zDQokUhxQ0wuJJJ9DXB8pYCLkX7X4,102
|
|
107
|
+
iatoolkit/views/change_password_view.py,sha256=rSebwecI1zwBgR2yvAhcfMwWpGDa4QbVAIllgtSOo9k,3940
|
|
108
|
+
iatoolkit/views/chat_token_request_view.py,sha256=wf32_A2Sq8NHYWshCwL10Tovd1znLoD0jQjzutR3sVE,4408
|
|
109
|
+
iatoolkit/views/chat_view.py,sha256=rnljdVHfe2E4E57ku6eblVgwT6SrLi1v-yqXGri68Ks,2078
|
|
110
|
+
iatoolkit/views/download_file_view.py,sha256=1gZ0ipqeCn39sTrJFo1-tlewlcSF7s_YNTvE4qd0HOw,2010
|
|
111
|
+
iatoolkit/views/external_chat_login_view.py,sha256=uh8DQRfZpZOXYr9qoxtwSwtL3PNdIJh-R5OjGgLqcoY,3782
|
|
112
|
+
iatoolkit/views/external_login_view.py,sha256=EHxN2omqTDkWyMp0FVCNDFt-JJ2hpg8LvprKanGR1gY,1355
|
|
113
|
+
iatoolkit/views/file_store_view.py,sha256=hUm5wX4E5oqJJEPEAObEj-nPiRp5EJIICULSfAWmHCs,1933
|
|
114
|
+
iatoolkit/views/forgot_password_view.py,sha256=Rk8Qbe9Fz7Wlgje1rt29I15gFM-a089EBi2at4FT7kA,2715
|
|
115
|
+
iatoolkit/views/history_view.py,sha256=8sqc9i8hN5bbRs3mSjurqKEZaXKANTQqATfwVAS4qSM,2064
|
|
116
|
+
iatoolkit/views/home_view.py,sha256=TihO2flkelJa9j6a0FKCMVhD-2X7BhemonB7LTne4x8,1248
|
|
117
|
+
iatoolkit/views/llmquery_view.py,sha256=rv2i3oeXlNc3Sv7Qu3DZGf37r-bMSa4N25FzG7_kPAI,2432
|
|
118
|
+
iatoolkit/views/login_view.py,sha256=MI87rGB1QpxEVxWy-tR2q7s9ms9pcFLIW8ZmNQh1EFE,2332
|
|
119
|
+
iatoolkit/views/prompt_view.py,sha256=l8KHlLmkSgSLK43VbhwKED7mCN9YyfeHHh4zvx0pT0E,1257
|
|
120
|
+
iatoolkit/views/signup_view.py,sha256=NTx_2w8F6Np88FKEpDvBvJXU-bISKpDMdhhT4XFAVfk,3805
|
|
121
|
+
iatoolkit/views/tasks_review_view.py,sha256=keLsLCyOTTlcoIapnB_lbuSvLwrPVZVpBiFC_7ChbLg,3388
|
|
122
|
+
iatoolkit/views/tasks_view.py,sha256=a3anTXrJTTvbQuc6PSpOzidLKQFL4hWa7PI2Cppcz8w,4110
|
|
123
|
+
iatoolkit/views/user_feedback_view.py,sha256=G37zmP8P4LvZrSymNJ5iFXhLZg1A3BEwRfTpH1Iam5w,2652
|
|
124
|
+
iatoolkit/views/verify_user_view.py,sha256=a3q4wHJ8mKAEmgbNTOcnX4rMikROjOR3mHvCr30qGGA,2351
|
|
125
|
+
tests/__init__.py,sha256=5JqK9sZ6jBuK83zDQokUhxQ0wuJJJ9DXB8pYCLkX7X4,102
|
|
126
|
+
tests/conftest.py,sha256=S000Ry-rWczEDsndTtOvsj2zf2EYgjHi78oVn60hoOU,1094
|
|
127
|
+
tests/common/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
128
|
+
tests/common/test_auth.py,sha256=WViWPG3E8OldgZyPbl-lp5rosjgPQb9MlADGLr1rq4k,14338
|
|
129
|
+
tests/common/test_routes.py,sha256=_Fz8mYqxp8YZ39CSng0CQOIRs9fOfgC42iU9XiHLMzU,1560
|
|
130
|
+
tests/common/test_session_manager.py,sha256=8FLa8Z7ueLYNnJeJyTgCm8pp1DY6QvC0b0ZxZC2vpKc,2388
|
|
131
|
+
tests/common/test_util.py,sha256=SMh0pSIv8K-bCeMZeYBbCD70o6MpOUXHQH6kZFLLN5c,20653
|
|
132
|
+
tests/companies/__init__.py,sha256=5JqK9sZ6jBuK83zDQokUhxQ0wuJJJ9DXB8pYCLkX7X4,102
|
|
133
|
+
tests/infra/__init__.py,sha256=5JqK9sZ6jBuK83zDQokUhxQ0wuJJJ9DXB8pYCLkX7X4,102
|
|
134
|
+
tests/infra/test_call_service.py,sha256=p5kFqXFojSmHucLTyika2u3wvpQwJRCrAlVOPeohoVE,3747
|
|
135
|
+
tests/infra/test_database_manager.py,sha256=SMU_pcCsW89b6GyykAU2LEO8UaHL9gO5rdeWGFP3A6g,2503
|
|
136
|
+
tests/infra/test_gemini_adapter.py,sha256=gMjSgxh854sC08vYQpH6QSIX9w921U3g_Jrt_HU1i1Y,6292
|
|
137
|
+
tests/infra/test_google_chat_app.py,sha256=D1iUaGy8Z-PHufJuQ607lGEUOFueedoziXR8J9b7qmM,2363
|
|
138
|
+
tests/infra/test_llm_client.py,sha256=i5uRPy3k2csoNOg16dlVAaZq93MDTk5OxLgRPrsyDow,7619
|
|
139
|
+
tests/infra/test_llm_proxy.py,sha256=Y9F8ozVsnPLOiIt_Minr_VvANEz0x0JIPvFaWJBCLgk,5753
|
|
140
|
+
tests/infra/test_mail_app.py,sha256=6Mhj3HbnQ_sVaQc7wgTpIEFb2GAzc4kkFNWgPWBCmp0,3727
|
|
141
|
+
tests/infra/test_openai_adapter.py,sha256=4CLLIOqQLaC_zpc3clyoA9fiMu5uJmfDoPqs7hEw4Qo,4319
|
|
142
|
+
tests/infra/test_redis_session_manager_service.py,sha256=NbrUVxmEmWIZc9TtnFd1IiWwm1N0Ih0y7chP7z5Mx34,4914
|
|
143
|
+
tests/infra/connectors/__init__.py,sha256=5JqK9sZ6jBuK83zDQokUhxQ0wuJJJ9DXB8pYCLkX7X4,102
|
|
144
|
+
tests/infra/connectors/test_google_drive_connector.py,sha256=UxbR64xiDpFyeE18--BHiKgvwEuaWt9b4Cf6bL6LreM,4434
|
|
145
|
+
tests/infra/connectors/test_local_file_connector.py,sha256=-1wpjXt2DOn_NbSUerdGFd-g-NI3rWS5vDoL3PFqxGA,3459
|
|
146
|
+
tests/infra/connectors/test_s3_connector.py,sha256=2hsJvKPyTWQj6kkNjtpRwsLNdvW3O5N5JlhzUM67x5Q,3512
|
|
147
|
+
tests/repositories/__init__.py,sha256=5JqK9sZ6jBuK83zDQokUhxQ0wuJJJ9DXB8pYCLkX7X4,102
|
|
148
|
+
tests/repositories/test_database_manager.py,sha256=C6pqzxPCtk0DcZE7VNaFCT5ahONO7mWFKDo1bxb-9sU,3990
|
|
149
|
+
tests/repositories/test_document_repo.py,sha256=sqNL5yVM_8phPaxcYR3FupuTWN5RNG8yLfeDxR07uIM,2543
|
|
150
|
+
tests/repositories/test_llm_query_repo.py,sha256=Vdu85MI_L7Nh5ksNz9X3d4hORp9hXaXPwH1AUbuN5YE,13228
|
|
151
|
+
tests/repositories/test_models.py,sha256=CJbz3U89BgPKmP61pwGdwDW8vHvPROKwYfqcg4lx-_Q,1627
|
|
152
|
+
tests/repositories/test_profile_repo.py,sha256=Ex9R5JH2uyam8dt8Nl-1yiNYYj72Ma9A3Jlo_JkwktI,4981
|
|
153
|
+
tests/repositories/test_tasks_repo.py,sha256=ZtOOjJTb_j8dKEpirZTQAnR9fhDDO7xQWZU710So9Bk,2769
|
|
154
|
+
tests/repositories/test_vs_repo.py,sha256=PGN5PqQBtlwMC_UFU3qMSqxtoBSNz1YvZK4yYj0O0UU,4595
|
|
155
|
+
tests/services/__init__.py,sha256=5JqK9sZ6jBuK83zDQokUhxQ0wuJJJ9DXB8pYCLkX7X4,102
|
|
156
|
+
tests/services/test_dispatcher_service.py,sha256=iALQx0I94SehG4eXqwvdswyYrPVShXFIlk-GwwbWyzw,13086
|
|
157
|
+
tests/services/test_document_service.py,sha256=Z62VjjIn1EPgDT2_2jEVI6AQoO3yOdskc_FDqlvML1Q,8085
|
|
158
|
+
tests/services/test_excel_service.py,sha256=7Gyy82MFqOVFIGL7RXMIOmal22ne-lsgAfY16azDAMM,8434
|
|
159
|
+
tests/services/test_file_processor_service.py,sha256=XzdA581hoAhevp8atqgI7jxTY1gmHE7rnMllihRS9S0,4794
|
|
160
|
+
tests/services/test_history_service.py,sha256=VF6IgogsgaFe64LNDeXMFcLrWjuGLf3Vj_srnFfkneM,7273
|
|
161
|
+
tests/services/test_jwt_service.py,sha256=3TYtuPk1ps0aa5TKGvd30Q4F7Q1FEsqK6Gr1wjW8-q8,10325
|
|
162
|
+
tests/services/test_load_documents_service.py,sha256=zDcHSXVQAdtAZCVWecTl-pYlkA4Sp8JLxKpu82LB69A,4640
|
|
163
|
+
tests/services/test_mail_service.py,sha256=PPy5XA2lYFFBNdmU1Ea-cfqszwQZrrqZSZU1OQ26lDE,2295
|
|
164
|
+
tests/services/test_profile_service.py,sha256=WzvVxeK5AYUDWJLBRB43vVDLHi64cIkPYPcynMEGZzM,14831
|
|
165
|
+
tests/services/test_prompt_manager_service.py,sha256=B6j12RNjljAKZnd7vy1CNAdZxwKiTWD5l4uxOGKVuvE,9395
|
|
166
|
+
tests/services/test_query_service.py,sha256=vq8dhteJOFiA0eGo1s5eBzasx7noZFrv96XdKFKhmS8,11331
|
|
167
|
+
tests/services/test_search_service.py,sha256=n8C5mjDDCVX4NAJvS3mKgw-WsLWu5qUA8eTOxy-g9NU,1183
|
|
168
|
+
tests/services/test_sql_service.py,sha256=bHDiPzjfM7-mbM4eEXlMVk3vcvefhlGCx3bdIrlriVM,7753
|
|
169
|
+
tests/services/test_tasks_service.py,sha256=V_WcglSX4CAtOkkKhZKl7Q92LsODHLRu66TqydiSQP4,10598
|
|
170
|
+
tests/services/test_user_feedback_service.py,sha256=HMU75j48jT-Chls78QEXoq92Hpq7TXP-m8xXIAL0rK0,15859
|
|
171
|
+
tests/services/test_user_session_context_service.py,sha256=c49RqHuoY6W_u-eR-UR05SNwDfqvRpRQWAJ6Ghyh7sQ,6799
|
|
172
|
+
tests/views/__init__.py,sha256=5JqK9sZ6jBuK83zDQokUhxQ0wuJJJ9DXB8pYCLkX7X4,102
|
|
173
|
+
tests/views/test_change_password_view.py,sha256=5dIjx6_-rNHqj9yrkz00ajMxmZENBoTwN0gNFGUzxRE,9213
|
|
174
|
+
tests/views/test_chat_token_request_view.py,sha256=jwgGaNmBPTK9irKTqsDTTTIZawpYBxfGXBUv0xxvCQ0,9850
|
|
175
|
+
tests/views/test_chat_view.py,sha256=24dySNWlpu7EXkIeFJwUUXwb5xAq3Kdv2IVzPSVSWuY,3798
|
|
176
|
+
tests/views/test_download_file_view.py,sha256=l0o5DnI29ByV7N5kK4UoTKhPmStKuiAOZKFPxCSZszE,5969
|
|
177
|
+
tests/views/test_external_chat_login_view.py,sha256=1PLOPqVJjR-7d1DV24uuA7QOYEeKsIusjw6poBYTFB8,5405
|
|
178
|
+
tests/views/test_external_login_view.py,sha256=Lf4VHxTyddx_RSTvYoxcZr8cG82bvJ0pdVqU1CJpwcg,4394
|
|
179
|
+
tests/views/test_file_store_view.py,sha256=hT2k5-ppGNphKnQwueTvyzHQUGJ1umVXpPNOpTL8GOI,4837
|
|
180
|
+
tests/views/test_forgot_password_view.py,sha256=GeaGMQpY20T9_cM_kBTrwRcx-Z1zsDbytB-KoyM9p2o,6224
|
|
181
|
+
tests/views/test_history_view.py,sha256=AxNNjVEEYVdLDNa6aZaWdSE3FMquiqqDGxvl57UYdD8,12322
|
|
182
|
+
tests/views/test_home_view.py,sha256=uqPCQnDyTm25l6YLrwzINrHMd16oyY3yrqXui1LChjg,2438
|
|
183
|
+
tests/views/test_llm_query_view.py,sha256=3Mf_mfZNW9wTG7BivwEW0OL-QXplV2zRakl5rIUOvu8,5121
|
|
184
|
+
tests/views/test_login_view.py,sha256=P-6n6LGnQ87pC9a48FMz0okVm7eukpSeIKDnMUABs3I,4812
|
|
185
|
+
tests/views/test_prompt_view.py,sha256=y8mIXc0AqOoSe2QJJX3UdiFgA1a2TYFCcIwGiupxR0U,4563
|
|
186
|
+
tests/views/test_signup_view.py,sha256=WVh11rzH2MbJWS9rvYIn9R1aCWJLnpIhIK_k7MQxi0I,6534
|
|
187
|
+
tests/views/test_tasks_review_view.py,sha256=HXbAY99rbcdg-ZoaU3kxp-jNTPgOhgiTyKmV9rUcFyQ,3743
|
|
188
|
+
tests/views/test_tasks_view.py,sha256=TNdV69Vt17uc-vBI37A7qtRNqyPho2MoW7cgGxQKecU,4551
|
|
189
|
+
tests/views/test_user_feedback_view.py,sha256=IfKOpsncmf5ciMDsGuPtro9GdKXkxhRzsysVlEEM_HA,9181
|
|
190
|
+
tests/views/test_verify_user_view.py,sha256=dxQ3ibOETEuP8M50Gmwbmzj2L6UU7PAyC91Wp9Xs0K0,4772
|
|
191
|
+
iatoolkit-0.7.12.dist-info/METADATA,sha256=vhLpVH2zk4dOidIF2--_Z-aSRdqIj530gc-e4zSNCgo,9301
|
|
192
|
+
iatoolkit-0.7.12.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
|
|
193
|
+
iatoolkit-0.7.12.dist-info/top_level.txt,sha256=or0Ar3Su6BhTy86zRrUwMAWtsR8Nk-tFEwdC0CZpKCs,16
|
|
194
|
+
iatoolkit-0.7.12.dist-info/RECORD,,
|
tests/__init__.py
ADDED
tests/common/__init__.py
ADDED
|
File without changes
|
|
@@ -0,0 +1,279 @@
|
|
|
1
|
+
# Copyright (c) 2024 Fernando Libedinsky
|
|
2
|
+
# Product: IAToolkit
|
|
3
|
+
#
|
|
4
|
+
# IAToolkit is open source software.
|
|
5
|
+
|
|
6
|
+
from flask import Flask, Response
|
|
7
|
+
from unittest.mock import patch, MagicMock
|
|
8
|
+
from iatoolkit.common.auth import IAuthentication
|
|
9
|
+
import pytest
|
|
10
|
+
from datetime import datetime, timezone
|
|
11
|
+
from iatoolkit.repositories.profile_repo import ProfileRepo
|
|
12
|
+
from iatoolkit.services.jwt_service import JWTService
|
|
13
|
+
from werkzeug.exceptions import HTTPException
|
|
14
|
+
|
|
15
|
+
CURRENT_TIME = datetime.now(timezone.utc).timestamp()
|
|
16
|
+
|
|
17
|
+
|
|
18
|
+
class TestAuth:
|
|
19
|
+
|
|
20
|
+
def setup_method(self):
|
|
21
|
+
self.app = Flask(__name__)
|
|
22
|
+
self.app.config['TESTING'] = True
|
|
23
|
+
|
|
24
|
+
self.profile_repo = MagicMock(spec=ProfileRepo)
|
|
25
|
+
self.jwt_service = MagicMock(spec=JWTService)
|
|
26
|
+
self.iauth_service = IAuthentication(
|
|
27
|
+
profile_repo=self.profile_repo,
|
|
28
|
+
jwt_service=self.jwt_service
|
|
29
|
+
)
|
|
30
|
+
|
|
31
|
+
@self.app.route('/<company_short_name>/protected')
|
|
32
|
+
def protected(company_short_name):
|
|
33
|
+
with self.app.test_request_context():
|
|
34
|
+
auth_result = self.iauth_service.check_if_user_is_logged_in(company_short_name)
|
|
35
|
+
if isinstance(auth_result, Response):
|
|
36
|
+
return auth_result
|
|
37
|
+
return "Access Granted", 200
|
|
38
|
+
|
|
39
|
+
@self.app.route('/login')
|
|
40
|
+
def login():
|
|
41
|
+
return "Login Page", 200
|
|
42
|
+
|
|
43
|
+
self.client = self.app.test_client()
|
|
44
|
+
|
|
45
|
+
def teardown_method(self):
|
|
46
|
+
patch.stopall()
|
|
47
|
+
|
|
48
|
+
# --- Pruebas para check_if_user_is_logged_in (de TestAuth original) ---
|
|
49
|
+
|
|
50
|
+
def test_allows_access_if_user_authenticated_and_active(self):
|
|
51
|
+
with patch('iatoolkit.common.auth.SessionManager.get') as mock_get, \
|
|
52
|
+
patch('iatoolkit.common.auth.SessionManager.set') as mock_set:
|
|
53
|
+
mock_get.side_effect = lambda key, default=None: {
|
|
54
|
+
'user': {'id': 1, 'username': 'test_user'},
|
|
55
|
+
'company_short_name': 'test_company',
|
|
56
|
+
'last_activity': CURRENT_TIME
|
|
57
|
+
}.get(key, default)
|
|
58
|
+
|
|
59
|
+
response = self.client.get('/test_company/protected')
|
|
60
|
+
|
|
61
|
+
assert response.status_code == 200
|
|
62
|
+
assert response.data == b"Access Granted"
|
|
63
|
+
mock_set.assert_called_with("last_activity", pytest.approx(CURRENT_TIME, 1))
|
|
64
|
+
|
|
65
|
+
def test_redirect_if_user_not_authenticated(self):
|
|
66
|
+
with patch('iatoolkit.common.auth.SessionManager.get') as mock_get:
|
|
67
|
+
mock_get.side_effect = lambda key, default=None: None if key == "user" else default
|
|
68
|
+
response = self.client.get('/test_company/protected')
|
|
69
|
+
assert response.status_code == 302
|
|
70
|
+
assert "/login" in response.headers['Location']
|
|
71
|
+
|
|
72
|
+
def test_redirect_if_last_activity_missing(self):
|
|
73
|
+
with patch('iatoolkit.common.auth.SessionManager.get') as mock_get, \
|
|
74
|
+
patch('iatoolkit.common.auth.SessionManager.clear') as mock_clear:
|
|
75
|
+
mock_get.side_effect = lambda key, default=None: {
|
|
76
|
+
'user': {'id': 1, 'username': 'test_user'},
|
|
77
|
+
'company_short_name': 'test_company'
|
|
78
|
+
}.get(key, default)
|
|
79
|
+
|
|
80
|
+
response = self.client.get('/test_company/protected')
|
|
81
|
+
|
|
82
|
+
assert response.status_code == 302
|
|
83
|
+
assert "/login" in response.headers['Location']
|
|
84
|
+
mock_clear.assert_called_once()
|
|
85
|
+
|
|
86
|
+
# --- Pruebas para verify (de TestAuthVerify original) ---
|
|
87
|
+
|
|
88
|
+
def test_verify_with_jwt_success(self):
|
|
89
|
+
with patch.object(self.iauth_service, '_authenticate_via_chat_jwt') as mock_auth_jwt, \
|
|
90
|
+
patch.object(self.iauth_service, '_authenticate_via_api_key') as mock_auth_api_key:
|
|
91
|
+
mock_auth_jwt.return_value = (123, 'ext_user_1', None)
|
|
92
|
+
|
|
93
|
+
with self.app.test_request_context():
|
|
94
|
+
result = self.iauth_service.verify('some_company')
|
|
95
|
+
|
|
96
|
+
assert result['success'] is True
|
|
97
|
+
assert result['company_id'] == 123
|
|
98
|
+
assert result['external_user_id'] == 'ext_user_1'
|
|
99
|
+
mock_auth_jwt.assert_called_once_with('some_company')
|
|
100
|
+
mock_auth_api_key.assert_not_called()
|
|
101
|
+
|
|
102
|
+
def test_verify_with_jwt_failure(self):
|
|
103
|
+
with patch.object(self.iauth_service, '_authenticate_via_chat_jwt') as mock_auth_jwt, \
|
|
104
|
+
patch.object(self.iauth_service, '_authenticate_via_api_key') as mock_auth_api_key:
|
|
105
|
+
mock_auth_jwt.return_value = (None, None, "Error de JWT")
|
|
106
|
+
|
|
107
|
+
with self.app.test_request_context():
|
|
108
|
+
result = self.iauth_service.verify('some_company')
|
|
109
|
+
|
|
110
|
+
assert result == {"error_message": "Fallo de autenticación JWT"}
|
|
111
|
+
mock_auth_api_key.assert_not_called()
|
|
112
|
+
|
|
113
|
+
def test_verify_with_api_key_success(self):
|
|
114
|
+
with patch.object(self.iauth_service, '_authenticate_via_chat_jwt') as mock_auth_jwt, \
|
|
115
|
+
patch.object(self.iauth_service, '_authenticate_via_api_key') as mock_auth_api_key, \
|
|
116
|
+
patch.object(self.iauth_service, 'check_if_user_is_logged_in') as mock_check_if_logged_in:
|
|
117
|
+
mock_auth_jwt.return_value = (None, None, None)
|
|
118
|
+
mock_auth_api_key.return_value = (456, None)
|
|
119
|
+
|
|
120
|
+
with self.app.test_request_context():
|
|
121
|
+
result = self.iauth_service.verify('some_company', body_external_user_id='body_user_2')
|
|
122
|
+
|
|
123
|
+
assert result['success'] is True
|
|
124
|
+
assert result['company_id'] == 456
|
|
125
|
+
assert result['external_user_id'] == 'body_user_2'
|
|
126
|
+
mock_auth_api_key.assert_called_once_with('some_company')
|
|
127
|
+
mock_check_if_logged_in.assert_not_called()
|
|
128
|
+
|
|
129
|
+
def test_verify_with_api_key_failure(self):
|
|
130
|
+
with patch.object(self.iauth_service, '_authenticate_via_chat_jwt') as mock_auth_jwt, \
|
|
131
|
+
patch.object(self.iauth_service, '_authenticate_via_api_key') as mock_auth_api_key:
|
|
132
|
+
mock_auth_jwt.return_value = (None, None, None)
|
|
133
|
+
mock_auth_api_key.return_value = (None, "Error de API Key")
|
|
134
|
+
|
|
135
|
+
with self.app.test_request_context():
|
|
136
|
+
result = self.iauth_service.verify('some_company')
|
|
137
|
+
|
|
138
|
+
assert result == {"error_message": "Fallo de autenticación API Key"}
|
|
139
|
+
|
|
140
|
+
def test_verify_with_session_success(self):
|
|
141
|
+
with patch.object(self.iauth_service, '_authenticate_via_chat_jwt') as mock_auth_jwt, \
|
|
142
|
+
patch.object(self.iauth_service, '_authenticate_via_api_key') as mock_auth_api_key, \
|
|
143
|
+
patch.object(self.iauth_service, 'check_if_user_is_logged_in') as mock_check_if_logged_in, \
|
|
144
|
+
patch('iatoolkit.common.auth.SessionManager.get') as mock_session_get:
|
|
145
|
+
mock_auth_jwt.return_value = (None, None, None)
|
|
146
|
+
mock_auth_api_key.return_value = (None, None)
|
|
147
|
+
mock_check_if_logged_in.return_value = None
|
|
148
|
+
mock_session_get.side_effect = lambda key, default=None: {'user_id': 789, 'company_id': 999}.get(key,
|
|
149
|
+
default)
|
|
150
|
+
|
|
151
|
+
with self.app.test_request_context():
|
|
152
|
+
result = self.iauth_service.verify('some_company')
|
|
153
|
+
|
|
154
|
+
assert result['success'] is True
|
|
155
|
+
assert result['company_id'] == 999
|
|
156
|
+
assert result['local_user_id'] == 789
|
|
157
|
+
mock_check_if_logged_in.assert_called_once_with('some_company')
|
|
158
|
+
|
|
159
|
+
def test_verify_with_session_incomplete_data(self):
|
|
160
|
+
with patch.object(self.iauth_service, '_authenticate_via_chat_jwt') as mock_auth_jwt, \
|
|
161
|
+
patch.object(self.iauth_service, '_authenticate_via_api_key') as mock_auth_api_key, \
|
|
162
|
+
patch.object(self.iauth_service, 'check_if_user_is_logged_in') as mock_check_if_logged_in, \
|
|
163
|
+
patch('iatoolkit.common.auth.SessionManager.get') as mock_session_get:
|
|
164
|
+
mock_auth_jwt.return_value = (None, None, None)
|
|
165
|
+
mock_auth_api_key.return_value = (None, None)
|
|
166
|
+
mock_check_if_logged_in.return_value = None
|
|
167
|
+
mock_session_get.side_effect = lambda key, default=None: {'user_id': 789}.get(key, default)
|
|
168
|
+
|
|
169
|
+
with self.app.test_request_context():
|
|
170
|
+
result = self.iauth_service.verify('some_company')
|
|
171
|
+
|
|
172
|
+
assert result == {"error_message": "Fallo interno en la autenticación o no autenticado"}
|
|
173
|
+
|
|
174
|
+
def test_verify_with_session_check_fails_by_exception(self):
|
|
175
|
+
with patch.object(self.iauth_service, '_authenticate_via_chat_jwt') as mock_auth_jwt, \
|
|
176
|
+
patch.object(self.iauth_service, '_authenticate_via_api_key') as mock_auth_api_key, \
|
|
177
|
+
patch.object(self.iauth_service, 'check_if_user_is_logged_in') as mock_check_if_logged_in:
|
|
178
|
+
mock_auth_jwt.return_value = (None, None, None)
|
|
179
|
+
mock_auth_api_key.return_value = (None, None)
|
|
180
|
+
mock_check_if_logged_in.side_effect = HTTPException
|
|
181
|
+
|
|
182
|
+
with self.app.test_request_context(), pytest.raises(HTTPException):
|
|
183
|
+
self.iauth_service.verify('some_company')
|
|
184
|
+
|
|
185
|
+
# --- Nuevas pruebas para _authenticate_via_api_key ---
|
|
186
|
+
|
|
187
|
+
def test_authenticate_via_api_key_success(self):
|
|
188
|
+
with self.app.test_request_context(headers={'Authorization': 'Bearer valid_key'}):
|
|
189
|
+
mock_api_entry = MagicMock()
|
|
190
|
+
mock_api_entry.company.short_name = 'test_company'
|
|
191
|
+
mock_api_entry.company_id = 123
|
|
192
|
+
self.profile_repo.get_active_api_key_entry.return_value = mock_api_entry
|
|
193
|
+
|
|
194
|
+
company_id, error = self.iauth_service._authenticate_via_api_key('test_company')
|
|
195
|
+
|
|
196
|
+
assert company_id == 123
|
|
197
|
+
assert error is None
|
|
198
|
+
self.profile_repo.get_active_api_key_entry.assert_called_once_with('valid_key')
|
|
199
|
+
|
|
200
|
+
def test_authenticate_via_api_key_no_header(self):
|
|
201
|
+
with self.app.test_request_context(headers={}):
|
|
202
|
+
company_id, error = self.iauth_service._authenticate_via_api_key('test_company')
|
|
203
|
+
assert company_id is None
|
|
204
|
+
assert error is None
|
|
205
|
+
self.profile_repo.get_active_api_key_entry.assert_not_called()
|
|
206
|
+
|
|
207
|
+
def test_authenticate_via_api_key_wrong_scheme(self):
|
|
208
|
+
with self.app.test_request_context(headers={'Authorization': 'Basic some_token'}):
|
|
209
|
+
company_id, error = self.iauth_service._authenticate_via_api_key('test_company')
|
|
210
|
+
assert company_id is None
|
|
211
|
+
assert error is None
|
|
212
|
+
self.profile_repo.get_active_api_key_entry.assert_not_called()
|
|
213
|
+
|
|
214
|
+
def test_authenticate_via_api_key_inactive_key(self):
|
|
215
|
+
with self.app.test_request_context(headers={'Authorization': 'Bearer inactive_key'}):
|
|
216
|
+
self.profile_repo.get_active_api_key_entry.return_value = None
|
|
217
|
+
company_id, error = self.iauth_service._authenticate_via_api_key('test_company')
|
|
218
|
+
assert company_id is None
|
|
219
|
+
assert error == "API Key inválida o inactiva"
|
|
220
|
+
|
|
221
|
+
def test_authenticate_via_api_key_company_mismatch(self):
|
|
222
|
+
with self.app.test_request_context(headers={'Authorization': 'Bearer valid_key'}):
|
|
223
|
+
mock_api_entry = MagicMock()
|
|
224
|
+
mock_api_entry.company.short_name = 'other_company'
|
|
225
|
+
self.profile_repo.get_active_api_key_entry.return_value = mock_api_entry
|
|
226
|
+
|
|
227
|
+
company_id, error = self.iauth_service._authenticate_via_api_key('test_company')
|
|
228
|
+
assert company_id is None
|
|
229
|
+
assert error == "API Key no es válida para la compañía test_company"
|
|
230
|
+
|
|
231
|
+
def test_authenticate_via_api_key_repo_exception(self):
|
|
232
|
+
with self.app.test_request_context(headers={'Authorization': 'Bearer any_key'}):
|
|
233
|
+
self.profile_repo.get_active_api_key_entry.side_effect = Exception("DB error")
|
|
234
|
+
company_id, error = self.iauth_service._authenticate_via_api_key('test_company')
|
|
235
|
+
assert company_id is None
|
|
236
|
+
assert error == "Error interno del servidor al validar API Key"
|
|
237
|
+
|
|
238
|
+
# --- Nuevas pruebas para _authenticate_via_chat_jwt ---
|
|
239
|
+
|
|
240
|
+
def test_authenticate_via_chat_jwt_success(self):
|
|
241
|
+
with self.app.test_request_context(headers={'X-Chat-Token': 'valid_jwt'}):
|
|
242
|
+
self.jwt_service.validate_chat_jwt.return_value = {'company_id': 123, 'external_user_id': 'ext_user'}
|
|
243
|
+
company_id, external_user_id, error = self.iauth_service._authenticate_via_chat_jwt('test_company')
|
|
244
|
+
assert company_id == 123
|
|
245
|
+
assert external_user_id == 'ext_user'
|
|
246
|
+
assert error is None
|
|
247
|
+
self.jwt_service.validate_chat_jwt.assert_called_once_with('valid_jwt', 'test_company')
|
|
248
|
+
|
|
249
|
+
def test_authenticate_via_chat_jwt_no_header(self):
|
|
250
|
+
with self.app.test_request_context(headers={}):
|
|
251
|
+
company_id, external_user_id, error = self.iauth_service._authenticate_via_chat_jwt('test_company')
|
|
252
|
+
assert company_id is None
|
|
253
|
+
assert external_user_id is None
|
|
254
|
+
assert error is None
|
|
255
|
+
self.jwt_service.validate_chat_jwt.assert_not_called()
|
|
256
|
+
|
|
257
|
+
def test_authenticate_via_chat_jwt_validation_fails(self):
|
|
258
|
+
with self.app.test_request_context(headers={'X-Chat-Token': 'invalid_jwt'}):
|
|
259
|
+
self.jwt_service.validate_chat_jwt.return_value = None
|
|
260
|
+
company_id, external_user_id, error = self.iauth_service._authenticate_via_chat_jwt('test_company')
|
|
261
|
+
assert company_id is None
|
|
262
|
+
assert external_user_id is None
|
|
263
|
+
assert error == "Token de chat expirado, debes reingresar al chat"
|
|
264
|
+
|
|
265
|
+
def test_authenticate_via_chat_jwt_incomplete_payload_no_company_id(self):
|
|
266
|
+
with self.app.test_request_context(headers={'X-Chat-Token': 'valid_jwt'}):
|
|
267
|
+
self.jwt_service.validate_chat_jwt.return_value = {'external_user_id': 'ext_user'}
|
|
268
|
+
company_id, external_user_id, error = self.iauth_service._authenticate_via_chat_jwt('test_company')
|
|
269
|
+
assert company_id is None
|
|
270
|
+
assert external_user_id is None
|
|
271
|
+
assert error == "Token de chat con formato interno incorrecto"
|
|
272
|
+
|
|
273
|
+
def test_authenticate_via_chat_jwt_incomplete_payload_no_external_id(self):
|
|
274
|
+
with self.app.test_request_context(headers={'X-Chat-Token': 'valid_jwt'}):
|
|
275
|
+
self.jwt_service.validate_chat_jwt.return_value = {'company_id': 123}
|
|
276
|
+
company_id, external_user_id, error = self.iauth_service._authenticate_via_chat_jwt('test_company')
|
|
277
|
+
assert company_id is None
|
|
278
|
+
assert external_user_id is None
|
|
279
|
+
assert error == "Token de chat con formato interno incorrecto"
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
# Copyright (c) 2024 Fernando Libedinsky
|
|
2
|
+
# Product: IAToolkit
|
|
3
|
+
#
|
|
4
|
+
# IAToolkit is open source software.
|
|
5
|
+
|
|
6
|
+
from flask import Flask
|
|
7
|
+
from unittest.mock import patch
|
|
8
|
+
|
|
9
|
+
|
|
10
|
+
class TestRoutes:
|
|
11
|
+
def setup_method(self):
|
|
12
|
+
# Configurar la aplicación Flask para pruebas
|
|
13
|
+
self.app = Flask(__name__)
|
|
14
|
+
self.app.config['VERSION'] = "1.0.0"
|
|
15
|
+
self.app.secret_key = 'test_secret'
|
|
16
|
+
|
|
17
|
+
# Concentramos todos los mocks y patches aquí:
|
|
18
|
+
|
|
19
|
+
# Patch para el SessionManager (por ejemplo para evitar lecturas de sesión reales)
|
|
20
|
+
self.session_manager_patch = patch("common.routes.SessionManager")
|
|
21
|
+
self.mock_session_manager = self.session_manager_patch.start()
|
|
22
|
+
# Para este ejemplo, no es necesario configurar un return_value, pero se podría definir según se requiera
|
|
23
|
+
|
|
24
|
+
# Patch para la función flash, reemplazándola para que no intente enviar mensajes reales
|
|
25
|
+
self.flash_patch = patch("common.routes.flash")
|
|
26
|
+
self.mock_flash = self.flash_patch.start()
|
|
27
|
+
|
|
28
|
+
# Patch para render_template, que es usado por la ruta "/about" y otros
|
|
29
|
+
self.render_template_patch = patch("common.routes.render_template", return_value="<html>About</html>")
|
|
30
|
+
self.mock_render_template = self.render_template_patch.start()
|
|
31
|
+
|
|
32
|
+
# Registrar las rutas en la aplicación
|
|
33
|
+
from iatoolkit.common.routes import register_routes
|
|
34
|
+
register_routes(self.app)
|
|
35
|
+
|
|
36
|
+
# Crear el cliente de pruebas
|
|
37
|
+
self.client = self.app.test_client()
|
|
38
|
+
|
|
39
|
+
def teardown_method(self, method):
|
|
40
|
+
patch.stopall()
|
|
41
|
+
|
|
42
|
+
|