Fix local_datetime filter to handle string datetime values
The filter now accepts both datetime objects and string representations. This fixes AttributeError when datetime fields are stored/returned as strings instead of datetime objects from the database. Changes: - Added string parsing logic for common datetime formats - Tries multiple format patterns (ISO, standard, with/without microseconds) - Returns original string if parsing fails (graceful degradation) - Maintains full datetime object support Fixes errors on: - /customers (autotask_last_sync_at) - /logging (created_at) - /admin/all-mail (received_at, parsed_at) Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
This commit is contained in:
parent
1cf3564751
commit
b27e8db602
@ -68,7 +68,7 @@ def create_app():
|
|||||||
"""Convert UTC datetime to UI timezone and format as string.
|
"""Convert UTC datetime to UI timezone and format as string.
|
||||||
|
|
||||||
Args:
|
Args:
|
||||||
utc_dt: datetime object in UTC (or None)
|
utc_dt: datetime object in UTC, string representation, or None
|
||||||
format: strftime format string (default: '%Y-%m-%d %H:%M:%S')
|
format: strftime format string (default: '%Y-%m-%d %H:%M:%S')
|
||||||
|
|
||||||
Returns:
|
Returns:
|
||||||
@ -79,6 +79,30 @@ def create_app():
|
|||||||
|
|
||||||
from datetime import datetime
|
from datetime import datetime
|
||||||
|
|
||||||
|
# If input is already a string, try to parse it first
|
||||||
|
if isinstance(utc_dt, str):
|
||||||
|
utc_dt = utc_dt.strip()
|
||||||
|
if not utc_dt:
|
||||||
|
return ""
|
||||||
|
try:
|
||||||
|
# Try common datetime formats
|
||||||
|
for fmt in [
|
||||||
|
"%Y-%m-%d %H:%M:%S.%f", # With microseconds
|
||||||
|
"%Y-%m-%d %H:%M:%S", # Without microseconds
|
||||||
|
"%Y-%m-%dT%H:%M:%S.%fZ", # ISO format with Z
|
||||||
|
"%Y-%m-%dT%H:%M:%S", # ISO format without Z
|
||||||
|
]:
|
||||||
|
try:
|
||||||
|
utc_dt = datetime.strptime(utc_dt, fmt)
|
||||||
|
break
|
||||||
|
except ValueError:
|
||||||
|
continue
|
||||||
|
else:
|
||||||
|
# If parsing failed, return original string
|
||||||
|
return str(utc_dt)
|
||||||
|
except Exception:
|
||||||
|
return str(utc_dt)
|
||||||
|
|
||||||
try:
|
try:
|
||||||
from zoneinfo import ZoneInfo
|
from zoneinfo import ZoneInfo
|
||||||
except ImportError:
|
except ImportError:
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user