diff --git a/.env.sample b/.env.sample index 0183472c..8bdd297d 100644 --- a/.env.sample +++ b/.env.sample @@ -1,7 +1,6 @@ DEBUG=True ENABLE_DEV_FIXTURES=True -SITE_NAME=We All Code SITE_URL=http://localhost:8000 SECRET_KEY=CHANGEME DJANGO_SECURE_SSL_REDIRECT=False diff --git a/Pipfile b/Pipfile index abff5394..91350354 100644 --- a/Pipfile +++ b/Pipfile @@ -33,7 +33,7 @@ json-logging-py = "*" django-anymail = "*" django-meta = "*" django-environ = "*" -sentry-sdk = "==0.14.3" +sentry-sdk = "*" django-fullurl = "*" [dev-packages] diff --git a/Pipfile.lock b/Pipfile.lock index 4a516718..b0543902 100644 --- a/Pipfile.lock +++ b/Pipfile.lock @@ -1,7 +1,7 @@ { "_meta": { "hash": { - "sha256": "f03113c1c3b7ec0d830111c1684e75b6435ff46032d2b0c6014df742daea28e5" + "sha256": "657c59f45970263cfd717b260ed8371493c6db60acd47734f33ee8b234492464" }, "pipfile-spec": 6, "requires": { @@ -26,40 +26,101 @@ }, "asgiref": { "hashes": [ - "sha256:7e51911ee147dd685c3c8b805c0ad0cb58d360987b56953878f8c06d2d1c6f1a", - "sha256:9fc6fb5d39b8af147ba40765234fa822b39818b12cc80b35ad9b0cef3a476aed" + "sha256:5ee950735509d04eb673bd7f7120f8fa1c9e2df495394992c73234d526907e17", + "sha256:7162a3cb30ab0609f1a4c95938fd73e8604f63bdba516a7f7d64b83ff09478f0" ], "markers": "python_version >= '3.5'", - "version": "==3.2.10" + "version": "==3.3.1" }, "boto3": { "hashes": [ - "sha256:454a8dfb7b367a058c7967ef6b4e2a192c318f10761769fd1003cf7f2f5a7db9", - "sha256:557320fe8b65cfc85953e6a63d2328e8efec95bf4ec383b92fa2d01119209716" + "sha256:ba8de10d3ede338d51ae47e428b97dcc1d1b507741aa98697e63e879a147f4aa", + "sha256:e3f10ed6d9ca98415fdec15c85e50a89ec38d6229bce3fafd5e7965b16c4ebc5" ], "index": "pypi", - "version": "==1.15.16" + "version": "==1.16.44" }, "botocore": { "hashes": [ - "sha256:e586e4d6eddbca31e6447a25df9972329ea3de64b1fb0eb17e7ab0c9b91f7720", - "sha256:f0616d2c719691b94470307cee8adf89ceb1657b7b6f9aa1bf61f9de5543dbbb" + "sha256:4ff05bc089ba78a5996f06dcfddf8ca51583e30ce779ed95e9952e90c1907420", + "sha256:7725e08c95ae96c4dbd955cb4ae44a0c06d3e41f76a7feb0a941c27a44c63113" ], - "version": "==1.18.16" + "version": "==1.19.44" }, "certifi": { "hashes": [ - "sha256:5930595817496dd21bb8dc35dad090f1c2cd0adfaf21204bf6732ca5d8ee34d3", - "sha256:8fc0819f1f30ba15bdb34cceffb9ef04d99f420f68eb75d901e9560b8749fc41" - ], - "version": "==2020.6.20" + "sha256:1a4995114262bffbc2413b159f2a1a480c969de6e6eb13ee966d470af86af59c", + "sha256:719a74fb9e33b9bd44cc7f3a8d94bc35e4049deebe19ba7d8e108280cfd59830" + ], + "version": "==2020.12.5" + }, + "cffi": { + "hashes": [ + "sha256:00a1ba5e2e95684448de9b89888ccd02c98d512064b4cb987d48f4b40aa0421e", + "sha256:00e28066507bfc3fe865a31f325c8391a1ac2916219340f87dfad602c3e48e5d", + "sha256:045d792900a75e8b1e1b0ab6787dd733a8190ffcf80e8c8ceb2fb10a29ff238a", + "sha256:0638c3ae1a0edfb77c6765d487fee624d2b1ee1bdfeffc1f0b58c64d149e7eec", + "sha256:105abaf8a6075dc96c1fe5ae7aae073f4696f2905fde6aeada4c9d2926752362", + "sha256:155136b51fd733fa94e1c2ea5211dcd4c8879869008fc811648f16541bf99668", + "sha256:1a465cbe98a7fd391d47dce4b8f7e5b921e6cd805ef421d04f5f66ba8f06086c", + "sha256:1d2c4994f515e5b485fd6d3a73d05526aa0fcf248eb135996b088d25dfa1865b", + "sha256:2c24d61263f511551f740d1a065eb0212db1dbbbbd241db758f5244281590c06", + "sha256:51a8b381b16ddd370178a65360ebe15fbc1c71cf6f584613a7ea08bfad946698", + "sha256:594234691ac0e9b770aee9fcdb8fa02c22e43e5c619456efd0d6c2bf276f3eb2", + "sha256:5cf4be6c304ad0b6602f5c4e90e2f59b47653ac1ed9c662ed379fe48a8f26b0c", + "sha256:64081b3f8f6f3c3de6191ec89d7dc6c86a8a43911f7ecb422c60e90c70be41c7", + "sha256:6bc25fc545a6b3d57b5f8618e59fc13d3a3a68431e8ca5fd4c13241cd70d0009", + "sha256:798caa2a2384b1cbe8a2a139d80734c9db54f9cc155c99d7cc92441a23871c03", + "sha256:7c6b1dece89874d9541fc974917b631406233ea0440d0bdfbb8e03bf39a49b3b", + "sha256:840793c68105fe031f34d6a086eaea153a0cd5c491cde82a74b420edd0a2b909", + "sha256:8d6603078baf4e11edc4168a514c5ce5b3ba6e3e9c374298cb88437957960a53", + "sha256:9cc46bc107224ff5b6d04369e7c595acb700c3613ad7bcf2e2012f62ece80c35", + "sha256:9f7a31251289b2ab6d4012f6e83e58bc3b96bd151f5b5262467f4bb6b34a7c26", + "sha256:9ffb888f19d54a4d4dfd4b3f29bc2c16aa4972f1c2ab9c4ab09b8ab8685b9c2b", + "sha256:a5ed8c05548b54b998b9498753fb9cadbfd92ee88e884641377d8a8b291bcc01", + "sha256:a7711edca4dcef1a75257b50a2fbfe92a65187c47dab5a0f1b9b332c5919a3fb", + "sha256:af5c59122a011049aad5dd87424b8e65a80e4a6477419c0c1015f73fb5ea0293", + "sha256:b18e0a9ef57d2b41f5c68beefa32317d286c3d6ac0484efd10d6e07491bb95dd", + "sha256:b4e248d1087abf9f4c10f3c398896c87ce82a9856494a7155823eb45a892395d", + "sha256:ba4e9e0ae13fc41c6b23299545e5ef73055213e466bd107953e4a013a5ddd7e3", + "sha256:c6332685306b6417a91b1ff9fae889b3ba65c2292d64bd9245c093b1b284809d", + "sha256:d5ff0621c88ce83a28a10d2ce719b2ee85635e85c515f12bac99a95306da4b2e", + "sha256:d9efd8b7a3ef378dd61a1e77367f1924375befc2eba06168b6ebfa903a5e59ca", + "sha256:df5169c4396adc04f9b0a05f13c074df878b6052430e03f50e68adf3a57aa28d", + "sha256:ebb253464a5d0482b191274f1c8bf00e33f7e0b9c66405fbffc61ed2c839c775", + "sha256:ec80dc47f54e6e9a78181ce05feb71a0353854cc26999db963695f950b5fb375", + "sha256:f032b34669220030f905152045dfa27741ce1a6db3324a5bc0b96b6c7420c87b", + "sha256:f60567825f791c6f8a592f3c6e3bd93dd2934e3f9dac189308426bd76b00ef3b", + "sha256:f803eaa94c2fcda012c047e62bc7a51b0bdabda1cad7a92a522694ea2d76e49f" + ], + "version": "==1.14.4" }, "chardet": { "hashes": [ - "sha256:84ab92ed1c4d4f16916e05906b6b75a6c0fb5db821cc65e70cbd64a3e2a5eaae", - "sha256:fc323ffcaeaed0e0a02bf4d117757b98aed530d9ed4531e3e15460124c106691" + "sha256:0d6f53a15db4120f2b08c94f11e7d93d2c911ee118b6b30a04ec3ee8310179fa", + "sha256:f864054d66fd9118f2e67044ac8981a54775ec5b67aed0441892edb553d21da5" ], - "version": "==3.0.4" + "markers": "python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3, 3.4'", + "version": "==4.0.0" + }, + "cryptography": { + "hashes": [ + "sha256:0003a52a123602e1acee177dc90dd201f9bb1e73f24a070db7d36c588e8f5c7d", + "sha256:0e85aaae861d0485eb5a79d33226dd6248d2a9f133b81532c8f5aae37de10ff7", + "sha256:594a1db4511bc4d960571536abe21b4e5c3003e8750ab8365fafce71c5d86901", + "sha256:69e836c9e5ff4373ce6d3ab311c1a2eed274793083858d3cd4c7d12ce20d5f9c", + "sha256:788a3c9942df5e4371c199d10383f44a105d67d401fb4304178020142f020244", + "sha256:7e177e4bea2de937a584b13645cab32f25e3d96fc0bc4a4cf99c27dc77682be6", + "sha256:83d9d2dfec70364a74f4e7c70ad04d3ca2e6a08b703606993407bf46b97868c5", + "sha256:84ef7a0c10c24a7773163f917f1cb6b4444597efd505a8aed0a22e8c4780f27e", + "sha256:9e21301f7a1e7c03dbea73e8602905a4ebba641547a462b26dd03451e5769e7c", + "sha256:9f6b0492d111b43de5f70052e24c1f0951cb9e6022188ebcb1cc3a3d301469b0", + "sha256:a69bd3c68b98298f490e84519b954335154917eaab52cf582fa2c5c7efc6e812", + "sha256:b4890d5fb9b7a23e3bf8abf5a8a7da8e228f1e97dc96b30b95685df840b6914a", + "sha256:c366df0401d1ec4e548bebe8f91d55ebcc0ec3137900d214dd7aac8427ef3030", + "sha256:dc42f645f8f3a489c3dd416730a514e7a91a59510ddaadc09d04224c098d3302" + ], + "version": "==3.3.1" }, "defusedxml": { "hashes": [ @@ -86,18 +147,18 @@ }, "django": { "hashes": [ - "sha256:a2127ad0150ec6966655bedf15dbbff9697cc86d61653db2da1afa506c0b04cc", - "sha256:c93c28ccf1d094cbd00d860e83128a39e45d2c571d3b54361713aaaf9a94cac4" + "sha256:5c866205f15e7a7123f1eec6ab939d22d5bde1416635cab259684af66d8e48a2", + "sha256:edb10b5c45e7e9c0fb1dc00b76ec7449aca258a39ffd613dbd078c51d19c9f03" ], "index": "pypi", - "version": "==3.1.2" + "version": "==3.1.4" }, "django-allauth": { "hashes": [ - "sha256:f17209410b7f87da0a84639fd79d3771b596a6d3fc1a8e48ce50dabc7f441d30" + "sha256:e51af457466022f52154d74c8523ac69375120fad2acce6e239635d85e610b25" ], "index": "pypi", - "version": "==0.42.0" + "version": "==0.44.0" }, "django-anymail": { "hashes": [ @@ -147,11 +208,11 @@ }, "django-debug-toolbar": { "hashes": [ - "sha256:a1ce0665f7ef47d27b8df4b5d1058748e1f08500a01421a30d35164f38aaaf4c", - "sha256:c97921a9cd421d392e7860dc4b464db8e06c8628df4dc58fedab012888c293c6" + "sha256:84e2607d900dbd571df0a2acf380b47c088efb787dce9805aefeb407341961d2", + "sha256:9e5a25d0c965f7e686f6a8ba23613ca9ca30184daa26487706d4829f5cfb697a" ], "index": "pypi", - "version": "==3.1.1" + "version": "==3.2" }, "django-environ": { "hashes": [ @@ -201,11 +262,11 @@ }, "django-meta": { "hashes": [ - "sha256:0c1ea4d000afaea36983e42ff59aeb77c943073d304ff9e58b04041fb02d629a", - "sha256:6930e4a5f87f0aec47b0639143f05541dc0bc75ac2b21b21b1986812c7f02e48" + "sha256:25010157000fa2f1d1ed46e8739f43cfe00e40af199d913b230e52133b650da5", + "sha256:3d69068b1c9e8369427fe0843f4cb6974c24c27dc87750cd915db487ee475fce" ], "index": "pypi", - "version": "==1.7.0" + "version": "==2.0.0" }, "django-nose": { "hashes": [ @@ -232,11 +293,11 @@ }, "django-storages": { "hashes": [ - "sha256:12de8fb2605b9b57bfaf54b075280d7cbb3b3ee1ca4bc9b9add147af87fe3a2c", - "sha256:652275ab7844538c462b62810276c0244866f345878256a9e0e86f5b1283ae18" + "sha256:c823dbf56c9e35b0999a13d7e05062b837bae36c518a40255d522fbe3750fbb4", + "sha256:f28765826d507a0309cfaa849bd084894bc71d81bf0d09479168d44785396f80" ], "index": "pypi", - "version": "==1.10.1" + "version": "==1.11.1" }, "et-xmlfile": { "hashes": [ @@ -246,19 +307,19 @@ }, "factory-boy": { "hashes": [ - "sha256:d8626622550c8ba31392f9e19fdbcef9f139cf1ad643c5923f20490a7b3e2e3d", - "sha256:ded73e49135c24bd4d3f45bf1eb168f8d290090f5cf4566b8df3698317dc9c08" + "sha256:1d3db4b44b8c8c54cdd8b83ae4bdb9aeb121e464400035f1f03ae0e1eade56a4", + "sha256:401cc00ff339a022f84d64a4339503d1689e8263a4478d876e58a3295b155c5b" ], "index": "pypi", - "version": "==3.1.0" + "version": "==3.2.0" }, "faker": { "hashes": [ - "sha256:30afa8f564350770373f299d2d267bff42aaba699a7ae0a3b6f378b2a8170569", - "sha256:a7a36c3c657f06bd1e3e3821b9480f2a92017d8a26e150e464ab6b97743cbc92" + "sha256:00ce4342c221b1931b2f35d46f5027d35bc62a4ca3a34628b2c5b514b4ca958a", + "sha256:5b17c95cfb013a22b062b8df18286f08ce4ea880f9948ec74295e5a42dbb2e44" ], - "markers": "python_version >= '3.5'", - "version": "==4.14.0" + "markers": "python_version >= '3.6'", + "version": "==5.0.2" }, "gunicorn": { "hashes": [ @@ -323,11 +384,11 @@ }, "mock": { "hashes": [ - "sha256:3f9b2c0196c60d21838f307f5825a7b86b678cedc58ab9e50a8988187b4d81e0", - "sha256:dd33eb70232b6118298d516bbcecd26704689c386594f0f3c4f13867b2c56f72" + "sha256:122fcb64ee37cfad5b3f48d7a7d51875d7031aaf3d8be7c42e2bee25044eee62", + "sha256:7d3fbbde18228f4ff2f1f119a45cdffa458b4c0dee32eb4d2bb2f82554bac7bc" ], "index": "pypi", - "version": "==4.0.2" + "version": "==4.0.3" }, "nose": { "hashes": [ @@ -361,38 +422,37 @@ }, "pillow": { "hashes": [ - "sha256:04d984e45a0b9815f4b407e8aadb50f25fbb82a605d89db927376e94c3adf371", - "sha256:06e730451b70471c08b8a0ee7f18e7e1df310dba9c780bbfb730a13102b143db", - "sha256:1f59596af2b3d64a9e43f9d6509b7a51db744d0eecc23297617c604e6823c6ae", - "sha256:233513465a2f25fce537b965621866da3d1f02e15708f371dd4e19f0fb7b7711", - "sha256:2696f1a6402c1a42ed12c5cd8adfb4b381c32d41e35a34b8ee544309ef854172", - "sha256:2ca55a4443b463eec90528ac27be14d226b1c2b972178bc7d4d282ce89e47b6a", - "sha256:30615e9115f976e00a938a28c7152562e8cf8e221ddacf4446dd8b20c0d97333", - "sha256:3a77e7b9f8991b81d7be8e0b2deab05013cf3ebb24ac2b863d2979acb68c73dd", - "sha256:54667c8ab16658cc0b7d824d8706b440d4db8382a3561042758bdfd48ca99298", - "sha256:59304c67d12394815331eda95ec892bf54ad95e0aa7bc1ccd8e0a4a5a25d4bf3", - "sha256:594f2f25b7bcfd9542c41b9df156fb5104f19f5fcefa51b1447f1d9f64c9cc14", - "sha256:5b5dde5dcedc4e6f5a71d7654a3c6e189ced82e97d7896b1ca5a5c5e4e0e916f", - "sha256:6bcea85f93fb2c94a1bcd35704c348a929a7fb24a0ec0cc2b9fcbb0046b87176", - "sha256:718d7f0eb3351052023b33fe0f83fc9e3beeb7cbacbd0ff2b52524e2153e4598", - "sha256:7c4a7ee37027ca716f42726b6f9fc491c13c843c7af559e0767dfab1ae9682d4", - "sha256:87a855b64a9b692604f6339baa4f9913d06838df1b4ccf0cb899dd18f56ec03c", - "sha256:8c006d52365c0a6bb41a07f9c8f9f458ae8170e0af3b8c49bf7089347066b97b", - "sha256:8e29701229705615d3dcfc439c7c46f40f913e57c7fe322b1efc30d3f37d1287", - "sha256:9b5b41737853bc49943864d5980dfb401a09e78ddb471e71291810ccdeadd712", - "sha256:b04569ff215b85ce3e2954979d2d5e0bf84007e43ddcf84b632fc6bc18e07909", - "sha256:b731d45764349313bd956c07bdc1d43803bb0ad2b11354328a074e416c7d84bc", - "sha256:c12e33cb17e2e12049a49b77696ee479791a4e44e541fdc393ae043e1246389f", - "sha256:c41442c3814afeba1f6f16fd70cdf312a2c73c6dee8dc3ac8926bb115713ad1d", - "sha256:c4d743c5c91424965707c9c8edc58b7cb43c127dcaf191fbcd304e2082eef56a", - "sha256:d6766fd28f4f47cf93280a57e3dc6a9d11bdada1a6e9f019b8c62b12bbc86f6a", - "sha256:d904570afcdbec40eb6bdbe24cba8d95c0215a2c0cbbc9c16301045bc8504c1f", - "sha256:e674be2f349ea810e221b0113bd4491f53584ac848d5bcc3b62443cfa11d9c40", - "sha256:e6ac40f1a62a227eb00226eb64c9c82bc878a3ed700b5414d34c9be57be87e87", - "sha256:f5270369c799b4405ed47d45c88c09fbd7942fc9fb9891c0dabf0b8c751b625d" - ], - "index": "pypi", - "version": "==8.0.0" + "sha256:006de60d7580d81f4a1a7e9f0173dc90a932e3905cc4d47ea909bc946302311a", + "sha256:0a2e8d03787ec7ad71dc18aec9367c946ef8ef50e1e78c71f743bc3a770f9fae", + "sha256:0eeeae397e5a79dc088d8297a4c2c6f901f8fb30db47795113a4a605d0f1e5ce", + "sha256:11c5c6e9b02c9dac08af04f093eb5a2f84857df70a7d4a6a6ad461aca803fb9e", + "sha256:2fb113757a369a6cdb189f8df3226e995acfed0a8919a72416626af1a0a71140", + "sha256:4b0ef2470c4979e345e4e0cc1bbac65fda11d0d7b789dbac035e4c6ce3f98adb", + "sha256:59e903ca800c8cfd1ebe482349ec7c35687b95e98cefae213e271c8c7fffa021", + "sha256:5abd653a23c35d980b332bc0431d39663b1709d64142e3652890df4c9b6970f6", + "sha256:5f9403af9c790cc18411ea398a6950ee2def2a830ad0cfe6dc9122e6d528b302", + "sha256:6b4a8fd632b4ebee28282a9fef4c341835a1aa8671e2770b6f89adc8e8c2703c", + "sha256:6c1aca8231625115104a06e4389fcd9ec88f0c9befbabd80dc206c35561be271", + "sha256:795e91a60f291e75de2e20e6bdd67770f793c8605b553cb6e4387ce0cb302e09", + "sha256:7ba0ba61252ab23052e642abdb17fd08fdcfdbbf3b74c969a30c58ac1ade7cd3", + "sha256:7c9401e68730d6c4245b8e361d3d13e1035cbc94db86b49dc7da8bec235d0015", + "sha256:81f812d8f5e8a09b246515fac141e9d10113229bc33ea073fec11403b016bcf3", + "sha256:895d54c0ddc78a478c80f9c438579ac15f3e27bf442c2a9aa74d41d0e4d12544", + "sha256:8de332053707c80963b589b22f8e0229f1be1f3ca862a932c1bcd48dafb18dd8", + "sha256:92c882b70a40c79de9f5294dc99390671e07fc0b0113d472cbea3fde15db1792", + "sha256:95edb1ed513e68bddc2aee3de66ceaf743590bf16c023fb9977adc4be15bd3f0", + "sha256:b63d4ff734263ae4ce6593798bcfee6dbfb00523c82753a3a03cbc05555a9cc3", + "sha256:bd7bf289e05470b1bc74889d1466d9ad4a56d201f24397557b6f65c24a6844b8", + "sha256:cc3ea6b23954da84dbee8025c616040d9aa5eaf34ea6895a0a762ee9d3e12e11", + "sha256:cc9ec588c6ef3a1325fa032ec14d97b7309db493782ea8c304666fb10c3bd9a7", + "sha256:d3d07c86d4efa1facdf32aa878bd508c0dc4f87c48125cc16b937baa4e5b5e11", + "sha256:d8a96747df78cda35980905bf26e72960cba6d355ace4780d4bdde3b217cdf1e", + "sha256:e38d58d9138ef972fceb7aeec4be02e3f01d383723965bfcef14d174c8ccd039", + "sha256:eb472586374dc66b31e36e14720747595c2b265ae962987261f044e5cce644b5", + "sha256:fbd922f702582cb0d71ef94442bfca57624352622d75e3be7a1e7e9360b07e72" + ], + "index": "pypi", + "version": "==8.0.1" }, "progressbar2": { "hashes": [ @@ -406,6 +466,7 @@ "sha256:00195b5f6832dbf2876b8bf77f12bdce648224c89c880719c745b90515233301", "sha256:068115e13c70dc5982dfc00c5d70437fe37c014c808acce119b5448361c03725", "sha256:26e7fd115a6db75267b325de0fba089b911a4a12ebd3d0b5e7acb7028bc46821", + "sha256:2c93d4d16933fea5bbacbe1aaf8fa8c1348740b2e50b3735d1b0bf8154cbf0f3", "sha256:56007a226b8e95aa980ada7abdea6b40b75ce62a433bd27cec7a8178d57f4051", "sha256:56fee7f818d032f802b8eed81ef0c1232b8b42390df189cab9cfa87573fe52c5", "sha256:6a3d9efb6f36f1fe6aa8dbb5af55e067db802502c55a9defa47c5a1dad41df84", @@ -413,6 +474,7 @@ "sha256:ad2fe8a37be669082e61fb001c185ffb58867fdbb3e7a6b0b0d2ffe232353a3e", "sha256:b8cae8b2f022efa1f011cc753adb9cbadfa5a184431d09b273fb49b4167561ad", "sha256:d160744652e81c80627a909a0e808f3c6653a40af435744de037e3172cf277f5", + "sha256:d5062ae50b222da28253059880a871dc87e099c25cb68acf613d9d227413d6f7", "sha256:f22ea9b67aea4f4a1718300908a2fb62b3e4276cf00bd829a97ab5894af42ea3", "sha256:f974c96fca34ae9e4f49839ba6b78addf0346777b46c4da27a7bf54f48d3057d", "sha256:fb23f6c71107c37fd667cb4ea363ddeb936b348bbd6449278eb92c189699f543" @@ -425,9 +487,11 @@ "sha256:0deac2af1a587ae12836aa07970f5cb91964f05a7c6cdb69d8425ff4c15d4e2c", "sha256:0e4dc3d5996760104746e6cfcdb519d9d2cd27c738296525d5867ea695774e67", "sha256:11b9c0ebce097180129e422379b824ae21c8f2a6596b159c7659e2e5a00e1aa0", + "sha256:15978a1fbd225583dd8cdaf37e67ccc278b5abecb4caf6b2d6b8e2b948e953f6", "sha256:1fabed9ea2acc4efe4671b92c669a213db744d2af8a9fc5d69a8e9bc14b7a9db", "sha256:2dac98e85565d5688e8ab7bdea5446674a83a3945a8f416ad0110018d1501b94", "sha256:42ec1035841b389e8cc3692277a0bd81cdfe0b65d575a2c8862cec7a80e62e52", + "sha256:6422f2ff0919fd720195f64ffd8f924c1395d30f9a495f31e2392c2efafb5056", "sha256:6a32f3a4cb2f6e1a0b15215f448e8ce2da192fd4ff35084d80d5e39da683e79b", "sha256:7312e931b90fe14f925729cde58022f5d034241918a5c4f9797cac62f6b3a9dd", "sha256:7d92a09b788cbb1aec325af5fcba9fed7203897bbd9269d5691bb1e3bce29550", @@ -459,6 +523,25 @@ "index": "pypi", "version": "==2.8.6" }, + "pycparser": { + "hashes": [ + "sha256:2d475327684562c3a96cc71adf7dc8c4f0565175cf86b6d7a404ff4c771f15f0", + "sha256:7582ad22678f0fcd81102833f60ef8d0e57288b6b5fb00323d101be910e35705" + ], + "markers": "python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3'", + "version": "==2.20" + }, + "pyjwt": { + "extras": [ + "crypto" + ], + "hashes": [ + "sha256:5c2ff2eb27d7e342dfc3cafcc16412781f06db2690fbef81922b0172598f085b", + "sha256:7a2b271c6dac2fda9e0c33d176c4253faba2c6c6b3a99c7f28a32c3c97522779" + ], + "markers": "python_version >= '3.6'", + "version": "==2.0.0" + }, "python-dateutil": { "hashes": [ "sha256:73ebfe9dbf22e832286dafa60473e4cd239f8592f699aa5adaf10050e6e1823c", @@ -483,21 +566,23 @@ }, "pytz": { "hashes": [ - "sha256:a494d53b6d39c3c6e44c3bec237336e14305e4f29bbf800b599253057fbb79ed", - "sha256:c35965d010ce31b23eeb663ed3cc8c906275d6be1a34393a1d73a41febf4a048" + "sha256:16962c5fb8db4a8f63a26646d8886e9d769b6c511543557bc84e9569fb9a9cb4", + "sha256:180befebb1927b16f6b57101720075a984c019ac16b1b7575673bea42c6c3da5" ], - "version": "==2020.1" + "version": "==2020.5" }, "pyyaml": { "hashes": [ "sha256:06a0d7ba600ce0b2d2fe2e78453a470b5a6e000a985dd4a4e54e436cc36b0e97", "sha256:240097ff019d7c70a4922b6869d8a86407758333f02203e0fc6ff79c5dcede76", "sha256:4f4b913ca1a7319b33cfb1369e91e50354d6f07a135f3b901aca02aa95940bd2", + "sha256:6034f55dab5fea9e53f436aa68fa3ace2634918e8b5994d82f3621c04ff5ed2e", "sha256:69f00dca373f240f842b2931fb2c7e14ddbacd1397d57157a9b005a6a9942648", "sha256:73f099454b799e05e5ab51423c7bcf361c58d3206fa7b0d555426b1f4d9a3eaf", "sha256:74809a57b329d6cc0fdccee6318f44b9b8649961fa73144a98735b0aaf029f1f", "sha256:7739fc0fa8205b3ee8808aea45e968bc90082c10aef6ea95e855e10abf4a37b2", "sha256:95f71d2af0ff4227885f7a6605c37fd53d3a106fcab511b8860ecca9fcf400ee", + "sha256:ad9c67312c84def58f3c04504727ca879cb0013b2517c85a9a253f0cb6380c0a", "sha256:b8eac752c5e14d3eca0e6dd9199cd627518cb5ec06add0de9d32baeee6fe645d", "sha256:cc8955cfbfc7a115fa81d85284ee61147059a753344bc51098f3ccd69b0d7e0c", "sha256:d13155f591e6fcc1ec3b30685d50bf0711574e2c0dfffd7644babf8b5102ca1a" @@ -506,11 +591,11 @@ }, "requests": { "hashes": [ - "sha256:b3559a131db72c33ee969480840fff4bb6dd111de7dd27c8ee1f820f4f00231b", - "sha256:fe75cc94a9443b9246fc7049224f75604b113c36acb93f87b80ed42c44cbb898" + "sha256:27973dd4a904a4f13b263a19c866c13b92a39ed1c964655f025f3f8d3d75b804", + "sha256:c210084e36a42ae6b9219e00e48287def368a26d03a048ddad7bfee44f75871e" ], "markers": "python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3, 3.4'", - "version": "==2.24.0" + "version": "==2.25.1" }, "requests-oauthlib": { "hashes": [ @@ -529,11 +614,11 @@ }, "sentry-sdk": { "hashes": [ - "sha256:23808d571d2461a4ce3784ec12bbee5bdb8c026c143fe79d36cef8a6d653e71f", - "sha256:bb90a4e19c7233a580715fc986cc44be2c48fc10b31e71580a2037e1c94b6950" + "sha256:0a711ec952441c2ec89b8f5d226c33bc697914f46e876b44a4edd3e7864cf4d0", + "sha256:737a094e49a529dd0fdcaafa9e97cf7c3d5eb964bd229821d640bc77f3502b3f" ], "index": "pypi", - "version": "==0.14.3" + "version": "==0.19.5" }, "six": { "hashes": [ @@ -560,11 +645,11 @@ "yaml" ], "hashes": [ - "sha256:8cc2fa10bc37219ac5e76850eb7fbd50de313c7a1a7895c44af2a8dd206b7be7", - "sha256:c5a77c96ad306d5b380def1309d521ad5e98b4f83726f84857ad87e142d13279" + "sha256:41aa40981cddd7ec4d1fabeae7c38d271601b306386bd05b5c3bcae13e5aeb20", + "sha256:f83cac08454f225a34a305daa20e2110d5e6335135d505f93bc66583a5f9c10d" ], - "markers": "python_version >= '3.5'", - "version": "==2.0.0" + "markers": "python_version >= '3.6'", + "version": "==3.0.0" }, "text-unidecode": { "hashes": [ @@ -575,11 +660,11 @@ }, "urllib3": { "hashes": [ - "sha256:91056c15fa70756691db97756772bb1eb9678fa585d9184f24534b100dc60f4a", - "sha256:e7983572181f5e1522d9c98453462384ee92a0be7fac5f1413a1e35c56cc0461" + "sha256:19188f96923873c92ccb987120ec4acaa12f0461fa9ce5d3d0772bc965a39e08", + "sha256:d8ff90d979214d7b4f8ce956e80f4028fc6860e4431f731ea4a8c08f23f99473" ], "markers": "python_version != '3.4'", - "version": "==1.25.10" + "version": "==1.26.2" }, "whitenoise": { "hashes": [ @@ -590,10 +675,10 @@ }, "xlrd": { "hashes": [ - "sha256:546eb36cee8db40c3eaa46c351e67ffee6eeb5fa2650b71bc4c758a29a1b29b2", - "sha256:e551fb498759fa3a5384a94ccd4c3c02eb7c00ea424426e212ac0c57be9dfbde" + "sha256:6a33ee89877bd9abc1158129f6e94be74e2679636b8a205b43b85206c3f0bbdd", + "sha256:f72f148f54442c6b056bf931dbc34f986fd0c3b0b6b5a58d013c9aef274d0c88" ], - "version": "==1.2.0" + "version": "==2.0.1" }, "xlwt": { "hashes": [ @@ -687,10 +772,11 @@ }, "toml": { "hashes": [ - "sha256:926b612be1e5ce0634a2ca03470f95169cf16f939018233a670519cb4ac58b0f", - "sha256:bda89d5935c2eac546d648028b9901107a595863cb36bae0c73ac804a9b4ce88" + "sha256:806143ae5bfb6a3c6e736a764057db0e6a0e05e338b5630894a5f779cabb4f9b", + "sha256:b3bda1d108d5dd99f4a20d24d9c348e91c4db7ab1b749200bded2f839ccbe68f" ], - "version": "==0.10.1" + "markers": "python_version >= '2.6' and python_version not in '3.0, 3.1, 3.2, 3.3'", + "version": "==0.10.2" }, "wrapt": { "hashes": [ diff --git a/accounts/templates/account/guardian/home.html b/accounts/templates/account/guardian/home.html index 49c2b7a0..f38acf5e 100644 --- a/accounts/templates/account/guardian/home.html +++ b/accounts/templates/account/guardian/home.html @@ -1,17 +1,6 @@ {% extends "account/_base.html" %} {% load bootstrap3 humanize coderdojochi_extras %} -{% block title %}My Account | {{ block.super }}{% endblock %} -{% block meta_facebook_title %}My Account | {{ block.super }}{% endblock %} -{% block meta_twitter_title %}My Account | {{ block.super }}{% endblock %} - -{% comment %} {% block meta_description %}{% endblock %} {% endcomment %} -{% comment %} {% block meta_facebook_description %}{% endblock %} {% endcomment %} -{% comment %} {% block meta_twitter_description %}{% endblock %} {% endcomment %} - -{% comment %} {% block meta_facebook_image %}{% endblock %} {% endcomment %} -{% comment %} {% block meta_twitter_image %}{% endblock %} {% endcomment %} - {% block body_class %}page-dojo{% endblock %} {% block contained_content %} diff --git a/accounts/templates/account/mentor/home.html b/accounts/templates/account/mentor/home.html index 9d4456c3..f0ffc1af 100644 --- a/accounts/templates/account/mentor/home.html +++ b/accounts/templates/account/mentor/home.html @@ -1,17 +1,6 @@ {% extends "account/_base.html" %} {% load bootstrap3 humanize coderdojochi_extras %} -{% block title %}My Account | {{ block.super }}{% endblock %} -{% block meta_facebook_title %}My Account | {{ block.super }}{% endblock %} -{% block meta_twitter_title %}My Account | {{ block.super }}{% endblock %} - -{% comment %} {% block meta_description %}{% endblock %} {% endcomment %} -{% comment %} {% block meta_facebook_description %}{% endblock %} {% endcomment %} -{% comment %} {% block meta_twitter_description %}{% endblock %} {% endcomment %} - -{% comment %} {% block meta_facebook_image %}{% endblock %} {% endcomment %} -{% comment %} {% block meta_twitter_image %}{% endblock %} {% endcomment %} - {% block body_class %}page-account{% endblock %} {% block contained_content %} diff --git a/accounts/views.py b/accounts/views.py index ec801b10..1c4900c4 100644 --- a/accounts/views.py +++ b/accounts/views.py @@ -11,12 +11,19 @@ from meta.views import MetadataMixin from coderdojochi.forms import CDCModelForm, GuardianForm, MentorForm -from coderdojochi.models import Guardian, MeetingOrder, Mentor, MentorOrder, Order, Student +from coderdojochi.models import ( + Guardian, + MeetingOrder, + Mentor, + MentorOrder, + Order, + Student, +) class SignupView(MetadataMixin, AllAuthSignupView): - template_name = 'account/signup.html' - title = f"Sign up | {settings.SITE_NAME}" + template_name = "account/signup.html" + title = "Sign up | We All Code" description = ( "We All Code is volunteer run nonprofit organization that teaches web, game, and app development to " "youth ages 7 to 17 free of charge." @@ -28,8 +35,8 @@ class SignupView(MetadataMixin, AllAuthSignupView): class LoginView(MetadataMixin, AllAuthLoginView): - template_name = 'account/login.html' - title = f"Login | {settings.SITE_NAME}" + template_name = "account/login.html" + title = "Login | We All Code" description = ( "We All Code is volunteer run nonprofit organization that teaches web, game, and app development to " "youth ages 7 to 17 free of charge." @@ -40,36 +47,36 @@ class LoginView(MetadataMixin, AllAuthLoginView): twitter_creator = "@weallcode" -@method_decorator(login_required, name='dispatch') -class AccountHomeView(TemplateView): +@method_decorator(login_required, name="dispatch") +class AccountHomeView(MetadataMixin, TemplateView): + title = "My Account | We All Code" + def dispatch(self, *args, **kwargs): if not self.request.user.role: - if 'next' in self.request.GET: - return redirect( - f"{reverse('welcome')}?next={self.request.GET['next']}" - ) + if "next" in self.request.GET: + return redirect(f"{reverse('welcome')}?next={self.request.GET['next']}") else: messages.warning( self.request, - 'Tell us a little about yourself before going on account.' + "Tell us a little about yourself before going on account.", ) - return redirect('welcome') + return redirect("welcome") return super().dispatch(*args, **kwargs) def get_context_data(self, **kwargs): context = super().get_context_data(**kwargs) - context['highlight'] = ( - self.request.GET['highlight'] if 'highlight' in self.request.GET else False + context["highlight"] = ( + self.request.GET["highlight"] if "highlight" in self.request.GET else False ) - context['user'] = self.request.user + context["user"] = self.request.user - if self.request.user.role == 'mentor': + if self.request.user.role == "mentor": return {**context, **self.get_context_data_for_mentor()} - if self.request.user.role == 'guardian': + if self.request.user.role == "guardian": return {**context, **self.get_context_data_for_guardian()} return context @@ -78,187 +85,146 @@ def get_context_data_for_mentor(self): mentor = get_object_or_404(Mentor, user=self.request.user) orders = MentorOrder.objects.select_related().filter( - is_active=True, - mentor=mentor, + is_active=True, mentor=mentor, ) upcoming_sessions = orders.filter( - is_active=True, - session__start_date__gte=timezone.now() - ).order_by('session__start_date') + is_active=True, session__start_date__gte=timezone.now() + ).order_by("session__start_date") past_sessions = orders.filter( - is_active=True, - session__start_date__lte=timezone.now() - ).order_by('session__start_date') + is_active=True, session__start_date__lte=timezone.now() + ).order_by("session__start_date") - meeting_orders = MeetingOrder.objects.select_related().filter( - mentor=mentor - ) + meeting_orders = MeetingOrder.objects.select_related().filter(mentor=mentor) upcoming_meetings = meeting_orders.filter( is_active=True, meeting__is_public=True, - meeting__end_date__gte=timezone.now() - ).order_by('meeting__start_date') + meeting__end_date__gte=timezone.now(), + ).order_by("meeting__start_date") account_complete = False if ( - mentor.user.first_name and - mentor.user.last_name and - mentor.avatar and - mentor.background_check and - past_sessions.count() > 0 + mentor.user.first_name + and mentor.user.last_name + and mentor.avatar + and mentor.background_check + and past_sessions.count() > 0 ): account_complete = True return { - 'mentor': mentor, - 'orders': orders, - 'upcoming_sessions': upcoming_sessions, - 'past_sessions': upcoming_sessions, - 'meeting_orders': meeting_orders, - 'upcoming_meetings': upcoming_meetings, - 'account_complete': account_complete + "mentor": mentor, + "orders": orders, + "upcoming_sessions": upcoming_sessions, + "past_sessions": upcoming_sessions, + "meeting_orders": meeting_orders, + "upcoming_meetings": upcoming_meetings, + "account_complete": account_complete, } def get_context_data_for_guardian(self): - guardian = get_object_or_404( - Guardian, - user=self.request.user - ) + guardian = get_object_or_404(Guardian, user=self.request.user) - students = Student.objects.filter( - is_active=True, - guardian=guardian, - ) + students = Student.objects.filter(is_active=True, guardian=guardian,) - student_orders = Order.objects.filter( - student__in=students, - ) + student_orders = Order.objects.filter(student__in=students,) upcoming_orders = student_orders.filter( - is_active=True, - session__start_date__gte=timezone.now(), - ).order_by('session__start_date') + is_active=True, session__start_date__gte=timezone.now(), + ).order_by("session__start_date") past_orders = student_orders.filter( - is_active=True, - session__start_date__lte=timezone.now(), - ).order_by('session__start_date') + is_active=True, session__start_date__lte=timezone.now(), + ).order_by("session__start_date") return { - 'guardian': guardian, - 'students': students, - 'student_orders': student_orders, - 'upcoming_orders': upcoming_orders, - 'past_orders': past_orders, + "guardian": guardian, + "students": students, + "student_orders": student_orders, + "upcoming_orders": upcoming_orders, + "past_orders": past_orders, } def get(self, *args, **kwargs): - if self.request.user.role == 'mentor': + if self.request.user.role == "mentor": return self.get_for_mentor(**kwargs) - if self.request.user.role == 'guardian': + if self.request.user.role == "guardian": return self.get_for_guardian(**kwargs) def get_for_mentor(self, **kwargs): context = self.get_context_data(**kwargs) - context['form'] = MentorForm(instance=context['mentor']) - context['user_form'] = CDCModelForm(instance=context['mentor'].user) + context["form"] = MentorForm(instance=context["mentor"]) + context["user_form"] = CDCModelForm(instance=context["mentor"].user) - return render(self.request, 'account/mentor/home.html', context) + return render(self.request, "account/mentor/home.html", context) def get_for_guardian(self, **kwargs): context = self.get_context_data(**kwargs) - context['form'] = GuardianForm(instance=context['guardian']) - context['user_form'] = CDCModelForm(instance=context['guardian'].user) + context["form"] = GuardianForm(instance=context["guardian"]) + context["user_form"] = CDCModelForm(instance=context["guardian"].user) - return render(self.request, 'account/guardian/home.html', context) + return render(self.request, "account/guardian/home.html", context) def post(self, *args, **kwargs): - if self.request.user.role == 'mentor': + if self.request.user.role == "mentor": return self.post_for_mentor(**kwargs) - if self.request.user.role == 'guardian': + if self.request.user.role == "guardian": return self.post_for_guardian(**kwargs) def post_for_mentor(self, **kwargs): context = self.get_context_data(**kwargs) - mentor = context['mentor'] + mentor = context["mentor"] - form = MentorForm( - self.request.POST, - self.request.FILES, - instance=mentor - ) + form = MentorForm(self.request.POST, self.request.FILES, instance=mentor) user_form = CDCModelForm( - self.request.POST, - self.request.FILES, - instance=mentor.user + self.request.POST, self.request.FILES, instance=mentor.user ) - if ( - form.is_valid() and - user_form.is_valid() - ): + if form.is_valid() and user_form.is_valid(): form.save() user_form.save() - messages.success( - self.request, - 'Profile information saved.' - ) + messages.success(self.request, "Profile information saved.") - return redirect('account_home') + return redirect("account_home") else: - messages.error( - self.request, - 'There was an error. Please try again.' - ) + messages.error(self.request, "There was an error. Please try again.") - context['form'] = form - context['user_form'] = user_form + context["form"] = form + context["user_form"] = user_form - return render(self.request, 'account/mentor/home.html', context) + return render(self.request, "account/mentor/home.html", context) def post_for_guardian(self, **kwargs): context = self.get_context_data(**kwargs) - guardian = context['guardian'] + guardian = context["guardian"] - form = GuardianForm( - self.request.POST, - instance=guardian - ) + form = GuardianForm(self.request.POST, instance=guardian) - user_form = CDCModelForm( - self.request.POST, - instance=guardian.user - ) + user_form = CDCModelForm(self.request.POST, instance=guardian.user) if form.is_valid() and user_form.is_valid(): form.save() user_form.save() - messages.success( - self.request, - 'Profile information saved.' - ) + messages.success(self.request, "Profile information saved.") - return redirect('account_home') + return redirect("account_home") else: - messages.error( - self.request, - 'There was an error. Please try again.' - ) + messages.error(self.request, "There was an error. Please try again.") + + context["form"] = form + context["user_form"] = user_form - context['form'] = form - context['user_form'] = user_form + return render(self.request, "account/guardian/home.html", context) - return render(self.request, 'account/guardian/home.html', context) diff --git a/coderdojochi/settings.py b/coderdojochi/settings.py index 866151dd..e8ecd7b0 100644 --- a/coderdojochi/settings.py +++ b/coderdojochi/settings.py @@ -211,7 +211,7 @@ USE_TZ = True SITE_ID = 1 -SITE_NAME = env('SITE_NAME', default='We All Code') +SITE_NAME = 'We All Code' SITE_URL = env('SITE_URL', default=None) # Honor the 'X-Forwarded-Proto' header for request.is_secure() @@ -325,8 +325,8 @@ def MediaRootS3BotoStorage(): return S3Boto3Storage(location='media', file_overw META_SITE_NAME = SITE_NAME META_USE_OG_PROPERTIES = True META_USE_TWITTER_PROPERTIES = True -META_USE_GOOGLEPLUS_PROPERTIES = False -META_USE_TITLE_TAG = False +META_USE_SCHEMAORG_PROPERTIES = True +# META_USE_TITLE_TAG = True META_TWITTER_SITE = env('META_TWITTER_SITE', default='@weallcode') META_FB_APPID = env('META_SITE_DOMAIN', default='1454178301519376') META_INCLUDE_KEYWORDS = env.list('META_INCLUDE_KEYWORDS', default=[ diff --git a/weallcode/templates/weallcode/_base.html b/weallcode/templates/weallcode/_base.html index 63b3894a..51aeb4a0 100644 --- a/weallcode/templates/weallcode/_base.html +++ b/weallcode/templates/weallcode/_base.html @@ -4,7 +4,11 @@ {% include "meta/meta.html" %} - {% if meta and meta.title %}{{ meta.title }}{% else %}{% block title %}We All Code{% endblock title %}{% endif %} + {% if meta and meta.title %} + {{ meta.title }} + {% else %} + {% block title %}We All Code{% endblock title %} + {% endif %} @@ -82,7 +86,6 @@ {% block extra_body %}{% endblock %} -