iatoolkit 0.9.4__py3-none-any.whl → 0.10.1__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/base_company.py +5 -2
- iatoolkit/iatoolkit.py +3 -0
- iatoolkit/repositories/models.py +2 -2
- iatoolkit/repositories/profile_repo.py +1 -1
- iatoolkit/services/branding_service.py +70 -0
- iatoolkit/templates/chat.html +25 -15
- iatoolkit/templates/home.html +0 -2
- iatoolkit/views/chat_view.py +9 -2
- iatoolkit/views/external_chat_login_view.py +10 -3
- {iatoolkit-0.9.4.dist-info → iatoolkit-0.10.1.dist-info}/METADATA +1 -1
- {iatoolkit-0.9.4.dist-info → iatoolkit-0.10.1.dist-info}/RECORD +13 -12
- {iatoolkit-0.9.4.dist-info → iatoolkit-0.10.1.dist-info}/WHEEL +0 -0
- {iatoolkit-0.9.4.dist-info → iatoolkit-0.10.1.dist-info}/top_level.txt +0 -0
iatoolkit/base_company.py
CHANGED
|
@@ -26,8 +26,10 @@ class BaseCompany(ABC):
|
|
|
26
26
|
self.company = self.profile_repo.get_company_by_short_name(short_name)
|
|
27
27
|
return self.company
|
|
28
28
|
|
|
29
|
-
def _create_company(self, name: str,
|
|
30
|
-
company_obj = Company(
|
|
29
|
+
def _create_company(self, short_name: str, name: str, branding: dict | None = None) -> Company:
|
|
30
|
+
company_obj = Company(short_name=short_name,
|
|
31
|
+
name=name,
|
|
32
|
+
branding=branding)
|
|
31
33
|
self.company = self.profile_repo.create_company(company_obj)
|
|
32
34
|
return self.company
|
|
33
35
|
|
|
@@ -67,6 +69,7 @@ class BaseCompany(ABC):
|
|
|
67
69
|
**kwargs
|
|
68
70
|
)
|
|
69
71
|
|
|
72
|
+
|
|
70
73
|
@abstractmethod
|
|
71
74
|
# initialize all the database tables needed
|
|
72
75
|
def register_company(self):
|
iatoolkit/iatoolkit.py
CHANGED
|
@@ -278,6 +278,7 @@ class IAToolkit:
|
|
|
278
278
|
from iatoolkit.services.profile_service import ProfileService
|
|
279
279
|
from iatoolkit.services.jwt_service import JWTService
|
|
280
280
|
from iatoolkit.services.dispatcher_service import Dispatcher
|
|
281
|
+
from iatoolkit.services.branding_service import BrandingService
|
|
281
282
|
|
|
282
283
|
binder.bind(QueryService, to=QueryService)
|
|
283
284
|
binder.bind(TaskService, to=TaskService)
|
|
@@ -290,6 +291,8 @@ class IAToolkit:
|
|
|
290
291
|
binder.bind(ProfileService, to=ProfileService)
|
|
291
292
|
binder.bind(JWTService, to=JWTService)
|
|
292
293
|
binder.bind(Dispatcher, to=Dispatcher)
|
|
294
|
+
binder.bind(BrandingService, to=BrandingService)
|
|
295
|
+
|
|
293
296
|
|
|
294
297
|
def _bind_infrastructure(self, binder: Binder):
|
|
295
298
|
from iatoolkit.infra.llm_client import llmClient
|
iatoolkit/repositories/models.py
CHANGED
|
@@ -57,10 +57,10 @@ class Company(Base):
|
|
|
57
57
|
openai_api_key = Column(String, nullable=True)
|
|
58
58
|
gemini_api_key = Column(String, nullable=True)
|
|
59
59
|
|
|
60
|
-
|
|
60
|
+
branding = Column(JSON, nullable=True)
|
|
61
61
|
parameters = Column(JSON, nullable=True, default={})
|
|
62
62
|
created_at = Column(DateTime, default=datetime.now)
|
|
63
|
-
allow_jwt = Column(Boolean, default=
|
|
63
|
+
allow_jwt = Column(Boolean, default=True, nullable=True)
|
|
64
64
|
|
|
65
65
|
documents = relationship("Document",
|
|
66
66
|
back_populates="company",
|
|
@@ -73,7 +73,7 @@ class ProfileRepo:
|
|
|
73
73
|
company = self.session.query(Company).filter_by(name=new_company.name).first()
|
|
74
74
|
if company:
|
|
75
75
|
company.parameters = new_company.parameters
|
|
76
|
-
company.
|
|
76
|
+
company.branding = new_company.branding
|
|
77
77
|
else:
|
|
78
78
|
self.session.add(new_company)
|
|
79
79
|
company = new_company
|
|
@@ -0,0 +1,70 @@
|
|
|
1
|
+
# Copyright (c) 2024 Fernando Libedinsky
|
|
2
|
+
# Product: IAToolkit
|
|
3
|
+
#
|
|
4
|
+
# IAToolkit is open source software.
|
|
5
|
+
|
|
6
|
+
from iatoolkit.repositories.models import Company
|
|
7
|
+
|
|
8
|
+
|
|
9
|
+
class BrandingService:
|
|
10
|
+
"""
|
|
11
|
+
Servicio centralizado que gestiona la configuración de branding.
|
|
12
|
+
"""
|
|
13
|
+
|
|
14
|
+
def __init__(self):
|
|
15
|
+
"""
|
|
16
|
+
Define los estilos de branding por defecto para la aplicación.
|
|
17
|
+
"""
|
|
18
|
+
self._default_branding = {
|
|
19
|
+
# Colores del contenedor del encabezado
|
|
20
|
+
"header_background_color": "#FFFFFF", # Fondo blanco por defecto
|
|
21
|
+
"header_text_color": "#6C757D", # Color de texto 'muted' de Bootstrap
|
|
22
|
+
|
|
23
|
+
# Estilos para el texto primario (ej. nombre de la compañía)
|
|
24
|
+
"primary_font_weight": "bold",
|
|
25
|
+
"primary_font_size": "1rem",
|
|
26
|
+
|
|
27
|
+
# Estilos para el texto secundario (ej. ID de usuario)
|
|
28
|
+
"secondary_font_weight": "600", # Semibold
|
|
29
|
+
"secondary_font_size": "0.875rem" # Equivale a la clase 'small' de Bootstrap
|
|
30
|
+
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
def get_company_branding(self, company: Company | None) -> dict:
|
|
34
|
+
"""
|
|
35
|
+
Retorna los estilos de branding finales para una compañía,
|
|
36
|
+
fusionando los valores por defecto con los personalizados.
|
|
37
|
+
|
|
38
|
+
Args:
|
|
39
|
+
company: El objeto Company, que puede contener un dict de branding.
|
|
40
|
+
|
|
41
|
+
Returns:
|
|
42
|
+
Un diccionario con todos los estilos de branding listos para usar en la plantilla.
|
|
43
|
+
"""
|
|
44
|
+
# Empezamos con una copia de los valores por defecto
|
|
45
|
+
final_branding_values = self._default_branding.copy()
|
|
46
|
+
|
|
47
|
+
# Si la compañía existe y tiene branding personalizado, lo fusionamos.
|
|
48
|
+
if company and company.branding:
|
|
49
|
+
final_branding_values.update(company.branding)
|
|
50
|
+
|
|
51
|
+
# Construimos las cadenas de estilo completas
|
|
52
|
+
header_style = (
|
|
53
|
+
f"background-color: {final_branding_values['header_background_color']}; "
|
|
54
|
+
f"color: {final_branding_values['header_text_color']};"
|
|
55
|
+
)
|
|
56
|
+
primary_text_style = (
|
|
57
|
+
f"font-weight: {final_branding_values['primary_font_weight']}; "
|
|
58
|
+
f"font-size: {final_branding_values['primary_font_size']};"
|
|
59
|
+
)
|
|
60
|
+
secondary_text_style = (
|
|
61
|
+
f"font-weight: {final_branding_values['secondary_font_weight']}; "
|
|
62
|
+
f"font-size: {final_branding_values['secondary_font_size']};"
|
|
63
|
+
)
|
|
64
|
+
|
|
65
|
+
return {
|
|
66
|
+
"name": company.name if company else "IAToolkit",
|
|
67
|
+
"header_style": header_style,
|
|
68
|
+
"primary_text_style": primary_text_style,
|
|
69
|
+
"secondary_text_style": secondary_text_style
|
|
70
|
+
}
|
iatoolkit/templates/chat.html
CHANGED
|
@@ -4,39 +4,49 @@
|
|
|
4
4
|
|
|
5
5
|
{% block content %}
|
|
6
6
|
<!-- Sección de encabezado con el usuario conectado -->
|
|
7
|
-
<div class="company-section d-flex justify-content-between align-items-center"
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
7
|
+
<div class="company-section d-flex justify-content-between align-items-center px-3 py-2"
|
|
8
|
+
style="{{ branding.header_style }}">
|
|
9
|
+
|
|
10
|
+
<!-- Izquierda: Nombre de la Empresa -->
|
|
11
|
+
<span style="{{ branding.primary_text_style }}">
|
|
12
|
+
{{ branding.name }}
|
|
11
13
|
</span>
|
|
12
14
|
|
|
13
|
-
<!-- Derecha: Grupo de
|
|
15
|
+
<!-- Derecha: Grupo de información y acciones del usuario -->
|
|
14
16
|
<div class="d-flex align-items-center">
|
|
15
|
-
<!--
|
|
16
|
-
<span
|
|
17
|
-
|
|
17
|
+
<!-- 1. ID de Usuario -->
|
|
18
|
+
<span style="{{ branding.secondary_text_style }}">
|
|
19
|
+
{{ external_user_id or user.email }}
|
|
18
20
|
</span>
|
|
19
21
|
|
|
20
|
-
<!--
|
|
22
|
+
<!-- 2. Separador Vertical -->
|
|
23
|
+
<div class="vr mx-3"></div>
|
|
24
|
+
|
|
25
|
+
<!-- 3. Iconos de Acción -->
|
|
21
26
|
<a href="javascript:void(0);" id="history-button"
|
|
22
|
-
class="
|
|
27
|
+
class="action-icon-style" title="Historial con mis consultas" style="color: inherit;">
|
|
23
28
|
<i class="bi bi-clock-history"></i>
|
|
24
29
|
</a>
|
|
25
|
-
|
|
26
|
-
<!-- Icono de Feedback -->
|
|
27
30
|
<a href="javascript:void(0);" id="send-feedback-button"
|
|
28
|
-
class="ms-3 action-icon-style" title="Tu feedback es muy importante">
|
|
31
|
+
class="ms-3 action-icon-style" title="Tu feedback es muy importante" style="color: inherit;">
|
|
29
32
|
<i class="bi bi-emoji-smile"></i>
|
|
30
33
|
</a>
|
|
31
34
|
|
|
32
|
-
<!--
|
|
35
|
+
<!-- 4. Powered by (con mayor separación) -->
|
|
36
|
+
<span class="text-muted ms-4" style="{{ branding.secondary_text_style }}">
|
|
37
|
+
Powered by <strong>IAToolkit</strong>
|
|
38
|
+
</span>
|
|
39
|
+
|
|
40
|
+
|
|
41
|
+
<!-- 5. Icono de cerrar sesión (al final) -->
|
|
33
42
|
{% if user.email %}
|
|
34
43
|
<a href="{{ url_for('logout', company_short_name=company_short_name) }}"
|
|
35
|
-
class="ms-3 action-icon-style" title="Cerrar sesión">
|
|
44
|
+
class="ms-3 action-icon-style" title="Cerrar sesión" style="color: inherit;">
|
|
36
45
|
<i class="bi bi-box-arrow-right"></i>
|
|
37
46
|
</a>
|
|
38
47
|
{% endif %}
|
|
39
48
|
</div>
|
|
49
|
+
|
|
40
50
|
</div>
|
|
41
51
|
|
|
42
52
|
<div id="chat-container"
|
iatoolkit/templates/home.html
CHANGED
|
@@ -95,8 +95,6 @@
|
|
|
95
95
|
|
|
96
96
|
<script>
|
|
97
97
|
// Variables pasadas desde Flask (HomeView)
|
|
98
|
-
const CHAT_TOKEN_REQUEST_URL = "{{ chat_token_request_url|safe }}";
|
|
99
|
-
const PUBLIC_CHAT_URL_TEMPLATE = "{{ public_chat_url_template|safe }}";
|
|
100
98
|
const API_KEY = "{{ api_key|safe }}";
|
|
101
99
|
|
|
102
100
|
$(document).ready(function () {
|
iatoolkit/views/chat_view.py
CHANGED
|
@@ -10,6 +10,7 @@ from injector import inject
|
|
|
10
10
|
import os
|
|
11
11
|
from iatoolkit.common.auth import IAuthentication
|
|
12
12
|
from iatoolkit.services.prompt_manager_service import PromptService
|
|
13
|
+
from iatoolkit.services.branding_service import BrandingService
|
|
13
14
|
|
|
14
15
|
|
|
15
16
|
class ChatView(MethodView):
|
|
@@ -17,10 +18,13 @@ class ChatView(MethodView):
|
|
|
17
18
|
def __init__(self,
|
|
18
19
|
iauthentication: IAuthentication,
|
|
19
20
|
prompt_service: PromptService,
|
|
20
|
-
profile_service: ProfileService
|
|
21
|
+
profile_service: ProfileService,
|
|
22
|
+
branding_service: BrandingService
|
|
23
|
+
):
|
|
21
24
|
self.iauthentication = iauthentication
|
|
22
25
|
self.profile_service = profile_service
|
|
23
26
|
self.prompt_service = prompt_service
|
|
27
|
+
self.branding_service = branding_service
|
|
24
28
|
|
|
25
29
|
def get(self, company_short_name: str):
|
|
26
30
|
# get access credentials
|
|
@@ -40,8 +44,11 @@ class ChatView(MethodView):
|
|
|
40
44
|
# 2. get the company prompts
|
|
41
45
|
prompts = self.prompt_service.get_user_prompts(company_short_name)
|
|
42
46
|
|
|
47
|
+
# 3. get the branding data
|
|
48
|
+
branding_data = self.branding_service.get_company_branding(company)
|
|
49
|
+
|
|
43
50
|
return render_template("chat.html",
|
|
44
|
-
|
|
51
|
+
branding=branding_data,
|
|
45
52
|
company_short_name=company_short_name,
|
|
46
53
|
is_mobile=is_mobile,
|
|
47
54
|
alert_message=alert_message,
|
|
@@ -13,6 +13,7 @@ from iatoolkit.services.profile_service import ProfileService
|
|
|
13
13
|
from iatoolkit.services.query_service import QueryService
|
|
14
14
|
from iatoolkit.services.prompt_manager_service import PromptService
|
|
15
15
|
from iatoolkit.services.jwt_service import JWTService
|
|
16
|
+
from iatoolkit.services.branding_service import BrandingService
|
|
16
17
|
|
|
17
18
|
class ExternalChatLoginView(MethodView):
|
|
18
19
|
@inject
|
|
@@ -21,13 +22,15 @@ class ExternalChatLoginView(MethodView):
|
|
|
21
22
|
query_service: QueryService,
|
|
22
23
|
prompt_service: PromptService,
|
|
23
24
|
iauthentication: IAuthentication,
|
|
24
|
-
jwt_service: JWTService
|
|
25
|
+
jwt_service: JWTService,
|
|
26
|
+
branding_service: BrandingService
|
|
25
27
|
):
|
|
26
28
|
self.profile_service = profile_service
|
|
27
29
|
self.query_service = query_service
|
|
28
30
|
self.prompt_service = prompt_service
|
|
29
31
|
self.iauthentication = iauthentication
|
|
30
32
|
self.jwt_service = jwt_service
|
|
33
|
+
self.branding_service = branding_service
|
|
31
34
|
|
|
32
35
|
def post(self, company_short_name: str):
|
|
33
36
|
data = request.get_json()
|
|
@@ -35,6 +38,7 @@ class ExternalChatLoginView(MethodView):
|
|
|
35
38
|
return jsonify({"error": "Falta external_user_id"}), 400
|
|
36
39
|
|
|
37
40
|
external_user_id = data['external_user_id']
|
|
41
|
+
|
|
38
42
|
# 1. get access credentials
|
|
39
43
|
iaut = self.iauthentication.verify(
|
|
40
44
|
company_short_name,
|
|
@@ -67,13 +71,16 @@ class ExternalChatLoginView(MethodView):
|
|
|
67
71
|
# 3. get the prompt list from backend
|
|
68
72
|
prompts = self.prompt_service.get_user_prompts(company_short_name)
|
|
69
73
|
|
|
70
|
-
# 4.
|
|
74
|
+
# 4. get the branding data
|
|
75
|
+
branding_data = self.branding_service.get_company_branding(company)
|
|
76
|
+
|
|
77
|
+
# 5. render the chat page with the company/user information.
|
|
71
78
|
user_agent = request.user_agent
|
|
72
79
|
is_mobile = user_agent.platform in ["android", "iphone", "ipad"] or "mobile" in user_agent.string.lower()
|
|
73
80
|
|
|
74
81
|
chat_html = render_template("chat.html",
|
|
75
|
-
company=company,
|
|
76
82
|
company_short_name=company_short_name,
|
|
83
|
+
branding=branding_data,
|
|
77
84
|
external_user_id=external_user_id,
|
|
78
85
|
is_mobile=is_mobile,
|
|
79
86
|
auth_method='jwt', # login method is JWT
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
iatoolkit/__init__.py,sha256=4PWjMJjktixtrxF6BY405qyA50Sv967kEP2x-oil6qk,1120
|
|
2
|
-
iatoolkit/base_company.py,sha256=
|
|
2
|
+
iatoolkit/base_company.py,sha256=4usUdOC57Nk1XsawAEyC7mlzb0jROadu64YcYf6poiM,4371
|
|
3
3
|
iatoolkit/cli_commands.py,sha256=G5L9xQXZ0lVFXQWBaE_KEZHyfuiT6PL1nTQRoSdnBzc,2302
|
|
4
4
|
iatoolkit/company_registry.py,sha256=tduqt3oV8iDX_IB1eA7KIgvIxE4edTcy-3qZIXh3Lzw,2549
|
|
5
|
-
iatoolkit/iatoolkit.py,sha256=
|
|
5
|
+
iatoolkit/iatoolkit.py,sha256=EXmHQEgLCqbBP7Cwq6-O1NPj7O3M_2Cg9JLp5xa41ig,16960
|
|
6
6
|
iatoolkit/common/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
7
7
|
iatoolkit/common/auth.py,sha256=8NH6MQXfddLQd1GxrO2op3IYrrP4SMQKoKzj1o1jZmc,8486
|
|
8
8
|
iatoolkit/common/exceptions.py,sha256=EXx40n5htp7UiOM6P1xfJ9U6NMcADqm62dlFaKz7ICU,1154
|
|
@@ -30,12 +30,13 @@ iatoolkit/repositories/__init__.py,sha256=5JqK9sZ6jBuK83zDQokUhxQ0wuJJJ9DXB8pYCL
|
|
|
30
30
|
iatoolkit/repositories/database_manager.py,sha256=UaU7k3s7IRuXhCHTy9GoCeP9K1ad0LBdj_n1a_QjGS0,3108
|
|
31
31
|
iatoolkit/repositories/document_repo.py,sha256=Y7bF1kZB1HWJsAGjWdF7P2aVYeTYNufq9ngQXp7mDkY,1124
|
|
32
32
|
iatoolkit/repositories/llm_query_repo.py,sha256=YT_t7cYGQk8rwzH_17-28aTzO-e2jUfa2rvXy8tugvA,3612
|
|
33
|
-
iatoolkit/repositories/models.py,sha256=
|
|
34
|
-
iatoolkit/repositories/profile_repo.py,sha256=
|
|
33
|
+
iatoolkit/repositories/models.py,sha256=vlSC-Z1cbho5dLrvoMnEroafO7yC3JXsZKn7SqoIXKU,13158
|
|
34
|
+
iatoolkit/repositories/profile_repo.py,sha256=X2tnqAdaae-SA9sQq-gBqopVdf77I_Q9J_Aa38P0tjY,4060
|
|
35
35
|
iatoolkit/repositories/tasks_repo.py,sha256=icVO_r2oPagGnnBhwVFzznnvEEU2EAx-2dlWuWvoDC4,1745
|
|
36
36
|
iatoolkit/repositories/vs_repo.py,sha256=UkpmQQiocgM5IwRBmmWhw3HHzHP6zK1nN3J3TcQgjhc,5300
|
|
37
37
|
iatoolkit/services/__init__.py,sha256=5JqK9sZ6jBuK83zDQokUhxQ0wuJJJ9DXB8pYCLkX7X4,102
|
|
38
38
|
iatoolkit/services/benchmark_service.py,sha256=CdbFYyS3FHFhNzWQEa9ZNjUlmON10DT1nKNbZQ1EUi8,5880
|
|
39
|
+
iatoolkit/services/branding_service.py,sha256=UG-cuVrMmxXRqSxOniDXew52D4WZYH8PZ84DW8EdLuo,2632
|
|
39
40
|
iatoolkit/services/dispatcher_service.py,sha256=ykR1ye6McyCCuaBgwH6r3-PqcLAr4v4ApkPazMSBzbs,14040
|
|
40
41
|
iatoolkit/services/document_service.py,sha256=nMXrNtbHQuc9pSaten0LvKY0kT8_WngBDmZJUP3jNPw,5936
|
|
41
42
|
iatoolkit/services/excel_service.py,sha256=CJGhu7cQl9J6y_ZWSJ-M63Xm-RXR9Zs66oOR2NJErZQ,3868
|
|
@@ -75,21 +76,21 @@ iatoolkit/system_prompts/sql_rules.prompt,sha256=y4nURVnb9AyFwt-lrbMNBHHtZlhk6kC
|
|
|
75
76
|
iatoolkit/templates/about.html,sha256=ciC08grUVz5qLzdzDDqDX31xirg5PrJIRYabWpV9oA8,294
|
|
76
77
|
iatoolkit/templates/base.html,sha256=LXXB8oPrcBFkf2pLfOSyAaSh66kHbs4SEujpFL3h9Nw,2163
|
|
77
78
|
iatoolkit/templates/change_password.html,sha256=DFfQSFcZ2YJZNFis2IXfzEKStxTf4i9f4eQ_6GiyNs8,2342
|
|
78
|
-
iatoolkit/templates/chat.html,sha256=
|
|
79
|
+
iatoolkit/templates/chat.html,sha256=d0TCeDKEI2fZCepThqRx3xqUDfgnCSFKwdE8Cqq3t5s,8587
|
|
79
80
|
iatoolkit/templates/chat_modals.html,sha256=9OtJHRMeBup8zojPnUqSl7Fd5StPdvOZMs2MiJPqVFY,5704
|
|
80
81
|
iatoolkit/templates/error.html,sha256=BNF-7z8AYL5vF4ZMUFMrOBt8c85kCFrm9qSHn9EiHWg,540
|
|
81
82
|
iatoolkit/templates/forgot_password.html,sha256=1lUbKg9CKnQdnySplceY_pibwYne1-mOlM38fqI1kW8,1563
|
|
82
83
|
iatoolkit/templates/header.html,sha256=179agI7rnYwP_rvJNXIiVde5E8Ec5649_XKq6eew2Hk,1263
|
|
83
|
-
iatoolkit/templates/home.html,sha256=
|
|
84
|
+
iatoolkit/templates/home.html,sha256=HpJmz0rCMBt3XYd83hecBCESvMg85n56PV5XvE_8Q_g,8201
|
|
84
85
|
iatoolkit/templates/login.html,sha256=r4hy7MsQkfDqi6pBRNkkRiFr3GPSoHCT89R5lQLUWZc,1991
|
|
85
86
|
iatoolkit/templates/signup.html,sha256=J8wOjUhUe_KozyThDTWHjXpSJ1ubR2IDVobThtkSRuo,3819
|
|
86
87
|
iatoolkit/templates/test.html,sha256=rwNtxC83tbCl5COZFXYvmRBxxmgFJtPNuVBd_nq9KWY,133
|
|
87
88
|
iatoolkit/views/__init__.py,sha256=5JqK9sZ6jBuK83zDQokUhxQ0wuJJJ9DXB8pYCLkX7X4,102
|
|
88
89
|
iatoolkit/views/change_password_view.py,sha256=rSebwecI1zwBgR2yvAhcfMwWpGDa4QbVAIllgtSOo9k,3940
|
|
89
90
|
iatoolkit/views/chat_token_request_view.py,sha256=wf32_A2Sq8NHYWshCwL10Tovd1znLoD0jQjzutR3sVE,4408
|
|
90
|
-
iatoolkit/views/chat_view.py,sha256=
|
|
91
|
+
iatoolkit/views/chat_view.py,sha256=BD1N-Jo9IOoS6baX1bzdM7DKa2zepVHZnJIxiF0vNc8,2381
|
|
91
92
|
iatoolkit/views/download_file_view.py,sha256=1gZ0ipqeCn39sTrJFo1-tlewlcSF7s_YNTvE4qd0HOw,2010
|
|
92
|
-
iatoolkit/views/external_chat_login_view.py,sha256=
|
|
93
|
+
iatoolkit/views/external_chat_login_view.py,sha256=h-Xr7UkQM7QxLZIDQ0fXb-BUfPbABQ1gjiP--FrXnpc,4075
|
|
93
94
|
iatoolkit/views/external_login_view.py,sha256=EHxN2omqTDkWyMp0FVCNDFt-JJ2hpg8LvprKanGR1gY,1355
|
|
94
95
|
iatoolkit/views/file_store_view.py,sha256=hUm5wX4E5oqJJEPEAObEj-nPiRp5EJIICULSfAWmHCs,1933
|
|
95
96
|
iatoolkit/views/forgot_password_view.py,sha256=Rk8Qbe9Fz7Wlgje1rt29I15gFM-a089EBi2at4FT7kA,2715
|
|
@@ -103,7 +104,7 @@ iatoolkit/views/tasks_review_view.py,sha256=keLsLCyOTTlcoIapnB_lbuSvLwrPVZVpBiFC
|
|
|
103
104
|
iatoolkit/views/tasks_view.py,sha256=a3anTXrJTTvbQuc6PSpOzidLKQFL4hWa7PI2Cppcz8w,4110
|
|
104
105
|
iatoolkit/views/user_feedback_view.py,sha256=G37zmP8P4LvZrSymNJ5iFXhLZg1A3BEwRfTpH1Iam5w,2652
|
|
105
106
|
iatoolkit/views/verify_user_view.py,sha256=a3q4wHJ8mKAEmgbNTOcnX4rMikROjOR3mHvCr30qGGA,2351
|
|
106
|
-
iatoolkit-0.
|
|
107
|
-
iatoolkit-0.
|
|
108
|
-
iatoolkit-0.
|
|
109
|
-
iatoolkit-0.
|
|
107
|
+
iatoolkit-0.10.1.dist-info/METADATA,sha256=HQjVa4XstjTkOTiSsiQan7QknkV0o1T_NPKsLC2iv2g,9301
|
|
108
|
+
iatoolkit-0.10.1.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
|
|
109
|
+
iatoolkit-0.10.1.dist-info/top_level.txt,sha256=V_w4QvDx0b1RXiy8zTCrD1Bp7AZkFe3_O0-9fMiwogg,10
|
|
110
|
+
iatoolkit-0.10.1.dist-info/RECORD,,
|
|
File without changes
|
|
File without changes
|