register.py 2.4 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859
  1. __author__ = 'marcos'
  2. from rapid.views import bare_or_main, ListView, ReadView, UpdateView, CreateView, SelectView, DeleteView,\
  3. update_form_class
  4. from rapid import permissions
  5. from rapid.registry import Action, MenuEntry, registry
  6. def _rvw(view_class, action_name):
  7. view_class.action_name = action_name
  8. def vw(model):
  9. return bare_or_main(view_class.as_view(model=model))
  10. return vw
  11. _default_actions = [
  12. (False, Action("list", "", [], _rvw(ListView, 'list'), "listar", "fa-list")),
  13. (False, Action("view", "(?P<pk>[0-9]+)", ['pk'], _rvw(ReadView, 'view'), "ver", "fa-eye")),
  14. (True, Action("edit", "(?P<pk>[0-9]+)", ['pk'], _rvw(UpdateView, 'edit'), "editar", "fa-pencil")),
  15. (True, Action("add", "", [], _rvw(CreateView, 'add'), "adicionar", "fa-plus")),
  16. (False, Action("select", "", [], _rvw(SelectView, 'select'), "selecionar", "fa-hand-o-up",
  17. visibility=Action.Visibility.hidden)),
  18. ]
  19. def model(model, read_set, write_set, actions=None, url_name=None, can_erase=False):
  20. if actions:
  21. actions = [(edt, a) for edt, a in _default_actions if a.name in actions]
  22. else:
  23. actions = _default_actions
  24. ret = []
  25. for edt, a in actions:
  26. if edt:
  27. ret.append(registry.register_action(a, MenuEntry(model, write_set, url_name=url_name)))
  28. else:
  29. ret.append(registry.register_action(a, MenuEntry(model, read_set, url_name=url_name)))
  30. if can_erase:
  31. a = Action("delete", "(?P<pk>[0-9]+)", ['pk'], _rvw(DeleteView, 'delete'), "apagar", "fa-trash-o")
  32. ret.append(registry.register_action(a, MenuEntry(model, write_set, url_name=url_name)))
  33. return [u for u in ret if u]
  34. def instance_form(model, action_name, entry_name, form, permission_set, url_name=None, icon=None, visibility=None):
  35. if not icon:
  36. icon = ''
  37. a = Action(action_name, "(?P<pk>[0-9]+)", ['pk'], _rvw(update_form_class(form), action_name),
  38. entry_name, icon, visibility)
  39. u = registry.register_action(a, MenuEntry(model, permission_set, url_name=url_name))
  40. return [u] if u else []
  41. def select(model, visible_fields, permission_set, url_name=None):
  42. class Vw(SelectView):
  43. fields = visible_fields
  44. a = Action("select", "", [], _rvw(Vw, 'select'), "selecionar", "fa-hand-o-up",
  45. visibility=Action.Visibility.hidden)
  46. u = registry.register_action(a, MenuEntry(model, permission_set, url_name=url_name))
  47. return [u] if u else []