(editable_req)
return package_name, url, None
Parses an editable requirement into:
        - a requirement name
        - an URL
        - extras
        - editable options
    Accepted requirements:
        svn+http://blahblah@rev#egg=Foobar[baz]&subdirectory=version_subdir
        .[some_extra]
Parses an editable requirement into:
        - a requirement name
        - an URL
        - extras
        - editable options
    Accepted requirements:
        svn+http://blahblah
Parses an editable requirement into : - a requirement name - an URL - extras - editable options Accepted requirements : svn + http : // blahblah
def parse_editable(editable_req):
    # type: (str) -> Tuple[Optional[str], str, Optional[Set[str]]]
    """Parses an editable requirement into:
        - a requirement name
        - an URL
        - extras
        - editable options
    Accepted requirements:
        svn+http://blahblah@rev#egg=Foobar[baz]&subdirectory=version_subdir
        .[some_extra]
    """

    url = editable_req

    # If a file path is specified with extras, strip off the extras.
    url_no_extras, extras = _strip_extras(url)

    if os.path.isdir(url_no_extras):
        if not os.path.exists(os.path.join(url_no_extras, 'setup.py')):
            msg = (
                'File "setup.py" not found. Directory cannot be installed '
                'in editable mode: {}'.format(os.path.abspath(url_no_extras))
            )
            pyproject_path = make_pyproject_path(url_no_extras)
            if os.path.isfile(pyproject_path):
                msg += (
                    '\n(A "pyproject.toml" file was found, but editable '
                    'mode currently requires a setup.py based build.)'
                )
            raise InstallationError(msg)

        # Treating it as code that has already been checked out
        url_no_extras = path_to_url(url_no_extras)

    if url_no_extras.lower().startswith('file:'):
        package_name = Link(url_no_extras).egg_fragment
        if extras:
            return (
                package_name,
                url_no_extras,
                Requirement("placeholder" + extras.lower()).extras,
            )
        else:
            return package_name, url_no_extras, None

    for version_control in vcs:
        if url.lower().startswith('%s:' % version_control):
            url = '%s+%s' % (version_control, url)
            break

    if '+' not in url:
        raise InstallationError(
            '{} is not a valid editable requirement. '
            'It should either be a path to a local project or a VCS URL '
            '(beginning with svn+, git+, hg+, or bzr+).'.format(editable_req)
        )

    vc_type = url.split('+', 1)[0].lower()

    if not vcs.get_backend(vc_type):
        error_message = 'For --editable=%s only ' % editable_req + \
            ', '.join([backend.name + '+URL' for backend in vcs.backends]) + \
            ' is currently supported'
        raise InstallationError(error_message)

    package_name = Link(url).egg_fragment
    if not package_name:
        raise InstallationError(
            "Could not detect requirement name for '%s', please specify one "
            "with #egg=your_package_name" % editable_req
        )
    return package_name, url, None
def parse_editable ( editable_req ) : # type: (str) -> Tuple[Optional[str], str, Optional[Set[str]]] url = editable_req # If a file path is specified with extras, strip off the extras. url_no_extras , extras = _strip_extras ( url ) if os . path . isdir ( url_no_extras ) : if not os . path . exists ( os . path . join ( url_no_extras , 'setup.py' ) ) : msg = ( 'File "setup.py" not found. Directory cannot be installed ' 'in editable mode: {}' . format ( os . path . abspath ( url_no_extras ) ) ) pyproject_path = make_pyproject_path ( url_no_extras ) if os . path . isfile ( pyproject_path ) : msg += ( '\n(A "pyproject.toml" file was found, but editable ' 'mode currently requires a setup.py based build.)' ) raise InstallationError ( msg ) # Treating it as code that has already been checked out url_no_extras = path_to_url ( url_no_extras ) if url_no_extras . lower ( ) . startswith ( 'file:' ) : package_name = Link ( url_no_extras ) . egg_fragment if extras : return ( package_name , url_no_extras , Requirement ( "placeholder" + extras . lower ( ) ) . extras , ) else : return package_name , url_no_extras , None for version_control in vcs : if url . lower ( ) . startswith ( '%s:' % version_control ) : url = '%s+%s' % ( version_control , url ) break if '+' not in url : raise InstallationError ( '{} is not a valid editable requirement. ' 'It should either be a path to a local project or a VCS URL ' '(beginning with svn+, git+, hg+, or bzr+).' . format ( editable_req ) ) vc_type = url . split ( '+' , 1 ) [ 0 ] . lower ( ) if not vcs . get_backend ( vc_type ) : error_message = 'For --editable=%s only ' % editable_req + ', ' . join ( [ backend . name + '+URL' for backend in vcs . backends ] ) + ' is currently supported' raise InstallationError ( error_message ) package_name = Link ( url ) . egg_fragment if not package_name : raise InstallationError ( "Could not detect requirement name for '%s', please specify one " "with #egg=your_package_name" % editable_req ) return package_name , url , None