org-zotero-export
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
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
This commit is contained in:
33
pkgs/khal-export/default.nix
Normal file
33
pkgs/khal-export/default.nix
Normal file
@@ -0,0 +1,33 @@
|
||||
{
|
||||
lib,
|
||||
khal,
|
||||
python3Packages,
|
||||
}:
|
||||
|
||||
python3Packages.buildPythonApplication {
|
||||
pname = "khal-export";
|
||||
version = "0.1.0";
|
||||
format = "other";
|
||||
|
||||
src = ./.;
|
||||
|
||||
dontUnpack = true;
|
||||
dontBuild = true;
|
||||
|
||||
propagatedBuildInputs = [
|
||||
khal
|
||||
python3Packages.click
|
||||
python3Packages.icalendar
|
||||
];
|
||||
|
||||
installPhase = ''
|
||||
mkdir -p $out/bin
|
||||
install -Dm755 ${./khal-export.py} $out/bin/khal-export
|
||||
'';
|
||||
|
||||
meta = {
|
||||
description = "Export multiple events from khal in .ics format";
|
||||
platforms = lib.platforms.all;
|
||||
mainProgram = "khal-export";
|
||||
};
|
||||
}
|
||||
36
pkgs/khal-export/khal-export.py
Normal file
36
pkgs/khal-export/khal-export.py
Normal file
@@ -0,0 +1,36 @@
|
||||
#!/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()
|
||||
Reference in New Issue
Block a user