diff --git a/docs/en/news/posts/2016/resource/talk-python-#79.md b/docs/en/news/posts/2016/resource/talk-python-79.md similarity index 100% rename from docs/en/news/posts/2016/resource/talk-python-#79.md rename to docs/en/news/posts/2016/resource/talk-python-79.md diff --git a/docs/en/news/posts/2017/resource/---bees?.md b/docs/en/news/posts/2017/resource/bees.md similarity index 100% rename from docs/en/news/posts/2017/resource/---bees?.md rename to docs/en/news/posts/2017/resource/bees.md diff --git a/docs/en/news/posts/2017/resource/covered-in-bees!-deploying-an-app-to-6-platforms-in-20-minutes.md b/docs/en/news/posts/2017/resource/covered-in-bees-deploying-an-app-to-6-platforms-in-20-minutes.md similarity index 100% rename from docs/en/news/posts/2017/resource/covered-in-bees!-deploying-an-app-to-6-platforms-in-20-minutes.md rename to docs/en/news/posts/2017/resource/covered-in-bees-deploying-an-app-to-6-platforms-in-20-minutes.md diff --git a/docs/en/news/posts/2026/events/europython-2026.md b/docs/en/news/posts/2026/events/europython-2026.md new file mode 100644 index 0000000000..357e7dd9dd --- /dev/null +++ b/docs/en/news/posts/2026/events/europython-2026.md @@ -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) }} diff --git a/docs/en/news/posts/2026/events/pycon-au-2026.md b/docs/en/news/posts/2026/events/pycon-au-2026.md new file mode 100644 index 0000000000..1687bd2cba --- /dev/null +++ b/docs/en/news/posts/2026/events/pycon-au-2026.md @@ -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) }} diff --git a/docs/en/news/posts/2026/events/pyohio-2026.md b/docs/en/news/posts/2026/events/pyohio-2026.md new file mode 100644 index 0000000000..b695abb9aa --- /dev/null +++ b/docs/en/news/posts/2026/events/pyohio-2026.md @@ -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) }} diff --git a/docs/macros.py b/docs/macros.py index 485a1755ad..837165a48f 100644 --- a/docs/macros.py +++ b/docs/macros.py @@ -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"]}) \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. + + \n\n + """) + ) + else: content.append( dedent(f"""\ {attendees(authors, team)} will be attending [{event.name}]({event.url}) {event_timeframe}! @@ -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: @@ -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"]}). @@ -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. " diff --git a/docs/spelling_wordlist b/docs/spelling_wordlist index 6049135655..cc8f267453 100644 --- a/docs/spelling_wordlist +++ b/docs/spelling_wordlist @@ -16,6 +16,7 @@ AppImages architected artefact artefacts +aspirational auditwheel backend backends @@ -78,6 +79,7 @@ Cyber Cygwin Dependabot dev +DevRel dialogs Diller Disqus @@ -144,6 +146,7 @@ JVM KDE keycaps Kickstarter +Kraków Kubernetes Lamborghinis leaderboard @@ -234,6 +237,7 @@ Pystone pytest PythonAnywhere Pythonista +Pythonistas PyXero Rackspace README @@ -320,6 +324,7 @@ webpage WhatsApps Whittington widget's +WiFi WinForms WIP WiX diff --git a/scripts/new_post.py b/scripts/new_post.py index f233f866aa..acb51c6f8a 100644 --- a/scripts/new_post.py +++ b/scripts/new_post.py @@ -125,9 +125,11 @@ def request_event_metadata(): "Keynote", "Talk", "Tutorial", + "Workshop", "Sprint", "Booth", "Organizing", + "Track", ], ) involvement_metadata["type"] = involvement_type @@ -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 ) @@ -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.