I have a function that updates a record via an API. The API accepts a variety of optional keyword parameters:

def update_by_email(self, email=None, **kwargs):
    result = post(path='/do/update/email/{email}'.format(email=email), params=kwargs)

I have another function that uses the first function to update an individual field in the record:

def update_field(email=None, field=None, field_value=None):
    """Encoded parameter should be formatted as <field>=<field_value>"""
    request = update_by_email(email=email, field=field_value)

This doesn't work. When I call:

update_field(email='joe@me.com', field='name', field_value='joe')

the url is encoded as:

https://www.example.com/api/do/update/email/joe@me.com?field=Joe

How can I get it to encode as:

https://www.example.com/api/do/update/email/joe@me.com?name=Joe

Thank you in advance.

有帮助吗?

解决方案

Rather than passing the parameter named as field, you can use dictionary unpacking to use the value of field as the name of the parameter:

request = update_by_email(email, **{field: field_value})

Using a mock of update_by_email:

def update_by_email(email=None, **kwargs):
    print(kwargs)

When I call

update_field("joe@me.com", "name", "joe")

I see that kwargs inside update_by_email is

{'name': 'joe'}
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top