aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--Pipfile2
-rw-r--r--Pipfile.lock60
-rw-r--r--pydis_site/apps/home/resources/books/byte_of_python.yaml17
-rw-r--r--pydis_site/apps/home/resources/communities/adafruit.yaml14
-rw-r--r--pydis_site/apps/home/resources/communities/functional_programming.yaml10
-rw-r--r--pydis_site/apps/home/resources/communities/pallets.yaml10
-rw-r--r--pydis_site/apps/home/resources/communities/rlbot.yaml11
-rw-r--r--pydis_site/apps/home/resources/communities/subreddit.yaml8
-rw-r--r--pydis_site/apps/home/resources/editors/atom.yaml12
-rw-r--r--pydis_site/apps/home/resources/editors/mu_editor.yaml12
-rw-r--r--pydis_site/apps/home/resources/editors/sublime_text.yaml9
-rw-r--r--pydis_site/apps/home/resources/editors/visual_studio_code.yaml11
-rw-r--r--pydis_site/apps/home/resources/ides/_category_info.yaml2
-rw-r--r--pydis_site/apps/home/resources/ides/pycharm.yaml10
-rw-r--r--pydis_site/apps/home/resources/ides/spyder.yaml12
-rw-r--r--pydis_site/apps/home/resources/ides/thonny.yaml12
-rw-r--r--pydis_site/apps/home/resources/interactive_learning_tools/_category_info.yaml3
-rw-r--r--pydis_site/apps/home/resources/interactive_learning_tools/automate_the_boring_stuff.yaml11
-rw-r--r--pydis_site/apps/home/resources/interactive_learning_tools/learn_to_program.yaml13
-rw-r--r--pydis_site/apps/home/resources/interactive_learning_tools/mit_python.yaml10
-rw-r--r--pydis_site/apps/home/resources/interactive_learning_tools/programming_for_everybody.yaml10
-rw-r--r--pydis_site/apps/home/resources/misc/_category_info.yaml2
-rw-r--r--pydis_site/apps/home/resources/misc/good_first_issue_tag.yaml10
-rw-r--r--pydis_site/apps/home/resources/misc/python_cheat_sheet.yaml9
-rw-r--r--pydis_site/apps/home/resources/podcasts/_category_info.yaml2
-rw-r--r--pydis_site/apps/home/resources/tutorials/_category_info.yaml3
-rw-r--r--pydis_site/apps/home/resources/tutorials/corey_schafer.yaml7
-rw-r--r--pydis_site/apps/home/resources/tutorials/get_started_with_flask.yaml9
-rw-r--r--pydis_site/apps/home/resources/tutorials/getting_started_with_python.yaml12
-rw-r--r--pydis_site/apps/home/resources/tutorials/hitchhikers_guide_to_python.yaml10
-rw-r--r--pydis_site/apps/home/resources/tutorials/sentdex.yaml8
-rw-r--r--pydis_site/apps/home/resources/tutorials/simple_guide_to_git.yaml8
-rw-r--r--pydis_site/apps/resources/resources/communities/_category_info.yaml (renamed from pydis_site/apps/home/resources/communities/_category_info.yaml)2
-rw-r--r--pydis_site/apps/resources/resources/communities/adafruit.yaml15
-rw-r--r--pydis_site/apps/resources/resources/communities/awesome_programming_discord.yaml9
-rw-r--r--pydis_site/apps/resources/resources/communities/kivy.yaml18
-rw-r--r--pydis_site/apps/resources/resources/communities/microsoft.yaml12
-rw-r--r--pydis_site/apps/resources/resources/communities/pallets.yaml13
-rw-r--r--pydis_site/apps/resources/resources/communities/panda3d.yaml12
-rw-r--r--pydis_site/apps/resources/resources/communities/people_postgres_data.yaml18
-rw-r--r--pydis_site/apps/resources/resources/communities/pyglet.yaml15
-rw-r--r--pydis_site/apps/resources/resources/communities/real_python.yaml12
-rw-r--r--pydis_site/apps/resources/resources/communities/rlbot.yaml13
-rw-r--r--pydis_site/apps/resources/resources/communities/subreddit.yaml6
-rw-r--r--pydis_site/apps/resources/resources/courses/_category_info.yaml4
-rw-r--r--pydis_site/apps/resources/resources/courses/automate_the_boring_stuff_with_python.yaml5
-rw-r--r--pydis_site/apps/resources/resources/courses/mit_introduction_to_computer_science_and_programming.yaml6
-rw-r--r--pydis_site/apps/resources/resources/courses/practical_python_programming.yaml9
-rw-r--r--pydis_site/apps/resources/resources/courses/university_of_michigan.yaml5
-rw-r--r--pydis_site/apps/resources/resources/courses/university_of_toronto.yaml11
-rw-r--r--pydis_site/apps/resources/resources/interactive/_category_info.yaml4
-rw-r--r--pydis_site/apps/resources/resources/interactive/code_combat.yaml (renamed from pydis_site/apps/home/resources/interactive_learning_tools/code_combat.yaml)8
-rw-r--r--pydis_site/apps/resources/resources/interactive/edublocks.yaml10
-rw-r--r--pydis_site/apps/resources/resources/interactive/exercism.yaml (renamed from pydis_site/apps/home/resources/interactive_learning_tools/exercism.yaml)7
-rw-r--r--pydis_site/apps/resources/resources/interactive/jetbrains_academy.yaml8
-rw-r--r--pydis_site/apps/resources/resources/interactive/python_morsels.yaml (renamed from pydis_site/apps/home/resources/interactive_learning_tools/python_morsels.yaml)9
-rw-r--r--pydis_site/apps/resources/resources/interactive/python_tutor.yaml4
-rw-r--r--pydis_site/apps/resources/resources/interactive/sololearn.yaml7
-rw-r--r--pydis_site/apps/resources/resources/podcasts/_category_info.yaml4
-rw-r--r--pydis_site/apps/resources/resources/podcasts/podcast_dunder_init.yaml (renamed from pydis_site/apps/home/resources/podcasts/podcast_dunder_init.yaml)8
-rw-r--r--pydis_site/apps/resources/resources/podcasts/python_bytes.yaml (renamed from pydis_site/apps/home/resources/podcasts/python_bytes.yaml)8
-rw-r--r--pydis_site/apps/resources/resources/podcasts/talk_python_to_me.yaml (renamed from pydis_site/apps/home/resources/podcasts/talk_python_to_me.yaml)8
-rw-r--r--pydis_site/apps/resources/resources/podcasts/test_and_code.yaml5
-rw-r--r--pydis_site/apps/resources/resources/podcasts/the_real_python_podcast.yaml7
-rw-r--r--pydis_site/apps/resources/resources/reading/_category_info.yaml2
-rw-r--r--pydis_site/apps/resources/resources/reading/books/_category_info.yaml (renamed from pydis_site/apps/home/resources/books/_category_info.yaml)5
-rw-r--r--pydis_site/apps/resources/resources/reading/books/automate_the_boring_stuff.yaml (renamed from pydis_site/apps/home/resources/books/automate_the_boring_stuff.yaml)10
-rw-r--r--pydis_site/apps/resources/resources/reading/books/byte_of_python.yaml15
-rw-r--r--pydis_site/apps/resources/resources/reading/books/effective_python.yaml (renamed from pydis_site/apps/home/resources/books/effective_python.yaml)8
-rw-r--r--pydis_site/apps/resources/resources/reading/books/flask_web_development.yaml (renamed from pydis_site/apps/home/resources/books/flask_web_development.yaml)8
-rw-r--r--pydis_site/apps/resources/resources/reading/books/fluent_python.yaml (renamed from pydis_site/apps/home/resources/books/fluent_python.yaml)10
-rw-r--r--pydis_site/apps/resources/resources/reading/books/hitchhikers_guide_to_python.yaml11
-rw-r--r--pydis_site/apps/resources/resources/reading/books/inferential_thinking.yaml9
-rw-r--r--pydis_site/apps/resources/resources/reading/books/mission_python.yaml (renamed from pydis_site/apps/home/resources/books/mission_python.yaml)6
-rw-r--r--pydis_site/apps/resources/resources/reading/books/neural_networks_from_scratch_in_python.yaml10
-rw-r--r--pydis_site/apps/resources/resources/reading/books/python_cookbook.yaml (renamed from pydis_site/apps/home/resources/books/python_cookbook.yaml)12
-rw-r--r--pydis_site/apps/resources/resources/reading/books/python_crash_course.yaml20
-rw-r--r--pydis_site/apps/resources/resources/reading/books/python_tricks.yaml (renamed from pydis_site/apps/home/resources/books/python_tricks.yaml)6
-rw-r--r--pydis_site/apps/resources/resources/reading/books/think_python.yaml17
-rw-r--r--pydis_site/apps/resources/resources/reading/books/two_scoops_of_django.yaml (renamed from pydis_site/apps/home/resources/books/two_scoops_of_django.yaml)12
-rw-r--r--pydis_site/apps/resources/resources/reading/tutorials/_category_info.yaml5
-rw-r--r--pydis_site/apps/resources/resources/reading/tutorials/getting_started_with_kivy.yaml5
-rw-r--r--pydis_site/apps/resources/resources/reading/tutorials/getting_started_with_python_for_non_programmers.yaml5
-rw-r--r--pydis_site/apps/resources/resources/reading/tutorials/getting_started_with_python_for_programmers.yaml5
-rw-r--r--pydis_site/apps/resources/resources/reading/tutorials/python_cheat_sheet.yaml5
-rw-r--r--pydis_site/apps/resources/resources/reading/tutorials/python_developer_guide.yaml5
-rw-r--r--pydis_site/apps/resources/resources/reading/tutorials/simple_guide_to_git.yaml6
-rw-r--r--pydis_site/apps/resources/resources/reading/tutorials/the_flask_mega_tutorial.yaml4
-rw-r--r--pydis_site/apps/resources/resources/reading/tutorials/wtf_python.yaml8
-rw-r--r--pydis_site/apps/resources/resources/tools/_category_info.yaml4
-rw-r--r--pydis_site/apps/resources/resources/tools/accessibility_tools/_category_info.yaml5
-rw-r--r--pydis_site/apps/resources/resources/tools/accessibility_tools/screen_readers.yaml7
-rw-r--r--pydis_site/apps/resources/resources/tools/accessibility_tools/talon_voice.yaml6
-rw-r--r--pydis_site/apps/resources/resources/tools/editors/_category_info.yaml (renamed from pydis_site/apps/home/resources/editors/_category_info.yaml)3
-rw-r--r--pydis_site/apps/resources/resources/tools/editors/atom.yaml5
-rw-r--r--pydis_site/apps/resources/resources/tools/editors/google_collab.yaml7
-rw-r--r--pydis_site/apps/resources/resources/tools/editors/mu_editor.yaml7
-rw-r--r--pydis_site/apps/resources/resources/tools/editors/sublime_text.yaml5
-rw-r--r--pydis_site/apps/resources/resources/tools/editors/visual_studio_code.yaml4
-rw-r--r--pydis_site/apps/resources/resources/tools/ides/_category_info.yaml5
-rw-r--r--pydis_site/apps/resources/resources/tools/ides/pycharm.yaml5
-rw-r--r--pydis_site/apps/resources/resources/tools/ides/repl_it.yaml5
-rw-r--r--pydis_site/apps/resources/resources/tools/ides/spyder.yaml5
-rw-r--r--pydis_site/apps/resources/resources/tools/ides/thonny.yaml5
-rw-r--r--pydis_site/apps/resources/resources/videos/_category_info.yaml2
-rw-r--r--pydis_site/apps/resources/resources/videos/corey_schafer.yaml19
-rw-r--r--pydis_site/apps/resources/resources/videos/jetbrains.yaml12
-rw-r--r--pydis_site/apps/resources/resources/videos/jim_shaped_coding.yaml13
-rw-r--r--pydis_site/apps/resources/resources/videos/microsoft.yaml18
-rw-r--r--pydis_site/apps/resources/resources/videos/python_discord.yaml8
-rw-r--r--pydis_site/apps/resources/resources/videos/sentdex.yaml22
-rw-r--r--pydis_site/apps/resources/templatetags/__init__.py3
-rw-r--r--pydis_site/apps/resources/templatetags/as_icon.py14
-rw-r--r--pydis_site/apps/resources/tests/test_as_icon.py28
-rw-r--r--pydis_site/apps/resources/tests/test_views.py24
-rw-r--r--pydis_site/apps/resources/tests/testing_resources/testing/_category_info.yaml1
-rw-r--r--pydis_site/apps/resources/tests/testing_resources/testing/foobar/_category_info.yaml1
-rw-r--r--pydis_site/apps/resources/tests/testing_resources/testing/foobar/resource_test.yaml1
-rw-r--r--pydis_site/apps/resources/tests/testing_resources/testing/my_resource.yaml1
-rw-r--r--pydis_site/apps/resources/urls.py1
-rw-r--r--pydis_site/apps/resources/utils.py42
-rw-r--r--pydis_site/apps/resources/views/__init__.py3
-rw-r--r--pydis_site/apps/resources/views/resources_list.py39
-rw-r--r--pydis_site/settings.py3
-rw-r--r--pydis_site/static/css/resources/resources_list.css55
-rw-r--r--pydis_site/templates/resources/resource_box.html22
-rw-r--r--pydis_site/templates/resources/resource_box_header.html24
-rw-r--r--pydis_site/templates/resources/resources.html14
-rw-r--r--pydis_site/templates/resources/resources_list.html52
129 files changed, 940 insertions, 390 deletions
diff --git a/Pipfile b/Pipfile
index c51215b6..9ec75e84 100644
--- a/Pipfile
+++ b/Pipfile
@@ -11,7 +11,7 @@ django-hosts = "~=4.0"
djangorestframework = "~=3.11.0"
djangorestframework-bulk = "~=0.2.1"
psycopg2-binary = "~=2.8"
-django-simple-bulma = "~=1.2"
+django-simple-bulma = "~=2.1"
whitenoise = "~=5.0"
requests = "~=2.21"
pyyaml = "~=5.1"
diff --git a/Pipfile.lock b/Pipfile.lock
index 6125e538..8a81b34d 100644
--- a/Pipfile.lock
+++ b/Pipfile.lock
@@ -1,7 +1,7 @@
{
"_meta": {
"hash": {
- "sha256": "dc85f4f1b6ef58c2832d79542d6e88729cd2464bdf9324fef4d0757561f07ca7"
+ "sha256": "a3ca73db3d86d7e8e7cc833ea4fe6aa464332d061c6319bf0c83ee4cb9ed7a27"
},
"pipfile-spec": 6,
"requires": {
@@ -73,11 +73,11 @@
},
"django-simple-bulma": {
"hashes": [
- "sha256:79928fa983151947c635acf65fa5177ca775db98c8d53ddf1c785fe48c727466",
- "sha256:e5cff3fc5f0d45558362ab8d0e11f92887c4fc85616f77daa6174940f94b12c7"
+ "sha256:048d957a4c2a3c37c461082d07c473e72abef2f706a619bc069a78bef98c84ac",
+ "sha256:0894e247b7f6e88432894f10e7c051fba867df5cd645e42de2b94892dacaeeba"
],
"index": "pypi",
- "version": "==1.3.2"
+ "version": "==2.1.0"
},
"djangorestframework": {
"hashes": [
@@ -96,11 +96,11 @@
},
"gitdb": {
"hashes": [
- "sha256:91f36bfb1ab7949b3b40e23736db18231bf7593edada2ba5c3a174a7b23657ac",
- "sha256:c9e1f2d0db7ddb9a704c2a0217be31214e91a4fe1dea1efad19ae42ba0c285c9"
+ "sha256:6c4cc71933456991da20917998acbe6cf4fb41eeaab7d6d67fbc05ecd4c865b0",
+ "sha256:96bf5c08b157a666fec41129e6d327235284cca4c81e92109260f353ba138005"
],
"markers": "python_version >= '3.4'",
- "version": "==4.0.5"
+ "version": "==4.0.7"
},
"gitpython": {
"hashes": [
@@ -120,11 +120,11 @@
},
"importlib-metadata": {
"hashes": [
- "sha256:742add720a20d0467df2f444ae41704000f50e1234f46174b51f9c6031a1bd71",
- "sha256:b74159469b464a99cb8cc3e21973e4d96e05d3024d337313fedb618a6e86e6f4"
+ "sha256:c9db46394197244adf2f0b08ec5bc3cf16757e9590b02af1fca085c16c0d600a",
+ "sha256:d2d46ef77ffc85cbf7dac7e81dd663fde71c45326131bea8033b9bad42268ebe"
],
"markers": "python_version < '3.8'",
- "version": "==3.7.3"
+ "version": "==3.10.0"
},
"libsass": {
"hashes": [
@@ -290,11 +290,11 @@
},
"smmap": {
"hashes": [
- "sha256:7bfcf367828031dc893530a29cb35eb8c8f2d7c8f2d0989354d75d24c8573714",
- "sha256:84c2751ef3072d4f6b2785ec7ee40244c6f45eb934d9e543e2c51f1bd3d54c50"
+ "sha256:7e65386bd122d45405ddf795637b7f7d2b532e7e401d46bbe3fb49b9986d5182",
+ "sha256:a9a7479e4c572e2e775c404dcd3080c8dc49f39918c2cf74913d30c4c478e3c2"
],
- "markers": "python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3'",
- "version": "==3.0.5"
+ "markers": "python_version >= '3.5'",
+ "version": "==4.0.0"
},
"sqlparse": {
"hashes": [
@@ -520,11 +520,11 @@
},
"gitdb": {
"hashes": [
- "sha256:91f36bfb1ab7949b3b40e23736db18231bf7593edada2ba5c3a174a7b23657ac",
- "sha256:c9e1f2d0db7ddb9a704c2a0217be31214e91a4fe1dea1efad19ae42ba0c285c9"
+ "sha256:6c4cc71933456991da20917998acbe6cf4fb41eeaab7d6d67fbc05ecd4c865b0",
+ "sha256:96bf5c08b157a666fec41129e6d327235284cca4c81e92109260f353ba138005"
],
"markers": "python_version >= '3.4'",
- "version": "==4.0.5"
+ "version": "==4.0.7"
},
"gitpython": {
"hashes": [
@@ -536,19 +536,19 @@
},
"identify": {
"hashes": [
- "sha256:39c0b110c9d0cd2391b6c38cd0ff679ee4b4e98f8db8b06c5d9d9e502711a1e1",
- "sha256:efbf090a619255bc31c4fbba709e2805f7d30913fd4854ad84ace52bd276e2f6"
+ "sha256:43cb1965e84cdd247e875dec6d13332ef5be355ddc16776396d98089b9053d87",
+ "sha256:c7c0f590526008911ccc5ceee6ed7b085cbc92f7b6591d0ee5913a130ad64034"
],
"markers": "python_full_version >= '3.6.1'",
- "version": "==2.2.0"
+ "version": "==2.2.2"
},
"importlib-metadata": {
"hashes": [
- "sha256:742add720a20d0467df2f444ae41704000f50e1234f46174b51f9c6031a1bd71",
- "sha256:b74159469b464a99cb8cc3e21973e4d96e05d3024d337313fedb618a6e86e6f4"
+ "sha256:c9db46394197244adf2f0b08ec5bc3cf16757e9590b02af1fca085c16c0d600a",
+ "sha256:d2d46ef77ffc85cbf7dac7e81dd663fde71c45326131bea8033b9bad42268ebe"
],
"markers": "python_version < '3.8'",
- "version": "==3.7.3"
+ "version": "==3.10.0"
},
"mccabe": {
"hashes": [
@@ -615,11 +615,11 @@
},
"pyflakes": {
"hashes": [
- "sha256:910208209dcea632721cb58363d0f72913d9e8cf64dc6f8ae2e02a3609aba40d",
- "sha256:e59fd8e750e588358f1b8885e5a4751203a0516e0ee6d34811089ac294c8806f"
+ "sha256:7893783d01b8a89811dd72d7dfd4d84ff098e5eed95cfa8905b22bbffe52efc3",
+ "sha256:f5bc8ecabc05bb9d291eb5203d6810b49040f6ff446a756326104746cc00c1db"
],
"markers": "python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3'",
- "version": "==2.3.0"
+ "version": "==2.3.1"
},
"pyyaml": {
"hashes": [
@@ -666,11 +666,11 @@
},
"smmap": {
"hashes": [
- "sha256:7bfcf367828031dc893530a29cb35eb8c8f2d7c8f2d0989354d75d24c8573714",
- "sha256:84c2751ef3072d4f6b2785ec7ee40244c6f45eb934d9e543e2c51f1bd3d54c50"
+ "sha256:7e65386bd122d45405ddf795637b7f7d2b532e7e401d46bbe3fb49b9986d5182",
+ "sha256:a9a7479e4c572e2e775c404dcd3080c8dc49f39918c2cf74913d30c4c478e3c2"
],
- "markers": "python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3'",
- "version": "==3.0.5"
+ "markers": "python_version >= '3.5'",
+ "version": "==4.0.0"
},
"snowballstemmer": {
"hashes": [
diff --git a/pydis_site/apps/home/resources/books/byte_of_python.yaml b/pydis_site/apps/home/resources/books/byte_of_python.yaml
deleted file mode 100644
index f3eca902..00000000
--- a/pydis_site/apps/home/resources/books/byte_of_python.yaml
+++ /dev/null
@@ -1,17 +0,0 @@
-description: A free book on programming using the Python language. It serves as a
- tutorial or guide to the Python language for a beginner audience. If all you know
- about computers is how to save text files, then this is the book for you.
-name: A Byte of Python
-payment: optional
-payment_description: A free e-book is available online, a paper version can be bought
- from lulu.com.
-urls:
-- icon: regular/link
- title: E-book
- url: https://python.swaroopch.com/
-- icon: regular/book
- title: Buy the book
- url: http://www.lulu.com/shop/swaroop-c-h/a-byte-of-python/paperback/product-21142968.html
-- icon: regular/tablet-alt
- title: Kindle edition
- url: https://www.amazon.com/Byte-Python-Swaroop-C-H-ebook/dp/B00FJ7S2JU/
diff --git a/pydis_site/apps/home/resources/communities/adafruit.yaml b/pydis_site/apps/home/resources/communities/adafruit.yaml
deleted file mode 100644
index 193f7364..00000000
--- a/pydis_site/apps/home/resources/communities/adafruit.yaml
+++ /dev/null
@@ -1,14 +0,0 @@
-description: 'Adafruit is an open-source electronics manufacturer that makes all the
- components you need to start your own Python-powered hardware projects.
-
-
- Their official community host regular show-and-tells, provide help with your projects,
- and the Adafruit devs do all the CircuitPython development right out in the open.
- Join the Maker Revolution today!'
-name: 'Discord: Adafruit'
-payment: free
-payment_description: null
-urls:
-- icon: branding/discord
- title: Adafruit Discord
- url: https://discord.gg/adafruit
diff --git a/pydis_site/apps/home/resources/communities/functional_programming.yaml b/pydis_site/apps/home/resources/communities/functional_programming.yaml
deleted file mode 100644
index ab99f264..00000000
--- a/pydis_site/apps/home/resources/communities/functional_programming.yaml
+++ /dev/null
@@ -1,10 +0,0 @@
-description: Functional Programming is a server for discussing functional languages
- like Haskell, Idris, Elixir and Lisp as well as related academic fields such as
- type theory, category theory, proof assistants, and more!
-name: 'Discord: Functional Programming'
-payment: free
-payment_description: null
-urls:
-- icon: branding/discord
- title: Functional Programming Discord
- url: https://discord.gg/kWJYurV
diff --git a/pydis_site/apps/home/resources/communities/pallets.yaml b/pydis_site/apps/home/resources/communities/pallets.yaml
deleted file mode 100644
index e5a18983..00000000
--- a/pydis_site/apps/home/resources/communities/pallets.yaml
+++ /dev/null
@@ -1,10 +0,0 @@
-description: The Pallets Projects develop Python libraries such as the Flask web framework,
- the Jinja templating library, and the Click command line toolkit. Join to discuss
- and get help from the Pallets community.
-name: 'Discord: The Pallets Project'
-payment: free
-payment_description: null
-urls:
-- icon: branding/discord
- title: The Pallets Project Discord
- url: https://discord.gg/t6rrQZH
diff --git a/pydis_site/apps/home/resources/communities/rlbot.yaml b/pydis_site/apps/home/resources/communities/rlbot.yaml
deleted file mode 100644
index c62e0260..00000000
--- a/pydis_site/apps/home/resources/communities/rlbot.yaml
+++ /dev/null
@@ -1,11 +0,0 @@
-description: RLBot is a community of programmers making awesome Rocket League bots.
- They've created a framework that you can use to write bots in a number of languages
- (including Python), and they host regular tournaments where botmakers can pit their
- creations against each other.
-name: 'Discord: RLBot'
-payment: free
-payment_description: null
-urls:
-- icon: branding/discord
- title: RLBot Discord
- url: https://discord.gg/4JJdJKb
diff --git a/pydis_site/apps/home/resources/communities/subreddit.yaml b/pydis_site/apps/home/resources/communities/subreddit.yaml
deleted file mode 100644
index 217a84ac..00000000
--- a/pydis_site/apps/home/resources/communities/subreddit.yaml
+++ /dev/null
@@ -1,8 +0,0 @@
-description: News about the Python programming language, and language-related discussion
-name: 'Subreddit: r/Python'
-payment: free
-payment_description: null
-urls:
-- icon: branding/reddit-alien
- title: r/Python on Reddit
- url: https://www.reddit.com/r/Python/
diff --git a/pydis_site/apps/home/resources/editors/atom.yaml b/pydis_site/apps/home/resources/editors/atom.yaml
deleted file mode 100644
index f05e45a3..00000000
--- a/pydis_site/apps/home/resources/editors/atom.yaml
+++ /dev/null
@@ -1,12 +0,0 @@
-description: A free Electron-based editor, a "hackable text editor for the 21st century", maintained
- by the GitHub team.
-name: Atom
-payment: free
-payment_description: null
-urls:
-- icon: regular/link
- title: Website
- url: https://atom.io/
-- icon: branding/github
- title: GitHub
- url: https://github.com/atom/atom
diff --git a/pydis_site/apps/home/resources/editors/mu_editor.yaml b/pydis_site/apps/home/resources/editors/mu_editor.yaml
deleted file mode 100644
index cb44d750..00000000
--- a/pydis_site/apps/home/resources/editors/mu_editor.yaml
+++ /dev/null
@@ -1,12 +0,0 @@
-description: An editor aimed at beginners for the purpose of learning how to code
- without the distractions more advanced editors sometimes cause.
-name: Mu-Editor
-payment: free
-payment_description: null
-urls:
-- icon: regular/link
- title: Website
- url: https://codewith.mu/en/
-- icon: branding/github
- title: GitHub
- url: https://github.com/mu-editor/mu/
diff --git a/pydis_site/apps/home/resources/editors/sublime_text.yaml b/pydis_site/apps/home/resources/editors/sublime_text.yaml
deleted file mode 100644
index 97952d35..00000000
--- a/pydis_site/apps/home/resources/editors/sublime_text.yaml
+++ /dev/null
@@ -1,9 +0,0 @@
-description: A powerful Python-backed editor with great community support and a wealth
- of extensions.
-name: Sublime Text
-payment: optional
-payment_description: Nagware; will ask you to buy the full version after every X saves
-urls:
-- icon: regular/link
- title: Website
- url: https://www.sublimetext.com/
diff --git a/pydis_site/apps/home/resources/editors/visual_studio_code.yaml b/pydis_site/apps/home/resources/editors/visual_studio_code.yaml
deleted file mode 100644
index 4e1f946f..00000000
--- a/pydis_site/apps/home/resources/editors/visual_studio_code.yaml
+++ /dev/null
@@ -1,11 +0,0 @@
-description: A fully-featured editor based on Electron, extendable with plugins.
-name: Visual Studio Code
-payment: free
-payment_description: null
-urls:
-- icon: regular/link
- title: Website
- url: https://code.visualstudio.com/
-- icon: branding/github
- title: GitHub
- url: https://github.com/Microsoft/vscode
diff --git a/pydis_site/apps/home/resources/ides/_category_info.yaml b/pydis_site/apps/home/resources/ides/_category_info.yaml
deleted file mode 100644
index d331c95d..00000000
--- a/pydis_site/apps/home/resources/ides/_category_info.yaml
+++ /dev/null
@@ -1,2 +0,0 @@
-description: Fully-integrated development environments for serious Python work
-name: IDEs
diff --git a/pydis_site/apps/home/resources/ides/pycharm.yaml b/pydis_site/apps/home/resources/ides/pycharm.yaml
deleted file mode 100644
index 4624cb41..00000000
--- a/pydis_site/apps/home/resources/ides/pycharm.yaml
+++ /dev/null
@@ -1,10 +0,0 @@
-description: The very best Python IDE, with a wealth of advanced features and convenience
- functions.
-name: PyCharm
-payment: optional
-payment_description: There's a free Community Edition and a paid-for Professional
- Edition with more features available
-urls:
-- icon: regular/link
- title: Website
- url: https://www.jetbrains.com/pycharm/
diff --git a/pydis_site/apps/home/resources/ides/spyder.yaml b/pydis_site/apps/home/resources/ides/spyder.yaml
deleted file mode 100644
index 146b3549..00000000
--- a/pydis_site/apps/home/resources/ides/spyder.yaml
+++ /dev/null
@@ -1,12 +0,0 @@
-description: The Scientific PYthon Development EnviRonment. Simpler and lighter than
- PyCharm, but still packs a punch.
-name: Spyder
-payment: free
-payment_description: null
-urls:
-- icon: regular/link
- title: Website
- url: https://www.spyder-ide.org/
-- icon: branding/github
- title: GitHub
- url: https://github.com/spyder-ide/spyder
diff --git a/pydis_site/apps/home/resources/ides/thonny.yaml b/pydis_site/apps/home/resources/ides/thonny.yaml
deleted file mode 100644
index d660094b..00000000
--- a/pydis_site/apps/home/resources/ides/thonny.yaml
+++ /dev/null
@@ -1,12 +0,0 @@
-description: A Python IDE specifially aimed at learning programming. Has a lot of
- helpful features to help you understand your code.
-name: Thonny
-payment: free
-payment_description: null
-urls:
-- icon: regular/link
- title: Website
- url: https://thonny.org/
-- icon: branding/github
- title: GitHub
- url: https://github.com/thonny/thonny/
diff --git a/pydis_site/apps/home/resources/interactive_learning_tools/_category_info.yaml b/pydis_site/apps/home/resources/interactive_learning_tools/_category_info.yaml
deleted file mode 100644
index 08501627..00000000
--- a/pydis_site/apps/home/resources/interactive_learning_tools/_category_info.yaml
+++ /dev/null
@@ -1,3 +0,0 @@
-description: Learn Python with interactive content like courses, games and programming
- challenges.
-name: Interactive Learning Tools
diff --git a/pydis_site/apps/home/resources/interactive_learning_tools/automate_the_boring_stuff.yaml b/pydis_site/apps/home/resources/interactive_learning_tools/automate_the_boring_stuff.yaml
deleted file mode 100644
index 02d76b3b..00000000
--- a/pydis_site/apps/home/resources/interactive_learning_tools/automate_the_boring_stuff.yaml
+++ /dev/null
@@ -1,11 +0,0 @@
-description: The interactive course version of Al Sweigart's excellent book for beginners,
- taught by the author himself. This link has a discounted version of the course which
- will always cost 10 dollars. Thanks, Al!
-name: Automate the Boring Stuff with Python
-payment: paid
-payment_description: Paid course with a certificate of completion. Some sample videos
- are available for free.
-urls:
-- icon: regular/graduation-cap
- title: Udemy Course
- url: https://www.udemy.com/automate/?couponCode=FOR_LIKE_10_BUCKS
diff --git a/pydis_site/apps/home/resources/interactive_learning_tools/learn_to_program.yaml b/pydis_site/apps/home/resources/interactive_learning_tools/learn_to_program.yaml
deleted file mode 100644
index 265f1644..00000000
--- a/pydis_site/apps/home/resources/interactive_learning_tools/learn_to_program.yaml
+++ /dev/null
@@ -1,13 +0,0 @@
-description: A 2-part course that teaches Python. Primarily intended for high school
- students and first-year university students who want to learn programming.
-name: 'University of Toronto: Learn to Program'
-payment: optional
-payment_description: You can pay to enroll for a graded certificate, or choose to
- audit for free.
-urls:
-- icon: regular/graduation-cap
- title: 'Part 1: The Fundamentals'
- url: https://www.coursera.org/learn/learn-to-program
-- icon: regular/graduation-cap
- title: 'Part 2: Crafting Quality Code'
- url: https://www.coursera.org/learn/program-code
diff --git a/pydis_site/apps/home/resources/interactive_learning_tools/mit_python.yaml b/pydis_site/apps/home/resources/interactive_learning_tools/mit_python.yaml
deleted file mode 100644
index 464b8d4a..00000000
--- a/pydis_site/apps/home/resources/interactive_learning_tools/mit_python.yaml
+++ /dev/null
@@ -1,10 +0,0 @@
-description: This MITx offering teaches computer science with Python. It covers computational
- thinking, algorithms, data structures and the Python programming language itself.
-name: 'MIT: Introduction to Computer Science and Programming Using Python'
-payment: optional
-payment_description: You can pay to enroll for a graded certificate, or choose to
- take the full course for free.
-urls:
-- icon: regular/graduation-cap
- title: edX Course
- url: https://www.edx.org/course/introduction-computer-science-mitx-6-00-1x-11
diff --git a/pydis_site/apps/home/resources/interactive_learning_tools/programming_for_everybody.yaml b/pydis_site/apps/home/resources/interactive_learning_tools/programming_for_everybody.yaml
deleted file mode 100644
index a6d7abe1..00000000
--- a/pydis_site/apps/home/resources/interactive_learning_tools/programming_for_everybody.yaml
+++ /dev/null
@@ -1,10 +0,0 @@
-description: A 5-part specialization course that teaches Python from scratch. The
- course has no pre-requisites and avoids all but the simplest mathematics.
-name: 'University of Michigan: Programming for Everybody'
-payment: optional
-payment_description: You can pay to enroll for a graded certificate and a capstone
- project, or choose to audit for free.
-urls:
-- icon: regular/graduation-cap
- title: Python for Everyone Specialization
- url: https://www.coursera.org/learn/python
diff --git a/pydis_site/apps/home/resources/misc/_category_info.yaml b/pydis_site/apps/home/resources/misc/_category_info.yaml
deleted file mode 100644
index 4fdc4bf7..00000000
--- a/pydis_site/apps/home/resources/misc/_category_info.yaml
+++ /dev/null
@@ -1,2 +0,0 @@
-description: Resources which do not fit into the other categories
-name: Miscellaneous
diff --git a/pydis_site/apps/home/resources/misc/good_first_issue_tag.yaml b/pydis_site/apps/home/resources/misc/good_first_issue_tag.yaml
deleted file mode 100644
index 35d7a8a4..00000000
--- a/pydis_site/apps/home/resources/misc/good_first_issue_tag.yaml
+++ /dev/null
@@ -1,10 +0,0 @@
-description: Searching for opportunities to contribute to a Python project? GitHub
- repository maintainers often mark issues appropriate for novice users with the 'Good
- First Issue' tag. These issues can be explored directly on GitHub.
-name: GitHub's 'Good First Issue' Tag
-payment: free
-payment_description: null
-urls:
-- icon: branding/github
- title: GitHub
- url: https://github.com/search?utf8=%E2%9C%93&q=label%3A%22good+first+issue%22+language%3APython+state%3Aopen&type=Issues&ref=advsearch&l=Python&l=
diff --git a/pydis_site/apps/home/resources/misc/python_cheat_sheet.yaml b/pydis_site/apps/home/resources/misc/python_cheat_sheet.yaml
deleted file mode 100644
index 8c82a5a9..00000000
--- a/pydis_site/apps/home/resources/misc/python_cheat_sheet.yaml
+++ /dev/null
@@ -1,9 +0,0 @@
-description: A Python 3 cheat sheet with useful information and tips, as well as common
- pitfalls for beginners. This is a PDF.
-name: Python Cheat Sheet
-payment: free
-payment_description: null
-urls:
-- icon: regular/link
- title: Website
- url: https://perso.limsi.fr/pointal/_media/python:cours:mementopython3-english.pdf
diff --git a/pydis_site/apps/home/resources/podcasts/_category_info.yaml b/pydis_site/apps/home/resources/podcasts/_category_info.yaml
deleted file mode 100644
index a0f9025c..00000000
--- a/pydis_site/apps/home/resources/podcasts/_category_info.yaml
+++ /dev/null
@@ -1,2 +0,0 @@
-description: Notable podcasts about the Python ecosystem
-name: Podcasts
diff --git a/pydis_site/apps/home/resources/tutorials/_category_info.yaml b/pydis_site/apps/home/resources/tutorials/_category_info.yaml
deleted file mode 100644
index a9adc106..00000000
--- a/pydis_site/apps/home/resources/tutorials/_category_info.yaml
+++ /dev/null
@@ -1,3 +0,0 @@
-description: Tutorials and references for those that are just getting started with
- python
-name: Tutorials
diff --git a/pydis_site/apps/home/resources/tutorials/corey_schafer.yaml b/pydis_site/apps/home/resources/tutorials/corey_schafer.yaml
deleted file mode 100644
index 9fff4bbf..00000000
--- a/pydis_site/apps/home/resources/tutorials/corey_schafer.yaml
+++ /dev/null
@@ -1,7 +0,0 @@
-description: An in-depth look at the Python programming language, from one of
- YouTube's most popular Python tutors.
-payment: free
-urls:
- - icon: branding/youtube,
- title: YouTube,
- url: https://www.youtube.com/playlist?list=PL-osiE80TeTt2d9bfVyTiXJA-UTHn6WwU
diff --git a/pydis_site/apps/home/resources/tutorials/get_started_with_flask.yaml b/pydis_site/apps/home/resources/tutorials/get_started_with_flask.yaml
deleted file mode 100644
index 11dd2a4d..00000000
--- a/pydis_site/apps/home/resources/tutorials/get_started_with_flask.yaml
+++ /dev/null
@@ -1,9 +0,0 @@
-description: A fully featured mega-tutorial for learning how to create web applications
- with the Flask framework.
-name: Get Started with Flask Web Development
-payment: free
-payment_description: null
-urls:
-- icon: regular/link
- title: Website
- url: https://blog.miguelgrinberg.com/post/the-flask-mega-tutorial-part-i-hello-world
diff --git a/pydis_site/apps/home/resources/tutorials/getting_started_with_python.yaml b/pydis_site/apps/home/resources/tutorials/getting_started_with_python.yaml
deleted file mode 100644
index 777f2fe3..00000000
--- a/pydis_site/apps/home/resources/tutorials/getting_started_with_python.yaml
+++ /dev/null
@@ -1,12 +0,0 @@
-description: The list of resources for programmers and non-programmers from Python's
- official beginners' guide
-name: Getting Started with Python
-payment: free
-payment_description: null
-urls:
-- icon: regular/link
- title: Beginners Guide for Non-Programmers
- url: https://wiki.python.org/moin/BeginnersGuide/NonProgrammers
-- icon: regular/link
- title: Beginners Guide for Programmers
- url: https://wiki.python.org/moin/BeginnersGuide/Programmers
diff --git a/pydis_site/apps/home/resources/tutorials/hitchhikers_guide_to_python.yaml b/pydis_site/apps/home/resources/tutorials/hitchhikers_guide_to_python.yaml
deleted file mode 100644
index 38eebb56..00000000
--- a/pydis_site/apps/home/resources/tutorials/hitchhikers_guide_to_python.yaml
+++ /dev/null
@@ -1,10 +0,0 @@
-description: This opinionated guide exists to provide both novice and expert Python
- developers a best practice handbook to the installation, configuration, and usage
- of Python on a daily basis.
-name: The Hitchhiker's Guide to Python
-payment: free
-payment_description: null
-urls:
-- icon: regular/link
- title: Website
- url: https://python-guide.org/
diff --git a/pydis_site/apps/home/resources/tutorials/sentdex.yaml b/pydis_site/apps/home/resources/tutorials/sentdex.yaml
deleted file mode 100644
index cae2695b..00000000
--- a/pydis_site/apps/home/resources/tutorials/sentdex.yaml
+++ /dev/null
@@ -1,8 +0,0 @@
-description: A Python basics tutorial based around Python 3.7.
-name: Python Tutorials by Sentdex on YouTube
-payment: free
-payment_description: null
-urls:
-- icon: branding/youtube
- title: YouTube
- url: https://www.youtube.com/playlist?list=PLQVvvaa0QuDeAams7fkdcwOGBpGdHpXln
diff --git a/pydis_site/apps/home/resources/tutorials/simple_guide_to_git.yaml b/pydis_site/apps/home/resources/tutorials/simple_guide_to_git.yaml
deleted file mode 100644
index acf76efe..00000000
--- a/pydis_site/apps/home/resources/tutorials/simple_guide_to_git.yaml
+++ /dev/null
@@ -1,8 +0,0 @@
-description: A simple, no-nonsense guide to the basics of using Git.
-name: A Simple Guide to Git
-payment: free
-payment_description: null
-urls:
-- icon: regular/link
- title: Website
- url: http://rogerdudler.github.io/git-guide/
diff --git a/pydis_site/apps/home/resources/communities/_category_info.yaml b/pydis_site/apps/resources/resources/communities/_category_info.yaml
index eccb8b80..b9cb6533 100644
--- a/pydis_site/apps/home/resources/communities/_category_info.yaml
+++ b/pydis_site/apps/resources/resources/communities/_category_info.yaml
@@ -1,2 +1,2 @@
-description: Partnered communities that share part of our mission
+description: Partnered communities that share part of our mission.
name: Communities
diff --git a/pydis_site/apps/resources/resources/communities/adafruit.yaml b/pydis_site/apps/resources/resources/communities/adafruit.yaml
new file mode 100644
index 00000000..e5c81a6c
--- /dev/null
+++ b/pydis_site/apps/resources/resources/communities/adafruit.yaml
@@ -0,0 +1,15 @@
+description: Adafruit is an open-source electronics manufacturer
+ that makes all the components you need to start your own Python-powered hardware projects.
+ Their official community host regular show-and-tells,
+ provide help with your projects,
+ and the Adafruit devs do all the CircuitPython Development right out in the open.
+title_image: https://www.mouser.com/images/suppliers/logos/adafruit.png
+title_url: https://discord.gg/adafruit
+position: 4
+urls:
+- icon: branding/discord
+ url: https://discord.gg/adafruit
+ color: blurple
+- icon: regular/link
+ url: https://adafruit.com/
+ color: teal
diff --git a/pydis_site/apps/resources/resources/communities/awesome_programming_discord.yaml b/pydis_site/apps/resources/resources/communities/awesome_programming_discord.yaml
new file mode 100644
index 00000000..335ac507
--- /dev/null
+++ b/pydis_site/apps/resources/resources/communities/awesome_programming_discord.yaml
@@ -0,0 +1,9 @@
+description: We have listed our favourite communities,
+ but there are many more excellent communities out there!
+ An awesome list collating the best programming related Discord servers is available on GitHub
+ and has all sorts of topics from blockchain to virtual reality!
+title_icon: branding/github
+title_icon_color: black
+title_url: https://github.com/mhxion/awesome-programming-discord
+name: awesome-programming-discord
+position: 10
diff --git a/pydis_site/apps/resources/resources/communities/kivy.yaml b/pydis_site/apps/resources/resources/communities/kivy.yaml
new file mode 100644
index 00000000..601d7dba
--- /dev/null
+++ b/pydis_site/apps/resources/resources/communities/kivy.yaml
@@ -0,0 +1,18 @@
+description: The Kivy project, through the Kivy framework and its sister projects,
+ aims to provide all the tools to create desktop and mobile applications in Python.
+ Allowing rapid development of multitouch applications with custom and exciting user interfaces.
+icon_image: https://raw.githubusercontent.com/kivy/kivy-website/master/logos/kivy-logo-black-256.png
+icon_size: 50
+title_image: https://i.imgur.com/EVP3jZR.png
+title_url: https://discord.gg/djPtTRJ
+position: 5
+urls:
+ - icon: branding/discord
+ url: https://discord.gg/djPtTRJ
+ color: blurple
+ - icon: regular/link
+ url: https://kivy.org/
+ color: teal
+ - icon: branding/github
+ url: https://github.com/kivy
+ color: black
diff --git a/pydis_site/apps/resources/resources/communities/microsoft.yaml b/pydis_site/apps/resources/resources/communities/microsoft.yaml
new file mode 100644
index 00000000..b36c3a85
--- /dev/null
+++ b/pydis_site/apps/resources/resources/communities/microsoft.yaml
@@ -0,0 +1,12 @@
+description: Microsoft Python is a Discord server for discussing all things relating to using Python with Microsoft products,
+ they have channels for Azure, VS Code, IoT, Data Science and much more!
+title_image: https://1000logos.net/wp-content/uploads/2017/04/Microsoft-Logo.png
+title_url: https://discord.gg/b8YJQPx
+position: 1
+urls:
+ - icon: branding/discord
+ url: https://discord.gg/b8YJQPx
+ color: blurple
+ - icon: regular/link
+ url: https://www.microsoft.com/en-us/boards/pycon2020.aspx
+ color: teal
diff --git a/pydis_site/apps/resources/resources/communities/pallets.yaml b/pydis_site/apps/resources/resources/communities/pallets.yaml
new file mode 100644
index 00000000..239b1491
--- /dev/null
+++ b/pydis_site/apps/resources/resources/communities/pallets.yaml
@@ -0,0 +1,13 @@
+description: The Pallets Projects develop Python libraries such as the Flask web framework,
+ the Jinja templating library, and the Click command line toolkit. Join to discuss
+ and get help from the Pallets community.
+title_image: https://i.imgur.com/sV9Ypdf.png
+title_url: https://discord.gg/t6rrQZH
+position: 6
+urls:
+ - icon: branding/discord
+ url: https://discord.gg/t6rrQZH
+ color: blurple
+ - icon: regular/link
+ url: https://www.palletsprojects.com/
+ color: teal
diff --git a/pydis_site/apps/resources/resources/communities/panda3d.yaml b/pydis_site/apps/resources/resources/communities/panda3d.yaml
new file mode 100644
index 00000000..4235793d
--- /dev/null
+++ b/pydis_site/apps/resources/resources/communities/panda3d.yaml
@@ -0,0 +1,12 @@
+description: Panda3D is a Python-focused 3-D framework for rapid development of games,
+ visualizations, and simulations, written in C++ with an emphasis on performance and flexibility.
+title_image: http://www.panda3d.org/wp-content/uploads/2019/01/panda3d_logo.png
+title_url: https://discord.gg/9XsucTT
+position: 9
+urls:
+ - icon: branding/discord
+ url: https://discord.gg/9XsucTT
+ color: blurple
+ - icon: regular/link
+ url: https://www.panda3d.org/
+ color: teal
diff --git a/pydis_site/apps/resources/resources/communities/people_postgres_data.yaml b/pydis_site/apps/resources/resources/communities/people_postgres_data.yaml
new file mode 100644
index 00000000..1c17d343
--- /dev/null
+++ b/pydis_site/apps/resources/resources/communities/people_postgres_data.yaml
@@ -0,0 +1,18 @@
+description: People, Postgres, Data specializes in building users of Postgres
+ and related ecosystem including but not limited to technologies such as RDS Postgres,
+ Aurora for Postgres, Google Postgres, PostgreSQL.Org Postgres, Greenplum, Timescale and ZomboDB.
+ They take a holistic approach to their community inviting not only technical topics but Professional Development
+ and Life in general including movies, games, books and travel.
+title_image: https://media.discordapp.net/attachments/748954447857844318/750519488268730377/people_postgres_data.png
+title_url: https://discord.gg/Ujw8m8v
+position: 2
+urls:
+ - icon: branding/discord
+ url: https://discord.gg/Ujw8m8v
+ color: bluple
+ - icon: regular/link
+ url: https://postgresconf.org/
+ color: teal
+ - icon: branding/reddit
+ url: https://reddit.com/r/postgresql
+ color: orangered
diff --git a/pydis_site/apps/resources/resources/communities/pyglet.yaml b/pydis_site/apps/resources/resources/communities/pyglet.yaml
new file mode 100644
index 00000000..784f514e
--- /dev/null
+++ b/pydis_site/apps/resources/resources/communities/pyglet.yaml
@@ -0,0 +1,15 @@
+description: Pyglet is a powerful,
+ yet easy to use Python library for developing games and other visually-rich applications on Windows,
+ Mac OS X and Linux. It supports windowing, user interface event handling, Joysticks, OpenGL graphics,
+ loading images and videos, and playing sounds and music. All of this with a friendly Pythonic API,
+ that's simple to learn and doesn't get in your way.
+title_image: https://i.imgur.com/LfQwXUe.png
+title_url: https://discord.gg/QXyegWe
+position: 8
+urls:
+ - icon: branding/discord
+ url: https://discord.gg/QXyegWe
+ color: blurple
+ - icon: regular/link
+ url: http://pyglet.org/
+ color: teal
diff --git a/pydis_site/apps/resources/resources/communities/real_python.yaml b/pydis_site/apps/resources/resources/communities/real_python.yaml
new file mode 100644
index 00000000..1fc74d93
--- /dev/null
+++ b/pydis_site/apps/resources/resources/communities/real_python.yaml
@@ -0,0 +1,12 @@
+description: Dan Bader's treasure trove of quizzes, tutorials and interactive content for learning Python.
+ An absolute goldmine.
+title_image: https://i.imgur.com/WDqhZ36.png
+title_url: https://realpython.com/
+position: 3
+urls:
+ - icon: regular/link
+ url: https://realpython.com/
+ color: teal
+ - icon: branding/youtube
+ url: https://www.youtube.com/channel/UCI0vQvr9aFn27yR6Ej6n5UA
+ color: youtube-red
diff --git a/pydis_site/apps/resources/resources/communities/rlbot.yaml b/pydis_site/apps/resources/resources/communities/rlbot.yaml
new file mode 100644
index 00000000..d12c1dec
--- /dev/null
+++ b/pydis_site/apps/resources/resources/communities/rlbot.yaml
@@ -0,0 +1,13 @@
+description: RLBot is a community of programmers making awesome Rocket League bots.
+ They've created a framework that you can use to write bots in a number of languages (including Python),
+ and they host regular tournaments where botmakers can pit their creations against each other.
+title_image: https://i.imgur.com/S8L1muZ.png
+title_url: https://discord.gg/4JJdJKb
+position: 7
+urls:
+ - icon: branding/discord
+ url: https://discord.gg/4JJdJKb
+ color: blurple
+ - icon: regular/link
+ url: https://www.rlbot.org/
+ color: teal
diff --git a/pydis_site/apps/resources/resources/communities/subreddit.yaml b/pydis_site/apps/resources/resources/communities/subreddit.yaml
new file mode 100644
index 00000000..d3ddb15a
--- /dev/null
+++ b/pydis_site/apps/resources/resources/communities/subreddit.yaml
@@ -0,0 +1,6 @@
+description: News about the Python programming language, and language-related discussion.
+name: r/Python
+title_icon: branding/reddit
+title_icon_color: orangered
+title_url: https://www.reddit.com/r/Python/
+position: 0
diff --git a/pydis_site/apps/resources/resources/courses/_category_info.yaml b/pydis_site/apps/resources/resources/courses/_category_info.yaml
new file mode 100644
index 00000000..948b48de
--- /dev/null
+++ b/pydis_site/apps/resources/resources/courses/_category_info.yaml
@@ -0,0 +1,4 @@
+description: Listing of best Python courses.
+name: Courses
+default_icon: regular/graduation-cap
+default_icon_color: black
diff --git a/pydis_site/apps/resources/resources/courses/automate_the_boring_stuff_with_python.yaml b/pydis_site/apps/resources/resources/courses/automate_the_boring_stuff_with_python.yaml
new file mode 100644
index 00000000..66034ea2
--- /dev/null
+++ b/pydis_site/apps/resources/resources/courses/automate_the_boring_stuff_with_python.yaml
@@ -0,0 +1,5 @@
+description: The interactive course version of Al Sweigart's excellent book for beginners, taught by the author himself.
+ This link has a discounted version of the course which will always cost 10 dollars. Thanks, Al!
+name: Automate the Boring Stuff with Python
+title_url: https://www.udemy.com/automate/?couponCode=FOR_LIKE_10_BUCKS
+position: 3
diff --git a/pydis_site/apps/resources/resources/courses/mit_introduction_to_computer_science_and_programming.yaml b/pydis_site/apps/resources/resources/courses/mit_introduction_to_computer_science_and_programming.yaml
new file mode 100644
index 00000000..5560b2cb
--- /dev/null
+++ b/pydis_site/apps/resources/resources/courses/mit_introduction_to_computer_science_and_programming.yaml
@@ -0,0 +1,6 @@
+description: This MITx offering teaches computer science with Python.
+ It covers computational thinking, algorithms, data structures
+ and the Python programming language itself.
+name: 'MIT: Introduction to Computer Science and Programming'
+title_url: https://www.edx.org/course/introduction-computer-science-mitx-6-00-1x-11
+position: 1
diff --git a/pydis_site/apps/resources/resources/courses/practical_python_programming.yaml b/pydis_site/apps/resources/resources/courses/practical_python_programming.yaml
new file mode 100644
index 00000000..b801ca8c
--- /dev/null
+++ b/pydis_site/apps/resources/resources/courses/practical_python_programming.yaml
@@ -0,0 +1,9 @@
+description: Created and taught by <a href="https://dabeaz.com/">David Beazley</a>,
+ this course is a conversion of his instructor-led Python training course used for corporate training
+ and professional development. It has been in continual development since 2007
+ and battle tested in real-world classrooms. Usually, it’s taught in-person over the span of three
+ or four days–requiring approximately 25-35 hours of intense work.
+ This includes the completion of approximately 130 hands-on coding exercises.
+name: Practical Python Programming
+title_url: https://dabeaz-course.github.io/practical-python/
+position: 4
diff --git a/pydis_site/apps/resources/resources/courses/university_of_michigan.yaml b/pydis_site/apps/resources/resources/courses/university_of_michigan.yaml
new file mode 100644
index 00000000..3efe7640
--- /dev/null
+++ b/pydis_site/apps/resources/resources/courses/university_of_michigan.yaml
@@ -0,0 +1,5 @@
+description: A 5-part specialization course that teaches Python from scratch.
+ The course has no pre-requisites and avoids all but the simplest mathematics.
+name: 'University of Michigan: Programming for Everybody'
+title_url: https://www.coursera.org/learn/python
+position: 2
diff --git a/pydis_site/apps/resources/resources/courses/university_of_toronto.yaml b/pydis_site/apps/resources/resources/courses/university_of_toronto.yaml
new file mode 100644
index 00000000..0a7839de
--- /dev/null
+++ b/pydis_site/apps/resources/resources/courses/university_of_toronto.yaml
@@ -0,0 +1,11 @@
+description: A 2-part course that teaches Python. Primarily intended for high school students
+ and first-year university students who want to learn programming.
+name: 'University of Toronto: Learn to Program'
+position: 0
+urls:
+ - icon: regular/graduation-cap
+ url: https://www.coursera.org/learn/learn-to-program
+ color: orangered
+ - icon: regular/graduation-cap
+ url: https://www.coursera.org/learn/program-code
+ color: youtube-red
diff --git a/pydis_site/apps/resources/resources/interactive/_category_info.yaml b/pydis_site/apps/resources/resources/interactive/_category_info.yaml
new file mode 100644
index 00000000..7e8f34d9
--- /dev/null
+++ b/pydis_site/apps/resources/resources/interactive/_category_info.yaml
@@ -0,0 +1,4 @@
+description: Learn Python with interactive courses, games, and programming challenges.
+name: Interactive
+default_icon: branding/python
+default_icon_color: black
diff --git a/pydis_site/apps/home/resources/interactive_learning_tools/code_combat.yaml b/pydis_site/apps/resources/resources/interactive/code_combat.yaml
index 39c25f0d..30f20c28 100644
--- a/pydis_site/apps/home/resources/interactive_learning_tools/code_combat.yaml
+++ b/pydis_site/apps/resources/resources/interactive/code_combat.yaml
@@ -1,13 +1,11 @@
description: Learn Python while gaming - an open-source project with thousands of
contributors, which teaches you Python through a deep, top-down RPG.
name: Code Combat
-payment: optional
-payment_description: A wealth of free content is available, but you can also pay for
- more
+position: 0
urls:
- icon: regular/link
- title: Website
url: https://codecombat.com/
+ color: teal
- icon: branding/github
- title: GitHub
url: https://github.com/codecombat/codecombat
+ color: black
diff --git a/pydis_site/apps/resources/resources/interactive/edublocks.yaml b/pydis_site/apps/resources/resources/interactive/edublocks.yaml
new file mode 100644
index 00000000..7c6ca02b
--- /dev/null
+++ b/pydis_site/apps/resources/resources/interactive/edublocks.yaml
@@ -0,0 +1,10 @@
+description: EduBlocks provides a simple drag and drop interface to help beginners get to grips
+ with the key concepts of Python. There is built-in support for modules such as random,
+ turtle, processing and pygal to play around with,
+ and it even allows you to export the Python code you have written in the graphical editor.
+ EduBlocks also has integration with BBC micro:bit,
+ Raspberry Pi and CircuitPython allowing you to write code for these devices graphically
+ and export the code to run on actual devices.
+name: EduBlocks
+title_url: https://edublocks.org/
+position: 5
diff --git a/pydis_site/apps/home/resources/interactive_learning_tools/exercism.yaml b/pydis_site/apps/resources/resources/interactive/exercism.yaml
index 3adb4138..68b458d0 100644
--- a/pydis_site/apps/home/resources/interactive_learning_tools/exercism.yaml
+++ b/pydis_site/apps/resources/resources/interactive/exercism.yaml
@@ -3,12 +3,11 @@ description: Level up your programming skills with more than 2600 exercises acro
where you can get your code reviewed for each solution you submit. The mentors will
give you insightful advice to make you a better programmer.
name: exercism.io
-payment: free
-payment_description: null
+position: 1
urls:
- icon: regular/link
- title: Website
url: https://exercism.io/
+ color: teal
- icon: branding/github
- title: GitHub
url: https://github.com/exercism/python
+ color: black
diff --git a/pydis_site/apps/resources/resources/interactive/jetbrains_academy.yaml b/pydis_site/apps/resources/resources/interactive/jetbrains_academy.yaml
new file mode 100644
index 00000000..937831fa
--- /dev/null
+++ b/pydis_site/apps/resources/resources/interactive/jetbrains_academy.yaml
@@ -0,0 +1,8 @@
+description: Learn Python with a wide range of high quality, project-based lessons.
+ Keep track of your progress as you cover all the basic concepts a Python programmer needs to know,
+ as well as touching on more advanced areas such as web development with Django,
+ natural language processing with NLTK, and data science with NumPy, pandas, and scikit-learn!
+ It requires a paid subscription, but a free trial is available.
+name: JetBrains Academy
+title_url: https://www.jetbrains.com/academy/
+position: 6
diff --git a/pydis_site/apps/home/resources/interactive_learning_tools/python_morsels.yaml b/pydis_site/apps/resources/resources/interactive/python_morsels.yaml
index f883f8b7..879500eb 100644
--- a/pydis_site/apps/home/resources/interactive_learning_tools/python_morsels.yaml
+++ b/pydis_site/apps/resources/resources/interactive/python_morsels.yaml
@@ -6,10 +6,5 @@ description: 'Learn to write more idiomatic Python code with deliberate practice
to the exercise with explanations of each one. Each exercise will include automated
tests and some may include bonuses for a little more of a challenge!'
name: Python Morsels
-payment: paid
-payment_description: Paid service with monthly and annual plans. A 4 week free trial
- is available without needing to enter payment information.
-urls:
-- icon: regular/link
- title: Website
- url: https://www.pythonmorsels.com/
+title_url: https://www.pythonmorsels.com/
+position: 3
diff --git a/pydis_site/apps/resources/resources/interactive/python_tutor.yaml b/pydis_site/apps/resources/resources/interactive/python_tutor.yaml
new file mode 100644
index 00000000..64b50d09
--- /dev/null
+++ b/pydis_site/apps/resources/resources/interactive/python_tutor.yaml
@@ -0,0 +1,4 @@
+description: Write Python code in your web browser, and see it visualized step by step.
+name: Python Tutor
+title_url: https://www.pythontutor.com/
+position: 2
diff --git a/pydis_site/apps/resources/resources/interactive/sololearn.yaml b/pydis_site/apps/resources/resources/interactive/sololearn.yaml
new file mode 100644
index 00000000..51dceb2a
--- /dev/null
+++ b/pydis_site/apps/resources/resources/interactive/sololearn.yaml
@@ -0,0 +1,7 @@
+description: SoloLearn's Python 3 course serves as a simple and convenient introduction to Python.
+ Containing exercises and quizzes in modules to cover introductory subjects of the language,
+ you can pick it up and put it down between your busier aspects of life thanks to both PC
+ and mobile apps being available to use.
+name: SoloLearn
+title_url: https://www.sololearn.com/Course/Python/
+position: 4
diff --git a/pydis_site/apps/resources/resources/podcasts/_category_info.yaml b/pydis_site/apps/resources/resources/podcasts/_category_info.yaml
new file mode 100644
index 00000000..1d2d3ba5
--- /dev/null
+++ b/pydis_site/apps/resources/resources/podcasts/_category_info.yaml
@@ -0,0 +1,4 @@
+description: Notable podcasts about the Python ecosystem.
+name: Podcasts
+default_icon: regular/microphone-alt
+default_icon_color: black
diff --git a/pydis_site/apps/home/resources/podcasts/podcast_dunder_init.yaml b/pydis_site/apps/resources/resources/podcasts/podcast_dunder_init.yaml
index 8f0cac8b..efe1601f 100644
--- a/pydis_site/apps/home/resources/podcasts/podcast_dunder_init.yaml
+++ b/pydis_site/apps/resources/resources/podcasts/podcast_dunder_init.yaml
@@ -1,9 +1,5 @@
description: The podcast about Python and the people who make it great. Weekly long-form
interviews with the creators of notable Python packages.
name: Podcast.__init__
-payment: free
-payment_description: null
-urls:
-- icon: regular/link
- title: Website
- url: https://www.podcastinit.com/
+title_url: https://www.podcastinit.com/
+position: 2
diff --git a/pydis_site/apps/home/resources/podcasts/python_bytes.yaml b/pydis_site/apps/resources/resources/podcasts/python_bytes.yaml
index a3368d23..4f817f26 100644
--- a/pydis_site/apps/home/resources/podcasts/python_bytes.yaml
+++ b/pydis_site/apps/resources/resources/podcasts/python_bytes.yaml
@@ -1,9 +1,5 @@
description: A byte-sized podcast where Michael Kennedy and Brian Okken work through
this week's notable Python headlines.
name: Python Bytes
-payment: free
-payment_description: null
-urls:
-- icon: regular/link
- title: Website
- url: https://pythonbytes.fm/
+title_url: https://pythonbytes.fm/
+position: 1
diff --git a/pydis_site/apps/home/resources/podcasts/talk_python_to_me.yaml b/pydis_site/apps/resources/resources/podcasts/talk_python_to_me.yaml
index 5ed101c4..5ce21fd7 100644
--- a/pydis_site/apps/home/resources/podcasts/talk_python_to_me.yaml
+++ b/pydis_site/apps/resources/resources/podcasts/talk_python_to_me.yaml
@@ -1,9 +1,5 @@
description: The essential weekly Python podcast. Michael Kennedy and a prominent
name within the Python community dive into a topic that relates to their experience.
name: Talk Python To Me
-payment: free
-payment_description: null
-urls:
-- icon: regular/link
- title: Website
- url: https://talkpython.fm/
+title_url: https://talkpython.fm/
+position: 0
diff --git a/pydis_site/apps/resources/resources/podcasts/test_and_code.yaml b/pydis_site/apps/resources/resources/podcasts/test_and_code.yaml
new file mode 100644
index 00000000..d5751577
--- /dev/null
+++ b/pydis_site/apps/resources/resources/podcasts/test_and_code.yaml
@@ -0,0 +1,5 @@
+description: Brian Okken's weekly podcast on testing. Usually deals with Python,
+ but also covers many language-agnostic topics from the testing and DevOps world.
+name: Test & Code
+title_url: https://testandcode.com/
+position: 3
diff --git a/pydis_site/apps/resources/resources/podcasts/the_real_python_podcast.yaml b/pydis_site/apps/resources/resources/podcasts/the_real_python_podcast.yaml
new file mode 100644
index 00000000..dea894ea
--- /dev/null
+++ b/pydis_site/apps/resources/resources/podcasts/the_real_python_podcast.yaml
@@ -0,0 +1,7 @@
+description: A weekly Python podcast hosted by Christopher Bailey with interviews,
+ coding tips, and conversation with guests from the Python community.
+ The show covers a wide range of topics including Python programming best practices,
+ career tips, and related software development topics.
+name: The Real Python Podcast
+title_url: https://realpython.com/podcasts/rpp/
+position: 4
diff --git a/pydis_site/apps/resources/resources/reading/_category_info.yaml b/pydis_site/apps/resources/resources/reading/_category_info.yaml
new file mode 100644
index 00000000..64b87e47
--- /dev/null
+++ b/pydis_site/apps/resources/resources/reading/_category_info.yaml
@@ -0,0 +1,2 @@
+description: Books and tutorials related to Python and popular third-party libraries and frameworks.
+name: Reading
diff --git a/pydis_site/apps/home/resources/books/_category_info.yaml b/pydis_site/apps/resources/resources/reading/books/_category_info.yaml
index e3b89ad3..ae092a20 100644
--- a/pydis_site/apps/home/resources/books/_category_info.yaml
+++ b/pydis_site/apps/resources/resources/reading/books/_category_info.yaml
@@ -1,2 +1,5 @@
-description: The best books for learning Python or Python Frameworks
+description: The best books for learning Python or Python Frameworks.
name: Books
+default_icon: branding/python
+default_icon_color: black
+position: 0
diff --git a/pydis_site/apps/home/resources/books/automate_the_boring_stuff.yaml b/pydis_site/apps/resources/resources/reading/books/automate_the_boring_stuff.yaml
index 3a9045a5..3812029c 100644
--- a/pydis_site/apps/home/resources/books/automate_the_boring_stuff.yaml
+++ b/pydis_site/apps/resources/resources/reading/books/automate_the_boring_stuff.yaml
@@ -4,13 +4,11 @@ description: One of the best books out there for Python beginners. This book wil
the web, manipulating files and automating keyboard and mouse input. Ideal for an
office worker who wants to make himself more useful.
name: Automate the Boring Stuff with Python
-payment: optional
-payment_description: A free e-book is available on the website, but you can buy it
- on Amazon if you want to support the author.
+position: 2
urls:
-- icon: regular/link
- title: E-book
+- icon: regular/book
url: https://automatetheboringstuff.com/
+ color: black
- icon: branding/amazon
- title: Amazon
url: https://www.amazon.com/Automate-Boring-Stuff-Python-Programming/dp/1593275994/
+ color: amazon-orange
diff --git a/pydis_site/apps/resources/resources/reading/books/byte_of_python.yaml b/pydis_site/apps/resources/resources/reading/books/byte_of_python.yaml
new file mode 100644
index 00000000..1f9642ad
--- /dev/null
+++ b/pydis_site/apps/resources/resources/reading/books/byte_of_python.yaml
@@ -0,0 +1,15 @@
+description: A free book on programming using the Python language.
+ It serves as a tutorial or guide to the Python language for a beginner audience.
+ If all you know about computers is how to save text files, then this is the book for you.
+name: A Byte of Python
+position: 1
+urls:
+- icon: regular/link
+ url: https://python.swaroopch.com/
+ color: teal
+- icon: regular/book
+ url: http://www.lulu.com/shop/swaroop-c-h/a-byte-of-python/paperback/product-21142968.html
+ color: black
+- icon: branding/amazon
+ url: https://www.amazon.com/Byte-Python-Swaroop-C-H-ebook/dp/B00FJ7S2JU/
+ color: amazon-orange
diff --git a/pydis_site/apps/home/resources/books/effective_python.yaml b/pydis_site/apps/resources/resources/reading/books/effective_python.yaml
index ab782704..1d4124cc 100644
--- a/pydis_site/apps/home/resources/books/effective_python.yaml
+++ b/pydis_site/apps/resources/resources/reading/books/effective_python.yaml
@@ -1,14 +1,14 @@
description: A book that gives 59 best practices for writing excellent Python. Great
for intermediates.
name: Effective Python
-payment: paid
+position: 3
urls:
- icon: regular/link
- title: Website
url: https://effectivepython.com/
+ color: teal
- icon: branding/amazon
- title: Amazon
url: https://www.amazon.com/Effective-Python-Specific-Software-Development/dp/0134034287
+ color: amazon-orange
- icon: branding/github
- title: GitHub
url: https://github.com/bslatkin/effectivepython
+ color: black
diff --git a/pydis_site/apps/home/resources/books/flask_web_development.yaml b/pydis_site/apps/resources/resources/reading/books/flask_web_development.yaml
index 613e0e50..cc83a331 100644
--- a/pydis_site/apps/home/resources/books/flask_web_development.yaml
+++ b/pydis_site/apps/resources/resources/reading/books/flask_web_development.yaml
@@ -1,14 +1,14 @@
description: A comprehensive Flask walkthrough that has you building a complete social
blogging application from scratch.
name: Flask Web Development
-payment: paid
+position: 6
urls:
- icon: regular/link
- title: Website
url: http://shop.oreilly.com/product/0636920031116.do
+ color: teal
- icon: branding/amazon
- title: Amazon
url: https://www.amazon.com/Flask-Web-Development-Developing-Applications/dp/1449372627
+ color: amazon-orange
- icon: branding/github
- title: GitHub
url: https://github.com/miguelgrinberg/flasky
+ color: black
diff --git a/pydis_site/apps/home/resources/books/fluent_python.yaml b/pydis_site/apps/resources/resources/reading/books/fluent_python.yaml
index ebfd5f91..92f4bbab 100644
--- a/pydis_site/apps/home/resources/books/fluent_python.yaml
+++ b/pydis_site/apps/resources/resources/reading/books/fluent_python.yaml
@@ -1,14 +1,14 @@
description: A veritable tome of intermediate and advanced Python information. A must-read
- for any Python professional.
+ for any Python professional. By far the most recommended book for intermediates.
name: Fluent Python
-payment: paid
+position: 7
urls:
- icon: regular/link
- title: Website
url: https://www.oreilly.com/library/view/fluent-python/9781491946237/
+ color: teal
- icon: branding/amazon
- title: Amazon
url: https://www.amazon.com/Fluent-Python-Concise-Effective-Programming/dp/1491946008
+ color: amazon-orange
- icon: branding/github
- title: GitHub
url: https://github.com/fluentpython
+ color: black
diff --git a/pydis_site/apps/resources/resources/reading/books/hitchhikers_guide_to_python.yaml b/pydis_site/apps/resources/resources/reading/books/hitchhikers_guide_to_python.yaml
new file mode 100644
index 00000000..906860c7
--- /dev/null
+++ b/pydis_site/apps/resources/resources/reading/books/hitchhikers_guide_to_python.yaml
@@ -0,0 +1,11 @@
+description: A best practice handbook for both novice and expert Python developers to the installation,
+ configuration, and usage of Python on a daily basis.
+name: The Hitchhiker's Guide to Python
+position: 0
+urls:
+- icon: regular/link
+ url: https://python-guide.org/
+ color: teal
+- icon: branding/amazon
+ url: https://www.amazon.com/Hitchhikers-Guide-Python-Practices-Development/dp/1491933178/
+ color: amazon-orange
diff --git a/pydis_site/apps/resources/resources/reading/books/inferential_thinking.yaml b/pydis_site/apps/resources/resources/reading/books/inferential_thinking.yaml
new file mode 100644
index 00000000..27fad4f7
--- /dev/null
+++ b/pydis_site/apps/resources/resources/reading/books/inferential_thinking.yaml
@@ -0,0 +1,9 @@
+description: Inferential Thinking is the textbook for the <a href="http://data8.org/">Foundations of Data Science</a> course at UC Berkley.
+ It introduces you the fundamentals of both Data Science and Python at a level accessible to all.
+ It is available both through your browser and in PDF form.
+name: Inferential Thinking
+position: 13
+urls:
+ - icon: regular/link
+ url: https://www.inferentialthinking.com/chapters/intro
+ color: teal
diff --git a/pydis_site/apps/home/resources/books/mission_python.yaml b/pydis_site/apps/resources/resources/reading/books/mission_python.yaml
index 8cd91979..c4a48b7e 100644
--- a/pydis_site/apps/home/resources/books/mission_python.yaml
+++ b/pydis_site/apps/resources/resources/reading/books/mission_python.yaml
@@ -3,11 +3,11 @@ description: Learn programming and Python while building a complete and awesome
images, and walk-throughs make this a pleasure to both read and follow along. Excellent
book for beginners.
name: Mission Python
-payment: paid
+position: 5
urls:
- icon: regular/link
- title: Website
url: https://www.sean.co.uk/books/mission-python/index.shtm
+ color: teal
- icon: branding/amazon
- title: Amazon
url: https://www.amazon.com/Mission-Python-Code-Space-Adventure/dp/1593278578
+ color: amazon-orange
diff --git a/pydis_site/apps/resources/resources/reading/books/neural_networks_from_scratch_in_python.yaml b/pydis_site/apps/resources/resources/reading/books/neural_networks_from_scratch_in_python.yaml
new file mode 100644
index 00000000..974b0e50
--- /dev/null
+++ b/pydis_site/apps/resources/resources/reading/books/neural_networks_from_scratch_in_python.yaml
@@ -0,0 +1,10 @@
+description: '"Neural Networks From Scratch" is a book intended to teach you how to build neural networks on your own,
+ without any libraries, so you can better understand deep learning and how all of the elements work.
+ This is so you can go out and do new/novel things with deep learning as well as to become more successful with even more basic models.
+ This book is to accompany the usual free tutorial videos and sample code from youtube.com/sentdex.'
+name: Neural Networks from Scratch in Python
+position: 11
+urls:
+ - icon: regular/link
+ url: https://nnfs.io/
+ color: teal
diff --git a/pydis_site/apps/home/resources/books/python_cookbook.yaml b/pydis_site/apps/resources/resources/reading/books/python_cookbook.yaml
index 9fab8e48..032f8c64 100644
--- a/pydis_site/apps/home/resources/books/python_cookbook.yaml
+++ b/pydis_site/apps/resources/resources/reading/books/python_cookbook.yaml
@@ -1,14 +1,14 @@
-description: Complete with 'recipes' for various Python topics, including moving from
- Python 2 to Python 3.3
+description: A book full of very smart problem-solving recipes for various Python topics,
+ including moving from Python 2 to Python 3.
name: Python Cookbook
-payment: paid
+position: 8
urls:
- icon: regular/link
- title: Website
url: http://shop.oreilly.com/product/0636920027072.do
+ color: teal
- icon: branding/amazon
- title: Amazon
url: https://www.amazon.com/Python-Cookbook-Third-David-Beazley/dp/1449340377
+ color: amazon-orange
- icon: branding/github
- title: GitHub
url: https://github.com/dabeaz/python-cookbook
+ color: black
diff --git a/pydis_site/apps/resources/resources/reading/books/python_crash_course.yaml b/pydis_site/apps/resources/resources/reading/books/python_crash_course.yaml
new file mode 100644
index 00000000..3cbf19c8
--- /dev/null
+++ b/pydis_site/apps/resources/resources/reading/books/python_crash_course.yaml
@@ -0,0 +1,20 @@
+description: "This fast-paced, thorough introduction to programming with Python will have you writing programs,
+ solving problems, and making things that work in no time.
+ In the first half of the book, you’ll learn basic programming concepts, such as variables, lists, classes, and loops,
+ and practice writing clean code with exercises for each topic.
+ You’ll also learn how to make your programs interactive and test your code safely before adding it to a project.
+ In the second half, you’ll put your new knowledge into practice with three substantial projects:
+ a Space Invaders–inspired arcade game, a set of data visualizations with Python’s handy libraries,
+ and a simple web app you can deploy online."
+name: Python Crash Course
+position: 12
+urls:
+ - icon: regular/link
+ url: https://nostarch.com/pythoncrashcourse2e
+ color: teal
+ - icon: branding/amazon
+ url: https://www.amazon.com/Python-Crash-Course-Project-Based-Introduction/dp/1593276036
+ color: amazon-orange
+ - icon: branding/github
+ url: https://ehmatthes.github.io/pcc/
+ color: black
diff --git a/pydis_site/apps/home/resources/books/python_tricks.yaml b/pydis_site/apps/resources/resources/reading/books/python_tricks.yaml
index 0638058c..c0941809 100644
--- a/pydis_site/apps/home/resources/books/python_tricks.yaml
+++ b/pydis_site/apps/resources/resources/reading/books/python_tricks.yaml
@@ -2,11 +2,11 @@ description: Full of useful Python tips, tricks and features. Get this if you ha
a good grasp of the basics and want to take your Python skills to the next level,
or are a experienced programmer looking to add to your toolbelt.
name: Python Tricks
-payment: paid
+position: 4
urls:
- icon: regular/link
- title: Website
url: https://realpython.com/products/python-tricks-book/
+ color: teal
- icon: branding/amazon
- title: Amazon
url: https://www.amazon.com/Python-Tricks-Buffet-Awesome-Features/dp/1775093301
+ color: amazon-orange
diff --git a/pydis_site/apps/resources/resources/reading/books/think_python.yaml b/pydis_site/apps/resources/resources/reading/books/think_python.yaml
new file mode 100644
index 00000000..6de87043
--- /dev/null
+++ b/pydis_site/apps/resources/resources/reading/books/think_python.yaml
@@ -0,0 +1,17 @@
+description: Think Python is an introduction to Python programming for beginners.
+ It starts with basic concepts of programming,
+ and is carefully designed to define all terms when they are first used and to develop each new concept in a logical progression.
+ Larger pieces, like recursion and object-oriented programming are divided into a sequence of smaller steps
+ and introduced over the course of several chapters.
+name: Think Python
+position: 10
+urls:
+ - icon: regular/link
+ url: https://greenteapress.com/wp/think-python-2e/
+ color: teal
+ - icon: branding/amazon
+ url: https://www.amazon.com/gp/product/1491939362
+ color: amazon-orange
+ - icon: branding/github
+ url: https://github.com/AllenDowney/ThinkPython2
+ color: black
diff --git a/pydis_site/apps/home/resources/books/two_scoops_of_django.yaml b/pydis_site/apps/resources/resources/reading/books/two_scoops_of_django.yaml
index 85cfa0fc..7d83e7c4 100644
--- a/pydis_site/apps/home/resources/books/two_scoops_of_django.yaml
+++ b/pydis_site/apps/resources/resources/reading/books/two_scoops_of_django.yaml
@@ -1,14 +1,14 @@
-description: This book is chock-full of material that will help you with your Django
- projects.
+description: Tips, tricks, and best practices for your Django project.
+ A highly recommended resource for Django web developers.
name: Two Scoops of Django
-payment: paid
+position: 9
urls:
- icon: regular/link
- title: Website
url: https://twoscoopspress.com/products/two-scoops-of-django-1-11
+ color: teal
- icon: branding/amazon
- title: Amazon
url: https://www.amazon.com/Two-Scoops-Django-Best-Practices/dp/0981467342
+ color: amazon-orange
- icon: branding/github
- title: GitHub
url: https://github.com/twoscoops/two-scoops-of-django-2.0-code-examples
+ color: black
diff --git a/pydis_site/apps/resources/resources/reading/tutorials/_category_info.yaml b/pydis_site/apps/resources/resources/reading/tutorials/_category_info.yaml
new file mode 100644
index 00000000..a18b837d
--- /dev/null
+++ b/pydis_site/apps/resources/resources/reading/tutorials/_category_info.yaml
@@ -0,0 +1,5 @@
+description: Tutorials and references for those that are just getting started with Python.
+name: Tutorials
+default_icon: branding/python
+default_icon_color: black
+position: 1
diff --git a/pydis_site/apps/resources/resources/reading/tutorials/getting_started_with_kivy.yaml b/pydis_site/apps/resources/resources/reading/tutorials/getting_started_with_kivy.yaml
new file mode 100644
index 00000000..d1d9a7d2
--- /dev/null
+++ b/pydis_site/apps/resources/resources/reading/tutorials/getting_started_with_kivy.yaml
@@ -0,0 +1,5 @@
+description: A big list of excellent resources for getting started making Kivy applications.
+name: Getting Started with Kivy
+title_url: https://blog.kivy.org/2019/12/getting-started-with-kivy/
+icon_image: https://raw.githubusercontent.com/kivy/kivy-website/master/logos/kivy-logo-black-256.png
+position: 3
diff --git a/pydis_site/apps/resources/resources/reading/tutorials/getting_started_with_python_for_non_programmers.yaml b/pydis_site/apps/resources/resources/reading/tutorials/getting_started_with_python_for_non_programmers.yaml
new file mode 100644
index 00000000..3250a7c4
--- /dev/null
+++ b/pydis_site/apps/resources/resources/reading/tutorials/getting_started_with_python_for_non_programmers.yaml
@@ -0,0 +1,5 @@
+description: A list of beginner resources for programmers with no prior developer experience,
+ from Python's official guide.
+name: Getting Started with Python for Non-Programmers
+title_url: https://wiki.python.org/moin/BeginnersGuide/NonProgrammers
+position: 1
diff --git a/pydis_site/apps/resources/resources/reading/tutorials/getting_started_with_python_for_programmers.yaml b/pydis_site/apps/resources/resources/reading/tutorials/getting_started_with_python_for_programmers.yaml
new file mode 100644
index 00000000..b65e0e12
--- /dev/null
+++ b/pydis_site/apps/resources/resources/reading/tutorials/getting_started_with_python_for_programmers.yaml
@@ -0,0 +1,5 @@
+description: A list of beginner resources for programmers coming from other languages,
+ from Python's official guide.
+name: Getting Started with Python for Programmers
+title_url: https://wiki.python.org/moin/BeginnersGuide/Programmers
+position: 0
diff --git a/pydis_site/apps/resources/resources/reading/tutorials/python_cheat_sheet.yaml b/pydis_site/apps/resources/resources/reading/tutorials/python_cheat_sheet.yaml
new file mode 100644
index 00000000..70ac49ef
--- /dev/null
+++ b/pydis_site/apps/resources/resources/reading/tutorials/python_cheat_sheet.yaml
@@ -0,0 +1,5 @@
+description: A Python 3 cheat sheet with useful information and tips, as well as common
+ pitfalls for beginners. This is a PDF.
+name: Python Cheat Sheet
+title_url: https://perso.limsi.fr/pointal/_media/python:cours:mementopython3-english.pdf
+position: 6
diff --git a/pydis_site/apps/resources/resources/reading/tutorials/python_developer_guide.yaml b/pydis_site/apps/resources/resources/reading/tutorials/python_developer_guide.yaml
new file mode 100644
index 00000000..625d57c8
--- /dev/null
+++ b/pydis_site/apps/resources/resources/reading/tutorials/python_developer_guide.yaml
@@ -0,0 +1,5 @@
+description: This guide is a comprehensive resource for contributing to Python – for both new and experienced contributors.
+ It is maintained by the same community that maintains Python.
+name: Python Developer's Guide
+title_url: https://devguide.python.org/
+position: 2
diff --git a/pydis_site/apps/resources/resources/reading/tutorials/simple_guide_to_git.yaml b/pydis_site/apps/resources/resources/reading/tutorials/simple_guide_to_git.yaml
new file mode 100644
index 00000000..a505715d
--- /dev/null
+++ b/pydis_site/apps/resources/resources/reading/tutorials/simple_guide_to_git.yaml
@@ -0,0 +1,6 @@
+description: A simple, no-nonsense guide to the basics of using Git.
+name: A Simple Guide to Git
+title_url: http://rogerdudler.github.io/git-guide/
+title_icon: branding/github
+title_icon_color: black
+position: 4
diff --git a/pydis_site/apps/resources/resources/reading/tutorials/the_flask_mega_tutorial.yaml b/pydis_site/apps/resources/resources/reading/tutorials/the_flask_mega_tutorial.yaml
new file mode 100644
index 00000000..8d61ea73
--- /dev/null
+++ b/pydis_site/apps/resources/resources/reading/tutorials/the_flask_mega_tutorial.yaml
@@ -0,0 +1,4 @@
+description: Miguel Grinberg's fully featured mega-tutorial for learning how to create web applications with the Flask framework.
+name: The Flask Mega-Tutorial
+title_url: https://blog.miguelgrinberg.com/post/the-flask-mega-tutorial-part-i-hello-world
+position: 5
diff --git a/pydis_site/apps/resources/resources/reading/tutorials/wtf_python.yaml b/pydis_site/apps/resources/resources/reading/tutorials/wtf_python.yaml
new file mode 100644
index 00000000..a25a84fd
--- /dev/null
+++ b/pydis_site/apps/resources/resources/reading/tutorials/wtf_python.yaml
@@ -0,0 +1,8 @@
+description: Python, being a beautifully designed high-level and interpreter-based programming language,
+ provides us with many features for the programmer's comfort.
+ But sometimes, the outcomes of a Python snippet may not seem obvious at first sight.
+ Here's a fun project attempting to explain what exactly is happening under the hood for some counter-intuitive snippets
+ and lesser-known features in Python.
+name: WTF Python
+title_url: https://github.com/satwikkansal/wtfpython
+position: 7
diff --git a/pydis_site/apps/resources/resources/tools/_category_info.yaml b/pydis_site/apps/resources/resources/tools/_category_info.yaml
new file mode 100644
index 00000000..6b16baa6
--- /dev/null
+++ b/pydis_site/apps/resources/resources/tools/_category_info.yaml
@@ -0,0 +1,4 @@
+description: This page is a curated list of tools that we regularly recommend in the community.
+ If you have a suggestion for something to add to this page, please create an issue in
+ <a href="https://github.com/python-discord/meta/issues">our meta repo</a>, and we'll consider adding it.
+name: Tools
diff --git a/pydis_site/apps/resources/resources/tools/accessibility_tools/_category_info.yaml b/pydis_site/apps/resources/resources/tools/accessibility_tools/_category_info.yaml
new file mode 100644
index 00000000..e770db07
--- /dev/null
+++ b/pydis_site/apps/resources/resources/tools/accessibility_tools/_category_info.yaml
@@ -0,0 +1,5 @@
+description: Accessibility tools that help people write Python code.
+name: Accessibility Tools
+default_icon: branding/python
+default_icon_color: black
+position: 2
diff --git a/pydis_site/apps/resources/resources/tools/accessibility_tools/screen_readers.yaml b/pydis_site/apps/resources/resources/tools/accessibility_tools/screen_readers.yaml
new file mode 100644
index 00000000..39372956
--- /dev/null
+++ b/pydis_site/apps/resources/resources/tools/accessibility_tools/screen_readers.yaml
@@ -0,0 +1,7 @@
+description: Screen readers are software programs that allow blind
+ or visually impaired users to read the text displayed on a computer screen with a speech synthesizer or braille display.
+ There are many different screen reader program options,
+ with this link describing many of them and their capabilities.
+name: Screen Readers - American Foundation for the Blind
+title_url: https://www.afb.org/blindness-and-low-vision/using-technology/assistive-technology-products/screen-readers
+position: 1
diff --git a/pydis_site/apps/resources/resources/tools/accessibility_tools/talon_voice.yaml b/pydis_site/apps/resources/resources/tools/accessibility_tools/talon_voice.yaml
new file mode 100644
index 00000000..9df5f66f
--- /dev/null
+++ b/pydis_site/apps/resources/resources/tools/accessibility_tools/talon_voice.yaml
@@ -0,0 +1,6 @@
+description: Talon is a tool being built that aims to bring programming,
+ realtime video gaming, command line, and full desktop computer proficiency to people
+ who have limited or no use of their hands.
+name: Talon Voice
+title_url: https://talonvoice.com/
+position: 0
diff --git a/pydis_site/apps/home/resources/editors/_category_info.yaml b/pydis_site/apps/resources/resources/tools/editors/_category_info.yaml
index f8dc1413..3cdfff3a 100644
--- a/pydis_site/apps/home/resources/editors/_category_info.yaml
+++ b/pydis_site/apps/resources/resources/tools/editors/_category_info.yaml
@@ -1,2 +1,5 @@
description: Lightweight code editors supporting Python
name: Editors
+default_icon: branding/python
+default_icon_color: black
+position: 1
diff --git a/pydis_site/apps/resources/resources/tools/editors/atom.yaml b/pydis_site/apps/resources/resources/tools/editors/atom.yaml
new file mode 100644
index 00000000..c44f9b5b
--- /dev/null
+++ b/pydis_site/apps/resources/resources/tools/editors/atom.yaml
@@ -0,0 +1,5 @@
+description: A free Electron-based editor, a "hackable text editor for the 21st century", maintained
+ by the GitHub team.
+name: Atom
+title_url: https://atom.io/
+position: 0
diff --git a/pydis_site/apps/resources/resources/tools/editors/google_collab.yaml b/pydis_site/apps/resources/resources/tools/editors/google_collab.yaml
new file mode 100644
index 00000000..302c3e2e
--- /dev/null
+++ b/pydis_site/apps/resources/resources/tools/editors/google_collab.yaml
@@ -0,0 +1,7 @@
+description: Google Collab is a high-powered custom version of Jupyter Notebook which supports e.g.
+ !apt-get to install arbitrary Debian packages to the runtime, which is very generous with CPU and memory,
+ and well-integrated with Google Drive.
+ You can share your Collab Notebooks with other people and work collaboratively.
+name: Google Collab
+title_url: https://colab.research.google.com/notebooks/intro.ipynb
+position: 4
diff --git a/pydis_site/apps/resources/resources/tools/editors/mu_editor.yaml b/pydis_site/apps/resources/resources/tools/editors/mu_editor.yaml
new file mode 100644
index 00000000..b92bac9d
--- /dev/null
+++ b/pydis_site/apps/resources/resources/tools/editors/mu_editor.yaml
@@ -0,0 +1,7 @@
+description: An editor aimed at beginners for the purpose of learning how to code
+ without the distractions more advanced editors sometimes cause.
+ Particularly useful for use with microcontrollers,
+ with built-in tools to interact with Adafruit and Arduino boards.
+name: Mu-Editor
+title_url: https://codewith.mu/
+position: 3
diff --git a/pydis_site/apps/resources/resources/tools/editors/sublime_text.yaml b/pydis_site/apps/resources/resources/tools/editors/sublime_text.yaml
new file mode 100644
index 00000000..3c6e7e84
--- /dev/null
+++ b/pydis_site/apps/resources/resources/tools/editors/sublime_text.yaml
@@ -0,0 +1,5 @@
+description: A powerful Python-backed editor with great community support and a wealth
+ of extensions.
+name: Sublime Text
+title_url: https://www.sublimetext.com/
+position: 2
diff --git a/pydis_site/apps/resources/resources/tools/editors/visual_studio_code.yaml b/pydis_site/apps/resources/resources/tools/editors/visual_studio_code.yaml
new file mode 100644
index 00000000..e3737ca7
--- /dev/null
+++ b/pydis_site/apps/resources/resources/tools/editors/visual_studio_code.yaml
@@ -0,0 +1,4 @@
+description: A fully-featured editor based on Electron, extendable with plugins.
+name: Visual Studio Code
+title_url: https://code.visualstudio.com/
+position: 1
diff --git a/pydis_site/apps/resources/resources/tools/ides/_category_info.yaml b/pydis_site/apps/resources/resources/tools/ides/_category_info.yaml
new file mode 100644
index 00000000..614625a6
--- /dev/null
+++ b/pydis_site/apps/resources/resources/tools/ides/_category_info.yaml
@@ -0,0 +1,5 @@
+description: Fully-integrated development environments for serious Python work.
+name: IDEs
+default_icon: branding/python
+default_icon_color: black
+position: 0
diff --git a/pydis_site/apps/resources/resources/tools/ides/pycharm.yaml b/pydis_site/apps/resources/resources/tools/ides/pycharm.yaml
new file mode 100644
index 00000000..b959b0f8
--- /dev/null
+++ b/pydis_site/apps/resources/resources/tools/ides/pycharm.yaml
@@ -0,0 +1,5 @@
+description: The very best Python IDE, with a wealth of advanced features and convenience
+ functions.
+name: PyCharm
+title_url: https://www.jetbrains.com/pycharm/
+position: 0
diff --git a/pydis_site/apps/resources/resources/tools/ides/repl_it.yaml b/pydis_site/apps/resources/resources/tools/ides/repl_it.yaml
new file mode 100644
index 00000000..8cd14e14
--- /dev/null
+++ b/pydis_site/apps/resources/resources/tools/ides/repl_it.yaml
@@ -0,0 +1,5 @@
+description: A free, collaborative, in-browser IDE to code in 50+ languages —
+ without spending a second on setup.
+name: repl.it
+title_url: https://repl.it/
+position: 3
diff --git a/pydis_site/apps/resources/resources/tools/ides/spyder.yaml b/pydis_site/apps/resources/resources/tools/ides/spyder.yaml
new file mode 100644
index 00000000..c2f9c2dc
--- /dev/null
+++ b/pydis_site/apps/resources/resources/tools/ides/spyder.yaml
@@ -0,0 +1,5 @@
+description: The Scientific Python Development Environment.
+ Simpler and lighter than PyCharm, but still packs a punch.
+name: Spyder
+title_url: https://www.spyder-ide.org/
+position: 1
diff --git a/pydis_site/apps/resources/resources/tools/ides/thonny.yaml b/pydis_site/apps/resources/resources/tools/ides/thonny.yaml
new file mode 100644
index 00000000..3581e1cd
--- /dev/null
+++ b/pydis_site/apps/resources/resources/tools/ides/thonny.yaml
@@ -0,0 +1,5 @@
+description: A Python IDE specifially aimed at learning programming. Has a lot of
+ helpful features to help you understand your code.
+name: Thonny
+title_url: https://thonny.org/
+position: 2
diff --git a/pydis_site/apps/resources/resources/videos/_category_info.yaml b/pydis_site/apps/resources/resources/videos/_category_info.yaml
new file mode 100644
index 00000000..8192e021
--- /dev/null
+++ b/pydis_site/apps/resources/resources/videos/_category_info.yaml
@@ -0,0 +1,2 @@
+description: Excellent Youtube channels with content related to Python.
+name: Videos
diff --git a/pydis_site/apps/resources/resources/videos/corey_schafer.yaml b/pydis_site/apps/resources/resources/videos/corey_schafer.yaml
new file mode 100644
index 00000000..a7cca18a
--- /dev/null
+++ b/pydis_site/apps/resources/resources/videos/corey_schafer.yaml
@@ -0,0 +1,19 @@
+description: 'Corey has a number of exceptionally high quality tutorial series
+ on everything from Python basics to Django and Flask:
+ <ul>
+ <li><a href="https://www.youtube.com/playlist?list=PL-osiE80TeTskrapNbzXhwoFUiLCjGgY7">Python Programming Beginner Tutorials</a></li>
+ <li><a href="https://www.youtube.com/playlist?list=PL-osiE80TeTsqhIuOqKhwlXsIBIdSeYtc">Python OOP Tutorials - Working With Classes</a></li>
+ <li><a href="https://www.youtube.com/playlist?list=PL-osiE80TeTs4UjLw5MM6OjgkjFeUxCYH">Flask Tutorials</a></li>
+ <li><a href="https://www.youtube.com/playlist?list=PL-osiE80TeTtoQCKZ03TU5fNfx2UY6U4p">Django Tutorials</a></li>
+ </ul>
+ Check out his channel for more video series!
+ '
+title_image: https://i.imgur.com/KIfWw3b.png
+position: 0
+urls:
+ - icon: branding/youtube
+ url: https://www.youtube.com/channel/UCCezIgC97PvUuR4_gbFUs5g
+ color: youtube-red
+ - icon: regular/link
+ url: https://coreyms.com/
+ color: teal
diff --git a/pydis_site/apps/resources/resources/videos/jetbrains.yaml b/pydis_site/apps/resources/resources/videos/jetbrains.yaml
new file mode 100644
index 00000000..5d130db6
--- /dev/null
+++ b/pydis_site/apps/resources/resources/videos/jetbrains.yaml
@@ -0,0 +1,12 @@
+description: A collection of videos made by the PyCharm team at JetBrains on subjects such as TDD,
+ Django, pytest and much more!<br><br>
+ Episodes of their "What does this package do?" series go over all sorts of libraries in Python
+ both in the standard library and from the community and give a video explanation of the key concepts.
+icon_image: https://upload.wikimedia.org/wikipedia/commons/thumb/1/1a/JetBrains_Logo_2016.svg/1200px-JetBrains_Logo_2016.svg.png
+icon_size: 50
+title_image: https://resources.jetbrains.com/storage/products/pycharm/img/meta/pycharm_logo_300x300.png
+position: 3
+urls:
+ - icon: branding/youtube
+ url: https://www.youtube.com/channel/UCak6beUTLlVmf0E4AmnQkmw
+ color: youtube-red
diff --git a/pydis_site/apps/resources/resources/videos/jim_shaped_coding.yaml b/pydis_site/apps/resources/resources/videos/jim_shaped_coding.yaml
new file mode 100644
index 00000000..488cfa83
--- /dev/null
+++ b/pydis_site/apps/resources/resources/videos/jim_shaped_coding.yaml
@@ -0,0 +1,13 @@
+description: 'JimShapedCoding contains a set of YouTube tutorials covering things from Flask to GUI development in Python:
+ <ul>
+ <li><a href="https://www.youtube.com/playlist?list=PLOkVupluCIjuPtTkhO6jmA76uQR994Wvi">Flask tutorials</a></li>
+ <li><a href="https://www.youtube.com/watch?v=0tqZ6rMcqGE&list=PLOkVupluCIjuAzAmDNUXcD-0Fsb8sbv9F">GUI tutorials</a></li>
+ <li><a href="https://www.youtube.com/watch?v=qMrAFscMBBc&list=PLOkVupluCIjvORWaF4kG-sXLgbVemYpEi">Django tutorials</a></li>
+ </ul>
+ Check out his channel for more videos!'
+title_image: https://i.imgur.com/DlovZPf.png
+position: 5
+urls:
+ - icon: branding/youtube
+ url: https://www.youtube.com/channel/UCU8d7rcShA7MGuDyYH1aWGg
+ color: youtube-red
diff --git a/pydis_site/apps/resources/resources/videos/microsoft.yaml b/pydis_site/apps/resources/resources/videos/microsoft.yaml
new file mode 100644
index 00000000..720ee202
--- /dev/null
+++ b/pydis_site/apps/resources/resources/videos/microsoft.yaml
@@ -0,0 +1,18 @@
+description: A trove of tutorials & guides for developers from Microsoft's Developer hub.
+ Follow the links below for a series of high-quality Python tutorials for beginners.
+ <ul>
+ <li><a href="https://www.youtube.com/playlist?list=PLlrxD0HtieHhS8VzuMCfQD4uJ9yne1mE6">Python for Beginners</a></li>
+ <li><a href="https://www.youtube.com/playlist?list=PLlrxD0HtieHiXd-nEby-TMCoUNwhbLUnj">More Python for Beginners</a></li>
+ <li><a href="https://www.youtube.com/playlist?list=PLlrxD0HtieHhHnCUVtR8UHS7eLl33zfJ-">Even More Python for Beginners - Data Tools</a></li>
+ </ul>
+ Microsoft's Python Development Team also runs a Discord Server for discussions of Python in the Microsoft ecosystem,
+ including Visual Studio Code and Azure.
+title_image: http://img-prod-cms-rt-microsoft-com.akamaized.net/cms/api/am/imageFileData/RE2qVsJ?ver=3f74
+position: 4
+urls:
+ - icon: branding/youtube
+ url: https://www.youtube.com/channel/UCsMica-v34Irf9KVTh6xx-g
+ color: youtube-red
+ - icon: branding/discord
+ url: https://aka.ms/python-discord
+ color: blurple
diff --git a/pydis_site/apps/resources/resources/videos/python_discord.yaml b/pydis_site/apps/resources/resources/videos/python_discord.yaml
new file mode 100644
index 00000000..04235b08
--- /dev/null
+++ b/pydis_site/apps/resources/resources/videos/python_discord.yaml
@@ -0,0 +1,8 @@
+description: It's our channel! We are slowly gathering content here directly related to Python,
+ our community and the events we host. Come check us out!
+title_image: https://raw.githubusercontent.com/python-discord/branding/master/logos/logo_banner/logo_site_banner_dark_512.png
+position: 2
+urls:
+ - icon: branding/youtube
+ url: https://www.youtube.com/pythondiscord
+ color: youtube-red
diff --git a/pydis_site/apps/resources/resources/videos/sentdex.yaml b/pydis_site/apps/resources/resources/videos/sentdex.yaml
new file mode 100644
index 00000000..4e5f54c6
--- /dev/null
+++ b/pydis_site/apps/resources/resources/videos/sentdex.yaml
@@ -0,0 +1,22 @@
+description: 'An enormous amount of Python content for all skill levels
+ from the most popular Python YouTuber on the web.
+ <ul>
+ <li><a href="https://www.youtube.com/playlist?list=PLQVvvaa0QuDeAams7fkdcwOGBpGdHpXln">Learning to program with Python 3 (py 3.7)</a></li>
+ <li><a href="https://www.youtube.com/playlist?list=PLQVvvaa0QuDfwnDTZWw8H3hN_VRQfq8rF">Kivy - Mobile and Desktop App Dev w/ Python</a></li>
+ <li><a href="https://www.youtube.com/playlist?list=PLQVvvaa0QuDfSfqQuee6K8opKtZsh7sA9">Data Analysis w/ Python 3 and Pandas</a></li>
+ <li><a href="https://www.youtube.com/playlist?list=PLQVvvaa0QuDfKTOs3Keq_kaG2P55YRn5v">Machine Learning with Python</a></li>
+ </ul>
+ Check out his channel for more video series!
+ '
+title_image: https://i.imgur.com/kJgWZIu.png
+position: 1
+urls:
+ - icon: branding/youtube
+ url: https://www.youtube.com/user/sentdex
+ color: youtube-red
+ - icon: branding/discord
+ url: https://discord.gg/sentdex
+ color: blurple
+ - icon: regular/link
+ url: https://pythonprogramming.net/
+ color: teal
diff --git a/pydis_site/apps/resources/templatetags/__init__.py b/pydis_site/apps/resources/templatetags/__init__.py
new file mode 100644
index 00000000..2b266b94
--- /dev/null
+++ b/pydis_site/apps/resources/templatetags/__init__.py
@@ -0,0 +1,3 @@
+from .as_icon import as_icon
+
+__all__ = ["as_icon"]
diff --git a/pydis_site/apps/resources/templatetags/as_icon.py b/pydis_site/apps/resources/templatetags/as_icon.py
new file mode 100644
index 00000000..b211407c
--- /dev/null
+++ b/pydis_site/apps/resources/templatetags/as_icon.py
@@ -0,0 +1,14 @@
+from django import template
+
+register = template.Library()
+
+
+def as_icon(icon: str) -> str:
+ """Convert icon string in format 'type/icon' to fa-icon HTML classes."""
+ icon_type, icon_name = icon.split("/")
+ if icon_type.lower() == "branding":
+ icon_type = "fab"
+ else:
+ icon_type = "fas"
+ return f'{icon_type} fa-{icon_name}'
diff --git a/pydis_site/apps/resources/tests/test_as_icon.py b/pydis_site/apps/resources/tests/test_as_icon.py
new file mode 100644
index 00000000..5b33910d
--- /dev/null
+++ b/pydis_site/apps/resources/tests/test_as_icon.py
@@ -0,0 +1,28 @@
+from django.test import TestCase
+
+from pydis_site.apps.resources.templatetags import as_icon
+
+
+class TestAsIcon(TestCase):
+ """Tests for `as_icon` templatetag."""
+
+ def test_as_icon(self):
+ """Should return proper icon type class and icon class based on input."""
+ test_cases = [
+ {
+ "input": "regular/icon",
+ "output": "fas fa-icon",
+ },
+ {
+ "input": "branding/brand",
+ "output": "fab fa-brand",
+ },
+ {
+ "input": "fake/my-icon",
+ "output": "fas fa-my-icon",
+ }
+ ]
+
+ for case in test_cases:
+ with self.subTest(input=case["input"], output=case["output"]):
+ self.assertEqual(case["output"], as_icon(case["input"]))
diff --git a/pydis_site/apps/resources/tests/test_views.py b/pydis_site/apps/resources/tests/test_views.py
index 497e9bfe..53685eef 100644
--- a/pydis_site/apps/resources/tests/test_views.py
+++ b/pydis_site/apps/resources/tests/test_views.py
@@ -1,6 +1,14 @@
+from pathlib import Path
+from unittest.mock import patch
+
+from django.conf import settings
from django.test import TestCase
from django_hosts import reverse
+TESTING_RESOURCES_PATH = Path(
+ settings.BASE_DIR, "pydis_site", "apps", "resources", "tests", "testing_resources"
+)
+
class TestResourcesView(TestCase):
def test_resources_index_200(self):
@@ -8,3 +16,19 @@ class TestResourcesView(TestCase):
url = reverse("resources:index")
response = self.client.get(url)
self.assertEqual(response.status_code, 200)
+
+
+class TestResourcesListView(TestCase):
+ @patch("pydis_site.apps.resources.views.resources_list.RESOURCES_PATH", TESTING_RESOURCES_PATH)
+ def test_valid_resource_list_200(self):
+ """Check does site return code 200 when visiting valid resource list."""
+ url = reverse("resources:resources", ("testing",))
+ response = self.client.get(url)
+ self.assertEqual(response.status_code, 200)
+
+ @patch("pydis_site.apps.resources.views.resources_list.RESOURCES_PATH", TESTING_RESOURCES_PATH)
+ def test_invalid_resource_list_404(self):
+ """Check does site return code 404 when trying to visit invalid resource list."""
+ url = reverse("resources:resources", ("invalid",))
+ response = self.client.get(url)
+ self.assertEqual(response.status_code, 404)
diff --git a/pydis_site/apps/resources/tests/testing_resources/testing/_category_info.yaml b/pydis_site/apps/resources/tests/testing_resources/testing/_category_info.yaml
new file mode 100644
index 00000000..bae17ea3
--- /dev/null
+++ b/pydis_site/apps/resources/tests/testing_resources/testing/_category_info.yaml
@@ -0,0 +1 @@
+name: Testing
diff --git a/pydis_site/apps/resources/tests/testing_resources/testing/foobar/_category_info.yaml b/pydis_site/apps/resources/tests/testing_resources/testing/foobar/_category_info.yaml
new file mode 100644
index 00000000..eaac32d9
--- /dev/null
+++ b/pydis_site/apps/resources/tests/testing_resources/testing/foobar/_category_info.yaml
@@ -0,0 +1 @@
+name: Foobar
diff --git a/pydis_site/apps/resources/tests/testing_resources/testing/foobar/resource_test.yaml b/pydis_site/apps/resources/tests/testing_resources/testing/foobar/resource_test.yaml
new file mode 100644
index 00000000..22835090
--- /dev/null
+++ b/pydis_site/apps/resources/tests/testing_resources/testing/foobar/resource_test.yaml
@@ -0,0 +1 @@
+name: Resource Test
diff --git a/pydis_site/apps/resources/tests/testing_resources/testing/my_resource.yaml b/pydis_site/apps/resources/tests/testing_resources/testing/my_resource.yaml
new file mode 100644
index 00000000..61df6173
--- /dev/null
+++ b/pydis_site/apps/resources/tests/testing_resources/testing/my_resource.yaml
@@ -0,0 +1 @@
+name: My Resource
diff --git a/pydis_site/apps/resources/urls.py b/pydis_site/apps/resources/urls.py
index c91e306e..19142081 100644
--- a/pydis_site/apps/resources/urls.py
+++ b/pydis_site/apps/resources/urls.py
@@ -5,4 +5,5 @@ from pydis_site.apps.resources import views
app_name = "resources"
urlpatterns = [
path("", views.ResourcesView.as_view(), name="index"),
+ path("<str:category>/", views.ResourcesListView.as_view(), name="resources")
]
diff --git a/pydis_site/apps/resources/utils.py b/pydis_site/apps/resources/utils.py
new file mode 100644
index 00000000..1855fc80
--- /dev/null
+++ b/pydis_site/apps/resources/utils.py
@@ -0,0 +1,42 @@
+import typing as t
+from pathlib import Path
+
+import yaml
+
+
+def get_resources(path: Path) -> t.List[t.Dict]:
+ """Loads resource YAMLs from provided path."""
+ resources = []
+
+ for item in path.iterdir():
+ if item.is_file() and item.suffix == ".yaml" and item.name != "_category_info.yaml":
+ resources.append(yaml.safe_load(item.read_text()))
+
+ return resources
+
+
+def get_subcategories(path: Path) -> t.List[t.Dict]:
+ """Loads resources subcategories with their resources by provided path."""
+ subcategories = []
+
+ for item in path.iterdir():
+ if item.is_dir() and item.joinpath("_category_info.yaml").exists():
+ subcategories.append({
+ "category_info": {
+ **yaml.safe_load(
+ item.joinpath("_category_info.yaml").read_text()
+ ),
+ "raw_name": item.name
+ },
+ "resources": [
+ yaml.safe_load(subitem.read_text())
+ for subitem in item.iterdir()
+ if (
+ subitem.is_file()
+ and subitem.suffix == ".yaml"
+ and subitem.name != "_category_info.yaml"
+ )
+ ]
+ })
+
+ return subcategories
diff --git a/pydis_site/apps/resources/views/__init__.py b/pydis_site/apps/resources/views/__init__.py
index f54118f2..8eb383b5 100644
--- a/pydis_site/apps/resources/views/__init__.py
+++ b/pydis_site/apps/resources/views/__init__.py
@@ -1,3 +1,4 @@
from .resources import ResourcesView
+from .resources_list import ResourcesListView
-__all__ = ["ResourcesView"]
+__all__ = ["ResourcesView", "ResourcesListView"]
diff --git a/pydis_site/apps/resources/views/resources_list.py b/pydis_site/apps/resources/views/resources_list.py
new file mode 100644
index 00000000..55f22993
--- /dev/null
+++ b/pydis_site/apps/resources/views/resources_list.py
@@ -0,0 +1,39 @@
+from pathlib import Path
+from typing import Any, Dict
+
+import yaml
+from django.conf import settings
+from django.http import Http404
+from django.views.generic import TemplateView
+
+from pydis_site.apps.resources.utils import get_resources, get_subcategories
+
+RESOURCES_PATH = Path(settings.BASE_DIR, "pydis_site", "apps", "resources", "resources")
+
+
+class ResourcesListView(TemplateView):
+ """Shows specific resources list."""
+
+ template_name = "resources/resources_list.html"
+
+ def get_context_data(self, **kwargs) -> Dict[str, Any]:
+ """Add resources and subcategories data into context."""
+ context = super().get_context_data(**kwargs)
+
+ resource_path = RESOURCES_PATH / self.kwargs["category"]
+ if (
+ not resource_path.is_dir()
+ or not resource_path.joinpath("_category_info.yaml").exists()
+ ):
+ raise Http404
+
+ context["resources"] = get_resources(resource_path)
+ context["subcategories"] = get_subcategories(resource_path)
+ context["category_info"] = {
+ **yaml.safe_load(
+ resource_path.joinpath("_category_info.yaml").read_text()
+ ),
+ "raw_name": resource_path.name
+ }
+
+ return context
diff --git a/pydis_site/settings.py b/pydis_site/settings.py
index 3abf556a..47750a47 100644
--- a/pydis_site/settings.py
+++ b/pydis_site/settings.py
@@ -279,7 +279,8 @@ BULMA_SETTINGS = {
"dimensions": "16 24 32 48 64 96 128 256 512", # Possible image dimensions
"navbar-height": "4.75rem",
"footer-padding": "1rem 1.5rem 1rem",
- }
+ "tooltip-max-width": "30rem",
+ },
}
# Information about site repository
diff --git a/pydis_site/static/css/resources/resources_list.css b/pydis_site/static/css/resources/resources_list.css
new file mode 100644
index 00000000..33129c87
--- /dev/null
+++ b/pydis_site/static/css/resources/resources_list.css
@@ -0,0 +1,55 @@
+.breadcrumb-section {
+ padding: 1rem;
+}
+
+i.resource-icon.is-orangered {
+ color: #FE640A;
+}
+
+i.resource-icon.is-orangered:hover {
+ color: #fe9840;
+}
+
+i.resource-icon.is-blurple {
+ color: #7289DA;
+}
+
+i.resource-icon.is-blurple:hover {
+ color: #93a8da;
+}
+
+i.resource-icon.is-teal {
+ color: #95DBE5;
+}
+
+i.resource-icon.is-teal:hover {
+ color: #a9f5ff;
+}
+
+i.resource-icon.is-youtube-red {
+ color: #BB0000;
+}
+
+i.resource-icon.is-youtube-red:hover {
+ color: #f80000;
+}
+
+i.resource-icon.is-amazon-orange {
+ color: #FF9900;
+}
+
+i.resource-icon.is-amazon-orange:hover {
+ color: #ffb71a;
+}
+
+i.resource-icon.is-black {
+ color: #000000;
+}
+
+i.resource-icon.is-black {
+ color: #191919;
+}
+
+i.has-icon-padding {
+ padding: 0 10px 25px 0;
+}
diff --git a/pydis_site/templates/resources/resource_box.html b/pydis_site/templates/resources/resource_box.html
new file mode 100644
index 00000000..af7c8d65
--- /dev/null
+++ b/pydis_site/templates/resources/resource_box.html
@@ -0,0 +1,22 @@
+{% load as_icon %}
+
+<div class="box" style="max-width: 800px;">
+ {% if 'title_url' in resource %}
+ <a href="{{ resource.title_url }}">
+ {% include "resources/resource_box_header.html" %}
+ </a>
+ {% else %}
+ {% include "resources/resource_box_header.html" %}
+ {% endif %}
+
+ <p class="is-italic">{{ resource.description|safe }}</p>
+
+ {# Icons #}
+ {% for icon in resource.urls %}
+ <span class="icon is-size-4 is-medium" style="margin: 5px;">
+ <a href="{{ icon.url }}">
+ <i class="{{ icon.icon|as_icon }} is-size-3 resource-icon is-{{ icon.color }}"></i>
+ </a>
+ </span>
+ {% endfor %}
+</div>
diff --git a/pydis_site/templates/resources/resource_box_header.html b/pydis_site/templates/resources/resource_box_header.html
new file mode 100644
index 00000000..84e1a79b
--- /dev/null
+++ b/pydis_site/templates/resources/resource_box_header.html
@@ -0,0 +1,24 @@
+{% load as_icon %}
+
+{# Icon section #}
+{% if 'icon_image' in resource %}
+ <img src="{{ resource.icon_image }}" alt="" style="height: {{ resource.icon_size|default:30 }}px;">
+{% elif 'title_icon' in resource %}
+ <span class="icon is-size-4 is-medium">
+ <i class="{{ resource.title_icon|as_icon }} is-size-3 resource-icon has-icon-padding is-{{ resource.title_icon_color }}"></i>
+ </span>
+{% elif 'default_icon' in category_info %}
+ <span class="icon is-size-4 is-medium">
+ <i class="{{ category_info.default_icon|as_icon }} is-size-3 resource-icon has-icon-padding is-{{ category_info.default_icon_color }}"></i>
+ </span>
+{% endif %}
+
+{# Title section #}
+<span class="is-size-4 has-text-weight-bold">
+ {% if 'title_image' in resource %}
+ <img src="{{ resource.title_image }}" alt="" style="height: 50px; {{ resource.title_image_style }}">
+ {% endif %}
+ {% if 'name' in resource %}
+ {{ resource.name }}
+ {% endif %}
+</span>
diff --git a/pydis_site/templates/resources/resources.html b/pydis_site/templates/resources/resources.html
index 491bc55e..f1f487cf 100644
--- a/pydis_site/templates/resources/resources.html
+++ b/pydis_site/templates/resources/resources.html
@@ -24,7 +24,7 @@
<div class="tile is-vertical is-9">
<div class="tile">
- <a class="tile is-8 is-parent" href="/resources/reading/">
+ <a class="tile is-8 is-parent" href="{% url "resources:resources" category="reading" %}">
<article class="tile is-child box hero is-black" id="readingBlock">
<p class="title is-size-1"><i class="fad fa-book-alt" aria-hidden="true"></i> Read</p>
<p class="subtitle is-size-4">Lovingly curated books to explore</p>
@@ -32,7 +32,7 @@
</a>
<div class="tile">
- <a class="tile is-parent" href="/resources/videos/">
+ <a class="tile is-parent" href="{% url "resources:resources" category="videos" %}">
<article class="tile is-child box hero is-danger is-bold">
<p class="title is-size-1"><i class="fad fa-video" aria-hidden="true"></i> Watch</p>
<p class="subtitle is-size-4">Visually engaging</p>
@@ -42,13 +42,13 @@
</div>
<div class="tile">
- <a class="tile is-parent" href="/resources/interactive/">
+ <a class="tile is-parent" href="{% url "resources:resources" category="interactive" %}">
<article class="tile is-child box hero is-black" id="interactiveBlock">
<p class="title is-size-1"><i class="fad fa-code" aria-hidden="true"></i> Try</p>
<p class="subtitle is-size-4">Interactively discover the possibilities</p>
</article>
</a>
- <a class="tile is-8 is-parent" href="/resources/courses/">
+ <a class="tile is-8 is-parent" href="{% url "resources:resources" category="courses" %}">
<article class="tile is-child box hero is-success is-bold">
<p class="title is-size-1"><i class="fad fa-graduation-cap" aria-hidden="true"></i> Learn</p>
<p class="subtitle is-size-4">Structured courses with clear goals</p>
@@ -61,14 +61,14 @@
<div class="tile is-ancestor">
<div class="tile is-vertical is-9">
<div class="tile">
- <a class="tile is-8 is-parent" href="/resources/communities/">
+ <a class="tile is-8 is-parent" href="{% url "resources:resources" category="communities" %}">
<article class="tile is-child box hero is-black" id="communitiesBlock">
<p class="title is-size-1"><i class="fad fa-users" aria-hidden="true"></i> Communities</p>
<p class="subtitle is-size-4">Some of our best friends</p>
</article>
</a>
<div class="tile">
- <a class="tile is-parent" href="/resources/podcasts/">
+ <a class="tile is-parent" href="{% url "resources:resources" category="podcasts" %}">
<article class="tile is-child box hero is-black" id="podcastsBlock">
<p class="title is-size-1"><i class="fad fa-podcast" aria-hidden="true"></i> Listen</p>
<p class="subtitle is-size-4">Regular podcasts to follow</p>
@@ -77,7 +77,7 @@
</div>
</div>
</div>
- <a class="tile is-parent" href="/resources/tools/">
+ <a class="tile is-parent" href="{% url "resources:resources" category="tools" %}">
<article class="tile is-child box hero is-dark">
<p class="title is-size-1"><i class="fad fa-tools" aria-hidden="true"></i> Tools</p>
<p class="subtitle is-size-4">Things we love to use</p>
diff --git a/pydis_site/templates/resources/resources_list.html b/pydis_site/templates/resources/resources_list.html
new file mode 100644
index 00000000..e2be3cb7
--- /dev/null
+++ b/pydis_site/templates/resources/resources_list.html
@@ -0,0 +1,52 @@
+{% extends "base/base.html" %}
+{% load as_icon %}
+{% load static %}
+
+{% block title %}{{ category_info.name }}{% endblock %}
+{% block head %}
+ <link rel="stylesheet" href="{% static "css/resources/resources_list.css" %}">
+{% endblock %}
+
+{% block content %}
+ {% include "base/navbar.html" %}
+
+ <section class="section breadcrumb-section">
+ <div class="container">
+ <nav class="breadcrumb is-pulled-left" aria-label="breadcrumbs">
+ <ul>
+ <li><a href="{% url "resources:index" %}">Resources</a></li>
+ <li class="is-active"><a href="#">{{ category_info.name }}</a></li>
+ </ul>
+ </nav>
+ </div>
+ </section>
+
+ <section class="section">
+ <div class="container">
+ <div class="content">
+ <h1>{{ category_info.name }}</h1>
+ <p>{{ category_info.description|safe }}</p>
+ <div>
+ {% for resource in resources|dictsort:"position" %}
+ {% include "resources/resource_box.html" %}
+ {% endfor %}
+
+ {% for subcategory in subcategories|dictsort:"category_info.position" %}
+ <h2 id="{{ subcategory.category_info.raw_name }}">
+ <a href="{% url "resources:resources" category=category_info.raw_name %}#{{ subcategory.category_info.raw_name }}">
+ {{ subcategory.category_info.name }}
+ </a>
+ </h2>
+ <p>{{ subcategory.category_info.description|safe }}</p>
+
+ {% for resource in subcategory.resources|dictsort:"position" %}
+ {% with category_info=subcategory.category_info %}
+ {% include "resources/resource_box.html" %}
+ {% endwith %}
+ {% endfor %}
+ {% endfor %}
+ </div>
+ </div>
+ </div>
+ </section>
+{% endblock %}