Observed since 20 Oct, 17:41 UTC
No superseded metadata states collected. Unchanged observations do not create new revisions.
The present, and whether it has stopped changing. Change and quiet as one subscription.
Be told what is true now, and be told when nothing has changed for a while.
A Notice carries the present; quiet says nothing visible has moved for at
least the budget, and silence says for how long. One module, standard library
only, importing nothing of ours.
Quiet is the half that is normally missing. A progress bar that stops moving and a transfer nobody is performing look identical to a listener that is only told about changes.
This page is the Python package. The contract, the Go and C++ implementations,
what is measured and what is UNPROVEN are on
the repository.
Not on PyPI, and the name on PyPI is not ours.
git clone https://github.com/openabstractions/abstraction-watch
pip install ./abstraction-watch/python
Python 3.9 or later. abstraction_watch.py is one file with no imports of ours,
so copying it into a _vendor/ directory of your own is an equally complete
installation.
A source that says when it moved, and a listener that hears both the change and the quiet after it:
import abstraction_watch as watch
progress = watch.push({"done": 0}, stamp="0", budget=0.5)
progress.post({"done": 1 << 20}, stamp="1")
notice = progress.next()
print("now:", notice.now)
notice = progress.next()
print("quiet:", notice.quiet, "after", round(notice.silence, 1), "s of nothing")
progress.close()
budget=0.5 is the quiet budget and the only timer here: the listener's own wait
decides when silence counts, so a change the source already made is always
delivered ahead of a quiet that would postdate it.
| call | what it does |
|---|---|
push(first, stamp, budget) | a subscription over a source that reports its own changes through post |
poll(read, every, budget) | a subscription over a source that has to be asked. read returns (value, stamp); every is the interval between asks while a listener waits |
Subscription.next(timeout=None) | the next Notice: a change, or quiet once the budget passed with none |
Subscription.current() | what is true now, without waiting |
Subscription.post(value, stamp) | tell a push subscription the source moved |
Subscription.close() | end it. A waiting next raises Closed |
settle(events, period, settled) | call settled once a queue of platform notifications has been still for period, because one edit produces several of them |
A subscription is iterable: for notice in subscription: ..., ending on close().
stamp is what decides whether a value is a change; two reads with the same stamp
are one.
abstraction_job.watch(store, kind, budget) is this primitive with a job store as
the source, which is what a download progress view binds to.
poll asks; it does not subscribe to the platform. There is no inotify,
no ReadDirectoryChangesW and no FSEvents under it. settle is the seam
where a caller supplies those.UNPROVEN throughout.Apache-2.0. See LICENSE.
Download counts and popularity will appear here as the collector receives them.
| Version | Published | Direct dependencies | Open version |
|---|---|---|---|
| 0.1.0 | 10 Sept 2026 | 0 |
This describes our collected data; it is not a security assessment.
Shared repository data · GitHub
Observed since 20 Oct, 17:41 UTC
No superseded metadata states collected. Unchanged observations do not create new revisions.
package:e9a5825de70233ed6a67f0cb3b840cc4993e84a7c6b43b051320be23193ef6c6