Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
S
setuptools
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Issues
0
Issues
0
List
Boards
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Analytics
Analytics
CI / CD
Repository
Value Stream
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
Jérome Perrin
setuptools
Commits
39dd5934
Commit
39dd5934
authored
Nov 24, 2013
by
Jason R. Coombs
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Remove upload command (no longer relevant on Python 2.6+
parent
2833cdcc
Changes
2
Hide whitespace changes
Inline
Side-by-side
Showing
2 changed files
with
1 addition
and
188 deletions
+1
-188
setuptools/command/__init__.py
setuptools/command/__init__.py
+1
-5
setuptools/command/upload.py
setuptools/command/upload.py
+0
-183
No files found.
setuptools/command/__init__.py
View file @
39dd5934
__all__
=
[
'alias'
,
'bdist_egg'
,
'bdist_rpm'
,
'build_ext'
,
'build_py'
,
'develop'
,
'easy_install'
,
'egg_info'
,
'install'
,
'install_lib'
,
'rotate'
,
'saveopts'
,
'sdist'
,
'setopt'
,
'test'
,
'
upload'
,
'
install_egg_info'
,
'install_scripts'
,
'sdist'
,
'setopt'
,
'test'
,
'install_egg_info'
,
'install_scripts'
,
'register'
,
'bdist_wininst'
,
'upload_docs'
,
]
from
setuptools.command
import
install_scripts
import
sys
if
sys
.
version
>=
'2.5'
:
# In Python 2.5 and above, distutils includes its own upload command
__all__
.
remove
(
'upload'
)
from
distutils.command.bdist
import
bdist
if
'egg'
not
in
bdist
.
format_commands
:
...
...
setuptools/command/upload.py
deleted
100755 → 0
View file @
2833cdcc
"""distutils.command.upload
Implements the Distutils 'upload' subcommand (upload package to PyPI)."""
from
distutils
import
errors
from
distutils
import
log
from
distutils.core
import
Command
from
distutils.spawn
import
spawn
try
:
from
hashlib
import
md5
except
ImportError
:
from
md5
import
md5
import
os
import
sys
import
socket
import
platform
import
base64
from
setuptools.compat
import
urlparse
,
StringIO
,
httplib
,
ConfigParser
class
upload
(
Command
):
description
=
"upload binary package to PyPI"
DEFAULT_REPOSITORY
=
'https://pypi.python.org/pypi'
user_options
=
[
(
'repository='
,
'r'
,
"url of repository [default: %s]"
%
DEFAULT_REPOSITORY
),
(
'show-response'
,
None
,
'display full response text from server'
),
(
'sign'
,
's'
,
'sign files to upload using gpg'
),
(
'identity='
,
'i'
,
'GPG identity used to sign files'
),
]
boolean_options
=
[
'show-response'
,
'sign'
]
def
initialize_options
(
self
):
self
.
username
=
''
self
.
password
=
''
self
.
repository
=
''
self
.
show_response
=
0
self
.
sign
=
False
self
.
identity
=
None
def
finalize_options
(
self
):
if
self
.
identity
and
not
self
.
sign
:
raise
errors
.
DistutilsOptionError
(
"Must use --sign for --identity to have meaning"
)
if
'HOME'
in
os
.
environ
:
rc
=
os
.
path
.
join
(
os
.
environ
[
'HOME'
],
'.pypirc'
)
if
os
.
path
.
exists
(
rc
):
self
.
announce
(
'Using PyPI login from %s'
%
rc
)
config
=
ConfigParser
.
ConfigParser
({
'username'
:
''
,
'password'
:
''
,
'repository'
:
''
})
config
.
read
(
rc
)
if
not
self
.
repository
:
self
.
repository
=
config
.
get
(
'server-login'
,
'repository'
)
if
not
self
.
username
:
self
.
username
=
config
.
get
(
'server-login'
,
'username'
)
if
not
self
.
password
:
self
.
password
=
config
.
get
(
'server-login'
,
'password'
)
if
not
self
.
repository
:
self
.
repository
=
self
.
DEFAULT_REPOSITORY
def
run
(
self
):
if
not
self
.
distribution
.
dist_files
:
raise
errors
.
DistutilsOptionError
(
"No dist file created in earlier command"
)
for
command
,
pyversion
,
filename
in
self
.
distribution
.
dist_files
:
self
.
upload_file
(
command
,
pyversion
,
filename
)
def
upload_file
(
self
,
command
,
pyversion
,
filename
):
# Sign if requested
if
self
.
sign
:
gpg_args
=
[
"gpg"
,
"--detach-sign"
,
"-a"
,
filename
]
if
self
.
identity
:
gpg_args
[
2
:
2
]
=
[
"--local-user"
,
self
.
identity
]
spawn
(
gpg_args
,
dry_run
=
self
.
dry_run
)
# Fill in the data
f
=
open
(
filename
,
'rb'
)
content
=
f
.
read
()
f
.
close
()
basename
=
os
.
path
.
basename
(
filename
)
comment
=
''
if
command
==
'bdist_egg'
and
self
.
distribution
.
has_ext_modules
():
comment
=
"built on %s"
%
platform
.
platform
(
terse
=
1
)
data
=
{
':action'
:
'file_upload'
,
'protocol_version'
:
'1'
,
'name'
:
self
.
distribution
.
get_name
(),
'version'
:
self
.
distribution
.
get_version
(),
'content'
:(
basename
,
content
),
'filetype'
:
command
,
'pyversion'
:
pyversion
,
'md5_digest'
:
md5
(
content
).
hexdigest
(),
}
if
command
==
'bdist_rpm'
:
dist
,
version
,
id
=
platform
.
dist
()
if
dist
:
comment
=
'built for %s %s'
%
(
dist
,
version
)
elif
command
==
'bdist_dumb'
:
comment
=
'built for %s'
%
platform
.
platform
(
terse
=
1
)
data
[
'comment'
]
=
comment
if
self
.
sign
:
asc_file
=
open
(
filename
+
".asc"
)
data
[
'gpg_signature'
]
=
(
os
.
path
.
basename
(
filename
)
+
".asc"
,
asc_file
.
read
())
asc_file
.
close
()
# set up the authentication
auth
=
"Basic "
+
base64
.
encodestring
(
self
.
username
+
":"
+
self
.
password
).
strip
()
# Build up the MIME payload for the POST data
boundary
=
'--------------GHSKFJDLGDS7543FJKLFHRE75642756743254'
sep_boundary
=
'
\
n
--'
+
boundary
end_boundary
=
sep_boundary
+
'--'
body
=
StringIO
()
for
key
,
value
in
data
.
items
():
# handle multiple entries for the same name
if
not
isinstance
(
value
,
list
):
value
=
[
value
]
for
value
in
value
:
if
type
(
value
)
is
tuple
:
fn
=
';filename="%s"'
%
value
[
0
]
value
=
value
[
1
]
else
:
fn
=
""
value
=
str
(
value
)
body
.
write
(
sep_boundary
)
body
.
write
(
'
\
n
Content-Disposition: form-data; name="%s"'
%
key
)
body
.
write
(
fn
)
body
.
write
(
"
\
n
\
n
"
)
body
.
write
(
value
)
if
value
and
value
[
-
1
]
==
'
\
r
'
:
body
.
write
(
'
\
n
'
)
# write an extra newline (lurve Macs)
body
.
write
(
end_boundary
)
body
.
write
(
"
\
n
"
)
body
=
body
.
getvalue
()
self
.
announce
(
"Submitting %s to %s"
%
(
filename
,
self
.
repository
),
log
.
INFO
)
# build the Request
# We can't use urllib2 since we need to send the Basic
# auth right with the first request
schema
,
netloc
,
url
,
params
,
query
,
fragments
=
\
urlparse
(
self
.
repository
)
assert
not
params
and
not
query
and
not
fragments
if
schema
==
'http'
:
http
=
httplib
.
HTTPConnection
(
netloc
)
elif
schema
==
'https'
:
http
=
httplib
.
HTTPSConnection
(
netloc
)
else
:
raise
AssertionError
(
"unsupported schema "
+
schema
)
data
=
''
try
:
http
.
connect
()
http
.
putrequest
(
"POST"
,
url
)
http
.
putheader
(
'Content-type'
,
'multipart/form-data; boundary=%s'
%
boundary
)
http
.
putheader
(
'Content-length'
,
str
(
len
(
body
)))
http
.
putheader
(
'Authorization'
,
auth
)
http
.
endheaders
()
http
.
send
(
body
)
except
socket
.
error
:
e
=
sys
.
exc_info
()[
1
]
self
.
announce
(
str
(
e
),
log
.
ERROR
)
return
r
=
http
.
getresponse
()
if
r
.
status
==
200
:
self
.
announce
(
'Server response (%s): %s'
%
(
r
.
status
,
r
.
reason
),
log
.
INFO
)
else
:
self
.
announce
(
'Upload failed (%s): %s'
%
(
r
.
status
,
r
.
reason
),
log
.
ERROR
)
if
self
.
show_response
:
print
(
'-'
*
75
,
r
.
read
(),
'-'
*
75
)
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment