vasili111
vasili111

Reputation: 6940

Constructing GraphQL call string from Python list of dictionaries

I am using Python requests library to execute GraphQL mutation. I need to pass requests library a query parameter which should contain a string which should be constructed from the Python list of Python dictionaries.

Python list of dictionaries looks like:

my_list_of_dicts = [{"custom_module_id": "23", "answer": "some text 2", "user_id": "111"}, 
                            {"custom_module_id": "24", "answer": "a", "user_id": "111"}]

Now I need to convert this list of dictionaries in a string so it should look like this:

my_list_of_dicts = [{custom_module_id: "23", answer: "some text 2", user_id: "111"}, 
                            {custom_module_id: "24", answer: "a", user_id: "111"}]

Basically I need to get the string that looks like a Python list of dictionaries except that keys of the dictionaries does not have quotations around dictionary key names. I did this and it works:

my_query_string = json.dumps(my_list_of_dicts).replace("\"custom_module_id\"", "custom_module_id")
my_query_string = my_query_string.replace("\"answer\"", "answer")
my_query_string = my_query_string.replace("\"user_id\"", "user_id")

But I was wondering maybe there is better way to achieve this? By "better" I mean some function call that will prepare json/dictionary format for ready to be used GraphQL string.

Upvotes: 0

Views: 613

Answers (1)

john smith
john smith

Reputation: 5

I think this may help you find your final answer. Follow this article

gq = """
mutation ReorderProducts($id: ID!, $moves: [MoveInput!]!) {
    collectionReorderProducts(id: $id, moves: $moves) {
        job {
            id
            }
            userErrors {
                field
                message
            }
        }
    }
"""
resp = self.sy_graphql_client.execute(
    query=gq,
    variables={
        "id": before_collection_meta.coll_meta.id,
        "moves": list(map(lambda mtc:
            {
                "id": mtc.id, "newPosition": mtc.new_position
            }, move_to_commands))
    }
)

reorder_job_id = resp["data"]["collectionReorderProducts"]["job"]["id"]
self.sy_graphql_client.wait_for_job(reorder_job_id)

Upvotes: 1

Related Questions