Releases: m-lab/iqb
v0.8.0
What's Changed
- doc(AGENTS.md): guidelines for AI assisted contrib by @bassosimone in #159
- fix(AGENTS.md): make AI instructions stricter by @bassosimone in #161
- doc: add CODEOWNERS file by @bassosimone in #162
- ci: drop privileges to
contents: readby @abhi-14gyan in #155 - fix: correct spelling mistakes by @abhi-14gyan in #153
- fix(cache_pull.py): avoid data race by @bassosimone in #179
New Contributors
- @abhi-14gyan made their first contribution in #155
Full Changelog: v0.7.0...v0.8.0
v0.7.0
What's Changed
- fix: update threshold values by @zarsl in #129
- doc: document iqb internals by @bassosimone in #130
- feat: publish dataset using GCS by @bassosimone in #131
- feat(ghcache): diff between manifest and cache by @bassosimone in #132
- refactor(ghremote): expose manifest load/save by @bassosimone in #133
- fix(library): avoid pyright error: missing
_versionby @bassosimone in #134 - feat: introduce the iqb CLI by @bassosimone in #135
- feat(cli): implement
iqb cache pullby @bassosimone in #136 - feat: implement
iqb cache pushby @bassosimone in #137 - feat: implement
iqb pipeline runby @bassosimone in #138 - cleanup(data): remove unnecessary scripts by @bassosimone in #139
- feat: add
iqb cache usagesubcommand by @bassosimone in #140 - feat(cli): record pull structured logs by @bassosimone in #141
- doc: add design documents by @bassosimone in #142
- doc: restructure and reorganize docs by @bassosimone in #143
- feat: Updated map to display regions by @zarsl in #144
Full Changelog: v0.6.0...v0.7.0
v0.6.0
v0.5.0
This release adds support for automatically fetching from the GitHub remote cache, so that we download files on demand when we need it for research. Additionally, we significantly improve the pipeline for generating data.
What's Changed
- feat(pipeline): introduce RemoteCache by @bassosimone in #85
- fix(bqpq.py): make BigQuery init lazy by @bassosimone in #86
- feat(library): add ghremote package by @bassosimone in #88
- refactor(pipeline)!: move remote cache to cache.py by @bassosimone in #89
- refactor(pipeline)!: pass remote_cache to ctors by @bassosimone in #90
- feat(pipeline)!: introduce file-based locking by @bassosimone in #91
- fix(pipeline): ensure eventual consistency on Unix by @bassosimone in #92
- fix(pqread.py): allow subdivision1 filtering by @bassosimone in #93
- fix(pipeline/dataset.py): define all granularities by @bassosimone in #94
- feat(pipeline): improve operator experience by @bassosimone in #95
- feat(ghremote): improve DX using tqdm by @bassosimone in #96
- feat(cache): pass cache_manager to IQBCache by @bassosimone in #97
- feat: export IQBDatasetMLabTable by @bassosimone in #98
- feat(cache/mlab.py): filter by
subdivision1by @bassosimone in #99 - feat(cache)!: make read_cache_entry lazy by @bassosimone in #100
- feat(iqb): export remote-github-cache names by @bassosimone in #101
- fix: prefer os.replace to shutil.move by @bassosimone in #102
- fix(pipeline): make BQ idempotent by default by @bassosimone in #103
- fix: automatically set version number by @bassosimone in #104
- fix!: enforce keyword arguments by @bassosimone in #105
- fix(ghremote)!: more cohesive construction by @bassosimone in #106
- fix(pipeline): prevent start_date == end_date by @bassosimone in #107
- refactor: replace tqdm with rich by @bassosimone in #108
- feat: introduce the scripting package by @bassosimone in #109
- feat(scripting): add pipeline convenience code by @bassosimone in #110
- feat(pipeline): improve date-parsing errors by @bassosimone in #111
- feat(scripting): add exception interceptor by @bassosimone in #112
- refactor(./data/run_query)!: use iqb.scripting by @bassosimone in #113
- ghcache.py!: remove sync and update manifest path by @bassosimone in #114
- chore(ghremote): publish additional country-level data by @bassosimone in #115
- refactor(generate_data.py): use
iqb.scriptingby @bassosimone in #116 - chore(analysis): start using remote cache by @bassosimone in #117
- chore(data): publish 2025-06 data by @bassosimone in #118
- chore(data): publish data committed into repo by @bassosimone in #119
- cleanup(data): remove cached entries by @bassosimone in #120
- doc(data): update README.md by @bassosimone in #121
- feat(pipeline)!: explicit BigQuery enable kwarg by @bassosimone in #122
- refactor(generate_data.py): add flags and matrix by @bassosimone in #123
- fix(iqb_exception): don't suppress KeyboardInterrupt by @bassosimone in #124
- refactor: make data a pyproject by @bassosimone in #125
- fix(data)!: use integer for YAML file version by @bassosimone in #87
- cleanup(data)!: remove the run_query.py script by @bassosimone in #126
- fix(ghcache.py): emit files to upload in data/tmp by @bassosimone in #127
Full Changelog: v0.4.0...v0.5.0
v0.4.0
What's Changed
- chore: add missing parquet/json files by @bassosimone in #82
- doc: publish @sermpezis 2025-12-11 presentation by @bassosimone in #84
- feat: Update prototype UI with map functionality by @zarsl in #83
Full Changelog: v0.3.0...v0.4.0
v0.3.0
What's Changed
- doc(
IQBPipeline.__init__): clarifyproject=meaning by @bassosimone in #70 - fix(cloudbuild.yaml): sync variables with token-exchange by @bassosimone in #71
- doc(prototype): document automatic deployments by @bassosimone in #72
- doc(prototype): document staging vanity URL by @bassosimone in #73
- fix(queries): allow for geographical navigation by @bassosimone in #74
- feat(queries): add by_country_asn queries by @bassosimone in #75
- chore: update data by @bassosimone in #76
- feat(data): add
by_country_citydata by @bassosimone in #77 - feat: add and use
downloads_by_country_subdivision1queries by @bassosimone in #78 - feat(data): add more by_country_subdivision1 data by @bassosimone in #80
- feat: add
by_country_subdivision1_asnqueries by @bassosimone in #81
Full Changelog: v0.2.0...v0.3.0
v0.2.0
This is an interesting development checkpoint. We have restructured the code to make space for additional datasets, clarified the cache semantics, implementing fetching additional (large) data files from GitHub (and specifically from the v0.1.0 release assets), and sketched out an API allowing a researcher to directly load pandas DataFrames, which seems very useful potentially for exploration and analysis.
What's Changed
- feat(data): use GitHub releases as interim cache by @bassosimone in #49
- refactor(library): cache and pipeline are now packages by @bassosimone in #50
- refactor(pipeline): separate cache and pipeline code by @bassosimone in #51
- refactor(PipelineCacheEntry)!: return
PathnotPath | Noneby @bassosimone in #52 - refactor(pipeline)!: factor BigQuery-to-Parquet code by @bassosimone in #53
- refactor(pipeline): create pipeline.py with IQBPipeline by @bassosimone in #54
- feat: measure the code coverage with codecov by @bassosimone in #56
- doc(README.md): add badges by @bassosimone in #57
- feat(library/pipeline): add iqb_parquet_read by @bassosimone in #58
- feat(pipeline): introduce the dataset concept by @bassosimone in #59
- refactor(pipeline)!: use the dataset name concept by @bassosimone in #60
- feat(cache)!: use dataset granularity by @bassosimone in #61
- refactor(cache)!: explicitly mlab-scope funcs/data by @bassosimone in #62
- refactor(cache): separate mlab and generic code by @bassosimone in #63
- refactor(cache): move m-lab
get_datato mlab.py by @bassosimone in #64 - refactor(cache)!: re-introduce CacheEntry by @bassosimone in #65
- feat(cache)!: implement IQBCache.get_iqb_data by @bassosimone in #66
- refactor(cache): move IQBCache to cache.py by @bassosimone in #67
- fix(queries): ensure we include the AS name by @bassosimone in #68
- doc(analysis): document the pandas based API by @bassosimone in #69
Full Changelog: v0.1.0...v0.2.0
v0.1.0
This is the first release of the Internet Quality Barometer. We are still sketching out the initial code and implementation, but we have been developing for quite some time now, so it makes sense to create an initial tag with the progress made so far.
Also, this release allows us to publish large static assets useful for continuing the development without having to deal with publishing data at GCS buckets, which is something we'll implement in future iterations (see #49).
What's Changed
- feat: allow importing and publishing the library by @bassosimone in #1
- feat: introduce initial prototype streamlit app by @bassosimone in #2
- feat(prototype): add docker container by @bassosimone in #3
- feat(prototype): allow for manual cloud run deployment by @bassosimone in #4
- fix(readme): correct snap command by @bassosimone in #5
- library: separate and enhance tests by @bassosimone in #6
- feat(library): setup ruff and pyright by @bassosimone in #7
- refactor:
uv run ruff format .by @bassosimone in #8 - fix: start addressing
ruff check --fix .issues by @bassosimone in #9 - fix(library): ensure we honour PEP8 by @bassosimone in #10
- cleanup(library): factor optional print by @bassosimone in #11
- feat: add VSCode development tasks by @bassosimone in #12
- refactor(library): avoid stuttering, balance hier by @bassosimone in #13
- doc: improve documentation quality by @bassosimone in #14
- feat: add initial, static data by @bassosimone in #15
- refactor!: use snake case for metric keys by @bassosimone in #16
- refactor: assign proper name to calculator by @bassosimone in #17
- feat: add IQBCache component by @bassosimone in #18
- fix: allow loading and computing score by @bassosimone in #19
- refactor: streamline local aggregation design by @bassosimone in #20
- refactor: align percentile semantics across metrics by @bassosimone in #21
- feat: add initial dashboard by @zarsl in #22
- feat: static data for more time periods by @bassosimone in #23
- feat: add data for all countries by @bassosimone in #24
- doc(queries): add note about union tables by @bassosimone in #26
- feat:Add configuration management to dashboard and test infrastructure prototype by @zarsl in #25
- feat: add template notebook by @bassosimone in #27
- fix(data/run_query.py): use larger --max-rows with bq.py CLI by @bassosimone in #28
- refactor(data): move SQL queries to library package by @bassosimone in #29
- refactor(data)!: move JSON files to ./data/cache/v0 by @bassosimone in #30
- fix(data): include sample counts in JSON files by @bassosimone in #32
- fix(data): use
measurement-labproject by @bassosimone in #33 - refactor(cache): factor data_dir_or_default func by @bassosimone in #34
- feat(library): add pipeline with Parquet-based cache storage by @bassosimone in #35
- feat(iqb): add pipeline tests by @bassosimone in #36
- feat(iqb/pipeline): optionally save query stats by @bassosimone in #37
- refactor(data): use IQBPipeline to query by @bassosimone in #38
- doc(data/README.md): sync with recent changes by @bassosimone in #39
- feat(pipeline): allow checking whether entry exists by @bassosimone in #40
- fix(iqb/pipeline): always create parquet file by @bassosimone in #41
- feat: add country-city-asn queries by @bassosimone in #42
- refactor(library): make cache depend on pipeline by @bassosimone in #43
- refactor: split IQBPipeline and PipelineCacheManager by @bassosimone in #44
- feat(iqb/cache): implement reading parquet files by @bassosimone in #45
- feat(iqb/cache): implement transform to IQB dict by @bassosimone in #46
- refactor(iqb/cache): use cache/v1 instead of cache/v0 by @bassosimone in #47
- doc(data/README.md): sync up w/ recent changes by @bassosimone in #48
New Contributors
- @bassosimone made their first contribution in #1
- @zarsl made their first contribution in #22
Full Changelog: https://github.com/m-lab/iqb/commits/v0.1.0