From 5ee23d46c04bed4cb5292cba2fecb4286c88f5d8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Rapha=C3=ABl=20Vinot?= Date: Fri, 30 Sep 2016 16:06:41 +0200 Subject: [PATCH] Make sure all integers are string in the dumped json --- pymisp/data/schema-lax.json | 2 +- pymisp/data/schema.json | 38 ++++++++++++++++++------------------- pymisp/mispevent.py | 14 +++++++++++++- 3 files changed, 33 insertions(+), 21 deletions(-) diff --git a/pymisp/data/schema-lax.json b/pymisp/data/schema-lax.json index 09bc780..f21ac64 100644 --- a/pymisp/data/schema-lax.json +++ b/pymisp/data/schema-lax.json @@ -225,7 +225,7 @@ }, "Event": { "id": "https://www.github.com/MISP/MISP/format/2.4/schema.json/Event/RelatedEvent/0/Event", - "type": "object", + "type": "array", "items": { "id": "https://www.github.com/MISP/MISP/format/2.4/schema.json/Event/RelatedEvent/0/Event/0", "type": "object", diff --git a/pymisp/data/schema.json b/pymisp/data/schema.json index 4560498..d7cb964 100644 --- a/pymisp/data/schema.json +++ b/pymisp/data/schema.json @@ -9,15 +9,15 @@ "properties": { "id": { "id": "https://www.github.com/MISP/MISP/format/2.4/schema.json/Event/id", - "type": "integer" + "type": "string" }, "orgc_id": { "id": "https://www.github.com/MISP/MISP/format/2.4/schema.json/Event/orgc_id", - "type": "integer" + "type": "string" }, "org_id": { "id": "https://www.github.com/MISP/MISP/format/2.4/schema.json/Event/org_id", - "type": "integer" + "type": "string" }, "date": { "id": "https://www.github.com/MISP/MISP/format/2.4/schema.json/Event/date", @@ -25,7 +25,7 @@ }, "threat_level_id": { "id": "https://www.github.com/MISP/MISP/format/2.4/schema.json/Event/threat_level_id", - "type": "integer" + "type": "string" }, "info": { "id": "https://www.github.com/MISP/MISP/format/2.4/schema.json/Event/info", @@ -41,19 +41,19 @@ }, "attribute_count": { "id": "https://www.github.com/MISP/MISP/format/2.4/schema.json/Event/attribute_count", - "type": "integer" + "type": "string" }, "analysis": { "id": "https://www.github.com/MISP/MISP/format/2.4/schema.json/Event/analysis", - "type": "integer" + "type": "string" }, "timestamp": { "id": "https://www.github.com/MISP/MISP/format/2.4/schema.json/Event/timestamp", - "type": "integer" + "type": "string" }, "distribution": { "id": "https://www.github.com/MISP/MISP/format/2.4/schema.json/Event/distribution", - "type": "integer" + "type": "string" }, "proposal_email_lock": { "id": "https://www.github.com/MISP/MISP/format/2.4/schema.json/Event/proposal_email_lock", @@ -65,11 +65,11 @@ }, "publish_timestamp": { "id": "https://www.github.com/MISP/MISP/format/2.4/schema.json/Event/publish_timestamp", - "type": "integer" + "type": "string" }, "sharing_group_id": { "id": "https://www.github.com/MISP/MISP/format/2.4/schema.json/Event/sharing_group_id", - "type": "integer" + "type": "string" }, "Org": { "id": "https://www.github.com/MISP/MISP/format/2.4/schema.json/Event/Org", @@ -136,15 +136,15 @@ }, "event_id": { "id": "https://www.github.com/MISP/MISP/format/2.4/schema.json/Event/Attribute/17/event_id", - "type": "integer" + "type": "string" }, "distribution": { "id": "https://www.github.com/MISP/MISP/format/2.4/schema.json/Event/Attribute/17/distribution", - "type": "integer" + "type": "string" }, "timestamp": { "id": "https://www.github.com/MISP/MISP/format/2.4/schema.json/Event/Attribute/17/timestamp", - "type": "integer" + "type": "string" }, "comment": { "id": "https://www.github.com/MISP/MISP/format/2.4/schema.json/Event/Attribute/17/comment", @@ -152,7 +152,7 @@ }, "sharing_group_id": { "id": "https://www.github.com/MISP/MISP/format/2.4/schema.json/Event/Attribute/17/sharing_group_id", - "type": "integer" + "type": "string" }, "value": { "id": "https://www.github.com/MISP/MISP/format/2.4/schema.json/Event/Attribute/17/value", @@ -225,7 +225,7 @@ }, "Event": { "id": "https://www.github.com/MISP/MISP/format/2.4/schema.json/Event/RelatedEvent/0/Event", - "type": "object", + "type": "array", "items": { "id": "https://www.github.com/MISP/MISP/format/2.4/schema.json/Event/RelatedEvent/0/Event/0", "type": "object", @@ -240,7 +240,7 @@ }, "threat_level_id": { "id": "https://www.github.com/MISP/MISP/format/2.4/schema.json/Event/RelatedEvent/0/Event/0/threat_level_id", - "type": "integer" + "type": "string" }, "info": { "id": "https://www.github.com/MISP/MISP/format/2.4/schema.json/Event/RelatedEvent/0/Event/0/info", @@ -260,7 +260,7 @@ }, "timestamp": { "id": "https://www.github.com/MISP/MISP/format/2.4/schema.json/Event/RelatedEvent/0/Event/0/timestamp", - "type": "integer" + "type": "string" }, "distribution": { "id": "https://www.github.com/MISP/MISP/format/2.4/schema.json/Event/RelatedEvent/0/Event/0/distribution", @@ -268,11 +268,11 @@ }, "org_id": { "id": "https://www.github.com/MISP/MISP/format/2.4/schema.json/Event/RelatedEvent/0/Event/0/org_id", - "type": "integer" + "type": "string" }, "orgc_id": { "id": "https://www.github.com/MISP/MISP/format/2.4/schema.json/Event/RelatedEvent/0/Event/0/orgc_id", - "type": "integer" + "type": "string" } } }, diff --git a/pymisp/mispevent.py b/pymisp/mispevent.py index 4812ac0..1320113 100644 --- a/pymisp/mispevent.py +++ b/pymisp/mispevent.py @@ -114,6 +114,7 @@ class MISPAttribute(object): 'comment': self.comment} if self.sharing_group_id: to_return['sharing_group_id'] = self.sharing_group_id + to_return = _int_to_str(to_return) return to_return def _json_full(self): @@ -130,6 +131,7 @@ class MISPAttribute(object): to_return['ShadowAttribute'] = self.ShadowAttribute if self.SharingGroup: to_return['SharingGroup'] = self.SharingGroup + to_return = _int_to_str(to_return) return to_return @@ -149,6 +151,14 @@ class EncodeFull(JSONEncoder): return JSONEncoder.default(self, obj) +def _int_to_str(d): + # transform all integer back to string + for k, v in d.items(): + if isinstance(v, int) and not isinstance(v, bool): + d[k] = str(v) + return d + + class MISPEvent(object): def __init__(self, describe_types=None): @@ -300,6 +310,7 @@ class MISPEvent(object): to_return['Event']['sharing_group_id'] = self.sharing_group_id if self.Tag: to_return['Event']['Tag'] = self.Tag + to_return['Event'] = _int_to_str(to_return['Event']) to_return['Event']['Attribute'] = [a._json() for a in self.attributes] jsonschema.validate(to_return, self.json_schema) return to_return @@ -308,7 +319,7 @@ class MISPEvent(object): to_return = self._json() if self.locked is not None: to_return['Event']['locked'] = self.locked - if self.attribute_count: + if self.attribute_count is not None: to_return['Event']['attribute_count'] = self.attribute_count if self.RelatedEvent: to_return['Event']['RelatedEvent'] = self.RelatedEvent @@ -326,6 +337,7 @@ class MISPEvent(object): to_return['Event']['publish_timestamp'] = int(time.mktime(self.publish_timestamp.timetuple())) if self.timestamp: to_return['Event']['timestamp'] = int(time.mktime(self.timestamp.timetuple())) + to_return['Event'] = _int_to_str(to_return['Event']) to_return['Event']['Attribute'] = [a._json_full() for a in self.attributes] jsonschema.validate(to_return, self.json_schema) return to_return