example_api_controller.py 3.6KB

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