odoo_resource.py 2.7 KB

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