Advertisement
Guest User

Untitled

a guest
Mar 28th, 2018
85
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 2.80 KB | None | 0 0
  1. import os
  2. import sys
  3. import time
  4. import psycopg2
  5. import subprocess
  6.  
  7. from configuration import ROOT_PATH
  8. from utils.postgres_tools import pg_dump, pg_restore
  9.  
  10.  
  11. class DatabaseManager(object):
  12.     user = None
  13.     host = None
  14.     password = None
  15.  
  16.     connection = None
  17.  
  18.     def __init__(self, **kwargs):
  19.         try:
  20.             self.user = kwargs.get("user")
  21.         except KeyError:
  22.             sys.stderr.write("[ERROR] Database user must be provided.")
  23.             sys.stderr.flush()
  24.         try:
  25.             self.host = kwargs.get("host")
  26.         except KeyError:
  27.             sys.stderr.write("[ERROR] Database host must be provided.")
  28.             sys.stderr.flush()
  29.         try:
  30.             self.password = kwargs.get("password")
  31.         except KeyError:
  32.             sys.stderr.write("[ERROR] Database password must be provided.")
  33.             sys.stderr.flush()
  34.  
  35.     def __connect(self):
  36.         if self.connection is None:
  37.             try:
  38.                 self.connection = psycopg2.connect(
  39.                     "user='%s' host='%s' password='%s'" % (self.user, self.host, self.password))
  40.             except:
  41.                 sys.stderr.write(
  42.                     "[ERROR] Failed to connect to the provided database.\n")
  43.                 sys.stderr.flush()
  44.  
  45.     def list_databases(self):
  46.         self.__connect()
  47.         cursor = self.connection.cursor()
  48.         cursor.execute(
  49.             "SELECT datname FROM pg_database WHERE datistemplate = false;")
  50.         databases = [database[0] for database in cursor.fetchall()]
  51.         try:
  52.             psql_index = databases.index("postgres")
  53.             del databases[psql_index]
  54.         except:
  55.             pass
  56.         return databases
  57.  
  58.     def dump_database(self, dbname):
  59.         sys.stdout.write("[INFO] Starting to backup database %s. \n" % dbname)
  60.         process = subprocess.Popen(
  61.             [pg_dump(), "--dbname=postgresql://%s:%s@%s:5432/%s" % (self.user, self.password, self.host, dbname), "-Fc", "--create", "--clean", "--verbose", "--file=%s %s.backup" % (os.path.join(ROOT_PATH, "backups", dbname), time.strftime("%Y-%m-%d"))], stdout=subprocess.PIPE)
  62.  
  63.         while process.poll() is None:
  64.             line = process.stdout.readline()
  65.             if line:
  66.                 sys.stdout.write(line + "\n")
  67.         sys.stdout.flush()
  68.  
  69.     def restore_database(self, dbname, backup_file):
  70.         sys.stdout.write("[INFO] Restoring database %s. \n" % dbname)
  71.         process = subprocess.Popen(
  72.             [pg_restore(), "--dbname=postgresql://%s:%s@%s:5432" %
  73.              (self.user, self.password, self.host), "--verbose", backup_file]
  74.         )
  75.  
  76.         while process.poll() is None:
  77.             line = process.stdout.readline()
  78.             if line:
  79.                 sys.stdout.write(line + "\n")
  80.         sys.stdout.flush()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement