You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@avro.apache.org by ko...@apache.org on 2019/12/19 02:30:58 UTC
[avro] branch master updated: AVRO-2652: Use Tox to Enable Multi
Python Testing (#742)
This is an automated email from the ASF dual-hosted git repository.
kojiromike pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/avro.git
The following commit(s) were added to refs/heads/master by this push:
new bd9e6c4 AVRO-2652: Use Tox to Enable Multi Python Testing (#742)
bd9e6c4 is described below
commit bd9e6c4514db274ca97dbf78975a3f9156a523b6
Author: Michael A. Smith <mi...@smith-li.com>
AuthorDate: Wed Dec 18 21:30:47 2019 -0500
AVRO-2652: Use Tox to Enable Multi Python Testing (#742)
* AVRO-2652: Fix Inconsistent Pretty Output Order
Using json.dumps on a dict gives the simplest possible way to
pretty-print a schema, but it doesn't give any control over the output
order. But the test kit assumes the output is in a specific order, which
is not guaranteed by older Python implementations. This change sorts the
keys for the simplest possible stable output order.
* AVRO-2652: Run Tests with Tox
Tox enables testing with multiple versions of python in the same place.
* AVRO-2652: Tox in Docker
* AVRO-2657: Fix Python Interop Data Generator
* AVRO-2657: Test with Interop Data
* AVRO-2657: Make build.sh do interop tests
---
lang/py/.gitignore | 2 ++
lang/py/MANIFEST.in | 17 ++++++++++++++
lang/py/avro/test/test_script.py | 4 ++--
lang/py/avro/test/test_tether_task_runner.py | 4 ++--
lang/py/build.sh | 5 ++++-
lang/py/scripts/avro | 2 +-
lang/py/setup.cfg | 12 ++++++++--
lang/py/setup.py | 6 ++---
lang/py/tox.ini | 33 ++++++++++++++++++++++++++++
share/docker/Dockerfile | 1 +
10 files changed, 75 insertions(+), 11 deletions(-)
diff --git a/lang/py/.gitignore b/lang/py/.gitignore
index 2eaad89..4bd8e9d 100644
--- a/lang/py/.gitignore
+++ b/lang/py/.gitignore
@@ -9,3 +9,5 @@ avro/VERSION.txt
avro/interop.avsc
avro/tether/InputProtocol.avpr
avro/tether/OutputProtocol.avpr
+.tox
+dist
diff --git a/lang/py/MANIFEST.in b/lang/py/MANIFEST.in
new file mode 100644
index 0000000..1378ab8
--- /dev/null
+++ b/lang/py/MANIFEST.in
@@ -0,0 +1,17 @@
+# Licensed to the Apache Software Foundation (ASF) under one or more
+# contributor license agreements. See the NOTICE file distributed with
+# this work for additional information regarding copyright ownership.
+# The ASF licenses this file to You under the Apache License, Version 2.0
+# (the "License"); you may not use this file except in compliance with
+# the License. You may obtain a copy of the License at
+#
+# https://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+include avro/*.avsc avro/tether/*.avpr
+include avro/VERSION.txt avro/LICENSE avro/NOTICE
diff --git a/lang/py/avro/test/test_script.py b/lang/py/avro/test/test_script.py
index a92754f..db886d7 100644
--- a/lang/py/avro/test/test_script.py
+++ b/lang/py/avro/test/test_script.py
@@ -66,9 +66,9 @@ def looney_records():
SCRIPT = join(dirname(dirname(dirname(__file__))), "scripts", "avro")
_JSON_PRETTY = '''{
- "type": "duck",
+ "first": "daffy",
"last": "duck",
- "first": "daffy"
+ "type": "duck"
}'''
def gen_avro(filename):
diff --git a/lang/py/avro/test/test_tether_task_runner.py b/lang/py/avro/test/test_tether_task_runner.py
index 8a79272..245f3bb 100644
--- a/lang/py/avro/test/test_tether_task_runner.py
+++ b/lang/py/avro/test/test_tether_task_runner.py
@@ -28,11 +28,11 @@ import time
import unittest
import avro.io
+import avro.test.mock_tether_parent
+import avro.test.word_count_task
import avro.tether.tether_task
import avro.tether.tether_task_runner
import avro.tether.util
-import avro.test.mock_tether_parent
-import avro.test.word_count_task
class TestTetherTaskRunner(unittest.TestCase):
diff --git a/lang/py/build.sh b/lang/py/build.sh
index 2dc6bd0..ff2c388 100755
--- a/lang/py/build.sh
+++ b/lang/py/build.sh
@@ -40,9 +40,12 @@ dist() {
interop-data-generate() {
./setup.py generate_interop_data
+ cp -r avro/test/interop/data ../../build/interop
}
interop-data-test() {
+ mkdir -p avro/test/interop ../../build/interop/data
+ cp -r ../../build/interop/data avro/test/interop
python -m unittest avro.test.test_datafile_interop
}
@@ -51,7 +54,7 @@ lint() {
}
test_() {
- ./setup.py test
+ tox
}
main() {
diff --git a/lang/py/scripts/avro b/lang/py/scripts/avro
index e0c116b..c9ed157 100755
--- a/lang/py/scripts/avro
+++ b/lang/py/scripts/avro
@@ -52,7 +52,7 @@ def print_json_pretty(row):
"""Pretty print JSON"""
# Need to work around https://bugs.python.org/issue16333
# where json.dumps leaves trailing spaces.
- result = json.dumps(row, indent=4).replace(' \n', '\n')
+ result = json.dumps(row, sort_keys=True, indent=4).replace(' \n', '\n')
print(result)
_write_row = csv.writer(stdout).writerow
diff --git a/lang/py/setup.cfg b/lang/py/setup.cfg
index c1f9fc0..0c2148f 100644
--- a/lang/py/setup.cfg
+++ b/lang/py/setup.cfg
@@ -34,9 +34,14 @@ classifiers =
Programming Language :: Python :: 2.7 :: Only
[options]
-packages = avro
+packages =
+ avro
+ avro.test
+ avro.tether
package_dir =
avro = avro
+ avro.test = avro/test
+ avro.tether = avro/tether
include_package_data = true
setup_requires =
isort
@@ -51,9 +56,12 @@ python_requires = <3.0,>=2.7
avro =
HandshakeRequest.avsc
HandshakeResponse.avsc
- share/VERSION.txt
+ VERSION.txt
LICENSE
NOTICE
+avro.tether =
+ InputProtocol.avpr
+ OutputProtocol.avpr
[options.extras_require]
snappy = python-snappy
diff --git a/lang/py/setup.py b/lang/py/setup.py
index fc662a3..43c97db 100755
--- a/lang/py/setup.py
+++ b/lang/py/setup.py
@@ -59,7 +59,7 @@ def _generate_package_data():
# Create a PEP440 compliant version file.
version_file_path = os.path.join(share_dir, _VERSION_FILE_NAME)
with open(version_file_path, 'rb') as vin:
- version = vin.read().replace('-', '+')
+ version = vin.read().replace(b'-', b'+')
with open(os.path.join(_AVRO_DIR, _VERSION_FILE_NAME), 'wb') as vout:
vout.write(version)
@@ -109,8 +109,8 @@ class GenerateInteropDataCommand(setuptools.Command):
def _get_version():
curdir = os.getcwd()
- if os.path.isfile("share/VERSION.txt"):
- version_file = "share/VERSION.txt"
+ if os.path.isfile("avro/VERSION.txt"):
+ version_file = "avro/VERSION.txt"
else:
index = curdir.index("lang/py")
path = curdir[:index]
diff --git a/lang/py/tox.ini b/lang/py/tox.ini
new file mode 100644
index 0000000..dc3308e
--- /dev/null
+++ b/lang/py/tox.ini
@@ -0,0 +1,33 @@
+# Licensed to the Apache Software Foundation (ASF) under one or more
+# contributor license agreements. See the NOTICE file distributed with
+# this work for additional information regarding copyright ownership.
+# The ASF licenses this file to You under the Apache License, Version 2.0
+# (the "License"); you may not use this file except in compliance with
+# the License. You may obtain a copy of the License at
+#
+# https://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+[tox]
+envlist =
+ py27
+
+[testenv]
+deps =
+ python-snappy
+ zstandard
+whitelist_externals =
+ cp
+ mkdir
+commands_pre =
+ mkdir -p avro/test/interop {toxinidir}/../../build/interop/data
+ cp -r {toxinidir}/../../build/interop/data avro/test/interop
+ python -m avro.test.gen_interop_data avro/interop.avsc avro/test/interop/data/py.avro
+ cp -r avro/test/interop/data {toxinidir}/../../build/interop
+commands =
+ python -m unittest discover
diff --git a/share/docker/Dockerfile b/share/docker/Dockerfile
index 669989e..2421882 100644
--- a/share/docker/Dockerfile
+++ b/share/docker/Dockerfile
@@ -64,6 +64,7 @@ RUN apt-get -qqy update \
ruby-dev \
source-highlight \
subversion \
+ tox \
valgrind \
&& apt-get -qqy clean \
&& rm -rf /var/lib/apt/lists