annotate Lib/distutils/command/register.py @ 70817:dd775b1561ba

Fix markup.
author Georg Brandl <georg@python.org>
date Tue, 14 Jun 2011 21:09:55 +0200
parents 29a3eda89995
children 3e26c9033306
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
1cd9c8564875 [Patch #658094 ] PEP 301 implementation
Andrew M. Kuchling <amk@amk.ca>
parents:
diff changeset
8 __revision__ = "$Id$"
1cd9c8564875 [Patch #658094 ] PEP 301 implementation
Andrew M. Kuchling <amk@amk.ca>
parents:
diff changeset
9
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 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
11 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
12 import urllib.parse, urllib.request
54112
ac660ea35f52 Merged revisions 72681 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents: 52594
diff changeset
13 from warnings import warn
27049
1cd9c8564875 [Patch #658094 ] PEP 301 implementation
Andrew M. Kuchling <amk@amk.ca>
parents:
diff changeset
14
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.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
16 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
17 from distutils import log
27049
1cd9c8564875 [Patch #658094 ] PEP 301 implementation
Andrew M. Kuchling <amk@amk.ca>
parents:
diff changeset
18
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
19 class register(PyPIRCCommand):
27049
1cd9c8564875 [Patch #658094 ] PEP 301 implementation
Andrew M. Kuchling <amk@amk.ca>
parents:
diff changeset
20
28151
bda490fc2691 Improve description
Andrew M. Kuchling <amk@amk.ca>
parents: 27976
diff changeset
21 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
22 user_options = PyPIRCCommand.user_options + [
27049
1cd9c8564875 [Patch #658094 ] PEP 301 implementation
Andrew M. Kuchling <amk@amk.ca>
parents:
diff changeset
23 ('list-classifiers', None,
1cd9c8564875 [Patch #658094 ] PEP 301 implementation
Andrew M. Kuchling <amk@amk.ca>
parents:
diff changeset
24 'list the valid Trove classifiers'),
54112
ac660ea35f52 Merged revisions 72681 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents: 52594
diff changeset
25 ('strict', None ,
ac660ea35f52 Merged revisions 72681 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents: 52594
diff changeset
26 '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
27 ]
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
28 boolean_options = PyPIRCCommand.boolean_options + [
54112
ac660ea35f52 Merged revisions 72681 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents: 52594
diff changeset
29 'verify', 'list-classifiers', 'strict']
ac660ea35f52 Merged revisions 72681 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents: 52594
diff changeset
30
ac660ea35f52 Merged revisions 72681 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents: 52594
diff changeset
31 sub_commands = [('check', lambda self: True)]
27049
1cd9c8564875 [Patch #658094 ] PEP 301 implementation
Andrew M. Kuchling <amk@amk.ca>
parents:
diff changeset
32
1cd9c8564875 [Patch #658094 ] PEP 301 implementation
Andrew M. Kuchling <amk@amk.ca>
parents:
diff changeset
33 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
34 PyPIRCCommand.initialize_options(self)
27049
1cd9c8564875 [Patch #658094 ] PEP 301 implementation
Andrew M. Kuchling <amk@amk.ca>
parents:
diff changeset
35 self.list_classifiers = 0
54112
ac660ea35f52 Merged revisions 72681 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents: 52594
diff changeset
36 self.strict = 0
ac660ea35f52 Merged revisions 72681 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents: 52594
diff changeset
37
ac660ea35f52 Merged revisions 72681 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents: 52594
diff changeset
38 def finalize_options(self):
ac660ea35f52 Merged revisions 72681 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents: 52594
diff changeset
39 PyPIRCCommand.finalize_options(self)
ac660ea35f52 Merged revisions 72681 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents: 52594
diff changeset
40 # setting options for the `check` subcommand
ac660ea35f52 Merged revisions 72681 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents: 52594
diff changeset
41 check_options = {'strict': ('register', self.strict),
ac660ea35f52 Merged revisions 72681 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents: 52594
diff changeset
42 'restructuredtext': ('register', 1)}
ac660ea35f52 Merged revisions 72681 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents: 52594
diff changeset
43 self.distribution.command_options['check'] = check_options
27049
1cd9c8564875 [Patch #658094 ] PEP 301 implementation
Andrew M. Kuchling <amk@amk.ca>
parents:
diff changeset
44
1cd9c8564875 [Patch #658094 ] PEP 301 implementation
Andrew M. Kuchling <amk@amk.ca>
parents:
diff changeset
45 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
46 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
47 self._set_config()
54112
ac660ea35f52 Merged revisions 72681 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents: 52594
diff changeset
48
ac660ea35f52 Merged revisions 72681 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents: 52594
diff changeset
49 # Run sub commands
ac660ea35f52 Merged revisions 72681 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents: 52594
diff changeset
50 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
51 self.run_command(cmd_name)
ac660ea35f52 Merged revisions 72681 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents: 52594
diff changeset
52
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
53 if self.dry_run:
27049
1cd9c8564875 [Patch #658094 ] PEP 301 implementation
Andrew M. Kuchling <amk@amk.ca>
parents:
diff changeset
54 self.verify_metadata()
1cd9c8564875 [Patch #658094 ] PEP 301 implementation
Andrew M. Kuchling <amk@amk.ca>
parents:
diff changeset
55 elif self.list_classifiers:
1cd9c8564875 [Patch #658094 ] PEP 301 implementation
Andrew M. Kuchling <amk@amk.ca>
parents:
diff changeset
56 self.classifiers()
1cd9c8564875 [Patch #658094 ] PEP 301 implementation
Andrew M. Kuchling <amk@amk.ca>
parents:
diff changeset
57 else:
1cd9c8564875 [Patch #658094 ] PEP 301 implementation
Andrew M. Kuchling <amk@amk.ca>
parents:
diff changeset
58 self.send_metadata()
1cd9c8564875 [Patch #658094 ] PEP 301 implementation
Andrew M. Kuchling <amk@amk.ca>
parents:
diff changeset
59
1cd9c8564875 [Patch #658094 ] PEP 301 implementation
Andrew M. Kuchling <amk@amk.ca>
parents:
diff changeset
60 def check_metadata(self):
54112
ac660ea35f52 Merged revisions 72681 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents: 52594
diff changeset
61 """Deprecated API."""
ac660ea35f52 Merged revisions 72681 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents: 52594
diff changeset
62 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
63 use the check command instead", PendingDeprecationWarning)
ac660ea35f52 Merged revisions 72681 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents: 52594
diff changeset
64 check = self.distribution.get_command_obj('check')
ac660ea35f52 Merged revisions 72681 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents: 52594
diff changeset
65 check.ensure_finalized()
ac660ea35f52 Merged revisions 72681 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents: 52594
diff changeset
66 check.strict = self.strict
ac660ea35f52 Merged revisions 72681 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents: 52594
diff changeset
67 check.restructuredtext = 1
ac660ea35f52 Merged revisions 72681 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents: 52594
diff changeset
68 check.run()
27049
1cd9c8564875 [Patch #658094 ] PEP 301 implementation
Andrew M. Kuchling <amk@amk.ca>
parents:
diff changeset
69
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
70 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
71 ''' 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
72 '''
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 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
74 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
75 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
76 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
77 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
78 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
79 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
80 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
81 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
82 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
83 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
84 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
85 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
86
27049
1cd9c8564875 [Patch #658094 ] PEP 301 implementation
Andrew M. Kuchling <amk@amk.ca>
parents:
diff changeset
87 def classifiers(self):
1cd9c8564875 [Patch #658094 ] PEP 301 implementation
Andrew M. Kuchling <amk@amk.ca>
parents:
diff changeset
88 ''' Fetch the list of classifiers from the server.
1cd9c8564875 [Patch #658094 ] PEP 301 implementation
Andrew M. Kuchling <amk@amk.ca>
parents:
diff changeset
89 '''
48334
5a416a6417d3 Make a new urllib package .
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 47067
diff changeset
90 url = self.repository+'?:action=list_classifiers'
5a416a6417d3 Make a new urllib package .
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 47067
diff changeset
91 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
92 log.info(response.read())
27049
1cd9c8564875 [Patch #658094 ] PEP 301 implementation
Andrew M. Kuchling <amk@amk.ca>
parents:
diff changeset
93
1cd9c8564875 [Patch #658094 ] PEP 301 implementation
Andrew M. Kuchling <amk@amk.ca>
parents:
diff changeset
94 def verify_metadata(self):
1cd9c8564875 [Patch #658094 ] PEP 301 implementation
Andrew M. Kuchling <amk@amk.ca>
parents:
diff changeset
95 ''' 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
96 '''
1cd9c8564875 [Patch #658094 ] PEP 301 implementation
Andrew M. Kuchling <amk@amk.ca>
parents:
diff changeset
97 # 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
98 (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
99 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
100
27049
1cd9c8564875 [Patch #658094 ] PEP 301 implementation
Andrew M. Kuchling <amk@amk.ca>
parents:
diff changeset
101 def send_metadata(self):
1cd9c8564875 [Patch #658094 ] PEP 301 implementation
Andrew M. Kuchling <amk@amk.ca>
parents:
diff changeset
102 ''' Send the metadata to the package index server.
1cd9c8564875 [Patch #658094 ] PEP 301 implementation
Andrew M. Kuchling <amk@amk.ca>
parents:
diff changeset
103
1cd9c8564875 [Patch #658094 ] PEP 301 implementation
Andrew M. Kuchling <amk@amk.ca>
parents:
diff changeset
104 Well, do the following:
1cd9c8564875 [Patch #658094 ] PEP 301 implementation
Andrew M. Kuchling <amk@amk.ca>
parents:
diff changeset
105 1. figure who the user is, and then
1cd9c8564875 [Patch #658094 ] PEP 301 implementation
Andrew M. Kuchling <amk@amk.ca>
parents:
diff changeset
106 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
107
1cd9c8564875 [Patch #658094 ] PEP 301 implementation
Andrew M. Kuchling <amk@amk.ca>
parents:
diff changeset
108 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
109 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
110 [distutils] containing username and password entries (both
27049
1cd9c8564875 [Patch #658094 ] PEP 301 implementation
Andrew M. Kuchling <amk@amk.ca>
parents:
diff changeset
111 in clear text). Eg:
1cd9c8564875 [Patch #658094 ] PEP 301 implementation
Andrew M. Kuchling <amk@amk.ca>
parents:
diff changeset
112
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
113 [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
114 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
115 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
116
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
117 [pypi]
27049
1cd9c8564875 [Patch #658094 ] PEP 301 implementation
Andrew M. Kuchling <amk@amk.ca>
parents:
diff changeset
118 username: fred
1cd9c8564875 [Patch #658094 ] PEP 301 implementation
Andrew M. Kuchling <amk@amk.ca>
parents:
diff changeset
119 password: sekrit
1cd9c8564875 [Patch #658094 ] PEP 301 implementation
Andrew M. Kuchling <amk@amk.ca>
parents:
diff changeset
120
1cd9c8564875 [Patch #658094 ] PEP 301 implementation
Andrew M. Kuchling <amk@amk.ca>
parents:
diff changeset
121 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
122 choices:
1cd9c8564875 [Patch #658094 ] PEP 301 implementation
Andrew M. Kuchling <amk@amk.ca>
parents:
diff changeset
123
1cd9c8564875 [Patch #658094 ] PEP 301 implementation
Andrew M. Kuchling <amk@amk.ca>
parents:
diff changeset
124 1. use existing login,
1cd9c8564875 [Patch #658094 ] PEP 301 implementation
Andrew M. Kuchling <amk@amk.ca>
parents:
diff changeset
125 2. register as a new user, or
1cd9c8564875 [Patch #658094 ] PEP 301 implementation
Andrew M. Kuchling <amk@amk.ca>
parents:
diff changeset
126 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
127
1cd9c8564875 [Patch #658094 ] PEP 301 implementation
Andrew M. Kuchling <amk@amk.ca>
parents:
diff changeset
128 '''
1cd9c8564875 [Patch #658094 ] PEP 301 implementation
Andrew M. Kuchling <amk@amk.ca>
parents:
diff changeset
129 # 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
130 # 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
131 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
132 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
133 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
134 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
135 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
136 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
137 username = password = ''
27049
1cd9c8564875 [Patch #658094 ] PEP 301 implementation
Andrew M. Kuchling <amk@amk.ca>
parents:
diff changeset
138
1cd9c8564875 [Patch #658094 ] PEP 301 implementation
Andrew M. Kuchling <amk@amk.ca>
parents:
diff changeset
139 # get the user's login info
1cd9c8564875 [Patch #658094 ] PEP 301 implementation
Andrew M. Kuchling <amk@amk.ca>
parents:
diff changeset
140 choices = '1 2 3 4'.split()
1cd9c8564875 [Patch #658094 ] PEP 301 implementation
Andrew M. Kuchling <amk@amk.ca>
parents:
diff changeset
141 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
142 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
143 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
144 1. use your existing login,
1cd9c8564875 [Patch #658094 ] PEP 301 implementation
Andrew M. Kuchling <amk@amk.ca>
parents:
diff changeset
145 2. register as a new user,
1cd9c8564875 [Patch #658094 ] PEP 301 implementation
Andrew M. Kuchling <amk@amk.ca>
parents:
diff changeset
146 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
147 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
148 Your selection [default 1]: ''', log.INFO)
50304
d281ebf8ea30 fix 2.x isms in distutils test
Benjamin Peterson <benjamin@python.org>
parents: 50302
diff changeset
149 choice = input()
27049
1cd9c8564875 [Patch #658094 ] PEP 301 implementation
Andrew M. Kuchling <amk@amk.ca>
parents:
diff changeset
150 if not choice:
1cd9c8564875 [Patch #658094 ] PEP 301 implementation
Andrew M. Kuchling <amk@amk.ca>
parents:
diff changeset
151 choice = '1'
1cd9c8564875 [Patch #658094 ] PEP 301 implementation
Andrew M. Kuchling <amk@amk.ca>
parents:
diff changeset
152 elif choice not in choices:
40775
4cdf21a0dbbc Fix most trivially-findable print statements.
Guido van Rossum <guido@python.org>
parents: 40587
diff changeset
153 print('Please choose one of the four options!')
27049
1cd9c8564875 [Patch #658094 ] PEP 301 implementation
Andrew M. Kuchling <amk@amk.ca>
parents:
diff changeset
154
1cd9c8564875 [Patch #658094 ] PEP 301 implementation
Andrew M. Kuchling <amk@amk.ca>
parents:
diff changeset
155 if choice == '1':
1cd9c8564875 [Patch #658094 ] PEP 301 implementation
Andrew M. Kuchling <amk@amk.ca>
parents:
diff changeset
156 # get the username and password
1cd9c8564875 [Patch #658094 ] PEP 301 implementation
Andrew M. Kuchling <amk@amk.ca>
parents:
diff changeset
157 while not username:
49774
2da3fcd4935f Issue #4354: Fix distutils register command.
Martin v. Löwis <martin@v.loewis.de>
parents: 48334
diff changeset
158 username = input('Username: ')
27049
1cd9c8564875 [Patch #658094 ] PEP 301 implementation
Andrew M. Kuchling <amk@amk.ca>
parents:
diff changeset
159 while not password:
1cd9c8564875 [Patch #658094 ] PEP 301 implementation
Andrew M. Kuchling <amk@amk.ca>
parents:
diff changeset
160 password = getpass.getpass('Password: ')
1cd9c8564875 [Patch #658094 ] PEP 301 implementation
Andrew M. Kuchling <amk@amk.ca>
parents:
diff changeset
161
1cd9c8564875 [Patch #658094 ] PEP 301 implementation
Andrew M. Kuchling <amk@amk.ca>
parents:
diff changeset
162 # set up the authentication
48334
5a416a6417d3 Make a new urllib package .
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 47067
diff changeset
163 auth = urllib.request.HTTPPasswordMgr()
5a416a6417d3 Make a new urllib package .
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 47067
diff changeset
164 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
165 auth.add_password(self.realm, host, username, password)
27049
1cd9c8564875 [Patch #658094 ] PEP 301 implementation
Andrew M. Kuchling <amk@amk.ca>
parents:
diff changeset
166 # 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
167 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
168 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
169 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
170 log.INFO)
27049
1cd9c8564875 [Patch #658094 ] PEP 301 implementation
Andrew M. Kuchling <amk@amk.ca>
parents:
diff changeset
171
1cd9c8564875 [Patch #658094 ] PEP 301 implementation
Andrew M. Kuchling <amk@amk.ca>
parents:
diff changeset
172 # possibly save the login
50639
589f6844d8e0 Merged revisions 68415 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents: 50304
diff changeset
173 if code == 200:
589f6844d8e0 Merged revisions 68415 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents: 50304
diff changeset
174 if self.has_config:
589f6844d8e0 Merged revisions 68415 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents: 50304
diff changeset
175 # sharing the password in the distribution instance
589f6844d8e0 Merged revisions 68415 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents: 50304
diff changeset
176 # so the upload command can reuse it
589f6844d8e0 Merged revisions 68415 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents: 50304
diff changeset
177 self.distribution.password = password
589f6844d8e0 Merged revisions 68415 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents: 50304
diff changeset
178 else:
589f6844d8e0 Merged revisions 68415 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents: 50304
diff changeset
179 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
180 'submissions will be faster.'), log.INFO)
589f6844d8e0 Merged revisions 68415 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents: 50304
diff changeset
181 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
182 self._get_rc_file(), log.INFO)
589f6844d8e0 Merged revisions 68415 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents: 50304
diff changeset
183 choice = 'X'
589f6844d8e0 Merged revisions 68415 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents: 50304
diff changeset
184 while choice.lower() not in 'yn':
589f6844d8e0 Merged revisions 68415 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents: 50304
diff changeset
185 choice = input('Save your login (y/N)?')
589f6844d8e0 Merged revisions 68415 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents: 50304
diff changeset
186 if not choice:
589f6844d8e0 Merged revisions 68415 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents: 50304
diff changeset
187 choice = 'n'
589f6844d8e0 Merged revisions 68415 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents: 50304
diff changeset
188 if choice.lower() == 'y':
589f6844d8e0 Merged revisions 68415 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents: 50304
diff changeset
189 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
190
27049
1cd9c8564875 [Patch #658094 ] PEP 301 implementation
Andrew M. Kuchling <amk@amk.ca>
parents:
diff changeset
191 elif choice == '2':
1cd9c8564875 [Patch #658094 ] PEP 301 implementation
Andrew M. Kuchling <amk@amk.ca>
parents:
diff changeset
192 data = {':action': 'user'}
1cd9c8564875 [Patch #658094 ] PEP 301 implementation
Andrew M. Kuchling <amk@amk.ca>
parents:
diff changeset
193 data['name'] = data['password'] = data['email'] = ''
1cd9c8564875 [Patch #658094 ] PEP 301 implementation
Andrew M. Kuchling <amk@amk.ca>
parents:
diff changeset
194 data['confirm'] = None
1cd9c8564875 [Patch #658094 ] PEP 301 implementation
Andrew M. Kuchling <amk@amk.ca>
parents:
diff changeset
195 while not data['name']:
49774
2da3fcd4935f Issue #4354: Fix distutils register command.
Martin v. Löwis <martin@v.loewis.de>
parents: 48334
diff changeset
196 data['name'] = input('Username: ')
27049
1cd9c8564875 [Patch #658094 ] PEP 301 implementation
Andrew M. Kuchling <amk@amk.ca>
parents:
diff changeset
197 while data['password'] != data['confirm']:
1cd9c8564875 [Patch #658094 ] PEP 301 implementation
Andrew M. Kuchling <amk@amk.ca>
parents:
diff changeset
198 while not data['password']:
1cd9c8564875 [Patch #658094 ] PEP 301 implementation
Andrew M. Kuchling <amk@amk.ca>
parents:
diff changeset
199 data['password'] = getpass.getpass('Password: ')
1cd9c8564875 [Patch #658094 ] PEP 301 implementation
Andrew M. Kuchling <amk@amk.ca>
parents:
diff changeset
200 while not data['confirm']:
1cd9c8564875 [Patch #658094 ] PEP 301 implementation
Andrew M. Kuchling <amk@amk.ca>
parents:
diff changeset
201 data['confirm'] = getpass.getpass(' Confirm: ')
1cd9c8564875 [Patch #658094 ] PEP 301 implementation
Andrew M. Kuchling <amk@amk.ca>
parents:
diff changeset
202 if data['password'] != data['confirm']:
1cd9c8564875 [Patch #658094 ] PEP 301 implementation
Andrew M. Kuchling <amk@amk.ca>
parents:
diff changeset
203 data['password'] = ''
1cd9c8564875 [Patch #658094 ] PEP 301 implementation
Andrew M. Kuchling <amk@amk.ca>
parents:
diff changeset
204 data['confirm'] = None
40775
4cdf21a0dbbc Fix most trivially-findable print statements.
Guido van Rossum <guido@python.org>
parents: 40587
diff changeset
205 print("Password and confirm don't match!")
27049
1cd9c8564875 [Patch #658094 ] PEP 301 implementation
Andrew M. Kuchling <amk@amk.ca>
parents:
diff changeset
206 while not data['email']:
49774
2da3fcd4935f Issue #4354: Fix distutils register command.
Martin v. Löwis <martin@v.loewis.de>
parents: 48334
diff changeset
207 data['email'] = input(' EMail: ')
27049
1cd9c8564875 [Patch #658094 ] PEP 301 implementation
Andrew M. Kuchling <amk@amk.ca>
parents:
diff changeset
208 code, result = self.post_to_server(data)
1cd9c8564875 [Patch #658094 ] PEP 301 implementation
Andrew M. Kuchling <amk@amk.ca>
parents:
diff changeset
209 if code != 200:
52594
6640996f04e7 Merged revisions 70886,70888-70892 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents: 50639
diff changeset
210 log.info('Server response (%s): %s' % (code, result))
27049
1cd9c8564875 [Patch #658094 ] PEP 301 implementation
Andrew M. Kuchling <amk@amk.ca>
parents:
diff changeset
211 else:
52594
6640996f04e7 Merged revisions 70886,70888-70892 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents: 50639
diff changeset
212 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
213 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
214 'complete registration.'))
27049
1cd9c8564875 [Patch #658094 ] PEP 301 implementation
Andrew M. Kuchling <amk@amk.ca>
parents:
diff changeset
215 elif choice == '3':
1cd9c8564875 [Patch #658094 ] PEP 301 implementation
Andrew M. Kuchling <amk@amk.ca>
parents:
diff changeset
216 data = {':action': 'password_reset'}
1cd9c8564875 [Patch #658094 ] PEP 301 implementation
Andrew M. Kuchling <amk@amk.ca>
parents:
diff changeset
217 data['email'] = ''
1cd9c8564875 [Patch #658094 ] PEP 301 implementation
Andrew M. Kuchling <amk@amk.ca>
parents:
diff changeset
218 while not data['email']:
49774
2da3fcd4935f Issue #4354: Fix distutils register command.
Martin v. Löwis <martin@v.loewis.de>
parents: 48334
diff changeset
219 data['email'] = input('Your email address: ')
27049
1cd9c8564875 [Patch #658094 ] PEP 301 implementation
Andrew M. Kuchling <amk@amk.ca>
parents:
diff changeset
220 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
221 log.info('Server response (%s): %s' % (code, result))
27049
1cd9c8564875 [Patch #658094 ] PEP 301 implementation
Andrew M. Kuchling <amk@amk.ca>
parents:
diff changeset
222
1cd9c8564875 [Patch #658094 ] PEP 301 implementation
Andrew M. Kuchling <amk@amk.ca>
parents:
diff changeset
223 def build_post_data(self, action):
1cd9c8564875 [Patch #658094 ] PEP 301 implementation
Andrew M. Kuchling <amk@amk.ca>
parents:
diff changeset
224 # 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
225 # information used by the package server
1cd9c8564875 [Patch #658094 ] PEP 301 implementation
Andrew M. Kuchling <amk@amk.ca>
parents:
diff changeset
226 meta = self.distribution.metadata
1cd9c8564875 [Patch #658094 ] PEP 301 implementation
Andrew M. Kuchling <amk@amk.ca>
parents:
diff changeset
227 data = {
1cd9c8564875 [Patch #658094 ] PEP 301 implementation
Andrew M. Kuchling <amk@amk.ca>
parents:
diff changeset
228 ':action': action,
1cd9c8564875 [Patch #658094 ] PEP 301 implementation
Andrew M. Kuchling <amk@amk.ca>
parents:
diff changeset
229 'metadata_version' : '1.0',
1cd9c8564875 [Patch #658094 ] PEP 301 implementation
Andrew M. Kuchling <amk@amk.ca>
parents:
diff changeset
230 'name': meta.get_name(),
1cd9c8564875 [Patch #658094 ] PEP 301 implementation
Andrew M. Kuchling <amk@amk.ca>
parents:
diff changeset
231 'version': meta.get_version(),
1cd9c8564875 [Patch #658094 ] PEP 301 implementation
Andrew M. Kuchling <amk@amk.ca>
parents:
diff changeset
232 'summary': meta.get_description(),
1cd9c8564875 [Patch #658094 ] PEP 301 implementation
Andrew M. Kuchling <amk@amk.ca>
parents:
diff changeset
233 'home_page': meta.get_url(),
1cd9c8564875 [Patch #658094 ] PEP 301 implementation
Andrew M. Kuchling <amk@amk.ca>
parents:
diff changeset
234 'author': meta.get_contact(),
1cd9c8564875 [Patch #658094 ] PEP 301 implementation
Andrew M. Kuchling <amk@amk.ca>
parents:
diff changeset
235 'author_email': meta.get_contact_email(),
1cd9c8564875 [Patch #658094 ] PEP 301 implementation
Andrew M. Kuchling <amk@amk.ca>
parents:
diff changeset
236 'license': meta.get_licence(),
1cd9c8564875 [Patch #658094 ] PEP 301 implementation
Andrew M. Kuchling <amk@amk.ca>
parents:
diff changeset
237 'description': meta.get_long_description(),
1cd9c8564875 [Patch #658094 ] PEP 301 implementation
Andrew M. Kuchling <amk@amk.ca>
parents:
diff changeset
238 'keywords': meta.get_keywords(),
1cd9c8564875 [Patch #658094 ] PEP 301 implementation
Andrew M. Kuchling <amk@amk.ca>
parents:
diff changeset
239 '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
240 '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
241 'download_url': meta.get_download_url(),
34785
dc6f315f1f7f PEP 314 implementation (client side):
Fred Drake <fdrake@acm.org>
parents: 32736
diff changeset
242 # PEP 314
dc6f315f1f7f PEP 314 implementation (client side):
Fred Drake <fdrake@acm.org>
parents: 32736
diff changeset
243 'provides': meta.get_provides(),
dc6f315f1f7f PEP 314 implementation (client side):
Fred Drake <fdrake@acm.org>
parents: 32736
diff changeset
244 'requires': meta.get_requires(),
dc6f315f1f7f PEP 314 implementation (client side):
Fred Drake <fdrake@acm.org>
parents: 32736
diff changeset
245 'obsoletes': meta.get_obsoletes(),
27049
1cd9c8564875 [Patch #658094 ] PEP 301 implementation
Andrew M. Kuchling <amk@amk.ca>
parents:
diff changeset
246 }
34785
dc6f315f1f7f PEP 314 implementation (client side):
Fred Drake <fdrake@acm.org>
parents: 32736
diff changeset
247 if data['provides'] or data['requires'] or data['obsoletes']:
dc6f315f1f7f PEP 314 implementation (client side):
Fred Drake <fdrake@acm.org>
parents: 32736
diff changeset
248 data['metadata_version'] = '1.1'
27049
1cd9c8564875 [Patch #658094 ] PEP 301 implementation
Andrew M. Kuchling <amk@amk.ca>
parents:
diff changeset
249 return data
1cd9c8564875 [Patch #658094 ] PEP 301 implementation
Andrew M. Kuchling <amk@amk.ca>
parents:
diff changeset
250
1cd9c8564875 [Patch #658094 ] PEP 301 implementation
Andrew M. Kuchling <amk@amk.ca>
parents:
diff changeset
251 def post_to_server(self, data, auth=None):
1cd9c8564875 [Patch #658094 ] PEP 301 implementation
Andrew M. Kuchling <amk@amk.ca>
parents:
diff changeset
252 ''' 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
253 '''
52594
6640996f04e7 Merged revisions 70886,70888-70892 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents: 50639
diff changeset
254 if 'name' in data:
6640996f04e7 Merged revisions 70886,70888-70892 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents: 50639
diff changeset
255 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
256 self.repository),
6640996f04e7 Merged revisions 70886,70888-70892 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents: 50639
diff changeset
257 log.INFO)
27049
1cd9c8564875 [Patch #658094 ] PEP 301 implementation
Andrew M. Kuchling <amk@amk.ca>
parents:
diff changeset
258 # 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
259 boundary = '--------------GHSKFJDLGDS7543FJKLFHRE75642756743254'
1cd9c8564875 [Patch #658094 ] PEP 301 implementation
Andrew M. Kuchling <amk@amk.ca>
parents:
diff changeset
260 sep_boundary = '\n--' + boundary
1cd9c8564875 [Patch #658094 ] PEP 301 implementation
Andrew M. Kuchling <amk@amk.ca>
parents:
diff changeset
261 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
262 body = io.StringIO()
27049
1cd9c8564875 [Patch #658094 ] PEP 301 implementation
Andrew M. Kuchling <amk@amk.ca>
parents:
diff changeset
263 for key, value in data.items():
1cd9c8564875 [Patch #658094 ] PEP 301 implementation
Andrew M. Kuchling <amk@amk.ca>
parents:
diff changeset
264 # 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
265 if type(value) not in (type([]), type( () )):
27049
1cd9c8564875 [Patch #658094 ] PEP 301 implementation
Andrew M. Kuchling <amk@amk.ca>
parents:
diff changeset
266 value = [value]
1cd9c8564875 [Patch #658094 ] PEP 301 implementation
Andrew M. Kuchling <amk@amk.ca>
parents:
diff changeset
267 for value in value:
49774
2da3fcd4935f Issue #4354: Fix distutils register command.
Martin v. Löwis <martin@v.loewis.de>
parents: 48334
diff changeset
268 value = str(value)
27049
1cd9c8564875 [Patch #658094 ] PEP 301 implementation
Andrew M. Kuchling <amk@amk.ca>
parents:
diff changeset
269 body.write(sep_boundary)
1cd9c8564875 [Patch #658094 ] PEP 301 implementation
Andrew M. Kuchling <amk@amk.ca>
parents:
diff changeset
270 body.write('\nContent-Disposition: form-data; name="%s"'%key)
1cd9c8564875 [Patch #658094 ] PEP 301 implementation
Andrew M. Kuchling <amk@amk.ca>
parents:
diff changeset
271 body.write("\n\n")
1cd9c8564875 [Patch #658094 ] PEP 301 implementation
Andrew M. Kuchling <amk@amk.ca>
parents:
diff changeset
272 body.write(value)
1cd9c8564875 [Patch #658094 ] PEP 301 implementation
Andrew M. Kuchling <amk@amk.ca>
parents:
diff changeset
273 if value and value[-1] == '\r':
1cd9c8564875 [Patch #658094 ] PEP 301 implementation
Andrew M. Kuchling <amk@amk.ca>
parents:
diff changeset
274 body.write('\n') # write an extra newline (lurve Macs)
1cd9c8564875 [Patch #658094 ] PEP 301 implementation
Andrew M. Kuchling <amk@amk.ca>
parents:
diff changeset
275 body.write(end_boundary)
1cd9c8564875 [Patch #658094 ] PEP 301 implementation
Andrew M. Kuchling <amk@amk.ca>
parents:
diff changeset
276 body.write("\n")
49774
2da3fcd4935f Issue #4354: Fix distutils register command.
Martin v. Löwis <martin@v.loewis.de>
parents: 48334
diff changeset
277 body = body.getvalue().encode("utf-8")
27049
1cd9c8564875 [Patch #658094 ] PEP 301 implementation
Andrew M. Kuchling <amk@amk.ca>
parents:
diff changeset
278
1cd9c8564875 [Patch #658094 ] PEP 301 implementation
Andrew M. Kuchling <amk@amk.ca>
parents:
diff changeset
279 # build the Request
1cd9c8564875 [Patch #658094 ] PEP 301 implementation
Andrew M. Kuchling <amk@amk.ca>
parents:
diff changeset
280 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
281 '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
282 'Content-length': str(len(body))
1cd9c8564875 [Patch #658094 ] PEP 301 implementation
Andrew M. Kuchling <amk@amk.ca>
parents:
diff changeset
283 }
48334
5a416a6417d3 Make a new urllib package .
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 47067
diff changeset
284 req = urllib.request.Request(self.repository, body, headers)
27049
1cd9c8564875 [Patch #658094 ] PEP 301 implementation
Andrew M. Kuchling <amk@amk.ca>
parents:
diff changeset
285
1cd9c8564875 [Patch #658094 ] PEP 301 implementation
Andrew M. Kuchling <amk@amk.ca>
parents:
diff changeset
286 # 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
287 opener = urllib.request.build_opener(
5a416a6417d3 Make a new urllib package .
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 47067
diff changeset
288 urllib.request.HTTPBasicAuthHandler(password_mgr=auth)
27049
1cd9c8564875 [Patch #658094 ] PEP 301 implementation
Andrew M. Kuchling <amk@amk.ca>
parents:
diff changeset
289 )
1cd9c8564875 [Patch #658094 ] PEP 301 implementation
Andrew M. Kuchling <amk@amk.ca>
parents:
diff changeset
290 data = ''
1cd9c8564875 [Patch #658094 ] PEP 301 implementation
Andrew M. Kuchling <amk@amk.ca>
parents:
diff changeset
291 try:
1cd9c8564875 [Patch #658094 ] PEP 301 implementation
Andrew M. Kuchling <amk@amk.ca>
parents:
diff changeset
292 result = opener.open(req)
48334
5a416a6417d3 Make a new urllib package .
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 47067
diff changeset
293 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
294 if self.show_response:
27049
1cd9c8564875 [Patch #658094 ] PEP 301 implementation
Andrew M. Kuchling <amk@amk.ca>
parents:
diff changeset
295 data = e.fp.read()
1cd9c8564875 [Patch #658094 ] PEP 301 implementation
Andrew M. Kuchling <amk@amk.ca>
parents:
diff changeset
296 result = e.code, e.msg
48334
5a416a6417d3 Make a new urllib package .
Jeremy Hylton <jeremy@alum.mit.edu>
parents: 47067
diff changeset
297 except urllib.error.URLError as e:
27049
1cd9c8564875 [Patch #658094 ] PEP 301 implementation
Andrew M. Kuchling <amk@amk.ca>
parents:
diff changeset
298 result = 500, str(e)
1cd9c8564875 [Patch #658094 ] PEP 301 implementation
Andrew M. Kuchling <amk@amk.ca>
parents:
diff changeset
299 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
300 if self.show_response:
27049
1cd9c8564875 [Patch #658094 ] PEP 301 implementation
Andrew M. Kuchling <amk@amk.ca>
parents:
diff changeset
301 data = result.read()
1cd9c8564875 [Patch #658094 ] PEP 301 implementation
Andrew M. Kuchling <amk@amk.ca>
parents:
diff changeset
302 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
303 if self.show_response:
52594
6640996f04e7 Merged revisions 70886,70888-70892 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents: 50639
diff changeset
304 dashes = '-' * 75
6640996f04e7 Merged revisions 70886,70888-70892 via svnmerge from
Tarek Ziadé <ziade.tarek@gmail.com>
parents: 50639
diff changeset
305 self.announce('%s%s%s' % (dashes, data, dashes))
27049
1cd9c8564875 [Patch #658094 ] PEP 301 implementation
Andrew M. Kuchling <amk@amk.ca>
parents:
diff changeset
306 return result