golden hour
/lib/python2.7/site-packages/setuptools/command
⬆️ Go Up
Upload
File/Folder
Size
Actions
__init__.py
590 B
Del
OK
__init__.pyc
880 B
Del
OK
__init__.pyo
880 B
Del
OK
alias.py
2.37 KB
Del
OK
alias.pyc
3.03 KB
Del
OK
alias.pyo
3.03 KB
Del
OK
bdist_egg.py
17.03 KB
Del
OK
bdist_egg.pyc
17.5 KB
Del
OK
bdist_egg.pyo
17.5 KB
Del
OK
bdist_rpm.py
1.47 KB
Del
OK
bdist_rpm.pyc
1.87 KB
Del
OK
bdist_rpm.pyo
1.87 KB
Del
OK
bdist_wininst.py
637 B
Del
OK
bdist_wininst.pyc
1.17 KB
Del
OK
bdist_wininst.pyo
1.17 KB
Del
OK
build_clib.py
4.38 KB
Del
OK
build_clib.pyc
2.78 KB
Del
OK
build_clib.pyo
2.78 KB
Del
OK
build_ext.py
12.74 KB
Del
OK
build_ext.pyc
12.23 KB
Del
OK
build_ext.pyo
12.18 KB
Del
OK
build_py.py
9.37 KB
Del
OK
build_py.pyc
10.42 KB
Del
OK
build_py.pyo
10.42 KB
Del
OK
develop.py
7.84 KB
Del
OK
develop.pyc
7.72 KB
Del
OK
develop.pyo
7.72 KB
Del
OK
dist_info.py
924 B
Del
OK
dist_info.pyc
1.69 KB
Del
OK
dist_info.pyo
1.69 KB
Del
OK
easy_install.py
83.94 KB
Del
OK
easy_install.pyc
77.86 KB
Del
OK
easy_install.pyo
77.86 KB
Del
OK
egg_info.py
24.43 KB
Del
OK
egg_info.pyc
25.4 KB
Del
OK
egg_info.pyo
25.4 KB
Del
OK
install.py
4.57 KB
Del
OK
install.pyc
4.84 KB
Del
OK
install.pyo
4.84 KB
Del
OK
install_egg_info.py
2.15 KB
Del
OK
install_egg_info.pyc
3.13 KB
Del
OK
install_egg_info.pyo
3.13 KB
Del
OK
install_lib.py
3.75 KB
Del
OK
install_lib.pyc
4.76 KB
Del
OK
install_lib.pyo
4.71 KB
Del
OK
install_scripts.py
2.38 KB
Del
OK
install_scripts.pyc
2.82 KB
Del
OK
install_scripts.pyo
2.82 KB
Del
OK
launcher manifest.xml
628 B
Del
OK
py36compat.py
4.87 KB
Del
OK
py36compat.pyc
5.42 KB
Del
OK
py36compat.pyo
5.42 KB
Del
OK
register.py
270 B
Del
OK
register.pyc
710 B
Del
OK
register.pyo
710 B
Del
OK
rotate.py
2.11 KB
Del
OK
rotate.pyc
2.98 KB
Del
OK
rotate.pyo
2.98 KB
Del
OK
saveopts.py
658 B
Del
OK
saveopts.pyc
1.1 KB
Del
OK
saveopts.pyo
1.1 KB
Del
OK
sdist.py
6.76 KB
Del
OK
sdist.pyc
7.76 KB
Del
OK
sdist.pyo
7.76 KB
Del
OK
setopt.py
4.97 KB
Del
OK
setopt.pyc
5.91 KB
Del
OK
setopt.pyo
5.91 KB
Del
OK
test.py
8.83 KB
Del
OK
test.pyc
10 KB
Del
OK
test.pyo
10 KB
Del
OK
upload.py
1.14 KB
Del
OK
upload.pyc
1.6 KB
Del
OK
upload.pyo
1.6 KB
Del
OK
upload_docs.py
7.14 KB
Del
OK
upload_docs.pyc
7.66 KB
Del
OK
upload_docs.pyo
7.63 KB
Del
OK
Edit: upload_docs.py
# -*- coding: utf-8 -*- """upload_docs Implements a Distutils 'upload_docs' subcommand (upload documentation to PyPI's pythonhosted.org). """ from base64 import standard_b64encode from distutils import log from distutils.errors import DistutilsOptionError import os import socket import zipfile import tempfile import shutil import itertools import functools from setuptools.extern import six from setuptools.extern.six.moves import http_client, urllib from pkg_resources import iter_entry_points from .upload import upload def _encode(s): errors = 'surrogateescape' if six.PY3 else 'strict' return s.encode('utf-8', errors) class upload_docs(upload): # override the default repository as upload_docs isn't # supported by Warehouse (and won't be). DEFAULT_REPOSITORY = 'https://pypi.python.org/pypi/' description = 'Upload documentation to PyPI' user_options = [ ('repository=', 'r', "url of repository [default: %s]" % upload.DEFAULT_REPOSITORY), ('show-response', None, 'display full response text from server'), ('upload-dir=', None, 'directory to upload'), ] boolean_options = upload.boolean_options def has_sphinx(self): if self.upload_dir is None: for ep in iter_entry_points('distutils.commands', 'build_sphinx'): return True sub_commands = [('build_sphinx', has_sphinx)] def initialize_options(self): upload.initialize_options(self) self.upload_dir = None self.target_dir = None def finalize_options(self): upload.finalize_options(self) if self.upload_dir is None: if self.has_sphinx(): build_sphinx = self.get_finalized_command('build_sphinx') self.target_dir = build_sphinx.builder_target_dir else: build = self.get_finalized_command('build') self.target_dir = os.path.join(build.build_base, 'docs') else: self.ensure_dirname('upload_dir') self.target_dir = self.upload_dir if 'pypi.python.org' in self.repository: log.warn("Upload_docs command is deprecated. Use RTD instead.") self.announce('Using upload directory %s' % self.target_dir) def create_zipfile(self, filename): zip_file = zipfile.ZipFile(filename, "w") try: self.mkpath(self.target_dir) # just in case for root, dirs, files in os.walk(self.target_dir): if root == self.target_dir and not files: tmpl = "no files found in upload directory '%s'" raise DistutilsOptionError(tmpl % self.target_dir) for name in files: full = os.path.join(root, name) relative = root[len(self.target_dir):].lstrip(os.path.sep) dest = os.path.join(relative, name) zip_file.write(full, dest) finally: zip_file.close() def run(self): # Run sub commands for cmd_name in self.get_sub_commands(): self.run_command(cmd_name) tmp_dir = tempfile.mkdtemp() name = self.distribution.metadata.get_name() zip_file = os.path.join(tmp_dir, "%s.zip" % name) try: self.create_zipfile(zip_file) self.upload_file(zip_file) finally: shutil.rmtree(tmp_dir) @staticmethod def _build_part(item, sep_boundary): key, values = item title = '\nContent-Disposition: form-data; name="%s"' % key # handle multiple entries for the same name if not isinstance(values, list): values = [values] for value in values: if isinstance(value, tuple): title += '; filename="%s"' % value[0] value = value[1] else: value = _encode(value) yield sep_boundary yield _encode(title) yield b"\n\n" yield value if value and value[-1:] == b'\r': yield b'\n' # write an extra newline (lurve Macs) @classmethod def _build_multipart(cls, data): """ Build up the MIME payload for the POST data """ boundary = b'--------------GHSKFJDLGDS7543FJKLFHRE75642756743254' sep_boundary = b'\n--' + boundary end_boundary = sep_boundary + b'--' end_items = end_boundary, b"\n", builder = functools.partial( cls._build_part, sep_boundary=sep_boundary, ) part_groups = map(builder, data.items()) parts = itertools.chain.from_iterable(part_groups) body_items = itertools.chain(parts, end_items) content_type = 'multipart/form-data; boundary=%s' % boundary.decode('ascii') return b''.join(body_items), content_type def upload_file(self, filename): with open(filename, 'rb') as f: content = f.read() meta = self.distribution.metadata data = { ':action': 'doc_upload', 'name': meta.get_name(), 'content': (os.path.basename(filename), content), } # set up the authentication credentials = _encode(self.username + ':' + self.password) credentials = standard_b64encode(credentials) if six.PY3: credentials = credentials.decode('ascii') auth = "Basic " + credentials body, ct = self._build_multipart(data) msg = "Submitting documentation to %s" % (self.repository) self.announce(msg, 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 = \ urllib.parse.urlparse(self.repository) assert not params and not query and not fragments if schema == 'http': conn = http_client.HTTPConnection(netloc) elif schema == 'https': conn = http_client.HTTPSConnection(netloc) else: raise AssertionError("unsupported schema " + schema) data = '' try: conn.connect() conn.putrequest("POST", url) content_type = ct conn.putheader('Content-type', content_type) conn.putheader('Content-length', str(len(body))) conn.putheader('Authorization', auth) conn.endheaders() conn.send(body) except socket.error as e: self.announce(str(e), log.ERROR) return r = conn.getresponse() if r.status == 200: msg = 'Server response (%s): %s' % (r.status, r.reason) self.announce(msg, log.INFO) elif r.status == 301: location = r.getheader('Location') if location is None: location = 'https://pythonhosted.org/%s/' % meta.get_name() msg = 'Upload successful. Visit %s' % location self.announce(msg, log.INFO) else: msg = 'Upload failed (%s): %s' % (r.status, r.reason) self.announce(msg, log.ERROR) if self.show_response: print('-' * 75, r.read(), '-' * 75)
Save