Source code for swh.graphql.app

# Copyright (C) 2022 The Software Heritage developers
# See the AUTHORS file at the top-level directory of this distribution
# License: GNU General Public License version 3, or any later version
# See top-level LICENSE file for more information

# import pkg_resources
import os
from pathlib import Path

from ariadne import gql, load_schema_from_path, make_executable_schema
from ariadne.validation import cost_validator

from .resolvers import resolvers, scalars

type_defs = gql(
    # pkg_resources.resource_string("swh.graphql", "schema/schema.graphql").decode()
    load_schema_from_path(
        os.path.join(Path(__file__).parent.resolve(), "schema", "schema.graphql")
    )
)

schema = make_executable_schema(
    type_defs,
    resolvers.query,
    resolvers.origin,
    resolvers.visit,
    resolvers.visit_status,
    resolvers.snapshot,
    resolvers.snapshot_branch,
    resolvers.revision,
    resolvers.release,
    resolvers.directory,
    resolvers.directory_entry,
    resolvers.content,
    resolvers.branch_target,
    resolvers.branch_target_node,
    resolvers.release_target,
    resolvers.release_target_node,
    resolvers.directory_entry_target,
    resolvers.directory_entry_target_node,
    resolvers.resolve_swhid_result,
    resolvers.origin_search_result,
    resolvers.binary_string,
    resolvers.date,
    scalars.id_scalar,
    scalars.datetime_scalar,
    scalars.swhid_scalar,
)


[docs] def validation_rules(context, document, data): from .server import get_config if context["request"].user.is_authenticated: max_query_cost = get_config()["max_query_cost"]["user"] else: max_query_cost = get_config()["max_query_cost"]["anonymous"] if max_query_cost: return [ cost_validator(maximum_cost=max_query_cost, variables=data.get("variables")) ] # no limit is applied when max_query_cost is set to 0 or None return None