annotate Lib/distutils/config.py @ 79675:c0a2294de787 2.7

Issue #16199: Backport 2to3 typo fix from 3.2.
author Chris Jerdonek <chris.jerdonek@gmail.com>
date Thu, 11 Oct 2012 16:15:46 -0700
parents f833e7ec4de1
children d9fe5b5a8110
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
47252
e534ee0a4cd0 ConfigParser renaming reversal part 3: move module into place and adapt imports.
Georg Brandl <georg@python.org>
parents: 47236
diff changeset
7 from ConfigParser import ConfigParser
46846
2ca7a2798161 #1858: add distutils.config module
Andrew M. Kuchling <amk@amk.ca>
parents:
diff changeset
8
47058
91896227272a Import class from distutils.cmd, not .core, to avoid circular import
Andrew M. Kuchling <amk@amk.ca>
parents: 47057
diff changeset
9 from distutils.cmd import Command
46846
2ca7a2798161 #1858: add distutils.config module
Andrew M. Kuchling <amk@amk.ca>
parents:
diff changeset
10
2ca7a2798161 #1858: add distutils.config module
Andrew M. Kuchling <amk@amk.ca>
parents:
diff changeset
11 DEFAULT_PYPIRC = """\
50298
fb150fcf165d Merged revisions 67926 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents: 47252
diff changeset
12 [distutils]
fb150fcf165d Merged revisions 67926 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents: 47252
diff changeset
13 index-servers =
46846
2ca7a2798161 #1858: add distutils.config module
Andrew M. Kuchling <amk@amk.ca>
parents:
diff changeset
14 pypi
2ca7a2798161 #1858: add distutils.config module
Andrew M. Kuchling <amk@amk.ca>
parents:
diff changeset
15
2ca7a2798161 #1858: add distutils.config module
Andrew M. Kuchling <amk@amk.ca>
parents:
diff changeset
16 [pypi]
2ca7a2798161 #1858: add distutils.config module
Andrew M. Kuchling <amk@amk.ca>
parents:
diff changeset
17 username:%s
2ca7a2798161 #1858: add distutils.config module
Andrew M. Kuchling <amk@amk.ca>
parents:
diff changeset
18 password:%s
2ca7a2798161 #1858: add distutils.config module
Andrew M. Kuchling <amk@amk.ca>
parents:
diff changeset
19 """
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 class PyPIRCCommand(Command):
2ca7a2798161 #1858: add distutils.config module
Andrew M. Kuchling <amk@amk.ca>
parents:
diff changeset
22 """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
23 """
2ca7a2798161 #1858: add distutils.config module
Andrew M. Kuchling <amk@amk.ca>
parents:
diff changeset
24 DEFAULT_REPOSITORY = 'http://pypi.python.org/pypi'
2ca7a2798161 #1858: add distutils.config module
Andrew M. Kuchling <amk@amk.ca>
parents:
diff changeset
25 DEFAULT_REALM = 'pypi'
2ca7a2798161 #1858: add distutils.config module
Andrew M. Kuchling <amk@amk.ca>
parents:
diff changeset
26 repository = None
2ca7a2798161 #1858: add distutils.config module
Andrew M. Kuchling <amk@amk.ca>
parents:
diff changeset
27 realm = None
2ca7a2798161 #1858: add distutils.config module
Andrew M. Kuchling <amk@amk.ca>
parents:
diff changeset
28
2ca7a2798161 #1858: add distutils.config module
Andrew M. Kuchling <amk@amk.ca>
parents:
diff changeset
29 user_options = [
2ca7a2798161 #1858: add distutils.config module
Andrew M. Kuchling <amk@amk.ca>
parents:
diff changeset
30 ('repository=', 'r',
2ca7a2798161 #1858: add distutils.config module
Andrew M. Kuchling <amk@amk.ca>
parents:
diff changeset
31 "url of repository [default: %s]" % \
2ca7a2798161 #1858: add distutils.config module
Andrew M. Kuchling <amk@amk.ca>
parents:
diff changeset
32 DEFAULT_REPOSITORY),
2ca7a2798161 #1858: add distutils.config module
Andrew M. Kuchling <amk@amk.ca>
parents:
diff changeset
33 ('show-response', None,
2ca7a2798161 #1858: add distutils.config module
Andrew M. Kuchling <amk@amk.ca>
parents:
diff changeset
34 'display full response text from server')]
2ca7a2798161 #1858: add distutils.config module
Andrew M. Kuchling <amk@amk.ca>
parents:
diff changeset
35
2ca7a2798161 #1858: add distutils.config module
Andrew M. Kuchling <amk@amk.ca>
parents:
diff changeset
36 boolean_options = ['show-response']
2ca7a2798161 #1858: add distutils.config module
Andrew M. Kuchling <amk@amk.ca>
parents:
diff changeset
37
2ca7a2798161 #1858: add distutils.config module
Andrew M. Kuchling <amk@amk.ca>
parents:
diff changeset
38 def _get_rc_file(self):
2ca7a2798161 #1858: add distutils.config module
Andrew M. Kuchling <amk@amk.ca>
parents:
diff changeset
39 """Returns rc file path."""
2ca7a2798161 #1858: add distutils.config module
Andrew M. Kuchling <amk@amk.ca>
parents:
diff changeset
40 return os.path.join(os.path.expanduser('~'), '.pypirc')
2ca7a2798161 #1858: add distutils.config module
Andrew M. Kuchling <amk@amk.ca>
parents:
diff changeset
41
2ca7a2798161 #1858: add distutils.config module
Andrew M. Kuchling <amk@amk.ca>
parents:
diff changeset
42 def _store_pypirc(self, username, password):
2ca7a2798161 #1858: add distutils.config module
Andrew M. Kuchling <amk@amk.ca>
parents:
diff changeset
43 """Creates a default .pypirc file."""
2ca7a2798161 #1858: add distutils.config module
Andrew M. Kuchling <amk@amk.ca>
parents:
diff changeset
44 rc = self._get_rc_file()
77927
f833e7ec4de1 Create ~/.pypirc securely (#13512).
Éric Araujo <merwok@netwok.org>
parents: 57847
diff changeset
45 f = os.fdopen(os.open(rc, os.O_CREAT | os.O_WRONLY, 0600), 'w')
46846
2ca7a2798161 #1858: add distutils.config module
Andrew M. Kuchling <amk@amk.ca>
parents:
diff changeset
46 try:
2ca7a2798161 #1858: add distutils.config module
Andrew M. Kuchling <amk@amk.ca>
parents:
diff changeset
47 f.write(DEFAULT_PYPIRC % (username, password))
2ca7a2798161 #1858: add distutils.config module
Andrew M. Kuchling <amk@amk.ca>
parents:
diff changeset
48 finally:
2ca7a2798161 #1858: add distutils.config module
Andrew M. Kuchling <amk@amk.ca>
parents:
diff changeset
49 f.close()
2ca7a2798161 #1858: add distutils.config module
Andrew M. Kuchling <amk@amk.ca>
parents:
diff changeset
50 try:
2ca7a2798161 #1858: add distutils.config module
Andrew M. Kuchling <amk@amk.ca>
parents:
diff changeset
51 os.chmod(rc, 0600)
2ca7a2798161 #1858: add distutils.config module
Andrew M. Kuchling <amk@amk.ca>
parents:
diff changeset
52 except OSError:
2ca7a2798161 #1858: add distutils.config module
Andrew M. Kuchling <amk@amk.ca>
parents:
diff changeset
53 # should do something better here
2ca7a2798161 #1858: add distutils.config module
Andrew M. Kuchling <amk@amk.ca>
parents:
diff changeset
54 pass
2ca7a2798161 #1858: add distutils.config module
Andrew M. Kuchling <amk@amk.ca>
parents:
diff changeset
55
2ca7a2798161 #1858: add distutils.config module
Andrew M. Kuchling <amk@amk.ca>
parents:
diff changeset
56 def _read_pypirc(self):
2ca7a2798161 #1858: add distutils.config module
Andrew M. Kuchling <amk@amk.ca>
parents:
diff changeset
57 """Reads the .pypirc file."""
2ca7a2798161 #1858: add distutils.config module
Andrew M. Kuchling <amk@amk.ca>
parents:
diff changeset
58 rc = self._get_rc_file()
2ca7a2798161 #1858: add distutils.config module
Andrew M. Kuchling <amk@amk.ca>
parents:
diff changeset
59 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
60 self.announce('Using PyPI login from %s' % rc)
46846
2ca7a2798161 #1858: add distutils.config module
Andrew M. Kuchling <amk@amk.ca>
parents:
diff changeset
61 repository = self.repository or self.DEFAULT_REPOSITORY
2ca7a2798161 #1858: add distutils.config module
Andrew M. Kuchling <amk@amk.ca>
parents:
diff changeset
62 config = ConfigParser()
2ca7a2798161 #1858: add distutils.config module
Andrew M. Kuchling <amk@amk.ca>
parents:
diff changeset
63 config.read(rc)
2ca7a2798161 #1858: add distutils.config module
Andrew M. Kuchling <amk@amk.ca>
parents:
diff changeset
64 sections = config.sections()
2ca7a2798161 #1858: add distutils.config module
Andrew M. Kuchling <amk@amk.ca>
parents:
diff changeset
65 if 'distutils' in sections:
2ca7a2798161 #1858: add distutils.config module
Andrew M. Kuchling <amk@amk.ca>
parents:
diff changeset
66 # let's get the list of servers
2ca7a2798161 #1858: add distutils.config module
Andrew M. Kuchling <amk@amk.ca>
parents:
diff changeset
67 index_servers = config.get('distutils', 'index-servers')
2ca7a2798161 #1858: add distutils.config module
Andrew M. Kuchling <amk@amk.ca>
parents:
diff changeset
68 _servers = [server.strip() for server in
2ca7a2798161 #1858: add distutils.config module
Andrew M. Kuchling <amk@amk.ca>
parents:
diff changeset
69 index_servers.split('\n')
2ca7a2798161 #1858: add distutils.config module
Andrew M. Kuchling <amk@amk.ca>
parents:
diff changeset
70 if server.strip() != '']
2ca7a2798161 #1858: add distutils.config module
Andrew M. Kuchling <amk@amk.ca>
parents:
diff changeset
71 if _servers == []:
2ca7a2798161 #1858: add distutils.config module
Andrew M. Kuchling <amk@amk.ca>
parents:
diff changeset
72 # 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
73 if 'pypi' in sections:
2ca7a2798161 #1858: add distutils.config module
Andrew M. Kuchling <amk@amk.ca>
parents:
diff changeset
74 _servers = ['pypi']
2ca7a2798161 #1858: add distutils.config module
Andrew M. Kuchling <amk@amk.ca>
parents:
diff changeset
75 else:
2ca7a2798161 #1858: add distutils.config module
Andrew M. Kuchling <amk@amk.ca>
parents:
diff changeset
76 # the file is not properly defined, returning
2ca7a2798161 #1858: add distutils.config module
Andrew M. Kuchling <amk@amk.ca>
parents:
diff changeset
77 # an empty dict
2ca7a2798161 #1858: add distutils.config module
Andrew M. Kuchling <amk@amk.ca>
parents:
diff changeset
78 return {}
2ca7a2798161 #1858: add distutils.config module
Andrew M. Kuchling <amk@amk.ca>
parents:
diff changeset
79 for server in _servers:
2ca7a2798161 #1858: add distutils.config module
Andrew M. Kuchling <amk@amk.ca>
parents:
diff changeset
80 current = {'server': server}
2ca7a2798161 #1858: add distutils.config module
Andrew M. Kuchling <amk@amk.ca>
parents:
diff changeset
81 current['username'] = config.get(server, 'username')
2ca7a2798161 #1858: add distutils.config module
Andrew M. Kuchling <amk@amk.ca>
parents:
diff changeset
82
2ca7a2798161 #1858: add distutils.config module
Andrew M. Kuchling <amk@amk.ca>
parents:
diff changeset
83 # optional params
2ca7a2798161 #1858: add distutils.config module
Andrew M. Kuchling <amk@amk.ca>
parents:
diff changeset
84 for key, default in (('repository',
2ca7a2798161 #1858: add distutils.config module
Andrew M. Kuchling <amk@amk.ca>
parents:
diff changeset
85 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
86 ('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
87 ('password', None)):
46846
2ca7a2798161 #1858: add distutils.config module
Andrew M. Kuchling <amk@amk.ca>
parents:
diff changeset
88 if config.has_option(server, key):
2ca7a2798161 #1858: add distutils.config module
Andrew M. Kuchling <amk@amk.ca>
parents:
diff changeset
89 current[key] = config.get(server, key)
2ca7a2798161 #1858: add distutils.config module
Andrew M. Kuchling <amk@amk.ca>
parents:
diff changeset
90 else:
2ca7a2798161 #1858: add distutils.config module
Andrew M. Kuchling <amk@amk.ca>
parents:
diff changeset
91 current[key] = default
2ca7a2798161 #1858: add distutils.config module
Andrew M. Kuchling <amk@amk.ca>
parents:
diff changeset
92 if (current['server'] == repository or
2ca7a2798161 #1858: add distutils.config module
Andrew M. Kuchling <amk@amk.ca>
parents:
diff changeset
93 current['repository'] == repository):
2ca7a2798161 #1858: add distutils.config module
Andrew M. Kuchling <amk@amk.ca>
parents:
diff changeset
94 return current
2ca7a2798161 #1858: add distutils.config module
Andrew M. Kuchling <amk@amk.ca>
parents:
diff changeset
95 elif 'server-login' in sections:
2ca7a2798161 #1858: add distutils.config module
Andrew M. Kuchling <amk@amk.ca>
parents:
diff changeset
96 # old format
2ca7a2798161 #1858: add distutils.config module
Andrew M. Kuchling <amk@amk.ca>
parents:
diff changeset
97 server = 'server-login'
2ca7a2798161 #1858: add distutils.config module
Andrew M. Kuchling <amk@amk.ca>
parents:
diff changeset
98 if config.has_option(server, 'repository'):
2ca7a2798161 #1858: add distutils.config module
Andrew M. Kuchling <amk@amk.ca>
parents:
diff changeset
99 repository = config.get(server, 'repository')
2ca7a2798161 #1858: add distutils.config module
Andrew M. Kuchling <amk@amk.ca>
parents:
diff changeset
100 else:
2ca7a2798161 #1858: add distutils.config module
Andrew M. Kuchling <amk@amk.ca>
parents:
diff changeset
101 repository = self.DEFAULT_REPOSITORY
2ca7a2798161 #1858: add distutils.config module
Andrew M. Kuchling <amk@amk.ca>
parents:
diff changeset
102 return {'username': config.get(server, 'username'),
2ca7a2798161 #1858: add distutils.config module
Andrew M. Kuchling <amk@amk.ca>
parents:
diff changeset
103 'password': config.get(server, 'password'),
2ca7a2798161 #1858: add distutils.config module
Andrew M. Kuchling <amk@amk.ca>
parents:
diff changeset
104 'repository': repository,
2ca7a2798161 #1858: add distutils.config module
Andrew M. Kuchling <amk@amk.ca>
parents:
diff changeset
105 'server': server,
2ca7a2798161 #1858: add distutils.config module
Andrew M. Kuchling <amk@amk.ca>
parents:
diff changeset
106 'realm': self.DEFAULT_REALM}
2ca7a2798161 #1858: add distutils.config module
Andrew M. Kuchling <amk@amk.ca>
parents:
diff changeset
107
2ca7a2798161 #1858: add distutils.config module
Andrew M. Kuchling <amk@amk.ca>
parents:
diff changeset
108 return {}
2ca7a2798161 #1858: add distutils.config module
Andrew M. Kuchling <amk@amk.ca>
parents:
diff changeset
109
2ca7a2798161 #1858: add distutils.config module
Andrew M. Kuchling <amk@amk.ca>
parents:
diff changeset
110 def initialize_options(self):
2ca7a2798161 #1858: add distutils.config module
Andrew M. Kuchling <amk@amk.ca>
parents:
diff changeset
111 """Initialize options."""
2ca7a2798161 #1858: add distutils.config module
Andrew M. Kuchling <amk@amk.ca>
parents:
diff changeset
112 self.repository = None
2ca7a2798161 #1858: add distutils.config module
Andrew M. Kuchling <amk@amk.ca>
parents:
diff changeset
113 self.realm = None
2ca7a2798161 #1858: add distutils.config module
Andrew M. Kuchling <amk@amk.ca>
parents:
diff changeset
114 self.show_response = 0
2ca7a2798161 #1858: add distutils.config module
Andrew M. Kuchling <amk@amk.ca>
parents:
diff changeset
115
2ca7a2798161 #1858: add distutils.config module
Andrew M. Kuchling <amk@amk.ca>
parents:
diff changeset
116 def finalize_options(self):
2ca7a2798161 #1858: add distutils.config module
Andrew M. Kuchling <amk@amk.ca>
parents:
diff changeset
117 """Finalizes options."""
2ca7a2798161 #1858: add distutils.config module
Andrew M. Kuchling <amk@amk.ca>
parents:
diff changeset
118 if self.repository is None:
2ca7a2798161 #1858: add distutils.config module
Andrew M. Kuchling <amk@amk.ca>
parents:
diff changeset
119 self.repository = self.DEFAULT_REPOSITORY
2ca7a2798161 #1858: add distutils.config module
Andrew M. Kuchling <amk@amk.ca>
parents:
diff changeset
120 if self.realm is None:
2ca7a2798161 #1858: add distutils.config module
Andrew M. Kuchling <amk@amk.ca>
parents:
diff changeset
121 self.realm = self.DEFAULT_REALM