Stash¶
Overview¶
Kibitzr maintains persistent key-value storage - stash
.
All data inside stash
is accessible inside all checks
and can be referred from Python Fetcher and Jinja Transform.
Stash keys are populated in notify.
Use stash
notifier and provide it key-value dictionary.
Each value is a Jinja template.
It has access to the same context as Jinja transform.
Stored values can be printed with command:
$ kibitzr stash
Example¶
Good application for stash is checks aggregation. Consider this news digest example:
checks:
- url: http://www.foxnews.com/
transform:
- jinja: '{{ css("h1")[-1] }}'
- text
- jinja: '{{ lines | join(" ") }}'
notify:
- stash:
fox: '{{ content }}'
- url: https://www.nytimes.com/
transform:
- xpath: //*[starts-with(@id, "topnews-")]/h2/a
- text
notify:
- stash:
nytimes: '{{ content }}'
- name: Headlines
script:
python: |
content = (
"Fox News: {0}\n"
"NY Times: {1}"
).format(stash["fox"], stash["nytimes"])
notify:
- python: print(content)
First check, Fox News
, will fetch headline from foxnews.com.
Second - from nytimes.com.
They both will save headings in stash under respective keys.
Last check, Headlines
, uses Python script that will print something similar to:
Fox News: LASHING OUT AT LEAKS Trump calls US disclosures in UK bombing ‘deeply troubling’ NY Times: Trump Calls for U.S. Inquiry Into Leaks on Manchester
Implementation¶
Under the hood stash uses python built-in shelve module.
It stores all data in stash.db
file in working directory.
Writes are atomic - if one of values fails rendering, none will be written.