PageRenderTime 153ms CodeModel.GetById 144ms app.highlight 6ms RepoModel.GetById 1ms app.codeStats 0ms

/Lib/distutils/config.py

http://unladen-swallow.googlecode.com/
Python | 124 lines | 117 code | 2 blank | 5 comment | 0 complexity | 25995f9376917f9b68e02a454561ae1c MD5 | raw file
  1"""distutils.pypirc
  2
  3Provides the PyPIRCCommand class, the base class for the command classes
  4that uses .pypirc in the distutils.command package.
  5"""
  6import os
  7import sys
  8from ConfigParser import ConfigParser
  9
 10from distutils.cmd import Command
 11
 12DEFAULT_PYPIRC = """\
 13[distutils]
 14index-servers =
 15    pypi
 16
 17[pypi]
 18username:%s
 19password:%s
 20"""
 21
 22class PyPIRCCommand(Command):
 23    """Base command that knows how to handle the .pypirc file
 24    """
 25    DEFAULT_REPOSITORY = 'http://pypi.python.org/pypi'
 26    DEFAULT_REALM = 'pypi'
 27    repository = None
 28    realm = None
 29
 30    user_options = [
 31        ('repository=', 'r',
 32         "url of repository [default: %s]" % \
 33            DEFAULT_REPOSITORY),
 34        ('show-response', None,
 35         'display full response text from server')]
 36
 37    boolean_options = ['show-response']
 38
 39    def _get_rc_file(self):
 40        """Returns rc file path."""
 41        return os.path.join(os.path.expanduser('~'), '.pypirc')
 42
 43    def _store_pypirc(self, username, password):
 44        """Creates a default .pypirc file."""
 45        rc = self._get_rc_file()
 46        f = open(rc, 'w')
 47        try:
 48            f.write(DEFAULT_PYPIRC % (username, password))
 49        finally:
 50            f.close()
 51        try:
 52            os.chmod(rc, 0600)
 53        except OSError:
 54            # should do something better here
 55            pass
 56
 57    def _read_pypirc(self):
 58        """Reads the .pypirc file."""
 59        rc = self._get_rc_file()
 60        if os.path.exists(rc):
 61            self.announce('Using PyPI login from %s' % rc)
 62            repository = self.repository or self.DEFAULT_REPOSITORY
 63            realm = self.realm or self.DEFAULT_REALM
 64
 65            config = ConfigParser()
 66            config.read(rc)
 67            sections = config.sections()
 68            if 'distutils' in sections:
 69                # let's get the list of servers
 70                index_servers = config.get('distutils', 'index-servers')
 71                _servers = [server.strip() for server in
 72                            index_servers.split('\n')
 73                            if server.strip() != '']
 74                if _servers == []:
 75                    # nothing set, let's try to get the default pypi
 76                    if 'pypi' in sections:
 77                        _servers = ['pypi']
 78                    else:
 79                        # the file is not properly defined, returning
 80                        # an empty dict
 81                        return {}
 82                for server in _servers:
 83                    current = {'server': server}
 84                    current['username'] = config.get(server, 'username')
 85                    current['password'] = config.get(server, 'password')
 86
 87                    # optional params
 88                    for key, default in (('repository',
 89                                          self.DEFAULT_REPOSITORY),
 90                                         ('realm', self.DEFAULT_REALM)):
 91                        if config.has_option(server, key):
 92                            current[key] = config.get(server, key)
 93                        else:
 94                            current[key] = default
 95                    if (current['server'] == repository or
 96                        current['repository'] == repository):
 97                        return current
 98            elif 'server-login' in sections:
 99                # old format
100                server = 'server-login'
101                if config.has_option(server, 'repository'):
102                    repository = config.get(server, 'repository')
103                else:
104                    repository = self.DEFAULT_REPOSITORY
105                return {'username': config.get(server, 'username'),
106                        'password': config.get(server, 'password'),
107                        'repository': repository,
108                        'server': server,
109                        'realm': self.DEFAULT_REALM}
110
111        return {}
112
113    def initialize_options(self):
114        """Initialize options."""
115        self.repository = None
116        self.realm = None
117        self.show_response = 0
118
119    def finalize_options(self):
120        """Finalizes options."""
121        if self.repository is None:
122            self.repository = self.DEFAULT_REPOSITORY
123        if self.realm is None:
124            self.realm = self.DEFAULT_REALM