slthcore 0.6.1__tar.gz → 0.6.3__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Potentially problematic release.
This version of slthcore might be problematic. Click here for more details.
- {slthcore-0.6.1/slthcore.egg-info → slthcore-0.6.3}/PKG-INFO +1 -1
- {slthcore-0.6.1 → slthcore-0.6.3}/setup.py +1 -1
- {slthcore-0.6.1 → slthcore-0.6.3}/slth/application.py +3 -2
- {slthcore-0.6.1 → slthcore-0.6.3}/slth/endpoints/auth.py +1 -0
- {slthcore-0.6.1 → slthcore-0.6.3}/slth/forms.py +8 -3
- {slthcore-0.6.1 → slthcore-0.6.3}/slth/management/commands/sync.py +4 -2
- {slthcore-0.6.1 → slthcore-0.6.3}/slth/models.py +15 -0
- {slthcore-0.6.1 → slthcore-0.6.3}/slth/queryset.py +14 -6
- {slthcore-0.6.1 → slthcore-0.6.3}/slth/static/js/slth.min.js +19 -19
- slthcore-0.6.3/slth/storage/__init__.py +99 -0
- slthcore-0.6.3/slth/storage/s3.py +383 -0
- {slthcore-0.6.1 → slthcore-0.6.3}/slth/views.py +7 -2
- {slthcore-0.6.1 → slthcore-0.6.3/slthcore.egg-info}/PKG-INFO +1 -1
- {slthcore-0.6.1 → slthcore-0.6.3}/slthcore.egg-info/SOURCES.txt +2 -0
- {slthcore-0.6.1 → slthcore-0.6.3}/MANIFEST.in +0 -0
- {slthcore-0.6.1 → slthcore-0.6.3}/setup.cfg +0 -0
- {slthcore-0.6.1 → slthcore-0.6.3}/slth/__init__.py +0 -0
- {slthcore-0.6.1 → slthcore-0.6.3}/slth/apps.py +0 -0
- {slthcore-0.6.1 → slthcore-0.6.3}/slth/cmd/configure/__main__.py +0 -0
- {slthcore-0.6.1 → slthcore-0.6.3}/slth/cmd/init/__main__.py +0 -0
- {slthcore-0.6.1 → slthcore-0.6.3}/slth/cmd/init/__pycache__/__main__.cpython-312.pyc +0 -0
- {slthcore-0.6.1 → slthcore-0.6.3}/slth/cmd/init/boilerplate/.DS_Store +0 -0
- {slthcore-0.6.1 → slthcore-0.6.3}/slth/cmd/init/boilerplate/.gitignore +0 -0
- {slthcore-0.6.1 → slthcore-0.6.3}/slth/cmd/init/boilerplate/backend/api/__init__.py +0 -0
- {slthcore-0.6.1 → slthcore-0.6.3}/slth/cmd/init/boilerplate/backend/api/asgi.py +0 -0
- {slthcore-0.6.1 → slthcore-0.6.3}/slth/cmd/init/boilerplate/backend/api/endpoints/__init__.py +0 -0
- {slthcore-0.6.1 → slthcore-0.6.3}/slth/cmd/init/boilerplate/backend/api/models.py +0 -0
- {slthcore-0.6.1 → slthcore-0.6.3}/slth/cmd/init/boilerplate/backend/api/settings.py +0 -0
- {slthcore-0.6.1 → slthcore-0.6.3}/slth/cmd/init/boilerplate/backend/api/tests.py +0 -0
- {slthcore-0.6.1 → slthcore-0.6.3}/slth/cmd/init/boilerplate/backend/api/urls.py +0 -0
- {slthcore-0.6.1 → slthcore-0.6.3}/slth/cmd/init/boilerplate/backend/api/wsgi.py +0 -0
- {slthcore-0.6.1 → slthcore-0.6.3}/slth/cmd/init/boilerplate/backend/entrypoint.sh +0 -0
- {slthcore-0.6.1 → slthcore-0.6.3}/slth/cmd/init/boilerplate/backend/manage.py +0 -0
- {slthcore-0.6.1 → slthcore-0.6.3}/slth/cmd/init/boilerplate/backend/requirements.txt +0 -0
- {slthcore-0.6.1 → slthcore-0.6.3}/slth/cmd/init/boilerplate/base.env +0 -0
- {slthcore-0.6.1 → slthcore-0.6.3}/slth/cmd/init/boilerplate/docker-compose.yml +0 -0
- {slthcore-0.6.1 → slthcore-0.6.3}/slth/cmd/init/boilerplate/frontend/package.json +0 -0
- {slthcore-0.6.1 → slthcore-0.6.3}/slth/cmd/init/boilerplate/frontend/src/main.jsx +0 -0
- {slthcore-0.6.1 → slthcore-0.6.3}/slth/cmd/init/boilerplate/frontend/vite.config.js +0 -0
- {slthcore-0.6.1 → slthcore-0.6.3}/slth/cmd/init/boilerplate/local.env +0 -0
- {slthcore-0.6.1 → slthcore-0.6.3}/slth/cmd/init/boilerplate/run.sh +0 -0
- {slthcore-0.6.1 → slthcore-0.6.3}/slth/cmd/init/boilerplate/selenium/run.sh +0 -0
- {slthcore-0.6.1 → slthcore-0.6.3}/slth/cmd/init/boilerplate/test.sh +0 -0
- {slthcore-0.6.1 → slthcore-0.6.3}/slth/components.py +0 -0
- {slthcore-0.6.1 → slthcore-0.6.3}/slth/db/__init__.py +0 -0
- {slthcore-0.6.1 → slthcore-0.6.3}/slth/db/generic.py +0 -0
- {slthcore-0.6.1 → slthcore-0.6.3}/slth/db/models.py +0 -0
- {slthcore-0.6.1 → slthcore-0.6.3}/slth/endpoints/__init__.py +0 -0
- {slthcore-0.6.1 → slthcore-0.6.3}/slth/endpoints/deletion.py +0 -0
- {slthcore-0.6.1 → slthcore-0.6.3}/slth/endpoints/dev.py +0 -0
- {slthcore-0.6.1 → slthcore-0.6.3}/slth/endpoints/email.py +0 -0
- {slthcore-0.6.1 → slthcore-0.6.3}/slth/endpoints/job.py +0 -0
- {slthcore-0.6.1 → slthcore-0.6.3}/slth/endpoints/log.py +0 -0
- {slthcore-0.6.1 → slthcore-0.6.3}/slth/endpoints/profile.py +0 -0
- {slthcore-0.6.1 → slthcore-0.6.3}/slth/endpoints/pushsubscription.py +0 -0
- {slthcore-0.6.1 → slthcore-0.6.3}/slth/endpoints/report.py +0 -0
- {slthcore-0.6.1 → slthcore-0.6.3}/slth/endpoints/role.py +0 -0
- {slthcore-0.6.1 → slthcore-0.6.3}/slth/endpoints/settings.py +0 -0
- {slthcore-0.6.1 → slthcore-0.6.3}/slth/endpoints/task.py +0 -0
- {slthcore-0.6.1 → slthcore-0.6.3}/slth/endpoints/timezone.py +0 -0
- {slthcore-0.6.1 → slthcore-0.6.3}/slth/endpoints/user.py +0 -0
- {slthcore-0.6.1 → slthcore-0.6.3}/slth/endpoints/whatsappnotification.py +0 -0
- {slthcore-0.6.1 → slthcore-0.6.3}/slth/exceptions.py +0 -0
- {slthcore-0.6.1 → slthcore-0.6.3}/slth/factory.py +0 -0
- {slthcore-0.6.1 → slthcore-0.6.3}/slth/geo/__init__.py +0 -0
- {slthcore-0.6.1 → slthcore-0.6.3}/slth/integrations/__init__.py +0 -0
- {slthcore-0.6.1 → slthcore-0.6.3}/slth/integrations/deepseek/__init__.py +0 -0
- {slthcore-0.6.1 → slthcore-0.6.3}/slth/integrations/google/__init__.py +0 -0
- {slthcore-0.6.1 → slthcore-0.6.3}/slth/integrations/google/gemini.py +0 -0
- {slthcore-0.6.1 → slthcore-0.6.3}/slth/integrations/google/places.py +0 -0
- {slthcore-0.6.1 → slthcore-0.6.3}/slth/integrations/google/vision.py +0 -0
- {slthcore-0.6.1 → slthcore-0.6.3}/slth/integrations/justvoip/__init__.py +0 -0
- {slthcore-0.6.1 → slthcore-0.6.3}/slth/integrations/mercadopago/__init__.py +0 -0
- {slthcore-0.6.1 → slthcore-0.6.3}/slth/integrations/openai/__init__.py +0 -0
- {slthcore-0.6.1 → slthcore-0.6.3}/slth/integrations/openai/chatgpt.py +0 -0
- {slthcore-0.6.1 → slthcore-0.6.3}/slth/integrations/viacep/__init__.py +0 -0
- {slthcore-0.6.1 → slthcore-0.6.3}/slth/integrations/whatsapp/__init__.py +0 -0
- {slthcore-0.6.1 → slthcore-0.6.3}/slth/management/__init__.py +0 -0
- {slthcore-0.6.1 → slthcore-0.6.3}/slth/management/commands/__init__.py +0 -0
- {slthcore-0.6.1 → slthcore-0.6.3}/slth/management/commands/api.py +0 -0
- {slthcore-0.6.1 → slthcore-0.6.3}/slth/management/commands/integration_test.py +0 -0
- {slthcore-0.6.1 → slthcore-0.6.3}/slth/management/commands/worker.py +0 -0
- {slthcore-0.6.1 → slthcore-0.6.3}/slth/middleware/__init__.py +0 -0
- {slthcore-0.6.1 → slthcore-0.6.3}/slth/middleware/timezone.py +0 -0
- {slthcore-0.6.1 → slthcore-0.6.3}/slth/migrations/0001_initial.py +0 -0
- {slthcore-0.6.1 → slthcore-0.6.3}/slth/migrations/0002_email_role_pushsubscription_error.py +0 -0
- {slthcore-0.6.1 → slthcore-0.6.3}/slth/migrations/0003_rename_photo_profile_alter_profile_options.py +0 -0
- {slthcore-0.6.1 → slthcore-0.6.3}/slth/migrations/0004_alter_profile_photo.py +0 -0
- {slthcore-0.6.1 → slthcore-0.6.3}/slth/migrations/0005_alter_profile_photo.py +0 -0
- {slthcore-0.6.1 → slthcore-0.6.3}/slth/migrations/0006_user.py +0 -0
- {slthcore-0.6.1 → slthcore-0.6.3}/slth/migrations/0007_deletion_log.py +0 -0
- {slthcore-0.6.1 → slthcore-0.6.3}/slth/migrations/0008_alter_deletion_datetime_alter_log_datetime.py +0 -0
- {slthcore-0.6.1 → slthcore-0.6.3}/slth/migrations/0009_remove_email_from_email_email_action_email_attempt_and_more.py +0 -0
- {slthcore-0.6.1 → slthcore-0.6.3}/slth/migrations/0010_email_key_alter_email_action_alter_email_attempt_and_more.py +0 -0
- {slthcore-0.6.1 → slthcore-0.6.3}/slth/migrations/0011_usertimezone.py +0 -0
- {slthcore-0.6.1 → slthcore-0.6.3}/slth/migrations/0012_timezone_remove_usertimezone_key_and_more.py +0 -0
- {slthcore-0.6.1 → slthcore-0.6.3}/slth/migrations/0013_whatsappnotification.py +0 -0
- {slthcore-0.6.1 → slthcore-0.6.3}/slth/migrations/0014_settings.py +0 -0
- {slthcore-0.6.1 → slthcore-0.6.3}/slth/migrations/0015_auto_20250412_1126.py +0 -0
- {slthcore-0.6.1 → slthcore-0.6.3}/slth/migrations/__init__.py +0 -0
- {slthcore-0.6.1 → slthcore-0.6.3}/slth/notifications.py +0 -0
- {slthcore-0.6.1 → slthcore-0.6.3}/slth/oauth.py +0 -0
- {slthcore-0.6.1 → slthcore-0.6.3}/slth/pdf/__init__.py +0 -0
- {slthcore-0.6.1 → slthcore-0.6.3}/slth/pdf/tests.py +0 -0
- {slthcore-0.6.1 → slthcore-0.6.3}/slth/permissions.py +0 -0
- {slthcore-0.6.1 → slthcore-0.6.3}/slth/printer.py +0 -0
- {slthcore-0.6.1 → slthcore-0.6.3}/slth/roles.py +0 -0
- {slthcore-0.6.1 → slthcore-0.6.3}/slth/selenium/__init__.py +0 -0
- {slthcore-0.6.1 → slthcore-0.6.3}/slth/selenium/browser.py +0 -0
- {slthcore-0.6.1 → slthcore-0.6.3}/slth/serializer.py +0 -0
- {slthcore-0.6.1 → slthcore-0.6.3}/slth/static/.DS_Store +0 -0
- {slthcore-0.6.1 → slthcore-0.6.3}/slth/static/css/.DS_Store +0 -0
- {slthcore-0.6.1 → slthcore-0.6.3}/slth/static/css/slth.css +0 -0
- {slthcore-0.6.1 → slthcore-0.6.3}/slth/static/images/placeholder.png +0 -0
- {slthcore-0.6.1 → slthcore-0.6.3}/slth/static/js/index.min.js +0 -0
- {slthcore-0.6.1 → slthcore-0.6.3}/slth/static/js/react.min.js +0 -0
- {slthcore-0.6.1 → slthcore-0.6.3}/slth/statistics.py +0 -0
- {slthcore-0.6.1 → slthcore-0.6.3}/slth/tasks.py +0 -0
- {slthcore-0.6.1 → slthcore-0.6.3}/slth/templates/email.html +0 -0
- {slthcore-0.6.1 → slthcore-0.6.3}/slth/templates/index.html +0 -0
- {slthcore-0.6.1 → slthcore-0.6.3}/slth/templates/report.html +0 -0
- {slthcore-0.6.1 → slthcore-0.6.3}/slth/templates/service-worker.js +0 -0
- {slthcore-0.6.1 → slthcore-0.6.3}/slth/templates/signature.html +0 -0
- {slthcore-0.6.1 → slthcore-0.6.3}/slth/tests.py +0 -0
- {slthcore-0.6.1 → slthcore-0.6.3}/slth/threadlocal.py +0 -0
- {slthcore-0.6.1 → slthcore-0.6.3}/slth/timezone.py +0 -0
- {slthcore-0.6.1 → slthcore-0.6.3}/slth/urls.py +0 -0
- {slthcore-0.6.1 → slthcore-0.6.3}/slth/utils.py +0 -0
- {slthcore-0.6.1 → slthcore-0.6.3}/slthcore.egg-info/dependency_links.txt +0 -0
- {slthcore-0.6.1 → slthcore-0.6.3}/slthcore.egg-info/top_level.txt +0 -0
|
@@ -201,11 +201,12 @@ class Application(metaclass=ApplicationMetaclass):
|
|
|
201
201
|
logo = build_url(request, self.brand or self.logo)
|
|
202
202
|
title = self.title if self.brand is None else None
|
|
203
203
|
if request.user.is_authenticated:
|
|
204
|
+
name = request.user.first_name
|
|
204
205
|
user = request.user.username.split()[0].split("@")[0]
|
|
205
206
|
profile = apps.get_model("slth", "profile").objects.filter(user=request.user).first()
|
|
206
207
|
photo = profile and profile.photo and build_url(request, profile.photo.url) or None
|
|
207
208
|
else:
|
|
208
|
-
user = profile = photo = None
|
|
209
|
+
name = user = profile = photo = None
|
|
209
210
|
|
|
210
211
|
def contribute(endpoint_list, endpoint_name):
|
|
211
212
|
cls = ENDPOINTS[endpoint_name]
|
|
@@ -230,7 +231,7 @@ class Application(metaclass=ApplicationMetaclass):
|
|
|
230
231
|
type="application",
|
|
231
232
|
icon=icon,
|
|
232
233
|
navbar=dict(
|
|
233
|
-
type="navbar", title=title, subtitle=self.subtitle, logo=logo, user=user, **endpoints
|
|
234
|
+
type="navbar", title=title, subtitle=self.subtitle, logo=logo, user=user, name=name, **endpoints
|
|
234
235
|
),
|
|
235
236
|
menu=dict(
|
|
236
237
|
type="menu", items=self.menu.process(request), user=user, image=photo
|
|
@@ -10,6 +10,7 @@ from . import PublicEndpoint, Endpoint, ChildInstanceEndpoint
|
|
|
10
10
|
from django.utils import timezone
|
|
11
11
|
|
|
12
12
|
def login_response(user, redirect='/api/dashboard/'):
|
|
13
|
+
Token.objects.filter(user=user).delete()
|
|
13
14
|
token = Token.objects.create(user=user)
|
|
14
15
|
current_timezone = timezone.get_current_timezone()
|
|
15
16
|
current_timezone_name = current_timezone.__str__()
|
|
@@ -397,9 +397,14 @@ class FormMixin:
|
|
|
397
397
|
self.request, f"choices={fname}"
|
|
398
398
|
))
|
|
399
399
|
if ftype == "boolean":
|
|
400
|
-
|
|
401
|
-
|
|
402
|
-
|
|
400
|
+
if isinstance(field, NullBooleanField):
|
|
401
|
+
data.update(choices=[
|
|
402
|
+
{"id": "true", "value": "Sim"}, {"id": "false", "value": "Não"}, {"id": "null", "value": "Não Informado"}
|
|
403
|
+
])
|
|
404
|
+
else:
|
|
405
|
+
data.update(choices=[
|
|
406
|
+
{"id": "true", "value": "Sim"}, {"id": "false", "value": "Não"}
|
|
407
|
+
])
|
|
403
408
|
|
|
404
409
|
attr_name = f"on_{prefix}__{name}_change" if prefix else f"on_{name}_change"
|
|
405
410
|
on_change_name = f"{prefix}__{name}" if prefix else name
|
|
@@ -1,10 +1,9 @@
|
|
|
1
1
|
# -*- coding: utf-8 -*-
|
|
2
2
|
|
|
3
|
-
import os
|
|
4
|
-
|
|
5
3
|
from django.conf import settings
|
|
6
4
|
from django.contrib.auth.models import User
|
|
7
5
|
from django.core.management import call_command
|
|
6
|
+
from django.contrib.staticfiles.storage import staticfiles_storage
|
|
8
7
|
from django.core.management.base import BaseCommand
|
|
9
8
|
from django.utils import termcolors
|
|
10
9
|
|
|
@@ -34,3 +33,6 @@ class Command(BaseCommand):
|
|
|
34
33
|
user.set_password(password)
|
|
35
34
|
user.save()
|
|
36
35
|
print('Superuser "admin" with password "{}" was created.'.format(password))
|
|
36
|
+
|
|
37
|
+
if getattr(settings, 'USE_S3'):
|
|
38
|
+
staticfiles_storage.collectstatic()
|
|
@@ -523,6 +523,21 @@ class Token(models.Model):
|
|
|
523
523
|
|
|
524
524
|
def __str__(self):
|
|
525
525
|
return self.key
|
|
526
|
+
|
|
527
|
+
def is_valid(self):
|
|
528
|
+
seconds = (datetime.now() - self.created).seconds
|
|
529
|
+
life_time = getattr(settings, 'TOKEN_LIFE_TIME', 15)
|
|
530
|
+
refresh_time = getattr(settings, 'TOKEN_REFRESH_TIME', 5)
|
|
531
|
+
if seconds > life_time * 60:
|
|
532
|
+
# print(f'Token {self.key} for {self.user} created at {self.created.isoformat()} is expired.')
|
|
533
|
+
return False
|
|
534
|
+
elif seconds > refresh_time * 60:
|
|
535
|
+
# print(f'Refreshing token {self.key} for {self.user} created at {self.created.isoformat()}...')
|
|
536
|
+
Token.objects.filter(pk=self.pk).update(created=datetime.now())
|
|
537
|
+
return True
|
|
538
|
+
else:
|
|
539
|
+
# print(f'Token {self.key} for {self.user} created at {self.created.isoformat()} is still valid.')
|
|
540
|
+
return True
|
|
526
541
|
|
|
527
542
|
|
|
528
543
|
class LogQuerySet(models.QuerySet):
|
|
@@ -452,10 +452,15 @@ class QuerySet(models.QuerySet):
|
|
|
452
452
|
options = filter.choices(self)
|
|
453
453
|
value = self.parameter(name)
|
|
454
454
|
if isinstance(options, list) or isinstance(options, tuple):
|
|
455
|
+
add_null = False
|
|
455
456
|
field_type = 'choice'
|
|
456
457
|
choices = [{'id': '', 'value':''}]
|
|
457
|
-
|
|
458
|
-
|
|
458
|
+
for k, v in options:
|
|
459
|
+
choices.append({'id': k, 'value': v})
|
|
460
|
+
if k == 'null':
|
|
461
|
+
add_null = False
|
|
462
|
+
if add_null:
|
|
463
|
+
choices.append({'id': 'null', 'value':'Nulo'})
|
|
459
464
|
else:
|
|
460
465
|
field_type = 'choice'
|
|
461
466
|
choices = append_url(base_url, f'choices={name}')
|
|
@@ -484,8 +489,6 @@ class QuerySet(models.QuerySet):
|
|
|
484
489
|
elif isinstance(field, models.BooleanField):
|
|
485
490
|
field_type = 'choice'
|
|
486
491
|
value = self.parameter(name)
|
|
487
|
-
if value:
|
|
488
|
-
value = value == 'true'
|
|
489
492
|
choices = [dict(id='', value=''), dict(id='true', value='Sim'), dict(id='false', value='Não'), dict(id='null', value='Nulo')]
|
|
490
493
|
elif isinstance(field, models.DateField):
|
|
491
494
|
field_type = 'text' if suffix in ('year', 'month') else 'date'
|
|
@@ -505,10 +508,15 @@ class QuerySet(models.QuerySet):
|
|
|
505
508
|
field_type = 'choice'
|
|
506
509
|
choices = append_url(base_url, f'choices={name}')
|
|
507
510
|
if getattr(field, 'choices'):
|
|
511
|
+
add_null = False
|
|
508
512
|
field_type = 'choice'
|
|
509
513
|
choices = [{'id': '', 'value':''}]
|
|
510
|
-
|
|
511
|
-
|
|
514
|
+
for k, v in field.choices:
|
|
515
|
+
choices.append({'id': k, 'value': v})
|
|
516
|
+
if k == 'null':
|
|
517
|
+
add_null = False
|
|
518
|
+
if add_null:
|
|
519
|
+
choices.append({'id': 'null', 'value':'Nulo'})
|
|
512
520
|
label = label or str(field.verbose_name).title()
|
|
513
521
|
symbol = symbols.get(suffix) if suffix else None
|
|
514
522
|
label = label + symbol if symbol else label
|