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.

Files changed (130) hide show
  1. {slthcore-0.6.1/slthcore.egg-info → slthcore-0.6.3}/PKG-INFO +1 -1
  2. {slthcore-0.6.1 → slthcore-0.6.3}/setup.py +1 -1
  3. {slthcore-0.6.1 → slthcore-0.6.3}/slth/application.py +3 -2
  4. {slthcore-0.6.1 → slthcore-0.6.3}/slth/endpoints/auth.py +1 -0
  5. {slthcore-0.6.1 → slthcore-0.6.3}/slth/forms.py +8 -3
  6. {slthcore-0.6.1 → slthcore-0.6.3}/slth/management/commands/sync.py +4 -2
  7. {slthcore-0.6.1 → slthcore-0.6.3}/slth/models.py +15 -0
  8. {slthcore-0.6.1 → slthcore-0.6.3}/slth/queryset.py +14 -6
  9. {slthcore-0.6.1 → slthcore-0.6.3}/slth/static/js/slth.min.js +19 -19
  10. slthcore-0.6.3/slth/storage/__init__.py +99 -0
  11. slthcore-0.6.3/slth/storage/s3.py +383 -0
  12. {slthcore-0.6.1 → slthcore-0.6.3}/slth/views.py +7 -2
  13. {slthcore-0.6.1 → slthcore-0.6.3/slthcore.egg-info}/PKG-INFO +1 -1
  14. {slthcore-0.6.1 → slthcore-0.6.3}/slthcore.egg-info/SOURCES.txt +2 -0
  15. {slthcore-0.6.1 → slthcore-0.6.3}/MANIFEST.in +0 -0
  16. {slthcore-0.6.1 → slthcore-0.6.3}/setup.cfg +0 -0
  17. {slthcore-0.6.1 → slthcore-0.6.3}/slth/__init__.py +0 -0
  18. {slthcore-0.6.1 → slthcore-0.6.3}/slth/apps.py +0 -0
  19. {slthcore-0.6.1 → slthcore-0.6.3}/slth/cmd/configure/__main__.py +0 -0
  20. {slthcore-0.6.1 → slthcore-0.6.3}/slth/cmd/init/__main__.py +0 -0
  21. {slthcore-0.6.1 → slthcore-0.6.3}/slth/cmd/init/__pycache__/__main__.cpython-312.pyc +0 -0
  22. {slthcore-0.6.1 → slthcore-0.6.3}/slth/cmd/init/boilerplate/.DS_Store +0 -0
  23. {slthcore-0.6.1 → slthcore-0.6.3}/slth/cmd/init/boilerplate/.gitignore +0 -0
  24. {slthcore-0.6.1 → slthcore-0.6.3}/slth/cmd/init/boilerplate/backend/api/__init__.py +0 -0
  25. {slthcore-0.6.1 → slthcore-0.6.3}/slth/cmd/init/boilerplate/backend/api/asgi.py +0 -0
  26. {slthcore-0.6.1 → slthcore-0.6.3}/slth/cmd/init/boilerplate/backend/api/endpoints/__init__.py +0 -0
  27. {slthcore-0.6.1 → slthcore-0.6.3}/slth/cmd/init/boilerplate/backend/api/models.py +0 -0
  28. {slthcore-0.6.1 → slthcore-0.6.3}/slth/cmd/init/boilerplate/backend/api/settings.py +0 -0
  29. {slthcore-0.6.1 → slthcore-0.6.3}/slth/cmd/init/boilerplate/backend/api/tests.py +0 -0
  30. {slthcore-0.6.1 → slthcore-0.6.3}/slth/cmd/init/boilerplate/backend/api/urls.py +0 -0
  31. {slthcore-0.6.1 → slthcore-0.6.3}/slth/cmd/init/boilerplate/backend/api/wsgi.py +0 -0
  32. {slthcore-0.6.1 → slthcore-0.6.3}/slth/cmd/init/boilerplate/backend/entrypoint.sh +0 -0
  33. {slthcore-0.6.1 → slthcore-0.6.3}/slth/cmd/init/boilerplate/backend/manage.py +0 -0
  34. {slthcore-0.6.1 → slthcore-0.6.3}/slth/cmd/init/boilerplate/backend/requirements.txt +0 -0
  35. {slthcore-0.6.1 → slthcore-0.6.3}/slth/cmd/init/boilerplate/base.env +0 -0
  36. {slthcore-0.6.1 → slthcore-0.6.3}/slth/cmd/init/boilerplate/docker-compose.yml +0 -0
  37. {slthcore-0.6.1 → slthcore-0.6.3}/slth/cmd/init/boilerplate/frontend/package.json +0 -0
  38. {slthcore-0.6.1 → slthcore-0.6.3}/slth/cmd/init/boilerplate/frontend/src/main.jsx +0 -0
  39. {slthcore-0.6.1 → slthcore-0.6.3}/slth/cmd/init/boilerplate/frontend/vite.config.js +0 -0
  40. {slthcore-0.6.1 → slthcore-0.6.3}/slth/cmd/init/boilerplate/local.env +0 -0
  41. {slthcore-0.6.1 → slthcore-0.6.3}/slth/cmd/init/boilerplate/run.sh +0 -0
  42. {slthcore-0.6.1 → slthcore-0.6.3}/slth/cmd/init/boilerplate/selenium/run.sh +0 -0
  43. {slthcore-0.6.1 → slthcore-0.6.3}/slth/cmd/init/boilerplate/test.sh +0 -0
  44. {slthcore-0.6.1 → slthcore-0.6.3}/slth/components.py +0 -0
  45. {slthcore-0.6.1 → slthcore-0.6.3}/slth/db/__init__.py +0 -0
  46. {slthcore-0.6.1 → slthcore-0.6.3}/slth/db/generic.py +0 -0
  47. {slthcore-0.6.1 → slthcore-0.6.3}/slth/db/models.py +0 -0
  48. {slthcore-0.6.1 → slthcore-0.6.3}/slth/endpoints/__init__.py +0 -0
  49. {slthcore-0.6.1 → slthcore-0.6.3}/slth/endpoints/deletion.py +0 -0
  50. {slthcore-0.6.1 → slthcore-0.6.3}/slth/endpoints/dev.py +0 -0
  51. {slthcore-0.6.1 → slthcore-0.6.3}/slth/endpoints/email.py +0 -0
  52. {slthcore-0.6.1 → slthcore-0.6.3}/slth/endpoints/job.py +0 -0
  53. {slthcore-0.6.1 → slthcore-0.6.3}/slth/endpoints/log.py +0 -0
  54. {slthcore-0.6.1 → slthcore-0.6.3}/slth/endpoints/profile.py +0 -0
  55. {slthcore-0.6.1 → slthcore-0.6.3}/slth/endpoints/pushsubscription.py +0 -0
  56. {slthcore-0.6.1 → slthcore-0.6.3}/slth/endpoints/report.py +0 -0
  57. {slthcore-0.6.1 → slthcore-0.6.3}/slth/endpoints/role.py +0 -0
  58. {slthcore-0.6.1 → slthcore-0.6.3}/slth/endpoints/settings.py +0 -0
  59. {slthcore-0.6.1 → slthcore-0.6.3}/slth/endpoints/task.py +0 -0
  60. {slthcore-0.6.1 → slthcore-0.6.3}/slth/endpoints/timezone.py +0 -0
  61. {slthcore-0.6.1 → slthcore-0.6.3}/slth/endpoints/user.py +0 -0
  62. {slthcore-0.6.1 → slthcore-0.6.3}/slth/endpoints/whatsappnotification.py +0 -0
  63. {slthcore-0.6.1 → slthcore-0.6.3}/slth/exceptions.py +0 -0
  64. {slthcore-0.6.1 → slthcore-0.6.3}/slth/factory.py +0 -0
  65. {slthcore-0.6.1 → slthcore-0.6.3}/slth/geo/__init__.py +0 -0
  66. {slthcore-0.6.1 → slthcore-0.6.3}/slth/integrations/__init__.py +0 -0
  67. {slthcore-0.6.1 → slthcore-0.6.3}/slth/integrations/deepseek/__init__.py +0 -0
  68. {slthcore-0.6.1 → slthcore-0.6.3}/slth/integrations/google/__init__.py +0 -0
  69. {slthcore-0.6.1 → slthcore-0.6.3}/slth/integrations/google/gemini.py +0 -0
  70. {slthcore-0.6.1 → slthcore-0.6.3}/slth/integrations/google/places.py +0 -0
  71. {slthcore-0.6.1 → slthcore-0.6.3}/slth/integrations/google/vision.py +0 -0
  72. {slthcore-0.6.1 → slthcore-0.6.3}/slth/integrations/justvoip/__init__.py +0 -0
  73. {slthcore-0.6.1 → slthcore-0.6.3}/slth/integrations/mercadopago/__init__.py +0 -0
  74. {slthcore-0.6.1 → slthcore-0.6.3}/slth/integrations/openai/__init__.py +0 -0
  75. {slthcore-0.6.1 → slthcore-0.6.3}/slth/integrations/openai/chatgpt.py +0 -0
  76. {slthcore-0.6.1 → slthcore-0.6.3}/slth/integrations/viacep/__init__.py +0 -0
  77. {slthcore-0.6.1 → slthcore-0.6.3}/slth/integrations/whatsapp/__init__.py +0 -0
  78. {slthcore-0.6.1 → slthcore-0.6.3}/slth/management/__init__.py +0 -0
  79. {slthcore-0.6.1 → slthcore-0.6.3}/slth/management/commands/__init__.py +0 -0
  80. {slthcore-0.6.1 → slthcore-0.6.3}/slth/management/commands/api.py +0 -0
  81. {slthcore-0.6.1 → slthcore-0.6.3}/slth/management/commands/integration_test.py +0 -0
  82. {slthcore-0.6.1 → slthcore-0.6.3}/slth/management/commands/worker.py +0 -0
  83. {slthcore-0.6.1 → slthcore-0.6.3}/slth/middleware/__init__.py +0 -0
  84. {slthcore-0.6.1 → slthcore-0.6.3}/slth/middleware/timezone.py +0 -0
  85. {slthcore-0.6.1 → slthcore-0.6.3}/slth/migrations/0001_initial.py +0 -0
  86. {slthcore-0.6.1 → slthcore-0.6.3}/slth/migrations/0002_email_role_pushsubscription_error.py +0 -0
  87. {slthcore-0.6.1 → slthcore-0.6.3}/slth/migrations/0003_rename_photo_profile_alter_profile_options.py +0 -0
  88. {slthcore-0.6.1 → slthcore-0.6.3}/slth/migrations/0004_alter_profile_photo.py +0 -0
  89. {slthcore-0.6.1 → slthcore-0.6.3}/slth/migrations/0005_alter_profile_photo.py +0 -0
  90. {slthcore-0.6.1 → slthcore-0.6.3}/slth/migrations/0006_user.py +0 -0
  91. {slthcore-0.6.1 → slthcore-0.6.3}/slth/migrations/0007_deletion_log.py +0 -0
  92. {slthcore-0.6.1 → slthcore-0.6.3}/slth/migrations/0008_alter_deletion_datetime_alter_log_datetime.py +0 -0
  93. {slthcore-0.6.1 → slthcore-0.6.3}/slth/migrations/0009_remove_email_from_email_email_action_email_attempt_and_more.py +0 -0
  94. {slthcore-0.6.1 → slthcore-0.6.3}/slth/migrations/0010_email_key_alter_email_action_alter_email_attempt_and_more.py +0 -0
  95. {slthcore-0.6.1 → slthcore-0.6.3}/slth/migrations/0011_usertimezone.py +0 -0
  96. {slthcore-0.6.1 → slthcore-0.6.3}/slth/migrations/0012_timezone_remove_usertimezone_key_and_more.py +0 -0
  97. {slthcore-0.6.1 → slthcore-0.6.3}/slth/migrations/0013_whatsappnotification.py +0 -0
  98. {slthcore-0.6.1 → slthcore-0.6.3}/slth/migrations/0014_settings.py +0 -0
  99. {slthcore-0.6.1 → slthcore-0.6.3}/slth/migrations/0015_auto_20250412_1126.py +0 -0
  100. {slthcore-0.6.1 → slthcore-0.6.3}/slth/migrations/__init__.py +0 -0
  101. {slthcore-0.6.1 → slthcore-0.6.3}/slth/notifications.py +0 -0
  102. {slthcore-0.6.1 → slthcore-0.6.3}/slth/oauth.py +0 -0
  103. {slthcore-0.6.1 → slthcore-0.6.3}/slth/pdf/__init__.py +0 -0
  104. {slthcore-0.6.1 → slthcore-0.6.3}/slth/pdf/tests.py +0 -0
  105. {slthcore-0.6.1 → slthcore-0.6.3}/slth/permissions.py +0 -0
  106. {slthcore-0.6.1 → slthcore-0.6.3}/slth/printer.py +0 -0
  107. {slthcore-0.6.1 → slthcore-0.6.3}/slth/roles.py +0 -0
  108. {slthcore-0.6.1 → slthcore-0.6.3}/slth/selenium/__init__.py +0 -0
  109. {slthcore-0.6.1 → slthcore-0.6.3}/slth/selenium/browser.py +0 -0
  110. {slthcore-0.6.1 → slthcore-0.6.3}/slth/serializer.py +0 -0
  111. {slthcore-0.6.1 → slthcore-0.6.3}/slth/static/.DS_Store +0 -0
  112. {slthcore-0.6.1 → slthcore-0.6.3}/slth/static/css/.DS_Store +0 -0
  113. {slthcore-0.6.1 → slthcore-0.6.3}/slth/static/css/slth.css +0 -0
  114. {slthcore-0.6.1 → slthcore-0.6.3}/slth/static/images/placeholder.png +0 -0
  115. {slthcore-0.6.1 → slthcore-0.6.3}/slth/static/js/index.min.js +0 -0
  116. {slthcore-0.6.1 → slthcore-0.6.3}/slth/static/js/react.min.js +0 -0
  117. {slthcore-0.6.1 → slthcore-0.6.3}/slth/statistics.py +0 -0
  118. {slthcore-0.6.1 → slthcore-0.6.3}/slth/tasks.py +0 -0
  119. {slthcore-0.6.1 → slthcore-0.6.3}/slth/templates/email.html +0 -0
  120. {slthcore-0.6.1 → slthcore-0.6.3}/slth/templates/index.html +0 -0
  121. {slthcore-0.6.1 → slthcore-0.6.3}/slth/templates/report.html +0 -0
  122. {slthcore-0.6.1 → slthcore-0.6.3}/slth/templates/service-worker.js +0 -0
  123. {slthcore-0.6.1 → slthcore-0.6.3}/slth/templates/signature.html +0 -0
  124. {slthcore-0.6.1 → slthcore-0.6.3}/slth/tests.py +0 -0
  125. {slthcore-0.6.1 → slthcore-0.6.3}/slth/threadlocal.py +0 -0
  126. {slthcore-0.6.1 → slthcore-0.6.3}/slth/timezone.py +0 -0
  127. {slthcore-0.6.1 → slthcore-0.6.3}/slth/urls.py +0 -0
  128. {slthcore-0.6.1 → slthcore-0.6.3}/slth/utils.py +0 -0
  129. {slthcore-0.6.1 → slthcore-0.6.3}/slthcore.egg-info/dependency_links.txt +0 -0
  130. {slthcore-0.6.1 → slthcore-0.6.3}/slthcore.egg-info/top_level.txt +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: slthcore
3
- Version: 0.6.1
3
+ Version: 0.6.3
4
4
  Summary: API generator based on yml file
5
5
  Home-page: https://github.com/brenokcc
6
6
  Author: Breno Silva
@@ -4,7 +4,7 @@ install_requires = []
4
4
 
5
5
  setup(
6
6
  name='slthcore',
7
- version='0.6.1',
7
+ version='0.6.3',
8
8
  packages=find_packages(),
9
9
  install_requires=install_requires,
10
10
  include_package_data=True,
@@ -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
- data.update(choices=[
401
- {"id": "true", "value": "Sim"}, {"id": "false", "value": "Não"}, {"id": "null", "value": "Não Informado"}
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
- choices.extend([{'id': k, 'value': v} for k, v in options])
458
- choices.append({'id': 'null', 'value':'Nulo'})
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
- choices.extend([{'id': k, 'value': v} for k, v in field.choices])
511
- choices.append({'id': 'null', 'value':'Nulo'})
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