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' 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 rm -rf ./build
PY3=python3 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" 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 Section: python
Priority: optional Priority: optional
Maintainer: Harald Welte <laforge@gnumonks.org> 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 Standards-Version: 3.9.8
Homepage: http://git.osmocom.org/python/osmo-python-tests/ Homepage: http://git.osmocom.org/python/osmo-python-tests/
Vcs-Git: git://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/ 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 Package: python3-osmopy-libs
Architecture: all Architecture: all
Depends: ${python3:Depends}, ${misc:Depends} Depends: ${python3:Depends}, ${misc:Depends}

6
debian/rules vendored
View File

@ -1,13 +1,9 @@
#!/usr/bin/make -f #!/usr/bin/make -f
%: %:
dh $@ --with python2,python3 dh $@ --with python3 --buildsystem=pybuild
override_dh_auto_install: 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 python3 setup.py install --install-layout=deb --root=$(CURDIR)/debian/python3-osmopy-libs
rm -rf $(CURDIR)/debian/python3-osmopy-libs/usr/bin rm -rf $(CURDIR)/debian/python3-osmopy-libs/usr/bin
python3 setup.py install --install-layout=deb --root=$(CURDIR)/debian/python3-osmopy-utils 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' __version__ = '0.1.0'
__all__ = ['obscvty', 'osmoutil', 'osmo_ipa', 'osmo_interact', 'trap_helper', 'twisted_ipa'] __all__ = ['obscvty', 'osmoutil', 'osmo_ipa', 'osmo_interact', 'trap_helper', 'twisted_ipa']

View File

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

View File

@ -1,2 +1,2 @@
#!/usr/bin/env python #!/usr/bin/env python3
__all__ = ['common', 'vty', 'ctrl'] __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. 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 argparse
import sys import sys
import os 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> # (C) 2013 by Katerina Barone-Adesi <kat.obsc@gmail.com>
# This program is free software: you can redistribute it and/or modify # 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 # You should have received a copy of the GNU General Public License
# along with this program. If not, see <http://www.gnu.org/licenses/>. # along with this program. If not, see <http://www.gnu.org/licenses/>.
from __future__ import print_function
import subprocess import subprocess
import os import os
import sys 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. # Make sure this code is in sync with the BTS directory.
# Fixes may need to be applied to both. # Fixes may need to be applied to both.
"""Start the process and dump the documentation to the doc dir.""" """Start the process and dump the documentation to the doc dir."""
from __future__ import print_function
import subprocess import subprocess
import time import time
import os 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> # (C) 2013 by Katerina Barone-Adesi <kat.obsc@gmail.com>
# This program is free software: you can redistribute it and/or modify # 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 # You should have received a copy of the GNU General Public License
# along with this program. If not, see <http://www.gnu.org/licenses/>. # along with this program. If not, see <http://www.gnu.org/licenses/>.
from __future__ import print_function
import os import os
import os.path import os.path
import time import time
@ -89,7 +88,7 @@ def copy_config(dirname, config):
prefix = os.path.basename(config) prefix = os.path.basename(config)
tmpfile = tempfile.NamedTemporaryFile( tmpfile = tempfile.NamedTemporaryFile(
dir=dirname, prefix=prefix, delete=False) dir=dirname, prefix=prefix, delete=False)
tmpfile.write(open(config).read()) tmpfile.write(open(config).read().encode())
tmpfile.close() tmpfile.close()
# This works around the precautions NamedTemporaryFile is made for... # This works around the precautions NamedTemporaryFile is made for...
return tmpfile.name 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> # (C) 2013 by Katerina Barone-Adesi <kat.obsc@gmail.com>
# This program is free software: you can redistribute it and/or modify # 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 # You should have received a copy of the GNU General Public License
# along with this program. If not, see <http://www.gnu.org/licenses/>. # along with this program. If not, see <http://www.gnu.org/licenses/>.
from __future__ import print_function
import os import os
import time import time
import unittest import unittest

View File

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