example_api_controller.py 3.9KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120
  1. # -*- coding: utf-8 -*-
  2. # TODO - G.M - 10-04-2018 - [cleanup][tempExample] - Drop this file
  3. from datetime import datetime
  4. from http import HTTPStatus
  5. from pyramid.config import Configurator
  6. from hapic.data import HapicData
  7. from tracim.exceptions import InsufficientUserWorkspaceRole, NotAuthentificated
  8. from tracim.extensions import hapic
  9. from tracim.lib.utils.authorization import require_workspace_role
  10. from tracim.models.data import UserRoleInWorkspace
  11. from tracim.views.controllers import Controller
  12. from tracim.views.example_api.schema import *
  13. class ExampleApiController(Controller):
  14. @hapic.with_api_doc()
  15. @hapic.output_body(AboutResponseSchema())
  16. def about(self, context, request):
  17. """
  18. General information about this API.
  19. """
  20. return {
  21. 'version': '1.2.3',
  22. 'datetime': datetime(2017, 12, 7, 10, 55, 8, 488996),
  23. }
  24. @hapic.handle_exception(
  25. NotAuthentificated,
  26. http_code=HTTPStatus.BAD_REQUEST
  27. )
  28. @hapic.with_api_doc()
  29. @hapic.output_body(ListsUserSchema())
  30. @require_workspace_role(UserRoleInWorkspace.READER)
  31. def get_users(self, context, request):
  32. """
  33. Obtain users list.
  34. """
  35. return {
  36. 'item_nb': 1,
  37. 'items': [
  38. {
  39. 'id': 4,
  40. 'username': 'some_user',
  41. 'display_name': 'Damien Accorsi',
  42. 'company': 'Algoo',
  43. },
  44. ],
  45. 'pagination': {
  46. 'first_id': 0,
  47. 'last_id': 5,
  48. 'current_id': 0,
  49. }
  50. }
  51. @hapic.with_api_doc()
  52. @hapic.input_path(UserPathSchema())
  53. @hapic.output_body(UserSchema())
  54. def get_user(self, context, request, hapic_data: HapicData):
  55. """
  56. Obtain one user
  57. """
  58. return {
  59. 'id': 4,
  60. 'username': 'some_user',
  61. 'email_address': 'some.user@hapic.com',
  62. 'first_name': 'Damien',
  63. 'last_name': 'Accorsi',
  64. 'display_name': 'Damien Accorsi',
  65. 'company': 'Algoo',
  66. }
  67. @hapic.with_api_doc()
  68. # TODO - G.M - 2017-12-5 - Support input_forms ?
  69. # TODO - G.M - 2017-12-5 - Support exclude, only ?
  70. @hapic.input_body(UserSchema(exclude=('id',)))
  71. @hapic.output_body(UserSchema())
  72. def add_user(self, context, request, hapic_data: HapicData):
  73. """
  74. Add new user
  75. """
  76. return {
  77. 'id': 4,
  78. 'username': 'some_user',
  79. 'email_address': 'some.user@hapic.com',
  80. 'first_name': 'Damien',
  81. 'last_name': 'Accorsi',
  82. 'display_name': 'Damien Accorsi',
  83. 'company': 'Algoo',
  84. }
  85. @hapic.with_api_doc()
  86. @hapic.output_body(NoContentSchema(),
  87. default_http_code=204)
  88. @hapic.input_path(UserPathSchema())
  89. def del_user(self, context, request, hapic_data: HapicData):
  90. """
  91. delete user
  92. """
  93. return NoContentSchema()
  94. def bind(self, configurator: Configurator):
  95. configurator.add_route('about', '/about', request_method='GET')
  96. configurator.add_view(self.about, route_name='about', renderer='json')
  97. configurator.add_route('get_users', '/users', request_method='GET') # nopep8
  98. configurator.add_view(self.get_users, route_name='get_users', renderer='json') # nopep8
  99. configurator.add_route('get_user', '/users/{id}', request_method='GET') # nopep8
  100. configurator.add_view(self.get_user, route_name='get_user', renderer='json') # nopep8
  101. configurator.add_route('add_user', '/users/', request_method='POST') # nopep8
  102. configurator.add_view(self.add_user, route_name='add_user', renderer='json') # nopep8
  103. configurator.add_route('del_user', '/users/{id}', request_method='DELETE') # nopep8
  104. configurator.add_view(self.del_user, route_name='del_user', renderer='json') # nopep8