iatoolkit 0.63.1__py3-none-any.whl → 0.63.2__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/iatoolkit.py CHANGED
@@ -19,7 +19,7 @@ from werkzeug.middleware.proxy_fix import ProxyFix
19
19
  from injector import Binder, Injector, singleton
20
20
  from importlib.metadata import version as _pkg_version, PackageNotFoundError
21
21
 
22
- IATOOLKIT_VERSION = "0.63.1"
22
+ IATOOLKIT_VERSION = "0.63.2"
23
23
 
24
24
  # global variable for the unique instance of IAToolkit
25
25
  _iatoolkit_instance: Optional['IAToolkit'] = None
@@ -1,16 +1,20 @@
1
1
  {# El div principal ahora es un contenedor y tiene los estilos y clases de alineación #}
2
2
  <div class="custom-company-header container d-flex justify-content-between align-items-center">
3
3
 
4
+ {% if company_short_name and branding %}
4
5
  <a href="{{ url_for('home', company_short_name=company_short_name) }}"
5
6
  class="brand-name"
6
7
  style="{{ branding.primary_text_style }}">
7
8
  {{ branding.name }} IA
8
9
  </a>
9
-
10
+ {% else %}
11
+ <span class="brand-name">
12
+ IAToolkit
13
+ </span>
14
+ {% endif %}
10
15
 
11
16
  {# Texto "Powered by" con enlace a iatoolkit.com #}
12
17
  <span class="powered-by">
13
18
  Powered by <a href="{{ url_for('index') }}" rel="noopener noreferrer" class="iatoolkit-link">IAToolkit</a>
14
19
  </span>
15
-
16
20
  </div>
@@ -0,0 +1,42 @@
1
+ <div class="branded-form-container">
2
+ <h4 class="branded-form-title">Iniciar Sesión</h4>
3
+
4
+ <!-- 1. Encabezado de Marketing -->
5
+ <div class="text-center mb-4">
6
+ <p class="text-muted widget-intro-text">
7
+ Ingresa tus credenciales para acceder a la plataforma de {{ branding.name }}.
8
+ </p>
9
+ </div>
10
+
11
+ <!-- 2. Formulario de Inicio de Sesión -->
12
+ <form id="login-form"
13
+ action="{{ url_for('login', company_short_name=company_short_name) }}"
14
+ method="post">
15
+ <div class="mb-3">
16
+ <label for="email" class="form-label d-block">Correo Electrónico</label>
17
+ <input type="email" id="email" name="email" class="form-control"
18
+ required value="{{ form_data.email if form_data is defined else '' }}">
19
+ </div>
20
+ <div class="mb-3">
21
+ <label for="password" class="form-label d-block">Contraseña</label>
22
+ <input type="password" id="password" name="password"
23
+ class="form-control" required>
24
+ </div>
25
+ <button type="submit" class="btn btn-branded-primary w-100 fw-bold py-2">
26
+ Iniciar Sesión
27
+ </button>
28
+ </form>
29
+
30
+ <!-- 3. Nueva Sección de Registro más Atractiva -->
31
+ <div class="mt-4 pt-3 text-center" style="border-top: 1px solid #e0e0e0;">
32
+ <span class="text-muted small">¿Eres nuevo aquí?</span>
33
+ <a href="{{ url_for('signup', company_short_name=company_short_name) }}" id="signup-link" class="fw-bold ms-1 text-decoration-none" style="color: var(--brand-primary-color);">Crea una cuenta gratis</a>
34
+ </div>
35
+
36
+ <!-- 4. Enlace de Recuperación de Contraseña (más sutil) -->
37
+ <div class="text-center mt-2">
38
+ <a href="{{ url_for('forgot_password', company_short_name=company_short_name) }}" class="text-decoration-none text-muted" style="font-size: 0.8rem;">
39
+ ¿Olvidaste tu contraseña?
40
+ </a>
41
+ </div>
42
+ </div>
@@ -2,31 +2,29 @@
2
2
 
3
3
  {% block title %}Cambiar Contraseña - {{ company.name }}{% endblock %}
4
4
 
5
- {% block content %}
6
- <!-- 1. Incluimos los estilos de branding reutilizables -->
7
- {% include '_branding_styles.html' %}
8
-
9
- <!-- Enlazamos la hoja de estilos de la landing page para reutilizar estilos -->
10
- <link rel="stylesheet" href="{{ iatoolkit_base_url }}/static/styles/landing_page.css">
5
+ {% block styles %}
6
+ {# Carga las variables de CSS personalizadas de la empresa #}
7
+ <style>
8
+ {{ branding.css_variables | safe }}
9
+ </style>
10
+ {% endblock %}
11
11
 
12
- <!-- 2. Incluimos la barra de navegación reutilizable -->
13
- {% include '_navbar.html' %}
12
+ {% block content %}
13
+ {% include '_company_header.html' %}
14
14
 
15
- <!-- 3. Sección contenedora para centrar el contenido -->
15
+ <!-- Sección contenedora para centrar el contenido -->
16
16
  <section class="hero-section">
17
17
  <div class="container">
18
18
  <div class="row justify-content-center">
19
19
  <div class="col-lg-6 col-md-8">
20
20
  <div class="branded-form-container">
21
21
  <h4 class="branded-form-title">Crear Nueva Contraseña</h4>
22
-
23
22
  <p class="text-muted text-center mb-4">
24
23
  Estás cambiando la contraseña para <strong>{{ email }}</strong>.
25
24
  </p>
26
25
 
27
26
  <form action="{{ url_for('change_password', company_short_name=company_short_name, token=token) }}" method="post">
28
27
 
29
- <!-- CAMPO RESTAURADO: Código Temporal -->
30
28
  <div class="mb-3">
31
29
  <label for="temp_code" class="form-label text-secondary">Código Temporal</label>
32
30
  <input type="text" id="temp_code" name="temp_code" class="form-control"
@@ -1,23 +1,22 @@
1
1
  {% extends "base.html" %}
2
2
 
3
- {% block title %}Error - {{ company.name }}{% endblock %}
3
+ {% block title %}Error {% endblock %}
4
4
 
5
5
  {% block styles %}
6
- {# Carga las variables de CSS y los estilos principales de la marca #}
6
+ {# Carga las variables de CSS personalizadas de la empresa #}
7
+ {% if branding %}
7
8
  <style>
8
9
  {{ branding.css_variables | safe }}
9
10
  </style>
10
- <link rel="stylesheet" href="{{ url_for('static', filename='styles/chat_iatoolkit.css') }}">
11
+ {% endif %}
11
12
  {# Enlace a los iconos de Bootstrap para el icono de error #}
12
13
  <link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/bootstrap-icons@1.11.3/font/bootstrap-icons.min.css">
13
14
  {% endblock %}
14
15
 
15
16
  {% block content %}
16
-
17
- {# 1. Incluimos el encabezado reutilizable de la empresa #}
18
17
  {% include '_company_header.html' %}
19
18
 
20
- {# 2. Contenedor principal para el mensaje de error #}
19
+ {# Contenedor principal para el mensaje de error #}
21
20
  <div class="container mt-5">
22
21
  <div class="row justify-content-center">
23
22
  <div class="col-md-8 col-lg-6">
@@ -29,22 +28,19 @@
29
28
  {# Icono de error grande y visible #}
30
29
  <i class="bi bi-exclamation-triangle-fill text-danger" style="font-size: 4rem;"></i>
31
30
 
32
- <h2 class="card-title mt-4">Ha Ocurrido un Error</h2>
31
+ <h4 class="card-title mt-4">Ha Ocurrido un Error</h4>
33
32
 
34
33
  {# El mensaje de error dinámico que se pasa desde la vista #}
35
34
  <p class="text-muted mt-3 mb-4">
36
35
  {{ message | default('Lo sentimos, algo salió mal. Por favor, inténtalo de nuevo más tarde.') }}
37
36
  </p>
38
37
 
39
- {# Botón para volver a la página de inicio de la empresa #}
40
- <a href="{{ url_for('home', company_short_name=company_short_name) }}"
41
- class="btn btn-branded-primary px-4">
42
- Volver al Inicio
38
+ <a href="javascript:history.back()"
39
+ class="btn btn-branded-primary px-4">
40
+ Volver
43
41
  </a>
44
-
45
42
  </div>
46
43
  </div>
47
-
48
44
  </div>
49
45
  </div>
50
46
  </div>
@@ -50,7 +50,9 @@ class ChangePasswordView(MethodView):
50
50
  # get company info
51
51
  company = self.profile_service.get_company_by_short_name(company_short_name)
52
52
  if not company:
53
- return render_template('error.html', message=f"Empresa no encontrada: {company_short_name}"), 404
53
+ return render_template('error.html',
54
+ company_short_name=company_short_name,
55
+ message=f"Empresa no encontrada: {company_short_name}"), 404
54
56
 
55
57
  branding_data = self.branding_service.get_company_branding(company)
56
58
  try:
@@ -95,7 +97,6 @@ class ChangePasswordView(MethodView):
95
97
 
96
98
  except Exception as e:
97
99
  return render_template("error.html",
98
- company=company,
99
100
  company_short_name=company_short_name,
100
101
  branding=branding_data,
101
102
  message=f"Ha ocurrido un error inesperado: {str(e)}"), 500
@@ -23,7 +23,9 @@ class ForgotPasswordView(MethodView):
23
23
  # get company info
24
24
  company = self.profile_service.get_company_by_short_name(company_short_name)
25
25
  if not company:
26
- return render_template('error.html', message="Empresa no encontrada"), 404
26
+ return render_template('error.html',
27
+ company_short_name=company_short_name,
28
+ message="Empresa no encontrada"), 404
27
29
 
28
30
  branding_data = self.branding_service.get_company_branding(company)
29
31
  return render_template('forgot_password.html',
@@ -35,7 +37,9 @@ class ForgotPasswordView(MethodView):
35
37
  def post(self, company_short_name: str):
36
38
  company = self.profile_service.get_company_by_short_name(company_short_name)
37
39
  if not company:
38
- return render_template('error.html', message="Empresa no encontrada"), 404
40
+ return render_template('error.html',
41
+ company_short_name=company_short_name,
42
+ message="Empresa no encontrada"), 404
39
43
  branding_data = self.branding_service.get_company_branding(company)
40
44
 
41
45
  try:
@@ -64,7 +68,6 @@ class ForgotPasswordView(MethodView):
64
68
 
65
69
  except Exception as e:
66
70
  return render_template("error.html",
67
- company=company,
68
71
  company_short_name=company_short_name,
69
72
  branding=branding_data,
70
73
  message=f"Ha ocurrido un error inesperado: {str(e)}"), 500
@@ -25,7 +25,7 @@ class HomeView(MethodView):
25
25
  company = self.profile_service.get_company_by_short_name(company_short_name)
26
26
 
27
27
  if not company:
28
- abort(404, description=f"La empresa '{company_short_name}' no fue encontrada.")
28
+ return render_template('error.html', message="Empresa no encontrada"), 404
29
29
 
30
30
  branding_data = self.branding_service.get_company_branding(company)
31
31
  alert_message = session.pop('alert_message', None)
@@ -39,7 +39,6 @@ class HomeView(MethodView):
39
39
  if not os.path.exists(company_template_path):
40
40
  return render_template(
41
41
  "error.html",
42
- company=company,
43
42
  company_short_name=company_short_name,
44
43
  branding=branding_data,
45
44
  message=f"La plantilla de la página de inicio para la empresa '{company_short_name}' no está configurada."
@@ -62,7 +61,6 @@ class HomeView(MethodView):
62
61
  except Exception as e:
63
62
  return render_template(
64
63
  "error.html",
65
- company=company,
66
64
  company_short_name=company_short_name,
67
65
  branding=branding_data,
68
66
  message=f"Ocurrió un error al procesar la plantilla personalizada de la página de inicio: {str(e)}"
@@ -25,8 +25,11 @@ class LoginView(BaseLoginView):
25
25
  def post(self, company_short_name: str):
26
26
  company = self.profile_service.get_company_by_short_name(company_short_name)
27
27
  if not company:
28
- return render_template('error.html', message="Empresa no encontrada"), 404
28
+ return render_template('error.html',
29
+ company_short_name=company_short_name,
30
+ message="Empresa no encontrada"), 404
29
31
 
32
+ branding_data = self.branding_service.get_company_branding(company)
30
33
  email = request.form.get('email')
31
34
  password = request.form.get('password')
32
35
 
@@ -38,10 +41,9 @@ class LoginView(BaseLoginView):
38
41
  )
39
42
 
40
43
  if not auth_response['success']:
41
- branding_data = self.branding_service.get_company_branding(company)
42
44
 
43
45
  return render_template(
44
- 'index.html',
46
+ 'home.html',
45
47
  company_short_name=company_short_name,
46
48
  company=company,
47
49
  branding=branding_data,
@@ -61,8 +63,8 @@ class LoginView(BaseLoginView):
61
63
  return self._handle_login_path(company, user_identifier, target_url)
62
64
  except Exception as e:
63
65
  return render_template("error.html",
64
- company=company,
65
66
  company_short_name=company_short_name,
67
+ branding=branding_data,
66
68
  message=f"Error processing login path: {str(e)}"), 500
67
69
 
68
70
 
@@ -108,7 +110,9 @@ class FinalizeContextView(MethodView):
108
110
 
109
111
  company = self.profile_service.get_company_by_short_name(company_short_name)
110
112
  if not company:
111
- return render_template('error.html', message="Empresa no encontrada"), 404
113
+ return render_template('error.html',
114
+ company_short_name=company_short_name,
115
+ message="Empresa no encontrada"), 404
112
116
  branding_data = self.branding_service.get_company_branding(company)
113
117
 
114
118
  try:
@@ -134,7 +138,6 @@ class FinalizeContextView(MethodView):
134
138
 
135
139
  except Exception as e:
136
140
  return render_template("error.html",
137
- company=company,
138
141
  company_short_name=company_short_name,
139
142
  branding=branding_data,
140
143
  message=f"An unexpected error occurred during context loading: {str(e)}"), 500
@@ -25,7 +25,9 @@ class SignupView(MethodView):
25
25
  # get company info
26
26
  company = self.profile_service.get_company_by_short_name(company_short_name)
27
27
  if not company:
28
- return render_template('error.html', message="Empresa no encontrada"), 404
28
+ return render_template('error.html',
29
+ company_short_name=company_short_name,
30
+ message="Empresa no encontrada"), 404
29
31
 
30
32
  # Obtener los datos de branding
31
33
  branding_data = self.branding_service.get_company_branding(company)
@@ -39,8 +41,11 @@ class SignupView(MethodView):
39
41
  # get company info
40
42
  company = self.profile_service.get_company_by_short_name(company_short_name)
41
43
  if not company:
42
- return render_template('error.html', message="Empresa no encontrada"), 404
44
+ return render_template('error.html',
45
+ company_short_name=company_short_name,
46
+ message="Empresa no encontrada"), 404
43
47
 
48
+ branding_data = self.branding_service.get_company_branding(company)
44
49
  try:
45
50
  first_name = request.form.get('first_name')
46
51
  last_name = request.form.get('last_name')
@@ -62,7 +67,6 @@ class SignupView(MethodView):
62
67
  verification_url=verification_url)
63
68
 
64
69
  if "error" in response:
65
- branding_data = self.branding_service.get_company_branding(company)
66
70
  return render_template(
67
71
  'signup.html',
68
72
  company=company,
@@ -86,7 +90,7 @@ class SignupView(MethodView):
86
90
 
87
91
  except Exception as e:
88
92
  return render_template("error.html",
89
- company=company,
90
93
  company_short_name=company_short_name,
94
+ branding=branding_data,
91
95
  message=f"Ha ocurrido un error inesperado: {str(e)}"), 500
92
96
 
@@ -55,7 +55,6 @@ class VerifyAccountView(MethodView):
55
55
 
56
56
  except Exception as e:
57
57
  return render_template("error.html",
58
- company=company,
59
58
  company_short_name=company_short_name,
60
59
  branding=branding_data,
61
60
  message="Ha ocurrido un error inesperado."), 500
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: iatoolkit
3
- Version: 0.63.1
3
+ Version: 0.63.2
4
4
  Summary: IAToolkit
5
5
  Author: Fernando Libedinsky
6
6
  License-Expression: MIT
@@ -2,7 +2,7 @@ iatoolkit/__init__.py,sha256=4PWjMJjktixtrxF6BY405qyA50Sv967kEP2x-oil6qk,1120
2
2
  iatoolkit/base_company.py,sha256=vU4ki-wB3PWIn3_Bvehfh0TfBH_XNC614tRBKNmEd84,4718
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=SlfdIHr6c3o9HSw7ndXHTq82pPyq4edjq4rjRKGr95w,17616
5
+ iatoolkit/iatoolkit.py,sha256=jIk1DzvWGJIubl4BF9wrRqvNiUfcoEeLdqRazggkyhQ,17616
6
6
  iatoolkit/common/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
7
7
  iatoolkit/common/exceptions.py,sha256=EXx40n5htp7UiOM6P1xfJ9U6NMcADqm62dlFaKz7ICU,1154
8
8
  iatoolkit/common/routes.py,sha256=XwhbXupwnYqZ2F4Ec28o9W0LmUUHzpc0QDLQttl4Dwc,5843
@@ -72,13 +72,14 @@ iatoolkit/static/styles/onboarding.css,sha256=Bo0hd8ngVy404_a-gtNFi-hzljhIAnpE-1
72
72
  iatoolkit/system_prompts/format_styles.prompt,sha256=MSMe1qvR3cF_0IbFshn8R0z6Wx6VCHQq1p37rpu5wwk,3576
73
73
  iatoolkit/system_prompts/query_main.prompt,sha256=D2Wjf0uunQIQsQiJVrY-BTQz6PemM5En6ftmw_c5t4E,2808
74
74
  iatoolkit/system_prompts/sql_rules.prompt,sha256=y4nURVnb9AyFwt-lrbMNBHHtZlhk6kC9grYoOhRnrJo,59174
75
- iatoolkit/templates/_company_header.html,sha256=0apMHjLryk1y24OdXC_wLbu0vcwVYOOCAYnkJd0fR68,600
75
+ iatoolkit/templates/_company_header.html,sha256=wrwDftsSVu1uMPchsweAPLupsPkmLIPQBQ0xpIIyxjA,747
76
+ iatoolkit/templates/_login_widget.html,sha256=D-vxqugDjHRRDhHsYj7LEQwcuk934yknEZujsY2tgI4,1898
76
77
  iatoolkit/templates/about.html,sha256=ciC08grUVz5qLzdzDDqDX31xirg5PrJIRYabWpV9oA8,294
77
78
  iatoolkit/templates/base.html,sha256=y6YnYM1w2YXOuU0HcC9oE-o7UjFEBgusJqDxHEWazHI,2361
78
- iatoolkit/templates/change_password.html,sha256=rKPeG6ZKuuQLv7cTdlb5TyzmHbEn4MwF3wjzQUNwf-0,3533
79
+ iatoolkit/templates/change_password.html,sha256=VObsXwjEzMkKkzIv-M2voDazPZkW_07Ye_RovTx62bw,3284
79
80
  iatoolkit/templates/chat.html,sha256=6i01YQUSfWeehJ8FV1u3DDM6salIbrf3G52eDKIS6TM,12343
80
81
  iatoolkit/templates/chat_modals.html,sha256=NwwgPoOmVbjy4aO2eHsy1TUMXRiOfTOC5Jx_F2ehhcs,6947
81
- iatoolkit/templates/error.html,sha256=vkKP-D67II-PzTKF0uklWaf4ms1FRxO2k9_2j5OSNOc,1943
82
+ iatoolkit/templates/error.html,sha256=tmN4tLx_WfgfFizvMWZJFd6_qeBTAiEnQB_Kz_AP38Q,1655
82
83
  iatoolkit/templates/forgot_password.html,sha256=iJ4qgC8NMpalmO2g6sxUrPznSAy6aN0bi10EB1WldGE,2165
83
84
  iatoolkit/templates/header.html,sha256=179agI7rnYwP_rvJNXIiVde5E8Ec5649_XKq6eew2Hk,1263
84
85
  iatoolkit/templates/index.html,sha256=DZZ9WK0jQ9bCbCDkukNt_jWYII7ISxQtNxn4vHQNwz8,7808
@@ -88,25 +89,25 @@ iatoolkit/templates/signup.html,sha256=ZX1Ufj-W5efOqiBG_7SIxUZcKonffsdRaWdEQYTFu
88
89
  iatoolkit/templates/test.html,sha256=rwNtxC83tbCl5COZFXYvmRBxxmgFJtPNuVBd_nq9KWY,133
89
90
  iatoolkit/views/__init__.py,sha256=5JqK9sZ6jBuK83zDQokUhxQ0wuJJJ9DXB8pYCLkX7X4,102
90
91
  iatoolkit/views/base_login_view.py,sha256=qoMMrAezCJvzjcfNzIbd2vwHhksALIQfNK8f_9E8m0o,3241
91
- iatoolkit/views/change_password_view.py,sha256=GezQ1pBPLN5x5lcWV90UqzQN5A1FWIF6b3p1r-yxCHg,4571
92
+ iatoolkit/views/change_password_view.py,sha256=NIUxvOz6rs2PpFvAjd-_UE9m4XQCrcxJicgxSXu7434,4582
92
93
  iatoolkit/views/external_login_view.py,sha256=d4gUQbxFsThGbbAUdtFn7AMgPJjeb7_8KFFoH3vspVA,2853
93
94
  iatoolkit/views/file_store_api_view.py,sha256=UvtZWOG-rLQMLfs8igOIYoQ-tkkEg5baMjqCJdKxaRQ,2300
94
- iatoolkit/views/forgot_password_view.py,sha256=aoPPDmWtiNuGXuwYF3vQT3dVO46mPydP_HVYpCmZGsM,3219
95
+ iatoolkit/views/forgot_password_view.py,sha256=46AQ9bNXUESkFUYYcb_oIP1FukE5WyN2-MTwNgcqCu0,3349
95
96
  iatoolkit/views/history_api_view.py,sha256=0YChbss0ae05KHzni2p3d4bGS2_yKAbjALk1OBeQk50,1867
96
- iatoolkit/views/home_view.py,sha256=ABlWNDwGRcZOh_CHKOzGLgG42TIpz926uEpOx6ftHqY,2804
97
+ iatoolkit/views/home_view.py,sha256=poAUAmaXNbf-bcuxmQg7XZ1yQQAbvlyCE2YkzwDS5wg,2733
97
98
  iatoolkit/views/index_view.py,sha256=OsykSlXLB-TpFAPkDlsMna6bi3Ie5PXL303Hsg3WwUM,329
98
99
  iatoolkit/views/init_context_api_view.py,sha256=YTjpT4xdtm1knUhelDj-VbV4EK6o_qGAgwwDhFmIOlg,2716
99
100
  iatoolkit/views/llmquery_api_view.py,sha256=v_KxR6w-TrCVR2fMFHZCz3_v4o42CXb1Yvd-R1hSJHg,1662
100
101
  iatoolkit/views/login_simulation_view.py,sha256=0Qt-puRnltI2HZxlfdyJmOf26-hQp3xjknGV_jkwV7E,3484
101
- iatoolkit/views/login_view.py,sha256=XNe--QLmIV1ORN8G2iWpR6OlZI5aTwWx7iDi28Z2_FY,5719
102
+ iatoolkit/views/login_view.py,sha256=XP_OkkpWEzPfY6LpPDGeZtsnNBMbliopi6k67tOwSD4,5843
102
103
  iatoolkit/views/logout_api_view.py,sha256=wpiWLNkgypOOy7L75_tCJLv1gvcITgmd_hK2ipb9024,1505
103
104
  iatoolkit/views/prompt_api_view.py,sha256=S_4-qAD5knh8Esae1AczEYGdXy_AuU7LMOmnUPej4jQ,1294
104
- iatoolkit/views/signup_view.py,sha256=ai0cT0IxvnK9hSTX-OGOmVr2egZEBStAB2JUhLj14Dg,3931
105
+ iatoolkit/views/signup_view.py,sha256=EWvkptFQ9g_DZZepo3lJ0-R2fgrVMq5ocxw0GFfxr9k,4112
105
106
  iatoolkit/views/tasks_api_view.py,sha256=wGnuwuuL83ByQ1Yre6ytRVztA0OGQjGrwMjB1_G830U,2630
106
107
  iatoolkit/views/tasks_review_api_view.py,sha256=wsCpzqyRyUdCXWAhyGlBe3eNZZ6A1DQG7TblN_GZNfM,1894
107
108
  iatoolkit/views/user_feedback_api_view.py,sha256=-Ngex8SPf0mPvPNqwE_GUcRErLpOL49yJ43o5Y4Qhqo,1992
108
- iatoolkit/views/verify_user_view.py,sha256=QQ5au33eckPoMoVdQcLRq16sGO1vzjXEufUXDbelq04,2742
109
- iatoolkit-0.63.1.dist-info/METADATA,sha256=PaG4KRqYWCT8WjOuULGV6tmJ6qhdXKxXXBJBCq0X6XI,9301
110
- iatoolkit-0.63.1.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
111
- iatoolkit-0.63.1.dist-info/top_level.txt,sha256=V_w4QvDx0b1RXiy8zTCrD1Bp7AZkFe3_O0-9fMiwogg,10
112
- iatoolkit-0.63.1.dist-info/RECORD,,
109
+ iatoolkit/views/verify_user_view.py,sha256=iFEVc-hFh5qOBy3T93ckM6-V2_mcomk-M4TVFl2D3Pw,2690
110
+ iatoolkit-0.63.2.dist-info/METADATA,sha256=m5miNUQzTWgZRnL4ZLYnRLXofX_NWRSklJJYqASh57o,9301
111
+ iatoolkit-0.63.2.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
112
+ iatoolkit-0.63.2.dist-info/top_level.txt,sha256=V_w4QvDx0b1RXiy8zTCrD1Bp7AZkFe3_O0-9fMiwogg,10
113
+ iatoolkit-0.63.2.dist-info/RECORD,,