annotate Lib/distutils/config.py @ 54294:dba767bc3155 legacy-trunk

remove mention of old ctypes version
author Benjamin Peterson <benjamin@python.org>
date Sat, 23 May 2009 20:59:09 +0000
parents a3f329f23b23
children 3e2b7965ada9
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
46846
2ca7a2798161 #1858: add distutils.config module
Andrew M. Kuchling <amk@amk.ca>
parents:
diff changeset
1 """distutils.pypirc
2ca7a2798161 #1858: add distutils.config module
Andrew M. Kuchling <amk@amk.ca>
parents:
diff changeset
2
2ca7a2798161 #1858: add distutils.config module
Andrew M. Kuchling <amk@amk.ca>
parents:
diff changeset
3 Provides the PyPIRCCommand class, the base class for the command classes
2ca7a2798161 #1858: add distutils.config module
Andrew M. Kuchling <amk@amk.ca>
parents:
diff changeset
4 that uses .pypirc in the distutils.command package.
2ca7a2798161 #1858: add distutils.config module
Andrew M. Kuchling <amk@amk.ca>
parents:
diff changeset
5 """
2ca7a2798161 #1858: add distutils.config module
Andrew M. Kuchling <amk@amk.ca>
parents:
diff changeset
6 import os
2ca7a2798161 #1858: add distutils.config module
Andrew M. Kuchling <amk@amk.ca>
parents:
diff changeset
7 import sys
47252
e534ee0a4cd0 ConfigParser renaming reversal part 3: move module into place and adapt imports.
Georg Brandl <georg@python.org>
parents: 47236
diff changeset
8 from ConfigParser import ConfigParser
46846
2ca7a2798161 #1858: add distutils.config module
Andrew M. Kuchling <amk@amk.ca>
parents:
diff changeset
9
47058
91896227272a Import class from distutils.cmd, not .core, to avoid circular import
Andrew M. Kuchling <amk@amk.ca>
parents: 47057
diff changeset
10 from distutils.cmd import Command
46846
2ca7a2798161 #1858: add distutils.config module
Andrew M. Kuchling <amk@amk.ca>
parents:
diff changeset
11
2ca7a2798161 #1858: add distutils.config module
Andrew M. Kuchling <amk@amk.ca>
parents:
diff changeset
12 DEFAULT_PYPIRC = """\
50298
fb150fcf165d Merged revisions 67926 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents: 47252
diff changeset
13 [distutils]
fb150fcf165d Merged revisions 67926 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents: 47252
diff changeset
14 index-servers =
46846
2ca7a2798161 #1858: add distutils.config module
Andrew M. Kuchling <amk@amk.ca>
parents:
diff changeset
15 pypi
2ca7a2798161 #1858: add distutils.config module
Andrew M. Kuchling <amk@amk.ca>
parents:
diff changeset
16
2ca7a2798161 #1858: add distutils.config module
Andrew M. Kuchling <amk@amk.ca>
parents:
diff changeset
17 [pypi]
2ca7a2798161 #1858: add distutils.config module
Andrew M. Kuchling <amk@amk.ca>
parents:
diff changeset
18 username:%s
2ca7a2798161 #1858: add distutils.config module
Andrew M. Kuchling <amk@amk.ca>
parents:
diff changeset
19 password:%s
2ca7a2798161 #1858: add distutils.config module
Andrew M. Kuchling <amk@amk.ca>
parents:
diff changeset
20 """
2ca7a2798161 #1858: add distutils.config module
Andrew M. Kuchling <amk@amk.ca>
parents:
diff changeset
21
2ca7a2798161 #1858: add distutils.config module
Andrew M. Kuchling <amk@amk.ca>
parents:
diff changeset
22 class PyPIRCCommand(Command):
2ca7a2798161 #1858: add distutils.config module
Andrew M. Kuchling <amk@amk.ca>
parents:
diff changeset
23 """Base command that knows how to handle the .pypirc file
2ca7a2798161 #1858: add distutils.config module
Andrew M. Kuchling <amk@amk.ca>
parents:
diff changeset
24 """
2ca7a2798161 #1858: add distutils.config module
Andrew M. Kuchling <amk@amk.ca>
parents:
diff changeset
25 DEFAULT_REPOSITORY = 'http://pypi.python.org/pypi'
2ca7a2798161 #1858: add distutils.config module
Andrew M. Kuchling <amk@amk.ca>
parents:
diff changeset
26 DEFAULT_REALM = 'pypi'
2ca7a2798161 #1858: add distutils.config module
Andrew M. Kuchling <amk@amk.ca>
parents:
diff changeset
27 repository = None
2ca7a2798161 #1858: add distutils.config module
Andrew M. Kuchling <amk@amk.ca>
parents:
diff changeset
28 realm = None
2ca7a2798161 #1858: add distutils.config module
Andrew M. Kuchling <amk@amk.ca>
parents:
diff changeset
29
2ca7a2798161 #1858: add distutils.config module
Andrew M. Kuchling <amk@amk.ca>
parents:
diff changeset
30 user_options = [
2ca7a2798161 #1858: add distutils.config module
Andrew M. Kuchling <amk@amk.ca>
parents:
diff changeset
31 ('repository=', 'r',
2ca7a2798161 #1858: add distutils.config module
Andrew M. Kuchling <amk@amk.ca>
parents:
diff changeset
32 "url of repository [default: %s]" % \
2ca7a2798161 #1858: add distutils.config module
Andrew M. Kuchling <amk@amk.ca>
parents:
diff changeset
33 DEFAULT_REPOSITORY),
2ca7a2798161 #1858: add distutils.config module
Andrew M. Kuchling <amk@amk.ca>
parents:
diff changeset
34 ('show-response', None,
2ca7a2798161 #1858: add distutils.config module
Andrew M. Kuchling <amk@amk.ca>
parents:
diff changeset
35 'display full response text from server')]
2ca7a2798161 #1858: add distutils.config module
Andrew M. Kuchling <amk@amk.ca>
parents:
diff changeset
36
2ca7a2798161 #1858: add distutils.config module
Andrew M. Kuchling <amk@amk.ca>
parents:
diff changeset
37 boolean_options = ['show-response']
2ca7a2798161 #1858: add distutils.config module
Andrew M. Kuchling <amk@amk.ca>
parents:
diff changeset
38
2ca7a2798161 #1858: add distutils.config module
Andrew M. Kuchling <amk@amk.ca>
parents:
diff changeset
39 def _get_rc_file(self):
2ca7a2798161 #1858: add distutils.config module
Andrew M. Kuchling <amk@amk.ca>
parents:
diff changeset
40 """Returns rc file path."""
2ca7a2798161 #1858: add distutils.config module
Andrew M. Kuchling <amk@amk.ca>
parents:
diff changeset
41 return os.path.join(os.path.expanduser('~'), '.pypirc')
2ca7a2798161 #1858: add distutils.config module
Andrew M. Kuchling <amk@amk.ca>
parents:
diff changeset
42
2ca7a2798161 #1858: add distutils.config module
Andrew M. Kuchling <amk@amk.ca>
parents:
diff changeset
43 def _store_pypirc(self, username, password):
2ca7a2798161 #1858: add distutils.config module
Andrew M. Kuchling <amk@amk.ca>
parents:
diff changeset
44 """Creates a default .pypirc file."""
2ca7a2798161 #1858: add distutils.config module
Andrew M. Kuchling <amk@amk.ca>
parents:
diff changeset
45 rc = self._get_rc_file()
2ca7a2798161 #1858: add distutils.config module
Andrew M. Kuchling <amk@amk.ca>
parents:
diff changeset
46 f = open(rc, 'w')
2ca7a2798161 #1858: add distutils.config module
Andrew M. Kuchling <amk@amk.ca>
parents:
diff changeset
47 try:
2ca7a2798161 #1858: add distutils.config module
Andrew M. Kuchling <amk@amk.ca>
parents:
diff changeset
48 f.write(DEFAULT_PYPIRC % (username, password))
2ca7a2798161 #1858: add distutils.config module
Andrew M. Kuchling <amk@amk.ca>
parents:
diff changeset
49 finally:
2ca7a2798161 #1858: add distutils.config module
Andrew M. Kuchling <amk@amk.ca>
parents:
diff changeset
50 f.close()
2ca7a2798161 #1858: add distutils.config module
Andrew M. Kuchling <amk@amk.ca>
parents:
diff changeset
51 try:
2ca7a2798161 #1858: add distutils.config module
Andrew M. Kuchling <amk@amk.ca>
parents:
diff changeset
52 os.chmod(rc, 0600)
2ca7a2798161 #1858: add distutils.config module
Andrew M. Kuchling <amk@amk.ca>
parents:
diff changeset
53 except OSError:
2ca7a2798161 #1858: add distutils.config module
Andrew M. Kuchling <amk@amk.ca>
parents:
diff changeset
54 # should do something better here
2ca7a2798161 #1858: add distutils.config module
Andrew M. Kuchling <amk@amk.ca>
parents:
diff changeset
55 pass
2ca7a2798161 #1858: add distutils.config module
Andrew M. Kuchling <amk@amk.ca>
parents:
diff changeset
56
2ca7a2798161 #1858: add distutils.config module
Andrew M. Kuchling <amk@amk.ca>
parents:
diff changeset
57 def _read_pypirc(self):
2ca7a2798161 #1858: add distutils.config module
Andrew M. Kuchling <amk@amk.ca>
parents:
diff changeset
58 """Reads the .pypirc file."""
2ca7a2798161 #1858: add distutils.config module
Andrew M. Kuchling <amk@amk.ca>
parents:
diff changeset
59 rc = self._get_rc_file()
2ca7a2798161 #1858: add distutils.config module
Andrew M. Kuchling <amk@amk.ca>
parents:
diff changeset
60 if os.path.exists(rc):
47236
0d0d9641f9bd Use announce instead of print, to suppress output in
Martin v. Löwis <martin@v.loewis.de>
parents: 47078
diff changeset
61 self.announce('Using PyPI login from %s' % rc)
46846
2ca7a2798161 #1858: add distutils.config module
Andrew M. Kuchling <amk@amk.ca>
parents:
diff changeset
62 repository = self.repository or self.DEFAULT_REPOSITORY
2ca7a2798161 #1858: add distutils.config module
Andrew M. Kuchling <amk@amk.ca>
parents:
diff changeset
63 realm = self.realm or self.DEFAULT_REALM
2ca7a2798161 #1858: add distutils.config module
Andrew M. Kuchling <amk@amk.ca>
parents:
diff changeset
64
2ca7a2798161 #1858: add distutils.config module
Andrew M. Kuchling <amk@amk.ca>
parents:
diff changeset
65 config = ConfigParser()
2ca7a2798161 #1858: add distutils.config module
Andrew M. Kuchling <amk@amk.ca>
parents:
diff changeset
66 config.read(rc)
2ca7a2798161 #1858: add distutils.config module
Andrew M. Kuchling <amk@amk.ca>
parents:
diff changeset
67 sections = config.sections()
2ca7a2798161 #1858: add distutils.config module
Andrew M. Kuchling <amk@amk.ca>
parents:
diff changeset
68 if 'distutils' in sections:
2ca7a2798161 #1858: add distutils.config module
Andrew M. Kuchling <amk@amk.ca>
parents:
diff changeset
69 # let's get the list of servers
2ca7a2798161 #1858: add distutils.config module
Andrew M. Kuchling <amk@amk.ca>
parents:
diff changeset
70 index_servers = config.get('distutils', 'index-servers')
2ca7a2798161 #1858: add distutils.config module
Andrew M. Kuchling <amk@amk.ca>
parents:
diff changeset
71 _servers = [server.strip() for server in
2ca7a2798161 #1858: add distutils.config module
Andrew M. Kuchling <amk@amk.ca>
parents:
diff changeset
72 index_servers.split('\n')
2ca7a2798161 #1858: add distutils.config module
Andrew M. Kuchling <amk@amk.ca>
parents:
diff changeset
73 if server.strip() != '']
2ca7a2798161 #1858: add distutils.config module
Andrew M. Kuchling <amk@amk.ca>
parents:
diff changeset
74 if _servers == []:
2ca7a2798161 #1858: add distutils.config module
Andrew M. Kuchling <amk@amk.ca>
parents:
diff changeset
75 # nothing set, let's try to get the default pypi
2ca7a2798161 #1858: add distutils.config module
Andrew M. Kuchling <amk@amk.ca>
parents:
diff changeset
76 if 'pypi' in sections:
2ca7a2798161 #1858: add distutils.config module
Andrew M. Kuchling <amk@amk.ca>
parents:
diff changeset
77 _servers = ['pypi']
2ca7a2798161 #1858: add distutils.config module
Andrew M. Kuchling <amk@amk.ca>
parents:
diff changeset
78 else:
2ca7a2798161 #1858: add distutils.config module
Andrew M. Kuchling <amk@amk.ca>
parents:
diff changeset
79 # the file is not properly defined, returning
2ca7a2798161 #1858: add distutils.config module
Andrew M. Kuchling <amk@amk.ca>
parents:
diff changeset
80 # an empty dict
2ca7a2798161 #1858: add distutils.config module
Andrew M. Kuchling <amk@amk.ca>
parents:
diff changeset
81 return {}
2ca7a2798161 #1858: add distutils.config module
Andrew M. Kuchling <amk@amk.ca>
parents:
diff changeset
82 for server in _servers:
2ca7a2798161 #1858: add distutils.config module
Andrew M. Kuchling <amk@amk.ca>
parents:
diff changeset
83 current = {'server': server}
2ca7a2798161 #1858: add distutils.config module
Andrew M. Kuchling <amk@amk.ca>
parents:
diff changeset
84 current['username'] = config.get(server, 'username')
2ca7a2798161 #1858: add distutils.config module
Andrew M. Kuchling <amk@amk.ca>
parents:
diff changeset
85
2ca7a2798161 #1858: add distutils.config module
Andrew M. Kuchling <amk@amk.ca>
parents:
diff changeset
86 # optional params
2ca7a2798161 #1858: add distutils.config module
Andrew M. Kuchling <amk@amk.ca>
parents:
diff changeset
87 for key, default in (('repository',
2ca7a2798161 #1858: add distutils.config module
Andrew M. Kuchling <amk@amk.ca>
parents:
diff changeset
88 self.DEFAULT_REPOSITORY),
50637
a3f329f23b23 fixed #4394 make the storage of the password optional in .pypirc
Tarek Ziadé <ziade.tarek@gmail.com>
parents: 50298
diff changeset
89 ('realm', self.DEFAULT_REALM),
a3f329f23b23 fixed #4394 make the storage of the password optional in .pypirc
Tarek Ziadé <ziade.tarek@gmail.com>
parents: 50298
diff changeset
90 ('password', None)):
46846
2ca7a2798161 #1858: add distutils.config module
Andrew M. Kuchling <amk@amk.ca>
parents:
diff changeset
91 if config.has_option(server, key):
2ca7a2798161 #1858: add distutils.config module
Andrew M. Kuchling <amk@amk.ca>
parents:
diff changeset
92 current[key] = config.get(server, key)
2ca7a2798161 #1858: add distutils.config module
Andrew M. Kuchling <amk@amk.ca>
parents:
diff changeset
93 else:
2ca7a2798161 #1858: add distutils.config module
Andrew M. Kuchling <amk@amk.ca>
parents:
diff changeset
94 current[key] = default
2ca7a2798161 #1858: add distutils.config module
Andrew M. Kuchling <amk@amk.ca>
parents:
diff changeset
95 if (current['server'] == repository or
2ca7a2798161 #1858: add distutils.config module
Andrew M. Kuchling <amk@amk.ca>
parents:
diff changeset
96 current['repository'] == repository):
2ca7a2798161 #1858: add distutils.config module
Andrew M. Kuchling <amk@amk.ca>
parents:
diff changeset
97 return current
2ca7a2798161 #1858: add distutils.config module
Andrew M. Kuchling <amk@amk.ca>
parents:
diff changeset
98 elif 'server-login' in sections:
2ca7a2798161 #1858: add distutils.config module
Andrew M. Kuchling <amk@amk.ca>
parents:
diff changeset
99 # old format
2ca7a2798161 #1858: add distutils.config module
Andrew M. Kuchling <amk@amk.ca>
parents:
diff changeset
100 server = 'server-login'
2ca7a2798161 #1858: add distutils.config module
Andrew M. Kuchling <amk@amk.ca>
parents:
diff changeset
101 if config.has_option(server, 'repository'):
2ca7a2798161 #1858: add distutils.config module
Andrew M. Kuchling <amk@amk.ca>
parents:
diff changeset
102 repository = config.get(server, 'repository')
2ca7a2798161 #1858: add distutils.config module
Andrew M. Kuchling <amk@amk.ca>
parents:
diff changeset
103 else:
2ca7a2798161 #1858: add distutils.config module
Andrew M. Kuchling <amk@amk.ca>
parents:
diff changeset
104 repository = self.DEFAULT_REPOSITORY
2ca7a2798161 #1858: add distutils.config module
Andrew M. Kuchling <amk@amk.ca>
parents:
diff changeset
105 return {'username': config.get(server, 'username'),
2ca7a2798161 #1858: add distutils.config module
Andrew M. Kuchling <amk@amk.ca>
parents:
diff changeset
106 'password': config.get(server, 'password'),
2ca7a2798161 #1858: add distutils.config module
Andrew M. Kuchling <amk@amk.ca>
parents:
diff changeset
107 'repository': repository,
2ca7a2798161 #1858: add distutils.config module
Andrew M. Kuchling <amk@amk.ca>
parents:
diff changeset
108 'server': server,
2ca7a2798161 #1858: add distutils.config module
Andrew M. Kuchling <amk@amk.ca>
parents:
diff changeset
109 'realm': self.DEFAULT_REALM}
2ca7a2798161 #1858: add distutils.config module
Andrew M. Kuchling <amk@amk.ca>
parents:
diff changeset
110
2ca7a2798161 #1858: add distutils.config module
Andrew M. Kuchling <amk@amk.ca>
parents:
diff changeset
111 return {}
2ca7a2798161 #1858: add distutils.config module
Andrew M. Kuchling <amk@amk.ca>
parents:
diff changeset
112
2ca7a2798161 #1858: add distutils.config module
Andrew M. Kuchling <amk@amk.ca>
parents:
diff changeset
113 def initialize_options(self):
2ca7a2798161 #1858: add distutils.config module
Andrew M. Kuchling <amk@amk.ca>
parents:
diff changeset
114 """Initialize options."""
2ca7a2798161 #1858: add distutils.config module
Andrew M. Kuchling <amk@amk.ca>
parents:
diff changeset
115 self.repository = None
2ca7a2798161 #1858: add distutils.config module
Andrew M. Kuchling <amk@amk.ca>
parents:
diff changeset
116 self.realm = None
2ca7a2798161 #1858: add distutils.config module
Andrew M. Kuchling <amk@amk.ca>
parents:
diff changeset
117 self.show_response = 0
2ca7a2798161 #1858: add distutils.config module
Andrew M. Kuchling <amk@amk.ca>
parents:
diff changeset
118
2ca7a2798161 #1858: add distutils.config module
Andrew M. Kuchling <amk@amk.ca>
parents:
diff changeset
119 def finalize_options(self):
2ca7a2798161 #1858: add distutils.config module
Andrew M. Kuchling <amk@amk.ca>
parents:
diff changeset
120 """Finalizes options."""
2ca7a2798161 #1858: add distutils.config module
Andrew M. Kuchling <amk@amk.ca>
parents:
diff changeset
121 if self.repository is None:
2ca7a2798161 #1858: add distutils.config module
Andrew M. Kuchling <amk@amk.ca>
parents:
diff changeset
122 self.repository = self.DEFAULT_REPOSITORY
2ca7a2798161 #1858: add distutils.config module
Andrew M. Kuchling <amk@amk.ca>
parents:
diff changeset
123 if self.realm is None:
2ca7a2798161 #1858: add distutils.config module
Andrew M. Kuchling <amk@amk.ca>
parents:
diff changeset
124 self.realm = self.DEFAULT_REALM