aboutsummaryrefslogtreecommitdiffstats
path: root/pydis_site/apps/resources
diff options
context:
space:
mode:
Diffstat (limited to 'pydis_site/apps/resources')
-rw-r--r--pydis_site/apps/resources/__init__.py0
-rw-r--r--pydis_site/apps/resources/apps.py7
-rw-r--r--pydis_site/apps/resources/migrations/__init__.py0
-rw-r--r--pydis_site/apps/resources/resources/communities/_category_info.yaml2
-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.yaml11
-rw-r--r--pydis_site/apps/resources/resources/interactive/edublocks.yaml10
-rw-r--r--pydis_site/apps/resources/resources/interactive/exercism.yaml13
-rw-r--r--pydis_site/apps/resources/resources/interactive/jetbrains_academy.yaml8
-rw-r--r--pydis_site/apps/resources/resources/interactive/python_morsels.yaml10
-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.yaml5
-rw-r--r--pydis_site/apps/resources/resources/podcasts/python_bytes.yaml5
-rw-r--r--pydis_site/apps/resources/resources/podcasts/talk_python_to_me.yaml5
-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.yaml5
-rw-r--r--pydis_site/apps/resources/resources/reading/books/automate_the_boring_stuff.yaml14
-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.yaml15
-rw-r--r--pydis_site/apps/resources/resources/reading/books/flask_web_development.yaml14
-rw-r--r--pydis_site/apps/resources/resources/reading/books/fluent_python.yaml14
-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.yaml13
-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.yaml14
-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.yaml12
-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.yaml14
-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.yaml5
-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/__init__.py0
-rw-r--r--pydis_site/apps/resources/tests/test_as_icon.py28
-rw-r--r--pydis_site/apps/resources/tests/test_views.py34
-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.py9
-rw-r--r--pydis_site/apps/resources/utils.py42
-rw-r--r--pydis_site/apps/resources/views/__init__.py4
-rw-r--r--pydis_site/apps/resources/views/resources.py7
-rw-r--r--pydis_site/apps/resources/views/resources_list.py39
96 files changed, 895 insertions, 0 deletions
diff --git a/pydis_site/apps/resources/__init__.py b/pydis_site/apps/resources/__init__.py
new file mode 100644
index 00000000..e69de29b
--- /dev/null
+++ b/pydis_site/apps/resources/__init__.py
diff --git a/pydis_site/apps/resources/apps.py b/pydis_site/apps/resources/apps.py
new file mode 100644
index 00000000..e0c235bd
--- /dev/null
+++ b/pydis_site/apps/resources/apps.py
@@ -0,0 +1,7 @@
+from django.apps import AppConfig
+
+
+class ResourcesConfig(AppConfig):
+ """AppConfig instance for Resources app."""
+
+ name = 'resources'
diff --git a/pydis_site/apps/resources/migrations/__init__.py b/pydis_site/apps/resources/migrations/__init__.py
new file mode 100644
index 00000000..e69de29b
--- /dev/null
+++ b/pydis_site/apps/resources/migrations/__init__.py
diff --git a/pydis_site/apps/resources/resources/communities/_category_info.yaml b/pydis_site/apps/resources/resources/communities/_category_info.yaml
new file mode 100644
index 00000000..b9cb6533
--- /dev/null
+++ b/pydis_site/apps/resources/resources/communities/_category_info.yaml
@@ -0,0 +1,2 @@
+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/resources/resources/interactive/code_combat.yaml b/pydis_site/apps/resources/resources/interactive/code_combat.yaml
new file mode 100644
index 00000000..30f20c28
--- /dev/null
+++ b/pydis_site/apps/resources/resources/interactive/code_combat.yaml
@@ -0,0 +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
+position: 0
+urls:
+- icon: regular/link
+ url: https://codecombat.com/
+ color: teal
+- icon: branding/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/resources/resources/interactive/exercism.yaml b/pydis_site/apps/resources/resources/interactive/exercism.yaml
new file mode 100644
index 00000000..68b458d0
--- /dev/null
+++ b/pydis_site/apps/resources/resources/interactive/exercism.yaml
@@ -0,0 +1,13 @@
+description: Level up your programming skills with more than 2600 exercises across
+ 47 programming languages, Python included. The website provides a mentored mode,
+ 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
+position: 1
+urls:
+- icon: regular/link
+ url: https://exercism.io/
+ color: teal
+- icon: branding/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/resources/resources/interactive/python_morsels.yaml b/pydis_site/apps/resources/resources/interactive/python_morsels.yaml
new file mode 100644
index 00000000..879500eb
--- /dev/null
+++ b/pydis_site/apps/resources/resources/interactive/python_morsels.yaml
@@ -0,0 +1,10 @@
+description: 'Learn to write more idiomatic Python code with deliberate practice!
+
+
+ Sign up for this service and receive one short Python exercise every week. After
+ you attempt to work through the exercise, you''ll receive a number of solutions
+ 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
+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/resources/resources/podcasts/podcast_dunder_init.yaml b/pydis_site/apps/resources/resources/podcasts/podcast_dunder_init.yaml
new file mode 100644
index 00000000..efe1601f
--- /dev/null
+++ b/pydis_site/apps/resources/resources/podcasts/podcast_dunder_init.yaml
@@ -0,0 +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__
+title_url: https://www.podcastinit.com/
+position: 2
diff --git a/pydis_site/apps/resources/resources/podcasts/python_bytes.yaml b/pydis_site/apps/resources/resources/podcasts/python_bytes.yaml
new file mode 100644
index 00000000..4f817f26
--- /dev/null
+++ b/pydis_site/apps/resources/resources/podcasts/python_bytes.yaml
@@ -0,0 +1,5 @@
+description: A byte-sized podcast where Michael Kennedy and Brian Okken work through
+ this week's notable Python headlines.
+name: Python Bytes
+title_url: https://pythonbytes.fm/
+position: 1
diff --git a/pydis_site/apps/resources/resources/podcasts/talk_python_to_me.yaml b/pydis_site/apps/resources/resources/podcasts/talk_python_to_me.yaml
new file mode 100644
index 00000000..5ce21fd7
--- /dev/null
+++ b/pydis_site/apps/resources/resources/podcasts/talk_python_to_me.yaml
@@ -0,0 +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
+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/resources/resources/reading/books/_category_info.yaml b/pydis_site/apps/resources/resources/reading/books/_category_info.yaml
new file mode 100644
index 00000000..ae092a20
--- /dev/null
+++ b/pydis_site/apps/resources/resources/reading/books/_category_info.yaml
@@ -0,0 +1,5 @@
+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/resources/resources/reading/books/automate_the_boring_stuff.yaml b/pydis_site/apps/resources/resources/reading/books/automate_the_boring_stuff.yaml
new file mode 100644
index 00000000..3812029c
--- /dev/null
+++ b/pydis_site/apps/resources/resources/reading/books/automate_the_boring_stuff.yaml
@@ -0,0 +1,14 @@
+description: One of the best books out there for Python beginners. This book will
+ teach you the basics of Python, while also teaching invaluable automation tools
+ and techniques for solving common problems. You'll learn how to go about scraping
+ 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
+position: 2
+urls:
+- icon: regular/book
+ url: https://automatetheboringstuff.com/
+ color: black
+- icon: branding/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/resources/resources/reading/books/effective_python.yaml b/pydis_site/apps/resources/resources/reading/books/effective_python.yaml
new file mode 100644
index 00000000..becd0578
--- /dev/null
+++ b/pydis_site/apps/resources/resources/reading/books/effective_python.yaml
@@ -0,0 +1,15 @@
+description: A book that gives 90 best practices for writing excellent Python. Great
+ for intermediates.
+name: Effective Python
+position: 3
+urls:
+- icon: regular/link
+ url: https://effectivepython.com/
+ color: teal
+- icon: branding/amazon
+ url: https://www.amazon.com/Effective-Python-Specific-Software-Development/dp/0134853989
+ color: amazon-orange
+ title: Amazon
+- icon: branding/github
+ url: https://github.com/bslatkin/effectivepython
+ color: black
diff --git a/pydis_site/apps/resources/resources/reading/books/flask_web_development.yaml b/pydis_site/apps/resources/resources/reading/books/flask_web_development.yaml
new file mode 100644
index 00000000..cc83a331
--- /dev/null
+++ b/pydis_site/apps/resources/resources/reading/books/flask_web_development.yaml
@@ -0,0 +1,14 @@
+description: A comprehensive Flask walkthrough that has you building a complete social
+ blogging application from scratch.
+name: Flask Web Development
+position: 6
+urls:
+- icon: regular/link
+ url: http://shop.oreilly.com/product/0636920031116.do
+ color: teal
+- icon: branding/amazon
+ url: https://www.amazon.com/Flask-Web-Development-Developing-Applications/dp/1449372627
+ color: amazon-orange
+- icon: branding/github
+ url: https://github.com/miguelgrinberg/flasky
+ color: black
diff --git a/pydis_site/apps/resources/resources/reading/books/fluent_python.yaml b/pydis_site/apps/resources/resources/reading/books/fluent_python.yaml
new file mode 100644
index 00000000..92f4bbab
--- /dev/null
+++ b/pydis_site/apps/resources/resources/reading/books/fluent_python.yaml
@@ -0,0 +1,14 @@
+description: A veritable tome of intermediate and advanced Python information. A must-read
+ for any Python professional. By far the most recommended book for intermediates.
+name: Fluent Python
+position: 7
+urls:
+- icon: regular/link
+ url: https://www.oreilly.com/library/view/fluent-python/9781491946237/
+ color: teal
+- icon: branding/amazon
+ url: https://www.amazon.com/Fluent-Python-Concise-Effective-Programming/dp/1491946008
+ color: amazon-orange
+- icon: branding/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/resources/resources/reading/books/mission_python.yaml b/pydis_site/apps/resources/resources/reading/books/mission_python.yaml
new file mode 100644
index 00000000..c4a48b7e
--- /dev/null
+++ b/pydis_site/apps/resources/resources/reading/books/mission_python.yaml
@@ -0,0 +1,13 @@
+description: Learn programming and Python while building a complete and awesome space-themed
+ game using cutting-edge Python 3.6 and Pygame Zero. Extensive use of code examples,
+ images, and walk-throughs make this a pleasure to both read and follow along. Excellent
+ book for beginners.
+name: Mission Python
+position: 5
+urls:
+- icon: regular/link
+ url: https://www.sean.co.uk/books/mission-python/index.shtm
+ color: teal
+- icon: branding/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/resources/resources/reading/books/python_cookbook.yaml b/pydis_site/apps/resources/resources/reading/books/python_cookbook.yaml
new file mode 100644
index 00000000..032f8c64
--- /dev/null
+++ b/pydis_site/apps/resources/resources/reading/books/python_cookbook.yaml
@@ -0,0 +1,14 @@
+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
+position: 8
+urls:
+- icon: regular/link
+ url: http://shop.oreilly.com/product/0636920027072.do
+ color: teal
+- icon: branding/amazon
+ url: https://www.amazon.com/Python-Cookbook-Third-David-Beazley/dp/1449340377
+ color: amazon-orange
+- icon: branding/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/resources/resources/reading/books/python_tricks.yaml b/pydis_site/apps/resources/resources/reading/books/python_tricks.yaml
new file mode 100644
index 00000000..c0941809
--- /dev/null
+++ b/pydis_site/apps/resources/resources/reading/books/python_tricks.yaml
@@ -0,0 +1,12 @@
+description: Full of useful Python tips, tricks and features. Get this if you have
+ 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
+position: 4
+urls:
+- icon: regular/link
+ url: https://realpython.com/products/python-tricks-book/
+ color: teal
+- icon: branding/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/resources/resources/reading/books/two_scoops_of_django.yaml b/pydis_site/apps/resources/resources/reading/books/two_scoops_of_django.yaml
new file mode 100644
index 00000000..7d83e7c4
--- /dev/null
+++ b/pydis_site/apps/resources/resources/reading/books/two_scoops_of_django.yaml
@@ -0,0 +1,14 @@
+description: Tips, tricks, and best practices for your Django project.
+ A highly recommended resource for Django web developers.
+name: Two Scoops of Django
+position: 9
+urls:
+- icon: regular/link
+ url: https://twoscoopspress.com/products/two-scoops-of-django-1-11
+ color: teal
+- icon: branding/amazon
+ url: https://www.amazon.com/Two-Scoops-Django-Best-Practices/dp/0981467342
+ color: amazon-orange
+- icon: branding/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/resources/resources/tools/editors/_category_info.yaml b/pydis_site/apps/resources/resources/tools/editors/_category_info.yaml
new file mode 100644
index 00000000..3cdfff3a
--- /dev/null
+++ b/pydis_site/apps/resources/resources/tools/editors/_category_info.yaml
@@ -0,0 +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/__init__.py b/pydis_site/apps/resources/tests/__init__.py
new file mode 100644
index 00000000..e69de29b
--- /dev/null
+++ b/pydis_site/apps/resources/tests/__init__.py
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
new file mode 100644
index 00000000..53685eef
--- /dev/null
+++ b/pydis_site/apps/resources/tests/test_views.py
@@ -0,0 +1,34 @@
+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):
+ """Check does index of resources app return 200 HTTP response."""
+ 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
new file mode 100644
index 00000000..19142081
--- /dev/null
+++ b/pydis_site/apps/resources/urls.py
@@ -0,0 +1,9 @@
+from django.urls import path
+
+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
new file mode 100644
index 00000000..8eb383b5
--- /dev/null
+++ b/pydis_site/apps/resources/views/__init__.py
@@ -0,0 +1,4 @@
+from .resources import ResourcesView
+from .resources_list import ResourcesListView
+
+__all__ = ["ResourcesView", "ResourcesListView"]
diff --git a/pydis_site/apps/resources/views/resources.py b/pydis_site/apps/resources/views/resources.py
new file mode 100644
index 00000000..25ce3e50
--- /dev/null
+++ b/pydis_site/apps/resources/views/resources.py
@@ -0,0 +1,7 @@
+from django.views.generic import TemplateView
+
+
+class ResourcesView(TemplateView):
+ """View for resources index page."""
+
+ template_name = "resources/resources.html"
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