userworkspace.py 2.9KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495
  1. # -*- coding: utf-8 -*-
  2. __author__ = 'damien'
  3. import os
  4. from datetime import datetime
  5. from hashlib import sha256
  6. from sqlalchemy import Table, ForeignKey, Column
  7. from sqlalchemy.types import Unicode, Integer, DateTime, Text
  8. from sqlalchemy.orm import relation, synonym
  9. from sqlalchemy.orm import joinedload_all
  10. import sqlalchemy.orm as sqlao
  11. import sqlalchemy as sqla
  12. import tg
  13. from tracim.model.auth import User
  14. from tracim.model.data import Workspace
  15. from tracim.model.data import UserRoleInWorkspace
  16. from tracim.model.data import RoleType
  17. from tracim.model import auth as pbma
  18. from tracim.model import DBSession
  19. from tracim.model.serializers import DictLikeClass
  20. class RoleApi(object):
  21. ALL_ROLE_VALUES = UserRoleInWorkspace.get_all_role_values()
  22. def __init__(self, current_user: User):
  23. self._user = current_user
  24. def create_role(self) -> UserRoleInWorkspace:
  25. role = UserRoleInWorkspace()
  26. return role
  27. def _get_one_rsc(self, user_id, workspace_id):
  28. """
  29. :param user_id:
  30. :param workspace_id:
  31. :return: a Query object, filtered query but without fetching the object.
  32. """
  33. return DBSession.query(UserRoleInWorkspace).\
  34. filter(UserRoleInWorkspace.workspace_id==workspace_id).\
  35. filter(UserRoleInWorkspace.user_id==user_id)
  36. def get_one(self, user_id, workspace_id):
  37. return self._get_one_rsc(user_id, workspace_id).one()
  38. def create_one(self, user: User, workspace: Workspace, role_level: int, flush: bool=True) -> UserRoleInWorkspace:
  39. role = self.create_role()
  40. role.user_id = user.user_id
  41. role.workspace = workspace
  42. role.role = role_level
  43. if flush:
  44. DBSession.flush()
  45. return role
  46. def delete_one(self, user_id, workspace_id, flush=True):
  47. self._get_one_rsc(user_id, workspace_id).delete()
  48. if flush:
  49. DBSession.flush()
  50. def _get_all_for_user(self, user_id):
  51. return DBSession.query(UserRoleInWorkspace).filter(UserRoleInWorkspace.user_id==user_id)
  52. def get_all_for_user(self, user_id):
  53. return self._get_all_for_user(user_id).all()
  54. def get_all_for_user_order_by_workspace(self, user_id: int) -> UserRoleInWorkspace:
  55. return self._get_all_for_user(user_id).join(UserRoleInWorkspace.workspace).order_by(Workspace.data_label).all()
  56. def get_all_for_workspace(self, workspace_id):
  57. return DBSession.query(UserRoleInWorkspace).filter(UserRoleInWorkspace.workspace_id==workspace_id).all()
  58. def save(self, role: UserRoleInWorkspace):
  59. DBSession.flush()
  60. def get_roles_for_select_field(self):
  61. """
  62. :return: list of DictLikeClass instances representing available Roles (to be used in select fields
  63. """
  64. result = list()
  65. for role_id in UserRoleInWorkspace.get_all_role_values():
  66. role = RoleType(role_id)
  67. result.append(role)
  68. return result