odoo_resource.py 3.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143
  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 core.models.request import Request
  9. from api.utils.odoo_api import (
  10. normalize_name,
  11. check_name,
  12. randomize_port,
  13. create_folders,
  14. create_configuration,
  15. create_database,
  16. create_odoo_container,
  17. apply_permissions
  18. )
  19. import simplejson as json
  20. class OdooResource(Resource):
  21. class Meta:
  22. pass
  23. '''
  24. '''
  25. def prepend_urls(self):
  26. return [
  27. url(r'^(?P<resource_name>%s)/create%s$' % (self._meta.resource_name, trailing_slash), self.wrap_view('odoo_create'), name='api_odoo_create'),
  28. ]
  29. '''
  30. '''
  31. def odoo_create(self, request, **kwargs):
  32. self.method_check(request, allowed='post')
  33. self.is_authenticated(request)
  34. name = None
  35. try:
  36. data = json.loads(request.body)
  37. name = data['name']
  38. except JSONDecodeError:
  39. name = None
  40. except KeyError:
  41. name = None
  42. r = Request.objects.create(name='Crear contenedor Odoo')
  43. if not name:
  44. r.issue = 'name is required'
  45. r.status = 5
  46. r.save()
  47. return self.create_response(request, {
  48. 'error_message': 'name is required'
  49. })
  50. # Check and get name
  51. name = normalize_name(name)
  52. name_exists = check_name(name)
  53. if name_exists:
  54. r.issue = 'name is already exists'
  55. r.status = 5
  56. r.save()
  57. return self.create_response(request, {
  58. 'error_message': 'name is already exists'
  59. })
  60. # Get port
  61. port = randomize_port()
  62. # Folder structure create
  63. folders_created = create_folders(name)
  64. if not folders_created:
  65. r.issue = 'folders structure cannot be created'
  66. r.status = 5
  67. r.save()
  68. return self.create_response(request, {
  69. 'error_message': 'folders structure cannot be created'
  70. })
  71. # Configuration create
  72. conf_created = create_configuration(name)
  73. if not conf_created:
  74. r.issue = 'configuration cannot be created'
  75. r.status = 5
  76. r.save()
  77. return self.create_response(request, {
  78. 'error_message': 'configuration cannot be created'
  79. })
  80. # Database create
  81. db_created = create_database(name)
  82. if not db_created:
  83. r.issue = 'database cannot be created'
  84. r.status = 5
  85. r.save()
  86. return self.create_response(request, {
  87. 'error_message': 'database cannot be created'
  88. })
  89. # Odoo create
  90. odoo_created = create_odoo_container(name, [port])
  91. if not odoo_created:
  92. r.issue = 'odoo container cannot be created'
  93. r.status = 5
  94. r.save()
  95. return self.create_response(request, {
  96. 'error_message': 'odoo container cannot be created'
  97. })
  98. # Apply permissions
  99. permissions_applied = apply_permissions(name)
  100. if not permissions_applied:
  101. r.issue = 'odoo container cannot be started'
  102. r.status = 5
  103. r.save()
  104. return self.create_response(request, {
  105. 'error_message': 'odoo container cannot be started'
  106. })
  107. r.status = 4
  108. r.save()
  109. return self.create_response(request, {
  110. 'action': {
  111. 'type': 'redirect',
  112. 'ip': settings.SERVER_IP,
  113. 'port': port
  114. }
  115. })