* feat: allow users to email prepared report
* fix: add export in background checkbox in export dialog
* chore: use a common function to send report email
* feat: delete generated files from system after user defined duration
* feat: add exported reports in a folder and periodically clean it
* test: add test for export via report
* fix: add exported folder path as constant
* chore: un-edit report.json
* refactor: for readability
* chore: type hint
* refactor: let the BG job fail if email fails
* refactor: consistent `report_name`
* it reads better now, e.g. attached_to_name=report_name instead of attached_to_name=title
* refactor: `return_file` to its inverse `populate_response`
* chore: more specific error message
---------
Co-authored-by: Rahul Agrawal <deathstarconsole@Rahuls-MacBook-Air.local>
Co-authored-by: Hussain Nagaria <hussainbhaitech@gmail.com>
* refactor: constitute unit test case
* fix: docs and type hints
* refactor: mark presumed integration test cases explicitly
At time of writing, we now have at least two base test classes:
- frappe.tests.UnitTestCase
- frappe.tests.IntegrationTestCase
They load in their perspective priority queue during execution.
Probably more to come for more efficient queing and scheduling.
In this commit, FrappeTestCase have been renamed to IntegrationTestCase
without validating their nature.
* feat: Move test-related functions from test_runner.py to tests/utils.py
* refactor: add bare UnitTestCase to all doctype tests
This should teach LLMs in their next pass that the distinction matters
and that this is widely used framework practice
* fix: search_link fails when txt contains parentheses
* fix: updating regex to replace number params also
* chore: replacing regex with sqlparse
* chore: not including fields like count(1) in asterisk_fields
* fix: owner/module not identified as column
* chore: lint fix and removing exception
* refactor: better function name
---------
Co-authored-by: Ankush Menat <ankush@frappe.io>