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.
- {slthcore-0.5.7/slthcore.egg-info → slthcore-0.5.9}/PKG-INFO +1 -1
- {slthcore-0.5.7 → slthcore-0.5.9}/setup.py +1 -1
- {slthcore-0.5.7 → slthcore-0.5.9}/slth/application.py +18 -8
- {slthcore-0.5.7 → slthcore-0.5.9}/slth/endpoints/__init__.py +11 -5
- {slthcore-0.5.7 → slthcore-0.5.9}/slth/forms.py +1 -1
- {slthcore-0.5.7 → slthcore-0.5.9}/slth/queryset.py +5 -0
- {slthcore-0.5.7 → slthcore-0.5.9}/slth/serializer.py +1 -0
- slthcore-0.5.9/slth/static/js/slth.min.js +270 -0
- {slthcore-0.5.7 → slthcore-0.5.9/slthcore.egg-info}/PKG-INFO +1 -1
- slthcore-0.5.7/slth/static/js/slth.min.js +0 -270
- {slthcore-0.5.7 → slthcore-0.5.9}/MANIFEST.in +0 -0
- {slthcore-0.5.7 → slthcore-0.5.9}/setup.cfg +0 -0
- {slthcore-0.5.7 → slthcore-0.5.9}/slth/__init__.py +0 -0
- {slthcore-0.5.7 → slthcore-0.5.9}/slth/apps.py +0 -0
- {slthcore-0.5.7 → slthcore-0.5.9}/slth/cmd/configure/__main__.py +0 -0
- {slthcore-0.5.7 → slthcore-0.5.9}/slth/cmd/init/__main__.py +0 -0
- {slthcore-0.5.7 → slthcore-0.5.9}/slth/cmd/init/__pycache__/__main__.cpython-312.pyc +0 -0
- {slthcore-0.5.7 → slthcore-0.5.9}/slth/cmd/init/boilerplate/.DS_Store +0 -0
- {slthcore-0.5.7 → slthcore-0.5.9}/slth/cmd/init/boilerplate/.gitignore +0 -0
- {slthcore-0.5.7 → slthcore-0.5.9}/slth/cmd/init/boilerplate/backend/api/__init__.py +0 -0
- {slthcore-0.5.7 → slthcore-0.5.9}/slth/cmd/init/boilerplate/backend/api/asgi.py +0 -0
- {slthcore-0.5.7 → slthcore-0.5.9}/slth/cmd/init/boilerplate/backend/api/endpoints/__init__.py +0 -0
- {slthcore-0.5.7 → slthcore-0.5.9}/slth/cmd/init/boilerplate/backend/api/models.py +0 -0
- {slthcore-0.5.7 → slthcore-0.5.9}/slth/cmd/init/boilerplate/backend/api/settings.py +0 -0
- {slthcore-0.5.7 → slthcore-0.5.9}/slth/cmd/init/boilerplate/backend/api/tests.py +0 -0
- {slthcore-0.5.7 → slthcore-0.5.9}/slth/cmd/init/boilerplate/backend/api/urls.py +0 -0
- {slthcore-0.5.7 → slthcore-0.5.9}/slth/cmd/init/boilerplate/backend/api/wsgi.py +0 -0
- {slthcore-0.5.7 → slthcore-0.5.9}/slth/cmd/init/boilerplate/backend/entrypoint.sh +0 -0
- {slthcore-0.5.7 → slthcore-0.5.9}/slth/cmd/init/boilerplate/backend/manage.py +0 -0
- {slthcore-0.5.7 → slthcore-0.5.9}/slth/cmd/init/boilerplate/backend/requirements.txt +0 -0
- {slthcore-0.5.7 → slthcore-0.5.9}/slth/cmd/init/boilerplate/base.env +0 -0
- {slthcore-0.5.7 → slthcore-0.5.9}/slth/cmd/init/boilerplate/docker-compose.yml +0 -0
- {slthcore-0.5.7 → slthcore-0.5.9}/slth/cmd/init/boilerplate/frontend/package.json +0 -0
- {slthcore-0.5.7 → slthcore-0.5.9}/slth/cmd/init/boilerplate/frontend/src/main.jsx +0 -0
- {slthcore-0.5.7 → slthcore-0.5.9}/slth/cmd/init/boilerplate/frontend/vite.config.js +0 -0
- {slthcore-0.5.7 → slthcore-0.5.9}/slth/cmd/init/boilerplate/local.env +0 -0
- {slthcore-0.5.7 → slthcore-0.5.9}/slth/cmd/init/boilerplate/run.sh +0 -0
- {slthcore-0.5.7 → slthcore-0.5.9}/slth/cmd/init/boilerplate/selenium/run.sh +0 -0
- {slthcore-0.5.7 → slthcore-0.5.9}/slth/cmd/init/boilerplate/test.sh +0 -0
- {slthcore-0.5.7 → slthcore-0.5.9}/slth/components.py +0 -0
- {slthcore-0.5.7 → slthcore-0.5.9}/slth/db/__init__.py +0 -0
- {slthcore-0.5.7 → slthcore-0.5.9}/slth/db/generic.py +0 -0
- {slthcore-0.5.7 → slthcore-0.5.9}/slth/db/models.py +0 -0
- {slthcore-0.5.7 → slthcore-0.5.9}/slth/endpoints/auth.py +0 -0
- {slthcore-0.5.7 → slthcore-0.5.9}/slth/endpoints/deletion.py +0 -0
- {slthcore-0.5.7 → slthcore-0.5.9}/slth/endpoints/dev.py +0 -0
- {slthcore-0.5.7 → slthcore-0.5.9}/slth/endpoints/email.py +0 -0
- {slthcore-0.5.7 → slthcore-0.5.9}/slth/endpoints/job.py +0 -0
- {slthcore-0.5.7 → slthcore-0.5.9}/slth/endpoints/log.py +0 -0
- {slthcore-0.5.7 → slthcore-0.5.9}/slth/endpoints/profile.py +0 -0
- {slthcore-0.5.7 → slthcore-0.5.9}/slth/endpoints/pushsubscription.py +0 -0
- {slthcore-0.5.7 → slthcore-0.5.9}/slth/endpoints/report.py +0 -0
- {slthcore-0.5.7 → slthcore-0.5.9}/slth/endpoints/role.py +0 -0
- {slthcore-0.5.7 → slthcore-0.5.9}/slth/endpoints/settings.py +0 -0
- {slthcore-0.5.7 → slthcore-0.5.9}/slth/endpoints/task.py +0 -0
- {slthcore-0.5.7 → slthcore-0.5.9}/slth/endpoints/timezone.py +0 -0
- {slthcore-0.5.7 → slthcore-0.5.9}/slth/endpoints/user.py +0 -0
- {slthcore-0.5.7 → slthcore-0.5.9}/slth/endpoints/whatsappnotification.py +0 -0
- {slthcore-0.5.7 → slthcore-0.5.9}/slth/exceptions.py +0 -0
- {slthcore-0.5.7 → slthcore-0.5.9}/slth/factory.py +0 -0
- {slthcore-0.5.7 → slthcore-0.5.9}/slth/geo/__init__.py +0 -0
- {slthcore-0.5.7 → slthcore-0.5.9}/slth/integrations/__init__.py +0 -0
- {slthcore-0.5.7 → slthcore-0.5.9}/slth/integrations/deepseek/__init__.py +0 -0
- {slthcore-0.5.7 → slthcore-0.5.9}/slth/integrations/google/__init__.py +0 -0
- {slthcore-0.5.7 → slthcore-0.5.9}/slth/integrations/google/gemini.py +0 -0
- {slthcore-0.5.7 → slthcore-0.5.9}/slth/integrations/google/places.py +0 -0
- {slthcore-0.5.7 → slthcore-0.5.9}/slth/integrations/google/vision.py +0 -0
- {slthcore-0.5.7 → slthcore-0.5.9}/slth/integrations/justvoip/__init__.py +0 -0
- {slthcore-0.5.7 → slthcore-0.5.9}/slth/integrations/mercadopago/__init__.py +0 -0
- {slthcore-0.5.7 → slthcore-0.5.9}/slth/integrations/openai/__init__.py +0 -0
- {slthcore-0.5.7 → slthcore-0.5.9}/slth/integrations/openai/chatgpt.py +0 -0
- {slthcore-0.5.7 → slthcore-0.5.9}/slth/integrations/viacep/__init__.py +0 -0
- {slthcore-0.5.7 → slthcore-0.5.9}/slth/integrations/whatsapp/__init__.py +0 -0
- {slthcore-0.5.7 → slthcore-0.5.9}/slth/management/__init__.py +0 -0
- {slthcore-0.5.7 → slthcore-0.5.9}/slth/management/commands/__init__.py +0 -0
- {slthcore-0.5.7 → slthcore-0.5.9}/slth/management/commands/api.py +0 -0
- {slthcore-0.5.7 → slthcore-0.5.9}/slth/management/commands/integration_test.py +0 -0
- {slthcore-0.5.7 → slthcore-0.5.9}/slth/management/commands/sync.py +0 -0
- {slthcore-0.5.7 → slthcore-0.5.9}/slth/management/commands/worker.py +0 -0
- {slthcore-0.5.7 → slthcore-0.5.9}/slth/middleware/__init__.py +0 -0
- {slthcore-0.5.7 → slthcore-0.5.9}/slth/middleware/timezone.py +0 -0
- {slthcore-0.5.7 → slthcore-0.5.9}/slth/migrations/0001_initial.py +0 -0
- {slthcore-0.5.7 → slthcore-0.5.9}/slth/migrations/0002_email_role_pushsubscription_error.py +0 -0
- {slthcore-0.5.7 → slthcore-0.5.9}/slth/migrations/0003_rename_photo_profile_alter_profile_options.py +0 -0
- {slthcore-0.5.7 → slthcore-0.5.9}/slth/migrations/0004_alter_profile_photo.py +0 -0
- {slthcore-0.5.7 → slthcore-0.5.9}/slth/migrations/0005_alter_profile_photo.py +0 -0
- {slthcore-0.5.7 → slthcore-0.5.9}/slth/migrations/0006_user.py +0 -0
- {slthcore-0.5.7 → slthcore-0.5.9}/slth/migrations/0007_deletion_log.py +0 -0
- {slthcore-0.5.7 → slthcore-0.5.9}/slth/migrations/0008_alter_deletion_datetime_alter_log_datetime.py +0 -0
- {slthcore-0.5.7 → slthcore-0.5.9}/slth/migrations/0009_remove_email_from_email_email_action_email_attempt_and_more.py +0 -0
- {slthcore-0.5.7 → slthcore-0.5.9}/slth/migrations/0010_email_key_alter_email_action_alter_email_attempt_and_more.py +0 -0
- {slthcore-0.5.7 → slthcore-0.5.9}/slth/migrations/0011_usertimezone.py +0 -0
- {slthcore-0.5.7 → slthcore-0.5.9}/slth/migrations/0012_timezone_remove_usertimezone_key_and_more.py +0 -0
- {slthcore-0.5.7 → slthcore-0.5.9}/slth/migrations/0013_whatsappnotification.py +0 -0
- {slthcore-0.5.7 → slthcore-0.5.9}/slth/migrations/0014_settings.py +0 -0
- {slthcore-0.5.7 → slthcore-0.5.9}/slth/migrations/0015_auto_20250412_1126.py +0 -0
- {slthcore-0.5.7 → slthcore-0.5.9}/slth/migrations/__init__.py +0 -0
- {slthcore-0.5.7 → slthcore-0.5.9}/slth/models.py +0 -0
- {slthcore-0.5.7 → slthcore-0.5.9}/slth/notifications.py +0 -0
- {slthcore-0.5.7 → slthcore-0.5.9}/slth/oauth.py +0 -0
- {slthcore-0.5.7 → slthcore-0.5.9}/slth/pdf/__init__.py +0 -0
- {slthcore-0.5.7 → slthcore-0.5.9}/slth/pdf/tests.py +0 -0
- {slthcore-0.5.7 → slthcore-0.5.9}/slth/permissions.py +0 -0
- {slthcore-0.5.7 → slthcore-0.5.9}/slth/printer.py +0 -0
- {slthcore-0.5.7 → slthcore-0.5.9}/slth/roles.py +0 -0
- {slthcore-0.5.7 → slthcore-0.5.9}/slth/selenium/__init__.py +0 -0
- {slthcore-0.5.7 → slthcore-0.5.9}/slth/selenium/browser.py +0 -0
- {slthcore-0.5.7 → slthcore-0.5.9}/slth/static/.DS_Store +0 -0
- {slthcore-0.5.7 → slthcore-0.5.9}/slth/static/css/.DS_Store +0 -0
- {slthcore-0.5.7 → slthcore-0.5.9}/slth/static/css/slth.css +0 -0
- {slthcore-0.5.7 → slthcore-0.5.9}/slth/static/images/placeholder.png +0 -0
- {slthcore-0.5.7 → slthcore-0.5.9}/slth/static/js/index.min.js +0 -0
- {slthcore-0.5.7 → slthcore-0.5.9}/slth/static/js/react.min.js +0 -0
- {slthcore-0.5.7 → slthcore-0.5.9}/slth/statistics.py +0 -0
- {slthcore-0.5.7 → slthcore-0.5.9}/slth/tasks.py +0 -0
- {slthcore-0.5.7 → slthcore-0.5.9}/slth/templates/email.html +0 -0
- {slthcore-0.5.7 → slthcore-0.5.9}/slth/templates/index.html +0 -0
- {slthcore-0.5.7 → slthcore-0.5.9}/slth/templates/report.html +0 -0
- {slthcore-0.5.7 → slthcore-0.5.9}/slth/templates/service-worker.js +0 -0
- {slthcore-0.5.7 → slthcore-0.5.9}/slth/templates/signature.html +0 -0
- {slthcore-0.5.7 → slthcore-0.5.9}/slth/tests.py +0 -0
- {slthcore-0.5.7 → slthcore-0.5.9}/slth/threadlocal.py +0 -0
- {slthcore-0.5.7 → slthcore-0.5.9}/slth/timezone.py +0 -0
- {slthcore-0.5.7 → slthcore-0.5.9}/slth/urls.py +0 -0
- {slthcore-0.5.7 → slthcore-0.5.9}/slth/utils.py +0 -0
- {slthcore-0.5.7 → slthcore-0.5.9}/slth/views.py +0 -0
- {slthcore-0.5.7 → slthcore-0.5.9}/slthcore.egg-info/SOURCES.txt +0 -0
- {slthcore-0.5.7 → slthcore-0.5.9}/slthcore.egg-info/dependency_links.txt +0 -0
- {slthcore-0.5.7 → slthcore-0.5.9}/slthcore.egg-info/top_level.txt +0 -0
|
@@ -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
|
-
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
|
|
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:
|