-
-
Notifications
You must be signed in to change notification settings - Fork 176
Closed
Description
I get an IndexError: list index out of range when I write this kind of script
when decoding a JSON pickled object using
unpickled = jsonpickle.decode(pickled)
I don't know if problem is on my side or on your side...
import datetime
import time
from collections import OrderedDict
import jsonpickle
class TimestampedVariable(object):
def __init__(self, value=None):
self._value = value
self._dt_read = datetime.datetime.utcnow()
self._dt_write = self._dt_read
def get(self, default_value=None):
if self._dt_read == None and self._dt_write == None:
value = default_value
self._value = value
self._dt_write = datetime.datetime.utcnow()
else:
value = self._value
self._dt_read = datetime.datetime.utcnow()
return(value)
def set(self, new_value):
self._dt_write = datetime.datetime.utcnow()
self._value = new_value
def __repr__(self):
dt_now = datetime.datetime.utcnow()
td_read = dt_now - self._dt_read
td_write = dt_now - self._dt_write
s = '<TimestampedVariable>\n'
s += ' value: ' + str(self._value) + '\n'
s += ' dt_read : ' + str(self._dt_read) + ' (%s ago)' % td_read + '\n'
s += ' dt_write: ' + str(self._dt_write) + ' (%s ago)' % td_write + '\n'
return(s)
def erasable(self, td=datetime.timedelta(seconds=1)):
dt_now = datetime.datetime.utcnow()
td_read = dt_now - self._dt_read
td_write = dt_now - self._dt_write
return( ( td_read > td ) and ( td_write > td ) )
class PersistantVariables(object):
def __init__(self):
self._data = dict() #OrderedDict()
def __getitem__(self, key):
if key not in self._data:
self._data[key] = TimestampedVariable(None)
return self._data[key]
def __setitem__(self, key, value):
if key not in self._data:
self._data[key] = TimestampedVariable(value)
return self._data[key]
def __repr__(self):
return(str(self._data))
pvars = PersistantVariables()
print(pvars['var1'])
#print(pvars['var2']['var2b'])
time.sleep(2)
print(pvars._data)
time.sleep(2)
print(pvars['var2.var2b'])
print(pvars._data)
#pvars['z'] = 2
#pvars['z2']['z3'] = 3
#print(pvars.sorts)
pickled = jsonpickle.encode(pvars)
print(pickled)
unpickled = jsonpickle.decode(pickled)
This code returns this error
IndexError Traceback (most recent call last)
<ipython-input-1-b30e13247ae1> in <module>()
85 pickled = jsonpickle.encode(pvars)
86 print(pickled)
---> 87 unpickled = jsonpickle.decode(pickled)
/Library/Frameworks/EPD64.framework/Versions/7.3/lib/python2.7/site-packages/jsonpickle/__init__.py in decode(string)
323 """
324 j = Unpickler()
--> 325 return j.restore(json.decode(string))
/Library/Frameworks/EPD64.framework/Versions/7.3/lib/python2.7/site-packages/jsonpickle/unpickler.py in restore(self, obj)
118 self._namestack.append(k)
119 # step into the namespace
--> 120 value = self.restore(v)
121 if (util.is_noncomplex(instance) or
122 util.is_dictionary_subclass(instance)):
/Library/Frameworks/EPD64.framework/Versions/7.3/lib/python2.7/site-packages/jsonpickle/unpickler.py in restore(self, obj)
151 for k, v in sorted(obj.iteritems(), key=operator.itemgetter(0)):
152 self._namestack.append(k)
--> 153 data[k] = self.restore(v)
154 self._namestack.pop()
155 return self._pop(data)
/Library/Frameworks/EPD64.framework/Versions/7.3/lib/python2.7/site-packages/jsonpickle/unpickler.py in restore(self, obj)
118 self._namestack.append(k)
119 # step into the namespace
--> 120 value = self.restore(v)
121 if (util.is_noncomplex(instance) or
122 util.is_dictionary_subclass(instance)):
/Library/Frameworks/EPD64.framework/Versions/7.3/lib/python2.7/site-packages/jsonpickle/unpickler.py in restore(self, obj)
64
65 if has_tag(obj, tags.ID):
---> 66 return self._pop(self._objs[obj[tags.ID]])
67
68 if has_tag(obj, tags.REF):
IndexError: list index out of range
Metadata
Metadata
Assignees
Labels
No labels