def test_show_imports(testing_workdir, base_platform, package, capfd):
    package_name, example_file = package
    platforms = ['osx-64', 'win-64', 'win-32', 'linux-64', 'linux-32']

    # skip building on the same platform as the source platform
    for platform in platforms:
        source_platform = '{}-64'.format(base_platform)
        if platform == source_platform:
            platforms.remove(platform)

    f = 'http://repo.continuum.io/pkgs/free/{}-64/{}-py36_0.tar.bz2'.format(
        base_platform, package_name)
    fn = "{}-py36_0.tar.bz2".format(package_name)
    download(f, fn)

    for platform in platforms:
        with pytest.raises(SystemExit):
            api.convert(fn, platforms=platform, show_imports=True)

        output, error = capfd.readouterr()

        # there will be four duplicate outputs since we're converting to four platforms
        assert 'import cryptography.hazmat.bindings._constant_time' in output
        assert 'import cryptography.hazmat.bindings._openssl' in output
        assert 'import cryptography.hazmat.bindings._padding' in output
def test_convert_no_dependencies(testing_workdir, base_platform, package):
    package_name, example_file = package
    subdir = '{}-64'.format(base_platform)
    f = 'http://repo.continuum.io/pkgs/free/{}/{}-np112py36_0.tar.bz2'.format(
        subdir, package_name)
    fn = "{}-np112py36_0.tar.bz2".format(package_name)
    download(f, fn)

    expected_paths_json = package_has_file(fn, 'info/paths.json')
    api.convert(fn,
                platforms='all',
                dependencies=None,
                quiet=False,
                verbose=False)
    for platform in ['osx-64', 'win-64', 'win-32', 'linux-64', 'linux-32']:
        if platform != subdir:
            python_folder = 'lib/python3.6' if not platform.startswith(
                'win') else 'Lib'
            package = os.path.join(platform, fn)
            assert package_has_file(
                package, '{}/{}'.format(python_folder, example_file))

            with tarfile.open(package) as t:
                info = json.loads(
                    t.extractfile('info/index.json').read().decode('utf-8'))

                assert 'numpy 1.12.1 py36_0' in info['depends']
                assert 'cryptography 1.8.1 py36_0' in info['depends']

            if expected_paths_json:
                assert package_has_file(package, 'info/paths.json')
                assert_package_paths_matches_files(package)
def test_convert_from_unix_to_win_creates_entry_points(testing_config):
    recipe_dir = os.path.join(metadata_dir, "entry_points")
    fn = api.build(recipe_dir, config=testing_config)[0]
    for platform in ['win-64', 'win-32']:
        api.convert(fn, platforms=[platform], force=True)
        converted_fn = os.path.join(platform, os.path.basename(fn))
        assert package_has_file(converted_fn, "Scripts/test-script-manual-script.py")
        assert package_has_file(converted_fn, "Scripts/test-script-manual.bat")
        script_contents = package_has_file(converted_fn, "Scripts/test-script-setup-script.py")
        assert script_contents
        assert "Test script setup" in script_contents.decode()
        bat_contents = package_has_file(converted_fn, "Scripts/test-script-setup.bat")
        assert bat_contents
        assert "set PYFILE" in bat_contents.decode()
        assert_package_consistency(converted_fn)
        paths_content = json.loads(package_has_file(converted_fn, 'info/paths.json').decode())
        paths_list = {f['_path'] for f in paths_content['paths']}
        files = {p.decode() for p in package_has_file(converted_fn, 'info/files').splitlines()}
        assert files == paths_list

        index = json.loads(package_has_file(converted_fn, 'info/index.json').decode())
        assert index['subdir'] == platform

        has_prefix_files = package_has_file(converted_fn, "info/has_prefix").decode()
        fieldnames = ['prefix', 'type', 'path']
        csv_dialect = csv.Sniffer().sniff(has_prefix_files)
        csv_dialect.lineterminator = '\n'
        has_prefix_files = csv.DictReader(has_prefix_files.splitlines(), fieldnames=fieldnames,
                                          dialect=csv_dialect)
        has_prefix_files = {d['path']: d for d in has_prefix_files}
        assert len(has_prefix_files) == 4
        assert 'Scripts/test-script-script.py' in has_prefix_files
        assert 'Scripts/test-script-setup-script.py' in has_prefix_files
        assert 'Scripts/test-script-manual-script.py' in has_prefix_files
        assert 'Scripts/test-script-manual-postfix-script.py' in has_prefix_files
def test_convert_from_unix_to_win_creates_entry_points(testing_config):
    recipe_dir = os.path.join(metadata_dir, "entry_points")
    fn = api.build(recipe_dir, config=testing_config)[0]
    for platform in ['win-64', 'win-32']:
        api.convert(fn, platforms=[platform], force=True)
        converted_fn = os.path.join(platform, os.path.basename(fn))
        assert package_has_file(converted_fn, "Scripts/test-script-manual-script.py")
        assert package_has_file(converted_fn, "Scripts/test-script-manual.bat")
        script_contents = package_has_file(converted_fn, "Scripts/test-script-setup-script.py")
        assert script_contents
        assert "Test script setup" in script_contents.decode()
        bat_contents = package_has_file(converted_fn, "Scripts/test-script-setup.bat")
        assert bat_contents
        assert "set PYFILE" in bat_contents.decode()
        assert_package_consistency(converted_fn)
        paths_content = json.loads(package_has_file(converted_fn, 'info/paths.json').decode())
        paths_list = {f['_path'] for f in paths_content['paths']}
        files = {p.decode() for p in package_has_file(converted_fn, 'info/files').splitlines()}
        assert files == paths_list

        index = json.loads(package_has_file(converted_fn, 'info/index.json').decode())
        assert index['subdir'] == platform

        has_prefix_files = package_has_file(converted_fn, "info/has_prefix").decode()
        fieldnames = ['prefix', 'type', 'path']
        csv_dialect = csv.Sniffer().sniff(has_prefix_files)
        csv_dialect.lineterminator = '\n'
        has_prefix_files = csv.DictReader(has_prefix_files.splitlines(), fieldnames=fieldnames,
                                          dialect=csv_dialect)
        has_prefix_files = {d['path']: d for d in has_prefix_files}
        assert len(has_prefix_files) == 4
        assert 'Scripts/test-script-script.py' in has_prefix_files
        assert 'Scripts/test-script-setup-script.py' in has_prefix_files
        assert 'Scripts/test-script-manual-script.py' in has_prefix_files
        assert 'Scripts/test-script-manual-postfix-script.py' in has_prefix_files
def test_convert_no_dependencies(testing_workdir, base_platform, package):
    package_name, example_file = package
    subdir = '{}-64'.format(base_platform)
    f = 'http://repo.anaconda.com/pkgs/free/{}/{}-np112py36_0.tar.bz2'.format(subdir,
                                                                              package_name)
    fn = "{}-np112py36_0.tar.bz2".format(package_name)
    download(f, fn)

    expected_paths_json = package_has_file(fn, 'info/paths.json')
    api.convert(fn, platforms='all', dependencies=None, quiet=False, verbose=False)
    for platform in ['osx-64', 'win-64', 'win-32', 'linux-64', 'linux-32']:
        if platform != subdir:
            python_folder = 'lib/python3.6' if not platform.startswith('win') else 'Lib'
            package = os.path.join(platform, fn)
            assert package_has_file(package,
                                    '{}/{}'.format(python_folder, example_file))

            with tarfile.open(package) as t:
                info = json.loads(t.extractfile('info/index.json').read().decode('utf-8'))

                assert 'numpy 1.12.1 py36_0' in info['depends']
                assert 'cryptography 1.8.1 py36_0' in info['depends']

            if expected_paths_json:
                assert package_has_file(package, 'info/paths.json')
                assert_package_paths_matches_files(package)
def test_convert_platform_to_others(testing_workdir, base_platform, package):
    package_name, example_file = package
    platforms = ['osx-64', 'win-64', 'win-32', 'linux-64', 'linux-32']

    # skip building on the same platform as the source platform
    for platform in platforms:
        source_platform = '{}-64' .format(base_platform)
        if platform == source_platform:
            platforms.remove(platform)

    f = 'http://repo.continuum.io/pkgs/free/{}-64/{}-py27_0.tar.bz2'.format(base_platform,
                                                                            package_name)
    fn = "{}-py27_0.tar.bz2".format(package_name)
    download(f, fn)
    expected_paths_json = package_has_file(fn, 'info/paths.json')
    api.convert(fn, platforms='all', quiet=False, verbose=False)
    for platform in platforms:
        python_folder = 'lib/python2.7' if not platform.startswith('win') else 'Lib'
        package = os.path.join(platform, fn)
        assert package_has_file(package,
                                '{}/site-packages/{}'.format(python_folder, example_file))

        if expected_paths_json:
            assert package_has_file(package, 'info/paths.json')
            assert_package_paths_matches_files(package)
Exemple #7
0
def test_renaming_executables(testing_workdir, base_platform, package):
    """Test that the files in /bin are properly renamed.

    When converting the bin/ directory to Scripts/, only scripts
    need to be changed. Sometimes the /bin directory contains other
    files that are not Python scripts such as post-link.sh scripts.
    This test converts a packaege that contains a post-link.sh script
    in the bin/ directory and checks to see that its filename remains
    the same.
    """
    package_name, example_file = package
    subdir = '{}-64'.format(base_platform)
    f = 'http://repo.anaconda.com/pkgs/free/{}/{}-py27_0.tar.bz2'.format(
        subdir, package_name)
    fn = "{}-py27_0.tar.bz2".format(package_name)
    download(f, fn)
    expected_paths_json = package_has_file(fn, 'info/paths.json')
    api.convert(fn, platforms='all', quiet=False, verbose=False)
    for platform in ['osx-64', 'win-64', 'win-32', 'linux-64', 'linux-32']:
        if subdir != platform:
            package = os.path.join(platform, fn)

            if expected_paths_json:
                assert package_has_file(package, 'info/paths.json')
                assert_package_paths_matches_files(package)
def test_renaming_executables(testing_workdir, base_platform, package):
    """Test that the files in /bin are properly renamed.

    When converting the bin/ directory to Scripts/, only scripts
    need to be changed. Sometimes the /bin directory contains other
    files that are not Python scripts such as post-link.sh scripts.
    This test converts a packaege that contains a post-link.sh script
    in the bin/ directory and checks to see that its filename remains
    the same.
    """
    package_name, example_file = package
    subdir = '{}-64'.format(base_platform)
    f = 'http://repo.anaconda.com/pkgs/free/{}/{}-py27_0.tar.bz2'.format(subdir,
                                                                         package_name)
    fn = "{}-py27_0.tar.bz2".format(package_name)
    download(f, fn)
    expected_paths_json = package_has_file(fn, 'info/paths.json')
    api.convert(fn, platforms='all', quiet=False, verbose=False)
    for platform in ['osx-64', 'win-64', 'win-32', 'linux-64', 'linux-32']:
        if subdir != platform:
            package = os.path.join(platform, fn)

            if expected_paths_json:
                assert package_has_file(package, 'info/paths.json')
                assert_package_paths_matches_files(package)
def test_show_imports(testing_workdir, base_platform, package, capfd):
    package_name, example_file = package
    platforms = ['osx-64', 'win-64', 'win-32', 'linux-64', 'linux-32']

    # skip building on the same platform as the source platform
    for platform in platforms:
        source_platform = '{}-64' .format(base_platform)
        if platform == source_platform:
            platforms.remove(platform)

    f = 'http://repo.anaconda.com/pkgs/free/{}-64/{}-py36_0.tar.bz2'.format(base_platform,
                                                                            package_name)
    fn = "{}-py36_0.tar.bz2".format(package_name)
    download(f, fn)

    for platform in platforms:
        with pytest.raises(SystemExit):
            api.convert(fn, platforms=platform, show_imports=True)

        output, error = capfd.readouterr()

        # there will be four duplicate outputs since we're converting to four platforms
        assert 'import cryptography.hazmat.bindings._constant_time' in output
        assert 'import cryptography.hazmat.bindings._openssl' in output
        assert 'import cryptography.hazmat.bindings._padding' in output
def test_skip_conversion(testing_workdir, base_platform, package, capfd):
    package_name, example_file = package
    source_plat_arch = '{}-64'.format(base_platform)

    f = 'http://repo.continuum.io/pkgs/free/{}-64/{}-np112py36_0.tar.bz2'.format(
        base_platform, package_name)
    fn = "{}-np112py36_0.tar.bz2".format(package_name)
    download(f, fn)

    api.convert(fn,
                platforms=source_plat_arch,
                dependencies=None,
                quiet=False,
                verbose=False)

    output, error = capfd.readouterr()

    skip_message = (
        "Source platform '{}' and target platform '{}' are identical. "
        "Skipping conversion.\n".format(source_plat_arch, source_plat_arch))

    package = os.path.join(source_plat_arch, fn)

    assert skip_message in output
    assert not os.path.exists(package)
Exemple #11
0
def test_convert_platform_to_others(testing_workdir, base_platform):
    f = 'http://repo.continuum.io/pkgs/free/{}-64/itsdangerous-0.24-py27_0.tar.bz2'.format(base_platform)
    fn = "itsdangerous-0.24-py27_0.tar.bz2"
    download(f, fn)
    convert(fn, platforms='all', quiet=False, verbose=True)
    for platform in ['osx-64', 'win-64', 'win-32', 'linux-64', 'linux-32']:
        python_folder = 'lib/python2.7' if not platform.startswith('win') else 'Lib'
        assert package_has_file(os.path.join(platform, fn),
                                '{}/site-packages/itsdangerous.py'.format(python_folder))
Exemple #12
0
def test_convert_from_unix_to_win_creates_entry_points(test_config):
    recipe_dir = os.path.join(metadata_dir, "entry_points")
    fn = api.get_output_file_path(recipe_dir, config=test_config)
    api.build(recipe_dir, config=test_config)
    for platform in ['win-64', 'win-32']:
        api.convert(fn, platforms=[platform], force=True)
        assert package_has_file(os.path.join(platform, os.path.basename(fn)), "Scripts/test-script-manual-script.py")
        assert package_has_file(os.path.join(platform, os.path.basename(fn)), "Scripts/test-script-manual.bat")
        assert package_has_file(os.path.join(platform, os.path.basename(fn)), "Scripts/test-script-setup-script.py")
        assert package_has_file(os.path.join(platform, os.path.basename(fn)), "Scripts/test-script-setup.bat")
def test_convert_from_unix_to_win_creates_entry_points(testing_config):
    recipe_dir = os.path.join(metadata_dir, "entry_points")
    fn = api.build(recipe_dir, config=testing_config)[0]
    for platform in ['win-64', 'win-32']:
        api.convert(fn, platforms=[platform], force=True)
        converted_fn = os.path.join(platform, os.path.basename(fn))
        assert package_has_file(converted_fn,
                                "Scripts/test-script-manual-script.py")
        assert package_has_file(converted_fn, "Scripts/test-script-manual.exe")
        script_contents = package_has_file(
            converted_fn, "Scripts/test-script-setup-script.py")
        assert script_contents
        assert "Test script setup" in script_contents.decode()
        bat_contents = package_has_file(converted_fn,
                                        "Scripts/test-script-setup.exe")
        assert bat_contents
        assert_package_consistency(converted_fn)
        paths_content = json.loads(
            package_has_file(converted_fn, 'info/paths.json').decode())

        # Check the validity of the sha and filesize of the converted scripts
        with tarfile.open(converted_fn) as t:
            for f in paths_content['paths']:
                if f['_path'].startswith('Scripts/') and f['_path'].endswith(
                        '-script.py'):
                    script_content = package_has_file(converted_fn, f['_path'])
                    assert f['sha256'] == hashlib.sha256(
                        script_content).hexdigest()
                    assert f['size_in_bytes'] == t.getmember(f['_path']).size

        paths_list = {f['_path'] for f in paths_content['paths']}
        files = {
            p.decode()
            for p in package_has_file(converted_fn, 'info/files').splitlines()
        }
        assert files == paths_list

        index = json.loads(
            package_has_file(converted_fn, 'info/index.json').decode())
        assert index['subdir'] == platform

        has_prefix_files = package_has_file(converted_fn,
                                            "info/has_prefix").decode()
        fieldnames = ['prefix', 'type', 'path']
        csv_dialect = csv.Sniffer().sniff(has_prefix_files)
        csv_dialect.lineterminator = '\n'
        has_prefix_files = csv.DictReader(has_prefix_files.splitlines(),
                                          fieldnames=fieldnames,
                                          dialect=csv_dialect)
        has_prefix_files = {d['path']: d for d in has_prefix_files}
        assert len(has_prefix_files) == 4
        assert 'Scripts/test-script-script.py' in has_prefix_files
        assert 'Scripts/test-script-setup-script.py' in has_prefix_files
        assert 'Scripts/test-script-manual-script.py' in has_prefix_files
        assert 'Scripts/test-script-manual-postfix-script.py' in has_prefix_files
def test_no_platform(testing_workdir, base_platform, package):
    package_name, example_file = package

    f = 'http://repo.continuum.io/pkgs/free/{}-64/{}-py36_0.tar.bz2'.format(base_platform,
                                                                            package_name)
    fn = "{}-py36_0.tar.bz2".format(package_name)
    download(f, fn)

    with pytest.raises(SystemExit) as e:
        api.convert(fn, platforms=None)

    assert 'Error: --platform option required for conda package conversion.' in str(e.value)
Exemple #15
0
def test_convert_from_unix_to_win_creates_entry_points(test_config):
    recipe_dir = os.path.join(metadata_dir, "entry_points")
    fn = api.get_output_file_path(recipe_dir, config=test_config)
    api.build(recipe_dir, config=test_config)
    for platform in ['win-64', 'win-32']:
        api.convert(fn, platforms=[platform], force=True)
        converted_fn = os.path.join(platform, os.path.basename(fn))
        assert package_has_file(converted_fn, "Scripts/test-script-manual-script.py")
        assert package_has_file(converted_fn, "Scripts/test-script-manual.bat")
        assert package_has_file(converted_fn, "Scripts/test-script-setup-script.py")
        assert package_has_file(converted_fn, "Scripts/test-script-setup.bat")
        assert_package_consistency(converted_fn)
Exemple #16
0
def test_no_platform(testing_workdir, base_platform, package):
    package_name, example_file = package

    f = 'http://repo.anaconda.com/pkgs/free/{}-64/{}-py36_0.tar.bz2'.format(base_platform,
                                                                            package_name)
    fn = "{}-py36_0.tar.bz2".format(package_name)
    download(f, fn)

    with pytest.raises(SystemExit) as e:
        api.convert(fn, platforms=None)

    assert 'Error: --platform option required for conda package conversion.' in str(e.value)
Exemple #17
0
def execute(args):
    _, args = parse_args(args)
    files = args.files
    del args.__dict__['files']

    for f in files:
        # Don't use byte literals for paths in Python 2
        if not PY3:
            f = f.decode(getpreferredencoding())

        f = abspath(expanduser(f))
        api.convert(f, **args.__dict__)
def execute(args):
    _, args = parse_args(args)
    files = args.files
    del args.__dict__['files']

    for f in files:
        # Don't use byte literals for paths in Python 2
        if not PY3:
            f = f.decode(getpreferredencoding())

        f = abspath(expanduser(f))
        api.convert(f, **args.__dict__)
Exemple #19
0
def test_no_imports_found(testing_workdir, base_platform, package, capfd):
    package_name, example_file = package

    f = 'http://repo.anaconda.com/pkgs/free/{}-64/{}-py36_0.tar.bz2'.format(base_platform,
                                                                            package_name)
    fn = "{}-py36_0.tar.bz2".format(package_name)
    download(f, fn)

    with pytest.raises(SystemExit):
        api.convert(fn, platforms=None, show_imports=True)

    output, error = capfd.readouterr()
    assert 'No imports found.' in output
def test_no_imports_found(testing_workdir, base_platform, package, capfd):
    package_name, example_file = package

    f = 'http://repo.continuum.io/pkgs/free/{}-64/{}-py36_0.tar.bz2'.format(
        base_platform, package_name)
    fn = "{}-py36_0.tar.bz2".format(package_name)
    download(f, fn)

    with pytest.raises(SystemExit):
        api.convert(fn, platforms=None, show_imports=True)

    output, error = capfd.readouterr()
    assert 'No imports found.' in output
def test_convert_platform_to_others(testing_workdir, base_platform, package):
    package_name, example_file = package
    f = 'http://repo.continuum.io/pkgs/free/{}-64/{}-py27_0.tar.bz2'.format(base_platform,
                                                                            package_name)
    fn = "{}-py27_0.tar.bz2".format(package_name)
    download(f, fn)
    expected_paths_json = package_has_file(fn, 'info/paths.json')
    api.convert(fn, platforms='all', quiet=False, verbose=False)
    for platform in ['osx-64', 'win-64', 'win-32', 'linux-64', 'linux-32']:
        python_folder = 'lib/python2.7' if not platform.startswith('win') else 'Lib'
        package = os.path.join(platform, fn)
        assert package_has_file(package,
                                '{}/site-packages/{}'.format(python_folder, example_file))

        if expected_paths_json:
            assert package_has_file(package, 'info/paths.json')
            assert_package_paths_matches_files(package)
Exemple #22
0
def test_convert_platform_to_others(testing_workdir, base_platform, package):
    package_name, example_file = package
    subdir = '{}-64'.format(base_platform)
    f = 'http://repo.anaconda.com/pkgs/free/{}/{}-py27_0.tar.bz2'.format(subdir,
                                                                         package_name)
    fn = "{}-py27_0.tar.bz2".format(package_name)
    download(f, fn)
    expected_paths_json = package_has_file(fn, 'info/paths.json')
    api.convert(fn, platforms='all', quiet=False, verbose=False)
    for platform in ['osx-64', 'win-64', 'win-32', 'linux-64', 'linux-32']:
        if subdir != platform:
            python_folder = 'lib/python2.7' if not platform.startswith('win') else 'Lib'
            package = os.path.join(platform, fn)
            assert package_has_file(package,
                                    '{}/site-packages/{}'.format(python_folder, example_file))

            if expected_paths_json:
                assert package_has_file(package, 'info/paths.json')
                assert_package_paths_matches_files(package)
def test_c_extension_conversion(testing_workdir, base_platform, package):
    package_name, example_file = package
    platforms = ['osx-64', 'win-64', 'win-32', 'linux-64', 'linux-32']

    # skip building on the same platform as the source platform
    for platform in platforms:
        source_platform = '{}-64'.format(base_platform)
        if platform == source_platform:
            platforms.remove(platform)

    f = 'http://repo.continuum.io/pkgs/free/{}-64/{}-py36_0.tar.bz2'.format(
        base_platform, package_name)
    fn = "{}-py36_0.tar.bz2".format(package_name)
    download(f, fn)

    for platform in platforms:
        api.convert(fn, platforms=platform, force=True)

        assert os.path.exists('{}/{}'.format(platform, fn))
Exemple #24
0
def test_convert_from_unix_to_win_creates_entry_points(testing_config):
    recipe_dir = os.path.join(metadata_dir, "entry_points")
    fn = api.build(recipe_dir, config=testing_config)[0]
    for platform in ['win-64', 'win-32']:
        api.convert(fn, platforms=[platform], force=True)
        converted_fn = os.path.join(platform, os.path.basename(fn))
        assert package_has_file(converted_fn, "Scripts/test-script-manual-script.py")
        assert package_has_file(converted_fn, "Scripts/test-script-manual.exe")
        script_contents = package_has_file(converted_fn, "Scripts/test-script-setup-script.py")
        assert script_contents
        assert "Test script setup" in script_contents.decode()
        bat_contents = package_has_file(converted_fn, "Scripts/test-script-setup.exe")
        assert bat_contents
        assert_package_consistency(converted_fn)
        paths_content = json.loads(package_has_file(converted_fn, 'info/paths.json').decode())

        # Check the validity of the sha and filesize of the converted scripts
        with tarfile.open(converted_fn) as t:
            for f in paths_content['paths']:
                if f['_path'].startswith('Scripts/') and f['_path'].endswith('-script.py'):
                    script_content = package_has_file(converted_fn, f['_path'])
                    assert f['sha256'] == hashlib.sha256(script_content).hexdigest()
                    assert f['size_in_bytes'] == t.getmember(f['_path']).size

        paths_list = {f['_path'] for f in paths_content['paths']}
        files = {p.decode() for p in package_has_file(converted_fn, 'info/files').splitlines()}
        assert files == paths_list

        index = json.loads(package_has_file(converted_fn, 'info/index.json').decode())
        assert index['subdir'] == platform

        has_prefix_files = package_has_file(converted_fn, "info/has_prefix").decode()
        fieldnames = ['prefix', 'type', 'path']
        csv_dialect = csv.Sniffer().sniff(has_prefix_files)
        csv_dialect.lineterminator = '\n'
        has_prefix_files = csv.DictReader(has_prefix_files.splitlines(), fieldnames=fieldnames,
                                          dialect=csv_dialect)
        has_prefix_files = {d['path']: d for d in has_prefix_files}
        assert len(has_prefix_files) == 4
        assert 'Scripts/test-script-script.py' in has_prefix_files
        assert 'Scripts/test-script-setup-script.py' in has_prefix_files
        assert 'Scripts/test-script-manual-script.py' in has_prefix_files
        assert 'Scripts/test-script-manual-postfix-script.py' in has_prefix_files
Exemple #25
0
def test_c_extension_conversion(testing_workdir, base_platform, package):
    package_name, example_file = package
    platforms = ['osx-64', 'win-64', 'win-32', 'linux-64', 'linux-32']

    # skip building on the same platform as the source platform
    for platform in platforms:
        source_platform = '{}-64' .format(base_platform)
        if platform == source_platform:
            platforms.remove(platform)

    f = 'http://repo.anaconda.com/pkgs/free/{}-64/{}-py36_0.tar.bz2'.format(base_platform,
                                                                            package_name)
    fn = "{}-py36_0.tar.bz2".format(package_name)
    download(f, fn)

    for platform in platforms:
        api.convert(fn, platforms=platform, force=True)

        assert os.path.exists('{}/{}' .format(platform, fn))
Exemple #26
0
def build_convert_upload():
    platforms = ["osx-64", "linux-32", "linux-64", "win-32", "win-64"]
    built_packages = build(".", need_source_download=False)
    converted_packages = []

    for path in built_packages:
        helper, package_name = split(path)
        out_root, os = split(helper)
        pfs = [pf for pf in platforms if pf != os]
        convert(path, output_dir=out_root, platforms=pfs)
        for pf in pfs:
            converted_packages.append(join(out_root, pf, package_name))

    all_packages = built_packages + converted_packages
    for package in all_packages:
        _, package_name = split(package)
        subprocess.run([
            "anaconda", "upload", "--force", "--user", "OpenSourceEconomics",
            package
        ])
Exemple #27
0
def test_skip_conversion(testing_workdir, base_platform, package, capfd):
    package_name, example_file = package
    source_plat_arch = '{}-64' .format(base_platform)

    f = 'http://repo.anaconda.com/pkgs/free/{}-64/{}-np112py36_0.tar.bz2'.format(base_platform,
                                                                            package_name)
    fn = "{}-np112py36_0.tar.bz2".format(package_name)
    download(f, fn)

    api.convert(fn, platforms=source_plat_arch, dependencies=None, quiet=False, verbose=False)

    output, error = capfd.readouterr()

    skip_message = ("Source platform '{}' and target platform '{}' are identical. "
                    "Skipping conversion.\n"
                    .format(source_plat_arch, source_plat_arch))

    package = os.path.join(source_plat_arch, fn)

    assert skip_message in output
    assert not os.path.exists(package)
def test_c_extension_error(testing_workdir, base_platform, package):
    package_name, example_file = package
    platforms = ['osx-64', 'win-64', 'win-32', 'linux-64', 'linux-32']

    # skip building on the same platform as the source platform
    for platform in platforms:
        source_platform = '{}-64'.format(base_platform)
        if platform == source_platform:
            platforms.remove(platform)

    f = 'http://repo.continuum.io/pkgs/free/{}-64/{}-py36_0.tar.bz2'.format(
        base_platform, package_name)
    fn = "{}-py36_0.tar.bz2".format(package_name)
    download(f, fn)

    for platform in platforms:
        with pytest.raises(SystemExit) as e:
            api.convert(fn, platforms=platform)

    assert ('WARNING: Package {} contains C extensions; skipping conversion. '
            'Use -f to force conversion.'.format(fn)) in str(e.value)
Exemple #29
0
def test_c_extension_error(testing_workdir, base_platform, package):
    package_name, example_file = package
    platforms = ['osx-64', 'win-64', 'win-32', 'linux-64', 'linux-32']

    # skip building on the same platform as the source platform
    for platform in platforms:
        source_platform = '{}-64' .format(base_platform)
        if platform == source_platform:
            platforms.remove(platform)

    f = 'http://repo.anaconda.com/pkgs/free/{}-64/{}-py36_0.tar.bz2'.format(base_platform,
                                                                            package_name)
    fn = "{}-py36_0.tar.bz2".format(package_name)
    download(f, fn)

    for platform in platforms:
        with pytest.raises(SystemExit) as e:
            api.convert(fn, platforms=platform)

    assert ('WARNING: Package {} contains C extensions; skipping conversion. '
            'Use -f to force conversion.' .format(fn)) in str(e.value)
Exemple #30
0
    def build_conda_packages(self):
        """
        Run the Linux build and use converter to build OSX
        """
        ## check if update is necessary
        #if self.nversion == self.pversion:
        #    raise SystemExit("Exited: new version == existing version")

        ## tmp dir
        bldir = "./tmp-bld"
        if not os.path.exists(bldir):
            os.makedirs(bldir)

        ## iterate over builds
        for pybuild in ["2.7", "3"]:

            ## build and upload Linux to anaconda.org
            build = api.build(
                "conda-recipe/{}".format(self.package),
                 python=pybuild)
                
            ## upload Linux build
            if not self.deploy:
                cmd = ["anaconda", "upload", build[0], "--label", "test", "--force"]
            else:
                cmd = ["anaconda", "upload", build[0]]
            err = subprocess.Popen(cmd).communicate()

            ## build OSX copies 
            api.convert(build[0], output_dir=bldir, platforms=["osx-64"])
            osxdir = os.path.join(bldir, "osx-64", os.path.basename(build[0]))
            if not self.deploy:
                cmd = ["anaconda", "upload", osxdir, "--label", "test", "--force"]
            else:
                cmd = ["anaconda", "upload", osxdir]
            err = subprocess.Popen(cmd).communicate()

        ## cleanup tmpdir
        shutil.rmtree(bldir)
def test_convert_exe_raises():
    with pytest.raises(RuntimeError) as exc:
        api.convert("some_wheel.exe")
        assert "cannot convert:" in str(exc)
Exemple #32
0
For the upload step to work you have to log into your anaconda.org account
before you run the script. The steps for this are explained here:
https://conda.io/docs/user-guide/tutorials/build-pkgs.html

"""

from conda_build.api import build, convert
from os.path import split, join
from subprocess import run

if __name__ == "__main__":
    platforms = ["osx-64", "linux-64"]
    built_packages = build(".", need_source_download=False)
    converted_packages = []

    for path in built_packages:
        helper, package_name = split(path)
        out_root, os = split(helper)
        pfs = [pf for pf in platforms if pf != os]
        convert(path, output_dir=out_root, platforms=pfs)
        print("\n{} was converted to the following platforms: {}\n".format(
            package_name, pfs))
        for pf in pfs:
            converted_packages.append(join(out_root, pf, package_name))

    all_packages = built_packages + converted_packages
    for package in all_packages:
        _, package_name = split(package)
        run(["anaconda", "upload", package])
        print("\n{} was uploaded to anaconda.org".format(package_name))
Exemple #33
0
from conda_build.api import build, convert
from os.path import split, join
from subprocess import run


if __name__ == '__main__':
    platforms = ['osx-64', 'linux-32', 'linux-64', 'win-32', 'win-64']
    built_packages = build('.', need_source_download=False)
    converted_packages = []

    for path in built_packages:
        helper, package_name = split(path)
        out_root, os = split(helper)
        pfs = [pf for pf in platforms if pf != os]
        convert(path, output_dir=out_root, platforms=pfs)
        print('\n{} was converted to the following platforms: {}\n'.format(
            package_name, pfs))
        for pf in pfs:
            converted_packages.append(join(out_root, pf, package_name))

    all_packages = built_packages + converted_packages
    for package in all_packages:
        _, package_name = split(package)
        run(['anaconda', 'upload', package])
        print('\n{} was uploaded to anaconda.org'.format(package_name))




Exemple #34
0
def test_convert_exe_raises():
    with pytest.raises(RuntimeError) as exc:
        api.convert("some_wheel.exe")
        assert "cannot convert:" in str(exc)
Exemple #35
0
def test_convert_wheel_raises():
    with pytest.raises(RuntimeError) as exc:
        api.convert("some_wheel.whl")
        assert "Conversion from wheel packages" in str(exc)
def test_convert_wheel_raises():
    with pytest.raises(RuntimeError) as exc:
        api.convert("some_wheel.whl")
        assert "Conversion from wheel packages" in str(exc)