wagtail-enap-designsystem 1.2.1.119__py3-none-any.whl → 1.2.1.121__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 wagtail-enap-designsystem might be problematic. Click here for more details.

enap_designsystem/urls.py CHANGED
@@ -13,7 +13,7 @@ urlpatterns = [
13
13
  # ...
14
14
  path("teste-login-sso/", views.teste_login_sso, name="teste_login_sso"),
15
15
  path("login-sso/", views.login_sso, name="login_sso"),
16
- path("pt/elasticsearch/callback/", views.callback_sso, name="callback_sso"),
16
+ path("elasticsearch/callback/", views.callback_sso, name="callback_sso"),
17
17
  path("logout/", views.logout_view, name="logout"),
18
18
  path('salvar-contato/', views.salvar_contato, name='salvar_contato'),
19
19
  path('salvar-resposta-formulario/', views.salvar_resposta_formulario, name='salvar_resposta_formulario'),
@@ -37,4 +37,9 @@ urlpatterns = [
37
37
 
38
38
  # Relatórios
39
39
  path('reports/form/<int:page_id>/', views.form_report, name='form_report'),
40
+
41
+ path('votar/', views.votar_projeto, name='votar_projeto'),
42
+ path('estatisticas/', views.estatisticas_votacao, name='estatisticas_votacao'),
43
+ path('ranking/', views.ranking_projetos, name='ranking_projetos'),
44
+ path('ranking/<int:categoria_id>/', views.ranking_projetos, name='ranking_projetos_categoria'),
40
45
  ]
@@ -51,6 +51,14 @@ from django.db.models import Count, Sum, Avg, Q
51
51
  from django.core.cache import cache
52
52
  import requests
53
53
 
54
+
55
+
56
+
57
+ from django.utils import timezone
58
+ from .models import ProjetoVotacao, VotoRegistrado, CategoriaVotacao
59
+
60
+ # Cole aqui todo o conteúdo do artifact "Views do Sistema de Votação"
61
+
54
62
  from django.shortcuts import render, get_object_or_404
55
63
  from django.http import JsonResponse, HttpResponse
56
64
  from django.core.exceptions import ValidationError
@@ -2045,3 +2053,224 @@ def save_file_linked_to_form(uploaded_file, page_id, submission_id, field_name):
2045
2053
 
2046
2054
 
2047
2055
 
2056
+ # views.py - Views completas do Sistema de Votação
2057
+
2058
+ import json
2059
+ from django.http import JsonResponse
2060
+ from django.views.decorators.http import require_http_methods
2061
+ from django.shortcuts import get_object_or_404
2062
+ from django.utils import timezone
2063
+ from .models import ProjetoVotacao, VotoRegistrado, CategoriaVotacao
2064
+
2065
+
2066
+ def get_client_ip(request):
2067
+ """Extrai o IP real do cliente"""
2068
+ x_forwarded_for = request.META.get('HTTP_X_FORWARDED_FOR')
2069
+ if x_forwarded_for:
2070
+ ip = x_forwarded_for.split(',')[0].strip()
2071
+ else:
2072
+ ip = request.META.get('REMOTE_ADDR')
2073
+ return ip
2074
+
2075
+
2076
+ @require_http_methods(["POST"])
2077
+ def votar_projeto(request):
2078
+ """
2079
+ View AJAX para registrar voto em um projeto
2080
+ """
2081
+ try:
2082
+ # Parse do JSON
2083
+ data = json.loads(request.body)
2084
+ projeto_id = data.get('projeto_id')
2085
+ categoria_id = data.get('categoria_id')
2086
+
2087
+ if not projeto_id or not categoria_id:
2088
+ return JsonResponse({
2089
+ 'success': False,
2090
+ 'message': 'Dados inválidos. Projeto e categoria são obrigatórios.'
2091
+ }, status=400)
2092
+
2093
+ # Buscar projeto
2094
+ projeto = get_object_or_404(ProjetoVotacao, id=projeto_id, ativo=True)
2095
+
2096
+ # Verificar se o projeto pertence à categoria
2097
+ if projeto.categoria.id != int(categoria_id):
2098
+ return JsonResponse({
2099
+ 'success': False,
2100
+ 'message': 'Projeto não pertence à categoria especificada.'
2101
+ }, status=400)
2102
+
2103
+ # Obter dados do request
2104
+ ip_address = get_client_ip(request)
2105
+ user_agent = request.META.get('HTTP_USER_AGENT', '')[:500]
2106
+
2107
+ # Registrar o voto
2108
+ voto = VotoRegistrado.objects.create(
2109
+ projeto=projeto,
2110
+ ip_address=ip_address,
2111
+ user_agent=user_agent,
2112
+ categoria_nome=projeto.categoria.nome
2113
+ )
2114
+
2115
+ # Resposta de sucesso
2116
+ return JsonResponse({
2117
+ 'success': True,
2118
+ 'message': 'Voto registrado com sucesso!',
2119
+ 'voto_id': str(voto.id),
2120
+ 'projeto_id': projeto.id,
2121
+ 'categoria_id': projeto.categoria.id,
2122
+ 'total_votos': projeto.total_votos,
2123
+ 'timestamp': voto.timestamp.isoformat()
2124
+ })
2125
+
2126
+ except json.JSONDecodeError:
2127
+ return JsonResponse({
2128
+ 'success': False,
2129
+ 'message': 'Dados JSON inválidos.'
2130
+ }, status=400)
2131
+
2132
+ except ProjetoVotacao.DoesNotExist:
2133
+ return JsonResponse({
2134
+ 'success': False,
2135
+ 'message': 'Projeto não encontrado ou inativo.'
2136
+ }, status=404)
2137
+
2138
+ except Exception as e:
2139
+ # Log do erro em produção
2140
+ import logging
2141
+ logger = logging.getLogger(__name__)
2142
+ logger.error(f"Erro ao processar voto: {str(e)}", exc_info=True)
2143
+
2144
+ return JsonResponse({
2145
+ 'success': False,
2146
+ 'message': 'Erro interno do servidor. Tente novamente.'
2147
+ }, status=500)
2148
+
2149
+
2150
+ @require_http_methods(["GET"])
2151
+ def estatisticas_votacao(request):
2152
+ """
2153
+ View AJAX para obter estatísticas da votação
2154
+ """
2155
+ try:
2156
+ # Estatísticas gerais
2157
+ total_votos = VotoRegistrado.objects.count()
2158
+ total_projetos = ProjetoVotacao.objects.filter(ativo=True).count()
2159
+ total_categorias = CategoriaVotacao.objects.filter(ativo=True).count()
2160
+
2161
+ # Estatísticas por categoria
2162
+ categorias_stats = []
2163
+ for categoria in CategoriaVotacao.objects.filter(ativo=True).order_by('ordem'):
2164
+ projetos_categoria = categoria.projetos.filter(ativo=True)
2165
+ votos_categoria = VotoRegistrado.objects.filter(projeto__in=projetos_categoria).count()
2166
+
2167
+ # Projeto mais votado da categoria
2168
+ projeto_top = None
2169
+ if projetos_categoria.exists():
2170
+ projeto_mais_votado = max(projetos_categoria, key=lambda p: p.total_votos)
2171
+ if projeto_mais_votado.total_votos > 0:
2172
+ projeto_top = {
2173
+ 'id': projeto_mais_votado.id,
2174
+ 'titulo': projeto_mais_votado.titulo,
2175
+ 'votos': projeto_mais_votado.total_votos
2176
+ }
2177
+
2178
+ categorias_stats.append({
2179
+ 'id': categoria.id,
2180
+ 'nome': categoria.nome,
2181
+ 'total_projetos': projetos_categoria.count(),
2182
+ 'total_votos': votos_categoria,
2183
+ 'projeto_top': projeto_top
2184
+ })
2185
+
2186
+ # Projetos mais votados (top 5)
2187
+ projetos_top = []
2188
+ for projeto in ProjetoVotacao.objects.filter(ativo=True):
2189
+ projetos_top.append({
2190
+ 'id': projeto.id,
2191
+ 'titulo': projeto.titulo,
2192
+ 'categoria': projeto.categoria.nome,
2193
+ 'votos': projeto.total_votos
2194
+ })
2195
+
2196
+ # Ordenar por votos (descending)
2197
+ projetos_top = sorted(projetos_top, key=lambda p: p['votos'], reverse=True)[:5]
2198
+
2199
+ return JsonResponse({
2200
+ 'success': True,
2201
+ 'data': {
2202
+ 'resumo': {
2203
+ 'total_votos': total_votos,
2204
+ 'total_projetos': total_projetos,
2205
+ 'total_categorias': total_categorias
2206
+ },
2207
+ 'categorias': categorias_stats,
2208
+ 'projetos_top': projetos_top,
2209
+ 'timestamp': timezone.now().isoformat()
2210
+ }
2211
+ })
2212
+
2213
+ except Exception as e:
2214
+ import logging
2215
+ logger = logging.getLogger(__name__)
2216
+ logger.error(f"Erro ao obter estatísticas: {str(e)}", exc_info=True)
2217
+
2218
+ return JsonResponse({
2219
+ 'success': False,
2220
+ 'message': 'Erro ao obter estatísticas.'
2221
+ }, status=500)
2222
+
2223
+
2224
+ @require_http_methods(["GET"])
2225
+ def ranking_projetos(request, categoria_id=None):
2226
+ """
2227
+ View AJAX para obter ranking de projetos
2228
+ """
2229
+ try:
2230
+ # Filtrar por categoria se especificado
2231
+ if categoria_id:
2232
+ categoria = get_object_or_404(CategoriaVotacao, id=categoria_id, ativo=True)
2233
+ projetos = ProjetoVotacao.objects.filter(categoria=categoria, ativo=True)
2234
+ else:
2235
+ projetos = ProjetoVotacao.objects.filter(ativo=True)
2236
+
2237
+ # Criar lista com dados dos projetos
2238
+ ranking = []
2239
+ for projeto in projetos:
2240
+ ranking.append({
2241
+ 'id': projeto.id,
2242
+ 'titulo': projeto.titulo,
2243
+ 'categoria': projeto.categoria.nome,
2244
+ 'equipe': projeto.nome_equipe,
2245
+ 'total_votos': projeto.total_votos,
2246
+ 'destacado': projeto.destacado
2247
+ })
2248
+
2249
+ # Ordenar por votos (descending)
2250
+ ranking.sort(key=lambda p: p['total_votos'], reverse=True)
2251
+
2252
+ return JsonResponse({
2253
+ 'success': True,
2254
+ 'data': {
2255
+ 'ranking': ranking,
2256
+ 'categoria': categoria.nome if categoria_id else 'Todas',
2257
+ 'total_projetos': len(ranking),
2258
+ 'timestamp': timezone.now().isoformat()
2259
+ }
2260
+ })
2261
+
2262
+ except CategoriaVotacao.DoesNotExist:
2263
+ return JsonResponse({
2264
+ 'success': False,
2265
+ 'message': 'Categoria não encontrada.'
2266
+ }, status=404)
2267
+
2268
+ except Exception as e:
2269
+ import logging
2270
+ logger = logging.getLogger(__name__)
2271
+ logger.error(f"Erro ao obter ranking: {str(e)}", exc_info=True)
2272
+
2273
+ return JsonResponse({
2274
+ 'success': False,
2275
+ 'message': 'Erro ao obter ranking.'
2276
+ }, status=500)
@@ -1212,3 +1212,106 @@ def hide_snippets_from_menu(request, menu_items):
1212
1212
  """
1213
1213
  if not request.user.is_superuser:
1214
1214
  menu_items[:] = [item for item in menu_items if item.name != 'snippets']
1215
+
1216
+
1217
+
1218
+
1219
+
1220
+
1221
+
1222
+
1223
+ # wagtail_hooks.py - Sistema de Votação com Snippets
1224
+
1225
+ from wagtail import hooks
1226
+ from wagtail.snippets.models import register_snippet
1227
+ from wagtail.snippets.views.snippets import SnippetViewSet
1228
+ from .models import VotoRegistrado
1229
+
1230
+
1231
+ class VotoRegistradoViewSet(SnippetViewSet):
1232
+ model = VotoRegistrado
1233
+ menu_label = 'Votos Registrados'
1234
+ icon = 'tick'
1235
+ menu_order = 600
1236
+
1237
+ list_display = ('projeto', 'categoria_nome', 'ip_address', 'timestamp')
1238
+ list_filter = ('categoria_nome', 'timestamp', 'projeto__categoria')
1239
+ search_fields = ('projeto__titulo', 'ip_address')
1240
+ ordering = ('-timestamp',)
1241
+ list_per_page = 50
1242
+
1243
+ # Apenas visualização - não permitir add/edit de votos
1244
+ add_to_admin_menu = True
1245
+
1246
+
1247
+ # Registrar o ViewSet
1248
+ register_snippet(VotoRegistrado, viewset=VotoRegistradoViewSet)
1249
+
1250
+
1251
+ # Hook personalizado para adicionar estatísticas no admin
1252
+ @hooks.register('construct_main_menu')
1253
+ def add_votacao_stats_menu_item(request, menu_items):
1254
+ """
1255
+ Adiciona estatísticas de votação no menu principal
1256
+ """
1257
+ from django.urls import reverse
1258
+ from wagtail.admin.menu import MenuItem
1259
+
1260
+ # Só mostra para superusers
1261
+ if not request.user.is_superuser:
1262
+ return
1263
+
1264
+ # Contar totais
1265
+ try:
1266
+ total_votos = VotoRegistrado.objects.count()
1267
+ menu_items.append(
1268
+ MenuItem(
1269
+ f'📊 Votação ({total_votos} votos)',
1270
+ reverse('wagtailadmin_home'),
1271
+ icon_name='analytics',
1272
+ order=1000
1273
+ )
1274
+ )
1275
+ except:
1276
+ pass # Se der erro na query, ignora
1277
+
1278
+
1279
+ # Hook para personalizar o dashboard
1280
+ @hooks.register('construct_homepage_panels')
1281
+ def add_votacao_dashboard_panel(request, panels):
1282
+ """
1283
+ Adiciona painel de estatísticas no dashboard
1284
+ """
1285
+ from django.template.loader import render_to_string
1286
+ from wagtail.admin.ui.components import Component
1287
+
1288
+ try:
1289
+ from .models import CategoriaVotacao, ProjetoVotacao
1290
+
1291
+ # Buscar estatísticas
1292
+ stats = {
1293
+ 'total_categorias': CategoriaVotacao.objects.filter(ativo=True).count(),
1294
+ 'total_projetos': ProjetoVotacao.objects.filter(ativo=True).count(),
1295
+ 'total_votos': VotoRegistrado.objects.count(),
1296
+ 'categorias_top': CategoriaVotacao.objects.filter(ativo=True)[:3]
1297
+ }
1298
+
1299
+ # HTML do painel
1300
+ html = f"""
1301
+ <div class="panel panel-info">
1302
+ <h3>📊 Sistema de Votação</h3>
1303
+ <ul>
1304
+ <li><strong>{stats['total_categorias']}</strong> categorias ativas</li>
1305
+ <li><strong>{stats['total_projetos']}</strong> projetos ativos</li>
1306
+ <li><strong>{stats['total_votos']}</strong> votos registrados</li>
1307
+ </ul>
1308
+ <p><a href="/admin/snippets/enap_designsystem/categoriavotacao/" class="button button-small">Gerenciar Categorias</a></p>
1309
+ <p><a href="/admin/snippets/enap_designsystem/projetovotacao/" class="button button-small">Gerenciar Projetos</a></p>
1310
+ </div>
1311
+ """
1312
+
1313
+ panels.append(Component(html))
1314
+
1315
+ except Exception as e:
1316
+ # Se der erro, não quebra o admin
1317
+ pass
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: wagtail-enap-designsystem
3
- Version: 1.2.1.119
3
+ Version: 1.2.1.121
4
4
  Summary: Módulo de componentes utilizado nos portais ENAP, desenvolvido com Wagtail + CodeRedCMS
5
5
  Author: Renan Campos
6
6
  Author-email: renan.oliveira@enap.gov.br
@@ -1,12 +1,12 @@
1
1
  enap_designsystem/__init__.py,sha256=_SM5n--8zkHIEZfCoc7wEfm6hQT8cuATZSRlLdrD7Rg,68
2
2
  enap_designsystem/apps.py,sha256=psX3YlGfqmPsaZZzRL4cpDTGvjwfNJT_0Vvizc_LIEg,226
3
3
  enap_designsystem/context_processors.py,sha256=IBYJGQpfan6gck4XcWMJMugAUKtnKpKX9XB5tZzmNbo,472
4
- enap_designsystem/models.py,sha256=TDjHUpbJ55KxjCmK2fwVNkgPmuYORkZ4hD1bVeNHziY,127199
4
+ enap_designsystem/models.py,sha256=V2SbxwI9cpFAUkJ7s5QllNTZYdPHxSsOWt9xD3qD4Xc,140989
5
5
  enap_designsystem/settings.py,sha256=9PXLYaJHaUr6Mc9qxNg34zdX7dtxDVlNXomJ-nS7-Vw,745
6
6
  enap_designsystem/signals.py,sha256=oaHpZms4Dkc97ql-55Q0QxU7-45jwg2Y1XoRDOJ45tc,1978
7
- enap_designsystem/urls.py,sha256=zFtWwC98ajREPMNU_GzvFmMULj7DhD2LLNdEDhYnaxs,1846
8
- enap_designsystem/views.py,sha256=r6YOm0ycQhKh8DE9Ce3srQt8IfWTpfgPM_K4TQyLMhA,71532
9
- enap_designsystem/wagtail_hooks.py,sha256=4ybQB1THmurJDbS7S55wk7u0bnbCHwsFY0st6W1znPg,46013
7
+ enap_designsystem/urls.py,sha256=mEwIIesWtmekY6A04l-vogs2-srxncdgjP0lmGOAIfo,2162
8
+ enap_designsystem/views.py,sha256=b6fSGCI_eeAVjrkNNhpuVBi62NwqcryFV5cBkUjNK5o,79450
9
+ enap_designsystem/wagtail_hooks.py,sha256=ftWXSAqtr1fFUO6Gws5IMfwPALJaPAcSglm8rRVOV-k,49251
10
10
  enap_designsystem/blocks/__init__.py,sha256=F9NHc5bD442qMfeYrmp9ql9mQuydMV4otrcZFzh625Y,37967
11
11
  enap_designsystem/blocks/base_blocks.py,sha256=ZuqVWn4PEAvD3pKM1ST7wjo4lwv98ooen_rs15rRJbg,10866
12
12
  enap_designsystem/blocks/chatbot_blocks.py,sha256=YeCznrXMbFa9MP9vjdTYl53ZhKsywkGOXvFK2bwcqW0,1133
@@ -413,6 +413,9 @@ enap_designsystem/migrations/0375_grouppagepermission_delete_pagetypepermission.
413
413
  enap_designsystem/migrations/0376_grouppagetypepermission_delete_grouppagepermission.py,sha256=1K_vFs2flrpSmyS2FznfrJQaTImbGklRZRLEdD__-AY,1824
414
414
  enap_designsystem/migrations/0377_alter_grouppagetypepermission_options_and_more.py,sha256=PnMi8hJe34MKO2wNwPdpgxhrIoZ7eRfdki9R_zBfn38,1775
415
415
  enap_designsystem/migrations/0378_mbaespecializacao_cards_alter_areaaluno_body_and_more.py,sha256=nCsZh_ZaWyIFSZ_UDHB-VACGydLZejnRLfi0Y9svOwU,2414003
416
+ enap_designsystem/migrations/0379_categoriavotacao_sistemavotacaopage_and_more.py,sha256=vAmb9dkeGGmSwR8K7O2rSUQ7evCpCXNAMQfDrF9IALM,2296363
417
+ enap_designsystem/migrations/0380_sistemavotacaopage_imagem_fundo.py,sha256=m0lVQcdHUJ2MVcSwd5OaWgcfJGSlL4CvItex707u9wU,959
418
+ enap_designsystem/migrations/0381_sistemavotacaopage_footer_sistemavotacaopage_navbar.py,sha256=neUnvRYwPpQhnr1-1SrQb0HgGZz4WmBuzAmSsX28WgM,1035
416
419
  enap_designsystem/migrations/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
417
420
  enap_designsystem/search_backends/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
418
421
  enap_designsystem/search_backends/custom_elasticsearch.py,sha256=LeQT0_dJmNMTY7l3jOJ_7mJ9-2X0oXVqvxRiXEA0qGY,988
@@ -583,6 +586,7 @@ enap_designsystem/templates/admin/exportar_respostas.html,sha256=jF7hGJ6LkbKo536
583
586
  enap_designsystem/templates/admin/meta_tags_manager.html,sha256=jXNvT9etPN88TNT8Ou8ko-AHComioM9p8iU1lpW5m3k,11826
584
587
  enap_designsystem/templates/enap_designsystem/accordion_v2.html,sha256=SE-72OoHu-WucITL-CPR4XJzfLHrq78kmiytaSJB3Lc,4228
585
588
  enap_designsystem/templates/enap_designsystem/base.html,sha256=bBWBjIUwzIqbTf5wIqajFNgloN38XajTFakWfb0GfCM,12712
589
+ enap_designsystem/templates/enap_designsystem/sistema_votacao_page.html,sha256=lzpf2zRB-92V5XJrX3Gv9nqLP9Z0tLObMFyeMw0s2FQ,54488
586
590
  enap_designsystem/templates/enap_designsystem/blocks/accordions.html,sha256=WXBQrkO4U0R8SDbdbFRWBx742gdpiYiKEviiyQURZMk,2940
587
591
  enap_designsystem/templates/enap_designsystem/blocks/accordionsv2.html,sha256=-WXIV6zFjdbRAylWhF9mQkMxUr1Df4-d3OazVm1xT9s,5186
588
592
  enap_designsystem/templates/enap_designsystem/blocks/alerts.html,sha256=_lbwHiFS4eauJtlQB6j-xWR31sKH7lv1EKD9oI2cki4,2067
@@ -604,6 +608,7 @@ enap_designsystem/templates/enap_designsystem/blocks/buttongroup.html,sha256=9NI
604
608
  enap_designsystem/templates/enap_designsystem/blocks/card_block.html,sha256=V-bXd4m4io4SEhUR1mHWgkUVjMCBEUi2cu81A90elWA,10970
605
609
  enap_designsystem/templates/enap_designsystem/blocks/card_courses.html,sha256=AnDmdrX6SemGpAXpmBUGp8yi6ePj5T9C7ZSxhRHvP8g,12839
606
610
  enap_designsystem/templates/enap_designsystem/blocks/card_curso_block.html,sha256=NZ83x2O-QC1xkihH6NYE05hsPA_SKQAjzQ0jyNXZowQ,2174
611
+ enap_designsystem/templates/enap_designsystem/blocks/card_flex_block.html,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
607
612
  enap_designsystem/templates/enap_designsystem/blocks/card_item.html,sha256=i8P0HyYQNIYknIw7RQf81QxdnAaJgPoLi4y0Hr4mAdg,1628
608
613
  enap_designsystem/templates/enap_designsystem/blocks/cardgrid_block.html,sha256=nxD_ZgzSRtZIo3AtHPj1R6pWVgJY3AUHJTRYUcf5dTw,207
609
614
  enap_designsystem/templates/enap_designsystem/blocks/cards_section.html,sha256=nEN4HNbT8eb_Vs8XG0uB4IyxVFfd3uLPt2SWJzP30h0,3967
@@ -621,6 +626,8 @@ enap_designsystem/templates/enap_designsystem/blocks/clientes_block.html,sha256=
621
626
  enap_designsystem/templates/enap_designsystem/blocks/container_info_block.html,sha256=dNKp21ssEAbEWsgGlJCDyPCatlx1PZlbXFGCJQZNEI4,3330
622
627
  enap_designsystem/templates/enap_designsystem/blocks/contato_block.html,sha256=skfnDb2iSXzdo_wbknQTtRmfJ6D6cpjFwNev6gLPAEs,4565
623
628
  enap_designsystem/templates/enap_designsystem/blocks/contato_page.html,sha256=vae6hP4Z7n5atoEL4OtLrCXSslYABIT2sm53V78VsIs,1136
629
+ enap_designsystem/templates/enap_designsystem/blocks/content_box.html,sha256=O_RtaVfEOk9Jz_gpA1QBF1DfSGDmtbYGYVsmsB_Nz98,5973
630
+ enap_designsystem/templates/enap_designsystem/blocks/content_flex_block.html,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
624
631
  enap_designsystem/templates/enap_designsystem/blocks/course_intro_topics.html,sha256=jc-tjDBsSM-xJu9x-gmnATSSw_ER0ZLSiiJrb9PwiCw,1855
625
632
  enap_designsystem/templates/enap_designsystem/blocks/cpnu_dashboard_block.html,sha256=GvcQNgO-H4S-9_Ssosllh_rDZI1slx4hG5FhSr0vW3E,29102
626
633
  enap_designsystem/templates/enap_designsystem/blocks/cta2.html,sha256=5SHLlgZT572JZoxxVNbVVc7mybO-v52ZygMEZo7hUxs,866
@@ -699,6 +706,7 @@ enap_designsystem/templates/enap_designsystem/blocks/timeline_container.html,sha
699
706
  enap_designsystem/templates/enap_designsystem/blocks/timeline_etapa.html,sha256=Rh_8C9R3xQlRRmU_bguUSYx3ie4g42ilw3dtJZ4-IpM,11855
700
707
  enap_designsystem/templates/enap_designsystem/blocks/topic_links_block.html,sha256=k3Mty-PiSAkeYBTSb4jiFACaC0m9txS-c9by5dnofmc,1083
701
708
  enap_designsystem/templates/enap_designsystem/blocks/video_block.html,sha256=MGxXXVx2LhziavRbua3HGEdMC8t41Y1HvTdKMJhdUpU,5247
709
+ enap_designsystem/templates/enap_designsystem/blocks/video_hero_banner.html,sha256=2hyYTkqK2gDw2zjRU0qqQsk0bch1dmisLeWvUo-POiU,6325
702
710
  enap_designsystem/templates/enap_designsystem/blocks/why_choose.html,sha256=g6AhjSOCmKSNnG77R_qqJ9GAn-cbfwnExGRQ6DSyALk,2002
703
711
  enap_designsystem/templates/enap_designsystem/blocks/wizard.html,sha256=9flhjtnYFeyuxKk0OKFU4fBtAt_pPHQuLkLSJHfjrqU,2498
704
712
  enap_designsystem/templates/enap_designsystem/blocks/footer/footer_social_block.html,sha256=xa112srdhgJk0_0T5VM9j9tYDkjBtB1Jn9QZKXD7kOY,1132
@@ -808,8 +816,8 @@ enap_designsystem/utils/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG
808
816
  enap_designsystem/utils/decorators.py,sha256=aq6SbLn0LcH2rfE3ZFit8jkD7pSx9fLVBUUwVB747hg,335
809
817
  enap_designsystem/utils/services.py,sha256=6dG5jLSbwH49jpZV9ZNpWlaZqI49gTlwlr1vaerxdiU,5824
810
818
  enap_designsystem/utils/sso.py,sha256=vjAuoYgoLeQAa_dkkyQ6-LmHvKMaVCxizNFpe5y3iUA,1145
811
- wagtail_enap_designsystem-1.2.1.119.dist-info/licenses/LICENSE,sha256=Btzdu2kIoMbdSp6OyCLupB1aRgpTCJ_szMimgEnpkkE,1056
812
- wagtail_enap_designsystem-1.2.1.119.dist-info/METADATA,sha256=Gkasak9XKAzBdLugX9nvnQgvtTmwrrWOARLZbUIJ4MY,3651
813
- wagtail_enap_designsystem-1.2.1.119.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
814
- wagtail_enap_designsystem-1.2.1.119.dist-info/top_level.txt,sha256=RSFgMASxoA-hVftm5i4Qd0rArlX4Dq08lLv5G4sYD-g,18
815
- wagtail_enap_designsystem-1.2.1.119.dist-info/RECORD,,
819
+ wagtail_enap_designsystem-1.2.1.121.dist-info/licenses/LICENSE,sha256=Btzdu2kIoMbdSp6OyCLupB1aRgpTCJ_szMimgEnpkkE,1056
820
+ wagtail_enap_designsystem-1.2.1.121.dist-info/METADATA,sha256=eIAyf3PzRZWnhMQROTsxWuPo9MjLAJbE43E3vDaFf_U,3651
821
+ wagtail_enap_designsystem-1.2.1.121.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
822
+ wagtail_enap_designsystem-1.2.1.121.dist-info/top_level.txt,sha256=RSFgMASxoA-hVftm5i4Qd0rArlX4Dq08lLv5G4sYD-g,18
823
+ wagtail_enap_designsystem-1.2.1.121.dist-info/RECORD,,