blob: a2b9496f26ed593d38d70565b5659e794a95b81d [file] [log] [blame]
sousaedu96abfc22021-02-18 14:57:01 +01001#######################################################################################
2# Copyright ETSI Contributors and Others.
3#
4# Licensed under the Apache License, Version 2.0 (the "License");
5# you may not use this file except in compliance with the License.
6# You may obtain a copy of the License at
7#
8# http://www.apache.org/licenses/LICENSE-2.0
9#
10# Unless required by applicable law or agreed to in writing, software
11# distributed under the License is distributed on an "AS IS" BASIS,
12# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
13# implied.
14# See the License for the specific language governing permissions and
15# limitations under the License.
16#######################################################################################
17
18[tox]
sousaedu97508412021-11-29 09:28:15 +000019envlist = black, flake8, safety
sousaedu96abfc22021-02-18 14:57:01 +010020
21[tox:jenkins]
22toxworkdir = /tmp/.tox
23
24[testenv]
25usedevelop = True
26basepython = python3
27setenv = VIRTUAL_ENV={envdir}
28 PYTHONDONTWRITEBYTECODE = 1
29deps = -r{toxinidir}/requirements.txt
30parallel_show_output = true
31
32
33#######################################################################################
sousaedu1077bbd2021-04-15 01:18:59 +020034[testenv:release_notes]
35deps = reno
36skip_install = true
37commands =
38 reno new {posargs:new_feature}
39
40
41#######################################################################################
sousaedu96abfc22021-02-18 14:57:01 +010042[testenv:black]
43deps = black
44skip_install = true
45commands =
sousaedu97508412021-11-29 09:28:15 +000046 black --check --diff NG-RO
47 black --check --diff RO-plugin
48 black --check --diff RO-SDN-arista_cloudvision
49 black --check --diff RO-SDN-dpb
50 black --check --diff RO-SDN-dynpac
51 black --check --diff RO-SDN-floodlight_openflow
52 black --check --diff RO-SDN-ietfl2vpn
53 black --check --diff RO-SDN-juniper_contrail
54 black --check --diff RO-SDN-odl_openflow
55 black --check --diff RO-SDN-onos_openflow
56 black --check --diff RO-SDN-onos_vpls
57 black --check --diff RO-VIM-aws
58 black --check --diff RO-VIM-azure
59 black --check --diff RO-VIM-fos
sousaedu97508412021-11-29 09:28:15 +000060 black --check --diff RO-VIM-openstack
61 black --check --diff RO-VIM-openvim
62 black --check --diff RO-VIM-vmware
63 black --check --diff RO-VIM-gcp
64 black --check --diff integration-tests
sousaedu96abfc22021-02-18 14:57:01 +010065
66
67#######################################################################################
68[testenv:cover]
69deps = {[testenv]deps}
70 -r{toxinidir}/requirements-dev.txt
71 -r{toxinidir}/requirements-test.txt
72skip_install = true
73commands =
74 sh -c 'rm -f nosetests.xml'
75 coverage erase
76 # NG-RO
77 - nose2 -C --coverage NG-RO/osm_ng_ro
78 sh -c 'mv .coverage .coverage_ng_ro'
79 # RO-plugin
80 - nose2 -C --coverage RO-plugin/osm_ro_plugin
81 sh -c 'mv .coverage .coverage_ro_plugin'
82 # RO-SDN-arista_cloudvision
83 - nose2 -C --coverage RO-SDN-arista_cloudvision/osm_rosdn_arista_cloudvision
84 sh -c 'mv .coverage .coverage_rosdn_arista_cloudvision'
85 # RO-SDN-dpb
86 - nose2 -C --coverage RO-SDN-dpb/osm_rosdn_dpb
87 sh -c 'mv .coverage .coverage_rosdn_dpb'
88 # RO-SDN-dynpac
89 - nose2 -C --coverage RO-SDN-dynpac/osm_rosdn_dynpac
90 sh -c 'mv .coverage .coverage_rosdn_dynpac'
91 # RO-SDN-floodlight_openflow
92 - nose2 -C --coverage RO-SDN-floodlight_openflow/osm_rosdn_floodlightof
93 sh -c 'mv .coverage .coverage_rosdn_floodlightof'
94 # RO-SDN-ietfl2vpn
95 - nose2 -C --coverage RO-SDN-ietfl2vpn/osm_rosdn_ietfl2vpn
96 sh -c 'mv .coverage .coverage_rosdn_ietfl2vpn'
97 # RO-SDN-juniper_contrail
98 - nose2 -C --coverage RO-SDN-juniper_contrail/osm_rosdn_juniper_contrail
99 sh -c 'mv .coverage .coverage_rosdn_juniper_contrail'
100 # RO-SDN-odl_openflow
101 - nose2 -C --coverage RO-SDN-odl_openflow/osm_rosdn_odlof
102 sh -c 'mv .coverage .coverage_rosdn_odlof'
103 # RO-SDN-onos_openflow
104 - nose2 -C --coverage RO-SDN-onos_openflow/osm_rosdn_onosof
105 sh -c 'mv .coverage .coverage_rosdn_onosof'
106 # RO-SDN-onos_vpls
107 - nose2 -C --coverage RO-SDN-onos_vpls/osm_rosdn_onos_vpls
108 sh -c 'mv .coverage .coverage_rosdn_onos_vpls'
109 # RO-VIM-aws
110 - nose2 -C --coverage RO-VIM-aws/osm_rovim_aws
111 sh -c 'mv .coverage .coverage_rovim_aws'
112 # RO-VIM-azure
113 - nose2 -C --coverage RO-VIM-azure/osm_rovim_azure
114 sh -c 'mv .coverage .coverage_rovim_azure'
115 # RO-VIM-fos
116 - nose2 -C --coverage RO-VIM-fos/osm_rovim_fos
117 sh -c 'mv .coverage .coverage_rovim_fos'
sousaedu96abfc22021-02-18 14:57:01 +0100118 # RO-VIM-openstack
119 - nose2 -C --coverage RO-VIM-openstack/osm_rovim_openstack -s RO-VIM-openstack/osm_rovim_openstack
120 sh -c 'mv .coverage .coverage_rovim_openstack'
121 # RO-VIM-openvim
122 - nose2 -C --coverage RO-VIM-openvim/osm_rovim_openvim
123 sh -c 'mv .coverage .coverage_rovim_openvim'
124 # RO-VIM-vmware
125 - nose2 -C --coverage RO-VIM-vmware/osm_rovim_vmware -s RO-VIM-vmware/osm_rovim_vmware
126 sh -c 'mv .coverage .coverage_rovim_vmware'
gallardo34aa3a92021-10-08 11:50:00 +0000127 # RO-VIM-gcp
128 - nose2 -C --coverage RO-VIM-gcp/osm_rovim_gcp
129 sh -c 'mv .coverage .coverage_rovim_gcp'
sousaedu96abfc22021-02-18 14:57:01 +0100130 # Combine results and generate reports
almagia6bc347a2021-12-01 09:52:52 +0100131 coverage combine .coverage_ng_ro .coverage_ro_plugin .coverage_rosdn_arista_cloudvision .coverage_rosdn_dpb .coverage_rosdn_dynpac .coverage_rosdn_floodlightof .coverage_rosdn_ietfl2vpn .coverage_rosdn_juniper_contrail .coverage_rosdn_odlof .coverage_rosdn_onos_vpls .coverage_rosdn_onosof .coverage_rovim_aws .coverage_rovim_azure .coverage_rovim_fos .coverage_rovim_openvim .coverage_rovim_gcp # .coverage_rovim_openstack .coverage_rovim_vmware
sousaedu96abfc22021-02-18 14:57:01 +0100132 coverage report --omit='*tests*'
133 coverage html -d ./cover --omit='*tests*'
134 coverage xml -o coverage.xml --omit='*tests*'
135whitelist_externals = sh
136
137
138#######################################################################################
139[testenv:flake8]
140deps = flake8
141skip_install = true
142commands =
143 - flake8 NG-RO/osm_ng_ro/ NG-RO/setup.py
144 - flake8 RO-plugin/osm_ro_plugin/ RO-plugin/setup.py
145 - flake8 RO-SDN-arista_cloudvision/osm_rosdn_arista_cloudvision/ RO-SDN-arista_cloudvision/setup.py
146 - flake8 RO-SDN-dpb/osm_rosdn_dpb/ RO-SDN-dpb/setup.py
147 - flake8 RO-SDN-dynpac/osm_rosdn_dynpac/ RO-SDN-dynpac/setup.py
148 - flake8 RO-SDN-floodlight_openflow/osm_rosdn_floodlightof/ RO-SDN-floodlight_openflow/setup.py
149 - flake8 RO-SDN-ietfl2vpn/osm_rosdn_ietfl2vpn/ RO-SDN-ietfl2vpn/setup.py
150 - flake8 RO-SDN-juniper_contrail/osm_rosdn_juniper_contrail/ RO-SDN-juniper_contrail/setup.py
151 - flake8 RO-SDN-odl_openflow/osm_rosdn_odlof/ RO-SDN-odl_openflow/setup.py
152 - flake8 RO-SDN-onos_openflow/osm_rosdn_onosof/ RO-SDN-onos_openflow/setup.py
153 - flake8 RO-SDN-onos_vpls/osm_rosdn_onos_vpls/ RO-SDN-onos_vpls/setup.py
154 - flake8 RO-VIM-aws/osm_rovim_aws/ RO-VIM-aws/setup.py
155 - flake8 RO-VIM-azure/osm_rovim_azure/ RO-VIM-azure/setup.py
156 - flake8 RO-VIM-fos/osm_rovim_fos/ RO-VIM-fos/setup.py
sousaedu96abfc22021-02-18 14:57:01 +0100157 - flake8 RO-VIM-openstack/osm_rovim_openstack/ RO-VIM-openstack/setup.py
158 - flake8 RO-VIM-openvim/osm_rovim_openvim/ RO-VIM-openvim/setup.py
159 - flake8 RO-VIM-vmware/osm_rovim_vmware/vimconn_vmware.py RO-VIM-vmware/osm_rovim_vmware/tests/test_vimconn_vmware.py RO-VIM-vmware/setup.py
gallardo34aa3a92021-10-08 11:50:00 +0000160 - flake8 RO-VIM-gcp/osm_rovim_gcp/ RO-VIM-gcp/setup.py
gallardo90ba8032021-11-11 10:58:29 +0000161 - flake8 integration-tests/
sousaedu96abfc22021-02-18 14:57:01 +0100162
163
164#######################################################################################
165[testenv:pylint]
166deps = {[testenv]deps}
167 -r{toxinidir}/requirements-dev.txt
168 -r{toxinidir}/requirements-test.txt
169 pylint
170skip_install = true
171commands =
172 - pylint -E NG-RO/osm_ng_ro
173 - pylint -E RO-plugin/osm_ro_plugin
174 - pylint -E RO-SDN-arista_cloudvision/osm_rosdn_arista_cloudvision
175 - pylint -E RO-SDN-dpb/osm_rosdn_dpb
176 - pylint -E RO-SDN-dynpac/osm_rosdn_dynpac
177 - pylint -E RO-SDN-floodlight_openflow/osm_rosdn_floodlightof
178 - pylint -E RO-SDN-ietfl2vpn/osm_rosdn_ietfl2vpn
179 - pylint -E RO-SDN-juniper_contrail/osm_rosdn_juniper_contrail
180 - pylint -E RO-SDN-odl_openflow/osm_rosdn_odlof
181 - pylint -E RO-SDN-onos_openflow/osm_rosdn_onosof
182 - pylint -E RO-SDN-onos_vpls/osm_rosdn_onos_vpls
183 - pylint -E RO-VIM-aws/osm_rovim_aws
184 - pylint -E RO-VIM-azure/osm_rovim_azure
185 - pylint -E RO-VIM-fos/osm_rovim_fos
sousaedu96abfc22021-02-18 14:57:01 +0100186 - pylint -E RO-VIM-openstack/osm_rovim_openstack
187 - pylint -E RO-VIM-openvim/osm_rovim_openvim
188 - pylint -E RO-VIM-vmware/osm_rovim_vmware
gallardo34aa3a92021-10-08 11:50:00 +0000189 - pylint -E RO-VIM-gcp/osm_rovim_gcp
sousaedu96abfc22021-02-18 14:57:01 +0100190
191
192#######################################################################################
193[testenv:safety]
194setenv =
195 LC_ALL=C.UTF-8
196 LANG=C.UTF-8
197deps = {[testenv]deps}
198 safety
199skip_install = true
200commands =
201 - safety check --full-report
202
203
204#######################################################################################
205[testenv:pip-compile]
206deps = pip-tools==5.5.0
sousaedubecd0832021-04-08 00:16:18 +0200207skip_install = true
sousaedu96abfc22021-02-18 14:57:01 +0100208commands =
sousaedubecd0832021-04-08 00:16:18 +0200209 - sh -c "for file in requirements*.in ; do pip-compile -rU --no-header $file ;\
210 out=`echo $file | sed 's/.in/.txt/'` ; \
211 sed -i -e '1 e head -16 tox.ini' $out ;\
212 done"
sousaedu96abfc22021-02-18 14:57:01 +0100213whitelist_externals = sh
214
215
216#######################################################################################
217[testenv:dist_ng_ro]
218deps = {[testenv]deps}
219 -r{toxinidir}/requirements-dist.txt
220skip_install = true
221changedir = {toxinidir}/NG-RO
222commands =
223 sh -c 'rm -rf osm_ng_ro/requirements.txt deb_dist dist osm_ng_ro.egg-info osm_ng_ro*.tar.gz'
224 sh -c 'cp ../requirements.txt osm_ng_ro/requirements.txt'
225 python3 setup.py --command-packages=stdeb.command sdist_dsc
226 sh -c 'cd deb_dist/osm-ng-ro*/ && dpkg-buildpackage -rfakeroot -uc -us'
227whitelist_externals = sh
228
229#######################################################################################
230[testenv:dist_ro_plugin]
231deps = {[testenv]deps}
232 -r{toxinidir}/requirements-dist.txt
233skip_install = true
234changedir = {toxinidir}/RO-plugin
235commands =
236 sh -c 'rm -rf deb_dist dist osm_ro_plugin.egg-info osm_ro_plugin*.tar.gz'
237 python3 setup.py --command-packages=stdeb.command sdist_dsc
238 sh -c 'cd deb_dist/osm-ro-plugin*/ && dpkg-buildpackage -rfakeroot -uc -us'
239whitelist_externals = sh
240
241#######################################################################################
242[testenv:dist_ro_sdn_arista_cloudvision]
243deps = {[testenv]deps}
244 -r{toxinidir}/requirements-dist.txt
245skip_install = true
246changedir = {toxinidir}/RO-SDN-arista_cloudvision
247commands =
248 sh -c 'rm -rf deb_dist dist osm_rosdn_arista_cloudvision.egg-info osm_rosdn_arista_cloudvision*.tar.gz'
249 python3 setup.py --command-packages=stdeb.command sdist_dsc
250 sh -c 'cd deb_dist/osm-rosdn-arista-cloudvision*/ && dpkg-buildpackage -rfakeroot -uc -us'
251whitelist_externals = sh
252
253#######################################################################################
254[testenv:dist_ro_sdn_dpb]
255deps = {[testenv]deps}
256 -r{toxinidir}/requirements-dist.txt
257skip_install = true
258changedir = {toxinidir}/RO-SDN-dpb
259commands =
260 sh -c 'rm -rf deb_dist dist osm_rosdn_dpb.egg-info osm_rosdn_dpb*.tar.gz'
261 python3 setup.py --command-packages=stdeb.command sdist_dsc
262 sh -c 'cd deb_dist/osm-rosdn-dpb*/ && dpkg-buildpackage -rfakeroot -uc -us'
263whitelist_externals = sh
264
265#######################################################################################
266[testenv:dist_ro_sdn_dynpac]
267deps = {[testenv]deps}
268 -r{toxinidir}/requirements-dist.txt
269skip_install = true
270changedir = {toxinidir}/RO-SDN-dynpac
271commands =
272 sh -c 'rm -rf deb_dist dist osm_rosdn_dynpac.egg-info osm_rosdn_dynpac*.tar.gz'
273 python3 setup.py --command-packages=stdeb.command sdist_dsc
274 sh -c 'cd deb_dist/osm-rosdn-dynpac*/ && dpkg-buildpackage -rfakeroot -uc -us'
275whitelist_externals = sh
276
277#######################################################################################
278[testenv:dist_ro_sdn_floodlight_of]
279deps = {[testenv]deps}
280 -r{toxinidir}/requirements-dist.txt
281skip_install = true
282changedir = {toxinidir}/RO-SDN-floodlight_openflow
283commands =
284 sh -c 'rm -rf deb_dist dist osm_rosdn_floodlightof.egg-info osm_rosdn_floodlightof*.tar.gz'
285 python3 setup.py --command-packages=stdeb.command sdist_dsc
286 sh -c 'cd deb_dist/osm-rosdn-floodlightof*/ && dpkg-buildpackage -rfakeroot -uc -us'
287whitelist_externals = sh
288
289#######################################################################################
290[testenv:dist_ro_sdn_ietfl2vpn]
291deps = {[testenv]deps}
292 -r{toxinidir}/requirements-dist.txt
293skip_install = true
294changedir = {toxinidir}/RO-SDN-ietfl2vpn
295commands =
296 sh -c 'rm -rf deb_dist dist osm_rosdn_ietfl2vpn.egg-info osm_rosdn_ietfl2vpn*.tar.gz'
297 python3 setup.py --command-packages=stdeb.command sdist_dsc
298 sh -c 'cd deb_dist/osm-rosdn-ietfl2vpn*/ && dpkg-buildpackage -rfakeroot -uc -us'
299whitelist_externals = sh
300
301#######################################################################################
302[testenv:dist_ro_sdn_juniper_contrail]
303deps = {[testenv]deps}
304 -r{toxinidir}/requirements-dist.txt
305skip_install = true
306changedir = {toxinidir}/RO-SDN-juniper_contrail
307commands =
308 sh -c 'rm -rf deb_dist dist osm_rosdn_juniper_contrail.egg-info osm_rosdn_juniper_contrail*.tar.gz'
309 python3 setup.py --command-packages=stdeb.command sdist_dsc
310 sh -c 'cd deb_dist/osm-rosdn-juniper-contrail*/ && dpkg-buildpackage -rfakeroot -uc -us'
311whitelist_externals = sh
312
313#######################################################################################
314[testenv:dist_ro_sdn_odl_of]
315deps = {[testenv]deps}
316 -r{toxinidir}/requirements-dist.txt
317skip_install = true
318changedir = {toxinidir}/RO-SDN-odl_openflow
319commands =
320 sh -c 'rm -rf deb_dist dist osm_rosdn_odlof.egg-info osm_rosdn_odlof*.tar.gz'
321 python3 setup.py --command-packages=stdeb.command sdist_dsc
322 sh -c 'cd deb_dist/osm-rosdn-odlof*/ && dpkg-buildpackage -rfakeroot -uc -us'
323whitelist_externals = sh
324
325#######################################################################################
326[testenv:dist_ro_sdn_onos_of]
327deps = {[testenv]deps}
328 -r{toxinidir}/requirements-dist.txt
329skip_install = true
330changedir = {toxinidir}/RO-SDN-onos_openflow
331commands =
332 sh -c 'rm -rf deb_dist dist osm_rosdn_onosof.egg-info osm_rosdn_onosof*.tar.gz'
333 python3 setup.py --command-packages=stdeb.command sdist_dsc
334 sh -c 'cd deb_dist/osm-rosdn-onosof*/ && dpkg-buildpackage -rfakeroot -uc -us'
335whitelist_externals = sh
336
337#######################################################################################
338[testenv:dist_ro_sdn_onos_vpls]
339deps = {[testenv]deps}
340 -r{toxinidir}/requirements-dist.txt
341skip_install = true
342changedir = {toxinidir}/RO-SDN-onos_vpls
343commands =
344 sh -c 'rm -rf deb_dist dist osm_rosdn_onos_vpls.egg-info osm_rosdn_onos_vpls*.tar.gz'
345 python3 setup.py --command-packages=stdeb.command sdist_dsc
346 sh -c 'cd deb_dist/osm-rosdn-onos-vpls*/ && dpkg-buildpackage -rfakeroot -uc -us'
347whitelist_externals = sh
348
349#######################################################################################
350[testenv:dist_ro_vim_aws]
351deps = {[testenv]deps}
352 -r{toxinidir}/requirements-dist.txt
353skip_install = true
354changedir = {toxinidir}/RO-VIM-aws
355commands =
356 sh -c 'rm -rf deb_dist dist osm_rovim_aws.egg-info osm_rovim_aws*.tar.gz'
357 python3 setup.py --command-packages=stdeb.command sdist_dsc
358 sh -c 'cd deb_dist/osm-rovim-aws*/ && dpkg-buildpackage -rfakeroot -uc -us'
359whitelist_externals = sh
360
361#######################################################################################
362[testenv:dist_ro_vim_azure]
363deps = {[testenv]deps}
364 -r{toxinidir}/requirements-dist.txt
365skip_install = true
366changedir = {toxinidir}/RO-VIM-azure
367commands =
368 sh -c 'rm -rf deb_dist dist osm_rovim_azure.egg-info osm_rovim_azure*.tar.gz'
369 python3 setup.py --command-packages=stdeb.command sdist_dsc
370 sh -c 'cd deb_dist/osm-rovim-azure*/ && dpkg-buildpackage -rfakeroot -uc -us'
371whitelist_externals = sh
372
373#######################################################################################
374[testenv:dist_ro_vim_fos]
375deps = {[testenv]deps}
376 -r{toxinidir}/requirements-dist.txt
377skip_install = true
378changedir = {toxinidir}/RO-VIM-fos
379commands =
380 sh -c 'rm -rf deb_dist dist osm_rovim_fos.egg-info osm_rovim_fos*.tar.gz'
381 python3 setup.py --command-packages=stdeb.command sdist_dsc
382 sh -c 'cd deb_dist/osm-rovim-fos*/ && dpkg-buildpackage -rfakeroot -uc -us'
383whitelist_externals = sh
384
sousaedu96abfc22021-02-18 14:57:01 +0100385
386#######################################################################################
387[testenv:dist_ro_vim_openstack]
388deps = {[testenv]deps}
389 -r{toxinidir}/requirements-dist.txt
390skip_install = true
391changedir = {toxinidir}/RO-VIM-openstack
392commands =
393 sh -c 'rm -rf deb_dist dist osm_rovim_openstack.egg-info osm_rovim_openstack*.tar.gz'
394 python3 setup.py --command-packages=stdeb.command sdist_dsc
395 sh -c 'cd deb_dist/osm-rovim-openstack*/ && dpkg-buildpackage -rfakeroot -uc -us'
396whitelist_externals = sh
397
398#######################################################################################
399[testenv:dist_ro_vim_openvim]
400deps = {[testenv]deps}
401 -r{toxinidir}/requirements-dist.txt
402skip_install = true
403changedir = {toxinidir}/RO-VIM-openvim
404commands =
405 sh -c 'rm -rf deb_dist dist osm_rovim_openvim.egg-info osm_rovim_openvim*.tar.gz'
406 python3 setup.py --command-packages=stdeb.command sdist_dsc
407 sh -c 'cd deb_dist/osm-rovim-openvim*/ && dpkg-buildpackage -rfakeroot -uc -us'
408whitelist_externals = sh
409
410#######################################################################################
411[testenv:dist_ro_vim_vmware]
412deps = {[testenv]deps}
413 -r{toxinidir}/requirements-dist.txt
414skip_install = true
415changedir = {toxinidir}/RO-VIM-vmware
416commands =
417 sh -c 'rm -rf deb_dist dist osm_rovim_vmware.egg-info osm_rovim_vmware*.tar.gz'
418 python3 setup.py --command-packages=stdeb.command sdist_dsc
419 sh -c 'cd deb_dist/osm-rovim-vmware*/ && dpkg-buildpackage -rfakeroot -uc -us'
420whitelist_externals = sh
421
422#######################################################################################
gallardo34aa3a92021-10-08 11:50:00 +0000423[testenv:dist_ro_vim_gcp]
424deps = {[testenv]deps}
425 -r{toxinidir}/requirements-dist.txt
426skip_install = true
427changedir = {toxinidir}/RO-VIM-gcp
428commands =
429 sh -c 'rm -rf deb_dist dist osm_rovim_gcp.egg-info osm_rovim_gcp*.tar.gz'
430 python3 setup.py --command-packages=stdeb.command sdist_dsc
431 sh -c 'cd deb_dist/osm-rovim-gcp*/ && dpkg-buildpackage -rfakeroot -uc -us'
432whitelist_externals = sh
433
434
435#######################################################################################
sousaedu96abfc22021-02-18 14:57:01 +0100436[flake8]
437ignore =
438 W291,
439 W293,
440 W503,
441 W605,
442 E123,
443 E125,
444 E203,
445 E226,
446 E241
447exclude =
448 .git,
449 __pycache__,
450 .tox,
451max-line-length = 120
452show-source = True
453builtins = _