annotate Lib/distutils/command/register.py @ 84007:dbfbdf2b5c19 3.3

Fix #17967: For ftp urls CWD to target instead of hopping to each directory towards target. This fixes a bug where target is accessible, but parent directories are restricted.
author Senthil Kumaran <senthil@uthcode.com>
date Sat, 01 Jun 2013 08:27:06 -0700
parents 3e26c9033306
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
27049
1cd9c8564875 [Patch #658094 ] PEP 301 implementation
Andrew M. Kuchling <amk@amk.ca>
parents:
diff changeset
1 """distutils.command.register
1cd9c8564875 [Patch #658094 ] PEP 301 implementation
Andrew M. Kuchling <amk@amk.ca>
parents:
diff changeset
2
1cd9c8564875 [Patch #658094 ] PEP 301 implementation
Andrew M. Kuchling <amk@amk.ca>
parents:
diff changeset
3 Implements the Distutils 'register' command (register with the repository).
1cd9c8564875 [Patch #658094 ] PEP 301 implementation
Andrew M. Kuchling <amk@amk.ca>
parents:
diff changeset
4 """
1cd9c8564875 [Patch #658094 ] PEP 301 implementation
Andrew M. Kuchling <amk@amk.ca>
parents:
diff changeset
5
1cd9c8564875 [Patch #658094 ] PEP 301 implementation
Andrew M. Kuchling <amk@amk.ca>
parents:
diff changeset
6 # created 2002/10/21, Richard Jones
1cd9c8564875 [Patch #658094 ] PEP 301 implementation
Andrew M. Kuchling <amk@amk.ca>
parents:
diff changeset
7
63136
29a3eda89995 reverted distutils its 3.1 state. All new work is now happening in disutils2, and distutils is now feature-frozen.
Tarek Ziadé <ziade.tarek@gmail.com>
parents: 57849
diff changeset
8 import os, string, getpass
47067
960ade856078 Merged revisions 62998-63003,63005-63006,63009-63012,63014-63017,63019-63020,63022-63024,63026-63029,63031-63041,63043-63045,63047-63054,63056-63062 via svnmerge from
Alexandre Vassalotti <alexandre@peadrop.com>
parents: 47059
diff changeset
9 import io
63136
29a3eda89995 reverted distutils its 3.1 state. All new work is now happening in disutils2, and distutils is now feature-frozen.
Tarek Ziadé <ziade.tarek@gmail.com>
parents: 57849
diff changeset
10 import urllib.parse, urllib.request
54112
ac660ea35f52 Merged revisions 72681 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents: 52594
diff changeset
11 from warnings import warn
27049
1cd9c8564875 [Patch #658094 ] PEP 301 implementation
Andrew M. Kuchling <amk@amk.ca>
parents:
diff changeset
12
47067
960ade856078 Merged revisions 62998-63003,63005-63006,63009-63012,63014-63017,63019-63020,63022-63024,63026-63029,63031-63041,63043-63045,63047-63054,63056-63062 via svnmerge from
Alexandre Vassalotti <alexandre@peadrop.com>
parents: 47059
diff changeset
13 from distutils.core import PyPIRCCommand
63136
29a3eda89995 reverted distutils its 3.1 state. All new work is now happening in disutils2, and distutils is now feature-frozen.
Tarek Ziadé <ziade.tarek@gmail.com>
parents: 57849
diff changeset
14 from distutils.errors import *
47067
960ade856078 Merged revisions 62998-63003,63005-63006,63009-63012,63014-63017,63019-63020,63022-63024,63026-63029,63031-63041,63043-63045,63047-63054,63056-63062 via svnmerge from
Alexandre Vassalotti <alexandre@peadrop.com>
parents: 47059
diff changeset
15 from distutils import log
27049
1cd9c8564875 [Patch #658094 ] PEP 301 implementation
Andrew M. Kuchling <amk@amk.ca>
parents:
diff changeset
16
47067
960ade856078 Merged revisions 62998-63003,63005-63006,63009-63012,63014-63017,63019-63020,63022-63024,63026-63029,63031-63041,63043-63045,63047-63054,63056-63062 via svnmerge from
Alexandre Vassalotti <alexandre@peadrop.com>
parents: 47059
diff changeset
17 class register(PyPIRCCommand):
27049
1cd9c8564875 [Patch #658094 ] PEP 301 implementation
Andrew M. Kuchling <amk@amk.ca>
parents:
diff changeset
18
28151
bda490fc2691 Improve description
Andrew M. Kuchling <amk@amk.ca>
parents: 27976
diff changeset
19 description = ("register the distribution with the Python package index")
47067
960ade856078 Merged revisions 62998-63003,63005-63006,63009-63012,63014-63017,63019-63020,63022-63024,63026-63029,63031-63041,63043-63045,63047-63054,63056-63062 via svnmerge from
Alexandre Vassalotti <alexandre@peadrop.com>
parents: 47059
diff changeset
20 user_options = PyPIRCCommand.user_options + [
27049
1cd9c8564875 [Patch #658094 ] PEP 301 implementation
Andrew M. Kuchling <amk@amk.ca>
parents:
diff changeset
21 ('list-classifiers', None,
1cd9c8564875 [Patch #658094 ] PEP 301 implementation
Andrew M. Kuchling <amk@amk.ca>
parents:
diff changeset
22 'list the valid Trove classifiers'),
54112
ac660ea35f52 Merged revisions 72681 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents: 52594
diff changeset
23 ('strict', None ,
ac660ea35f52 Merged revisions 72681 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents: 52594
diff changeset
24 'Will stop the registering if the meta-data are not fully compliant')
27049
1cd9c8564875 [Patch #658094 ] PEP 301 implementation
Andrew M. Kuchling <amk@amk.ca>
parents:
diff changeset
25 ]
47067
960ade856078 Merged revisions 62998-63003,63005-63006,63009-63012,63014-63017,63019-63020,63022-63024,63026-63029,63031-63041,63043-63045,63047-63054,63056-63062 via svnmerge from
Alexandre Vassalotti <alexandre@peadrop.com>
parents: 47059
diff changeset
26 boolean_options = PyPIRCCommand.boolean_options + [
54112
ac660ea35f52 Merged revisions 72681 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents: 52594
diff changeset
27 'verify', 'list-classifiers', 'strict']
ac660ea35f52 Merged revisions 72681 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents: 52594
diff changeset
28
ac660ea35f52 Merged revisions 72681 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents: 52594
diff changeset
29 sub_commands = [('check', lambda self: True)]
27049
1cd9c8564875 [Patch #658094 ] PEP 301 implementation
Andrew M. Kuchling <amk@amk.ca>
parents:
diff changeset
30
1cd9c8564875 [Patch #658094 ] PEP 301 implementation
Andrew M. Kuchling <amk@amk.ca>
parents:
diff changeset
31 def initialize_options(self):
47067
960ade856078 Merged revisions 62998-63003,63005-63006,63009-63012,63014-63017,63019-63020,63022-63024,63026-63029,63031-63041,63043-63045,63047-63054,63056-63062 via svnmerge from
Alexandre Vassalotti <alexandre@peadrop.com>
parents: 47059
diff changeset
32 PyPIRCCommand.initialize_options(self)
27049
1cd9c8564875 [Patch #658094 ] PEP 301 implementation
Andrew M. Kuchling <amk@amk.ca>
parents:
diff changeset
33 self.list_classifiers = 0
54112
ac660ea35f52 Merged revisions 72681 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents: 52594
diff changeset
34 self.strict = 0
ac660ea35f52 Merged revisions 72681 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents: 52594
diff changeset
35
ac660ea35f52 Merged revisions 72681 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents: 52594
diff changeset
36 def finalize_options(self):
ac660ea35f52 Merged revisions 72681 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents: 52594
diff changeset
37 PyPIRCCommand.finalize_options(self)
ac660ea35f52 Merged revisions 72681 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents: 52594
diff changeset
38 # setting options for the `check` subcommand
ac660ea35f52 Merged revisions 72681 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents: 52594
diff changeset
39 check_options = {'strict': ('register', self.strict),
ac660ea35f52 Merged revisions 72681 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents: 52594
diff changeset
40 'restructuredtext': ('register', 1)}
ac660ea35f52 Merged revisions 72681 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents: 52594
diff changeset
41 self.distribution.command_options['check'] = check_options
27049
1cd9c8564875 [Patch #658094 ] PEP 301 implementation
Andrew M. Kuchling <amk@amk.ca>
parents:
diff changeset
42
1cd9c8564875 [Patch #658094 ] PEP 301 implementation
Andrew M. Kuchling <amk@amk.ca>
parents:
diff changeset
43 def run(self):
47067
960ade856078 Merged revisions 62998-63003,63005-63006,63009-63012,63014-63017,63019-63020,63022-63024,63026-63029,63031-63041,63043-63045,63047-63054,63056-63062 via svnmerge from
Alexandre Vassalotti <alexandre@peadrop.com>
parents: 47059
diff changeset
44 self.finalize_options()
960ade856078 Merged revisions 62998-63003,63005-63006,63009-63012,63014-63017,63019-63020,63022-63024,63026-63029,63031-63041,63043-63045,63047-63054,63056-63062 via svnmerge from
Alexandre Vassalotti <alexandre@peadrop.com>
parents: 47059
diff changeset
45 self._set_config()
54112
ac660ea35f52 Merged revisions 72681 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents: 52594
diff changeset
46
ac660ea35f52 Merged revisions 72681 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents: 52594
diff changeset
47 # Run sub commands
ac660ea35f52 Merged revisions 72681 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents: 52594
diff changeset
48 for cmd_name in self.get_sub_commands():
ac660ea35f52 Merged revisions 72681 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents: 52594
diff changeset
49 self.run_command(cmd_name)
ac660ea35f52 Merged revisions 72681 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents: 52594
diff changeset
50
28544
ee8853cc8ca1 Remove the --verify option in favor of the standard -n/--dry-run option
Andrew M. Kuchling <amk@amk.ca>
parents: 28151
diff changeset
51 if self.dry_run:
27049
1cd9c8564875 [Patch #658094 ] PEP 301 implementation
Andrew M. Kuchling <amk@amk.ca>
parents:
diff changeset
52 self.verify_metadata()
1cd9c8564875 [Patch #658094 ] PEP 301 implementation
Andrew M. Kuchling <amk@amk.ca>
parents:
diff changeset
53 elif self.list_classifiers:
1cd9c8564875 [Patch #658094 ] PEP 301 implementation
Andrew M. Kuchling <amk@amk.ca>
parents:
diff changeset
54 self.classifiers()
1cd9c8564875 [Patch #658094 ] PEP 301 implementation
Andrew M. Kuchling <amk@amk.ca>
parents:
diff changeset
55 else:
1cd9c8564875 [Patch #658094 ] PEP 301 implementation
Andrew M. Kuchling <amk@amk.ca>
parents:
diff changeset
56 self.send_metadata()
1cd9c8564875 [Patch #658094 ] PEP 301 implementation
Andrew M. Kuchling <amk@amk.ca>
parents:
diff changeset
57
1cd9c8564875 [Patch #658094 ] PEP 301 implementation
Andrew M. Kuchling <amk@amk.ca>
parents:
diff changeset
58 def check_metadata(self):
54112
ac660ea35f52 Merged revisions 72681 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents: 52594
diff changeset
59 """Deprecated API."""
ac660ea35f52 Merged revisions 72681 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents: 52594
diff changeset
60 warn("distutils.command.register.check_metadata is deprecated, \
ac660ea35f52 Merged revisions 72681 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents: 52594
diff changeset
61 use the check command instead", PendingDeprecationWarning)
ac660ea35f52 Merged revisions 72681 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents: 52594
diff changeset
62 check = self.distribution.get_command_obj('check')
ac660ea35f52 Merged revisions 72681 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents: 52594
diff changeset
63 check.ensure_finalized()
ac660ea35f52 Merged revisions 72681 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents: 52594
diff changeset
64 check.strict = self.strict
ac660ea35f52 Merged revisions 72681 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents: 52594
diff changeset
65 check.restructuredtext = 1
ac660ea35f52 Merged revisions 72681 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents: 52594
diff changeset
66 check.run()
27049
1cd9c8564875 [Patch #658094 ] PEP 301 implementation
Andrew M. Kuchling <amk@amk.ca>
parents:
diff changeset
67
47067
960ade856078 Merged revisions 62998-63003,63005-63006,63009-63012,63014-63017,63019-63020,63022-63024,63026-63029,63031-63041,63043-63045,63047-63054,63056-63062 via svnmerge from
Alexandre Vassalotti <alexandre@peadrop.com>
parents: 47059
diff changeset
68 def _set_config(self):
960ade856078 Merged revisions 62998-63003,63005-63006,63009-63012,63014-63017,63019-63020,63022-63024,63026-63029,63031-63041,63043-63045,63047-63054,63056-63062 via svnmerge from
Alexandre Vassalotti <alexandre@peadrop.com>
parents: 47059
diff changeset
69 ''' Reads the configuration file and set attributes.
960ade856078 Merged revisions 62998-63003,63005-63006,63009-63012,63014-63017,63019-63020,63022-63024,63026-63029,63031-63041,63043-63045,63047-63054,63056-63062 via svnmerge from
Alexandre Vassalotti <alexandre@peadrop.com>
parents: 47059
diff changeset
70 '''
960ade856078 Merged revisions 62998-63003,63005-63006,63009-63012,63014-63017,63019-63020,63022-63024,63026-63029,63031-63041,63043-63045,63047-63054,63056-63062 via svnmerge from
Alexandre Vassalotti <alexandre@peadrop.com>
parents: 47059
diff changeset
71 config = self._read_pypirc()
960ade856078 Merged revisions 62998-63003,63005-63006,63009-63012,63014-63017,63019-63020,63022-63024,63026-63029,63031-63041,63043-63045,63047-63054,63056-63062 via svnmerge from
Alexandre Vassalotti <alexandre@peadrop.com>
parents: 47059
diff changeset
72 if config != {}:
960ade856078 Merged revisions 62998-63003,63005-63006,63009-63012,63014-63017,63019-63020,63022-63024,63026-63029,63031-63041,63043-63045,63047-63054,63056-63062 via svnmerge from
Alexandre Vassalotti <alexandre@peadrop.com>
parents: 47059
diff changeset
73 self.username = config['username']
960ade856078 Merged revisions 62998-63003,63005-63006,63009-63012,63014-63017,63019-63020,63022-63024,63026-63029,63031-63041,63043-63045,63047-63054,63056-63062 via svnmerge from
Alexandre Vassalotti <alexandre@peadrop.com>
parents: 47059
diff changeset
74 self.password = config['password']
960ade856078 Merged revisions 62998-63003,63005-63006,63009-63012,63014-63017,63019-63020,63022-63024,63026-63029,63031-63041,63043-63045,63047-63054,63056-63062 via svnmerge from
Alexandre Vassalotti <alexandre@peadrop.com>
parents: 47059
diff changeset
75 self.repository = config['repository']
960ade856078 Merged revisions 62998-63003,63005-63006,63009-63012,63014-63017,63019-63020,63022-63024,63026-63029,63031-63041,63043-63045,63047-63054,63056-63062 via svnmerge from
Alexandre Vassalotti <alexandre@peadrop.com>
parents: 47059
diff changeset
76 self.realm = config['realm']
960ade856078 Merged revisions 62998-63003,63005-63006,63009-63012,63014-63017,63019-63020,63022-63024,63026-63029,63031-63041,63043-63045,63047-63054,63056-63062 via svnmerge from
Alexandre Vassalotti <alexandre@peadrop.com>
parents: 47059
diff changeset
77 self.has_config = True
960ade856078 Merged revisions 62998-63003,63005-63006,63009-63012,63014-63017,63019-63020,63022-63024,63026-63029,63031-63041,63043-63045,63047-63054,63056-63062 via svnmerge from
Alexandre Vassalotti <alexandre@peadrop.com>
parents: 47059
diff changeset
78 else:
960ade856078 Merged revisions 62998-63003,63005-63006,63009-63012,63014-63017,63019-63020,63022-63024,63026-63029,63031-63041,63043-63045,63047-63054,63056-63062 via svnmerge from
Alexandre Vassalotti <alexandre@peadrop.com>
parents: 47059
diff changeset
79 if self.repository not in ('pypi', self.DEFAULT_REPOSITORY):
960ade856078 Merged revisions 62998-63003,63005-63006,63009-63012,63014-63017,63019-63020,63022-63024,63026-63029,63031-63041,63043-63045,63047-63054,63056-63062 via svnmerge from
Alexandre Vassalotti <alexandre@peadrop.com>
parents: 47059
diff changeset
80 raise ValueError('%s not found in .pypirc' % self.repository)
960ade856078 Merged revisions 62998-63003,63005-63006,63009-63012,63014-63017,63019-63020,63022-63024,63026-63029,63031-63041,63043-63045,63047-63054,63056-63062 via svnmerge from
Alexandre Vassalotti <alexandre@peadrop.com>
parents: 47059
diff changeset
81 if self.repository == 'pypi':
960ade856078 Merged revisions 62998-63003,63005-63006,63009-63012,63014-63017,63019-63020,63022-63024,63026-63029,63031-63041,63043-63045,63047-63054,63056-63062 via svnmerge from
Alexandre Vassalotti <alexandre@peadrop.com>
parents: 47059
diff changeset
82 self.repository = self.DEFAULT_REPOSITORY
960ade856078 Merged revisions 62998-63003,63005-63006,63009-63012,63014-63017,63019-63020,63022-63024,63026-63029,63031-63041,63043-63045,63047-63054,63056-63062 via svnmerge from
Alexandre Vassalotti <alexandre@peadrop.com>
parents: 47059
diff changeset
83 self.has_config = False
960ade856078 Merged revisions 62998-63003,63005-63006,63009-63012,63014-63017,63019-63020,63022-63024,63026-63029,63031-63041,63043-63045,63047-63054,63056-63062 via svnmerge from
Alexandre Vassalotti <alexandre@peadrop.com>
parents: 47059
diff changeset
84
27049
1cd9c8564875 [Patch #658094 ] PEP 301 implementation
Andrew M. Kuchling <amk@amk.ca>
parents:
diff changeset
85 def classifiers(self):
1cd9c8564875 [Patch #658094 ] PEP 301 implementation
Andrew M. Kuchling <amk@amk.ca>
parents:
diff changeset
86 ''' Fetch the list of classifiers from the server.
1cd9c8564875 [Patch #658094 ] PEP 301 implementation
Andrew M. Kuchling <amk@amk.ca>
parents:
diff changeset
87 '''
48334
5a416a6417d3 Make a new urllib package .
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 47067
diff changeset
88 url = self.repository+'?:action=list_classifiers'
5a416a6417d3 Make a new urllib package .
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 47067
diff changeset
89 response = urllib.request.urlopen(url)
52594
6640996f04e7 Merged revisions 70886,70888-70892 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents: 50639
diff changeset
90 log.info(response.read())
27049
1cd9c8564875 [Patch #658094 ] PEP 301 implementation
Andrew M. Kuchling <amk@amk.ca>
parents:
diff changeset
91
1cd9c8564875 [Patch #658094 ] PEP 301 implementation
Andrew M. Kuchling <amk@amk.ca>
parents:
diff changeset
92 def verify_metadata(self):
1cd9c8564875 [Patch #658094 ] PEP 301 implementation
Andrew M. Kuchling <amk@amk.ca>
parents:
diff changeset
93 ''' Send the metadata to the package index server to be checked.
1cd9c8564875 [Patch #658094 ] PEP 301 implementation
Andrew M. Kuchling <amk@amk.ca>
parents:
diff changeset
94 '''
1cd9c8564875 [Patch #658094 ] PEP 301 implementation
Andrew M. Kuchling <amk@amk.ca>
parents:
diff changeset
95 # send the info to the server and report the result
1cd9c8564875 [Patch #658094 ] PEP 301 implementation
Andrew M. Kuchling <amk@amk.ca>
parents:
diff changeset
96 (code, result) = self.post_to_server(self.build_post_data('verify'))
52594
6640996f04e7 Merged revisions 70886,70888-70892 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents: 50639
diff changeset
97 log.info('Server response (%s): %s' % (code, result))
47067
960ade856078 Merged revisions 62998-63003,63005-63006,63009-63012,63014-63017,63019-63020,63022-63024,63026-63029,63031-63041,63043-63045,63047-63054,63056-63062 via svnmerge from
Alexandre Vassalotti <alexandre@peadrop.com>
parents: 47059
diff changeset
98
27049
1cd9c8564875 [Patch #658094 ] PEP 301 implementation
Andrew M. Kuchling <amk@amk.ca>
parents:
diff changeset
99 def send_metadata(self):
1cd9c8564875 [Patch #658094 ] PEP 301 implementation
Andrew M. Kuchling <amk@amk.ca>
parents:
diff changeset
100 ''' Send the metadata to the package index server.
1cd9c8564875 [Patch #658094 ] PEP 301 implementation
Andrew M. Kuchling <amk@amk.ca>
parents:
diff changeset
101
1cd9c8564875 [Patch #658094 ] PEP 301 implementation
Andrew M. Kuchling <amk@amk.ca>
parents:
diff changeset
102 Well, do the following:
1cd9c8564875 [Patch #658094 ] PEP 301 implementation
Andrew M. Kuchling <amk@amk.ca>
parents:
diff changeset
103 1. figure who the user is, and then
1cd9c8564875 [Patch #658094 ] PEP 301 implementation
Andrew M. Kuchling <amk@amk.ca>
parents:
diff changeset
104 2. send the data as a Basic auth'ed POST.
1cd9c8564875 [Patch #658094 ] PEP 301 implementation
Andrew M. Kuchling <amk@amk.ca>
parents:
diff changeset
105
1cd9c8564875 [Patch #658094 ] PEP 301 implementation
Andrew M. Kuchling <amk@amk.ca>
parents:
diff changeset
106 First we try to read the username/password from $HOME/.pypirc,
1cd9c8564875 [Patch #658094 ] PEP 301 implementation
Andrew M. Kuchling <amk@amk.ca>
parents:
diff changeset
107 which is a ConfigParser-formatted file with a section
47067
960ade856078 Merged revisions 62998-63003,63005-63006,63009-63012,63014-63017,63019-63020,63022-63024,63026-63029,63031-63041,63043-63045,63047-63054,63056-63062 via svnmerge from
Alexandre Vassalotti <alexandre@peadrop.com>
parents: 47059
diff changeset
108 [distutils] containing username and password entries (both
27049
1cd9c8564875 [Patch #658094 ] PEP 301 implementation
Andrew M. Kuchling <amk@amk.ca>
parents:
diff changeset
109 in clear text). Eg:
1cd9c8564875 [Patch #658094 ] PEP 301 implementation
Andrew M. Kuchling <amk@amk.ca>
parents:
diff changeset
110
47067
960ade856078 Merged revisions 62998-63003,63005-63006,63009-63012,63014-63017,63019-63020,63022-63024,63026-63029,63031-63041,63043-63045,63047-63054,63056-63062 via svnmerge from
Alexandre Vassalotti <alexandre@peadrop.com>
parents: 47059
diff changeset
111 [distutils]
960ade856078 Merged revisions 62998-63003,63005-63006,63009-63012,63014-63017,63019-63020,63022-63024,63026-63029,63031-63041,63043-63045,63047-63054,63056-63062 via svnmerge from
Alexandre Vassalotti <alexandre@peadrop.com>
parents: 47059
diff changeset
112 index-servers =
960ade856078 Merged revisions 62998-63003,63005-63006,63009-63012,63014-63017,63019-63020,63022-63024,63026-63029,63031-63041,63043-63045,63047-63054,63056-63062 via svnmerge from
Alexandre Vassalotti <alexandre@peadrop.com>
parents: 47059
diff changeset
113 pypi
960ade856078 Merged revisions 62998-63003,63005-63006,63009-63012,63014-63017,63019-63020,63022-63024,63026-63029,63031-63041,63043-63045,63047-63054,63056-63062 via svnmerge from
Alexandre Vassalotti <alexandre@peadrop.com>
parents: 47059
diff changeset
114
960ade856078 Merged revisions 62998-63003,63005-63006,63009-63012,63014-63017,63019-63020,63022-63024,63026-63029,63031-63041,63043-63045,63047-63054,63056-63062 via svnmerge from
Alexandre Vassalotti <alexandre@peadrop.com>
parents: 47059
diff changeset
115 [pypi]
27049
1cd9c8564875 [Patch #658094 ] PEP 301 implementation
Andrew M. Kuchling <amk@amk.ca>
parents:
diff changeset
116 username: fred
1cd9c8564875 [Patch #658094 ] PEP 301 implementation
Andrew M. Kuchling <amk@amk.ca>
parents:
diff changeset
117 password: sekrit
1cd9c8564875 [Patch #658094 ] PEP 301 implementation
Andrew M. Kuchling <amk@amk.ca>
parents:
diff changeset
118
1cd9c8564875 [Patch #658094 ] PEP 301 implementation
Andrew M. Kuchling <amk@amk.ca>
parents:
diff changeset
119 Otherwise, to figure who the user is, we offer the user three
1cd9c8564875 [Patch #658094 ] PEP 301 implementation
Andrew M. Kuchling <amk@amk.ca>
parents:
diff changeset
120 choices:
1cd9c8564875 [Patch #658094 ] PEP 301 implementation
Andrew M. Kuchling <amk@amk.ca>
parents:
diff changeset
121
1cd9c8564875 [Patch #658094 ] PEP 301 implementation
Andrew M. Kuchling <amk@amk.ca>
parents:
diff changeset
122 1. use existing login,
1cd9c8564875 [Patch #658094 ] PEP 301 implementation
Andrew M. Kuchling <amk@amk.ca>
parents:
diff changeset
123 2. register as a new user, or
1cd9c8564875 [Patch #658094 ] PEP 301 implementation
Andrew M. Kuchling <amk@amk.ca>
parents:
diff changeset
124 3. set the password to a random string and email the user.
1cd9c8564875 [Patch #658094 ] PEP 301 implementation
Andrew M. Kuchling <amk@amk.ca>
parents:
diff changeset
125
1cd9c8564875 [Patch #658094 ] PEP 301 implementation
Andrew M. Kuchling <amk@amk.ca>
parents:
diff changeset
126 '''
1cd9c8564875 [Patch #658094 ] PEP 301 implementation
Andrew M. Kuchling <amk@amk.ca>
parents:
diff changeset
127 # see if we can short-cut and get the username/password from the
1cd9c8564875 [Patch #658094 ] PEP 301 implementation
Andrew M. Kuchling <amk@amk.ca>
parents:
diff changeset
128 # config
47067
960ade856078 Merged revisions 62998-63003,63005-63006,63009-63012,63014-63017,63019-63020,63022-63024,63026-63029,63031-63041,63043-63045,63047-63054,63056-63062 via svnmerge from
Alexandre Vassalotti <alexandre@peadrop.com>
parents: 47059
diff changeset
129 if self.has_config:
960ade856078 Merged revisions 62998-63003,63005-63006,63009-63012,63014-63017,63019-63020,63022-63024,63026-63029,63031-63041,63043-63045,63047-63054,63056-63062 via svnmerge from
Alexandre Vassalotti <alexandre@peadrop.com>
parents: 47059
diff changeset
130 choice = '1'
960ade856078 Merged revisions 62998-63003,63005-63006,63009-63012,63014-63017,63019-63020,63022-63024,63026-63029,63031-63041,63043-63045,63047-63054,63056-63062 via svnmerge from
Alexandre Vassalotti <alexandre@peadrop.com>
parents: 47059
diff changeset
131 username = self.username
960ade856078 Merged revisions 62998-63003,63005-63006,63009-63012,63014-63017,63019-63020,63022-63024,63026-63029,63031-63041,63043-63045,63047-63054,63056-63062 via svnmerge from
Alexandre Vassalotti <alexandre@peadrop.com>
parents: 47059
diff changeset
132 password = self.password
960ade856078 Merged revisions 62998-63003,63005-63006,63009-63012,63014-63017,63019-63020,63022-63024,63026-63029,63031-63041,63043-63045,63047-63054,63056-63062 via svnmerge from
Alexandre Vassalotti <alexandre@peadrop.com>
parents: 47059
diff changeset
133 else:
960ade856078 Merged revisions 62998-63003,63005-63006,63009-63012,63014-63017,63019-63020,63022-63024,63026-63029,63031-63041,63043-63045,63047-63054,63056-63062 via svnmerge from
Alexandre Vassalotti <alexandre@peadrop.com>
parents: 47059
diff changeset
134 choice = 'x'
960ade856078 Merged revisions 62998-63003,63005-63006,63009-63012,63014-63017,63019-63020,63022-63024,63026-63029,63031-63041,63043-63045,63047-63054,63056-63062 via svnmerge from
Alexandre Vassalotti <alexandre@peadrop.com>
parents: 47059
diff changeset
135 username = password = ''
27049
1cd9c8564875 [Patch #658094 ] PEP 301 implementation
Andrew M. Kuchling <amk@amk.ca>
parents:
diff changeset
136
1cd9c8564875 [Patch #658094 ] PEP 301 implementation
Andrew M. Kuchling <amk@amk.ca>
parents:
diff changeset
137 # get the user's login info
1cd9c8564875 [Patch #658094 ] PEP 301 implementation
Andrew M. Kuchling <amk@amk.ca>
parents:
diff changeset
138 choices = '1 2 3 4'.split()
1cd9c8564875 [Patch #658094 ] PEP 301 implementation
Andrew M. Kuchling <amk@amk.ca>
parents:
diff changeset
139 while choice not in choices:
50302
ad7447a165bb Merged revisions 67889-67892,67895,67898,67904-67907,67912,67918,67920-67921,67923-67924,67926-67927,67930,67943 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents: 49774
diff changeset
140 self.announce('''\
ad7447a165bb Merged revisions 67889-67892,67895,67898,67904-67907,67912,67918,67920-67921,67923-67924,67926-67927,67930,67943 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents: 49774
diff changeset
141 We need to know who you are, so please choose either:
27049
1cd9c8564875 [Patch #658094 ] PEP 301 implementation
Andrew M. Kuchling <amk@amk.ca>
parents:
diff changeset
142 1. use your existing login,
1cd9c8564875 [Patch #658094 ] PEP 301 implementation
Andrew M. Kuchling <amk@amk.ca>
parents:
diff changeset
143 2. register as a new user,
1cd9c8564875 [Patch #658094 ] PEP 301 implementation
Andrew M. Kuchling <amk@amk.ca>
parents:
diff changeset
144 3. have the server generate a new password for you (and email it to you), or
1cd9c8564875 [Patch #658094 ] PEP 301 implementation
Andrew M. Kuchling <amk@amk.ca>
parents:
diff changeset
145 4. quit
50302
ad7447a165bb Merged revisions 67889-67892,67895,67898,67904-67907,67912,67918,67920-67921,67923-67924,67926-67927,67930,67943 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents: 49774
diff changeset
146 Your selection [default 1]: ''', log.INFO)
50304
d281ebf8ea30 fix 2.x isms in distutils test
Benjamin Peterson <benjamin@python.org>
parents: 50302
diff changeset
147 choice = input()
27049
1cd9c8564875 [Patch #658094 ] PEP 301 implementation
Andrew M. Kuchling <amk@amk.ca>
parents:
diff changeset
148 if not choice:
1cd9c8564875 [Patch #658094 ] PEP 301 implementation
Andrew M. Kuchling <amk@amk.ca>
parents:
diff changeset
149 choice = '1'
1cd9c8564875 [Patch #658094 ] PEP 301 implementation
Andrew M. Kuchling <amk@amk.ca>
parents:
diff changeset
150 elif choice not in choices:
40775
4cdf21a0dbbc Fix most trivially-findable print statements.
Guido van Rossum <guido@python.org>
parents: 40587
diff changeset
151 print('Please choose one of the four options!')
27049
1cd9c8564875 [Patch #658094 ] PEP 301 implementation
Andrew M. Kuchling <amk@amk.ca>
parents:
diff changeset
152
1cd9c8564875 [Patch #658094 ] PEP 301 implementation
Andrew M. Kuchling <amk@amk.ca>
parents:
diff changeset
153 if choice == '1':
1cd9c8564875 [Patch #658094 ] PEP 301 implementation
Andrew M. Kuchling <amk@amk.ca>
parents:
diff changeset
154 # get the username and password
1cd9c8564875 [Patch #658094 ] PEP 301 implementation
Andrew M. Kuchling <amk@amk.ca>
parents:
diff changeset
155 while not username:
49774
2da3fcd4935f Issue #4354: Fix distutils register command.
Martin v. Löwis <martin@v.loewis.de>
parents: 48334
diff changeset
156 username = input('Username: ')
27049
1cd9c8564875 [Patch #658094 ] PEP 301 implementation
Andrew M. Kuchling <amk@amk.ca>
parents:
diff changeset
157 while not password:
1cd9c8564875 [Patch #658094 ] PEP 301 implementation
Andrew M. Kuchling <amk@amk.ca>
parents:
diff changeset
158 password = getpass.getpass('Password: ')
1cd9c8564875 [Patch #658094 ] PEP 301 implementation
Andrew M. Kuchling <amk@amk.ca>
parents:
diff changeset
159
1cd9c8564875 [Patch #658094 ] PEP 301 implementation
Andrew M. Kuchling <amk@amk.ca>
parents:
diff changeset
160 # set up the authentication
48334
5a416a6417d3 Make a new urllib package .
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 47067
diff changeset
161 auth = urllib.request.HTTPPasswordMgr()
5a416a6417d3 Make a new urllib package .
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 47067
diff changeset
162 host = urllib.parse.urlparse(self.repository)[1]
47067
960ade856078 Merged revisions 62998-63003,63005-63006,63009-63012,63014-63017,63019-63020,63022-63024,63026-63029,63031-63041,63043-63045,63047-63054,63056-63062 via svnmerge from
Alexandre Vassalotti <alexandre@peadrop.com>
parents: 47059
diff changeset
163 auth.add_password(self.realm, host, username, password)
27049
1cd9c8564875 [Patch #658094 ] PEP 301 implementation
Andrew M. Kuchling <amk@amk.ca>
parents:
diff changeset
164 # send the info to the server and report the result
1cd9c8564875 [Patch #658094 ] PEP 301 implementation
Andrew M. Kuchling <amk@amk.ca>
parents:
diff changeset
165 code, result = self.post_to_server(self.build_post_data('submit'),
1cd9c8564875 [Patch #658094 ] PEP 301 implementation
Andrew M. Kuchling <amk@amk.ca>
parents:
diff changeset
166 auth)
50302
ad7447a165bb Merged revisions 67889-67892,67895,67898,67904-67907,67912,67918,67920-67921,67923-67924,67926-67927,67930,67943 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents: 49774
diff changeset
167 self.announce('Server response (%s): %s' % (code, result),
ad7447a165bb Merged revisions 67889-67892,67895,67898,67904-67907,67912,67918,67920-67921,67923-67924,67926-67927,67930,67943 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents: 49774
diff changeset
168 log.INFO)
27049
1cd9c8564875 [Patch #658094 ] PEP 301 implementation
Andrew M. Kuchling <amk@amk.ca>
parents:
diff changeset
169
1cd9c8564875 [Patch #658094 ] PEP 301 implementation
Andrew M. Kuchling <amk@amk.ca>
parents:
diff changeset
170 # possibly save the login
50639
589f6844d8e0 Merged revisions 68415 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents: 50304
diff changeset
171 if code == 200:
589f6844d8e0 Merged revisions 68415 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents: 50304
diff changeset
172 if self.has_config:
589f6844d8e0 Merged revisions 68415 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents: 50304
diff changeset
173 # sharing the password in the distribution instance
589f6844d8e0 Merged revisions 68415 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents: 50304
diff changeset
174 # so the upload command can reuse it
589f6844d8e0 Merged revisions 68415 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents: 50304
diff changeset
175 self.distribution.password = password
589f6844d8e0 Merged revisions 68415 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents: 50304
diff changeset
176 else:
589f6844d8e0 Merged revisions 68415 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents: 50304
diff changeset
177 self.announce(('I can store your PyPI login so future '
589f6844d8e0 Merged revisions 68415 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents: 50304
diff changeset
178 'submissions will be faster.'), log.INFO)
589f6844d8e0 Merged revisions 68415 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents: 50304
diff changeset
179 self.announce('(the login will be stored in %s)' % \
589f6844d8e0 Merged revisions 68415 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents: 50304
diff changeset
180 self._get_rc_file(), log.INFO)
589f6844d8e0 Merged revisions 68415 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents: 50304
diff changeset
181 choice = 'X'
589f6844d8e0 Merged revisions 68415 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents: 50304
diff changeset
182 while choice.lower() not in 'yn':
589f6844d8e0 Merged revisions 68415 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents: 50304
diff changeset
183 choice = input('Save your login (y/N)?')
589f6844d8e0 Merged revisions 68415 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents: 50304
diff changeset
184 if not choice:
589f6844d8e0 Merged revisions 68415 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents: 50304
diff changeset
185 choice = 'n'
589f6844d8e0 Merged revisions 68415 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents: 50304
diff changeset
186 if choice.lower() == 'y':
589f6844d8e0 Merged revisions 68415 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents: 50304
diff changeset
187 self._store_pypirc(username, password)
47067
960ade856078 Merged revisions 62998-63003,63005-63006,63009-63012,63014-63017,63019-63020,63022-63024,63026-63029,63031-63041,63043-63045,63047-63054,63056-63062 via svnmerge from
Alexandre Vassalotti <alexandre@peadrop.com>
parents: 47059
diff changeset
188
27049
1cd9c8564875 [Patch #658094 ] PEP 301 implementation
Andrew M. Kuchling <amk@amk.ca>
parents:
diff changeset
189 elif choice == '2':
1cd9c8564875 [Patch #658094 ] PEP 301 implementation
Andrew M. Kuchling <amk@amk.ca>
parents:
diff changeset
190 data = {':action': 'user'}
1cd9c8564875 [Patch #658094 ] PEP 301 implementation
Andrew M. Kuchling <amk@amk.ca>
parents:
diff changeset
191 data['name'] = data['password'] = data['email'] = ''
1cd9c8564875 [Patch #658094 ] PEP 301 implementation
Andrew M. Kuchling <amk@amk.ca>
parents:
diff changeset
192 data['confirm'] = None
1cd9c8564875 [Patch #658094 ] PEP 301 implementation
Andrew M. Kuchling <amk@amk.ca>
parents:
diff changeset
193 while not data['name']:
49774
2da3fcd4935f Issue #4354: Fix distutils register command.
Martin v. Löwis <martin@v.loewis.de>
parents: 48334
diff changeset
194 data['name'] = input('Username: ')
27049
1cd9c8564875 [Patch #658094 ] PEP 301 implementation
Andrew M. Kuchling <amk@amk.ca>
parents:
diff changeset
195 while data['password'] != data['confirm']:
1cd9c8564875 [Patch #658094 ] PEP 301 implementation
Andrew M. Kuchling <amk@amk.ca>
parents:
diff changeset
196 while not data['password']:
1cd9c8564875 [Patch #658094 ] PEP 301 implementation
Andrew M. Kuchling <amk@amk.ca>
parents:
diff changeset
197 data['password'] = getpass.getpass('Password: ')
1cd9c8564875 [Patch #658094 ] PEP 301 implementation
Andrew M. Kuchling <amk@amk.ca>
parents:
diff changeset
198 while not data['confirm']:
1cd9c8564875 [Patch #658094 ] PEP 301 implementation
Andrew M. Kuchling <amk@amk.ca>
parents:
diff changeset
199 data['confirm'] = getpass.getpass(' Confirm: ')
1cd9c8564875 [Patch #658094 ] PEP 301 implementation
Andrew M. Kuchling <amk@amk.ca>
parents:
diff changeset
200 if data['password'] != data['confirm']:
1cd9c8564875 [Patch #658094 ] PEP 301 implementation
Andrew M. Kuchling <amk@amk.ca>
parents:
diff changeset
201 data['password'] = ''
1cd9c8564875 [Patch #658094 ] PEP 301 implementation
Andrew M. Kuchling <amk@amk.ca>
parents:
diff changeset
202 data['confirm'] = None
40775
4cdf21a0dbbc Fix most trivially-findable print statements.
Guido van Rossum <guido@python.org>
parents: 40587
diff changeset
203 print("Password and confirm don't match!")
27049
1cd9c8564875 [Patch #658094 ] PEP 301 implementation
Andrew M. Kuchling <amk@amk.ca>
parents:
diff changeset
204 while not data['email']:
49774
2da3fcd4935f Issue #4354: Fix distutils register command.
Martin v. Löwis <martin@v.loewis.de>
parents: 48334
diff changeset
205 data['email'] = input(' EMail: ')
27049
1cd9c8564875 [Patch #658094 ] PEP 301 implementation
Andrew M. Kuchling <amk@amk.ca>
parents:
diff changeset
206 code, result = self.post_to_server(data)
1cd9c8564875 [Patch #658094 ] PEP 301 implementation
Andrew M. Kuchling <amk@amk.ca>
parents:
diff changeset
207 if code != 200:
52594
6640996f04e7 Merged revisions 70886,70888-70892 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents: 50639
diff changeset
208 log.info('Server response (%s): %s' % (code, result))
27049
1cd9c8564875 [Patch #658094 ] PEP 301 implementation
Andrew M. Kuchling <amk@amk.ca>
parents:
diff changeset
209 else:
52594
6640996f04e7 Merged revisions 70886,70888-70892 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents: 50639
diff changeset
210 log.info('You will receive an email shortly.')
6640996f04e7 Merged revisions 70886,70888-70892 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents: 50639
diff changeset
211 log.info(('Follow the instructions in it to '
6640996f04e7 Merged revisions 70886,70888-70892 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents: 50639
diff changeset
212 'complete registration.'))
27049
1cd9c8564875 [Patch #658094 ] PEP 301 implementation
Andrew M. Kuchling <amk@amk.ca>
parents:
diff changeset
213 elif choice == '3':
1cd9c8564875 [Patch #658094 ] PEP 301 implementation
Andrew M. Kuchling <amk@amk.ca>
parents:
diff changeset
214 data = {':action': 'password_reset'}
1cd9c8564875 [Patch #658094 ] PEP 301 implementation
Andrew M. Kuchling <amk@amk.ca>
parents:
diff changeset
215 data['email'] = ''
1cd9c8564875 [Patch #658094 ] PEP 301 implementation
Andrew M. Kuchling <amk@amk.ca>
parents:
diff changeset
216 while not data['email']:
49774
2da3fcd4935f Issue #4354: Fix distutils register command.
Martin v. Löwis <martin@v.loewis.de>
parents: 48334
diff changeset
217 data['email'] = input('Your email address: ')
27049
1cd9c8564875 [Patch #658094 ] PEP 301 implementation
Andrew M. Kuchling <amk@amk.ca>
parents:
diff changeset
218 code, result = self.post_to_server(data)
52594
6640996f04e7 Merged revisions 70886,70888-70892 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents: 50639
diff changeset
219 log.info('Server response (%s): %s' % (code, result))
27049
1cd9c8564875 [Patch #658094 ] PEP 301 implementation
Andrew M. Kuchling <amk@amk.ca>
parents:
diff changeset
220
1cd9c8564875 [Patch #658094 ] PEP 301 implementation
Andrew M. Kuchling <amk@amk.ca>
parents:
diff changeset
221 def build_post_data(self, action):
1cd9c8564875 [Patch #658094 ] PEP 301 implementation
Andrew M. Kuchling <amk@amk.ca>
parents:
diff changeset
222 # figure the data to send - the metadata plus some additional
1cd9c8564875 [Patch #658094 ] PEP 301 implementation
Andrew M. Kuchling <amk@amk.ca>
parents:
diff changeset
223 # information used by the package server
1cd9c8564875 [Patch #658094 ] PEP 301 implementation
Andrew M. Kuchling <amk@amk.ca>
parents:
diff changeset
224 meta = self.distribution.metadata
1cd9c8564875 [Patch #658094 ] PEP 301 implementation
Andrew M. Kuchling <amk@amk.ca>
parents:
diff changeset
225 data = {
1cd9c8564875 [Patch #658094 ] PEP 301 implementation
Andrew M. Kuchling <amk@amk.ca>
parents:
diff changeset
226 ':action': action,
1cd9c8564875 [Patch #658094 ] PEP 301 implementation
Andrew M. Kuchling <amk@amk.ca>
parents:
diff changeset
227 'metadata_version' : '1.0',
1cd9c8564875 [Patch #658094 ] PEP 301 implementation
Andrew M. Kuchling <amk@amk.ca>
parents:
diff changeset
228 'name': meta.get_name(),
1cd9c8564875 [Patch #658094 ] PEP 301 implementation
Andrew M. Kuchling <amk@amk.ca>
parents:
diff changeset
229 'version': meta.get_version(),
1cd9c8564875 [Patch #658094 ] PEP 301 implementation
Andrew M. Kuchling <amk@amk.ca>
parents:
diff changeset
230 'summary': meta.get_description(),
1cd9c8564875 [Patch #658094 ] PEP 301 implementation
Andrew M. Kuchling <amk@amk.ca>
parents:
diff changeset
231 'home_page': meta.get_url(),
1cd9c8564875 [Patch #658094 ] PEP 301 implementation
Andrew M. Kuchling <amk@amk.ca>
parents:
diff changeset
232 'author': meta.get_contact(),
1cd9c8564875 [Patch #658094 ] PEP 301 implementation
Andrew M. Kuchling <amk@amk.ca>
parents:
diff changeset
233 'author_email': meta.get_contact_email(),
1cd9c8564875 [Patch #658094 ] PEP 301 implementation
Andrew M. Kuchling <amk@amk.ca>
parents:
diff changeset
234 'license': meta.get_licence(),
1cd9c8564875 [Patch #658094 ] PEP 301 implementation
Andrew M. Kuchling <amk@amk.ca>
parents:
diff changeset
235 'description': meta.get_long_description(),
1cd9c8564875 [Patch #658094 ] PEP 301 implementation
Andrew M. Kuchling <amk@amk.ca>
parents:
diff changeset
236 'keywords': meta.get_keywords(),
1cd9c8564875 [Patch #658094 ] PEP 301 implementation
Andrew M. Kuchling <amk@amk.ca>
parents:
diff changeset
237 'platform': meta.get_platforms(),
27974
d0d29df2b639 [Patch #684398] Rename verbose argument to show-response; don't conditionalize the get_classifiers() call
Andrew M. Kuchling <amk@amk.ca>
parents: 27945
diff changeset
238 'classifiers': meta.get_classifiers(),
27976
d5ea2b67b5f4 Include download_url in the data POSTed to the catalog server
Andrew M. Kuchling <amk@amk.ca>
parents: 27974
diff changeset
239 'download_url': meta.get_download_url(),
34785
dc6f315f1f7f PEP 314 implementation (client side):
Fred Drake <fdrake@acm.org>
parents: 32736
diff changeset
240 # PEP 314
dc6f315f1f7f PEP 314 implementation (client side):
Fred Drake <fdrake@acm.org>
parents: 32736
diff changeset
241 'provides': meta.get_provides(),
dc6f315f1f7f PEP 314 implementation (client side):
Fred Drake <fdrake@acm.org>
parents: 32736
diff changeset
242 'requires': meta.get_requires(),
dc6f315f1f7f PEP 314 implementation (client side):
Fred Drake <fdrake@acm.org>
parents: 32736
diff changeset
243 'obsoletes': meta.get_obsoletes(),
27049
1cd9c8564875 [Patch #658094 ] PEP 301 implementation
Andrew M. Kuchling <amk@amk.ca>
parents:
diff changeset
244 }
34785
dc6f315f1f7f PEP 314 implementation (client side):
Fred Drake <fdrake@acm.org>
parents: 32736
diff changeset
245 if data['provides'] or data['requires'] or data['obsoletes']:
dc6f315f1f7f PEP 314 implementation (client side):
Fred Drake <fdrake@acm.org>
parents: 32736
diff changeset
246 data['metadata_version'] = '1.1'
27049
1cd9c8564875 [Patch #658094 ] PEP 301 implementation
Andrew M. Kuchling <amk@amk.ca>
parents:
diff changeset
247 return data
1cd9c8564875 [Patch #658094 ] PEP 301 implementation
Andrew M. Kuchling <amk@amk.ca>
parents:
diff changeset
248
1cd9c8564875 [Patch #658094 ] PEP 301 implementation
Andrew M. Kuchling <amk@amk.ca>
parents:
diff changeset
249 def post_to_server(self, data, auth=None):
1cd9c8564875 [Patch #658094 ] PEP 301 implementation
Andrew M. Kuchling <amk@amk.ca>
parents:
diff changeset
250 ''' Post a query to the server, and return a string response.
1cd9c8564875 [Patch #658094 ] PEP 301 implementation
Andrew M. Kuchling <amk@amk.ca>
parents:
diff changeset
251 '''
52594
6640996f04e7 Merged revisions 70886,70888-70892 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents: 50639
diff changeset
252 if 'name' in data:
6640996f04e7 Merged revisions 70886,70888-70892 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents: 50639
diff changeset
253 self.announce('Registering %s to %s' % (data['name'],
6640996f04e7 Merged revisions 70886,70888-70892 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents: 50639
diff changeset
254 self.repository),
6640996f04e7 Merged revisions 70886,70888-70892 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents: 50639
diff changeset
255 log.INFO)
27049
1cd9c8564875 [Patch #658094 ] PEP 301 implementation
Andrew M. Kuchling <amk@amk.ca>
parents:
diff changeset
256 # Build up the MIME payload for the urllib2 POST data
1cd9c8564875 [Patch #658094 ] PEP 301 implementation
Andrew M. Kuchling <amk@amk.ca>
parents:
diff changeset
257 boundary = '--------------GHSKFJDLGDS7543FJKLFHRE75642756743254'
1cd9c8564875 [Patch #658094 ] PEP 301 implementation
Andrew M. Kuchling <amk@amk.ca>
parents:
diff changeset
258 sep_boundary = '\n--' + boundary
1cd9c8564875 [Patch #658094 ] PEP 301 implementation
Andrew M. Kuchling <amk@amk.ca>
parents:
diff changeset
259 end_boundary = sep_boundary + '--'
42501
f6069f9dd52d SF patch# 1770008 by Christian Heimes (plus some extras).
Guido van Rossum <guido@python.org>
parents: 42466
diff changeset
260 body = io.StringIO()
27049
1cd9c8564875 [Patch #658094 ] PEP 301 implementation
Andrew M. Kuchling <amk@amk.ca>
parents:
diff changeset
261 for key, value in data.items():
1cd9c8564875 [Patch #658094 ] PEP 301 implementation
Andrew M. Kuchling <amk@amk.ca>
parents:
diff changeset
262 # handle multiple entries for the same name
40450
cc992d75d5b3 Four months of trunk changes (including a few releases...)
Thomas Wouters <thomas@python.org>
parents: 37045
diff changeset
263 if type(value) not in (type([]), type( () )):
27049
1cd9c8564875 [Patch #658094 ] PEP 301 implementation
Andrew M. Kuchling <amk@amk.ca>
parents:
diff changeset
264 value = [value]
1cd9c8564875 [Patch #658094 ] PEP 301 implementation
Andrew M. Kuchling <amk@amk.ca>
parents:
diff changeset
265 for value in value:
49774
2da3fcd4935f Issue #4354: Fix distutils register command.
Martin v. Löwis <martin@v.loewis.de>
parents: 48334
diff changeset
266 value = str(value)
27049
1cd9c8564875 [Patch #658094 ] PEP 301 implementation
Andrew M. Kuchling <amk@amk.ca>
parents:
diff changeset
267 body.write(sep_boundary)
1cd9c8564875 [Patch #658094 ] PEP 301 implementation
Andrew M. Kuchling <amk@amk.ca>
parents:
diff changeset
268 body.write('\nContent-Disposition: form-data; name="%s"'%key)
1cd9c8564875 [Patch #658094 ] PEP 301 implementation
Andrew M. Kuchling <amk@amk.ca>
parents:
diff changeset
269 body.write("\n\n")
1cd9c8564875 [Patch #658094 ] PEP 301 implementation
Andrew M. Kuchling <amk@amk.ca>
parents:
diff changeset
270 body.write(value)
1cd9c8564875 [Patch #658094 ] PEP 301 implementation
Andrew M. Kuchling <amk@amk.ca>
parents:
diff changeset
271 if value and value[-1] == '\r':
1cd9c8564875 [Patch #658094 ] PEP 301 implementation
Andrew M. Kuchling <amk@amk.ca>
parents:
diff changeset
272 body.write('\n') # write an extra newline (lurve Macs)
1cd9c8564875 [Patch #658094 ] PEP 301 implementation
Andrew M. Kuchling <amk@amk.ca>
parents:
diff changeset
273 body.write(end_boundary)
1cd9c8564875 [Patch #658094 ] PEP 301 implementation
Andrew M. Kuchling <amk@amk.ca>
parents:
diff changeset
274 body.write("\n")
49774
2da3fcd4935f Issue #4354: Fix distutils register command.
Martin v. Löwis <martin@v.loewis.de>
parents: 48334
diff changeset
275 body = body.getvalue().encode("utf-8")
27049
1cd9c8564875 [Patch #658094 ] PEP 301 implementation
Andrew M. Kuchling <amk@amk.ca>
parents:
diff changeset
276
1cd9c8564875 [Patch #658094 ] PEP 301 implementation
Andrew M. Kuchling <amk@amk.ca>
parents:
diff changeset
277 # build the Request
1cd9c8564875 [Patch #658094 ] PEP 301 implementation
Andrew M. Kuchling <amk@amk.ca>
parents:
diff changeset
278 headers = {
34852
63c5d6ce0763 Since PyPI only accepts UTF-8 encoded data now, make sure that the data is
Walter Dörwald <walter@livinglogic.de>
parents: 34785
diff changeset
279 'Content-type': 'multipart/form-data; boundary=%s; charset=utf-8'%boundary,
27049
1cd9c8564875 [Patch #658094 ] PEP 301 implementation
Andrew M. Kuchling <amk@amk.ca>
parents:
diff changeset
280 'Content-length': str(len(body))
1cd9c8564875 [Patch #658094 ] PEP 301 implementation
Andrew M. Kuchling <amk@amk.ca>
parents:
diff changeset
281 }
48334
5a416a6417d3 Make a new urllib package .
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 47067
diff changeset
282 req = urllib.request.Request(self.repository, body, headers)
27049
1cd9c8564875 [Patch #658094 ] PEP 301 implementation
Andrew M. Kuchling <amk@amk.ca>
parents:
diff changeset
283
1cd9c8564875 [Patch #658094 ] PEP 301 implementation
Andrew M. Kuchling <amk@amk.ca>
parents:
diff changeset
284 # handle HTTP and include the Basic Auth handler
48334
5a416a6417d3 Make a new urllib package .
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 47067
diff changeset
285 opener = urllib.request.build_opener(
5a416a6417d3 Make a new urllib package .
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 47067
diff changeset
286 urllib.request.HTTPBasicAuthHandler(password_mgr=auth)
27049
1cd9c8564875 [Patch #658094 ] PEP 301 implementation
Andrew M. Kuchling <amk@amk.ca>
parents:
diff changeset
287 )
1cd9c8564875 [Patch #658094 ] PEP 301 implementation
Andrew M. Kuchling <amk@amk.ca>
parents:
diff changeset
288 data = ''
1cd9c8564875 [Patch #658094 ] PEP 301 implementation
Andrew M. Kuchling <amk@amk.ca>
parents:
diff changeset
289 try:
1cd9c8564875 [Patch #658094 ] PEP 301 implementation
Andrew M. Kuchling <amk@amk.ca>
parents:
diff changeset
290 result = opener.open(req)
48334
5a416a6417d3 Make a new urllib package .
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 47067
diff changeset
291 except urllib.error.HTTPError as e:
27974
d0d29df2b639 [Patch #684398] Rename verbose argument to show-response; don't conditionalize the get_classifiers() call
Andrew M. Kuchling <amk@amk.ca>
parents: 27945
diff changeset
292 if self.show_response:
27049
1cd9c8564875 [Patch #658094 ] PEP 301 implementation
Andrew M. Kuchling <amk@amk.ca>
parents:
diff changeset
293 data = e.fp.read()
1cd9c8564875 [Patch #658094 ] PEP 301 implementation
Andrew M. Kuchling <amk@amk.ca>
parents:
diff changeset
294 result = e.code, e.msg
48334
5a416a6417d3 Make a new urllib package .
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 47067
diff changeset
295 except urllib.error.URLError as e:
27049
1cd9c8564875 [Patch #658094 ] PEP 301 implementation
Andrew M. Kuchling <amk@amk.ca>
parents:
diff changeset
296 result = 500, str(e)
1cd9c8564875 [Patch #658094 ] PEP 301 implementation
Andrew M. Kuchling <amk@amk.ca>
parents:
diff changeset
297 else:
27974
d0d29df2b639 [Patch #684398] Rename verbose argument to show-response; don't conditionalize the get_classifiers() call
Andrew M. Kuchling <amk@amk.ca>
parents: 27945
diff changeset
298 if self.show_response:
27049
1cd9c8564875 [Patch #658094 ] PEP 301 implementation
Andrew M. Kuchling <amk@amk.ca>
parents:
diff changeset
299 data = result.read()
1cd9c8564875 [Patch #658094 ] PEP 301 implementation
Andrew M. Kuchling <amk@amk.ca>
parents:
diff changeset
300 result = 200, 'OK'
27974
d0d29df2b639 [Patch #684398] Rename verbose argument to show-response; don't conditionalize the get_classifiers() call
Andrew M. Kuchling <amk@amk.ca>
parents: 27945
diff changeset
301 if self.show_response:
52594
6640996f04e7 Merged revisions 70886,70888-70892 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents: 50639
diff changeset
302 dashes = '-' * 75
6640996f04e7 Merged revisions 70886,70888-70892 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents: 50639
diff changeset
303 self.announce('%s%s%s' % (dashes, data, dashes))
27049
1cd9c8564875 [Patch #658094 ] PEP 301 implementation
Andrew M. Kuchling <amk@amk.ca>
parents:
diff changeset
304 return result