aboutsummaryrefslogtreecommitdiffstats
path: root/docs/csit_python2_to_python3_migration.md
diff options
context:
space:
mode:
Diffstat (limited to 'docs/csit_python2_to_python3_migration.md')
-rw-r--r--docs/csit_python2_to_python3_migration.md182
1 files changed, 0 insertions, 182 deletions
diff --git a/docs/csit_python2_to_python3_migration.md b/docs/csit_python2_to_python3_migration.md
deleted file mode 100644
index 8263f7aabe..0000000000
--- a/docs/csit_python2_to_python3_migration.md
+++ /dev/null
@@ -1,182 +0,0 @@
-# FD.io CSIT migration Python 2.7 to Python 3
-
-## Python 3 version
-
-There is a pre-agreement to migrate to Python 3 version used by
-Ubuntu 18.04-LTS - currently it is version [3.6.8](https://docs.python.org/3.6/whatsnew/changelog.html#python-3-6-8-final).
-
-CentOS7 version 1810 that is used in [FD.io](https://fd.io/) also contains
-Python 3.6.
-
-## Dependency libs
-
-There was used *[caniusepython3](https://pypi.org/project/caniusepython3/)*
-tool to check readiness of current version of csit external libraries for
-Python 3. It identified one external library that needs to be updated to
-support Python 3:
- ```
- (env) vpp@vpp-VirtualBox:~/Documents/csit$ caniusepython3 -r requirements.txt
- Finding and checking dependencies ...
- You need 1 project to transition to Python 3.
- Of that 1 project, 1 has no direct dependencies blocking its transition:
- pypcap
- (env) vpp@vpp-VirtualBox:~/Documents/csit$ caniusepython3 -r tox-requirements.txt
- Finding and checking dependencies ...
- You have 0 projects blocking you from using Python 3!
- (env) vpp@vpp-VirtualBox:~/Documents/csit$
- ```
-
-The latest released version of *[pypcap](https://pypi.org/project/pypcap/)* is
-version 1.2.3 (Python 3 support implemented in version 1.2.0).
-
-Packages were checked for Python 3.6.8 support too and here are proposed
-package versions:
-
-- directly needed packages
- - ecdsa==0.13.3
- - paramiko==2.6.0
- - pycrypto==2.6.1
- - pypcap==1.2.3 # min. v1.2.0 for Python 3.6 support
- - PyYAML==5.1
- - requests==2.22.0 # min. v2.14.0 for Python 3.6 support
- - robotframework==3.1.2
- - scapy==2.4.3 # min. v2.4.0 for Python 3.6 support
- - scp==0.13.2
-
-- directly needed packages for PLRSearch
- - dill==0.3.1.1
- - numpy==1.17.3 # v1.14.5 - compatibility with Python 3.6.2, possible
- incompatibility with Python 3.6.8; v1.14.6 should be compatible with
- Python 3.6.8
- - scipy==1.3.1
-
-- directly needed packages for PAL
- - hdrhistogram==0.6.1
- - pandas==0.25.3
- - plotly==4.1.1
- - PTable==0.9.2
- - Sphinx==2.2.1
- - sphinx-rtd-theme==0.4.0
- - sphinxcontrib-programoutput==0.15
-
-- packages needed by paramiko package
- - bcrypt==3.1.7
- - cffi==1.13.1
- - cryptography==2.8
- - pycparser==2.19
- - PyNaCl==1.3.0
- - six==1.12.0
-
-- packages needed by request package
- - certifi==2019.9.11
- - chardet==3.0.4
- - idna==2.8
- - urllib3==1.25.6
-
-- not needed anymore
- - aenum - enum module in Python 3.6 already contains needed enum types
- - ipaddress - module already included in Python 3.6
- - pexpect - can be removed when corresponding unused code is removed from
- ssh.py
- - pykwalify + docpot + python-dateutil - can be removed if virl not used
- anymore
-
-After discussion there is an agreement to use pip freeze for indirect
-dependencies when all direct dependency versions are resolved - see example of
-*[requirements.txt](https://gerrit.fd.io/r/c/csit/+/23207/17/requirements.txt)*
-file in CSIT gerrit commit
-[Python3: PIP requirement](https://gerrit.fd.io/r/c/csit/+/23207).
-
-## Required CSIT code changes
-
-There were identified following code changes that need to be addressed during
-Python 2.7 to Python 3 migration in CSIT:
-- imports relative to package
- - `import submodul1` => `from . import submodule1`
- - `from csv import my_csv` => `from .csv import my_csv`
-- StringIO
- - `import StringIO` => `from io import StringIO`
-- `StandardError` -=> `Exception`
-- raising exceptions - should be ready
- - `raise ValueError, "wrong value"` => `raise ValueError("wrong value")`
-- catching exceptions - should be ready
- - `except ValueError, e:` => `except ValueError as e:`
-- integers
- - `long` => `int`
-- strings and bytes
- - `unicode` => `str`
- - `basestring` => `str`
- - `str` => `bytes` - not generally, only if bytes type really required
- - use following string style conventions:
- - `u"a unicode string literal"`
- - `b"a bytes string literal"`
- - `f"a formatted unicode string literal"` - `f"He said his name is {name}"`
- instead of `"He said his name is {n}".format(n=name)`
-- integer division with rounding down
- - `2 / 3` => `2 // 3`
-- metaclasses - use only new style
- - `class Form(BaseForm, metaclass=FormType):`
-- for-loop variables and the global namespace leak
- - for-loop variables don't leak into the global namespace anymore
-- returning iterable objects instead of lists
- - `xrange` => `range`
- - `range` => `list(range())`
- - `map` => `list(map())`
- - `zip` => `list(zip())`
- - `filter` => `list(filter())`
- - dictionaries
- - `.iteritems()` => `.items()`
- - `.iterkeys()` => `.keys()`
- - `.itervalues()` => `.values()`
- - `.viewitems()` => `.items()`
- - `.viewkeys()` => `.keys()`
- - `.viewvalues()` => `.values()`
- - `.items()`=> `list(.items())`
- - `.keys()` => `list(.keys())`
- - `.values()` => `list(.values())`
- - `dict.has_key(key)` => `key in dict`
- - lists
- - `L = list(some_iterable); L.sort()` => `L = sorted(some_iterable)`
- - parenthesis in list comprehensions
- - `[... for var in item1, item2, ...]` => `[... for var in (item1, item2, ...)]`
-- file IO with `open`
- - `f = open('myfile.txt') # f.read() returns byte string` =>
- `from io import open` plus
- - `f = open('myfile.txt', 'rb') # f.read() should return bytes`
- - `f = open('myfile.txt', 'rt') # f.read() should return unicode text`
-- reduce()
- - `reduce()` => `from functools import reduce; reduce()`
-
-- python files in following directories:
- - resources/libraries/python
- - resources/tools
- - resources/traffic_profiles/trex
- - resources/traffic_scripts
-
-- check python calls in bash files:
- - resources/libraries/bash/
- - csit root directory
-
-## Migration steps
-
-1. Update all external libraries - week(s) before the week W
-1. Install agreed Python 3 version to all servers used by CSIT for test
- execution - week(s) before the week W
- 1. vpp device servers - already done
- 1. performance testbeds - already done
- 1. jenkins executors - already done
-1. Freeze the CSIT master branch for one week for commits other then Python 2 to
- Python 3 migration - week W
- 1. Create back up branch of actual master
- 1. Migrate libraries - work split between all available CSIT developers. Each
- one will submit separate commit for review - csit-vpp-xxx verify jobs will
- be failing at this phase so committers will need to overwrite verify
- voting to be able to merged these commits.
-
- TODO: provide separate spread sheet with listed libraries to be migrated
- with the name of CSIT developer responsible for the migration of this
- library.
- 1. Run jobs and tests of all of types when all libraries migrated to confirm
- functionality or to catch bugs that needs to be fixed - iterate until
- successful execution of all tests.
-1. Unfreeze the CSIT master branch.