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'}
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With