ftp_deploy.views: 41 total statements, 100.0% covered

Generated: Sun 2014-03-16 19:26 GMT

Source file: /var/www/service.dev/service/ftp_deploy/views.py

Stats: 26 executed, 0 missed, 15 excluded, 16 ignored

  1. from __future__ import absolute_import
  2. import os
  3. import json
  4. from ftplib import FTP
  5. import tempfile
  6. from celery.result import AsyncResult
  7. from django.views.generic.base import View
  8. from django.http import HttpResponse, Http404
  9. from django.utils.decorators import method_decorator
  10. from django.views.decorators.csrf import csrf_exempt
  11. from .models import Service, Log, Task
  12. from .tasks import deploy_task
  13. from .utils.core import absolute_url
  14. from .utils.deploy import Deploy
  15. from .utils.repo import repository_parser
  16. class DeployView(View):
  17. """Main view receive POST Hook from repository"""
  18. @method_decorator(csrf_exempt)
  19. def dispatch(self, *args, **kwargs):
  20. try:
  21. self.service = Service.objects.get(secret_key=kwargs['secret_key'])
  22. except Exception, e:
  23. raise Http404
  24. self.service_pk = str(self.service.pk)
  25. return super(DeployView, self).dispatch(*args, **kwargs)
  26. def post(self, request, *args, **kwargs):
  27. json_string = request.POST['payload'].decode('string_escape').replace('\n', '')
  28. data = json.loads(json_string)
  29. if(repository_parser(data, self.service).check_branch()):
  30. host = absolute_url(request).build()
  31. job = deploy_task.apply_async((host, json_string, self.service), countdown=1)
  32. Task.objects.create(name=job.id, service=self.service)
  33. return HttpResponse(status=200)
  34. class DeployStatusView(DeployView):
  35. def post(self, request, *args, **kwargs):
  36. data = dict()
  37. if self.service.has_queue():
  38. task_id = self.service.task_set.all()[0]
  39. task = AsyncResult(task_id.name)
  40. data = task.result or dict(status=task.state)
  41. data['queue'] = self.service.task_set.all().count()
  42. json_data = json.dumps(data)
  43. return HttpResponse(json_data, mimetype='application/json')