All checks were successful
CI / Build Packages (default) (push) Successful in 46s
CI / Build Packages (example-a) (push) Successful in 47s
CI / Nix Flake Check (push) Successful in 1m51s
CI / Build Packages (example-b) (push) Successful in 46s
CI / Build Packages (pyzotero) (push) Successful in 51s
CI / Build Packages (pyzotero-cli) (push) Successful in 54s
37 lines
1.0 KiB
Python
37 lines
1.0 KiB
Python
#!/usr/bin/env python3
|
|
from datetime import datetime
|
|
|
|
import click
|
|
from khal.settings import get_config
|
|
from khal.cli import build_collection
|
|
from icalendar import Calendar
|
|
|
|
|
|
@click.command()
|
|
@click.option('--search', 'search_string')
|
|
@click.option('--allow-past/--future-only', default=False)
|
|
def main(search_string, allow_past):
|
|
conf = get_config(None)
|
|
collection = build_collection(conf, None)
|
|
now = conf['locale']['local_timezone'].localize(datetime.now())
|
|
|
|
vevents = [
|
|
Calendar.from_ical(event.raw)
|
|
for event in sorted(collection.search(search_string))
|
|
if (
|
|
allow_past
|
|
or event.allday and event.end >= now.date()
|
|
or not event.allday and event.end_local >= now
|
|
)
|
|
]
|
|
event_collection = Calendar(next(iter(vevents), {}))
|
|
for event in vevents:
|
|
for component in event.subcomponents:
|
|
event_collection.add_component(component)
|
|
|
|
click.echo(event_collection.to_ical())
|
|
|
|
|
|
if __name__ == '__main__':
|
|
main()
|