Skip to content

Instantly share code, notes, and snippets.

@ankona
Last active August 29, 2015 14:23
Show Gist options
  • Save ankona/f800fdb6ae3390a0a06b to your computer and use it in GitHub Desktop.
Save ankona/f800fdb6ae3390a0a06b to your computer and use it in GitHub Desktop.
update TimelineEvent sequence_number for values imported incorrectly from Stream57
opaque_id = 'f6d43db7-d33f-409a-a791-f37a8a004b09'
offset = 0
from pprint import pprint
from datetime import datetime
from models import DBSession, SlideAnnotationEventArgs
from google.appengine.ext import ndb
class TimelineEvent(ndb.Expando):
_default_indexed = False
event_id = ndb.ComputedProperty(lambda self: str(self.key.id()))
opaque_id = ndb.StringProperty()
timeline_version = ndb.IntegerProperty() # Added by JSD for editor load/save consistency.
sequence_number = ndb.IntegerProperty(required=True)
track = ndb.StringProperty()
event_type = ndb.StringProperty(required=True)
start = ndb.DateTimeProperty(auto_now_add=True)
end = ndb.DateTimeProperty()
drawing_args = ndb.StructuredProperty(SlideAnnotationEventArgs)
#tles = TimelineEvent.query(TimelineEvent.opaque_id == opaque_id).fetch(2000)
tles = TimelineEvent.query(TimelineEvent.opaque_id == opaque_id).filter(TimelineEvent.sequence_number < 1000000000000).order(TimelineEvent.sequence_number).fetch(200, offset=offset)
epoch = datetime.utcfromtimestamp(0)
edit_counter = 0
leave_counter = 0
for tle in tles:
try:
new_seq_num = int((tle.start - epoch).total_seconds() * 1000)
if tle.sequence_number != new_seq_num and abs(tle.sequence_number - new_seq_num) > 100:
edit_counter+=1
pprint("edit item {0} - {1} - {2} - {3} - {4} - {5}".format(tle.event_id, tle.sequence_number, new_seq_num, tle.start, tle.event_type, tle.sequence_number == new_seq_num))
tle.sequence_number = new_seq_num
pprint("new sequence_number {0} - {1}".format(tle.event_id, tle.sequence_number))
#tle.put()
else:
leave_counter+=1
except Exception as e:
pprint(e)
print "edited {0} items and left {1} items alone.".format(edit_counter, leave_counter)
@hello-josh
Copy link

from models import TimelineEvent, SlideAnnotationEventArgs
from google.appengine.ext import ndb

TimelineEvent.drawing_args = SlideAnnotationEventArgs

t = ndb.Key(TimelineEvent, 'f950e164-6bbc-4b49-8c06-4e5454b2d103').get()

print t.drawing_args._properties
# {'deck_id': StringProperty('deck_id'), 'slide_number': IntegerProperty('slide_number'), 'drawing': TextProperty('drawing')}

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment