Merge pull request #17187 from gavindsouza/get_singles_dict-cast
refactor!: Don't cast values of frappe.db.get_singles_dict by default
This commit is contained in:
commit
6d5aa88e66
3 changed files with 22 additions and 15 deletions
|
|
@ -2221,14 +2221,14 @@ def safe_eval(code, eval_globals=None, eval_locals=None):
|
|||
|
||||
def get_website_settings(key):
|
||||
if not hasattr(local, "website_settings"):
|
||||
local.website_settings = db.get_singles_dict("Website Settings")
|
||||
local.website_settings = db.get_singles_dict("Website Settings", cast=True)
|
||||
|
||||
return local.website_settings[key]
|
||||
|
||||
|
||||
def get_system_settings(key):
|
||||
if not hasattr(local, "system_settings"):
|
||||
local.system_settings = db.get_singles_dict("System Settings")
|
||||
local.system_settings = db.get_singles_dict("System Settings", cast=True)
|
||||
|
||||
return local.system_settings[key]
|
||||
|
||||
|
|
|
|||
|
|
@ -22,7 +22,8 @@ from frappe.exceptions import DoesNotExistError
|
|||
from frappe.model.utils.link_count import flush_local_link_count
|
||||
from frappe.query_builder.functions import Count
|
||||
from frappe.query_builder.utils import DocType
|
||||
from frappe.utils import cast, get_datetime, get_table_name, getdate, now, sbool
|
||||
from frappe.utils import cast as cast_fieldtype
|
||||
from frappe.utils import get_datetime, get_table_name, getdate, now, sbool
|
||||
|
||||
IFNULL_PATTERN = re.compile(r"ifnull\(", flags=re.IGNORECASE)
|
||||
INDEX_PATTERN = re.compile(r"\s*\([^)]+\)\s*")
|
||||
|
|
@ -619,23 +620,19 @@ class Database(object):
|
|||
else:
|
||||
return r and [[i[1] for i in r]] or []
|
||||
|
||||
def get_singles_dict(self, doctype, debug=False, *, for_update=False):
|
||||
def get_singles_dict(self, doctype, debug=False, *, for_update=False, cast=False):
|
||||
"""Get Single DocType as dict.
|
||||
|
||||
:param doctype: DocType of the single object whose value is requested
|
||||
:param debug: Execute query in debug mode - print to STDOUT
|
||||
:param for_update: Take `FOR UPDATE` lock on the records
|
||||
:param cast: Cast values to Python data types based on field type
|
||||
|
||||
Example:
|
||||
|
||||
# Get coulmn and value of the single doctype Accounts Settings
|
||||
account_settings = frappe.db.get_singles_dict("Accounts Settings")
|
||||
"""
|
||||
return_value = frappe._dict()
|
||||
|
||||
try:
|
||||
meta = frappe.get_meta(doctype)
|
||||
except DoesNotExistError:
|
||||
return return_value
|
||||
|
||||
queried_result = self.query.get_sql(
|
||||
"Singles",
|
||||
filters={"doctype": doctype},
|
||||
|
|
@ -643,9 +640,19 @@ class Database(object):
|
|||
for_update=for_update,
|
||||
).run(debug=debug)
|
||||
|
||||
if not cast:
|
||||
return frappe._dict(queried_result)
|
||||
|
||||
try:
|
||||
meta = frappe.get_meta(doctype)
|
||||
except DoesNotExistError:
|
||||
return frappe._dict(queried_result)
|
||||
|
||||
return_value = frappe._dict()
|
||||
|
||||
for fieldname, value in queried_result:
|
||||
if df := meta.get_field(fieldname):
|
||||
casted_value = cast(df.fieldtype, value)
|
||||
casted_value = cast_fieldtype(df.fieldtype, value)
|
||||
else:
|
||||
casted_value = value
|
||||
return_value[fieldname] = casted_value
|
||||
|
|
@ -713,7 +720,7 @@ class Database(object):
|
|||
_("Invalid field name: {0}").format(frappe.bold(fieldname)), self.InvalidColumnName
|
||||
)
|
||||
|
||||
val = cast(df.fieldtype, val)
|
||||
val = cast_fieldtype(df.fieldtype, val)
|
||||
|
||||
self.value_cache[doctype][fieldname] = val
|
||||
|
||||
|
|
|
|||
|
|
@ -259,13 +259,13 @@ def upload_system_backup_to_google_drive():
|
|||
|
||||
|
||||
def daily_backup():
|
||||
drive_settings = frappe.db.get_singles_dict("Google Drive")
|
||||
drive_settings = frappe.db.get_singles_dict("Google Drive", cast=True)
|
||||
if drive_settings.enable and drive_settings.frequency == "Daily":
|
||||
upload_system_backup_to_google_drive()
|
||||
|
||||
|
||||
def weekly_backup():
|
||||
drive_settings = frappe.db.get_singles_dict("Google Drive")
|
||||
drive_settings = frappe.db.get_singles_dict("Google Drive", cast=True)
|
||||
if drive_settings.enable and drive_settings.frequency == "Weekly":
|
||||
upload_system_backup_to_google_drive()
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue