Python 2 compatibility fix in versionability detection. In

python2, Mapping.keys() returns a list instead of a set!
pull/1/head
Michael Chisholm 2020-05-28 18:08:47 -04:00
parent a05dbc42d5
commit 15e75cb4de
1 changed files with 11 additions and 1 deletions

View File

@ -1,6 +1,7 @@
import copy import copy
import datetime as dt import datetime as dt
import six
from six.moves.collections_abc import Mapping from six.moves.collections_abc import Mapping
import stix2.base import stix2.base
@ -86,9 +87,18 @@ def _is_versionable(data):
# Then, determine versionability. # Then, determine versionability.
if six.PY2:
# dumb python2 compatibility: map.keys() returns a list, not a set!
# six.viewkeys() compatibility function uses dict.viewkeys() on
# python2, which is not a Mapping mixin method, so that doesn't
# work either (for our stix2 objects).
keys = set(data)
else:
keys = data.keys()
# This should be sufficient for STIX objects; maybe we get lucky with # This should be sufficient for STIX objects; maybe we get lucky with
# dicts here but probably not. # dicts here but probably not.
if data.keys() >= _VERSIONING_PROPERTIES: if keys >= _VERSIONING_PROPERTIES:
is_versionable = True is_versionable = True
# Tougher to handle dicts. We need to consider STIX version, map to a # Tougher to handle dicts. We need to consider STIX version, map to a