aboutsummaryrefslogtreecommitdiffstats
path: root/pydis_site
diff options
context:
space:
mode:
Diffstat (limited to 'pydis_site')
-rw-r--r--pydis_site/apps/api/admin.py4
-rw-r--r--pydis_site/apps/api/migrations/0072_doc_allow_blank_base_url.py19
-rw-r--r--pydis_site/apps/api/models/bot/documentation_link.py1
-rw-r--r--pydis_site/apps/content/resources/guides/pydis-guides/contributing/sir-lancebot.md2
-rw-r--r--pydis_site/apps/content/resources/guides/pydis-guides/contributing/sir-lancebot/env-var-reference.md2
-rw-r--r--pydis_site/apps/home/urls.py1
-rw-r--r--pydis_site/apps/home/views/home.py80
-rw-r--r--pydis_site/constants.py2
-rw-r--r--pydis_site/settings.py15
-rw-r--r--pydis_site/templates/events/index.html2
-rw-r--r--pydis_site/templates/events/pages/code-jams/8/_index.html21
-rw-r--r--pydis_site/templates/events/pages/code-jams/8/frameworks.html5
-rw-r--r--pydis_site/templates/events/pages/code-jams/8/submissions.html484
-rw-r--r--pydis_site/templates/events/pages/code-jams/_index.html2
-rw-r--r--pydis_site/templates/events/pages/code-jams/code-style-guide.html268
-rw-r--r--pydis_site/templates/events/sidebar/code-jams/8.html2
-rw-r--r--pydis_site/templates/events/sidebar/code-jams/ongoing-code-jam.html (renamed from pydis_site/templates/events/sidebar/code-jams/upcoming-code-jam.html)2
-rw-r--r--pydis_site/templates/events/sidebar/code-jams/useful-information.html1
-rw-r--r--pydis_site/templates/events/sidebar/ongoing-event.html (renamed from pydis_site/templates/events/sidebar/upcoming-event.html)2
-rw-r--r--pydis_site/templates/home/index.html4
-rw-r--r--pydis_site/templates/home/timeline.html2
21 files changed, 862 insertions, 59 deletions
diff --git a/pydis_site/apps/api/admin.py b/pydis_site/apps/api/admin.py
index 449e660e..2aca38a1 100644
--- a/pydis_site/apps/api/admin.py
+++ b/pydis_site/apps/api/admin.py
@@ -48,8 +48,8 @@ class BotSettingAdmin(admin.ModelAdmin):
class DocumentationLinkAdmin(admin.ModelAdmin):
"""Admin formatting for the DocumentationLink model."""
- fields = ("package", "base_url", "inventory_url")
- list_display = ("package", "base_url", "inventory_url")
+ fields = ("package", "inventory_url", "base_url")
+ list_display = ("package", "inventory_url", "base_url")
list_editable = ("base_url", "inventory_url")
search_fields = ("package",)
diff --git a/pydis_site/apps/api/migrations/0072_doc_allow_blank_base_url.py b/pydis_site/apps/api/migrations/0072_doc_allow_blank_base_url.py
new file mode 100644
index 00000000..d4899354
--- /dev/null
+++ b/pydis_site/apps/api/migrations/0072_doc_allow_blank_base_url.py
@@ -0,0 +1,19 @@
+# Generated by Django 3.0.14 on 2021-08-30 21:09
+
+from django.db import migrations, models
+import pydis_site.apps.api.models.bot.documentation_link
+
+
+class Migration(migrations.Migration):
+
+ dependencies = [
+ ('api', '0071_increase_message_content_4000'),
+ ]
+
+ operations = [
+ migrations.AlterField(
+ model_name='documentationlink',
+ name='base_url',
+ 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]),
+ ),
+ ]
diff --git a/pydis_site/apps/api/models/bot/documentation_link.py b/pydis_site/apps/api/models/bot/documentation_link.py
index 3dcc71fc..9941907c 100644
--- a/pydis_site/apps/api/models/bot/documentation_link.py
+++ b/pydis_site/apps/api/models/bot/documentation_link.py
@@ -30,6 +30,7 @@ class DocumentationLink(ModelReprMixin, models.Model):
"The base URL from which documentation will be available for this project. "
"Used to generate links to various symbols within this package."
),
+ blank=True,
validators=(ends_with_slash_validator,)
)
inventory_url = models.URLField(
diff --git a/pydis_site/apps/content/resources/guides/pydis-guides/contributing/sir-lancebot.md b/pydis_site/apps/content/resources/guides/pydis-guides/contributing/sir-lancebot.md
index 601cfa4a..068b08ae 100644
--- a/pydis_site/apps/content/resources/guides/pydis-guides/contributing/sir-lancebot.md
+++ b/pydis_site/apps/content/resources/guides/pydis-guides/contributing/sir-lancebot.md
@@ -97,7 +97,7 @@ The first time you run this command, it may take a few minutes while Docker down
$ docker-compose up
```
-If you get any Docker related errors, reference the [Possible Issues](./docker/possible-issues) section of the Docker page.
+If you get any Docker related errors, reference the [Possible Issues](../docker#possible-issues) section of the Docker page.
{: .notification .is-warning }
## Run on the host
diff --git a/pydis_site/apps/content/resources/guides/pydis-guides/contributing/sir-lancebot/env-var-reference.md b/pydis_site/apps/content/resources/guides/pydis-guides/contributing/sir-lancebot/env-var-reference.md
index 5c472eb2..2a7ef0d6 100644
--- a/pydis_site/apps/content/resources/guides/pydis-guides/contributing/sir-lancebot/env-var-reference.md
+++ b/pydis_site/apps/content/resources/guides/pydis-guides/contributing/sir-lancebot/env-var-reference.md
@@ -32,7 +32,7 @@ Additionally, you may find the following environment variables useful during dev
| `REDIS_PASSWORD` | |
| `USE_FAKEREDIS` | If the FakeRedis module should be used. Set this to true if you don't have a Redis database setup. |
| `BOT_SENTRY_DSN` | The DSN of the sentry monitor. |
-| `TRASHCAN_EMOJI` | The emoji to use for the trashcan during paginated embeds |
+| `TRASHCAN_EMOJI` | The full emoji to use for the trashcan. Format should be like the output of `\:emoji:`. |
---
diff --git a/pydis_site/apps/home/urls.py b/pydis_site/apps/home/urls.py
index 1e2af8f3..bb77220b 100644
--- a/pydis_site/apps/home/urls.py
+++ b/pydis_site/apps/home/urls.py
@@ -7,6 +7,7 @@ app_name = 'home'
urlpatterns = [
path('', HomeView.as_view(), name='home'),
path('', include('pydis_site.apps.redirect.urls')),
+ path('', include('django_prometheus.urls')),
path('admin/', admin.site.urls),
path('resources/', include('pydis_site.apps.resources.urls')),
path('pages/', include('pydis_site.apps.content.urls')),
diff --git a/pydis_site/apps/home/views/home.py b/pydis_site/apps/home/views/home.py
index b3767d37..bbb4b815 100644
--- a/pydis_site/apps/home/views/home.py
+++ b/pydis_site/apps/home/views/home.py
@@ -9,7 +9,7 @@ from django.utils import timezone
from django.views import View
from pydis_site.apps.home.models import RepositoryMetadata
-from pydis_site.constants import GITHUB_TOKEN
+from pydis_site.constants import GITHUB_TOKEN, TIMEOUT_PERIOD
log = logging.getLogger(__name__)
@@ -19,7 +19,6 @@ class HomeView(View):
github_api = "https://api.github.com/users/python-discord/repos?per_page=100"
repository_cache_ttl = 3600
- headers = {"Authorization": f"token {GITHUB_TOKEN}"}
# Which of our GitHub repos should be displayed on the front page, and in which order?
repos = [
@@ -35,6 +34,16 @@ class HomeView(View):
"""Clean up stale RepositoryMetadata."""
RepositoryMetadata.objects.exclude(repo_name__in=self.repos).delete()
+ # If no token is defined (for example in local development), then
+ # it does not make sense to pass the Authorization header. More
+ # specifically, GitHub will reject any requests from us due to the
+ # invalid header. We can make a limited number of anonymous requests
+ # though, which is useful for testing.
+ if GITHUB_TOKEN:
+ self.headers = {"Authorization": f"token {GITHUB_TOKEN}"}
+ else:
+ self.headers = {}
+
def _get_api_data(self) -> Dict[str, Dict[str, str]]:
"""
Call the GitHub API and get information about our repos.
@@ -42,9 +51,16 @@ class HomeView(View):
If we're unable to get that info for any reason, return an empty dict.
"""
repo_dict = {}
-
- # Fetch the data from the GitHub API
- api_data: List[dict] = requests.get(self.github_api, headers=self.headers).json()
+ try:
+ # Fetch the data from the GitHub API
+ api_data: List[dict] = requests.get(
+ self.github_api,
+ headers=self.headers,
+ timeout=TIMEOUT_PERIOD
+ ).json()
+ except requests.exceptions.Timeout:
+ log.error("Request to fetch GitHub repository metadata for timed out!")
+ return repo_dict
# Process the API data into our dict
for repo in api_data:
@@ -74,35 +90,33 @@ class HomeView(View):
def _get_repo_data(self) -> List[RepositoryMetadata]:
"""Build a list of RepositoryMetadata objects that we can use to populate the front page."""
- database_repositories = []
-
- # First, let's see if we have any metadata cached.
- cached_data = RepositoryMetadata.objects.all()
+ # First off, load the timestamp of the least recently updated entry.
+ last_update = (
+ RepositoryMetadata.objects.values_list("last_updated", flat=True)
+ .order_by("last_updated").first()
+ )
- # If we don't, we have to create some!
- if not cached_data:
+ # If we did not retrieve any results here, we should import them!
+ if last_update is None:
# Try to get new data from the API. If it fails, we'll return an empty list.
# In this case, we simply don't display our projects on the site.
api_repositories = self._get_api_data()
# Create all the repodata records in the database.
- for api_data in api_repositories.values():
- repo_data = RepositoryMetadata(
+ return RepositoryMetadata.objects.bulk_create(
+ RepositoryMetadata(
repo_name=api_data["full_name"],
description=api_data["description"],
forks=api_data["forks_count"],
stargazers=api_data["stargazers_count"],
language=api_data["language"],
)
-
- repo_data.save()
- database_repositories.append(repo_data)
-
- return database_repositories
+ for api_data in api_repositories.values()
+ )
# If the data is stale, we should refresh it.
- if (timezone.now() - cached_data[0].last_updated).seconds > self.repository_cache_ttl:
+ if (timezone.now() - last_update).seconds > self.repository_cache_ttl:
# Try to get new data from the API. If it fails, return the cached data.
api_repositories = self._get_api_data()
@@ -110,22 +124,18 @@ class HomeView(View):
return RepositoryMetadata.objects.all()
# Update or create all RepoData objects in self.repos
- for repo_name, api_data in api_repositories.items():
- try:
- repo_data = RepositoryMetadata.objects.get(repo_name=repo_name)
- repo_data.description = api_data["description"]
- repo_data.language = api_data["language"]
- repo_data.forks = api_data["forks_count"]
- repo_data.stargazers = api_data["stargazers_count"]
- except RepositoryMetadata.DoesNotExist:
- repo_data = RepositoryMetadata(
- repo_name=api_data["full_name"],
- description=api_data["description"],
- forks=api_data["forks_count"],
- stargazers=api_data["stargazers_count"],
- language=api_data["language"],
- )
- repo_data.save()
+ database_repositories = []
+ for api_data in api_repositories.values():
+ repo_data, _created = RepositoryMetadata.objects.update_or_create(
+ repo_name=api_data["full_name"],
+ defaults={
+ 'repo_name': api_data["full_name"],
+ 'description': api_data["description"],
+ 'forks': api_data["forks_count"],
+ 'stargazers': api_data["stargazers_count"],
+ 'language': api_data["language"],
+ }
+ )
database_repositories.append(repo_data)
return database_repositories
diff --git a/pydis_site/constants.py b/pydis_site/constants.py
index e6a63d12..e913f40f 100644
--- a/pydis_site/constants.py
+++ b/pydis_site/constants.py
@@ -2,3 +2,5 @@ import os
GIT_SHA = os.environ.get("GIT_SHA", "development")
GITHUB_TOKEN = os.environ.get("GITHUB_TOKEN")
+# How long to wait for synchronous requests before timing out
+TIMEOUT_PERIOD = int(os.environ.get("TIMEOUT_PERIOD", 5))
diff --git a/pydis_site/settings.py b/pydis_site/settings.py
index 710c56cc..da582517 100644
--- a/pydis_site/settings.py
+++ b/pydis_site/settings.py
@@ -14,6 +14,7 @@ import os
import secrets
import sys
from pathlib import Path
+from socket import gethostbyname, gethostname
import environ
import sentry_sdk
@@ -23,7 +24,8 @@ from pydis_site.constants import GIT_SHA
env = environ.Env(
DEBUG=(bool, False),
- SITE_DSN=(str, "")
+ SITE_DSN=(str, ""),
+ BUILDING_DOCKER=(bool, False)
)
sentry_sdk.init(
@@ -58,6 +60,8 @@ else:
'api.pythondiscord.com',
'staff.pythondiscord.com',
'pydis-api.default.svc.cluster.local',
+ gethostname(),
+ gethostbyname(gethostname())
]
)
SECRET_KEY = env('SECRET_KEY')
@@ -84,10 +88,15 @@ INSTALLED_APPS = [
'django_filters',
'django_simple_bulma',
'rest_framework',
- 'rest_framework.authtoken'
+ 'rest_framework.authtoken',
]
+if not env("BUILDING_DOCKER"):
+ INSTALLED_APPS.append("django_prometheus")
+
+# Ensure that Prometheus middlewares are first and last here.
MIDDLEWARE = [
+ 'django_prometheus.middleware.PrometheusBeforeMiddleware',
'django_hosts.middleware.HostsRequestMiddleware',
'django.middleware.security.SecurityMiddleware',
@@ -100,7 +109,9 @@ MIDDLEWARE = [
'django.middleware.clickjacking.XFrameOptionsMiddleware',
'django_hosts.middleware.HostsResponseMiddleware',
+ 'django_prometheus.middleware.PrometheusAfterMiddleware'
]
+
ROOT_URLCONF = 'pydis_site.urls'
TEMPLATES = [
diff --git a/pydis_site/templates/events/index.html b/pydis_site/templates/events/index.html
index 64bf2c25..daad1c9c 100644
--- a/pydis_site/templates/events/index.html
+++ b/pydis_site/templates/events/index.html
@@ -121,6 +121,6 @@
{% endblock %}
{% block sidebar %}
- {% include "events/sidebar/upcoming-event.html" %}
+ {% include "events/sidebar/ongoing-event.html" %}
{% include "events/sidebar/events-list.html" %}
{% endblock %}
diff --git a/pydis_site/templates/events/pages/code-jams/8/_index.html b/pydis_site/templates/events/pages/code-jams/8/_index.html
index c510c250..55bdc95b 100644
--- a/pydis_site/templates/events/pages/code-jams/8/_index.html
+++ b/pydis_site/templates/events/pages/code-jams/8/_index.html
@@ -12,12 +12,12 @@
{% block event_content %}
<p>Twice a year we host a code jam for members of our server to participate in. The code jam is an event where we place you
- in a team with 5 other random server members. You then have 7 days to code some sort of application or program in Python.
+ in a team with 5 other random server members. You then have 8 days to code some sort of application or program in Python.
Your program must use the specified technology/framework and incorporate the theme chosen by the server.
</p>
<p>
- After the 7 days is complete, your team has 2 days to finish documentation and create a video presentation showcasing
- and walking through the program that your team has created. More details and specifics of this will be released within the next 2 weeks.
+ After the 8 days is complete, your team has 3 days to finish documentation and create a video presentation showcasing
+ and walking through the program that your team has created.
</p>
<h3 id="important-dates"><a href="#important-dates">Important Dates</a></h3>
@@ -26,10 +26,10 @@
<li>Monday, June 21 - <a href="https://github.com/python-discord/cj8-qualifier">The Qualifier</a> is released</li>
<li>Friday, June 25 - Voting for the theme opens</li>
<li>Saturday, June 26 @ 4PM UTC- <a class="has-text-link" href="{% url "events:page" path="code-jams/8/github-bootcamp" %}">GitHub Bootcamp</a></li>
- <li>Wednesday, June 30 - The Qualifier closes</li>
- <li>Friday, July 9 - Code Jam begins</li>
- <li>Friday, July 16 - Coding portion of the jam ends</li>
- <li>Sunday, July 18 - Code Jam submissions are closed</li>
+ <li>Wednesday, July 1 - The Qualifier closes</li>
+ <li>Friday, July 9 @ 5PM UTC - Code Jam begins and the theme is announced</li>
+ <li>Saturday, July 17 @ 5PM UTC - Coding portion of the jam ends</li>
+ <li>Tuesday, July 20 - Code Jam submissions are closed and video presentation must be submitted</li>
</ul>
<h3 id="technology"><a href="#technology">Technology</a></h3>
@@ -52,11 +52,10 @@
<li>The Qualifier must be submitted through the Code Jam sign-up form.</li>
</ul>
</p>
- <h3 id="how-to-join"><a href="#how-to-join">How to Join</a></h3>
+ <h3 id="submissions"><a href="#submissions">Submissions</a></h3>
<p>
- To enter into the code jam you must complete <a href="#qualifier">The Qualifier</a> and submit the sign-up form.
- Don't forget to join us on Discord at <a href="https://discord.gg/python">discord.gg/python</a>!
- <div class="has-text-centered"><a class="button is-link" href="https://form.jotform.com/211714357615050" target="_blank">Sign up for the Code Jam</a></div>
+ 63 teams started out on July 9th 2021. By the end of the jam, 51 teams made project submissions. Check them all out here:
+ <div class="has-text-centered"><a class="button is-link" href="submissions">View Submissions</a></div>
</p>
<h3 id="prizes"><a href="#prizes">Prizes</a></h3>
<p>
diff --git a/pydis_site/templates/events/pages/code-jams/8/frameworks.html b/pydis_site/templates/events/pages/code-jams/8/frameworks.html
index 532fb71f..34ac4f0a 100644
--- a/pydis_site/templates/events/pages/code-jams/8/frameworks.html
+++ b/pydis_site/templates/events/pages/code-jams/8/frameworks.html
@@ -73,6 +73,11 @@
<li><strong>Supports:</strong> Linux, Mac, and Windows</li>
<li>Documentation is good and overall is very OOP focused</li>
<li>Robust with many features and example snippets</li>
+ <li>To supplement Rich the following library is approved, although no guarantees are made for stability.</li>
+ <ul>
+ <li><a href="https://github.com/willmcgugan/textual" target="_blank">Textual</a> - a TUI framework using Rich as the render.
+ <br>It is still under active development, is only available on Mac/Linux, and is not stable yet.</li>
+ </ul>
</ul>
</div>
<div class="column">
diff --git a/pydis_site/templates/events/pages/code-jams/8/submissions.html b/pydis_site/templates/events/pages/code-jams/8/submissions.html
new file mode 100644
index 00000000..16309bd3
--- /dev/null
+++ b/pydis_site/templates/events/pages/code-jams/8/submissions.html
@@ -0,0 +1,484 @@
+{% extends "events/base_sidebar.html" %}
+
+{% load static %}
+
+{% block title %}Summer Code Jam 2021{% endblock %}
+
+{% block breadcrumb %}
+ <li><a href="{% url "events:index" %}">Events</a></li>
+ <li><a href="{% url "events:page" path="code-jams" %}">Code Jams</a></li>
+ <li><a href="{% url "events:page" path="code-jams/8" %}">Summer Code Jam 2021</a></li>
+ <li class="is-active"><a href="#">Submissions</a></li>
+{% endblock %}
+
+{% block event_content %}
+ <p>
+ Below is a list of all projects submitted by the end of Summer Code Jam 2021
+ </p>
+
+ <div class="columns is-mobile is-centered">
+ <div class="column is-half">
+ <p class="has-text-centered">Acute Alligators</p>
+ </div>
+ <div class="column is-half">
+ <p class="has-text-centered"><a href="https://github.com/n0remac/Acute-Alligators-2021-Summer-Code-Jam" title="Acute Alligators' Repository">GitHub</a></p>
+ </div>
+ </div>
+
+ <div class="columns is-mobile is-centered">
+ <div class="column is-half">
+ <p class="has-text-centered">Adaptable Antelopes</p>
+ </div>
+ <div class="column is-half">
+ <p class="has-text-centered"><a href="https://github.com/BoraxTheClean/adaptable-antelopes" title="Adaptable Antelopes' Repository">GitHub</a></p>
+ </div>
+ </div>
+
+ <div class="columns is-mobile is-centered">
+ <div class="column is-half">
+ <p class="has-text-centered">Astounding Arapaimas</p>
+ </div>
+ <div class="column is-half">
+ <p class="has-text-centered"><a href="https://github.com/p0lygun/astounding-arapaimas" title="Astounding Arapaimas' Repository">GitHub</a></p>
+ </div>
+ </div>
+
+ <div class="columns is-mobile is-centered">
+ <div class="column is-half">
+ <p class="has-text-centered">Beatific Bulldogs</p>
+ </div>
+ <div class="column is-half">
+ <p class="has-text-centered"><a href="https://github.com/beatific-bulldogs/code-jam" title="Beatific Bulldogs' Repository">GitHub</a></p>
+ </div>
+ </div>
+
+ <div class="columns is-mobile is-centered">
+ <div class="column is-half">
+ <p class="has-text-centered">Benevolent Bonobos</p>
+ </div>
+ <div class="column is-half">
+ <p class="has-text-centered"><a href="https://github.com/Anand1310/summer-code-jam-2021" title="Benevolent Bonobos' Repository">GitHub</a></p>
+ </div>
+ </div>
+
+ <div class="columns is-mobile is-centered">
+ <div class="column is-half">
+ <p class="has-text-centered">Blessed Badgers</p>
+ </div>
+ <div class="column is-half">
+ <p class="has-text-centered"><a href="https://github.com/StephD/CJ8-blessed-badgers" title="Blessed Badgers' Repository">GitHub</a></p>
+ </div>
+ </div>
+
+ <div class="columns is-mobile is-centered">
+ <div class="column is-half">
+ <p class="has-text-centered">Bright Bluefins</p>
+ </div>
+ <div class="column is-half">
+ <p class="has-text-centered"><a href="https://github.com/DavinderJolly/bright-bluefins/" title="Bright Bluefins' Repository">GitHub</a></p>
+ </div>
+ </div>
+
+ <div class="columns is-mobile is-centered">
+ <div class="column is-half">
+ <p class="has-text-centered">Businesslike Buffalo</p>
+ </div>
+ <div class="column is-half">
+ <p class="has-text-centered"><a href="https://github.com/Sahaj001/Businesslike_Buffalo" title="Businesslike Buffalo's Repository">GitHub</a></p>
+ </div>
+ </div>
+
+ <div class="columns is-mobile is-centered">
+ <div class="column is-half">
+ <p class="has-text-centered">Canny Capybaras</p>
+ </div>
+ <div class="column is-half">
+ <p class="has-text-centered"><a href="https://github.com/aiyayayaya/canny-capybaras-collab-code-contest" title="Canny Capybaras' Repository">GitHub</a></p>
+ </div>
+ </div>
+
+ <div class="columns is-mobile is-centered">
+ <div class="column is-half">
+ <p class="has-text-centered">Cheerful Cheetahs</p>
+ </div>
+ <div class="column is-half">
+ <p class="has-text-centered"><a href="https://github.com/cj8-cheerful-cheetahs/project" title="Cheerful Cheetahs' Repository">GitHub</a></p>
+ </div>
+ </div>
+
+ <div class="columns is-mobile is-centered">
+ <div class="column is-half">
+ <p class="has-text-centered">Classic Clownfish</p>
+ </div>
+ <div class="column is-half">
+ <p class="has-text-centered"><a href="https://github.com/Istalantar/SCJ-2021-classic-clownfish" title="Classic Clownfish's Repository">GitHub</a></p>
+ </div>
+ </div>
+
+ <div class="columns is-mobile is-centered">
+ <div class="column is-half">
+ <p class="has-text-centered">Considerate Coatis</p>
+ </div>
+ <div class="column is-half">
+ <p class="has-text-centered"><a href="https://github.com/yashkir/considerate-coatis" title="Considerate Coatis' Repository">GitHub</a></p>
+ </div>
+ </div>
+
+ <div class="columns is-mobile is-centered">
+ <div class="column is-half">
+ <p class="has-text-centered">Dedicated Dugongs</p>
+ </div>
+ <div class="column is-half">
+ <p class="has-text-centered"><a href="https://github.com/Areking-RS/Code-jam-2021" title="Dedicated Dugongs' Repository">GitHub</a></p>
+ </div>
+ </div>
+
+ <div class="columns is-mobile is-centered">
+ <div class="column is-half">
+ <p class="has-text-centered">Discrete Dingos</p>
+ </div>
+ <div class="column is-half">
+ <p class="has-text-centered"><a href="https://github.com/somthecoder/CodeJam-Discrete-Dingos" title="Discrete Dingos' Repository">GitHub</a></p>
+ </div>
+ </div>
+
+ <div class="columns is-mobile is-centered">
+ <div class="column is-half">
+ <p class="has-text-centered">Enlightened Elks</p>
+ </div>
+ <div class="column is-half">
+ <p class="has-text-centered"><a href="https://github.com/GriceTurrble/enlightened-elks-codejam/" title="Enlightened Elks' Repository">GitHub</a></p>
+ </div>
+ </div>
+
+ <div class="columns is-mobile is-centered">
+ <div class="column is-half">
+ <p class="has-text-centered">Esteemed Emus</p>
+ </div>
+ <div class="column is-half">
+ <p class="has-text-centered"><a href="https://github.com/Vthechamp22/esteemed-emus" title="Esteemed Emus' Repository">GitHub</a></p>
+ </div>
+ </div>
+
+ <div class="columns is-mobile is-centered">
+ <div class="column is-half">
+ <p class="has-text-centered">Favorable Fishers</p>
+ </div>
+ <div class="column is-half">
+ <p class="has-text-centered"><a href="https://github.com/UntriexTv/favorable-fishers" title="Favorable Fishers' Repository">GitHub</a></p>
+ </div>
+ </div>
+
+ <div class="columns is-mobile is-centered">
+ <div class="column is-half">
+ <p class="has-text-centered">Feisty Ferrets</p>
+ </div>
+ <div class="column is-half">
+ <p class="has-text-centered"><a href="https://github.com/ToxicKidz/summer-code-jam-8" title="Feisty Ferrets' Repository">GitHub</a></p>
+ </div>
+ </div>
+
+ <div class="columns is-mobile is-centered">
+ <div class="column is-half">
+ <p class="has-text-centered">Gallant Grasshoppers</p>
+ </div>
+ <div class="column is-half">
+ <p class="has-text-centered"><a href="https://github.com/StackedQueries/gallant-grasshoppers" title="Gallant Grasshoppers' Repository">GitHub</a></p>
+ </div>
+ </div>
+
+ <div class="columns is-mobile is-centered">
+ <div class="column is-half">
+ <p class="has-text-centered">Grand Geckos</p>
+ </div>
+ <div class="column is-half">
+ <p class="has-text-centered"><a href="https://github.com/imsofi/codejam-grand-geckos/" title="Grand Geckos' Repository">GitHub</a></p>
+ </div>
+ </div>
+
+ <div class="columns is-mobile is-centered">
+ <div class="column is-half">
+ <p class="has-text-centered">Hospitable Hares</p>
+ </div>
+ <div class="column is-half">
+ <p class="has-text-centered"><a href="https://github.com/samarthkulshrestha/hospitable-hares_code-jam-8" title="Hospitable Hares' Repository">GitHub</a></p>
+ </div>
+ </div>
+
+ <div class="columns is-mobile is-centered">
+ <div class="column is-half">
+ <p class="has-text-centered">Humorous Honeybees</p>
+ </div>
+ <div class="column is-half">
+ <p class="has-text-centered"><a href="https://github.com/mirandazellnik/code-jam-2021" title="Humorous Honeybees' Repository">GitHub</a></p>
+ </div>
+ </div>
+
+ <div class="columns is-mobile is-centered">
+ <div class="column is-half">
+ <p class="has-text-centered">Jaunty Jackals</p>
+ </div>
+ <div class="column is-half">
+ <p class="has-text-centered"><a href="https://github.com/Jaunty-Jackals/jaunty-jackals" title="Jaunty Jackals' Repository">GitHub</a></p>
+ </div>
+ </div>
+
+ <div class="columns is-mobile is-centered">
+ <div class="column is-half">
+ <p class="has-text-centered">Jazzed Jerboas</p>
+ </div>
+ <div class="column is-half">
+ <p class="has-text-centered"><a href="https://github.com/tomheaton/pcj8-jazzed-jerboas" title="Jazzed Jerboas' Repository">GitHub</a></p>
+ </div>
+ </div>
+
+ <div class="columns is-mobile is-centered">
+ <div class="column is-half">
+ <p class="has-text-centered">Jubilant Jellyfish</p>
+ </div>
+ <div class="column is-half">
+ <p class="has-text-centered"><a href="https://github.com/Cheepsss/Jubilant-Jellyfish" title="Jubilant Jellyfish's Repository">GitHub</a></p>
+ </div>
+ </div>
+
+ <div class="columns is-mobile is-centered">
+ <div class="column is-half">
+ <p class="has-text-centered">Lovable Lobsters</p>
+ </div>
+ <div class="column is-half">
+ <p class="has-text-centered"><a href="https://github.com/A5rocks/code-jam-8" title="Lovable Lobsters' Repository">GitHub</a></p>
+ </div>
+ </div>
+
+ <div class="columns is-mobile is-centered">
+ <div class="column is-half">
+ <p class="has-text-centered">Magical Muskrats</p>
+ </div>
+ <div class="column is-half">
+ <p class="has-text-centered"><a href="https://github.com/harjyotbagga/escape-room" title="Magical Muskrats' Repository">GitHub</a></p>
+ </div>
+ </div>
+
+ <div class="columns is-mobile is-centered">
+ <div class="column is-half">
+ <p class="has-text-centered">Mature Magpies</p>
+ </div>
+ <div class="column is-half">
+ <p class="has-text-centered"><a href="https://github.com/Mature-Magpies/think-inside-the-box" title="Mature Magpies' Repository">GitHub</a></p>
+ </div>
+ </div>
+
+ <div class="columns is-mobile is-centered">
+ <div class="column is-half">
+ <p class="has-text-centered">Merciful Millipedes</p>
+ </div>
+ <div class="column is-half">
+ <p class="has-text-centered"><a href="https://github.com/Reuben27/Merciful-Millipedes" title="Merciful Millipedes' Repository">GitHub</a></p>
+ </div>
+ </div>
+
+ <div class="columns is-mobile is-centered">
+ <div class="column is-half">
+ <p class="has-text-centered">Meteoric Minks</p>
+ </div>
+ <div class="column is-half">
+ <p class="has-text-centered"><a href="https://github.com/meteoric-minks/code-jam" title="Meteoric Minks' Repository">GitHub</a></p>
+ </div>
+ </div>
+
+ <div class="columns is-mobile is-centered">
+ <div class="column is-half">
+ <p class="has-text-centered">Modern Meerkats</p>
+ </div>
+ <div class="column is-half">
+ <p class="has-text-centered"><a href="https://github.com/Ahmed-Khaled-dev/modern-meerkats" title="Modern Meerkats' Repository">GitHub</a></p>
+ </div>
+ </div>
+
+ <div class="columns is-mobile is-centered">
+ <div class="column is-half">
+ <p class="has-text-centered">Notable Newts</p>
+ </div>
+ <div class="column is-half">
+ <p class="has-text-centered"><a href="https://github.com/meysam81/notable-newts" title="Notable Newts' Repository">GitHub</a></p>
+ </div>
+ </div>
+
+ <div class="columns is-mobile is-centered">
+ <div class="column is-half">
+ <p class="has-text-centered">Notorious Narwhals</p>
+ </div>
+ <div class="column is-half">
+ <p class="has-text-centered"><a href="https://github.com/smileyface12349/notorious-narwhals" title="Notorious Narwhals' Repository">GitHub</a></p>
+ </div>
+ </div>
+
+ <div class="columns is-mobile is-centered">
+ <div class="column is-half">
+ <p class="has-text-centered">Patient Panthers</p>
+ </div>
+ <div class="column is-half">
+ <p class="has-text-centered"><a href="https://github.com/Willd14469/cj8-patient-panthers" title="Patient Panthers' Repository">GitHub</a></p>
+ </div>
+ </div>
+
+ <div class="columns is-mobile is-centered">
+ <div class="column is-half">
+ <p class="has-text-centered">Perceptive Porcupines</p>
+ </div>
+ <div class="column is-half">
+ <p class="has-text-centered"><a href="https://github.com/what-the-python/wtpython" title="Perceptive Porcupines' Repository">GitHub</a></p>
+ </div>
+ </div>
+
+ <div class="columns is-mobile is-centered">
+ <div class="column is-half">
+ <p class="has-text-centered">Poetic Pumas</p>
+ </div>
+ <div class="column is-half">
+ <p class="has-text-centered"><a href="https://github.com/roogla/poetic_pumas" title="Poetic Pumas' Repository">GitHub</a></p>
+ </div>
+ </div>
+
+ <div class="columns is-mobile is-centered">
+ <div class="column is-half">
+ <p class="has-text-centered">Purposeful Pangolins</p>
+ </div>
+ <div class="column is-half">
+ <p class="has-text-centered"><a href="https://github.com/doodletaco/dataset-viewer" title="Purposeful Pangolins' Repository">GitHub</a></p>
+ </div>
+ </div>
+
+ <div class="columns is-mobile is-centered">
+ <div class="column is-half">
+ <p class="has-text-centered">Quirky Quokkas</p>
+ </div>
+ <div class="column is-half">
+ <p class="has-text-centered"><a href="https://github.com/joshuacc1/Music-Player-CLI-Anywhere" title="Quirky Quokkas' Repository">GitHub</a></p>
+ </div>
+ </div>
+
+ <div class="columns is-mobile is-centered">
+ <div class="column is-half">
+ <p class="has-text-centered">Respectful Racoons</p>
+ </div>
+ <div class="column is-half">
+ <p class="has-text-centered"><a href="https://github.com/manjunaath5583/respectful_racoons" title="Respectful Racoons' Repository">GitHub</a></p>
+ </div>
+ </div>
+
+ <div class="columns is-mobile is-centered">
+ <div class="column is-half">
+ <p class="has-text-centered">Rhapsodic Rabbits</p>
+ </div>
+ <div class="column is-half">
+ <p class="has-text-centered"><a href="https://github.com/yummyyummybaguette/rhapsodic-rabbits" title="Rhapsodic Rabbits' Repository">GitHub</a></p>
+ </div>
+ </div>
+
+ <div class="columns is-mobile is-centered">
+ <div class="column is-half">
+ <p class="has-text-centered">Robust Reindeer</p>
+ </div>
+ <div class="column is-half">
+ <p class="has-text-centered"><a href="https://github.com/bjoseru/pdcj8-robust-reindeer" title="Robust Reindeer's Repository">GitHub</a></p>
+ </div>
+ </div>
+
+ <div class="columns is-mobile is-centered">
+ <div class="column is-half">
+ <p class="has-text-centered">Scholarly Skunks</p>
+ </div>
+ <div class="column is-half">
+ <p class="has-text-centered"><a href="https://github.com/Davidy22/scholarlySkunkJam/" title="Scholarly Skunks' Repository">GitHub</a></p>
+ </div>
+ </div>
+
+ <div class="columns is-mobile is-centered">
+ <div class="column is-half">
+ <p class="has-text-centered">Secretive Squirrels</p>
+ </div>
+ <div class="column is-half">
+ <p class="has-text-centered"><a href="https://github.com/dain-xyz/python-jam-2021-2" title="Secretive Squirrels' Repository">GitHub</a></p>
+ </div>
+ </div>
+
+ <div class="columns is-mobile is-centered">
+ <div class="column is-half">
+ <p class="has-text-centered">Sleek Snails</p>
+ </div>
+ <div class="column is-half">
+ <p class="has-text-centered"><a href="https://github.com/Sleek-Snails/Snail-Snacks" title="Sleek Snails' Repository">GitHub</a></p>
+ </div>
+ </div>
+
+ <div class="columns is-mobile is-centered">
+ <div class="column is-half">
+ <p class="has-text-centered">Spellbinding Squids</p>
+ </div>
+ <div class="column is-half">
+ <p class="has-text-centered"><a href="https://github.com/SystematicError/code-jam" title="Spellbinding Squids' Repository">GitHub</a></p>
+ </div>
+ </div>
+
+ <div class="columns is-mobile is-centered">
+ <div class="column is-half">
+ <p class="has-text-centered">Stylish Salamanders</p>
+ </div>
+ <div class="column is-half">
+ <p class="has-text-centered"><a href="https://github.com/Darklight-user/code-jam-stylish-salamanders" title="Stylish Salamanders' Repository">GitHub</a></p>
+ </div>
+ </div>
+
+ <div class="columns is-mobile is-centered">
+ <div class="column is-half">
+ <p class="has-text-centered">Tactful Tunas</p>
+ </div>
+ <div class="column is-half">
+ <p class="has-text-centered"><a href="https://github.com/Yagueteiro/code-jam-2021/" title="Tactful Tunas' Repository">GitHub</a></p>
+ </div>
+ </div>
+
+ <div class="columns is-mobile is-centered">
+ <div class="column is-half">
+ <p class="has-text-centered">Transcendent Tarsiers</p>
+ </div>
+ <div class="column is-half">
+ <p class="has-text-centered"><a href="https://github.com/kronifer/cj8-repo" title="Transcendent Tarsiers' Repository">GitHub</a></p>
+ </div>
+ </div>
+
+ <div class="columns is-mobile is-centered">
+ <div class="column is-half">
+ <p class="has-text-centered">Tubular Terriers</p>
+ </div>
+ <div class="column is-half">
+ <p class="has-text-centered"><a href="https://github.com/Tubular-Terriers/code-jam" title="Tubular Terriers' Repository">GitHub</a></p>
+ </div>
+ </div>
+
+ <div class="columns is-mobile is-centered">
+ <div class="column is-half">
+ <p class="has-text-centered">Virtuous Vultures</p>
+ </div>
+ <div class="column is-half">
+ <p class="has-text-centered"><a href="https://github.com/iceCream-Taco/cj8-virtuous-vultures" title="Virtuous Vultures' Repository">GitHub</a></p>
+ </div>
+ </div>
+
+ <div class="columns is-mobile is-centered">
+ <div class="column is-half">
+ <p class="has-text-centered">Whimsical Woolly Mammoths</p>
+ </div>
+ <div class="column is-half">
+ <p class="has-text-centered"><a href="https://github.com/SilverSlashDiscord/whimsical-woolly-mammoths" title="Whimsical Woolly Mammoths' Repository">GitHub</a></p>
+ </div>
+ </div>
+
+{% endblock %}
+
+{% block sidebar %}
+
+ {% include "events/sidebar/code-jams/8.html" %}
+
+{% endblock %}
diff --git a/pydis_site/templates/events/pages/code-jams/_index.html b/pydis_site/templates/events/pages/code-jams/_index.html
index fcbfa4d9..22a86db3 100644
--- a/pydis_site/templates/events/pages/code-jams/_index.html
+++ b/pydis_site/templates/events/pages/code-jams/_index.html
@@ -66,7 +66,7 @@
{% endblock %}
{% block sidebar %}
- {% include "events/sidebar/code-jams/upcoming-code-jam.html" %}
+ {% include "events/sidebar/code-jams/ongoing-code-jam.html" %}
{% include "events/sidebar/code-jams/previous-code-jams.html" %}
{% include "events/sidebar/code-jams/useful-information.html" %}
{% endblock %}
diff --git a/pydis_site/templates/events/pages/code-jams/code-style-guide.html b/pydis_site/templates/events/pages/code-jams/code-style-guide.html
new file mode 100644
index 00000000..4ff5baaf
--- /dev/null
+++ b/pydis_site/templates/events/pages/code-jams/code-style-guide.html
@@ -0,0 +1,268 @@
+{% extends "events/base_sidebar.html" %}
+
+{% block breadcrumb %}
+ <li><a href="{% url "events:index" %}">Events</a></li>
+ <li><a href="{% url "events:page" path="code-jams" %}">Code Jams</a></li>
+ <li class="is-active"><a href="#">The Code Style Guide</a></li>
+{% endblock %}
+
+{% block title %}The Code Style Guide{% endblock %}
+
+{% block event_content %}
+ <p>
+ For end-users, the most important parts of the software are functionality and UI/UX.
+ But for developers, there is one more important aspect - code style.
+ While ugly code can do everything that it has to do, developing it further may be a difficult task,
+ especially if the developer didn't write the original code.
+ Which one of the following do you prefer to read and work with?
+ </p>
+ <pre><code class="language-python">MyPath = '/file.txt'
+from pathlib import *
+import os.path,sys
+def check(p):
+ """Uses os.path.exist """
+ return os.path.exists(p)
+
+def getF(
+ p):
+ """Not sure what this do, this just worked.
+ """
+ return Path(p
+ )
+result=[check(MyPath),getF(MyPath)]</code></pre>
+ <p>or</p>
+ <pre><code class="language-python">import os.path
+from pathlib import Path
+
+FILE_PATH = '/file.txt'
+
+
+def check_file_exists(path: str) -> bool:
+ """Checks does file exists in path. Uses os.path.exists."""
+ return os.path.exists(path)
+
+
+def get_path_object(path: str) -> Path:
+ """
+ Returns Path object of the path provided in arguments.
+
+ This is here for backward compatibility, will be removed in the future.
+ """
+ return Path(path)
+
+result = [
+ check_file_exists(FILE_PATH),
+ get_path_object(FILE_PATH),
+]</code></pre>
+
+ <p>
+ The second is definitely easier to read and understand.
+ These scripts are small and even with the first code snippet you can understand what the code does pretty quickly,
+ but what if the project has thousands and thousands of files in a really complex folder structure?
+ Do you want to work with code that looks like the first example?
+ You can save hours sometimes if you write beautiful code that follows the style guidelines.
+ </p>
+ <p>
+ The most important code style document for Python is <b><a href="https://www.python.org/dev/peps/pep-0008/">PEP 8</a></b>.
+ This Python Enhancement Proposal lays out the majority of all Python code style guidelines.
+ This article will cover the most important aspects of PEP 8.
+ </p>
+
+ <h2>Linters</h2>
+ <p>
+ But everyone makes mistakes and there are so many style rules that can be really difficult to remember and always follow.
+ Luckily, we have amazing tools that help us - linters. While there are many linters,
+ we'd like code jam participants to use <b><a href="https://flake8.pycqa.org/en/latest/">flake8</a></b>.
+ Flake8 points out to you rules what you did break in your code so you can fix them.
+ </p>
+
+ <h2>Guidelines</h2>
+ <h3>Basics</h3>
+ <p>For indentation, you should use 4 spaces. Using tabs is not suggested, but if you do, you can't mix spaces and tabs.</p>
+ <p>
+ PEP 8 defines a maximum line length of 79 characters, however,
+ we are not so strict - teams are welcome to choose a maximum line length between 79 and 119 characters.
+ </p>
+ <p>2 blank lines should be left before functions and classes. Single blank lines are used to split sections and make logical breaks.</p>
+
+ <h3>Naming</h3>
+ <p>Module, file, function, and variable names (except type variables) should be lowercase and use underscores.</p>
+ <pre><code class="language-python"># File: my_module.py/mymodule.py
+
+def my_function():
+ my_variable = "value"</code></pre>
+ <p>Class and type variable names should use the PascalCase style.</p>
+ <pre><code class="language-python">from typing import List
+
+
+class MyClass:
+ pass
+
+ListOfMyClass = List[MyClass]</code></pre>
+ <p>Constant names should use the SCREAMING_SNAKE_CASE style.</p>
+ <pre><code class="language-python">MY_CONSTANT = 1</code></pre>
+ <p>
+ You should avoid single-character names, as these might be confusing.
+ But if you still do, you should avoid characters that may look like zero or one in some fonts:
+ "O" (uppercase o), "l" (lowercase L), and "I" (uppercase i).
+ </p>
+
+ <h3>Operators</h3>
+ <p>
+ If you have a chain of mathematic operations that you split into multiple lines,
+ you should put the operator at the beginning of the line and not the end of the line.
+ </p>
+ <pre><code class="language-python"># No
+result = (
+ 1 +
+ 2 *
+ 3
+)
+
+# Yes
+result = (
+ 1
+ + 2
+ * 3
+)</code></pre>
+ <p>If you ever check if something is equivalent to <code>None</code>, you should use <code>is</code> and <code>is not</code> instead of the <code>==</code> operator.</p>
+ <pre><code class="language-python"># No
+if variable == None:
+ print("Variable is None")
+
+# Yes
+if variable is None:
+ print("Variable is None")</code></pre>
+ <p>
+ You should prefer using <code>&lt;item one&gt; is not &lt;item two&gt;</code> over <code>not &lt;item one&gt; is &lt;item two&gt;</code>.
+ Using the latter makes it harder to understand what the expression is trying to do.
+ </p>
+ <pre><code class="language-python"># No
+if not variable is None:
+ print("Variable is not None")
+
+# Yes - it is much easier to read and understand this than previous
+if variable is not None:
+ print("Variable is not None")</code></pre>
+
+ <h3>Imports</h3>
+ <p>Imports should be at top of the file, the only things that should be before them are module comments and docstrings.</p>
+ <p>You shouldn't import multiple modules in one line, but give each module import its own line instead.</p>
+ <pre><code class="language-python"># No
+import pathlib, os
+
+# Yes
+import os
+import pathlib</code></pre>
+ <p>Wildcard imports should be avoided in most cases. It clutters the namespace and makes it less clear where functions or classes are coming from.</p>
+ <pre><code class="language-python"># No
+from pathlib import *
+
+# Yes
+from pathlib import Path</code></pre>
+ <p>You should use <b><a href="https://pycqa.github.io/isort/">isort</a></b> imports order specification, which means:</p>
+ <ul>
+ <li>
+ <b>Group by type:</b> order of import types should be: <code>__future__</code> imports, standard library imports,
+ third-party library imports, and finally project imports.
+ </li>
+ <li>
+ <b>Group by import method:</b> inside each group, first should come imports in format <code>import &lt;package&gt;</code>
+ and after them <code>from &lt;package&gt; import &lt;items&gt;</code>.
+ </li>
+ <li>
+ <b>Order imports alphabetically:</b> inside each import method group, imports should be ordered by package names.
+ </li>
+ <li>
+ <b>Order individual import items by type and alphabetically:</b> in <code>from &lt;package&gt; import &lt;items&gt;</code> format,
+ <code>&lt;items&gt;</code> should be ordered alphabetically, starting with bare module imports.
+ </li>
+ </ul>
+
+ <h3>Comments</h3>
+ <p>
+ Comments are really important because they help everyone understand what code does.
+ In general, comments should explain <i>why</i> you are doing something if it's not obvious.
+ You should aim to write code that makes it obvious what it is doing and you can use the comments to explain why and provide some context.
+ </p>
+ <p>
+ Keep in mind that just as important as having comments, is making sure they stay up to date.
+ Out-of-date and incorrect comments confuse readers of your code (including future you).
+ </p>
+ <p>Comments content should start with a capital letter and be a full sentence(s).</p>
+ <p>There are three types of comments: block comments, inline comments, and docstrings.</p>
+ <ul>
+ <li>
+ <h4>Block comments</h4>
+ <p>
+ Probably most common comment type. Should be indented to the same level as the code they describe.
+ Each line in the block comment has to start with <code>#</code> and should be followed by a single space.
+ To separate paragraphs, use one line containing only <code>#</code>.
+ </p>
+ <pre><code class="language-python">if variable is None or variable == 1:
+ # If variable is None, something went wrong previously.
+ #
+ # Here starts a new important paragraph.</code></pre>
+ </li>
+ <li>
+ <h4>Inline comments</h4>
+ <p>
+ You should prefer block comments over inline comments and use inline comments only where it is really necessary.
+ Never use inline comments to explain obvious things like what a line does.
+ </p>
+ <p>If you want to use an inline comment on a variable, think first, maybe you can use a better variable name instead.</p>
+ <p>
+ After code and before the start of inline comments should be at least two spaces.
+ Just like block comments, inline comments also have to start with <code>#</code> followed by a single space.
+ </p>
+ <pre><code class="language-python"># Do not use inline comments to explain things
+# that the reader can understand even without the inline comment.
+my_variable = "Value!" # Assign value to my_variable
+
+# Here better variable name can be used like shown in the second line.
+x = "Walmart" # Shop name
+shop_name = "Walmart"
+
+# Sometimes, if something is not obvious, then inline comments are useful.
+# Example is from PEP 8.
+x = x + 1 # Compensate for border</code></pre>
+ </li>
+ <li>
+ <h4>Docstrings</h4>
+ <p>
+ Last, but not least important comment type is docstring, which is a short version of documentation string.
+ Docstring rules haven't been defined by PEP 8, but by <a href="https://www.python.org/dev/peps/pep-0257">PEP 257</a> instead.
+ </p>
+ <p>Docstrings should start and end with three quotes (""").</p>
+ <p>There are two types of docstrings: one-line docstrings and multiline docstrings.</p>
+ <p>
+ One-line docstrings have to start and end in the same line, while multiline docstrings start and end in different lines.
+ Multiline docstring has two parts: summary line and a longer description, which are separated by one empty line.
+ The multiline docstring start and end quotes should be on different lines than the content.
+ </p>
+ <pre><code class="language-python"># This is a one-line docstring.
+"""This is one line module docstring."""
+
+
+# This is a multiline docstring.
+def my_function():
+ """
+ This is the summary line.
+
+ This is the description.
+ """</code></pre>
+ </li>
+ </ul>
+
+ <h2>Too much for you?</h2>
+ <p>
+ Do all these style rules make your head explode? We have something for you! We have a song!
+ We have <a href="https://www.youtube.com/watch?v=hgI0p1zf31k">The PEP 8 Song (featuring lemonsaurus)</a>!
+ Great way to get started with writing beautiful code.
+ </p>
+ <iframe width="500" height="315" src="https://www.youtube.com/embed/hgI0p1zf31k"></iframe>
+{% endblock %}
+
+{% block sidebar %}
+ {% include "events/sidebar/code-jams/useful-information.html" %}
+{% endblock %}
diff --git a/pydis_site/templates/events/sidebar/code-jams/8.html b/pydis_site/templates/events/sidebar/code-jams/8.html
index ff5131c2..36fad680 100644
--- a/pydis_site/templates/events/sidebar/code-jams/8.html
+++ b/pydis_site/templates/events/sidebar/code-jams/8.html
@@ -4,6 +4,8 @@
<a class="panel-block has-text-link" href="{% url "events:page" path="code-jams/8/rules" %}">Rules</a>
<a class="panel-block has-text-link" href="{% url "events:page" path="code-jams/8/frameworks" %}">Approved Frameworks</a>
<a class="panel-block has-text-link" href="{% url "events:page" path="code-jams/8/github-bootcamp" %}">GitHub Bootcamp</a>
+ <a class="panel-block has-text-link" href="{% url "events:page" path="code-jams/8/submissions" %}">Submissions</a>
+ <a class="panel-block has-text-link" href="{% url "events:page" path="code-jams/code-style-guide" %}">The Code Style Guide</a>
</ul>
</div>
<div class="box">
diff --git a/pydis_site/templates/events/sidebar/code-jams/upcoming-code-jam.html b/pydis_site/templates/events/sidebar/code-jams/ongoing-code-jam.html
index 19806b4e..f4fa3a37 100644
--- a/pydis_site/templates/events/sidebar/code-jams/upcoming-code-jam.html
+++ b/pydis_site/templates/events/sidebar/code-jams/ongoing-code-jam.html
@@ -1,7 +1,7 @@
{% load static %}
<div class="box">
- <h4 class="menu-label">Upcoming Code Jam</h4>
+ <h4 class="menu-label">Ongoing Code Jam</h4>
<a href="{% url "events:page" path="code-jams/8" %}">
<img src="{% static "images/events/summer_code_jam_2021/banner.png" %}" alt="Summer Code Jam 2021">
</a>
diff --git a/pydis_site/templates/events/sidebar/code-jams/useful-information.html b/pydis_site/templates/events/sidebar/code-jams/useful-information.html
index c4e665e6..87a92ade 100644
--- a/pydis_site/templates/events/sidebar/code-jams/useful-information.html
+++ b/pydis_site/templates/events/sidebar/code-jams/useful-information.html
@@ -4,5 +4,6 @@
<li><a class="has-text-link" href="{% url "events:page" path="code-jams/using-git" %}">How to use git</a></li>
<li><a class="has-text-link" href="{% url "events:page" path="code-jams/judging" %}">How does judging work?</a></li>
<li><a class="has-text-link" href="{% url "events:page" path="code-jams/pull-request" %}">Opening a Pull Request</a></li>
+ <li><a class="has-text-link" href="{% url "events:page" path="code-jams/code-style-guide" %}">The Code Style Guide</a></li>
</ul>
</div>
diff --git a/pydis_site/templates/events/sidebar/upcoming-event.html b/pydis_site/templates/events/sidebar/ongoing-event.html
index cfa4cf88..37dfdf77 100644
--- a/pydis_site/templates/events/sidebar/upcoming-event.html
+++ b/pydis_site/templates/events/sidebar/ongoing-event.html
@@ -1,7 +1,7 @@
{% load static %}
<div class="box">
- <p class="menu-label">Upcoming Event</p>
+ <p class="menu-label">Ongoing Event</p>
<a href="{% url "events:page" path="code-jams/8" %}">
<img src="{% static "images/events/summer_code_jam_2021/banner.png" %}" alt="Summer Code Jam 2021">
</a>
diff --git a/pydis_site/templates/home/index.html b/pydis_site/templates/home/index.html
index 2efa5b49..072e3817 100644
--- a/pydis_site/templates/home/index.html
+++ b/pydis_site/templates/home/index.html
@@ -12,7 +12,7 @@
<!-- Mobile-only Notice -->
<section id="mobile-notice" class="message is-primary is-hidden-tablet">
<a href="/events/code-jams/8/">
- <img src="{% static "images/events/summer_code_jam_2021/front_page_banners/sign_up_now.png" %}" alt="Summer Code Jam 2021">
+ <img src="{% static "images/events/summer_code_jam_2021/front_page_banners/currently_live.png" %}" alt="Summer Code Jam 2021">
</a>
</section>
@@ -48,7 +48,7 @@
{# Code Jam banner #}
<div id="wave-hero-right" class="column is-half">
<a href="/events/code-jams/8/">
- <img src="{% static "images/events/summer_code_jam_2021/front_page_banners/sign_up_now.png" %}" alt="Summer Code Jam 2021">
+ <img src="{% static "images/events/summer_code_jam_2021/front_page_banners/currently_live.png" %}" alt="Summer Code Jam 2021">
</a>
</div>
</div>
diff --git a/pydis_site/templates/home/timeline.html b/pydis_site/templates/home/timeline.html
index d9069aca..b404d6c0 100644
--- a/pydis_site/templates/home/timeline.html
+++ b/pydis_site/templates/home/timeline.html
@@ -111,7 +111,7 @@
pretty much as soon as our new bot and site starts collecting some data. To this day, we keep <a
href="https://pythondiscord.com/pages/privacy/">our privacy policy</a> up to date with all
changes, and since April 2020 we've started doing <a
- href="https://pythondiscord.com/pages/data-reviews/">monthly data reviews</a>.</p>
+ href="https://pythondiscord.notion.site/6784e3a9752444e89d19e65fd4510d8d">monthly data reviews</a>.</p>
<div class="flex justify-between items-center">
<span class="cd-timeline__date">May 21st, 2018</span>