ci: upgrade pylint to latest version

core: also upgrade kombu as https://github.com/celery/kombu/issues/1101 is fixed now
This commit is contained in:
Jens Langhammer 2019-12-31 12:45:29 +01:00
parent 31ea2e7139
commit 8eb3f0f708
17 changed files with 160 additions and 140 deletions

View File

@ -1,6 +1,6 @@
[MASTER] [MASTER]
disable=redefined-outer-name,arguments-differ,no-self-use,cyclic-import,fixme,locally-disabled,unpacking-non-sequence,too-many-ancestors,too-many-branches,too-few-public-methods disable=redefined-outer-name,arguments-differ,no-self-use,cyclic-import,fixme,locally-disabled,unpacking-non-sequence,too-many-ancestors,too-many-branches,too-few-public-methods,import-outside-toplevel
load-plugins=pylint_django,pylint.extensions.bad_builtin load-plugins=pylint_django,pylint.extensions.bad_builtin
extension-pkg-whitelist=lxml extension-pkg-whitelist=lxml
const-rgx=[a-zA-Z0-9_]{1,40}$ const-rgx=[a-zA-Z0-9_]{1,40}$

View File

@ -23,7 +23,7 @@ django-rest-framework = "*"
django-storages = "*" django-storages = "*"
djangorestframework-guardian = "*" djangorestframework-guardian = "*"
drf-yasg = "*" drf-yasg = "*"
kombu = "==4.5.0" kombu = "*"
ldap3 = "*" ldap3 = "*"
lxml = "*" lxml = "*"
oauthlib = "*" oauthlib = "*"
@ -53,6 +53,6 @@ coverage = "*"
django-debug-toolbar = "*" django-debug-toolbar = "*"
isort = "*" isort = "*"
prospector = "*" prospector = "*"
pylint = "==2.3.1" pylint = "*"
pylint-django = "*" pylint-django = "*"
unittest-xml-reporting = "*" unittest-xml-reporting = "*"

213
Pipfile.lock generated
View File

@ -1,7 +1,7 @@
{ {
"_meta": { "_meta": {
"hash": { "hash": {
"sha256": "865b57ef5ef326de114d39d8505f60f19b5f7e42a50d988ea3fc9dfc9b9371ec" "sha256": "5d1d5f5f9664ce6ffb10e89d3780c9e04d4f8f372129baaf3293e44432a2f16d"
}, },
"pipfile-spec": 6, "pipfile-spec": 6,
"requires": { "requires": {
@ -46,26 +46,26 @@
}, },
"boto3": { "boto3": {
"hashes": [ "hashes": [
"sha256:d280f2bf7dc373e8aeab296f81aadefabf8780ff8c8ad27cdc36f8f112ca95ed", "sha256:982823e7c992d27e5954c81db93238ffc42c7a1210d863b4f5e048fdc088040e",
"sha256:edbf4636e700c46e49f555ac87ab48b8c385fde604528db15fc5189d5a73dc72" "sha256:f05ee90a738c2f1ec8088121030229f26ef6a809fb9a1338de2118fd088dd99a"
], ],
"index": "pypi", "index": "pypi",
"version": "==1.10.33" "version": "==1.10.45"
}, },
"botocore": { "botocore": {
"hashes": [ "hashes": [
"sha256:4861785b52b0b3f97da91613c31f8e501f12517c9c79482b44efbdb56b69aefc", "sha256:88ee646f7a0fe6a418681c6f119a590fae23d8439c48c2aec6878f7f89430b1f",
"sha256:9cc87d7906693c9c8fe862c574a1bebbe22a0475d6991e9b7251bc93cb1954d9" "sha256:f48ba1ef04b25323c1d27fa6399795baa0ca9d316911b87be4d33acda5cef07c"
], ],
"version": "==1.13.33" "version": "==1.13.45"
}, },
"celery": { "celery": {
"hashes": [ "hashes": [
"sha256:4c4532aa683f170f40bd76f928b70bc06ff171a959e06e71bf35f2f9d6031ef9", "sha256:7c544f37a84a5eadc44cab1aa8c9580dff94636bb81978cdf9bf8012d9ea7d8f",
"sha256:528e56767ae7e43a16cfef24ee1062491f5754368d38fcfffa861cdb9ef219be" "sha256:d3363bb5df72d74420986a435449f3c3979285941dff57d5d97ecba352a0e3e2"
], ],
"index": "pypi", "index": "pypi",
"version": "==4.3.0" "version": "==4.4.0"
}, },
"certifi": { "certifi": {
"hashes": [ "hashes": [
@ -169,19 +169,19 @@
}, },
"django": { "django": {
"hashes": [ "hashes": [
"sha256:a4ad4f6f9c6a4b7af7e2deec8d0cbff28501852e5010d6c2dc695d3d1fae7ca0", "sha256:662a1ff78792e3fd77f16f71b1f31149489434de4b62a74895bd5d6534e635a5",
"sha256:fa98ec9cc9bf5d72a08ebf3654a9452e761fbb8566e3f80de199cbc15477e891" "sha256:687c37153486cf26c3fdcbdd177ef16de38dc3463f094b5f9c9955d91f277b14"
], ],
"index": "pypi", "index": "pypi",
"version": "==2.2.8" "version": "==2.2.9"
}, },
"django-cors-middleware": { "django-cors-middleware": {
"hashes": [ "hashes": [
"sha256:85904a3401e7bc0c86502ff2b01d726917af3aaa7dafb77799b27ace637e8c92", "sha256:5bbdea85e22909d596e26f6e0dbc174d5521429fa3943ae02a2c6c48e76c88c7",
"sha256:bca8888ed33a94ba5472bde37ed71ec3d08231d6817fd4d799296b016073da95" "sha256:856dbe4d7aae65844ccc68acb49c6da7dbf7cbacaf5bcf37019f4c0c60b3be84"
], ],
"index": "pypi", "index": "pypi",
"version": "==1.4.0" "version": "==1.5.0"
}, },
"django-dbbackup": { "django-dbbackup": {
"hashes": [ "hashes": [
@ -208,11 +208,11 @@
}, },
"django-model-utils": { "django-model-utils": {
"hashes": [ "hashes": [
"sha256:3f130a262e45d73e0950d2be76af4bf4ee86804dd60e5f90afc5cd948fcfe760", "sha256:9cf882e5b604421b62dbe57ad2b18464dc9c8f963fc3f9831badccae66c1139c",
"sha256:682f58c1de330cedcda58cc85d5232c5b47a9e2cb67bef4541fb43fdaeb18e96" "sha256:adf09e5be15122a7f4e372cb5a6dd512bbf8d78a23a90770ad0983ee9d909061"
], ],
"index": "pypi", "index": "pypi",
"version": "==3.2.0" "version": "==4.0.0"
}, },
"django-oauth-toolkit": { "django-oauth-toolkit": {
"hashes": [ "hashes": [
@ -230,11 +230,11 @@
}, },
"django-otp": { "django-otp": {
"hashes": [ "hashes": [
"sha256:1b6025bbbd2517b7c246828b1d11c83d53567904836ae6d57bc0058f3cd18b50", "sha256:1f16c2b93fe484706ff16ac6f5e64ecc73dd240318c333e0560384ba548d3837",
"sha256:76a698466178ce40473726ffd8c33f68d1c47f27c53f67fa4aeeb6fdde74d37b" "sha256:cd4975539be478417033561e9832a1a69a583189f680e92a649f412c661f90aa"
], ],
"index": "pypi", "index": "pypi",
"version": "==0.7.4" "version": "==0.7.5"
}, },
"django-prometheus": { "django-prometheus": {
"hashes": [ "hashes": [
@ -254,11 +254,11 @@
}, },
"django-redis": { "django-redis": {
"hashes": [ "hashes": [
"sha256:af0b393864e91228dd30d8c85b5c44d670b5524cb161b7f9e41acc98b6e5ace7", "sha256:a5b1e3ffd3198735e6c529d9bdf38ca3fcb3155515249b98dc4d966b8ddf9d2b",
"sha256:f46115577063d00a890867c6964ba096057f07cb756e78e0503b89cd18e4e083" "sha256:e1aad4cc5bd743d8d0b13d5cae0cef5410eaace33e83bff5fc3a139ad8db50b4"
], ],
"index": "pypi", "index": "pypi",
"version": "==4.10.0" "version": "==4.11.0"
}, },
"django-rest-framework": { "django-rest-framework": {
"hashes": [ "hashes": [
@ -277,10 +277,10 @@
}, },
"djangorestframework": { "djangorestframework": {
"hashes": [ "hashes": [
"sha256:5488aed8f8df5ec1d70f04b2114abc52ae6729748a176c453313834a9ee179c8", "sha256:05809fc66e1c997fd9a32ea5730d9f4ba28b109b9da71fccfa5ff241201fd0a4",
"sha256:dc81cbf9775c6898a580f6f1f387c4777d12bd87abf0f5406018d32ccae71090" "sha256:e782087823c47a26826ee5b6fa0c542968219263fb3976ec3c31edab23a4001f"
], ],
"version": "==3.10.3" "version": "==3.11.0"
}, },
"djangorestframework-guardian": { "djangorestframework-guardian": {
"hashes": [ "hashes": [
@ -328,11 +328,11 @@
}, },
"importlib-metadata": { "importlib-metadata": {
"hashes": [ "hashes": [
"sha256:3a8b2dfd0a2c6a3636e7c016a7e54ae04b997d30e69d5eacdca7a6c2221a1402", "sha256:073a852570f92da5f744a3472af1b61e28e9f78ccf0c9117658dc32b15de7b45",
"sha256:41e688146d000891f32b1669e8573c57e39e5060e7f5f647aa617cd9a9568278" "sha256:d95141fbfa7ef2ec65cfd945e2af7e5a6ddbd7c8d9a25e66ff3be8e3daf9f60f"
], ],
"markers": "python_version < '3.8'", "markers": "python_version < '3.8'",
"version": "==1.2.0" "version": "==1.3.0"
}, },
"inflection": { "inflection": {
"hashes": [ "hashes": [
@ -369,11 +369,11 @@
}, },
"kombu": { "kombu": {
"hashes": [ "hashes": [
"sha256:389ba09e03b15b55b1a7371a441c894fd8121d174f5583bbbca032b9ea8c9edd", "sha256:2a9e7adff14d046c9996752b2c48b6d9185d0b992106d5160e1a179907a5d4ac",
"sha256:7b92303af381ef02fad6899fd5f5a9a96031d781356cd8e505fa54ae5ddee181" "sha256:67b32ccb6fea030f8799f8fd50dd08e03a4b99464ebc4952d71d8747b1a52ad1"
], ],
"index": "pypi", "index": "pypi",
"version": "==4.5.0" "version": "==4.6.7"
}, },
"ldap3": { "ldap3": {
"hashes": [ "hashes": [
@ -450,10 +450,10 @@
}, },
"more-itertools": { "more-itertools": {
"hashes": [ "hashes": [
"sha256:53ff73f186307d9c8ef17a9600309154a6ae27f25579e80af4db8f047ba14bc2", "sha256:b84b238cce0d9adad5ed87e745778d20a3f8487d0f0cb8b8a586816c7496458d",
"sha256:a0ea684c39bc4315ba7aae406596ef191fd84f873d2d2751f84d64e81a7a2d45" "sha256:c833ef592a0324bcc6a60e48440da07645063c453880c9477ceb22490aec1564"
], ],
"version": "==8.0.0" "version": "==8.0.2"
}, },
"oauthlib": { "oauthlib": {
"hashes": [ "hashes": [
@ -625,10 +625,10 @@
}, },
"pyparsing": { "pyparsing": {
"hashes": [ "hashes": [
"sha256:20f995ecd72f2a1f4bf6b072b63b22e2eb457836601e76d6e5dfcd75436acc1f", "sha256:4c830582a84fb022400b85429791bc551f1f4871c33f23e44f353119e92f969f",
"sha256:4ca62001be367f01bd3e92ecbb79070272a9d4964dce6a48a82ff0b8bc7e683a" "sha256:c342dccb5250c08d45fd6f8b4a559613ca603b57498511740e65cd11a2e7dcec"
], ],
"version": "==2.4.5" "version": "==2.4.6"
}, },
"pyrsistent": { "pyrsistent": {
"hashes": [ "hashes": [
@ -638,11 +638,11 @@
}, },
"python-dateutil": { "python-dateutil": {
"hashes": [ "hashes": [
"sha256:7e6584c74aeed623791615e26efd690f29817a27c73085b78e4bad02493df2fb", "sha256:73ebfe9dbf22e832286dafa60473e4cd239f8592f699aa5adaf10050e6e1823c",
"sha256:c89805f6f4d64db21ed966fda138f8a5ed7a4fdbc1a8ee329ce1b74e3c74da9e" "sha256:75bb3f31ea686f1197762692a9ee6a7550b59fc6ca3a1f4b5d7e32fb98e2da2a"
], ],
"markers": "python_version >= '2.7'", "markers": "python_version >= '2.7'",
"version": "==2.8.0" "version": "==2.8.1"
}, },
"pytz": { "pytz": {
"hashes": [ "hashes": [
@ -752,6 +752,7 @@
"sha256:a0ff786d2a7dbe55f9544b3f6ebbcc495d7e730df92a08434604f6f470b899c5", "sha256:a0ff786d2a7dbe55f9544b3f6ebbcc495d7e730df92a08434604f6f470b899c5",
"sha256:b1b7fcee6aedcdc7e62c3a73f238b3d080c7ba6650cd808bce8d7761ec484070", "sha256:b1b7fcee6aedcdc7e62c3a73f238b3d080c7ba6650cd808bce8d7761ec484070",
"sha256:b66832ea8077d9b3f6e311c4a53d06273db5dc2db6e8a908550f3c14d67e718c", "sha256:b66832ea8077d9b3f6e311c4a53d06273db5dc2db6e8a908550f3c14d67e718c",
"sha256:be018933c2f4ee7de55e7bd7d0d801b3dfb09d21dad0cce8a97995fd3e44be30",
"sha256:d0d3ac228c9bbab08134b4004d748cf9f8743504875b3603b3afbb97e3472947", "sha256:d0d3ac228c9bbab08134b4004d748cf9f8743504875b3603b3afbb97e3472947",
"sha256:d10e9dd744cf85c219bf747c75194b624cc7a94f0c80ead624b06bfa9f61d3bc", "sha256:d10e9dd744cf85c219bf747c75194b624cc7a94f0c80ead624b06bfa9f61d3bc",
"sha256:ea4362548ee0cbc266949d8a441238d9ad3600ca9910c3fe4e82ee3a50706973", "sha256:ea4362548ee0cbc266949d8a441238d9ad3600ca9910c3fe4e82ee3a50706973",
@ -770,11 +771,11 @@
}, },
"sentry-sdk": { "sentry-sdk": {
"hashes": [ "hashes": [
"sha256:a7c2c8d3f53b6b57454830cd6a4b73d272f1ba91952f59e6545b3cf885f3c22f", "sha256:05285942901d38c7ce2498aba50d8e87b361fc603281a5902dda98f3f8c5e145",
"sha256:bfc486af718c268cf49ff43d6334ed4db7333ace420240b630acdd8f8a3a8f60" "sha256:c6b919623e488134a728f16326c6f0bcdab7e3f59e7f4c472a90eea4d6d8fe82"
], ],
"index": "pypi", "index": "pypi",
"version": "==0.13.4" "version": "==0.13.5"
}, },
"service-identity": { "service-identity": {
"hashes": [ "hashes": [
@ -824,11 +825,10 @@
}, },
"uritemplate": { "uritemplate": {
"hashes": [ "hashes": [
"sha256:01c69f4fe8ed503b2951bef85d996a9d22434d2431584b5b107b2981ff416fbd", "sha256:07620c3f3f8eed1f12600845892b0e036a2420acf513c53f7de0abd911a5894f",
"sha256:1b9c467a940ce9fb9f50df819e8ddd14696f89b9a8cc87ac77952ba416e0a8fd", "sha256:5af8ad10cec94f215e3f48112de2022e1d5a37ed427fbd88652fa908f2ab7cae"
"sha256:c02643cebe23fc8adb5e6becffe201185bf06c40bda5c0b4028a93f1527d011d"
], ],
"version": "==3.0.0" "version": "==3.0.1"
}, },
"urllib3": { "urllib3": {
"extras": [ "extras": [
@ -867,10 +867,10 @@
}, },
"astroid": { "astroid": {
"hashes": [ "hashes": [
"sha256:6560e1e1749f68c64a4b5dee4e091fce798d2f0d84ebe638cf0e0585a343acf4", "sha256:71ea07f44df9568a75d0f354c49143a4575d90645e9fead6dfb52c26a85ed13a",
"sha256:b65db1bbaac9f9f4d190199bb8680af6f6f84fd3769a5ea883df8a91fe68b4c4" "sha256:840947ebfa8b58f318d42301cf8c0a20fd794a33b61cc4638e28e9e61ba32f42"
], ],
"version": "==2.2.5" "version": "==2.3.3"
}, },
"autopep8": { "autopep8": {
"hashes": [ "hashes": [
@ -897,57 +897,56 @@
}, },
"colorama": { "colorama": {
"hashes": [ "hashes": [
"sha256:05eed71e2e327246ad6b38c540c4a3117230b19679b875190486ddd2d721422d", "sha256:7d73d2a99753107a36ac6b455ee49046802e59d9d076ef8e47b61499fa29afff",
"sha256:f8ac84de7840f5b9c4e3347b3c1eaa50f7e49c2b07596221daec5edaabbd7c48" "sha256:e96da0d330793e2cb9485e9ddfd918d456036c7149416295932478192f4436a1"
], ],
"index": "pypi", "index": "pypi",
"version": "==0.4.1" "version": "==0.4.3"
}, },
"coverage": { "coverage": {
"hashes": [ "hashes": [
"sha256:08907593569fe59baca0bf152c43f3863201efb6113ecb38ce7e97ce339805a6", "sha256:0101888bd1592a20ccadae081ba10e8b204d20235d18d05c6f7d5e904a38fc10",
"sha256:0be0f1ed45fc0c185cfd4ecc19a1d6532d72f86a2bac9de7e24541febad72650", "sha256:04b961862334687549eb91cd5178a6fbe977ad365bddc7c60f2227f2f9880cf4",
"sha256:141f08ed3c4b1847015e2cd62ec06d35e67a3ac185c26f7635f4406b90afa9c5", "sha256:1ca43dbd739c0fc30b0a3637a003a0d2c7edc1dd618359d58cc1e211742f8bd1",
"sha256:19e4df788a0581238e9390c85a7a09af39c7b539b29f25c89209e6c3e371270d", "sha256:1cbb88b34187bdb841f2599770b7e6ff8e259dc3bb64fc7893acf44998acf5f8",
"sha256:23cc09ed395b03424d1ae30dcc292615c1372bfba7141eb85e11e50efaa6b351", "sha256:232f0b52a5b978288f0bbc282a6c03fe48cd19a04202df44309919c142b3bb9c",
"sha256:245388cda02af78276b479f299bbf3783ef0a6a6273037d7c60dc73b8d8d7755", "sha256:24bcfa86fd9ce86b73a8368383c39d919c497a06eebb888b6f0c12f13e920b1a",
"sha256:331cb5115673a20fb131dadd22f5bcaf7677ef758741312bee4937d71a14b2ef", "sha256:25b8f60b5c7da71e64c18888f3067d5b6f1334b9681876b2fb41eea26de881ae",
"sha256:386e2e4090f0bc5df274e720105c342263423e77ee8826002dcffe0c9533dbca", "sha256:2714160a63da18aed9340c70ed514973971ee7e665e6b336917ff4cca81a25b1",
"sha256:3a794ce50daee01c74a494919d5ebdc23d58873747fa0e288318728533a3e1ca", "sha256:2ca2cd5264e84b2cafc73f0045437f70c6378c0d7dbcddc9ee3fe192c1e29e5d",
"sha256:60851187677b24c6085248f0a0b9b98d49cba7ecc7ec60ba6b9d2e5574ac1ee9", "sha256:2cc707fc9aad2592fc686d63ef72dc0031fc98b6fb921d2f5395d9ab84fbc3ef",
"sha256:63a9a5fc43b58735f65ed63d2cf43508f462dc49857da70b8980ad78d41d52fc", "sha256:348630edea485f4228233c2f310a598abf8afa5f8c716c02a9698089687b6085",
"sha256:6b62544bb68106e3f00b21c8930e83e584fdca005d4fffd29bb39fb3ffa03cb5", "sha256:40fbfd6b044c9db13aeec1daf5887d322c710d811f944011757526ef6e323fd9",
"sha256:6ba744056423ef8d450cf627289166da65903885272055fb4b5e113137cfa14f", "sha256:46c9c6a1d1190c0b75ec7c0f339088309952b82ae8d67a79ff1319eb4e749b96",
"sha256:7494b0b0274c5072bddbfd5b4a6c6f18fbbe1ab1d22a41e99cd2d00c8f96ecfe", "sha256:591506e088901bdc25620c37aec885e82cc896528f28c57e113751e3471fc314",
"sha256:826f32b9547c8091679ff292a82aca9c7b9650f9fda3e2ca6bf2ac905b7ce888", "sha256:5ac71bba1e07eab403b082c4428f868c1c9e26a21041436b4905c4c3d4e49b08",
"sha256:93715dffbcd0678057f947f496484e906bf9509f5c1c38fc9ba3922893cda5f5", "sha256:5f622f19abda4e934938e24f1d67599249abc201844933a6f01aaa8663094489",
"sha256:9a334d6c83dfeadae576b4d633a71620d40d1c379129d587faa42ee3e2a85cce", "sha256:65bead1ac8c8930cf92a1ccaedcce19a57298547d5d1db5c9d4d068a0675c38b",
"sha256:af7ed8a8aa6957aac47b4268631fa1df984643f07ef00acd374e456364b373f5", "sha256:7362a7f829feda10c7265b553455de596b83d1623b3d436b6d3c51c688c57bf6",
"sha256:bf0a7aed7f5521c7ca67febd57db473af4762b9622254291fbcbb8cd0ba5e33e", "sha256:7f2675750c50151f806070ec11258edf4c328340916c53bac0adbc465abd6b1e",
"sha256:bf1ef9eb901113a9805287e090452c05547578eaab1b62e4ad456fcc049a9b7e", "sha256:960d7f42277391e8b1c0b0ae427a214e1b31a1278de6b73f8807b20c2e913bba",
"sha256:c0afd27bc0e307a1ffc04ca5ec010a290e49e3afbe841c5cafc5c5a80ecd81c9", "sha256:a50b0888d8a021a3342d36a6086501e30de7d840ab68fca44913e97d14487dc1",
"sha256:dd579709a87092c6dbee09d1b7cfa81831040705ffa12a1b248935274aee0437", "sha256:b7dbc5e8c39ea3ad3db22715f1b5401cd698a621218680c6daf42c2f9d36e205",
"sha256:df6712284b2e44a065097846488f66840445eb987eb81b3cc6e4149e7b6982e1", "sha256:bb3d29df5d07d5399d58a394d0ef50adf303ab4fbf66dfd25b9ef258effcb692",
"sha256:e07d9f1a23e9e93ab5c62902833bf3e4b1f65502927379148b6622686223125c", "sha256:c0fff2733f7c2950f58a4fd09b5db257b00c6fec57bf3f68c5bae004d804b407",
"sha256:e2ede7c1d45e65e209d6093b762e98e8318ddeff95317d07a27a2140b80cfd24", "sha256:c792d3707a86c01c02607ae74364854220fb3e82735f631cd0a345dea6b4cee5",
"sha256:e4ef9c164eb55123c62411f5936b5c2e521b12356037b6e1c2617cef45523d47", "sha256:c90bda74e16bcd03861b09b1d37c0a4158feda5d5a036bb2d6e58de6ff65793e",
"sha256:eca2b7343524e7ba246cab8ff00cab47a2d6d54ada3b02772e908a45675722e2", "sha256:cfce79ce41cc1a1dc7fc85bb41eeeb32d34a4cf39a645c717c0550287e30ff06",
"sha256:eee64c616adeff7db37cc37da4180a3a5b6177f5c46b187894e633f088fb5b28", "sha256:eeafb646f374988c22c8e6da5ab9fb81367ecfe81c70c292623373d2a021b1a1",
"sha256:ef824cad1f980d27f26166f86856efe11eff9912c4fed97d3804820d43fa550c", "sha256:f425f50a6dd807cb9043d15a4fcfba3b5874a54d9587ccbb748899f70dc18c47",
"sha256:efc89291bd5a08855829a3c522df16d856455297cf35ae827a37edac45f466a7", "sha256:fcd4459fe35a400b8f416bc57906862693c9f88b66dc925e7f2a933e77f6b18b",
"sha256:fa964bae817babece5aa2e8c1af841bebb6d0b9add8e637548809d040443fee0", "sha256:ff3936dd5feaefb4f91c8c1f50a06c588b5dc69fba4f7d9c79a6617ad80bb7df"
"sha256:ff37757e068ae606659c28c3bd0d923f9d29a85de79bf25b2b34b148473b5025"
], ],
"index": "pypi", "index": "pypi",
"version": "==4.5.4" "version": "==5.0.1"
}, },
"django": { "django": {
"hashes": [ "hashes": [
"sha256:a4ad4f6f9c6a4b7af7e2deec8d0cbff28501852e5010d6c2dc695d3d1fae7ca0", "sha256:662a1ff78792e3fd77f16f71b1f31149489434de4b62a74895bd5d6534e635a5",
"sha256:fa98ec9cc9bf5d72a08ebf3654a9452e761fbb8566e3f80de199cbc15477e891" "sha256:687c37153486cf26c3fdcbdd177ef16de38dc3463f094b5f9c9955d91f277b14"
], ],
"index": "pypi", "index": "pypi",
"version": "==2.2.8" "version": "==2.2.9"
}, },
"django-debug-toolbar": { "django-debug-toolbar": {
"hashes": [ "hashes": [
@ -1034,10 +1033,10 @@
}, },
"prospector": { "prospector": {
"hashes": [ "hashes": [
"sha256:aba551e53dc1a5a432afa67385eaa81d7b4cf4c162dc1a4d0ee00b3a0712ad90" "sha256:ea910794b53cfefcb5dfb6b4eb0323e42d1a88132e165b85b016cc7f0b6ae635"
], ],
"index": "pypi", "index": "pypi",
"version": "==1.1.7" "version": "==1.2.0"
}, },
"pycodestyle": { "pycodestyle": {
"hashes": [ "hashes": [
@ -1048,25 +1047,25 @@
}, },
"pydocstyle": { "pydocstyle": {
"hashes": [ "hashes": [
"sha256:04c84e034ebb56eb6396c820442b8c4499ac5eb94a3bda88951ac3dc519b6058", "sha256:4167fe954b8f27ebbbef2fbcf73c6e8ad1e7bb31488fce44a69fdfc4b0cd0fae",
"sha256:66aff87ffe34b1e49bff2dd03a88ce6843be2f3346b0c9814410d34987fbab59" "sha256:a0de36e549125d0a16a72a8c8c6c9ba267750656e72e466e994c222f1b6e92cb"
], ],
"version": "==4.0.1" "version": "==5.0.1"
}, },
"pyflakes": { "pyflakes": {
"hashes": [ "hashes": [
"sha256:08bd6a50edf8cffa9fa09a463063c425ecaaf10d1eb0335a7e8b1401aef89e6f", "sha256:17dbeb2e3f4d772725c777fabc446d5634d1038f234e77343108ce445ea69ce0",
"sha256:8d616a382f243dbf19b54743f280b80198be0bca3a5396f1d2e1fca6223e8805" "sha256:d976835886f8c5b31d47970ed689944a0262b5f3afa00a5a7b4dc81e5449f8a2"
], ],
"version": "==1.6.0" "version": "==2.1.1"
}, },
"pylint": { "pylint": {
"hashes": [ "hashes": [
"sha256:5d77031694a5fb97ea95e828c8d10fc770a1df6eb3906067aaed42201a8a6a09", "sha256:3db5468ad013380e987410a8d6956226963aed94ecb5f9d3a28acca6d9ac36cd",
"sha256:723e3db49555abaf9bf79dc474c6b9e2935ad82230b10c1138a71ea41ac0fff1" "sha256:886e6afc935ea2590b462664b161ca9a5e40168ea99e5300935f6591ad467df4"
], ],
"index": "pypi", "index": "pypi",
"version": "==2.3.1" "version": "==2.4.4"
}, },
"pylint-celery": { "pylint-celery": {
"hashes": [ "hashes": [
@ -1076,11 +1075,11 @@
}, },
"pylint-django": { "pylint-django": {
"hashes": [ "hashes": [
"sha256:75c69d1ec2275918c37f175976da20e2f1e1e62e067098a685cd263ffa833dfd", "sha256:9bdb0e022b19881218a25ffb8ad05e83b83bc5cdbc58e5ee8ffbe99965193f6c",
"sha256:c7cb6384ea7b33ea77052a5ae07358c10d377807390ef27b2e6ff997303fadb7" "sha256:9eea6a026eaa5ecfad5fed7a33faf77ef55a43cc78afbcaf2f6ddd071156b3f8"
], ],
"index": "pypi", "index": "pypi",
"version": "==2.0.10" "version": "==2.0.12"
}, },
"pylint-flask": { "pylint-flask": {
"hashes": [ "hashes": [
@ -1189,7 +1188,7 @@
"sha256:fdc1c9bbf79510b76408840e009ed65958feba92a88833cdceecff93ae8fff66", "sha256:fdc1c9bbf79510b76408840e009ed65958feba92a88833cdceecff93ae8fff66",
"sha256:ffde2fbfad571af120fcbfbbc61c72469e72f550d676c3342492a9dfdefb8f12" "sha256:ffde2fbfad571af120fcbfbbc61c72469e72f550d676c3342492a9dfdefb8f12"
], ],
"markers": "implementation_name == 'cpython'", "markers": "implementation_name == 'cpython' and python_version < '3.8'",
"version": "==1.4.0" "version": "==1.4.0"
}, },
"unittest-xml-reporting": { "unittest-xml-reporting": {

View File

@ -9,7 +9,7 @@ class OpenIDUserInfoView(ScopedResourceMixin, View):
required_scopes = ['openid:userinfo'] required_scopes = ['openid:userinfo']
def get(self, request, *args, **kwargs): def get(self, request, *_, **__):
"""Passbook v1 OpenID API""" """Passbook v1 OpenID API"""
payload = { payload = {
'sub': request.user.uuid.int, 'sub': request.user.uuid.int,

View File

@ -8,26 +8,35 @@ from passbook.core.signals import (invitation_created, invitation_used,
@receiver(user_logged_in) @receiver(user_logged_in)
def on_user_logged_in(sender, request, user, **kwargs): # pylint: disable=unused-argument
def on_user_logged_in(sender, request, user, **_):
"""Log successful login""" """Log successful login"""
Event.new(EventAction.LOGIN).from_http(request) Event.new(EventAction.LOGIN).from_http(request)
@receiver(user_logged_out) @receiver(user_logged_out)
def on_user_logged_out(sender, request, user, **kwargs): # pylint: disable=unused-argument
def on_user_logged_out(sender, request, user, **_):
"""Log successfully logout""" """Log successfully logout"""
Event.new(EventAction.LOGOUT).from_http(request) Event.new(EventAction.LOGOUT).from_http(request)
@receiver(user_signed_up) @receiver(user_signed_up)
def on_user_signed_up(sender, request, user, **kwargs): # pylint: disable=unused-argument
def on_user_signed_up(sender, request, user, **_):
"""Log successfully signed up""" """Log successfully signed up"""
Event.new(EventAction.SIGN_UP).from_http(request) Event.new(EventAction.SIGN_UP).from_http(request)
@receiver(invitation_created) @receiver(invitation_created)
def on_invitation_created(sender, request, invitation, **kwargs): # pylint: disable=unused-argument
def on_invitation_created(sender, request, invitation, **_):
"""Log Invitation creation""" """Log Invitation creation"""
Event.new(EventAction.INVITE_CREATED, invitation_uuid=invitation.uuid.hex).from_http(request) Event.new(EventAction.INVITE_CREATED, invitation_uuid=invitation.uuid.hex).from_http(request)
@receiver(invitation_used) @receiver(invitation_used)
def on_invitation_used(sender, request, invitation, **kwargs): # pylint: disable=unused-argument
def on_invitation_used(sender, request, invitation, **_):
"""Log Invitation usage""" """Log Invitation usage"""
Event.new(EventAction.INVITE_USED, invitation_uuid=invitation.uuid.hex).from_http(request) Event.new(EventAction.INVITE_USED, invitation_uuid=invitation.uuid.hex).from_http(request)

View File

@ -12,6 +12,7 @@ invitation_created = Signal(providing_args=['request', 'invitation'])
invitation_used = Signal(providing_args=['request', 'invitation', 'user']) invitation_used = Signal(providing_args=['request', 'invitation', 'user'])
password_changed = Signal(providing_args=['user', 'password']) password_changed = Signal(providing_args=['user', 'password'])
@receiver(post_save) @receiver(post_save)
# pylint: disable=unused-argument # pylint: disable=unused-argument
def invalidate_policy_cache(sender, instance, **_): def invalidate_policy_cache(sender, instance, **_):

View File

@ -78,6 +78,7 @@ class LoginView(UserPassesTestMixin, FormView):
def invalid_login(self, request: HttpRequest, disabled_user: User = None) -> HttpResponse: def invalid_login(self, request: HttpRequest, disabled_user: User = None) -> HttpResponse:
"""Handle login for disabled users/invalid login attempts""" """Handle login for disabled users/invalid login attempts"""
LOGGER.debug("invalid_login", user=disabled_user)
messages.error(request, _('Failed to authenticate.')) messages.error(request, _('Failed to authenticate.'))
return self.render_to_response(self.get_context_data()) return self.render_to_response(self.get_context_data())

View File

@ -1,6 +1,5 @@
"""passbook OTP Settings""" """passbook OTP Settings"""
OTP_TOTP_ISSUER = 'passbook'
MIDDLEWARE = [ MIDDLEWARE = [
'django_otp.middleware.OTPMiddleware', 'django_otp.middleware.OTPMiddleware',
] ]

View File

@ -1,22 +1,17 @@
"""passbook OTP Utils""" """passbook OTP Utils"""
from django.conf import settings
from django.utils.http import urlencode from django.utils.http import urlencode
def otpauth_url(accountname, secret, issuer=None, digits=6): def otpauth_url(accountname, secret, issuer=None, digits=6):
"""Create otpauth according to """Create otpauth according to
https://github.com/google/google-authenticator/wiki/Key-Uri-Format""" https://github.com/google/google-authenticator/wiki/Key-Uri-Format"""
accountname = accountname
issuer = issuer if issuer else getattr(settings, 'OTP_TOTP_ISSUER')
# Ensure that the secret parameter is the FIRST parameter of the URI, this # Ensure that the secret parameter is the FIRST parameter of the URI, this
# allows Microsoft Authenticator to work. # allows Microsoft Authenticator to work.
query = [ query = [
('secret', secret), ('secret', secret),
('digits', digits), ('digits', digits),
('issuer', issuer), ('issuer', 'passbook'),
] ]
return 'otpauth://totp/%s:%s?%s' % (issuer, accountname, urlencode(query)) return 'otpauth://totp/%s:%s?%s' % (issuer, accountname, urlencode(query))

View File

@ -26,6 +26,7 @@ OTP_SESSION_KEY = 'passbook_factors_otp_key'
OTP_SETTING_UP_KEY = 'passbook_factors_otp_setup' OTP_SETTING_UP_KEY = 'passbook_factors_otp_setup'
LOGGER = get_logger() LOGGER = get_logger()
class UserSettingsView(LoginRequiredMixin, TemplateView): class UserSettingsView(LoginRequiredMixin, TemplateView):
"""View for user settings to control OTP""" """View for user settings to control OTP"""
@ -37,15 +38,16 @@ class UserSettingsView(LoginRequiredMixin, TemplateView):
static = StaticDevice.objects.filter(user=self.request.user, confirmed=True) static = StaticDevice.objects.filter(user=self.request.user, confirmed=True)
if static.exists(): if static.exists():
kwargs['static_tokens'] = StaticToken.objects.filter(device=static.first()) \ kwargs['static_tokens'] = StaticToken.objects.filter(device=static.first()) \
.order_by('token') .order_by('token')
totp_devices = TOTPDevice.objects.filter(user=self.request.user, confirmed=True) totp_devices = TOTPDevice.objects.filter(user=self.request.user, confirmed=True)
kwargs['state'] = totp_devices.exists() and static.exists() kwargs['state'] = totp_devices.exists() and static.exists()
return kwargs return kwargs
class DisableView(LoginRequiredMixin, View): class DisableView(LoginRequiredMixin, View):
"""Disable TOTP for user""" """Disable TOTP for user"""
def get(self, request, *args, **kwargs): def get(self, request: HttpRequest) -> HttpResponse:
"""Delete all the devices for user""" """Delete all the devices for user"""
static = get_object_or_404(StaticDevice, user=request.user, confirmed=True) static = get_object_or_404(StaticDevice, user=request.user, confirmed=True)
static_tokens = StaticToken.objects.filter(device=static).order_by('token') static_tokens = StaticToken.objects.filter(device=static).order_by('token')
@ -59,6 +61,7 @@ class DisableView(LoginRequiredMixin, View):
Event.new(EventAction.CUSTOM, message='User disabled OTP.').from_http(request) Event.new(EventAction.CUSTOM, message='User disabled OTP.').from_http(request)
return redirect(reverse('passbook_factors_otp:otp-user-settings')) return redirect(reverse('passbook_factors_otp:otp-user-settings'))
class EnableView(LoginRequiredMixin, FormView): class EnableView(LoginRequiredMixin, FormView):
"""View to set up OTP""" """View to set up OTP"""
@ -133,6 +136,7 @@ class EnableView(LoginRequiredMixin, FormView):
Event.new(EventAction.CUSTOM, message='User enabled OTP.').from_http(self.request) Event.new(EventAction.CUSTOM, message='User enabled OTP.').from_http(self.request)
return redirect('passbook_factors_otp:otp-user-settings') return redirect('passbook_factors_otp:otp-user-settings')
class QRView(NeverCacheMixin, View): class QRView(NeverCacheMixin, View):
"""View returns an SVG image with the OTP token information""" """View returns an SVG image with the OTP token information"""

View File

@ -15,18 +15,18 @@ from passbook.lib.utils.urls import is_url_absolute
from passbook.policies.engine import PolicyEngine from passbook.policies.engine import PolicyEngine
LOGGER = get_logger() LOGGER = get_logger()
# Argument used to redirect user after login
NEXT_ARG_NAME = 'next'
def _redirect_with_qs(view, get_query_set=None): def _redirect_with_qs(view, get_query_set=None):
"""Wrapper to redirect whilst keeping GET Parameters""" """Wrapper to redirect whilst keeping GET Parameters"""
target = reverse(view) target = reverse(view)
if get_query_set: if get_query_set:
target += '?' + urlencode({key: value for key, value in get_query_set.items()}) target += '?' + urlencode(get_query_set)
return redirect(target) return redirect(target)
# Argument used to redirect user after login
NEXT_ARG_NAME = 'next'
class AuthenticationView(UserPassesTestMixin, View): class AuthenticationView(UserPassesTestMixin, View):
"""Wizard-like Multi-factor authenticator""" """Wizard-like Multi-factor authenticator"""
@ -165,5 +165,6 @@ class AuthenticationView(UserPassesTestMixin, View):
del self.request.session[key] del self.request.session[key]
LOGGER.debug("Cleaned up sessions") LOGGER.debug("Cleaned up sessions")
class FactorPermissionDeniedView(PermissionDeniedView): class FactorPermissionDeniedView(PermissionDeniedView):
"""User could not be authenticated""" """User could not be authenticated"""

View File

@ -81,7 +81,7 @@ class ConfigLoader:
except yaml.YAMLError as exc: except yaml.YAMLError as exc:
raise ImproperlyConfigured from exc raise ImproperlyConfigured from exc
except PermissionError as exc: except PermissionError as exc:
LOGGER.warning('Permission denied while reading %s', path) LOGGER.warning('Permission denied while reading file', path=path, error=exc)
def update_from_dict(self, update: dict): def update_from_dict(self, update: dict):
"""Update config from dict""" """Update config from dict"""
@ -143,6 +143,7 @@ class ConfigLoader:
CONFIG = ConfigLoader() CONFIG = ConfigLoader()
def signal_handler(sender, **_): def signal_handler(sender, **_):
"""Add all loaded config files to autoreload watcher""" """Add all loaded config files to autoreload watcher"""
for path in CONFIG.loaded_file: for path in CONFIG.loaded_file:

View File

@ -27,12 +27,14 @@ def update_score(request, username, amount):
@receiver(user_login_failed) @receiver(user_login_failed)
def handle_failed_login(sender, request, credentials, **kwargs): # pylint: disable=unused-argument
def handle_failed_login(sender, request, credentials, **_):
"""Lower Score for failed loging attempts""" """Lower Score for failed loging attempts"""
update_score(request, credentials.get('username'), -1) update_score(request, credentials.get('username'), -1)
@receiver(user_logged_in) @receiver(user_logged_in)
def handle_successful_login(sender, request, user, **kwargs): # pylint: disable=unused-argument
def handle_successful_login(sender, request, user, **_):
"""Raise score for successful attempts""" """Raise score for successful attempts"""
update_score(request, user.username, 1) update_score(request, user.username, 1)

View File

@ -116,9 +116,10 @@ class LoginProcessView(AccessRequiredView):
"""Processor-based login continuation. """Processor-based login continuation.
Presents a SAML 2.0 Assertion for POSTing back to the Service Provider.""" Presents a SAML 2.0 Assertion for POSTing back to the Service Provider."""
# pylint: disable=unused-argument
def get(self, request, application): def get(self, request, application):
"""Handle get request, i.e. render form""" """Handle get request, i.e. render form"""
LOGGER.debug("Request: %s", request) LOGGER.debug("SAMLLoginProcessView", request=request, method='get')
# Check if user has access # Check if user has access
if self.provider.application.skip_authorization: if self.provider.application.skip_authorization:
ctx = self.provider.processor.generate_response() ctx = self.provider.processor.generate_response()
@ -137,9 +138,10 @@ class LoginProcessView(AccessRequiredView):
except exceptions.CannotHandleAssertion as exc: except exceptions.CannotHandleAssertion as exc:
LOGGER.debug(exc) LOGGER.debug(exc)
# pylint: disable=unused-argument
def post(self, request, application): def post(self, request, application):
"""Handle post request, return back to ACS""" """Handle post request, return back to ACS"""
LOGGER.debug("Request: %s", request) LOGGER.debug("SAMLLoginProcessView", request=request, method='post')
# Check if user has access # Check if user has access
if request.POST.get('ACSUrl', None): if request.POST.get('ACSUrl', None):
# User accepted request # User accepted request
@ -163,6 +165,7 @@ class LogoutView(CSRFExemptMixin, AccessRequiredView):
returns a standard logged-out page. (SalesForce and others use this method, returns a standard logged-out page. (SalesForce and others use this method,
though it's technically not SAML 2.0).""" though it's technically not SAML 2.0)."""
# pylint: disable=unused-argument
def get(self, request, application): def get(self, request, application):
"""Perform logout""" """Perform logout"""
logout(request) logout(request)
@ -183,6 +186,7 @@ class SLOLogout(CSRFExemptMixin, AccessRequiredView):
"""Receives a SAML 2.0 LogoutRequest from a Service Provider, """Receives a SAML 2.0 LogoutRequest from a Service Provider,
logs out the user and returns a standard logged-out page.""" logs out the user and returns a standard logged-out page."""
# pylint: disable=unused-argument
def post(self, request, application): def post(self, request, application):
"""Perform logout""" """Perform logout"""
request.session['SAMLRequest'] = request.POST['SAMLRequest'] request.session['SAMLRequest'] = request.POST['SAMLRequest']
@ -224,6 +228,7 @@ class DescriptorDownloadView(AccessRequiredView):
class InitiateLoginView(AccessRequiredView): class InitiateLoginView(AccessRequiredView):
"""IdP-initiated Login""" """IdP-initiated Login"""
# pylint: disable=unused-argument
def get(self, request, application): def get(self, request, application):
"""Initiates an IdP-initiated link to a simple SP resource/target URL.""" """Initiates an IdP-initiated link to a simple SP resource/target URL."""
self.provider.processor.init_deep_link(request, '') self.provider.processor.init_deep_link(request, '')

View File

@ -20,7 +20,7 @@ class Connector:
def __init__(self, source: LDAPSource): def __init__(self, source: LDAPSource):
self._source = source self._source = source
self._server = ldap3.Server(source.server_uri) # Implement URI parsing self._server = ldap3.Server(source.server_uri) # Implement URI parsing
def bind(self): def bind(self):
"""Bind using Source's Credentials""" """Bind using Source's Credentials"""
@ -171,7 +171,7 @@ class Connector:
temp_connection.bind() temp_connection.bind()
return user return user
except ldap3.core.exceptions.LDAPInvalidCredentialsResult as exception: except ldap3.core.exceptions.LDAPInvalidCredentialsResult as exception:
LOGGER.debug("LDAPInvalidCredentialsResult", user=user) LOGGER.debug("LDAPInvalidCredentialsResult", user=user, error=exception)
except ldap3.core.exceptions.LDAPException as exception: except ldap3.core.exceptions.LDAPException as exception:
LOGGER.warning(exception) LOGGER.warning(exception)
return None return None

View File

@ -20,7 +20,7 @@ class BaseOAuthClient:
_session = None _session = None
def __init__(self, source, token=''): # nosec def __init__(self, source, token=''): # nosec
self.source = source self.source = source
self.token = token self.token = token
self._session = Session() self._session = Session()
@ -151,6 +151,7 @@ class OAuthClient(BaseOAuthClient):
class OAuth2Client(BaseOAuthClient): class OAuth2Client(BaseOAuthClient):
"""OAuth2 Client""" """OAuth2 Client"""
# pylint: disable=unused-argument
def check_application_state(self, request, callback): def check_application_state(self, request, callback):
"Check optional state parameter." "Check optional state parameter."
stored = request.session.get(self.session_key, None) stored = request.session.get(self.session_key, None)
@ -192,6 +193,7 @@ class OAuth2Client(BaseOAuthClient):
else: else:
return response.text return response.text
# pylint: disable=unused-argument
def get_application_state(self, request, callback): def get_application_state(self, request, callback):
"Generate state optional parameter." "Generate state optional parameter."
return get_random_string(32) return get_random_string(32)
@ -238,7 +240,7 @@ class OAuth2Client(BaseOAuthClient):
return 'oauth-client-{0}-request-state'.format(self.source.name) return 'oauth-client-{0}-request-state'.format(self.source.name)
def get_client(source, token=''): # nosec def get_client(source, token=''): # nosec
"Return the API client for the given source." "Return the API client for the given source."
cls = OAuth2Client cls = OAuth2Client
if source.request_token_url: if source.request_token_url:

View File

@ -72,7 +72,7 @@ class OAuthCallback(OAuthClientMixin, View):
source_id = None source_id = None
source = None source = None
def get(self, request, *args, **kwargs): def get(self, request, *_, **kwargs):
"""View Get handler""" """View Get handler"""
slug = kwargs.get('source_slug', '') slug = kwargs.get('source_slug', '')
try: try:
@ -221,7 +221,8 @@ class DisconnectView(LoginRequiredMixin, View):
})) }))
return self.get(request, source_slug) return self.get(request, source_slug)
def get(self, request, source): # pylint: disable=unused-argument
def get(self, request, source_slug):
"""Show delete form""" """Show delete form"""
return render(request, 'generic/delete.html', { return render(request, 'generic/delete.html', {
'object': self.source, 'object': self.source,