# Buggy code
def get_s3_connection(module, aws_connect_kwargs, location, rgw, s3_url):
    if s3_url and rgw:  # TODO - test this
        rgw = urlparse(s3_url)
        params = dict(
            module=module,
            conn_type="client",
            resource="s3",
            use_ssl=rgw.scheme == "https",
            region=location,
            endpoint=s3_url,
            **aws_connect_kwargs,
        )
    elif is_fakes3(s3_url):
        for kw in ["is_secure", "host", "port"] and list(aws_connect_kwargs.keys()):
            del aws_connect_kwargs[kw]
        fakes3 = urlparse(s3_url)
        if fakes3.scheme == "fakes3s":
            protocol = "https"
        else:
            protocol = "http"
        params = dict(
            service_name="s3",
            endpoint_url="%s://%s:%s"
            % (protocol, fakes3.hostname, to_text(fakes3.port)),
            use_ssl=fakes3.scheme == "fakes3s",
            region_name=None,
            **aws_connect_kwargs,
        )
    elif is_walrus(s3_url):
        walrus = urlparse(s3_url).hostname
        params = dict(
            module=module,
            conn_type="client",
            resource="s3",
            region=location,
            endpoint=walrus,
            **aws_connect_kwargs,
        )
    else:
        params = dict(
            module=module,
            conn_type="client",
            resource="s3",
            region=location,
            endpoint=s3_url,
            **aws_connect_kwargs,
        )
    return boto3_conn(**params)


# Traceback (TypeError)
The full traceback is:
Traceback (most recent call last):
File "/tmp/ansible_VZpvff/ansible_module_aws_s3.py", line 859, in <module>
main()
File "/tmp/ansible_VZpvff/ansible_module_aws_s3.py", line 674, in main
s3 = get_s3_connection(module, aws_connect_kwargs, location, rgw, s3_url)
File "/tmp/ansible_VZpvff/ansible_module_aws_s3.py", line 572, in get_s3_connection
return boto3_conn(**params)
TypeError: boto3_conn() takes at least 1 argument (0 given)

fatal: [localhost]: FAILED! => {
"changed": false,
"module_stderr": "Traceback (most recent call last):\n  File \"/tmp/ansible_VZpvff/ansible_module_aws_s3.py\", line 859, in <module>\n    main()\n  File \"/tmp/ansible_VZpvff/ansible_module_aws_s3.py\", line 674, in main\n    s3 = get_s3_connection(module, aws_connect_kwargs, location, rgw, s3_url)\n  File \"/tmp/ansible_VZpvff/ansible_module_aws_s3.py\", line 572, in get_s3_connection\n    return boto3_conn(**params)\nTypeError: boto3_conn() takes at least 1 argument (0 given)\n",
"module_stdout": "",
"msg": "MODULE FAILURE",
"rc": 0
}

# Fixed code
def get_s3_connection(module, aws_connect_kwargs, location, rgw, s3_url):
    if s3_url and rgw:  # TODO - test this
        rgw = urlparse(s3_url)
        params = dict(
            module=module,
            conn_type="client",
            resource="s3",
            use_ssl=rgw.scheme == "https",
            region=location,
            endpoint=s3_url,
            **aws_connect_kwargs,
        )
    elif is_fakes3(s3_url):
        fakes3 = urlparse(s3_url)
        port = fakes3.port
        if fakes3.scheme == "fakes3s":
            protocol = "https"
            if port is None:
                port = 443
        else:
            protocol = "http"
            if port is None:
                port = 80
        params = dict(
            module=module,
            conn_type="client",
            resource="s3",
            region=location,
            endpoint="%s://%s:%s" % (protocol, fakes3.hostname, to_text(port)),
            use_ssl=fakes3.scheme == "fakes3s",
            **aws_connect_kwargs,
        )
    elif is_walrus(s3_url):
        walrus = urlparse(s3_url).hostname
        params = dict(
            module=module,
            conn_type="client",
            resource="s3",
            region=location,
            endpoint=walrus,
            **aws_connect_kwargs,
        )
    else:
        params = dict(
            module=module,
            conn_type="client",
            resource="s3",
            region=location,
            endpoint=s3_url,
            **aws_connect_kwargs,
        )
    return boto3_conn(**params)