Feature 10296 Pip Standardization

Creates standard template for tox.ini
Introduces 'safety' for listing upstream CVEs
Pins all versions of all upstream modules
Removes Makefile step and places all build logic into tox.ini

Change-Id: Ic14321bd5bddb322db08ac3e25202cc64cac2dff
Signed-off-by: David Garcia <david.garcia@canonical.com>
diff --git a/.gitignore b/.gitignore
index ae1f284..191b24e 100644
--- a/.gitignore
+++ b/.gitignore
@@ -20,6 +20,7 @@
 dist/
 .cache/
 .local/
+.eggs
 N2VC.egg-info/
 .coverage
 cover
@@ -34,4 +35,5 @@
 lib/
 lib64
 pyvenv.cfg
-share/
\ No newline at end of file
+share/
+venv/
diff --git a/Dockerfile b/Dockerfile
index 88aae5d..3fad212 100644
--- a/Dockerfile
+++ b/Dockerfile
@@ -1,19 +1,36 @@
-# Copyright 2019 Canonical Ltd.
-#
 # Licensed 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
 #
-#     http://www.apache.org/licenses/LICENSE-2.0
+#    http://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.
+# 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.
+########################################################################################
+# This Dockerfile is intented for devops testing and deb package generation
+#
+# To run stage 2 locally:
+#
+#   docker build -t stage2 .
+#   docker run -ti -v `pwd`:/work -w /work --entrypoint /bin/bash stage2
+#   devops-stages/stage-test.sh
+#   devops-stages/stage-build.sh
+#
 
 FROM ubuntu:18.04
 
-RUN apt-get update && apt-get -y install git make python python3 \
-    libcurl4-gnutls-dev libgnutls28-dev tox python3-dev python3-pip \
-    debhelper python3-setuptools python-all python3-all apt-utils 
+RUN DEBIAN_FRONTEND=noninteractive apt-get update && \
+    DEBIAN_FRONTEND=noninteractive apt-get -y install \
+        debhelper \
+        git \
+        python3 \
+        python3-all \
+        python3-dev \
+        python3-setuptools
+
+RUN python3 -m easy_install pip==21.0.1
+RUN pip3 install tox==3.22.0
diff --git a/test-requirements.txt b/MANIFEST.in
similarity index 78%
copy from test-requirements.txt
copy to MANIFEST.in
index 45ed6dc..f1be81c 100644
--- a/test-requirements.txt
+++ b/MANIFEST.in
@@ -1,4 +1,4 @@
-# Copyright 2020 Canonical Ltd.
+# Copyright 2021 Canonical Ltd.
 #
 # Licensed under the Apache License, Version 2.0 (the "License");
 # you may not use this file except in compliance with the License.
@@ -12,8 +12,7 @@
 #     See the License for the specific language governing permissions and
 #     limitations under the License.
 
-flake8<3.0
-mock
-requests-mock
-coverage==4.5.3
-asynctest
+include README.rst
+recursive-include n2vc *.sh *.txt
+recursive-include devops-stages *
+recursive-exclude n2vc/tests *
\ No newline at end of file
diff --git a/Makefile b/Makefile
deleted file mode 100644
index a334b5a..0000000
--- a/Makefile
+++ /dev/null
@@ -1,28 +0,0 @@
-# Copyright 2019 Canonical Ltd.
-#
-# Licensed 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
-#
-#     http://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.
-
-clean:
-	find . -name __pycache__ -type d -exec rm -r {} +
-	find . -name *.pyc -delete
-	rm -rf .tox
-	rm -rf tests/charms/builds/*
-	lxc list test- --format=json|jq '.[]["name"]'| xargs lxc delete --force || true
-.tox:
-	tox -r --notest
-test: lint
-	tox
-lint:
-	tox -e lint
-package:
-	python3 setup.py --command-packages=stdeb.command bdist_deb
diff --git a/devops-stages/stage-build.sh b/devops-stages/stage-build.sh
index 8f7f155..06184b6 100755
--- a/devops-stages/stage-build.sh
+++ b/devops-stages/stage-build.sh
@@ -13,5 +13,6 @@
 #     limitations under the License.
 
 #!/bin/sh
-rm -rf deb_dist
-tox -e build --recreate
+rm -rf dist deb_dist N2VC-*.tar.gz N2VC.egg-info .eggs .tox
+
+tox -e dist
\ No newline at end of file
diff --git a/devops-stages/stage-test.sh b/devops-stages/stage-test.sh
index 41875be..50f588a 100755
--- a/devops-stages/stage-test.sh
+++ b/devops-stages/stage-test.sh
@@ -12,5 +12,5 @@
 #     See the License for the specific language governing permissions and
 #     limitations under the License.
 
-#!/bin/sh
-tox --recreate
\ No newline at end of file
+OUTPUT=$(TOX_PARALLEL_NO_SPINNER=1 tox --parallel=auto)
+printf "$OUTPUT"
diff --git a/test-requirements.txt b/requirements-dev.in
similarity index 84%
copy from test-requirements.txt
copy to requirements-dev.in
index 45ed6dc..abc0642 100644
--- a/test-requirements.txt
+++ b/requirements-dev.in
@@ -1,4 +1,4 @@
-# Copyright 2020 Canonical Ltd.
+# Copyright 2021 Canonical Ltd.
 #
 # Licensed under the Apache License, Version 2.0 (the "License");
 # you may not use this file except in compliance with the License.
@@ -12,8 +12,4 @@
 #     See the License for the specific language governing permissions and
 #     limitations under the License.
 
-flake8<3.0
-mock
-requests-mock
-coverage==4.5.3
-asynctest
+git+https://osm.etsi.org/gerrit/osm/common.git@master#egg=osm-common
diff --git a/requirements-dev.txt b/requirements-dev.txt
new file mode 100644
index 0000000..485e45e
--- /dev/null
+++ b/requirements-dev.txt
@@ -0,0 +1,30 @@
+aiokafka==0.7.0
+    # via osm-common
+dataclasses==0.6
+    # via osm-common
+kafka-python==2.0.2
+    # via aiokafka
+git+https://osm.etsi.org/gerrit/osm/common.git@master#egg=osm-common
+    # via -r requirements-dev.in
+pycrypto==2.6.1
+    # via osm-common
+pymongo==3.11.3
+    # via osm-common
+pyyaml==5.4.1
+    # via osm-common
+#######################################################################################
+# Copyright ETSI Contributors and Others.
+#
+# Licensed 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
+#
+#    http://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.
+#######################################################################################
diff --git a/test-requirements.txt b/requirements-dist.in
similarity index 86%
copy from test-requirements.txt
copy to requirements-dist.in
index 45ed6dc..2b3c735 100644
--- a/test-requirements.txt
+++ b/requirements-dist.in
@@ -1,4 +1,4 @@
-# Copyright 2020 Canonical Ltd.
+# Copyright 2021 Canonical Ltd.
 #
 # Licensed under the Apache License, Version 2.0 (the "License");
 # you may not use this file except in compliance with the License.
@@ -12,8 +12,5 @@
 #     See the License for the specific language governing permissions and
 #     limitations under the License.
 
-flake8<3.0
-mock
-requests-mock
-coverage==4.5.3
-asynctest
+stdeb
+setuptools-version-command
diff --git a/requirements-dist.txt b/requirements-dist.txt
new file mode 100644
index 0000000..7393626
--- /dev/null
+++ b/requirements-dist.txt
@@ -0,0 +1,23 @@
+setuptools-version-command==2.2
+    # via -r requirements-dist.in
+stdeb==0.10.0
+    # via -r requirements-dist.in
+
+# The following packages are considered to be unsafe in a requirements file:
+# setuptools
+#######################################################################################
+# Copyright ETSI Contributors and Others.
+#
+# Licensed 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
+#
+#    http://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.
+#######################################################################################
diff --git a/test-requirements.txt b/requirements-test.in
similarity index 90%
rename from test-requirements.txt
rename to requirements-test.in
index 45ed6dc..08df82d 100644
--- a/test-requirements.txt
+++ b/requirements-test.in
@@ -1,4 +1,4 @@
-# Copyright 2020 Canonical Ltd.
+# Copyright 2021 Canonical Ltd.
 #
 # Licensed under the Apache License, Version 2.0 (the "License");
 # you may not use this file except in compliance with the License.
@@ -12,8 +12,9 @@
 #     See the License for the specific language governing permissions and
 #     limitations under the License.
 
-flake8<3.0
-mock
-requests-mock
-coverage==4.5.3
 asynctest
+coverage
+flake8
+mock
+nose2
+requests-mock
diff --git a/requirements-test.txt b/requirements-test.txt
new file mode 100644
index 0000000..7e3a14d
--- /dev/null
+++ b/requirements-test.txt
@@ -0,0 +1,50 @@
+asynctest==0.13.0
+    # via -r requirements-test.in
+certifi==2020.12.5
+    # via requests
+chardet==4.0.0
+    # via requests
+coverage==5.5
+    # via
+    #   -r requirements-test.in
+    #   nose2
+flake8==3.9.0
+    # via -r requirements-test.in
+idna==2.10
+    # via requests
+mccabe==0.6.1
+    # via flake8
+mock==4.0.3
+    # via -r requirements-test.in
+nose2==0.10.0
+    # via -r requirements-test.in
+pycodestyle==2.7.0
+    # via flake8
+pyflakes==2.3.1
+    # via flake8
+requests-mock==1.8.0
+    # via -r requirements-test.in
+requests==2.25.1
+    # via requests-mock
+six==1.15.0
+    # via
+    #   nose2
+    #   requests-mock
+urllib3==1.26.4
+    # via requests
+#######################################################################################
+# Copyright ETSI Contributors and Others.
+#
+# Licensed 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
+#
+#    http://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.
+#######################################################################################
diff --git a/test-requirements.txt b/requirements.in
similarity index 86%
copy from test-requirements.txt
copy to requirements.in
index 45ed6dc..ea82d48 100644
--- a/test-requirements.txt
+++ b/requirements.in
@@ -1,4 +1,4 @@
-# Copyright 2020 Canonical Ltd.
+# Copyright 2021 Canonical Ltd.
 #
 # Licensed under the Apache License, Version 2.0 (the "License");
 # you may not use this file except in compliance with the License.
@@ -12,8 +12,6 @@
 #     See the License for the specific language governing permissions and
 #     limitations under the License.
 
-flake8<3.0
-mock
-requests-mock
-coverage==4.5.3
-asynctest
+juju==2.8.4
+kubernetes==10.0.1
+pyasn1
\ No newline at end of file
diff --git a/requirements.txt b/requirements.txt
index 6e94e0a..8ff8c08 100644
--- a/requirements.txt
+++ b/requirements.txt
@@ -1,19 +1,125 @@
-# Copyright 2020 Canonical Ltd.
+bcrypt==3.2.0
+    # via paramiko
+cachetools==4.2.1
+    # via google-auth
+certifi==2020.12.5
+    # via
+    #   kubernetes
+    #   requests
+cffi==1.14.5
+    # via
+    #   bcrypt
+    #   cryptography
+    #   pynacl
+chardet==4.0.0
+    # via requests
+cryptography==3.4.7
+    # via paramiko
+google-auth==1.28.0
+    # via kubernetes
+idna==2.10
+    # via requests
+juju==2.8.4
+    # via -r requirements.in
+jujubundlelib==0.5.6
+    # via theblues
+kubernetes==10.0.1
+    # via -r requirements.in
+macaroonbakery==1.3.1
+    # via
+    #   juju
+    #   theblues
+mypy-extensions==0.4.3
+    # via typing-inspect
+oauthlib==3.1.0
+    # via requests-oauthlib
+paramiko==2.7.2
+    # via juju
+protobuf==3.15.6
+    # via macaroonbakery
+pyasn1-modules==0.2.8
+    # via google-auth
+pyasn1==0.4.8
+    # via
+    #   -r requirements.in
+    #   juju
+    #   pyasn1-modules
+    #   rsa
+pycparser==2.20
+    # via cffi
+pymacaroons==0.13.0
+    # via macaroonbakery
+pynacl==1.4.0
+    # via
+    #   macaroonbakery
+    #   paramiko
+    #   pymacaroons
+pyrfc3339==1.1
+    # via
+    #   juju
+    #   macaroonbakery
+python-dateutil==2.8.1
+    # via kubernetes
+pytz==2021.1
+    # via pyrfc3339
+pyyaml==5.4.1
+    # via
+    #   juju
+    #   jujubundlelib
+    #   kubernetes
+requests-oauthlib==1.3.0
+    # via kubernetes
+requests==2.25.1
+    # via
+    #   kubernetes
+    #   macaroonbakery
+    #   requests-oauthlib
+    #   theblues
+rsa==4.7.2
+    # via google-auth
+six==1.15.0
+    # via
+    #   bcrypt
+    #   google-auth
+    #   kubernetes
+    #   macaroonbakery
+    #   protobuf
+    #   pymacaroons
+    #   pynacl
+    #   python-dateutil
+    #   websocket-client
+theblues==0.5.2
+    # via juju
+toposort==1.6
+    # via juju
+typing-extensions==3.7.4.3
+    # via typing-inspect
+typing-inspect==0.6.0
+    # via juju
+urllib3==1.26.4
+    # via
+    #   kubernetes
+    #   requests
+websocket-client==0.58.0
+    # via kubernetes
+websockets==7.0
+    # via juju
+
+# The following packages are considered to be unsafe in a requirements file:
+# setuptools
+#######################################################################################
+# Copyright ETSI Contributors and Others.
 #
 # Licensed 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
 #
-#     http://www.apache.org/licenses/LICENSE-2.0
+#    http://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.
-
-git+https://osm.etsi.org/gerrit/osm/common.git#egg=osm-common
-juju==2.8.4
-pyasn1>=0.4.4
-kubernetes==10.0.1
-chardet==3.0.4
\ No newline at end of file
+# 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.
+#######################################################################################
diff --git a/setup.py b/setup.py
index 7a4fe87..ec1dccb 100644
--- a/setup.py
+++ b/setup.py
@@ -14,27 +14,29 @@
 
 from setuptools import setup, find_packages
 
-_description = 'OSM library implementing common interface towards VCA module'
+_name = "N2VC"
+_version_command = ("git describe --match v* --tags --long --dirty", "pep440-git-full")
+_author = "OSM Support"
+_author_email = "osmsupport@etsi.org"
+_description = "OSM library implementing common interface towards VCA module"
+_maintainer = "OSM Support"
+_maintainer_email = "osmsupport@etsi.org"
+_license = "Apache 2.0"
+_url = "https://osm.etsi.org/gitweb/?p=osm/N2VC.git;a=tree"
 
 setup(
-    name='N2VC',
-    version_command=('git describe --match v* --tags --long --dirty',
-                     'pep440-git-full'),
-    packages=find_packages(
-        exclude=["*.tests", "*.tests.*", "tests.*", "tests"]),
-    install_requires=[
-        'juju==2.8.4',
-        'pyasn1>=0.4.4',
-        'kubernetes==10.0.1'
-    ],
-    include_package_data=True,
-    maintainer='Adam Israel',
-    maintainer_email='adam.israel@canonical.com',
+    name=_name,
+    version_command=_version_command,
     description=_description,
-    url='',
-    license='Apache 2',
-    entry_points={
-        'console_scripts': [
-        ],
-    },
+    long_description=open("README.md", encoding="utf-8").read(),
+    author=_author,
+    author_email=_author_email,
+    maintainer=_maintainer,
+    maintainer_email=_maintainer_email,
+    url=_url,
+    license=_license,
+    packages=find_packages(exclude=["*.tests", "*.tests.*", "tests.*", "tests"]),
+    include_package_data=True,
+    entry_points={"console_scripts": []},
+    setup_requires=['setuptools-version-command']
 )
diff --git a/stdeb.cfg b/stdeb.cfg
index c07507b..a5053ee 100644
--- a/stdeb.cfg
+++ b/stdeb.cfg
@@ -1,5 +1,16 @@
+# Copyright 2021 Canonical Ltd.
+#
+# Licensed 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
+#
+#     http://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.
+
 [DEFAULT]
-Suite: xenial
-XS-Python-Version: >= 3.5
-Maintainer: Adam Israel <adam.israel@canonical.com>
-Depends: python3-pip
+X-Python3-Version : >= 3.5
\ No newline at end of file
diff --git a/tox.ini b/tox.ini
index 4d64762..21fc186 100644
--- a/tox.ini
+++ b/tox.ini
@@ -1,77 +1,123 @@
-# Copyright 2019 Canonical Ltd.
+#######################################################################################
+# Copyright ETSI Contributors and Others.
 #
 # Licensed 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
 #
-#     http://www.apache.org/licenses/LICENSE-2.0
+#    http://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.
+# 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 = cover, flake8, pylint, pylint-tests
-skipsdist=True
+envlist = black, cover, flake8, pylint, safety
+
+[tox:jenkins]
+toxworkdir = /tmp/.tox
 
 [testenv]
-
-[testenv:cover]
+usedevelop = True
 basepython = python3
-deps =
-  nose2
-  -rrequirements.txt
-  -rtest-requirements.txt
-commands =
-  coverage erase
-  nose2 -C --coverage n2vc --plugin nose2.plugins.junitxml -s n2vc
-  coverage report --omit='*n2vc/tests*'
-  coverage html -d ./cover --omit='*n2vc/tests*'
-  coverage xml -o coverage.xml --omit='*n2vc/tests*'
+setenv = VIRTUAL_ENV={envdir}
+         PYTHONDONTWRITEBYTECODE = 1
+deps =  -r{toxinidir}/requirements.txt
 
-[testenv:pylint]
-basepython = python3
-deps =
-  pylint==2.6.0
-  -rrequirements.txt
-commands =
-  pylint -E n2vc --ignore=tests
 
-[testenv:pylint-tests]
-basepython = python3
-deps =
-  pylint==2.6.0
-  -rrequirements.txt
-  -rtest-requirements.txt
-commands =
-  pylint -E n2vc.tests
-
+#######################################################################################
 [testenv:black]
-basepython = python3
-deps =
-  black
+deps = black
+skip_install = true
 commands =
-  black --check --diff n2vc
+        - black --check --diff n2vc/
 
+
+#######################################################################################
+[testenv:cover]
+deps =  {[testenv]deps}
+        -r{toxinidir}/requirements-dev.txt
+        -r{toxinidir}/requirements-test.txt
+commands =
+        sh -c 'rm -f nosetests.xml'
+        coverage erase
+        nose2 -C --coverage n2vc
+        coverage report --omit='*tests*'
+        coverage html -d ./cover --omit='*tests*'
+        coverage xml -o coverage.xml --omit=*tests*
+whitelist_externals = sh
+
+
+#######################################################################################
 [testenv:flake8]
-basepython = python3
-deps =
-  flake8
-  -rrequirements.txt
+deps = flake8
 commands =
-  flake8 n2vc
+        flake8 n2vc/ setup.py
 
+
+#######################################################################################
+[testenv:pylint]
+deps =  {[testenv]deps}
+        -r{toxinidir}/requirements-dev.txt
+        -r{toxinidir}/requirements-test.txt
+        pylint
+commands =
+    pylint -E n2vc
+
+
+#######################################################################################
+[testenv:safety]
+setenv =
+        LC_ALL=C.UTF-8
+        LANG=C.UTF-8
+deps =  {[testenv]deps}
+        safety
+commands =
+        - safety check --full-report
+
+
+#######################################################################################
+[testenv:pip-compile]
+deps =  pip-tools==5.5.0
+commands =
+        - sh -c 'for file in requirements*.in ; do pip-compile -rU --no-header $file ;\
+        out=`echo $file | sed "s/.in/.txt/"` ; \
+        head -16 tox.ini >> $out ;\
+        done'
+whitelist_externals = sh
+
+
+#######################################################################################
+[testenv:dist]
+deps =  {[testenv]deps}
+        -r{toxinidir}/requirements-dist.txt
+
+# In the commands, we copy the requirements.txt to be presented as a source file (.py)
+# so it gets included in the .deb package for others to consume
+commands =
+        sh -c 'cp requirements.txt n2vc/requirements.txt'
+        python3 setup.py --command-packages=stdeb.command sdist_dsc
+        sh -c 'cd deb_dist/n2vc*/ && dpkg-buildpackage -rfakeroot -uc -us'
+        sh -c 'rm n2vc/requirements.txt'
+whitelist_externals = sh
+
+#######################################################################################
 [flake8]
-# W503 is invalid PEP-8
-max-line-length = 100
+ignore =
+        W291,
+        W293,
+        E123,
+        E125,
+        E226,
+        E241
+exclude =
+        .git,
+        __pycache__,
+        .tox,
+max-line-length = 120
 show-source = True
-ignore = W503,E203
-exclude=.venv,.git,.tox,dist,doc,*lib/python*,*egg,build,devops_stages/*,.rst
-
-[testenv:build]
-deps =
-  stdeb
-  setuptools-version-command
-commands = python3 setup.py --command-packages=stdeb.command bdist_deb
+builtins = _