Exemple #1
0
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'
Exemple #7
0
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'
Exemple #9
0
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']
Exemple #12
0
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'
Exemple #13
0
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())
Exemple #14
0
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())
Exemple #15
0
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())
Exemple #16
0
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']