From 11cf30dfeb82b17ffa56bb8575cb66bd6f038d7a Mon Sep 17 00:00:00 2001 From: Abhinand C Date: Fri, 29 Dec 2023 20:53:31 +0530 Subject: [PATCH] feat(federation): Support for specifying specific federation version --- graphene_federation/main.py | 7 +++++-- graphene_federation/service.py | 10 +++++----- 2 files changed, 10 insertions(+), 7 deletions(-) diff --git a/graphene_federation/main.py b/graphene_federation/main.py index 247381d..bd657d9 100644 --- a/graphene_federation/main.py +++ b/graphene_federation/main.py @@ -23,13 +23,16 @@ def _get_query(schema: Schema, query_cls: Optional[ObjectType] = None) -> Object def build_schema( query: Optional[ObjectType] = None, mutation: Optional[ObjectType] = None, - enable_federation_2=False, + federation_version: Optional[float] = None, + enable_federation_2: bool = False, schema: Optional[Schema] = None, **kwargs ) -> Schema: schema = schema or Schema(query=query, mutation=mutation, **kwargs) schema.auto_camelcase = kwargs.get("auto_camelcase", True) - schema.federation_version = 2 if enable_federation_2 else 1 + schema.federation_version = float( + (federation_version or 2) if (enable_federation_2 or federation_version) else 1 + ) federation_query = _get_query(schema, schema.query if schema else query) kwargs = schema.__dict__ kwargs.pop("query") diff --git a/graphene_federation/service.py b/graphene_federation/service.py index ca3aab7..f8dd488 100644 --- a/graphene_federation/service.py +++ b/graphene_federation/service.py @@ -122,7 +122,7 @@ def get_sdl(schema: Schema) -> str: _schema = "" - if schema.federation_version == 2: + if schema.federation_version >= 2: shareable_types = get_shareable_types(schema) inaccessible_types = get_inaccessible_types(schema) shareable_fields = get_shareable_fields(schema) @@ -150,7 +150,7 @@ def get_sdl(schema: Schema) -> str: if tagged_fields: _schema_import.append('"@tag"') schema_import = ", ".join(_schema_import) - _schema = f'extend schema @link(url: "https://specs.apollo.dev/federation/v2.0", import: [{schema_import}])\n' + _schema = f'extend schema @link(url: "https://specs.apollo.dev/federation/v{schema.federation_version}", import: [{schema_import}])\n' # Add fields directives (@external, @provides, @requires, @shareable, @inaccessible) entities_ = ( @@ -161,7 +161,7 @@ def get_sdl(schema: Schema) -> str: | set(provides_fields.values()) ) - if schema.federation_version == 2: + if schema.federation_version >= 2: entities_ = ( entities_ | set(shareable_types.values()) @@ -187,7 +187,7 @@ def get_sdl(schema: Schema) -> str: # resolvable argument of @key directive is true by default. If false, we add 'resolvable: false' to sdl. if ( - schema.federation_version == 2 + schema.federation_version >= 2 and hasattr(entity, "_resolvable") and not entity._resolvable ): @@ -204,7 +204,7 @@ def get_sdl(schema: Schema) -> str: pattern = re.compile(type_def_re) string_schema = pattern.sub(repl_str, string_schema) - if schema.federation_version == 2: + if schema.federation_version >= 2: for type_name, type in shareable_types.items(): # noinspection PyProtectedMember if isinstance(type._meta, UnionOptions):