gql-query-builder icon indicating copy to clipboard operation
gql-query-builder copied to clipboard

More complex examples

Open hipertracker opened this issue 4 years ago • 1 comments

The project needs documentation for more advanced examples. E.g. how to generate such a query?

query GetCount($language: [String!], $gender: [String!], $function: [String!], $city: [String!]) {
  person_aggregate(where: {_and:  
  {language: {_in: $language}, gender: {_in: $gender}, 
  employees: {function: {description: {_in: $function}}}}, 
  postaladdresses: {city: {_in: $city}}}) {
    aggregate {
      count(columns: id, distinct: true)
    }
  }
}

hipertracker avatar Dec 28 '21 13:12 hipertracker

Hello,

you can using graphql-query package:

from graphql_query import Argument, Field, Operation, Query, Variable

var_language = Variable(name="language", type="[String!]")
var_gender = Variable(name="gender", type="[String!]")
var_function = Variable(name="function", type="[String!]")
var_city = Variable(name="city", type="[String!]")

arg_language = Argument(name="language", value=Argument(name="_in", value=var_language))
arg_gender = Argument(name="gender", value=Argument(name="_in", value=var_gender))
arg_description = Argument(name="description", value=Argument(name="_in", value=var_function))
arg_city = Argument(name="city", value=Argument(name="_in", value=var_city))

person_aggregate = Query(
    name="person_aggregate",
    arguments=[
        Argument(
            name="where",
            value=[
                Argument(
                    name="_and",
                    value=[
                        arg_language,
                        arg_gender,
                        Argument(name="employees", value=Argument(name="function", value=arg_description))
                    ]
                ),
                Argument(name="postaladdresses", value=arg_city)
            ]
        )
    ],
    fields=[
        Field(
            name="aggregate",
            fields=[
                Field(
                    name="count",
                    arguments=[
                        Argument(name="columns", value="id"),
                        Argument(name="distinct", value="true"),
                    ]
                )
            ]
        )
    ]
)

GetCount = Operation(
    type="query",
    name="GetCount",
    variables=[var_language, var_gender, var_function, var_city],
    queries=[person_aggregate],
)
print(GetCount.render())
# query GetCount(
#   $language: [String!]
#   $gender: [String!]
#   $function: [String!]
#   $city: [String!]
# ) {
#   person_aggregate(
#     where: {
#       _and: {
#         language: {
#           _in: $language
#         }
#         gender: {
#           _in: $gender
#         }
#         employees: {
#           function: {
#             description: {
#               _in: $function
#             }
#           }
#         }
#       }
#       postaladdresses: {
#         city: {
#           _in: $city
#         }
#       }
#     }
#   ) {
#     aggregate {
#       count(
#         columns: id
#         distinct: true
#       )
#     }
#   }
# }

denisart avatar Mar 20 '23 14:03 denisart