repo2docker/setup.py

116 wiersze
2.8 KiB
Python

from __future__ import print_function
import hashlib
import os
import sys
import tarfile
try:
from urllib.request import urlopen
except ImportError:
from urllib import urlopen
from setuptools import setup, find_packages
tgz = 'source-to-image-v1.1.6-f519129-{}-amd64.tar.gz'.format(sys.platform)
s2i_bin_url = 'https://github.com/openshift/source-to-image/releases/download/v1.1.6/' + tgz
checksums = {
'darwin': '0398bb5cd1d77a59ed9780ec4e2edd3b0c70e973d66b6ae5c072a8830029d703',
'linux': '85ed735d141da1fe3def7826910c0c0baf587df6c727529b52d2c5cd98dcb641',
}
def download_s2i():
if os.path.exists(tgz):
print("Already have %s" % tgz)
return
print("Downloading %s" % s2i_bin_url)
reader = urlopen(s2i_bin_url)
with open(tgz, 'wb') as f:
f.write(reader.read())
reader.close()
def stage_s2i():
"""Stage s2i binary into repo2docker"""
print("Staging %s" % s2i_dest)
with tarfile.open(tgz) as f:
f.extract('./s2i', pkg)
def checksum_s2i():
"""Check the checksum of the s2i binary"""
with open(s2i_dest, 'rb') as f:
found_hash = hashlib.sha256(f.read()).hexdigest()
expected = checksums[sys.platform]
if found_hash != expected:
print("Checksum mismatch %s != %s" % (found_hash, expected))
return found_hash == expected
def have_s2i():
"""Do we already have s2i?"""
if not os.path.exists(s2i_dest):
return False
return checksum_s2i()
here = os.path.dirname(os.path.abspath(__file__))
pkg = os.path.join(here, 'repo2docker')
s2i_dest = os.path.join(pkg, 's2i')
if sys.platform in checksums:
if not have_s2i():
download_s2i()
stage_s2i()
if not checksum_s2i():
print("s2i checksum failed", file=sys.stderr)
sys.exit(1)
else:
print("I don't know how to bundle s2i for %s" % sys.platform)
cmdclass = {}
try:
from wheel.bdist_wheel import bdist_wheel
from wheel.pep425tags import get_platform
except ImportError:
# no wheel
pass
else:
# apply current platform tag
# because we bundle platform-specific s2i binaries
class PlatformBDistWheel(bdist_wheel):
def initialize_options(self):
super(PlatformBDistWheel, self).initialize_options()
if self.plat_name is None:
self.plat_name = get_platform()
cmdclass['bdist_wheel'] = PlatformBDistWheel
setup(
name='jupyter-repo2docker',
version='0.2.0',
install_requires=[
'docker',
'traitlets',
'python-json-logger',
'escapism'
],
author='Yuvi Panda',
author_email='yuvipanda@gmail.com',
license='BSD',
cmdclass=cmdclass,
package_data={
'repo2docker': ['s2i'],
},
packages=find_packages(),
entry_points={
'console_scripts': [
'jupyter-repo2docker = repo2docker.__main__:main'
]
},
)