forked from 0x2620/pandora
towards supporting python 2 and 3
- use absolute_imports - make use of six.moves - use exec instead of execfile - use list(dict) instead if dict.keys()
This commit is contained in:
parent
728ed14499
commit
1468ddbecb
89 changed files with 400 additions and 265 deletions
|
@ -1,9 +1,10 @@
|
|||
# -*- coding: utf-8 -*-
|
||||
# vi:si:et:sw=4:sts=4:ts=4
|
||||
from __future__ import division, print_function, absolute_import
|
||||
|
||||
from django.contrib import admin
|
||||
|
||||
import models
|
||||
from . import models
|
||||
|
||||
|
||||
class AnnotationAdmin(admin.ModelAdmin):
|
||||
|
|
|
@ -2,6 +2,7 @@
|
|||
# vi:si:et:sw=4:sts=4:ts=4
|
||||
import unicodedata
|
||||
|
||||
from six import string_types
|
||||
from django.db.models import Q, Manager
|
||||
from oxdjango.query import QuerySet
|
||||
|
||||
|
@ -68,7 +69,7 @@ def parseCondition(condition, user):
|
|||
else:
|
||||
key = k + get_operator(op, 'istr' if k in case_insensitive_keys else 'str')
|
||||
key = str(key)
|
||||
if isinstance(v, unicode):
|
||||
if isinstance(v, string_types):
|
||||
v = unicodedata.normalize('NFKD', v)
|
||||
if k not in case_sensitive_keys:
|
||||
v = v.lower()
|
||||
|
|
|
@ -1,6 +1,7 @@
|
|||
# -*- coding: utf-8 -*-
|
||||
# vi:si:et:sw=4:sts=4:ts=4
|
||||
from __future__ import division, with_statement
|
||||
from __future__ import division, print_function, absolute_import
|
||||
|
||||
import re
|
||||
import unicodedata
|
||||
|
||||
|
@ -15,10 +16,9 @@ import ox
|
|||
from clip.models import Clip
|
||||
|
||||
from item.utils import sort_string, get_by_key
|
||||
import managers
|
||||
import utils
|
||||
from tasks import update_matches
|
||||
|
||||
from . import managers
|
||||
from . import utils
|
||||
|
||||
def get_super_matches(obj, model):
|
||||
super_matches = []
|
||||
|
@ -133,6 +133,8 @@ class Annotation(models.Model):
|
|||
return {}
|
||||
|
||||
def save(self, *args, **kwargs):
|
||||
from .tasks import update_matches
|
||||
|
||||
set_public_id = not self.id or not self.public_id
|
||||
layer = self.get_layer()
|
||||
if self.value:
|
||||
|
|
|
@ -1,12 +1,14 @@
|
|||
# -*- coding: utf-8 -*-
|
||||
# vi:si:et:sw=4:sts=4:ts=4
|
||||
from __future__ import division, print_function, absolute_import
|
||||
|
||||
import ox
|
||||
|
||||
from django.conf import settings
|
||||
from django.db import transaction
|
||||
from celery.task import task
|
||||
|
||||
import models
|
||||
from .models import Annotation
|
||||
|
||||
|
||||
@task(ignore_results=True, queue='default')
|
||||
|
@ -16,7 +18,7 @@ def update_matches(id, type):
|
|||
elif type == 'event':
|
||||
from event.models import Event as Model
|
||||
|
||||
a = models.Annotation.objects.get(pk=id)
|
||||
a = Annotation.objects.get(pk=id)
|
||||
a_matches = getattr(a, type == 'place' and 'places' or 'events')
|
||||
|
||||
#remove undefined matches that only have this annotation
|
||||
|
@ -52,16 +54,16 @@ def update_matches(id, type):
|
|||
if not filter(lambda n: n in name_matches,
|
||||
[n.lower() for n in p.get_super_matches()]):
|
||||
new.append(i)
|
||||
removed = filter(lambda p: p not in new, current)
|
||||
added = filter(lambda p: p not in current, new)
|
||||
removed = list(filter(lambda p: p not in new, current))
|
||||
added = list(filter(lambda p: p not in current, new))
|
||||
update = removed + added
|
||||
if update:
|
||||
for e in Model.objects.filter(id__in=update):
|
||||
e.update_matches(models.Annotation.objects.filter(pk=a.id))
|
||||
e.update_matches(Annotation.objects.filter(pk=a.id))
|
||||
else:
|
||||
#annotation has no value, remove all exisint matches
|
||||
for e in a_matches.all():
|
||||
e.update_matches(models.Annotation.objects.filter(pk=a.id))
|
||||
e.update_matches(Annotation.objects.filter(pk=a.id))
|
||||
|
||||
@task(ignore_results=False, queue='default')
|
||||
def add_annotations(data):
|
||||
|
@ -85,7 +87,7 @@ def add_annotations(data):
|
|||
continue
|
||||
else:
|
||||
value = a['value']
|
||||
annotation = models.Annotation(
|
||||
annotation = Annotation(
|
||||
item=item,
|
||||
layer=layer_id,
|
||||
user=user,
|
||||
|
@ -107,7 +109,7 @@ def add_annotations(data):
|
|||
def update_item(id, force=False):
|
||||
from item.models import Item
|
||||
from clip.models import Clip
|
||||
a = models.Annotation.objects.get(pk=id)
|
||||
a = Annotation.objects.get(pk=id)
|
||||
if force or a.modified >= a.item.annotations.order_by('-modified')[0].modified:
|
||||
#cleanup orphaned clips
|
||||
Clip.objects.filter(item__id=a.item.id, annotations__id=None).delete()
|
||||
|
@ -129,7 +131,7 @@ def update_annotations(layers, value):
|
|||
items = {}
|
||||
|
||||
with transaction.atomic():
|
||||
for a in models.Annotation.objects.filter(
|
||||
for a in Annotation.objects.filter(
|
||||
layer__in=layers,
|
||||
value=value
|
||||
):
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
# -*- coding: utf-8 -*-
|
||||
# vi:si:et:sw=4:sts=4:ts=4
|
||||
from __future__ import division
|
||||
from __future__ import division, print_function, absolute_import
|
||||
|
||||
from django.conf import settings
|
||||
from django.db.models import Count, Sum, F, Value
|
||||
|
@ -20,8 +20,8 @@ from item.utils import get_by_id
|
|||
from entity.models import Entity
|
||||
from changelog.models import add_changelog
|
||||
|
||||
import models
|
||||
from tasks import update_item, add_annotations
|
||||
from . import models
|
||||
from .tasks import update_item, add_annotations
|
||||
|
||||
def get_annotation_or_404_json(id):
|
||||
try:
|
||||
|
|
|
@ -1,9 +1,10 @@
|
|||
# -*- coding: utf-8 -*-
|
||||
# vi:si:et:sw=4:sts=4:ts=4
|
||||
from __future__ import division, print_function, absolute_import
|
||||
|
||||
from django.contrib import admin
|
||||
|
||||
import models
|
||||
from . import models
|
||||
|
||||
|
||||
class PageAdmin(admin.ModelAdmin):
|
||||
|
|
|
@ -1,17 +1,17 @@
|
|||
# -*- coding: utf-8 -*-
|
||||
# vi:si:et:sw=4:sts=4:ts=4
|
||||
from __future__ import division, with_statement, print_function
|
||||
from __future__ import division, print_function, absolute_import
|
||||
|
||||
import os
|
||||
import sys
|
||||
import shutil
|
||||
import subprocess
|
||||
import time
|
||||
import thread
|
||||
import codecs
|
||||
from os.path import dirname, exists, join
|
||||
from glob import glob
|
||||
|
||||
from six.moves import _thread as thread
|
||||
from django.conf import settings
|
||||
from django.contrib.auth.models import User
|
||||
|
||||
|
@ -33,7 +33,7 @@ def get_version():
|
|||
if exists(git_dir):
|
||||
env = {'GIT_DIR': git_dir}
|
||||
cmd = ['git', 'rev-list', 'HEAD', '--count']
|
||||
return subprocess.check_output(cmd, env=env).strip()
|
||||
return subprocess.check_output(cmd, env=env).strip().decode('utf-8')
|
||||
elif exists(info):
|
||||
f = open(info)
|
||||
rev = int(f.read().split()[0])
|
||||
|
@ -101,7 +101,7 @@ def load_config(init=False):
|
|||
'site', 'tv', 'user.ui', 'user.ui.part', 'user.ui.showFolder',
|
||||
'menuExtras', 'languages'
|
||||
)):
|
||||
parts = map(lambda p: p.replace('\0', '\\.'), section.replace('\\.', '\0').split('.'))
|
||||
parts = [p.replace('\0', '\\.') for p in section.replace('\\.', '\0').split('.')]
|
||||
# print('checking', section)
|
||||
c = config
|
||||
d = default
|
||||
|
|
|
@ -18,7 +18,7 @@ def get(config_jsonc='config.pandora.jsonc'):
|
|||
if key not in docs:
|
||||
print(config_jsonc, 'missing', key)
|
||||
'''
|
||||
for key in docs.keys():
|
||||
for key in list(docs):
|
||||
if key not in config:
|
||||
print('parse error, invalid config key:', key)
|
||||
del docs[key]
|
||||
|
|
|
@ -1,13 +1,13 @@
|
|||
# -*- coding: utf-8 -*-
|
||||
# vi:si:et:sw=4:sts=4:ts=4
|
||||
from __future__ import division, with_statement
|
||||
from __future__ import division, print_function, absolute_import
|
||||
|
||||
import json
|
||||
|
||||
from django.db import models
|
||||
|
||||
import monkey_patch
|
||||
import tasks
|
||||
from . import monkey_patch
|
||||
from . import tasks
|
||||
|
||||
|
||||
class Page(models.Model):
|
||||
|
|
|
@ -1,10 +1,12 @@
|
|||
# -*- coding: utf-8 -*-
|
||||
# vi:si:et:sw=4:sts=4:ts=4
|
||||
from __future__ import division, print_function, absolute_import
|
||||
|
||||
from django.contrib.auth.models import User, Group
|
||||
from django.core.validators import MaxLengthValidator
|
||||
|
||||
# load config from json
|
||||
import config
|
||||
from . import config
|
||||
config.init()
|
||||
|
||||
NEW_LENGTH = {
|
||||
|
|
|
@ -1,5 +1,7 @@
|
|||
# -*- coding: utf-8 -*-
|
||||
# vi:si:et:sw=4:sts=4:ts=4
|
||||
from __future__ import division, print_function, absolute_import
|
||||
|
||||
import datetime
|
||||
|
||||
from celery.task import periodic_task
|
||||
|
|
|
@ -1,8 +1,11 @@
|
|||
# -*- coding: utf-8 -*-
|
||||
# vi:si:et:sw=4:sts=4:ts=4
|
||||
from __future__ import division, print_function, absolute_import
|
||||
|
||||
import copy
|
||||
from datetime import datetime
|
||||
|
||||
from six import string_types
|
||||
from django.shortcuts import render, redirect
|
||||
from django.conf import settings
|
||||
from django.http import HttpResponse
|
||||
|
@ -13,7 +16,7 @@ from oxdjango.decorators import login_required_json
|
|||
import ox
|
||||
from ox.utils import json, ET
|
||||
|
||||
import models
|
||||
from . import models
|
||||
|
||||
from user.models import init_user
|
||||
from changelog.models import add_changelog
|
||||
|
@ -102,7 +105,7 @@ def getPage(request, data):
|
|||
}
|
||||
see: editPage
|
||||
'''
|
||||
if isinstance(data, basestring):
|
||||
if isinstance(data, string_types):
|
||||
name = data
|
||||
else:
|
||||
name = data['name']
|
||||
|
|
|
@ -1,9 +1,10 @@
|
|||
# -*- coding: utf-8 -*-
|
||||
# vi:si:et:sw=4:sts=4:ts=4
|
||||
from __future__ import division, print_function, absolute_import
|
||||
|
||||
from django.contrib import admin
|
||||
|
||||
import models
|
||||
from . import models
|
||||
|
||||
|
||||
class FileAdmin(admin.ModelAdmin):
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
# -*- coding: utf-8 -*-
|
||||
# vi:si:et:sw=4:sts=4:ts=4
|
||||
from __future__ import division, print_function
|
||||
from __future__ import division, print_function, absolute_import
|
||||
|
||||
import json
|
||||
import subprocess
|
||||
|
@ -14,7 +14,7 @@ from django.conf import settings
|
|||
from item.models import Item
|
||||
from item.tasks import load_subtitles
|
||||
|
||||
import models
|
||||
from . import models
|
||||
|
||||
info_keys = [
|
||||
'title',
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
# -*- coding: utf-8 -*-
|
||||
# vi:si:et:sw=4:sts=4:ts=4
|
||||
from __future__ import division, with_statement, print_function
|
||||
from __future__ import division, print_function, absolute_import
|
||||
|
||||
import os
|
||||
from os.path import exists
|
||||
|
@ -14,6 +14,7 @@ import shutil
|
|||
from distutils.spawn import find_executable
|
||||
from glob import glob
|
||||
|
||||
from six import string_types
|
||||
import numpy as np
|
||||
import ox
|
||||
import ox.image
|
||||
|
@ -54,6 +55,7 @@ def supported_formats():
|
|||
p = subprocess.Popen([settings.FFMPEG, '-codecs'],
|
||||
stdout=subprocess.PIPE, stderr=subprocess.PIPE, close_fds=True)
|
||||
stdout, stderr = p.communicate()
|
||||
stdout = stdout.decode('utf-8')
|
||||
return {
|
||||
'ogg': 'libtheora' in stdout and 'libvorbis' in stdout,
|
||||
'webm': 'libvpx' in stdout and 'libvorbis' in stdout,
|
||||
|
@ -453,7 +455,7 @@ def timeline(video, prefix, modes=None, size=None):
|
|||
modes = ['antialias', 'slitscan', 'keyframes', 'audio', 'data']
|
||||
if size is None:
|
||||
size = [64, 16]
|
||||
if isinstance(video, basestring):
|
||||
if isinstance(video, string_types):
|
||||
video = [video]
|
||||
cmd = ['../bin/oxtimelines',
|
||||
'-s', ','.join(map(str, reversed(sorted(size)))),
|
||||
|
@ -621,7 +623,7 @@ def chop(video, start, end):
|
|||
stderr=open('/dev/null', 'w'),
|
||||
close_fds=True)
|
||||
p.wait()
|
||||
f = open(choped_video, 'r')
|
||||
f = open(choped_video, 'rb')
|
||||
os.unlink(choped_video)
|
||||
os.rmdir(tmp)
|
||||
return f
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
# -*- coding: utf-8 -*-
|
||||
# vi:si:et:sw=4:sts=4:ts=4
|
||||
from __future__ import division, with_statement
|
||||
from __future__ import division, print_function, absolute_import
|
||||
|
||||
import json
|
||||
import os.path
|
||||
|
@ -8,6 +8,7 @@ import shutil
|
|||
import tempfile
|
||||
import time
|
||||
|
||||
from six import string_types, PY2
|
||||
from django.conf import settings
|
||||
from django.contrib.auth.models import User
|
||||
from django.db import models
|
||||
|
@ -22,8 +23,11 @@ import item.models
|
|||
from person.models import get_name_sort
|
||||
from taskqueue.models import Task
|
||||
|
||||
from chunk import save_chunk
|
||||
import extract
|
||||
from .chunk import save_chunk
|
||||
from . import extract
|
||||
|
||||
if not PY2:
|
||||
unicode = str
|
||||
|
||||
def data_path(f, x):
|
||||
return f.get_path('data.bin')
|
||||
|
@ -155,7 +159,7 @@ class File(models.Model):
|
|||
if self.item:
|
||||
for key in self.ITEM_INFO:
|
||||
data[key] = self.item.get(key)
|
||||
if isinstance(data[key], basestring):
|
||||
if isinstance(data[key], string_types):
|
||||
data[key] = ox.decode_html(data[key])
|
||||
elif isinstance(data[key], list):
|
||||
data[key] = [ox.decode_html(e) for e in data[key]]
|
||||
|
@ -351,7 +355,7 @@ class File(models.Model):
|
|||
stream.available = True
|
||||
stream.info = {}
|
||||
stream.save()
|
||||
if self.info.keys() == ['extension']:
|
||||
if list(self.info) == ['extension']:
|
||||
self.info.update(stream.info)
|
||||
self.parse_info()
|
||||
self.save()
|
||||
|
@ -416,7 +420,7 @@ class File(models.Model):
|
|||
data['users'] = list(set([i['user'] for i in data['instances']]))
|
||||
data['item'] = self.item.public_id
|
||||
if keys:
|
||||
for k in data.keys():
|
||||
for k in list(data):
|
||||
if k not in keys:
|
||||
del data[k]
|
||||
return data
|
||||
|
@ -450,14 +454,14 @@ class File(models.Model):
|
|||
'''
|
||||
extract stream from direct upload
|
||||
'''
|
||||
import tasks
|
||||
from . import tasks
|
||||
return tasks.extract_stream.delay(self.id)
|
||||
|
||||
def process_stream(self):
|
||||
'''
|
||||
extract derivatives from webm upload
|
||||
'''
|
||||
import tasks
|
||||
from . import tasks
|
||||
return tasks.process_stream.delay(self.id)
|
||||
|
||||
def extract_tracks(self):
|
||||
|
|
|
@ -1,5 +1,7 @@
|
|||
# -*- coding: utf-8 -*-
|
||||
# vi:si:et:sw=4:sts=4:ts=4
|
||||
from __future__ import division, print_function, absolute_import
|
||||
|
||||
from glob import glob
|
||||
|
||||
from celery.task import task
|
||||
|
@ -11,9 +13,9 @@ from item.models import Item
|
|||
from item.tasks import update_poster
|
||||
from taskqueue.models import Task
|
||||
|
||||
import models
|
||||
import extract
|
||||
import external
|
||||
from . import models
|
||||
from . import extract
|
||||
from . import external
|
||||
|
||||
_INSTANCE_KEYS = ('mtime', 'path')
|
||||
|
||||
|
@ -104,7 +106,7 @@ def update_files(user, volume, files):
|
|||
@task(ignore_results=True, queue='default')
|
||||
def update_info(user, info):
|
||||
user = models.User.objects.get(username=user)
|
||||
files = models.File.objects.filter(oshash__in=info.keys())
|
||||
files = models.File.objects.filter(oshash__in=list(info))
|
||||
for f in files:
|
||||
f.update_info(info[f.oshash], user)
|
||||
f.save()
|
||||
|
|
|
@ -1,6 +1,7 @@
|
|||
# -*- coding: utf-8 -*-
|
||||
# vi:si:et:sw=4:sts=4:ts=4
|
||||
from __future__ import division
|
||||
from __future__ import division, print_function, absolute_import
|
||||
|
||||
import os.path
|
||||
from datetime import datetime
|
||||
|
||||
|
@ -8,6 +9,7 @@ from django.shortcuts import get_object_or_404, redirect, render
|
|||
from django.conf import settings
|
||||
from django.db.models import Count, Q
|
||||
|
||||
from six import string_types
|
||||
from celery.utils import get_full_cls_name
|
||||
from celery.backends import default_backend
|
||||
import ox
|
||||
|
@ -404,7 +406,7 @@ def moveMedia(request, data):
|
|||
data['public_id'] = data.pop('item').strip()
|
||||
if len(data['public_id']) != 7:
|
||||
del data['public_id']
|
||||
if 'director' in data and isinstance(data['director'], basestring):
|
||||
if 'director' in data and isinstance(data['director'], string_types):
|
||||
if data['director'] == '':
|
||||
data['director'] = []
|
||||
else:
|
||||
|
@ -556,7 +558,7 @@ def getPath(request, data):
|
|||
'''
|
||||
response = json_response()
|
||||
ids = data['id']
|
||||
if isinstance(ids, basestring):
|
||||
if isinstance(ids, string_types):
|
||||
ids = [ids]
|
||||
for f in models.File.objects.filter(oshash__in=ids).values('path', 'oshash').order_by('sort_path'):
|
||||
response['data'][f['oshash']] = f['path']
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
# -*- coding: utf-8 -*-
|
||||
# vi:si:et:sw=4:sts=4:ts=4
|
||||
from __future__ import division, with_statement
|
||||
from __future__ import division, print_function, absolute_import
|
||||
|
||||
from datetime import datetime
|
||||
|
||||
|
@ -10,7 +10,8 @@ from oxdjango import fields
|
|||
import ox
|
||||
|
||||
import websocket
|
||||
import managers
|
||||
|
||||
from . import managers
|
||||
|
||||
'''
|
||||
FIXME: remove this table more migrate to new ChangeLog
|
||||
|
@ -67,7 +68,7 @@ class Log(models.Model):
|
|||
'user': self.user.username,
|
||||
}
|
||||
if keys:
|
||||
for k in r.keys():
|
||||
for k in list(r):
|
||||
if k not in keys:
|
||||
del r[k]
|
||||
return r
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
# -*- coding: utf-8 -*-
|
||||
# vi:si:et:sw=4:sts=4:ts=4
|
||||
from __future__ import division
|
||||
from __future__ import division, print_function, absolute_import
|
||||
|
||||
import ox
|
||||
|
||||
|
@ -12,7 +12,7 @@ from oxdjango.api import actions
|
|||
from item import utils
|
||||
from user.decorators import capability_required_json
|
||||
|
||||
import models
|
||||
from . import models
|
||||
|
||||
|
||||
def parse_query(data, user):
|
||||
|
|
|
@ -2,6 +2,7 @@
|
|||
# vi:si:et:sw=4:sts=4:ts=4
|
||||
import unicodedata
|
||||
|
||||
from six import string_types
|
||||
from django.db.models import Q, Manager
|
||||
from django.conf import settings
|
||||
|
||||
|
@ -78,7 +79,7 @@ def parseCondition(condition, user):
|
|||
else:
|
||||
key = k + get_operator(op, 'istr' if k in case_insensitive_keys else 'str')
|
||||
key = str(key)
|
||||
if isinstance(v, unicode) and op != '===':
|
||||
if isinstance(v, string_types) and op != '===':
|
||||
v = unicodedata.normalize('NFKD', v).lower()
|
||||
if exclude:
|
||||
q = ~Q(**{key: v})
|
||||
|
@ -140,14 +141,14 @@ class ClipManager(Manager):
|
|||
def parse(condition):
|
||||
key = 'findvalue' + get_operator(condition.get('operator', ''))
|
||||
v = condition['value']
|
||||
if isinstance(v, unicode):
|
||||
if isinstance(v, string_types):
|
||||
v = unicodedata.normalize('NFKD', v).lower()
|
||||
q = Q(**{key: v})
|
||||
if condition['key'] in layer_ids:
|
||||
q = q & Q(layer=condition['key'])
|
||||
return q
|
||||
|
||||
conditions = map(parse, conditions)
|
||||
conditions = [parse(c) for c in conditions]
|
||||
if conditions:
|
||||
q = conditions[0]
|
||||
for c in conditions[1:]:
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
# -*- coding: utf-8 -*-
|
||||
# vi:si:et:sw=4:sts=4:ts=4
|
||||
from __future__ import division, with_statement
|
||||
from __future__ import division, print_function, absolute_import
|
||||
|
||||
from django.db import models
|
||||
from django.conf import settings
|
||||
|
@ -8,7 +8,8 @@ from django.conf import settings
|
|||
import ox
|
||||
|
||||
from archive import extract
|
||||
import managers
|
||||
|
||||
from . import managers
|
||||
|
||||
|
||||
def get_layers(item, interval=None, user=None):
|
||||
|
@ -107,7 +108,7 @@ class MetaClip(object):
|
|||
if not j['videoRatio']:
|
||||
j['videoRatio'] = 4/3
|
||||
if keys:
|
||||
for key in j.keys():
|
||||
for key in list(j):
|
||||
if key not in keys:
|
||||
del j[key]
|
||||
#needed here to make item find with clips work
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
# -*- coding: utf-8 -*-
|
||||
# vi:si:et:sw=4:sts=4:ts=4
|
||||
from __future__ import division
|
||||
from __future__ import division, print_function, absolute_import
|
||||
|
||||
from django.conf import settings
|
||||
import ox
|
||||
|
@ -14,7 +14,7 @@ from item.models import Item
|
|||
from item import utils
|
||||
from changelog.models import add_changelog
|
||||
|
||||
import models
|
||||
from . import models
|
||||
|
||||
|
||||
def parse_query(data, user):
|
||||
|
|
|
@ -1,11 +1,13 @@
|
|||
# -*- coding: utf-8 -*-
|
||||
# vi:si:et:sw=4:sts=4:ts=4
|
||||
from __future__ import division, with_statement
|
||||
from __future__ import division, print_function, absolute_import
|
||||
|
||||
import os
|
||||
import re
|
||||
from glob import glob
|
||||
from urllib import quote, unquote
|
||||
|
||||
from six import string_types
|
||||
from six.moves.urllib.parse import quote
|
||||
from django.db import models
|
||||
from django.db.models import Max
|
||||
from django.contrib.auth.models import User
|
||||
|
@ -18,8 +20,8 @@ from item.models import Item
|
|||
from archive.extract import resize_image
|
||||
from archive.chunk import save_chunk
|
||||
|
||||
import managers
|
||||
import utils
|
||||
from . import managers
|
||||
from . import utils
|
||||
|
||||
def get_path(f, x): return f.path(x)
|
||||
|
||||
|
@ -174,7 +176,7 @@ class Document(models.Model):
|
|||
elif hasattr(self, _map.get(key, key)):
|
||||
response[key] = getattr(self, _map.get(key,key)) or ''
|
||||
if item:
|
||||
if isinstance(item, basestring):
|
||||
if isinstance(item, string_types):
|
||||
item = Item.objects.get(public_id=item)
|
||||
d = self.descriptions.filter(item=item)
|
||||
if d.exists():
|
||||
|
@ -228,7 +230,7 @@ class Document(models.Model):
|
|||
elif self.extension in ('jpg', 'png', 'gif'):
|
||||
if os.path.exists(src):
|
||||
if size and page:
|
||||
crop = map(int, page.split(','))
|
||||
crop = list(map(int, page.split(',')))
|
||||
if len(crop) == 4:
|
||||
path = os.path.join(folder, '%s.jpg' % ','.join(map(str, crop)))
|
||||
if not os.path.exists(path):
|
||||
|
|
|
@ -1,9 +1,11 @@
|
|||
# -*- coding: utf-8 -*-
|
||||
# vi:si:et:sw=4:sts=4:ts=4
|
||||
from __future__ import division
|
||||
from __future__ import division, print_function, absolute_import
|
||||
|
||||
import os
|
||||
from glob import glob
|
||||
|
||||
from six import string_types
|
||||
import ox
|
||||
from ox.utils import json
|
||||
from oxdjango.api import actions
|
||||
|
@ -20,7 +22,7 @@ from entity.models import Entity
|
|||
from archive.chunk import process_chunk
|
||||
from changelog.models import add_changelog
|
||||
|
||||
import models
|
||||
from . import models
|
||||
|
||||
def get_document_or_404_json(id):
|
||||
try:
|
||||
|
@ -49,7 +51,7 @@ def addDocument(request, data):
|
|||
else:
|
||||
ids = [data['id']]
|
||||
if 'item' in data:
|
||||
if isinstance(data['item'], basestring):
|
||||
if isinstance(data['item'], string_types):
|
||||
item = Item.objects.get(public_id=data['item'])
|
||||
if item.editable(request.user):
|
||||
for id in ids:
|
||||
|
@ -66,7 +68,7 @@ def addDocument(request, data):
|
|||
document.add(item)
|
||||
add_changelog(request, data, data['item'])
|
||||
elif 'entity' in data:
|
||||
if isinstance(data['entity'], basestring):
|
||||
if isinstance(data['entity'], string_types):
|
||||
entity = Entity.get(data['entity'])
|
||||
if entity.editable(request.user):
|
||||
for id in ids:
|
||||
|
|
|
@ -1,15 +1,15 @@
|
|||
# -*- coding: utf-8 -*-
|
||||
# vi:si:et:sw=4:sts=4:ts=4
|
||||
from __future__ import division, with_statement
|
||||
from __future__ import division, print_function, absolute_import
|
||||
|
||||
import re
|
||||
import os
|
||||
import shutil
|
||||
from glob import glob
|
||||
import subprocess
|
||||
from urllib import quote
|
||||
import tempfile
|
||||
|
||||
from six.moves.urllib.parse import quote
|
||||
import ox
|
||||
from oxdjango.fields import DictField, TupleField
|
||||
from django.conf import settings
|
||||
|
@ -24,7 +24,7 @@ import clip.models
|
|||
|
||||
from archive import extract
|
||||
|
||||
import managers
|
||||
from . import managers
|
||||
|
||||
def get_path(f, x): return f.path(x)
|
||||
def get_icon_path(f, x): return get_path(f, 'icon.jpg')
|
||||
|
|
|
@ -1,6 +1,7 @@
|
|||
# -*- coding: utf-8 -*-
|
||||
# vi:si:et:sw=4:sts=4:ts=4
|
||||
from __future__ import division
|
||||
from __future__ import division, print_function, absolute_import
|
||||
|
||||
import os
|
||||
import re
|
||||
|
||||
|
@ -16,7 +17,7 @@ from django.conf import settings
|
|||
from item import utils
|
||||
from changelog.models import add_changelog
|
||||
|
||||
import models
|
||||
from . import models
|
||||
|
||||
def get_edit_or_404_json(id):
|
||||
id = id.split(':')
|
||||
|
@ -400,7 +401,7 @@ def findEdits(request, data):
|
|||
x['value'] == 'featured' and \
|
||||
x['operator'] in ('=', '==')
|
||||
|
||||
is_featured = len(filter(is_featured_condition, data.get('query', {}).get('conditions', []))) > 0
|
||||
is_featured = any(filter(is_featured_condition, data.get('query', {}).get('conditions', [])))
|
||||
|
||||
if is_section_request:
|
||||
qs = query['qs']
|
||||
|
|
|
@ -1,12 +1,14 @@
|
|||
# -*- coding: utf-8 -*-
|
||||
# vi:si:et:sw=4:sts=4:ts=4
|
||||
from __future__ import division, with_statement
|
||||
from __future__ import division, print_function, absolute_import
|
||||
|
||||
import os
|
||||
import re
|
||||
from glob import glob
|
||||
from urllib import quote, unquote
|
||||
import unicodedata
|
||||
|
||||
from six import string_types
|
||||
from six.moves.urllib.parse import quote, unquote
|
||||
from django.db import models, transaction
|
||||
from django.db.models import Max
|
||||
from django.contrib.auth.models import User
|
||||
|
@ -20,7 +22,7 @@ from person.models import get_name_sort
|
|||
from item.utils import get_by_id
|
||||
from document.models import Document
|
||||
|
||||
import managers
|
||||
from . import managers
|
||||
|
||||
|
||||
class Entity(models.Model):
|
||||
|
@ -139,7 +141,7 @@ class Entity(models.Model):
|
|||
self.alternativeNames = tuple(ox.escape_html(n) for n in names)
|
||||
else:
|
||||
#FIXME: more data validation
|
||||
if isinstance(data[key], basestring):
|
||||
if isinstance(data[key], string_types):
|
||||
self.data[key] = ox.sanitize_html(data[key])
|
||||
else:
|
||||
self.data[key] = data[key]
|
||||
|
@ -155,7 +157,7 @@ class Entity(models.Model):
|
|||
'type',
|
||||
'user',
|
||||
'documents',
|
||||
] + self.data.keys()
|
||||
] + list(self.data)
|
||||
response = {}
|
||||
for key in keys:
|
||||
if key == 'id':
|
||||
|
@ -186,7 +188,7 @@ class Entity(models.Model):
|
|||
f, created = Find.objects.get_or_create(entity=self, key=key)
|
||||
if isinstance(value, bool):
|
||||
value = value and 'true' or 'false'
|
||||
if isinstance(value, basestring):
|
||||
if isinstance(value, string_types):
|
||||
value = ox.decode_html(ox.strip_tags(value.strip()))
|
||||
value = unicodedata.normalize('NFKD', value).lower()
|
||||
f.value = value
|
||||
|
|
|
@ -1,7 +1,8 @@
|
|||
# -*- coding: utf-8 -*-
|
||||
# vi:si:et:sw=4:sts=4:ts=4
|
||||
from __future__ import division
|
||||
from __future__ import division, print_function, absolute_import
|
||||
|
||||
from six import string_types
|
||||
import ox
|
||||
from ox.utils import json
|
||||
from oxdjango.api import actions
|
||||
|
@ -18,8 +19,8 @@ from item.models import Item
|
|||
from itemlist.models import List
|
||||
from changelog.models import add_changelog
|
||||
|
||||
import models
|
||||
from managers import namePredicate
|
||||
from . import models
|
||||
from .managers import namePredicate
|
||||
|
||||
def get_entity_or_404_json(id):
|
||||
try:
|
||||
|
@ -64,7 +65,7 @@ def addEntity(request, data):
|
|||
for key in ('type', 'alternativeNames'):
|
||||
if key in data and data[key]:
|
||||
value = data[key]
|
||||
if isinstance(value, basestring):
|
||||
if isinstance(value, string_types):
|
||||
value = ox.escape_html(value)
|
||||
if key == 'alternativeNames':
|
||||
value = tuple([ox.escape_html(v) for v in value])
|
||||
|
|
|
@ -1,9 +1,10 @@
|
|||
# -*- coding: utf-8 -*-
|
||||
# vi:si:et:sw=4:sts=4:ts=4
|
||||
from __future__ import division, print_function, absolute_import
|
||||
|
||||
from django.contrib import admin
|
||||
|
||||
import models
|
||||
from . import models
|
||||
|
||||
|
||||
class EventAdmin(admin.ModelAdmin):
|
||||
|
|
|
@ -2,6 +2,7 @@
|
|||
# vi:si:et:sw=4:sts=4:ts=4
|
||||
import unicodedata
|
||||
|
||||
from six import string_types
|
||||
from django.db.models import Q, Manager
|
||||
|
||||
from oxdjango.query import QuerySet
|
||||
|
@ -30,7 +31,7 @@ def parseCondition(condition, user):
|
|||
|
||||
key = k + get_operator(op, 'istr')
|
||||
key = str(key)
|
||||
if isinstance(v, unicode):
|
||||
if isinstance(v, string_types):
|
||||
v = unicodedata.normalize('NFKD', v).lower()
|
||||
if exclude:
|
||||
q = ~Q(**{k: v})
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
# -*- coding: utf-8 -*-
|
||||
# vi:si:et:sw=4:sts=4:ts=4
|
||||
from __future__ import division, with_statement
|
||||
from __future__ import division, print_function, absolute_import
|
||||
|
||||
from django.db import models, transaction
|
||||
from django.contrib.auth.models import User
|
||||
|
@ -13,7 +13,7 @@ from item import utils
|
|||
from person.models import get_name_sort
|
||||
from title.models import get_title_sort
|
||||
|
||||
import managers
|
||||
from . import managers
|
||||
|
||||
|
||||
class Event(models.Model):
|
||||
|
|
|
@ -1,9 +1,10 @@
|
|||
# -*- coding: utf-8 -*-
|
||||
# vi:si:et:sw=4:sts=4:ts=4
|
||||
from __future__ import division, print_function, absolute_import
|
||||
|
||||
from celery.task import task
|
||||
|
||||
from models import Event
|
||||
from .models import Event
|
||||
|
||||
|
||||
'''
|
||||
|
|
|
@ -1,10 +1,11 @@
|
|||
# -*- coding: utf-8 -*-
|
||||
# vi:si:et:sw=4:sts=4:ts=4
|
||||
from __future__ import division
|
||||
from __future__ import division, print_function, absolute_import
|
||||
|
||||
from django.db.models import Count
|
||||
from django.conf import settings
|
||||
|
||||
from six import string_types
|
||||
import ox
|
||||
from ox.utils import json
|
||||
from oxdjango.decorators import login_required_json
|
||||
|
@ -14,7 +15,7 @@ from oxdjango.api import actions
|
|||
from item import utils
|
||||
from changelog.models import add_changelog
|
||||
|
||||
import models
|
||||
from . import models
|
||||
|
||||
@login_required_json
|
||||
def addEvent(request, data):
|
||||
|
@ -47,7 +48,7 @@ def addEvent(request, data):
|
|||
'type', 'alternativeNames'):
|
||||
if key in data and data[key]:
|
||||
value = data[key]
|
||||
if isinstance(value, basestring):
|
||||
if isinstance(value, string_types):
|
||||
value = ox.escape_html(value)
|
||||
if key == 'alternativeNames':
|
||||
value = tuple([ox.escape_html(v) for v in value])
|
||||
|
@ -101,7 +102,7 @@ def editEvent(request, data):
|
|||
'type', 'alternativeNames'):
|
||||
if key in data:
|
||||
value = data[key]
|
||||
if isinstance(value, basestring):
|
||||
if isinstance(value, string_types):
|
||||
value = ox.escape_html(value)
|
||||
if key == 'alternativeNames':
|
||||
value = tuple([ox.escape_html(v) for v in value])
|
||||
|
|
|
@ -1,9 +1,10 @@
|
|||
# -*- coding: utf-8 -*-
|
||||
# vi:si:et:sw=4:sts=4:ts=4
|
||||
from __future__ import division, print_function, absolute_import
|
||||
|
||||
from django.contrib import admin
|
||||
|
||||
import models
|
||||
from . import models
|
||||
|
||||
|
||||
class ItemAdmin(admin.ModelAdmin):
|
||||
|
|
|
@ -1,16 +1,18 @@
|
|||
# -*- coding: utf-8 -*-
|
||||
# vi:si:et:sw=4:sts=4:ts=4
|
||||
from __future__ import division, print_function, absolute_import
|
||||
|
||||
from datetime import datetime
|
||||
import unicodedata
|
||||
|
||||
from six import string_types
|
||||
from django.db.models import Q, Manager
|
||||
from django.conf import settings
|
||||
|
||||
from archive.models import Volume
|
||||
from itemlist.models import List
|
||||
from django.contrib.auth.models import Group
|
||||
import models
|
||||
import utils
|
||||
from . import utils
|
||||
|
||||
from oxdjango.query import QuerySet
|
||||
from oxdjango.managers import get_operator
|
||||
|
@ -29,6 +31,7 @@ def parseCondition(condition, user, owner=None):
|
|||
}
|
||||
...
|
||||
'''
|
||||
from . import models
|
||||
k = condition.get('key', '*')
|
||||
k = {'id': 'public_id'}.get(k, k)
|
||||
if not k:
|
||||
|
@ -119,7 +122,7 @@ def parseCondition(condition, user, owner=None):
|
|||
else:
|
||||
value_key = k
|
||||
if not k.startswith('public_id'):
|
||||
if isinstance(v, unicode):
|
||||
if isinstance(v, string_types):
|
||||
v = unicodedata.normalize('NFKD', v).lower()
|
||||
if k in facet_keys:
|
||||
in_find = False
|
||||
|
@ -237,6 +240,7 @@ class ItemManager(Manager):
|
|||
return QuerySet(self.model)
|
||||
|
||||
def filter_list(self, qs, l, user):
|
||||
from . import models
|
||||
if l != "*":
|
||||
l = l.split(":")
|
||||
only_public = True
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
# -*- coding: utf-8 -*-
|
||||
# vi:si:et:sw=4:sts=4:ts=4
|
||||
from __future__ import division, with_statement
|
||||
from __future__ import division, print_function, absolute_import
|
||||
|
||||
import json
|
||||
import os
|
||||
|
@ -12,8 +12,9 @@ import unicodedata
|
|||
import uuid
|
||||
from datetime import datetime
|
||||
from glob import glob
|
||||
from urllib import quote
|
||||
|
||||
from six import PY2, string_types
|
||||
from six.moves.urllib.parse import quote
|
||||
from django.db import models, transaction, connection
|
||||
from django.db.models import Q, Sum, Max
|
||||
from django.conf import settings
|
||||
|
@ -26,11 +27,11 @@ from oxdjango import fields
|
|||
import ox.web.imdb
|
||||
import ox.image
|
||||
|
||||
import managers
|
||||
import utils
|
||||
import tasks
|
||||
from . import managers
|
||||
from . import utils
|
||||
from . import tasks
|
||||
from .timelines import join_tiles
|
||||
from data_api import external_data
|
||||
from .data_api import external_data
|
||||
|
||||
from annotation.models import Annotation
|
||||
from archive import extract
|
||||
|
@ -40,6 +41,10 @@ from sequence.tasks import get_sequences
|
|||
from title.models import get_title_sort
|
||||
import archive.models
|
||||
|
||||
|
||||
if not PY2:
|
||||
unicode = str
|
||||
|
||||
def get_id(info):
|
||||
q = Item.objects.all()
|
||||
for key in ('title', 'director', 'year'):
|
||||
|
@ -270,7 +275,7 @@ class Item(models.Model):
|
|||
if key in self.data:
|
||||
del self.data[key]
|
||||
else:
|
||||
k = filter(lambda i: i['id'] == key, settings.CONFIG['itemKeys'])
|
||||
k = list(filter(lambda i: i['id'] == key, settings.CONFIG['itemKeys']))
|
||||
ktype = k and k[0].get('type') or ''
|
||||
if ktype == 'text':
|
||||
self.data[key] = ox.sanitize_html(data[key])
|
||||
|
@ -280,11 +285,11 @@ class Item(models.Model):
|
|||
self.data[key] = [ox.escape_html(t) for t in data[key]]
|
||||
elif key in ('episodeTitle', 'seriesTitle', 'episodeDirector', 'seriesYear'):
|
||||
self.data[key] = ox.escape_html(data[key])
|
||||
elif isinstance(data[key], basestring):
|
||||
elif isinstance(data[key], string_types):
|
||||
self.data[key] = ox.escape_html(data[key])
|
||||
elif isinstance(data[key], list):
|
||||
def cleanup(i):
|
||||
if isinstance(i, basestring):
|
||||
if isinstance(i, string_types):
|
||||
i = ox.escape_html(i)
|
||||
return i
|
||||
self.data[key] = [cleanup(i) for i in data[key]]
|
||||
|
@ -314,9 +319,9 @@ class Item(models.Model):
|
|||
def expand_connections(self):
|
||||
c = self.get('connections')
|
||||
if c:
|
||||
for t in c.keys():
|
||||
for t in list(c):
|
||||
if c[t]:
|
||||
if isinstance(c[t][0], basestring):
|
||||
if isinstance(c[t][0], string_types):
|
||||
c[t] = [{'id': i, 'title': None} for i in c[t]]
|
||||
ids = [i['id'] for i in c[t]]
|
||||
known = {}
|
||||
|
@ -442,7 +447,7 @@ class Item(models.Model):
|
|||
|
||||
def delete_files(self):
|
||||
path = os.path.join(settings.MEDIA_ROOT, self.path())
|
||||
if isinstance(path, unicode):
|
||||
if not isinstance(path, bytes):
|
||||
path = path.encode('utf-8')
|
||||
if os.path.exists(path):
|
||||
shutil.rmtree(path)
|
||||
|
@ -498,7 +503,7 @@ class Item(models.Model):
|
|||
if settings.DATA_SERVICE:
|
||||
url = self.prefered_poster_url()
|
||||
external_posters = self.external_data.get('posters', {})
|
||||
services = external_posters.keys()
|
||||
services = list(external_posters)
|
||||
for service in settings.POSTER_PRECEDENCE:
|
||||
if service in services:
|
||||
index.append(service)
|
||||
|
@ -593,7 +598,7 @@ class Item(models.Model):
|
|||
if value:
|
||||
i[key] = value
|
||||
|
||||
if 'cast' in i and isinstance(i['cast'][0], basestring):
|
||||
if 'cast' in i and isinstance(i['cast'][0], string_types):
|
||||
i['cast'] = [i['cast']]
|
||||
if 'cast' in i and isinstance(i['cast'][0], list):
|
||||
i['cast'] = [{'actor': x[0], 'character': x[1]} for x in i['cast']]
|
||||
|
@ -639,7 +644,7 @@ class Item(models.Model):
|
|||
if keys and 'frames' in keys:
|
||||
i['frames'] = frames
|
||||
|
||||
selected_frame = filter(lambda f: f['selected'], frames)
|
||||
selected_frame = [f for f in frames if f['selected']]
|
||||
if selected_frame:
|
||||
i['posterFrame'] = selected_frame[0]['position']
|
||||
elif self.poster_frame != -1.0:
|
||||
|
@ -650,7 +655,7 @@ class Item(models.Model):
|
|||
if keys:
|
||||
dkeys = filter(lambda k: k in keys, dkeys)
|
||||
for key in dkeys:
|
||||
k = filter(lambda i: i['id'] == key, settings.CONFIG['itemKeys'])
|
||||
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':
|
||||
|
@ -760,7 +765,7 @@ class Item(models.Model):
|
|||
f, created = ItemFind.objects.get_or_create(item=self, key=key)
|
||||
if isinstance(value, bool):
|
||||
value = value and 'true' or 'false'
|
||||
if isinstance(value, basestring):
|
||||
if isinstance(value, string_types):
|
||||
value = ox.decode_html(ox.strip_tags(value.strip()))
|
||||
value = unicodedata.normalize('NFKD', value).lower()
|
||||
f.value = value
|
||||
|
@ -879,7 +884,7 @@ class Item(models.Model):
|
|||
return sort_value
|
||||
|
||||
def set_value(s, name, value):
|
||||
if isinstance(value, basestring):
|
||||
if isinstance(value, string_types):
|
||||
value = ox.decode_html(value.lower())
|
||||
if not value:
|
||||
value = None
|
||||
|
@ -1011,7 +1016,7 @@ class Item(models.Model):
|
|||
set_value(s, name, value)
|
||||
elif sort_type == 'date':
|
||||
value = self.get(source)
|
||||
if isinstance(value, basestring):
|
||||
if isinstance(value, string_types):
|
||||
value = datetime_safe.datetime.strptime(value, '%Y-%m-%d')
|
||||
set_value(s, name, value)
|
||||
|
||||
|
@ -1045,6 +1050,7 @@ class Item(models.Model):
|
|||
current_values = []
|
||||
else:
|
||||
current_values = [unicode(current_values)]
|
||||
|
||||
filter_map = utils.get_by_id(settings.CONFIG['itemKeys'], key).get('filterMap')
|
||||
if filter_map:
|
||||
filter_map = re.compile(filter_map)
|
||||
|
@ -1231,7 +1237,7 @@ class Item(models.Model):
|
|||
return
|
||||
base = self.path('torrent')
|
||||
base = os.path.abspath(os.path.join(settings.MEDIA_ROOT, base))
|
||||
if isinstance(base, unicode):
|
||||
if not isinstance(base, bytes):
|
||||
base = base.encode('utf-8')
|
||||
if os.path.exists(base):
|
||||
shutil.rmtree(base)
|
||||
|
@ -1250,9 +1256,9 @@ class Item(models.Model):
|
|||
quote(filename.encode('utf-8')),
|
||||
extension)
|
||||
video = "%s.%s" % (base, extension)
|
||||
if isinstance(media_path, unicode):
|
||||
if not isinstance(media_path, bytes):
|
||||
media_path = media_path.encode('utf-8')
|
||||
if isinstance(video, unicode):
|
||||
if not isinstance(video, bytes):
|
||||
video = video.encode('utf-8')
|
||||
media_path = os.path.relpath(media_path, os.path.dirname(video))
|
||||
os.symlink(media_path, video)
|
||||
|
@ -1267,9 +1273,9 @@ class Item(models.Model):
|
|||
extension = media_path.split('.')[-1]
|
||||
video = "%s/%s.Part %d.%s" % (base, filename, part, extension)
|
||||
part += 1
|
||||
if isinstance(media_path, unicode):
|
||||
if not isinstance(media_path, bytes):
|
||||
media_path = media_path.encode('utf-8')
|
||||
if isinstance(video, unicode):
|
||||
if not isinstance(video, bytes):
|
||||
video = video.encode('utf-8')
|
||||
media_path = os.path.relpath(media_path, os.path.dirname(video))
|
||||
os.symlink(media_path, video)
|
||||
|
@ -1360,7 +1366,7 @@ class Item(models.Model):
|
|||
def save_poster(self, data):
|
||||
self.poster.name = self.path('poster.jpg')
|
||||
poster = self.poster.path
|
||||
with open(poster, 'w') as f:
|
||||
with open(poster, 'wb') as f:
|
||||
f.write(data)
|
||||
self.poster_height = self.poster.height
|
||||
self.poster_width = self.poster.width
|
||||
|
@ -1425,7 +1431,7 @@ class Item(models.Model):
|
|||
data = ox.net.read_url(url)
|
||||
self.save_poster(data)
|
||||
elif os.path.exists(poster):
|
||||
with open(poster) as f:
|
||||
with open(poster, 'rb') as f:
|
||||
data = f.read()
|
||||
if data:
|
||||
self.save_poster(data)
|
||||
|
@ -1450,7 +1456,7 @@ class Item(models.Model):
|
|||
data['oxdbId'] = self.oxdbId or self.oxdb_id() or self.public_id
|
||||
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))
|
||||
p.communicate(json.dumps(data, default=fields.to_json).encode('utf-8'))
|
||||
self.clear_poster_cache(poster)
|
||||
return poster
|
||||
|
||||
|
|
|
@ -1,5 +1,7 @@
|
|||
# -*- coding: utf-8 -*-
|
||||
# vi:si:et:sw=4:sts=4:ts=4
|
||||
from __future__ import division, print_function, absolute_import
|
||||
|
||||
import os
|
||||
from datetime import timedelta, datetime
|
||||
import gzip
|
||||
|
@ -15,8 +17,6 @@ from app.utils import limit_rate
|
|||
from text.models import Text
|
||||
from taskqueue.models import Task
|
||||
|
||||
import models
|
||||
|
||||
|
||||
@periodic_task(run_every=timedelta(days=1), queue='encoding')
|
||||
def cronjob(**kwargs):
|
||||
|
@ -25,6 +25,7 @@ def cronjob(**kwargs):
|
|||
update_random_clip_sort()
|
||||
|
||||
def update_random_sort():
|
||||
from . import models
|
||||
if filter(lambda f: f['id'] == 'random', settings.CONFIG['itemKeys']):
|
||||
random.seed()
|
||||
ids = [f['item'] for f in models.ItemSort.objects.values('item')]
|
||||
|
@ -52,11 +53,13 @@ def update_random_clip_sort():
|
|||
|
||||
@task(ignore_results=True, queue='default')
|
||||
def update_clips(public_id):
|
||||
from . import models
|
||||
item = models.Item.objects.get(public_id=public_id)
|
||||
item.clips.all().update(user=item.user.id)
|
||||
|
||||
@task(ignore_results=True, queue='default')
|
||||
def update_poster(public_id):
|
||||
from . import models
|
||||
item = models.Item.objects.get(public_id=public_id)
|
||||
item.remove_poster()
|
||||
item.make_poster()
|
||||
|
@ -71,22 +74,26 @@ def update_poster(public_id):
|
|||
|
||||
@task(ignore_results=True, queue='default')
|
||||
def update_file_paths(public_id):
|
||||
from . import models
|
||||
item = models.Item.objects.get(public_id=public_id)
|
||||
item.update_file_paths()
|
||||
|
||||
@task(ignore_results=True, queue='default')
|
||||
def update_external(public_id):
|
||||
from . import models
|
||||
item = models.Item.objects.get(public_id=public_id)
|
||||
item.update_external()
|
||||
|
||||
@task(queue="encoding")
|
||||
def update_timeline(public_id):
|
||||
from . import models
|
||||
item = models.Item.objects.get(public_id=public_id)
|
||||
item.update_timeline(async=False)
|
||||
Task.finish(item)
|
||||
|
||||
@task(queue="encoding")
|
||||
def rebuild_timeline(public_id):
|
||||
from . import models
|
||||
i = models.Item.objects.get(public_id=public_id)
|
||||
for s in i.streams():
|
||||
s.make_timeline()
|
||||
|
@ -94,6 +101,7 @@ def rebuild_timeline(public_id):
|
|||
|
||||
@task(queue="encoding")
|
||||
def load_subtitles(public_id):
|
||||
from . import models
|
||||
item = models.Item.objects.get(public_id=public_id)
|
||||
if item.load_subtitles():
|
||||
item.update_find()
|
||||
|
@ -102,6 +110,7 @@ def load_subtitles(public_id):
|
|||
|
||||
@task(ignore_results=True, queue='default')
|
||||
def update_sitemap(base_url):
|
||||
from . import models
|
||||
sitemap = os.path.abspath(os.path.join(settings.MEDIA_ROOT, 'sitemap.xml.gz'))
|
||||
|
||||
def absolute_url(url):
|
||||
|
|
|
@ -53,8 +53,8 @@ def plural_key(term):
|
|||
def sort_title(title):
|
||||
|
||||
title = title.replace(u'Æ', 'Ae')
|
||||
if isinstance(title, str):
|
||||
title = unicode(title)
|
||||
if isinstance(title, bytes):
|
||||
title = title.decode('utf-8')
|
||||
title = sort_string(title)
|
||||
|
||||
#title
|
||||
|
|
|
@ -1,13 +1,14 @@
|
|||
# -*- coding: utf-8 -*-
|
||||
# vi:si:et:sw=4:sts=4:ts=4
|
||||
from __future__ import division, print_function
|
||||
from __future__ import division, print_function, absolute_import
|
||||
|
||||
import os.path
|
||||
import mimetypes
|
||||
import random
|
||||
from urlparse import urlparse
|
||||
from urllib import quote
|
||||
import time
|
||||
|
||||
from six import PY2
|
||||
from six.moves.urllib.parse import quote, urlparse
|
||||
from PIL import Image
|
||||
from django.db.models import Count, Sum
|
||||
from django.http import HttpResponse, HttpResponseForbidden, Http404
|
||||
|
@ -23,9 +24,9 @@ from oxdjango.shortcuts import render_to_json_response, get_object_or_404_json,
|
|||
from oxdjango.http import HttpFileResponse
|
||||
import ox
|
||||
|
||||
import models
|
||||
import utils
|
||||
import tasks
|
||||
from . import models
|
||||
from . import utils
|
||||
from . import tasks
|
||||
|
||||
from archive.models import File, Stream
|
||||
from archive import extract
|
||||
|
@ -35,6 +36,8 @@ from changelog.models import add_changelog
|
|||
|
||||
from oxdjango.api import actions
|
||||
|
||||
if not PY2:
|
||||
unicode = str
|
||||
|
||||
def _order_query(qs, sort, prefix='sort__'):
|
||||
order_by = []
|
||||
|
@ -869,6 +872,7 @@ def timeline(request, id, size, position=-1, format='jpg', mode=None):
|
|||
modes.pop(modes.index(mode))
|
||||
|
||||
prefix = os.path.join(item.timeline_prefix, 'timeline')
|
||||
position = int(position)
|
||||
|
||||
def timeline():
|
||||
timeline = '%s%s%sp' % (prefix, mode, size)
|
||||
|
|
|
@ -1,6 +1,7 @@
|
|||
# -*- coding: utf-8 -*-
|
||||
# vi:si:et:sw=4:sts=4:ts=4
|
||||
from __future__ import division, with_statement
|
||||
from __future__ import division, print_function, absolute_import
|
||||
|
||||
import os
|
||||
import re
|
||||
import subprocess
|
||||
|
@ -15,7 +16,9 @@ import ox
|
|||
from oxdjango.fields import DictField, TupleField
|
||||
|
||||
from archive import extract
|
||||
import managers
|
||||
|
||||
from . import managers
|
||||
|
||||
|
||||
def get_path(f, x): return f.path(x)
|
||||
def get_icon_path(f, x): return get_path(f, 'icon.jpg')
|
||||
|
|
|
@ -1,6 +1,7 @@
|
|||
# -*- coding: utf-8 -*-
|
||||
# vi:si:et:sw=4:sts=4:ts=4
|
||||
from __future__ import division
|
||||
from __future__ import division, print_function, absolute_import
|
||||
|
||||
import os
|
||||
import re
|
||||
|
||||
|
@ -13,7 +14,7 @@ from oxdjango.shortcuts import render_to_json_response, get_object_or_404_json,
|
|||
from oxdjango.http import HttpFileResponse
|
||||
|
||||
|
||||
import models
|
||||
from . import models
|
||||
from oxdjango.api import actions
|
||||
from item import utils
|
||||
from item.models import Item
|
||||
|
|
|
@ -1,12 +1,12 @@
|
|||
# -*- coding: utf-8 -*-
|
||||
# vi:si:et:sw=4:sts=4:ts=4
|
||||
from __future__ import division, with_statement
|
||||
from __future__ import division, print_function, absolute_import
|
||||
|
||||
from django.db import models
|
||||
from django.contrib.auth.models import User
|
||||
import ox
|
||||
|
||||
import managers
|
||||
from . import managers
|
||||
|
||||
class Log(models.Model):
|
||||
created = models.DateTimeField(auto_now_add=True, db_index=True)
|
||||
|
@ -32,7 +32,7 @@ class Log(models.Model):
|
|||
'user': self.user and self.user.username or '',
|
||||
}
|
||||
if keys:
|
||||
for key in j.keys():
|
||||
for key in list(j):
|
||||
if key not in keys:
|
||||
del j[key]
|
||||
return j
|
||||
|
|
|
@ -1,10 +1,12 @@
|
|||
# -*- coding: utf-8 -*-
|
||||
# vi:si:et:sw=4:sts=4:ts=4
|
||||
from __future__ import division, print_function, absolute_import
|
||||
|
||||
from datetime import timedelta, datetime
|
||||
|
||||
from celery.task import periodic_task
|
||||
|
||||
import models
|
||||
from . import models
|
||||
|
||||
@periodic_task(run_every=timedelta(days=1), queue='encoding')
|
||||
def cronjob(**kwargs):
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
# -*- coding: utf-8 -*-
|
||||
# vi:si:et:sw=4:sts=4:ts=4
|
||||
from __future__ import division, with_statement
|
||||
from __future__ import division, print_function, absolute_import
|
||||
|
||||
import logging
|
||||
import sys
|
||||
|
@ -19,7 +19,7 @@ class ErrorHandler(logging.Handler):
|
|||
import traceback
|
||||
from django.views.debug import ExceptionReporter
|
||||
from django.conf import settings
|
||||
import models
|
||||
from . import models
|
||||
user = None
|
||||
line = 0
|
||||
text = ''
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
# -*- coding: utf-8 -*-
|
||||
# vi:si:et:sw=4:sts=4:ts=4
|
||||
from __future__ import division
|
||||
from __future__ import division, print_function, absolute_import
|
||||
|
||||
import ox
|
||||
from ox.utils import json
|
||||
|
@ -12,7 +12,7 @@ from oxdjango.api import actions
|
|||
|
||||
from item import utils
|
||||
|
||||
import models
|
||||
from . import models
|
||||
|
||||
|
||||
def logError(request, data):
|
||||
|
|
|
@ -7,7 +7,10 @@ os.chdir(root_dir)
|
|||
|
||||
# using virtualenv's activate_this.py to reorder sys.path
|
||||
activate_this = os.path.join(root_dir, '..', 'bin', 'activate_this.py')
|
||||
execfile(activate_this, dict(__file__=activate_this))
|
||||
with open(activate_this) as f:
|
||||
code = compile(f.read(), activate_this, 'exec')
|
||||
exec(code, dict(__file__=activate_this))
|
||||
# execfile(activate_this, dict(__file__=activate_this))
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
|
|
|
@ -1,9 +1,10 @@
|
|||
# -*- coding: utf-8 -*-
|
||||
# vi:si:et:sw=4:sts=4:ts=4
|
||||
from __future__ import division, print_function, absolute_import
|
||||
|
||||
from django.contrib import admin
|
||||
|
||||
import models
|
||||
from . import models
|
||||
|
||||
|
||||
class NewsAdmin(admin.ModelAdmin):
|
||||
|
|
|
@ -1,11 +1,11 @@
|
|||
# -*- coding: utf-8 -*-
|
||||
# vi:si:et:sw=4:sts=4:ts=4
|
||||
from __future__ import division, with_statement
|
||||
from __future__ import division, print_function, absolute_import
|
||||
|
||||
from django.db import models
|
||||
import ox
|
||||
|
||||
import managers
|
||||
from . import managers
|
||||
|
||||
|
||||
class News(models.Model):
|
||||
|
@ -35,7 +35,7 @@ class News(models.Model):
|
|||
'text': self.text,
|
||||
}
|
||||
if keys:
|
||||
for key in j.keys():
|
||||
for key in list(j):
|
||||
if key not in keys:
|
||||
del j[key]
|
||||
return j
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
# -*- coding: utf-8 -*-
|
||||
# vi:si:et:sw=4:sts=4:ts=4
|
||||
from __future__ import division
|
||||
from __future__ import division, print_function, absolute_import
|
||||
|
||||
import ox
|
||||
from ox.utils import json
|
||||
|
@ -11,7 +11,7 @@ from oxdjango.shortcuts import render_to_json_response, get_object_or_404_json,
|
|||
from oxdjango.api import actions
|
||||
from changelog.models import add_changelog
|
||||
|
||||
import models
|
||||
from . import models
|
||||
|
||||
def getNews(request, data):
|
||||
'''
|
||||
|
|
|
@ -1 +1,3 @@
|
|||
from actions import actions
|
||||
from __future__ import absolute_import
|
||||
|
||||
from .actions import actions
|
||||
|
|
|
@ -1,6 +1,7 @@
|
|||
# -*- coding: utf-8 -*-
|
||||
# vi:si:et:sw=4:sts=4:ts=4
|
||||
from __future__ import division, with_statement
|
||||
from __future__ import division, absolute_import
|
||||
|
||||
import inspect
|
||||
import sys
|
||||
|
||||
|
@ -8,7 +9,7 @@ from django.conf import settings
|
|||
|
||||
from ..shortcuts import render_to_json_response, json_response
|
||||
|
||||
def autodiscover():
|
||||
def autodiscover(self=None):
|
||||
# Register api actions from all installed apps
|
||||
from importlib import import_module
|
||||
from django.utils.module_loading import module_has_submodule
|
||||
|
@ -50,6 +51,9 @@ def trim(docstring):
|
|||
class ApiActions(dict):
|
||||
properties = {}
|
||||
versions = {}
|
||||
|
||||
autodiscover = autodiscover
|
||||
|
||||
def __init__(self):
|
||||
|
||||
def api(request, data):
|
||||
|
@ -74,10 +78,10 @@ class ApiActions(dict):
|
|||
code = data.get('code', False)
|
||||
version = getattr(request, 'version', None)
|
||||
if version:
|
||||
_actions = self.versions.get(version, {}).keys()
|
||||
_actions = list(set(_actions + self.keys()))
|
||||
_actions = list(self.versions.get(version, {}))
|
||||
_actions = list(set(_actions + list(self)))
|
||||
else:
|
||||
_actions = self.keys()
|
||||
_actions = list(self)
|
||||
_actions.sort()
|
||||
actions = {}
|
||||
for a in _actions:
|
||||
|
@ -111,7 +115,10 @@ class ApiActions(dict):
|
|||
|
||||
def register(self, method, action=None, cache=True, version=None):
|
||||
if not action:
|
||||
if hasattr(method, 'func_name'):
|
||||
action = method.func_name
|
||||
else:
|
||||
action = method.__name__
|
||||
if version:
|
||||
if not version in self.versions:
|
||||
self.versions[version] = {}
|
||||
|
|
|
@ -1,11 +1,12 @@
|
|||
# -*- coding: utf-8 -*-
|
||||
# vi:si:et:sw=4:sts=4:ts=4
|
||||
from __future__ import absolute_import
|
||||
|
||||
from django.conf.urls import url
|
||||
|
||||
import views
|
||||
from . import views
|
||||
|
||||
import actions
|
||||
from . import actions
|
||||
actions.autodiscover()
|
||||
|
||||
urlpatterns = [
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
# -*- coding: utf-8 -*-
|
||||
# vi:si:et:sw=4:sts=4:ts=4
|
||||
from __future__ import division, with_statement
|
||||
from __future__ import division, absolute_import
|
||||
|
||||
import json
|
||||
|
||||
|
@ -10,7 +10,7 @@ from django.conf import settings
|
|||
|
||||
from ..shortcuts import render_to_json_response, json_response, HttpErrorJson
|
||||
|
||||
from actions import actions
|
||||
from .actions import actions
|
||||
|
||||
def api(request):
|
||||
if request.META['REQUEST_METHOD'] == "OPTIONS":
|
||||
|
@ -21,7 +21,7 @@ def api(request):
|
|||
if request.META['REQUEST_METHOD'] != "POST" or (
|
||||
not 'action' in request.POST and request.META.get('CONTENT_TYPE') != 'application/json'
|
||||
):
|
||||
methods = actions.keys()
|
||||
methods = list(actions)
|
||||
api = []
|
||||
for f in sorted(methods):
|
||||
api.append({'name': f,
|
||||
|
|
|
@ -1,11 +1,12 @@
|
|||
# -*- coding: utf-8 -*-
|
||||
# vi:si:et:sw=4:sts=4:ts=4
|
||||
from __future__ import absolute_import
|
||||
|
||||
try:
|
||||
from django.contrib.auth.decorators import wraps
|
||||
except:
|
||||
from django.utils.functional import wraps
|
||||
from shortcuts import render_to_json_response
|
||||
from .shortcuts import render_to_json_response
|
||||
|
||||
def login_required_json(function=None):
|
||||
"""
|
||||
|
|
|
@ -33,9 +33,10 @@ def render_to_json_response(dictionary, content_type="text/json", status=200):
|
|||
indent = 2
|
||||
if getattr(settings, 'JSON_DEBUG', False):
|
||||
print(json.dumps(dictionary, indent=2, default=_to_json, ensure_ascii=False).encode('utf-8'))
|
||||
|
||||
return HttpResponse(json.dumps(dictionary, indent=indent, default=_to_json,
|
||||
ensure_ascii=False).encode('utf-8'), content_type=content_type, status=status)
|
||||
response = json.dumps(dictionary, indent=indent, default=_to_json, ensure_ascii=False)
|
||||
if not isinstance(response, bytes):
|
||||
response = response.encode('utf-8')
|
||||
return HttpResponse(response, content_type=content_type, status=status)
|
||||
|
||||
def get_object_or_404_json(klass, *args, **kwargs):
|
||||
from django.shortcuts import _get_queryset
|
||||
|
|
|
@ -2,6 +2,7 @@
|
|||
# vi:si:et:sw=4:sts=4:ts=4
|
||||
import unicodedata
|
||||
|
||||
from six import string_types
|
||||
from django.db.models import Q, Manager
|
||||
|
||||
from item.utils import decode_id
|
||||
|
@ -56,7 +57,7 @@ def parseCondition(condition, user):
|
|||
else:
|
||||
key = k + get_operator(op, 'istr')
|
||||
key = str(key)
|
||||
if isinstance(v, unicode):
|
||||
if isinstance(v, string_types):
|
||||
v = unicodedata.normalize('NFKD', v).lower()
|
||||
if exclude:
|
||||
q = ~Q(**{key: v})
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
# -*- coding: utf-8 -*-
|
||||
# vi:si:et:sw=4:sts=4:ts=4
|
||||
from __future__ import division, with_statement
|
||||
from __future__ import division, print_function, absolute_import
|
||||
|
||||
import unicodedata
|
||||
|
||||
|
@ -12,8 +12,7 @@ import ox
|
|||
from item import utils
|
||||
import item.models
|
||||
|
||||
import managers
|
||||
import tasks
|
||||
from . import managers
|
||||
|
||||
def get_name_sort(name, sortname=None):
|
||||
name = unicodedata.normalize('NFKD', name).strip()
|
||||
|
@ -95,7 +94,7 @@ class Person(models.Model):
|
|||
'numberofnames': self.numberofnames,
|
||||
}
|
||||
if keys:
|
||||
for key in j.keys():
|
||||
for key in list(j):
|
||||
if key not in keys:
|
||||
del j[key]
|
||||
return j
|
||||
|
|
|
@ -1,8 +1,10 @@
|
|||
# -*- coding: utf-8 -*-
|
||||
# vi:si:et:sw=4:sts=4:ts=4
|
||||
from __future__ import division, print_function, absolute_import
|
||||
|
||||
from celery.task import task
|
||||
|
||||
import models
|
||||
from . import models
|
||||
|
||||
|
||||
@task(ignore_results=True, queue='default')
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
# -*- coding: utf-8 -*-
|
||||
# vi:si:et:sw=4:sts=4:ts=4
|
||||
from __future__ import division
|
||||
from __future__ import division, print_function, absolute_import
|
||||
|
||||
import ox
|
||||
from ox.utils import json
|
||||
|
@ -11,8 +11,8 @@ from oxdjango.shortcuts import render_to_json_response, get_object_or_404_json,
|
|||
from oxdjango.api import actions
|
||||
from item import utils
|
||||
|
||||
import models
|
||||
import tasks
|
||||
from . import models
|
||||
from . import tasks
|
||||
from user.decorators import capability_required_json
|
||||
from changelog.models import add_changelog
|
||||
|
||||
|
|
|
@ -1,9 +1,10 @@
|
|||
# -*- coding: utf-8 -*-
|
||||
# vi:si:et:sw=4:sts=4:ts=4
|
||||
from __future__ import division, print_function, absolute_import
|
||||
|
||||
from django.contrib import admin
|
||||
|
||||
import models
|
||||
from . import models
|
||||
|
||||
|
||||
class PlaceAdmin(admin.ModelAdmin):
|
||||
|
|
|
@ -2,6 +2,7 @@
|
|||
# vi:si:et:sw=4:sts=4:ts=4
|
||||
import unicodedata
|
||||
|
||||
from six import string_types
|
||||
from django.db.models import Q, Manager
|
||||
|
||||
from item.utils import decode_id
|
||||
|
@ -55,7 +56,7 @@ def parseCondition(condition, user):
|
|||
key = k + get_operator(op, 'istr')
|
||||
|
||||
key = str(key)
|
||||
if isinstance(v, unicode):
|
||||
if isinstance(v, string_types):
|
||||
v = unicodedata.normalize('NFKD', v).lower()
|
||||
|
||||
if exclude:
|
||||
|
|
|
@ -1,16 +1,17 @@
|
|||
# -*- coding: utf-8 -*-
|
||||
# vi:si:et:sw=4:sts=4:ts=4
|
||||
from __future__ import division, with_statement
|
||||
from __future__ import division, print_function, absolute_import
|
||||
|
||||
from django.db import models, transaction
|
||||
from django.contrib.auth.models import User
|
||||
import ox
|
||||
from oxdjango import fields
|
||||
|
||||
import managers
|
||||
from annotation.models import Annotation, get_matches, get_super_matches
|
||||
from item.models import Item
|
||||
|
||||
from . import managers
|
||||
|
||||
|
||||
class Place(models.Model):
|
||||
'''
|
||||
|
|
|
@ -1,9 +1,10 @@
|
|||
# -*- coding: utf-8 -*-
|
||||
# vi:si:et:sw=4:sts=4:ts=4
|
||||
from __future__ import division, print_function, absolute_import
|
||||
|
||||
from celery.task import task
|
||||
|
||||
import models
|
||||
from . import models
|
||||
|
||||
|
||||
'''
|
||||
|
|
|
@ -1,10 +1,11 @@
|
|||
# -*- coding: utf-8 -*-
|
||||
# vi:si:et:sw=4:sts=4:ts=4
|
||||
from __future__ import division
|
||||
from __future__ import division, print_function, absolute_import
|
||||
|
||||
from django.db.models import Max, Min, Count
|
||||
from django.conf import settings
|
||||
|
||||
from six import string_types
|
||||
import ox
|
||||
from ox.utils import json
|
||||
|
||||
|
@ -15,7 +16,7 @@ from oxdjango.api import actions
|
|||
from item import utils
|
||||
from changelog.models import add_changelog
|
||||
|
||||
import models
|
||||
from . import models
|
||||
|
||||
@login_required_json
|
||||
def addPlace(request, data):
|
||||
|
@ -116,7 +117,7 @@ def editPlace(request, data):
|
|||
'''
|
||||
place = get_object_or_404_json(models.Place, pk=ox.fromAZ(data['id']))
|
||||
names = data.get('name', [])
|
||||
if isinstance(names, basestring):
|
||||
if isinstance(names, string_types):
|
||||
names = [names]
|
||||
names = [ox.escape_html(n) for n in names]
|
||||
alternative_names = [ox.escape_html(n) for n in data.get('alternativeNames', [])]
|
||||
|
@ -145,7 +146,7 @@ def editPlace(request, data):
|
|||
for key in data:
|
||||
if key != 'id':
|
||||
value = data[key]
|
||||
if isinstance(value, basestring):
|
||||
if isinstance(value, string_types):
|
||||
value = ox.escape_html(value)
|
||||
if isinstance(value, list):
|
||||
value = tuple(value)
|
||||
|
|
|
@ -1,5 +1,7 @@
|
|||
# -*- coding: utf-8 -*-
|
||||
# vi:si:et:sw=4:sts=4:ts=4
|
||||
from __future__ import division, print_function, absolute_import
|
||||
|
||||
from django.db.models import Q, Manager
|
||||
|
||||
|
||||
|
@ -7,8 +9,6 @@ from item.utils import decode_id
|
|||
from oxdjango.managers import get_operator
|
||||
from oxdjango.query import QuerySet
|
||||
|
||||
import models
|
||||
|
||||
keymap = {
|
||||
'in': 'start',
|
||||
'out': 'end'
|
||||
|
@ -29,6 +29,7 @@ def parseCondition(condition, user):
|
|||
operator: "!="
|
||||
}
|
||||
'''
|
||||
from . import models
|
||||
k = condition.get('key', default_key)
|
||||
k = keymap.get(k, k)
|
||||
if not k:
|
||||
|
|
|
@ -1,12 +1,13 @@
|
|||
# -*- coding: utf-8 -*-
|
||||
# vi:si:et:sw=4:sts=4:ts=4
|
||||
from __future__ import division, with_statement
|
||||
from __future__ import division, print_function, absolute_import
|
||||
|
||||
from django.db import models
|
||||
|
||||
import managers
|
||||
from item.models import ItemSort
|
||||
|
||||
from . import managers
|
||||
|
||||
|
||||
def parse_hash(value):
|
||||
return int(value, 16) - 9223372036854775808
|
||||
|
@ -22,7 +23,7 @@ class Sequence(models.Model):
|
|||
'shape': 0,
|
||||
'color': 1
|
||||
}
|
||||
mode = models.IntegerField(choices=sorted(zip(MODE.values(), MODE.keys()), key=lambda k: k[0]), default=0)
|
||||
mode = models.IntegerField(choices=sorted(zip(MODE.values(), list(MODE)), key=lambda k: k[0]), default=0)
|
||||
sort = models.ForeignKey(ItemSort, null=True, related_name='sequences')
|
||||
|
||||
hash = models.BigIntegerField(db_index=True, default=-9223372036854775808)
|
||||
|
|
|
@ -1,14 +1,17 @@
|
|||
# -*- coding: utf-8 -*-
|
||||
# vi:si:et:sw=4:sts=4:ts=4
|
||||
from __future__ import division, print_function, absolute_import
|
||||
|
||||
from six import string_types
|
||||
from django.db import connection, transaction
|
||||
from celery.task import task
|
||||
|
||||
import models
|
||||
import item.models
|
||||
import extract
|
||||
from . import extract
|
||||
|
||||
@task(ignore_results=True, queue='encoding')
|
||||
def get_sequences(public_id):
|
||||
from . import models
|
||||
i = item.models.Item.objects.get(public_id=public_id)
|
||||
models.Sequence.objects.filter(sort=i.sort).delete()
|
||||
position = 0
|
||||
|
@ -29,7 +32,7 @@ def get_sequences(public_id):
|
|||
sequence['duration'] = sequence['end'] - sequence['start']
|
||||
if not keys:
|
||||
keys = ', '.join(['"%s"'%k for k in sequence.keys()])
|
||||
v = ', '.join([isinstance(v, basestring) and "'%s'"%v or str(v)
|
||||
v = ', '.join([isinstance(v, string_types) and "'%s'"%v or str(v)
|
||||
for v in sequence.values()])
|
||||
values.append('(%s)'%v)
|
||||
if values:
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
# -*- coding: utf-8 -*-
|
||||
# vi:si:et:sw=4:sts=4:ts=4
|
||||
from __future__ import division
|
||||
from __future__ import division, print_function, absolute_import
|
||||
|
||||
from ox.utils import json
|
||||
from oxdjango.shortcuts import render_to_json_response, json_response
|
||||
|
@ -11,7 +11,7 @@ from item.models import Item
|
|||
from item import utils
|
||||
from changelog.models import add_changelog
|
||||
|
||||
import models
|
||||
from . import models
|
||||
|
||||
|
||||
def parse_query(data, user):
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
# -*- coding: utf-8 -*-
|
||||
# vi:si:et:sw=4:sts=4:ts=4
|
||||
from __future__ import division, print_function
|
||||
from __future__ import division, print_function, absolute_import
|
||||
|
||||
from datetime import datetime, timedelta
|
||||
from time import time
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
# -*- coding: utf-8 -*-
|
||||
# vi:si:et:sw=4:sts=4:ts=4
|
||||
from __future__ import division
|
||||
from __future__ import division, print_function, absolute_import
|
||||
|
||||
import ox
|
||||
from oxdjango.decorators import login_required_json
|
||||
|
|
|
@ -1,12 +1,13 @@
|
|||
# -*- coding: utf-8 -*-
|
||||
# vi:si:et:sw=4:sts=4:ts=4
|
||||
from __future__ import division, with_statement
|
||||
from __future__ import division, print_function, absolute_import
|
||||
|
||||
import os
|
||||
import re
|
||||
import subprocess
|
||||
from glob import glob
|
||||
from urllib import quote
|
||||
|
||||
from six.moves.urllib.parse import quote
|
||||
from django.db import models
|
||||
from django.db.models import Max
|
||||
from django.contrib.auth.models import User
|
||||
|
@ -18,7 +19,7 @@ from oxdjango.fields import TupleField
|
|||
from archive import extract
|
||||
from archive.chunk import save_chunk
|
||||
|
||||
import managers
|
||||
from . import managers
|
||||
|
||||
|
||||
def get_path(i, x): return i.path(x)
|
||||
|
@ -217,7 +218,7 @@ class Text(models.Model):
|
|||
else:
|
||||
response['names'] = re.compile('<[^<>]*?data-name="(.+?)"').findall(self.text)
|
||||
|
||||
for key in response.keys():
|
||||
for key in list(response):
|
||||
if key not in keys + default_keys:
|
||||
del response[key]
|
||||
return response
|
||||
|
|
|
@ -1,6 +1,7 @@
|
|||
# -*- coding: utf-8 -*-
|
||||
# vi:si:et:sw=4:sts=4:ts=4
|
||||
from __future__ import division
|
||||
from __future__ import division, print_function, absolute_import
|
||||
|
||||
import os
|
||||
import re
|
||||
|
||||
|
@ -17,7 +18,7 @@ from django.shortcuts import render
|
|||
|
||||
from item import utils
|
||||
from archive.chunk import process_chunk
|
||||
import models
|
||||
from . import models
|
||||
from changelog.models import add_changelog
|
||||
|
||||
def get_text_or_404_json(id):
|
||||
|
|
|
@ -1,6 +1,8 @@
|
|||
# -*- coding: utf-8 -*-
|
||||
# vi:si:et:sw=4:sts=4:ts=4
|
||||
import unicodedata
|
||||
|
||||
from six import string_types
|
||||
from django.db.models import Q, Manager
|
||||
|
||||
from item.utils import decode_id
|
||||
|
@ -46,7 +48,7 @@ def parseCondition(condition, user):
|
|||
return q
|
||||
if k == 'id':
|
||||
v = decode_id(v)
|
||||
elif isinstance(v, unicode):
|
||||
elif isinstance(v, string_types):
|
||||
v = unicodedata.normalize('NFKD', v).lower()
|
||||
if isinstance(v, bool):
|
||||
key = k
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
# -*- coding: utf-8 -*-
|
||||
# vi:si:et:sw=4:sts=4:ts=4
|
||||
from __future__ import division, with_statement
|
||||
from __future__ import division, print_function, absolute_import
|
||||
|
||||
import unicodedata
|
||||
|
||||
|
@ -10,11 +10,11 @@ import ox
|
|||
|
||||
from item import utils
|
||||
|
||||
import managers
|
||||
from . import managers
|
||||
|
||||
def get_title_sort(title):
|
||||
if isinstance(title, str):
|
||||
title = unicode(title)
|
||||
if isinstance(title, bytes):
|
||||
title = title.decde('utf-8')
|
||||
title = unicodedata.normalize('NFKD', title).strip()
|
||||
if title:
|
||||
title, created = Title.objects.get_or_create(title=title)
|
||||
|
@ -70,7 +70,7 @@ class Title(models.Model):
|
|||
'sorttitle': self.sorttitle,
|
||||
}
|
||||
if keys:
|
||||
for key in j.keys():
|
||||
for key in list(j):
|
||||
if key not in keys:
|
||||
del j[key]
|
||||
return j
|
||||
|
|
|
@ -1,6 +1,7 @@
|
|||
# -*- coding: utf-8 -*-
|
||||
# vi:si:et:sw=4:sts=4:ts=4
|
||||
from __future__ import division
|
||||
from __future__ import division, print_function, absolute_import
|
||||
|
||||
import unicodedata
|
||||
|
||||
import ox
|
||||
|
@ -14,7 +15,7 @@ from item import utils
|
|||
from user.decorators import capability_required_json
|
||||
from changelog.models import add_changelog
|
||||
|
||||
import models
|
||||
from . import models
|
||||
|
||||
|
||||
@capability_required_json('canManageTitlesAndNames')
|
||||
|
|
|
@ -1,6 +1,7 @@
|
|||
# -*- coding: utf-8 -*-
|
||||
# vi:si:et:sw=4:sts=4:ts=4
|
||||
from __future__ import division, with_statement
|
||||
from __future__ import division, print_function, absolute_import
|
||||
|
||||
from datetime import datetime, timedelta
|
||||
from random import randint
|
||||
|
||||
|
|
|
@ -1,12 +1,14 @@
|
|||
# -*- coding: utf-8 -*-
|
||||
# vi:si:et:sw=4:sts=4:ts=4
|
||||
from __future__ import division, print_function, absolute_import
|
||||
|
||||
from datetime import timedelta
|
||||
|
||||
from celery.task import periodic_task
|
||||
|
||||
from app.utils import limit_rate
|
||||
|
||||
import models
|
||||
from . import models
|
||||
|
||||
|
||||
@periodic_task(run_every=timedelta(days=1), queue='encoding')
|
||||
|
|
|
@ -1,14 +1,15 @@
|
|||
# -*- coding: utf-8 -*-
|
||||
# vi:si:et:sw=4:sts=4:ts=4
|
||||
from __future__ import division
|
||||
from __future__ import division, print_function, absolute_import
|
||||
|
||||
import models
|
||||
from ox.utils import json
|
||||
from oxdjango.shortcuts import render_to_json_response, json_response
|
||||
|
||||
from itemlist.views import get_list_or_404_json
|
||||
from oxdjango.api import actions
|
||||
|
||||
from . import models
|
||||
|
||||
def tv(request, data):
|
||||
'''
|
||||
Gets the current TV program for a given list
|
||||
|
|
|
@ -1,12 +1,15 @@
|
|||
# Create your views here.
|
||||
from urllib import quote
|
||||
# -*- coding: utf-8 -*-
|
||||
# vi:si:et:sw=4:sts=4:ts=4
|
||||
from __future__ import division, print_function, absolute_import
|
||||
|
||||
import re
|
||||
|
||||
from six.moves.urllib.parse import quote
|
||||
from django.shortcuts import get_object_or_404, redirect
|
||||
|
||||
import app.views
|
||||
|
||||
import models
|
||||
from . import models
|
||||
|
||||
def padma_find(request):
|
||||
url = '/'
|
||||
|
|
|
@ -1,5 +1,7 @@
|
|||
# -*- coding: utf-8 -*-
|
||||
# vi:si:et:sw=4:sts=4:ts=4
|
||||
from __future__ import division, print_function, absolute_import
|
||||
|
||||
import copy
|
||||
from datetime import datetime
|
||||
|
||||
|
@ -9,8 +11,6 @@ from django.db.models import Max
|
|||
from django.conf import settings
|
||||
from django.contrib.gis.geoip2 import GeoIP2
|
||||
|
||||
|
||||
|
||||
import ox
|
||||
from oxdjango.fields import DictField
|
||||
from ox.utils import json
|
||||
|
@ -19,8 +19,9 @@ from itemlist.models import List, Position
|
|||
import text
|
||||
import edit
|
||||
|
||||
import managers
|
||||
import tasks
|
||||
from . import managers
|
||||
from . import tasks
|
||||
|
||||
|
||||
class SessionData(models.Model):
|
||||
session_key = models.CharField(max_length=40, primary_key=True)
|
||||
|
@ -170,7 +171,7 @@ class SessionData(models.Model):
|
|||
j['notes'] = p.notes
|
||||
j['numberoflists'] = self.numberoflists
|
||||
if keys:
|
||||
for key in j.keys():
|
||||
for key in list(j):
|
||||
if key not in keys:
|
||||
del j[key]
|
||||
return j
|
||||
|
@ -323,7 +324,7 @@ def get_ui(user_ui, user=None):
|
|||
ids += add(user.lists.exclude(status="featured"), 'personal')
|
||||
ids += add(user.subscribed_lists.filter(status='public'), 'public')
|
||||
ids += add(List.objects.filter(status='featured'), 'featured')
|
||||
for i in ui['lists'].keys():
|
||||
for i in list(ui['lists']):
|
||||
if i not in ids:
|
||||
del ui['lists'][i]
|
||||
tids = ['']
|
||||
|
@ -373,7 +374,7 @@ def user_json(user, keys=None):
|
|||
'username': user.username,
|
||||
}
|
||||
if keys:
|
||||
for key in j.keys():
|
||||
for key in list(j):
|
||||
if key not in keys:
|
||||
del j[key]
|
||||
return j
|
||||
|
|
|
@ -1,22 +1,24 @@
|
|||
# -*- coding: utf-8 -*-
|
||||
# vi:si:et:sw=4:sts=4:ts=4
|
||||
from __future__ import division, print_function, absolute_import
|
||||
|
||||
import json
|
||||
from datetime import timedelta
|
||||
from itertools import izip_longest
|
||||
|
||||
from six.moves import zip_longest
|
||||
from celery.task import task, periodic_task
|
||||
|
||||
import models
|
||||
from app.models import Settings
|
||||
from statistics import Statistics
|
||||
from .statistics import Statistics
|
||||
|
||||
@periodic_task(run_every=timedelta(hours=1), queue='encoding')
|
||||
def cronjob(**kwargs):
|
||||
update_statistics()
|
||||
|
||||
def update_statistics():
|
||||
from . import models
|
||||
def chunker(iterable, chunksize, filler):
|
||||
return izip_longest(*[iter(iterable)]*chunksize, fillvalue=filler)
|
||||
return zip_longest(*[iter(iterable)]*chunksize, fillvalue=filler)
|
||||
|
||||
stats = Statistics()
|
||||
ids = [i['session_key']
|
||||
|
@ -30,12 +32,14 @@ def update_statistics():
|
|||
|
||||
@task(ignore_results=True, queue='default')
|
||||
def parse_data(key):
|
||||
from . import models
|
||||
session_data = models.SessionData.objects.get(session_key=key)
|
||||
session_data.parse_data()
|
||||
session_data.save()
|
||||
|
||||
@task(ignore_results=True, queue='default')
|
||||
def update_numberoflists(username):
|
||||
from . import models
|
||||
user = models.User.objects.get(username=username)
|
||||
models.SessionData.objects.filter(
|
||||
user=user
|
||||
|
|
|
@ -1,5 +1,7 @@
|
|||
# -*- coding: utf-8 -*-
|
||||
# vi:si:et:sw=4:sts=4:ts=4
|
||||
from __future__ import division, print_function, absolute_import
|
||||
|
||||
import random
|
||||
random.seed()
|
||||
import re
|
||||
|
@ -25,8 +27,8 @@ from item.models import Access, Item
|
|||
from item import utils
|
||||
from changelog.models import add_changelog
|
||||
|
||||
import models
|
||||
from decorators import capability_required_json
|
||||
from . import models
|
||||
from .decorators import capability_required_json
|
||||
|
||||
|
||||
def get_user_or_404(data):
|
||||
|
@ -770,7 +772,7 @@ def setUI(request, data):
|
|||
else:
|
||||
ui = json.loads(request.session.get('ui', '{}'))
|
||||
for key in data:
|
||||
keys = map(lambda p: p.replace('\0', '\\.'), key.replace('\\.', '\0').split('.'))
|
||||
keys = [p.replace('\0', '\\.') for p in key.replace('\\.', '\0').split('.')]
|
||||
value = data[key]
|
||||
p = ui
|
||||
while len(keys) > 1:
|
||||
|
|
|
@ -8,7 +8,10 @@ root_dir = os.path.normpath(os.path.abspath(os.path.join(os.path.dirname(__file_
|
|||
|
||||
# using virtualenv's activate_this.py to reorder sys.path
|
||||
activate_this = os.path.join(root_dir, 'bin', 'activate_this.py')
|
||||
execfile(activate_this, dict(__file__=activate_this))
|
||||
if os.path.exists(activate_this):
|
||||
with open(activate_this) as f:
|
||||
code = compile(f.read(), activate_this, 'exec')
|
||||
exec(code, dict(__file__=activate_this))
|
||||
|
||||
from PIL import Image
|
||||
from optparse import OptionParser
|
||||
|
|
|
@ -8,7 +8,10 @@ root_dir = os.path.normpath(os.path.abspath(os.path.join(os.path.dirname(__file_
|
|||
|
||||
# using virtualenv's activate_this.py to reorder sys.path
|
||||
activate_this = os.path.join(root_dir, 'bin', 'activate_this.py')
|
||||
execfile(activate_this, dict(__file__=activate_this))
|
||||
if os.path.exists(activate_this):
|
||||
with open(activate_this) as f:
|
||||
code = compile(f.read(), activate_this, 'exec')
|
||||
exec(code, dict(__file__=activate_this))
|
||||
|
||||
from PIL import Image
|
||||
from PIL import ImageDraw
|
||||
|
|
|
@ -7,8 +7,11 @@ import os
|
|||
root_dir = os.path.normpath(os.path.abspath(os.path.join(os.path.dirname(__file__), '..')))
|
||||
|
||||
# using virtualenv's activate_this.py to reorder sys.path
|
||||
#activate_this = os.path.join(root_dir, 'bin', 'activate_this.py')
|
||||
#execfile(activate_this, dict(__file__=activate_this))
|
||||
activate_this = os.path.join(root_dir, 'bin', 'activate_this.py')
|
||||
if os.path.exists(activate_this):
|
||||
with open(activate_this) as f:
|
||||
code = compile(f.read(), activate_this, 'exec')
|
||||
exec(code, dict(__file__=activate_this))
|
||||
|
||||
from PIL import Image
|
||||
from PIL import ImageDraw
|
||||
|
|
|
@ -8,7 +8,10 @@ root_dir = os.path.normpath(os.path.abspath(os.path.join(os.path.dirname(__file_
|
|||
|
||||
# using virtualenv's activate_this.py to reorder sys.path
|
||||
activate_this = os.path.join(root_dir, 'bin', 'activate_this.py')
|
||||
execfile(activate_this, dict(__file__=activate_this))
|
||||
if os.path.exists(activate_this):
|
||||
with open(activate_this) as f:
|
||||
code = compile(f.read(), activate_this, 'exec')
|
||||
exec(code, dict(__file__=activate_this))
|
||||
|
||||
from PIL import Image
|
||||
from PIL import ImageDraw
|
||||
|
|
|
@ -8,7 +8,10 @@ root_dir = os.path.normpath(os.path.abspath(os.path.join(os.path.dirname(__file_
|
|||
|
||||
# using virtualenv's activate_this.py to reorder sys.path
|
||||
activate_this = os.path.join(root_dir, 'bin', 'activate_this.py')
|
||||
execfile(activate_this, dict(__file__=activate_this))
|
||||
if os.path.exists(activate_this):
|
||||
with open(activate_this) as f:
|
||||
code = compile(f.read(), activate_this, 'exec')
|
||||
exec(code, dict(__file__=activate_this))
|
||||
|
||||
from PIL import Image
|
||||
from PIL import ImageDraw
|
||||
|
|
|
@ -8,7 +8,10 @@ root_dir = os.path.normpath(os.path.abspath(os.path.join(os.path.dirname(__file_
|
|||
|
||||
# using virtualenv's activate_this.py to reorder sys.path
|
||||
activate_this = os.path.join(root_dir, 'bin', 'activate_this.py')
|
||||
execfile(activate_this, dict(__file__=activate_this))
|
||||
if os.path.exists(activate_this):
|
||||
with open(activate_this) as f:
|
||||
code = compile(f.read(), activate_this, 'exec')
|
||||
exec(code, dict(__file__=activate_this))
|
||||
|
||||
from PIL import Image
|
||||
from PIL import ImageDraw
|
||||
|
|
Loading…
Reference in a new issue