Пример #1
0
def main(args=None):
    """
    Main entry point
    """
    # parse args
    if args is None:
        args = parse_args(sys.argv[1:])

    # set logging level
    if args.verbose > 1:
        set_log_debug(logger)
    elif args.verbose == 1:
        set_log_info(logger)

    s = FileSyncer(args.BUCKET_NAME,
                   prefix=args.prefix,
                   dry_run=args.dry_run,
                   ssec_key=read_keyfile(args.key_file))
    files = read_filelist(args.FILELIST_PATH)
    exclude = []
    if args.exclude_file is not None:
        exclude = read_filelist(args.exclude_file)
    stats = s.run(files, exclude_paths=exclude)
    if args.summary:
        print(stats.summary)
Пример #2
0
class TestRun(object):

    def setup(self):
        with patch('%s.S3Wrapper' % pbm, autospec=True) as mock_s3:
            self.cls = FileSyncer('bname')
            self.mock_s3 = mock_s3

    def test_simple(self):
        paths = ['a', 'b']
        s3_files = {
            'one': (1, 2, 'three'),
            'two': (4, 5, 'six')
        }
        local_files = {
            'one': (1, 2, 'three'),
            'two': (4, 5, 'NOTsix'),
            'three': (6, 7, 'eight')
        }
        to_upload = {
            'two': (4, 5, 'NOTsix'),
            'three': (6, 7, 'eight')
        }
        dates = [
            'dt_start',
            'dt_meta',
            'dt_query',
            'dt_calc',
            'dt_upload',
            'dt_end'
        ]
        with patch('%s.dtnow' % pbm, autospec=True) as mock_dtnow:
            mock_dtnow.side_effect = dates
            with patch('%s.RunStats' % pbm, autospec=True) as mock_stats:
                with patch.multiple(
                    pb,
                    autospec=True,
                    _list_all_files=DEFAULT,
                    _file_meta=DEFAULT,
                    _files_to_upload=DEFAULT,
                    _upload_files=DEFAULT,
                    _filter_filelist=DEFAULT,
                    _s3_files=DEFAULT
                ) as mocks:
                    mocks['_list_all_files'].return_value = [
                        'one', 'two', 'three']
                    mocks['_file_meta'].return_value = local_files
                    mocks['_files_to_upload'].return_value = to_upload
                    mocks['_upload_files'].return_value = (['one'], 123)
                    mocks['_s3_files'].return_value = s3_files
                    res = self.cls.run(paths)
        assert mocks['_list_all_files'].mock_calls == [
            call(self.cls, paths)
        ]
        assert mocks['_file_meta'].mock_calls == [
            call(self.cls, ['one', 'two', 'three'])
        ]
        assert mocks['_s3_files'].mock_calls == [call(self.cls)]
        assert mocks['_files_to_upload'].mock_calls == [
            call(self.cls, local_files, s3_files)
        ]
        assert mocks['_upload_files'].mock_calls == [
            call(self.cls, to_upload)
        ]
        assert mock_stats.mock_calls == [
            call(
                'dt_start', 'dt_meta', 'dt_query', 'dt_calc', 'dt_upload',
                'dt_end', 3, 2, ['one'], 11, 123, dry_run=False
            )
        ]
        assert mocks['_filter_filelist'].mock_calls == []
        assert res == mock_stats.return_value

    def test_exclude(self):
        paths = ['a', 'b']
        s3_files = {
            'one': (1, 2, 'three'),
            'two': (4, 5, 'six')
        }
        local_files = {
            'one': (1, 2, 'three'),
            'two': (4, 5, 'NOTsix'),
            'three': (6, 7, 'eight')
        }
        to_upload = {
            'two': (4, 5, 'NOTsix'),
            'three': (6, 7, 'eight')
        }
        dates = [
            'dt_start',
            'dt_meta',
            'dt_query',
            'dt_calc',
            'dt_upload',
            'dt_end'
        ]
        with patch('%s.dtnow' % pbm, autospec=True) as mock_dtnow:
            mock_dtnow.side_effect = dates
            with patch('%s.RunStats' % pbm, autospec=True) as mock_stats:
                with patch.multiple(
                    pb,
                    autospec=True,
                    _list_all_files=DEFAULT,
                    _file_meta=DEFAULT,
                    _files_to_upload=DEFAULT,
                    _upload_files=DEFAULT,
                    _filter_filelist=DEFAULT,
                    _s3_files=DEFAULT
                ) as mocks:
                    mocks['_list_all_files'].return_value = [
                        'one', 'two', 'three']
                    mocks['_file_meta'].return_value = local_files
                    mocks['_files_to_upload'].return_value = to_upload
                    mocks['_upload_files'].return_value = (['one'], 123)
                    mocks['_filter_filelist'].return_value = ['one', 'two']
                    mocks['_s3_files'].return_value = s3_files
                    res = self.cls.run(paths, exclude_paths=['a', 'b'])
        assert mocks['_list_all_files'].mock_calls == [
            call(self.cls, paths)
        ]
        assert mocks['_file_meta'].mock_calls == [
            call(self.cls, ['one', 'two'])
        ]
        assert mocks['_s3_files'].mock_calls == [call(self.cls)]
        assert mocks['_files_to_upload'].mock_calls == [
            call(self.cls, local_files, s3_files)
        ]
        assert mocks['_upload_files'].mock_calls == [
            call(self.cls, to_upload)
        ]
        assert mocks['_filter_filelist'].mock_calls == [
            call(self.cls, ['one', 'two', 'three'], ['a', 'b'])
        ]
        assert mock_stats.mock_calls == [
            call(
                'dt_start', 'dt_meta', 'dt_query', 'dt_calc', 'dt_upload',
                'dt_end', 2, 2, ['one'], 11, 123, dry_run=False
            )
        ]
        assert res == mock_stats.return_value