aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorGravatar Joseph Banks <[email protected]>2019-07-06 23:37:34 +0100
committerGravatar Joseph Banks <[email protected]>2019-07-06 23:37:34 +0100
commita80626a5f605b5afbfedac344140c16eeae5adce (patch)
treeae590099792ed2ace12182cd815fa3e95d999dcd
parentNavbar dropdown should not be hidden behind wiki nav (diff)
Implement new YAML resource system
-rw-r--r--Pipfile1
-rw-r--r--Pipfile.lock45
-rw-r--r--pydis_site/apps/home/resources/books/automate_the_boring_stuff.yaml16
-rw-r--r--pydis_site/apps/home/resources/books/byte_of_python.yaml17
-rw-r--r--pydis_site/apps/home/resources/books/category_info.yaml2
-rw-r--r--pydis_site/apps/home/resources/books/effective_python.yaml14
-rw-r--r--pydis_site/apps/home/resources/books/flask_web_development.yaml14
-rw-r--r--pydis_site/apps/home/resources/books/fluent_python.yaml14
-rw-r--r--pydis_site/apps/home/resources/books/mission_python.yaml13
-rw-r--r--pydis_site/apps/home/resources/books/python_cookbook.yaml14
-rw-r--r--pydis_site/apps/home/resources/books/python_tricks.yaml12
-rw-r--r--pydis_site/apps/home/resources/books/two_scoops_of_django.yaml14
-rw-r--r--pydis_site/apps/home/resources/communities/adafruit.yaml14
-rw-r--r--pydis_site/apps/home/resources/communities/category_info.yaml2
-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/category_info.yaml2
-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/automate_the_boring_stuff.yaml11
-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/code_combat.yaml13
-rw-r--r--pydis_site/apps/home/resources/interactive_learning_tools/exercism.yaml14
-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/interactive_learning_tools/python_morsels.yaml15
-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/podcasts/podcast_dunder_init.yaml9
-rw-r--r--pydis_site/apps/home/resources/podcasts/python_bytes.yaml9
-rw-r--r--pydis_site/apps/home/resources/podcasts/talk_python_to_me.yaml9
-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/utils/resources.py79
50 files changed, 569 insertions, 19 deletions
diff --git a/Pipfile b/Pipfile
index db3b3ce8..8d71a137 100644
--- a/Pipfile
+++ b/Pipfile
@@ -31,6 +31,7 @@ whitenoise = "==4.1.2"
requests = "~=2.21"
pygments = "~=2.3.1"
wiki = {git = "https://github.com/python-discord/django-wiki.git"}
+pyyaml = "*"
[requires]
python_version = "3.7"
diff --git a/Pipfile.lock b/Pipfile.lock
index 669d8b45..fded9eab 100644
--- a/Pipfile.lock
+++ b/Pipfile.lock
@@ -1,7 +1,7 @@
{
"_meta": {
"hash": {
- "sha256": "fa7213fcc7dad2bfd56194aca55853ca77a8842b7d0938d99e76245e06c78ddb"
+ "sha256": "c0406de8c1ea66d1f62c39c3140df0b258d5412ed19502a3a6609a9d631d7840"
},
"pipfile-spec": 6,
"requires": {
@@ -177,6 +177,23 @@
],
"version": "==2019.1"
},
+ "pyyaml": {
+ "hashes": [
+ "sha256:57acc1d8533cbe51f6662a55434f0dbecfa2b9eaf115bede8f6fd00115a0c0d3",
+ "sha256:588c94b3d16b76cfed8e0be54932e5729cc185caffaa5a451e7ad2f7ed8b4043",
+ "sha256:68c8dd247f29f9a0d09375c9c6b8fdc64b60810ebf07ba4cdd64ceee3a58c7b7",
+ "sha256:70d9818f1c9cd5c48bb87804f2efc8692f1023dac7f1a1a5c61d454043c1d265",
+ "sha256:86a93cccd50f8c125286e637328ff4eef108400dd7089b46a7be3445eecfa391",
+ "sha256:a0f329125a926876f647c9fa0ef32801587a12328b4a3c741270464e3e4fa778",
+ "sha256:a3c252ab0fa1bb0d5a3f6449a4826732f3eb6c0270925548cac342bc9b22c225",
+ "sha256:b4bb4d3f5e232425e25dda21c070ce05168a786ac9eda43768ab7f3ac2770955",
+ "sha256:cd0618c5ba5bda5f4039b9398bb7fb6a317bb8298218c3de25c47c4740e4b95e",
+ "sha256:ceacb9e5f8474dcf45b940578591c7f3d960e82f926c707788a570b51ba59190",
+ "sha256:fe6a88094b64132c4bb3b631412e90032e8cfe9745a58370462240b8cb7553cd"
+ ],
+ "index": "pypi",
+ "version": "==5.1.1"
+ },
"requests": {
"hashes": [
"sha256:11e007a8a2aa0323f5a921e9e6a2d7e4e67d9877e85773fba9ba6419025cbeb4",
@@ -215,7 +232,8 @@
"version": "==4.1.2"
},
"wiki": {
- "git": "https://github.com/python-discord/django-wiki.git"
+ "git": "https://github.com/python-discord/django-wiki.git",
+ "ref": "66d443248279fb8decf23f68c5363ecf6362ee09"
}
},
"develop": {
@@ -235,42 +253,32 @@
},
"coverage": {
"hashes": [
- "sha256:0c5fe441b9cfdab64719f24e9684502a59432df7570521563d7b1aff27ac755f",
- "sha256:2b412abc4c7d6e019ce7c27cbc229783035eef6d5401695dccba80f481be4eb3",
"sha256:3684fabf6b87a369017756b551cef29e505cb155ddb892a7a29277b978da88b9",
"sha256:39e088da9b284f1bd17c750ac672103779f7954ce6125fd4382134ac8d152d74",
"sha256:3c205bc11cc4fcc57b761c2da73b9b72a59f8d5ca89979afb0c1c6f9e53c7390",
- "sha256:42692db854d13c6c5e9541b6ffe0fe921fe16c9c446358d642ccae1462582d3b",
"sha256:465ce53a8c0f3a7950dfb836438442f833cf6663d407f37d8c52fe7b6e56d7e8",
"sha256:48020e343fc40f72a442c8a1334284620f81295256a6b6ca6d8aa1350c763bbe",
- "sha256:4ec30ade438d1711562f3786bea33a9da6107414aed60a5daa974d50a8c2c351",
"sha256:5296fc86ab612ec12394565c500b412a43b328b3907c0d14358950d06fd83baf",
"sha256:5f61bed2f7d9b6a9ab935150a6b23d7f84b8055524e7be7715b6513f3328138e",
- "sha256:6899797ac384b239ce1926f3cb86ffc19996f6fa3a1efbb23cb49e0c12d8c18c",
"sha256:68a43a9f9f83693ce0414d17e019daee7ab3f7113a70c79a3dd4c2f704e4d741",
"sha256:6b8033d47fe22506856fe450470ccb1d8ba1ffb8463494a15cfc96392a288c09",
"sha256:7ad7536066b28863e5835e8cfeaa794b7fe352d99a8cded9f43d1161be8e9fbd",
"sha256:7bacb89ccf4bedb30b277e96e4cc68cd1369ca6841bde7b005191b54d3dd1034",
"sha256:839dc7c36501254e14331bcb98b27002aa415e4af7ea039d9009409b9d2d5420",
- "sha256:8e679d1bde5e2de4a909efb071f14b472a678b788904440779d2c449c0355b27",
"sha256:8f9a95b66969cdea53ec992ecea5406c5bd99c9221f539bca1e8406b200ae98c",
"sha256:932c03d2d565f75961ba1d3cec41ddde00e162c5b46d03f7423edcb807734eab",
- "sha256:93f965415cc51604f571e491f280cff0f5be35895b4eb5e55b47ae90c02a497b",
"sha256:988529edadc49039d205e0aa6ce049c5ccda4acb2d6c3c5c550c17e8c02c05ba",
"sha256:998d7e73548fe395eeb294495a04d38942edb66d1fa61eb70418871bc621227e",
"sha256:9de60893fb447d1e797f6bf08fdf0dbcda0c1e34c1b06c92bd3a363c0ea8c609",
"sha256:9e80d45d0c7fcee54e22771db7f1b0b126fb4a6c0a2e5afa72f66827207ff2f2",
"sha256:a545a3dfe5082dc8e8c3eb7f8a2cf4f2870902ff1860bd99b6198cfd1f9d1f49",
"sha256:a5d8f29e5ec661143621a8f4de51adfb300d7a476224156a39a392254f70687b",
- "sha256:a9abc8c480e103dc05d9b332c6cc9fb1586330356fc14f1aa9c0ca5745097d19",
"sha256:aca06bfba4759bbdb09bf52ebb15ae20268ee1f6747417837926fae990ebc41d",
"sha256:bb23b7a6fd666e551a3094ab896a57809e010059540ad20acbeec03a154224ce",
"sha256:bfd1d0ae7e292105f29d7deaa9d8f2916ed8553ab9d5f39ec65bcf5deadff3f9",
- "sha256:c22ab9f96cbaff05c6a84e20ec856383d27eae09e511d3e6ac4479489195861d",
"sha256:c62ca0a38958f541a73cf86acdab020c2091631c137bd359c4f5bddde7b75fd4",
"sha256:c709d8bda72cf4cd348ccec2a4881f2c5848fd72903c185f363d361b2737f773",
"sha256:c968a6aa7e0b56ecbd28531ddf439c2ec103610d3e2bf3b75b813304f8cb7723",
- "sha256:ca58eba39c68010d7e87a823f22a081b5290e3e3c64714aac3c91481d8b34d22",
"sha256:df785d8cb80539d0b55fd47183264b7002077859028dfe3070cf6359bf8b2d9c",
"sha256:f406628ca51e0ae90ae76ea8398677a921b36f0bd71aab2099dfed08abd0322f",
"sha256:f46087bbd95ebae244a0eda01a618aff11ec7a069b15a3ef8f6b520db523dcf1",
@@ -374,10 +382,10 @@
},
"pbr": {
"hashes": [
- "sha256:9181e2a34d80f07a359ff1d0504fad3a47e00e1cf2c475b0aa7dcb030af54c40",
- "sha256:94bdc84da376b3dd5061aa0c3b6faffe943ee2e56fa4ff9bd63e1643932f34fc"
+ "sha256:36ebd78196e8c9588c972f5571230a059ff83783fabbbbedecc07be263ccd7e6",
+ "sha256:5a03f59455ad54f01a94c15829b8b70065462b7bd8d5d7e983306b59127fc841"
],
- "version": "==5.3.1"
+ "version": "==5.4.0"
},
"pep8-naming": {
"hashes": [
@@ -396,11 +404,9 @@
},
"pydocstyle": {
"hashes": [
- "sha256:2258f9b0df68b97bf3a6c29003edc5238ff8879f1efb6f1999988d934e432bd8",
- "sha256:5741c85e408f9e0ddf873611085e819b809fca90b619f5fd7f34bd4959da3dd4",
- "sha256:ed79d4ec5e92655eccc21eb0c6cf512e69512b4a97d215ace46d17e4990f2039"
+ "sha256:58c421dd605eec0bce65df8b8e5371bb7ae421582cdf0ba8d9435ac5b0ffc36a"
],
- "version": "==3.0.0"
+ "version": "==4.0.0"
},
"pyflakes": {
"hashes": [
@@ -423,6 +429,7 @@
"sha256:ceacb9e5f8474dcf45b940578591c7f3d960e82f926c707788a570b51ba59190",
"sha256:fe6a88094b64132c4bb3b631412e90032e8cfe9745a58370462240b8cb7553cd"
],
+ "index": "pypi",
"version": "==5.1.1"
},
"six": {
diff --git a/pydis_site/apps/home/resources/books/automate_the_boring_stuff.yaml b/pydis_site/apps/home/resources/books/automate_the_boring_stuff.yaml
new file mode 100644
index 00000000..3a9045a5
--- /dev/null
+++ b/pydis_site/apps/home/resources/books/automate_the_boring_stuff.yaml
@@ -0,0 +1,16 @@
+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
+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.
+urls:
+- icon: regular/link
+ title: E-book
+ url: https://automatetheboringstuff.com/
+- icon: branding/amazon
+ title: Amazon
+ url: https://www.amazon.com/Automate-Boring-Stuff-Python-Programming/dp/1593275994/
diff --git a/pydis_site/apps/home/resources/books/byte_of_python.yaml b/pydis_site/apps/home/resources/books/byte_of_python.yaml
new file mode 100644
index 00000000..f3eca902
--- /dev/null
+++ b/pydis_site/apps/home/resources/books/byte_of_python.yaml
@@ -0,0 +1,17 @@
+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/books/category_info.yaml b/pydis_site/apps/home/resources/books/category_info.yaml
new file mode 100644
index 00000000..e3b89ad3
--- /dev/null
+++ b/pydis_site/apps/home/resources/books/category_info.yaml
@@ -0,0 +1,2 @@
+description: The best books for learning Python or Python Frameworks
+name: Books
diff --git a/pydis_site/apps/home/resources/books/effective_python.yaml b/pydis_site/apps/home/resources/books/effective_python.yaml
new file mode 100644
index 00000000..ab782704
--- /dev/null
+++ b/pydis_site/apps/home/resources/books/effective_python.yaml
@@ -0,0 +1,14 @@
+description: A book that gives 59 best practices for writing excellent Python. Great
+ for intermediates.
+name: Effective Python
+payment: paid
+urls:
+- icon: regular/link
+ title: Website
+ url: https://effectivepython.com/
+- icon: branding/amazon
+ title: Amazon
+ url: https://www.amazon.com/Effective-Python-Specific-Software-Development/dp/0134034287
+- icon: branding/github
+ title: GitHub
+ url: https://github.com/bslatkin/effectivepython
diff --git a/pydis_site/apps/home/resources/books/flask_web_development.yaml b/pydis_site/apps/home/resources/books/flask_web_development.yaml
new file mode 100644
index 00000000..613e0e50
--- /dev/null
+++ b/pydis_site/apps/home/resources/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
+payment: paid
+urls:
+- icon: regular/link
+ title: Website
+ url: http://shop.oreilly.com/product/0636920031116.do
+- icon: branding/amazon
+ title: Amazon
+ url: https://www.amazon.com/Flask-Web-Development-Developing-Applications/dp/1449372627
+- icon: branding/github
+ title: GitHub
+ url: https://github.com/miguelgrinberg/flasky
diff --git a/pydis_site/apps/home/resources/books/fluent_python.yaml b/pydis_site/apps/home/resources/books/fluent_python.yaml
new file mode 100644
index 00000000..ebfd5f91
--- /dev/null
+++ b/pydis_site/apps/home/resources/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.
+name: Fluent Python
+payment: paid
+urls:
+- icon: regular/link
+ title: Website
+ url: https://www.oreilly.com/library/view/fluent-python/9781491946237/
+- icon: branding/amazon
+ title: Amazon
+ url: https://www.amazon.com/Fluent-Python-Concise-Effective-Programming/dp/1491946008
+- icon: branding/github
+ title: GitHub
+ url: https://github.com/fluentpython
diff --git a/pydis_site/apps/home/resources/books/mission_python.yaml b/pydis_site/apps/home/resources/books/mission_python.yaml
new file mode 100644
index 00000000..8cd91979
--- /dev/null
+++ b/pydis_site/apps/home/resources/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
+payment: paid
+urls:
+- icon: regular/link
+ title: Website
+ url: https://www.sean.co.uk/books/mission-python/index.shtm
+- icon: branding/amazon
+ title: Amazon
+ url: https://www.amazon.com/Mission-Python-Code-Space-Adventure/dp/1593278578
diff --git a/pydis_site/apps/home/resources/books/python_cookbook.yaml b/pydis_site/apps/home/resources/books/python_cookbook.yaml
new file mode 100644
index 00000000..9fab8e48
--- /dev/null
+++ b/pydis_site/apps/home/resources/books/python_cookbook.yaml
@@ -0,0 +1,14 @@
+description: Complete with 'recipes' for various Python topics, including moving from
+ Python 2 to Python 3.3
+name: Python Cookbook
+payment: paid
+urls:
+- icon: regular/link
+ title: Website
+ url: http://shop.oreilly.com/product/0636920027072.do
+- icon: branding/amazon
+ title: Amazon
+ url: https://www.amazon.com/Python-Cookbook-Third-David-Beazley/dp/1449340377
+- icon: branding/github
+ title: GitHub
+ url: https://github.com/dabeaz/python-cookbook
diff --git a/pydis_site/apps/home/resources/books/python_tricks.yaml b/pydis_site/apps/home/resources/books/python_tricks.yaml
new file mode 100644
index 00000000..0638058c
--- /dev/null
+++ b/pydis_site/apps/home/resources/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
+payment: paid
+urls:
+- icon: regular/link
+ title: Website
+ url: https://realpython.com/products/python-tricks-book/
+- icon: branding/amazon
+ title: Amazon
+ url: https://www.amazon.com/Python-Tricks-Buffet-Awesome-Features/dp/1775093301
diff --git a/pydis_site/apps/home/resources/books/two_scoops_of_django.yaml b/pydis_site/apps/home/resources/books/two_scoops_of_django.yaml
new file mode 100644
index 00000000..85cfa0fc
--- /dev/null
+++ b/pydis_site/apps/home/resources/books/two_scoops_of_django.yaml
@@ -0,0 +1,14 @@
+description: This book is chock-full of material that will help you with your Django
+ projects.
+name: Two Scoops of Django
+payment: paid
+urls:
+- icon: regular/link
+ title: Website
+ url: https://twoscoopspress.com/products/two-scoops-of-django-1-11
+- icon: branding/amazon
+ title: Amazon
+ url: https://www.amazon.com/Two-Scoops-Django-Best-Practices/dp/0981467342
+- icon: branding/github
+ title: GitHub
+ url: https://github.com/twoscoops/two-scoops-of-django-2.0-code-examples
diff --git a/pydis_site/apps/home/resources/communities/adafruit.yaml b/pydis_site/apps/home/resources/communities/adafruit.yaml
new file mode 100644
index 00000000..193f7364
--- /dev/null
+++ b/pydis_site/apps/home/resources/communities/adafruit.yaml
@@ -0,0 +1,14 @@
+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/category_info.yaml b/pydis_site/apps/home/resources/communities/category_info.yaml
new file mode 100644
index 00000000..eccb8b80
--- /dev/null
+++ b/pydis_site/apps/home/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/home/resources/communities/functional_programming.yaml b/pydis_site/apps/home/resources/communities/functional_programming.yaml
new file mode 100644
index 00000000..ab99f264
--- /dev/null
+++ b/pydis_site/apps/home/resources/communities/functional_programming.yaml
@@ -0,0 +1,10 @@
+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
new file mode 100644
index 00000000..e5a18983
--- /dev/null
+++ b/pydis_site/apps/home/resources/communities/pallets.yaml
@@ -0,0 +1,10 @@
+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
new file mode 100644
index 00000000..c62e0260
--- /dev/null
+++ b/pydis_site/apps/home/resources/communities/rlbot.yaml
@@ -0,0 +1,11 @@
+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
new file mode 100644
index 00000000..217a84ac
--- /dev/null
+++ b/pydis_site/apps/home/resources/communities/subreddit.yaml
@@ -0,0 +1,8 @@
+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
new file mode 100644
index 00000000..f05e45a3
--- /dev/null
+++ b/pydis_site/apps/home/resources/editors/atom.yaml
@@ -0,0 +1,12 @@
+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/category_info.yaml b/pydis_site/apps/home/resources/editors/category_info.yaml
new file mode 100644
index 00000000..f8dc1413
--- /dev/null
+++ b/pydis_site/apps/home/resources/editors/category_info.yaml
@@ -0,0 +1,2 @@
+description: Lightweight code editors supporting Python
+name: Editors
diff --git a/pydis_site/apps/home/resources/editors/mu_editor.yaml b/pydis_site/apps/home/resources/editors/mu_editor.yaml
new file mode 100644
index 00000000..cb44d750
--- /dev/null
+++ b/pydis_site/apps/home/resources/editors/mu_editor.yaml
@@ -0,0 +1,12 @@
+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
new file mode 100644
index 00000000..97952d35
--- /dev/null
+++ b/pydis_site/apps/home/resources/editors/sublime_text.yaml
@@ -0,0 +1,9 @@
+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
new file mode 100644
index 00000000..4e1f946f
--- /dev/null
+++ b/pydis_site/apps/home/resources/editors/visual_studio_code.yaml
@@ -0,0 +1,11 @@
+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
new file mode 100644
index 00000000..d331c95d
--- /dev/null
+++ b/pydis_site/apps/home/resources/ides/category_info.yaml
@@ -0,0 +1,2 @@
+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
new file mode 100644
index 00000000..4624cb41
--- /dev/null
+++ b/pydis_site/apps/home/resources/ides/pycharm.yaml
@@ -0,0 +1,10 @@
+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
new file mode 100644
index 00000000..146b3549
--- /dev/null
+++ b/pydis_site/apps/home/resources/ides/spyder.yaml
@@ -0,0 +1,12 @@
+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
new file mode 100644
index 00000000..d660094b
--- /dev/null
+++ b/pydis_site/apps/home/resources/ides/thonny.yaml
@@ -0,0 +1,12 @@
+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/automate_the_boring_stuff.yaml b/pydis_site/apps/home/resources/interactive_learning_tools/automate_the_boring_stuff.yaml
new file mode 100644
index 00000000..02d76b3b
--- /dev/null
+++ b/pydis_site/apps/home/resources/interactive_learning_tools/automate_the_boring_stuff.yaml
@@ -0,0 +1,11 @@
+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/category_info.yaml b/pydis_site/apps/home/resources/interactive_learning_tools/category_info.yaml
new file mode 100644
index 00000000..08501627
--- /dev/null
+++ b/pydis_site/apps/home/resources/interactive_learning_tools/category_info.yaml
@@ -0,0 +1,3 @@
+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/code_combat.yaml b/pydis_site/apps/home/resources/interactive_learning_tools/code_combat.yaml
new file mode 100644
index 00000000..39c25f0d
--- /dev/null
+++ b/pydis_site/apps/home/resources/interactive_learning_tools/code_combat.yaml
@@ -0,0 +1,13 @@
+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
+urls:
+- icon: regular/link
+ title: Website
+ url: https://codecombat.com/
+- icon: branding/github
+ title: GitHub
+ url: https://github.com/codecombat/codecombat
diff --git a/pydis_site/apps/home/resources/interactive_learning_tools/exercism.yaml b/pydis_site/apps/home/resources/interactive_learning_tools/exercism.yaml
new file mode 100644
index 00000000..3adb4138
--- /dev/null
+++ b/pydis_site/apps/home/resources/interactive_learning_tools/exercism.yaml
@@ -0,0 +1,14 @@
+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
+payment: free
+payment_description: null
+urls:
+- icon: regular/link
+ title: Website
+ url: https://exercism.io/
+- icon: branding/github
+ title: GitHub
+ url: https://github.com/exercism/python
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
new file mode 100644
index 00000000..265f1644
--- /dev/null
+++ b/pydis_site/apps/home/resources/interactive_learning_tools/learn_to_program.yaml
@@ -0,0 +1,13 @@
+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
new file mode 100644
index 00000000..464b8d4a
--- /dev/null
+++ b/pydis_site/apps/home/resources/interactive_learning_tools/mit_python.yaml
@@ -0,0 +1,10 @@
+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
new file mode 100644
index 00000000..a6d7abe1
--- /dev/null
+++ b/pydis_site/apps/home/resources/interactive_learning_tools/programming_for_everybody.yaml
@@ -0,0 +1,10 @@
+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/interactive_learning_tools/python_morsels.yaml b/pydis_site/apps/home/resources/interactive_learning_tools/python_morsels.yaml
new file mode 100644
index 00000000..f883f8b7
--- /dev/null
+++ b/pydis_site/apps/home/resources/interactive_learning_tools/python_morsels.yaml
@@ -0,0 +1,15 @@
+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
+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/
diff --git a/pydis_site/apps/home/resources/misc/category_info.yaml b/pydis_site/apps/home/resources/misc/category_info.yaml
new file mode 100644
index 00000000..4fdc4bf7
--- /dev/null
+++ b/pydis_site/apps/home/resources/misc/category_info.yaml
@@ -0,0 +1,2 @@
+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
new file mode 100644
index 00000000..35d7a8a4
--- /dev/null
+++ b/pydis_site/apps/home/resources/misc/good_first_issue_tag.yaml
@@ -0,0 +1,10 @@
+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
new file mode 100644
index 00000000..8c82a5a9
--- /dev/null
+++ b/pydis_site/apps/home/resources/misc/python_cheat_sheet.yaml
@@ -0,0 +1,9 @@
+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
new file mode 100644
index 00000000..a0f9025c
--- /dev/null
+++ b/pydis_site/apps/home/resources/podcasts/category_info.yaml
@@ -0,0 +1,2 @@
+description: Notable podcasts about the Python ecosystem
+name: Podcasts
diff --git a/pydis_site/apps/home/resources/podcasts/podcast_dunder_init.yaml b/pydis_site/apps/home/resources/podcasts/podcast_dunder_init.yaml
new file mode 100644
index 00000000..8f0cac8b
--- /dev/null
+++ b/pydis_site/apps/home/resources/podcasts/podcast_dunder_init.yaml
@@ -0,0 +1,9 @@
+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/
diff --git a/pydis_site/apps/home/resources/podcasts/python_bytes.yaml b/pydis_site/apps/home/resources/podcasts/python_bytes.yaml
new file mode 100644
index 00000000..a3368d23
--- /dev/null
+++ b/pydis_site/apps/home/resources/podcasts/python_bytes.yaml
@@ -0,0 +1,9 @@
+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/
diff --git a/pydis_site/apps/home/resources/podcasts/talk_python_to_me.yaml b/pydis_site/apps/home/resources/podcasts/talk_python_to_me.yaml
new file mode 100644
index 00000000..5ed101c4
--- /dev/null
+++ b/pydis_site/apps/home/resources/podcasts/talk_python_to_me.yaml
@@ -0,0 +1,9 @@
+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/
diff --git a/pydis_site/apps/home/resources/tutorials/category_info.yaml b/pydis_site/apps/home/resources/tutorials/category_info.yaml
new file mode 100644
index 00000000..a9adc106
--- /dev/null
+++ b/pydis_site/apps/home/resources/tutorials/category_info.yaml
@@ -0,0 +1,3 @@
+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
new file mode 100644
index 00000000..9fff4bbf
--- /dev/null
+++ b/pydis_site/apps/home/resources/tutorials/corey_schafer.yaml
@@ -0,0 +1,7 @@
+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
new file mode 100644
index 00000000..11dd2a4d
--- /dev/null
+++ b/pydis_site/apps/home/resources/tutorials/get_started_with_flask.yaml
@@ -0,0 +1,9 @@
+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
new file mode 100644
index 00000000..777f2fe3
--- /dev/null
+++ b/pydis_site/apps/home/resources/tutorials/getting_started_with_python.yaml
@@ -0,0 +1,12 @@
+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
new file mode 100644
index 00000000..38eebb56
--- /dev/null
+++ b/pydis_site/apps/home/resources/tutorials/hitchhikers_guide_to_python.yaml
@@ -0,0 +1,10 @@
+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
new file mode 100644
index 00000000..cae2695b
--- /dev/null
+++ b/pydis_site/apps/home/resources/tutorials/sentdex.yaml
@@ -0,0 +1,8 @@
+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
new file mode 100644
index 00000000..acf76efe
--- /dev/null
+++ b/pydis_site/apps/home/resources/tutorials/simple_guide_to_git.yaml
@@ -0,0 +1,8 @@
+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/utils/resources.py b/pydis_site/utils/resources.py
new file mode 100644
index 00000000..1053bbc5
--- /dev/null
+++ b/pydis_site/utils/resources.py
@@ -0,0 +1,79 @@
+from __future__ import annotations
+
+import yaml
+import typing
+import glob
+from dataclasses import dataclass
+
+
+@dataclass
+class URL:
+ icon: str
+ title: str
+ url: str
+
+
+class Resource:
+ description: str
+ name: str
+ payment: str
+ payment_description: typing.Optional[str]
+ urls: typing.List[URL]
+
+ def __repr__(self):
+ return f"<Resource name={self.name}>"
+
+ @classmethod
+ def construct_from_yaml(cls, yaml_data: str) -> Resource:
+ resource = cls()
+
+ loaded = yaml.safe_load(yaml_data)
+
+ resource.__dict__.update(loaded)
+
+ resource.__dict__["urls"] = []
+
+ for url in loaded["urls"]:
+ resource.__dict__["urls"].append(URL(**url))
+
+ return resource
+
+
+class Category:
+ resources: typing.List[Resource]
+ name: str
+ description: str
+
+ def __repr__(self):
+ return f"<Category name={self.name}>"
+
+ @classmethod
+ def construct_from_directory(cls, directory: str) -> Category:
+ category = cls()
+
+ with open(f"{directory}/category_info.yaml") as category_info:
+ category_data = yaml.safe_load(category_info)
+
+ category.__dict__.update(category_data)
+
+ category.resources = []
+
+ for resource in glob.glob(f"{directory}/*.yaml"):
+ if resource == f"{directory}/category_info.yaml":
+ continue
+
+ with open(resource) as res_file:
+ category.resources.append(
+ Resource.construct_from_yaml(res_file)
+ )
+
+ return category
+
+
+def load_categories(order: typing.List[str]) -> typing.List[Category]:
+ categories = []
+ for cat in order:
+ direc = "pydis_site/apps/home/resources/" + cat
+ categories.append(Category.construct_from_directory(direc))
+
+ return categories