def get_revert_migrations(self, current_migrations, backup_migrations): current_migrations, all_migrations = itertools.tee( reversed(map( Migration, current_migrations.splitlines(), ))) all_migrations = list(all_migrations) backup_migrations = reversed( map( Migration, backup_migrations.splitlines(), )) revert_migrations = utils.OrderedDict() while True: backup_migration = next(backup_migrations, None) for current_migration in current_migrations: if current_migration == backup_migration: break revert_migrations[ current_migration.app] = self._get_parent_migration( current_migration, migrations=all_migrations, ) if backup_migration is None: return revert_migrations.values()
def __init__(self, callback=None, color=colors.yellow, name=None, *args, **kwargs): super(Infrastructure, self).__init__(*args, **kwargs) # We need to be sure that `default()` will be at first place # every time when vars(self) is being invoked. # See Fabric's `extract_tasks()` self.__dict__ = utils.OrderedDict((('default', self.default), ), **self.__dict__) self.callback = callback self.color = color self.name = name = name or callback.__name__ name = color(name) self.default.__doc__ = self.default.__doc__.format(name=name) self.confirm.__doc__ = self.confirm.__doc__.format(name=name)
def __init__(self, callback=None, color=colors.yellow, name=None, *args, **kwargs): super(Infrastructure, self).__init__(*args, **kwargs) # We need to be sure that `default()` will be at first place # every time when vars(self) is being invoked. # This is necessary to exclude `default` from the list of task # because of it's already there as default task. # See `fabric.main.extract_tasks()` for details self.__dict__ = utils.OrderedDict([('default', self.default)], **self.__dict__) self.callback = callback self.color = color self.name = name = name or callback.__name__ name = color(name) self.default.__doc__ = self.default.__doc__.format(name=name) self.confirm.__doc__ = self.confirm.__doc__.format(name=name)
def as_ordereddict(result): return utils.OrderedDict(sorted(result.items()))
def test_str_version(self): cases = dict( empty_options_list=dict( options=utils.OrderedDict(), expected_str_version='', ), with_underscore=dict( options=utils.OrderedDict(foo_baz='bar'), expected_str_version='--foo_baz=bar', ), multiword=dict( options=utils.OrderedDict(foo='bar baz'), expected_str_version="--foo='bar baz'", ), empty=dict( options=utils.OrderedDict(foo=''), expected_str_version="--foo=''", ), str=dict( options=utils.OrderedDict(foo='bar'), expected_str_version='--foo=bar', ), unicode=dict( options=utils.OrderedDict(foo=u'привет'), expected_str_version=u"--foo='привет'", ), integer=dict( options=utils.OrderedDict(foo=42), expected_str_version='--foo=42', ), integer_zero=dict( options=utils.OrderedDict(foo=0), expected_str_version='--foo=0', ), integer_one=dict( options=utils.OrderedDict(foo=1), expected_str_version='--foo=1', ), integer_minus_one=dict( options=utils.OrderedDict(foo=-1), expected_str_version='--foo=-1', ), image=dict( options=utils.OrderedDict(image=docker.Image('image:tag')), expected_str_version='--image=image:tag', ), triple_length=dict( options=utils.OrderedDict([ ('foo', 'foo'), ('bar', 'bar'), ('baz', 'baz'), ]), expected_str_version='--foo=foo --bar=bar --baz=baz', ), multi_value_empty=dict( options=utils.OrderedDict(foo=[]), expected_str_version='', ), multi_value=dict( options=utils.OrderedDict(foo=['bar', 'baz']), expected_str_version='--foo=bar --foo=baz', ), multi_value_integer=dict( options=utils.OrderedDict(foo=[42, 43]), expected_str_version='--foo=42 --foo=43', ), boolean_values=dict( options=utils.OrderedDict(foo=True, bar=False), expected_str_version='--foo', ), mix=dict( options=utils.OrderedDict([ ('foo', 'foo'), ('bar', True), ('baz', ['1', 'a']), ]), expected_str_version='--foo=foo --bar --baz=1 --baz=a', ), ) for case, params in cases.items(): with self.subTest(case=case): options = utils.Options(params['options']) expected_str_version = params['expected_str_version'] self.assertEqual(expected_str_version, six.text_type(options))
def test_str_version(self): cases = dict( empty_options_list=dict( options=utils.OrderedDict(), expected_str_version='', ), with_underscore=dict( options=utils.OrderedDict(foo_baz='bar'), expected_str_version='--foo_baz bar', ), multiword=dict( options=utils.OrderedDict(foo='bar baz'), expected_str_version='--foo "bar baz"', ), empty=dict( options=utils.OrderedDict(foo=''), expected_str_version='--foo ""', ), with_single_quotes=dict( options=utils.OrderedDict(foo="'bar'"), expected_str_version='--foo "\'bar\'"', ), with_double_quotes=dict( options=utils.OrderedDict(foo='"bar"'), expected_str_version='--foo "\\"bar\\""', ), with_quotes_and_spaces=dict( options=utils.OrderedDict(foo='"bar" \'baz\''), expected_str_version='--foo "\\"bar\\" \'baz\'"', ), str=dict( options=utils.OrderedDict(foo='bar'), expected_str_version='--foo bar', ), unicode=dict( options=utils.OrderedDict(foo=u'привет'), expected_str_version=u'--foo привет', ), integer=dict( options=utils.OrderedDict(foo=42), expected_str_version='--foo 42', ), image=dict( options=utils.OrderedDict(image=docker.Image('image:tag')), expected_str_version='--image image:tag', ), triple_length=dict( options=utils.OrderedDict([ ('foo', 'foo'), ('bar', 'bar'), ('baz', 'baz'), ]), expected_str_version='--foo foo --bar bar --baz baz', ), multi_value=dict( options=utils.OrderedDict(foo=['bar', 'baz']), expected_str_version='--foo bar --foo baz', ), multi_value_integer=dict( options=utils.OrderedDict(foo=[42, 43]), expected_str_version='--foo 42 --foo 43', ), boolean_values=dict( options=utils.OrderedDict(foo=True, bar=False), expected_str_version='--foo', ), mix=dict( options=utils.OrderedDict([ ('foo', 'foo'), ('bar', True), ('baz', ['1', 'a']), ]), expected_str_version='--foo foo --bar --baz 1 --baz a', ), ) for case, params in cases.items(): with self.subTest(case=case): options = utils.Options(params['options']) expected_str_version = params['expected_str_version'] self.assertEqual(expected_str_version, six.text_type(options))
def __init__( self, service=None, registry=None, host_registry=None, account=None, ssh_tunnel_port=None, # deprecated ssh_tunnel=None, migrate_commands=False, backup_commands=False, pull_command=False, update_command=False, revert_command=False, **kwargs): super(DockerTasks, self).__init__(**kwargs) # We need to be sure that `deploy()` will be at first place # every time when vars(self) is being invoked. # This is necessary to exclude `deploy` from the list of task # because of it's already there as default task. # See `fabric.main.extract_tasks()` for details self.__dict__ = utils.OrderedDict([('deploy', self.deploy)], **self.__dict__) self.service = service self.registry = registry self.host_registry = host_registry or registry self.account = account self.ssh_tunnel = ssh_tunnel if ssh_tunnel_port: warnings.warn( 'ssh_tunnel_port is deprecated and will be removed in v0.5, ' 'use ssh_tunnel instead', RuntimeWarning, stacklevel=self._warnings_stacklevel, ) registry = self.registry or self.image and self.image.registry assert registry, 'must provide registry if using ssh_tunnel_port' self.host_registry = 'localhost:%d' % ssh_tunnel_port self.ssh_tunnel = '{port}:{host}:{host_port}'.format( port=ssh_tunnel_port, host=registry.host, host_port=registry.port, ) # if there is at least one task to run then assume it is command mode, # there is no other way to find this out command_mode = bool(fab.env.tasks) self.backup.use_task_objects = command_mode or backup_commands self.restore.use_task_objects = command_mode or backup_commands self.migrate.use_task_objects = command_mode or migrate_commands self.migrate_back.use_task_objects = command_mode or migrate_commands self.revert.use_task_objects = command_mode or revert_command self.pull.use_task_objects = command_mode or pull_command self.update.use_task_objects = command_mode or update_command if command_mode: # set original name for `deploy` method to allow explicit invocation self.deploy.name = 'deploy' # enable following commands only in custom registry mode custom_mode = bool(registry or account) self.prepare.use_task_objects = command_mode or custom_mode self.push.use_task_objects = command_mode or custom_mode self.upgrade.use_task_objects = command_mode or custom_mode