From 8f4b53da6836fd2426dde1072ce7b8d7332f7473 Mon Sep 17 00:00:00 2001 From: eldar nugaev Date: Tue, 12 Jan 2016 16:41:24 +0000 Subject: [PATCH] Command for changing logging level. And pep8 fixing (suddenly this pull request was rejected by jenkins and pep8. so this commit also contains some small style changes for pep8.) Currently the default value for logging is INFO and it is hardcoded. Additional command will be helpful for debug/development process. Implements blueprint: logging-level-cli Change-Id: I1105e3da277e2a948f3ff50b04751169eddf26ed --- freezer/apiclient/backups.py | 2 +- freezer/apiclient/client.py | 23 +++++------ freezer/apiclient/exceptions.py | 6 +-- freezer/apiclient/sessions.py | 2 +- freezer/arguments.py | 22 +++++----- freezer/backup.py | 31 ++++++-------- freezer/engine/engine.py | 16 ++++---- freezer/lvm.py | 10 ++--- freezer/main.py | 56 +++++++++++++++----------- freezer/restore.py | 1 + freezer/scheduler/arguments.py | 5 ++- freezer/scheduler/daemon.py | 3 +- freezer/scheduler/freezer_scheduler.py | 36 ++++++++--------- freezer/scheduler/scheduler_job.py | 2 +- freezer/scheduler/shell.py | 9 +++-- freezer/scheduler/utils.py | 9 +++-- freezer/scheduler/win_daemon.py | 30 ++++++-------- freezer/scheduler/win_service.py | 4 +- freezer/storage/local.py | 2 +- freezer/storage/swift.py | 8 ++-- freezer/streaming.py | 2 +- freezer/utils.py | 14 +++---- freezer/vss.py | 19 +++++---- freezer/winutils.py | 7 ++-- 24 files changed, 160 insertions(+), 159 deletions(-) diff --git a/freezer/apiclient/backups.py b/freezer/apiclient/backups.py index bcc75c54..956fbfa6 100644 --- a/freezer/apiclient/backups.py +++ b/freezer/apiclient/backups.py @@ -17,7 +17,7 @@ limitations under the License. import json import requests -import exceptions +from freezer.apiclient import exceptions class BackupsManager(object): diff --git a/freezer/apiclient/client.py b/freezer/apiclient/client.py index b7b5364c..f20b9a9f 100644 --- a/freezer/apiclient/client.py +++ b/freezer/apiclient/client.py @@ -16,20 +16,19 @@ limitations under the License. client interface to the Freezer API """ -import argparse import os import socket from keystoneclient.auth.identity import v2 from keystoneclient.auth.identity import v3 from keystoneclient import session as ksc_session - -from backups import BackupsManager -from registration import RegistrationManager -from jobs import JobManager -from actions import ActionManager -from sessions import SessionManager from oslo_config import cfg + +from freezer.apiclient import actions +from freezer.apiclient import backups +from freezer.apiclient import jobs +from freezer.apiclient import registration +from freezer.apiclient import sessions from freezer.utils import Namespace CONF = cfg.CONF @@ -225,11 +224,11 @@ class Client(object): self._session = session self.version = version - self.backups = BackupsManager(self, verify=verify) - self.registration = RegistrationManager(self, verify=verify) - self.jobs = JobManager(self, verify=verify) - self.actions = ActionManager(self, verify=verify) - self.sessions = SessionManager(self, verify=verify) + self.backups = backups.BackupsManager(self, verify=verify) + self.registration = registration.RegistrationManager(self, verify=verify) + self.jobs = jobs.JobManager(self, verify=verify) + self.actions = actions.ActionManager(self, verify=verify) + self.sessions = sessions.SessionManager(self, verify=verify) @cached_property diff --git a/freezer/apiclient/exceptions.py b/freezer/apiclient/exceptions.py index 5539beeb..5e3dd083 100644 --- a/freezer/apiclient/exceptions.py +++ b/freezer/apiclient/exceptions.py @@ -38,7 +38,7 @@ class ApiClientException(Exception): message = "[*] Error {0}: {1}".format( r.status_code, body['description']) - except: + except Exception: message = None return message @@ -55,7 +55,7 @@ class ApiClientException(Exception): message = "[*] Error {0}: {1}".format( r.status_code, r.text) - except: + except Exception: message = None return message @@ -65,6 +65,6 @@ class ApiClientException(Exception): str(r) try: self.status_code = r.status_code - except: + except Exception: self.status_code = None super(ApiClientException, self).__init__(message) diff --git a/freezer/apiclient/sessions.py b/freezer/apiclient/sessions.py index e9ccf013..7e007836 100644 --- a/freezer/apiclient/sessions.py +++ b/freezer/apiclient/sessions.py @@ -17,7 +17,7 @@ limitations under the License. import json import requests -import exceptions +from freezer.apiclient import exceptions class SessionManager(object): diff --git a/freezer/arguments.py b/freezer/arguments.py index 45a8a2bb..59f02bdd 100644 --- a/freezer/arguments.py +++ b/freezer/arguments.py @@ -16,28 +16,26 @@ from __future__ import print_function -from freezer import winutils -from freezer import config import argparse - try: import configparser except ImportError: import ConfigParser as configparser import logging import os -from os.path import expanduser import socket import sys -from freezer import utils + from distutils import spawn as distspawn - from oslo_utils import encodeutils - from tempfile import NamedTemporaryFile -home = expanduser("~") +from freezer import config +from freezer import utils +from freezer import winutils + +home = os.path.expanduser("~") DEFAULT_LVM_SNAPNAME = 'freezer_backup_snap' DEFAULT_LVM_SNAPSIZE = '1G' @@ -63,7 +61,7 @@ DEFAULT_PARAMS = { 'remove_older_than': None, 'restore_from_date': False, 'upload_limit': None, 'always_level': False, 'version': False, 'dry_run': False, 'lvm_snapsize': DEFAULT_LVM_SNAPSIZE, - 'restore_abs_path': False, 'log_file': None, + 'restore_abs_path': False, 'log_file': None, 'log_level': "info", 'mode': 'fs', 'action': 'backup', 'vssadmin': False, 'shadow': '', 'shadow_path': '', 'windows_volume': '', 'command': None, 'metadata_out': False, @@ -273,6 +271,12 @@ def backup_arguments(): 'If that file is not writable, freezer tries to log' 'to ~/.freezer/freezer.log', dest='log_file', default=None) + arg_parser.add_argument( + '--log-level', action='store', dest="log_level", + default=DEFAULT_PARAMS['log_level'], + choices=['all', 'debug', 'info', 'warn', 'error', 'critical'], + help='Set logging level. Can be all, debug, info, warn,' + 'error, critical. Default value - info') arg_parser.add_argument( '--exclude', action='store', help="Exclude files,\ given as a PATTERN.Ex: --exclude '*.log' will exclude any file \ diff --git a/freezer/backup.py b/freezer/backup.py index e0537641..a8eea028 100644 --- a/freezer/backup.py +++ b/freezer/backup.py @@ -17,20 +17,15 @@ Freezer Backup modes related functions """ import logging import os -from os.path import expanduser import time -from freezer import utils -from freezer import lvm -from freezer.vss import vss_create_shadow_copy -from freezer.vss import vss_delete_shadow_copy -from freezer.winutils import start_sql_server -from freezer.winutils import stop_sql_server -from freezer.winutils import use_shadow -from freezer.winutils import is_windows from freezer import config +from freezer import lvm +from freezer import utils +from freezer import vss +from freezer import winutils -home = expanduser("~") +home = os.path.expanduser("~") def backup_mode_sql_server(backup_opt_dict, storage): @@ -47,13 +42,13 @@ def backup_mode_sql_server(backup_opt_dict, storage): # Dirty hack - please remove any modification of backup_opt_dict backup_opt_dict.sql_server_instance = sql_server_instance try: - stop_sql_server(sql_server_instance) + winutils.stop_sql_server(sql_server_instance) backup(backup_opt_dict, storage, backup_opt_dict.engine) finally: if not backup_opt_dict.vssadmin: # if vssadmin is false, wait until the backup is complete # to start sql server again - start_sql_server(sql_server_instance) + winutils.start_sql_server(sql_server_instance) def backup_mode_mysql(backup_opt_dict, storage): @@ -217,22 +212,22 @@ def snapshot_create(backup_opt_dict): :return: boolean value, True if snapshot has been taken, false otherwise """ - if is_windows(): + if winutils.is_windows(): # vssadmin is to be deprecated in favor of the --snapshot flag if backup_opt_dict.snapshot: backup_opt_dict.vssadmin = True if backup_opt_dict.vssadmin: # Create a shadow copy. backup_opt_dict.shadow_path, backup_opt_dict.shadow = \ - vss_create_shadow_copy(backup_opt_dict.windows_volume) + vss.vss_create_shadow_copy(backup_opt_dict.windows_volume) - backup_opt_dict.path_to_backup = use_shadow( + backup_opt_dict.path_to_backup = winutils.use_shadow( backup_opt_dict.path_to_backup, backup_opt_dict.windows_volume) # execute this after the snapshot creation if backup_opt_dict.mode == 'sqlserver': - start_sql_server(backup_opt_dict.sql_server_instance) + winutils.start_sql_server(backup_opt_dict.sql_server_instance) return True return False @@ -243,9 +238,9 @@ def snapshot_create(backup_opt_dict): def snapshot_remove(backup_opt_dict, shadow, windows_volume): - if is_windows(): + if winutils.is_windows(): # Delete the shadow copy after the backup - vss_delete_shadow_copy(shadow, windows_volume) + vss.vss_delete_shadow_copy(shadow, windows_volume) else: # Unmount and remove lvm snapshot volume lvm.lvm_snap_remove(backup_opt_dict) diff --git a/freezer/engine/engine.py b/freezer/engine/engine.py index bc2c64b7..869a2533 100644 --- a/freezer/engine/engine.py +++ b/freezer/engine/engine.py @@ -18,7 +18,6 @@ Freezer general utils functions import logging import multiprocessing import time -from freezer.streaming import RichQueue, QueuedThread from freezer import streaming from freezer import utils @@ -72,14 +71,13 @@ class BackupEngine(object): :return: stream """ manifest = backup.storage.download_meta_file(backup) - input_queue = RichQueue(queue_size) - read_stream = QueuedThread(self.backup_stream, - input_queue, - kwargs={"backup_path": backup_path, - "manifest_path": manifest}) - write_stream = QueuedThread(backup.storage.write_backup, - input_queue, - kwargs={"backup": backup}) + input_queue = streaming.RichQueue(queue_size) + read_stream = streaming.QueuedThread( + self.backup_stream, input_queue, + kwargs={"backup_path": backup_path, "manifest_path": manifest}) + write_stream = streaming.QueuedThread( + backup.storage.write_backup, input_queue, + kwargs={"backup": backup}) read_stream.daemon = True write_stream.daemon = True read_stream.start() diff --git a/freezer/lvm.py b/freezer/lvm.py index 89c63101..bee8a243 100644 --- a/freezer/lvm.py +++ b/freezer/lvm.py @@ -16,12 +16,12 @@ limitations under the License. Freezer LVM related functions """ -from freezer import utils - -import re -import os -import subprocess import logging +import os +import re +import subprocess + +from freezer import utils def lvm_snap_remove(backup_opt_dict): diff --git a/freezer/main.py b/freezer/main.py index babb0c49..0a04a3c5 100644 --- a/freezer/main.py +++ b/freezer/main.py @@ -15,27 +15,25 @@ limitations under the License. Freezer main execution function """ +import json +import logging import os import subprocess -import logging import sys -import json -from freezer.arguments import backup_arguments -from freezer.bandwidth import monkeypatch_socket_bandwidth +from freezer import arguments +from freezer import bandwidth from freezer import config -from freezer import job -from freezer.osclients import ClientManager -from freezer.storage import swift -from freezer.storage import local -from freezer.storage import ssh -from freezer.storage import multiple -from freezer import utils from freezer.engine.tar import tar_engine -from freezer import winutils - -# Initialize backup options +from freezer import job +from freezer import osclients +from freezer.storage import local +from freezer.storage import multiple +from freezer.storage import ssh +from freezer.storage import swift +from freezer import utils from freezer import validator +from freezer import winutils def freezer_main(backup_args): @@ -49,23 +47,33 @@ def freezer_main(backup_args): if backup_args.dry_run: dry_run_message = '[DRY_RUN] ' - def configure_logging(file_name): - expanded_file_name = os.path.expanduser(file_name) + def configure_logging(log_file, str_level): + levels = { + 'all': logging.NOTSET, + 'debug': logging.DEBUG, + 'warn': logging.WARN, + 'info': logging.INFO, + 'error': logging.ERROR, + 'critical': logging.CRITICAL + } + + expanded_file_name = os.path.expanduser(log_file) expanded_dir_name = os.path.dirname(expanded_file_name) utils.create_dir(expanded_dir_name, do_log=False) logging.basicConfig( filename=expanded_file_name, - level=logging.INFO, + level=levels[str_level], format=('%(asctime)s %(name)s %(levelname)s {0}%(message)s'. format(dry_run_message))) return expanded_file_name if backup_args.log_file: - return configure_logging(backup_args.log_file) + return configure_logging(backup_args.log_file, + backup_args.log_level) for file_name in ['/var/log/freezer.log', '~/.freezer/freezer.log']: try: - return configure_logging(file_name) + return configure_logging(file_name, backup_args.log_level) except IOError: pass @@ -100,7 +108,7 @@ def freezer_main(backup_args): if backup_args.max_priority: set_max_process_priority() - monkeypatch_socket_bandwidth(backup_args) + bandwidth.monkeypatch_socket_bandwidth(backup_args) backup_args.__dict__['hostname_backup_name'] = "{0}_{1}".format( backup_args.hostname, backup_args.backup_name) @@ -142,7 +150,7 @@ def freezer_main(backup_args): stderr=subprocess.PIPE, env=os.environ.copy()) while process.poll() is None: - print process.stdout.readline().rstrip() + print(process.stdout.readline().rstrip()) output, error = process.communicate() if process.returncode: @@ -191,7 +199,7 @@ def storage_from_dict(backup_args, work_dir, max_segment_size, options = utils.OpenstackOptions.create_from_env() identity_api_version = (os_identity_api_version or options.identity_api_version) - client_manager = ClientManager( + client_manager = osclients.ClientManager( options=options, insecure=backup_args.get('insecure') or False, swift_auth_version=identity_api_version, @@ -215,10 +223,10 @@ def storage_from_dict(backup_args, work_dir, max_segment_size, def main(): """Freezerc binary main execution""" - (backup_args, opt_args) = backup_arguments() + (backup_args, opt_args) = arguments.backup_arguments() try: if backup_args.version: - print "freezer version {0}".format(backup_args.__version__) + print("freezer version {0}".format(backup_args.__version__)) sys.exit(1) if len(sys.argv) < 2: diff --git a/freezer/restore.py b/freezer/restore.py index cbe33040..7fc6712b 100644 --- a/freezer/restore.py +++ b/freezer/restore.py @@ -17,6 +17,7 @@ Freezer restore modes related functions """ import logging + from freezer import utils diff --git a/freezer/scheduler/arguments.py b/freezer/scheduler/arguments.py index f633a6a8..563bf571 100644 --- a/freezer/scheduler/arguments.py +++ b/freezer/scheduler/arguments.py @@ -15,12 +15,13 @@ limitations under the License. """ -import argparse import os from oslo_config import cfg from oslo_log import log -from freezer import __version__ as FREEZER_VERSION import sys + +from freezer import __version__ as FREEZER_VERSION + CONF = cfg.CONF _LOG = log.getLogger(__name__) diff --git a/freezer/scheduler/daemon.py b/freezer/scheduler/daemon.py index 3bdfdbc3..df87df01 100644 --- a/freezer/scheduler/daemon.py +++ b/freezer/scheduler/daemon.py @@ -24,7 +24,8 @@ from tempfile import gettempdir from time import sleep -from freezer.lib.pep3143daemon import DaemonContext, PidFile +from freezer.lib.pep3143daemon import DaemonContext +from freezer.lib.pep3143daemon import PidFile from freezer.utils import create_dir diff --git a/freezer/scheduler/freezer_scheduler.py b/freezer/scheduler/freezer_scheduler.py index 86655162..631f44a9 100755 --- a/freezer/scheduler/freezer_scheduler.py +++ b/freezer/scheduler/freezer_scheduler.py @@ -15,28 +15,28 @@ See the License for the specific language governing permissions and limitations under the License. """ -import os import sys import threading -from distutils import spawn from apscheduler.schedulers.blocking import BlockingScheduler - -from freezer.apiclient import client - -import arguments -import shell -import utils - -from freezer import winutils -if winutils.is_windows(): - from win_daemon import Daemon, NoDaemon -else: - from daemon import Daemon, NoDaemon -from scheduler_job import Job +from distutils import spawn from oslo_config import cfg from oslo_log import log +from freezer.apiclient import client +from freezer.scheduler import arguments +from freezer.scheduler import scheduler_job +from freezer.scheduler import shell +from freezer.scheduler import utils +from freezer import winutils + + +if winutils.is_windows(): + from win_daemon import Daemon + from win_daemon import NoDaemon +else: + from daemon import Daemon + from daemon import NoDaemon CONF = cfg.CONF LOG = log.getLogger(__name__) @@ -122,7 +122,7 @@ class FreezerScheduler(object): return self.scheduler.get_job(job_id) is not None def create_job(self, job_doc): - job = Job.create(self, self.freezerc_executable, job_doc) + job = scheduler_job.Job.create(self, self.freezerc_executable, job_doc) if job: self.jobs[job.id] = job LOG.info("Created job {0}".format(job.id)) @@ -159,7 +159,7 @@ class FreezerScheduler(object): def stop(self): try: self.scheduler.shutdown(wait=False) - except: + except Exception: pass def reload(self): @@ -200,7 +200,7 @@ def main(): apiclient.client_id = CONF.client_id except Exception as e: LOG.error(e) - print e + print(e) sys.exit(1) else: if winutils.is_windows(): diff --git a/freezer/scheduler/scheduler_job.py b/freezer/scheduler/scheduler_job.py index a562e70b..510a53a7 100644 --- a/freezer/scheduler/scheduler_job.py +++ b/freezer/scheduler/scheduler_job.py @@ -434,7 +434,7 @@ class Job(object): try: # already executing job are not present in the apscheduler list self.scheduler.remove_job(job_id=self.id) - except: + except Exception: pass self.event = Job.NO_EVENT self.job_doc_status = Job.STOP_STATUS diff --git a/freezer/scheduler/shell.py b/freezer/scheduler/shell.py index 247b44e4..1e994337 100644 --- a/freezer/scheduler/shell.py +++ b/freezer/scheduler/shell.py @@ -19,16 +19,17 @@ limitations under the License. import json import os import utils -from freezer.utils import create_dir from prettytable import PrettyTable try: from betterprint import pprint -except: +except Exception: def pprint(doc): print(json.dumps(doc, indent=4)) +from freezer.utils import create_dir + def do_session_remove_job(client, args): """ @@ -92,7 +93,7 @@ def do_session_create(client, args): raise Exception("Parameter --file required") session_doc = utils.load_doc_from_json_file(args.fname) session_id = client.sessions.create(session_doc) - print "Created session {0}".format(session_id) + print ("Created session {0}".format(session_id)) def do_session_get(client, args): @@ -178,7 +179,7 @@ def do_job_download(client, args): format(args.jobs_dir, doc['job_id'])) try: utils.save_doc_to_json_file(doc, fname) - except: + except Exception: print("Unable to write to file {0}".format(fname)) diff --git a/freezer/scheduler/utils.py b/freezer/scheduler/utils.py index 7f3610dd..5e2f21f4 100644 --- a/freezer/scheduler/utils.py +++ b/freezer/scheduler/utils.py @@ -18,9 +18,10 @@ limitations under the License. import json import os import socket -import freezer.apiclient.exceptions import uuid +import freezer.apiclient.exceptions + CONFIG_FILE_EXT = '.conf' @@ -34,7 +35,7 @@ def do_register(client, args=None): client.registration.create(client_info) except freezer.apiclient.exceptions.ApiClientException as e: if e.status_code == 409: - print "Client already registered" + print("Client already registered") return 73 # os.EX_CANTCREAT return 0 # os.EX_OK @@ -60,7 +61,7 @@ def load_doc_from_json_file(fname, debug=False): except Exception as e: raise Exception("Unable to load conf file. {0}".format(e)) if debug: - print "File {0} loaded: ".format(fname) + print("File {0} loaded: ".format(fname)) return doc @@ -68,7 +69,7 @@ def save_doc_to_json_file(doc, fname, debug=False): with open(fname, 'w') as fd: json.dump(doc, fd, indent=4) if debug: - print 'Saved doc to file: {0}'.format(fname) + print('Saved doc to file: {0}'.format(fname)) def get_jobs_from_disk(path): diff --git a/freezer/scheduler/win_daemon.py b/freezer/scheduler/win_daemon.py index d3840c4f..aafa111f 100644 --- a/freezer/scheduler/win_daemon.py +++ b/freezer/scheduler/win_daemon.py @@ -14,15 +14,11 @@ import logging import os -import signal -import subprocess import win32serviceutil -from freezer.utils import shield -from freezer.utils import create_subprocess -from freezer.utils import create_dir -from freezer.winutils import save_environment +from freezer import utils +from freezer import winutils def setup_logging(log_file): @@ -34,7 +30,7 @@ def setup_logging(log_file): def configure_logging(file_name): expanded_file_name = os.path.expanduser(file_name) expanded_dir_name = os.path.dirname(expanded_file_name) - create_dir(expanded_dir_name, do_log=False) + utils.create_dir(expanded_dir_name, do_log=False) logging.basicConfig( filename=expanded_file_name, level=logging.INFO, @@ -75,13 +71,13 @@ class Daemon(object): self.job_path = job_path or r'C:\.freezer\scheduler\conf.d' self.insecure = insecure - @shield + @utils.shield def start(self, log_file=None): """Initialize freezer-scheduler instance inside a windows service """ setup_logging(log_file) - create_dir(self.home) + utils.create_dir(self.home) if self.insecure: os.environ['SERVICE_INSECURE'] = 'True' @@ -90,18 +86,18 @@ class Daemon(object): os.environ['SERVICE_JOB_PATH'] = self.job_path os.environ['SERVICE_INTERVAL'] = str(self.interval) - save_environment(self.home) + winutils.save_environment(self.home) print('Freezer Service is starting') win32serviceutil.StartService(self.service_name) - @shield + @utils.shield def reload(self): """Reload the windows service """ win32serviceutil.RestartService(self.service_name) - @shield + @utils.shield def stop(self): """Stop the windows service by using sc queryex command, if we use win32serviceutil.StoptService(self.service_name) it never gets stopped @@ -109,17 +105,17 @@ class Daemon(object): prevents any new signal to reach the service. """ query = 'sc queryex {0}'.format(self.service_name) - out = create_subprocess(query)[0] + out = utils.create_subprocess(query)[0] pid = None for line in out.split('\n'): if 'PID' in line: pid = line.split(':')[1].strip() command = 'taskkill /f /pid {0}'.format(pid) - create_subprocess(command) + utils.create_subprocess(command) print('Freezer Service has stopped') - @shield + @utils.shield def status(self): """Return running status of Freezer Service by querying win32serviceutil.QueryServiceStatus() @@ -142,7 +138,7 @@ class NoDaemon(object): # this is only need it in order to have the same interface as in linux self.daemonizable = daemonizable - @shield + @utils.shield def stop(self): self.daemonizable.stop() @@ -156,6 +152,6 @@ class NoDaemon(object): """ pass - @shield + @utils.shield def start(self, log_file=None): self.daemonizable.start() diff --git a/freezer/scheduler/win_service.py b/freezer/scheduler/win_service.py index 433350b9..34406e7f 100644 --- a/freezer/scheduler/win_service.py +++ b/freezer/scheduler/win_service.py @@ -13,11 +13,11 @@ # limitations under the License. import os -import sys import servicemanager +import sys +import win32event import win32service import win32serviceutil -import win32event from freezer.winutils import set_environment diff --git a/freezer/storage/local.py b/freezer/storage/local.py index 442a47bc..632bb9f5 100644 --- a/freezer/storage/local.py +++ b/freezer/storage/local.py @@ -15,9 +15,9 @@ limitations under the License. """ +import io import os import shutil -import io from freezer.storage import fslike from freezer import utils diff --git a/freezer/storage/swift.py b/freezer/storage/swift.py index 508011fe..e747267d 100644 --- a/freezer/storage/swift.py +++ b/freezer/storage/swift.py @@ -16,8 +16,8 @@ limitations under the License. """ import json -import time import logging +import time from freezer.storage import base @@ -134,16 +134,16 @@ class SwiftStorage(base.Storage): ordered_container = {} containers = self.swift().get_account()[1] for container in containers: - print container + print(container) ordered_container['container_name'] = container['name'] size = '{0}'.format((int(container['bytes']) / 1024) / 1024) if size == '0': size = '1' ordered_container['size'] = '{0}MB'.format(size) ordered_container['objects_count'] = container['count'] - print json.dumps( + print(json.dumps( ordered_container, indent=4, - separators=(',', ': '), sort_keys=True) + separators=(',', ': '), sort_keys=True)) def meta_file_abs_path(self, backup): return backup.tar() diff --git a/freezer/streaming.py b/freezer/streaming.py index 6efba377..80b39607 100644 --- a/freezer/streaming.py +++ b/freezer/streaming.py @@ -15,8 +15,8 @@ limitations under the License. Freezer general utils functions """ -import threading import Queue +import threading class Wait(Exception): diff --git a/freezer/utils.py b/freezer/utils.py index 8f1f3ae0..99f73c7b 100644 --- a/freezer/utils.py +++ b/freezer/utils.py @@ -15,21 +15,19 @@ limitations under the License. Freezer general utils functions """ +import datetime +import errno import logging import os -import time -import datetime import re import subprocess -import errno +import sys +import time + from ConfigParser import ConfigParser from distutils import spawn as distspawn -import sys - from functools import wraps -from collections import Mapping, Sequence - class OpenstackOptions: """ @@ -142,7 +140,7 @@ class DateTime(object): fmt = '%Y-%m-%dT%H:%M:%S' try: self.date_time = datetime.datetime.strptime(value, fmt) - except: + except Exception: raise Exception('bad datetime format: "{0}'.format(value)) @property diff --git a/freezer/vss.py b/freezer/vss.py index 7880e977..ca202d24 100644 --- a/freezer/vss.py +++ b/freezer/vss.py @@ -12,12 +12,12 @@ # See the License for the specific language governing permissions and # limitations under the License. -from freezer.winutils import DisableFileSystemRedirection -from freezer.utils import create_subprocess - import logging import os +from freezer import utils +from freezer import winutils + def vss_create_shadow_copy(windows_volume): """ @@ -61,13 +61,12 @@ def vss_create_shadow_copy(windows_volume): vss_delete_symlink(windows_volume) - with DisableFileSystemRedirection(): + with winutils.DisableFileSystemRedirection(): path = os.path.dirname(os.path.abspath(__file__)) script = '{0}\\scripts\\vss.ps1'.format(path) - (out, err) = create_subprocess(['powershell.exe', - '-executionpolicy', 'unrestricted', - '-command', script, - '-volume', windows_volume]) + (out, err) = utils.create_subprocess( + ['powershell.exe', '-executionpolicy', 'unrestricted', + '-command', script, '-volume', windows_volume]) if err != '': raise Exception('[*] Error creating a new shadow copy on {0}' ', error {1}' .format(windows_volume, err)) @@ -92,10 +91,10 @@ def vss_delete_shadow_copy(shadow_id, windows_volume): :return: bool """ - with DisableFileSystemRedirection(): + with winutils.DisableFileSystemRedirection(): cmd = ['vssadmin', 'delete', 'shadows', '/shadow={0}'.format(shadow_id), '/quiet'] - (out, err) = create_subprocess(cmd) + (out, err) = utils.create_subprocess(cmd) if err != '': raise Exception('[*] Error deleting shadow copy with id {0}' ', error {1}' .format(shadow_id, err)) diff --git a/freezer/winutils.py b/freezer/winutils.py index 88bb0f3c..ae5a2300 100644 --- a/freezer/winutils.py +++ b/freezer/winutils.py @@ -12,12 +12,11 @@ # See the License for the specific language governing permissions and # limitations under the License. - import ctypes -import logging -import sys -import os import json +import logging +import os +import sys from freezer.utils import create_subprocess