Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
15 changes: 9 additions & 6 deletions sloth/core/base.py
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
from django.apps import apps
from django.core.exceptions import FieldDoesNotExist
from django.template.loader import render_to_string
from sloth.utils import pretty

from sloth.actions import Action
from sloth.core.valueset import ValueSet
Expand Down Expand Up @@ -304,20 +305,23 @@ def get_api_paths(cls, request):
url = '/api/{}/{}/'.format(cls.metaclass().app_label, cls.metaclass().model_name)

info = dict()
info[url] = [('get', 'List', 'List objects', {'type': 'string'}, None)]
info[url] = [
('get', 'List', 'List objects', {'type': 'string'}, None),
('post', 'Add', 'Add object', {'type': 'string'}, cls.add_form_cls()),
('put', 'Edit', 'Edit object', {'type': 'string'}, cls.edit_form_cls()),
]
info['{}{{id}}/'.format(url)] = [
('get', 'View', 'View object', instance.view().get_api_schema(), None),
('post', 'Add', 'Add object', {'type': 'string'}, cls.add_form_cls()),
('put', 'Edit', 'Edit object', {'type': 'string'}, None),
]
for name, attr in cls.__dict__.items():
if hasattr(attr, 'decorated'):
if name.startswith('get_') and not hasattr(attr, 'decorated'):
try:
v = getattr(instance, name)()
except BaseException as e:
continue
verbose_name = pretty(name)
info['{}{{id}}/{}/'.format(url, name)] = [
('get', attr.verbose_name, 'View {}'.format(attr.verbose_name), {'type': 'string'}, None),
('get', verbose_name, 'View {}'.format(verbose_name), {'type': 'string'}, None),
]
if isinstance(v, ValueSet):
for action in v.metadata['actions']:
Expand All @@ -330,7 +334,6 @@ def get_api_paths(cls, request):
info['{}{{id}}/{}/{{ids}}/{}/'.format(url, name, action)] = [
('post', action, 'Execute {}'.format(action), {'type': 'string'}, forms_cls),
]

paths = {}
for url, data in info.items():
paths[url] = {}
Expand Down
3 changes: 3 additions & 0 deletions sloth/decorators/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -3,20 +3,23 @@

def verbose_name(name):
def decorate(func):
setattr(func, 'decorated', True)
setattr(func, '__verbose_name__', name)
return func
return decorate


def template(name):
def decorate(func):
setattr(func, 'decorated', True)
setattr(func, '__template__', name)
return func
return decorate


def role(name, username, email=None, password=None, **scopes):
def decorate(cls):
setattr(cls, 'decorated', True)
if not hasattr(cls, '__roles__'):
setattr(cls, '__roles__', [])
roles = getattr(cls, '__roles__')
Expand Down