Merged in feature/new-licenses (pull request #70)

Feature/new licenses

Approved-by: Ramon Wenger
This commit is contained in:
Christian Cueni 2020-07-07 11:57:23 +00:00
commit 886f9d958e
11 changed files with 296 additions and 204 deletions

288
Pipfile.lock generated
View File

@ -23,12 +23,20 @@
], ],
"version": "==7.0.0" "version": "==7.0.0"
}, },
"appnope": {
"hashes": [
"sha256:5b26757dc6f79a3b7dc9fab95359328d5747fcb2409d331ea66d0272b90ab2a0",
"sha256:8b995ffe925347a2138d7ac0fe77155e4311a0ea6d6da4f5128fe4b3cbe5ed71"
],
"markers": "sys_platform == 'darwin'",
"version": "==0.1.0"
},
"backcall": { "backcall": {
"hashes": [ "hashes": [
"sha256:38ecd85be2c1e78f77fd91700c76e14667dc21e2713b63876c0eb901196e01e4", "sha256:5cbdbf27be5e7cfadb448baf0aa95508f91f2bbc6c6437cd9cd06e2a4c215e1e",
"sha256:bbbf4b1e5cd2bdb08f915895b51081c041bac22394fdfcfdfbe9f14b77c08bf2" "sha256:fbbce6a29f263178a1f7915c1940bde0ec2b2a967566fe1c65c1dfb7422bd255"
], ],
"version": "==0.1.0" "version": "==0.2.0"
}, },
"beautifulsoup4": { "beautifulsoup4": {
"hashes": [ "hashes": [
@ -48,25 +56,25 @@
}, },
"boto3": { "boto3": {
"hashes": [ "hashes": [
"sha256:009d0b483513e4c8639895c2b8dc451b41c9b863116d0234506b8b88b30a3d1b", "sha256:ae57df1fbad7e29954a160d77cbf650d6562eb0d304c1206afa71d914e771a66",
"sha256:f5218afc43c4c21ae2e8a1d4620d27ab6765250fe1f913ab234fbb686de87ae1" "sha256:cbe618d61cb8f75cd9495ea36e69bad7c8984eb11f02ad247be4c9a2eb7eb647"
], ],
"index": "pypi", "index": "pypi",
"version": "==1.13.17" "version": "==1.14.17"
}, },
"botocore": { "botocore": {
"hashes": [ "hashes": [
"sha256:cca04cd4bdb092a727772c38808f97e15f07dc609f6fbd7d7ba09c7734058794", "sha256:5528c04c360019c24f2706ce82872c9ab767a8c581beffdfdaf006cce7499cac",
"sha256:f9627c718d480225cbfeeeb7b4a694b9cea3cae67940a4b673770cfaca328a81" "sha256:d65b5574dad8c221344496352245828d9ffecaa0868199eb04ccd2eb2ff09133"
], ],
"version": "==1.16.17" "version": "==1.17.17"
}, },
"certifi": { "certifi": {
"hashes": [ "hashes": [
"sha256:1d987a998c75633c40847cc966fcf5904906c920a7f17ef374f5aa4282abd304", "sha256:5930595817496dd21bb8dc35dad090f1c2cd0adfaf21204bf6732ca5d8ee34d3",
"sha256:51fcb31174be6e6664c5f69e3e1691a2d72a1a12e90f872cbdb1567eb47b6519" "sha256:8fc0819f1f30ba15bdb34cceffb9ef04d99f420f68eb75d901e9560b8749fc41"
], ],
"version": "==2020.4.5.1" "version": "==2020.6.20"
}, },
"chardet": { "chardet": {
"hashes": [ "hashes": [
@ -91,11 +99,11 @@
}, },
"django": { "django": {
"hashes": [ "hashes": [
"sha256:69897097095f336d5aeef45b4103dceae51c00afa6d3ae198a2a18e519791b7a", "sha256:edf0ecf6657713b0435b6757e6069466925cae70d634a3283c96b80c01e06191",
"sha256:6ecd229e1815d4fc5240fc98f1cca78c41e7a8cd3e3f2eefadc4735031077916" "sha256:f2250bd35d0f6c23e930c544629934144e5dd39a4c06092e1050c731c1712ba8"
], ],
"index": "pypi", "index": "pypi",
"version": "==2.2.12" "version": "==2.2.14"
}, },
"django-appconf": { "django-appconf": {
"hashes": [ "hashes": [
@ -198,7 +206,8 @@
}, },
"draftjs-exporter": { "draftjs-exporter": {
"hashes": [ "hashes": [
"sha256:5839cbc29d7bce2fb99837a404ca40c3a07313f2a20e2700de7ad6aa9a9a18fb" "sha256:5839cbc29d7bce2fb99837a404ca40c3a07313f2a20e2700de7ad6aa9a9a18fb",
"sha256:d415a9964690a2cddb66a31ef32dd46c277e9b80434b94e39e3043188ed83e33"
], ],
"version": "==2.1.7" "version": "==2.1.7"
}, },
@ -212,10 +221,10 @@
}, },
"faker": { "faker": {
"hashes": [ "hashes": [
"sha256:103c46b9701a151299c5bffe6fefcd4fb5fb04c3b5d06bee4952d36255d44ea2", "sha256:1290f589648bc470b8d98fff1fdff773fe3f46b4ca2cac73ac74668b12cf008e",
"sha256:34ae397aef03a0a17910452f1e8430d57fa59e2d67b20e9b637218e8f7dd22b3" "sha256:c006b3664c270a2cfd4785c5e41ff263d48101c4e920b5961cf9c237131d8418"
], ],
"version": "==4.1.0" "version": "==4.1.1"
}, },
"future": { "future": {
"hashes": [ "hashes": [
@ -262,25 +271,25 @@
}, },
"html5lib": { "html5lib": {
"hashes": [ "hashes": [
"sha256:20b159aa3badc9d5ee8f5c647e5efd02ed2a66ab8d354930bd9ff139fc1dc0a3", "sha256:0d78f8fde1c230e99fe37986a60526d7049ed4bf8a9fadbad5f00e22e58e041d",
"sha256:66cb0dcfdbbc4f9c3ba1a63fdb511ffdbd4f513b2b6d81b80cd26ce6b3fb3736" "sha256:b2e5b40261e20f354d198eae92afc10d750afb487ed5e50f9c4eaf07c184146f"
], ],
"version": "==1.0.1" "version": "==1.1"
}, },
"idna": { "idna": {
"hashes": [ "hashes": [
"sha256:7588d1c14ae4c77d74036e8c22ff447b26d0fde8f007354fd48a7814db15b7cb", "sha256:b307872f855b18632ce0c21c5e45be78c0ea7ae4c15c828c20788b26921eb3f6",
"sha256:a068a21ceac8a4d63dbfd964670474107f541babbd2250d61922f029858365fa" "sha256:b97d804b1e9b523befed77c48dacec60e6dcb0b5391d57af6a65a312a90648c0"
], ],
"version": "==2.9" "version": "==2.10"
}, },
"ipython": { "ipython": {
"hashes": [ "hashes": [
"sha256:5b241b84bbf0eb085d43ae9d46adf38a13b45929ca7774a740990c2c242534bb", "sha256:2dbcc8c27ca7d3cfe4fcdff7f45b27f9a8d3edfa70ff8024a71c7a8eb5f09d64",
"sha256:f0126781d0f959da852fb3089e170ed807388e986a8dd4e6ac44855845b0fb1c" "sha256:9f4fcb31d3b2c533333893b9172264e4821c1ac91839500f31bd43f2c59b3ccf"
], ],
"index": "pypi", "index": "pypi",
"version": "==7.14.0" "version": "==7.16.1"
}, },
"ipython-genutils": { "ipython-genutils": {
"hashes": [ "hashes": [
@ -291,10 +300,10 @@
}, },
"jedi": { "jedi": {
"hashes": [ "hashes": [
"sha256:cd60c93b71944d628ccac47df9a60fec53150de53d42dc10a7fc4b5ba6aae798", "sha256:1ddb0ec78059e8e27ec9eb5098360b4ea0a3dd840bedf21415ea820c21b40a22",
"sha256:df40c97641cb943661d2db4c33c2e1ff75d491189423249e989bcea4464f3030" "sha256:807d5d4f96711a2bcfdd5dfa3b1ae6d09aa53832b182090b222b5efb81f52f63"
], ],
"version": "==0.17.0" "version": "==0.17.1"
}, },
"jmespath": { "jmespath": {
"hashes": [ "hashes": [
@ -323,10 +332,10 @@
}, },
"newrelic": { "newrelic": {
"hashes": [ "hashes": [
"sha256:43dbaf5227b647c1b4b206064fc3367ac14f7b99ce38d11d50e82d49d21ccb76" "sha256:340ebcdb0dd08bfb597c71598d6d8f746a93f7e4921f10b3616c9142c608a14d"
], ],
"index": "pypi", "index": "pypi",
"version": "==5.12.1.141" "version": "==5.14.1.144"
}, },
"packaging": { "packaging": {
"hashes": [ "hashes": [
@ -362,30 +371,19 @@
"sha256:0013f590a8f260df60bcfd65db19d18efc04e7f046c3c82a40e2e2b3292a937c", "sha256:0013f590a8f260df60bcfd65db19d18efc04e7f046c3c82a40e2e2b3292a937c",
"sha256:0b899ee80920bb533f26581af9b4660bc12aff4562555afe74e429101ebf3c94", "sha256:0b899ee80920bb533f26581af9b4660bc12aff4562555afe74e429101ebf3c94",
"sha256:12f29d6c23424f704c66b5b68c02fe0b571504459605cfe36ab8158359b0e1bb", "sha256:12f29d6c23424f704c66b5b68c02fe0b571504459605cfe36ab8158359b0e1bb",
"sha256:135e9aa65150c53f7db85bf2bebb8a0e1a48ea850e80cf66e16dd04fa09d309c",
"sha256:153ec6f18f7b61641e0e6e502acfaf4a06c9aba2ea11c0b4b3578ea9f13a4a4a", "sha256:153ec6f18f7b61641e0e6e502acfaf4a06c9aba2ea11c0b4b3578ea9f13a4a4a",
"sha256:17fe25efc785194d48c38fad85dce470013ba19d2fb66639e149f14bccf1327f",
"sha256:1912b7230459fd53682dae32b83cbd8e5d642ba36d4be18566f00a9c063aa13d", "sha256:1912b7230459fd53682dae32b83cbd8e5d642ba36d4be18566f00a9c063aa13d",
"sha256:1a5b93084e01328a1cb1ecdad99d11d75e881e89a95f88d85b523646553b36c2", "sha256:1a5b93084e01328a1cb1ecdad99d11d75e881e89a95f88d85b523646553b36c2",
"sha256:25193f934d37d836a6b1f4c062ce574a96cbca7c6d9dc8ddfbbac7f9c54deaa4", "sha256:25193f934d37d836a6b1f4c062ce574a96cbca7c6d9dc8ddfbbac7f9c54deaa4",
"sha256:2c042352b430d678db50c78c5214e19638eff8b688941271da2de21fd298dfe5",
"sha256:2e818dbe445e86fc6c266973fe540c35125c42eb2cf13a6095e9adaa89c0deb5",
"sha256:2fcde9954c8882d1c7f93bb828caa34a4c5e3ee69dbc7895dc8652ad972b455a", "sha256:2fcde9954c8882d1c7f93bb828caa34a4c5e3ee69dbc7895dc8652ad972b455a",
"sha256:35f7d998b8e82fb3fb51ff88b30485eb81cd7dd56ec7e1a8deba23eb88532d44", "sha256:35f7d998b8e82fb3fb51ff88b30485eb81cd7dd56ec7e1a8deba23eb88532d44",
"sha256:37cc0339abfa9e295c75d9a7f227d35cb44716feb95057f9449c4a9e9a17daf7",
"sha256:43334f9581cd067945b8898cef9eb5714ee4883f8de0304c011f1dbdb1d4e2aa", "sha256:43334f9581cd067945b8898cef9eb5714ee4883f8de0304c011f1dbdb1d4e2aa",
"sha256:4bd4a71501b6d51db4abc07e1f43f5a6fed0a1a9583cca0b401d6af50284b0db", "sha256:4bd4a71501b6d51db4abc07e1f43f5a6fed0a1a9583cca0b401d6af50284b0db",
"sha256:57aa6198ba8acba1313c3b743e267d821a60cac77e6026caf0b55ca58d3d23be",
"sha256:5b0d657460d9f3615876fec6306e97ca15a471f6169b622d76a47e270998acf1", "sha256:5b0d657460d9f3615876fec6306e97ca15a471f6169b622d76a47e270998acf1",
"sha256:5cd36804f9f06a914a883fe682df5711d16d7b4f44d43189c5f013e7cd91e149",
"sha256:6977cf073d83358b34f93abf5c1f1193b88675fe0e4441e0e28318bc3dcba7a0", "sha256:6977cf073d83358b34f93abf5c1f1193b88675fe0e4441e0e28318bc3dcba7a0",
"sha256:718ec7a122b28d64afc5fbc3a9b99bb0545ef511373cac06fe7624520e82cb20", "sha256:718ec7a122b28d64afc5fbc3a9b99bb0545ef511373cac06fe7624520e82cb20",
"sha256:7dfbefdb3fb911ca9faed307bf309861e9995e36cca6b761c7ba6d9b77a9744a",
"sha256:801cca8923508311bf5d6d0f7da5362552e8208ebd8ec0d7b9f2cd2ff5705734", "sha256:801cca8923508311bf5d6d0f7da5362552e8208ebd8ec0d7b9f2cd2ff5705734",
"sha256:82b172e3264e62372c01b5b009b5b1a02fbb9276cbe5cc57ab00a6d6e5ed9a18",
"sha256:82d1ff571489765df2816785d532e243bde213752156c227fca595723ec5ff42",
"sha256:8580fc58074a16b749905b26cf8363f7b628dd167ba0130f5382cdc91c86b509", "sha256:8580fc58074a16b749905b26cf8363f7b628dd167ba0130f5382cdc91c86b509",
"sha256:931030d1d6282b7900e6b0a7ff9ecdb503b5e1e6781800dab2b71a9f39405bff",
"sha256:9525cd680a6f9e80c6c0af03cf973e6505c59f60b4745f682cd1a449e54b31bb", "sha256:9525cd680a6f9e80c6c0af03cf973e6505c59f60b4745f682cd1a449e54b31bb",
"sha256:a224651a81e45ef4f1d0164e256c5f6b4abb49f2ae8f22ba2f3a9d0ff338e608", "sha256:a224651a81e45ef4f1d0164e256c5f6b4abb49f2ae8f22ba2f3a9d0ff338e608",
"sha256:a370d1c570f1d72e877099651e752332444b1c5009381f043c9da5fd47f3ebae", "sha256:a370d1c570f1d72e877099651e752332444b1c5009381f043c9da5fd47f3ebae",
@ -394,12 +392,7 @@
"sha256:b85f703c2ffe539313e39ce0676bed0f355cec45a16e58c9ab7417445843047c", "sha256:b85f703c2ffe539313e39ce0676bed0f355cec45a16e58c9ab7417445843047c",
"sha256:b9f63451084a718eccdeb1e382768c94647915653af4d6019f64560d9e98642b", "sha256:b9f63451084a718eccdeb1e382768c94647915653af4d6019f64560d9e98642b",
"sha256:c793dfaa130847ccff958492b76ae8b9304e60b8a79a92962cb19e368276a22b", "sha256:c793dfaa130847ccff958492b76ae8b9304e60b8a79a92962cb19e368276a22b",
"sha256:d60c1625b108432ace8b1fa1a584017e5efa73f107d0f493c7f39c79bebf1d41", "sha256:ddd16ab250b4fc97db1c47407e78c25216a75c29d29d10ad37e51b7a2ec7b2c3"
"sha256:dc4b018d5c9b636f7546583c5591b9ea00c328c3e5871992ef5b95bac353f097",
"sha256:ddd16ab250b4fc97db1c47407e78c25216a75c29d29d10ad37e51b7a2ec7b2c3",
"sha256:e126ff4fed71e78333840c07279e1617f63cfca76d63ad5b27d65a7277206a3d",
"sha256:f8d49be8c282df8d2e1ab6ab53ab8abd859b1fa6fed384457ee85c9eff64ef97",
"sha256:fcf64c91fd44485100a2965d23bb0e227d093e91f7e776c5ca3b32574766eb56"
], ],
"index": "pypi", "index": "pypi",
"version": "==5.0.0" "version": "==5.0.0"
@ -522,11 +515,11 @@
}, },
"requests": { "requests": {
"hashes": [ "hashes": [
"sha256:43999036bfa82904b6af1d99e4882b560e5e2c68e5c4b0aa03b655f3d7d73fee", "sha256:b3559a131db72c33ee969480840fff4bb6dd111de7dd27c8ee1f820f4f00231b",
"sha256:b3f43d496c6daba4493e7c431722aeb7dbc6288f52a6e04e7b6023b0247817e6" "sha256:fe75cc94a9443b9246fc7049224f75604b113c36acb93f87b80ed42c44cbb898"
], ],
"index": "pypi", "index": "pypi",
"version": "==2.23.0" "version": "==2.24.0"
}, },
"rjsmin": { "rjsmin": {
"hashes": [ "hashes": [
@ -562,10 +555,10 @@
}, },
"sendgrid": { "sendgrid": {
"hashes": [ "hashes": [
"sha256:38c0853494c7bfbef64f33934c25bf98bb7648cf0e66a0cfb22410927e4ef4c7", "sha256:54e51ca9afbfe1a4706864f42eb1a12d597e375249d80a8ce679e7a4fa91e776",
"sha256:838e1f7b0f84d56714be6a18ef66fbcf8fba0bda782eee35c47c04d7a16efde8" "sha256:dd0eddf079be040172a4d0afdf9b9becb4e53210ead015a0e6b2d680eea92ac0"
], ],
"version": "==6.3.1" "version": "==6.4.1"
}, },
"sentry-sdk": { "sentry-sdk": {
"hashes": [ "hashes": [
@ -596,6 +589,12 @@
], ],
"version": "==0.3.1" "version": "==0.3.1"
}, },
"starkbank-ecdsa": {
"hashes": [
"sha256:cd17ec9fa7ad8ae3fc81a63ddb7e0d7fb798a048e40c1a9c55afd1a207d1eff9"
],
"version": "==1.0.0"
},
"text-unidecode": { "text-unidecode": {
"hashes": [ "hashes": [
"sha256:1311f10e8b895935241623731c2ba64f4c455287888b18189350b67134a822e8", "sha256:1311f10e8b895935241623731c2ba64f4c455287888b18189350b67134a822e8",
@ -638,6 +637,7 @@
"sha256:3018294ebefce6572a474f0604c2021e33b3fd8006ecd11d62107a5d2a963527", "sha256:3018294ebefce6572a474f0604c2021e33b3fd8006ecd11d62107a5d2a963527",
"sha256:88206b0eb87e6d677d424843ac5209e3fb9d0190d0ee169599165ec25e9d9115" "sha256:88206b0eb87e6d677d424843ac5209e3fb9d0190d0ee169599165ec25e9d9115"
], ],
"markers": "python_version != '3.4'",
"version": "==1.25.9" "version": "==1.25.9"
}, },
"wagtail": { "wagtail": {
@ -658,10 +658,10 @@
}, },
"wcwidth": { "wcwidth": {
"hashes": [ "hashes": [
"sha256:cafe2186b3c009a04067022ce1dcd79cb38d8d65ee4f4791b8888d6599d1bbe1", "sha256:beb4802a9cebb9144e99086eff703a642a13d6a0052920003a230f3294bbe784",
"sha256:ee73862862a156bf77ff92b09034fc4825dd3af9cf81bc5b360668d425f3c5f1" "sha256:c4d647b99872929fdb7bdcaa4fbe7f01413ed3d98077df798530e5b04f116c83"
], ],
"version": "==0.1.9" "version": "==0.2.5"
}, },
"webencodings": { "webencodings": {
"hashes": [ "hashes": [
@ -687,47 +687,55 @@
} }
}, },
"develop": { "develop": {
"appnope": {
"hashes": [
"sha256:5b26757dc6f79a3b7dc9fab95359328d5747fcb2409d331ea66d0272b90ab2a0",
"sha256:8b995ffe925347a2138d7ac0fe77155e4311a0ea6d6da4f5128fe4b3cbe5ed71"
],
"markers": "sys_platform == 'darwin'",
"version": "==0.1.0"
},
"asgiref": { "asgiref": {
"hashes": [ "hashes": [
"sha256:8036f90603c54e93521e5777b2b9a39ba1bad05773fcf2d208f0299d1df58ce5", "sha256:7e51911ee147dd685c3c8b805c0ad0cb58d360987b56953878f8c06d2d1c6f1a",
"sha256:9ca8b952a0a9afa61d30aa6d3d9b570bb3fd6bafcf7ec9e6bed43b936133db1c" "sha256:9fc6fb5d39b8af147ba40765234fa822b39818b12cc80b35ad9b0cef3a476aed"
], ],
"version": "==3.2.7" "version": "==3.2.10"
}, },
"autopep8": { "autopep8": {
"hashes": [ "hashes": [
"sha256:152fd8fe47d02082be86e05001ec23d6f420086db56b17fc883f3f965fb34954" "sha256:60fd8c4341bab59963dafd5d2a566e94f547e660b9b396f772afe67d8481dbf0"
], ],
"version": "==1.5.2" "version": "==1.5.3"
}, },
"awscli": { "awscli": {
"hashes": [ "hashes": [
"sha256:23a65b27b732b00ff42162b03334771f54ff84ade91cff504f870cb931e67a95", "sha256:42f880165290d1eff48e4cca1d7577fb98ee75d5dd295cf63a2963ffa2569137",
"sha256:d853d0d81ef17eb02f9703dca9f221beee0efe8edbb7acb4ec7e2ffdef792eb3" "sha256:d1d2f8defdf83e2d405ca909f94b1007f85edaf1cf7d92cebde69fc480fbf7a9"
], ],
"index": "pypi", "index": "pypi",
"version": "==1.18.67" "version": "==1.18.94"
}, },
"backcall": { "backcall": {
"hashes": [ "hashes": [
"sha256:38ecd85be2c1e78f77fd91700c76e14667dc21e2713b63876c0eb901196e01e4", "sha256:5cbdbf27be5e7cfadb448baf0aa95508f91f2bbc6c6437cd9cd06e2a4c215e1e",
"sha256:bbbf4b1e5cd2bdb08f915895b51081c041bac22394fdfcfdfbe9f14b77c08bf2" "sha256:fbbce6a29f263178a1f7915c1940bde0ec2b2a967566fe1c65c1dfb7422bd255"
], ],
"version": "==0.1.0" "version": "==0.2.0"
}, },
"botocore": { "botocore": {
"hashes": [ "hashes": [
"sha256:cca04cd4bdb092a727772c38808f97e15f07dc609f6fbd7d7ba09c7734058794", "sha256:5528c04c360019c24f2706ce82872c9ab767a8c581beffdfdaf006cce7499cac",
"sha256:f9627c718d480225cbfeeeb7b4a694b9cea3cae67940a4b673770cfaca328a81" "sha256:d65b5574dad8c221344496352245828d9ffecaa0868199eb04ccd2eb2ff09133"
], ],
"version": "==1.16.17" "version": "==1.17.17"
}, },
"certifi": { "certifi": {
"hashes": [ "hashes": [
"sha256:1d987a998c75633c40847cc966fcf5904906c920a7f17ef374f5aa4282abd304", "sha256:5930595817496dd21bb8dc35dad090f1c2cd0adfaf21204bf6732ca5d8ee34d3",
"sha256:51fcb31174be6e6664c5f69e3e1691a2d72a1a12e90f872cbdb1567eb47b6519" "sha256:8fc0819f1f30ba15bdb34cceffb9ef04d99f420f68eb75d901e9560b8749fc41"
], ],
"version": "==2020.4.5.1" "version": "==2020.6.20"
}, },
"chardet": { "chardet": {
"hashes": [ "hashes": [
@ -746,40 +754,43 @@
}, },
"coverage": { "coverage": {
"hashes": [ "hashes": [
"sha256:00f1d23f4336efc3b311ed0d807feb45098fc86dee1ca13b3d6768cdab187c8a", "sha256:0fc4e0d91350d6f43ef6a61f64a48e917637e1dcfcba4b4b7d543c628ef82c2d",
"sha256:01333e1bd22c59713ba8a79f088b3955946e293114479bbfc2e37d522be03355", "sha256:10f2a618a6e75adf64329f828a6a5b40244c1c50f5ef4ce4109e904e69c71bd2",
"sha256:0cb4be7e784dcdc050fc58ef05b71aa8e89b7e6636b99967fadbdba694cf2b65", "sha256:12eaccd86d9a373aea59869bc9cfa0ab6ba8b1477752110cb4c10d165474f703",
"sha256:0e61d9803d5851849c24f78227939c701ced6704f337cad0a91e0972c51c1ee7", "sha256:1874bdc943654ba46d28f179c1846f5710eda3aeb265ff029e0ac2b52daae404",
"sha256:1601e480b9b99697a570cea7ef749e88123c04b92d84cedaa01e117436b4a0a9", "sha256:1dcebae667b73fd4aa69237e6afb39abc2f27520f2358590c1b13dd90e32abe7",
"sha256:2742c7515b9eb368718cd091bad1a1b44135cc72468c731302b3d641895b83d1", "sha256:1e58fca3d9ec1a423f1b7f2aa34af4f733cbfa9020c8fe39ca451b6071237405",
"sha256:2d27a3f742c98e5c6b461ee6ef7287400a1956c11421eb574d843d9ec1f772f0", "sha256:214eb2110217f2636a9329bc766507ab71a3a06a8ea30cdeebb47c24dce5972d",
"sha256:402e1744733df483b93abbf209283898e9f0d67470707e3c7516d84f48524f55", "sha256:25fe74b5b2f1b4abb11e103bb7984daca8f8292683957d0738cd692f6a7cc64c",
"sha256:5c542d1e62eece33c306d66fe0a5c4f7f7b3c08fecc46ead86d7916684b36d6c", "sha256:32ecee61a43be509b91a526819717d5e5650e009a8d5eda8631a59c721d5f3b6",
"sha256:5f2294dbf7875b991c381e3d5af2bcc3494d836affa52b809c91697449d0eda6", "sha256:3740b796015b889e46c260ff18b84683fa2e30f0f75a171fb10d2bf9fb91fc70",
"sha256:6402bd2fdedabbdb63a316308142597534ea8e1895f4e7d8bf7476c5e8751fef", "sha256:3b2c34690f613525672697910894b60d15800ac7e779fbd0fccf532486c1ba40",
"sha256:66460ab1599d3cf894bb6baee8c684788819b71a5dc1e8fa2ecc152e5d752019", "sha256:41d88736c42f4a22c494c32cc48a05828236e37c991bd9760f8923415e3169e4",
"sha256:782caea581a6e9ff75eccda79287daefd1d2631cc09d642b6ee2d6da21fc0a4e", "sha256:42fa45a29f1059eda4d3c7b509589cc0343cd6bbf083d6118216830cd1a51613",
"sha256:79a3cfd6346ce6c13145731d39db47b7a7b859c0272f02cdb89a3bdcbae233a0", "sha256:4bb385a747e6ae8a65290b3df60d6c8a692a5599dc66c9fa3520e667886f2e10",
"sha256:7a5bdad4edec57b5fb8dae7d3ee58622d626fd3a0be0dfceda162a7035885ecf", "sha256:509294f3e76d3f26b35083973fbc952e01e1727656d979b11182f273f08aa80b",
"sha256:8fa0cbc7ecad630e5b0f4f35b0f6ad419246b02bc750de7ac66db92667996d24", "sha256:5c74c5b6045969b07c9fb36b665c9cac84d6c174a809fc1b21bdc06c7836d9a0",
"sha256:a027ef0492ede1e03a8054e3c37b8def89a1e3c471482e9f046906ba4f2aafd2", "sha256:60a3d36297b65c7f78329b80120f72947140f45b5c7a017ea730f9112b40f2ec",
"sha256:a3f3654d5734a3ece152636aad89f58afc9213c6520062db3978239db122f03c", "sha256:6f91b4492c5cde83bfe462f5b2b997cdf96a138f7c58b1140f05de5751623cf1",
"sha256:a82b92b04a23d3c8a581fc049228bafde988abacba397d57ce95fe95e0338ab4", "sha256:7403675df5e27745571aba1c957c7da2dacb537c21e14007ec3a417bf31f7f3d",
"sha256:acf3763ed01af8410fc36afea23707d4ea58ba7e86a8ee915dfb9ceff9ef69d0", "sha256:87bdc8135b8ee739840eee19b184804e5d57f518578ffc797f5afa2c3c297913",
"sha256:adeb4c5b608574a3d647011af36f7586811a2c1197c861aedb548dd2453b41cd", "sha256:8a3decd12e7934d0254939e2bf434bf04a5890c5bf91a982685021786a08087e",
"sha256:b83835506dfc185a319031cf853fa4bb1b3974b1f913f5bb1a0f3d98bdcded04", "sha256:9702e2cb1c6dec01fb8e1a64c015817c0800a6eca287552c47a5ee0ebddccf62",
"sha256:bb28a7245de68bf29f6fb199545d072d1036a1917dca17a1e75bbb919e14ee8e", "sha256:a4d511012beb967a39580ba7d2549edf1e6865a33e5fe51e4dce550522b3ac0e",
"sha256:bf9cb9a9fd8891e7efd2d44deb24b86d647394b9705b744ff6f8261e6f29a730", "sha256:bbb387811f7a18bdc61a2ea3d102be0c7e239b0db9c83be7bfa50f095db5b92a",
"sha256:c317eaf5ff46a34305b202e73404f55f7389ef834b8dbf4da09b9b9b37f76dd2", "sha256:bfcc811883699ed49afc58b1ed9f80428a18eb9166422bce3c31a53dba00fd1d",
"sha256:dbe8c6ae7534b5b024296464f387d57c13caa942f6d8e6e0346f27e509f0f768", "sha256:c32aa13cc3fe86b0f744dfe35a7f879ee33ac0a560684fef0f3e1580352b818f",
"sha256:de807ae933cfb7f0c7d9d981a053772452217df2bf38e7e6267c9cbf9545a796", "sha256:ca63dae130a2e788f2b249200f01d7fa240f24da0596501d387a50e57aa7075e",
"sha256:dead2ddede4c7ba6cb3a721870f5141c97dc7d85a079edb4bd8d88c3ad5b20c7", "sha256:d54d7ea74cc00482a2410d63bf10aa34ebe1c49ac50779652106c867f9986d6b",
"sha256:dec5202bfe6f672d4511086e125db035a52b00f1648d6407cc8e526912c0353a", "sha256:d67599521dff98ec8c34cd9652cbcfe16ed076a2209625fca9dc7419b6370e5c",
"sha256:e1ea316102ea1e1770724db01998d1603ed921c54a86a2efcb03428d5417e489", "sha256:d82db1b9a92cb5c67661ca6616bdca6ff931deceebb98eecbd328812dab52032",
"sha256:f90bfc4ad18450c80b024036eaf91e4a246ae287701aaa88eaebebf150868052" "sha256:d9ad0a988ae20face62520785ec3595a5e64f35a21762a57d115dae0b8fb894a",
"sha256:ebf2431b2d457ae5217f3a1179533c456f3272ded16f8ed0b32961a6d90e38ee",
"sha256:ed9a21502e9223f563e071759f769c3d6a2e1ba5328c31e86830368e8d78bc9c",
"sha256:f50632ef2d749f541ca8e6c07c9928a37f87505ce3a9f20c8446ad310f1aa87b"
], ],
"index": "pypi", "index": "pypi",
"version": "==5.1" "version": "==5.2"
}, },
"decorator": { "decorator": {
"hashes": [ "hashes": [
@ -790,11 +801,11 @@
}, },
"django": { "django": {
"hashes": [ "hashes": [
"sha256:69897097095f336d5aeef45b4103dceae51c00afa6d3ae198a2a18e519791b7a", "sha256:edf0ecf6657713b0435b6757e6069466925cae70d634a3283c96b80c01e06191",
"sha256:6ecd229e1815d4fc5240fc98f1cca78c41e7a8cd3e3f2eefadc4735031077916" "sha256:f2250bd35d0f6c23e930c544629934144e5dd39a4c06092e1050c731c1712ba8"
], ],
"index": "pypi", "index": "pypi",
"version": "==2.2.12" "version": "==2.2.14"
}, },
"django-silk": { "django-silk": {
"hashes": [ "hashes": [
@ -819,25 +830,25 @@
}, },
"idna": { "idna": {
"hashes": [ "hashes": [
"sha256:7588d1c14ae4c77d74036e8c22ff447b26d0fde8f007354fd48a7814db15b7cb", "sha256:b307872f855b18632ce0c21c5e45be78c0ea7ae4c15c828c20788b26921eb3f6",
"sha256:a068a21ceac8a4d63dbfd964670474107f541babbd2250d61922f029858365fa" "sha256:b97d804b1e9b523befed77c48dacec60e6dcb0b5391d57af6a65a312a90648c0"
], ],
"version": "==2.9" "version": "==2.10"
}, },
"ipdb": { "ipdb": {
"hashes": [ "hashes": [
"sha256:77fb1c2a6fccdfee0136078c9ed6fe547ab00db00bebff181f1e8c9e13418d49" "sha256:d6f46d261c45a65e65a2f7ec69288a1c511e16206edb2875e7ec6b2f66997e78"
], ],
"index": "pypi", "index": "pypi",
"version": "==0.13.2" "version": "==0.13.3"
}, },
"ipython": { "ipython": {
"hashes": [ "hashes": [
"sha256:5b241b84bbf0eb085d43ae9d46adf38a13b45929ca7774a740990c2c242534bb", "sha256:2dbcc8c27ca7d3cfe4fcdff7f45b27f9a8d3edfa70ff8024a71c7a8eb5f09d64",
"sha256:f0126781d0f959da852fb3089e170ed807388e986a8dd4e6ac44855845b0fb1c" "sha256:9f4fcb31d3b2c533333893b9172264e4821c1ac91839500f31bd43f2c59b3ccf"
], ],
"index": "pypi", "index": "pypi",
"version": "==7.14.0" "version": "==7.16.1"
}, },
"ipython-genutils": { "ipython-genutils": {
"hashes": [ "hashes": [
@ -848,10 +859,10 @@
}, },
"jedi": { "jedi": {
"hashes": [ "hashes": [
"sha256:cd60c93b71944d628ccac47df9a60fec53150de53d42dc10a7fc4b5ba6aae798", "sha256:1ddb0ec78059e8e27ec9eb5098360b4ea0a3dd840bedf21415ea820c21b40a22",
"sha256:df40c97641cb943661d2db4c33c2e1ff75d491189423249e989bcea4464f3030" "sha256:807d5d4f96711a2bcfdd5dfa3b1ae6d09aa53832b182090b222b5efb81f52f63"
], ],
"version": "==0.17.0" "version": "==0.17.1"
}, },
"jinja2": { "jinja2": {
"hashes": [ "hashes": [
@ -943,19 +954,8 @@
}, },
"pyasn1": { "pyasn1": {
"hashes": [ "hashes": [
"sha256:014c0e9976956a08139dc0712ae195324a75e142284d5f87f1a87ee1b068a359",
"sha256:03840c999ba71680a131cfaee6fab142e1ed9bbd9c693e285cc6aca0d555e576",
"sha256:0458773cfe65b153891ac249bcf1b5f8f320b7c2ce462151f8fa74de8934becf",
"sha256:08c3c53b75eaa48d71cf8c710312316392ed40899cb34710d092e96745a358b7",
"sha256:39c7e2ec30515947ff4e87fb6f456dfc6e84857d34be479c9d4a4ba4bf46aa5d", "sha256:39c7e2ec30515947ff4e87fb6f456dfc6e84857d34be479c9d4a4ba4bf46aa5d",
"sha256:5c9414dcfede6e441f7e8f81b43b34e834731003427e5b09e4e00e3172a10f00", "sha256:aef77c9fb94a3ac588e87841208bdec464471d9871bd5050a287cc9a475cd0ba"
"sha256:6e7545f1a61025a4e58bb336952c5061697da694db1cae97b116e9c46abcf7c8",
"sha256:78fa6da68ed2727915c4767bb386ab32cdba863caa7dbe473eaae45f9959da86",
"sha256:7ab8a544af125fb704feadb008c99a88805126fb525280b2270bb25cc1d78a12",
"sha256:99fcc3c8d804d1bc6d9a099921e39d827026409a58f2a720dcdb89374ea0c776",
"sha256:aef77c9fb94a3ac588e87841208bdec464471d9871bd5050a287cc9a475cd0ba",
"sha256:e89bf84b5437b532b0803ba5c9a5e054d21fec423a89952a74f87fa2c9b7bce2",
"sha256:fec3e9d8e36808a28efb59b489e4528c10ad0f480e57dcc32b4de5c9d8c9fdf3"
], ],
"version": "==0.4.8" "version": "==0.4.8"
}, },
@ -1006,11 +1006,11 @@
}, },
"requests": { "requests": {
"hashes": [ "hashes": [
"sha256:43999036bfa82904b6af1d99e4882b560e5e2c68e5c4b0aa03b655f3d7d73fee", "sha256:b3559a131db72c33ee969480840fff4bb6dd111de7dd27c8ee1f820f4f00231b",
"sha256:b3f43d496c6daba4493e7c431722aeb7dbc6288f52a6e04e7b6023b0247817e6" "sha256:fe75cc94a9443b9246fc7049224f75604b113c36acb93f87b80ed42c44cbb898"
], ],
"index": "pypi", "index": "pypi",
"version": "==2.23.0" "version": "==2.24.0"
}, },
"rsa": { "rsa": {
"hashes": [ "hashes": [
@ -1040,6 +1040,13 @@
], ],
"version": "==0.3.1" "version": "==0.3.1"
}, },
"toml": {
"hashes": [
"sha256:926b612be1e5ce0634a2ca03470f95169cf16f939018233a670519cb4ac58b0f",
"sha256:bda89d5935c2eac546d648028b9901107a595863cb36bae0c73ac804a9b4ce88"
],
"version": "==0.10.1"
},
"traitlets": { "traitlets": {
"hashes": [ "hashes": [
"sha256:70b4c6a1d9019d7b4f6846832288f86998aa3b9207c6821f3578a6a6a467fe44", "sha256:70b4c6a1d9019d7b4f6846832288f86998aa3b9207c6821f3578a6a6a467fe44",
@ -1052,14 +1059,15 @@
"sha256:3018294ebefce6572a474f0604c2021e33b3fd8006ecd11d62107a5d2a963527", "sha256:3018294ebefce6572a474f0604c2021e33b3fd8006ecd11d62107a5d2a963527",
"sha256:88206b0eb87e6d677d424843ac5209e3fb9d0190d0ee169599165ec25e9d9115" "sha256:88206b0eb87e6d677d424843ac5209e3fb9d0190d0ee169599165ec25e9d9115"
], ],
"markers": "python_version != '3.4'",
"version": "==1.25.9" "version": "==1.25.9"
}, },
"wcwidth": { "wcwidth": {
"hashes": [ "hashes": [
"sha256:cafe2186b3c009a04067022ce1dcd79cb38d8d65ee4f4791b8888d6599d1bbe1", "sha256:beb4802a9cebb9144e99086eff703a642a13d6a0052920003a230f3294bbe784",
"sha256:ee73862862a156bf77ff92b09034fc4825dd3af9cf81bc5b360668d425f3c5f1" "sha256:c4d647b99872929fdb7bdcaa4fbe7f01413ed3d98077df798530e5b04f116c83"
], ],
"version": "==0.1.9" "version": "==0.2.5"
} }
} }
} }

View File

@ -6,14 +6,36 @@ import requests
logger = logging.getLogger(__name__) logger = logging.getLogger(__name__)
TEACHER_EDITION_DURATION = 365
STUDENT_EDITION_DURATION = 4*365
TEACHER_KEY = 'teacher' TEACHER_KEY = 'teacher'
STUDENT_KEY = 'student' STUDENT_KEY = 'student'
MYSKILLBOX_TEACHER_EDITION_ISBN = "978-3-0355-1823-8" MYSKILLBOX_LICENSES = {
MYSKILLBOX_STUDENT_EDITION_ISBN = "978-3-0355-1397-4" "978-3-0355-1397-4": {
'edition': STUDENT_KEY,
'duration': 4 * 365,
'name': 'Student 4 years'
},
"978-3-0355-1860-3": {
'edition': STUDENT_KEY,
'duration': 365,
'name': 'Student 1 year'
},
"978-3-0355-1862-7": {
'edition': STUDENT_KEY,
'duration': 30,
'name': 'Student test 1 month'
},
"978-3-0355-1861-0": {
'edition': TEACHER_KEY,
'duration': 30,
'name': 'Teacher test 1 month'
},
"978-3-0355-1823-8": {
'edition': TEACHER_KEY,
'duration': 365,
'name': 'Teacher 1 year'
}
}
class HepClientException(Exception): class HepClientException(Exception):
@ -151,22 +173,16 @@ class HepClient:
if 'order_id' in item: if 'order_id' in item:
order_id = item['order_id'] order_id = item['order_id']
if item['sku'] == MYSKILLBOX_TEACHER_EDITION_ISBN or \ if item['sku'] in list(MYSKILLBOX_LICENSES.keys()):
item['sku'] == MYSKILLBOX_STUDENT_EDITION_ISBN:
product = { product = {
'raw': item, 'raw': item,
'activated': self._get_item_activation(order_item), 'activated': self._get_item_activation(order_item),
'status': status, 'status': status,
'order_id': order_id 'order_id': order_id,
'license': MYSKILLBOX_LICENSES[item['sku']],
'isbn': item['sku']
} }
if item['sku'] == MYSKILLBOX_TEACHER_EDITION_ISBN:
product['edition'] = TEACHER_KEY
else:
product['edition'] = STUDENT_KEY
products.append(product) products.append(product)
return products return products
@ -182,12 +198,9 @@ class HepClient:
if product['status'] != 'complete': if product['status'] != 'complete':
return False return False
if product['edition'] == TEACHER_KEY: expiry_delta = product['activated'] + timedelta(product['license']['duration'])
expiry_delta = product['activated'] + timedelta(TEACHER_EDITION_DURATION)
else:
expiry_delta = product['activated'] + timedelta(STUDENT_EDITION_DURATION)
if HepClient.is_product_active(expiry_delta, product['edition']): if HepClient.is_product_active(expiry_delta, product['isbn']):
return True return True
else: else:
return False return False
@ -206,7 +219,7 @@ class HepClient:
# select first teacher product, as they are all valid it does not matter which one # select first teacher product, as they are all valid it does not matter which one
for product in active_products: for product in active_products:
if product['edition'] == TEACHER_KEY: if product['license']['edition'] == TEACHER_KEY:
teacher_edition = product teacher_edition = product
break break
@ -217,12 +230,7 @@ class HepClient:
return teacher_edition return teacher_edition
@staticmethod @staticmethod
def is_product_active(expiry_date, edition): def is_product_active(expiry_date, isbn):
if edition == TEACHER_KEY:
duration = TEACHER_EDITION_DURATION
else:
duration = STUDENT_EDITION_DURATION
now = datetime.now() now = datetime.now()
return expiry_date >= now >= expiry_date - timedelta(days=duration) return expiry_date >= now >= expiry_date - timedelta(days=MYSKILLBOX_LICENSES[isbn]['duration'])

View File

@ -30,7 +30,7 @@ class ApiAccessTestCase(TestCase):
def test_publicGraphqlEndpoint_shouldBeAccessibleWithoutLogin(self): def test_publicGraphqlEndpoint_shouldBeAccessibleWithoutLogin(self):
query= json.dumps({ query = json.dumps({
'operationName': 'BetaLogin', 'operationName': 'BetaLogin',
'query': ''' 'query': '''
mutation BetaLogin($input: BetaLoginInput!){ mutation BetaLogin($input: BetaLoginInput!){

View File

@ -2,7 +2,15 @@ import json
from datetime import datetime, timedelta from datetime import datetime, timedelta
from django.test import TestCase from django.test import TestCase
from core.hep_client import HepClient, TEACHER_EDITION_DURATION from core.hep_client import HepClient, MYSKILLBOX_LICENSES
ISBNS = list(MYSKILLBOX_LICENSES.keys())
STUDENT_ISBN = ISBNS[0]
STUDENT_LICENSE = MYSKILLBOX_LICENSES[STUDENT_ISBN]
TEACHER_ISBN = ISBNS[-1]
TEACHER_LICENSE = MYSKILLBOX_LICENSES[TEACHER_ISBN]
class HepClientTestCases(TestCase): class HepClientTestCases(TestCase):
@ -13,21 +21,24 @@ class HepClientTestCases(TestCase):
def test_has_no_valid_product(self): def test_has_no_valid_product(self):
products = [ products = [
{ {
'edition': 'teacher', 'license': TEACHER_LICENSE,
'isbn': TEACHER_ISBN,
'raw': {}, 'raw': {},
'activated': self.now - timedelta(2*TEACHER_EDITION_DURATION), 'activated': self.now - timedelta(2*TEACHER_LICENSE['duration']),
'status': 'complete' 'status': 'complete'
}, },
{ {
'edition': 'teacher', 'license': TEACHER_LICENSE,
'isbn': TEACHER_ISBN,
'raw': {}, 'raw': {},
'activated': self.now - timedelta(3 * TEACHER_EDITION_DURATION), 'activated': self.now - timedelta(3 * TEACHER_LICENSE['duration']),
'status': 'complete' 'status': 'complete'
}, },
{ {
'edition': 'teacher', 'license': TEACHER_LICENSE,
'isbn': TEACHER_ISBN,
'raw': {}, 'raw': {},
'activated': self.now - timedelta(4 * TEACHER_EDITION_DURATION), 'activated': self.now - timedelta(4 * TEACHER_LICENSE['duration']),
'status': 'complete' 'status': 'complete'
} }
] ]
@ -38,7 +49,8 @@ class HepClientTestCases(TestCase):
def test_has_no_not_completed_product(self): def test_has_no_not_completed_product(self):
products = [ products = [
{ {
'edition': 'teacher', 'license': TEACHER_LICENSE,
'isbn': TEACHER_ISBN,
'raw': {}, 'raw': {},
'activated': self.now - timedelta(7), 'activated': self.now - timedelta(7),
'status': 'not' 'status': 'not'
@ -51,7 +63,8 @@ class HepClientTestCases(TestCase):
def test_has_valid_product(self): def test_has_valid_product(self):
products = [ products = [
{ {
'edition': 'teacher', 'license': TEACHER_LICENSE,
'isbn': TEACHER_ISBN,
'raw': { 'raw': {
'id': 0 'id': 0
}, },
@ -59,19 +72,21 @@ class HepClientTestCases(TestCase):
'status': 'complete' 'status': 'complete'
}, },
{ {
'edition': 'teacher', 'license': TEACHER_LICENSE,
'isbn': TEACHER_ISBN,
'raw': { 'raw': {
'id': 1 'id': 1
}, },
'activated': self.now - timedelta(3 * TEACHER_EDITION_DURATION), 'activated': self.now - timedelta(3 * TEACHER_LICENSE['duration']),
'status': 'complete' 'status': 'complete'
}, },
{ {
'edition': 'teacher', 'license': TEACHER_LICENSE,
'isbn': TEACHER_ISBN,
'raw': { 'raw': {
'id': 2 'id': 2
}, },
'activated': self.now - timedelta(4 * TEACHER_EDITION_DURATION), 'activated': self.now - timedelta(4 * TEACHER_LICENSE['duration']),
'status': 'complete' 'status': 'complete'
} }
] ]
@ -82,7 +97,8 @@ class HepClientTestCases(TestCase):
def test_has_multiple_valid_teacher_products_but_only_one_active(self): def test_has_multiple_valid_teacher_products_but_only_one_active(self):
products = [ products = [
{ {
'edition': 'teacher', 'license': TEACHER_LICENSE,
'isbn': TEACHER_ISBN,
'raw': { 'raw': {
'id': 0 'id': 0
}, },
@ -90,19 +106,21 @@ class HepClientTestCases(TestCase):
'status': 'complete' 'status': 'complete'
}, },
{ {
'edition': 'teacher', 'license': TEACHER_LICENSE,
'isbn': TEACHER_ISBN,
'raw': { 'raw': {
'id': 1 'id': 1
}, },
'activated': self.now - timedelta(3 * TEACHER_EDITION_DURATION), 'activated': self.now - timedelta(3 * TEACHER_LICENSE['duration']),
'status': 'complete' 'status': 'complete'
}, },
{ {
'edition': 'teacher', 'license': TEACHER_LICENSE,
'isbn': TEACHER_ISBN,
'raw': { 'raw': {
'id': 2 'id': 2
}, },
'activated': self.now - timedelta(4 * TEACHER_EDITION_DURATION), 'activated': self.now - timedelta(4 * TEACHER_LICENSE['duration']),
'status': 'complete' 'status': 'complete'
} }
] ]
@ -113,7 +131,8 @@ class HepClientTestCases(TestCase):
def test_has_valid_student_and_teacher_edition(self): def test_has_valid_student_and_teacher_edition(self):
products = [ products = [
{ {
'edition': 'student', 'license': STUDENT_LICENSE,
'isbn': STUDENT_ISBN,
'raw': { 'raw': {
'id': 0 'id': 0
}, },
@ -121,7 +140,8 @@ class HepClientTestCases(TestCase):
'status': 'complete' 'status': 'complete'
}, },
{ {
'edition': 'teacher', 'license': TEACHER_LICENSE,
'isbn': TEACHER_ISBN,
'raw': { 'raw': {
'id': 1 'id': 1
}, },
@ -137,12 +157,12 @@ class HepClientTestCases(TestCase):
expiry_date = self.now + timedelta(3) expiry_date = self.now + timedelta(3)
is_active = HepClient.is_product_active(expiry_date, 'teacher') is_active = HepClient.is_product_active(expiry_date, TEACHER_ISBN)
self.assertTrue(is_active) self.assertTrue(is_active)
def test_product_is_not_active(self): def test_product_is_not_active(self):
expiry_date = self.now - timedelta(3 * TEACHER_EDITION_DURATION) expiry_date = self.now - timedelta(3 * TEACHER_LICENSE['duration'])
is_active = HepClient.is_product_active(expiry_date, 'teacher') is_active = HepClient.is_product_active(expiry_date, TEACHER_ISBN)
self.assertFalse(is_active) self.assertFalse(is_active)

View File

@ -2,7 +2,7 @@ from django.contrib import admin
from django.contrib.auth.admin import UserAdmin from django.contrib.auth.admin import UserAdmin
from users.forms import CustomUserCreationForm, CustomUserChangeForm from users.forms import CustomUserCreationForm, CustomUserChangeForm
from .models import User, SchoolClass, Role, UserRole, UserSetting, License from .models import User, SchoolClass, Role, UserRole, UserSetting, License, UserData
class SchoolClassInline(admin.TabularInline): class SchoolClassInline(admin.TabularInline):
@ -72,6 +72,13 @@ class UserSettingAdmin(admin.ModelAdmin):
@admin.register(License) @admin.register(License)
class LicenseAdmin(admin.ModelAdmin): class LicenseAdmin(admin.ModelAdmin):
list_display = ('licensee',) list_display = ('licensee', 'for_role', 'expire_date', 'isbn')
list_filter = ('licensee',) list_filter = ('licensee', 'expire_date')
raw_id_fields = ('licensee',) raw_id_fields = ('licensee',)
@admin.register(UserData)
class UserDataAdmin(admin.ModelAdmin):
list_display = ('user', 'accepted_terms')
list_filter = ('accepted_terms',)
raw_id_fields = ('user',)

View File

@ -24,7 +24,8 @@ class Command(BaseCommand):
if product and License.objects.filter(licensee=hep_user, order_id=product['order_id']).count() == 0: if product and License.objects.filter(licensee=hep_user, order_id=product['order_id']).count() == 0:
license = License.objects.create_license_for_role(hep_user, product['activated'], product['raw'], license = License.objects.create_license_for_role(hep_user, product['activated'], product['raw'],
product['edition'], product['order_id']) product['license']['edition'], product['order_id'],
product['isbn'])
if license.is_valid(): if license.is_valid():
hep_user.license_expiry_date = license.expire_date hep_user.license_expiry_date = license.expire_date

View File

@ -9,7 +9,7 @@ from django.utils.translation import ugettext_lazy as _
from django.db import models from django.db import models
from django.contrib.auth.models import UserManager as DjangoUserManager from django.contrib.auth.models import UserManager as DjangoUserManager
from core.hep_client import TEACHER_EDITION_DURATION, STUDENT_EDITION_DURATION from core.hep_client import MYSKILLBOX_LICENSES
class RoleManager(models.Manager): class RoleManager(models.Manager):
@ -129,14 +129,14 @@ class UserManager(DjangoUserManager):
class LicenseManager(models.Manager): class LicenseManager(models.Manager):
def create_license_for_role(self, licensee, activation_date, raw, role, order_id): def create_license_for_role(self, licensee, activation_date, raw, role, order_id, isbn):
Role = apps.get_model('users', 'Role') Role = apps.get_model('users', 'Role')
expiry_date = activation_date + timedelta(MYSKILLBOX_LICENSES[isbn]['duration'])
if role == 'teacher': if role == 'teacher':
user_role = Role.objects.get_default_teacher_role() user_role = Role.objects.get_default_teacher_role()
expiry_date = activation_date + timedelta(TEACHER_EDITION_DURATION)
else: else:
user_role = Role.objects.get_default_student_role() user_role = Role.objects.get_default_student_role()
expiry_date = activation_date + timedelta(STUDENT_EDITION_DURATION)
new_license = self._create_license_for_role(licensee, expiry_date, raw, user_role, order_id) new_license = self._create_license_for_role(licensee, expiry_date, raw, user_role, order_id)
new_license.licensee.license_expiry_date = new_license.expire_date new_license.licensee.license_expiry_date = new_license.expire_date

View File

@ -0,0 +1,17 @@
# Generated by Django 2.1.15 on 2020-07-01 12:37
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
('users', '0020_user_recent_modules'),
]
operations = [
migrations.AddField(
model_name='license',
name='isbn',
field=models.CharField(default='978-3-0355-1397-48', max_length=50),
),
]

View File

@ -0,0 +1,29 @@
# Generated by Django 2.1.15 on 2020-07-01 13:42
from django.db import migrations
from users.managers import RoleManager
STUDENT_4Y_ISBN = '978-3-0355-1397-4'
TEACHER_1Y_ISBN = '978-3-0355-1823-8'
def add_isbn_to_license(apps, schema_editor):
License = apps.get_model('users', 'License')
for existing_license in License.objects.all():
if existing_license.for_role.key == RoleManager.TEACHER_KEY:
existing_license.isbn = TEACHER_1Y_ISBN
else:
existing_license.isbn = STUDENT_4Y_ISBN
existing_license.save()
class Migration(migrations.Migration):
dependencies = [
('users', '0021_license_isbn'),
]
operations = [
migrations.RunPython(add_isbn_to_license, migrations.RunPython.noop),
]

View File

@ -9,7 +9,7 @@ from django.core.exceptions import ObjectDoesNotExist
from django.db import models from django.db import models
from django.utils.translation import ugettext_lazy as _ from django.utils.translation import ugettext_lazy as _
from core.hep_client import HepClient from core.hep_client import HepClient, MYSKILLBOX_LICENSES
from users.managers import RoleManager, UserRoleManager, UserManager, LicenseManager from users.managers import RoleManager, UserRoleManager, UserManager, LicenseManager
DEFAULT_SCHOOL_ID = 1 DEFAULT_SCHOOL_ID = 1
@ -248,6 +248,8 @@ class License(models.Model):
expire_date = models.DateField(blank=False, null=True, ) expire_date = models.DateField(blank=False, null=True, )
order_id = models.IntegerField(blank=False, null=False, default=-1) order_id = models.IntegerField(blank=False, null=False, default=-1)
raw = models.TextField(default='') raw = models.TextField(default='')
isbn = models.CharField(max_length=50, blank=False, null=False,
default=list(MYSKILLBOX_LICENSES.keys())[0]) # student license
objects = LicenseManager() objects = LicenseManager()
@ -256,8 +258,7 @@ class License(models.Model):
def is_valid(self): def is_valid(self):
return HepClient.is_product_active( return HepClient.is_product_active(
datetime(self.expire_date.year, self.expire_date.month, self.expire_date.day), datetime(self.expire_date.year, self.expire_date.month, self.expire_date.day), self.isbn)
self.for_role.key)
def __str__(self): def __str__(self):
return f'License for role: {self.for_role}' return f'License for role: {self.for_role}'

View File

@ -48,7 +48,8 @@ def check_and_create_licenses(hep_client, user):
if product: if product:
license = License.objects.create_license_for_role(user, product['activated'], product['raw'], license = License.objects.create_license_for_role(user, product['activated'], product['raw'],
product['edition'], product['order_id']) product['license']['edition'],
product['order_id'], product['isbn'])
# todo handle no license case # todo handle no license case
else: else:
return None, NO_VALID_LICENSE return None, NO_VALID_LICENSE