Hello community,
here is the log from the commit of package python-license-expression for
openSUSE:Leap:15.2 checked in at 2020-04-20 12:55:33
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Leap:15.2/python-license-expression (Old)
and /work/SRC/openSUSE:Leap:15.2/.python-license-expression.new.2738 (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "python-license-expression"
Mon Apr 20 12:55:33 2020 rev:2 rq:795540 version:1.2
Changes:
--------
---
/work/SRC/openSUSE:Leap:15.2/python-license-expression/python-license-expression.changes
2020-03-27 16:48:07.943933615 +0100
+++
/work/SRC/openSUSE:Leap:15.2/.python-license-expression.new.2738/python-license-expression.changes
2020-04-20 12:55:48.316758290 +0200
@@ -1,0 +2,9 @@
+Wed Apr 15 11:55:39 UTC 2020 - [email protected]
+
+- version update to 1.2
+ * Fix anomalous backslashes in strings
+ * Update the thirdparty directory structure.
+ * New version of boolean.py library
+ * Add ability to leave license expressions unsorted when simplifying
+
+-------------------------------------------------------------------
Old:
----
license-expression-0.999.tar.gz
New:
----
license-expression-1.2.tar.gz
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Other differences:
------------------
++++++ python-license-expression.spec ++++++
--- /var/tmp/diff_new_pack.sPtvbK/_old 2020-04-20 12:55:48.632758786 +0200
+++ /var/tmp/diff_new_pack.sPtvbK/_new 2020-04-20 12:55:48.636758792 +0200
@@ -1,7 +1,7 @@
#
# spec file for package python-license-expression
#
-# Copyright (c) 2019 SUSE LINUX GmbH, Nuernberg, Germany.
+# Copyright (c) 2020 SUSE LLC
#
# All modifications and additions to the file contributed by third parties
# remain the property of their copyright owners, unless otherwise agreed
@@ -18,7 +18,7 @@
%{?!python_module:%define python_module() python-%{**} python3-%{**}}
Name: python-license-expression
-Version: 0.999
+Version: 1.2
Release: 0
Summary: Library to parse, compare, simplify and normalize license
expressions
License: Apache-2.0
++++++ license-expression-0.999.tar.gz -> license-expression-1.2.tar.gz ++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/license-expression-0.999/.travis.yml
new/license-expression-1.2/.travis.yml
--- old/license-expression-0.999/.travis.yml 2019-04-29 16:19:42.000000000
+0200
+++ new/license-expression-1.2/.travis.yml 2019-11-15 01:47:43.000000000
+0100
@@ -1,51 +1,67 @@
-language: generic
-
-env:
- matrix:
- - PYTHON_EXE="`pyenv install -s 2.7.14 && pyenv local 2.7.14`"
- - PYTHON_EXE="`pyenv install -s 3.6.1 && pyenv local 3.6.1`"
-
-
-# Travis does not offer OSX with arbitrary python versions (like 2.7.13 above)
-# So, you cannot simply have the following section in your build matrix:
-# os:
-# - linux
-# - osx
-# Instead, you have to include OSX entries into the build matrix manually.
-# In particular, this means specifying the environment variables again.
-
-# The following was adapted from here:
-# https://docs.travis-ci.com/user/multi-os/
-# Set `language: generic` to clear `language: python` from above
-# Set `python:` (to empty) to clear it from the travis-ci web interface
-# Set `osx_image: xcode7.3` to pin OSX version see here:
-# https://docs.travis-ci.com/user/osx-ci-environment/
-
matrix:
include:
- os: osx
+ env:
+ - PYTHON="3.6.8"
+ - TEST_SUITE="bin/py.test -vvs"
language: generic
python:
- osx_image: xcode7.3
- env: PYTHON_EXE="`pyenv install -s 2.7.14 && pyenv local 2.7.14`"
+
- os: osx
+ env:
+ - PYTHON="2.7.15"
+ - TEST_SUITE="bin/py.test -vvs"
language: generic
python:
- osx_image: xcode7.3
- env: PYTHON_EXE="`pyenv install -s 3.6.1 && pyenv local 3.6.1`"
+ - os: linux
+ sudo: required
+ env: TEST_SUITE="bin/py.test -vvs"
+ language: python
+ python: "2.7"
+ dist: xenial
+
+ - os: linux
+ sudo: required
+ env: TEST_SUITE="bin/py.test -vvs"
+ language: python
+ python: "2.7"
+ dist: bionic
+
+ - os: linux
+ sudo: required
+ env: TEST_SUITE="bin/py.test -vvs"
+ language: python
+ python: "3.6"
+ dist: xenial
+
+ - os: linux
+ sudo: required
+ env: TEST_SUITE="bin/py.test -vvs"
+ language: python
+ python: "3.6"
+ dist: bionic
+
+addons:
+ homebrew:
+ packages:
+ - openssl
+ - readline
+ - sqlite3
+ - xz
+ - zlib
+ - pyenv
+ update: true
install:
- - pyenv install --list
- - echo $PYTHON_EXE
- - python --version
- ./configure
-before_script:
- - bin/about-code check --verbose .
-
script:
- - "bin/py.test -vvs"
+ # If debugging, use a subset of tests to wait less:
+ # - ./bin/py.test -n 2 -vvs --cov=src tests/scancode
+ # - echo $TEST_SUITE
+ - bin/about check --verbose .
+ - $TEST_SUITE
notifications:
irc:
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/license-expression-0.999/PKG-INFO
new/license-expression-1.2/PKG-INFO
--- old/license-expression-0.999/PKG-INFO 2019-04-29 17:24:35.000000000
+0200
+++ new/license-expression-1.2/PKG-INFO 2019-11-15 01:54:19.000000000 +0100
@@ -1,6 +1,6 @@
Metadata-Version: 1.1
Name: license-expression
-Version: 0.999
+Version: 1.2
Summary: license-expression is small utility library to parse, compare,
simplify and normalize license expressions (such as SPDX license expressions)
using boolean logic.
Home-page: https://github.com/nexB/license-expression
Author: nexB Inc.
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/license-expression-0.999/README.rst
new/license-expression-1.2/README.rst
--- old/license-expression-0.999/README.rst 2019-04-29 16:19:42.000000000
+0200
+++ new/license-expression-1.2/README.rst 2019-11-15 01:47:43.000000000
+0100
@@ -39,6 +39,7 @@
* https://github.com/nexB/license-expression.git
* https://pypi.python.org/pypi/license-expression
+* https://aur.archlinux.org/packages/python-license-expression/ (Arch Linux
through AUR)
Support
=======
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/license-expression-0.999/appveyor.yml
new/license-expression-1.2/appveyor.yml
--- old/license-expression-0.999/appveyor.yml 2018-05-03 15:46:32.000000000
+0200
+++ new/license-expression-1.2/appveyor.yml 2019-10-14 16:47:24.000000000
+0200
@@ -4,10 +4,6 @@
matrix:
- PYTHON_EXE: "C:\\Python27\\python.exe"
- PYTHON_EXE: "C:\\Python27-x64\\python.exe"
- - PYTHON_EXE: "C:\\Python34\\python.exe"
- - PYTHON_EXE: "C:\\Python34-x64\\python.exe"
- - PYTHON_EXE: "C:\\Python35\\python.exe"
- - PYTHON_EXE: "C:\\Python35-x64\\python.exe"
- PYTHON_EXE: "C:\\Python36\\python.exe"
- PYTHON_EXE: "C:\\Python36-x64\\python.exe"
@@ -21,8 +17,5 @@
- 'bin\python -c "from __future__ import print_function;import
sys;print(sys.getdefaultencoding())"'
- 'bin\py.test -vvs'
-on_success:
- - "python etc/scripts/irc-notify.py aboutcode [{project_name}:{branch}]
{short_commit}: \"{message}\" ({author}) {color_green}Succeeded,Details:
{build_url},Commit: {commit_url}"
-
on_failure:
- "python etc/scripts/irc-notify.py aboutcode [{project_name}:{branch}]
{short_commit}: \"{message}\" ({author}) {color_red}Failed,Details:
{build_url},Commit: {commit_url}"
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/license-expression-0.999/configure
new/license-expression-1.2/configure
--- old/license-expression-0.999/configure 2019-04-29 16:19:42.000000000
+0200
+++ new/license-expression-1.2/configure 2019-11-15 01:47:43.000000000
+0100
@@ -6,9 +6,7 @@
# change these variables to customize this script locally
################################
# you can define one or more thirdparty dirs, each prefixed with TPP_DIR
-export TPP_DIR_BASE="thirdparty/base"
-export TPP_DIR_DEV="thirdparty/dev"
-export TPP_DIR_PROD="thirdparty/prod"
+export TPP_DIR_BASE="thirdparty"
# default configurations for dev
CONF_DEFAULT="etc/conf/dev"
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/license-expression-0.999/configure.bat
new/license-expression-1.2/configure.bat
--- old/license-expression-0.999/configure.bat 2016-12-21 13:18:55.000000000
+0100
+++ new/license-expression-1.2/configure.bat 2019-11-15 01:47:43.000000000
+0100
@@ -1,54 +1,54 @@
-@echo OFF
-
-@rem Copyright (c) 2016 nexB Inc. http://www.nexb.com/ - All rights reserved.
-
-@rem ################################
-@rem # change these variables to customize this script locally
-@rem ################################
-@rem # you can define one or more thirdparty dirs, each prefixed with TPP_DIR
-set TPP_DIR_BASE=thirdparty/base
-set TPP_DIR_DEV=thirdparty/dev
-set TPP_DIR_PROD=thirdparty/prod
-
-set DEFAULT_PYTHON=python
-
-@rem # default configurations
-set CONF_DEFAULT="etc/conf/dev"
-@rem #################################
-
-set DJ_ROOT_DIR=%~dp0
-
-set CFG_CMD_LINE_ARGS=
-@rem Collect/Slurp all command line arguments in a variable
-:collectarg
- if ""%1""=="""" (
- goto continue
- )
- call set CFG_CMD_LINE_ARGS=%CFG_CMD_LINE_ARGS% %1
- shift
- goto collectarg
-
-:continue
-
-@rem default to dev configuration when no args are passed
-if "%CFG_CMD_LINE_ARGS%"==" " (
- set CFG_CMD_LINE_ARGS="%CONF_DEFAULT%"
- goto configure
-)
-
-if "%CFG_CMD_LINE_ARGS%"==" --init" (
- set CFG_CMD_LINE_ARGS="%CONF_INIT%"
- goto configure
-)
-
-if "%PYTHON_EXE%"==" " (
- set PYTHON_EXE="%DEFAULT_PYTHON%"
- goto configure
-)
-
-
-:configure
-call "%PYTHON_EXE%" etc/configure.py %CFG_CMD_LINE_ARGS%
-goto EOS
-
-:EOS
\ No newline at end of file
+@echo OFF
+setlocal
+@rem Copyright (c) nexB Inc. http://www.nexb.com/ - All rights reserved.
+
+@rem ################################
+@rem # Defaults. change these variables to customize this script locally
+@rem ################################
+@rem # you can define one or more thirdparty dirs, each prefixed with TPP_DIR
+set TPP_DIR=thirdparty
+
+set DEFAULT_PYTHON=python
+
+@rem # default configurations for dev
+set CONF_DEFAULT="etc/conf/dev"
+@rem #################################
+
+set CFG_ROOT_DIR=%~dp0
+
+@rem Collect all command line arguments in a variable
+set CFG_CMD_LINE_ARGS=
+
+@rem a possible alternative way and simpler way to slurp args
+@rem set CFG_CMD_LINE_ARGS=%*
+
+
+:collectarg
+ if ""%1""=="""" goto continue
+ call set CFG_CMD_LINE_ARGS=%CFG_CMD_LINE_ARGS% %1
+ shift
+ goto collectarg
+
+:continue
+
+@rem Set defaults when no args are passed
+if "%CFG_CMD_LINE_ARGS%"=="" set CFG_CMD_LINE_ARGS="%CONF_DEFAULT%"
+if "%PYTHON_EXE%"=="" set PYTHON_EXE=%DEFAULT_PYTHON%
+
+
+call "%PYTHON_EXE%" "%CFG_ROOT_DIR%etc\configure.py" %CFG_CMD_LINE_ARGS%
+@rem Return a proper return code on failure
+
+if %errorlevel% neq 0 (
+ exit /b %errorlevel%
+)
+
+
+@rem Activate the virtualenv
+endlocal
+if exist "%CFG_ROOT_DIR%bin\activate" (
+ "%CFG_ROOT_DIR%bin\activate"
+)
+goto EOS
+
+:EOS
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore'
old/license-expression-0.999/etc/ci/azure-container-deb.yml
new/license-expression-1.2/etc/ci/azure-container-deb.yml
--- old/license-expression-0.999/etc/ci/azure-container-deb.yml 1970-01-01
01:00:00.000000000 +0100
+++ new/license-expression-1.2/etc/ci/azure-container-deb.yml 2019-10-14
16:47:24.000000000 +0200
@@ -0,0 +1,40 @@
+parameters:
+ name: ''
+ container: ''
+ python_path: ''
+ package_manager: apt-get
+ install_python: ''
+ install_packages: |
+ set -e -x
+ sudo apt-get -y update
+ sudo apt-get -y install \
+ build-essential \
+ xz-utils zlib1g bzip2 libbz2-1.0 tar \
+ sqlite3 libxml2-dev libxslt1-dev \
+ software-properties-common openssl
+
+jobs:
+- job: ${{ parameters.name }}
+
+ pool:
+ vmImage: 'ubuntu-16.04'
+
+ container:
+ image: ${{ parameters.container }}
+ options: '--name ${{ parameters.name }} -v /usr/bin/docker:/tmp/docker:ro'
+
+ steps:
+ - script: /tmp/docker exec -t -u 0 ${{ parameters.name }}
$(Build.SourcesDirectory)/etc/ci/install_sudo.sh ${{ parameters.package_manager
}}
+ displayName: Install sudo
+
+ - script: ${{ parameters.install_packages }}
+ displayName: Install required packages
+
+ - script: ${{ parameters.install_python }}
+ displayName: Install Python
+
+ - script: PYTHON_EXE=${{ parameters.python_path }} ./configure
+ displayName: 'Configure'
+
+ - script: bin/py.test -vvs
+ displayName: 'Run tests'
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore'
old/license-expression-0.999/etc/ci/azure-container-rpm.yml
new/license-expression-1.2/etc/ci/azure-container-rpm.yml
--- old/license-expression-0.999/etc/ci/azure-container-rpm.yml 1970-01-01
01:00:00.000000000 +0100
+++ new/license-expression-1.2/etc/ci/azure-container-rpm.yml 2019-10-14
16:47:24.000000000 +0200
@@ -0,0 +1,40 @@
+parameters:
+ name: ''
+ container: ''
+ python_path: ''
+ package_manager: yum
+ install_python: ''
+ install_packages: |
+ set -e -x
+ sudo yum groupinstall -y "Development Tools"
+ sudo yum install -y \
+ openssl openssl-devel \
+ sqlite-devel zlib-devel xz-devel bzip2-devel \
+ bzip2 tar unzip zip \
+ libxml2-devel libxslt-devel
+
+jobs:
+- job: ${{ parameters.name }}
+
+ pool:
+ vmImage: 'ubuntu-16.04'
+
+ container:
+ image: ${{ parameters.container }}
+ options: '--name ${{ parameters.name }} -v /usr/bin/docker:/tmp/docker:ro'
+
+ steps:
+ - script: /tmp/docker exec -t -u 0 ${{ parameters.name }}
$(Build.SourcesDirectory)/etc/ci/install_sudo.sh ${{ parameters.package_manager
}}
+ displayName: Install sudo
+
+ - script: ${{ parameters.install_packages }}
+ displayName: Install required packages
+
+ - script: ${{ parameters.install_python }}
+ displayName: Install Python
+
+ - script: PYTHON_EXE=${{ parameters.python_path }} ./configure
+ displayName: 'Configure'
+
+ - script: bin/py.test -vvs
+ displayName: 'Run tests'
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/license-expression-0.999/etc/ci/azure-posix.yml
new/license-expression-1.2/etc/ci/azure-posix.yml
--- old/license-expression-0.999/etc/ci/azure-posix.yml 1970-01-01
01:00:00.000000000 +0100
+++ new/license-expression-1.2/etc/ci/azure-posix.yml 2019-11-15
01:47:43.000000000 +0100
@@ -0,0 +1,28 @@
+parameters:
+ name: ''
+ image_name: ''
+ matrix: []
+
+jobs:
+- job: ${{ parameters.name }}
+
+ pool:
+ vmImage: ${{ parameters.image_name }}
+
+ strategy:
+ matrix:
+ ${{ insert }}: ${{ parameters.matrix }}
+
+ steps:
+ - task: UsePythonVersion@0
+ inputs:
+ versionSpec: '$(python_version)'
+
+ - script: ./configure
+ displayName: 'Configure'
+
+ - script: bin/about check --verbose .
+ displayName: 'Check ABOUT files'
+
+ - script: bin/py.test -vvs
+ displayName: 'Run tests'
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/license-expression-0.999/etc/ci/azure-win.yml
new/license-expression-1.2/etc/ci/azure-win.yml
--- old/license-expression-0.999/etc/ci/azure-win.yml 1970-01-01
01:00:00.000000000 +0100
+++ new/license-expression-1.2/etc/ci/azure-win.yml 2019-11-15
01:47:43.000000000 +0100
@@ -0,0 +1,29 @@
+parameters:
+ name: ''
+ image_name: ''
+ matrix: []
+
+jobs:
+- job: ${{ parameters.name }}
+
+ pool:
+ vmImage: ${{ parameters.image_name }}
+
+ strategy:
+ matrix:
+ ${{ insert }}: ${{ parameters.matrix }}
+
+ steps:
+ - task: UsePythonVersion@0
+ inputs:
+ versionSpec: '$(python_version)'
+ architecture: '$(python_architecture)'
+
+ - script: configure
+ displayName: 'Configure'
+
+ - script: bin\about check --verbose .
+ displayName: 'Check ABOUT files'
+
+ - script: bin\py.test -vvs
+ displayName: 'Run tests'
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/license-expression-0.999/etc/ci/install_sudo.sh
new/license-expression-1.2/etc/ci/install_sudo.sh
--- old/license-expression-0.999/etc/ci/install_sudo.sh 1970-01-01
01:00:00.000000000 +0100
+++ new/license-expression-1.2/etc/ci/install_sudo.sh 2019-10-14
16:47:24.000000000 +0200
@@ -0,0 +1,15 @@
+#!/bin/bash
+set -e
+
+
+if [[ "$1" == "apt-get" ]]; then
+ apt-get update -y
+ apt-get -o DPkg::Options::="--force-confold" install -y sudo
+
+elif [[ "$1" == "yum" ]]; then
+ yum install -y sudo
+
+elif [[ "$1" == "dnf" ]]; then
+ dnf install -y sudo
+
+fi
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/license-expression-0.999/setup.cfg
new/license-expression-1.2/setup.cfg
--- old/license-expression-0.999/setup.cfg 2019-04-29 17:24:35.000000000
+0200
+++ new/license-expression-1.2/setup.cfg 2019-11-15 01:54:19.000000000
+0100
@@ -22,6 +22,7 @@
include
Lib
lib
+ lib64
Scripts
thirdparty
tmp
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/license-expression-0.999/setup.py
new/license-expression-1.2/setup.py
--- old/license-expression-0.999/setup.py 2019-04-29 17:22:24.000000000
+0200
+++ new/license-expression-1.2/setup.py 2019-11-15 01:47:43.000000000 +0100
@@ -17,7 +17,7 @@
setup(
name='license-expression',
- version='0.999',
+ version='1.2',
license='apache-2.0',
description=desc,
long_description=desc,
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore'
old/license-expression-0.999/src/license_expression/__init__.py
new/license-expression-1.2/src/license_expression/__init__.py
--- old/license-expression-0.999/src/license_expression/__init__.py
2019-04-29 17:22:24.000000000 +0200
+++ new/license-expression-1.2/src/license_expression/__init__.py
2019-11-15 01:47:43.000000000 +0100
@@ -103,6 +103,10 @@
pass
+class ExpressionParseError(ParseError, ExpressionError):
+ pass
+
+
# Used for tokenizing
Keyword = namedtuple('Keyword', 'value type')
Keyword.__len__ = lambda self: len(self.value)
@@ -124,7 +128,7 @@
# mapping of lowercase operator strings to an operator object
OPERATORS = {'and': KW_AND, 'or': KW_OR, 'with': KW_WITH}
-_simple_tokenizer = re.compile('''
+_simple_tokenizer = re.compile(r'''
(?P<symop>[^\s\(\)]+)
|
(?P<space>\s+)
@@ -380,7 +384,7 @@
"""
Return a new license LicenseExpression object by parsing a license
`expression` string. Check that the expression syntax is valid and
raise
- an Exception, an ExpressionError or a ParseError on errors.
+ an ExpressionError or an ExpressionParseError on errors.
Return None for empty expressions.
`expression` is either a string or a LicenseExpression object. If this
is a LicenseExpression it is returned as-is.
@@ -433,9 +437,11 @@
# this will raise a ParseError on errors
tokens = list(self.tokenize(expression, strict=strict,
simple=simple))
expression = super(Licensing, self).parse(tokens)
- except TypeError as e:
- msg = 'Invalid expression syntax: ' + repr(e)
- raise ExpressionError(msg)
+ except ParseError as e:
+ new_error = ExpressionParseError(
+ token_type=e.token_type, token_string=e.token_string,
+ position=e.position, error_code=e.error_code)
+ raise new_error
if not isinstance(expression, LicenseExpression):
raise ExpressionError('expression must be a LicenseExpression once
parsed.')
@@ -821,6 +827,19 @@
"""
return NotImplementedError
+ def render_as_readable(self, template='{symbol.key}', *args, **kwargs):
+ """
+ Return a formatted string rendering for this expression using the
+ `template` format string to render each symbol. Add extra parenthesis
+ around WITH sub-expressions for improved readbility. See `render()` for
+ other arguments.
+ """
+ if isinstance(self, LicenseWithExceptionSymbol):
+ return self.render(
+ template=template, wrap_with_in_parens=False, *args, **kwargs)
+ else:
+ return self.render(template=template, wrap_with_in_parens=True,
*args, **kwargs)
+
class BaseSymbol(Renderable, boolean.Symbol):
"""
@@ -1069,10 +1088,19 @@
yield self.license_symbol
yield self.exception_symbol
- def render(self, template='{symbol.key}', *args, **kwargs):
+ def render(self, template='{symbol.key}', wrap_with_in_parens=False,
*args, **kwargs):
+ """
+ Return a formatted WITH expression. If `wrap_with_in_parens`, wrap in
+ parens a WITH expression, unless it is alone and not used with other
AND
+ or OR sub-expressions.
+ """
lic = self.license_symbol.render(template, *args, **kwargs)
exc = self.exception_symbol.render(template, *args, **kwargs)
- return '%(lic)s WITH %(exc)s' % locals()
+ if wrap_with_in_parens:
+ temp = '(%(lic)s WITH %(exc)s)'
+ else:
+ temp = '%(lic)s WITH %(exc)s'
+ return temp % locals()
def __hash__(self, *args, **kwargs):
return hash((self.license_symbol, self.exception_symbol,))
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore'
old/license-expression-0.999/src/license_expression/_pyahocorasick.py
new/license-expression-1.2/src/license_expression/_pyahocorasick.py
--- old/license-expression-0.999/src/license_expression/_pyahocorasick.py
2019-04-29 16:19:42.000000000 +0200
+++ new/license-expression-1.2/src/license_expression/_pyahocorasick.py
2019-11-15 01:47:43.000000000 +0100
@@ -608,7 +608,7 @@
# tokenize to separate text from parens
-_tokenizer = re.compile('''
+_tokenizer = re.compile(r'''
(?P<text>[^\s\(\)]+)
|
(?P<space>\s+)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore'
old/license-expression-0.999/src/license_expression.egg-info/SOURCES.txt
new/license-expression-1.2/src/license_expression.egg-info/SOURCES.txt
--- old/license-expression-0.999/src/license_expression.egg-info/SOURCES.txt
2019-04-29 17:24:35.000000000 +0200
+++ new/license-expression-1.2/src/license_expression.egg-info/SOURCES.txt
2019-11-15 01:54:19.000000000 +0100
@@ -10,6 +10,11 @@
setup.cfg
setup.py
etc/configure.py
+etc/ci/azure-container-deb.yml
+etc/ci/azure-container-rpm.yml
+etc/ci/azure-posix.yml
+etc/ci/azure-win.yml
+etc/ci/install_sudo.sh
etc/conf/base.txt
etc/conf/win.txt
etc/conf/dev/base.txt
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore'
old/license-expression-0.999/tests/test_license_expression.py
new/license-expression-1.2/tests/test_license_expression.py
--- old/license-expression-0.999/tests/test_license_expression.py
2019-04-29 17:22:24.000000000 +0200
+++ new/license-expression-1.2/tests/test_license_expression.py 2019-11-15
01:47:43.000000000 +0100
@@ -552,6 +552,16 @@
expr3 = licensing.parse('mit and LGPL2.1')
self.assertTrue(expr3 in expr2)
+ def test_parse_simplify_no_sort(self):
+ licensing = Licensing()
+ expr = licensing.parse('gpl-2.0 OR apache-2.0')
+ expr2 = licensing.parse('apache-2.0 OR gpl-2.0')
+
+ self.assertEqual(expr, expr2)
+ self.assertEqual(expr.simplify(), expr2.simplify())
+ self.assertEqual(expr.simplify(sort=False), expr2.simplify())
+ self.assertNotEqual(expr.simplify(sort=False).pretty(), expr2.pretty())
+
def test_license_expression_is_equivalent(self):
lic = Licensing()
is_equiv = lic.is_equivalent
@@ -1655,6 +1665,30 @@
assert expected == licensing.primary_license_symbol(
parsed, decompose=False).render('{symbol.key}')
+ def test_render_plain(self):
+ l = Licensing()
+ result = l.parse('gpl-2.0 WITH exception-gpl-2.0-plus or MIT').render()
+ expected = 'gpl-2.0 WITH exception-gpl-2.0-plus OR MIT'
+ assert expected == result
+
+ def test_render_as_readable_does_not_wrap_in_parens_single_with(self):
+ l = Licensing()
+ result = l.parse('gpl-2.0 WITH
exception-gpl-2.0-plus').render_as_readable()
+ expected = 'gpl-2.0 WITH exception-gpl-2.0-plus'
+ assert expected == result
+
+ def
test_render_as_readable_wraps_in_parens_with_and_other_subexpressions(self):
+ l = Licensing()
+ result = l.parse('mit AND gpl-2.0 WITH
exception-gpl-2.0-plus').render_as_readable()
+ expected = 'mit AND (gpl-2.0 WITH exception-gpl-2.0-plus)'
+ assert expected == result
+
+ def test_render_as_readable_does_not_wrap_in_parens_if_no_with(self):
+ l = Licensing()
+ result1 = l.parse('gpl-2.0 and exception OR that').render_as_readable()
+ result2 = l.parse('gpl-2.0 and exception OR that').render()
+ assert result1 == result2
+
class SplitAndTokenizeTest(TestCase):