graphql.utilities.print_schema module contents are hidden behind utilities package #209
Copy link
Copy link
Open
Description
Summary
graphql.utilities.__init__.py's export of print_schema function shadows the module of graphql.utilities.print_schema
graphql-core/src/graphql/utilities/__init__.py
Lines 28 to 31 in 0c93b84
| # Print a GraphQLSchema to GraphQL Schema language. | |
| from .print_schema import ( | |
| print_introspection_schema, | |
| print_schema, |
So assume this:
from graphql.utilities import print_schemaExpected behavior
The module graphql.utilities.print_schema.
Results
As of v3.3.0a3
The function graphql.utilities.print_schema.print_schema() the function.
Discussion
https://github.com/graphql-python/graphql-core/blob/v3.3.0a3/src/graphql/utilities/print_schema.py#L32 does use a __ALL__, but its contents, which are typed, aren't exported.
Our use case
In earlier graphql-core versions, we would patch print_object - and during migration to graphql-core we found that wasn't available due to package structure.
Reactions are currently unavailable
Metadata
Metadata
Assignees
Labels
No labels
Activity
Cito commentedon Jan 25, 2025
Sorry for the late answer. Is this still relevant?
The behavior is actually intended. You aren't supposed to import sub-modules - only the top-level modules are part of the API. This is also how it works in GraphQL.js. All the public functions in the sub-module are available from the top-level module. For instance, you can do
from graphql.utilities import print_type. If you really want to get the sub-module to monkey-patch it (at your own risk), you can get it withinspect.get_module(print_schema).