example_api_controller.py 3.5KB

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