diff --git a/pandora/annotation/management/commands/import_srt.py b/pandora/annotation/management/commands/import_srt.py index f62990dc..43f90747 100644 --- a/pandora/annotation/management/commands/import_srt.py +++ b/pandora/annotation/management/commands/import_srt.py @@ -31,7 +31,7 @@ class Command(BaseCommand): username, public_id, layer_id, filename = args user = User.objects.get(username=username) item = Item.objects.get(public_id=public_id) - layer = filter(lambda l: l['id'] == layer_id, settings.CONFIG['layers'])[0] + layer = list(filter(lambda l: l['id'] == layer_id, settings.CONFIG['layers']))[0] if filename.endswith('.vtt'): annotations = ox.vtt.load(filename) @@ -53,7 +53,7 @@ class Command(BaseCommand): value=a['value']) annotation.save() #update facets if needed - if filter(lambda f: f['id'] == layer_id, settings.CONFIG['filters']): + if list(filter(lambda f: f['id'] == layer_id, settings.CONFIG['filters'])): item.update_layer_facet(layer_id) Item.objects.filter(id=item.id).update(modified=annotation.modified) annotation.item.modified = annotation.modified diff --git a/pandora/annotation/models.py b/pandora/annotation/models.py index 2df53b63..a31ca1f3 100644 --- a/pandora/annotation/models.py +++ b/pandora/annotation/models.py @@ -36,7 +36,7 @@ def get_super_matches(obj, model): def get_matches(obj, model, layer_type, qs=None): super_matches = obj.get_super_matches() - exact = [l['id'] for l in filter(lambda l: l['type'] == layer_type, settings.CONFIG['layers'])] + exact = [l['id'] for l in list(filter(lambda l: l['type'] == layer_type, settings.CONFIG['layers']))] if exact: q = Q(value__iexact=obj.name) for name in obj.alternativeNames: @@ -46,7 +46,7 @@ def get_matches(obj, model, layer_type, qs=None): f = None has_type = 'has%ss' % layer_type.capitalize() - contains = [l['id'] for l in filter(lambda l: l.get(has_type), settings.CONFIG['layers'])] + contains = [l['id'] for l in list(filter(lambda l: l.get(has_type), settings.CONFIG['layers']))] if contains: name = ox.decode_html(obj.name) name = unicodedata.normalize('NFKD', name).lower() diff --git a/pandora/annotation/tasks.py b/pandora/annotation/tasks.py index f74c92f1..514ba964 100644 --- a/pandora/annotation/tasks.py +++ b/pandora/annotation/tasks.py @@ -18,7 +18,7 @@ def add_annotations(data): from user.models import User item = Item.objects.get(public_id=data['item']) layer_id = data['layer'] - layer = filter(lambda l: l['id'] == layer_id, settings.CONFIG['layers']) + layer = list(filter(lambda l: l['id'] == layer_id, settings.CONFIG['layers'])) if not layer: return False else: @@ -61,7 +61,7 @@ def update_item(id, force=False): Clip.objects.filter(item__id=a.item.id, annotations__id=None).delete() #update facets if needed with transaction.atomic(): - if filter(lambda f: f['id'] == a.layer and f.get('filter'), settings.CONFIG['itemKeys']): + if list(filter(lambda f: f['id'] == a.layer and f.get('filter'), settings.CONFIG['itemKeys'])): a.item.update_layer_facet(a.layer) Item.objects.filter(id=a.item.id).update(modified=a.modified) a.item.modified = a.modified diff --git a/pandora/archive/views.py b/pandora/archive/views.py index 02c61068..941af83d 100644 --- a/pandora/archive/views.py +++ b/pandora/archive/views.py @@ -106,7 +106,7 @@ def update(request, data): file__available=False, file__wanted=True)] - if filter(lambda l: l['id'] == 'subtitles', settings.CONFIG['layers']): + if list(filter(lambda l: l['id'] == 'subtitles', settings.CONFIG['layers'])): qs = files.filter( file__is_subtitle=True, file__available=False diff --git a/pandora/clip/managers.py b/pandora/clip/managers.py index b3658b7e..d27cddb3 100644 --- a/pandora/clip/managers.py +++ b/pandora/clip/managers.py @@ -135,7 +135,7 @@ class ClipManager(Manager): layer_ids = [k['id'] for k in settings.CONFIG['layers']] keys = layer_ids + ['annotations', 'text', '*'] conditions = data.get('query', {}).get('conditions', []) - conditions = filter(lambda c: c['key'] in keys, conditions) + conditions = list(filter(lambda c: c['key'] in keys, conditions)) operator = data.get('query', {}).get('operator', '&') def parse(condition): @@ -194,7 +194,7 @@ class ClipManager(Manager): if 'keys' in data: layer_ids = [k['id'] for k in settings.CONFIG['layers']] - for l in filter(lambda k: k in layer_ids, data['keys']): + for l in list(filter(lambda k: k in layer_ids, data['keys'])): qs = qs.filter(**{l: True}) #anonymous can only see public clips if not user or user.is_anonymous(): diff --git a/pandora/clip/views.py b/pandora/clip/views.py index 3c88473e..9b818c5b 100644 --- a/pandora/clip/views.py +++ b/pandora/clip/views.py @@ -102,8 +102,8 @@ def findClips(request, data): entity_layer_ids = [k['id'] for k in layers if k['type'] == 'entity'] subtitles = utils.get_by_key(layers, 'isSubtitles', True) layer_ids = [k['id'] for k in layers] - keys = filter(lambda k: k not in layer_ids + ['annotations'], data['keys']) - if filter(lambda k: k not in models.Clip.clip_keys, keys): + keys = list(filter(lambda k: k not in layer_ids + ['annotations'], data['keys'])) + if list(filter(lambda k: k not in models.Clip.clip_keys, keys)): qs = qs.select_related('item__sort') clips = {} @@ -151,7 +151,7 @@ def findClips(request, data): clip__in=clips) add_annotations('annotations', aqs, True) - for layer in filter(lambda l: l in keys, layer_ids): + for layer in list(filter(lambda l: l in keys, layer_ids)): aqs = Annotation.objects.filter(layer=layer, clip__in=clips) add_annotations(layer, aqs) elif 'position' in query: diff --git a/pandora/document/models.py b/pandora/document/models.py index 78bc3f11..a7659aa8 100644 --- a/pandora/document/models.py +++ b/pandora/document/models.py @@ -104,7 +104,7 @@ class Document(models.Model): def update_facet_values(self, key, current_values): current_sortvalues = set([value.lower() for value in current_values]) saved_values = [i.value.lower() for i in Facet.objects.filter(document=self, key=key)] - removed_values = filter(lambda i: i not in current_sortvalues, saved_values) + removed_values = list(filter(lambda i: i not in current_sortvalues, saved_values)) if removed_values: q = Q() @@ -208,7 +208,7 @@ class Document(models.Model): value = len(value.split(' ')) if value else 0 return value - for key in filter(lambda k: k.get('sort', False), settings.CONFIG['documentKeys']): + for key in list(filter(lambda k: k.get('sort', False), settings.CONFIG['documentKeys'])): name = key['id'] if name not in self.base_keys: source = name @@ -737,7 +737,7 @@ attrs = { 'document': models.OneToOneField('Document', related_name='sort', primary_key=True), 'created': models.DateTimeField(null=True, blank=True, db_index=True), } -for key in filter(lambda k: k.get('sort', False) or k['type'] in ('integer', 'time', 'float', 'date', 'enum'), settings.CONFIG['documentKeys']): +for key in list(filter(lambda k: k.get('sort', False) or k['type'] in ('integer', 'time', 'float', 'date', 'enum'), settings.CONFIG['documentKeys'])): name = key['id'] sort_type = key.get('sortType', key['type']) if isinstance(sort_type, list): diff --git a/pandora/event/views.py b/pandora/event/views.py index c1d26663..19cf0fd3 100644 --- a/pandora/event/views.py +++ b/pandora/event/views.py @@ -231,8 +231,8 @@ def getEvents(request, data): see: getPlaces ''' response = json_response({}) - layers = [l['id'] for l in filter(lambda l: l['type'] == 'event', - settings.CONFIG['layers'])] + layers = [l['id'] for l in list(filter(lambda l: l['type'] == 'event', + settings.CONFIG['layers']))] items = models.Annotation.objects.filter(layer__in=layers, events__id=None).order_by('value') items = items.values('value').annotate(Count('value')) diff --git a/pandora/item/models.py b/pandora/item/models.py index 7ef99870..a37fad91 100644 --- a/pandora/item/models.py +++ b/pandora/item/models.py @@ -81,7 +81,7 @@ def get_item(info, user=None): 'director': info.get('director', []), } - if filter(lambda k: k['id'] == 'year', settings.CONFIG['itemKeys']): + if list(filter(lambda k: k['id'] == 'year', settings.CONFIG['itemKeys'])): item_data['year'] = info.get('year', '') or '' # add additional item metadata parsed from path @@ -245,16 +245,16 @@ class Item(models.Model): if 'groups' in data: groups = data.pop('groups') if isinstance(groups, list): - groups = filter(lambda g: g.strip(), groups) + groups = list(filter(lambda g: g.strip(), groups)) groups = [ox.escape_html(g) for g in groups] for g in self.groups.exclude(name__in=groups): self.groups.remove(g) current_groups = [g.name for g in self.groups.all()] - for g in filter(lambda g: g not in current_groups, groups): + for g in list(filter(lambda g: g not in current_groups, groups)): group, created = Group.objects.get_or_create(name=g) self.groups.add(group) keys = [k['id'] for k in - filter(lambda i: i.get('description'), settings.CONFIG['itemKeys'])] + list(filter(lambda i: i.get('description'), settings.CONFIG['itemKeys']))] for k in keys: key = '%sdescription' % k if key in data: @@ -299,7 +299,7 @@ class Item(models.Model): else: self.data[key] = ox.escape_html(data[key]) p = self.save() - if not settings.USE_IMDB and filter(lambda k: k in self.poster_keys, data): + if not settings.USE_IMDB and list(filter(lambda k: k in self.poster_keys, data)): p = tasks.update_poster.delay(self.public_id) return p @@ -332,7 +332,7 @@ class Item(models.Model): 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] = list(filter(lambda x: x['title'], c[t])) if not c[t]: del c[t] return c @@ -409,7 +409,7 @@ class Item(models.Model): # update defaults if settings.USE_IMDB: - defaults = filter(lambda k: 'default' in k, settings.CONFIG['itemKeys']) + defaults = list(filter(lambda k: 'default' in k, settings.CONFIG['itemKeys'])) for k in defaults: if len(self.public_id) == 7: if k['id'] in self.data and self.data[k['id']] == k['default']: @@ -657,16 +657,16 @@ class Item(models.Model): i['posterFrame'] = self.poster_frame dkeys = [k['id'] for k in - filter(lambda i: i.get('description'), settings.CONFIG['itemKeys'])] + list(filter(lambda i: i.get('description'), settings.CONFIG['itemKeys']))] if keys: - dkeys = filter(lambda k: k in keys, dkeys) + dkeys = list(filter(lambda k: k in keys, dkeys)) for key in dkeys: k = list(filter(lambda i: i['id'] == key, settings.CONFIG['itemKeys'])) if isinstance((k and k[0].get('type') or ''), list): i['%sdescription' % key] = {} if key == 'name': values = [] - for ikey in filter(lambda i: i.get('sortType') == 'person', settings.CONFIG['itemKeys']): + for ikey in list(filter(lambda i: i.get('sortType') == 'person', settings.CONFIG['itemKeys'])): values += i.get(ikey['id'], []) values = list(set(values)) else: @@ -822,8 +822,8 @@ class Item(models.Model): elif key == 'character': values = self.get('cast', '') if values: - values = filter(lambda x: x.strip(), - [f['character'] for f in values]) + values = list(filter(lambda x: x.strip(), + [f['character'] for f in values])) values = list(set(values)) elif key == 'name': values = [] @@ -976,7 +976,7 @@ class Item(models.Model): s.timesaccessed = 0 s.accessed = self.accessed.aggregate(Max('access'))['access__max'] - for key in filter(lambda k: k.get('sort', False), settings.CONFIG['itemKeys']): + for key in list(filter(lambda k: k.get('sort', False), settings.CONFIG['itemKeys'])): name = key['id'] source = name sort_type = key.get('sortType', key['type']) @@ -1042,8 +1042,8 @@ class Item(models.Model): if at: current_values += [a[0] for a in at] elif key == 'character': - current_values = filter(lambda x: x.strip(), - [f['character'] for f in self.get('cast', [])]) + current_values = list(filter(lambda x: x.strip(), + [f['character'] for f in self.get('cast', [])])) current_values = [item for sublist in [x.split(' / ') for x in current_values] for item in sublist] elif key == 'name': @@ -1089,7 +1089,7 @@ class Item(models.Model): def update_facet_values(self, key, current_values): current_sortvalues = set([value.lower() for value in current_values]) saved_values = [i.value.lower() for i in Facet.objects.filter(item=self, key=key)] - removed_values = filter(lambda i: i not in current_sortvalues, saved_values) + removed_values = list(filter(lambda i: i not in current_sortvalues, saved_values)) if removed_values: q = Q() @@ -1736,7 +1736,7 @@ attrs = { 'height': models.BigIntegerField(null=True, blank=True, db_index=True), 'created': models.DateTimeField(null=True, blank=True, db_index=True), } -for key in filter(lambda k: k.get('sort', False) or k['type'] in ('integer', 'time', 'float', 'date', 'enum'), settings.CONFIG['itemKeys']): +for key in list(filter(lambda k: k.get('sort', False) or k['type'] in ('integer', 'time', 'float', 'date', 'enum'), settings.CONFIG['itemKeys'])): name = key['id'] name = {'id': 'public_id'}.get(name, name) sort_type = key.get('sortType', key['type']) diff --git a/pandora/item/tasks.py b/pandora/item/tasks.py index 651e00e2..8fdf0ea8 100644 --- a/pandora/item/tasks.py +++ b/pandora/item/tasks.py @@ -26,7 +26,7 @@ def cronjob(**kwargs): def update_random_sort(): from . import models - if filter(lambda f: f['id'] == 'random', settings.CONFIG['itemKeys']): + if list(filter(lambda f: f['id'] == 'random', settings.CONFIG['itemKeys'])): random.seed() ids = [f['item'] for f in models.ItemSort.objects.values('item')] random.shuffle(ids) @@ -36,7 +36,7 @@ def update_random_sort(): n += 1 def update_random_clip_sort(): - if filter(lambda f: f['id'] == 'random', settings.CONFIG['itemKeys']): + if list(filter(lambda f: f['id'] == 'random', settings.CONFIG['itemKeys'])): with transaction.atomic(): cursor = connection.cursor() for row in ( diff --git a/pandora/item/timelines.py b/pandora/item/timelines.py index ad89a975..9eb61eac 100644 --- a/pandora/item/timelines.py +++ b/pandora/item/timelines.py @@ -116,7 +116,7 @@ def join_tiles(source_paths, durations, target_path): offset = 0 for i, path in enumerate(source_paths): file_info = map(get_file_info, os.listdir(path)) - file_info = filter(lambda x: x is not None, file_info) + file_info = list(filter(lambda x: x is not None, file_info)) files = {} for info in sorted(file_info, key=lambda x: x['index']): mode = info['mode'] @@ -218,7 +218,7 @@ def split_tiles(path, paths, durations): def is_timeline_file(file_name): return file_name.startswith('timeline') and file_name.endswith('.png') - file_names = filter(is_timeline_file, os.listdir(path)) + file_names = list(filter(is_timeline_file, os.listdir(path))) tiles = {} for file_name in file_names: mode = re.split('\d+', file_name[8:])[0] diff --git a/pandora/item/views.py b/pandora/item/views.py index 2bdaf01e..2157dc2e 100644 --- a/pandora/item/views.py +++ b/pandora/item/views.py @@ -729,7 +729,7 @@ def lookup(request, data): i = None if 'id' in data: i = models.Item.objects.get(public_id=data['id']) - elif not filter(None, [d not in ('title', 'year', 'director') for d in data.keys()]): + elif not list(filter(None, [d not in ('title', 'year', 'director') for d in data.keys()])): qs = models.Item.objects.find({'query': { 'conditions': [ {'key': key, 'value': data[key], 'operator': '=='} for key in data diff --git a/pandora/oxdjango/api/actions.py b/pandora/oxdjango/api/actions.py index e902321a..3f375598 100644 --- a/pandora/oxdjango/api/actions.py +++ b/pandora/oxdjango/api/actions.py @@ -108,7 +108,7 @@ class ApiActions(dict): else: f = self[name] if name != 'api' and hasattr(f, 'func_closure') and f.func_closure: - fc = filter(lambda c: hasattr(c.cell_contents, '__call__'), f.func_closure) + fc = list(filter(lambda c: hasattr(c.cell_contents, '__call__'), f.func_closure)) f = fc[len(fc)-1].cell_contents if PY2: info = f.func_code.co_filename[len(settings.PROJECT_ROOT)+1:] diff --git a/pandora/place/views.py b/pandora/place/views.py index 2adf8260..c87e6c68 100644 --- a/pandora/place/views.py +++ b/pandora/place/views.py @@ -121,7 +121,7 @@ def editPlace(request, data): names = [names] names = [ox.escape_html(n) for n in names] alternative_names = [ox.escape_html(n) for n in data.get('alternativeNames', [])] - alternative_names = filter(lambda n: n.strip(), alternative_names) + alternative_names = list(filter(lambda n: n.strip(), alternative_names)) if place.editable(request.user): conflict = False conflict_names = [] @@ -284,8 +284,8 @@ def getPlaces(request, data): see: getEvents ''' response = json_response({}) - layers = [l['id'] for l in filter(lambda l: l['type'] == 'place', - settings.CONFIG['layers'])] + layers = [l['id'] for l in list(filter(lambda l: l['type'] == 'place', + settings.CONFIG['layers']))] items = models.Annotation.objects.filter(layer__in=layers, places__id=None).order_by('value') items = items.values('value').annotate(Count('value')) diff --git a/pandora/sequence/extract.py b/pandora/sequence/extract.py index 6aec3c74..0a27ccd6 100644 --- a/pandora/sequence/extract.py +++ b/pandora/sequence/extract.py @@ -60,7 +60,7 @@ def get_sequences(path, position=0): sequences[mode] = [] position_start = position fps = 25 - file_names = filter(lambda x: 'timelinedata8p' in x, os.listdir(path)) + file_names = list(filter(lambda x: 'timelinedata8p' in x, os.listdir(path))) file_names = sorted(file_names, key=lambda x: int(x[14:-4])) file_names = list(map(lambda x: path + x, file_names)) for file_name in file_names: @@ -84,7 +84,7 @@ class DataTimeline(): fps = 25 def __init__(self, path): - file_names = filter(lambda x: 'timelinedata8p' in x, os.listdir(path)) + file_names = list(filter(lambda x: 'timelinedata8p' in x, os.listdir(path))) file_names = sorted(file_names, key=lambda x: int(x[14:-4])) file_names = list(map(lambda x: path + x, file_names)) self.file_names = file_names diff --git a/pandora/user/tasks.py b/pandora/user/tasks.py index e4f06d28..d782d5fa 100644 --- a/pandora/user/tasks.py +++ b/pandora/user/tasks.py @@ -28,7 +28,7 @@ def update_statistics(): for i in models.SessionData.objects.filter(level__gte=0).values('session_key')] for chunk in chunker(ids, 100, None): - chunk = filter(None, chunk) + chunk = list(filter(None, chunk)) for u in models.SessionData.objects.filter(pk__in=chunk): stats.add(u.json()) Settings.set('statistics', stats) diff --git a/pandora/user/views.py b/pandora/user/views.py index 81cb94ee..8368e349 100644 --- a/pandora/user/views.py +++ b/pandora/user/views.py @@ -370,12 +370,12 @@ def editUser(request, data): if 'groups' in data: groups = data['groups'] if isinstance(groups, list): - groups = filter(lambda g: g.strip(), groups) + groups = list(filter(lambda g: g.strip(), groups)) groups = [ox.escape_html(g) for g in groups] for g in user.groups.exclude(name__in=groups): user.groups.remove(g) current_groups = [g.name for g in user.groups.all()] - for g in filter(lambda g: g not in current_groups, groups): + for g in list(filter(lambda g: g not in current_groups, groups)): group, created = Group.objects.get_or_create(name=g) user.groups.add(group) if 'username' in data: