Skip to content

Commit

Permalink
Merge branch 'devel' into master
Browse files Browse the repository at this point in the history
  • Loading branch information
SofianeB authored Feb 10, 2017
2 parents 10b150f + 19f81e2 commit e10faf5
Show file tree
Hide file tree
Showing 33 changed files with 558 additions and 320 deletions.
98 changes: 98 additions & 0 deletions Dockerfile-py3.5
Original file line number Diff line number Diff line change
@@ -0,0 +1,98 @@
# vim:set ft=dockerfile:
FROM debian:jessie

# See https://github.com/docker-library/python/blob/master/3.5/Dockerfile

# ensure local python is preferred over distribution python
ENV PATH /usr/local/bin:$PATH

# http://bugs.python.org/issue19846
# > At the moment, setting "LANG=C" on a Linux system *fundamentally breaks Python 3*, and that's not OK.
ENV LANG C.UTF-8

# runtime dependencies
RUN apt-get update && apt-get install -y --no-install-recommends \
ca-certificates \
wget \
autoconf \
automake \
bzip2 \
file \
g++ \
gcc \
libssl-dev \
libtool \
make \
patch \
xz-utils \
tcl \
tk \
&& rm -rf /var/lib/apt/lists/*

ENV GPG_KEY 97FC712E4C024BBEA48A61ED3A5CA953F73C700D
ENV PYTHON_VERSION 3.5.3

# if this is called "PIP_VERSION", pip explodes with "ValueError: invalid truth value '<VERSION>'"
ENV PYTHON_PIP_VERSION 9.0.1

RUN set -ex \
&& buildDeps=' \
tcl-dev \
tk-dev \
' \
&& apt-get update && apt-get install -y $buildDeps --no-install-recommends && rm -rf /var/lib/apt/lists/* \
\
&& wget -O python.tar.xz "https://www.python.org/ftp/python/${PYTHON_VERSION%%[a-z]*}/Python-$PYTHON_VERSION.tar.xz" \
&& wget -O python.tar.xz.asc "https://www.python.org/ftp/python/${PYTHON_VERSION%%[a-z]*}/Python-$PYTHON_VERSION.tar.xz.asc" \
&& export GNUPGHOME="$(mktemp -d)" \
&& gpg --keyserver ha.pool.sks-keyservers.net --recv-keys "$GPG_KEY" \
&& gpg --batch --verify python.tar.xz.asc python.tar.xz \
&& rm -r "$GNUPGHOME" python.tar.xz.asc \
&& mkdir -p /usr/src/python \
&& tar -xJC /usr/src/python --strip-components=1 -f python.tar.xz \
&& rm python.tar.xz \
\
&& cd /usr/src/python \
&& ./configure \
--enable-loadable-sqlite-extensions \
--enable-shared \
&& make -j$(nproc) \
&& make install \
&& ldconfig \
\
# explicit path to "pip3" to ensure distribution-provided "pip3" cannot interfere
&& if [ ! -e /usr/local/bin/pip3 ]; then : \
&& wget -O /tmp/get-pip.py 'https://bootstrap.pypa.io/get-pip.py' \
&& python3 /tmp/get-pip.py "pip==$PYTHON_PIP_VERSION" \
&& rm /tmp/get-pip.py \
; fi \
# we use "--force-reinstall" for the case where the version of pip we're trying to install is the same as the version bundled with Python
# ("Requirement already up-to-date: pip==8.1.2 in /usr/local/lib/python3.6/site-packages")
# https://github.com/docker-library/python/pull/143#issuecomment-241032683
&& pip3 install --no-cache-dir --upgrade --force-reinstall "pip==$PYTHON_PIP_VERSION" \
# then we use "pip list" to ensure we don't have more than one pip version installed
# https://github.com/docker-library/python/pull/100
&& [ "$(pip list |tac|tac| awk -F '[ ()]+' '$1 == "pip" { print $2; exit }')" = "$PYTHON_PIP_VERSION" ] \
\
&& find /usr/local -depth \
\( \
\( -type d -a -name test -o -name tests \) \
-o \
\( -type f -a -name '*.pyc' -o -name '*.pyo' \) \
\) -exec rm -rf '{}' + \
&& apt-get purge -y --auto-remove $buildDeps \
&& rm -rf /usr/src/python ~/.cache

# make some useful symlinks that are expected to exist
RUN cd /usr/local/bin \
&& { [ -e easy_install ] || ln -s easy_install-* easy_install; } \
&& ln -s idle3 idle \
&& ln -s pydoc3 pydoc \
&& ln -s python3 python \
&& ln -s python3-config python-config

ADD . /opt/B2HANDLE

WORKDIR /opt/B2HANDLE

RUN python setup.py install
3 changes: 3 additions & 0 deletions MANIFEST.in
Original file line number Diff line number Diff line change
@@ -1 +1,4 @@
include README.md
include b2handle/tests/resources/*PUBLIC.json
include b2handle/tests/testcredentials/*_PUBLIC.json
include b2handle/tests/testcredentials/fake_certs_and_keys/*.pem
2 changes: 1 addition & 1 deletion README.md
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@

The b2handle Python library is a client library for interaction with a [Handle System](https://handle.net) server, using the native REST interface introduced in Handle System 8. The library offers methods to create, update and delete Handles as well as advanced functionality such as searching over Handles using an additional search servlet and managing multiple location entries per Handle.

The library currently supports Python 2.6 and Python 2.7 and requires at least a Handle System server 8.1.
The library currently supports Python 2.6, 2.7 and 3.5, and requires at least a Handle System server 8.1.
The library requires OpenSSL v1.0.1 or higher.

# Test Coverage and Continuous Integration
Expand Down
13 changes: 10 additions & 3 deletions b2handle/__init__.py
Original file line number Diff line number Diff line change
@@ -1,4 +1,11 @@
#
# The version as used in setup.py and docs/source/conf.py
__version__ = "1.0.3"
__version__ = "1.1.0"

# The version as used in setup.py and docs/source/conf.py.

# IMPORTANT
# Please put no comment above the __version__ variable,
# as they would be printed in the help(b2handle) output!
# (The first comment - empty or not - would be appended to
# the package name, the next non-empty comment would be
# printed as description).

10 changes: 6 additions & 4 deletions b2handle/clientcredentials.py
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,7 @@
import os
import logging
import b2handle
from b2handle.handleexceptions import CredentialsFormatError
from b2handle.handleexceptions import CredentialsFormatError, HandleSyntaxError
import b2handle.util as util

LOGGER = logging.getLogger(__name__)
Expand Down Expand Up @@ -50,8 +50,10 @@ def load_from_JSON(json_filename):
:raises: :exc:`~b2handle.handleexceptions.HandleSyntaxError`
:return: An instance.
'''

jsonfilecontent = json.loads(open(json_filename, 'r').read())
try:
jsonfilecontent = json.loads(open(json_filename, 'r').read())
except ValueError as exc:
raise CredentialsFormatError(msg="Invalid JSON syntax: "+str(exc))
instance = PIDClientCredentials(credentials_filename=json_filename,**jsonfilecontent)
return instance

Expand Down Expand Up @@ -202,7 +204,7 @@ def __get_path_and_check_file_existence(self, path):
path = util.get_absolute_path(path, self.__credentials_filename)

except ValueError: # not a valid path
thisdir = utilsget_this_directory(self.__credentials_filename)
thisdir = util.get_this_directory(self.__credentials_filename)
msg = ('Please provide an absolute path or a path relative to '
'the location of the credentials file\'s location (%s), '
'starting with %s.' % (thisdir, os.path.curdir))
Expand Down
22 changes: 22 additions & 0 deletions b2handle/compatibility_helper.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
import sys
from six import string_types
'''
This module provides some helper functions to ease porting the codebase
to Python 3.5..
'''
def check_response_content_type(response):
if isinstance(response.content, string_types):
return True

def decoded_response(response):
if (check_response_content_type(response)):
return response.content
return response.content.decode('utf-8')

def set_encoding_variable():
if sys.version_info > (3, 0):
encoding_value = 'unicode'
else:
encoding_value = 'utf-8'
return encoding_value
Loading

0 comments on commit e10faf5

Please sign in to comment.