Mercurial > cpython-lru_cache-weakref
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 |
| 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 |
