odoo_resource.py 2.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103
  1. # -*- coding: utf-8 -*-
  2. from __future__ import unicode_literals
  3. from django.conf.urls import url
  4. from django.conf import settings
  5. from tastypie.resources import Resource
  6. from tastypie.utils import trailing_slash
  7. from simplejson import JSONDecodeError
  8. from api.utils.odoo_api import (
  9. normalize_name,
  10. check_name,
  11. randomize_port,
  12. create_folders,
  13. create_configuration,
  14. create_database,
  15. create_odoo_container,
  16. apply_permissions
  17. )
  18. import simplejson as json
  19. class OdooResource(Resource):
  20. class Meta:
  21. pass
  22. '''
  23. '''
  24. def prepend_urls(self):
  25. return [
  26. url(r'^(?P<resource_name>%s)/create%s$' % (self._meta.resource_name, trailing_slash), self.wrap_view('odoo_create'), name='api_odoo_create'),
  27. ]
  28. '''
  29. '''
  30. def odoo_create(self, request, **kwargs):
  31. self.method_check(request, allowed='post')
  32. self.is_authenticated(request)
  33. name = None
  34. try:
  35. data = json.loads(request.body)
  36. name = data['name']
  37. except JSONDecodeError:
  38. name = None
  39. except KeyError:
  40. name = None
  41. if not name:
  42. return self.create_response(request, {
  43. 'error_message': 'name is required'
  44. })
  45. # Check and get name
  46. name = normalize_name(name)
  47. name_exists = check_name(name)
  48. if name_exists:
  49. return self.create_response(request, {
  50. 'error_message': 'name is already exists'
  51. })
  52. # Get port
  53. port = randomize_port()
  54. # Folder structure create
  55. folders_created = create_folders(name)
  56. if not folders_created:
  57. return self.create_response(request, {
  58. 'error_message': 'folders structure cannot be created'
  59. })
  60. # Configuration create
  61. conf_created = create_configuration(name)
  62. if not conf_created:
  63. return self.create_response(request, {
  64. 'error_message': 'configuration cannot be created'
  65. })
  66. # Database create
  67. db_created = create_database(name)
  68. if not db_created:
  69. return self.create_response(request, {
  70. 'error_message': 'database cannot be created'
  71. })
  72. # Odoo create
  73. odoo_created = create_odoo_container(name, [port])
  74. if not odoo_created:
  75. return self.create_response(request, {
  76. 'error_message': 'odoo container cannot be created'
  77. })
  78. apply_permissions(name)
  79. return self.create_response(request, {
  80. 'action': {
  81. 'type': 'redirect',
  82. 'ip': settings.SERVER_IP,
  83. 'port': port
  84. }
  85. })