From 2106eb77b3e50488cf08a9b120c4f4ba3c9a27fa Mon Sep 17 00:00:00 2001 From: Erik Oosterop Date: Tue, 21 Nov 2023 15:17:41 +0000 Subject: [PATCH 01/10] Add extract completed message using Halo. --- src/crewcal/cli.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/crewcal/cli.py b/src/crewcal/cli.py index 479f3ea..e751753 100644 --- a/src/crewcal/cli.py +++ b/src/crewcal/cli.py @@ -123,7 +123,7 @@ def extract(sourcefile: str, targetfile: str, to_json: bool, overwrite: bool) -> text="Extracting schedule, saving to iCalendar format.", spinner="dots" ) if not to_json else Halo( text="Extracting schedule, saving to crewcal json format.", spinner="dots" - ): + ) as spinner: sched = ( OpenAISchedule( schedule_path=str(source_path), to_icalendar_file=str(out_path) @@ -133,8 +133,8 @@ def extract(sourcefile: str, targetfile: str, to_json: bool, overwrite: bool) -> schedule_path=str(source_path), to_json_file=str(out_path) ) ) + spinner.info(f"Extracted schedule saved to {out_path}.") - click.echo(f"Extracted schedule saved to {out_path}.") del sched From fe4f9983115f12012fcec2ef44e8065e55553595 Mon Sep 17 00:00:00 2001 From: Erik Oosterop Date: Tue, 21 Nov 2023 15:29:07 +0000 Subject: [PATCH 02/10] Update changelog; remove whitespace. --- CHANGELOG.md | 3 +++ src/crewcal/cli.py | 1 - 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index ad28fae..acc5305 100755 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -7,6 +7,9 @@ and this project adheres to [Semantic Versioning](http://semver.org/spec/v2.0.0. ## [Unreleased] +### Changed +- Adding extract completed message using Halo (spinner) + ## [0.8.1] ### Fixed diff --git a/src/crewcal/cli.py b/src/crewcal/cli.py index e751753..120334c 100644 --- a/src/crewcal/cli.py +++ b/src/crewcal/cli.py @@ -135,7 +135,6 @@ def extract(sourcefile: str, targetfile: str, to_json: bool, overwrite: bool) -> ) spinner.info(f"Extracted schedule saved to {out_path}.") - del sched return 0 From fbb8f0e152950b0034018f088ef6c34719a38231 Mon Sep 17 00:00:00 2001 From: Erik Oosterop Date: Tue, 21 Nov 2023 16:10:49 +0000 Subject: [PATCH 03/10] Add image of crew schedule sample. Update readme. --- README.md | 7 ++++--- etc/schedule_sample.png | Bin 0 -> 35600 bytes 2 files changed, 4 insertions(+), 3 deletions(-) create mode 100755 etc/schedule_sample.png diff --git a/README.md b/README.md index 77dbb21..bb7cc0e 100755 --- a/README.md +++ b/README.md @@ -101,15 +101,16 @@ intro_image +
- +
Convert an airline crew schedule pdf into iCalendar format using a machine learning Large Language Model. An LLM (Large Language Model, specifically OpenAI's gpt-3.5-turbo) is used to extract the schedule information. iCalender files are recognized by most calendar systems (iOS, Android, Google, ++) and will create the flights on your phone/device calendar. The PDF schedule does not need to follow a very prescribed structured format. - Development performed mostly using AIMS eCrew pdf schedules. + Development performed mostly using AIMS eCrew pdf schedules. It may work on other systems' schedules. Feel free to suggest other systems.
@@ -176,7 +177,7 @@ The resulting .ics file can be read by most calendar software. ## Roadmap -- [ ] None (feel free to suggest) +- [ ] Add support schedules for systems in addition to AIMS. I would be happy to look at suggestions, especially if you can provide sample schedules. Create a new issue.

(back to top)

diff --git a/etc/schedule_sample.png b/etc/schedule_sample.png new file mode 100755 index 0000000000000000000000000000000000000000..dc2d72be11394720b6645ed0384748fb1670997f GIT binary patch literal 35600 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 literal 0 HcmV?d00001 From 263aa7b041143d622317ffed5d3cb64514a1daa1 Mon Sep 17 00:00:00 2001 From: Erik Oosterop Date: Wed, 22 Nov 2023 03:15:54 +0000 Subject: [PATCH 04/10] del sched --- src/crewcal/cli.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/crewcal/cli.py b/src/crewcal/cli.py index 120334c..c285ff8 100644 --- a/src/crewcal/cli.py +++ b/src/crewcal/cli.py @@ -66,6 +66,7 @@ def convert(json: str, ical: str, overwrite: bool) -> int: sched = schedule.Schedule.from_json(str(json_path)) sched.to_icalendar_file(str(ical_path)) + del sched return 0 @@ -134,8 +135,7 @@ def extract(sourcefile: str, targetfile: str, to_json: bool, overwrite: bool) -> ) ) spinner.info(f"Extracted schedule saved to {out_path}.") - - del sched + del sched return 0 From 0804faebaa01cd8f24eaa74ad33e4db2d3f90f28 Mon Sep 17 00:00:00 2001 From: Erik Oosterop Date: Wed, 22 Nov 2023 03:24:18 +0000 Subject: [PATCH 05/10] Remove del. --- src/crewcal/cli.py | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/src/crewcal/cli.py b/src/crewcal/cli.py index c285ff8..38bd7e9 100644 --- a/src/crewcal/cli.py +++ b/src/crewcal/cli.py @@ -66,7 +66,6 @@ def convert(json: str, ical: str, overwrite: bool) -> int: sched = schedule.Schedule.from_json(str(json_path)) sched.to_icalendar_file(str(ical_path)) - del sched return 0 @@ -125,7 +124,7 @@ def extract(sourcefile: str, targetfile: str, to_json: bool, overwrite: bool) -> ) if not to_json else Halo( text="Extracting schedule, saving to crewcal json format.", spinner="dots" ) as spinner: - sched = ( + ( OpenAISchedule( schedule_path=str(source_path), to_icalendar_file=str(out_path) ) @@ -135,7 +134,6 @@ def extract(sourcefile: str, targetfile: str, to_json: bool, overwrite: bool) -> ) ) spinner.info(f"Extracted schedule saved to {out_path}.") - del sched return 0 From 11ea40e823573109c289687348c90fe66ee8a092 Mon Sep 17 00:00:00 2001 From: Erik Oosterop Date: Fri, 16 Feb 2024 14:55:38 +0000 Subject: [PATCH 06/10] Extension update. --- .vscode/settings.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.vscode/settings.json b/.vscode/settings.json index 14df5ec..56415f2 100755 --- a/.vscode/settings.json +++ b/.vscode/settings.json @@ -11,7 +11,7 @@ "editor.defaultFormatter": "ms-python.black-formatter", "editor.formatOnSave": true, "editor.codeActionsOnSave": { - "source.organizeImports": true + "source.organizeImports": "explicit" }, }, "isort.args":["--profile", "black"], From 1ee23b44b5e775a5eae427e0dd1df92bbecbda3c Mon Sep 17 00:00:00 2001 From: Erik Oosterop Date: Mon, 4 Mar 2024 03:20:41 +0000 Subject: [PATCH 07/10] Ignore play_folder for Git --- .gitignore | 1 + 1 file changed, 1 insertion(+) diff --git a/.gitignore b/.gitignore index 17a602e..d73d6c4 100755 --- a/.gitignore +++ b/.gitignore @@ -1,5 +1,6 @@ sched*.json *.ics +play_folder # Byte-compiled / optimized / DLL files __pycache__/ From fcc87c5ec7cad81a637170fc831b754d4f4fb0f7 Mon Sep 17 00:00:00 2001 From: Erik Oosterop Date: Mon, 4 Mar 2024 03:32:06 +0000 Subject: [PATCH 08/10] Consider downgrading required Python --- CHANGELOG.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index acc5305..6c74606 100755 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -7,6 +7,8 @@ and this project adheres to [Semantic Versioning](http://semver.org/spec/v2.0.0. ## [Unreleased] +- Consider downgrading Python requirement (at least to 3.10, but I dont know how low it can go) + ### Changed - Adding extract completed message using Halo (spinner) From 0cd53a9daaccc5ec252dfec27fe926d1505147d6 Mon Sep 17 00:00:00 2001 From: Erik Oosterop Date: Mon, 4 Mar 2024 03:43:30 +0000 Subject: [PATCH 09/10] comment re Python version --- CHANGELOG.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 6c74606..4523e19 100755 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -7,7 +7,7 @@ and this project adheres to [Semantic Versioning](http://semver.org/spec/v2.0.0. ## [Unreleased] -- Consider downgrading Python requirement (at least to 3.10, but I dont know how low it can go) +- Consider downgrading Python requirement (at least to 3.10, but I dont know how low it can gowhere) ### Changed - Adding extract completed message using Halo (spinner) From b58eacec1ff3ed999effff0675a451ad50915718 Mon Sep 17 00:00:00 2001 From: Erik Oosterop Date: Sun, 2 Jun 2024 00:36:35 +0000 Subject: [PATCH 10/10] Fix 'next day' arrivals. --- .vscode/launch.json | 0 CHANGELOG.md | 5 +++++ etc/.gitignore | 0 poetry.lock | 0 pyproject.toml | 2 +- src/crewcal/cli.py | 0 src/crewcal/llm_extract.py | 0 src/crewcal/llm_prompts.py | 10 ++++++---- src/crewcal/schedule.py | 2 ++ src/crewcal/wip.py | 2 +- tests/test_002.py | 0 11 files changed, 15 insertions(+), 6 deletions(-) mode change 100644 => 100755 .vscode/launch.json mode change 100644 => 100755 etc/.gitignore mode change 100644 => 100755 poetry.lock mode change 100644 => 100755 src/crewcal/cli.py mode change 100644 => 100755 src/crewcal/llm_extract.py mode change 100644 => 100755 src/crewcal/llm_prompts.py mode change 100644 => 100755 src/crewcal/schedule.py mode change 100644 => 100755 tests/test_002.py diff --git a/.vscode/launch.json b/.vscode/launch.json old mode 100644 new mode 100755 diff --git a/CHANGELOG.md b/CHANGELOG.md index 4523e19..7998479 100755 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -9,6 +9,11 @@ and this project adheres to [Semantic Versioning](http://semver.org/spec/v2.0.0. - Consider downgrading Python requirement (at least to 3.10, but I dont know how low it can gowhere) +## [0.8.2] + +### Fixed +- Arrivals on next day are correctly reflected again. Stopped working with the same OpenAI model. + ### Changed - Adding extract completed message using Halo (spinner) diff --git a/etc/.gitignore b/etc/.gitignore old mode 100644 new mode 100755 diff --git a/poetry.lock b/poetry.lock old mode 100644 new mode 100755 diff --git a/pyproject.toml b/pyproject.toml index 64de6fb..cd5f95f 100755 --- a/pyproject.toml +++ b/pyproject.toml @@ -18,7 +18,7 @@ disallow_incomplete_defs = true [tool.poetry] name = "crewcal" -version = "0.8.1" +version = "0.8.2" description = "Convert an airline crew schedule pdf into iCalendar format." authors = ["Erik Oosterop "] license = "MIT" diff --git a/src/crewcal/cli.py b/src/crewcal/cli.py old mode 100644 new mode 100755 diff --git a/src/crewcal/llm_extract.py b/src/crewcal/llm_extract.py old mode 100644 new mode 100755 diff --git a/src/crewcal/llm_prompts.py b/src/crewcal/llm_prompts.py old mode 100644 new mode 100755 index 369b566..e10b066 --- a/src/crewcal/llm_prompts.py +++ b/src/crewcal/llm_prompts.py @@ -18,9 +18,11 @@ - Destination airport code - Destination airport name - Destination timezone -- Arrival date -- Arrival time, the last occurrence of a time for each day +- Arrival date. A '+1' means the next day. +- Arrival time, the last occurrence of a time for each day. A '+1' means the next day. - List of crew members -- A list of all times found -- List of all airport codes +- A list of all times found. +- List of all airport codes. + +Always include all items in your output even if they are empty. """ diff --git a/src/crewcal/schedule.py b/src/crewcal/schedule.py old mode 100644 new mode 100755 index 11e695f..16dbeef --- a/src/crewcal/schedule.py +++ b/src/crewcal/schedule.py @@ -3,6 +3,7 @@ The schedule is a list of events, each of which contains the details of a set of flight. """ + import json import logging from pathlib import Path @@ -104,6 +105,7 @@ def to_icalendar(self): ) for flight in self.events ] + calendar.events.update(events) return calendar diff --git a/src/crewcal/wip.py b/src/crewcal/wip.py index 225a45b..73c4241 100755 --- a/src/crewcal/wip.py +++ b/src/crewcal/wip.py @@ -14,7 +14,7 @@ def main(): logging.warning(sched.to_icalendar().serialize()) - sched.to_icalendar_file("schedule3.ics") + sched.to_icalendar_file("dien.ics") logging.warning(sched.json_dumps()) diff --git a/tests/test_002.py b/tests/test_002.py old mode 100644 new mode 100755