fix: Consistent return types in cast_fieldtype
Note: BREAKING CHANGE
This commit is contained in:
parent
623998c787
commit
cb034e4c52
2 changed files with 18 additions and 5 deletions
|
|
@ -557,10 +557,7 @@ class Database(object):
|
|||
if not df:
|
||||
frappe.throw(_('Invalid field name: {0}').format(frappe.bold(fieldname)), self.InvalidColumnName)
|
||||
|
||||
# cast only if value is "set" or is truthy?
|
||||
# cast_fieldtype returns currnt TS value for Datetime, Date fields
|
||||
if val:
|
||||
val = cast_fieldtype(df.fieldtype, val)
|
||||
val = cast_fieldtype(df.fieldtype, val)
|
||||
|
||||
self.value_cache[doctype][fieldname] = val
|
||||
|
||||
|
|
|
|||
|
|
@ -505,7 +505,17 @@ def has_common(l1, l2):
|
|||
"""Returns truthy value if there are common elements in lists l1 and l2"""
|
||||
return set(l1) & set(l2)
|
||||
|
||||
def cast_fieldtype(fieldtype, value):
|
||||
def cast_fieldtype(fieldtype, value=None):
|
||||
"""Cast the value to the Python native object of the Frappe fieldtype provided.
|
||||
If value is None, the first/lowest value of the `fieldtype` will be returned.
|
||||
|
||||
Mapping of Python types => Frappe types:
|
||||
* float => ("Currency", "Float", "Percent")
|
||||
* int => ("Int", "Check")
|
||||
* datetime.datetime => ("Datetime",)
|
||||
* datetime.date => ("Date",)
|
||||
* datetime.time => ("Time",)
|
||||
"""
|
||||
if fieldtype in ("Currency", "Float", "Percent"):
|
||||
value = flt(value)
|
||||
|
||||
|
|
@ -517,12 +527,18 @@ def cast_fieldtype(fieldtype, value):
|
|||
value = cstr(value)
|
||||
|
||||
elif fieldtype == "Date":
|
||||
if value is None:
|
||||
value = datetime.datetime(1, 1, 1).date()
|
||||
value = getdate(value)
|
||||
|
||||
elif fieldtype == "Datetime":
|
||||
if value is None:
|
||||
value = datetime.datetime(1, 1, 1)
|
||||
value = get_datetime(value)
|
||||
|
||||
elif fieldtype == "Time":
|
||||
if value is None:
|
||||
value = "0:0:0"
|
||||
value = to_timedelta(value)
|
||||
|
||||
return value
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue