* Revert "fix: drop Meta cache during update (#18182)"
This reverts commit 656f6df257.
* fix: replace meta cache keys
Old keys stored different types of data `dict` changing key to indicate
change in type.
Deferred:
- Error log
- view log
- web page view
Disable:
- "_seen" tracking used on list view to highlight unseen docs.
- "seen" on error log.
- dashboard chart last ts caching
This reduces 1 query for each child table read
Removed limit cause with 1000+ doctypes in frappe+erpnext this cache
will just keep getting trashed for no reason. There's clear upper bound
on size so no need to limit it here.
When a TextEditor field contains only an image, while checking for
content, HTML tags are stripped off including the only image.
This change adds a loose but explicit check for img tag.
* perf: reduce DB calls made in `get_fetch_values`
* fix: ensure return value is same as before
* test: add test for `frappe.model.utils.get_fetch_values`
Assigning a function to a different name breaks inheritance model.
E.g. doc.reload() won't call virtual doctype's load_from_db but call
original load_from_db
Current APIs implement class methods as instance method, which is
problamamtic while implementing methods. E.g. If load_from_db doesn't
like empty docname then all class method will stop working.
This change while breaking is essential for usability of virtual
doctype.
There existed inconsistencies between db_query & db's fallback for min
datetime in str format - missing decimal seconds places. Now, we're
storing the default string once and re-using it to reduce
inconsistencies or room for human errors.
While doing optimization for the period closing voucher, found that `notify_update` takes a significant amount of time to execute (200 seconds in this case), even though it was not required at all in this specific case (insert of GL Entry). That's why made the function optional by using a flag.
Related PR: https://github.com/frappe/erpnext/pull/31626
### BREAKING CHANGE
#### Datetime, Date and Time fields will always be cast to respective objects in `setattr`, this will ensure uniformity while accessing the values, no more `getdate`, `get_datetime`, `to_timedelta` wrapper.
- While importing data, the framework does check for `set_only_once`.
- In normal case scenarios, this will work flawlessly since most date fields might not be set_only_once.
- But in Subscription, the date field is set to `set_only_once` and in `after_insert`, `document.save` is called, and while doing so, `set_only_once` is checked [here](1944a547f9/frappe/model/document.py (L566)).
-This works fine if the data imported is in the correct format.
- If the date's data is not in the correct format, the framework throws an error.
- for eg `06-02-2022 00:00:00 != 06-02-2022`
- fixes [Issue/#15370](https://github.com/frappe/frappe/issues/15370)
> no-docs