from queue import Queue, Full as QueueFull # We are running from the S3QL source directory, make sure # that we use modules from this directory basedir = os.path.abspath(os.path.join(os.path.dirname(sys.argv[0]), '..')) if (os.path.exists(os.path.join(basedir, 'setup.py')) and os.path.exists(os.path.join(basedir, 'src', 's3ql', '__init__.py'))): sys.path = [os.path.join(basedir, 'src')] + sys.path from s3ql.logging import logging, setup_logging, QuietError from s3ql.common import get_backend_factory, AsyncFn from s3ql.backends.common import DanglingStorageURLError from s3ql import BUFSIZE from s3ql.parse_args import ArgumentParser, storage_url_type log = logging.getLogger(__name__) def parse_args(args): '''Parse command line''' parser = ArgumentParser( description='Clone an S3QL file system.') parser.add_authfile() parser.add_quiet() parser.add_debug() parser.add_backend_options() parser.add_version() parser.add_argument("src_storage_url", metavar='<source-storage-url>', type=storage_url_type,
from datetime import datetime, timedelta from collections import defaultdict # We are running from the S3QL source directory, make sure # that we use modules from this directory basedir = os.path.abspath(os.path.join(os.path.dirname(sys.argv[0]), '..')) if (os.path.exists(os.path.join(basedir, 'setup.py')) and os.path.exists( os.path.join(basedir, 'src', 's3ql', '__init__.py'))): sys.path = [os.path.join(basedir, 'src')] + sys.path from s3ql.logging import setup_logging, QuietError, logging from s3ql.common import thaw_basic_mapping, freeze_basic_mapping from s3ql.parse_args import ArgumentParser from s3ql.remove import main as s3qlrm log = logging.getLogger(__name__) def parse_args(args): '''Parse command line''' parser = ArgumentParser(description=textwrap.dedent('''\ ``expire_backups.py`` is a program to intelligently remove old backups that are no longer needed. To define what backups you want to keep for how long, you define a number of *age ranges*. ``expire_backups`` ensures that you will have at least one backup in each age range at all times. It will keep exactly as many backups as are required for that and delete any backups that become redundant.