Skip to content

Commit 43aeaef

Browse files
authored
Merge pull request html5lib#285 from jayvdb/envmarker-monkeypatching
Monkeypatch pkg_resources to always use _markerlib; r=gsnedders
2 parents 14d4851 + 6cd93c8 commit 43aeaef

File tree

4 files changed

+48
-10
lines changed

4 files changed

+48
-10
lines changed

requirements-install.sh

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -5,9 +5,6 @@ if [[ $USE_OPTIONAL != "true" && $USE_OPTIONAL != "false" ]]; then
55
exit 1
66
fi
77

8-
# Make sure we're running setuptools >= 18.5
9-
pip install -U pip setuptools>=18.5
10-
118
pip install -U -r requirements-test.txt
129

1310
if [[ $USE_OPTIONAL == "true" ]]; then

requirements-test.txt

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,4 +4,3 @@ flake8
44
pytest
55
pytest-expect>=1.1,<2.0
66
mock
7-
ordereddict ; python_version < '2.7'

requirements.txt

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,3 @@
11
six
22
webencodings
33
ordereddict ; python_version < '2.7'
4-
setuptools>=18.5

setup.py

Lines changed: 48 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -8,10 +8,54 @@
88
from setuptools import setup, find_packages, __version__ as setuptools_version
99
from pkg_resources import parse_version
1010

11-
if parse_version(setuptools_version) < parse_version("18.5"):
12-
print("html5lib requires setuptools version 18.5 or above; "
13-
"please upgrade before installing (you have %s)" % setuptools_version)
14-
sys.exit(1)
11+
import pkg_resources
12+
13+
try:
14+
import _markerlib.markers
15+
except ImportError:
16+
_markerlib = None
17+
18+
19+
# _markerlib.default_environment() obtains its data from _VARS
20+
# and wraps it in another dict, but _markerlib_evaluate writes
21+
# to the dict while it is iterating the keys, causing an error
22+
# on Python 3 only.
23+
# Replace _markerlib.default_environment to return a custom dict
24+
# that has all the necessary markers, and ignores any writes.
25+
26+
class Python3MarkerDict(dict):
27+
28+
def __setitem__(self, key, value):
29+
pass
30+
31+
def pop(self, i=-1):
32+
return self[i]
33+
34+
35+
if _markerlib and sys.version_info[0] == 3:
36+
env = _markerlib.markers._VARS
37+
for key in list(env.keys()):
38+
new_key = key.replace('.', '_')
39+
if new_key != key:
40+
env[new_key] = env[key]
41+
42+
_markerlib.markers._VARS = Python3MarkerDict(env)
43+
44+
def default_environment():
45+
return _markerlib.markers._VARS
46+
47+
_markerlib.default_environment = default_environment
48+
49+
# Avoid the very buggy pkg_resources.parser, which doesnt consistently
50+
# recognise the markers needed by this setup.py
51+
# Change this to setuptools 20.10.0 to support all markers.
52+
if pkg_resources:
53+
if parse_version(setuptools_version) < parse_version('18.5'):
54+
MarkerEvaluation = pkg_resources.MarkerEvaluation
55+
56+
del pkg_resources.parser
57+
pkg_resources.evaluate_marker = MarkerEvaluation._markerlib_evaluate
58+
MarkerEvaluation.evaluate_marker = MarkerEvaluation._markerlib_evaluate
1559

1660
classifiers = [
1761
'Development Status :: 5 - Production/Stable',
@@ -60,7 +104,6 @@
60104
install_requires=[
61105
'six',
62106
'webencodings',
63-
'setuptools>=18.5'
64107
],
65108
extras_require={
66109
# A empty extra that only has a conditional marker will be

0 commit comments

Comments
 (0)
pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy