-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathutils.py
53 lines (36 loc) · 1.64 KB
/
utils.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
import datetime
import sys
def get_utc_datetime():
""" Get the current UTC time """
return datetime.datetime.utcnow().replace(tzinfo=datetime.timezone.utc)
def to_utc_datetime(date: datetime.datetime):
""" Sets a datetime's timezone to UTC """
if date.tzinfo is None:
# If there is no timezone, assume this is UTC
date = date.replace(tzinfo=datetime.timezone.utc)
return date.astimezone(datetime.timezone.utc)
def remove_timezome(date: datetime.datetime) -> datetime.datetime:
""" Remove timezone from a datetime """
return date.replace(tzinfo=None)
def datetime_to_iso_string(date: datetime.datetime) -> str:
""" Convert a datetime to an ISO 8601 string that is safe to pass to JavaScript """
return date.isoformat()
def iso_string_to_datetime(string: str) -> datetime.datetime:
""" Convert an ISO string (passed from a JavaScript client) to a datetime """
return to_utc_datetime(datetime.datetime.strptime(string, "%Y-%m-%dT%H:%M:%S.%f%z"))
def __serialize_value(value):
if type(value) == datetime.datetime:
return datetime_to_iso_string(value)
elif type(value) == list:
return [__serialize_value(i) for i in value]
else:
return value
def serialize_dict(_dict: dict) -> dict:
""" A function to support generic dict serialization for dynamic DTOs """
for key in _dict:
value = _dict[key]
_dict[key] = __serialize_value(value)
return _dict
def is_packaged() -> bool:
""" Identify whether we are running in a bundled package by PyInstaller """
return hasattr(sys, 'frozen') and getattr(sys, 'frozen') and hasattr(sys, '_MEIPASS')