mirror of https://github.com/MISP/PyMISP
chg: Decode datetime without dateutils if possible
parent
c80d35fa75
commit
6cc7730d24
|
@ -6,6 +6,7 @@ import datetime
|
||||||
|
|
||||||
from deprecated import deprecated
|
from deprecated import deprecated
|
||||||
from json import JSONEncoder
|
from json import JSONEncoder
|
||||||
|
from uuid import UUID
|
||||||
|
|
||||||
try:
|
try:
|
||||||
from rapidjson import load
|
from rapidjson import load
|
||||||
|
@ -123,6 +124,8 @@ class MISPEncode(JSONEncoder):
|
||||||
return obj.isoformat()
|
return obj.isoformat()
|
||||||
elif isinstance(obj, Enum):
|
elif isinstance(obj, Enum):
|
||||||
return obj.value
|
return obj.value
|
||||||
|
elif isinstance(obj, UUID):
|
||||||
|
return str(obj)
|
||||||
return JSONEncoder.default(self, obj)
|
return JSONEncoder.default(self, obj)
|
||||||
|
|
||||||
|
|
||||||
|
@ -134,6 +137,8 @@ if HAS_RAPIDJSON:
|
||||||
return obj.isoformat()
|
return obj.isoformat()
|
||||||
elif isinstance(obj, Enum):
|
elif isinstance(obj, Enum):
|
||||||
return obj.value
|
return obj.value
|
||||||
|
elif isinstance(obj, UUID):
|
||||||
|
return str(obj)
|
||||||
return rapidjson.default(obj)
|
return rapidjson.default(obj)
|
||||||
else:
|
else:
|
||||||
def pymisp_json_default(obj):
|
def pymisp_json_default(obj):
|
||||||
|
@ -143,6 +148,8 @@ else:
|
||||||
return obj.isoformat()
|
return obj.isoformat()
|
||||||
elif isinstance(obj, Enum):
|
elif isinstance(obj, Enum):
|
||||||
return obj.value
|
return obj.value
|
||||||
|
elif isinstance(obj, UUID):
|
||||||
|
return str(obj)
|
||||||
return json.default(obj)
|
return json.default(obj)
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -220,7 +220,14 @@ class MISPAttribute(AbstractMISP):
|
||||||
if self.value is None:
|
if self.value is None:
|
||||||
raise NewAttributeError('The value of the attribute is required.')
|
raise NewAttributeError('The value of the attribute is required.')
|
||||||
if self.type == 'datetime' and isinstance(self.value, str):
|
if self.type == 'datetime' and isinstance(self.value, str):
|
||||||
self.value = parse(self.value)
|
try:
|
||||||
|
if '.' in self.value:
|
||||||
|
self.value = datetime.datetime.strptime(self.value, "%Y-%m-%dT%H:%M:%S.%f")
|
||||||
|
else:
|
||||||
|
self.value = datetime.datetime.strptime(self.value, "%Y-%m-%dT%H:%M:%S")
|
||||||
|
except ValueError:
|
||||||
|
# Slower, but if the other ones fail, that's a good fallback
|
||||||
|
self.value = parse(self.value)
|
||||||
|
|
||||||
# Default values
|
# Default values
|
||||||
self.category = kwargs.pop('category', type_defaults['default_category'])
|
self.category = kwargs.pop('category', type_defaults['default_category'])
|
||||||
|
|
Loading…
Reference in New Issue