blob: 6655b7b2cfff58b5a56d6c2caf803aa73367b860 [file] [log] [blame]
Susanta Gautam745a1f92021-04-22 18:31:59 +05451from staffeln.db import api as db_api
2from staffeln.objects import base
3from staffeln.objects import fields as sfeild
4
5
6@base.StaffelnObjectRegistry.register
Susanta Gautam73a52bb2021-04-27 16:01:11 +05457class Volume(
8 base.StaffelnPersistentObject, base.StaffelnObject, base.StaffelnObjectDictCompat
9):
10 VERSION = "1.0"
Susanta Gautam745a1f92021-04-22 18:31:59 +054511
12 dbapi = db_api.get_instance()
13
14 fields = {
Susanta Gautam73a52bb2021-04-27 16:01:11 +054515 "id": sfeild.IntegerField(),
16 "backup_id": sfeild.StringField(),
17 "instance_id": sfeild.StringField(),
18 "volume_id": sfeild.UUIDField(),
19 "backup_completed": sfeild.IntegerField(),
Susanta Gautam745a1f92021-04-22 18:31:59 +054520 }
21
Susanta Gautam6d9d3db2021-04-25 21:21:19 +054522 @base.remotable_classmethod
Susanta Gautam93098702021-04-30 18:54:24 +054523 def list(cls, context, filters=None):
Susanta Gautam745a1f92021-04-22 18:31:59 +054524 """Return a list of :class:`Backup` objects.
25
26 :param filters: dict mapping the filter to a value.
27 """
Susanta Gautam93098702021-04-30 18:54:24 +054528 db_backups = cls.dbapi.get_backup_list(context, filters=filters)
Susanta Gautam745a1f92021-04-22 18:31:59 +054529
Susanta Gautamb1bf8072021-05-06 16:54:14 +054530 return [cls._from_db_object(cls(context), obj) for obj in db_backups]
Susanta Gautam745a1f92021-04-22 18:31:59 +054531
32 @base.remotable
33 def create(self):
34 """Create a :class:`Backup_data` record in the DB"""
35 values = self.obj_get_changes()
Susanta Gautam745a1f92021-04-22 18:31:59 +054536 db_backup = self.dbapi.create_backup(values)
37 self._from_db_object(self, db_backup)
38
39 @base.remotable
40 def save(self):
41 """Save updates to the :class:`Backup_data`.
42
43 Updates will be made column by column based on the results
44 of self.what_changed().
45 """
46 updates = self.obj_get_changes()
47 db_obj = self.dbapi.update_backup(self.uuid, updates)
48 obj = self._from_db_object(self, db_obj, eager=False)
49 self.obj_refresh(obj)
50 self.obj_reset_changes()
51
52 @base.remotable
53 def refresh(self):
54 """Loads updates for this :class:`Backup_data`.
55 Loads a backup with the same backup_id from the database and
56 checks for updated attributes. Updates are applied from
57 the loaded backup column by column, if there are any updates.
58 """
Susanta Gautam6d9d3db2021-04-25 21:21:19 +054559 current = self.get_by_uuid(backup_id=self.backup_id)
Susanta Gautam745a1f92021-04-22 18:31:59 +054560 self.obj_refresh(current)
Susanta Gautam5442ea72021-05-05 13:25:18 +054561
Susanta Gautamb1bf8072021-05-06 16:54:14 +054562 @base.remotable
63 def delete_backup(self):
64 """Soft Delete the :class:`Queue_data` from the DB"""
65 db_obj = self.dbapi.soft_delete_backup(self.id)
66
Susanta Gautam5442ea72021-05-05 13:25:18 +054567 @base.remotable_classmethod
68 def get_backup_by_backup_id(cls, context, backup_id):
69 """Find a backup based on backup_id
70 :param context: Security context. NOTE: This should only
71 be used internally by the indirection_api.
72 Unfortunately, RPC requires context as the first
73 argument, even though we don't use it.
74 A context should be set when instantiating the
75 object, e.g.: Queue(context)
76 :param backup_id: the backup id of volume in volume data.
77 :returns: a :class:`Backup` object.
78 """
79 db_backup = cls.dbapi.get_backup_by_backup_id(context, backup_id)
80 if db_backup is None:
81 return db_backup
82 else:
83 backup = cls._from_db_object(cls(context), db_backup)
84 return backup
Susanta Gautamf3b4e722021-05-06 19:06:24 +054585