문제

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