__init__.py 1.9KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859
  1. # -*- coding: utf-8 -*-
  2. import json
  3. import time
  4. from pyramid.config import Configurator
  5. from pyramid.authentication import BasicAuthAuthenticationPolicy
  6. from pyramid.authorization import ACLAuthorizationPolicy
  7. from hapic.ext.pyramid import PyramidContext
  8. from tracim.extensions import hapic
  9. from tracim.config import CFG
  10. from tracim.lib.utils.auth import check_credentials
  11. from tracim.lib.utils.auth import Root
  12. from tracim.lib.utils.auth import BASIC_AUTH_WEBUI_REALM
  13. from tracim.views.example_api.example_api_controller import ExampleApiController
  14. from tracim.views.default.default_controller import DefaultController
  15. def main(global_config, **settings):
  16. """ This function returns a Pyramid WSGI application.
  17. """
  18. # set CFG object
  19. app_config = CFG(settings)
  20. app_config.configure_filedepot()
  21. settings['CFG'] = app_config
  22. configurator = Configurator(settings=settings, autocommit=True)
  23. # Add BasicAuthPolicy + ACL AuthorizationPolicy
  24. authn_policy = BasicAuthAuthenticationPolicy(
  25. check_credentials,
  26. realm=BASIC_AUTH_WEBUI_REALM,
  27. )
  28. configurator.set_authorization_policy(ACLAuthorizationPolicy())
  29. configurator.set_authentication_policy(authn_policy)
  30. configurator.set_root_factory(lambda request: Root())
  31. # Pyramids "plugin" include.
  32. configurator.include('pyramid_jinja2')
  33. # Add SqlAlchemy DB
  34. configurator.include('.models')
  35. # set Hapic
  36. hapic.set_context(PyramidContext(configurator))
  37. # Add controllers
  38. default_controllers = DefaultController()
  39. default_controllers.bind(configurator)
  40. example_api_controllers = ExampleApiController()
  41. example_api_controllers.bind(configurator)
  42. time.sleep(1)
  43. s = json.dumps(
  44. hapic.generate_doc(
  45. title='Fake API',
  46. description='just an example of hapic API'
  47. )
  48. )
  49. time.sleep(1)
  50. # print swagger doc
  51. print(s)
  52. time.sleep(1)
  53. return configurator.make_wsgi_app()