forked from 0x2620/pandora
add space and other flake8 cleanups
This commit is contained in:
parent
f21e8413fb
commit
225259e521
1 changed files with 51 additions and 59 deletions
|
@ -54,7 +54,7 @@ def get_id(info):
|
|||
for value in info[key]:
|
||||
q = q.filter(**{k: key, v: value})
|
||||
else:
|
||||
q = q.filter(**{k:key, v:info[key]})
|
||||
q = q.filter(**{k: key, v: info[key]})
|
||||
if q.count() == 1:
|
||||
return q[0].public_id
|
||||
if settings.DATA_SERVICE:
|
||||
|
@ -77,12 +77,10 @@ def get_item(info, user=None, async=False):
|
|||
|
||||
if filter(lambda k: k['id'] == 'year', settings.CONFIG['itemKeys']):
|
||||
item_data['year'] = info.get('year', '') or ''
|
||||
|
||||
#add additional item metadata parsed from path
|
||||
for key in [i for i in info
|
||||
if i in set([k['id'] for k in settings.CONFIG['itemKeys']]) \
|
||||
and i not in ('language', ) \
|
||||
and i not in item_data]:
|
||||
|
||||
# add additional item metadata parsed from path
|
||||
for key in [i for i in info if i in set([k['id'] for k in settings.CONFIG['itemKeys']])
|
||||
and i not in ('language', ) and i not in item_data]:
|
||||
item_data[key] = info[key]
|
||||
|
||||
for key in ('episodeTitle', 'episodeDirector', 'episodeYear',
|
||||
|
@ -195,9 +193,9 @@ class Item(models.Model):
|
|||
return self.external_data[key]
|
||||
item_key = utils.get_by_id(settings.CONFIG['itemKeys'], key)
|
||||
if item_key and 'value' in item_key \
|
||||
and isinstance(item_key['value'], dict) \
|
||||
and item_key['value'].get('type') == 'map' \
|
||||
and self.get(item_key['value']['key']):
|
||||
and isinstance(item_key['value'], dict) \
|
||||
and item_key['value'].get('type') == 'map' \
|
||||
and self.get(item_key['value']['key']):
|
||||
value = re.compile(item_key['value']['map']).findall(self.get(item_key['value']['key']))
|
||||
return value[0] if value else default
|
||||
return default
|
||||
|
@ -220,7 +218,7 @@ class Item(models.Model):
|
|||
def editable(self, user):
|
||||
if user.is_anonymous():
|
||||
return False
|
||||
if user.profile.capability('canEditMetadata') == True or \
|
||||
if user.profile.capability('canEditMetadata') or \
|
||||
user.is_staff or \
|
||||
self.user == user or \
|
||||
self.groups.filter(id__in=user.groups.all()).count() > 0:
|
||||
|
@ -263,7 +261,7 @@ class Item(models.Model):
|
|||
d.description = ox.sanitize_html(description)
|
||||
d.save()
|
||||
for key in data:
|
||||
if data[key] == None:
|
||||
if data[key] is None:
|
||||
if key in self.data:
|
||||
del self.data[key]
|
||||
else:
|
||||
|
@ -316,16 +314,16 @@ class Item(models.Model):
|
|||
for t in c.keys():
|
||||
if c[t]:
|
||||
if isinstance(c[t][0], basestring):
|
||||
c[t]= [{'id': i, 'title': None} for i in c[t]]
|
||||
c[t] = [{'id': i, 'title': None} for i in c[t]]
|
||||
ids = [i['id'] for i in c[t]]
|
||||
known = {}
|
||||
known = {}
|
||||
for l in Item.objects.filter(public_id__in=ids):
|
||||
known[l.public_id] = l.get('title')
|
||||
for i in c[t]:
|
||||
if i['id'] in known:
|
||||
i['item'] = i['id']
|
||||
i['title'] = known[i['id']]
|
||||
c[t]= filter(lambda x: x['title'], c[t])
|
||||
c[t] = filter(lambda x: x['title'], c[t])
|
||||
if not c[t]:
|
||||
del c[t]
|
||||
return c
|
||||
|
@ -336,7 +334,7 @@ class Item(models.Model):
|
|||
string = u'%s (%s)' % (ox.decode_html(self.get('title', 'Untitled')), self.get('year'))
|
||||
else:
|
||||
string = self.get('title', u'Untitled')
|
||||
return u'[%s] %s' % (self.public_id,string)
|
||||
return u'[%s] %s' % (self.public_id, string)
|
||||
|
||||
def get_absolute_url(self):
|
||||
return '/%s' % self.public_id
|
||||
|
@ -508,7 +506,7 @@ class Item(models.Model):
|
|||
'width': 640,
|
||||
'height': 1024,
|
||||
'source': settings.URL,
|
||||
'selected': url == None,
|
||||
'selected': url is None,
|
||||
'index': index.index(settings.URL)
|
||||
})
|
||||
|
||||
|
@ -535,7 +533,7 @@ class Item(models.Model):
|
|||
'index': p,
|
||||
'position': f['position'],
|
||||
'selected': p == pos,
|
||||
'url': '/%s/posterframe%d.jpg' %(self.public_id, p),
|
||||
'url': '/%s/posterframe%d.jpg' % (self.public_id, p),
|
||||
'height': f['height'],
|
||||
'width': f['width']
|
||||
})
|
||||
|
@ -592,7 +590,6 @@ class Item(models.Model):
|
|||
if not keys or 'posterRatio' in keys:
|
||||
i['posterRatio'] = self.poster_width / self.poster_height
|
||||
|
||||
|
||||
streams = self.streams()
|
||||
i['durations'] = [s.duration for s in streams]
|
||||
i['duration'] = sum(i['durations'])
|
||||
|
@ -608,7 +605,7 @@ class Item(models.Model):
|
|||
del i['videoRatio']
|
||||
else:
|
||||
i['duration'] = self.files.filter(
|
||||
Q(selected=True)|Q(wanted=True)
|
||||
Q(selected=True) | Q(wanted=True)
|
||||
).aggregate(Sum('duration'))['duration__sum']
|
||||
videos = self.files.filter(selected=True, is_video=True)
|
||||
if i['duration'] and videos.count():
|
||||
|
@ -635,27 +632,26 @@ class Item(models.Model):
|
|||
i['posterFrame'] = self.poster_frame
|
||||
|
||||
dkeys = [k['id'] for k in
|
||||
filter(lambda i: i.get('description'), settings.CONFIG['itemKeys'])]
|
||||
filter(lambda i: i.get('description'), settings.CONFIG['itemKeys'])]
|
||||
if keys:
|
||||
dkeys = filter(lambda k: k in keys, dkeys)
|
||||
for key in dkeys:
|
||||
k = filter(lambda i: i['id'] == key, settings.CONFIG['itemKeys'])
|
||||
if isinstance((k and k[0].get('type') or ''), list):
|
||||
i['%sdescription'%key] = {}
|
||||
i['%sdescription' % key] = {}
|
||||
if key == 'name':
|
||||
values = []
|
||||
for ikey in filter(lambda i: i.get('sortType') == 'person',
|
||||
settings.CONFIG['itemKeys']):
|
||||
for ikey in filter(lambda i: i.get('sortType') == 'person', settings.CONFIG['itemKeys']):
|
||||
values += i.get(ikey['id'], [])
|
||||
values = list(set(values))
|
||||
else:
|
||||
values = self.get(key)
|
||||
if values:
|
||||
for d in Description.objects.filter(key=key, value__in=values):
|
||||
i['%sdescription'%key][d.value] = d.description
|
||||
i['%sdescription' % key][d.value] = d.description
|
||||
else:
|
||||
qs = Description.objects.filter(key=key, value=self.get(key, ''))
|
||||
i['%sdescription'%key] = '' if qs.count() == 0 else qs[0].description
|
||||
i['%sdescription' % key] = '' if qs.count() == 0 else qs[0].description
|
||||
if keys:
|
||||
info = {}
|
||||
for key in keys:
|
||||
|
@ -766,7 +762,6 @@ class Item(models.Model):
|
|||
titles += [a[0] for a in at]
|
||||
return titles
|
||||
|
||||
|
||||
with transaction.atomic():
|
||||
for key in settings.CONFIG['itemKeys']:
|
||||
i = key['id']
|
||||
|
@ -818,7 +813,7 @@ class Item(models.Model):
|
|||
isSeries = self.get('series',
|
||||
self.get('episodeTitle',
|
||||
self.get('episode',
|
||||
self.get('seriesTitle')))) != None
|
||||
self.get('seriesTitle')))) is not None
|
||||
save('series', isSeries)
|
||||
|
||||
def update_sort(self):
|
||||
|
@ -901,7 +896,7 @@ class Item(models.Model):
|
|||
s.clips = self.clips.count()
|
||||
|
||||
s.numberoffiles = self.files.all().count()
|
||||
videos = self.files.filter(selected=True).filter(Q(is_video=True)|Q(is_audio=True))
|
||||
videos = self.files.filter(selected=True).filter(Q(is_video=True) | Q(is_audio=True))
|
||||
if videos.count() > 0:
|
||||
#s.duration = sum([v.duration for v in videos])
|
||||
s.duration = sum([v.duration for v in self.streams()])
|
||||
|
@ -1051,7 +1046,7 @@ class Item(models.Model):
|
|||
def update_layer_facet(self, key):
|
||||
from entity.models import Entity
|
||||
current_values = [a['value']
|
||||
for a in self.annotations.filter(layer=key).distinct().values('value')]
|
||||
for a in self.annotations.filter(layer=key).distinct().values('value')]
|
||||
layer = utils.get_by_id(settings.CONFIG['layers'], key)
|
||||
if layer.get('type') == 'entity':
|
||||
current_values = [a['name']
|
||||
|
@ -1067,7 +1062,7 @@ class Item(models.Model):
|
|||
if removed_values:
|
||||
q = Q()
|
||||
for v in removed_values:
|
||||
q |=Q(value__iexact=v)
|
||||
q |= Q(value__iexact=v)
|
||||
Facet.objects.filter(item=self, key=key).filter(q).delete()
|
||||
|
||||
for value in current_values:
|
||||
|
@ -1112,7 +1107,7 @@ class Item(models.Model):
|
|||
else:
|
||||
height = min(height, stream.resolution)
|
||||
path = os.path.join(settings.MEDIA_ROOT, stream.path(),
|
||||
'frames', "%dp"%height, "%s.jpg"%position)
|
||||
'frames', "%dp" % height, "%s.jpg" % position)
|
||||
if not os.path.exists(path) and stream.media:
|
||||
extract.frame(stream.media.path, path, position, height, info=stream.info)
|
||||
if not os.path.exists(path):
|
||||
|
@ -1174,7 +1169,7 @@ class Item(models.Model):
|
|||
def update_selected(self, update_timeline=True):
|
||||
sets = self.sets()
|
||||
for s in sets:
|
||||
if s.filter(Q(is_video=True)|Q(is_audio=True)).filter(available=False).count() == 0:
|
||||
if s.filter(Q(is_video=True) | Q(is_audio=True)).filter(available=False).count() == 0:
|
||||
update = False
|
||||
self.files.exclude(id__in=s).exclude(part=None).update(part=None)
|
||||
deselect = self.files.filter(selected=True).exclude(id__in=s)
|
||||
|
@ -1199,14 +1194,14 @@ class Item(models.Model):
|
|||
if self.torrent:
|
||||
self.torrent.seek(0)
|
||||
data = ox.torrent.bdecode(self.torrent.read())
|
||||
url = request.build_absolute_uri("%s/torrent/"%self.get_absolute_url())
|
||||
url = request.build_absolute_uri("%s/torrent/" % self.get_absolute_url())
|
||||
if url.startswith('https://'):
|
||||
url = 'http' + url[5:]
|
||||
data['url-list'] = ['%s%s' % (url, u.split('torrent/')[1]) for u in data['url-list']]
|
||||
return ox.torrent.bencode(data)
|
||||
|
||||
def make_torrent(self):
|
||||
if settings.CONFIG['video'].get('torrent') == False:
|
||||
if not settings.CONFIG['video'].get('torrent'):
|
||||
return
|
||||
streams = self.streams()
|
||||
if streams.count() == 0:
|
||||
|
@ -1228,7 +1223,7 @@ class Item(models.Model):
|
|||
v = streams[0]
|
||||
media_path = v.media.path
|
||||
extension = media_path.split('.')[-1]
|
||||
url = "%s/torrent/%s.%s" % (self.get_absolute_url(),
|
||||
url = "%s/torrent/%s.%s" % (self.get_absolute_url(),
|
||||
quote(filename.encode('utf-8')),
|
||||
extension)
|
||||
video = "%s.%s" % (base, extension)
|
||||
|
@ -1241,7 +1236,7 @@ class Item(models.Model):
|
|||
size = v.media.size
|
||||
duration = v.duration
|
||||
else:
|
||||
url = "%s/torrent/" % self.get_absolute_url()
|
||||
url = "%s/torrent/" % self.get_absolute_url()
|
||||
part = 1
|
||||
ox.makedirs(base)
|
||||
for v in streams:
|
||||
|
@ -1280,14 +1275,16 @@ class Item(models.Model):
|
|||
self.save()
|
||||
|
||||
def audio_tracks(self):
|
||||
tracks = [f['language'] for f in self.files.filter(selected=True).filter(Q(is_video=True)|Q(is_audio=True)).values('language') if f['language']]
|
||||
tracks = [f['language']
|
||||
for f in self.files.filter(selected=True).filter(Q(is_video=True) | Q(is_audio=True)).values('language')
|
||||
if f['language']]
|
||||
return sorted(set(tracks))
|
||||
|
||||
def streams(self, track=None):
|
||||
qs = archive.models.Stream.objects.filter(
|
||||
source=None, available=True, file__item=self, file__selected=True
|
||||
).filter(
|
||||
Q(file__is_audio=True)|Q(file__is_video=True)
|
||||
Q(file__is_audio=True) | Q(file__is_video=True)
|
||||
)
|
||||
if not track:
|
||||
tracks = self.audio_tracks()
|
||||
|
@ -1316,7 +1313,7 @@ class Item(models.Model):
|
|||
n = streams.count()
|
||||
for s in streams:
|
||||
self.data['volume'] += s.volume * s.duration
|
||||
color = map(lambda a,b: (a+b)/n, color, ox.image.getRGB(s.color or [0.0] * 3))
|
||||
color = map(lambda a, b: (a+b)/n, color, ox.image.getRGB(s.color or [0.0] * 3))
|
||||
offset += s.duration
|
||||
self.data['hue'], self.data['saturation'], self.data['lightness'] = ox.image.getHSL(color)
|
||||
if offset:
|
||||
|
@ -1376,7 +1373,7 @@ class Item(models.Model):
|
|||
os.unlink(f)
|
||||
|
||||
def make_poster(self, force=False):
|
||||
ox.makedirs(os.path.join(settings.MEDIA_ROOT,self.path()))
|
||||
ox.makedirs(os.path.join(settings.MEDIA_ROOT, self.path()))
|
||||
if not self.poster or force:
|
||||
poster = self.make_siteposter()
|
||||
url = self.prefered_poster_url()
|
||||
|
@ -1407,17 +1404,14 @@ class Item(models.Model):
|
|||
if not os.path.exists(timeline) and os.path.exists(audio_timeline):
|
||||
timeline = audio_timeline
|
||||
|
||||
cmd = [settings.ITEM_POSTER,
|
||||
'-d', '-',
|
||||
'-p', poster
|
||||
]
|
||||
cmd = [settings.ITEM_POSTER, '-d', '-', '-p', poster]
|
||||
data = self.json.copy()
|
||||
if frame:
|
||||
data['frame'] = frame
|
||||
if os.path.exists(timeline):
|
||||
data['timeline'] = timeline
|
||||
data['oxdbId'] = self.oxdbId or self.oxdb_id() or self.public_id
|
||||
ox.makedirs(os.path.join(settings.MEDIA_ROOT,self.path()))
|
||||
ox.makedirs(os.path.join(settings.MEDIA_ROOT, self.path()))
|
||||
p = subprocess.Popen(cmd, stdin=subprocess.PIPE, close_fds=True)
|
||||
p.communicate(json.dumps(data, default=fields.to_json))
|
||||
for f in glob(poster.replace('.jpg', '*.jpg')):
|
||||
|
@ -1488,13 +1482,11 @@ class Item(models.Model):
|
|||
audio_timeline = '%stimelineaudio64p.jpg' % self.timeline_prefix
|
||||
if not os.path.exists(timeline) and os.path.exists(audio_timeline):
|
||||
timeline = audio_timeline
|
||||
cmd = [settings.ITEM_ICON,
|
||||
'-i', self.icon.path
|
||||
]
|
||||
cmd = [settings.ITEM_ICON, '-i', self.icon.path]
|
||||
if os.path.exists(timeline):
|
||||
cmd += ['-l', timeline]
|
||||
cmd += ['-l', timeline]
|
||||
if frame:
|
||||
cmd += ['-f', frame]
|
||||
cmd += ['-f', frame]
|
||||
p = subprocess.Popen(cmd, close_fds=True)
|
||||
p.wait()
|
||||
#remove cached versions
|
||||
|
@ -1565,7 +1557,7 @@ class Item(models.Model):
|
|||
language = languages[0]
|
||||
|
||||
#loop over all videos
|
||||
for f in self.files.filter(Q(is_audio=True)|Q(is_video=True)) \
|
||||
for f in self.files.filter(Q(is_audio=True) | Q(is_video=True)) \
|
||||
.filter(selected=True).order_by('sort_path'):
|
||||
subtitles_added = False
|
||||
prefix = os.path.splitext(f.path)[0]
|
||||
|
@ -1588,15 +1580,15 @@ class Item(models.Model):
|
|||
annotation = Annotation(
|
||||
item=self,
|
||||
layer=layer,
|
||||
start=float('%0.03f'%data['in']),
|
||||
end=float('%0.03f'%data['out']),
|
||||
start=float('%0.03f' % data['in']),
|
||||
end=float('%0.03f' % data['out']),
|
||||
value=value,
|
||||
user=user
|
||||
)
|
||||
annotation.save()
|
||||
#otherwise add empty 5 seconds annotation every minute
|
||||
if not subtitles_added:
|
||||
start = offset and int (offset / 60) * 60 + 60 or 0
|
||||
start = offset and int(offset / 60) * 60 + 60 or 0
|
||||
for i in range(start,
|
||||
int(offset + f.duration) - 5,
|
||||
60):
|
||||
|
@ -1644,16 +1636,16 @@ Item.facet_keys = []
|
|||
Item.layer_facet_keys = []
|
||||
Item.poster_keys = []
|
||||
for key in settings.CONFIG['itemKeys']:
|
||||
if 'autocomplete' in key and not 'autocompleteSortKey' in key or \
|
||||
if 'autocomplete' in key and 'autocompleteSortKey' not in key or \
|
||||
key.get('filter'):
|
||||
Item.facet_keys.append(key['id'])
|
||||
elif key.get('type') == 'layer' and \
|
||||
utils.get_by_id(settings.CONFIG['layers'], key['id']).get('type') == 'string':
|
||||
utils.get_by_id(settings.CONFIG['layers'], key['id']).get('type') == 'string':
|
||||
Item.facet_keys.append(key['id'])
|
||||
if key['id'] in ('title', 'director', 'year') or key.get('poster'):
|
||||
Item.poster_keys.append(key['id'])
|
||||
if key.get('type') == 'layer' and (
|
||||
key.get('filter') or \
|
||||
key.get('filter') or
|
||||
utils.get_by_id(settings.CONFIG['layers'], key['id']).get('type') == 'string'
|
||||
):
|
||||
Item.layer_facet_keys.append(key['id'])
|
||||
|
@ -1787,7 +1779,7 @@ class AnnotationSequence(models.Model):
|
|||
def reset(cls, item):
|
||||
s, created = cls.objects.get_or_create(item=item)
|
||||
ids = [ox.fromAZ(a['public_id'].split('/')[1])
|
||||
for a in item.annotations.exclude(public_id=None).values('public_id')]
|
||||
for a in item.annotations.exclude(public_id=None).values('public_id')]
|
||||
s.value = max(ids) if ids else 0
|
||||
s.save()
|
||||
|
||||
|
|
Loading…
Reference in a new issue