ics-query 0.1.1a0__tar.gz → 0.3.2b0__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (62) hide show
  1. {ics_query-0.1.1a0 → ics_query-0.3.2b0}/.github/ISSUE_TEMPLATE/bug_report.md +2 -8
  2. {ics_query-0.1.1a0 → ics_query-0.3.2b0}/.github/workflows/tests.yml +35 -17
  3. {ics_query-0.1.1a0 → ics_query-0.3.2b0}/PKG-INFO +257 -51
  4. ics_query-0.3.2b0/README.md +453 -0
  5. ics_query-0.3.2b0/conftest.py +15 -0
  6. ics_query-0.3.2b0/ics-query.cmd +3 -0
  7. ics_query-0.3.2b0/ics-query.py +5 -0
  8. ics_query-0.3.2b0/ics_query/__init__.py +27 -0
  9. ics_query-0.3.2b0/ics_query/__main__.py +20 -0
  10. {ics_query-0.1.1a0 → ics_query-0.3.2b0}/ics_query/_version.py +2 -2
  11. ics_query-0.3.2b0/ics_query/cli.py +694 -0
  12. ics_query-0.3.2b0/ics_query/parse.py +87 -0
  13. ics_query-0.3.2b0/ics_query/query.py +78 -0
  14. ics_query-0.3.2b0/ics_query/tests/conftest.py +126 -0
  15. ics_query-0.3.2b0/ics_query/tests/runs/all --tz Singapore one-event.ics -.run +9 -0
  16. ics_query-0.3.2b0/ics_query/tests/runs/all three-events.ics -.run +33 -0
  17. ics_query-0.3.2b0/ics_query/tests/runs/at 2024-08-20 Berlin-Los-Angeles.ics -.run +23 -0
  18. ics_query-0.3.2b0/ics_query/tests/runs/between 20240823 4d recurring-work-events.ics -.run +24 -0
  19. ics_query-0.3.2b0/ics_query/tests/runs/calendars/Berlin-Los-Angeles.ics +381 -0
  20. ics_query-0.3.2b0/ics_query/tests/runs/calendars/empty-calendar.ics +7 -0
  21. ics_query-0.3.2b0/ics_query/tests/runs/calendars/empty-file.ics +0 -0
  22. ics_query-0.3.2b0/ics_query/tests/runs/calendars/one-event-without-timezone.ics +14 -0
  23. ics_query-0.3.2b0/ics_query/tests/runs/calendars/recurring-work-events.ics +223 -0
  24. ics_query-0.3.2b0/ics_query/tests/runs/calendars/simple-journal.ics +15 -0
  25. ics_query-0.3.2b0/ics_query/tests/runs/calendars/simple-todo.ics +15 -0
  26. ics_query-0.3.2b0/ics_query/tests/runs/calendars/three-events.ics +37 -0
  27. ics_query-0.3.2b0/ics_query/tests/runs/first -c VJOURNAL -c VEVENT one-event.ics -.run +9 -0
  28. ics_query-0.3.2b0/ics_query/tests/runs/first -c VJOURNAL one-event.ics -.run +0 -0
  29. ics_query-0.3.2b0/ics_query/tests/runs/first -c VJOURNAL simple-journal.ics -.run +12 -0
  30. ics_query-0.3.2b0/ics_query/tests/runs/first -c VTODO -c VJOURNAL simple-todo.ics -.run +10 -0
  31. ics_query-0.3.2b0/ics_query/tests/runs/first -c VTODO simple-todo.ics -.run +10 -0
  32. ics_query-0.3.2b0/ics_query/tests/runs/first empty-calendar.ics -.run +0 -0
  33. ics_query-0.3.2b0/ics_query/tests/runs/first empty-file.ics -.run +0 -0
  34. ics_query-0.3.2b0/ics_query/tests/runs/first recurring-work-events.ics -.run +12 -0
  35. ics_query-0.3.2b0/ics_query/tests/test_command_line.py +72 -0
  36. {ics_query-0.1.1a0 → ics_query-0.3.2b0}/ics_query/tests/test_parse_date.py +23 -5
  37. ics_query-0.3.2b0/ics_query/tests/test_parse_timedelta.py +40 -0
  38. ics_query-0.3.2b0/ics_query/version.py +46 -0
  39. {ics_query-0.1.1a0 → ics_query-0.3.2b0}/pyproject.toml +21 -5
  40. ics_query-0.3.2b0/tox.ini +49 -0
  41. ics_query-0.1.1a0/README.md +0 -249
  42. ics_query-0.1.1a0/ics_query/__init__.py +0 -11
  43. ics_query-0.1.1a0/ics_query/__main__.py +0 -5
  44. ics_query-0.1.1a0/ics_query/cli.py +0 -260
  45. ics_query-0.1.1a0/ics_query/parse.py +0 -50
  46. ics_query-0.1.1a0/ics_query/tests/conftest.py +0 -90
  47. ics_query-0.1.1a0/ics_query/tests/test_command_line.py +0 -19
  48. ics_query-0.1.1a0/ics_query/version.py +0 -16
  49. ics_query-0.1.1a0/tox.ini +0 -20
  50. {ics_query-0.1.1a0 → ics_query-0.3.2b0}/.github/FUNDING.yml +0 -0
  51. {ics_query-0.1.1a0 → ics_query-0.3.2b0}/.github/dependabot.yml +0 -0
  52. {ics_query-0.1.1a0 → ics_query-0.3.2b0}/.gitignore +0 -0
  53. {ics_query-0.1.1a0 → ics_query-0.3.2b0}/LICENSE +0 -0
  54. {ics_query-0.1.1a0 → ics_query-0.3.2b0}/ics-query +0 -0
  55. {ics_query-0.1.1a0 → ics_query-0.3.2b0}/ics_query/tests/__init__.py +0 -0
  56. {ics_query-0.1.1a0 → ics_query-0.3.2b0}/ics_query/tests/runs/at 2019-03-04 multiple-calendars.ics -.run +0 -0
  57. {ics_query-0.1.1a0 → ics_query-0.3.2b0}/ics_query/tests/runs/at 2019-03-04 one-event-twice.ics -.run +0 -0
  58. {ics_query-0.1.1a0 → ics_query-0.3.2b0}/ics_query/tests/runs/at 2019-03-04 one-event.ics -.run +0 -0
  59. {ics_query-0.1.1a0 → ics_query-0.3.2b0}/ics_query/tests/runs/at 2019-03-07 multiple-calendars.ics -.run +0 -0
  60. {ics_query-0.1.1a0 → ics_query-0.3.2b0}/ics_query/tests/runs/calendars/multiple-calendars.ics +0 -0
  61. {ics_query-0.1.1a0 → ics_query-0.3.2b0}/ics_query/tests/runs/calendars/one-event-twice.ics +0 -0
  62. {ics_query-0.1.1a0 → ics_query-0.3.2b0}/ics_query/tests/runs/calendars/one-event.ics +0 -0
@@ -27,15 +27,9 @@ assignees: ''
27
27
 
28
28
  **Version:**
29
29
  <!-- Which Version do you use? -->
30
- v0.0.1
31
30
 
32
- <!-- Sometimes, the problems are in other packages. You can provide an overview
33
- by running this command and passing the output:
34
-
35
- pip list
36
- -->
37
31
  ```shell
38
- pip list
32
+ $ ics-query --version
39
33
  ```
40
34
 
41
35
  ## Additional context
@@ -45,5 +39,5 @@ pip list
45
39
  <!-- If possible, suggest a way of solving this or just let this text down there remain as it is. -->
46
40
 
47
41
  - [ ] add an ICS file in `ics_query/tests/runs/calendars`
48
- - [ ] add a test in `ics_query/tests/runs directory`
42
+ - [ ] add a test in `ics_query/tests/runs`
49
43
  - [ ] fix the bug and ensure the test code passes
@@ -14,14 +14,15 @@ jobs:
14
14
  strategy:
15
15
  matrix:
16
16
  config:
17
- # [Python version, tox env]
18
- - ["3.9", "py39"]
19
- - ["3.10", "py310"]
20
- - ["3.11", "py311"]
21
- - ["3.12", "py312"]
22
- - ["3.9", "ruff"]
17
+ # [Python version, tox env, OS]
18
+ - ["3.9", "py39", "ubuntu-latest"]
19
+ - ["3.10", "py310", "ubuntu-latest"]
20
+ - ["3.11", "py311", "ubuntu-latest"]
21
+ - ["3.12", "py312", "ubuntu-latest"]
22
+ - ["3.9", "ruff", "ubuntu-latest"]
23
+ - ["3.11", "exe", "windows-latest"]
23
24
 
24
- runs-on: ubuntu-latest
25
+ runs-on: ${{ matrix.config[2] }}
25
26
  name: ${{ matrix.config[1] }}
26
27
  steps:
27
28
  - uses: actions/checkout@v4
@@ -29,14 +30,6 @@ jobs:
29
30
  uses: actions/setup-python@v5
30
31
  with:
31
32
  python-version: ${{ matrix.config[0] }}
32
- - name: Pip cache
33
- uses: actions/cache@v4
34
- with:
35
- path: ~/.cache/pip
36
- key: ${{ runner.os }}-pip-${{ matrix.config[0] }}-${{ hashFiles('setup.*', 'tox.ini') }}
37
- restore-keys: |
38
- ${{ runner.os }}-pip-${{ matrix.config[0] }}-
39
- ${{ runner.os }}-pip-
40
33
  - name: Install dependencies
41
34
  run: |
42
35
  python -m pip install --upgrade pip
@@ -44,7 +37,14 @@ jobs:
44
37
  - name: Test
45
38
  run: |
46
39
  tox -e ${{ matrix.config[1] }}
47
-
40
+ - uses: actions/upload-artifact@v4
41
+ with:
42
+ name: dist-${{ matrix.config[1] }}-${{ matrix.config[2] }} # dist-exe-windows-latest
43
+ path: dist
44
+ if-no-files-found: ignore
45
+ retention-days: 1
46
+ compression-level: 0
47
+
48
48
  deploy-tag-to-pypi:
49
49
  name: Publish Package on PyPI
50
50
  # only deploy on tags, see https://stackoverflow.com/a/58478262/1320237
@@ -95,6 +95,18 @@ jobs:
95
95
  twine check dist/*
96
96
  twine upload dist/*
97
97
 
98
+ # artifact-check:
99
+ # name: artifact check
100
+ # runs-on: ubuntu-latest
101
+ # needs:
102
+ # - run-tests
103
+ # steps:
104
+ # - uses: actions/download-artifact@v4
105
+ # with:
106
+ # pattern: dist-*
107
+ # path: dist
108
+ # - run: ls -R dist
109
+
98
110
  github-release:
99
111
  name: "Publish GitHub Release"
100
112
  # only deploy on tags, see https://stackoverflow.com/a/58478262/1320237
@@ -105,9 +117,15 @@ jobs:
105
117
  runs-on: ubuntu-latest
106
118
  steps:
107
119
  - uses: actions/checkout@v4
120
+ - uses: actions/download-artifact@v4
121
+ with:
122
+ pattern: dist-*
123
+ path: dist
124
+ - run: ls -R dist
108
125
  - name: create release
109
126
  uses: ncipollo/release-action@v1
110
127
  with:
111
128
  allowUpdates: true
112
129
  body: "For a list of changes, please refer to the [Changelog](https://github.com/niccokunzmann/ics-query#changelog)."
113
- generateReleaseNotes: false
130
+ generateReleaseNotes: false
131
+ artifacts: "dist/dist-exe-windows-latest/ics-query.exe"
@@ -1,10 +1,10 @@
1
1
  Metadata-Version: 2.3
2
2
  Name: ics-query
3
- Version: 0.1.1a0
3
+ Version: 0.3.2b0
4
4
  Summary: Find out what happens in ICS calendar files - query and filter RFC 5545 compatible .ics files for events, journals, TODOs and more.
5
5
  Project-URL: Homepage, https://github.com/niccokunzmann/ics-query/
6
6
  Project-URL: Repository, https://github.com/niccokunzmann/ics-query/
7
- Project-URL: source_archive, https://github.com/niccokunzmann/ics-query/archive/fb12ef2822d23f693aa5f9faaa0cb97fa9f67516.zip
7
+ Project-URL: source_archive, https://github.com/niccokunzmann/ics-query/archive/594ac9795b0598b83ad10972c984519dfb3c7b12.zip
8
8
  Project-URL: Issues, https://github.com/niccokunzmann/ics-query/issues
9
9
  Project-URL: Documentation, https://github.com/niccokunzmann/ics-query/
10
10
  Project-URL: Changelog, https://github.com/niccokunzmann/ics-query/#changelog
@@ -686,7 +686,7 @@ License: GNU GENERAL PUBLIC LICENSE
686
686
  <https://www.gnu.org/licenses/why-not-lgpl.html>.
687
687
  License-File: LICENSE
688
688
  Keywords: calendar,command line,icalendar,ics,rfc5545,scheduling
689
- Classifier: Development Status :: 3 - Alpha
689
+ Classifier: Development Status :: 4 - Beta
690
690
  Classifier: Intended Audience :: Developers
691
691
  Classifier: License :: OSI Approved :: GNU General Public License v3 or later (GPLv3+)
692
692
  Classifier: Operating System :: OS Independent
@@ -695,38 +695,62 @@ Classifier: Programming Language :: Python :: 3.10
695
695
  Classifier: Programming Language :: Python :: 3.11
696
696
  Classifier: Programming Language :: Python :: 3.12
697
697
  Classifier: Topic :: Office/Business :: Scheduling
698
- Requires-Python: >=3.8
698
+ Requires-Python: >=3.9
699
699
  Requires-Dist: click
700
700
  Requires-Dist: icalendar
701
- Requires-Dist: recurring-ical-events
701
+ Requires-Dist: recurring-ical-events<4,>=3.2.0
702
+ Requires-Dist: tzlocal
703
+ Requires-Dist: x-wr-timezone
702
704
  Provides-Extra: test
703
705
  Requires-Dist: pytest; extra == 'test'
704
706
  Description-Content-Type: text/markdown
705
707
 
706
708
  # ics-query
707
709
 
710
+ [![GitHub Actions CI](https://github.com/niccokunzmann/ics-query/actions/workflows/tests.yml/badge.svg)][GitHub Actions]
711
+ [![PyPI Version](https://badge.fury.io/py/ics-query.svg)][PyPI]
712
+ [![PyPI Downloads](https://img.shields.io/pypi/dm/ics-query.svg)][PyPI]
713
+ [![Support on Open Collective](https://img.shields.io/opencollective/all/open-web-calendar?label=support%20on%20open%20collective)][Open Collective]
714
+ [![Fund Issues with Polar](https://img.shields.io/github/issues/niccokunzmann/ics-query?logo=github&label=issues%20seek%20funding&color=%230062ff)][Polar]
715
+
708
716
  <!-- Change description also in pyproject.toml -->
709
717
  Find out what happens in ICS calendar files - query and filter RFC 5545 compatible `.ics` files for events, journals, TODOs and more.
710
718
 
711
719
  ## Installation
712
720
 
713
- You can install this package from the [PyPI](https://pypi.org/project/ics-query/).
721
+ You can install this package from the [PyPI].
714
722
 
715
723
  ```shell
716
724
  pip install ics-query
717
725
  ```
718
726
 
727
+ For **Windows**, you can download `ics-query.exe` from our [Releases].
728
+
729
+ ## Support
730
+
731
+ - Support using [GitHub Sponsors]
732
+ - Fund specific issues using [Polar]
733
+ - Support using [Open Collective]
734
+ - Support using [thanks.dev]
735
+
736
+ We accept donations to sustain our work, once or regular.
737
+ Consider donating money to open-source as everyone benefits.
738
+
739
+
740
+
719
741
  ## Usage
720
742
 
721
- See how to use `ics-query`.
743
+ `ics-query` is a command line tool that aims to make icalendar occurance calculations
744
+ accessible and easy.
745
+ This section walks you though the different functionalities.
722
746
 
723
747
  ### Examples
724
748
 
725
- You can easily get a calendar from the web and see what is on.
726
- In this example, we show which German National Holidays happen in August 2024:
749
+ You can get a calendar from the web and see what is on.
750
+ In this example, we show which German National Holidays happening in August 2024:
727
751
 
728
752
  ```shell
729
- $ wget -qO- 'https://www.calendarlabs.com/ical-calendar/ics/46/Germany_Holidays.ics' | ./ics-query at 2024-08 - -
753
+ $ wget -qO- 'https://www.calendarlabs.com/ical-calendar/ics/46/Germany_Holidays.ics' | ics-query at 2024-08 - -
730
754
  BEGIN:VEVENT
731
755
  SUMMARY:Assumption Day (BY\, SL)
732
756
  DTSTART;VALUE=DATE:20240815
@@ -767,100 +791,212 @@ BEGIN:VEVENT
767
791
  ...
768
792
  ```
769
793
 
794
+ #### Piping calendars
795
+
796
+ You can pipe one or more calendars into the input.
797
+
798
+ ```shell
799
+ cat calendar.ics | ics-query first -
800
+ ```
801
+
770
802
  ### Events at Certain Times
771
803
 
772
804
  You can query which events happen at certain times:
773
805
 
774
806
  ```shell
775
- ics-query at <date-time> calendar.ics -
807
+ ics-query at TIME calendar.ics -
776
808
  ```
777
809
 
778
- `<date-time>` can be built up: It can be a year, a month, a day, an hour, a minute or a second.
810
+ The format of TIME:
811
+
812
+ | TIME | description |
813
+ | ------- | ----------- |
814
+ | `2019` | the whole year 2019 |
815
+ | `2019-08` | August 2019 |
816
+ | `2019-08-12` | 12th of August 2019 |
817
+ | `2019-08-12T17` | 17:00-18:00 at the 12th of August 2019 |
818
+ | `2019-08-12T17:20` | 17:20-17:21 at the 12th of August 2019 |
819
+ | `2019-08-12T17:20:00` | 17:20 at the 12th of August 2019 |
820
+
779
821
 
780
822
  Please see the command documentation for more help:
781
823
 
782
824
  ```shell
783
- ics-query --help
784
825
  ics-query at --help
826
+ ics-query --help
785
827
  ```
786
828
 
787
- ## Vision
829
+ You can get all **events** that happen at a certain **day**.
788
830
 
789
- This section shows where we would like to get to.
831
+ ```shell
832
+ ics-query at --components VEVENT 2029-12-24 calendar.ics
833
+ ```
790
834
 
791
- ### `ics-query at` - occurrences at certain times
835
+ You can get all **events** that happen **today**.
792
836
 
793
- You can get all **events** that happen at a certain **day**.
837
+ ```shell
838
+ ics-query at --components VEVENT `date +%Y-%m-%d` calendar.ics
839
+ ```
840
+
841
+ You can get all **TODO**s that happen in a certain **month**.
794
842
 
795
843
  ```shell
796
- ics-query --components VEVENT at 2029-12-24 calendar.ics
844
+ ics-query at --components VTODO 2029-12-24 calendar.ics
797
845
  ```
798
846
 
799
- You can get all **events** that happen **today**.
847
+ ### Events within a Time Span
848
+
849
+ You can query which events happen between certain times:
800
850
 
801
851
  ```shell
802
- ics-query --components VEVENT at `date +%Y-%m-%d` calendar.ics
852
+ ics-query between START END calendar.ics -
853
+ ics-query between START DURATION calendar.ics -
803
854
  ```
804
855
 
805
- You can get all **TODO**s that happen at in certain **month**.
856
+ Please see the command documentation for more help:
806
857
 
807
858
  ```shell
808
- ics-query --components VTODO at 2029-12-24 calendar.ics
859
+ ics-query between --help
860
+ ics-query --help
809
861
  ```
810
862
 
811
- ### `ics-query at` - time ranges
863
+ The format of START and END with examples:
812
864
 
865
+ | START or END | Description |
866
+ | ------- | ----------- |
867
+ | `2019` | the whole year 2019 |
868
+ | `2019-08` | August 2019 |
869
+ | `2019-08-12` | 12th of August 2019 |
870
+ | `2019-08-12T17` | 17:00-18:00 at the 12th of August 2019 |
871
+ | `2019-08-12T17:20` | 17:20-17:21 at the 12th of August 2019 |
872
+ | `2019-08-12T17:20:00` | 17:20 at the 12th of August 2019 |
813
873
 
814
- ### `ics-query --output=count` - count occurrences
874
+ Instead of an absolute time, you can specify a duration after the START.
875
+ The `+` is optional.
815
876
 
877
+ | DURATION | Description |
878
+ | ------- | ----------- |
879
+ | `+1d` | one more day |
880
+ | `+1h` | one more hour |
881
+ | `+1m` | one more minute |
882
+ | `+1s` | one more second |
883
+ | `+3600s` | one more hour or 3600 seconds |
884
+ | `+5d10h` | five more days and 10 more hours |
816
885
 
817
- ### `ics-query --output=ics` - use ics as output (default)
886
+ ### Time Span Examples
818
887
 
888
+ This example returns the occurrences within the **next week**:
819
889
 
820
- ### `ics-query --select-index` - reduce output size
890
+ ```shell
891
+ ics-query between `date +%Y%m%d` +7d calendar.ics -
892
+ ```
821
893
 
822
- Examples: `0,2,4` `0-10`
894
+ This example saves the **events** from the **1st of May 2024 to the 10th of June** in
895
+ events.ics:
896
+
897
+ ```shell
898
+ ics-query between --component VEVENT 2024-5-1 2024-6-10 calendar.ics events.ics
899
+ ```
900
+
901
+ In this example, you can check what is happening on **New Years Eve 2025** around
902
+ midnight:
903
+
904
+ ```shell
905
+ ics-query between 2025-12-31T21:00 +6h calendar.ics events.ics
906
+ ```
823
907
 
824
908
  ### `ics-query all` - the whole calendar
825
909
 
826
- ### `ics-query between` - time ranges
910
+ You can get everything that is happening in a calendar but that can be a lot!
827
911
 
828
912
  ```shell
829
- ics-query between dt dt
830
- ics-query between dt duration
913
+ ics-query all calendar.ics
831
914
  ```
832
915
 
833
- ### `ics-query --select-component` - filter for components
916
+ ### Filtering Components
834
917
 
918
+ We support different component types: `VEVENT`, `VJOURNAL` and `VTODO`.
919
+ By default, we include all types in the result.
835
920
 
836
- ### `ics-query --select-uid` - filter by uid
921
+ You can specify which components you would like to get using the
922
+ `--component` or `-c` parameter.
837
923
 
924
+ ```shell
925
+ -c VEVENT # only events
926
+ -c VTODO # only TODOs
927
+ -c VJOURNAL # only journal entries
928
+ -c VEVENT -c VTODO # only events and journal entries
929
+ ```
838
930
 
839
- ## How to edit an event
931
+ This example returns the first event of a calendar.
840
932
 
841
- To edit a component like an event, you can append it to the calendar and increase the sequence number.
933
+ ```shell
934
+ ics-query first -c VEVENT calendar.ics -
935
+ ```
842
936
 
843
- Example:
937
+ This option is also available as `ICS_QUERY_COMPONENT` variable.
844
938
 
845
- 1. get the first event `--select-index=0` TODO: recurring-ical-events: set recurrence-id, sequence number
846
- 2. change the summary
847
- 3. increase sequence number
848
- 4. add the event to the end of the calendar file
849
- 5. show that the occurrence has changed
939
+ ```shell
940
+ export ICS_QUERY_COMPONENT=VEVENT
941
+ # from now on, you will get only events
942
+ ics-query first calendar.ics
943
+ ```
850
944
 
851
- ## Piping calendars
945
+ Please see the command documentation for more help:
852
946
 
853
947
  ```shell
854
- cat calendar.ics | ics-query --output=count --filter-component=VEVENT all > calendar-event-count.int
948
+ ics-query --help
855
949
  ```
856
950
 
857
- ## Notifications
858
951
 
859
- Examples:
952
+ ### Timezones
860
953
 
861
- - There are x todos in the next hour
862
- - There are x events today
863
- - Please write a journal entry!
954
+ You can set the timezone of the query, otherwise the event's local timezone is used and you
955
+ might miss events in your own timezone.
956
+
957
+ The first event at New Year 2000 in the **event's local time**:
958
+
959
+ ```shell
960
+ ics-query at 2000-01-01 calendar.ics
961
+ ```
962
+
963
+ The first event at New Year 2000 in **your local time**:
964
+
965
+ ```shell
966
+ ics-query at --tz=localtime 2000-01-01 calendar.ics
967
+ ```
968
+
969
+ The first event at New Year 2000 in **UTC**:
970
+
971
+ ```shell
972
+ ics-query at --tz=UTC 2000-01-01 calendar.ics
973
+ ```
974
+
975
+ The first event at New Year 2000 in **Berlin time**:
976
+
977
+ ```shell
978
+ ics-query at --tz=Europe/Berlin 2000-01-01 calendar.ics
979
+ ```
980
+
981
+ You can also use the `ICS_QUERY_TZ` variable.
982
+
983
+ ```shell
984
+ export ICS_QUERY_TZ=localtime
985
+ # from now on, we use your local time
986
+ ics-query at 2000-01-01 calendar.ics
987
+ ```
988
+
989
+ For all avaiable timezones see:
990
+
991
+ ```shell
992
+ ics-query --available-timezones
993
+ ```
994
+
995
+ Please see the command documentation for more help:
996
+
997
+ ```shell
998
+ ics-query --help
999
+ ```
864
1000
 
865
1001
  ## Version Fixing
866
1002
 
@@ -877,7 +1013,7 @@ while `b` and `c` can change.
877
1013
 
878
1014
  ## Development
879
1015
 
880
- This section should set you up for development.
1016
+ This section should set you up for developing `ics-query`.
881
1017
 
882
1018
  ### Testing
883
1019
 
@@ -920,13 +1056,13 @@ Run this to format the code and show problems:
920
1056
  tox -e ruff
921
1057
  ```
922
1058
 
923
- ## New Release
1059
+ ### New Release
924
1060
 
925
1061
  To release new versions,
926
1062
 
927
1063
  1. edit the Changelog Section
928
1064
  2. create a commit and push it
929
- 3. wait for [GitHub Actions](https://github.com/niccokunzmann/ics-query/actions) to finish the build
1065
+ 3. wait for [GitHub Actions] to finish the build
930
1066
  4. create a tag and push it
931
1067
 
932
1068
  ```shell
@@ -938,10 +1074,34 @@ To release new versions,
938
1074
 
939
1075
  ## Changelog
940
1076
 
1077
+ - v0.3.2b
1078
+
1079
+ - Fix that `--tz localtime` would use `localtime` as timezone name instead of the local timezone name.
1080
+ - Fix tests on Windows
1081
+ - Add Windows .exe build artifact
1082
+
1083
+ - v0.3.1b
1084
+
1085
+ - Add `--license` option
1086
+
1087
+ - v0.3.0b
1088
+
1089
+ - Add `--tz` timezone parameter
1090
+ - Add `ics-query all` to get all occurrences
1091
+
1092
+ - v0.2.1a
1093
+
1094
+ - Add `--component` to filter component types VEVENT, VJOURNAL and VTODO
1095
+
1096
+ - v0.2.0a
1097
+
1098
+ - Add `ics-query first <calendar> <output>` for earliest occurrences
1099
+ - Add `ics-query between <span_start> <span_stop> <calendar> <output>` to query time ranges
1100
+
941
1101
  - v0.1.1a
942
1102
 
943
1103
  - Add `--version`
944
- - Add `ics-query at <date>`
1104
+ - Add `ics-query at <date> <calendar> <output>`
945
1105
  - Add support for multiple calendars in one input
946
1106
 
947
1107
  - v0.1.0a
@@ -952,3 +1112,49 @@ To release new versions,
952
1112
  - v0.0.1a
953
1113
 
954
1114
  - first version
1115
+
1116
+ ## Related Work
1117
+
1118
+ - [icalBuddy](https://hasseg.org/icalBuddy/)
1119
+ - [Blog Post](https://opencollective.com/open-web-calendar/updates/calendar-calculation-on-the-command-line-ics-query)
1120
+ - [#icsquery on mastodon](https://toot.wales/tags/icsquery)
1121
+
1122
+ ## Vision
1123
+
1124
+ This section shows where we would like to get to.
1125
+
1126
+ ### `ics-query --select-index` - reduce output size
1127
+
1128
+ Examples: `0,2,4` `0-10`
1129
+
1130
+
1131
+ ### `ics-query --select-uid` - filter by uid
1132
+
1133
+ ### How to edit an event
1134
+
1135
+ To edit a component like an event, you can append it to the calendar and increase the sequence number.
1136
+
1137
+ Example:
1138
+
1139
+ 1. get the event `--select-index=0`
1140
+ 2. change the summary
1141
+ 3. increase sequence number
1142
+ 4. add the event to the end of the calendar file
1143
+ 5. show that the occurrence has changed
1144
+
1145
+
1146
+ ### Notifications
1147
+
1148
+ Examples:
1149
+
1150
+ - There are x todos in the next hour
1151
+ - There are x events today
1152
+ - Please write a journal entry!
1153
+
1154
+ [PyPI]: https://pypi.org/project/ics-query/
1155
+ [GitHub Actions]: https://github.com/niccokunzmann/ics-query/actions
1156
+ [Open Collective]: https://opencollective.com/open-web-calendar/
1157
+ [Polar]: https://polar.sh/niccokunzmann/ics-query
1158
+ [GitHub Sponsors]: https://github.com/sponsors/niccokunzmann
1159
+ [thanks.dev]: https://thanks.dev
1160
+ [Releases]: https://github.com/niccokunzmann/ics-query/releases