forked from 0x2620/pandora
add method to recover an item from changelog
This commit is contained in:
parent
377acbb7eb
commit
4f7c7e9abe
1 changed files with 92 additions and 0 deletions
92
pandora/changelog/recover.py
Normal file
92
pandora/changelog/recover.py
Normal file
|
@ -0,0 +1,92 @@
|
|||
import models
|
||||
import item.models
|
||||
import user.models
|
||||
import archive.models
|
||||
|
||||
def recover_item(id):
|
||||
if item.models.Item.objects.filter(itemId=id).exists():
|
||||
raise Exception('id is taken')
|
||||
qs = models.Changelog.objects.filter(value__contains='id": "%s"' % id)
|
||||
if not qs.exists():
|
||||
raise Exception('id not found')
|
||||
old = qs.order_by('-created')[0]
|
||||
i = item.models.Item()
|
||||
i.itemId = id
|
||||
i.data = old.value
|
||||
created = old.value['created']
|
||||
i.user = user.models.User.objects.get(username=i.data['user'])
|
||||
for key in [
|
||||
u'rendered',
|
||||
u'random',
|
||||
u'cuts',
|
||||
u'duration',
|
||||
u'id',
|
||||
u'size',
|
||||
u'posterFrame',
|
||||
u'parts',
|
||||
u'cutsperminute',
|
||||
u'hue',
|
||||
u'numberofcuts',
|
||||
u'durations',
|
||||
u'volume',
|
||||
u'user',
|
||||
u'words',
|
||||
u'videoRatio',
|
||||
u'aspectratio',
|
||||
u'bitrate',
|
||||
u'pixels',
|
||||
u'created',
|
||||
u'numberoffiles',
|
||||
u'modified',
|
||||
u'timesaccessed',
|
||||
u'accessed',
|
||||
u'resolution',
|
||||
u'wordsperminute',
|
||||
u'posterRatio'
|
||||
]:
|
||||
if key in i.data:
|
||||
del i.data[key]
|
||||
i.save()
|
||||
i.itemId = id
|
||||
i.created = created
|
||||
i.save()
|
||||
i.update_sort()
|
||||
i.update_find()
|
||||
print 'created', i, i.id
|
||||
|
||||
for a in models.Changelog.objects.filter(value__contains='id": "%s/' % id).order_by('created'):
|
||||
qs = i.annotations.filter(public_id=a.value['id'])
|
||||
if qs.exists():
|
||||
annot = qs[0]
|
||||
else:
|
||||
annot = item.models.Annotation()
|
||||
annot.item = i
|
||||
annot.public_id = a.value['id']
|
||||
annot.created = a.value['created']
|
||||
annot.modified = a.value['modified']
|
||||
annot.user = user.models.User.objects.get(username=a.value['user'])
|
||||
annot.start = a.value['in']
|
||||
annot.end = a.value['out']
|
||||
annot.value = a.value['value']
|
||||
annot.layer = a.value.get('layer', 'transcripts')
|
||||
annot.save()
|
||||
return i
|
||||
|
||||
def recover_file(id, oshash, filename):
|
||||
i = item.models.Item.objects.get(itemId=id)
|
||||
file, created = archive.models.File.objects.get_or_create(oshash=oshash)
|
||||
if created:
|
||||
file.item = i
|
||||
file.path = filename
|
||||
file.wanted = True
|
||||
file.selected = True
|
||||
extension = file.path.split('.')
|
||||
if len(extension) > 1:
|
||||
extension = extension[-1]
|
||||
else:
|
||||
extension = 'webm'
|
||||
file.info['extension'] = extension.lower()
|
||||
file.save()
|
||||
else:
|
||||
raise Exception('file exists', oshash)
|
||||
return file
|
Loading…
Reference in a new issue