hcloud-python icon indicating copy to clipboard operation
hcloud-python copied to clipboard

Ensure some keyword arguments are passed as such

Open jooola opened this issue 1 year ago • 2 comments

Feature Request

In the current API, we define functions with arguments without forcing those arguments to be keyword arguments.

This is fine as long as we don't introduce new fields in the middle of the argument list.

For example:

def get_list(
    name=None,
    architecture=None,
    page=None,  
    per_page=None, 
):
    pass

get_list(name, architecture, 2, 100)

If we add an extra field, we want to keep the organization logic and put the argument before the pagination argument:

 def get_list(
     name=None,
     architecture=None,
+   some_field=None,
     page=None,  
     per_page=None, 
 ):
     pass

But the above would introduce a breaking change for the function call we previously defined:

get_list(name, architecture, 2, 100) # some_field=2, page=100

Describe the solution you'd like

In Python, we can set at which point in the argument list, the argument MUST be keyword arguments:

def get_list(
    name=None,
    *,
    architecture=None,
    page=None,  
    per_page=None, 
):
    pass

This will force the users to use kwargs like the following:

get_list(name, architecture=architecture, page=2, per_page=100)

Using this will allow us adding fields without risk of breaking someone's code.

This is breaking change, this can only happen in v2.0.0.

jooola avatar Jun 26 '23 12:06 jooola