<SYSTEM_TASK:>
Solve the following problem using Python, implementing the functions described below, one line at a time
<END_TASK>
<USER_TASK:>
Description:
 def make_target(url, extra_opts=None):
 """Factory that creates `_Target` objects from URLs. FTP targets must begin with the scheme ``ftp://`` or ``ftps://`` for TLS. Note: TLS is only supported on Python 2.7/3.2+. Args: url (str):
 extra_opts (dict, optional):
 Passed to Target constructor. Default: None. Returns: :class:`_Target` """

    # debug = extra_opts.get("debug", 1)
    parts = compat.urlparse(url, allow_fragments=False)
    # scheme is case-insensitive according to https://tools.ietf.org/html/rfc3986
    scheme = parts.scheme.lower()
    if scheme in ["ftp", "ftps"]:
        creds = parts.username, parts.password
        tls = scheme == "ftps"
        from ftpsync import ftp_target

        target = ftp_target.FtpTarget(
            parts.path,
            parts.hostname,
            parts.port,
            username=creds[0],
            password=creds[1],
            tls=tls,
            timeout=None,
            extra_opts=extra_opts,
        )
    else:
        target = FsTarget(url, extra_opts)

    return target