- Notifications
You must be signed in to change notification settings - Fork0
Auto-generate GraphQL Type, Resolver and Query.
License
syfun/gqlcli
Folders and files
Name | Name | Last commit message | Last commit date | |
---|---|---|---|---|
Repository files navigation
Auto-generate GraphQL Type, Resolver and Query.
pip install gqlcli
- more rule for client command
- support schema directory
Usage: gqlcli [OPTIONS] COMMAND [ARGS]...Options: -f, --file TEXT graphql sdl file, file extension may be .gql or .graphql --help Show this message and exit.Commands: all Generate all schema types c Generate client query fr Generate field resolver. postman Export all client query to postman. pt Printtype definition t Generate onetype tr Generatetype resolver
-f
option will auto find sdl file with.gql
or.graphql
extension in current dir.
gqlcli -p schema.graphql
same withgqlcli
GraphQL schema example:
enumEpisode { NEWHOPE, EMPIRE, JEDI }interfaceCharacter {id:String!name:Stringfriends: [Character]appearsIn: [Episode]}typeHumanimplementsCharacter {id:String!name:Stringfriends: [Character]appearsIn: [Episode]homePlanet:String}typeDroidimplementsCharacter {id:String!name:Stringfriends: [Character]appearsIn: [Episode]primaryFunction:String}typeQuery {hero(episode:Episode):Characterhuman(id:String!):Humandroid(id:String!):Droid}
all
command can generate all schema types, based on default class, dataclass or pydantic, default is pydantic.
gqlcli all --kind pydantic
fromenumimportEnumfromtypingimportAny,Dict,List,NewType,Optional,Text,Unionfromgqlimportenum_type,type_resolverfrompydanticimportBaseModelID=NewType('ID',Text)@enum_typeclassEpisode(Enum):NEWHOPE=1EMPIRE=2JEDI=3classCharacter(BaseModel):id:Textname:Optional[Text]friends:Optional[List[Optional['Character']]]appears_in:Optional[List[Optional[Episode]]]classHuman(Character):id:Textname:Optional[Text]friends:Optional[List[Optional['Character']]]appears_in:Optional[List[Optional[Episode]]]home_planet:Optional[Text]classDroid(Character):id:Textname:Optional[Text]friends:Optional[List[Optional['Character']]]appears_in:Optional[List[Optional[Episode]]]primary_function:Optional[Text]@type_resolver('Character')defresolve_character_type(obj,info,type_):ifisinstance(obj,Human):return'Human'ifisinstance(obj,Droid):return'Droid'returnNone
for
gql
package, please seepython-gql for detail.
c
command generate query string.
gqlcli c hero
queryhero($episode:Episode) {hero(episode:$episode) {idnamefriendsappearsIn }}
fr
command generate field resolver.
gqlcli fr Query hero
@querydefhero(parent,info,episode:Optional[Episode])->Optional['Character']:pass
tr
command generate type resolver.
gqlcli tr Character
@type_resolver('Character')defresolve_character_type(obj,info,type_):ifisinstance(obj,Human):return'Human'ifisinstance(obj,Droid):return'Droid'returnNone
t
command generate given type.
gqlcli c Character
classCharacter(BaseModel):id:Textname:Optional[Text]friends:Optional[List[Optional['Character']]]appears_in:Optional[List[Optional[Episode]]]
pt
command print type definition.
gqlcli pt Character
interfaceCharacter {id:String!name:Stringfriends: [Character]appearsIn: [Episode]}
Generate a postman collection.
Example:
gqlcli -p ./schema.graphql postman -H X-Authenticated-Scope:authenticated -H X-Authenticated-Userid:"{\"id\": \"{{USER}}\", \"meta\": {\"company_id\": {{COMPANY}}, \"is_superuser\": {{SUPERUSER}}}}" -H Authorization:"Token {{TOKEN}}" example
About
Auto-generate GraphQL Type, Resolver and Query.