Skip to content

Commit ce5457a

Browse files
authored
Merge pull request #57 from django/events/sofia-birthday
Add event: Python Meetup @ Sofia, 20 Years of Django Edition
2 parents 5cb5f91 + 4ac2319 commit ce5457a

File tree

3 files changed

+206
-0
lines changed

3 files changed

+206
-0
lines changed

content/events/sofia-birthday.md

Lines changed: 74 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,74 @@
1+
---
2+
# PUT YOUR EVENT NAME HERE!
3+
title: "Python Meetup @ Sofia, 20 Years of Django Edition"
4+
# PUT A SHORT DESCRIPTION!
5+
description: "Python Meetup @ Sofia is back with a special edition after a short summer break… and we’re throwing a birthday party!"
6+
# (NOT the event date - but the publication date, set to today's date)
7+
date: "2025-06-21"
8+
# Change this to "false" so the event will appear (the template is disabled)
9+
draft: false
10+
11+
params:
12+
event_type: "in_person"
13+
event_category: "meetup"
14+
event_date: "2025-08-27"
15+
# Leave empty if single-day event.
16+
event_date_end: ""
17+
# Local time of event: "HH:MM", "TBD" or "" (if full day and no time)
18+
event_localtime: "19:00"
19+
# Timezone UTC offset of the localtime
20+
event_tz: "+03:00"
21+
# Your community's name or name of organizers
22+
event_host: "HackBulgaria & HackSoft"
23+
# Languages expected to be spoken
24+
event_languages: "English and Bulgarian"
25+
# Fill this in if you have a website or leave empty if not
26+
event_url: "https://www.meetup.com/sofia-python-meetup-group/events/310143871/"
27+
# Copy values from your location on Google Maps
28+
latitude: 42.66175293287806
29+
longitude: 23.317975897930552
30+
# Put your country
31+
country: "Bulgaria"
32+
city: "Sofia"
33+
# If this is an in_person event_type, put the name and address
34+
venue_name: "Barter Community Hub"
35+
venue_address: "bul. Cherni Vrah 47, Rooftop, Blvd. 'Cherni vrah' 47, 1407 Sofia"
36+
# Does your community have social media? Put URLs here (not handles!)
37+
social_media:
38+
meetup: https://www.meetup.com/sofia-python-meetup-group
39+
instagram: https://instagram.com/hackbulgaria
40+
linkedin: https://www.linkedin.com/company/hackbulgaria/
41+
# mastodon: "https://fosstodon.org/@djangodenmark/"
42+
# twitter: "..."
43+
# instagram: "..."
44+
# linkedin: "..."
45+
# bluesky: "..."
46+
---
47+
48+
# Python Meetup @ Sofia, 20 Years of Django Edition
49+
50+
Python Meetup @ Sofia is back with a special edition after a short summer break… and we’re throwing a birthday party! 🥳 That’s right! Оur favorite framework Django just turned 20, and we’re celebrating the right way: with a lightning talk, drinks, and surprises!
51+
52+
📣 Talk: 11 years of building software with Django - a celebration of Django's 20th birthday
53+
👨‍🏫 Speaker: Radoslav Georgiev
54+
55+
💬 What’s it about?
56+
Rado will share what it’s like to build software with Django for over a decade at HackSoft. Expect real-world stories: how they started, why they chose Django, the deep waters they've swum in, near-drownings, and other tasty bits from behind the scenes.
57+
58+
🎤 About the speaker:
59+
Radoslav Georgiev is the founder of HackSoft & HackBulgaria, and co-organizer of HackConf. With over 13 years in software development, he’s led countless programming courses and spoken at both local and international conferences.
60+
61+
🍹 After the talk…
62+
We’ll toast to Django’s 20th birthday with drinks and treats, kindly provided by our friends at HackSoft. Because a birthday isn’t a birthday without a proper celebration, right?
63+
64+
🎁 Oh, and there will be gifts… but not for Django - for you!
65+
Expect a fun raffle with exclusive prizes from HackSoft (we’re not allowed to reveal them, but trust us… they’re really good 😉).
66+
Don’t miss it!
67+
68+
## How to attend
69+
70+
🎟️ Free entry - just RSVP to save your spot! [Click here](https://www.meetup.com/sofia-python-meetup-group/events/310143871/)
71+
72+
## Code of Conduct
73+
74+
https://www.djangoproject.com/conduct/

scripts/import_event_from_issue.py

Lines changed: 132 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,132 @@
1+
#!/usr/bin/env python3
2+
3+
import re
4+
import sys
5+
6+
# This script doesn't require anything special, but maybe should require a GitHub API?
7+
# (that, however, requires an API key?)
8+
9+
print('Please paste in the Markdown code of the issue:')
10+
contents = []
11+
while True:
12+
try:
13+
line = input()
14+
except EOFError:
15+
break
16+
contents.append(line)
17+
issue_markdown = "\n".join(contents)
18+
19+
# Stuff we're missing in the issue template..
20+
print("Please input the country:")
21+
country = input()
22+
print("Please input the city:")
23+
city = input()
24+
25+
# TODO: Some fields aren't ideal for this yet
26+
headline_mapping = {
27+
"title": "Title of the event",
28+
"short_description": "Short description",
29+
"body": "Long description",
30+
"how_to_attend": "How to attend",
31+
"event_type": "Event type",
32+
"event_category": "Event category",
33+
"event_date": "Event date",
34+
"event_date_end": "",
35+
"event_localtime": "Local time",
36+
"event_tz": "Timezone (UTC offset)",
37+
"event_host": "Host group",
38+
"event_languages": "Event language",
39+
"event_url": "RSVP Instructions or URL",
40+
"latitude": "Event latitude (optional)",
41+
"longitude": "Event longitude (optional)",
42+
"country": "",
43+
"city": "",
44+
"venue_name": "Venue name",
45+
"venue_address": "Venue address",
46+
"social_media": "Social media accounts (optional)",
47+
}
48+
49+
found_content = {k: "" for k in headline_mapping.keys()}
50+
51+
template = """
52+
---
53+
# PUT YOUR EVENT NAME HERE!
54+
title: "{title}"
55+
# PUT A SHORT DESCRIPTION!
56+
description: "{short_description}"
57+
# (NOT the event date - but the publication date, set to today's date)
58+
date: "2025-06-21"
59+
draft: false
60+
61+
params:
62+
event_type: "{event_type}"
63+
event_category: "{event_category}"
64+
event_date: "{event_date}"
65+
# Leave empty if single-day event.
66+
event_date_end: ""
67+
# Local time of event: "HH:MM", "TBD" or "" (if full day and no time)
68+
event_localtime: "{event_localtime}"
69+
# Timezone UTC offset of the localtime
70+
event_tz: "{event_tz}"
71+
# Your community's name or name of organizers
72+
event_host: "{event_host}"
73+
# Languages expected to be spoken
74+
event_languages: "{event_languages}"
75+
# Fill this in if you have a website or leave empty if not
76+
event_url: "{event_url}"
77+
# Copy values from your location on Google Maps
78+
latitude: {latitude}
79+
longitude: {longitude}
80+
# Put your country
81+
country: "{country}"
82+
city: "{city}"
83+
# If this is an in_person event_type, put the name and address
84+
venue_name: "{venue_name}"
85+
venue_address: "{venue_address}"
86+
# Does your community have social media? Put URLs here (not handles!)
87+
social_media:
88+
{social_media}
89+
# mastodon: "https://fosstodon.org/@djangodenmark/"
90+
# twitter: "..."
91+
# instagram: "..."
92+
# linkedin: "..."
93+
# bluesky: "..."
94+
---
95+
96+
# {title}
97+
98+
{body}
99+
100+
## How to attend
101+
102+
{how_to_attend}
103+
104+
## Code of Conduct
105+
106+
https://www.djangoproject.com/conduct/
107+
"""
108+
109+
blocks_by_headline = {}
110+
111+
current_headline = None
112+
for line in issue_markdown.split("\n"):
113+
if line.startswith("###"):
114+
current_headline = line[4:]
115+
print(f"Found: {current_headline}")
116+
blocks_by_headline[current_headline] = []
117+
elif current_headline in headline_mapping.values():
118+
blocks_by_headline[current_headline].append(line.strip())
119+
elif current_headline:
120+
print(f"Ignoring headline: {current_headline}")
121+
else:
122+
print(f"Ignoring line: {line}")
123+
124+
for key, headline in headline_mapping.items():
125+
126+
found_content[key] = "\n".join(blocks_by_headline.get(headline, [])).strip()
127+
128+
found_content["city"] = city
129+
found_content["country"] = country
130+
131+
print(template.format(**found_content))
132+

scripts/import_events_json.py

100644100755
File mode changed.

0 commit comments

Comments
 (0)