gql icon indicating copy to clipboard operation
gql copied to clipboard

Automatically infer Type of Queries

Open amard33p opened this issue 3 years ago • 0 comments

For the following query on https://countries.trevorblades.com/

query GetCountries {
  countries {
    name
  }
}

The snippet to generate this dynamically using gql is:

dsl_gql(
    GetCountries=DSLQuery(
        ds.Query.countries.select(ds.Country.name)
    )
)

Notice that in the raw graphql I just mentioned name instead of Country.name. As the schema already lays out the return types of all queries, graphql is able to figure it out automatically.

""" schema.graphql """
type Query {
...
  countries(filter: CountryFilterInput): [Country!]!
...
}

type Country {
...
  name: String!
...
}

Would it be possible to modify .select() to auto-select objects of the query type by their name? Maybe something like:

dsl_gql(
    GetCountries=DSLQuery(
        ds.Query.countries.select("name", DSLAutoSelectable("continent").select("name"))
    )
)

Resulting graphql

query GetCountries {
  countries {
    name
    continent {
      name
    }
  }
}

Note: The sgqlc library has a __fields__() method which can get the immediate scalars by name: https://github.com/profusion/sgqlc/blob/465a5e800f8b408ceafe25cde45ee0bde4912482/sgqlc/operation/init.py#L390

amard33p avatar Nov 30 '22 08:11 amard33p