# -*- coding: utf-8 -*- from __future__ import unicode_literals from django.conf.urls import url from django.conf import settings from tastypie.resources import Resource from tastypie.utils import trailing_slash from core.models.request import Request from api.utils.odoo_api import ( normalize_name, check_name, randomize_port, create_folders, create_configuration, create_database, copy_database_seed, restore_database, remove_database_seed, create_odoo_container, apply_permissions ) from api.utils.jwt_authentication import JWTAuthentication from simplejson import JSONDecodeError import simplejson as json class OdooResource(Resource): class Meta: authentication = JWTAuthentication() ''' ''' def prepend_urls(self): return [ url(r'^(?P%s)/create%s$' % (self._meta.resource_name, trailing_slash), self.wrap_view('odoo_create'), name='api_odoo_create'), ] ''' ''' def odoo_create(self, request, **kwargs): self.method_check(request, allowed='post') self.is_authenticated(request) name = None try: data = json.loads(request.body) name = data['name'] except JSONDecodeError: name = None except KeyError: name = None r = Request.objects.create(name='Crear contenedor Odoo') if not name: r.issue = 'name is required' r.status = 5 r.save() return self.create_response(request, { 'error_message': 'name is required' }) # 1. Check and get name name = normalize_name(name) name_exists = check_name(name) if name_exists: r.issue = 'name is already exists' r.status = 5 r.save() return self.create_response(request, { 'error_message': 'name is already exists' }) # 2. Get port port = randomize_port() # 3. Folder structure create folders_created = create_folders(name) if not folders_created: r.issue = 'folders structure cannot be created' r.status = 5 r.save() return self.create_response(request, { 'error_message': 'folders structure cannot be created' }) # 4. Configuration create conf_created = create_configuration(name) if not conf_created: r.issue = 'configuration cannot be created' r.status = 5 r.save() return self.create_response(request, { 'error_message': 'configuration cannot be created' }) # 5. Database create db_created = create_database(name) if not db_created: r.issue = 'database cannot be created' r.status = 5 r.save() return self.create_response(request, { 'error_message': 'database cannot be created' }) # 6. Copy a database backup seed_copied = copy_database_seed() if not seed_copied: r.issue = 'database seed cannot be copied' r.status = 5 r.save() return self.create_response(request, { 'error_message': 'database seed cannot be copied' }) # 7. Restore database schema db_restored = restore_database(name) if not db_restored: r.issue = 'database cannot be restored' r.status = 5 r.save() return self.create_response(request, { 'error_message': 'database cannot be restored' }) # 8. Remove unused bakup file seed_removed = remove_database_seed() if not seed_removed: r.issue = 'seed cannot be removed' r.status = 5 r.save() return self.create_response(request, { 'error_message': 'seed cannot be removed' }) # 9. Odoo create odoo_created = create_odoo_container(name, [port]) if not odoo_created: r.issue = 'odoo container cannot be created' r.status = 5 r.save() return self.create_response(request, { 'error_message': 'odoo container cannot be created' }) # 10. Apply permissions permissions_applied = apply_permissions(name) if not permissions_applied: r.issue = 'odoo container cannot be started' r.status = 5 r.save() return self.create_response(request, { 'error_message': 'odoo container cannot be started' }) r.status = 4 r.save() return self.create_response(request, { 'action': { 'type': 'redirect', 'ip': settings.SERVER_IP, 'port': port } })