Source code for twindb_backup.source.base_source
# -*- coding: utf-8 -*-
"""
Module defines base source class.
"""
import configparser
import socket
import time
from abc import abstractmethod
from os import path as osp
from twindb_backup import INTERVALS, LOG, delete_local_files
[docs]class BaseSource(object):
"""
Base source for backup
"""
run_type = None
_suffix = None
_media_type = None
_intervals = INTERVALS
_name = None
_host = None
_created_at = None
_file_name_prefix = ""
def __init__(self, run_type):
"""
Construct instance of BaseSource()
:param run_type: Run type e.g. hourly, daily, etc.
:type run_type: str
"""
self.run_type = run_type
self._host = socket.gethostname()
self._created_at = time.strftime("%Y-%m-%d_%H_%M_%S")
[docs] @abstractmethod
def get_stream(self):
"""
Get backup stream in a handler
"""
[docs] def get_prefix(self):
"""
Get prefix of the backup copy. It includes hostname and run type.
:return: Backup name prefix like 'db-10/daily'
"""
return osp.join(self._host, self.run_type)
[docs] @abstractmethod
def get_name(self):
"""Name that will be used to store backup copy from this source."""
pass
def _get_name(self, filename_prefix):
LOG.debug("Suffix = %s", self.suffix)
self._name = osp.join(
self.get_prefix(),
self._media_type,
"{file}-{time}.{suffix}".format(file=filename_prefix, time=self._created_at, suffix=self._suffix),
)
return self._name
def _delete_local_files(self, filename, config):
try:
keep_copies = getattr(config.retention_local, self.run_type)
dir_backups = "{local_path}/{prefix}/{media_type}/{file}*".format(
local_path=config.keep_local_path,
prefix=self.get_prefix(),
media_type=self._media_type,
file=filename,
)
delete_local_files(dir_backups, keep_copies)
except configparser.NoOptionError:
pass
@property
def suffix(self):
"""Backup file name suffix"""
return self._suffix
@suffix.setter
def suffix(self, suffix):
self._suffix = suffix
@property
def basename(self):
"""Return file name (w/o directory part) of the backup."""
return "{filename_prefix}-{time}.{suffix}".format(
filename_prefix=self._file_name_prefix,
time=self._created_at,
suffix=self._suffix,
)
@property
def host(self):
"""Return host where the backup is being taken from."""
return self._host