Repository navigation
qsv-client 0.6.0 accompanies qsv 27.0.0, the first qsv whose Data Schematics connect to qsv-clientd. qsv-clientd viz <URL> turns a download link or a CKAN page into a live schematic in one step, and the daemon remembers where the data came from, so Fetch latest gets the current version.
pip install qsv-client # the library and qsv-clientd
pipx install 'qsv-client[tray]' # plus the system tray (pystray, Pillow)
qsv-clientd viz https://data.example.gov/dataset/housing/resource/<resource id>Highlights
qsv-clientd viz <URL>downloads the data (an http(s) link, a CKAN resource or dataset page, orckan://<id>), then renders, registers and opens the schematic. The data is saved beside the schematic, readable only by you.- CKAN sources work with or without
qsv get, and resolve against the dataset's own CKAN site. - A commented config. The daemon's config is now
daemon.toml. The tray's Open config… creates it with every setting documented and commented out. - No silent offline schematics. With a qsv older than 27.0.0,
qsv-clientd serveand the tray say why schematics won't connect. - Security. The
[tray]extra now needs Pillow 13.0.0, which closes all 41 Dependabot alerts against Pillow 12.3.0. (The tray opens only its own bundled icon, so they weren't reachable through it.)
Requirements
- Python 3.11 or later (3.10 is no longer supported; Pillow 13 requires 3.11). qsv-client has no runtime dependencies.
- qsv 25.0.0 or later, as before. Live Data Schematics need qsv 27.0.0 or later.
Breaking changes
- Python 3.11+ is required.
daemon.tomlreplacesdaemon.json. Adaemon.jsonfrom 0.5.0 is no longer read; move its settings across (qsv-clientd serve --configwith an old JSON file says so). See docs/DAEMON.md for where it lives.
Full changelog
Added
qsv-clientd viz <URL>(#34) downloads the data first, then renders, registers and opens
the schematic in one step. The URL can be an http(s) download link,ckan://<id>, or a
CKAN resource page copied from the browser. It is also where Fetch latest gets new data.
The data is saved beside the schematic (--save-asto choose), readable only by you
since it may be private, never replacing an existing file. A qsv withgetalso keeps a
copy in its own cache (~/.qsv-cacheby default, orQSV_CACHE_DIR), which follows
your umask.-onow defaults to the data's name with.html.--no-openskips the
browser.- CKAN pages as sources. (#34) A CKAN resource page (
<site>/dataset/<name>/resource/<id>) is
fetched asckan://<id>from that site. A CKAN dataset page with exactly one CSV or TSV
resource, found withpackage_show, is fetched as that resource; with several, the
error lists them. A private dataset's page is refused with a message naming the fix
(its resource page, withqsv getandQSV_CKAN_TOKEN). --ckan-api(#34) onregisterandviznames a dataset's CKAN site (or its Action API
URL) forckan://sources.register --schematictakes the source URL (and its CKAN site) from a schematic that
records one, as qsv records it for data downloaded withqsv get. (#34)- With a qsv older than 27.0.0, whose schematics can't connect,
qsv-clientd servelogs a
warning and the tray shows a notification once, instead of leaving schematics silently
offline. Everything else still works with qsv 25.0.0 or later.
Changed
- Python 3.11 or later is required; 3.10 is no longer supported. The
[tray]extra now
needs Pillow 13.0.0, which fixes its known vulnerabilities and requires Python 3.11.
(The tray opens only its own bundled icon, so they weren't reachable through it.) - The daemon's config is now
daemon.toml, notdaemon.json, so it can carry comments.
The tray's Open config… creates it with every setting commented out, each with its
default and the values it takes; nothing changes until you uncomment a line. A
daemon.jsonfrom an earlier release is no longer read: move its settings across
(serve --configwith an old JSON file says so). It is read with the standard
library'stomllib, so qsv-client still has no runtime dependencies. - The docs now name the release that brings live Data Schematics: qsv 27.0.0 or later
(before, "a qsv newer than 26.0.0"). Other uses still need only qsv 25.0.0.
Fixed
ckan://sources were resolved against qsv's default CKAN site (data.dathere.com) unless
QSV_CKAN_APIhappened to be in the daemon's environment. They now use the dataset's own
CKAN site, thenQSV_CKAN_API, and are refused when neither is set. (#34)- A source that serves a web page (a landing page, a sign-in form) is refused with "serves
a web page, not data", naming the PID or source URL. Before, a download throughqsv get
kept the page and failed with a CSV parse error. (#34) - Downloads without
qsv get(the prebuilt qsv has none) failed with 403 on CKAN sites
that store data in S3. Their download links redirect to a presigned URL written with
:443, and urllib sent that port inHost, which breaks the URL's signature. The default
port is now dropped first. (#34) ckan://sources, including CKAN resource pages, now work withoutqsv get: the daemon
looks the resource up withresource_showand downloads its data itself. Private
resources still needqsv getandQSV_CKAN_TOKEN. (#34)- A daemon re-render dropped the schematic's
source: it renders from the daemon's own copy
of the data, for which qsv records none. The new page now keeps the previous page's
sourcewhile it still names the dataset's source URL. The daemon never adds one itself,
since only qsv knows whether a download was public. A page rendered from other data (an
existing-ofile, or one registered with--force) lends the dataset no source and no
PID. Neither does a BLAKE3 page that a qsv withoutblake3can't check;--forceregisters
it again, as before.
(#35) registerprinted the schematic's viz arguments, and its "Use these arguments?"
question, on stdout before the registration's JSON. They are on stderr now, so stdout can
be piped tojq. So isapprove's question. (#35)- The
fingerprint_mismatchrefusal said "pass force"; it now says to register with
--force. (#35)
Pull requests: #34, #35, #37. Compare: 0.5.0...0.6.0