Using pillarsdk from pypi

This commit is contained in:
Sybren A. Stüvel 2016-05-03 13:42:00 +02:00
parent 329d830f63
commit ad7e9acb5d
3 changed files with 45 additions and 24 deletions

View File

@ -38,4 +38,4 @@ def load_wheel(module_name, fname_prefix):
def load_wheels(): def load_wheels():
load_wheel('lockfile', 'lockfile') load_wheel('lockfile', 'lockfile')
load_wheel('cachecontrol', 'CacheControl') load_wheel('cachecontrol', 'CacheControl')
load_wheel('pillarsdk', 'pillar_sdk') load_wheel('pillarsdk', 'pillarsdk')

View File

@ -1,2 +1,15 @@
# Primary requirements:
CacheControl==0.11.6 CacheControl==0.11.6
lockfile==0.12.2 lockfile==0.12.2
pillarsdk==0.1.0
wheel==0.29.0
# Secondary requirements:
cffi==1.6.0
cryptography==1.3.1
idna==2.1
pyasn1==0.1.9
pycparser==2.14
pyOpenSSL==16.0.0
requests==2.10.0
six==1.10.0

View File

@ -4,7 +4,6 @@ import shutil
import subprocess import subprocess
import re import re
import pathlib import pathlib
from glob import glob
from distutils import log from distutils import log
from distutils.core import Command from distutils.core import Command
@ -16,6 +15,15 @@ from setuptools import setup, find_packages
requirement_re = re.compile('[><=]+') requirement_re = re.compile('[><=]+')
def set_default_path(var, default):
"""convert CLI-arguments (string) to Paths"""
if var is None:
return default
return pathlib.Path(var)
# noinspection PyAttributeOutsideInit
class BuildWheels(Command): class BuildWheels(Command):
"""Builds or downloads the dependencies as wheel files.""" """Builds or downloads the dependencies as wheel files."""
@ -23,30 +31,21 @@ class BuildWheels(Command):
user_options = [ user_options = [
('wheels-path=', None, "wheel file installation path"), ('wheels-path=', None, "wheel file installation path"),
('deps-path=', None, "path in which dependencies are built"), ('deps-path=', None, "path in which dependencies are built"),
('pillar-sdk-path=', None, "subdir of deps-path containing the Pillar Python SDK"),
('cachecontrol-path=', None, "subdir of deps-path containing CacheControl"), ('cachecontrol-path=', None, "subdir of deps-path containing CacheControl"),
] ]
def initialize_options(self): def initialize_options(self):
self.wheels_path = None # path that will contain the installed wheels. self.wheels_path = None # path that will contain the installed wheels.
self.deps_path = None # path in which dependencies are built. self.deps_path = None # path in which dependencies are built.
self.pillar_sdk_path = None # subdir of deps_path containing the Pillar Python SDK
self.cachecontrol_path = None # subdir of deps_path containing CacheControl self.cachecontrol_path = None # subdir of deps_path containing CacheControl
def finalize_options(self): def finalize_options(self):
self.my_path = pathlib.Path(__file__).resolve().parent self.my_path = pathlib.Path(__file__).resolve().parent
package_path = self.my_path / self.distribution.get_name() package_path = self.my_path / self.distribution.get_name()
def set_default(var, default): self.wheels_path = set_default_path(self.wheels_path, package_path / 'wheels')
if var is None: self.deps_path = set_default_path(self.deps_path, self.my_path / 'build/deps')
return default self.cachecontrol_path = set_default_path(self.cachecontrol_path,
return pathlib.Path(var) # convert CLI-arguments (string) to Paths.
self.wheels_path = set_default(self.wheels_path, package_path / 'wheels')
self.deps_path = set_default(self.deps_path, self.my_path / 'build/deps')
self.pillar_sdk_path = set_default(self.pillar_sdk_path,
self.deps_path / 'pillar-python-sdk')
self.cachecontrol_path = set_default(self.cachecontrol_path,
self.deps_path / 'cachecontrol') self.deps_path / 'cachecontrol')
def run(self): def run(self):
@ -73,16 +72,12 @@ class BuildWheels(Command):
# Download lockfile, as there is a suitable wheel on pypi. # Download lockfile, as there is a suitable wheel on pypi.
if not list(self.wheels_path.glob('lockfile*.whl')): if not list(self.wheels_path.glob('lockfile*.whl')):
log.info('Downloading lockfile wheel') log.info('Downloading lockfile wheel')
subprocess.check_call([ self.download_wheel(requirements['lockfile'])
'pip', 'download', '--dest', str(self.wheels_path), requirements['lockfile'][0]
])
# Build Pillar Python SDK. # Download Pillar Python SDK from pypi.
if not list(self.wheels_path.glob('pillar-python-sdk*.whl')): if not list(self.wheels_path.glob('pillarsdk*.whl')):
log.info('Building Pillar Python SDK in %s', self.pillar_sdk_path) log.info('Downloading Pillar Python SDK wheel')
self.git_clone(self.pillar_sdk_path, self.download_wheel(requirements['pillarsdk'])
'https://github.com/armadillica/pillar-python-sdk.git')
self.build_copy_wheel(self.pillar_sdk_path)
# Build CacheControl. # Build CacheControl.
if not list(self.wheels_path.glob('CacheControl*.whl')): if not list(self.wheels_path.glob('CacheControl*.whl')):
@ -97,6 +92,16 @@ class BuildWheels(Command):
('blender_cloud/wheels', (str(p) for p in self.wheels_path.glob('*.whl'))) ('blender_cloud/wheels', (str(p) for p in self.wheels_path.glob('*.whl')))
) )
def download_wheel(self, requirement):
"""Downloads a wheel from PyPI and saves it in self.wheels_path."""
subprocess.check_call([
'pip', 'download',
'--no-deps',
'--dest', str(self.wheels_path),
requirement[0]
])
def git_clone(self, workdir: pathlib.Path, git_url: str, checkout: str = None): def git_clone(self, workdir: pathlib.Path, git_url: str, checkout: str = None):
if workdir.exists(): if workdir.exists():
# Directory exists, expect it to be set up correctly. # Directory exists, expect it to be set up correctly.
@ -124,6 +129,8 @@ class BuildWheels(Command):
log.info('copying %s to %s', wheel, self.wheels_path) log.info('copying %s to %s', wheel, self.wheels_path)
shutil.copy(str(wheel), str(self.wheels_path)) shutil.copy(str(wheel), str(self.wheels_path))
# noinspection PyAttributeOutsideInit
class BlenderAddonBdist(bdist): class BlenderAddonBdist(bdist):
"""Ensures that 'python setup.py bdist' creates a zip file.""" """Ensures that 'python setup.py bdist' creates a zip file."""
@ -137,6 +144,7 @@ class BlenderAddonBdist(bdist):
super().run() super().run()
# noinspection PyAttributeOutsideInit
class BlenderAddonInstall(install): class BlenderAddonInstall(install):
"""Ensures the module is placed at the root of the zip file.""" """Ensures the module is placed at the root of the zip file."""