Commit c80f03be authored by Jason R. Coombs's avatar Jason R. Coombs

Merge with master

parents e6087bfa 730834b5
...@@ -5,12 +5,15 @@ python: ...@@ -5,12 +5,15 @@ python:
- 3.3 - 3.3
- 3.4 - 3.4
- 3.5 - 3.5
- "3.6-dev" - 3.6
- nightly - nightly
- pypy - pypy
env: matrix:
- "" include:
- LC_ALL=C LC_CTYPE=C - python: 3.6
env: LC_ALL=C LC_CTYPE=C
- python: 2.7
env: LC_ALL=C LC_CTYPE=C
script: script:
# need tox and rwt to get started # need tox and rwt to get started
- pip install tox rwt - pip install tox rwt
......
v33.1.1
-------
* #921: Correct issue where certifi fallback not being
reached on Windows.
v33.1.0
-------
Installation via pip, as indicated in the `Python Packaging
User's Guide <https://packaging.python.org/installing/>`_,
is the officially-supported mechanism for installing
Setuptools, and this recommendation is now explicit in the
much more concise README.
Other edits and tweaks were made to the documentation. The
codebase is unchanged.
v33.0.0 v33.0.0
------- -------
......
This diff is collapsed.
...@@ -13,11 +13,11 @@ Recommended Reading ...@@ -13,11 +13,11 @@ Recommended Reading
------------------- -------------------
Please read `How to write the perfect pull request Please read `How to write the perfect pull request
<http://blog.jaraco.com/2014/04/how-to-write-perfect-pull-request.html>`_ <https://blog.jaraco.com/how-to-write-perfect-pull-request/>`_ for some tips
for some tips on contributing to open source projects. Although the article on contributing to open source projects. Although the article is not
is not authoritative, it was authored by the maintainer of Setuptools, so authoritative, it was authored by the maintainer of Setuptools, so reflects
reflects his opinions and will improve the likelihood of acceptance and his opinions and will improve the likelihood of acceptance and quality of
quality of contribution. contribution.
------------------ ------------------
Project Management Project Management
......
...@@ -6,3 +6,41 @@ History ...@@ -6,3 +6,41 @@ History
******* *******
.. include:: ../CHANGES (links).rst .. include:: ../CHANGES (links).rst
Credits
*******
* The original design for the ``.egg`` format and the ``pkg_resources`` API was
co-created by Phillip Eby and Bob Ippolito. Bob also implemented the first
version of ``pkg_resources``, and supplied the OS X operating system version
compatibility algorithm.
* Ian Bicking implemented many early "creature comfort" features of
easy_install, including support for downloading via Sourceforge and
Subversion repositories. Ian's comments on the Web-SIG about WSGI
application deployment also inspired the concept of "entry points" in eggs,
and he has given talks at PyCon and elsewhere to inform and educate the
community about eggs and setuptools.
* Jim Fulton contributed time and effort to build automated tests of various
aspects of ``easy_install``, and supplied the doctests for the command-line
``.exe`` wrappers on Windows.
* Phillip J. Eby is the seminal author of setuptools, and
first proposed the idea of an importable binary distribution format for
Python application plug-ins.
* Significant parts of the implementation of setuptools were funded by the Open
Source Applications Foundation, to provide a plug-in infrastructure for the
Chandler PIM application. In addition, many OSAF staffers (such as Mike
"Code Bear" Taylor) contributed their time and stress as guinea pigs for the
use of eggs and setuptools, even before eggs were "cool". (Thanks, guys!)
* Tarek Ziadé is the principal author of the Distribute fork, which
re-invigorated the community on the project, encouraged renewed innovation,
and addressed many defects.
* Since the merge with Distribute, Jason R. Coombs is the
maintainer of setuptools. The project is maintained in coordination with
the Python Packaging Authority (PyPA) and the larger Python community.
[bumpversion] [bumpversion]
current_version = 33.0.0 current_version = 33.1.1
commit = True commit = True
tag = True tag = True
......
...@@ -88,7 +88,7 @@ def pypi_link(pkg_filename): ...@@ -88,7 +88,7 @@ def pypi_link(pkg_filename):
setup_params = dict( setup_params = dict(
name="setuptools", name="setuptools",
version="33.0.0", version="33.1.1",
description="Easily download, build, install, upgrade, and uninstall " description="Easily download, build, install, upgrade, and uninstall "
"Python packages", "Python packages",
author="Python Packaging Authority", author="Python Packaging Authority",
......
...@@ -7,7 +7,7 @@ import distutils.filelist ...@@ -7,7 +7,7 @@ import distutils.filelist
from distutils.util import convert_path from distutils.util import convert_path
from fnmatch import fnmatchcase from fnmatch import fnmatchcase
from six.moves import filter, filterfalse, map from six.moves import filter, map
import setuptools.version import setuptools.version
from setuptools.extension import Extension from setuptools.extension import Extension
......
import os import os
import sys
from distutils import log from distutils import log
import itertools import itertools
......
...@@ -20,7 +20,7 @@ from six.moves import urllib, http_client, configparser, map ...@@ -20,7 +20,7 @@ from six.moves import urllib, http_client, configparser, map
import setuptools import setuptools
from pkg_resources import ( from pkg_resources import (
CHECKOUT_DIST, Distribution, BINARY_DIST, normalize_path, SOURCE_DIST, CHECKOUT_DIST, Distribution, BINARY_DIST, normalize_path, SOURCE_DIST,
require, Environment, find_distributions, safe_name, safe_version, Environment, find_distributions, safe_name, safe_version,
to_filename, Requirement, DEVELOP_DIST, to_filename, Requirement, DEVELOP_DIST,
) )
from setuptools import ssl_support from setuptools import ssl_support
...@@ -48,7 +48,7 @@ __all__ = [ ...@@ -48,7 +48,7 @@ __all__ = [
_SOCKET_TIMEOUT = 15 _SOCKET_TIMEOUT = 15
_tmpl = "setuptools/{setuptools.__version__} Python-urllib/{py_major}" _tmpl = "setuptools/{setuptools.__version__} Python-urllib/{py_major}"
user_agent = _tmpl.format(py_major=sys.version[:3], **globals()) user_agent = _tmpl.format(py_major=sys.version[:3], setuptools=setuptools)
def parse_requirement_arg(spec): def parse_requirement_arg(spec):
......
import dis import dis
import code
import array import array
import collections import collections
......
...@@ -2,10 +2,10 @@ import os ...@@ -2,10 +2,10 @@ import os
import socket import socket
import atexit import atexit
import re import re
import functools
from six.moves import urllib, http_client, map from six.moves import urllib, http_client, map, filter
import pkg_resources
from pkg_resources import ResolutionError, ExtractionError from pkg_resources import ResolutionError, ExtractionError
try: try:
...@@ -204,47 +204,52 @@ def opener_for(ca_bundle=None): ...@@ -204,47 +204,52 @@ def opener_for(ca_bundle=None):
).open ).open
_wincerts = None # from jaraco.functools
def once(func):
@functools.wraps(func)
def wrapper(*args, **kwargs):
if not hasattr(func, 'always_returns'):
func.always_returns = func(*args, **kwargs)
return func.always_returns
return wrapper
@once
def get_win_certfile(): def get_win_certfile():
global _wincerts
if _wincerts is not None:
return _wincerts.name
try: try:
from wincertstore import CertFile import wincertstore
except ImportError: except ImportError:
return None return None
class MyCertFile(CertFile): class CertFile(wincertstore.CertFile):
def __init__(self, stores=(), certs=()): def __init__(self):
CertFile.__init__(self) super(CertFile, self).__init__()
for store in stores:
self.addstore(store)
self.addcerts(certs)
atexit.register(self.close) atexit.register(self.close)
def close(self): def close(self):
try: try:
super(MyCertFile, self).close() super(CertFile, self).close()
except OSError: except OSError:
pass pass
_wincerts = MyCertFile(stores=['CA', 'ROOT']) _wincerts = CertFile()
_wincerts.addstore('CA')
_wincerts.addstore('ROOT')
return _wincerts.name return _wincerts.name
def find_ca_bundle(): def find_ca_bundle():
"""Return an existing CA bundle path, or None""" """Return an existing CA bundle path, or None"""
if os.name == 'nt': extant_cert_paths = filter(os.path.isfile, cert_paths)
return get_win_certfile() return (
else: get_win_certfile()
for cert_path in cert_paths: or next(extant_cert_paths, None)
if os.path.isfile(cert_path): or _certifi_where()
return cert_path )
def _certifi_where():
try: try:
import certifi return __import__('certifi').where()
return certifi.where()
except (ImportError, ResolutionError, ExtractionError): except (ImportError, ResolutionError, ExtractionError):
return None pass
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment