def extract_credentials(self, url):
        """
        Extracts user/password from a url.

        Returns a tuple:
            (url-without-auth, username, password)
        """
        if isinstance(url, urllib2.Request):
            result = urlparse.urlsplit(url.get_full_url())
        else:
            result = urlparse.urlsplit(url)
        scheme, netloc, path, query, frag = result

        username, password = self.parse_credentials(netloc)
        if username is None:
            return url, None, None
        elif password is None and self.prompting:
            # remove the auth credentials from the url part
            netloc = netloc.replace('%s@' % username, '', 1)
            # prompt for the password
            prompt = 'Password for %s@%s: ' % (username, netloc)
            password = urllib.quote(getpass.getpass(prompt))
        else:
            # remove the auth credentials from the url part
            netloc = netloc.replace('%s:%s@' % (username, password), '', 1)

        target_url = urlparse.urlunsplit((scheme, netloc, path, query, frag))
        return target_url, username, password
Example #2
0
    def extract_credentials(self, url):
        """
        Extracts user/password from a url.

        Returns a tuple:
            (url-without-auth, username, password)
        """
        if isinstance(url, urllib2.Request):
            result = urlparse.urlsplit(url.get_full_url())
        else:
            result = urlparse.urlsplit(url)
        scheme, netloc, path, query, frag = result

        username, password = self.parse_credentials(netloc)
        if username is None:
            return url, None, None
        elif password is None and self.prompting:
            # remove the auth credentials from the url part
            netloc = netloc.replace('%s@' % username, '', 1)
            # prompt for the password
            prompt = 'Password for %s@%s: ' % (username, netloc)
            password = urllib.quote(getpass.getpass(prompt))
        else:
            # remove the auth credentials from the url part
            netloc = netloc.replace('%s:%s@' % (username, password), '', 1)

        target_url = urlparse.urlunsplit((scheme, netloc, path, query, frag))
        return target_url, username, password
Example #3
0
def get_rev_options(url, rev):
    if rev:
        rev_options = ['-r', rev]
    else:
        rev_options = []

    r = urlparse.urlsplit(url)
    if hasattr(r, 'username'):
        # >= Python-2.5
        username, password = r.username, r.password
    else:
        netloc = r[1]
        if '@' in netloc:
            auth = netloc.split('@')[0]
            if ':' in auth:
                username, password = auth.split(':', 1)
            else:
                username, password = auth, None
        else:
            username, password = None, None

    if username:
        rev_options += ['--username', username]
    if password:
        rev_options += ['--password', password]
    return rev_options
def get_rev_options(url, rev):
    if rev:
        rev_options = ["-r", rev]
    else:
        rev_options = []

    r = urlparse.urlsplit(url)
    if hasattr(r, "username"):
        # >= Python-2.5
        username, password = r.username, r.password
    else:
        netloc = r[1]
        if "@" in netloc:
            auth = netloc.split("@")[0]
            if ":" in auth:
                username, password = auth.split(":", 1)
            else:
                username, password = auth, None
        else:
            username, password = None, None

    if username:
        rev_options += ["--username", username]
    if password:
        rev_options += ["--password", password]
    return rev_options
Example #5
0
def get_rev_options(url, rev):
    if rev:
        rev_options = ['-r', rev]
    else:
        rev_options = []

    r = urlparse.urlsplit(url)
    if hasattr(r, 'username'):
        # >= Python-2.5
        username, password = r.username, r.password
    else:
        netloc = r[1]
        if '@' in netloc:
            auth = netloc.split('@')[0]
            if ':' in auth:
                username, password = auth.split(':', 1)
            else:
                username, password = auth, None
        else:
            username, password = None, None

    if username:
        rev_options += ['--username', username]
    if password:
        rev_options += ['--password', password]
    return rev_options
Example #6
0
 def get_url_rev(self):
     """
     Returns the correct repository URL and revision by parsing the given
     repository URL
     """
     url = self.url.split('+', 1)[1]
     scheme, netloc, path, query, frag = urlparse.urlsplit(url)
     rev = None
     if '@' in path:
         path, rev = path.rsplit('@', 1)
     url = urlparse.urlunsplit((scheme, netloc, path, query, ''))
     return url, rev
Example #7
0
    def _get_content_type(url, session=None):
        """Get the Content-Type of the given url, using a HEAD request"""
        if session is None:
            session = PipSession()

        scheme, netloc, path, query, fragment = urlparse.urlsplit(url)
        if scheme not in ('http', 'https', 'ftp', 'ftps'):
            # FIXME: some warning or something?
            # assertion error?
            return ''

        resp = session.head(url, allow_redirects=True)
        resp.raise_for_status()

        return resp.headers.get("Content-Type", "")
Example #8
0
    def _get_content_type(url, session=None):
        """Get the Content-Type of the given url, using a HEAD request"""
        if session is None:
            session = PipSession()

        scheme, netloc, path, query, fragment = urlparse.urlsplit(url)
        if not scheme in ('http', 'https', 'ftp', 'ftps'):
            ## FIXME: some warning or something?
            ## assertion error?
            return ''

        resp = session.head(url, allow_redirects=True)
        resp.raise_for_status()

        return resp.headers.get("Content-Type", "")
Example #9
0
 def _get_content_type(url):
     """Get the Content-Type of the given url, using a HEAD request"""
     scheme, netloc, path, query, fragment = urlparse.urlsplit(url)
     if not scheme in ('http', 'https', 'ftp', 'ftps'):
         ## FIXME: some warning or something?
         ## assertion error?
         return ''
     req = Urllib2HeadRequest(url, headers={'Host': netloc})
     resp = urlopen(req)
     try:
         if hasattr(resp, 'code') and resp.code != 200 and scheme not in ('ftp', 'ftps'):
             ## FIXME: doesn't handle redirects
             return ''
         return resp.info().get('content-type', '')
     finally:
         resp.close()
Example #10
0
 def get_url_rev(self):
     """
     Returns the correct repository URL and revision by parsing the given
     repository URL
     """
     error_message = ("Sorry, '%s' is a malformed VCS url. "
                      "The format is <vcs>+<protocol>://<url>, "
                      "e.g. svn+http://myrepo/svn/MyApp#egg=MyApp")
     assert '+' in self.url, error_message % self.url
     url = self.url.split('+', 1)[1]
     scheme, netloc, path, query, frag = urlparse.urlsplit(url)
     rev = None
     if '@' in path:
         path, rev = path.rsplit('@', 1)
     url = urlparse.urlunsplit((scheme, netloc, path, query, ''))
     return url, rev
 def _get_content_type(url):
     """Get the Content-Type of the given url, using a HEAD request"""
     scheme, netloc, path, query, fragment = urlparse.urlsplit(url)
     if not scheme in ('http', 'https', 'ftp', 'ftps'):
         ## FIXME: some warning or something?
         ## assertion error?
         return ''
     req = Urllib2HeadRequest(url, headers={'Host': netloc})
     resp = urlopen(req)
     try:
         if hasattr(resp, 'code') and resp.code != 200 and scheme not in ('ftp', 'ftps'):
             ## FIXME: doesn't handle redirects
             return ''
         return resp.info().get('content-type', '')
     finally:
         resp.close()
Example #12
0
 def get_url_rev(self):
     """
     Returns the correct repository URL and revision by parsing the given
     repository URL
     """
     error_message = (
        "Sorry, '%s' is a malformed VCS url. "
        "The format is <vcs>+<protocol>://<url>, "
        "e.g. svn+http://myrepo/svn/MyApp#egg=MyApp")
     assert '+' in self.url, error_message % self.url
     url = self.url.split('+', 1)[1]
     scheme, netloc, path, query, frag = urlparse.urlsplit(url)
     rev = None
     if '@' in path:
         path, rev = path.rsplit('@', 1)
     url = urlparse.urlunsplit((scheme, netloc, path, query, ''))
     return url, rev
Example #13
0
    def get_response(self, url, username=None, password=None):
        """
        does the dirty work of actually getting the rsponse object using urllib2
        and its HTTP auth builtins.
        """
        scheme, netloc, path, query, frag = urlparse.urlsplit(url)
        req = self.get_request(url)

        stored_username, stored_password = self.passman.find_user_password(None, netloc)
        # see if we have a password stored
        if stored_username is None:
            if username is None and self.prompting:
                username = urllib.quote(raw_input('User for %s: ' % netloc))
                password = urllib.quote(getpass.getpass('Password: '))
            if username and password:
                self.passman.add_password(None, netloc, username, password)
            stored_username, stored_password = self.passman.find_user_password(None, netloc)
        authhandler = urllib2.HTTPBasicAuthHandler(self.passman)
        opener = urllib2.build_opener(authhandler)
        # FIXME: should catch a 401 and offer to let the user reenter credentials
        return opener.open(req)
Example #14
0
    def get_response(self, url, username=None, password=None):
        """
        does the dirty work of actually getting the rsponse object using urllib2
        and its HTTP auth builtins.
        """
        scheme, netloc, path, query, frag = urlparse.urlsplit(url)
        req = self.get_request(url)

        stored_username, stored_password = self.passman.find_user_password(None, netloc)
        # see if we have a password stored
        if stored_username is None:
            if username is None and self.prompting:
                username = urllib.quote(raw_input('User for %s: ' % netloc))
                password = urllib.quote(getpass.getpass('Password: '))
            if username and password:
                self.passman.add_password(None, netloc, username, password)
            stored_username, stored_password = self.passman.find_user_password(None, netloc)
        authhandler = urllib2.HTTPBasicAuthHandler(self.passman)
        opener = urllib2.build_opener(authhandler)
        # FIXME: should catch a 401 and offer to let the user reenter credentials
        return opener.open(req)
Example #15
0
 def filename(self):
     _, netloc, path, _, _ = urlparse.urlsplit(self.url)
     name = posixpath.basename(path.rstrip('/')) or netloc
     assert name, ('URL %r produced no filename' % self.url)
     return name
Example #16
0
 def url_without_fragment(self):
     scheme, netloc, path, query, fragment = urlparse.urlsplit(self.url)
     return urlparse.urlunsplit((scheme, netloc, path, query, None))
Example #17
0
 def filename(self):
     _, netloc, path, _, _ = urlparse.urlsplit(self.url)
     name = posixpath.basename(path.rstrip('/')) or netloc
     assert name, ('URL %r produced no filename' % self.url)
     return name
Example #18
0
 def scheme(self):
     return urlparse.urlsplit(self.url)[0]
Example #19
0
 def url_without_fragment(self):
     scheme, netloc, path, query, fragment = urlparse.urlsplit(self.url)
     return urlparse.urlunsplit((scheme, netloc, path, query, None))
Example #20
0
 def scheme(self):
     return urlparse.urlsplit(self.url)[0]
Example #21
0
 def path(self):
     return urlparse.urlsplit(self.url)[2]
Example #22
0
 def path(self):
     return urlparse.urlsplit(self.url)[2]