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_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)
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)
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))
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)
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)
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)
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 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)
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))
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_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))
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 ])
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)
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)
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)
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))
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))
def test_convert_wheel_raises(): with pytest.raises(RuntimeError) as exc: api.convert("some_wheel.whl") assert "Conversion from wheel packages" in str(exc)