Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
45 changes: 45 additions & 0 deletions docs/en/news/posts/2026/events/europython-2026.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,45 @@
---
title: We'll be at EuroPython 2026!
date: 2026-07-01
authors:
- mhsmith
categories:
- Events
event:
name: EuroPython 2026
url: https://ep2026.europython.eu
date: 2026-07-13
end_date: 2026-07-19
description: |-
EuroPython is a week of talks, tutorials, sprints, and community. Join 1,500+ Pythonistas in July, in Kraków, Poland 🇵🇱.
involvement:
- type: talk
team_members:
- mhsmith
title: Supporting Android and iOS in your Python package
url: https://ep2026.europython.eu/session/supporting-android-and-ios-in-your-python-package
date: 2026-07-17
end_date: 2026-07-17
description: |
One of the most exciting recent developments in Python is the addition of Android and iOS as officially-supported platforms. This allows us to reach far more users on the devices where they spend the most time.

What does this mean for you as a Python package maintainer? If your package is pure-Python, then it'll probably just work. But if it uses C, Cython, Rust, or any other native-compiled language, then you'll have to take some steps to make it available to these new platforms.

The mobile support status of the most popular packages on PyPI can be seen at beeware.org/mobile-wheels. Let's help push those numbers up! Come to this talk to learn about:

* Why mobile platforms are important for the future of Python
* How to build your package for Android and iOS using cibuildwheel
* How to test your mobile builds – even if you don't have Android or iOS hardware
* How to distribute mobile packages to your users
* How to automate all of these things in your CI system
- type: sprint
team_members:
- mhsmith
url: https://ep2026.europython.eu/sprints/
date: 2026-07-18
end_date: 2026-07-18
description: |
Join us for two days of open-source hacking, learning, and collaboration! As is tradition, the sprints will happen the weekend after EuroPython.
---

{{ generate_event_post(authors, event, involvement, team) }}
79 changes: 79 additions & 0 deletions docs/en/news/posts/2026/events/pycon-au-2026.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,79 @@
---
title: We'll be at PyCon AU 2026!
date: 2026-07-29
authors:
- freakboy3742
- glasnt
- kattni
categories:
- Events
event:
name: PyCon AU 2026
url: https://2026.pycon.org.au
date: 2026-08-26
end_date: 2026-08-30
description: |-
PyCon AU is the national conference for everyone using the Python Programming Language.

Hosted annually since 2010, this event brings the national and international Python community together.
involvement:
- type: talk
team_members:
- freakboy3742
title: How to give your Python code to someone else
url: https://2026.pycon.org.au/schedule/AVCYHU/
date: 2026-08-29
end_date: 2026-08-29
description: |
You've written some Python code. It works great on your machine. Now you want someone else to use that code. How do you deliver your Python code to someone else so that they can run it? And how do you do that if the person who needs to use your code isn't a Python user themselves?

In this talk, you'll learn the options you have for delivering your code to someone else. You'll learn what is involved in configuring a project so that someone else can use it, and when you might want to consider bundling your code as a standalone application. You'll get an overview of some of the tools that can be used to produce a standalone application, and a detailed look at one of those options - Briefcase. Finally, you'll be introduced some of the possibly unexpected benefits of bundling your code as a standalone application.
- type: talk
team_members:
- kattni
title: Switching from Sphinx to Markdown
url: https://2026.pycon.org.au/schedule/ZYSPB3/
date: 2026-08-29
end_date: 2026-08-29
description: |
For most of Python's history, the predominant option for documentation has been Sphinx and reStructuredText. However, a majority of other ecosystems have adopted Markdown. There are historical reasons for reStructuredText being a better choice, however, Markdown is now up to the task.

In this talk, you'll learn why Markdown is a better option for your project's documentation. You'll be introduced to MkDocs, a static site generator built around Markdown content, and a series of associated plugins and extensions that you need to bring Sphinx-like capabilities to Markdown documentation. You'll also hear a case study of migrating multiple large, existing Sphinx-based documentation bases to Markdown, including the tools used for automating the process. You'll learn how you can engage the community to assist with the effort. Finally, you'll learn why it's worth the effort to make a change of this magnitude.
- type: sprint
team_members:
- freakboy3742
- glasnt
- kattni
url: https://2026.pycon.org.au/schedule/ZYSPB3/
date: 2026-08-30
end_date: 2026-08-30
description: |
Python wouldn’t have gotten to where it is without a welcoming community of developers building cool things together. The development sprints are an open space for people to work on projects with a particular focus on open source projects.

The sprints are a place for everyone, from experienced open source contributors, to interested first-time contributors, and anyone really! Maybe you want to hang out and try out an idea you have, maybe you’d like to find collaborators for a project you want to start, maybe you’d like someone to help you through your first attempts at open source. We’ll provide tables, chairs, WiFi, power and a community of supportive developers.
- type: tutorial
team_members:
- freakboy3742
- glasnt
- kattni
title: Build a cross-platform GUI app with Python
url: https://2026.pycon.org.au/schedule/H33RW8/
date: 2026-08-26
end_date: 2026-08-26
description: |
If you have a Python program, and you want to display information to the user that is more than text, you're going to need something more complex than a script with print() and input() calls. You could build a website - but is a web browser your best option? Can you write a native GUI application using Python? And can you use the same GUI on your laptop and your phone? Find out in this hands-on workshop, where you'll be introduced to the BeeWare suite of tools for building and deploying GUI apps.
- type: track
team_members:
- glasnt
title: DevRel Specialist Track
url: https://2026.pycon.org.au/schedule/specialist-tracks/devrel/
date: 2026-08-29
end_date: 2026-08-29
description: |
Learn about and share the craft of Developer Relations, the profession of technical product advocacy.

Speakers, tutors, and instructors unite: Expert and aspirational Developer Relations (DevRel) folk gather to share experiences and teachings!

---

{{ generate_event_post(authors, event, involvement, team) }}
31 changes: 31 additions & 0 deletions docs/en/news/posts/2026/events/pyohio-2026.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,31 @@
---
title: We'll be at PyOhio 2026!
date: 2026-07-20
authors:
- kattni
- phildini
categories:
- Events
event:
name: PyOhio 2026
url: https://www.pyohio.org/2026/
date: 2026-07-25
end_date: 2026-07-26
description: |-
PyOhio is the Python Community Conference Based in Ohio. The 19th annual PyOhio is at the Cleveland State University Student Center in Cleveland, OH.

PyOhio is FREE to attend thanks to the generous support of sponsors and individual donors.
involvement:
- type: organizing
team_members:
- kattni
date: 2026-07-25
end_date: 2026-07-25
- type: attending
team_members:
- phildini
date: 2026-07-25
end_date: 2026-07-25
---

{{ generate_event_post(authors, event, involvement, team) }}
53 changes: 42 additions & 11 deletions docs/macros.py
Original file line number Diff line number Diff line change
Expand Up @@ -106,23 +106,39 @@ def generate_event_post(authors, event, involvement, team):
f"- {event.end_date.strftime('%B %d, %Y')}"
)

highlight_authors = set()
show_participation = False
for inv in involvement:
if inv["type"] == "keynote":
if inv["type"] == "organizing":
highlight_authors.update({m for m in inv["team_members"]})
content.append(
dedent(f"""\
{attendees(inv["team_members"], team)} will be organizing [{event.name}]({event.url}), which will happen {event_timeframe}!\n\n
""")
)
elif inv["type"] == "keynote":
highlight_authors.update({m for m in inv["team_members"]})
content.append(dedent(f"""
{attendees(inv["team_members"], team)} will be keynoting {event.name}, giving a presentation entitled [{talk_title_punctuation(inv["title"])}]({inv["url"]})

<!-- more -->\n\n
"""))
elif inv["type"] != "attending":
show_participation = True

inv_types = {inv["type"] for inv in involvement}

if "organizing" in inv_types:
content.append(
dedent(f"""\
{attendees(authors, team)} will be organizing [{event.name}]({event.url}), which will happen {event_timeframe}!\n\n
""")
)
elif inv_types != {"keynote"}:
if "keynote" in inv_types or "organizing" in inv_types:
other_authors = [author for author in authors if author not in highlight_authors]
if other_authors:
content.append(
dedent(f"""\
{attendees(other_authors, team)} will also be attending.

<!-- more -->\n\n
""")
)
else:
content.append(
dedent(f"""\
{attendees(authors, team)} will be attending [{event.name}]({event.url}) {event_timeframe}!
Expand All @@ -135,11 +151,12 @@ def generate_event_post(authors, event, involvement, team):

_, first_pronoun, second_pronoun = pronouns(team["authors"][authors[-1]]["pronoun"])

if inv_types != {"attending"} and inv_types != {"organizing"} and inv_types != {"keynote"}:

if show_participation:
if len(authors) > 1:
content.append(f"You can find us throughout {event.name}:\n\n")
content.append(f"You can find us throughout the event:\n\n")
else:
content.append(f"You can find {second_pronoun} throughout {event.name}:\n\n")
content.append(f"You can find {second_pronoun} throughout the event:\n\n")

for inv in involvement:
if len(authors) > 1:
Expand All @@ -161,6 +178,13 @@ def generate_event_post(authors, event, involvement, team):
""")
content.append(tutorial)

elif inv["type"] == "workshop":
tutorial = dedent(f"""
- {team_members} will be hosting a workshop entitled [{talk_title_punctuation(inv["title"])}]({inv["url"]})

""")
content.append(tutorial)

elif inv["type"] == "sprint":
sprint = dedent(f"""
- {team_members} will be hosting a [sprint]({inv["url"]}).
Expand All @@ -175,6 +199,13 @@ def generate_event_post(authors, event, involvement, team):
""")
content.append(booth)

elif inv["type"] == "track":
tutorial = dedent(f"""
- {team_members} will be hosting the [{talk_title_punctuation(inv["title"])}]({inv["url"]})

""")
content.append(tutorial)

if len(authors) > 1:
content.append(
"Please come say hello, we'd love to meet you. "
Expand Down
5 changes: 5 additions & 0 deletions docs/spelling_wordlist
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,7 @@ AppImages
architected
artefact
artefacts
aspirational
auditwheel
backend
backends
Expand Down Expand Up @@ -78,6 +79,7 @@ Cyber
Cygwin
Dependabot
dev
DevRel
dialogs
Diller
Disqus
Expand Down Expand Up @@ -144,6 +146,7 @@ JVM
KDE
keycaps
Kickstarter
Kraków
Kubernetes
Lamborghinis
leaderboard
Expand Down Expand Up @@ -234,6 +237,7 @@ Pystone
pytest
PythonAnywhere
Pythonista
Pythonistas
PyXero
Rackspace
README
Expand Down Expand Up @@ -320,6 +324,7 @@ webpage
WhatsApps
Whittington
widget's
WiFi
WinForms
WIP
WiX
Expand Down
8 changes: 5 additions & 3 deletions scripts/new_post.py
Original file line number Diff line number Diff line change
Expand Up @@ -125,9 +125,11 @@ def request_event_metadata():
"Keynote",
"Talk",
"Tutorial",
"Workshop",
"Sprint",
"Booth",
"Organizing",
"Track",
],
)
involvement_metadata["type"] = involvement_type
Expand All @@ -141,11 +143,11 @@ def request_event_metadata():
involvement_metadata["team_members"] = team_member_list
authors.update(team_member_list)

if involvement_type in ["keynote", "talk", "tutorial"]:
if involvement_type in ["keynote", "talk", "tutorial", "workshop", "track"]:
presentation_title = input("Presentation title: ")
involvement_metadata["title"] = presentation_title

if involvement_type in ["keynote", "talk", "tutorial", "sprint", "booth"]:
if involvement_type in ["keynote", "talk", "tutorial", "workshop", "sprint", "booth", "track"]:
involvement_metadata["url"] = input_url(
f"{involvement_type} URL (leave blank if unavailable): ", event_url
)
Expand All @@ -159,7 +161,7 @@ def request_event_metadata():
involvement_metadata["date"],
)

if involvement_type in ["keynote", "talk", "tutorial", "sprint", "booth"]:
if involvement_type in ["keynote", "talk", "tutorial", "workshop", "sprint", "booth", "track"]:
# if statement duplicated for the purposes of preserving desired metadata order
involvement_metadata["description"] = dedent(f"""\
TODO: Remove this content and update with {involvement_type} description.
Expand Down