def read_component_analysis_from_core_data(s3, ecosystem, component, version):
    """Read component analysis from the core data and retrieve duration info from it."""
    bucket = "bayesian-core-data"

    durations = {}

    key = s3.component_key(ecosystem, component, version)
    data = s3.read_object(bucket, key)
    durations["overall"] = Duration.from_data(data)

    analyses = data.get("analyses")

    # Remove this analysis because it is not performed on component-version level
    if "github_details" in analyses:
        analyses.remove("github_details")
    # analyses.remove("code_metrics")

    for analysis in analyses:
        key = s3.component_analysis_key(ecosystem, component, version,
                                        analysis)
        try:
            data = s3.read_object(bucket, key)
            durations[analysis] = Duration.from_audit(data)
        except ClientError:
            print("Warning: duration for the following analysis won't be "
                  "be computed: {a}".format(a=analysis))

    return durations
def read_component_analysis_from_core_package(s3, ecosystem, component):
    """Read component analysis from core package data and retrieve duration info from it."""
    bucket = "bayesian-core-package-data"

    durations = {}

    key = s3.component_core_package_data_key(ecosystem, component)
    data = s3.read_object(bucket, key)
    durations["overall"] = Duration.from_data(data)

    # we have to specify analysis manually here
    analyses = [
        "git_stats", "github_details", "keywords_tagging", "libraries_io"
    ]

    for analysis in analyses:
        key = s3.component_core_package_data_analysis_key(
            ecosystem, component, analysis)
        try:
            data = s3.read_object(bucket, key)
            durations[analysis] = Duration.from_audit(data)
        except ClientError:
            print("Warning: duration for the following analysis won't be "
                  "be computed: {a}".format(a=analysis))

    return durations