Skip to content

Commit 5e1096c

Browse files
authoredMar 26, 2019
Merge pull request authomatic#1 from izhigalko/master
Fix chrome driver installation
2 parents e9fab31 + 04157b6 commit 5e1096c

File tree

1 file changed

+29
-17
lines changed

1 file changed

+29
-17
lines changed
 

‎setup.py

+29-17
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
from distutils.command.install import install
22
from distutils.command.install_data import install_data
3-
from distutils.core import setup
3+
from distutils.command.build_scripts import build_scripts
44
import hashlib
55
import os
66
import platform
@@ -9,6 +9,11 @@
99
import sys
1010
import zipfile
1111

12+
try:
13+
from setuptools import setup
14+
except ImportError:
15+
from distutils.core import setup
16+
1217
try:
1318
from urllib import request
1419
except ImportError:
@@ -47,7 +52,7 @@ def get_chromedriver_version():
4752
.format(CHROMEDRIVER_INFO_URL))
4853

4954

50-
class BuildScripts(install_data):
55+
class InstallChromeDriver(install_data):
5156
"""Downloads and unzips the requested chromedriver executable."""
5257

5358
def _download(self, zip_path, validate=False):
@@ -98,14 +103,26 @@ def reporthoook(x, y, z):
98103

99104
def _unzip(self, zip_path):
100105
zf = zipfile.ZipFile(zip_path)
101-
print("\t - extracting '{0}' to '{1}'."
102-
.format(zip_path, self.install_dir))
103-
zf.extractall(self.install_dir)
106+
out = tempfile.mkdtemp('chromedriver_distr')
107+
108+
print("\t - extracting '{0}' to '{1}'.".format(zip_path, out))
109+
zf.extractall(out)
110+
111+
return (os.path.join(out, f) for f in os.listdir(out))
104112

105113
def _validate(self, zip_path):
106114
checksum = hashlib.md5(open(zip_path, 'rb').read()).hexdigest()
107115
return checksum in chromedriver_checksums
108116

117+
def initialize_options(self):
118+
super().initialize_options()
119+
self.scripts_dir = None
120+
121+
def finalize_options(self):
122+
self.set_undefined_options('build', ('build_scripts', 'scripts_dir'))
123+
self.data_files = []
124+
super().finalize_options()
125+
109126
def run(self):
110127
global chromedriver_version, chromedriver_checksums
111128

@@ -136,16 +153,10 @@ def run(self):
136153
else:
137154
self._download(zip_path)
138155

139-
self._unzip(zip_path)
140-
self.data_files = [os.path.join(self.install_dir, script) for script in
141-
os.listdir(self.install_dir)]
142-
print(self.data_files)
156+
chromedriver_files = self._unzip(zip_path)
157+
self.data_files = [(self.scripts_dir, chromedriver_files)]
143158
install_data.run(self)
144159

145-
def finalize_options(self):
146-
install_data.finalize_options(self)
147-
self.data_files = []
148-
149160

150161
class Install(install):
151162
"""Used to get chromedriver version and checksums from install options"""
@@ -155,6 +166,8 @@ class Install(install):
155166
# old setuptools version.
156167
_svem = list(filter(lambda x: x[0] == 'single-version-externally-managed',
157168
install.user_options))
169+
sub_commands = [*install.sub_commands,
170+
('install_chrome_driver', lambda self: True)]
158171

159172
if not _svem:
160173
single_version_externally_managed = None
@@ -213,9 +226,8 @@ def run(self):
213226
'Topic :: System :: Installation/Setup',
214227
],
215228
license='MIT',
216-
package_data={'': ['*.txt', '*.rst', 'chromedriver']},
217-
include_package_data=True,
229+
package_data={'': ['*.txt', '*.rst']},
218230
# If packages is empty, contents of ./build/lib will not be copied!
219231
packages=['chromedriver_installer'],
220-
cmdclass=dict(install_data=BuildScripts, install=Install)
221-
)
232+
cmdclass=dict(install_chrome_driver=InstallChromeDriver, install=Install)
233+
)

0 commit comments

Comments
 (0)
Please sign in to comment.