summaryrefslogtreecommitdiff
blob: 4e4ac16d2389bf986ca634eb2afe0c47eb93789d (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
From c91d23b2f82b4efb540168132842b243eb2d8b0d Mon Sep 17 00:00:00 2001
From: Sviatoslav Sydorenko <wk@sydorenko.org.ua>
Date: Thu, 24 Oct 2019 01:38:35 +0200
Subject: [PATCH] Drop support for setuptools older than 34.4.0

Resolves #599
---
 setup.py | 141 +++++--------------------------------------------------
 1 file changed, 13 insertions(+), 128 deletions(-)

diff --git a/setup.py b/setup.py
index 25cc9e80d09e4657b56c4c4ed68d9411b7d7eae9..ff4c5bd65a7f5786c5af32750fb83dd3f6d92cec 100644
--- a/setup.py
+++ b/setup.py
@@ -1,138 +1,16 @@
 #! /usr/bin/env python
 """Ansible-lint distribution package setuptools installer."""
 
-import setuptools
-
-
-try:
-    from setuptools.config import read_configuration, ConfigOptionsHandler
-    import setuptools.config
-    import setuptools.dist
-
-    # Set default value for 'use_scm_version'
-    setattr(setuptools.dist.Distribution, 'use_scm_version', False)
-
-    # Attach bool parser to 'use_scm_version' option
-    class ShimConfigOptionsHandler(ConfigOptionsHandler):
-        """Extension class for ConfigOptionsHandler."""
-
-        @property
-        def parsers(self):
-            """Return an option mapping with default data type parsers."""
-            _orig_parsers = super(ShimConfigOptionsHandler, self).parsers
-            return dict(use_scm_version=self._parse_bool, **_orig_parsers)
-
-    setuptools.config.ConfigOptionsHandler = ShimConfigOptionsHandler
-except ImportError:
-    """This is a shim for setuptools<30.3."""
-    import io
-    import json
-
-    try:
-        from configparser import ConfigParser, NoSectionError
-    except ImportError:
-        from ConfigParser import ConfigParser, NoSectionError
-        ConfigParser.read_file = ConfigParser.readfp
-
-    def maybe_read_files(d):
-        """Read files if the string starts with `file:` marker."""
-        d = d.strip()
-        if not d.startswith('file:'):
-            return d
-        descs = []
-        for fname in map(str.strip, str(d[5:]).split(',')):
-            with io.open(fname, encoding='utf-8') as f:
-                descs.append(f.read())
-        return ''.join(descs)
-
-    def cfg_val_to_list(v):
-        """Turn config val to list and filter out empty lines."""
-        return list(filter(bool, map(str.strip, str(v).strip().splitlines())))
 
-    def cfg_val_to_dict(v):
-        """Turn config val to dict and filter out empty lines."""
-        return dict(
-            map(lambda l: list(map(str.strip, l.split('=', 1))),
-                filter(bool, map(str.strip, str(v).strip().splitlines())))
-        )
+__requires__ = ('setuptools >= 34.4', )
 
-    def cfg_val_to_primitive(v):
-        """Parse primitive config val to appropriate data type."""
-        return json.loads(v.strip().lower())
 
-    def read_configuration(filepath):
-        """Read metadata and options from setup.cfg located at filepath."""
-        cfg = ConfigParser()
-        with io.open(filepath, encoding='utf-8') as f:
-            cfg.read_file(f)
-
-        md = dict(cfg.items('metadata'))
-        for list_key in 'classifiers', 'keywords':
-            try:
-                md[list_key] = cfg_val_to_list(md[list_key])
-            except KeyError:
-                pass
-        try:
-            md['long_description'] = maybe_read_files(md['long_description'])
-        except KeyError:
-            pass
-        opt = dict(cfg.items('options'))
-        for list_key in 'use_scm_version', 'zip_safe':
-            try:
-                opt[list_key] = cfg_val_to_primitive(opt[list_key])
-            except KeyError:
-                pass
-        for list_key in 'scripts', 'install_requires', 'setup_requires':
-            try:
-                opt[list_key] = cfg_val_to_list(opt[list_key])
-            except KeyError:
-                pass
-        try:
-            opt['package_dir'] = cfg_val_to_dict(opt['package_dir'])
-        except KeyError:
-            pass
-        try:
-            opt_package_data = dict(cfg.items('options.package_data'))
-            if not opt_package_data.get('', '').strip():
-                opt_package_data[''] = opt_package_data['*']
-                del opt_package_data['*']
-        except (KeyError, NoSectionError):
-            opt_package_data = {}
-        try:
-            opt_extras_require = dict(cfg.items('options.extras_require'))
-            opt['extras_require'] = {}
-            for k, v in opt_extras_require.items():
-                opt['extras_require'][k] = cfg_val_to_list(v)
-        except NoSectionError:
-            pass
-        opt['package_data'] = {}
-        for k, v in opt_package_data.items():
-            opt['package_data'][k] = cfg_val_to_list(v)
-        cur_pkgs = opt.get('packages', '').strip()
-        if '\n' in cur_pkgs:
-            opt['packages'] = cfg_val_to_list(opt['packages'])
-        elif cur_pkgs.startswith('find:'):
-            opt_packages_find = dict(cfg.items('options.packages.find'))
-            opt['packages'] = setuptools.find_packages(**opt_packages_find)
-        return {'metadata': md, 'options': opt}
-
-
-setup_params = {}
-declarative_setup_params = read_configuration('setup.cfg')
-
-# Patch incorrectly decoded package_dir option
-# ``egg_info`` demands native strings failing with unicode under Python 2
-# Ref https://github.com/pypa/setuptools/issues/1136
-declarative_setup_params['options']['package_dir'] = {
-    str(k): str(v)
-    for k, v in declarative_setup_params['options']['package_dir'].items()
-}
-
-setup_params = dict(setup_params, **declarative_setup_params['metadata'])
-setup_params = dict(setup_params, **declarative_setup_params['options'])
+import setuptools
+from setuptools.config import read_configuration
 
 
 def cut_local_version_on_upload(version):
+    """Generate a PEP440 local version if uploading to PyPI."""
     import os
     import setuptools_scm.version  # only present during setup time
     IS_PYPI_UPLOAD = os.getenv('PYPI_UPLOAD') == 'true'
@@ -142,8 +20,15 @@ def cut_local_version_on_upload(version):
     )
 
 
-setup_params['use_scm_version'] = {
-    'local_scheme': cut_local_version_on_upload,
+# This is needed because even new
+# setuptools don't parse
+# `setup_requires` from `setup.cfg`:
+declarative_setup_params = read_configuration('setup.cfg')
+setup_params = {
+    'setup_requires': declarative_setup_params['options']['setup_requires'],
+    'use_scm_version': {
+        'local_scheme': cut_local_version_on_upload,
+    }
 }