ftp_deploy.models.service: 56 total statements, 100.0% covered

Generated: Sun 2014-01-12 11:05 GMT

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

Stats: 47 executed, 0 missed, 9 excluded, 24 ignored

  1. import random
  2. import string
  3. import json
  4. from django.db import models
  5. from django.core.urlresolvers import reverse
  6. from ftp_deploy.utils.core import service_check
  7. from .notification import Notification
  8. class Service(models.Model):
  9. ftp_host = models.CharField('Host', max_length=255)
  10. ftp_username = models.CharField('Username', max_length=50)
  11. ftp_password = models.CharField('Password', max_length=50)
  12. ftp_path = models.CharField('Path', max_length=255)
  13. repo_source = models.CharField('Source', max_length=10, choices=(('bb', 'BitBucket'),))
  14. repo_name = models.CharField('Respository Name', max_length=50)
  15. repo_slug_name = models.SlugField('Respository Slug', max_length=50)
  16. repo_branch = models.CharField('Branch', max_length=50)
  17. repo_hook = models.BooleanField(default=False)
  18. secret_key = models.CharField('Secret Key', unique=True, max_length=30, default=lambda: ''.join(random.choice(string.letters + string.digits) for x in range(30)))
  19. status = models.BooleanField(default=True)
  20. status_message = models.TextField()
  21. notification = models.ForeignKey(Notification, null=True, blank=True, on_delete=models.SET_NULL)
  22. lock = models.BooleanField(default=False)
  23. created = models.DateTimeField(auto_now_add=True)
  24. updated = models.DateTimeField(auto_now=True)
  25. def __unicode__(self):
  26. return self.repo_name
  27. def deploys(self):
  28. return self.log_set.filter(status=True).count()
  29. def fail_deploys(self):
  30. return self.log_set.filter(status=False).filter(skip=False).count()
  31. def skipped_deploys(self):
  32. return self.log_set.filter(status=False).filter(skip=True).count()
  33. def latest_log_date(self):
  34. return self.log_set.latest('created').created
  35. def latest_log_user(self):
  36. return self.log_set.latest('created').user
  37. def hook_url(self):
  38. return reverse('ftpdeploy_deploy', kwargs={'secret_key': self.secret_key})
  39. def get_logs_tree(self):
  40. """get logs tree for restore deploys. Include all logs since first fail apart of skiped."""
  41. first_fail_log = self.log_set.filter(status=0).order_by('pk')[:1]
  42. logs = self.log_set.filter(skip=0).filter(pk__gte=first_fail_log[0].pk).order_by('pk')
  43. return logs
  44. def check(self, **kwargs):
  45. message = list()
  46. fails, message = service_check(self).check_all()
  47. if fails[2]:
  48. self.repo_hook = False
  49. else:
  50. self.repo_hook = True
  51. if True in fails:
  52. self.status_message = '<br>'.join(message)
  53. self.status = False
  54. else:
  55. self.status = True
  56. self.status_message = ''
  57. class Meta:
  58. app_label = 'ftp_deploy'
  59. db_table = 'ftp_deploy_service'