Claude Code
9d7dde17a9
experiment: add missing db.session.add() in report-schedule test fixtures
...
Root cause of the ReportSchedule "is not persisted" InvalidRequestError
and the cascaded StaleDataError/PendingRollbackError fan-out seen across
charts/api_tests.py and dashboards/api_tests.py in CI: SQLAlchemy 2.0
removes the legacy cascade_backrefs behavior entirely. Under 1.4,
constructing `ReportSchedule(chart=chart)` where `chart` was already a
persistent, session-tracked object implicitly added the new
ReportSchedule to the session too, via the Slice.report_schedules
backref collection. That auto-cascade is gone in 2.0 (this is a
documented, intentional SQLAlchemy 1.4->2.0 removal, not a bug) - an
explicit db.session.add() is now required.
Without it, `create_chart_with_report`/`create_dashboard_with_report`
committed a ReportSchedule that was silently never persisted. The
actual test bodies then found no report attached (delete succeeded
with 200 instead of the expected 422 block), and fixture teardown's
`db.session.delete(report_schedule)` blew up with "Instance ... is not
persisted" since the object was transient all along. The dashboard
variant's cascading StaleDataError on dashboard_slices was a downstream
symptom of the same root cause (the "blocked" dashboard delete actually
went through).
Other ReportSchedule(...) construction sites in the test suite already
call db.session.add() explicitly (deletion_retention/*, charts/
soft_delete_tests.py, databases/api_tests.py, reports/utils.py) or
never persist the object at all (reports/alert_tests.py,
reports/commands_tests.py) - these two fixtures were the only ones
missing it. Production code is unaffected: BaseDAO.create() already
calls db.session.add() explicitly, so the real create-report code path
never relied on the removed cascade.
Verified locally (real flask-sqlalchemy==3.1.1 + sqlalchemy==2.0.51,
sqlite backend): tests/integration_tests/charts/api_tests.py (96/96)
and tests/integration_tests/dashboards/api_tests.py (156/156) both
pass clean after this fix, including the two previously-failing
report-block tests and the dashboard_slices StaleDataError case.
2026-08-10 04:39:12 -07:00
Evan Rusackas and Claude Code
2ecce20e48
chore(viz): remove legacy explore_json + viz.py pipeline ( #41714 )
...
Co-authored-by: Claude Code <noreply@anthropic.com >
2026-08-06 13:22:15 -07:00
Ville Brofeldt
33f0fc93ed
feat: introduce Subject model and entity editors/viewers ( #38831 )
2026-07-08 11:00:03 -07:00
Cezar and Cursor
df0668eda5
feat(api): return uuid in POST response for dataset, chart, and dashboard ( #37806 )
...
Co-authored-by: Cursor <cursoragent@cursor.com >
2026-06-13 16:53:08 -07:00
Evan Rusackas and Claude Code
bf9ad4d2ba
fix: set charset via content_type to avoid malformed Content-Type headers ( #40658 )
...
Co-authored-by: Claude Code <noreply@anthropic.com >
2026-06-09 10:17:44 -07:00
Shaitan and Claude Sonnet 4.6
41572dbf9d
fix(chart): restrict owner lookup to users with write access ( #39304 )
...
Co-authored-by: Claude Sonnet 4.6 <noreply@anthropic.com >
2026-06-03 23:00:31 +01:00
Shaitan and Claude Opus 4.7
b8a2f925ee
fix(views): enforce per-chart access check in legacy form_data endpoint ( #40497 )
...
Co-authored-by: Claude Opus 4.7 <noreply@anthropic.com >
2026-06-03 12:56:03 +01:00
Evan Rusackas and Claude Code
b23c65e04f
test(charts): regression for last-modified sort order ( #27500 ) ( #40231 )
...
Co-authored-by: Claude Code <noreply@anthropic.com >
2026-05-20 11:43:19 -07:00
Beto Dealmeida
cb53745d43
feat: semantic layer extension ( #37815 )
2026-05-05 12:07:46 -04:00
Beto Dealmeida
edf4d03218
chore: bump rison to 2.0.0 ( #39529 )
2026-04-24 15:52:42 -04:00
Michael S. Molina
e3e2bece6b
feat(owners): display email in owner selectors ( #37906 )
2026-02-13 09:01:05 -03:00
Maxime Beauchemin and Claude
4695be5cc5
fix: complete theme management system import/export ( #34850 )
...
Co-authored-by: Claude <noreply@anthropic.com >
2025-09-01 15:44:01 -07:00
9de1706baa
fix: Fix TypeError in Slice.get() method when using filter_by() with BinaryExpression ( #34769 )
...
Co-authored-by: Claude <noreply@anthropic.com >
Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com >
2025-08-20 11:22:54 -07:00
Danylo Korostil
31e2143c84
feat(api): Added uuid filed support to dataset, chart, dashboard API ( #29573 )
2025-08-18 13:05:16 -07:00
Vitor Avila
733f112142
fix: Support metric currency as dict during import ( #34080 )
2025-07-07 14:00:56 -03:00
Beto Dealmeida and Maxime Beauchemin
7ab8534ef6
feat: dataset folders (backend) ( #32520 )
...
Co-authored-by: Maxime Beauchemin <maximebeauchemin@gmail.com >
2025-04-11 11:38:08 -07:00
Vitor Avila
ab22bb1878
fix(Jinja): Emit time grain to table charts even if they don't have a temporal column ( #32871 )
2025-03-28 13:48:49 -03:00
Michael S. Molina
547b8b9314
chore: Re-enable skipped tests ( #31795 )
2025-01-16 15:33:22 -03:00
Michael S. Molina
bbdc195a3b
chore: Skips integration tests affected by legacy charts removal ( #31791 )
2025-01-10 14:53:54 -03:00
Maxime Beauchemin and Elizabeth Thompson
e51b95ffa8
chore: enforce more ruff rules ( #31447 )
...
Co-authored-by: Elizabeth Thompson <eschutho@gmail.com >
2024-12-18 17:41:34 -08:00
Beto Dealmeida
832fed1db5
fix(dataset): use sqlglot for DML check ( #31024 )
2024-11-22 07:21:05 -05:00
Jack
dd39138e6e
fix(chart data): removing query from /chart/data payload when accessing as guest user ( #30858 )
2024-11-07 11:24:15 -06:00
Maxime Beauchemin
a849c29288
chore: enable lint PT009 'use regular assert over self.assert.*' ( #30521 )
2024-10-07 13:17:27 -07:00
Beto Dealmeida
61c0970968
fix: create permissions on DB import ( #29802 )
2024-08-06 12:09:21 -04:00
Vitor Avila
33b934cbb3
fix(Tags filter): Filter assets by tag ID ( #29412 )
2024-07-11 12:26:36 -03:00
John Bodley
8fb8199a55
chore(dao/command): Add transaction decorator to try to enforce "unit of work" ( #24969 )
2024-06-28 12:33:56 -07:00
Maxime Beauchemin
7dd28a9003
chore: remove sl_ tables ( #28704 )
2024-05-29 19:04:37 -07:00
Eyal Ezer and Eyal Ezer
07b2449bd7
refactor: Unify all json.(loads|dumps) usage to utils.json ( #28702 )
...
Co-authored-by: Eyal Ezer <eyal.ezer@ge.com >
2024-05-28 14:17:41 -07:00
Vitor Avila
0fdb4b7c23
chore(tags): Handle tagging as part of asset update call ( #28570 )
2024-05-28 11:41:31 -04:00
b1f85dce71
refactor(plugins): BigNumber Time Comparison with existing time_offset API ( #27718 )
...
Co-authored-by: lilykuang <jialikuang@gmail.com >
Co-authored-by: Kamil Gabryjelski <kamil.gabryjelski@gmail.com >
2024-05-16 18:47:50 +02:00
Maxime Beauchemin
513852b7c3
fix: all_database_access should enable access to all datasets/charts/dashboards ( #28205 )
2024-05-02 09:25:14 -07:00
Maxime Beauchemin
2d63722150
chore: set up ruff as a new linter/formatter ( #28158 )
2024-04-24 17:19:53 -07:00
John Bodley
bc65c245fe
chore(tests): Remove unnecessary/problematic app contexts ( #28159 )
2024-04-24 13:46:35 -07:00
John Bodley
481a63da55
chore(tests): Remove ineffectual login ( #27149 )
2024-04-09 09:52:02 -07:00
Vitor Avila
66bf70172f
fix(API): Updating assets via the API should preserve ownership configuration ( #27364 )
2024-03-06 16:40:41 +00:00
Yongjie Zhao and Yongjie Zhao
2c00cc534c
feat: support to fetch multiple date time in time_range endpoint ( #27370 )
...
Co-authored-by: Yongjie Zhao <yongjie.zhao@burda-forward.de >
2024-03-04 11:50:05 +01:00
John Bodley
847ed3f5b0
refactor: Ensure Flask framework leverages the Flask-SQLAlchemy session (Phase II) ( #26909 )
2024-02-14 06:20:15 +13:00
John Bodley
aafb54d042
chore: Ensure Mixins are ordered according to the MRO ( #26288 )
2023-12-16 14:11:58 +13:00
Michael S. Molina
3ab27c6ec9
chore: Clean up the examples dashboards ( #26158 )
2023-12-04 16:05:08 -03:00
John Bodley
07bcfa9b5f
chore(command): Organize Commands according to SIP-92 ( #25850 )
2023-11-22 16:55:54 -03:00
John Bodley
94c595093b
chore: Add explicit ON DELETE CASCADE for dashboard_slices ( #24938 )
2023-08-10 10:56:11 -03:00
Zef Lin
0631a8086c
chore(view_api): return application/json as content-type for api/v1/form_data endpoint ( #24758 )
2023-07-21 16:31:41 -07:00
John Bodley
5f49e0fdd0
fix(cache): Add cache warmup for non-legacy charts ( #24671 )
2023-07-19 11:12:36 -07:00
John Bodley
1b5a6790f0
chore: Remove obsolete legacy visualizations ( #24694 )
2023-07-18 08:17:52 -07:00
John Bodley
ae00489779
chore(dao): Add explicit ON DELETE CASCADE for ownership ( #24628 )
2023-07-11 11:39:03 -07:00
Jack Fragassi
4caf33b41d
fix: Chart can be added to dashboard by non-owner via save as option ( #24630 )
2023-07-11 11:58:29 -04:00
John Bodley
75543af550
chore(dao): Add explicit ON DELETE CASCADE when deleting datasets ( #24488 )
2023-06-28 16:03:25 -07:00
Jack Fragassi
5af298e1f6
chore: Migrate warm up cache endpoint to api v1 ( #23853 )
2023-06-20 12:08:29 +01:00
Daniel Vaz Gaspar
23bb1c48a1
chore: remove deprecated apis and ENABLE_BROAD_ACTIVITY_ACCESS ( #24400 )
2023-06-15 22:11:24 +01:00
Michael S. Molina
a7f7f6645d
feat: Convert ENABLE_BROAD_ACTIVITY_ACCESS and MENU_HIDE_USER_INFO into feature flags ( #24345 )
2023-06-12 10:40:22 -07:00