slthcore 0.5.6__tar.gz → 0.5.8__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.6/slthcore.egg-info → slthcore-0.5.8}/PKG-INFO +1 -1
- {slthcore-0.5.6 → slthcore-0.5.8}/setup.py +1 -1
- {slthcore-0.5.6 → slthcore-0.5.8}/slth/application.py +20 -9
- {slthcore-0.5.6 → slthcore-0.5.8}/slth/endpoints/__init__.py +10 -1
- slthcore-0.5.8/slth/endpoints/role.py +18 -0
- {slthcore-0.5.6 → slthcore-0.5.8}/slth/queryset.py +5 -0
- {slthcore-0.5.6 → slthcore-0.5.8}/slth/serializer.py +1 -0
- slthcore-0.5.8/slth/static/js/slth.min.js +270 -0
- {slthcore-0.5.6 → slthcore-0.5.8/slthcore.egg-info}/PKG-INFO +1 -1
- slthcore-0.5.6/slth/endpoints/role.py +0 -6
- slthcore-0.5.6/slth/static/js/slth.min.js +0 -270
- {slthcore-0.5.6 → slthcore-0.5.8}/MANIFEST.in +0 -0
- {slthcore-0.5.6 → slthcore-0.5.8}/setup.cfg +0 -0
- {slthcore-0.5.6 → slthcore-0.5.8}/slth/__init__.py +0 -0
- {slthcore-0.5.6 → slthcore-0.5.8}/slth/apps.py +0 -0
- {slthcore-0.5.6 → slthcore-0.5.8}/slth/cmd/configure/__main__.py +0 -0
- {slthcore-0.5.6 → slthcore-0.5.8}/slth/cmd/init/__main__.py +0 -0
- {slthcore-0.5.6 → slthcore-0.5.8}/slth/cmd/init/__pycache__/__main__.cpython-312.pyc +0 -0
- {slthcore-0.5.6 → slthcore-0.5.8}/slth/cmd/init/boilerplate/.DS_Store +0 -0
- {slthcore-0.5.6 → slthcore-0.5.8}/slth/cmd/init/boilerplate/.gitignore +0 -0
- {slthcore-0.5.6 → slthcore-0.5.8}/slth/cmd/init/boilerplate/backend/api/__init__.py +0 -0
- {slthcore-0.5.6 → slthcore-0.5.8}/slth/cmd/init/boilerplate/backend/api/asgi.py +0 -0
- {slthcore-0.5.6 → slthcore-0.5.8}/slth/cmd/init/boilerplate/backend/api/endpoints/__init__.py +0 -0
- {slthcore-0.5.6 → slthcore-0.5.8}/slth/cmd/init/boilerplate/backend/api/models.py +0 -0
- {slthcore-0.5.6 → slthcore-0.5.8}/slth/cmd/init/boilerplate/backend/api/settings.py +0 -0
- {slthcore-0.5.6 → slthcore-0.5.8}/slth/cmd/init/boilerplate/backend/api/tests.py +0 -0
- {slthcore-0.5.6 → slthcore-0.5.8}/slth/cmd/init/boilerplate/backend/api/urls.py +0 -0
- {slthcore-0.5.6 → slthcore-0.5.8}/slth/cmd/init/boilerplate/backend/api/wsgi.py +0 -0
- {slthcore-0.5.6 → slthcore-0.5.8}/slth/cmd/init/boilerplate/backend/entrypoint.sh +0 -0
- {slthcore-0.5.6 → slthcore-0.5.8}/slth/cmd/init/boilerplate/backend/manage.py +0 -0
- {slthcore-0.5.6 → slthcore-0.5.8}/slth/cmd/init/boilerplate/backend/requirements.txt +0 -0
- {slthcore-0.5.6 → slthcore-0.5.8}/slth/cmd/init/boilerplate/base.env +0 -0
- {slthcore-0.5.6 → slthcore-0.5.8}/slth/cmd/init/boilerplate/docker-compose.yml +0 -0
- {slthcore-0.5.6 → slthcore-0.5.8}/slth/cmd/init/boilerplate/frontend/package.json +0 -0
- {slthcore-0.5.6 → slthcore-0.5.8}/slth/cmd/init/boilerplate/frontend/src/main.jsx +0 -0
- {slthcore-0.5.6 → slthcore-0.5.8}/slth/cmd/init/boilerplate/frontend/vite.config.js +0 -0
- {slthcore-0.5.6 → slthcore-0.5.8}/slth/cmd/init/boilerplate/local.env +0 -0
- {slthcore-0.5.6 → slthcore-0.5.8}/slth/cmd/init/boilerplate/run.sh +0 -0
- {slthcore-0.5.6 → slthcore-0.5.8}/slth/cmd/init/boilerplate/selenium/run.sh +0 -0
- {slthcore-0.5.6 → slthcore-0.5.8}/slth/cmd/init/boilerplate/test.sh +0 -0
- {slthcore-0.5.6 → slthcore-0.5.8}/slth/components.py +0 -0
- {slthcore-0.5.6 → slthcore-0.5.8}/slth/db/__init__.py +0 -0
- {slthcore-0.5.6 → slthcore-0.5.8}/slth/db/generic.py +0 -0
- {slthcore-0.5.6 → slthcore-0.5.8}/slth/db/models.py +0 -0
- {slthcore-0.5.6 → slthcore-0.5.8}/slth/endpoints/auth.py +0 -0
- {slthcore-0.5.6 → slthcore-0.5.8}/slth/endpoints/deletion.py +0 -0
- {slthcore-0.5.6 → slthcore-0.5.8}/slth/endpoints/dev.py +0 -0
- {slthcore-0.5.6 → slthcore-0.5.8}/slth/endpoints/email.py +0 -0
- {slthcore-0.5.6 → slthcore-0.5.8}/slth/endpoints/job.py +0 -0
- {slthcore-0.5.6 → slthcore-0.5.8}/slth/endpoints/log.py +0 -0
- {slthcore-0.5.6 → slthcore-0.5.8}/slth/endpoints/profile.py +0 -0
- {slthcore-0.5.6 → slthcore-0.5.8}/slth/endpoints/pushsubscription.py +0 -0
- {slthcore-0.5.6 → slthcore-0.5.8}/slth/endpoints/report.py +0 -0
- {slthcore-0.5.6 → slthcore-0.5.8}/slth/endpoints/settings.py +0 -0
- {slthcore-0.5.6 → slthcore-0.5.8}/slth/endpoints/task.py +0 -0
- {slthcore-0.5.6 → slthcore-0.5.8}/slth/endpoints/timezone.py +0 -0
- {slthcore-0.5.6 → slthcore-0.5.8}/slth/endpoints/user.py +0 -0
- {slthcore-0.5.6 → slthcore-0.5.8}/slth/endpoints/whatsappnotification.py +0 -0
- {slthcore-0.5.6 → slthcore-0.5.8}/slth/exceptions.py +0 -0
- {slthcore-0.5.6 → slthcore-0.5.8}/slth/factory.py +0 -0
- {slthcore-0.5.6 → slthcore-0.5.8}/slth/forms.py +0 -0
- {slthcore-0.5.6 → slthcore-0.5.8}/slth/geo/__init__.py +0 -0
- {slthcore-0.5.6 → slthcore-0.5.8}/slth/integrations/__init__.py +0 -0
- {slthcore-0.5.6 → slthcore-0.5.8}/slth/integrations/deepseek/__init__.py +0 -0
- {slthcore-0.5.6 → slthcore-0.5.8}/slth/integrations/google/__init__.py +0 -0
- {slthcore-0.5.6 → slthcore-0.5.8}/slth/integrations/google/gemini.py +0 -0
- {slthcore-0.5.6 → slthcore-0.5.8}/slth/integrations/google/places.py +0 -0
- {slthcore-0.5.6 → slthcore-0.5.8}/slth/integrations/google/vision.py +0 -0
- {slthcore-0.5.6 → slthcore-0.5.8}/slth/integrations/justvoip/__init__.py +0 -0
- {slthcore-0.5.6 → slthcore-0.5.8}/slth/integrations/mercadopago/__init__.py +0 -0
- {slthcore-0.5.6 → slthcore-0.5.8}/slth/integrations/openai/__init__.py +0 -0
- {slthcore-0.5.6 → slthcore-0.5.8}/slth/integrations/openai/chatgpt.py +0 -0
- {slthcore-0.5.6 → slthcore-0.5.8}/slth/integrations/viacep/__init__.py +0 -0
- {slthcore-0.5.6 → slthcore-0.5.8}/slth/integrations/whatsapp/__init__.py +0 -0
- {slthcore-0.5.6 → slthcore-0.5.8}/slth/management/__init__.py +0 -0
- {slthcore-0.5.6 → slthcore-0.5.8}/slth/management/commands/__init__.py +0 -0
- {slthcore-0.5.6 → slthcore-0.5.8}/slth/management/commands/api.py +0 -0
- {slthcore-0.5.6 → slthcore-0.5.8}/slth/management/commands/integration_test.py +0 -0
- {slthcore-0.5.6 → slthcore-0.5.8}/slth/management/commands/sync.py +0 -0
- {slthcore-0.5.6 → slthcore-0.5.8}/slth/management/commands/worker.py +0 -0
- {slthcore-0.5.6 → slthcore-0.5.8}/slth/middleware/__init__.py +0 -0
- {slthcore-0.5.6 → slthcore-0.5.8}/slth/middleware/timezone.py +0 -0
- {slthcore-0.5.6 → slthcore-0.5.8}/slth/migrations/0001_initial.py +0 -0
- {slthcore-0.5.6 → slthcore-0.5.8}/slth/migrations/0002_email_role_pushsubscription_error.py +0 -0
- {slthcore-0.5.6 → slthcore-0.5.8}/slth/migrations/0003_rename_photo_profile_alter_profile_options.py +0 -0
- {slthcore-0.5.6 → slthcore-0.5.8}/slth/migrations/0004_alter_profile_photo.py +0 -0
- {slthcore-0.5.6 → slthcore-0.5.8}/slth/migrations/0005_alter_profile_photo.py +0 -0
- {slthcore-0.5.6 → slthcore-0.5.8}/slth/migrations/0006_user.py +0 -0
- {slthcore-0.5.6 → slthcore-0.5.8}/slth/migrations/0007_deletion_log.py +0 -0
- {slthcore-0.5.6 → slthcore-0.5.8}/slth/migrations/0008_alter_deletion_datetime_alter_log_datetime.py +0 -0
- {slthcore-0.5.6 → slthcore-0.5.8}/slth/migrations/0009_remove_email_from_email_email_action_email_attempt_and_more.py +0 -0
- {slthcore-0.5.6 → slthcore-0.5.8}/slth/migrations/0010_email_key_alter_email_action_alter_email_attempt_and_more.py +0 -0
- {slthcore-0.5.6 → slthcore-0.5.8}/slth/migrations/0011_usertimezone.py +0 -0
- {slthcore-0.5.6 → slthcore-0.5.8}/slth/migrations/0012_timezone_remove_usertimezone_key_and_more.py +0 -0
- {slthcore-0.5.6 → slthcore-0.5.8}/slth/migrations/0013_whatsappnotification.py +0 -0
- {slthcore-0.5.6 → slthcore-0.5.8}/slth/migrations/0014_settings.py +0 -0
- {slthcore-0.5.6 → slthcore-0.5.8}/slth/migrations/0015_auto_20250412_1126.py +0 -0
- {slthcore-0.5.6 → slthcore-0.5.8}/slth/migrations/__init__.py +0 -0
- {slthcore-0.5.6 → slthcore-0.5.8}/slth/models.py +0 -0
- {slthcore-0.5.6 → slthcore-0.5.8}/slth/notifications.py +0 -0
- {slthcore-0.5.6 → slthcore-0.5.8}/slth/oauth.py +0 -0
- {slthcore-0.5.6 → slthcore-0.5.8}/slth/pdf/__init__.py +0 -0
- {slthcore-0.5.6 → slthcore-0.5.8}/slth/pdf/tests.py +0 -0
- {slthcore-0.5.6 → slthcore-0.5.8}/slth/permissions.py +0 -0
- {slthcore-0.5.6 → slthcore-0.5.8}/slth/printer.py +0 -0
- {slthcore-0.5.6 → slthcore-0.5.8}/slth/roles.py +0 -0
- {slthcore-0.5.6 → slthcore-0.5.8}/slth/selenium/__init__.py +0 -0
- {slthcore-0.5.6 → slthcore-0.5.8}/slth/selenium/browser.py +0 -0
- {slthcore-0.5.6 → slthcore-0.5.8}/slth/static/.DS_Store +0 -0
- {slthcore-0.5.6 → slthcore-0.5.8}/slth/static/css/.DS_Store +0 -0
- {slthcore-0.5.6 → slthcore-0.5.8}/slth/static/css/slth.css +0 -0
- {slthcore-0.5.6 → slthcore-0.5.8}/slth/static/images/placeholder.png +0 -0
- {slthcore-0.5.6 → slthcore-0.5.8}/slth/static/js/index.min.js +0 -0
- {slthcore-0.5.6 → slthcore-0.5.8}/slth/static/js/react.min.js +0 -0
- {slthcore-0.5.6 → slthcore-0.5.8}/slth/statistics.py +0 -0
- {slthcore-0.5.6 → slthcore-0.5.8}/slth/tasks.py +0 -0
- {slthcore-0.5.6 → slthcore-0.5.8}/slth/templates/email.html +0 -0
- {slthcore-0.5.6 → slthcore-0.5.8}/slth/templates/index.html +0 -0
- {slthcore-0.5.6 → slthcore-0.5.8}/slth/templates/report.html +0 -0
- {slthcore-0.5.6 → slthcore-0.5.8}/slth/templates/service-worker.js +0 -0
- {slthcore-0.5.6 → slthcore-0.5.8}/slth/templates/signature.html +0 -0
- {slthcore-0.5.6 → slthcore-0.5.8}/slth/tests.py +0 -0
- {slthcore-0.5.6 → slthcore-0.5.8}/slth/threadlocal.py +0 -0
- {slthcore-0.5.6 → slthcore-0.5.8}/slth/timezone.py +0 -0
- {slthcore-0.5.6 → slthcore-0.5.8}/slth/urls.py +0 -0
- {slthcore-0.5.6 → slthcore-0.5.8}/slth/utils.py +0 -0
- {slthcore-0.5.6 → slthcore-0.5.8}/slth/views.py +0 -0
- {slthcore-0.5.6 → slthcore-0.5.8}/slthcore.egg-info/SOURCES.txt +0 -0
- {slthcore-0.5.6 → slthcore-0.5.8}/slthcore.egg-info/dependency_links.txt +0 -0
- {slthcore-0.5.6 → slthcore-0.5.8}/slthcore.egg-info/top_level.txt +0 -0
|
@@ -191,6 +191,7 @@ class Application(metaclass=ApplicationMetaclass):
|
|
|
191
191
|
self.menu:Menu = Menu()
|
|
192
192
|
self.dashboard = Dashboard()
|
|
193
193
|
self.theme:Theme = Theme()
|
|
194
|
+
self.sponsors:List = List()
|
|
194
195
|
|
|
195
196
|
def load(self):
|
|
196
197
|
pass
|
|
@@ -205,17 +206,26 @@ class Application(metaclass=ApplicationMetaclass):
|
|
|
205
206
|
photo = profile and profile.photo and build_url(request, profile.photo.url) or None
|
|
206
207
|
else:
|
|
207
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
|
+
|
|
208
220
|
endpoints = {"actions": [], "usermenu": [], "adder": [], "settings": [], "tools": [], "toolbar": []}
|
|
209
221
|
for entrypoint in endpoints:
|
|
210
222
|
for endpoint_name in getattr(self.dashboard, entrypoint):
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
icon = cls.get_metadata("icon", None)
|
|
218
|
-
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
|
+
|
|
219
229
|
return dict(
|
|
220
230
|
type="application",
|
|
221
231
|
icon=icon,
|
|
@@ -228,8 +238,9 @@ class Application(metaclass=ApplicationMetaclass):
|
|
|
228
238
|
footer=dict(
|
|
229
239
|
type="footer", version=self.version
|
|
230
240
|
),
|
|
241
|
+
top=top,
|
|
231
242
|
oauth=self.oauth.serialize(),
|
|
232
|
-
sponsors=
|
|
243
|
+
sponsors=self.sponsors
|
|
233
244
|
)
|
|
234
245
|
|
|
235
246
|
@staticmethod
|
|
@@ -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):
|
|
@@ -407,7 +413,7 @@ class AddEndpoint(Generic[T], ModelEndpoint):
|
|
|
407
413
|
return self.instance.formfactory()
|
|
408
414
|
|
|
409
415
|
def get_verbose_name(self):
|
|
410
|
-
return f'Cadastrar {self.model._meta.verbose_name}'
|
|
416
|
+
return getattr(self.Meta, 'verbose_name', f'Cadastrar {self.model._meta.verbose_name}')
|
|
411
417
|
|
|
412
418
|
|
|
413
419
|
class ModelInstanceEndpoint(ModelEndpoint):
|
|
@@ -417,6 +423,9 @@ class ModelInstanceEndpoint(ModelEndpoint):
|
|
|
417
423
|
|
|
418
424
|
def get_instance(self):
|
|
419
425
|
return self.instance
|
|
426
|
+
|
|
427
|
+
def check_instance(self):
|
|
428
|
+
return self.model.objects.all().filter(pk=self.instance.pk).apply_lookups(self.request.user).exists()
|
|
420
429
|
|
|
421
430
|
|
|
422
431
|
class InstanceEndpoint(Generic[T], ModelInstanceEndpoint):
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
from . import ListEndpoint, DeleteEndpoint
|
|
2
|
+
from ..models import Role
|
|
3
|
+
|
|
4
|
+
|
|
5
|
+
class Roles(ListEndpoint[Role]):
|
|
6
|
+
def get(self):
|
|
7
|
+
return super().get().actions('role.delete')
|
|
8
|
+
|
|
9
|
+
|
|
10
|
+
class Delete(DeleteEndpoint[Role]):
|
|
11
|
+
class Meta:
|
|
12
|
+
icon = 'x'
|
|
13
|
+
verbose_name = 'Excluir Papel'
|
|
14
|
+
|
|
15
|
+
def get(self):
|
|
16
|
+
return (
|
|
17
|
+
super().get()
|
|
18
|
+
)
|
|
@@ -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:
|