Skip to content

Commit b5da2b7

Browse files
update workflow to check duplicating events
1 parent 9bba237 commit b5da2b7

5 files changed

Lines changed: 50 additions & 39 deletions

File tree

.github/workflows/import_meetup_events.yml

Lines changed: 0 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -41,16 +41,6 @@ jobs:
4141
cd tools
4242
python meetup_import.py
4343
44-
- name: Merge imported events into events.yml
45-
run: |
46-
if [ -s _data/imported_events.yml ]; then
47-
cat _data/imported_events.yml >> _data/events.yml
48-
: > _data/imported_events.yml
49-
echo "New events have been added to events.yml and imported_events.yml has been reset."
50-
else
51-
echo "No new events to import."
52-
fi
53-
5444
- name: Create or Update Pull Request
5545
uses: peter-evans/create-pull-request@v7
5646
with:

_data/events.yml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1283,6 +1283,7 @@
12831283
path: https://www.meetup.com/women-coding-community/events/310007990/
12841284
title: View meetup event
12851285
target: _target
1286+
12861287
- title: |
12871288
Mentorship Check-In: Share, Reflect, Grow
12881289
description: "Mentorship Check-In: Share, Reflect, Grow An open session to reconnect and recharge with the Women Coding Community Date: 25 September 2025 Time: 7:00 PM BST How\u2019s your mentorship journey going so far? Let\u2019s check in! Join us for a walk-in-style session designed with special focus on mentees in the Women Coding Community Mentorship Programme.\n"

_data/imported_events.yml

Whitespace-only changes.

tools/README.md

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -45,9 +45,7 @@ sh run_meetup_import.sh
4545
```
4646

4747
**Note:**
48-
- New data will be imported to [`imported_events.yml`](../_data/imported_events.yml). Verify that all events details are formatted correctly, manually update if needed.
49-
- Ensure to copy the generated data to [`events.yml`](../_data/events.yml) and clear the file.
50-
48+
- New data will be appended to [`events.yml`](../_data/events.yml). Verify that all events details are formatted correctly, manually update if needed.
5149

5250
### How to Execute on Windows
5351

tools/meetup_import.py

Lines changed: 48 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -248,47 +248,69 @@ def process_meetup_data(meetup: dict) -> dict:
248248
meetup["link"]["title"] = to_quoted_str(meetup["link"]["title"])
249249
return meetup
250250

251-
# ---- Write specified data to file -----
252-
def write_yaml_file(file_path, data) -> None:
251+
# --- Create a unique key for an event using "title - date" ----
252+
def get_event_key(event):
253+
return f"{event.get('title').strip()} - {event.get('date')}"
254+
255+
# --- Get a Set of keys for existing events ----
256+
def get_existing_event_keys(events):
257+
return {get_event_key(e) for e in events}
258+
259+
# --- Get existing events in yml file ----
260+
def load_existing_events_from_file(file_path):
253261
try:
254-
with open(file_path, "w") as file:
255-
for yaml_obj in data:
256-
file.write(yaml.dump([yaml_obj], sort_keys=False, width=2000))
257-
file.write("\n")
262+
with open(file_path, "r") as file:
263+
return yaml.safe_load(file) or []
264+
except FileNotFoundError:
265+
return []
258266
except (IOError, yaml.YAMLError) as e:
259-
logging.error(f"Error writing to file '{file_path}': {e}")
260-
raise
267+
logging.error(f"Error reading file '{file_path}': {e}")
268+
return []
261269

262-
# ---- Process events data into yaml file -----
263-
def export_to_yaml(upcoming_meetups, yaml_file: str):
264-
meetup_dicts = [meetup.dict() for meetup in upcoming_meetups]
270+
# ---- Appends specified data to yml file -----
271+
def append_events_to_yaml_file(file_path, data):
265272
try:
266-
meetup_dicts = [process_meetup_data(meetup) for meetup in meetup_dicts]
267-
write_yaml_file(yaml_file, meetup_dicts)
268-
269-
except FileNotFoundError:
270-
logging.warning(f"File '{yaml_file}' not found. Creating a new file.")
271-
with open(yaml_file, "w") as file:
272-
yaml.dump(meetup_dicts, file, default_flow_style=False, sort_keys=False)
273+
with open(file_path, "a") as file:
274+
for yaml_obj in data:
275+
file.write("\n")
276+
file.write(yaml.dump([yaml_obj], sort_keys=False, width=2000))
273277
except (IOError, yaml.YAMLError) as e:
274-
logging.error(f"Error processing file '{yaml_file}': {e}")
278+
logging.error(f"Error appending new events to file '{file_path}': {e}")
275279
raise
276280

277-
278281
# --- Script Start ---
279282
def fetch_events():
280283
logging.basicConfig(level=logging.INFO, format='%(asctime)s - %(levelname)s - %(message)s')
281284

282285
ical_file_path = "files/meetup.ics"
283-
yml_file_path = "../_data/imported_events.yml"
286+
yml_file_path = "../_data/events.yml"
284287

285288
logging.info("Params: iCal URL: %s yml: %s", ical_file_path, yml_file_path)
286-
upcoming_meetups = get_upcoming_meetups_from_ical_file(ical_file_path)
289+
upcoming_events = get_upcoming_meetups_from_ical_file(ical_file_path)
290+
291+
existing_events = load_existing_events_from_file(yml_file_path)
292+
existing_keys = get_existing_event_keys(existing_events)
293+
added_events = []
287294

288-
logging.info("Upcoming Meetups:")
289-
for meetup in upcoming_meetups:
290-
logging.info(f"{meetup.title}")
291-
export_to_yaml(upcoming_meetups, yml_file_path)
295+
logging.info("Upcoming Meetup Events:")
296+
for event in upcoming_events:
297+
298+
logging.info(f"{event.title}")
299+
formatted_event = process_meetup_data(event.model_dump())
300+
event_key = get_event_key(formatted_event)
301+
302+
if event_key not in existing_keys:
303+
added_events.append(formatted_event)
304+
existing_keys.add(event_key)
305+
added_events_length += 1
306+
else:
307+
logging.info(f"{event_key} already exists in events.yml")
308+
309+
if len(added_events) > 0:
310+
append_events_to_yaml_file(yml_file_path, added_events)
311+
logging.info(f"Added {len(added_events)} new event(s) to events.yml.")
312+
else:
313+
logging.info("No new events to add.")
292314

293315

294316
if __name__ == "__main__":

0 commit comments

Comments
 (0)