├── pydis_site ├── __init__.py ├── apps │ ├── __init__.py │ ├── api │ │ ├── __init__.py │ │ ├── tests │ │ │ ├── __init__.py │ │ │ └── test_healthcheck.py │ │ ├── migrations │ │ │ ├── __init__.py │ │ │ ├── 0008_tag_embed_validator.py │ │ │ ├── 0062_merge_20200901_1459.py │ │ │ ├── 0079_merge_20220125_2022.py │ │ │ ├── 0066_merge_20201003_0730.py │ │ │ ├── 0021_merge_20181125_1015.py │ │ │ ├── 0057_merge_20200716_0751.py │ │ │ ├── 0074_merge_20211105_0518.py │ │ │ ├── 0076_merge_20211125_1941.py │ │ │ ├── 0078_merge_20211213_0552.py │ │ │ ├── 0038_merge_20190719_1817.py │ │ │ ├── 0061_merge_20200830_0526.py │ │ │ ├── 0072_merge_20210724_1354.py │ │ │ ├── 0096_merge_0093_user_alts_0095_user_display_name.py │ │ │ ├── 0055_merge_20200714_2027.py │ │ │ ├── 0023_merge_infractions_snake_validators.py │ │ │ ├── 0027_merge_20190120_0852.py │ │ │ ├── 0051_delete_tag.py │ │ │ ├── 0064_delete_logentry.py │ │ │ ├── 0018_user_rename.py │ │ │ ├── 0052_remove_user_avatar_hash.py │ │ │ ├── 0065_auto_20200919_2033.py │ │ │ ├── 0016_auto_20181027_1619.py │ │ │ ├── 0041_add_default_ordering_deleted_messages.py │ │ │ ├── 0042_infraction_add_default_ordering.py │ │ │ ├── 0045_add_plural_name_for_log_entry.py │ │ │ ├── 0019_user_in_guild.py │ │ │ ├── 0021_infraction_reason_null.py │ │ │ ├── 0011_auto_20181020_1904.py │ │ │ ├── 0085_add_thread_id_to_nominations.py │ │ │ ├── 0050_remove_infractions_active_default_value.py │ │ │ ├── 0063_Allow_blank_or_null_for_nomination_reason.py │ │ │ ├── 0074_reminder_failures.py │ │ │ ├── 0075_infraction_dm_sent.py │ │ │ ├── 0092_remove_redirect_filter_list.py │ │ │ ├── 0001_initial.py │ │ │ ├── 0028_allow_message_content_blank.py │ │ │ ├── 0071_increase_message_content_4000.py │ │ │ ├── 0015_auto_20181027_1617.py │ │ │ ├── 0052_offtopicchannelname_used.py │ │ │ ├── 0086_infraction_jump_url.py │ │ │ ├── 0048_add_infractions_unique_constraints_active.py │ │ │ ├── 0046_reminder_jump_url.py │ │ │ ├── 0013_specialsnake_image.py │ │ │ ├── 0017_auto_20181029_1921.py │ │ │ ├── 0025_allow_custom_inserted_at_infraction_field.py │ │ │ ├── 0095_user_display_name.py │ │ │ ├── 0002_documentationlink.py │ │ │ ├── 0022_infraction_remove_note.py │ │ │ ├── 0003_offtopicchannelname.py │ │ │ ├── 0083_remove_embed_validation.py │ │ │ ├── 0036_removing_snake_apis.py │ │ │ ├── 0037_nomination_field_name_change.py │ │ │ ├── 0051_create_news_setting.py │ │ │ ├── 0026_use_proper_default_for_infraction_insertion_date.py │ │ │ ├── 0010_snakeidiom.py │ │ │ ├── 0024_add_note_infraction_type.py │ │ │ ├── 0021_add_special_snake_validator.py │ │ │ ├── 0009_snakefact.py │ │ │ ├── 0029_add_infraction_type_watch.py │ │ │ ├── 0034_add_botsetting_name_validator.py │ │ │ ├── 0075_add_redirects_filter.py │ │ │ ├── 0012_specialsnake.py │ │ │ ├── 0067_add_voice_ban_infraction_type.py │ │ │ ├── 0049_deletedmessage_attachments.py │ │ │ ├── 0070_auto_20210618_2114.py │ │ │ ├── 0082_otn_allow_big_solidus.py │ │ │ ├── 0043_infraction_hidden_warnings_to_notes.py │ │ │ ├── 0073_otn_allow_GT_and_LT.py │ │ │ ├── 0051_allow_blank_message_embeds.py │ │ │ ├── 0014_auto_20181025_1959.py │ │ │ ├── 0040_allow_special_off_topic_name_chars.py │ │ │ ├── 0033_create_defcon_settings.py │ │ │ ├── 0072_doc_allow_blank_base_url.py │ │ │ ├── 0039_add_position_field_to_role.py │ │ │ └── 0032_botsetting.py │ │ ├── models │ │ │ └── bot │ │ │ │ ├── mailing_list.py │ │ │ │ ├── deleted_message.py │ │ │ │ ├── aoc_link.py │ │ │ │ └── bumped_thread.py │ │ ├── apps.py │ │ ├── signals.py │ │ └── viewsets │ │ │ └── bot │ │ │ └── bot_setting.py │ ├── home │ │ ├── __init__.py │ │ ├── tests │ │ │ ├── __init__.py │ │ │ ├── test_templatetags.py │ │ │ └── test_views.py │ │ ├── migrations │ │ │ ├── __init__.py │ │ │ └── 0002_auto_now_on_repository_metadata.py │ │ ├── templatetags │ │ │ ├── __init__.py │ │ │ └── extra_filters.py │ │ └── urls.py │ ├── staff │ │ ├── __init__.py │ │ ├── tests │ │ │ └── __init__.py │ │ ├── migrations │ │ │ ├── __init__.py │ │ │ ├── 0003_delete_rolemapping.py │ │ │ └── 0002_add_is_staff_to_role_mappings.py │ │ ├── templatetags │ │ │ └── __init__.py │ │ ├── apps.py │ │ ├── urls.py │ │ └── views.py │ ├── content │ │ ├── __init__.py │ │ ├── tests │ │ │ └── __init__.py │ │ ├── migrations │ │ │ └── __init__.py │ │ ├── templatetags │ │ │ └── __init__.py │ │ ├── resources │ │ │ ├── guides │ │ │ │ ├── _info.yml │ │ │ │ ├── pydis-guides │ │ │ │ │ ├── _info.yml │ │ │ │ │ └── contributing │ │ │ │ │ │ ├── _info.yml │ │ │ │ │ │ ├── sir-lancebot │ │ │ │ │ │ └── _info.yml │ │ │ │ │ │ └── working-with-git │ │ │ │ │ │ └── _info.yml │ │ │ │ └── python-guides │ │ │ │ │ └── _info.yml │ │ │ ├── _info.yml │ │ │ ├── tags │ │ │ │ └── _info.yml │ │ │ ├── server-info │ │ │ │ └── _info.yml │ │ │ └── privacy.md │ │ ├── models │ │ │ └── __init__.py │ │ ├── views │ │ │ └── __init__.py │ │ └── apps.py │ ├── events │ │ ├── __init__.py │ │ ├── tests │ │ │ └── __init__.py │ │ ├── migrations │ │ │ └── __init__.py │ │ ├── views │ │ │ ├── __init__.py │ │ │ └── index.py │ │ └── apps.py │ ├── redirect │ │ ├── __init__.py │ │ ├── migrations │ │ │ └── __init__.py │ │ ├── apps.py │ │ ├── README.md │ │ └── views.py │ ├── resources │ │ ├── __init__.py │ │ ├── tests │ │ │ ├── __init__.py │ │ │ └── test_to_kebabcase.py │ │ ├── migrations │ │ │ └── __init__.py │ │ ├── templatetags │ │ │ ├── __init__.py │ │ │ └── as_icon.py │ │ ├── resources │ │ │ ├── visual_studio_code.yaml │ │ │ ├── repl_it.yaml │ │ │ ├── sublime_text.yaml │ │ │ ├── python_tutor.yaml │ │ │ ├── thonny.yaml │ │ │ ├── spyder.yaml │ │ │ ├── simple_guide_to_git.yaml │ │ │ ├── discord_py_masterclass.yaml │ │ │ ├── python_bytes.yaml │ │ │ ├── podcast_dunder_init.yaml │ │ │ ├── python_cheat_sheet.yaml │ │ │ ├── regex101.yaml │ │ │ ├── automate_the_boring_stuff_course.yaml │ │ │ ├── python_subreddit.yaml │ │ │ ├── talk_python_to_me.yaml │ │ │ ├── test_and_code.yaml │ │ │ ├── python_developer_guide.yaml │ │ │ ├── university_of_michigan.yaml │ │ │ ├── vcokltfre_discord_bot_tutorial.yaml │ │ │ ├── pycharm.yaml │ │ │ ├── talon_voice.yaml │ │ │ ├── getting_started_with_python_for_non_programmers.yaml │ │ │ ├── getting_started_with_python_for_programmers.yaml │ │ │ ├── the_flask_mega_tutorial.yaml │ │ │ ├── nedbat_project_ideas.yaml │ │ │ ├── python_org.yaml │ │ │ ├── kaggle_pandas_tutorial.yaml │ │ │ ├── mu_editor.yaml │ │ │ ├── python_graph_gallery.yaml │ │ │ ├── getting_started_with_kivy.yaml │ │ │ ├── code_combat.yaml │ │ │ ├── the_real_python_podcast.yaml │ │ │ ├── hitchhikers_guide_to_python.yaml │ │ │ ├── inferential_thinking.yaml │ │ │ ├── mit_introduction_to_computer_science_and_programming.yaml │ │ │ ├── missing-semester.yaml │ │ │ ├── python_discord_videos.yaml │ │ │ ├── effective_python.yaml │ │ │ ├── Python_Developers_Community.yaml │ │ │ ├── real_python.yaml │ │ │ ├── python_tricks.yaml │ │ │ ├── awesome_programming_discord.yaml │ │ │ ├── python_cookbook.yaml │ │ │ ├── the_algorithms_github.yaml │ │ │ ├── flask_web_development.yaml │ │ │ ├── google_colab.yaml │ │ │ ├── university_of_toronto.yaml │ │ │ ├── exercism.yaml │ │ │ ├── two_scoops_of_django.yaml │ │ │ ├── fluent_python.yaml │ │ │ ├── screen_readers.yaml │ │ │ ├── panda3d.yaml │ │ │ ├── pallets.yaml │ │ │ ├── mission_python.yaml │ │ │ ├── wtf_python.yaml │ │ │ ├── python_morsels.yaml │ │ │ ├── jetbrains_academy.yaml │ │ │ ├── microsoft.yaml │ │ │ ├── edublocks.yaml │ │ │ └── byte_of_python.yaml │ │ └── urls.py │ └── timeline │ │ ├── __init__.py │ │ ├── tests │ │ ├── __init__.py │ │ └── test_views.py │ │ ├── entries │ │ ├── 2021-02-18_150000-members.md │ │ ├── 2025-04-10_400000-members.md │ │ ├── 2024-06-20_partnership-with-coveragepy.md │ │ ├── 2018-11-24_10000-members.md │ │ ├── 2022-02-21_sir-robin.md │ │ ├── 2022-05-19_partnership-with-pyqtgraph.md │ │ ├── 2022-01-19_300000-members.md │ │ ├── 2022-02-09_events-team.md │ │ ├── 2017-01-08_python-discord-is-created.md │ │ ├── 2019-09-22_sebastiaan-zeef-becomes-an-owner.md │ │ ├── 2020-04-14_40000-members.md │ │ ├── 2019-12-22_30000-members.md │ │ ├── 2020-10-22_100000-members.md │ │ ├── 2019-10-26_code-of-conduct-created.md │ │ ├── 2017-11-10_1000-members.md │ │ ├── 2018-02-03_our-logo-is-born.md │ │ ├── 2021-05-24_partnership-with-black.md │ │ ├── 2020-05-25_modmail-is-now-live.md │ │ ├── 2019-09-15_the-django-rewrite-of-pythondiscord-com.md │ │ ├── 2021-04-23_owners-become-psf-fellows.md │ │ ├── 2020-06-04_python-discord-public-statistics-are-now-live.md │ │ ├── 2022-02-12_trivia-night.md │ │ ├── 2020-08-16_python-discord-is-now-the-new-home-of-the-pyweek-event.md │ │ ├── 2024-09-01_pydis-code-jam-2024-cj11.md │ │ ├── 2018-06-20_pydis-hits-5000-members-and-partners-with-r-python.md │ │ ├── 2018-12-19_django-simple-bulma-is-released-on-pypi.md │ │ ├── 2020-11-29_we-migrate-all-our-infrastructure-to-kubernetes.md │ │ ├── 2018-07-10_pydis-is-now-partnered-with-discord.md │ │ ├── 2020-10-21_2020-cpython-core-developer-q-a.md │ │ ├── 2020-05-28_python-discord-is-now-listed-on-python-org.md │ │ ├── 2020-12-01_advent-of-code.md │ │ ├── 2023-01-30_retirement-of-joe-and-sebastiaan.md │ │ ├── 2022-11-25_switch-to-forum-based-help-system.md │ │ ├── 2022-02-02_smarter-resources.md │ │ ├── 2019-04-08_15000-members.md │ │ ├── 2021-07-09_summer-code-jam-2021-cj8.md │ │ ├── 2020-04-05_new-help-channel-system.md │ │ ├── 2018-03-04_pydis-hits-2000-members-pythondiscord-com-and-python-are-live.md │ │ ├── 2021-05-24_inaugural-run-of-pixels.md │ │ ├── 2023-07-11_new-paste-service.md │ │ ├── 2021-02-08_we-release-the-pep-8-song.md │ │ ├── 2018-10-01_first-hacktoberfest-pydis-event.md │ │ ├── 2018-05-21_privacy-policy-created.md │ │ ├── 2018-03-23_first-code-jam-with-the-theme-snakes.md │ │ ├── 2021-03-21_summer-code-jam-2020-highlights.md │ │ ├── 2018-06-09_do-you-even-python-and-pydis-merger.md │ │ ├── 2021-03-13_teaching-python-podcast.md │ │ ├── 2020-04-17_pydis-game-jam-2020.md │ │ ├── 2024-10-07_python-313-release-stream.md │ │ ├── 2020-01-17_pydis-sixth-code-jam.md │ │ ├── 2020-07-31_pydis-summer-code-jam-2020.md │ │ ├── 2021-03-13_new-feature-weekly-discussion-channel.md │ │ ├── 2022-07-21_summer-code-jam-2022-cj9.md │ │ ├── 2021-10-04_python-310-release-stream.md │ │ ├── 2022-10-24_python-311-release-stream.md │ │ ├── 2023-10-15_pydis-code-jam-2023-cj10.md │ │ └── 2021-03-01_leon-sandoy-appears-on-talk-python-to-me.md │ │ ├── urls.py │ │ └── views.py ├── templates │ ├── events │ │ ├── test-pages │ │ │ └── my-event │ │ │ │ ├── _index.html │ │ │ │ └── subpage.html │ │ ├── base.html │ │ ├── sidebar │ │ │ ├── code-jams │ │ │ │ ├── ongoing-code-jam.html │ │ │ │ ├── 10.html │ │ │ │ ├── 11.html │ │ │ │ ├── useful-information.html │ │ │ │ └── 12.html │ │ │ ├── pixels.html │ │ │ ├── revivalofcode.html │ │ │ ├── adventofcode │ │ │ │ └── useful-links.html │ │ │ └── pyweek │ │ │ │ └── useful-links.html │ │ └── base_sidebar.html │ ├── base │ │ └── footer.html │ └── content │ │ └── dropdown.html ├── static │ ├── favicons │ │ ├── favicon.ico │ │ ├── favicon-16x16.png │ │ ├── favicon-32x32.png │ │ ├── mstile-70x70.png │ │ ├── mstile-144x144.png │ │ ├── mstile-150x150.png │ │ ├── mstile-310x150.png │ │ ├── mstile-310x310.png │ │ ├── apple-touch-icon.png │ │ ├── android-chrome-192x192.png │ │ ├── android-chrome-512x512.png │ │ ├── browserconfig.xml │ │ └── site.webmanifest │ ├── images │ │ ├── events │ │ │ ├── 100k.png │ │ │ ├── icons │ │ │ │ ├── pixels.png │ │ │ │ ├── pyweek.png │ │ │ │ └── adventofcode.png │ │ │ ├── logos │ │ │ │ ├── Replit.png │ │ │ │ ├── Tabnine.png │ │ │ │ └── DO_Logo_Vertical_Blue.png │ │ │ ├── gallery │ │ │ │ ├── pixels.png │ │ │ │ ├── pyweek.png │ │ │ │ ├── adventofcode.png │ │ │ │ └── pyweek_dark.png │ │ │ ├── logos_dark │ │ │ │ ├── Replit.png │ │ │ │ ├── django.png │ │ │ │ └── DO_Logo_Vertical_White.png │ │ │ ├── summer_code_jam_2020.png │ │ │ ├── pixels_logo_transparent.gif │ │ │ ├── pixels_logo_transparent.png │ │ │ ├── summer_code_jam_2023 │ │ │ │ ├── logo.PNG │ │ │ │ ├── banner2.png │ │ │ │ └── banner3.png │ │ │ ├── summer_code_jam_2025 │ │ │ │ ├── logo.png │ │ │ │ ├── banner.png │ │ │ │ └── banner_with_dates.png │ │ │ ├── summer_code_jam_2021 │ │ │ │ ├── banner.png │ │ │ │ ├── cj8_rich.gif │ │ │ │ ├── cj8_urwid.png │ │ │ │ ├── cj8_blessed.gif │ │ │ │ ├── cj8_curses.png │ │ │ │ ├── cj8_asciimatics.png │ │ │ │ ├── cj8_prompttoolkit.png │ │ │ │ └── front_page_banners │ │ │ │ │ ├── random_team.png │ │ │ │ │ ├── sign_up_now.png │ │ │ │ │ └── currently_live.png │ │ │ ├── summer_code_jam_2024 │ │ │ │ ├── banner.webp │ │ │ │ └── logo.webp │ │ │ └── summer_code_jam_2022 │ │ │ │ ├── site_banner.png │ │ │ │ └── front_page_banners │ │ │ │ ├── live_now.png │ │ │ │ ├── sign_up.png │ │ │ │ └── qualifier_release.png │ │ ├── resources │ │ │ ├── kivy.png │ │ │ ├── panda3d.png │ │ │ ├── adafruit.png │ │ │ ├── duck_pond_404.jpg │ │ │ └── people_postgres_data.png │ │ ├── sponsors │ │ │ ├── linode.png │ │ │ ├── netcup.png │ │ │ ├── notion.png │ │ │ ├── sentry.png │ │ │ ├── netlify.png │ │ │ ├── orbstack.png │ │ │ ├── cloudflare.png │ │ │ ├── jetbrains.png │ │ │ └── streamyard.png │ │ ├── frontpage │ │ │ └── welcome.jpg │ │ ├── resources_dark │ │ │ ├── kivy.png │ │ │ ├── pallets.png │ │ │ ├── panda3d.png │ │ │ ├── pyglet.png │ │ │ ├── python.png │ │ │ ├── sentdex.png │ │ │ ├── adafruit.png │ │ │ ├── microsoft.png │ │ │ ├── coreyschafer.png │ │ │ └── people_postgres_data.png │ │ ├── sponsors_dark │ │ │ ├── linode.png │ │ │ ├── netcup.png │ │ │ ├── notion.png │ │ │ ├── sentry.png │ │ │ ├── netlify.png │ │ │ ├── cloudflare.png │ │ │ ├── jetbrains.png │ │ │ └── linode_text.png │ │ ├── content │ │ │ ├── discordpy_embed.png │ │ │ ├── regenerating_token.jpg │ │ │ ├── contributing │ │ │ │ ├── fork_user.png │ │ │ │ ├── fork_button.png │ │ │ │ ├── fork_clone.png │ │ │ │ ├── pull_request.png │ │ │ │ ├── pycharm_branch.png │ │ │ │ ├── pycharm_commit.png │ │ │ │ ├── pycharm_poetry.png │ │ │ │ ├── pycharm_pull.png │ │ │ │ ├── pycharm_push.png │ │ │ │ ├── docker_settings.png │ │ │ │ ├── github_new_issue.png │ │ │ │ ├── pycharm_checkout.png │ │ │ │ ├── pycharm_remotes.png │ │ │ │ ├── pycharm_upstream.png │ │ │ │ ├── github_issues_tab.png │ │ │ │ ├── github_sample_issue.png │ │ │ │ ├── pycharm_interpreter.png │ │ │ │ ├── pycharm_run_module.png │ │ │ │ ├── docker_shared_drives.png │ │ │ │ ├── pycharm_commit_button.png │ │ │ │ ├── pycharm_create_project.png │ │ │ │ └── pycharm_poetry_success.png │ │ │ ├── fix-ssl-certificate │ │ │ │ └── pem.png │ │ │ ├── help_channels │ │ │ │ ├── new-post-form.png │ │ │ │ ├── dormant_message.png │ │ │ │ ├── new-post-button.png │ │ │ │ ├── question-example.png │ │ │ │ ├── topical_channels.png │ │ │ │ ├── help-system-category.png │ │ │ │ └── newly-created-thread-example.png │ │ │ ├── mutability │ │ │ │ ├── hello_gets_eaten.png │ │ │ │ ├── s_refers_hello.png │ │ │ │ ├── s_upper_creates_HELLO.png │ │ │ │ └── s_gets_assigned_to_HELLO.png │ │ │ └── discord_colored_messages │ │ │ │ ├── result.png │ │ │ │ └── ansi-colors.png │ │ ├── timeline │ │ │ ├── cd-icon-location.svg │ │ │ └── cd-icon-movie.svg │ │ └── README.md │ ├── fontawesome │ │ ├── webfonts │ │ │ ├── fa-brands-400.ttf │ │ │ ├── fa-solid-900.ttf │ │ │ ├── fa-brands-400.woff2 │ │ │ ├── fa-regular-400.ttf │ │ │ ├── fa-regular-400.woff2 │ │ │ ├── fa-solid-900.woff2 │ │ │ ├── fa-v4compatibility.ttf │ │ │ └── fa-v4compatibility.woff2 │ │ ├── README.md │ │ └── UPGRADING.md │ └── css │ │ ├── content │ │ ├── color.css │ │ └── tag.css │ │ └── collapsibles.css ├── context_processors.py └── wsgi.py ├── .mailmap ├── .github ├── FUNDING.yml ├── review-policy.yml ├── CODEOWNERS ├── workflows │ ├── fixup-commit-blocker.yaml │ └── sentry-release.yaml ├── dependabot.yml └── PULL_REQUEST_TEMPLATE │ └── pull_request.md ├── CODE_OF_CONDUCT.md ├── SECURITY.md ├── CONTRIBUTING.md ├── gunicorn.conf.py ├── .dockerignore ├── .gitattributes ├── .coveragerc └── .flake8 /pydis_site/__init__.py: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /pydis_site/apps/__init__.py: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /pydis_site/apps/api/__init__.py: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /pydis_site/apps/home/__init__.py: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /pydis_site/apps/staff/__init__.py: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /pydis_site/apps/api/tests/__init__.py: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /pydis_site/apps/content/__init__.py: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /pydis_site/apps/events/__init__.py: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /pydis_site/apps/home/tests/__init__.py: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /pydis_site/apps/redirect/__init__.py: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /pydis_site/apps/resources/__init__.py: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /pydis_site/apps/timeline/__init__.py: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /pydis_site/apps/api/migrations/__init__.py: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /pydis_site/apps/content/tests/__init__.py: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /pydis_site/apps/events/tests/__init__.py: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /pydis_site/apps/home/migrations/__init__.py: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /pydis_site/apps/resources/tests/__init__.py: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /pydis_site/apps/staff/tests/__init__.py: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /pydis_site/apps/timeline/tests/__init__.py: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /pydis_site/apps/content/migrations/__init__.py: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /pydis_site/apps/content/templatetags/__init__.py: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /pydis_site/apps/events/migrations/__init__.py: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /pydis_site/apps/redirect/migrations/__init__.py: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /pydis_site/apps/resources/migrations/__init__.py: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /pydis_site/apps/staff/migrations/__init__.py: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /.mailmap: -------------------------------------------------------------------------------- 1 | Joe Banks 2 | -------------------------------------------------------------------------------- /pydis_site/templates/events/test-pages/my-event/_index.html: -------------------------------------------------------------------------------- 1 | {% extends "events/base.html" %} 2 | -------------------------------------------------------------------------------- /pydis_site/templates/events/test-pages/my-event/subpage.html: -------------------------------------------------------------------------------- 1 | {% extends "events/base.html" %} 2 | -------------------------------------------------------------------------------- /.github/FUNDING.yml: -------------------------------------------------------------------------------- 1 | patreon: python_discord 2 | custom: https://www.redbubble.com/people/pythondiscord 3 | -------------------------------------------------------------------------------- /pydis_site/apps/content/resources/guides/_info.yml: -------------------------------------------------------------------------------- 1 | title: Guides 2 | description: Made by us, for you. 3 | -------------------------------------------------------------------------------- /pydis_site/apps/resources/templatetags/__init__.py: -------------------------------------------------------------------------------- 1 | from .as_icon import as_icon 2 | 3 | __all__ = ["as_icon"] 4 | -------------------------------------------------------------------------------- /.github/review-policy.yml: -------------------------------------------------------------------------------- 1 | remote: python-discord/.github 2 | path: review-policies/core-developers.yml 3 | ref: main 4 | -------------------------------------------------------------------------------- /pydis_site/apps/home/templatetags/__init__.py: -------------------------------------------------------------------------------- 1 | from .extra_filters import starts_with 2 | 3 | __all__ = ["starts_with"] 4 | -------------------------------------------------------------------------------- /pydis_site/apps/content/resources/_info.yml: -------------------------------------------------------------------------------- 1 | title: Pages 2 | description: Guides, articles, and pages hosted on the site. 3 | -------------------------------------------------------------------------------- /pydis_site/static/favicons/favicon.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/python-discord/site/HEAD/pydis_site/static/favicons/favicon.ico -------------------------------------------------------------------------------- /CODE_OF_CONDUCT.md: -------------------------------------------------------------------------------- 1 | # Code of Conduct 2 | 3 | The Python Discord Code of Conduct can be found [on our website](https://pydis.com/coc). 4 | -------------------------------------------------------------------------------- /pydis_site/apps/content/models/__init__.py: -------------------------------------------------------------------------------- 1 | from .commit import Commit 2 | from .tag import Tag 3 | 4 | __all__ = ["Commit", "Tag"] 5 | -------------------------------------------------------------------------------- /pydis_site/static/images/events/100k.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/python-discord/site/HEAD/pydis_site/static/images/events/100k.png -------------------------------------------------------------------------------- /pydis_site/static/favicons/favicon-16x16.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/python-discord/site/HEAD/pydis_site/static/favicons/favicon-16x16.png -------------------------------------------------------------------------------- /pydis_site/static/favicons/favicon-32x32.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/python-discord/site/HEAD/pydis_site/static/favicons/favicon-32x32.png -------------------------------------------------------------------------------- /pydis_site/static/favicons/mstile-70x70.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/python-discord/site/HEAD/pydis_site/static/favicons/mstile-70x70.png -------------------------------------------------------------------------------- /pydis_site/static/images/resources/kivy.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/python-discord/site/HEAD/pydis_site/static/images/resources/kivy.png -------------------------------------------------------------------------------- /pydis_site/static/images/sponsors/linode.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/python-discord/site/HEAD/pydis_site/static/images/sponsors/linode.png -------------------------------------------------------------------------------- /pydis_site/static/images/sponsors/netcup.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/python-discord/site/HEAD/pydis_site/static/images/sponsors/netcup.png -------------------------------------------------------------------------------- /pydis_site/static/images/sponsors/notion.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/python-discord/site/HEAD/pydis_site/static/images/sponsors/notion.png -------------------------------------------------------------------------------- /pydis_site/static/images/sponsors/sentry.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/python-discord/site/HEAD/pydis_site/static/images/sponsors/sentry.png -------------------------------------------------------------------------------- /pydis_site/static/favicons/mstile-144x144.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/python-discord/site/HEAD/pydis_site/static/favicons/mstile-144x144.png -------------------------------------------------------------------------------- /pydis_site/static/favicons/mstile-150x150.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/python-discord/site/HEAD/pydis_site/static/favicons/mstile-150x150.png -------------------------------------------------------------------------------- /pydis_site/static/favicons/mstile-310x150.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/python-discord/site/HEAD/pydis_site/static/favicons/mstile-310x150.png -------------------------------------------------------------------------------- /pydis_site/static/favicons/mstile-310x310.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/python-discord/site/HEAD/pydis_site/static/favicons/mstile-310x310.png -------------------------------------------------------------------------------- /pydis_site/static/images/frontpage/welcome.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/python-discord/site/HEAD/pydis_site/static/images/frontpage/welcome.jpg -------------------------------------------------------------------------------- /pydis_site/static/images/resources/panda3d.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/python-discord/site/HEAD/pydis_site/static/images/resources/panda3d.png -------------------------------------------------------------------------------- /pydis_site/static/images/sponsors/netlify.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/python-discord/site/HEAD/pydis_site/static/images/sponsors/netlify.png -------------------------------------------------------------------------------- /pydis_site/static/images/sponsors/orbstack.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/python-discord/site/HEAD/pydis_site/static/images/sponsors/orbstack.png -------------------------------------------------------------------------------- /SECURITY.md: -------------------------------------------------------------------------------- 1 | # Security Notice 2 | 3 | The Security Notice for Python Discord projects can be found [on our website](https://pydis.com/security.md). 4 | -------------------------------------------------------------------------------- /pydis_site/apps/events/views/__init__.py: -------------------------------------------------------------------------------- 1 | from .index import IndexView 2 | from .page import PageView 3 | 4 | __all__ = ["IndexView", "PageView"] 5 | -------------------------------------------------------------------------------- /pydis_site/static/favicons/apple-touch-icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/python-discord/site/HEAD/pydis_site/static/favicons/apple-touch-icon.png -------------------------------------------------------------------------------- /pydis_site/static/images/events/icons/pixels.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/python-discord/site/HEAD/pydis_site/static/images/events/icons/pixels.png -------------------------------------------------------------------------------- /pydis_site/static/images/events/icons/pyweek.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/python-discord/site/HEAD/pydis_site/static/images/events/icons/pyweek.png -------------------------------------------------------------------------------- /pydis_site/static/images/events/logos/Replit.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/python-discord/site/HEAD/pydis_site/static/images/events/logos/Replit.png -------------------------------------------------------------------------------- /pydis_site/static/images/events/logos/Tabnine.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/python-discord/site/HEAD/pydis_site/static/images/events/logos/Tabnine.png -------------------------------------------------------------------------------- /pydis_site/static/images/resources/adafruit.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/python-discord/site/HEAD/pydis_site/static/images/resources/adafruit.png -------------------------------------------------------------------------------- /pydis_site/static/images/resources_dark/kivy.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/python-discord/site/HEAD/pydis_site/static/images/resources_dark/kivy.png -------------------------------------------------------------------------------- /pydis_site/static/images/sponsors/cloudflare.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/python-discord/site/HEAD/pydis_site/static/images/sponsors/cloudflare.png -------------------------------------------------------------------------------- /pydis_site/static/images/sponsors/jetbrains.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/python-discord/site/HEAD/pydis_site/static/images/sponsors/jetbrains.png -------------------------------------------------------------------------------- /pydis_site/static/images/sponsors/streamyard.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/python-discord/site/HEAD/pydis_site/static/images/sponsors/streamyard.png -------------------------------------------------------------------------------- /pydis_site/static/images/sponsors_dark/linode.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/python-discord/site/HEAD/pydis_site/static/images/sponsors_dark/linode.png -------------------------------------------------------------------------------- /pydis_site/static/images/sponsors_dark/netcup.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/python-discord/site/HEAD/pydis_site/static/images/sponsors_dark/netcup.png -------------------------------------------------------------------------------- /pydis_site/static/images/sponsors_dark/notion.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/python-discord/site/HEAD/pydis_site/static/images/sponsors_dark/notion.png -------------------------------------------------------------------------------- /pydis_site/static/images/sponsors_dark/sentry.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/python-discord/site/HEAD/pydis_site/static/images/sponsors_dark/sentry.png -------------------------------------------------------------------------------- /pydis_site/apps/content/resources/tags/_info.yml: -------------------------------------------------------------------------------- 1 | title: Tags 2 | description: Useful snippets that are often used in the server. 3 | icon: fas fa-tags 4 | -------------------------------------------------------------------------------- /pydis_site/static/images/events/gallery/pixels.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/python-discord/site/HEAD/pydis_site/static/images/events/gallery/pixels.png -------------------------------------------------------------------------------- /pydis_site/static/images/events/gallery/pyweek.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/python-discord/site/HEAD/pydis_site/static/images/events/gallery/pyweek.png -------------------------------------------------------------------------------- /pydis_site/static/images/resources_dark/pallets.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/python-discord/site/HEAD/pydis_site/static/images/resources_dark/pallets.png -------------------------------------------------------------------------------- /pydis_site/static/images/resources_dark/panda3d.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/python-discord/site/HEAD/pydis_site/static/images/resources_dark/panda3d.png -------------------------------------------------------------------------------- /pydis_site/static/images/resources_dark/pyglet.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/python-discord/site/HEAD/pydis_site/static/images/resources_dark/pyglet.png -------------------------------------------------------------------------------- /pydis_site/static/images/resources_dark/python.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/python-discord/site/HEAD/pydis_site/static/images/resources_dark/python.png -------------------------------------------------------------------------------- /pydis_site/static/images/resources_dark/sentdex.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/python-discord/site/HEAD/pydis_site/static/images/resources_dark/sentdex.png -------------------------------------------------------------------------------- /pydis_site/static/images/sponsors_dark/netlify.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/python-discord/site/HEAD/pydis_site/static/images/sponsors_dark/netlify.png -------------------------------------------------------------------------------- /pydis_site/static/favicons/android-chrome-192x192.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/python-discord/site/HEAD/pydis_site/static/favicons/android-chrome-192x192.png -------------------------------------------------------------------------------- /pydis_site/static/favicons/android-chrome-512x512.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/python-discord/site/HEAD/pydis_site/static/favicons/android-chrome-512x512.png -------------------------------------------------------------------------------- /pydis_site/static/images/content/discordpy_embed.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/python-discord/site/HEAD/pydis_site/static/images/content/discordpy_embed.png -------------------------------------------------------------------------------- /pydis_site/static/images/events/icons/adventofcode.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/python-discord/site/HEAD/pydis_site/static/images/events/icons/adventofcode.png -------------------------------------------------------------------------------- /pydis_site/static/images/events/logos_dark/Replit.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/python-discord/site/HEAD/pydis_site/static/images/events/logos_dark/Replit.png -------------------------------------------------------------------------------- /pydis_site/static/images/events/logos_dark/django.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/python-discord/site/HEAD/pydis_site/static/images/events/logos_dark/django.png -------------------------------------------------------------------------------- /pydis_site/static/images/resources/duck_pond_404.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/python-discord/site/HEAD/pydis_site/static/images/resources/duck_pond_404.jpg -------------------------------------------------------------------------------- /pydis_site/static/images/resources_dark/adafruit.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/python-discord/site/HEAD/pydis_site/static/images/resources_dark/adafruit.png -------------------------------------------------------------------------------- /pydis_site/static/images/resources_dark/microsoft.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/python-discord/site/HEAD/pydis_site/static/images/resources_dark/microsoft.png -------------------------------------------------------------------------------- /pydis_site/static/images/sponsors_dark/cloudflare.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/python-discord/site/HEAD/pydis_site/static/images/sponsors_dark/cloudflare.png -------------------------------------------------------------------------------- /pydis_site/static/images/sponsors_dark/jetbrains.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/python-discord/site/HEAD/pydis_site/static/images/sponsors_dark/jetbrains.png -------------------------------------------------------------------------------- /pydis_site/static/images/sponsors_dark/linode_text.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/python-discord/site/HEAD/pydis_site/static/images/sponsors_dark/linode_text.png -------------------------------------------------------------------------------- /pydis_site/apps/staff/templatetags/__init__.py: -------------------------------------------------------------------------------- 1 | from .deletedmessage_filters import footer_datetime, hex_colour 2 | 3 | __all__ = ["footer_datetime", "hex_colour"] 4 | -------------------------------------------------------------------------------- /pydis_site/static/fontawesome/webfonts/fa-brands-400.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/python-discord/site/HEAD/pydis_site/static/fontawesome/webfonts/fa-brands-400.ttf -------------------------------------------------------------------------------- /pydis_site/static/fontawesome/webfonts/fa-solid-900.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/python-discord/site/HEAD/pydis_site/static/fontawesome/webfonts/fa-solid-900.ttf -------------------------------------------------------------------------------- /pydis_site/static/images/content/regenerating_token.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/python-discord/site/HEAD/pydis_site/static/images/content/regenerating_token.jpg -------------------------------------------------------------------------------- /pydis_site/static/images/events/gallery/adventofcode.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/python-discord/site/HEAD/pydis_site/static/images/events/gallery/adventofcode.png -------------------------------------------------------------------------------- /pydis_site/static/images/events/gallery/pyweek_dark.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/python-discord/site/HEAD/pydis_site/static/images/events/gallery/pyweek_dark.png -------------------------------------------------------------------------------- /pydis_site/static/images/events/summer_code_jam_2020.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/python-discord/site/HEAD/pydis_site/static/images/events/summer_code_jam_2020.png -------------------------------------------------------------------------------- /pydis_site/static/images/resources_dark/coreyschafer.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/python-discord/site/HEAD/pydis_site/static/images/resources_dark/coreyschafer.png -------------------------------------------------------------------------------- /pydis_site/apps/content/resources/guides/pydis-guides/_info.yml: -------------------------------------------------------------------------------- 1 | title: Python Discord Guides 2 | description: Guides related to the Python Discord server and community. 3 | -------------------------------------------------------------------------------- /pydis_site/static/fontawesome/webfonts/fa-brands-400.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/python-discord/site/HEAD/pydis_site/static/fontawesome/webfonts/fa-brands-400.woff2 -------------------------------------------------------------------------------- /pydis_site/static/fontawesome/webfonts/fa-regular-400.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/python-discord/site/HEAD/pydis_site/static/fontawesome/webfonts/fa-regular-400.ttf -------------------------------------------------------------------------------- /pydis_site/static/fontawesome/webfonts/fa-regular-400.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/python-discord/site/HEAD/pydis_site/static/fontawesome/webfonts/fa-regular-400.woff2 -------------------------------------------------------------------------------- /pydis_site/static/fontawesome/webfonts/fa-solid-900.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/python-discord/site/HEAD/pydis_site/static/fontawesome/webfonts/fa-solid-900.woff2 -------------------------------------------------------------------------------- /pydis_site/static/images/content/contributing/fork_user.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/python-discord/site/HEAD/pydis_site/static/images/content/contributing/fork_user.png -------------------------------------------------------------------------------- /pydis_site/static/images/events/pixels_logo_transparent.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/python-discord/site/HEAD/pydis_site/static/images/events/pixels_logo_transparent.gif -------------------------------------------------------------------------------- /pydis_site/static/images/events/pixels_logo_transparent.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/python-discord/site/HEAD/pydis_site/static/images/events/pixels_logo_transparent.png -------------------------------------------------------------------------------- /pydis_site/static/images/resources/people_postgres_data.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/python-discord/site/HEAD/pydis_site/static/images/resources/people_postgres_data.png -------------------------------------------------------------------------------- /CONTRIBUTING.md: -------------------------------------------------------------------------------- 1 | # Contributing Guidelines 2 | 3 | The Contributing Guidelines for Python Discord projects can be found [on our website](https://pydis.com/contributing.md). 4 | -------------------------------------------------------------------------------- /pydis_site/apps/content/views/__init__.py: -------------------------------------------------------------------------------- 1 | from .page_category import PageOrCategoryView 2 | from .tags import TagView 3 | 4 | __all__ = ["PageOrCategoryView", "TagView"] 5 | -------------------------------------------------------------------------------- /pydis_site/static/fontawesome/webfonts/fa-v4compatibility.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/python-discord/site/HEAD/pydis_site/static/fontawesome/webfonts/fa-v4compatibility.ttf -------------------------------------------------------------------------------- /pydis_site/static/images/content/contributing/fork_button.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/python-discord/site/HEAD/pydis_site/static/images/content/contributing/fork_button.png -------------------------------------------------------------------------------- /pydis_site/static/images/content/contributing/fork_clone.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/python-discord/site/HEAD/pydis_site/static/images/content/contributing/fork_clone.png -------------------------------------------------------------------------------- /pydis_site/static/images/content/fix-ssl-certificate/pem.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/python-discord/site/HEAD/pydis_site/static/images/content/fix-ssl-certificate/pem.png -------------------------------------------------------------------------------- /pydis_site/static/images/events/summer_code_jam_2023/logo.PNG: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/python-discord/site/HEAD/pydis_site/static/images/events/summer_code_jam_2023/logo.PNG -------------------------------------------------------------------------------- /pydis_site/static/images/events/summer_code_jam_2025/logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/python-discord/site/HEAD/pydis_site/static/images/events/summer_code_jam_2025/logo.png -------------------------------------------------------------------------------- /pydis_site/apps/content/resources/guides/python-guides/_info.yml: -------------------------------------------------------------------------------- 1 | title: Python Guides 2 | description: Guides related to the Python Programming Language. 3 | icon: fab fa-python 4 | -------------------------------------------------------------------------------- /pydis_site/static/fontawesome/webfonts/fa-v4compatibility.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/python-discord/site/HEAD/pydis_site/static/fontawesome/webfonts/fa-v4compatibility.woff2 -------------------------------------------------------------------------------- /pydis_site/static/images/content/contributing/pull_request.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/python-discord/site/HEAD/pydis_site/static/images/content/contributing/pull_request.png -------------------------------------------------------------------------------- /pydis_site/static/images/content/contributing/pycharm_branch.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/python-discord/site/HEAD/pydis_site/static/images/content/contributing/pycharm_branch.png -------------------------------------------------------------------------------- /pydis_site/static/images/content/contributing/pycharm_commit.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/python-discord/site/HEAD/pydis_site/static/images/content/contributing/pycharm_commit.png -------------------------------------------------------------------------------- /pydis_site/static/images/content/contributing/pycharm_poetry.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/python-discord/site/HEAD/pydis_site/static/images/content/contributing/pycharm_poetry.png -------------------------------------------------------------------------------- /pydis_site/static/images/content/contributing/pycharm_pull.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/python-discord/site/HEAD/pydis_site/static/images/content/contributing/pycharm_pull.png -------------------------------------------------------------------------------- /pydis_site/static/images/content/contributing/pycharm_push.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/python-discord/site/HEAD/pydis_site/static/images/content/contributing/pycharm_push.png -------------------------------------------------------------------------------- /pydis_site/static/images/content/help_channels/new-post-form.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/python-discord/site/HEAD/pydis_site/static/images/content/help_channels/new-post-form.png -------------------------------------------------------------------------------- /pydis_site/static/images/content/mutability/hello_gets_eaten.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/python-discord/site/HEAD/pydis_site/static/images/content/mutability/hello_gets_eaten.png -------------------------------------------------------------------------------- /pydis_site/static/images/content/mutability/s_refers_hello.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/python-discord/site/HEAD/pydis_site/static/images/content/mutability/s_refers_hello.png -------------------------------------------------------------------------------- /pydis_site/static/images/events/logos/DO_Logo_Vertical_Blue.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/python-discord/site/HEAD/pydis_site/static/images/events/logos/DO_Logo_Vertical_Blue.png -------------------------------------------------------------------------------- /pydis_site/static/images/events/summer_code_jam_2021/banner.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/python-discord/site/HEAD/pydis_site/static/images/events/summer_code_jam_2021/banner.png -------------------------------------------------------------------------------- /pydis_site/static/images/events/summer_code_jam_2023/banner2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/python-discord/site/HEAD/pydis_site/static/images/events/summer_code_jam_2023/banner2.png -------------------------------------------------------------------------------- /pydis_site/static/images/events/summer_code_jam_2023/banner3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/python-discord/site/HEAD/pydis_site/static/images/events/summer_code_jam_2023/banner3.png -------------------------------------------------------------------------------- /pydis_site/static/images/events/summer_code_jam_2024/banner.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/python-discord/site/HEAD/pydis_site/static/images/events/summer_code_jam_2024/banner.webp -------------------------------------------------------------------------------- /pydis_site/static/images/events/summer_code_jam_2024/logo.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/python-discord/site/HEAD/pydis_site/static/images/events/summer_code_jam_2024/logo.webp -------------------------------------------------------------------------------- /pydis_site/static/images/events/summer_code_jam_2025/banner.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/python-discord/site/HEAD/pydis_site/static/images/events/summer_code_jam_2025/banner.png -------------------------------------------------------------------------------- /pydis_site/static/images/resources_dark/people_postgres_data.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/python-discord/site/HEAD/pydis_site/static/images/resources_dark/people_postgres_data.png -------------------------------------------------------------------------------- /pydis_site/static/images/content/contributing/docker_settings.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/python-discord/site/HEAD/pydis_site/static/images/content/contributing/docker_settings.png -------------------------------------------------------------------------------- /pydis_site/static/images/content/contributing/github_new_issue.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/python-discord/site/HEAD/pydis_site/static/images/content/contributing/github_new_issue.png -------------------------------------------------------------------------------- /pydis_site/static/images/content/contributing/pycharm_checkout.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/python-discord/site/HEAD/pydis_site/static/images/content/contributing/pycharm_checkout.png -------------------------------------------------------------------------------- /pydis_site/static/images/content/contributing/pycharm_remotes.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/python-discord/site/HEAD/pydis_site/static/images/content/contributing/pycharm_remotes.png -------------------------------------------------------------------------------- /pydis_site/static/images/content/contributing/pycharm_upstream.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/python-discord/site/HEAD/pydis_site/static/images/content/contributing/pycharm_upstream.png -------------------------------------------------------------------------------- /pydis_site/static/images/content/help_channels/dormant_message.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/python-discord/site/HEAD/pydis_site/static/images/content/help_channels/dormant_message.png -------------------------------------------------------------------------------- /pydis_site/static/images/content/help_channels/new-post-button.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/python-discord/site/HEAD/pydis_site/static/images/content/help_channels/new-post-button.png -------------------------------------------------------------------------------- /pydis_site/static/images/events/summer_code_jam_2021/cj8_rich.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/python-discord/site/HEAD/pydis_site/static/images/events/summer_code_jam_2021/cj8_rich.gif -------------------------------------------------------------------------------- /pydis_site/static/images/events/summer_code_jam_2021/cj8_urwid.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/python-discord/site/HEAD/pydis_site/static/images/events/summer_code_jam_2021/cj8_urwid.png -------------------------------------------------------------------------------- /pydis_site/static/images/content/contributing/github_issues_tab.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/python-discord/site/HEAD/pydis_site/static/images/content/contributing/github_issues_tab.png -------------------------------------------------------------------------------- /pydis_site/static/images/content/contributing/github_sample_issue.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/python-discord/site/HEAD/pydis_site/static/images/content/contributing/github_sample_issue.png -------------------------------------------------------------------------------- /pydis_site/static/images/content/contributing/pycharm_interpreter.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/python-discord/site/HEAD/pydis_site/static/images/content/contributing/pycharm_interpreter.png -------------------------------------------------------------------------------- /pydis_site/static/images/content/contributing/pycharm_run_module.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/python-discord/site/HEAD/pydis_site/static/images/content/contributing/pycharm_run_module.png -------------------------------------------------------------------------------- /pydis_site/static/images/content/discord_colored_messages/result.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/python-discord/site/HEAD/pydis_site/static/images/content/discord_colored_messages/result.png -------------------------------------------------------------------------------- /pydis_site/static/images/content/help_channels/question-example.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/python-discord/site/HEAD/pydis_site/static/images/content/help_channels/question-example.png -------------------------------------------------------------------------------- /pydis_site/static/images/content/help_channels/topical_channels.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/python-discord/site/HEAD/pydis_site/static/images/content/help_channels/topical_channels.png -------------------------------------------------------------------------------- /pydis_site/static/images/content/mutability/s_upper_creates_HELLO.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/python-discord/site/HEAD/pydis_site/static/images/content/mutability/s_upper_creates_HELLO.png -------------------------------------------------------------------------------- /pydis_site/static/images/events/logos_dark/DO_Logo_Vertical_White.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/python-discord/site/HEAD/pydis_site/static/images/events/logos_dark/DO_Logo_Vertical_White.png -------------------------------------------------------------------------------- /pydis_site/static/images/events/summer_code_jam_2021/cj8_blessed.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/python-discord/site/HEAD/pydis_site/static/images/events/summer_code_jam_2021/cj8_blessed.gif -------------------------------------------------------------------------------- /pydis_site/static/images/events/summer_code_jam_2021/cj8_curses.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/python-discord/site/HEAD/pydis_site/static/images/events/summer_code_jam_2021/cj8_curses.png -------------------------------------------------------------------------------- /pydis_site/static/images/events/summer_code_jam_2022/site_banner.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/python-discord/site/HEAD/pydis_site/static/images/events/summer_code_jam_2022/site_banner.png -------------------------------------------------------------------------------- /pydis_site/apps/content/resources/guides/pydis-guides/contributing/_info.yml: -------------------------------------------------------------------------------- 1 | title: Contributing 2 | description: How to contribute to our open source projects on Github. 3 | icon: fab fa-github 4 | -------------------------------------------------------------------------------- /pydis_site/apps/content/resources/guides/pydis-guides/contributing/sir-lancebot/_info.yml: -------------------------------------------------------------------------------- 1 | title: Contributing to Sir Lancebot 2 | description: A guide to setting up and configuring Sir Lancebot. 3 | -------------------------------------------------------------------------------- /pydis_site/apps/content/resources/guides/pydis-guides/contributing/working-with-git/_info.yml: -------------------------------------------------------------------------------- 1 | title: Working with Git 2 | description: Basic workflows when using git. 3 | icon: fab fa-git-alt 4 | -------------------------------------------------------------------------------- /pydis_site/apps/content/resources/server-info/_info.yml: -------------------------------------------------------------------------------- 1 | title: Server Information 2 | description: Information on roles, tooling, and infrastructure at Python Discord. 3 | icon: fab fa-discord 4 | -------------------------------------------------------------------------------- /pydis_site/static/images/content/contributing/docker_shared_drives.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/python-discord/site/HEAD/pydis_site/static/images/content/contributing/docker_shared_drives.png -------------------------------------------------------------------------------- /pydis_site/static/images/content/contributing/pycharm_commit_button.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/python-discord/site/HEAD/pydis_site/static/images/content/contributing/pycharm_commit_button.png -------------------------------------------------------------------------------- /pydis_site/static/images/content/help_channels/help-system-category.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/python-discord/site/HEAD/pydis_site/static/images/content/help_channels/help-system-category.png -------------------------------------------------------------------------------- /pydis_site/static/images/content/contributing/pycharm_create_project.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/python-discord/site/HEAD/pydis_site/static/images/content/contributing/pycharm_create_project.png -------------------------------------------------------------------------------- /pydis_site/static/images/content/contributing/pycharm_poetry_success.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/python-discord/site/HEAD/pydis_site/static/images/content/contributing/pycharm_poetry_success.png -------------------------------------------------------------------------------- /pydis_site/static/images/content/discord_colored_messages/ansi-colors.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/python-discord/site/HEAD/pydis_site/static/images/content/discord_colored_messages/ansi-colors.png -------------------------------------------------------------------------------- /pydis_site/static/images/content/mutability/s_gets_assigned_to_HELLO.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/python-discord/site/HEAD/pydis_site/static/images/content/mutability/s_gets_assigned_to_HELLO.png -------------------------------------------------------------------------------- /pydis_site/static/images/events/summer_code_jam_2021/cj8_asciimatics.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/python-discord/site/HEAD/pydis_site/static/images/events/summer_code_jam_2021/cj8_asciimatics.png -------------------------------------------------------------------------------- /pydis_site/static/images/events/summer_code_jam_2021/cj8_prompttoolkit.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/python-discord/site/HEAD/pydis_site/static/images/events/summer_code_jam_2021/cj8_prompttoolkit.png -------------------------------------------------------------------------------- /pydis_site/static/images/events/summer_code_jam_2025/banner_with_dates.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/python-discord/site/HEAD/pydis_site/static/images/events/summer_code_jam_2025/banner_with_dates.png -------------------------------------------------------------------------------- /pydis_site/templates/events/base.html: -------------------------------------------------------------------------------- 1 | {% extends "events/_base.html" %} 2 | 3 | {% block event_base_content %} 4 |
5 | {% block event_content %}{% endblock %} 6 |
7 | {% endblock %} 8 | -------------------------------------------------------------------------------- /pydis_site/apps/events/apps.py: -------------------------------------------------------------------------------- 1 | from django.apps import AppConfig 2 | 3 | 4 | class EventsConfig(AppConfig): 5 | """Django AppConfig for events app.""" 6 | 7 | name = 'pydis_site.apps.events' 8 | -------------------------------------------------------------------------------- /pydis_site/apps/staff/apps.py: -------------------------------------------------------------------------------- 1 | from django.apps import AppConfig 2 | 3 | 4 | class StaffConfig(AppConfig): 5 | """Django AppConfig for the staff app.""" 6 | 7 | name = 'pydis_site.apps.staff' 8 | -------------------------------------------------------------------------------- /pydis_site/apps/content/apps.py: -------------------------------------------------------------------------------- 1 | from django.apps import AppConfig 2 | 3 | 4 | class ContentConfig(AppConfig): 5 | """Django AppConfig for content app.""" 6 | 7 | name = 'pydis_site.apps.content' 8 | -------------------------------------------------------------------------------- /pydis_site/static/images/content/help_channels/newly-created-thread-example.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/python-discord/site/HEAD/pydis_site/static/images/content/help_channels/newly-created-thread-example.png -------------------------------------------------------------------------------- /pydis_site/apps/redirect/apps.py: -------------------------------------------------------------------------------- 1 | from django.apps import AppConfig 2 | 3 | 4 | class RedirectConfig(AppConfig): 5 | """AppConfig instance for Redirect app.""" 6 | 7 | name = 'pydis_site.apps.redirect' 8 | -------------------------------------------------------------------------------- /pydis_site/apps/events/views/index.py: -------------------------------------------------------------------------------- 1 | from django.views.generic import TemplateView 2 | 3 | 4 | class IndexView(TemplateView): 5 | """Events index page view.""" 6 | 7 | template_name = "events/index.html" 8 | -------------------------------------------------------------------------------- /pydis_site/apps/home/urls.py: -------------------------------------------------------------------------------- 1 | from django_distill import distill_path 2 | 3 | from .views import HomeView 4 | 5 | app_name = 'home' 6 | urlpatterns = [ 7 | distill_path('', HomeView.as_view(), name='home'), 8 | ] 9 | -------------------------------------------------------------------------------- /pydis_site/apps/staff/urls.py: -------------------------------------------------------------------------------- 1 | from django.urls import path 2 | 3 | from .views import LogView 4 | 5 | app_name = 'staff' 6 | urlpatterns = [ 7 | path('bot/logs//', LogView.as_view(), name="logs"), 8 | ] 9 | -------------------------------------------------------------------------------- /pydis_site/static/images/events/summer_code_jam_2022/front_page_banners/live_now.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/python-discord/site/HEAD/pydis_site/static/images/events/summer_code_jam_2022/front_page_banners/live_now.png -------------------------------------------------------------------------------- /pydis_site/static/images/events/summer_code_jam_2022/front_page_banners/sign_up.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/python-discord/site/HEAD/pydis_site/static/images/events/summer_code_jam_2022/front_page_banners/sign_up.png -------------------------------------------------------------------------------- /pydis_site/static/images/events/summer_code_jam_2021/front_page_banners/random_team.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/python-discord/site/HEAD/pydis_site/static/images/events/summer_code_jam_2021/front_page_banners/random_team.png -------------------------------------------------------------------------------- /pydis_site/static/images/events/summer_code_jam_2021/front_page_banners/sign_up_now.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/python-discord/site/HEAD/pydis_site/static/images/events/summer_code_jam_2021/front_page_banners/sign_up_now.png -------------------------------------------------------------------------------- /pydis_site/static/fontawesome/README.md: -------------------------------------------------------------------------------- 1 | # Font Awesome 6.5.1 2 | 3 | Thanks for downloading Font Awesome! We're so excited you're here. 4 | 5 | Our documentation is available online. Just head here: 6 | 7 | https://fontawesome.com 8 | -------------------------------------------------------------------------------- /pydis_site/static/images/events/summer_code_jam_2021/front_page_banners/currently_live.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/python-discord/site/HEAD/pydis_site/static/images/events/summer_code_jam_2021/front_page_banners/currently_live.png -------------------------------------------------------------------------------- /pydis_site/apps/timeline/entries/2021-02-18_150000-members.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: We now have 150,000 members! 3 | date: Feb 18th, 2021 4 | icon: fa fa-users 5 | icon_color: pastel-dark-blue 6 | --- 7 | 8 | Our growth continues to accelerate. 9 | -------------------------------------------------------------------------------- /pydis_site/static/images/events/summer_code_jam_2022/front_page_banners/qualifier_release.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/python-discord/site/HEAD/pydis_site/static/images/events/summer_code_jam_2022/front_page_banners/qualifier_release.png -------------------------------------------------------------------------------- /pydis_site/apps/timeline/urls.py: -------------------------------------------------------------------------------- 1 | from django_distill import distill_path 2 | 3 | from .views import TimelineView 4 | 5 | app_name = "timeline" 6 | 7 | urlpatterns = [ 8 | distill_path("", TimelineView.as_view(), name="index"), 9 | ] 10 | -------------------------------------------------------------------------------- /pydis_site/static/css/content/color.css: -------------------------------------------------------------------------------- 1 | .content .fa-github { 2 | color: black; 3 | } 4 | 5 | [data-theme="dark"] .content .fa-github { 6 | color: white; 7 | } 8 | 9 | .content .fa-github:hover { 10 | color: #7289DA; 11 | } 12 | -------------------------------------------------------------------------------- /pydis_site/context_processors.py: -------------------------------------------------------------------------------- 1 | from django.conf import settings 2 | from django.http import HttpRequest 3 | 4 | 5 | def git_sha_processor(_: HttpRequest) -> dict: 6 | """Expose the git SHA for this repo to all views.""" 7 | return {'git_sha': settings.GIT_SHA} 8 | -------------------------------------------------------------------------------- /pydis_site/apps/home/tests/test_templatetags.py: -------------------------------------------------------------------------------- 1 | from django.test import TestCase 2 | 3 | from pydis_site.apps.home.templatetags import starts_with 4 | 5 | 6 | class TestTemplateTags(TestCase): 7 | def test_starts_with(self): 8 | self.assertTrue(starts_with('foo', 'f')) 9 | -------------------------------------------------------------------------------- /pydis_site/apps/timeline/entries/2025-04-10_400000-members.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: We hit 400 000 members! 3 | date: April 10th, 2025 4 | icon: fa fa-users 5 | icon_color: pastel-dark-blue 6 | --- 7 | 8 | We're growing slower, but we're still growing! Python Discord's now has 400,000 members. 9 | -------------------------------------------------------------------------------- /pydis_site/apps/timeline/entries/2024-06-20_partnership-with-coveragepy.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: Partnership with Coverage.py 3 | date: June 20th, 2024 4 | icon: fa fa-handshake 5 | 6 | --- 7 | 8 | The `#coveragepy` channel is created for discussion of Coverage.py, the popular code coverage measurement tool. 9 | -------------------------------------------------------------------------------- /pydis_site/apps/timeline/entries/2018-11-24_10000-members.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: PyDis hits 10,000 members 3 | date: Nov 24th, 2018 4 | icon: fa fa-users 5 | icon_color: pastel-dark-blue 6 | --- 7 | 8 | We partner with RLBot, move from GitLab to GitHub, and start putting together 9 | the first Advent of Code event. 10 | -------------------------------------------------------------------------------- /pydis_site/apps/timeline/entries/2022-02-21_sir-robin.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: Addition of @Sir Robin 3 | date: Feb 21st, 2022 4 | icon: fa fa-robot 5 | icon_color: pastel-blue 6 | --- 7 | 8 | Our arsenal of bots grows! We add @Sir Robin to power and manage all of our 9 | future events and to support the Events Team. 10 | -------------------------------------------------------------------------------- /pydis_site/apps/timeline/entries/2022-05-19_partnership-with-pyqtgraph.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: Partnership with pyqtgraph 3 | date: May 19th, 2022 4 | icon: fa fa-handshake 5 | 6 | --- 7 | 8 | The `#pyqtgraph` channel is created for the Scientific Graphics and GUI library 9 | pyqtgraph, joining `#black-formatter`. 10 | -------------------------------------------------------------------------------- /gunicorn.conf.py: -------------------------------------------------------------------------------- 1 | """ 2 | Configuration file for gunicorn. 3 | 4 | Code taken from https://github.com/prometheus/client_python#multiprocess-mode-eg-gunicorn 5 | """ 6 | from prometheus_client import multiprocess 7 | 8 | 9 | def child_exit(server, worker) -> None: 10 | multiprocess.mark_process_dead(worker.pid) 11 | -------------------------------------------------------------------------------- /pydis_site/apps/api/migrations/0008_tag_embed_validator.py: -------------------------------------------------------------------------------- 1 | # Generated by Django 2.1.1 on 2018-09-23 10:07 2 | 3 | from django.db import migrations 4 | 5 | 6 | class Migration(migrations.Migration): 7 | 8 | dependencies = [ 9 | ('api', '0007_tag'), 10 | ] 11 | 12 | operations = [ 13 | ] 14 | -------------------------------------------------------------------------------- /pydis_site/apps/timeline/entries/2022-01-19_300000-members.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: We hit 300 000 members! 3 | date: Jan 19, 2022 4 | icon: fa fa-users 5 | icon_color: pastel-dark-blue 6 | --- 7 | 8 | Thanks to an increasing growth rate, Python Discord's membership count doubled 9 | from 150,000 to 300,000 in less than a year! 10 | -------------------------------------------------------------------------------- /pydis_site/apps/timeline/entries/2022-02-09_events-team.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: Creation of Events Team 3 | date: Feb 9th, 2022 4 | icon: pydis 5 | --- 6 | 7 | We form the Events Team to organise and run future events. Led by Kat and 8 | comprised by staff members, the goal of the team is to ultimately host more 9 | events in a more sustainable way. 10 | -------------------------------------------------------------------------------- /.github/CODEOWNERS: -------------------------------------------------------------------------------- 1 | # Infractions API 2 | pydis_site/apps/api/models/bot/infraction.py @MarkKoz 3 | pydis_site/apps/api/viewsets/bot/infraction.py @MarkKoz 4 | 5 | # CI & Docker 6 | .github/workflows/** @MarkKoz 7 | Dockerfile @MarkKoz 8 | docker-compose.yml @MarkKoz 9 | -------------------------------------------------------------------------------- /pydis_site/static/css/collapsibles.css: -------------------------------------------------------------------------------- 1 | .collapsible { 2 | cursor: pointer; 3 | width: 100%; 4 | border: none; 5 | outline: none; 6 | } 7 | 8 | [data-theme="dark"] .collapsible { 9 | background-color: #34353A; 10 | } 11 | 12 | .collapsible-content { 13 | transition: max-height 0.3s ease-out; 14 | overflow: hidden; 15 | } 16 | -------------------------------------------------------------------------------- /pydis_site/static/favicons/browserconfig.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | #7289da 7 | 8 | 9 | 10 | -------------------------------------------------------------------------------- /pydis_site/templates/events/sidebar/code-jams/ongoing-code-jam.html: -------------------------------------------------------------------------------- 1 | {% load static %} 2 | 3 |
4 | 5 | 6 | Code Jam 2025 7 | 8 |
9 | -------------------------------------------------------------------------------- /pydis_site/apps/timeline/entries/2017-01-08_python-discord-is-created.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: Python Discord is created 3 | date: Jan 8th, 2017 4 | icon: pydis 5 | --- 6 | 7 | **Joe Banks** becomes one of the owners around 3 days after it is created, and 8 | **Leon Sandøy** (lemon) joins the owner team later in the year, when the 9 | community has around 300 members. 10 | -------------------------------------------------------------------------------- /pydis_site/apps/timeline/entries/2019-09-22_sebastiaan-zeef-becomes-an-owner.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: Sebastiaan Zeef becomes an owner 3 | date: Sept 22nd, 2019 4 | icon: pydis 5 | --- 6 | 7 | After being a long time active contributor to our projects and the driving force 8 | behind many of our events, Sebastiaan Zeef joins the Owners Team alongside Joe & 9 | Leon. 10 | -------------------------------------------------------------------------------- /pydis_site/apps/timeline/entries/2020-04-14_40000-members.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: Python Discord hits 40,000 members, and is now bigger than Liechtenstein. 3 | date: Apr 14, 2020 4 | icon: fa fa-users 5 | icon_color: pastel-dark-blue 6 | --- 7 | 8 | ![](https://raw.githubusercontent.com/python-discord/branding/main/wallpapers/bigger%20than%20liechtenstein/pydis%20postcard.png) 9 | -------------------------------------------------------------------------------- /pydis_site/apps/timeline/entries/2019-12-22_30000-members.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: PyDis hits 30,000 members 3 | date: Dec 22nd, 2019 4 | icon: fa fa-users 5 | icon_color: pastel-dark-blue 6 | --- 7 | 8 | More than tripling in size since the year before, the community hits 30000 9 | users. At this point, we're probably the largest Python chat community on the 10 | planet. 11 | -------------------------------------------------------------------------------- /pydis_site/apps/api/migrations/0062_merge_20200901_1459.py: -------------------------------------------------------------------------------- 1 | # Generated by Django 3.0.8 on 2020-09-01 14:59 2 | 3 | from django.db import migrations 4 | 5 | 6 | class Migration(migrations.Migration): 7 | 8 | dependencies = [ 9 | ('api', '0051_delete_tag'), 10 | ('api', '0061_merge_20200830_0526'), 11 | ] 12 | 13 | operations = [ 14 | ] 15 | -------------------------------------------------------------------------------- /pydis_site/apps/api/migrations/0079_merge_20220125_2022.py: -------------------------------------------------------------------------------- 1 | # Generated by Django 3.1.14 on 2022-01-25 20:22 2 | 3 | from django.db import migrations 4 | 5 | 6 | class Migration(migrations.Migration): 7 | 8 | dependencies = [ 9 | ('api', '0078_merge_20211213_0552'), 10 | ('api', '0074_voice_mute'), 11 | ] 12 | 13 | operations = [ 14 | ] 15 | -------------------------------------------------------------------------------- /pydis_site/apps/api/migrations/0066_merge_20201003_0730.py: -------------------------------------------------------------------------------- 1 | # Generated by Django 3.0.9 on 2020-10-03 07:30 2 | 3 | from django.db import migrations 4 | 5 | 6 | class Migration(migrations.Migration): 7 | 8 | dependencies = [ 9 | ('api', '0064_delete_logentry'), 10 | ('api', '0065_auto_20200919_2033'), 11 | ] 12 | 13 | operations = [ 14 | ] 15 | -------------------------------------------------------------------------------- /pydis_site/apps/api/migrations/0021_merge_20181125_1015.py: -------------------------------------------------------------------------------- 1 | # Generated by Django 2.1.1 on 2018-11-25 10:15 2 | 3 | from django.db import migrations 4 | 5 | 6 | class Migration(migrations.Migration): 7 | 8 | dependencies = [ 9 | ('api', '0020_add_snake_field_validators'), 10 | ('api', '0019_deletedmessage'), 11 | ] 12 | 13 | operations = [ 14 | ] 15 | -------------------------------------------------------------------------------- /pydis_site/apps/api/migrations/0057_merge_20200716_0751.py: -------------------------------------------------------------------------------- 1 | # Generated by Django 2.2.14 on 2020-07-16 07:51 2 | 3 | from django.db import migrations 4 | 5 | 6 | class Migration(migrations.Migration): 7 | 8 | dependencies = [ 9 | ('api', '0055_reminder_mentions'), 10 | ('api', '0056_allow_blank_user_roles'), 11 | ] 12 | 13 | operations = [ 14 | ] 15 | -------------------------------------------------------------------------------- /pydis_site/apps/api/migrations/0074_merge_20211105_0518.py: -------------------------------------------------------------------------------- 1 | # Generated by Django 3.0.14 on 2021-11-05 05:18 2 | 3 | from django.db import migrations 4 | 5 | 6 | class Migration(migrations.Migration): 7 | 8 | dependencies = [ 9 | ('api', '0072_merge_20210724_1354'), 10 | ('api', '0073_otn_allow_GT_and_LT'), 11 | ] 12 | 13 | operations = [ 14 | ] 15 | -------------------------------------------------------------------------------- /pydis_site/apps/api/migrations/0076_merge_20211125_1941.py: -------------------------------------------------------------------------------- 1 | # Generated by Django 3.0.14 on 2021-11-25 19:41 2 | 3 | from django.db import migrations 4 | 5 | 6 | class Migration(migrations.Migration): 7 | 8 | dependencies = [ 9 | ('api', '0075_infraction_dm_sent'), 10 | ('api', '0075_add_redirects_filter'), 11 | ] 12 | 13 | operations = [ 14 | ] 15 | -------------------------------------------------------------------------------- /pydis_site/apps/resources/resources/visual_studio_code.yaml: -------------------------------------------------------------------------------- 1 | description: A fully-featured editor based on Electron, extendable with plugins. 2 | name: Visual Studio Code 3 | title_url: https://code.visualstudio.com/ 4 | tags: 5 | topics: 6 | - general 7 | payment_tiers: 8 | - free 9 | difficulty: 10 | - beginner 11 | - intermediate 12 | type: 13 | - tool 14 | -------------------------------------------------------------------------------- /pydis_site/apps/timeline/entries/2020-10-22_100000-members.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: Python Discord hits 100,000 members! 3 | date: Oct 22nd, 2020 4 | icon: fa fa-users 5 | icon_color: pastel-dark-blue 6 | --- 7 | 8 | Only six months after hitting 40,000 users, we hit 100,000 users. A monumental 9 | milestone, and one we're very proud of. To commemorate it, we create this 10 | timeline. 11 | -------------------------------------------------------------------------------- /pydis_site/apps/api/migrations/0078_merge_20211213_0552.py: -------------------------------------------------------------------------------- 1 | # Generated by Django 3.1.14 on 2021-12-13 05:52 2 | 3 | from django.db import migrations 4 | 5 | 6 | class Migration(migrations.Migration): 7 | 8 | dependencies = [ 9 | ('api', '0077_use_generic_jsonfield'), 10 | ('api', '0074_merge_20211105_0518'), 11 | ] 12 | 13 | operations = [ 14 | ] 15 | -------------------------------------------------------------------------------- /pydis_site/apps/resources/resources/repl_it.yaml: -------------------------------------------------------------------------------- 1 | description: A free, collaborative, in-browser IDE to code in 50+ languages — 2 | without spending a second on setup. 3 | name: repl.it 4 | title_url: https://repl.it/ 5 | tags: 6 | topics: 7 | - general 8 | payment_tiers: 9 | - free 10 | difficulty: 11 | - beginner 12 | - intermediate 13 | type: 14 | - tool 15 | -------------------------------------------------------------------------------- /pydis_site/apps/timeline/entries/2019-10-26_code-of-conduct-created.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: The code of conduct is created 3 | date: Oct 26th, 2019 4 | icon: fa fa-scroll 5 | icon_color: pastel-lime 6 | --- 7 | 8 | Inspired by the Adafruit, Rust and Django communities, an essential community 9 | pillar is created; Our [Code of Conduct.](https://pythondiscord.com/pages/code- 10 | of-conduct/) 11 | -------------------------------------------------------------------------------- /.github/workflows/fixup-commit-blocker.yaml: -------------------------------------------------------------------------------- 1 | name: Block fixup commits 2 | 3 | on: 4 | pull_request_target: 5 | 6 | concurrency: 7 | group: ${{ github.workflow }}-${{ github.ref }} 8 | cancel-in-progress: true 9 | 10 | jobs: 11 | block-fixup-commits: 12 | if: github.ref != 'refs/heads/main' 13 | uses: python-discord/.github/.github/workflows/block-fixup-commits.yaml@main 14 | -------------------------------------------------------------------------------- /pydis_site/apps/api/migrations/0038_merge_20190719_1817.py: -------------------------------------------------------------------------------- 1 | # Generated by Django 2.2.3 on 2019-07-19 22:17 2 | 3 | from django.db import migrations 4 | 5 | 6 | class Migration(migrations.Migration): 7 | 8 | dependencies = [ 9 | ('api', '0037_nomination_field_name_change'), 10 | ('api', '0036_removing_snake_apis'), 11 | ] 12 | 13 | operations = [ 14 | ] 15 | -------------------------------------------------------------------------------- /pydis_site/apps/api/migrations/0061_merge_20200830_0526.py: -------------------------------------------------------------------------------- 1 | # Generated by Django 3.0.8 on 2020-08-30 05:26 2 | 3 | from django.db import migrations 4 | 5 | 6 | class Migration(migrations.Migration): 7 | 8 | dependencies = [ 9 | ('api', '0060_populate_filterlists_fix'), 10 | ('api', '0052_offtopicchannelname_used'), 11 | ] 12 | 13 | operations = [ 14 | ] 15 | -------------------------------------------------------------------------------- /pydis_site/apps/api/migrations/0072_merge_20210724_1354.py: -------------------------------------------------------------------------------- 1 | # Generated by Django 3.0.14 on 2021-07-24 13:54 2 | 3 | from django.db import migrations 4 | 5 | 6 | class Migration(migrations.Migration): 7 | 8 | dependencies = [ 9 | ('api', '0071_increase_message_content_4000'), 10 | ('api', '0070_auto_20210519_0545'), 11 | ] 12 | 13 | operations = [ 14 | ] 15 | -------------------------------------------------------------------------------- /pydis_site/apps/api/migrations/0096_merge_0093_user_alts_0095_user_display_name.py: -------------------------------------------------------------------------------- 1 | # Generated by Django 5.0 on 2024-05-20 05:14 2 | 3 | from django.db import migrations 4 | 5 | 6 | class Migration(migrations.Migration): 7 | 8 | dependencies = [ 9 | ('api', '0093_user_alts'), 10 | ('api', '0095_user_display_name'), 11 | ] 12 | 13 | operations = [ 14 | ] 15 | -------------------------------------------------------------------------------- /pydis_site/apps/timeline/entries/2017-11-10_1000-members.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: Python Discord hits 1,000 members 3 | date: Nov 10th, 2017 4 | icon: fa fa-users 5 | icon_color: pastel-dark-blue 6 | --- 7 | 8 | Our main source of new users at this point is a post on Reddit that happens to 9 | get very good SEO. We are one of the top 10 search engine hits for the search 10 | term "python discord". 11 | -------------------------------------------------------------------------------- /pydis_site/templates/events/base_sidebar.html: -------------------------------------------------------------------------------- 1 | {% extends "events/base.html" %} 2 | 3 | {% block event_base_content %} 4 |
5 |
6 | {% block event_content %}{% endblock %} 7 |
8 |
9 | {% block sidebar %}{% endblock %} 10 |
11 |
12 | {% endblock %} 13 | -------------------------------------------------------------------------------- /pydis_site/apps/api/migrations/0055_merge_20200714_2027.py: -------------------------------------------------------------------------------- 1 | # Generated by Django 3.0.8 on 2020-07-14 20:27 2 | 3 | from django.db import migrations 4 | 5 | 6 | class Migration(migrations.Migration): 7 | 8 | dependencies = [ 9 | ('api', '0051_allow_blank_message_embeds'), 10 | ('api', '0054_user_invalidate_unknown_role'), 11 | ] 12 | 13 | operations = [ 14 | ] 15 | -------------------------------------------------------------------------------- /pydis_site/apps/resources/resources/sublime_text.yaml: -------------------------------------------------------------------------------- 1 | description: A powerful Python-backed editor with great community support and a wealth 2 | of extensions. 3 | name: Sublime Text 4 | title_url: https://www.sublimetext.com/ 5 | tags: 6 | topics: 7 | - general 8 | payment_tiers: 9 | - free 10 | difficulty: 11 | - beginner 12 | - intermediate 13 | type: 14 | - tool 15 | -------------------------------------------------------------------------------- /pydis_site/apps/resources/resources/python_tutor.yaml: -------------------------------------------------------------------------------- 1 | description: Write Python code in your web browser, and see it visualized step by step. 2 | name: Python Tutor 3 | title_url: https://www.pythontutor.com/ 4 | tags: 5 | topics: 6 | - general 7 | payment_tiers: 8 | - free 9 | difficulty: 10 | - beginner 11 | - intermediate 12 | type: 13 | - tool 14 | - interactive 15 | -------------------------------------------------------------------------------- /pydis_site/apps/resources/resources/thonny.yaml: -------------------------------------------------------------------------------- 1 | description: A Python IDE specifically aimed at learning programming. Has a lot of 2 | helpful features to help you understand your code. 3 | name: Thonny 4 | title_url: https://thonny.org/ 5 | position: 2 6 | tags: 7 | topics: 8 | - general 9 | payment_tiers: 10 | - free 11 | difficulty: 12 | - beginner 13 | type: 14 | - tool 15 | -------------------------------------------------------------------------------- /pydis_site/apps/api/migrations/0023_merge_infractions_snake_validators.py: -------------------------------------------------------------------------------- 1 | # Generated by Django 2.1.3 on 2018-11-29 19:37 2 | 3 | from django.db import migrations 4 | 5 | 6 | class Migration(migrations.Migration): 7 | 8 | dependencies = [ 9 | ('api', '0022_infraction_remove_note'), 10 | ('api', '0021_add_special_snake_validator'), 11 | ] 12 | 13 | operations = [ 14 | ] 15 | -------------------------------------------------------------------------------- /pydis_site/apps/resources/resources/spyder.yaml: -------------------------------------------------------------------------------- 1 | description: The Scientific Python Development Environment. 2 | Simpler and lighter than PyCharm, but still packs a punch. 3 | name: Spyder 4 | title_url: https://www.spyder-ide.org/ 5 | tags: 6 | topics: 7 | - data science 8 | payment_tiers: 9 | - free 10 | difficulty: 11 | - beginner 12 | - intermediate 13 | type: 14 | - tool 15 | -------------------------------------------------------------------------------- /pydis_site/apps/api/migrations/0027_merge_20190120_0852.py: -------------------------------------------------------------------------------- 1 | # Generated by Django 2.1.5 on 2019-01-20 08:52 2 | 3 | from django.db import migrations 4 | 5 | 6 | class Migration(migrations.Migration): 7 | 8 | dependencies = [ 9 | ('api', '0026_use_proper_default_for_infraction_insertion_date'), 10 | ('api', '0021_merge_20181125_1015'), 11 | ] 12 | 13 | operations = [ 14 | ] 15 | -------------------------------------------------------------------------------- /pydis_site/apps/timeline/entries/2018-02-03_our-logo-is-born.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: Our logo is born. Thanks @Aperture! 3 | date: Feb 3rd, 2018 4 | icon: pydis 5 | --- 6 | 7 |

8 | Python Discord Logo 9 |

10 | -------------------------------------------------------------------------------- /pydis_site/apps/timeline/entries/2021-05-24_partnership-with-black.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: Partnership with Black 3 | date: May 24th, 2021 4 | icon: fa fa-handshake 5 | 6 | --- 7 | 8 | We partner with the uncompromising code formatter project, Black, who were 9 | looking for a new home for their real-time chat. Python Discord ended up being 10 | that home, resulting in the creation of the `#black-formatter` channel. 11 | -------------------------------------------------------------------------------- /pydis_site/apps/timeline/tests/test_views.py: -------------------------------------------------------------------------------- 1 | from django.test import TestCase 2 | from django.urls import reverse 3 | 4 | 5 | class TestIndexReturns200(TestCase): 6 | def test_index_returns_200(self): 7 | """Check that the index page returns a HTTP 200 response.""" 8 | url = reverse('timeline:index') 9 | resp = self.client.get(url) 10 | self.assertEqual(resp.status_code, 200) 11 | -------------------------------------------------------------------------------- /pydis_site/apps/staff/views.py: -------------------------------------------------------------------------------- 1 | from django.views.generic.detail import DetailView 2 | 3 | from pydis_site.apps.api.models.bot.message_deletion_context import MessageDeletionContext 4 | 5 | 6 | class LogView(DetailView): 7 | """The default view for the Deleted Messages logs.""" 8 | 9 | model = MessageDeletionContext 10 | context_object_name = "deletion_context" 11 | template_name = "staff/logs.html" 12 | -------------------------------------------------------------------------------- /pydis_site/apps/timeline/entries/2020-05-25_modmail-is-now-live.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: ModMail is now live 3 | date: May 25th, 2020 4 | icon: fa fa-comments 5 | icon_color: pastel-green 6 | --- 7 | 8 | Having originally planned to write our own ModMail bot from scratch, we come 9 | across an exceptionally good [ModMail bot by 10 | kyb3r](https://github.com/kyb3r/modmail) and decide to just self-host that one 11 | instead. 12 | -------------------------------------------------------------------------------- /pydis_site/apps/api/migrations/0051_delete_tag.py: -------------------------------------------------------------------------------- 1 | # Generated by Django 2.2.11 on 2020-04-01 06:15 2 | 3 | from django.db import migrations 4 | 5 | 6 | class Migration(migrations.Migration): 7 | 8 | dependencies = [ 9 | ('api', '0050_remove_infractions_active_default_value'), 10 | ] 11 | 12 | operations = [ 13 | migrations.DeleteModel( 14 | name='Tag', 15 | ), 16 | ] 17 | -------------------------------------------------------------------------------- /pydis_site/apps/resources/resources/simple_guide_to_git.yaml: -------------------------------------------------------------------------------- 1 | description: A simple, no-nonsense guide to the basics of using Git. 2 | name: A Simple Guide to Git 3 | title_url: https://rogerdudler.github.io/git-guide/ 4 | title_icon: branding/github 5 | title_icon_color: dark 6 | tags: 7 | topics: 8 | - tooling 9 | payment_tiers: 10 | - free 11 | difficulty: 12 | - beginner 13 | type: 14 | - tutorial 15 | -------------------------------------------------------------------------------- /pydis_site/apps/timeline/entries/2019-09-15_the-django-rewrite-of-pythondiscord-com.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: The Django rewrite of pythondiscord.com is now live! 3 | date: Sep 15, 2019 4 | icon: fa fa-code 5 | icon_color: pastel-orange 6 | --- 7 | 8 | The site is getting more and more complex, and it's time for a rewrite. We 9 | decide to go for a different stack, and build a website based on Django, DRF, 10 | Bulma and PostgreSQL. 11 | -------------------------------------------------------------------------------- /pydis_site/apps/api/models/bot/mailing_list.py: -------------------------------------------------------------------------------- 1 | from django.db import models 2 | 3 | from pydis_site.apps.api.models.mixins import ModelReprMixin 4 | 5 | 6 | class MailingList(ModelReprMixin, models.Model): 7 | """A mailing list that the bot is following.""" 8 | 9 | name = models.CharField( 10 | max_length=50, 11 | help_text="A short identifier for the mailing list.", 12 | unique=True 13 | ) 14 | -------------------------------------------------------------------------------- /pydis_site/apps/resources/resources/discord_py_masterclass.yaml: -------------------------------------------------------------------------------- 1 | description: A whistlestop tour of the functionality of discord.py, the most popular Python library for Discord 2 | name: Discord.py Masterclass 3 | title_url: https://fallendeity.github.io/discord.py-masterclass 4 | tags: 5 | topics: 6 | - discord bots 7 | payment_tiers: 8 | - free 9 | difficulty: 10 | - intermediate 11 | type: 12 | - tutorial 13 | -------------------------------------------------------------------------------- /pydis_site/apps/resources/resources/python_bytes.yaml: -------------------------------------------------------------------------------- 1 | description: A byte-sized podcast where Michael Kennedy and Brian Okken work through 2 | this week's notable Python headlines. 3 | name: Python Bytes 4 | title_url: https://pythonbytes.fm/ 5 | position: 1 6 | tags: 7 | topics: 8 | - general 9 | payment_tiers: 10 | - free 11 | difficulty: 12 | - beginner 13 | - intermediate 14 | type: 15 | - podcast 16 | -------------------------------------------------------------------------------- /pydis_site/apps/timeline/entries/2021-04-23_owners-become-psf-fellows.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: Owners become PSF Fellows 3 | date: April 23, 2021 4 | icon: pydis 5 | --- 6 | 7 | Joe, Leon, and Sebastiaan [are recognized as Python Software Foundation 8 | Fellows](https://pyfound.blogspot.com/2021/04/python-software-foundation- 9 | fellow.html) for their substantial contributions to the Python ecosystem by 10 | fostering Python Discord. 11 | -------------------------------------------------------------------------------- /pydis_site/apps/api/migrations/0064_delete_logentry.py: -------------------------------------------------------------------------------- 1 | # Generated by Django 3.0.9 on 2020-10-03 06:57 2 | 3 | from django.db import migrations 4 | 5 | 6 | class Migration(migrations.Migration): 7 | 8 | dependencies = [ 9 | ('api', '0063_Allow_blank_or_null_for_nomination_reason'), 10 | ] 11 | 12 | operations = [ 13 | migrations.DeleteModel( 14 | name='LogEntry', 15 | ), 16 | ] 17 | -------------------------------------------------------------------------------- /pydis_site/apps/staff/migrations/0003_delete_rolemapping.py: -------------------------------------------------------------------------------- 1 | # Generated by Django 3.0.9 on 2020-10-04 17:49 2 | 3 | from django.db import migrations 4 | 5 | 6 | class Migration(migrations.Migration): 7 | 8 | dependencies = [ 9 | ('staff', '0002_add_is_staff_to_role_mappings'), 10 | ] 11 | 12 | operations = [ 13 | migrations.DeleteModel( 14 | name='RoleMapping', 15 | ), 16 | ] 17 | -------------------------------------------------------------------------------- /pydis_site/apps/timeline/entries/2020-06-04_python-discord-public-statistics-are-now-live.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: Python Discord Public Statistics are now live 3 | date: Jun 4th, 2020 4 | icon: fa fa-chart-bar 5 | icon_color: pastel-red 6 | --- 7 | 8 | After getting numerous requests to publish beautiful data on member count and 9 | channel use, we create 10 | [stats.pythondiscord.com](https://stats.pythondiscord.com/) for all to enjoy. 11 | -------------------------------------------------------------------------------- /pydis_site/apps/api/migrations/0018_user_rename.py: -------------------------------------------------------------------------------- 1 | # Generated by Django 2.1.3 on 2018-11-19 20:09 2 | 3 | from django.db import migrations 4 | 5 | 6 | class Migration(migrations.Migration): 7 | 8 | dependencies = [ 9 | ('api', '0017_auto_20181029_1921'), 10 | ] 11 | 12 | operations = [ 13 | migrations.RenameModel( 14 | old_name='Member', 15 | new_name='User', 16 | ), 17 | ] 18 | -------------------------------------------------------------------------------- /pydis_site/static/css/content/tag.css: -------------------------------------------------------------------------------- 1 | .content a * { 2 | /* This is the original color, but propagated down the chain */ 3 | /* which allows for elements inside links, such as codeblocks */ 4 | color: #7289DA; 5 | } 6 | 7 | [data-theme="dark"] .content a { 8 | color: #99B0FF; 9 | } 10 | 11 | .content a *:hover { 12 | color: dimgray; 13 | } 14 | 15 | span.update-time { 16 | text-decoration: black underline dotted; 17 | } 18 | -------------------------------------------------------------------------------- /pydis_site/static/images/timeline/cd-icon-location.svg: -------------------------------------------------------------------------------- 1 | 2 | 4 | 5 | -------------------------------------------------------------------------------- /pydis_site/apps/resources/resources/podcast_dunder_init.yaml: -------------------------------------------------------------------------------- 1 | description: The podcast about Python and the people who make it great. Weekly long-form 2 | interviews with the creators of notable Python packages. 3 | name: Podcast.__init__ 4 | title_url: https://www.podcastinit.com/ 5 | tags: 6 | topics: 7 | - general 8 | payment_tiers: 9 | - free 10 | difficulty: 11 | - beginner 12 | - intermediate 13 | type: 14 | - podcast 15 | -------------------------------------------------------------------------------- /pydis_site/apps/timeline/entries/2022-02-12_trivia-night.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: Trivia Night 3 | date: Feb 12th, 2022 4 | icon: fa fa-question 5 | icon_color: pastel-green 6 | --- 7 | 8 | How well do you know Python inside out? Members got to find out in a Trivia 9 | Night event. Contestants were given questions about Python's internals, its 10 | development, and more. To win, contestants had to get the most questions right 11 | while being fast to answer. 12 | -------------------------------------------------------------------------------- /pydis_site/apps/api/migrations/0052_remove_user_avatar_hash.py: -------------------------------------------------------------------------------- 1 | # Generated by Django 2.2.11 on 2020-05-27 07:17 2 | 3 | from django.db import migrations 4 | 5 | 6 | class Migration(migrations.Migration): 7 | 8 | dependencies = [ 9 | ('api', '0051_create_news_setting'), 10 | ] 11 | 12 | operations = [ 13 | migrations.RemoveField( 14 | model_name='user', 15 | name='avatar_hash', 16 | ), 17 | ] 18 | -------------------------------------------------------------------------------- /pydis_site/apps/resources/resources/python_cheat_sheet.yaml: -------------------------------------------------------------------------------- 1 | description: A Python 3 cheat sheet with useful information and tips, as well as common 2 | pitfalls for beginners. This is a PDF. 3 | name: Python Cheat Sheet 4 | title_url: https://perso.limsi.fr/pointal/_media/python:cours:mementopython3-english.pdf 5 | tags: 6 | topics: 7 | - general 8 | payment_tiers: 9 | - free 10 | difficulty: 11 | - beginner 12 | type: 13 | - tutorial 14 | -------------------------------------------------------------------------------- /pydis_site/apps/resources/resources/regex101.yaml: -------------------------------------------------------------------------------- 1 | description: An online tool for testing regular expressions that helps you understand what the regular expression can 2 | match. Remember to set the "flavor" to Python. 3 | name: regex101 4 | title_url: https://regex101.com/ 5 | tags: 6 | topics: 7 | - general 8 | - other 9 | payment_tiers: 10 | - free 11 | difficulty: 12 | - beginner 13 | - intermediate 14 | type: 15 | - tool 16 | -------------------------------------------------------------------------------- /pydis_site/apps/timeline/entries/2020-08-16_python-discord-is-now-the-new-home-of-the-pyweek-event.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: Python Discord is now the new home of the PyWeek event! 3 | date: Aug 16th, 2020 4 | icon: fa fa-handshake 5 | icon_color: pastel-pink 6 | --- 7 | 8 | PyWeek, a game jam that has been running since 2005, joins Python Discord as one 9 | of our official events. Find more information about PyWeek on [their official 10 | website](https://pyweek.org/). 11 | -------------------------------------------------------------------------------- /pydis_site/apps/timeline/entries/2024-09-01_pydis-code-jam-2024-cj11.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: Code Jam 2024 (CJ11) 3 | date: September 1st, 2024 4 | icon: fa fa-dice 5 | icon_color: pastel-lime 6 | --- 7 | 8 | We host the 11th Code Jam. This year, teams had to create a **Discord 9 | Application** based on the theme of **"Information Overload"**. 10 | 11 | 23 teams submitted projects, 10 of which were demoed in a livestream in which 12 | we also announced the winners. 13 | -------------------------------------------------------------------------------- /pydis_site/apps/resources/resources/automate_the_boring_stuff_course.yaml: -------------------------------------------------------------------------------- 1 | description: The interactive course version of Al Sweigart's excellent book for beginners, taught by the author himself. 2 | name: Automate the Boring Stuff with Python Udemy Course 3 | title_url: https://www.udemy.com/automate/ 4 | tags: 5 | topics: 6 | - general 7 | payment_tiers: 8 | - paid 9 | difficulty: 10 | - beginner 11 | type: 12 | - course 13 | - interactive 14 | -------------------------------------------------------------------------------- /pydis_site/apps/resources/resources/python_subreddit.yaml: -------------------------------------------------------------------------------- 1 | description: News about the Python programming language, and language-related discussion. 2 | name: r/Python 3 | title_icon: branding/reddit 4 | title_icon_color: orangered 5 | title_url: https://www.reddit.com/r/Python/ 6 | position: 0 7 | tags: 8 | topics: 9 | - general 10 | payment_tiers: 11 | - free 12 | difficulty: 13 | - beginner 14 | - intermediate 15 | type: 16 | - community 17 | -------------------------------------------------------------------------------- /pydis_site/apps/resources/resources/talk_python_to_me.yaml: -------------------------------------------------------------------------------- 1 | description: The essential weekly Python podcast. Michael Kennedy and a prominent 2 | name within the Python community dive into a topic that relates to their experience. 3 | name: Talk Python To Me 4 | title_url: https://talkpython.fm/ 5 | tags: 6 | topics: 7 | - general 8 | payment_tiers: 9 | - free 10 | difficulty: 11 | - beginner 12 | - intermediate 13 | type: 14 | - podcast 15 | -------------------------------------------------------------------------------- /pydis_site/apps/resources/resources/test_and_code.yaml: -------------------------------------------------------------------------------- 1 | description: Brian Okken's weekly podcast on testing. Usually deals with Python, 2 | but also covers many language-agnostic topics from the testing and DevOps world. 3 | name: Test & Code 4 | title_url: https://testandcode.com/ 5 | tags: 6 | topics: 7 | - testing 8 | - tooling 9 | payment_tiers: 10 | - free 11 | difficulty: 12 | - beginner 13 | - intermediate 14 | type: 15 | - podcast 16 | -------------------------------------------------------------------------------- /pydis_site/apps/resources/templatetags/as_icon.py: -------------------------------------------------------------------------------- 1 | from django import template 2 | 3 | register = template.Library() 4 | 5 | 6 | @register.filter 7 | def as_icon(icon: str) -> str: 8 | """Convert icon string in format 'type/icon' to fa-icon HTML classes.""" 9 | icon_type, icon_name = icon.split("/") 10 | if icon_type.lower() == "branding": 11 | icon_type = "fab" 12 | else: 13 | icon_type = "fas" 14 | return f'{icon_type} fa-{icon_name}' 15 | -------------------------------------------------------------------------------- /pydis_site/apps/timeline/entries/2018-06-20_pydis-hits-5000-members-and-partners-with-r-python.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: PyDis hits 5,000 members and partners with r/Python 3 | date: Jun 20th, 2018 4 | icon: fa fa-users 5 | icon_color: pastel-dark-blue 6 | --- 7 | 8 | As we continue to grow, we approach the r/Python subreddit and ask to become 9 | their official Discord community. They agree, and we become listed in their 10 | sidebar, giving us yet another source of new members. 11 | -------------------------------------------------------------------------------- /pydis_site/apps/timeline/entries/2018-12-19_django-simple-bulma-is-released-on-pypi.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: django-simple-bulma is released on PyPi 3 | date: Dec 19th, 2018 4 | icon: fa fa-code 5 | icon_color: pastel-orange 6 | --- 7 | 8 | Our very first package on PyPI, [django-simple- 9 | bulma](https://pypi.org/project/django-simple-bulma/) is a package that sets up 10 | the Bulma CSS framework for your Django application and lets you configure 11 | everything in settings.py. 12 | -------------------------------------------------------------------------------- /pydis_site/apps/timeline/entries/2020-11-29_we-migrate-all-our-infrastructure-to-kubernetes.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: We migrate all our infrastructure to Kubernetes 3 | date: Nov 29th, 2020 4 | icon: fa fa-wrench 5 | icon_color: pastel-orange 6 | --- 7 | 8 | As our tech stack grows, we decide to migrate all our services over to a 9 | container orchestration paradigm via Kubernetes. This gives us better control 10 | and scalability. **Joe Banks** takes on the role as DevOps Lead. 11 | -------------------------------------------------------------------------------- /pydis_site/templates/events/sidebar/pixels.html: -------------------------------------------------------------------------------- 1 |
2 |
3 | Server icon for Pixels 4 |
5 | 6 | 9 |
10 | -------------------------------------------------------------------------------- /pydis_site/apps/api/migrations/0065_auto_20200919_2033.py: -------------------------------------------------------------------------------- 1 | # Generated by Django 3.0.9 on 2020-09-19 20:33 2 | 3 | from django.db import migrations 4 | 5 | 6 | class Migration(migrations.Migration): 7 | 8 | dependencies = [ 9 | ('api', '0064_auto_20200919_1900'), 10 | ] 11 | 12 | operations = [ 13 | migrations.AlterModelOptions( 14 | name='documentationlink', 15 | options={'ordering': ['package']}, 16 | ), 17 | ] 18 | -------------------------------------------------------------------------------- /pydis_site/wsgi.py: -------------------------------------------------------------------------------- 1 | """ 2 | WSGI config for pydis_site project. 3 | 4 | It exposes the WSGI callable as a module-level variable named ``application``. 5 | 6 | For more information on this file, see 7 | https://docs.djangoproject.com/en/2.1/howto/deployment/wsgi/ 8 | """ 9 | 10 | import os 11 | 12 | from django.core.wsgi import get_wsgi_application 13 | 14 | os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'pydis_site.settings') 15 | 16 | application = get_wsgi_application() 17 | -------------------------------------------------------------------------------- /pydis_site/apps/resources/resources/python_developer_guide.yaml: -------------------------------------------------------------------------------- 1 | description: This guide is a comprehensive resource for contributing to Python – for both new and experienced contributors. 2 | It is maintained by the same community that maintains Python. 3 | name: Python Developer's Guide 4 | title_url: https://devguide.python.org/ 5 | tags: 6 | topics: 7 | - general 8 | payment_tiers: 9 | - free 10 | difficulty: 11 | - intermediate 12 | type: 13 | - tutorial 14 | -------------------------------------------------------------------------------- /pydis_site/apps/resources/resources/university_of_michigan.yaml: -------------------------------------------------------------------------------- 1 | description: A 5-part specialization course that teaches Python from scratch. 2 | The course has no pre-requisites and avoids all but the simplest mathematics. 3 | name: 'University of Michigan: Programming for Everybody' 4 | title_url: https://www.coursera.org/learn/python 5 | tags: 6 | topics: 7 | - general 8 | payment_tiers: 9 | - free 10 | difficulty: 11 | - beginner 12 | type: 13 | - course 14 | -------------------------------------------------------------------------------- /pydis_site/apps/timeline/entries/2018-07-10_pydis-is-now-partnered-with-discord.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: PyDis is now partnered with Discord; the vanity URL discord.gg/python is created 3 | date: Jul 10th, 2018 4 | icon: fa fa-handshake 5 | icon_color: pastel-pink 6 | --- 7 | 8 | After being rejected for their Partner program several times, we finally get 9 | approved. The recent partnership with the r/Python subreddit plays a significant 10 | role in qualifying us for this partnership. 11 | -------------------------------------------------------------------------------- /pydis_site/apps/timeline/entries/2020-10-21_2020-cpython-core-developer-q-a.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: Python Discord hosts the 2020 CPython Core Developer Q&A 3 | date: Oct 21st, 2020 4 | icon: pydis 5 | --- 6 | 7 |
8 | 9 |
10 | -------------------------------------------------------------------------------- /.dockerignore: -------------------------------------------------------------------------------- 1 | .cache 2 | .coverage 3 | .coveragerc 4 | .git 5 | .github 6 | .gitignore 7 | .gitlab 8 | .pytest_cache 9 | .travis.yml 10 | .vagrant 11 | .venv 12 | __pycache__ 13 | pydis_site/apps/admin/tests 14 | pydis_site/apps/api/tests 15 | pydis_site/apps/home/tests 16 | pydis_site/apps/staff/tests 17 | CHANGELOG.md 18 | CONTRIBUTING.md 19 | docker-compose.yml 20 | Dockerfile 21 | docs 22 | htmlcov 23 | LICENSE 24 | pysite.egg-info 25 | README.md 26 | scripts 27 | Vagrantfile 28 | venv 29 | -------------------------------------------------------------------------------- /.github/dependabot.yml: -------------------------------------------------------------------------------- 1 | version: 2 2 | 3 | updates: 4 | - package-ecosystem: "uv" 5 | directory: "/" 6 | schedule: 7 | interval: "daily" 8 | ignore: 9 | - dependency-name: "*" 10 | update-types: 11 | - version-update:semver-patch 12 | - version-update:semver-minor 13 | - package-ecosystem: "github-actions" 14 | directory: "/" 15 | schedule: 16 | interval: "daily" 17 | reviewers: 18 | - "python-discord/devops" 19 | -------------------------------------------------------------------------------- /pydis_site/apps/resources/resources/vcokltfre_discord_bot_tutorial.yaml: -------------------------------------------------------------------------------- 1 | description: This tutorial, written by vcokltfre, 2 | will walk you through all the aspects of creating your own Discord bot, 3 | starting from creating the bot user itself. 4 | name: vcokltfre's Discord Bot Tutorial 5 | title_url: https://tutorial.vco.sh/ 6 | tags: 7 | topics: 8 | - discord bots 9 | payment_tiers: 10 | - free 11 | difficulty: 12 | - intermediate 13 | type: 14 | - tutorial 15 | -------------------------------------------------------------------------------- /pydis_site/apps/api/apps.py: -------------------------------------------------------------------------------- 1 | from django.apps import AppConfig 2 | 3 | 4 | class ApiConfig(AppConfig): 5 | """Django AppConfig for the API app.""" 6 | 7 | name = 'pydis_site.apps.api' 8 | 9 | def ready(self) -> None: 10 | """ 11 | Gets called as soon as the registry is fully populated. 12 | 13 | https://docs.djangoproject.com/en/3.2/ref/applications/#django.apps.AppConfig.ready 14 | """ 15 | import pydis_site.apps.api.signals # noqa: F401 16 | -------------------------------------------------------------------------------- /pydis_site/apps/api/migrations/0016_auto_20181027_1619.py: -------------------------------------------------------------------------------- 1 | # Generated by Django 2.1.2 on 2018-10-27 16:19 2 | 3 | from django.db import migrations 4 | 5 | 6 | class Migration(migrations.Migration): 7 | 8 | dependencies = [ 9 | ('api', '0015_auto_20181027_1617'), 10 | ] 11 | 12 | operations = [ 13 | migrations.RenameField( 14 | model_name='specialsnake', 15 | old_name='image', 16 | new_name='images', 17 | ), 18 | ] 19 | -------------------------------------------------------------------------------- /pydis_site/apps/resources/resources/pycharm.yaml: -------------------------------------------------------------------------------- 1 | description: The very best Python IDE, with a wealth of advanced features and convenience 2 | functions. 3 | name: PyCharm 4 | title_image: https://resources.jetbrains.com/storage/products/pycharm/img/meta/pycharm_logo_300x300.png 5 | title_url: https://www.jetbrains.com/pycharm/ 6 | tags: 7 | topics: 8 | - general 9 | payment_tiers: 10 | - free 11 | - paid 12 | difficulty: 13 | - intermediate 14 | type: 15 | - tool 16 | -------------------------------------------------------------------------------- /pydis_site/apps/resources/resources/talon_voice.yaml: -------------------------------------------------------------------------------- 1 | description: Talon is a tool being built that aims to bring programming, 2 | realtime video gaming, command line, and full desktop computer proficiency to people 3 | who have limited or no use of their hands. 4 | name: Talon Voice 5 | title_url: https://talonvoice.com/ 6 | tags: 7 | topics: 8 | - other 9 | payment_tiers: 10 | - free 11 | difficulty: 12 | - beginner 13 | - intermediate 14 | type: 15 | - tool 16 | -------------------------------------------------------------------------------- /pydis_site/static/images/timeline/cd-icon-movie.svg: -------------------------------------------------------------------------------- 1 | 2 | 4 | 5 | -------------------------------------------------------------------------------- /pydis_site/apps/resources/resources/getting_started_with_python_for_non_programmers.yaml: -------------------------------------------------------------------------------- 1 | description: A list of beginner resources for programmers with no prior developer experience, 2 | from Python's official guide. 3 | name: Getting Started with Python for Non-Programmers 4 | title_url: https://wiki.python.org/moin/BeginnersGuide/NonProgrammers 5 | tags: 6 | topics: 7 | - general 8 | payment_tiers: 9 | - free 10 | difficulty: 11 | - beginner 12 | type: 13 | - tutorial 14 | -------------------------------------------------------------------------------- /pydis_site/apps/resources/resources/getting_started_with_python_for_programmers.yaml: -------------------------------------------------------------------------------- 1 | description: A list of beginner resources for programmers coming from other languages, 2 | from Python's official guide. 3 | name: Getting Started with Python for Programmers 4 | title_url: https://wiki.python.org/moin/BeginnersGuide/Programmers 5 | position: 0 6 | tags: 7 | topics: 8 | - general 9 | payment_tiers: 10 | - free 11 | difficulty: 12 | - intermediate 13 | type: 14 | - tutorial 15 | -------------------------------------------------------------------------------- /pydis_site/apps/resources/resources/the_flask_mega_tutorial.yaml: -------------------------------------------------------------------------------- 1 | description: Miguel Grinberg's fully featured mega-tutorial for learning how to create web applications with the Flask framework. 2 | name: The Flask Mega-Tutorial 3 | title_url: https://blog.miguelgrinberg.com/post/the-flask-mega-tutorial-part-i-hello-world 4 | tags: 5 | topics: 6 | - web development 7 | payment_tiers: 8 | - free 9 | difficulty: 10 | - beginner 11 | - intermediate 12 | type: 13 | - tutorial 14 | -------------------------------------------------------------------------------- /pydis_site/apps/timeline/entries/2020-05-28_python-discord-is-now-listed-on-python-org.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: Python Discord is now listed on python.org/community 3 | date: May 28th, 2020 4 | icon: fa fa-handshake 5 | icon_color: pastel-pink 6 | --- 7 | 8 | After working towards this goal for months, we finally work out an arrangement 9 | with the PSF that allows us to be listed on that most holiest of websites: 10 | https://python.org/. [There was much 11 | rejoicing.](https://youtu.be/yciX2meIkXI?t=3) 12 | -------------------------------------------------------------------------------- /pydis_site/apps/timeline/entries/2020-12-01_advent-of-code.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: Advent of Code attracts hundreds of participants 3 | date: December 1st - 25th, 2020 4 | icon: fa fa-snowflake 5 | icon_color: pastel-red 6 | --- 7 | 8 | A total of 443 Python Discord members sign up to be part of [Eric Wastl's 9 | excellent Advent of Code event](https://adventofcode.com/). As always, we 10 | provide dedicated announcements, scoreboards, bot commands and channels for our 11 | members to enjoy the event in. 12 | -------------------------------------------------------------------------------- /pydis_site/apps/timeline/entries/2023-01-30_retirement-of-joe-and-sebastiaan.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: Retirement of Joe and Sebastiaan 3 | date: Jan 30th, 2023 4 | icon: pydis 5 | --- 6 | 7 | Having been at the helm of Python Discord for over 5 and 3 years respectively, 8 | Joe and Sebastiaan retire and step down. They gain the @Founders role and 9 | continue as advisors to the @Directors, the new name of the original @Owners 10 | role. 11 | 12 | At the same time, Mina and Zig join Leon as co-directors. 13 | -------------------------------------------------------------------------------- /pydis_site/apps/home/templatetags/extra_filters.py: -------------------------------------------------------------------------------- 1 | from django import template 2 | 3 | register = template.Library() 4 | 5 | 6 | @register.filter 7 | def starts_with(value: str, arg: str) -> bool: 8 | """ 9 | Simple filter for checking if a string value starts with another string. 10 | 11 | Usage: 12 | 13 | ```django 14 | {% if request.url | starts_with:"/events" %} 15 | ... 16 | {% endif %} 17 | ``` 18 | """ 19 | return value.startswith(arg) 20 | -------------------------------------------------------------------------------- /pydis_site/apps/timeline/entries/2022-11-25_switch-to-forum-based-help-system.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: Switch to forum-based help system 3 | date: Nov 25th, 2022 4 | icon: fa fa-comments 5 | icon_color: pastel-pink 6 | --- 7 | 8 | We migrate our help system to use a forum channel, retiring our home-grown 9 | rotating help system after 3 years of service and nearly 500,000 help sessions. 10 | Forum channels offer a better experience as members can create their own 11 | dedicated thread in a discoverable place. 12 | -------------------------------------------------------------------------------- /pydis_site/apps/api/migrations/0041_add_default_ordering_deleted_messages.py: -------------------------------------------------------------------------------- 1 | # Generated by Django 2.2.3 on 2019-09-12 16:13 2 | 3 | from django.db import migrations 4 | 5 | 6 | class Migration(migrations.Migration): 7 | 8 | dependencies = [ 9 | ('api', '0040_allow_special_off_topic_name_chars'), 10 | ] 11 | 12 | operations = [ 13 | migrations.AlterModelOptions( 14 | name='deletedmessage', 15 | options={'ordering': ['id']}, 16 | ), 17 | ] 18 | -------------------------------------------------------------------------------- /pydis_site/apps/api/migrations/0042_infraction_add_default_ordering.py: -------------------------------------------------------------------------------- 1 | # Generated by Django 2.2.3 on 2019-09-17 14:07 2 | 3 | from django.db import migrations 4 | 5 | 6 | class Migration(migrations.Migration): 7 | 8 | dependencies = [ 9 | ('api', '0041_add_default_ordering_deleted_messages'), 10 | ] 11 | 12 | operations = [ 13 | migrations.AlterModelOptions( 14 | name='infraction', 15 | options={'ordering': ['-inserted_at']}, 16 | ), 17 | ] 18 | -------------------------------------------------------------------------------- /pydis_site/apps/timeline/entries/2022-02-02_smarter-resources.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: Deployment of Smarter Resources 3 | date: Feb 2nd, 2022 4 | icon: fa fa-code 5 | icon_color: pastel-red 6 | --- 7 | 8 | We gave our resources pages some much needed love and [reorganised them into a 9 | single page](https://www.pythondiscord.com/resources/), complete with a shiny 10 | new resource filter that allows you to more quickly find ones that relate to 11 | your interests, experience, learning style, and ability to pay! 12 | -------------------------------------------------------------------------------- /.gitattributes: -------------------------------------------------------------------------------- 1 | # Declare files that will always have LF line endings on checkout 2 | # This prevents git on Windows from automatically inserting CRLF line endings 3 | * text=auto eol=lf 4 | 5 | # Specifically declare known binary files to avoid problems with Git versions 6 | # before 2.10, where the 'eol' setting has higher priority than 'text=auto', 7 | # causing binary files to get normalized and corrupted otherwise. 8 | # See e.g. https://stackoverflow.com/a/38588882/4464570 9 | *.png binary 10 | *.whl binary 11 | -------------------------------------------------------------------------------- /pydis_site/apps/resources/resources/nedbat_project_ideas.yaml: -------------------------------------------------------------------------------- 1 | description: A repository of project ideas to help one apply what they're learning, maintained by Python 2 | community member Ned Batchelder, known on Python Discord as nedbat. 3 | name: Ned Batchelder's Kindling Projects 4 | title_url: https://nedbatchelder.com/text/kindling.html 5 | tags: 6 | topics: 7 | - general 8 | payment_tiers: 9 | - free 10 | difficulty: 11 | - beginner 12 | - intermediate 13 | type: 14 | - practice 15 | -------------------------------------------------------------------------------- /pydis_site/apps/resources/resources/python_org.yaml: -------------------------------------------------------------------------------- 1 | name: The Python Tutorial 2 | description: The official Python tutorial by Python.org 3 | title_image: https://www.python.org/static/community_logos/python-logo-master-v3-TM.png 4 | title_image_dark: /static/images/resources_dark/python.png 5 | title_url: https://docs.python.org/3/tutorial/ 6 | tags: 7 | topics: 8 | - general 9 | payment_tiers: 10 | - free 11 | difficulty: 12 | - beginner 13 | - intermediate 14 | type: 15 | - tutorial 16 | -------------------------------------------------------------------------------- /pydis_site/apps/timeline/entries/2019-04-08_15000-members.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: PyDis hits 15,000 members; the “hot ones special” video is released 3 | date: Apr 8th, 2019 4 | icon: fa fa-users 5 | icon_color: pastel-dark-blue 6 | --- 7 | 8 |
9 | 10 |
11 | -------------------------------------------------------------------------------- /pydis_site/apps/content/resources/privacy.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: Privacy Policy 3 | description: Our server's privacy policy. 4 | icon: fab fa-discord 5 | --- 6 | 7 | You should be redirected. If you are not, [please click here](https://www.notion.so/pythondiscord/Python-Discord-Privacy-ee2581fea4854ddcb1ebc06c1dbb9fbd). 8 | 9 | 13 | -------------------------------------------------------------------------------- /pydis_site/apps/timeline/entries/2021-07-09_summer-code-jam-2021-cj8.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: Summer Code Jam 2021 (CJ8) 3 | date: July 9, 2021 4 | icon: fa fa-dice 5 | icon_color: pastel-orange 6 | --- 7 | 8 | We host the 8th now-annual Code Jam. Teams had to create a program with an 9 | text-based user interface (TUI), all designed around the theme of “think inside 10 | the box.” Ultimately, 51 teams submitted projects. [The winning submissions are 11 | listed on our website.](https://www.pythondiscord.com/events/code-jams/8/) 12 | -------------------------------------------------------------------------------- /pydis_site/apps/resources/resources/kaggle_pandas_tutorial.yaml: -------------------------------------------------------------------------------- 1 | description: An interactive tutorial for learning Pandas, the most popular library for manipulating tabular data 2 | in Python's data science ecosystem. This tutorial assumes some familiarity with writing code in notebooks. 3 | name: Kaggle Pandas Tutorial 4 | title_url: https://www.kaggle.com/learn/pandas 5 | tags: 6 | topics: 7 | - data science 8 | payment_tiers: 9 | - free 10 | difficulty: 11 | - intermediate 12 | type: 13 | - tutorial 14 | -------------------------------------------------------------------------------- /pydis_site/apps/api/migrations/0045_add_plural_name_for_log_entry.py: -------------------------------------------------------------------------------- 1 | # Generated by Django 2.2.3 on 2019-10-11 17:48 2 | 3 | from django.db import migrations 4 | 5 | 6 | class Migration(migrations.Migration): 7 | 8 | dependencies = [ 9 | ('api', '0044_migrate_nominations_from_infraction_to_nomination_model'), 10 | ] 11 | 12 | operations = [ 13 | migrations.AlterModelOptions( 14 | name='logentry', 15 | options={'verbose_name_plural': 'Log entries'}, 16 | ), 17 | ] 18 | -------------------------------------------------------------------------------- /pydis_site/apps/timeline/entries/2020-04-05_new-help-channel-system.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: The new help channel system is live 3 | date: Apr 5th, 2020 4 | icon: fa fa-comments 5 | icon_color: pastel-green 6 | --- 7 | 8 | We release our dynamic help-channel system, which allows you to claim your very 9 | own help channel instead of fighting over the static help channels. We release a 10 | [Help Channel Guide](https://pythondiscord.com/pages/resources/guides/help- 11 | channels/) to help our members fully understand how the system works. 12 | -------------------------------------------------------------------------------- /pydis_site/apps/resources/resources/mu_editor.yaml: -------------------------------------------------------------------------------- 1 | description: An editor aimed at beginners for the purpose of learning how to code 2 | without the distractions more advanced editors sometimes cause. 3 | Particularly useful for use with microcontrollers, 4 | with built-in tools to interact with Adafruit and Arduino boards. 5 | name: Mu-Editor 6 | title_url: https://codewith.mu/ 7 | tags: 8 | topics: 9 | - microcontrollers 10 | payment_tiers: 11 | - free 12 | difficulty: 13 | - beginner 14 | type: 15 | - tool 16 | -------------------------------------------------------------------------------- /pydis_site/apps/home/tests/test_views.py: -------------------------------------------------------------------------------- 1 | from unittest import mock 2 | 3 | from django.test import TestCase 4 | from django.urls import reverse 5 | 6 | 7 | class TestIndexReturns200(TestCase): 8 | def test_index_returns_200(self): 9 | """Check that the index page returns a HTTP 200 response.""" 10 | url = reverse('home:home') 11 | with mock.patch("pydis_site.apps.home.views.HomeView._get_api_data", autospec=True): 12 | resp = self.client.get(url) 13 | self.assertEqual(resp.status_code, 200) 14 | -------------------------------------------------------------------------------- /pydis_site/static/fontawesome/UPGRADING.md: -------------------------------------------------------------------------------- 1 | # Upgrading Guide 2 | 3 | See the [changelog](https://fontawesome.com/docs/changelog/) for detailed information about what has changed between versions. 4 | 5 | The upgrading guide has moved for version 6 to: 6 | 7 | - [Web](https://fontawesome.com/docs/web/setup/upgrade/) 8 | - [Desktop](https://fontawesome.com/docs/desktop/setup/upgrade/) 9 | 10 | As always, [submit issues](https://github.com/FortAwesome/Font-Awesome/issues/new) that you run into with this guide or with these upgrades to us. 11 | -------------------------------------------------------------------------------- /pydis_site/apps/api/migrations/0019_user_in_guild.py: -------------------------------------------------------------------------------- 1 | # Generated by Django 2.1.3 on 2018-11-19 20:30 2 | 3 | from django.db import migrations, models 4 | 5 | 6 | class Migration(migrations.Migration): 7 | 8 | dependencies = [ 9 | ('api', '0018_user_rename'), 10 | ] 11 | 12 | operations = [ 13 | migrations.AddField( 14 | model_name='user', 15 | name='in_guild', 16 | field=models.BooleanField(default=True, help_text='Whether this user is in our server.'), 17 | ), 18 | ] 19 | -------------------------------------------------------------------------------- /pydis_site/apps/api/migrations/0021_infraction_reason_null.py: -------------------------------------------------------------------------------- 1 | # Generated by Django 2.1.3 on 2018-11-21 00:50 2 | 3 | from django.db import migrations, models 4 | 5 | 6 | class Migration(migrations.Migration): 7 | 8 | dependencies = [ 9 | ('api', '0020_infraction'), 10 | ] 11 | 12 | operations = [ 13 | migrations.AlterField( 14 | model_name='infraction', 15 | name='reason', 16 | field=models.TextField(help_text='The reason for the infraction.', null=True), 17 | ), 18 | ] 19 | -------------------------------------------------------------------------------- /pydis_site/apps/resources/resources/python_graph_gallery.yaml: -------------------------------------------------------------------------------- 1 | description: A collection of hundreds of charts made with Python with their associated reproducible code. 2 | name: Python Graph Gallery 3 | title_url: https://www.python-graph-gallery.com/ 4 | urls: 5 | - icon: branding/github 6 | url: https://github.com/holtzy/The-Python-Graph-Gallery 7 | color: dark 8 | tags: 9 | topics: 10 | - data science 11 | payment_tiers: 12 | - free 13 | difficulty: 14 | - beginner 15 | - intermediate 16 | type: 17 | - tutorial 18 | -------------------------------------------------------------------------------- /pydis_site/apps/resources/urls.py: -------------------------------------------------------------------------------- 1 | from django_distill import distill_path 2 | 3 | from pydis_site.apps.resources.views import ResourceView, ResourceFilterView 4 | 5 | app_name = "resources" 6 | urlpatterns = [ 7 | # Using `distill_path` instead of `path` allows this to be available 8 | # in static preview builds. 9 | distill_path("", ResourceView.as_view(), name="index"), 10 | distill_path("filters", ResourceFilterView.as_view(), name="filters"), 11 | distill_path("/", ResourceView.as_view(), name="index"), 12 | ] 13 | -------------------------------------------------------------------------------- /.coveragerc: -------------------------------------------------------------------------------- 1 | [run] 2 | branch = true 3 | source = 4 | pydis_site 5 | pydis_site/apps/api 6 | pydis_site/apps/home 7 | pydis_site/apps/staff 8 | omit = 9 | */migrations/* 10 | */admin.py 11 | */apps.py 12 | */urls.py 13 | pydis_site/apps/api/models/bot/metricity.py 14 | # GitHub API functions are mocked away 15 | pydis_site/apps/content/utils.py 16 | pydis_site/wsgi.py 17 | pydis_site/settings.py 18 | pydis_site/utils/resources.py 19 | pydis_site/apps/home/views.py 20 | 21 | [report] 22 | fail_under = 100 23 | -------------------------------------------------------------------------------- /pydis_site/apps/resources/resources/getting_started_with_kivy.yaml: -------------------------------------------------------------------------------- 1 | description: A big list of excellent resources for getting started making Kivy applications. 2 | name: Getting Started with Kivy 3 | title_url: https://blog.kivy.org/2019/12/getting-started-with-kivy/ 4 | icon_image: https://raw.githubusercontent.com/kivy/kivy-website/master/content/logos/kivy-logo-black-256.png 5 | tags: 6 | topics: 7 | - user interface 8 | - game development 9 | payment_tiers: 10 | - free 11 | difficulty: 12 | - beginner 13 | type: 14 | - tutorial 15 | -------------------------------------------------------------------------------- /pydis_site/apps/timeline/entries/2018-03-04_pydis-hits-2000-members-pythondiscord-com-and-python-are-live.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: PyDis hits 2,000 members; pythondiscord.com and @Python are live 3 | date: Mar 4th, 2018 4 | icon: fa fa-users 5 | icon_color: pastel-dark-blue 6 | --- 7 | 8 | The public moderation bot we're using at the time, Rowboat, announces it will be 9 | shutting down. We decide that we'll write our own bot to handle moderation, so 10 | that we can have more control over its features. We also buy a domain and start 11 | making a website in Flask. 12 | -------------------------------------------------------------------------------- /pydis_site/apps/api/signals.py: -------------------------------------------------------------------------------- 1 | from django.db.models.signals import post_delete 2 | from django.dispatch import receiver 3 | 4 | from pydis_site.apps.api.models.bot import Role, User 5 | 6 | 7 | @receiver(signal=post_delete, sender=Role) 8 | def delete_role_from_user(sender: Role, instance: Role, **kwargs) -> None: 9 | """Unassigns the Role (instance) that is being deleted from every user that has it.""" 10 | for user in User.objects.filter(roles__contains=[instance.id]): 11 | del user.roles[user.roles.index(instance.id)] 12 | user.save() 13 | -------------------------------------------------------------------------------- /pydis_site/apps/api/migrations/0011_auto_20181020_1904.py: -------------------------------------------------------------------------------- 1 | # Generated by Django 2.1.2 on 2018-10-20 19:04 2 | 3 | from django.db import migrations, models 4 | 5 | 6 | class Migration(migrations.Migration): 7 | 8 | dependencies = [ 9 | ('api', '0010_snakeidiom'), 10 | ] 11 | 12 | operations = [ 13 | migrations.AlterField( 14 | model_name='snakeidiom', 15 | name='idiom', 16 | field=models.CharField(help_text='A saying about a snake.', max_length=140, primary_key=True, serialize=False), 17 | ), 18 | ] 19 | -------------------------------------------------------------------------------- /pydis_site/apps/api/migrations/0085_add_thread_id_to_nominations.py: -------------------------------------------------------------------------------- 1 | # Generated by Django 4.1.2 on 2022-11-12 14:52 2 | 3 | from django.db import migrations, models 4 | 5 | 6 | class Migration(migrations.Migration): 7 | 8 | dependencies = [ 9 | ('api', '0084_infraction_last_applied'), 10 | ] 11 | 12 | operations = [ 13 | migrations.AddField( 14 | model_name='nomination', 15 | name='thread_id', 16 | field=models.BigIntegerField(help_text="The nomination vote's thread id.", null=True), 17 | ), 18 | ] 19 | -------------------------------------------------------------------------------- /pydis_site/apps/api/viewsets/bot/bot_setting.py: -------------------------------------------------------------------------------- 1 | from rest_framework.mixins import RetrieveModelMixin, UpdateModelMixin 2 | from rest_framework.viewsets import GenericViewSet 3 | 4 | from pydis_site.apps.api.models.bot.bot_setting import BotSetting 5 | from pydis_site.apps.api.serializers import BotSettingSerializer 6 | 7 | 8 | class BotSettingViewSet(RetrieveModelMixin, UpdateModelMixin, GenericViewSet): 9 | """View providing update operations on bot setting routes.""" 10 | 11 | serializer_class = BotSettingSerializer 12 | queryset = BotSetting.objects.all() 13 | -------------------------------------------------------------------------------- /pydis_site/apps/timeline/entries/2021-05-24_inaugural-run-of-pixels.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: Inaugural run of Pixels 3 | date: May 24, 2021 4 | icon: fa fa-palette 5 | icon_color: pastel-purple 6 | --- 7 | 8 | Inspired by the subreddit, r/place, Pixels was our collaborative canvas event 9 | held between May 25 to June 14, providing a beginner-friendly API to paint 10 | pixels on a virtual canvas. 11 | 12 | Later, we released [a blog 13 | post](https://blog.pythondiscord.com/pixels-summer-2021/) summarizing what 14 | happened, our motives, and some stories from during development. 15 | -------------------------------------------------------------------------------- /pydis_site/apps/api/tests/test_healthcheck.py: -------------------------------------------------------------------------------- 1 | from django.urls import reverse 2 | 3 | from .base import AuthenticatedAPITestCase 4 | 5 | 6 | class UnauthedHealthcheckAPITests(AuthenticatedAPITestCase): 7 | def setUp(self): 8 | super().setUp() 9 | self.client.force_authenticate(user=None) 10 | 11 | def test_can_access_healthcheck_view(self): 12 | url = reverse('api:healthcheck') 13 | response = self.client.get(url) 14 | 15 | self.assertEqual(response.status_code, 200) 16 | self.assertEqual(response.json(), {'status': 'ok'}) 17 | -------------------------------------------------------------------------------- /pydis_site/apps/api/migrations/0050_remove_infractions_active_default_value.py: -------------------------------------------------------------------------------- 1 | # Generated by Django 2.2.6 on 2020-02-08 19:00 2 | 3 | from django.db import migrations, models 4 | 5 | 6 | class Migration(migrations.Migration): 7 | 8 | dependencies = [ 9 | ('api', '0049_deletedmessage_attachments'), 10 | ] 11 | 12 | operations = [ 13 | migrations.AlterField( 14 | model_name='infraction', 15 | name='active', 16 | field=models.BooleanField(help_text='Whether the infraction is still active.'), 17 | ), 18 | ] 19 | -------------------------------------------------------------------------------- /pydis_site/apps/api/migrations/0063_Allow_blank_or_null_for_nomination_reason.py: -------------------------------------------------------------------------------- 1 | # Generated by Django 3.0.9 on 2020-09-11 21:06 2 | 3 | from django.db import migrations, models 4 | 5 | 6 | class Migration(migrations.Migration): 7 | 8 | dependencies = [ 9 | ('api', '0062_merge_20200901_1459'), 10 | ] 11 | 12 | operations = [ 13 | migrations.AlterField( 14 | model_name='nomination', 15 | name='reason', 16 | field=models.TextField(blank=True, help_text='Why this user was nominated.', null=True), 17 | ), 18 | ] 19 | -------------------------------------------------------------------------------- /pydis_site/apps/api/migrations/0074_reminder_failures.py: -------------------------------------------------------------------------------- 1 | # Generated by Django 3.0.14 on 2021-10-27 17:44 2 | 3 | from django.db import migrations, models 4 | 5 | 6 | class Migration(migrations.Migration): 7 | 8 | dependencies = [ 9 | ('api', '0073_otn_allow_GT_and_LT'), 10 | ] 11 | 12 | operations = [ 13 | migrations.AddField( 14 | model_name='reminder', 15 | name='failures', 16 | field=models.IntegerField(default=0, help_text='Number of times we attempted to send the reminder and failed.'), 17 | ), 18 | ] 19 | -------------------------------------------------------------------------------- /pydis_site/apps/api/migrations/0075_infraction_dm_sent.py: -------------------------------------------------------------------------------- 1 | # Generated by Django 3.0.14 on 2021-11-10 22:06 2 | 3 | from django.db import migrations, models 4 | 5 | 6 | class Migration(migrations.Migration): 7 | 8 | dependencies = [ 9 | ('api', '0074_reminder_failures'), 10 | ] 11 | 12 | operations = [ 13 | migrations.AddField( 14 | model_name='infraction', 15 | name='dm_sent', 16 | field=models.BooleanField(help_text='Whether a DM was sent to the user when infraction was applied.', null=True), 17 | ), 18 | ] 19 | -------------------------------------------------------------------------------- /pydis_site/apps/api/migrations/0092_remove_redirect_filter_list.py: -------------------------------------------------------------------------------- 1 | from django.db import migrations 2 | from django.apps.registry import Apps 3 | from django.db.backends.base.schema import BaseDatabaseSchemaEditor 4 | 5 | 6 | def forward(apps: Apps, _: BaseDatabaseSchemaEditor) -> None: 7 | apps.get_model("api", "FilterList").objects.filter(name="redirect").delete() 8 | 9 | 10 | class Migration(migrations.Migration): 11 | 12 | dependencies = [ 13 | ("api", "0091_antispam_filter_list"), 14 | ] 15 | 16 | operations = [migrations.RunPython(forward, elidable=True)] 17 | -------------------------------------------------------------------------------- /pydis_site/apps/staff/migrations/0002_add_is_staff_to_role_mappings.py: -------------------------------------------------------------------------------- 1 | # Generated by Django 2.2.6 on 2019-10-20 14:19 2 | 3 | from django.db import migrations, models 4 | 5 | 6 | class Migration(migrations.Migration): 7 | 8 | dependencies = [ 9 | ('staff', '0001_initial'), 10 | ] 11 | 12 | operations = [ 13 | migrations.AddField( 14 | model_name='rolemapping', 15 | name='is_staff', 16 | field=models.BooleanField(default=False, help_text='Whether this role mapping relates to a Django staff group'), 17 | ), 18 | ] 19 | -------------------------------------------------------------------------------- /pydis_site/apps/timeline/entries/2023-07-11_new-paste-service.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: Switch to new paste service 3 | date: Jul 11th, 2023 4 | icon: fa-solid fa-clipboard 5 | icon_color: pastel-pink 6 | --- 7 | 8 | We migrate over to [pinnwand](https://github.com/supakeen/pinnwand) as the 9 | service that powers our paste bin over at 10 | [https://paste.pythondiscord.com/](https://paste.pythondiscord.com). We made the 11 | switch as it comes with native light/dark modes, support for multi-file pastes, 12 | additional support for text highlighting languages, and plus, it's written in 13 | Python! 14 | -------------------------------------------------------------------------------- /pydis_site/apps/home/migrations/0002_auto_now_on_repository_metadata.py: -------------------------------------------------------------------------------- 1 | # Generated by Django 3.0.11 on 2020-12-21 22:57 2 | 3 | from django.db import migrations, models 4 | 5 | 6 | class Migration(migrations.Migration): 7 | 8 | dependencies = [ 9 | ('home', '0001_initial'), 10 | ] 11 | 12 | operations = [ 13 | migrations.AlterField( 14 | model_name='repositorymetadata', 15 | name='last_updated', 16 | field=models.DateTimeField(auto_now=True, help_text='The date and time this data was last fetched.'), 17 | ), 18 | ] 19 | -------------------------------------------------------------------------------- /pydis_site/apps/timeline/entries/2021-02-08_we-release-the-pep-8-song.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: We release The PEP 8 song 3 | date: February 8th, 2021 4 | icon: fa fa-music 5 | icon_color: pastel-blue 6 | --- 7 | 8 | We release the PEP 8 song on our YouTube channel, which finds tens of thousands 9 | of listeners! 10 | 11 |
12 | 14 |
15 | -------------------------------------------------------------------------------- /pydis_site/apps/api/migrations/0001_initial.py: -------------------------------------------------------------------------------- 1 | # Generated by Django 2.1 on 2018-08-15 17:28 2 | 3 | from django.db import migrations, models 4 | 5 | 6 | class Migration(migrations.Migration): 7 | 8 | initial = True 9 | 10 | dependencies = [ 11 | ] 12 | 13 | operations = [ 14 | migrations.CreateModel( 15 | name='SnakeName', 16 | fields=[ 17 | ('name', models.CharField(max_length=100, primary_key=True, serialize=False)), 18 | ('scientific', models.CharField(max_length=150)), 19 | ], 20 | ), 21 | ] 22 | -------------------------------------------------------------------------------- /pydis_site/apps/api/migrations/0028_allow_message_content_blank.py: -------------------------------------------------------------------------------- 1 | # Generated by Django 2.1.5 on 2019-01-20 09:41 2 | 3 | from django.db import migrations, models 4 | 5 | 6 | class Migration(migrations.Migration): 7 | 8 | dependencies = [ 9 | ('api', '0027_merge_20190120_0852'), 10 | ] 11 | 12 | operations = [ 13 | migrations.AlterField( 14 | model_name='deletedmessage', 15 | name='content', 16 | field=models.CharField(blank=True, help_text='The content of this message, taken from Discord.', max_length=2000), 17 | ), 18 | ] 19 | -------------------------------------------------------------------------------- /pydis_site/apps/api/migrations/0071_increase_message_content_4000.py: -------------------------------------------------------------------------------- 1 | # Generated by Django 3.0.14 on 2021-06-24 14:45 2 | 3 | from django.db import migrations, models 4 | 5 | 6 | class Migration(migrations.Migration): 7 | 8 | dependencies = [ 9 | ('api', '0070_auto_20210618_2114'), 10 | ] 11 | 12 | operations = [ 13 | migrations.AlterField( 14 | model_name='deletedmessage', 15 | name='content', 16 | field=models.CharField(blank=True, help_text='The content of this message, taken from Discord.', max_length=4000), 17 | ), 18 | ] 19 | -------------------------------------------------------------------------------- /pydis_site/apps/timeline/entries/2018-10-01_first-hacktoberfest-pydis-event.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: First Hacktoberfest PyDis event; @Sir Lancebot is created 3 | date: Oct 1st, 2018 4 | icon: fa fa-dice 5 | icon_color: pastel-blue 6 | --- 7 | 8 | We create a second bot for our community and fill it up with simple, fun and 9 | relatively easy issues. The idea is to create an approachable arena for our 10 | members to cut their open-source teeth on, and to provide lots of help and hand- 11 | holding for those who get stuck. We're training our members to be productive 12 | contributors in the open-source ecosystem. 13 | -------------------------------------------------------------------------------- /.github/workflows/sentry-release.yaml: -------------------------------------------------------------------------------- 1 | name: Create Sentry release 2 | 3 | on: 4 | workflow_call 5 | 6 | jobs: 7 | createSentryRelease: 8 | runs-on: ubuntu-latest 9 | steps: 10 | - name: Checkout code 11 | uses: actions/checkout@v4 12 | 13 | - name: Create a Sentry.io release 14 | uses: getsentry/action-release@v3 15 | env: 16 | SENTRY_AUTH_TOKEN: ${{ secrets.SENTRY_AUTH_TOKEN }} 17 | SENTRY_ORG: python-discord 18 | SENTRY_PROJECT: site 19 | with: 20 | environment: production 21 | version_prefix: site@ 22 | -------------------------------------------------------------------------------- /pydis_site/apps/api/migrations/0015_auto_20181027_1617.py: -------------------------------------------------------------------------------- 1 | # Generated by Django 2.1.2 on 2018-10-27 16:17 2 | 3 | import django.contrib.postgres.fields 4 | from django.db import migrations, models 5 | 6 | 7 | class Migration(migrations.Migration): 8 | 9 | dependencies = [ 10 | ('api', '0014_auto_20181025_1959'), 11 | ] 12 | 13 | operations = [ 14 | migrations.AlterField( 15 | model_name='specialsnake', 16 | name='image', 17 | field=django.contrib.postgres.fields.ArrayField(base_field=models.URLField(), size=None), 18 | ), 19 | ] 20 | -------------------------------------------------------------------------------- /pydis_site/apps/api/migrations/0052_offtopicchannelname_used.py: -------------------------------------------------------------------------------- 1 | # Generated by Django 2.2.11 on 2020-03-30 10:24 2 | 3 | from django.db import migrations, models 4 | 5 | 6 | class Migration(migrations.Migration): 7 | 8 | dependencies = [ 9 | ('api', '0051_create_news_setting'), 10 | ] 11 | 12 | operations = [ 13 | migrations.AddField( 14 | model_name='offtopicchannelname', 15 | name='used', 16 | field=models.BooleanField(default=False, help_text='Whether or not this name has already been used during this rotation'), 17 | ), 18 | ] 19 | -------------------------------------------------------------------------------- /pydis_site/apps/api/migrations/0086_infraction_jump_url.py: -------------------------------------------------------------------------------- 1 | # Generated by Django 4.1.7 on 2023-03-10 17:25 2 | 3 | from django.db import migrations, models 4 | 5 | 6 | class Migration(migrations.Migration): 7 | 8 | dependencies = [ 9 | ('api', '0085_add_thread_id_to_nominations'), 10 | ] 11 | 12 | operations = [ 13 | migrations.AddField( 14 | model_name='infraction', 15 | name='jump_url', 16 | field=models.URLField(default=None, help_text='The jump url to message invoking the infraction.', max_length=88, null=True), 17 | ), 18 | ] 19 | -------------------------------------------------------------------------------- /pydis_site/apps/timeline/entries/2018-05-21_privacy-policy-created.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: The privacy policy is created 3 | date: May 21st, 2018 4 | icon: fa fa-scroll 5 | icon_color: pastel-lime 6 | --- 7 | 8 | Since data privacy is quite important to us, we create a privacy page pretty 9 | much as soon as our new bot and site starts collecting some data. To this day, 10 | we keep [our privacy policy](https://pythondiscord.com/pages/privacy/) up to 11 | date with all changes, and since April 2020 we've started doing [monthly data 12 | reviews](https://pythondiscord.notion.site/6784e3a9752444e89d19e65fd4510d8d). 13 | -------------------------------------------------------------------------------- /pydis_site/apps/resources/resources/code_combat.yaml: -------------------------------------------------------------------------------- 1 | description: Learn Python while gaming - an open-source project with thousands of 2 | contributors, which teaches you Python through a deep, top-down RPG. 3 | name: Code Combat 4 | title_url: https://codecombat.com/ 5 | urls: 6 | - icon: branding/github 7 | url: https://github.com/codecombat/codecombat 8 | color: dark 9 | tags: 10 | topics: 11 | - general 12 | - algorithms and data structures 13 | payment_tiers: 14 | - free 15 | - subscription 16 | difficulty: 17 | - beginner 18 | - intermediate 19 | type: 20 | - interactive 21 | -------------------------------------------------------------------------------- /pydis_site/templates/events/sidebar/revivalofcode.html: -------------------------------------------------------------------------------- 1 |
2 |
3 | Server icon for Advent of Code 4 |
5 | 6 | 10 |
11 | -------------------------------------------------------------------------------- /pydis_site/apps/api/migrations/0048_add_infractions_unique_constraints_active.py: -------------------------------------------------------------------------------- 1 | # Generated by Django 2.2.6 on 2019-10-07 18:27 2 | 3 | from django.db import migrations, models 4 | 5 | 6 | class Migration(migrations.Migration): 7 | 8 | dependencies = [ 9 | ('api', '0047_active_infractions_migration'), 10 | ] 11 | 12 | operations = [ 13 | migrations.AddConstraint( 14 | model_name='infraction', 15 | constraint=models.UniqueConstraint(condition=models.Q(active=True), fields=('user', 'type'), name='unique_active_infraction_per_type_per_user'), 16 | ), 17 | ] 18 | -------------------------------------------------------------------------------- /pydis_site/apps/resources/resources/the_real_python_podcast.yaml: -------------------------------------------------------------------------------- 1 | description: A weekly Python podcast hosted by Christopher Bailey with interviews, 2 | coding tips, and conversation with guests from the Python community. 3 | The show covers a wide range of topics including Python programming best practices, 4 | career tips, and related software development topics. 5 | name: The Real Python Podcast 6 | title_url: https://realpython.com/podcasts/rpp/ 7 | tags: 8 | topics: 9 | - general 10 | payment_tiers: 11 | - free 12 | difficulty: 13 | - beginner 14 | - intermediate 15 | type: 16 | - podcast 17 | -------------------------------------------------------------------------------- /pydis_site/templates/events/sidebar/adventofcode/useful-links.html: -------------------------------------------------------------------------------- 1 |
2 |
3 | Server icon for Advent of Code 4 |
5 | 6 | 10 |
11 | -------------------------------------------------------------------------------- /.github/PULL_REQUEST_TEMPLATE/pull_request.md: -------------------------------------------------------------------------------- 1 | ## Summary 2 | 3 | 4 | 5 | ## Description of changes 6 | 7 | 8 | 9 | ### I confirm I have: 10 | 11 | - [ ] Joined the [Python Discord community](discord.gg/python) 12 | - [ ] Read the [Code of Conduct](https://www.pydis.com/pages/code-of-conduct) and agree to it 13 | - [ ] I have discussed implementing this feature on the relevant service (Discord, GitHub, etc.) 14 | -------------------------------------------------------------------------------- /pydis_site/apps/resources/resources/hitchhikers_guide_to_python.yaml: -------------------------------------------------------------------------------- 1 | description: A best practice handbook for both novice and expert Python developers to the installation, 2 | configuration, and usage of Python on a daily basis. 3 | name: The Hitchhiker's Guide to Python 4 | title_url: https://python-guide.org/ 5 | urls: 6 | - icon: branding/goodreads 7 | url: https://www.goodreads.com/book/show/28321007-the-hitchhiker-s-guide-to-python 8 | color: dark 9 | tags: 10 | topics: 11 | - general 12 | payment_tiers: 13 | - paid 14 | difficulty: 15 | - beginner 16 | - intermediate 17 | type: 18 | - book 19 | -------------------------------------------------------------------------------- /pydis_site/apps/resources/resources/inferential_thinking.yaml: -------------------------------------------------------------------------------- 1 | description: Inferential Thinking is the textbook for the Foundations of Data Science course at UC Berkley. 2 | It introduces you the fundamentals of both Data Science and Python at a level accessible to all. 3 | It is available both through your browser and in PDF form. 4 | name: Inferential Thinking 5 | title_url: https://inferentialthinking.com/chapters/intro 6 | tags: 7 | topics: 8 | - data science 9 | payment_tiers: 10 | - free 11 | difficulty: 12 | - beginner 13 | - intermediate 14 | type: 15 | - book 16 | -------------------------------------------------------------------------------- /pydis_site/static/favicons/site.webmanifest: -------------------------------------------------------------------------------- 1 | { 2 | "name": "Python Discord", 3 | "short_name": "Python Discord", 4 | "icons": [ 5 | { 6 | "src": "/static/favicons/android-chrome-192x192.png?v=9B9vkE5q7O", 7 | "sizes": "192x192", 8 | "type": "image/png" 9 | }, 10 | { 11 | "src": "/static/favicons/android-chrome-512x512.png?v=9B9vkE5q7O", 12 | "sizes": "512x512", 13 | "type": "image/png" 14 | } 15 | ], 16 | "theme_color": "#7289da", 17 | "background_color": "#7289da", 18 | "display": "standalone" 19 | } 20 | -------------------------------------------------------------------------------- /pydis_site/apps/resources/resources/mit_introduction_to_computer_science_and_programming.yaml: -------------------------------------------------------------------------------- 1 | description: This MITx offering teaches computer science with Python. 2 | It covers computational thinking, algorithms, data structures 3 | and the Python programming language itself. 4 | name: 'MIT: Introduction to Computer Science and Programming' 5 | title_url: https://www.edx.org/course/introduction-computer-science-mitx-6-00-1x-11 6 | tags: 7 | topics: 8 | - general 9 | - algorithms and data structures 10 | payment_tiers: 11 | - free 12 | - paid 13 | difficulty: 14 | - beginner 15 | type: 16 | - course 17 | -------------------------------------------------------------------------------- /pydis_site/apps/timeline/entries/2018-03-23_first-code-jam-with-the-theme-snakes.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: First code jam with the theme “snakes” 3 | date: Mar 23rd, 2018 4 | icon: fa fa-dice 5 | icon_color: pastel-blue 6 | --- 7 | 8 | Our very first Code Jam attracts a handful of users who work in random teams of 9 | 2. We ask our participants to write a snake-themed Discord bot. Most of the code 10 | written for this jam still lives on in Sir Lancebot, and you can play with it by 11 | using the `.snakes` command. For more information on this event, see [the event 12 | page](https://pythondiscord.com/pages/code-jams/code-jam-1-snakes-bot/) 13 | -------------------------------------------------------------------------------- /pydis_site/apps/timeline/entries/2021-03-21_summer-code-jam-2020-highlights.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: Summer Code Jam 2020 Highlights 3 | date: Mar 21st, 2021 4 | icon: fab fa-youtube 5 | icon_color: pastel-red 6 | --- 7 | 8 | We release a new video to our YouTube showing the best projects from the Summer 9 | Code Jam 2020. Better late than never! 10 | 11 |
12 | 15 |
16 | -------------------------------------------------------------------------------- /pydis_site/apps/api/migrations/0046_reminder_jump_url.py: -------------------------------------------------------------------------------- 1 | # Generated by Django 2.2.6 on 2019-10-21 14:46 2 | 3 | from django.db import migrations, models 4 | 5 | 6 | class Migration(migrations.Migration): 7 | 8 | dependencies = [ 9 | ('api', '0045_add_plural_name_for_log_entry'), 10 | ] 11 | 12 | operations = [ 13 | migrations.AddField( 14 | model_name='reminder', 15 | name='jump_url', 16 | field=models.URLField(default='', help_text='The jump url to the message that created the reminder', max_length=88), 17 | preserve_default=False, 18 | ), 19 | ] 20 | -------------------------------------------------------------------------------- /pydis_site/apps/resources/resources/missing-semester.yaml: -------------------------------------------------------------------------------- 1 | description: This course covers the fundamental but often overlooked skills that programmers use everyday, 2 | such as using the shell, the command-line environment, and using the modal text editors like vim. 3 | The course structure allows you to focus on the topics you want to and skip ones you don't think are relevant. 4 | name: The Missing Semester of Your CS Education 5 | title_url: https://missing.csail.mit.edu/ 6 | tags: 7 | topics: 8 | - general 9 | - other 10 | payment_tiers: 11 | - free 12 | difficulty: 13 | - beginner 14 | type: 15 | - course 16 | -------------------------------------------------------------------------------- /pydis_site/apps/api/migrations/0013_specialsnake_image.py: -------------------------------------------------------------------------------- 1 | # Generated by Django 2.1.2 on 2018-10-23 11:51 2 | 3 | import datetime 4 | from django.db import migrations, models 5 | 6 | 7 | class Migration(migrations.Migration): 8 | 9 | dependencies = [ 10 | ('api', '0012_specialsnake'), 11 | ] 12 | 13 | operations = [ 14 | migrations.AddField( 15 | model_name='specialsnake', 16 | name='image', 17 | field=models.URLField(default=datetime.datetime(2018, 10, 23, 11, 51, 23, 703868, tzinfo=datetime.timezone.utc)), 18 | preserve_default=False, 19 | ), 20 | ] 21 | -------------------------------------------------------------------------------- /pydis_site/apps/resources/resources/python_discord_videos.yaml: -------------------------------------------------------------------------------- 1 | name: Python Discord YouTube Channel 2 | description: It's our YouTube channel! We are slowly gathering content here directly related to Python, 3 | our community and the events we host. Come check us out! 4 | title_image: https://raw.githubusercontent.com/python-discord/branding/master/logos/logo_banner/logo_site_banner_dark_512.png 5 | title_url: https://www.youtube.com/pythondiscord 6 | tags: 7 | topics: 8 | - general 9 | - software design 10 | payment_tiers: 11 | - free 12 | difficulty: 13 | - beginner 14 | - intermediate 15 | type: 16 | - video 17 | -------------------------------------------------------------------------------- /pydis_site/apps/resources/resources/effective_python.yaml: -------------------------------------------------------------------------------- 1 | description: A book that gives 90 best practices for writing excellent Python. Great 2 | for intermediates. 3 | name: Effective Python 4 | title_url: https://effectivepython.com/ 5 | urls: 6 | - icon: branding/goodreads 7 | url: https://www.goodreads.com/book/show/48566725-effective-python 8 | color: dark 9 | - icon: branding/github 10 | url: https://github.com/bslatkin/effectivepython 11 | color: dark 12 | tags: 13 | topics: 14 | - general 15 | - software design 16 | payment_tiers: 17 | - paid 18 | difficulty: 19 | - intermediate 20 | type: 21 | - book 22 | -------------------------------------------------------------------------------- /pydis_site/apps/timeline/entries/2018-06-09_do-you-even-python-and-pydis-merger.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: Do You Even Python and PyDis merger 3 | date: Jun 9th, 2018 4 | icon: fa fa-handshake 5 | icon_color: pastel-pink 6 | --- 7 | 8 | At this point in time, there are only two serious Python communities on Discord 9 | - Ours, and one called Do You Even Python. We approach the owners of DYEP with a 10 | bold proposal - let's shut down their community, replace it with links to ours, 11 | and in return we will let their staff join our staff. This gives us a big boost 12 | in members, and eventually leads to @eivl and @Mr. Hemlock joining our Admin 13 | team 14 | -------------------------------------------------------------------------------- /pydis_site/apps/resources/resources/Python_Developers_Community.yaml: -------------------------------------------------------------------------------- 1 | description: A LinkedIn group for both experienced developers and people that want to start learning and using the Python programming language. Discover best practices, tips & tricks, share learning resources and other technical content, showcase your projects & repo's and ask questions or feedback. 2 | name: Python Developers Community (moderated) on LinkedIn 3 | title_url: https://www.linkedin.com/groups/25827/ 4 | tags: 5 | topics: 6 | - general 7 | payment_tiers: 8 | - free 9 | difficulty: 10 | - beginner 11 | - intermediate 12 | type: 13 | - community 14 | -------------------------------------------------------------------------------- /pydis_site/apps/timeline/entries/2021-03-13_teaching-python-podcast.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: We're on the Teaching Python podcast! 3 | date: Mar 13th, 2021 4 | icon: fa fa-microphone 5 | icon_color: pastel-pink 6 | --- 7 | 8 | Leon joins Sean and Kelly on the Teaching Python podcast to discuss how the 9 | pandemic has changed the way we learn, and what role communities like Python 10 | Discord can play in this new world. You can find the episode [at 11 | teachingpython.fm](https://www.teachingpython.fm/63). 12 | 13 | 15 | -------------------------------------------------------------------------------- /pydis_site/templates/base/footer.html: -------------------------------------------------------------------------------- 1 | 8 | -------------------------------------------------------------------------------- /pydis_site/apps/api/migrations/0017_auto_20181029_1921.py: -------------------------------------------------------------------------------- 1 | # Generated by Django 2.1.2 on 2018-10-29 19:21 2 | 3 | import django.contrib.postgres.fields 4 | from django.db import migrations, models 5 | 6 | 7 | class Migration(migrations.Migration): 8 | 9 | dependencies = [ 10 | ('api', '0016_auto_20181027_1619'), 11 | ] 12 | 13 | operations = [ 14 | migrations.AlterField( 15 | model_name='specialsnake', 16 | name='images', 17 | field=django.contrib.postgres.fields.ArrayField(base_field=models.URLField(), help_text='Images displaying this special snake.', size=None), 18 | ), 19 | ] 20 | -------------------------------------------------------------------------------- /pydis_site/apps/resources/resources/real_python.yaml: -------------------------------------------------------------------------------- 1 | name: Real Python 2 | description: Dan Bader's treasure trove of quizzes, tutorials and interactive content for learning Python. 3 | An absolute goldmine. 4 | title_image: https://i.imgur.com/WDqhZ36.png 5 | title_url: https://realpython.com/ 6 | position: 3 7 | urls: 8 | - icon: branding/youtube 9 | url: https://www.youtube.com/channel/UCI0vQvr9aFn27yR6Ej6n5UA 10 | color: youtube-red 11 | tags: 12 | topics: 13 | - general 14 | payment_tiers: 15 | - free 16 | difficulty: 17 | - beginner 18 | - intermediate 19 | type: 20 | - tutorial 21 | - video 22 | - community 23 | -------------------------------------------------------------------------------- /pydis_site/apps/api/migrations/0025_allow_custom_inserted_at_infraction_field.py: -------------------------------------------------------------------------------- 1 | # Generated by Django 2.1.4 on 2019-01-06 16:01 2 | 3 | from django.db import migrations, models 4 | from django.utils import timezone 5 | 6 | 7 | class Migration(migrations.Migration): 8 | 9 | dependencies = [ 10 | ('api', '0024_add_note_infraction_type'), 11 | ] 12 | 13 | operations = [ 14 | migrations.AlterField( 15 | model_name='infraction', 16 | name='inserted_at', 17 | field=models.DateTimeField(default=timezone.now, help_text='The date and time of the creation of this infraction.'), 18 | ), 19 | ] 20 | -------------------------------------------------------------------------------- /pydis_site/apps/api/migrations/0095_user_display_name.py: -------------------------------------------------------------------------------- 1 | # Generated by Django 5.0.3 on 2024-04-01 12:21 2 | 3 | from django.db import migrations, models 4 | 5 | 6 | class Migration(migrations.Migration): 7 | dependencies = [ 8 | ("api", "0094_migrate_mailing_listdata"), 9 | ] 10 | 11 | operations = [ 12 | migrations.AddField( 13 | model_name="user", 14 | name="display_name", 15 | field=models.CharField(blank=True, help_text="The display name, taken from Discord.", max_length=32), 16 | ), 17 | migrations.RunSQL("UPDATE api_user SET display_name = name;", elidable=True), 18 | ] 19 | -------------------------------------------------------------------------------- /pydis_site/apps/api/migrations/0002_documentationlink.py: -------------------------------------------------------------------------------- 1 | # Generated by Django 2.1 on 2018-08-16 19:42 2 | 3 | from django.db import migrations, models 4 | 5 | 6 | class Migration(migrations.Migration): 7 | 8 | dependencies = [ 9 | ('api', '0001_initial'), 10 | ] 11 | 12 | operations = [ 13 | migrations.CreateModel( 14 | name='DocumentationLink', 15 | fields=[ 16 | ('package', models.CharField(max_length=50, primary_key=True, serialize=False)), 17 | ('base_url', models.URLField()), 18 | ('inventory_url', models.URLField()), 19 | ], 20 | ), 21 | ] 22 | -------------------------------------------------------------------------------- /pydis_site/apps/api/migrations/0022_infraction_remove_note.py: -------------------------------------------------------------------------------- 1 | # Generated by Django 2.1.3 on 2018-11-21 21:07 2 | 3 | from django.db import migrations, models 4 | 5 | 6 | class Migration(migrations.Migration): 7 | 8 | dependencies = [ 9 | ('api', '0021_infraction_reason_null'), 10 | ] 11 | 12 | operations = [ 13 | migrations.AlterField( 14 | model_name='infraction', 15 | name='type', 16 | field=models.CharField(choices=[('warning', 'Warning'), ('mute', 'Mute'), ('ban', 'Ban'), ('kick', 'Kick'), ('superstar', 'Superstar')], help_text='The type of the infraction.', max_length=9), 17 | ), 18 | ] 19 | -------------------------------------------------------------------------------- /pydis_site/templates/events/sidebar/code-jams/10.html: -------------------------------------------------------------------------------- 1 | {% load static %} 2 |
3 |

Important Links

4 | Rules 5 | Approved Frameworks 6 | The Code Style Guide 7 | 8 |
9 |
10 | logo 11 |
12 | -------------------------------------------------------------------------------- /pydis_site/templates/events/sidebar/code-jams/11.html: -------------------------------------------------------------------------------- 1 | {% load static %} 2 |
3 |

Important Links

4 | Rules 5 | Approved Frameworks 6 | The Code Style Guide 7 | 8 |
9 |
10 | logo 11 |
12 | -------------------------------------------------------------------------------- /pydis_site/apps/api/migrations/0003_offtopicchannelname.py: -------------------------------------------------------------------------------- 1 | # Generated by Django 2.1 on 2018-08-31 22:21 2 | 3 | import django.core.validators 4 | from django.db import migrations, models 5 | 6 | 7 | class Migration(migrations.Migration): 8 | 9 | dependencies = [ 10 | ('api', '0002_documentationlink'), 11 | ] 12 | 13 | operations = [ 14 | migrations.CreateModel( 15 | name='OffTopicChannelName', 16 | fields=[ 17 | ('name', models.CharField(max_length=96, primary_key=True, serialize=False, validators=[django.core.validators.RegexValidator(regex='^[a-z0-9-]+$')])), 18 | ], 19 | ), 20 | ] 21 | -------------------------------------------------------------------------------- /pydis_site/apps/api/migrations/0083_remove_embed_validation.py: -------------------------------------------------------------------------------- 1 | # Generated by Django 3.1.14 on 2022-06-30 09:41 2 | 3 | import django.contrib.postgres.fields 4 | from django.db import migrations, models 5 | 6 | 7 | class Migration(migrations.Migration): 8 | 9 | dependencies = [ 10 | ('api', '0082_otn_allow_big_solidus'), 11 | ] 12 | 13 | operations = [ 14 | migrations.AlterField( 15 | model_name='deletedmessage', 16 | name='embeds', 17 | field=django.contrib.postgres.fields.ArrayField(base_field=models.JSONField(), blank=True, help_text='Embeds attached to this message.', size=None), 18 | ), 19 | ] 20 | -------------------------------------------------------------------------------- /pydis_site/apps/api/migrations/0036_removing_snake_apis.py: -------------------------------------------------------------------------------- 1 | # Generated by Django 2.2.3 on 2019-07-10 09:07 2 | 3 | from django.db import migrations 4 | 5 | 6 | class Migration(migrations.Migration): 7 | 8 | dependencies = [ 9 | ('api', '0035_create_table_log_entry'), 10 | ] 11 | 12 | operations = [ 13 | migrations.DeleteModel( 14 | name='SnakeFact', 15 | ), 16 | migrations.DeleteModel( 17 | name='SnakeIdiom', 18 | ), 19 | migrations.DeleteModel( 20 | name='SnakeName', 21 | ), 22 | migrations.DeleteModel( 23 | name='SpecialSnake', 24 | ), 25 | ] 26 | -------------------------------------------------------------------------------- /.flake8: -------------------------------------------------------------------------------- 1 | [flake8] 2 | max-line-length=100 3 | docstring-convention=all 4 | import-order-style=pycharm 5 | application_import_names=pydis_site 6 | exclude=__pycache__, venv, .venv, **/migrations/**, .cache/, gunicorn.conf.py 7 | extend-ignore= 8 | B311,W503,E226,S311,T000 9 | # Missing Docstrings 10 | D100,D104,D105,D107, 11 | # Docstring Whitespace 12 | D203,D212,D214,D215, 13 | # Docstring Quotes 14 | D301,D302, 15 | # Docstring Content 16 | D400,D401,D402,D404,D405,D406,D407,D408,D409,D410,D411,D412,D413,D414,D416,D417 17 | # Type Annotations 18 | ANN002,ANN003,ANN101,ANN102,ANN204,ANN206 19 | per-file-ignores = 20 | **/tests/**:D1,S106,ANN 21 | -------------------------------------------------------------------------------- /pydis_site/apps/api/migrations/0037_nomination_field_name_change.py: -------------------------------------------------------------------------------- 1 | # Generated by Django 2.2 on 2019-06-28 18:09 2 | 3 | from django.db import migrations 4 | 5 | 6 | class Migration(migrations.Migration): 7 | 8 | dependencies = [ 9 | ('api', '0036_alter_nominations_api'), 10 | ] 11 | 12 | operations = [ 13 | migrations.RenameField( 14 | model_name='nomination', 15 | old_name='unnominate_reason', 16 | new_name='end_reason', 17 | ), 18 | migrations.RenameField( 19 | model_name='nomination', 20 | old_name='unwatched_at', 21 | new_name='ended_at', 22 | ), 23 | ] 24 | -------------------------------------------------------------------------------- /pydis_site/apps/api/migrations/0051_create_news_setting.py: -------------------------------------------------------------------------------- 1 | from django.db import migrations 2 | 3 | 4 | def up(apps, schema_editor): 5 | BotSetting = apps.get_model('api', 'BotSetting') 6 | setting = BotSetting( 7 | name='news', 8 | data={} 9 | ).save() 10 | 11 | 12 | def down(apps, schema_editor): 13 | BotSetting = apps.get_model('api', 'BotSetting') 14 | BotSetting.objects.get(name='news').delete() 15 | 16 | 17 | class Migration(migrations.Migration): 18 | 19 | dependencies = [ 20 | ('api', '0050_remove_infractions_active_default_value'), 21 | ] 22 | 23 | operations = [ 24 | migrations.RunPython(up, down) 25 | ] 26 | -------------------------------------------------------------------------------- /pydis_site/apps/resources/resources/python_tricks.yaml: -------------------------------------------------------------------------------- 1 | description: Full of useful Python tips, tricks and features. Get this if you have 2 | a good grasp of the basics and want to take your Python skills to the next level, 3 | or are a experienced programmer looking to add to your toolbelt. 4 | name: Python Tricks 5 | title_url: https://realpython.com/products/python-tricks-book/ 6 | urls: 7 | - icon: branding/goodreads 8 | url: https://www.goodreads.com/book/show/36990732-python-tricks 9 | color: dark 10 | tags: 11 | topics: 12 | - general 13 | - software design 14 | payment_tiers: 15 | - paid 16 | difficulty: 17 | - intermediate 18 | type: 19 | - book 20 | -------------------------------------------------------------------------------- /pydis_site/apps/api/migrations/0026_use_proper_default_for_infraction_insertion_date.py: -------------------------------------------------------------------------------- 1 | # Generated by Django 2.1.5 on 2019-01-09 19:50 2 | 3 | from django.db import migrations, models 4 | import django.utils.timezone 5 | 6 | 7 | class Migration(migrations.Migration): 8 | 9 | dependencies = [ 10 | ('api', '0025_allow_custom_inserted_at_infraction_field'), 11 | ] 12 | 13 | operations = [ 14 | migrations.AlterField( 15 | model_name='infraction', 16 | name='inserted_at', 17 | field=models.DateTimeField(default=django.utils.timezone.now, help_text='The date and time of the creation of this infraction.'), 18 | ), 19 | ] 20 | -------------------------------------------------------------------------------- /pydis_site/apps/resources/resources/awesome_programming_discord.yaml: -------------------------------------------------------------------------------- 1 | description: We have listed our favourite communities, 2 | but there are many more excellent communities out there! 3 | An awesome list collating the best programming related Discord servers is available on GitHub 4 | and has all sorts of topics from blockchain to virtual reality! 5 | title_icon: branding/github 6 | title_icon_color: dark 7 | title_url: https://github.com/mhxion/awesome-programming-discord 8 | name: awesome-programming-discord 9 | tags: 10 | topics: 11 | - general 12 | payment_tiers: 13 | - free 14 | difficulty: 15 | - beginner 16 | - intermediate 17 | type: 18 | - community 19 | -------------------------------------------------------------------------------- /pydis_site/apps/resources/resources/python_cookbook.yaml: -------------------------------------------------------------------------------- 1 | description: A book full of very smart problem-solving recipes for various Python topics, 2 | including moving from Python 2 to Python 3. 3 | name: Python Cookbook 4 | title_url: http://shop.oreilly.com/product/0636920027072.do 5 | urls: 6 | - icon: branding/goodreads 7 | url: https://www.goodreads.com/book/show/17152735-python-cookbook 8 | color: dark 9 | - icon: branding/github 10 | url: https://github.com/dabeaz/python-cookbook 11 | color: dark 12 | tags: 13 | topics: 14 | - general 15 | - software design 16 | payment_tiers: 17 | - paid 18 | difficulty: 19 | - intermediate 20 | type: 21 | - book 22 | -------------------------------------------------------------------------------- /pydis_site/apps/resources/resources/the_algorithms_github.yaml: -------------------------------------------------------------------------------- 1 | description: A git repository of Python implementations of many of the algorithms taught in algorithm 2 | and data structure courses, as well as algorithms for neural networks, block chains, and compression. This is 3 | a great resource for students wanting to see algorithms implemented in a familiar language. 4 | name: The Algorithms 5 | title_url: https://github.com/TheAlgorithms/Python 6 | tags: 7 | topics: 8 | - algorithms and data structures 9 | - data science 10 | - security 11 | payment_tiers: 12 | - free 13 | difficulty: 14 | - beginner 15 | - intermediate 16 | type: 17 | - tutorial 18 | -------------------------------------------------------------------------------- /pydis_site/apps/resources/resources/flask_web_development.yaml: -------------------------------------------------------------------------------- 1 | description: A comprehensive Flask walkthrough that has you building a complete social 2 | blogging application from scratch. 3 | name: Flask Web Development 4 | title_url: http://shop.oreilly.com/product/0636920031116.do 5 | urls: 6 | - icon: branding/goodreads 7 | url: https://www.goodreads.com/book/show/18774655-flask-web-development 8 | color: dark 9 | - icon: branding/github 10 | url: https://github.com/miguelgrinberg/flasky 11 | color: dark 12 | tags: 13 | topics: 14 | - web development 15 | payment_tiers: 16 | - paid 17 | difficulty: 18 | - beginner 19 | - intermediate 20 | type: 21 | - book 22 | -------------------------------------------------------------------------------- /pydis_site/apps/api/migrations/0010_snakeidiom.py: -------------------------------------------------------------------------------- 1 | # Generated by Django 2.1.2 on 2018-10-19 16:27 2 | 3 | import pydis_site.apps.api.models 4 | from django.db import migrations, models 5 | 6 | 7 | class Migration(migrations.Migration): 8 | 9 | dependencies = [ 10 | ('api', '0009_snakefact'), 11 | ] 12 | 13 | operations = [ 14 | migrations.CreateModel( 15 | name='SnakeIdiom', 16 | fields=[ 17 | ('idiom', models.CharField(help_text='A snake idiom', max_length=140, primary_key=True, serialize=False)), 18 | ], 19 | bases=(pydis_site.apps.api.models.mixins.ModelReprMixin, models.Model), 20 | ), 21 | ] 22 | -------------------------------------------------------------------------------- /pydis_site/apps/api/migrations/0024_add_note_infraction_type.py: -------------------------------------------------------------------------------- 1 | # Generated by Django 2.1.4 on 2019-01-05 14:52 2 | 3 | from django.db import migrations, models 4 | 5 | 6 | class Migration(migrations.Migration): 7 | 8 | dependencies = [ 9 | ('api', '0023_merge_infractions_snake_validators'), 10 | ] 11 | 12 | operations = [ 13 | migrations.AlterField( 14 | model_name='infraction', 15 | name='type', 16 | field=models.CharField(choices=[('note', 'Note'), ('warning', 'Warning'), ('mute', 'Mute'), ('kick', 'Kick'), ('ban', 'Ban'), ('superstar', 'Superstar')], help_text='The type of the infraction.', max_length=9), 17 | ), 18 | ] 19 | -------------------------------------------------------------------------------- /pydis_site/apps/resources/resources/google_colab.yaml: -------------------------------------------------------------------------------- 1 | description: Google Colab is a custom version of Jupyter Notebook that runs code in the cloud, allowing you to 2 | share your Colab notebooks with other people and work collaboratively. 3 | Colab offers a generous amount of memory and computation time for free, and allows you to run programs on GPUs, 4 | making it a great deep learning sandbox for beginners. 5 | name: Google Colab 6 | title_url: https://colab.research.google.com/notebooks/intro.ipynb 7 | tags: 8 | topics: 9 | - general 10 | - data science 11 | payment_tiers: 12 | - free 13 | difficulty: 14 | - beginner 15 | - intermediate 16 | type: 17 | - tool 18 | -------------------------------------------------------------------------------- /pydis_site/apps/resources/resources/university_of_toronto.yaml: -------------------------------------------------------------------------------- 1 | description: A 2-part course that teaches Python. Primarily intended for high school students 2 | and first-year university students who want to learn programming. 3 | name: 'University of Toronto: Learn to Program' 4 | urls: 5 | - icon: regular/graduation-cap 6 | url: https://www.coursera.org/learn/learn-to-program 7 | color: orangered 8 | - icon: regular/graduation-cap 9 | url: https://www.coursera.org/learn/program-code 10 | color: youtube-red 11 | tags: 12 | topics: 13 | - general 14 | payment_tiers: 15 | - free 16 | difficulty: 17 | - beginner 18 | - intermediate 19 | type: 20 | - course 21 | -------------------------------------------------------------------------------- /pydis_site/apps/api/migrations/0021_add_special_snake_validator.py: -------------------------------------------------------------------------------- 1 | # Generated by Django 2.1.2 on 2018-11-25 14:59 2 | 3 | import django.core.validators 4 | from django.db import migrations, models 5 | 6 | 7 | class Migration(migrations.Migration): 8 | 9 | dependencies = [ 10 | ('api', '0020_add_snake_field_validators'), 11 | ] 12 | 13 | operations = [ 14 | migrations.AlterField( 15 | model_name='specialsnake', 16 | name='name', 17 | field=models.CharField(help_text='A special snake name.', max_length=140, primary_key=True, serialize=False, validators=[django.core.validators.RegexValidator(regex='^([^0-9])+$')]), 18 | ), 19 | ] 20 | -------------------------------------------------------------------------------- /pydis_site/apps/resources/resources/exercism.yaml: -------------------------------------------------------------------------------- 1 | description: Level up your programming skills with more than 2600 exercises across 2 | 47 programming languages, Python included. The website provides a mentored mode, 3 | where you can get your code reviewed for each solution you submit. The mentors will 4 | give you insightful advice to make you a better programmer. 5 | name: Exercism 6 | title_url: https://exercism.org/ 7 | urls: 8 | - icon: branding/github 9 | url: https://github.com/exercism/python 10 | color: dark 11 | tags: 12 | topics: 13 | - general 14 | payment_tiers: 15 | - free 16 | difficulty: 17 | - beginner 18 | - intermediate 19 | type: 20 | - interactive 21 | -------------------------------------------------------------------------------- /pydis_site/apps/resources/resources/two_scoops_of_django.yaml: -------------------------------------------------------------------------------- 1 | description: Tips, tricks, and best practices for your Django project. 2 | A highly recommended resource for Django web developers. 3 | name: Two Scoops of Django 4 | title_url: https://www.feldroy.com/two-scoops-of-django 5 | urls: 6 | - icon: branding/goodreads 7 | url: https://www.goodreads.com/book/show/55822151-two-scoops-of-django-3-x 8 | color: dark 9 | - icon: branding/github 10 | url: https://github.com/twoscoops/two-scoops-of-django-2.0-code-examples 11 | color: dark 12 | tags: 13 | topics: 14 | - web development 15 | payment_tiers: 16 | - paid 17 | difficulty: 18 | - intermediate 19 | type: 20 | - book 21 | -------------------------------------------------------------------------------- /pydis_site/apps/api/models/bot/deleted_message.py: -------------------------------------------------------------------------------- 1 | from django.db import models 2 | 3 | from pydis_site.apps.api.models.bot.message import Message 4 | from pydis_site.apps.api.models.bot.message_deletion_context import MessageDeletionContext 5 | 6 | 7 | class DeletedMessage(Message): 8 | """A deleted message, previously sent somewhere on the Discord server.""" 9 | 10 | deletion_context = models.ForeignKey( 11 | MessageDeletionContext, 12 | help_text="The deletion context this message is part of.", 13 | on_delete=models.CASCADE 14 | ) 15 | 16 | class Meta: 17 | """Sets the default ordering for list views to newest first.""" 18 | 19 | ordering = ("-id",) 20 | -------------------------------------------------------------------------------- /pydis_site/apps/api/migrations/0009_snakefact.py: -------------------------------------------------------------------------------- 1 | # Generated by Django 2.1.2 on 2018-10-11 14:25 2 | 3 | import pydis_site.apps.api.models 4 | from django.db import migrations, models 5 | 6 | 7 | class Migration(migrations.Migration): 8 | 9 | dependencies = [ 10 | ('api', '0008_tag_embed_validator'), 11 | ] 12 | 13 | operations = [ 14 | migrations.CreateModel( 15 | name='SnakeFact', 16 | fields=[ 17 | ('fact', models.CharField(help_text='A fact about snakes.', max_length=200, primary_key=True, serialize=False)), 18 | ], 19 | bases=(pydis_site.apps.api.models.mixins.ModelReprMixin, models.Model), 20 | ), 21 | ] 22 | -------------------------------------------------------------------------------- /pydis_site/apps/api/migrations/0029_add_infraction_type_watch.py: -------------------------------------------------------------------------------- 1 | # Generated by Django 2.1.5 on 2019-01-20 11:52 2 | 3 | from django.db import migrations, models 4 | 5 | 6 | class Migration(migrations.Migration): 7 | 8 | dependencies = [ 9 | ('api', '0028_allow_message_content_blank'), 10 | ] 11 | 12 | operations = [ 13 | migrations.AlterField( 14 | model_name='infraction', 15 | name='type', 16 | field=models.CharField(choices=[('note', 'Note'), ('warning', 'Warning'), ('watch', 'Watch'), ('mute', 'Mute'), ('kick', 'Kick'), ('ban', 'Ban'), ('superstar', 'Superstar')], help_text='The type of the infraction.', max_length=9), 17 | ), 18 | ] 19 | -------------------------------------------------------------------------------- /pydis_site/apps/api/migrations/0034_add_botsetting_name_validator.py: -------------------------------------------------------------------------------- 1 | # Generated by Django 2.1.5 on 2019-02-18 19:41 2 | 3 | import pydis_site.apps.api.models.bot.bot_setting 4 | from django.db import migrations, models 5 | 6 | 7 | class Migration(migrations.Migration): 8 | 9 | dependencies = [ 10 | ('api', '0033_create_defcon_settings'), 11 | ] 12 | 13 | operations = [ 14 | migrations.AlterField( 15 | model_name='botsetting', 16 | name='name', 17 | field=models.CharField(max_length=50, primary_key=True, serialize=False, validators=[ 18 | pydis_site.apps.api.models.bot.bot_setting.validate_bot_setting_name]), 19 | ), 20 | ] 21 | -------------------------------------------------------------------------------- /pydis_site/apps/redirect/README.md: -------------------------------------------------------------------------------- 1 | # The "redirect" app 2 | 3 | This Django application manages redirects on our website. The main magic 4 | happens in `urls.py`, which transforms our redirects as configured in 5 | `redirects.yaml` into Django URL routing rules. `tests.py` on the other hand 6 | simply checks that all redirects configured in `redirects.yaml` work as 7 | expected. 8 | 9 | As suggested by the comment in `redirects.yaml`, this app is mainly here for 10 | backwards compatibility for our old dewikification project. It is unlikely you 11 | need to edit it directly. If you did find a reason to perform changes here, 12 | please [open an 13 | issue](https://github.com/python-discord/site/issues/new/choose)! 14 | -------------------------------------------------------------------------------- /pydis_site/apps/timeline/views.py: -------------------------------------------------------------------------------- 1 | from django.apps import apps 2 | from django.core.handlers.wsgi import WSGIRequest 3 | from django.http import HttpResponse 4 | from django.shortcuts import render 5 | from django.views import View 6 | 7 | APP_NAME = "timeline" 8 | 9 | class TimelineView(View): 10 | """A vertical timeline showcasing milestones in the history of Python Discord.""" 11 | 12 | def get(self, request: WSGIRequest) -> HttpResponse: 13 | """Render the timeline.""" 14 | app = apps.get_app_config(APP_NAME) 15 | 16 | return render( 17 | request, 18 | template_name="timeline/timeline.html", 19 | context={ "entries": app.entries }, 20 | ) 21 | -------------------------------------------------------------------------------- /pydis_site/apps/api/migrations/0075_add_redirects_filter.py: -------------------------------------------------------------------------------- 1 | # Generated by Django 3.0.14 on 2021-11-17 10:24 2 | 3 | from django.db import migrations, models 4 | 5 | 6 | class Migration(migrations.Migration): 7 | 8 | dependencies = [ 9 | ('api', '0074_reminder_failures'), 10 | ] 11 | 12 | operations = [ 13 | migrations.AlterField( 14 | model_name='filterlist', 15 | name='type', 16 | field=models.CharField(choices=[('GUILD_INVITE', 'Guild Invite'), ('FILE_FORMAT', 'File Format'), ('DOMAIN_NAME', 'Domain Name'), ('FILTER_TOKEN', 'Filter Token'), ('REDIRECT', 'Redirect')], help_text='The type of allowlist this is on.', max_length=50), 17 | ), 18 | ] 19 | -------------------------------------------------------------------------------- /pydis_site/apps/resources/resources/fluent_python.yaml: -------------------------------------------------------------------------------- 1 | description: A veritable tome of intermediate and advanced Python information. A must-read 2 | for any Python professional. By far the most recommended book for intermediates. 3 | name: Fluent Python 4 | title_url: https://www.oreilly.com/library/view/fluent-python/9781491946237/ 5 | urls: 6 | - icon: branding/goodreads 7 | url: https://www.goodreads.com/book/show/22800567-fluent-python 8 | color: dark 9 | - icon: branding/github 10 | url: https://github.com/fluentpython 11 | color: dark 12 | tags: 13 | topics: 14 | - general 15 | - software design 16 | payment_tiers: 17 | - paid 18 | difficulty: 19 | - intermediate 20 | type: 21 | - book 22 | -------------------------------------------------------------------------------- /pydis_site/apps/resources/tests/test_to_kebabcase.py: -------------------------------------------------------------------------------- 1 | from django.test import TestCase 2 | 3 | from pydis_site.apps.resources.templatetags.to_kebabcase import _to_kebabcase 4 | 5 | 6 | class TestToKebabcase(TestCase): 7 | """Tests for the `as_css_class` template tag.""" 8 | 9 | def test_to_kebabcase(self): 10 | """Test the to_kebabcase utility and template tag.""" 11 | weird_input = ( 12 | "_-_--_A_LEm0n?in&¤'the##trEE£$@€@€@@£is-NOT----QUITE//" 13 | "as#good! as one __IN-YOUR|||HaND" 14 | ) 15 | 16 | self.assertEqual( 17 | _to_kebabcase(weird_input), 18 | "a-lem0n-in-the-tree-is-not-quite-as-good-as-one-in-your-hand", 19 | ) 20 | -------------------------------------------------------------------------------- /pydis_site/apps/timeline/entries/2020-04-17_pydis-game-jam-2020.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: PyDis Game Jam 2020 with the “Three of a Kind” theme and Arcade as the technology 3 | date: Apr 17th, 2020 4 | icon: fa fa-gamepad 5 | icon_color: pastel-purple 6 | --- 7 | 8 | The creator of Arcade, Paul Vincent Craven, joins us as a judge. Several of the 9 | Code Jam participants also end up getting involved contributing to the Arcade 10 | repository. 11 | 12 |
13 | 15 |
16 | -------------------------------------------------------------------------------- /pydis_site/apps/timeline/entries/2024-10-07_python-313-release-stream.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: Python 3.13 Release Stream 3 | date: Oct 10th, 2024 4 | icon: pydis 5 | --- 6 | 7 | Another year, another Python release stream! Hosted by KeithTheEE, and CPython 8 | Core Team members Łukasz Langa, Pablo Galindo Salgado, and Brandt Bucher. 9 | Together, they discuss the new features of the release, and what goes into 10 | contributing to Python. 11 | 12 |
13 | 16 |
17 | -------------------------------------------------------------------------------- /pydis_site/apps/api/models/bot/aoc_link.py: -------------------------------------------------------------------------------- 1 | from django.db import models 2 | 3 | from pydis_site.apps.api.models.bot.user import User 4 | from pydis_site.apps.api.models.mixins import ModelReprMixin 5 | 6 | 7 | class AocAccountLink(ModelReprMixin, models.Model): 8 | """An AoC account link for a Discord User.""" 9 | 10 | user = models.OneToOneField( 11 | User, 12 | on_delete=models.CASCADE, 13 | help_text="The user that is blocked from getting the AoC Completionist Role", 14 | primary_key=True 15 | ) 16 | 17 | aoc_username = models.CharField( 18 | max_length=120, 19 | help_text="The AoC username associated with the Discord User.", 20 | blank=False 21 | ) 22 | -------------------------------------------------------------------------------- /pydis_site/apps/api/models/bot/bumped_thread.py: -------------------------------------------------------------------------------- 1 | from django.core.validators import MinValueValidator 2 | from django.db import models 3 | 4 | from pydis_site.apps.api.models.mixins import ModelReprMixin 5 | 6 | 7 | class BumpedThread(ModelReprMixin, models.Model): 8 | """A list of thread IDs to be bumped.""" 9 | 10 | thread_id = models.BigIntegerField( 11 | primary_key=True, 12 | help_text=( 13 | "The thread ID that should be bumped." 14 | ), 15 | validators=( 16 | MinValueValidator( 17 | limit_value=0, 18 | message="Thread IDs cannot be negative." 19 | ), 20 | ), 21 | verbose_name="Thread ID", 22 | ) 23 | -------------------------------------------------------------------------------- /pydis_site/templates/events/sidebar/code-jams/useful-information.html: -------------------------------------------------------------------------------- 1 |
2 | 3 | 9 |
10 | -------------------------------------------------------------------------------- /pydis_site/apps/api/migrations/0012_specialsnake.py: -------------------------------------------------------------------------------- 1 | # Generated by Django 2.1.2 on 2018-10-22 09:53 2 | 3 | import pydis_site.apps.api.models 4 | from django.db import migrations, models 5 | 6 | 7 | class Migration(migrations.Migration): 8 | 9 | dependencies = [ 10 | ('api', '0011_auto_20181020_1904'), 11 | ] 12 | 13 | operations = [ 14 | migrations.CreateModel( 15 | name='SpecialSnake', 16 | fields=[ 17 | ('name', models.CharField(max_length=140, primary_key=True, serialize=False)), 18 | ('info', models.TextField()), 19 | ], 20 | bases=(pydis_site.apps.api.models.mixins.ModelReprMixin, models.Model), 21 | ), 22 | ] 23 | -------------------------------------------------------------------------------- /pydis_site/apps/resources/resources/screen_readers.yaml: -------------------------------------------------------------------------------- 1 | description: Screen readers are software programs that allow blind 2 | or visually impaired users to read the text displayed on a computer screen with a speech synthesizer or braille display. 3 | There are many different screen reader program options, 4 | with this link describing many of them and their capabilities. 5 | name: Screen Readers - American Foundation for the Blind 6 | title_url: https://www.afb.org/blindness-and-low-vision/using-technology/assistive-technology-products/screen-readers 7 | tags: 8 | topics: 9 | - other 10 | payment_tiers: 11 | - free 12 | - paid 13 | difficulty: 14 | - beginner 15 | - intermediate 16 | type: 17 | - tool 18 | -------------------------------------------------------------------------------- /pydis_site/static/images/README.md: -------------------------------------------------------------------------------- 1 | # Image assets 2 | 3 | The names of each directory correspond to the pages from which apps they are 4 | used, except for the homepage, which uses `frontpage`, `waves`, `waves_dark`, 5 | `sponsors`, and `sponsors_dark`. 6 | 7 | Directories with the `_dark` suffix store alternate images to the ones in the 8 | corresponding directory without the `_dark` suffix. When using these alternate 9 | images, use the `light-image` class for the normal image and the `dark-image` 10 | class for the image intended for dark mode. 11 | 12 | The exception to this is the `waves_dark`, which is used in the homepage hero 13 | section and the images are set by CSS using `[data-theme="light"]` and 14 | `[data-theme="dark"]`. 15 | -------------------------------------------------------------------------------- /pydis_site/apps/api/migrations/0067_add_voice_ban_infraction_type.py: -------------------------------------------------------------------------------- 1 | # Generated by Django 3.0.10 on 2020-10-10 16:08 2 | 3 | from django.db import migrations, models 4 | 5 | 6 | class Migration(migrations.Migration): 7 | 8 | dependencies = [ 9 | ('api', '0066_merge_20201003_0730'), 10 | ] 11 | 12 | operations = [ 13 | migrations.AlterField( 14 | model_name='infraction', 15 | name='type', 16 | field=models.CharField(choices=[('note', 'Note'), ('warning', 'Warning'), ('watch', 'Watch'), ('mute', 'Mute'), ('kick', 'Kick'), ('ban', 'Ban'), ('superstar', 'Superstar'), ('voice_ban', 'Voice Ban')], help_text='The type of the infraction.', max_length=9), 17 | ), 18 | ] 19 | -------------------------------------------------------------------------------- /pydis_site/apps/resources/resources/panda3d.yaml: -------------------------------------------------------------------------------- 1 | name: Panda3D 2 | description: Panda3D is a Python-focused 3-D framework for rapid development of games, 3 | visualizations, and simulations, written in C++ with an emphasis on performance and flexibility. 4 | title_image: /static/images/resources/panda3d.png 5 | title_image_dark: /static/images/resources_dark/panda3d.png 6 | title_url: https://www.panda3d.org/ 7 | position: 9 8 | urls: 9 | - icon: branding/discord 10 | url: https://discord.gg/9XsucTT 11 | color: blurple 12 | tags: 13 | topics: 14 | - user interface 15 | - game development 16 | payment_tiers: 17 | - free 18 | difficulty: 19 | - beginner 20 | - intermediate 21 | type: 22 | - community 23 | -------------------------------------------------------------------------------- /pydis_site/apps/api/migrations/0049_deletedmessage_attachments.py: -------------------------------------------------------------------------------- 1 | # Generated by Django 2.2.6 on 2019-10-28 17:12 2 | 3 | import django.contrib.postgres.fields 4 | from django.db import migrations, models 5 | 6 | 7 | class Migration(migrations.Migration): 8 | 9 | dependencies = [ 10 | ('api', '0049_offensivemessage'), 11 | ] 12 | 13 | operations = [ 14 | migrations.AddField( 15 | model_name='deletedmessage', 16 | name='attachments', 17 | field=django.contrib.postgres.fields.ArrayField(base_field=models.URLField(max_length=512), default=[], blank=True, help_text='Attachments attached to this message.', size=None), 18 | preserve_default=False, 19 | ), 20 | ] 21 | -------------------------------------------------------------------------------- /pydis_site/apps/api/migrations/0070_auto_20210618_2114.py: -------------------------------------------------------------------------------- 1 | # Generated by Django 3.0.14 on 2021-06-18 21:14 2 | 3 | import django.core.validators 4 | from django.db import migrations, models 5 | 6 | 7 | class Migration(migrations.Migration): 8 | 9 | dependencies = [ 10 | ('api', '0069_documentationlink_validators'), 11 | ] 12 | 13 | operations = [ 14 | migrations.AlterField( 15 | model_name='role', 16 | name='permissions', 17 | field=models.BigIntegerField(help_text='The integer value of the permission bitset of this role from Discord.', validators=[django.core.validators.MinValueValidator(limit_value=0, message='Role permissions cannot be negative.')]), 18 | ), 19 | ] 20 | -------------------------------------------------------------------------------- /pydis_site/apps/resources/resources/pallets.yaml: -------------------------------------------------------------------------------- 1 | name: Pallets Projects 2 | description: The Pallets Projects develop Python libraries such as the Flask web framework, 3 | the Jinja templating library, and the Click command line toolkit. Join to discuss 4 | and get help from the Pallets community. 5 | title_image: https://i.imgur.com/sV9Ypdf.png 6 | title_image_dark: /static/images/resources_dark/pallets.png 7 | title_url: https://www.palletsprojects.com/ 8 | urls: 9 | - icon: branding/discord 10 | url: https://discord.gg/t6rrQZH 11 | color: blurple 12 | tags: 13 | topics: 14 | - web development 15 | payment_tiers: 16 | - free 17 | difficulty: 18 | - beginner 19 | - intermediate 20 | type: 21 | - community 22 | -------------------------------------------------------------------------------- /pydis_site/apps/resources/resources/mission_python.yaml: -------------------------------------------------------------------------------- 1 | description: Learn programming and Python while building a complete and awesome space-themed 2 | game using cutting-edge Python 3.6 and Pygame Zero. Extensive use of code examples, 3 | images, and walk-throughs make this a pleasure to both read and follow along. Excellent 4 | book for beginners. 5 | name: Mission Python 6 | title_url: https://www.sean.co.uk/books/mission-python/index.shtm 7 | urls: 8 | - icon: branding/goodreads 9 | url: https://www.goodreads.com/book/show/35545850-mission-python 10 | color: dark 11 | tags: 12 | topics: 13 | - general 14 | - game development 15 | payment_tiers: 16 | - paid 17 | difficulty: 18 | - beginner 19 | type: 20 | - book 21 | -------------------------------------------------------------------------------- /pydis_site/apps/resources/resources/wtf_python.yaml: -------------------------------------------------------------------------------- 1 | description: Python, being a beautifully designed high-level and interpreter-based programming language, 2 | provides us with many features for the programmer's comfort. 3 | But sometimes, the outcomes of a Python snippet may not seem obvious at first sight. 4 | Here's a fun project attempting to explain what exactly is happening under the hood for some counter-intuitive snippets 5 | and lesser-known features in Python. 6 | name: WTF Python 7 | title_url: https://github.com/satwikkansal/wtfpython 8 | position: 7 9 | tags: 10 | topics: 11 | - software design 12 | - other 13 | payment_tiers: 14 | - free 15 | difficulty: 16 | - intermediate 17 | type: 18 | - tutorial 19 | -------------------------------------------------------------------------------- /pydis_site/apps/timeline/entries/2020-01-17_pydis-sixth-code-jam.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: PyDis sixth code jam with the theme “Ancient technology” and the technology Kivy 3 | date: Jan 17, 2020 4 | icon: fa fa-dice 5 | icon_color: pastel-blue 6 | --- 7 | 8 | Our Code Jams are becoming an increasingly big deal, and the Kivy core 9 | developers join us to judge the event and help out our members during the event. 10 | One of them, @tshirtman, even joins our staff! 11 | 12 |
13 | 16 |
17 | -------------------------------------------------------------------------------- /pydis_site/templates/content/dropdown.html: -------------------------------------------------------------------------------- 1 | 18 | -------------------------------------------------------------------------------- /pydis_site/apps/resources/resources/python_morsels.yaml: -------------------------------------------------------------------------------- 1 | description: 'Learn to write more idiomatic Python code with deliberate practice! 2 | 3 | 4 | Sign up for this service and receive one short Python exercise every week. After 5 | you attempt to work through the exercise, you''ll receive a number of solutions 6 | to the exercise with explanations of each one. Each exercise will include automated 7 | tests and some may include bonuses for a little more of a challenge!' 8 | name: Python Morsels 9 | title_url: https://www.pythonmorsels.com/ 10 | tags: 11 | topics: 12 | - general 13 | - software design 14 | payment_tiers: 15 | - subscription 16 | difficulty: 17 | - intermediate 18 | type: 19 | - interactive 20 | - video 21 | -------------------------------------------------------------------------------- /pydis_site/apps/api/migrations/0082_otn_allow_big_solidus.py: -------------------------------------------------------------------------------- 1 | # Generated by Django 3.1.14 on 2022-04-21 23:29 2 | 3 | import django.core.validators 4 | from django.db import migrations, models 5 | 6 | 7 | class Migration(migrations.Migration): 8 | 9 | dependencies = [ 10 | ('api', '0081_bumpedthread'), 11 | ] 12 | 13 | operations = [ 14 | migrations.AlterField( 15 | model_name='offtopicchannelname', 16 | name='name', 17 | field=models.CharField(help_text='The actual channel name that will be used on our Discord server.', max_length=96, primary_key=True, serialize=False, validators=[django.core.validators.RegexValidator(regex="^[a-z0-9\\U0001d5a0-\\U0001d5b9-ǃ?’'<>⧹⧸]+$")]), 18 | ), 19 | ] 20 | -------------------------------------------------------------------------------- /pydis_site/apps/timeline/entries/2020-07-31_pydis-summer-code-jam-2020.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: PyDis summer code jam 2020 with the theme “Early Internet” and Django as the technology 3 | date: Jul 31st, 2020 4 | icon: fa fa-dice 5 | icon_color: pastel-blue 6 | --- 7 | 8 | Sponsored by the Django Software Foundation and JetBrains, the Summer Code Jam 9 | for 2020 attracts hundreds of participants, and sees the creation of some 10 | fantastic projects. Check them out in our judge stream below: 11 | 12 |
13 | 14 |
15 | -------------------------------------------------------------------------------- /pydis_site/apps/api/migrations/0043_infraction_hidden_warnings_to_notes.py: -------------------------------------------------------------------------------- 1 | # Generated by Django 2.2.5 on 2019-09-25 08:41 2 | 3 | from django.db import migrations 4 | 5 | 6 | def migrate_hidden_warnings_to_notes(apps, schema_editor): 7 | """Migrates hidden warnings to note.""" 8 | Infraction = apps.get_model('api', 'Infraction') 9 | 10 | for infraction in Infraction.objects.filter(type="warning", hidden=True): 11 | infraction.type = "note" 12 | infraction.save() 13 | 14 | 15 | class Migration(migrations.Migration): 16 | 17 | dependencies = [ 18 | ('api', '0042_infraction_add_default_ordering'), 19 | ] 20 | 21 | operations = [ 22 | migrations.RunPython(migrate_hidden_warnings_to_notes, elidable=True), 23 | ] 24 | -------------------------------------------------------------------------------- /pydis_site/apps/api/migrations/0073_otn_allow_GT_and_LT.py: -------------------------------------------------------------------------------- 1 | # Generated by Django 3.0.14 on 2021-09-27 20:38 2 | 3 | import django.core.validators 4 | from django.db import migrations, models 5 | 6 | 7 | class Migration(migrations.Migration): 8 | 9 | dependencies = [ 10 | ('api', '0072_doc_allow_blank_base_url'), 11 | ] 12 | 13 | operations = [ 14 | migrations.AlterField( 15 | model_name='offtopicchannelname', 16 | name='name', 17 | field=models.CharField(help_text='The actual channel name that will be used on our Discord server.', max_length=96, primary_key=True, serialize=False, validators=[django.core.validators.RegexValidator(regex="^[a-z0-9\\U0001d5a0-\\U0001d5b9-ǃ?’'<>]+$")]), 18 | ), 19 | ] 20 | -------------------------------------------------------------------------------- /pydis_site/apps/timeline/entries/2021-03-13_new-feature-weekly-discussion-channel.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: "New feature: Weekly discussion channel" 3 | date: Mar 13th, 2021 4 | icon: fa fa-comment 5 | icon_color: pastel-purple 6 | --- 7 | 8 | Every week (or two weeks), we'll be posting a new topic to discuss in a channel 9 | called **#weekly-topic-discussion**. Our inaugural topic is a PyCon talk by 10 | Anthony Shaw called **Wily Python: Writing simpler and more maintainable 11 | Python.**. 12 | 13 |
14 | 16 |
17 | -------------------------------------------------------------------------------- /pydis_site/apps/api/migrations/0051_allow_blank_message_embeds.py: -------------------------------------------------------------------------------- 1 | # Generated by Django 3.0.4 on 2020-03-21 17:05 2 | 3 | import django.contrib.postgres.fields 4 | import django.contrib.postgres.fields.jsonb 5 | from django.db import migrations 6 | 7 | 8 | class Migration(migrations.Migration): 9 | 10 | dependencies = [ 11 | ('api', '0050_remove_infractions_active_default_value'), 12 | ] 13 | 14 | operations = [ 15 | migrations.AlterField( 16 | model_name='deletedmessage', 17 | name='embeds', 18 | field=django.contrib.postgres.fields.ArrayField(base_field=django.contrib.postgres.fields.jsonb.JSONField(validators=[]), blank=True, help_text='Embeds attached to this message.', size=None), 19 | ), 20 | ] 21 | -------------------------------------------------------------------------------- /pydis_site/apps/api/migrations/0014_auto_20181025_1959.py: -------------------------------------------------------------------------------- 1 | # Generated by Django 2.1.2 on 2018-10-25 19:59 2 | 3 | from django.db import migrations, models 4 | 5 | 6 | class Migration(migrations.Migration): 7 | 8 | dependencies = [ 9 | ('api', '0013_specialsnake_image'), 10 | ] 11 | 12 | operations = [ 13 | migrations.AlterField( 14 | model_name='specialsnake', 15 | name='info', 16 | field=models.TextField(help_text='Info about a special snake.'), 17 | ), 18 | migrations.AlterField( 19 | model_name='specialsnake', 20 | name='name', 21 | field=models.CharField(help_text='A special snake name.', max_length=140, primary_key=True, serialize=False), 22 | ), 23 | ] 24 | -------------------------------------------------------------------------------- /pydis_site/apps/resources/resources/jetbrains_academy.yaml: -------------------------------------------------------------------------------- 1 | description: Learn Python with a wide range of high quality, project-based lessons. 2 | Keep track of your progress as you cover all the basic concepts a Python programmer needs to know, 3 | as well as touching on more advanced areas such as web development with Django, 4 | natural language processing with NLTK, and data science with NumPy, pandas, and scikit-learn! 5 | It requires a paid subscription, but a free trial is available. 6 | name: JetBrains Academy 7 | title_url: https://www.jetbrains.com/academy/ 8 | tags: 9 | topics: 10 | - general 11 | - web development 12 | - data science 13 | payment_tiers: 14 | - subscription 15 | difficulty: 16 | - beginner 17 | type: 18 | - interactive 19 | -------------------------------------------------------------------------------- /pydis_site/apps/timeline/entries/2022-07-21_summer-code-jam-2022-cj9.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: Summer Code Jam 2022 (CJ9) 3 | date: July 21st, 2022 4 | icon: fa fa-dice 5 | icon_color: pastel-lime 6 | --- 7 | 8 | We host the 9th Code Jam. This year, teams had to use **websockets** to create a 9 | project based on the theme, **It's not a bug, it's a feature**. In all, 24 teams 10 | submitted their projects. At the end, we held a livestream demoing the top 10 11 | projects and announcing the winner! 12 | 13 |
14 | 17 |
18 | -------------------------------------------------------------------------------- /pydis_site/apps/api/migrations/0040_allow_special_off_topic_name_chars.py: -------------------------------------------------------------------------------- 1 | # Generated by Django 2.2.3 on 2019-09-03 14:24 2 | 3 | import django.core.validators 4 | from django.db import migrations, models 5 | 6 | 7 | class Migration(migrations.Migration): 8 | 9 | dependencies = [ 10 | ('api', '0039_add_position_field_to_role'), 11 | ] 12 | 13 | operations = [ 14 | migrations.AlterField( 15 | model_name='offtopicchannelname', 16 | name='name', 17 | field=models.CharField(help_text='The actual channel name that will be used on our Discord server.', max_length=96, primary_key=True, serialize=False, validators=[django.core.validators.RegexValidator(regex="^[a-z0-9\\U0001d5a0-\\U0001d5b9-ǃ?’']+$")]), 18 | ), 19 | ] 20 | -------------------------------------------------------------------------------- /pydis_site/apps/timeline/entries/2021-10-04_python-310-release-stream.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: We host the Python 3.10 Release Stream 3 | date: Oct 4th, 2021 4 | icon: pydis 5 | --- 6 | 7 | Leon and Pablo Galindo, CPython Core Developer and Release Manager, host the 8 | Python 3.10 Release Stream, joined by other core devs Carol Willing, Irit 9 | Katriel, Łukasz Langa, and Brandt Bucher. They talked in-depth about the new 10 | features introduced in 3.10, the development of those features, and more! 11 | 12 |
13 | 16 |
17 | -------------------------------------------------------------------------------- /pydis_site/apps/resources/resources/microsoft.yaml: -------------------------------------------------------------------------------- 1 | name: Microsoft Python 2 | description: Microsoft Python is a Discord server for discussing all things relating to using Python with Microsoft products, 3 | they have channels for Azure, VS Code, IoT, Data Science and much more! 4 | title_image: https://1000logos.net/wp-content/uploads/2017/04/Microsoft-Logo.png 5 | title_image_dark: /static/images/resources_dark/microsoft.png 6 | title_url: https://www.microsoft.com/en-us/boards/pycon2020.aspx 7 | urls: 8 | - icon: branding/discord 9 | url: https://discord.gg/b8YJQPx 10 | color: blurple 11 | tags: 12 | topics: 13 | - general 14 | - tooling 15 | payment_tiers: 16 | - free 17 | difficulty: 18 | - beginner 19 | - intermediate 20 | type: 21 | - community 22 | -------------------------------------------------------------------------------- /pydis_site/templates/events/sidebar/code-jams/12.html: -------------------------------------------------------------------------------- 1 | {% load static %} 2 |
3 |

Important Links

4 | Rules 5 | Approved Frameworks 6 | The Code Style Guide 7 | How Judging Works 8 | 9 |
10 |
11 | logo 12 |
13 | -------------------------------------------------------------------------------- /pydis_site/apps/resources/resources/edublocks.yaml: -------------------------------------------------------------------------------- 1 | description: EduBlocks provides a simple drag and drop interface to help beginners get to grips 2 | with the key concepts of Python. There is built-in support for modules such as random, 3 | turtle, processing and pygal to play around with, 4 | and it even allows you to export the Python code you have written in the graphical editor. 5 | EduBlocks also has integration with BBC micro:bit, 6 | Raspberry Pi and CircuitPython allowing you to write code for these devices graphically 7 | and export the code to run on actual devices. 8 | name: EduBlocks 9 | title_url: https://edublocks.org/ 10 | tags: 11 | topics: 12 | - general 13 | payment_tiers: 14 | - free 15 | difficulty: 16 | - beginner 17 | type: 18 | - interactive 19 | -------------------------------------------------------------------------------- /pydis_site/apps/timeline/entries/2022-10-24_python-311-release-stream.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: Python 3.11 Release Stream 3 | date: Oct 24th, 2022 4 | icon: pydis 5 | --- 6 | 7 | With the Python 3.10 Release Stream being such a success, we brought it back for 8 | the release of Python 3.11. Hosted by Leon, and CPython 3.11 Release Manager, 9 | Pablo Galindo, they were joined by other CPython Core Developers. Together, they 10 | discuss the specific features and the overall development process of the 11 | release. 12 | 13 |
14 | 17 |
18 | -------------------------------------------------------------------------------- /pydis_site/apps/redirect/views.py: -------------------------------------------------------------------------------- 1 | 2 | from django.views.generic import RedirectView 3 | 4 | 5 | class CustomRedirectView(RedirectView): 6 | """Extended RedirectView for manual route args.""" 7 | 8 | permanent = True 9 | static_args = () 10 | prefix_redirect = False 11 | 12 | @classmethod 13 | def as_view(cls, **initkwargs): 14 | """Overwrites original as_view to add static args.""" 15 | return super().as_view(**initkwargs) 16 | 17 | def get_redirect_url(self, *args, **kwargs) -> str | None: 18 | """Extends default behaviour to use static args.""" 19 | args = self.static_args + args + tuple(kwargs.values()) 20 | if self.prefix_redirect: 21 | args = ("".join(args),) 22 | 23 | return super().get_redirect_url(*args) 24 | -------------------------------------------------------------------------------- /pydis_site/apps/resources/resources/byte_of_python.yaml: -------------------------------------------------------------------------------- 1 | description: A free book on programming using the Python language. 2 | It serves as a tutorial or guide to the Python language for a beginner audience. 3 | If all you know about computers is how to save text files, then this is the book for you. 4 | name: A Byte of Python 5 | title_url: https://python.swaroopch.com/ 6 | urls: 7 | - icon: regular/book 8 | url: https://www.lulu.com/shop/swaroop-c-h/a-byte-of-python/paperback/product-21142968.html 9 | color: dark 10 | - icon: branding/goodreads 11 | url: https://www.goodreads.com/book/show/6762544-a-byte-of-python 12 | color: dark 13 | tags: 14 | topics: 15 | - general 16 | payment_tiers: 17 | - free 18 | - paid 19 | difficulty: 20 | - beginner 21 | type: 22 | - book 23 | -------------------------------------------------------------------------------- /pydis_site/templates/events/sidebar/pyweek/useful-links.html: -------------------------------------------------------------------------------- 1 | 12 | -------------------------------------------------------------------------------- /pydis_site/apps/timeline/entries/2023-10-15_pydis-code-jam-2023-cj10.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: Summer Code Jam 2023 (CJ10) 3 | date: October 15th, 2023 4 | icon: fa fa-dice 5 | icon_color: pastel-lime 6 | --- 7 | 8 | We host the 10th Code Jam. This year, teams had to use an **image 9 | processing/manipulation library** to create something under the theme of 10 | **"Secret Codes"**. 11 | 12 | In total, 17 teams submitted projects out of which we showcased the top 10 in a 13 | livestream, where the winners were also announced. 14 | 15 |
16 | 19 |
20 | -------------------------------------------------------------------------------- /pydis_site/apps/api/migrations/0033_create_defcon_settings.py: -------------------------------------------------------------------------------- 1 | # Generated by Django 2.1.5 on 2019-02-18 19:30 2 | 3 | from django.db import migrations 4 | 5 | 6 | def up(apps, schema_editor): 7 | BotSetting = apps.get_model('api', 'BotSetting') 8 | setting = BotSetting( 9 | name='defcon', 10 | data={ 11 | 'enabled': False, 12 | 'days': 0 13 | } 14 | ).save() 15 | 16 | 17 | def down(apps, schema_editor): # pragma: no cover - not necessary to test 18 | BotSetting = apps.get_model('api', 'BotSetting') 19 | BotSetting.get(name='defcon').delete() 20 | 21 | 22 | class Migration(migrations.Migration): 23 | 24 | dependencies = [ 25 | ('api', '0032_botsetting'), 26 | ] 27 | 28 | operations = [ 29 | migrations.RunPython(up, down) 30 | ] 31 | -------------------------------------------------------------------------------- /pydis_site/apps/api/migrations/0072_doc_allow_blank_base_url.py: -------------------------------------------------------------------------------- 1 | # Generated by Django 3.0.14 on 2021-08-30 21:09 2 | 3 | from django.db import migrations, models 4 | import pydis_site.apps.api.models.bot.documentation_link 5 | 6 | 7 | class Migration(migrations.Migration): 8 | 9 | dependencies = [ 10 | ('api', '0071_increase_message_content_4000'), 11 | ] 12 | 13 | operations = [ 14 | migrations.AlterField( 15 | model_name='documentationlink', 16 | name='base_url', 17 | field=models.URLField(blank=True, help_text='The base URL from which documentation will be available for this project. Used to generate links to various symbols within this package.', validators=[pydis_site.apps.api.models.bot.documentation_link.ends_with_slash_validator]), 18 | ), 19 | ] 20 | -------------------------------------------------------------------------------- /pydis_site/apps/timeline/entries/2021-03-01_leon-sandoy-appears-on-talk-python-to-me.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: Leon Sandøy appears on Talk Python To Me 3 | date: Mar 1st, 2021 4 | icon: fa fa-microphone 5 | icon_color: pastel-green 6 | --- 7 | 8 | Leon goes on the Talk Python to Me podcast with Michael Kennedy to discuss the 9 | history of Python Discord, the critical importance of culture, and how to run a 10 | massive community. You can find the episode [at 11 | talkpython.fm](https://talkpython.fm/episodes/show/305/python-community-at- 12 | python-discord). 13 | 14 | 17 | -------------------------------------------------------------------------------- /pydis_site/apps/api/migrations/0039_add_position_field_to_role.py: -------------------------------------------------------------------------------- 1 | # Generated by Django 2.2.3 on 2019-08-15 11:42 2 | 3 | from django.db import migrations, models 4 | 5 | 6 | class Migration(migrations.Migration): 7 | 8 | dependencies = [ 9 | ('api', '0038_merge_20190719_1817'), 10 | ] 11 | 12 | operations = [ 13 | migrations.AddField( 14 | model_name='role', 15 | name='position', 16 | field=models.IntegerField(default=-1, help_text='The position of the role in the role hierarchy of the Discord Guild.'), 17 | ), 18 | migrations.AlterField( 19 | model_name='role', 20 | name='position', 21 | field=models.IntegerField(help_text='The position of the role in the role hierarchy of the Discord Guild.'), 22 | ) 23 | ] 24 | -------------------------------------------------------------------------------- /pydis_site/apps/api/migrations/0032_botsetting.py: -------------------------------------------------------------------------------- 1 | # Generated by Django 2.1.5 on 2019-02-07 19:03 2 | 3 | import pydis_site.apps.api.models 4 | import django.contrib.postgres.fields.jsonb 5 | from django.db import migrations, models 6 | 7 | 8 | class Migration(migrations.Migration): 9 | 10 | dependencies = [ 11 | ('api', '0031_nomination'), 12 | ] 13 | 14 | operations = [ 15 | migrations.CreateModel( 16 | name='BotSetting', 17 | fields=[ 18 | ('name', models.CharField(max_length=50, primary_key=True, serialize=False)), 19 | ('data', django.contrib.postgres.fields.jsonb.JSONField(help_text='The actual settings of this setting.')), 20 | ], 21 | bases=(pydis_site.apps.api.models.mixins.ModelReprMixin, models.Model), 22 | ), 23 | ] 24 | --------------------------------------------------------------------------------