Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
49 changes: 49 additions & 0 deletions syncano/models/backups.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,49 @@
# -*- coding: utf-8 -*-
from . import fields
from .base import Model
from .instances import Instance


class Backup(Model):
"""
OO wrapper around backups `link <http://docs.syncano.com/docs/full-backups>`_.

:ivar label: :class:`~syncano.models.fields.StringField`
:ivar description: :class:`~syncano.models.fields.StringField`
:ivar instance: :class:`~syncano.models.fields.StringField`
:ivar size: :class:`~syncano.models.fields.IntegerField`
:ivar status: :class:`~syncano.models.fields.StringField`
:ivar status_info: :class:`~syncano.models.fields.StringField`
:ivar author: :class:`~syncano.models.fields.ModelField`
:ivar details: :class:`~syncano.models.fields.JSONField`
:ivar updated_at: :class:`~syncano.models.fields.DateTimeField`
:ivar created_at: :class:`~syncano.models.fields.DateTimeField`
:ivar links: :class:`~syncano.models.fields.HyperlinkedField`
"""

label = fields.StringField(read_only=True)
description = fields.StringField(read_only=True)

instance = fields.StringField(read_only=True)
size = fields.IntegerField(read_only=True)
status = fields.StringField(read_only=True)
status_info = fields.StringField(read_only=True)
author = fields.ModelField('Admin')
details = fields.JSONField(read_only=True)

updated_at = fields.DateTimeField(read_only=True, required=False)
created_at = fields.DateTimeField(read_only=True, required=False)
links = fields.LinksField()

class Meta:
parent = Instance
endpoints = {
'detail': {
'methods': ['get', 'delete'],
'path': '/backups/full/{id}/',
},
'list': {
'methods': ['post', 'get'],
'path': '/backups/full/',
}
}
1 change: 1 addition & 0 deletions syncano/models/base.py
Original file line number Diff line number Diff line change
Expand Up @@ -10,3 +10,4 @@
from .traces import * # NOQA
from .push_notification import * # NOQA
from .geo import * # NOQA
from .backups import * # NOQA
2 changes: 1 addition & 1 deletion tests/integration_test.py
Original file line number Diff line number Diff line change
Expand Up @@ -43,7 +43,7 @@ def setUpClass(cls):
super(InstanceMixin, cls).setUpClass()

cls.instance = cls.connection.Instance.please.create(
name='i%s' % cls.generate_hash()[:10],
name='testpythonlib%s' % cls.generate_hash()[:10],
description='IntegrationTest %s' % datetime.now(),
)

Expand Down
41 changes: 41 additions & 0 deletions tests/integration_test_backups.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,41 @@
# -*- coding: utf-8 -*-
from syncano.models import Backup
from tests.integration_test import InstanceMixin, IntegrationTest


class FullBackupTestCase(InstanceMixin, IntegrationTest):

def _test_backup_create(self):
new_backup = Backup()
backup_test = new_backup.save()

backup = Backup.please.get(id=backup_test.id)
self.assertTrue(backup)
self.assertEqual(backup.id, backup_test.id)
self.assertEqual(backup.author.email, self.API_EMAIL)

return backup.id

def _test_backup_detail(self, backup_id):
backup = Backup.please.get(id=backup_id)

self.assertEqual(backup.id, backup_id)
self.assertEqual(backup.author.email, self.API_EMAIL)

def _test_backup_list(self):

backups = [backup for backup in Backup.please.list()]
self.assertTrue(len(backups)) # at least one backup here;

def _test_backup_delete(self, backup_id):
backup = Backup.please.get(id=backup_id)
backup.delete()
backups = [backup_object for backup_object in Backup.please.list()]
self.assertEqual(len(backups), 0)

def test_backup(self):
# we provide one test for all functionality to avoid creating too many backups;
backup_id = self._test_backup_create()
self._test_backup_list()
self._test_backup_detail(backup_id=backup_id)
self._test_backup_delete(backup_id=backup_id)