def render(recipe_path, config=None, variants=None, permit_unsatisfiable_variants=True, finalize=True, **kwargs): """Given path to a recipe, return the MetaData object(s) representing that recipe, with jinja2 templates evaluated. Returns a list of (metadata, needs_download, needs_reparse in env) tuples""" from conda_build.render import render_recipe, finalize_metadata from conda_build.exceptions import DependencyNeedsBuildingError from conda_build.conda_interface import NoPackagesFoundError from collections import OrderedDict config = get_or_merge_config(config, **kwargs) metadata_tuples = render_recipe(recipe_path, no_download_source=config.no_download_source, config=config, variants=variants, permit_unsatisfiable_variants=permit_unsatisfiable_variants) output_metas = OrderedDict() for meta, download, render_in_env in metadata_tuples: for od, om in meta.get_output_metadata_set( permit_unsatisfiable_variants=permit_unsatisfiable_variants): # only show conda packages right now if 'type' not in od or od['type'] == 'conda': assert hasattr(om.config, 'variants') if finalize and not om.final: try: om = finalize_metadata(om, permit_unsatisfiable_variants=permit_unsatisfiable_variants) except (DependencyNeedsBuildingError, NoPackagesFoundError): if not permit_unsatisfiable_variants: raise output_metas[om.dist()] = ((om, download, render_in_env)) return list(output_metas.values())
def test_ignore_run_exports(testing_metadata, testing_config): # need to clear conda's index, or else we somehow pick up the test_run_exports folder # above for our package here. api.build(os.path.join(metadata_dir, '_run_exports'), config=testing_config) testing_metadata.meta['requirements']['build'] = ['test_has_run_exports'] testing_metadata.meta['build']['ignore_run_exports'] = ['downstream_pinned_package'] testing_metadata.config.index = None m = finalize_metadata(testing_metadata) assert 'downstream_pinned_package 1.0' not in m.meta['requirements']['run']
def test_run_exports_in_subpackage(testing_metadata): p1 = testing_metadata.copy() p1.meta['outputs'] = [{'name': 'has_run_exports', 'run_exports': 'bzip2 1.0'}] api.build(p1, config=testing_metadata.config)[0] # api.update_index(os.path.dirname(output), config=testing_metadata.config) p2 = testing_metadata.copy() p2.meta['requirements']['host'] = ['has_run_exports'] p2_final = finalize_metadata(p2) assert 'bzip2 1.0.*' in p2_final.meta['requirements']['run']
def test_run_exports_in_subpackage(testing_metadata, testing_index): p1 = testing_metadata.copy() p1.meta['outputs'] = [{'name': 'has_run_exports', 'run_exports': 'bzip2 1.0'}] output = api.build(p1)[0] api.update_index(os.path.dirname(output), config=testing_metadata.config) p2 = testing_metadata.copy() p2.meta['requirements']['build'] = ['has_run_exports'] p2.config.index = None p2_final = finalize_metadata(p2, None) assert 'bzip2 1.0' in p2_final.meta['requirements']['run']
def test_get_output_file_path(testing_workdir, testing_metadata): testing_metadata = render.finalize_metadata(testing_metadata) api.output_yaml(testing_metadata, 'recipe/meta.yaml') build_path = api.get_output_file_paths(os.path.join(testing_workdir, 'recipe'), config=testing_metadata.config, no_download_source=True)[0] assert build_path == os.path.join(testing_metadata.config.croot, testing_metadata.config.host_subdir, "test_get_output_file_path-1.0-1.tar.bz2")
def test_hash_applies_to_custom_build_string(testing_metadata): testing_metadata.meta['build']['string'] = 'steve' testing_metadata.meta['requirements']['build'] = test_reqs testing_metadata = render.finalize_metadata(testing_metadata) if sys.platform == 'win32': if sys.version_info[0] == 2: assert testing_metadata.build_id() == 'steveh5e09b76' else: assert testing_metadata.build_id() == 'steveh9802f05' else: assert testing_metadata.build_id() == 'stevehbcfeb9f'
def test_run_exports_in_subpackage(testing_metadata, testing_index): p1 = testing_metadata.copy() p1.meta['outputs'] = [{ 'name': 'has_run_exports', 'run_exports': 'bzip2 1.0' }] output = api.build(p1)[0] api.update_index(os.path.dirname(output), config=testing_metadata.config) p2 = testing_metadata.copy() p2.meta['requirements']['build'] = ['has_run_exports'] p2.config.index = None p2_final = finalize_metadata(p2, None) assert 'bzip2 1.0' in p2_final.meta['requirements']['run']
def test_hash_build_id(testing_metadata): testing_metadata.meta['requirements']['build'] = test_reqs testing_metadata = render.finalize_metadata(testing_metadata) if sys.platform == 'win32': if sys.version_info[0] == 2: assert testing_metadata._hash_dependencies() == 'h5e09b76' assert testing_metadata.build_id() == 'h5e09b76_1' else: assert testing_metadata._hash_dependencies() == 'h9802f05' assert testing_metadata.build_id() == 'h9802f05_1' else: assert testing_metadata._hash_dependencies() == 'hbcfeb9f' assert testing_metadata.build_id() == 'hbcfeb9f_1'
def test_get_output_file_path(testing_workdir, testing_metadata): testing_metadata = render.finalize_metadata(testing_metadata) api.output_yaml(testing_metadata, 'recipe/meta.yaml') build_path = api.get_output_file_path(os.path.join(testing_workdir, 'recipe'), config=testing_metadata.config, no_download_source=True)[0] _hash = testing_metadata._hash_dependencies() python = ''.join(testing_metadata.config.variant['python'].split('.')[:2]) assert build_path == os.path.join(testing_metadata.config.croot, testing_metadata.config.host_subdir, "test_get_output_file_path-1.0-py{}{}_1.tar.bz2".format( python, _hash))
def test_get_output_file_path(testing_workdir, testing_metadata): testing_metadata = render.finalize_metadata(testing_metadata, testing_metadata.config.index) api.output_yaml(testing_metadata, 'recipe/meta.yaml') build_path = api.get_output_file_path(os.path.join(testing_workdir, 'recipe'), config=testing_metadata.config, no_download_source=True)[0] _hash = testing_metadata._hash_dependencies() python = ''.join(testing_metadata.config.variant['python'].split('.')[:2]) assert build_path == os.path.join(testing_metadata.config.croot, testing_metadata.config.host_subdir, "test_get_output_file_path-1.0-py{}{}_1.tar.bz2".format( python, _hash))
def test_run_exports_in_subpackage(testing_metadata): p1 = testing_metadata.copy() p1.meta['outputs'] = [{ 'name': 'has_run_exports', 'run_exports': 'bzip2 1.0' }] api.build(p1, config=testing_metadata.config)[0] # api.update_index(os.path.dirname(output), config=testing_metadata.config) p2 = testing_metadata.copy() p2.meta['requirements']['build'] = ['has_run_exports'] p2.original_meta = p2.meta.copy() p2_final = finalize_metadata(p2) assert 'bzip2 1.0.*' in p2_final.meta['requirements']['run']
def render(recipe_path, config=None, variants=None, permit_unsatisfiable_variants=True, finalize=True, bypass_env_check=False, **kwargs): """Given path to a recipe, return the MetaData object(s) representing that recipe, with jinja2 templates evaluated. Returns a list of (metadata, needs_download, needs_reparse in env) tuples""" from conda_build.render import render_recipe, finalize_metadata from conda_build.exceptions import DependencyNeedsBuildingError from conda_build.conda_interface import NoPackagesFoundError from collections import OrderedDict config = get_or_merge_config(config, **kwargs) metadata_tuples = render_recipe(recipe_path, bypass_env_check=bypass_env_check, no_download_source=config.no_download_source, config=config, variants=variants, permit_unsatisfiable_variants=permit_unsatisfiable_variants) output_metas = OrderedDict() for meta, download, render_in_env in metadata_tuples: if not meta.skip() or not config.trim_skip: for od, om in meta.get_output_metadata_set( permit_unsatisfiable_variants=permit_unsatisfiable_variants, permit_undefined_jinja=not finalize, bypass_env_check=bypass_env_check): if not om.skip() or not config.trim_skip: if 'type' not in od or od['type'] == 'conda': if finalize and not om.final: try: om = finalize_metadata(om, permit_unsatisfiable_variants=permit_unsatisfiable_variants) except (DependencyNeedsBuildingError, NoPackagesFoundError): if not permit_unsatisfiable_variants: raise # remove outputs section from output objects for simplicity if not om.path and om.meta.get('outputs'): om.parent_outputs = om.meta['outputs'] del om.meta['outputs'] output_metas[om.dist(), om.config.variant.get('target_platform'), tuple((var, om.config.variant[var]) for var in om.get_used_vars())] = \ ((om, download, render_in_env)) else: output_metas["{}: {}".format(om.type, om.name()), om.config.variant.get('target_platform'), tuple((var, om.config.variant[var]) for var in om.get_used_vars())] = \ ((om, download, render_in_env)) return list(output_metas.values())
def render(recipe_path, config=None, variants=None, permit_unsatisfiable_variants=True, finalize=True, bypass_env_check=False, **kwargs): """Given path to a recipe, return the MetaData object(s) representing that recipe, with jinja2 templates evaluated. Returns a list of (metadata, needs_download, needs_reparse in env) tuples""" from conda_build.render import render_recipe, finalize_metadata from conda_build.exceptions import DependencyNeedsBuildingError from conda_build.conda_interface import NoPackagesFoundError from collections import OrderedDict config = get_or_merge_config(config, **kwargs) metadata_tuples = render_recipe( recipe_path, bypass_env_check=bypass_env_check, no_download_source=config.no_download_source, config=config, variants=variants, permit_unsatisfiable_variants=permit_unsatisfiable_variants) output_metas = OrderedDict() for meta, download, render_in_env in metadata_tuples: for od, om in meta.get_output_metadata_set( permit_unsatisfiable_variants=permit_unsatisfiable_variants, permit_undefined_jinja=not finalize): # only show conda packages right now if 'type' not in od or od['type'] == 'conda': assert hasattr(om.config, 'variants') if finalize and not om.final: try: om = finalize_metadata(om, permit_unsatisfiable_variants= permit_unsatisfiable_variants) except (DependencyNeedsBuildingError, NoPackagesFoundError): if not permit_unsatisfiable_variants: raise output_metas[om.dist(), om.config.variant.get('target_platform')] = \ ((om, download, render_in_env)) return list(output_metas.values())
def render(recipe_path, config=None, variants=None, permit_unsatisfiable_variants=True, finalize=True, **kwargs): """Given path to a recipe, return the MetaData object(s) representing that recipe, with jinja2 templates evaluated. Returns a list of (metadata, needs_download, needs_reparse in env) tuples""" from conda_build.render import render_recipe, finalize_metadata from conda_build.exceptions import DependencyNeedsBuildingError from conda_build.conda_interface import NoPackagesFoundError from collections import OrderedDict config = get_or_merge_config(config, **kwargs) log = _get_logger(__name__) metadata_tuples = render_recipe( recipe_path, no_download_source=config.no_download_source, config=config, variants=variants, permit_unsatisfiable_variants=permit_unsatisfiable_variants) output_metas = OrderedDict() for meta, download, render_in_env in metadata_tuples: for od, om in meta.get_output_metadata_set( permit_unsatisfiable_variants=permit_unsatisfiable_variants): # only show conda packages right now if 'type' not in od or od['type'] == 'conda': assert hasattr(om.config, 'variants') if finalize: try: om = finalize_metadata(om) except (DependencyNeedsBuildingError, NoPackagesFoundError): if permit_unsatisfiable_variants: log.warn( "Returning non-final recipe; one or more dependencies " "was unsatisfiable.") else: raise output_metas[om.dist()] = ((om, download, render_in_env)) return list(output_metas.values())
def test_run_exports(testing_metadata, testing_config): api.build(os.path.join(metadata_dir, '_run_exports'), config=testing_config) testing_metadata.meta['requirements']['build'] = ['test_has_run_exports'] testing_metadata.config.index = None m = finalize_metadata(testing_metadata) assert 'downstream_pinned_package 1.0' in m.meta['requirements']['run']