slthcore 0.5.7__tar.gz → 0.5.9__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 (129) hide show
  1. {slthcore-0.5.7/slthcore.egg-info → slthcore-0.5.9}/PKG-INFO +1 -1
  2. {slthcore-0.5.7 → slthcore-0.5.9}/setup.py +1 -1
  3. {slthcore-0.5.7 → slthcore-0.5.9}/slth/application.py +18 -8
  4. {slthcore-0.5.7 → slthcore-0.5.9}/slth/endpoints/__init__.py +11 -5
  5. {slthcore-0.5.7 → slthcore-0.5.9}/slth/forms.py +1 -1
  6. {slthcore-0.5.7 → slthcore-0.5.9}/slth/queryset.py +5 -0
  7. {slthcore-0.5.7 → slthcore-0.5.9}/slth/serializer.py +1 -0
  8. slthcore-0.5.9/slth/static/js/slth.min.js +270 -0
  9. {slthcore-0.5.7 → slthcore-0.5.9/slthcore.egg-info}/PKG-INFO +1 -1
  10. slthcore-0.5.7/slth/static/js/slth.min.js +0 -270
  11. {slthcore-0.5.7 → slthcore-0.5.9}/MANIFEST.in +0 -0
  12. {slthcore-0.5.7 → slthcore-0.5.9}/setup.cfg +0 -0
  13. {slthcore-0.5.7 → slthcore-0.5.9}/slth/__init__.py +0 -0
  14. {slthcore-0.5.7 → slthcore-0.5.9}/slth/apps.py +0 -0
  15. {slthcore-0.5.7 → slthcore-0.5.9}/slth/cmd/configure/__main__.py +0 -0
  16. {slthcore-0.5.7 → slthcore-0.5.9}/slth/cmd/init/__main__.py +0 -0
  17. {slthcore-0.5.7 → slthcore-0.5.9}/slth/cmd/init/__pycache__/__main__.cpython-312.pyc +0 -0
  18. {slthcore-0.5.7 → slthcore-0.5.9}/slth/cmd/init/boilerplate/.DS_Store +0 -0
  19. {slthcore-0.5.7 → slthcore-0.5.9}/slth/cmd/init/boilerplate/.gitignore +0 -0
  20. {slthcore-0.5.7 → slthcore-0.5.9}/slth/cmd/init/boilerplate/backend/api/__init__.py +0 -0
  21. {slthcore-0.5.7 → slthcore-0.5.9}/slth/cmd/init/boilerplate/backend/api/asgi.py +0 -0
  22. {slthcore-0.5.7 → slthcore-0.5.9}/slth/cmd/init/boilerplate/backend/api/endpoints/__init__.py +0 -0
  23. {slthcore-0.5.7 → slthcore-0.5.9}/slth/cmd/init/boilerplate/backend/api/models.py +0 -0
  24. {slthcore-0.5.7 → slthcore-0.5.9}/slth/cmd/init/boilerplate/backend/api/settings.py +0 -0
  25. {slthcore-0.5.7 → slthcore-0.5.9}/slth/cmd/init/boilerplate/backend/api/tests.py +0 -0
  26. {slthcore-0.5.7 → slthcore-0.5.9}/slth/cmd/init/boilerplate/backend/api/urls.py +0 -0
  27. {slthcore-0.5.7 → slthcore-0.5.9}/slth/cmd/init/boilerplate/backend/api/wsgi.py +0 -0
  28. {slthcore-0.5.7 → slthcore-0.5.9}/slth/cmd/init/boilerplate/backend/entrypoint.sh +0 -0
  29. {slthcore-0.5.7 → slthcore-0.5.9}/slth/cmd/init/boilerplate/backend/manage.py +0 -0
  30. {slthcore-0.5.7 → slthcore-0.5.9}/slth/cmd/init/boilerplate/backend/requirements.txt +0 -0
  31. {slthcore-0.5.7 → slthcore-0.5.9}/slth/cmd/init/boilerplate/base.env +0 -0
  32. {slthcore-0.5.7 → slthcore-0.5.9}/slth/cmd/init/boilerplate/docker-compose.yml +0 -0
  33. {slthcore-0.5.7 → slthcore-0.5.9}/slth/cmd/init/boilerplate/frontend/package.json +0 -0
  34. {slthcore-0.5.7 → slthcore-0.5.9}/slth/cmd/init/boilerplate/frontend/src/main.jsx +0 -0
  35. {slthcore-0.5.7 → slthcore-0.5.9}/slth/cmd/init/boilerplate/frontend/vite.config.js +0 -0
  36. {slthcore-0.5.7 → slthcore-0.5.9}/slth/cmd/init/boilerplate/local.env +0 -0
  37. {slthcore-0.5.7 → slthcore-0.5.9}/slth/cmd/init/boilerplate/run.sh +0 -0
  38. {slthcore-0.5.7 → slthcore-0.5.9}/slth/cmd/init/boilerplate/selenium/run.sh +0 -0
  39. {slthcore-0.5.7 → slthcore-0.5.9}/slth/cmd/init/boilerplate/test.sh +0 -0
  40. {slthcore-0.5.7 → slthcore-0.5.9}/slth/components.py +0 -0
  41. {slthcore-0.5.7 → slthcore-0.5.9}/slth/db/__init__.py +0 -0
  42. {slthcore-0.5.7 → slthcore-0.5.9}/slth/db/generic.py +0 -0
  43. {slthcore-0.5.7 → slthcore-0.5.9}/slth/db/models.py +0 -0
  44. {slthcore-0.5.7 → slthcore-0.5.9}/slth/endpoints/auth.py +0 -0
  45. {slthcore-0.5.7 → slthcore-0.5.9}/slth/endpoints/deletion.py +0 -0
  46. {slthcore-0.5.7 → slthcore-0.5.9}/slth/endpoints/dev.py +0 -0
  47. {slthcore-0.5.7 → slthcore-0.5.9}/slth/endpoints/email.py +0 -0
  48. {slthcore-0.5.7 → slthcore-0.5.9}/slth/endpoints/job.py +0 -0
  49. {slthcore-0.5.7 → slthcore-0.5.9}/slth/endpoints/log.py +0 -0
  50. {slthcore-0.5.7 → slthcore-0.5.9}/slth/endpoints/profile.py +0 -0
  51. {slthcore-0.5.7 → slthcore-0.5.9}/slth/endpoints/pushsubscription.py +0 -0
  52. {slthcore-0.5.7 → slthcore-0.5.9}/slth/endpoints/report.py +0 -0
  53. {slthcore-0.5.7 → slthcore-0.5.9}/slth/endpoints/role.py +0 -0
  54. {slthcore-0.5.7 → slthcore-0.5.9}/slth/endpoints/settings.py +0 -0
  55. {slthcore-0.5.7 → slthcore-0.5.9}/slth/endpoints/task.py +0 -0
  56. {slthcore-0.5.7 → slthcore-0.5.9}/slth/endpoints/timezone.py +0 -0
  57. {slthcore-0.5.7 → slthcore-0.5.9}/slth/endpoints/user.py +0 -0
  58. {slthcore-0.5.7 → slthcore-0.5.9}/slth/endpoints/whatsappnotification.py +0 -0
  59. {slthcore-0.5.7 → slthcore-0.5.9}/slth/exceptions.py +0 -0
  60. {slthcore-0.5.7 → slthcore-0.5.9}/slth/factory.py +0 -0
  61. {slthcore-0.5.7 → slthcore-0.5.9}/slth/geo/__init__.py +0 -0
  62. {slthcore-0.5.7 → slthcore-0.5.9}/slth/integrations/__init__.py +0 -0
  63. {slthcore-0.5.7 → slthcore-0.5.9}/slth/integrations/deepseek/__init__.py +0 -0
  64. {slthcore-0.5.7 → slthcore-0.5.9}/slth/integrations/google/__init__.py +0 -0
  65. {slthcore-0.5.7 → slthcore-0.5.9}/slth/integrations/google/gemini.py +0 -0
  66. {slthcore-0.5.7 → slthcore-0.5.9}/slth/integrations/google/places.py +0 -0
  67. {slthcore-0.5.7 → slthcore-0.5.9}/slth/integrations/google/vision.py +0 -0
  68. {slthcore-0.5.7 → slthcore-0.5.9}/slth/integrations/justvoip/__init__.py +0 -0
  69. {slthcore-0.5.7 → slthcore-0.5.9}/slth/integrations/mercadopago/__init__.py +0 -0
  70. {slthcore-0.5.7 → slthcore-0.5.9}/slth/integrations/openai/__init__.py +0 -0
  71. {slthcore-0.5.7 → slthcore-0.5.9}/slth/integrations/openai/chatgpt.py +0 -0
  72. {slthcore-0.5.7 → slthcore-0.5.9}/slth/integrations/viacep/__init__.py +0 -0
  73. {slthcore-0.5.7 → slthcore-0.5.9}/slth/integrations/whatsapp/__init__.py +0 -0
  74. {slthcore-0.5.7 → slthcore-0.5.9}/slth/management/__init__.py +0 -0
  75. {slthcore-0.5.7 → slthcore-0.5.9}/slth/management/commands/__init__.py +0 -0
  76. {slthcore-0.5.7 → slthcore-0.5.9}/slth/management/commands/api.py +0 -0
  77. {slthcore-0.5.7 → slthcore-0.5.9}/slth/management/commands/integration_test.py +0 -0
  78. {slthcore-0.5.7 → slthcore-0.5.9}/slth/management/commands/sync.py +0 -0
  79. {slthcore-0.5.7 → slthcore-0.5.9}/slth/management/commands/worker.py +0 -0
  80. {slthcore-0.5.7 → slthcore-0.5.9}/slth/middleware/__init__.py +0 -0
  81. {slthcore-0.5.7 → slthcore-0.5.9}/slth/middleware/timezone.py +0 -0
  82. {slthcore-0.5.7 → slthcore-0.5.9}/slth/migrations/0001_initial.py +0 -0
  83. {slthcore-0.5.7 → slthcore-0.5.9}/slth/migrations/0002_email_role_pushsubscription_error.py +0 -0
  84. {slthcore-0.5.7 → slthcore-0.5.9}/slth/migrations/0003_rename_photo_profile_alter_profile_options.py +0 -0
  85. {slthcore-0.5.7 → slthcore-0.5.9}/slth/migrations/0004_alter_profile_photo.py +0 -0
  86. {slthcore-0.5.7 → slthcore-0.5.9}/slth/migrations/0005_alter_profile_photo.py +0 -0
  87. {slthcore-0.5.7 → slthcore-0.5.9}/slth/migrations/0006_user.py +0 -0
  88. {slthcore-0.5.7 → slthcore-0.5.9}/slth/migrations/0007_deletion_log.py +0 -0
  89. {slthcore-0.5.7 → slthcore-0.5.9}/slth/migrations/0008_alter_deletion_datetime_alter_log_datetime.py +0 -0
  90. {slthcore-0.5.7 → slthcore-0.5.9}/slth/migrations/0009_remove_email_from_email_email_action_email_attempt_and_more.py +0 -0
  91. {slthcore-0.5.7 → slthcore-0.5.9}/slth/migrations/0010_email_key_alter_email_action_alter_email_attempt_and_more.py +0 -0
  92. {slthcore-0.5.7 → slthcore-0.5.9}/slth/migrations/0011_usertimezone.py +0 -0
  93. {slthcore-0.5.7 → slthcore-0.5.9}/slth/migrations/0012_timezone_remove_usertimezone_key_and_more.py +0 -0
  94. {slthcore-0.5.7 → slthcore-0.5.9}/slth/migrations/0013_whatsappnotification.py +0 -0
  95. {slthcore-0.5.7 → slthcore-0.5.9}/slth/migrations/0014_settings.py +0 -0
  96. {slthcore-0.5.7 → slthcore-0.5.9}/slth/migrations/0015_auto_20250412_1126.py +0 -0
  97. {slthcore-0.5.7 → slthcore-0.5.9}/slth/migrations/__init__.py +0 -0
  98. {slthcore-0.5.7 → slthcore-0.5.9}/slth/models.py +0 -0
  99. {slthcore-0.5.7 → slthcore-0.5.9}/slth/notifications.py +0 -0
  100. {slthcore-0.5.7 → slthcore-0.5.9}/slth/oauth.py +0 -0
  101. {slthcore-0.5.7 → slthcore-0.5.9}/slth/pdf/__init__.py +0 -0
  102. {slthcore-0.5.7 → slthcore-0.5.9}/slth/pdf/tests.py +0 -0
  103. {slthcore-0.5.7 → slthcore-0.5.9}/slth/permissions.py +0 -0
  104. {slthcore-0.5.7 → slthcore-0.5.9}/slth/printer.py +0 -0
  105. {slthcore-0.5.7 → slthcore-0.5.9}/slth/roles.py +0 -0
  106. {slthcore-0.5.7 → slthcore-0.5.9}/slth/selenium/__init__.py +0 -0
  107. {slthcore-0.5.7 → slthcore-0.5.9}/slth/selenium/browser.py +0 -0
  108. {slthcore-0.5.7 → slthcore-0.5.9}/slth/static/.DS_Store +0 -0
  109. {slthcore-0.5.7 → slthcore-0.5.9}/slth/static/css/.DS_Store +0 -0
  110. {slthcore-0.5.7 → slthcore-0.5.9}/slth/static/css/slth.css +0 -0
  111. {slthcore-0.5.7 → slthcore-0.5.9}/slth/static/images/placeholder.png +0 -0
  112. {slthcore-0.5.7 → slthcore-0.5.9}/slth/static/js/index.min.js +0 -0
  113. {slthcore-0.5.7 → slthcore-0.5.9}/slth/static/js/react.min.js +0 -0
  114. {slthcore-0.5.7 → slthcore-0.5.9}/slth/statistics.py +0 -0
  115. {slthcore-0.5.7 → slthcore-0.5.9}/slth/tasks.py +0 -0
  116. {slthcore-0.5.7 → slthcore-0.5.9}/slth/templates/email.html +0 -0
  117. {slthcore-0.5.7 → slthcore-0.5.9}/slth/templates/index.html +0 -0
  118. {slthcore-0.5.7 → slthcore-0.5.9}/slth/templates/report.html +0 -0
  119. {slthcore-0.5.7 → slthcore-0.5.9}/slth/templates/service-worker.js +0 -0
  120. {slthcore-0.5.7 → slthcore-0.5.9}/slth/templates/signature.html +0 -0
  121. {slthcore-0.5.7 → slthcore-0.5.9}/slth/tests.py +0 -0
  122. {slthcore-0.5.7 → slthcore-0.5.9}/slth/threadlocal.py +0 -0
  123. {slthcore-0.5.7 → slthcore-0.5.9}/slth/timezone.py +0 -0
  124. {slthcore-0.5.7 → slthcore-0.5.9}/slth/urls.py +0 -0
  125. {slthcore-0.5.7 → slthcore-0.5.9}/slth/utils.py +0 -0
  126. {slthcore-0.5.7 → slthcore-0.5.9}/slth/views.py +0 -0
  127. {slthcore-0.5.7 → slthcore-0.5.9}/slthcore.egg-info/SOURCES.txt +0 -0
  128. {slthcore-0.5.7 → slthcore-0.5.9}/slthcore.egg-info/dependency_links.txt +0 -0
  129. {slthcore-0.5.7 → slthcore-0.5.9}/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.5.7
3
+ Version: 0.5.9
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.5.7',
7
+ version='0.5.9',
8
8
  packages=find_packages(),
9
9
  install_requires=install_requires,
10
10
  include_package_data=True,
@@ -206,17 +206,26 @@ class Application(metaclass=ApplicationMetaclass):
206
206
  photo = profile and profile.photo and build_url(request, profile.photo.url) or None
207
207
  else:
208
208
  user = profile = photo = None
209
+
210
+ def contribute(endpoint_list, endpoint_name):
211
+ cls = ENDPOINTS[endpoint_name]
212
+ endpoint = cls().instantiate(request, None)
213
+ if endpoint.check_permission() and endpoint.contribute(entrypoint):
214
+ name = endpoint.get_verbose_name()
215
+ url = build_url(request, cls.get_api_url())
216
+ modal = cls.get_metadata("modal", False)
217
+ icon = cls.get_metadata("icon", None)
218
+ endpoint_list.append(dict(name=name, url=url, modal=modal, icon=icon))
219
+
209
220
  endpoints = {"actions": [], "usermenu": [], "adder": [], "settings": [], "tools": [], "toolbar": []}
210
221
  for entrypoint in endpoints:
211
222
  for endpoint_name in getattr(self.dashboard, entrypoint):
212
- cls = ENDPOINTS[endpoint_name]
213
- endpoint = cls().instantiate(request, None)
214
- if endpoint.check_permission() and endpoint.contribute(entrypoint):
215
- name = endpoint.get_verbose_name()
216
- url = build_url(request, cls.get_api_url())
217
- modal = cls.get_metadata("modal", False)
218
- icon = cls.get_metadata("icon", None)
219
- endpoints[entrypoint].append(dict(name=name, url=url, modal=modal, icon=icon))
223
+ contribute(endpoints[entrypoint], endpoint_name)
224
+
225
+ top = []
226
+ for endpoint_name in self.dashboard.top:
227
+ contribute(top, endpoint_name)
228
+
220
229
  return dict(
221
230
  type="application",
222
231
  icon=icon,
@@ -229,6 +238,7 @@ class Application(metaclass=ApplicationMetaclass):
229
238
  footer=dict(
230
239
  type="footer", version=self.version
231
240
  ),
241
+ top=top,
232
242
  oauth=self.oauth.serialize(),
233
243
  sponsors=self.sponsors
234
244
  )
@@ -364,6 +364,9 @@ class QuerySetEndpoint(Generic[T], ModelEndpoint):
364
364
  modal = False
365
365
 
366
366
  def get(self) -> QuerySet:
367
+ return self.get_queryset()
368
+
369
+ def get_queryset(self):
367
370
  return self.model.objects.contextualize(self.request)
368
371
 
369
372
  def get_verbose_name(self):
@@ -375,6 +378,9 @@ class ListEndpoint(Generic[T], ModelEndpoint):
375
378
  modal = False
376
379
 
377
380
  def get(self) -> QuerySet:
381
+ return self.get_queryset()
382
+
383
+ def get_queryset(self):
378
384
  return self.model.objects.all().contextualize(self.request).actions(*self.get_default_actions())
379
385
 
380
386
  def get_verbose_name(self):
@@ -398,16 +404,13 @@ class AddEndpoint(Generic[T], ModelEndpoint):
398
404
  self.instance = self.model()
399
405
 
400
406
  def get(self) -> FormFactory:
401
- return self.formfactory()
407
+ return self.instance.formfactory()
402
408
 
403
409
  def get_instance(self):
404
410
  return self.instance
405
411
 
406
- def formfactory(self):
407
- return self.instance.formfactory()
408
-
409
412
  def get_verbose_name(self):
410
- return f'Cadastrar {self.model._meta.verbose_name}'
413
+ return getattr(self.Meta, 'verbose_name', f'Cadastrar {self.model._meta.verbose_name}')
411
414
 
412
415
 
413
416
  class ModelInstanceEndpoint(ModelEndpoint):
@@ -417,6 +420,9 @@ class ModelInstanceEndpoint(ModelEndpoint):
417
420
 
418
421
  def get_instance(self):
419
422
  return self.instance
423
+
424
+ def check_instance(self):
425
+ return self.model.objects.all().filter(pk=self.instance.pk).apply_lookups(self.request.user).exists()
420
426
 
421
427
 
422
428
  class InstanceEndpoint(Generic[T], ModelInstanceEndpoint):
@@ -366,7 +366,7 @@ class FormMixin:
366
366
  data.update(scheduler=field.scheduler)
367
367
  elif ftype == "choice" or pick:
368
368
  choiceurl = self._endpoint.base_url if self._endpoint else None
369
- if name in self.request.GET and not choices_field_name:
369
+ if name in self.request.GET and not choices_field_name and f'{name}__autocomplete' not in self.request.GET:
370
370
  data.update(type="hidden", value=self.request.GET[name])
371
371
  else:
372
372
  if choices_field_name == fname or (isinstance(field.choices, ModelChoiceIterator) and not pick):
@@ -156,6 +156,11 @@ class QuerySet(models.QuerySet):
156
156
  self.metadata['lookups'] = {}
157
157
  self.metadata['lookups'][role_name] = lookups
158
158
  return self
159
+
160
+ def nolookup(self):
161
+ if 'lookups' in self.metadata:
162
+ self.metadata['lookups'].clear()
163
+ return self
159
164
 
160
165
  def apply_lookups(self, user):
161
166
  from . import permissions
@@ -411,6 +411,7 @@ class Serializer:
411
411
  action = endpoint.get_api_metadata(self.request, base_url, self.obj.pk)
412
412
  else:
413
413
  action = endpoint.get_api_metadata(self.request, base_url)
414
+ action.update(counter=endpoint.get_queryset().apply_lookups(self.request.user).count())
414
415
  todo.append(action)
415
416
  output = dict(type=self.type, title=self.title if self.show_title else None)
416
417
  if info: