Drop python2 support / make it work with python3

Re-apply reverted commit Iabda95073faa2191fd117e9637e0858c589e9d9e
("Drop python2 support"), but with additional changes to make the
scripts actually work with python3 and to make it build without python2.

I have verified, that the contrib/jenkins.sh scripts of all Osmocom
repositories (with their python3 patches on top) are working with this
patch and that all Osmocom repositories with the python3 patches build
in OBS (tested in own namespace).

New fixes:
* osmopy/obscvty.py: verify: fix compare
  Comparing maps in python3 does not work the same as in python2. Convert
  them to lists first, so the compare works as intended again.
  Fix error:
	  File "/home/user/code/osmo-dev/src/osmo-python-tests/scripts/osmotestvty.py", line 57, in test_history
	    assert(self.vty.w_verify(test_str, [t1]))
	AssertionError
* osmopy/obscvty.py: use enc/dec with send/recv
  Fix error:
		self.socket.send("%s\r" % request)
	TypeError: a bytes-like object is required, not 'str'
* scripts/osmotestconfig.py: use encode() before writing to file
  Fix error:
	File "/home/user/code/osmo-dev/src/osmo-python-tests/scripts/osmotestconfig.py", line 91, in copy_config
		tmpfile.write(open(config).read())
	File "/usr/lib/python3.5/tempfile.py", line 622, in func_wrapper
		return func(*args, **kwargs)
	TypeError: a bytes-like object is required, not 'str'
* debian/control: add --buildsystem=pybuild. Otherwise "--with python3"
  is ignored and the build fails if python2 is not installed, with:
  	Can't exec "pyversions": No such file or directory at /usr/[...]/python_distutils.pm line 120.

Related: OS#2819
Change-Id: I3ffc3519bf6c22536a49dad7a966188ddad351a7
This commit is contained in:
Oliver Smith 2019-12-09 14:41:14 +01:00
parent b0ba927e33
commit d8666ad3c8
13 changed files with 28 additions and 77 deletions

View File

@ -4,16 +4,6 @@ set -ex
COM_FLAGS='-m compileall'
# FIXME: remove once python 2 support is deprecated
PY2=python2
PY2_LIST="osmopy scripts/osmodumpdoc.py scripts/osmotestvty.py scripts/osmotestconfig.py"
$PY2 ./setup.py install
$PY2 tests/test_py2.py
for f in $PY2_LIST
do
$PY2 $COM_FLAGS $f
done
rm -rf ./build
PY3=python3
PY3_LIST="osmopy scripts/osmo_ctrl.py scripts/osmo_rate_ctr2csv.py scripts/osmodumpdoc.py scripts/osmotestvty.py scripts/osmotestconfig.py scripts/osmo_interact_ctrl.py scripts/osmo_interact_vty.py scripts/osmo_verify_transcript_ctrl.py scripts/osmo_verify_transcript_vty.py scripts/soap.py scripts/twisted_ipa.py"

16
debian/control vendored
View File

@ -2,26 +2,12 @@ Source: osmo-python-tests
Section: python
Priority: optional
Maintainer: Harald Welte <laforge@gnumonks.org>
Build-Depends: debhelper (>= 9), python, dh-python, python-setuptools, python3, python3-setuptools
Build-Depends: debhelper (>= 9), dh-python, python3, python3-setuptools
Standards-Version: 3.9.8
Homepage: http://git.osmocom.org/python/osmo-python-tests/
Vcs-Git: git://git.osmocom.org/python/osmo-python-tests
Vcs-Browser: http://git.osmocom.org/python/osmo-python-tests/
Package: python2-osmopy-libs
Architecture: all
Depends: ${python:Depends}, ${misc:Depends}
Description: Python code (not only) for testing of Osmocom programs
.
This package contains the Python 2 version of osmopy libraries.
Package: python2-osmopy-utils
Architecture: all
Depends: ${python:Depends}, ${misc:Depends}, python2-osmopy-libs
Description: Python code (not only) for testing of Osmocom programs
.
This package contains the Python 2 version of osmopy utils.
Package: python3-osmopy-libs
Architecture: all
Depends: ${python3:Depends}, ${misc:Depends}

6
debian/rules vendored
View File

@ -1,13 +1,9 @@
#!/usr/bin/make -f
%:
dh $@ --with python2,python3
dh $@ --with python3 --buildsystem=pybuild
override_dh_auto_install:
python2 setup.py install --install-layout=deb --root=$(CURDIR)/debian/python2-osmopy-libs
rm -rf $(CURDIR)/debian/python2-osmopy-libs/usr/bin
python2 setup.py install --install-layout=deb --root=$(CURDIR)/debian/python2-osmopy-utils
rm -rf $(CURDIR)/debian/python2-osmopy-utils/usr/lib
python3 setup.py install --install-layout=deb --root=$(CURDIR)/debian/python3-osmopy-libs
rm -rf $(CURDIR)/debian/python3-osmopy-libs/usr/bin
python3 setup.py install --install-layout=deb --root=$(CURDIR)/debian/python3-osmopy-utils

View File

@ -1,4 +1,4 @@
#!/usr/bin/env python
#!/usr/bin/env python3
__version__ = '0.1.0'
__all__ = ['obscvty', 'osmoutil', 'osmo_ipa', 'osmo_interact', 'trap_helper', 'twisted_ipa']

View File

@ -16,7 +16,6 @@
#
# VTY helper code for OpenBSC
#
from __future__ import print_function
import re
import socket
import sys, subprocess
@ -176,13 +175,13 @@ class VTYInteract(object):
self._connect_socket()
# Now send the command
self.socket.send("%s\r" % request)
self.socket.send(("%s\r" % request).encode())
res = ""
end = ""
# Unfortunately, timeout and recv don't always play nicely
while True:
data = self.socket.recv(4096)
data = self.socket.recv(4096).decode()
res = "%s%s" % (res, data)
if not res: # yes, this is ugly
raise IOError("Failed to read data (did the app crash?)")
@ -205,7 +204,7 @@ class VTYInteract(object):
buffer = ''
data = True
while data:
data = self.socket.recv(recv_buffer)
data = self.socket.recv(recv_buffer).decode()
buffer += data
while buffer.find(delim) != -1:
@ -244,8 +243,8 @@ class VTYInteract(object):
def verify(self, command, results, close=False, loud=True, f=None):
res = self.command(command, close).split('\r\n')
if f:
res = map(f, res)
results = map(f, results)
res = list(map(f, res))
results = list(map(f, results))
if loud:
if res != results:

View File

@ -1,2 +1,2 @@
#!/usr/bin/env python
#!/usr/bin/env python3
__all__ = ['common', 'vty', 'ctrl']

View File

@ -24,11 +24,6 @@ This implements all of application interaction, piping and verification.
vty.py and ctrl.py plug VTY and CTRL interface specific bits.
'''
# Our setup.py currently wants everything to be parsable by both py2 and py3.
# IMHO that is not a good idea, but until that changes, let's just keep this
# py2 legacy shim in here so we can syntax-check this py3 module with py2.
from __future__ import print_function
import argparse
import sys
import os

View File

@ -1,4 +1,4 @@
#!/usr/bin/env python
#!/usr/bin/env python3
# (C) 2013 by Katerina Barone-Adesi <kat.obsc@gmail.com>
# This program is free software: you can redistribute it and/or modify
@ -14,7 +14,6 @@
# You should have received a copy of the GNU General Public License
# along with this program. If not, see <http://www.gnu.org/licenses/>.
from __future__ import print_function
import subprocess
import os
import sys

View File

@ -1,10 +1,9 @@
#!/usr/bin/env python
#!/usr/bin/env python3
# Make sure this code is in sync with the BTS directory.
# Fixes may need to be applied to both.
"""Start the process and dump the documentation to the doc dir."""
from __future__ import print_function
import subprocess
import time
import os

View File

@ -1,4 +1,4 @@
#!/usr/bin/env python
#!/usr/bin/env python3
# (C) 2013 by Katerina Barone-Adesi <kat.obsc@gmail.com>
# This program is free software: you can redistribute it and/or modify
@ -13,7 +13,6 @@
# You should have received a copy of the GNU General Public License
# along with this program. If not, see <http://www.gnu.org/licenses/>.
from __future__ import print_function
import os
import os.path
import time
@ -89,7 +88,7 @@ def copy_config(dirname, config):
prefix = os.path.basename(config)
tmpfile = tempfile.NamedTemporaryFile(
dir=dirname, prefix=prefix, delete=False)
tmpfile.write(open(config).read())
tmpfile.write(open(config).read().encode())
tmpfile.close()
# This works around the precautions NamedTemporaryFile is made for...
return tmpfile.name

View File

@ -1,4 +1,4 @@
#!/usr/bin/env python
#!/usr/bin/env python3
# (C) 2013 by Katerina Barone-Adesi <kat.obsc@gmail.com>
# This program is free software: you can redistribute it and/or modify
@ -13,7 +13,6 @@
# You should have received a copy of the GNU General Public License
# along with this program. If not, see <http://www.gnu.org/licenses/>.
from __future__ import print_function
import os
import time
import unittest

View File

@ -19,24 +19,20 @@ from setuptools import setup, find_packages
from osmopy import __version__
import sys
if sys.version_info.major == 2:
scripts = [
"scripts/osmodumpdoc.py",
"scripts/osmotestconfig.py",
"scripts/osmotestvty.py",
]
elif sys.version_info.major == 3:
scripts = [
"scripts/osmo_ctrl.py",
"scripts/osmo_rate_ctr2csv.py",
"scripts/soap.py",
"scripts/ctrl2cgi.py",
"scripts/osmo_trap2cgi.py",
"scripts/osmo_interact_vty.py",
"scripts/osmo_interact_ctrl.py",
"scripts/osmo_verify_transcript_vty.py",
"scripts/osmo_verify_transcript_ctrl.py",
]
scripts = [
"scripts/osmodumpdoc.py",
"scripts/osmotestvty.py",
"scripts/osmotestconfig.py",
"scripts/osmo_ctrl.py",
"scripts/osmo_rate_ctr2csv.py",
"scripts/soap.py",
"scripts/ctrl2cgi.py",
"scripts/osmo_trap2cgi.py",
"scripts/osmo_interact_vty.py",
"scripts/osmo_interact_ctrl.py",
"scripts/osmo_verify_transcript_vty.py",
"scripts/osmo_verify_transcript_ctrl.py",
]
setup(
name = 'osmopython',

View File

@ -1,7 +0,0 @@
#!/usr/bin/env python2
# just import a smoke test for osmopy
import osmopy
print '[Python2] Smoke test PASSED.'