gqlrequests - Create requests to GraphQL APIs with no strings attached 😉
Define GraphQL types in Python as classes or pydantic classes, then use them to automatically build queries. Or even simpler;
gqlrequests will automatically build the classes for you given the api endpoint by using introspection! (Now that's awesome).
You no longer need to define your requests as multiline strings (hence no strings attached).
Examples of currently working features:
import gqlrequests
class Episode(gqlrequests.QueryBuilder):
name: str
length: float
class Character(gqlrequests.QueryBuilder):
name: str
appearsIn: list[Episode]
print(Character().build())
print(Character(fields=["name"]).build())
print(Character().build(indents=2))
getCharacter = Character(func_name="getCharacter")
print(getCharacter(name="Luke").build())
episode_func = Episode(func_name="appearsIn")
characters_query = Character()
characters_query.appearsIn = episode_func(minLength=5)
print(characters_query.build())
from pydantic import BaseModel
class ExampleModel(BaseModel):
age: int
name: str
ExampleQueryBuilder = gqlrequests.from_pydantic(ExampleModel)
print(ExampleQueryBuilder().build())
Edge cases
Some attributes are reserved keywords in Python, such as from
, is
and not
. These cannot be referenced to
by property like this: some_query_result.from
. This can be circumvented by adding leading or trailing underscores,
then passing the strip_underscores
argument to the build method.
class Time(gqlrequests.QueryBuilder):
_from: int
_to: int
value: float
print(Time().build(strip_underscores=True))
Other features that are not yet implemented:
print(Character)