Пример #1
0
def addDocument(request):
    '''
        add document(s) to item
        takes {
            item: string
            id: string
            or
            ids: [string]
        }
        returns {
        }
    '''
    response = json_response()
    data = json.loads(request.POST['data'])
    if 'ids' in data:
        ids = data['ids']
    else:
        ids = [data['id']]
    item = Item.objects.get(itemId=data['item'])
    if item.editable(request.user):
        for id in ids:
            document = models.Document.get(id)
            document.add(item)
    else:
        response = json_response(status=403, file='permission denied')
    return render_to_json_response(response)
Пример #2
0
def editAnnotation(request):
    '''
        takes {
            id:,
            in: float,
            out: float,
            value: string,
        }
        returns {
            id:
            ...
        }
    '''
    response = json_response({})
    data = json.loads(request.POST['data'])
    a = get_object_or_404_json(models.Annotation, public_id=data['id'])
    if a.editable(request.user):
        a.log()
        for key in ('value', 'in', 'out'):
            if key in data:
                setattr(a, {
                    'in': 'start',
                    'out': 'end'
                }.get(key, key), data[key])
        a.save()
        #update sort/find tables async
        update_item.delay(a.id)
        response['data'] = a.json()
        response['data']['editable'] = True
    else:
        response = json_response(status=403, text='permission denied')
    return render_to_json_response(response)
Пример #3
0
def addListItems(request):
    '''
        takes {
            list: listId,
            items: [itemId],
            query: ...
        }
        returns {
        }
    '''
    data = json.loads(request.POST['data'])
    list = get_list_or_404_json(data['list'])
    if 'items' in data:
        if list.editable(request.user):
            with transaction.commit_on_success():
                for item in Item.objects.filter(itemId__in=data['items']):
                    list.add(item)
            response = json_response(status=200, text='items added')
        else:
            response = json_response(status=403, text='not allowed')
    elif 'query' in data:
        response = json_response(status=501, text='not implemented')
    else:
        response = json_response(status=501, text='not implemented')
    return render_to_json_response(response)
Пример #4
0
def editNews(request):
    '''
        takes {
            id: string,
            title: string,
            text: string,
            date: string
        }
        returns {
            id: string
            ...
        }
    '''
    response = json_response({})
    data = json.loads(request.POST['data'])
    n = get_object_or_404_json(models.News, id=ox.fromAZ(data['id']))
    if n.editable(request.user):
        for key in ('title', 'text', 'date'):
            if key in data:
                setattr(n, key, data[key])
        n.save()
        response['data'] = n.json()
    else:
        response = json_response(status=403, text='permission denied')
    return render_to_json_response(response)
def tv(request):
    '''
        takes {
            list: string
        }
        returns {
            item: string,
            position: float,
            title: string,
            ...
        }
    '''
    data = json.loads(request.POST['data'])
    if 'list' in data and data['list']:
        list = get_list_or_404_json(data['list'])
        if list.accessible(request.user):
            channel, created = models.Channel.objects.get_or_create(list=list)
            response = json_response(status=200, text='created')
            response['data'] = channel.json(request.user)
        else:
            response = json_response(status=404, text='list not found')
    else:
        channel, created = models.Channel.objects.get_or_create(list=None)
        response = json_response(status=200, text='ok')
        response['data'] = channel.json(request.user)
    return render_to_json_response(response)
Пример #6
0
def tv(request):
    '''
        takes {
            list: string
        }
        returns {
            item: string,
            position: float,
            title: string,
            ...
        }
    '''
    data = json.loads(request.POST['data'])
    if 'list' in data and data['list']:
        list = get_list_or_404_json(data['list'])
        if list.accessible(request.user):
            channel, created = models.Channel.objects.get_or_create(list=list)
            response = json_response(status=200, text='created')
            response['data'] = channel.json(request.user)
        else:
            response = json_response(status=404, text='list not found')
    else:
        channel, created = models.Channel.objects.get_or_create(list=None)
        response = json_response(status=200, text='ok')
        response['data'] = channel.json(request.user)
    return render_to_json_response(response)
Пример #7
0
def editList(request):
    '''
        takes {
            id: listId,
            key: value,
        }
        keys: name, status, query, position, posterFrames
        if you change status you have to provide position of list

        posterFrames:
            array with objects that have item/position
        returns {
            id: string,
            ...
        }
    '''
    data = json.loads(request.POST['data'])
    list = get_list_or_404_json(data['id'])
    if list.editable(request.user):
        response = json_response()
        list.edit(data, request.user)
        response['data'] = list.json(user=request.user)
    else:
        response = json_response(status=403, text='not allowed')
    return render_to_json_response(response)
Пример #8
0
def editDocument(request):
    '''
        takes {
            id: string
            name: string
            description: string
            item(optional): edit descriptoin per item
        }
        returns {
            id:
            ...
        }
    '''
    response = json_response()
    data = json.loads(request.POST['data'])
    item = 'item' in data and Item.objects.get(itemId=data['item']) or None
    if data['id']:
        document = models.Document.get(data['id'])
        if document.editable(request.user):
            document.edit(data, request.user, item=item)
            document.save()
            response['data'] = document.json(user=request.user, item=item)
        else:
            response = json_response(status=403, text='permission denied')
    else:
        response = json_response(status=500, text='invalid request')
    return render_to_json_response(response)
def editNews(request):
    '''
        takes {
            id: string,
            title: string,
            text: string,
            date: string
        }
        returns {
            id: string
            ...
        }
    '''
    response = json_response({})
    data = json.loads(request.POST['data'])
    n = get_object_or_404_json(models.News, id=ox.fromAZ(data['id']))
    if n.editable(request.user):
        for key in ('title', 'text', 'date'):
            if key in data:
                setattr(n, key, data[key])
        n.save()
        response['data'] = n.json()
    else:
        response = json_response(status=403, text='permission denied')
    return render_to_json_response(response)
Пример #10
0
def addDocument(request):
    '''
        add document(s) to item
        takes {
            item: string
            id: string
            or
            ids: [string]
        }
        returns {
        }
    '''
    response = json_response()
    data = json.loads(request.POST['data'])
    if 'ids' in data:
        ids = data['ids']
    else:
        ids = [data['id']]
    item = Item.objects.get(itemId=data['item'])
    if item.editable(request.user):
        for id in ids:
            document = models.Document.get(id)
            document.add(item)
    else:
        response = json_response(status=403, text='permission denied')
    return render_to_json_response(response)
def setPoster(request):
    '''
        takes {
            id: string,
            source: string // url
        }
        returns {
            poster: {
                url: string,
                width: int,
                height: int
            }
        }
    '''
    data = json.loads(request.POST['data'])
    item = get_object_or_404_json(models.Item, itemId=data['id'])
    response = json_response()
    if item.editable(request.user):
        valid_sources = [p['source'] for p in item.get_posters()]
        if data['source'] in valid_sources:
            item.poster_source = data['source']
            if item.poster:
                item.poster.delete()
            item.save()
            tasks.update_poster(item.itemId)
            response = json_response()
            response['data'][
                'posterAspect'] = item.poster_width / item.poster_height
        else:
            response = json_response(status=403, text='invalid poster url')
    else:
        response = json_response(status=403, text='permission denied')
    return render_to_json_response(response)
Пример #12
0
def add(request):
    '''
        takes {
            title: string, //(optional)
        }
        returns {
            id:
            name:
            ...
        }
    '''

    if not request.user.get_profile().capability('canAddItems'):
        response = json_response(status=403, text='permissino denied')
    else:
        data = json.loads(request.POST['data'])
        data['title'] = data.get('title', 'Untitled')
        i = models.Item()
        i.data['title'] = data['title']
        i.user = request.user
        p = i.save()
        if p:
            p.wait()
        else:
            i.make_poster(True)
        response = json_response(status=200, text='created')
        response['data'] = i.get_json()
    return render_to_json_response(response)
Пример #13
0
def remove(request):
    '''
        remove item with id, return status is 200/removed on sucess or 403/permission deinied.
        takes {
            id: string
        }

        returns {
        }
    '''
    response = json_response({})
    data = json.loads(request.POST['data'])
    item = get_object_or_404_json(models.Item, itemId=data['id'])
    user = request.user
    if user.get_profile().capability('canRemoveItems') == True or \
           user.is_staff or \
           item.user == user or \
           item.groups.filter(id__in=user.groups.all()).count() > 0:
        item.log()
        #FIXME: is this cascading enough or do we end up with orphan files etc.
        item.delete()
        response = json_response(status=200, text='removed')
    else:
        response = json_response(status=403, text='permission denied')
    return render_to_json_response(response)
Пример #14
0
def addAnnotations(request):
    '''
        takes {
            item: itemId,
            layer: layerId,
            annotations: [{
                in: float,
                out: float,
                value: string
            }, ...]
        }
        returns {
            taskId: string
        }
    '''
    data = json.loads(request.POST['data'])
    for key in ('item', 'layer', 'annotations'):
        if key not in data:
            return render_to_json_response(json_response(status=400,
                                                         text='invalid data'))

    item = get_object_or_404_json(Item, itemId=data['item'])
    
    layer_id = data['layer']
    layer = filter(lambda l: l['id'] == layer_id, settings.CONFIG['layers'])[0]
    if item.editable(request.user) \
        and layer['canAddAnnotations'].get(request.user.get_profile().get_level()):
        response = json_response()
        data['user'] = request.user.username
        t = add_annotations.delay(data)
        response['data']['taskId'] = t.task_id
    else:
        response = json_response(status=403, text='permission denied')
    return render_to_json_response(response)
Пример #15
0
def editAnnotation(request):
    '''
        takes {
            id:,
            in: float,
            out: float,
            value: string,
        }
        returns {
            id:
            ...
        }
    '''
    response = json_response({})
    data = json.loads(request.POST['data'])
    a = get_object_or_404_json(models.Annotation, public_id=data['id'])
    if a.editable(request.user):
        a.log()
        for key in ('value', 'in', 'out'):
            if key in data:
                setattr(a, {
                    'in': 'start',
                    'out': 'end'
                }.get(key,key), data[key])
        a.save()
        #update sort/find tables async
        update_item.delay(a.id)
        response['data'] = a.json()
        response['data']['editable'] = True
    else:
        response = json_response(status=403, text='permission denied')
    return render_to_json_response(response)
Пример #16
0
def addAnnotations(request):
    '''
        takes {
            item: itemId,
            layer: layerId,
            annotations: [{
                in: float,
                out: float,
                value: string
            }, ...]
        }
        returns {
            taskId: string
        }
    '''
    data = json.loads(request.POST['data'])
    for key in ('item', 'layer', 'annotations'):
        if key not in data:
            return render_to_json_response(
                json_response(status=400, text='invalid data'))

    item = get_object_or_404_json(Item, itemId=data['item'])

    layer_id = data['layer']
    layer = filter(lambda l: l['id'] == layer_id, settings.CONFIG['layers'])[0]
    if item.editable(request.user) \
        and layer['canAddAnnotations'].get(request.user.get_profile().get_level()):
        response = json_response()
        data['user'] = request.user.username
        t = add_annotations.delay(data)
        response['data']['taskId'] = t.task_id
    else:
        response = json_response(status=403, text='permission denied')
    return render_to_json_response(response)
Пример #17
0
def setPoster(request):
    '''
        takes {
            id: string,
            source: string // url
        }
        returns {
            poster: {
                url: string,
                width: int,
                height: int
            }
        }
    '''
    data = json.loads(request.POST['data'])
    item = get_object_or_404_json(models.Item, itemId=data['id'])
    response = json_response()
    if item.editable(request.user):
        valid_sources = [p['source'] for p in item.get_posters()]
        if data['source'] in valid_sources:
            item.poster_source = data['source']
            if item.poster:
                item.poster.delete()
            item.save()
            tasks.update_poster(item.itemId)
            response = json_response()
            response['data']['posterAspect'] = item.poster_width/item.poster_height
        else:
            response = json_response(status=403, text='invalid poster url')
    else:
        response = json_response(status=403, text='permission denied')
    return render_to_json_response(response)
def requestToken(request):
    '''
        takes {
            username: string,
            email: string
        }

        returns {
            errors: {
                username: '******'
                email: 'Unknown Email'
            }
            username: user
        }
    '''
    data = json.loads(request.POST['data'])
    user = None
    if 'username' in data:
        try:
            user = User.objects.get(username__iexact=data['username'])
        except User.DoesNotExist:
            user = None
    elif 'email' in data:
        try:
            user = User.objects.get(email__iexact=data['email'])
        except User.DoesNotExist:
            user = None
    if user:
        while True:
            code = ox.toAZ(
                random.randint(ox.fromAZ('AAAAAAAAAAAAAAAA'),
                               ox.fromAZ('AAAAAAAAAAAAAAAAA')))
            if models.UserProfile.objects.filter(reset_code=code).count() == 0:
                break
        user_profile = user.get_profile()
        user_profile.reset_code = code
        user_profile.save()

        template = loader.get_template('password_reset_email.txt')
        context = RequestContext(
            request, {
                'code': code,
                'sitename': settings.SITENAME,
                'footer': settings.CONFIG['site']['email']['footer'],
                'url': request.build_absolute_uri('/'),
            })
        message = template.render(context)
        subject = '%s - Reset Password' % settings.SITENAME
        user.email_user(subject, message)
        response = json_response({'username': user.username},
                                 text='password reset email sent')
    else:
        response = json_response({'errors': {}})
        if 'username' in data:
            response['data']['errors']['username'] = '******'
        elif 'email' in data:
            response['data']['errors']['email'] = 'Unknown Email'
        else:
            response = json_response(status=400, text='invalid data')
    return render_to_json_response(response)
def add(request):
    '''
        takes {
            title: string, //(optional)
        }
        returns {
            id:
            name:
            ...
        }
    '''

    if not request.user.get_profile().capability('canAddItems'):
        response = json_response(status=403, text='permissino denied')
    else:
        data = json.loads(request.POST['data'])
        data['title'] = data.get('title', 'Untitled')
        i = models.Item()
        i.data['title'] = data['title']
        i.user = request.user
        p = i.save()
        if p:
            p.wait()
        else:
            i.make_poster(True)
        response = json_response(status=200, text='created')
        response['data'] = i.get_json()
    return render_to_json_response(response)
Пример #20
0
def editDocument(request):
    '''
        takes {
            id: string
            name: string
            description: string
            item(optional): edit descriptoin per item
        }
        returns {
            id:
            ...
        }
    '''
    response = json_response()
    data = json.loads(request.POST['data'])
    item = 'item' in data and Item.objects.get(itemId=data['item']) or None
    if data['id']:
        document = models.Document.get(data['id'])
        if document.editable(request.user):
            document.edit(data, request.user, item=item)
            document.save()
            response['data'] = document.json(user=request.user, item=item)
        else:
            response = json_response(status=403, text='permission denied')
    else:
        response = json_response(status=500, text='invalid request')
    return render_to_json_response(response)
Пример #21
0
def upload(request):
    text = get_text_or_404_json(request.POST['id'])
    if text.editable(request.user):
        #post next chunk
        if 'chunk' in request.FILES:
            form = ChunkForm(request.POST, request.FILES)
            if form.is_valid() and text.editable(request.user):
                c = form.cleaned_data['chunk']
                chunk_id = form.cleaned_data['chunkId']
                response = {
                    'result': 1,
                    'resultUrl': request.build_absolute_uri(text.get_absolute_url())
                }
                if not text.save_chunk(c, chunk_id, form.cleaned_data['done']):
                    response['result'] = -1
                if form.cleaned_data['done']:
                    response['done'] = 1
                return render_to_json_response(response)
        #init upload
        else:
            text.uploading = True
            if text.file:
                text.file.delete()
            text.save()
            return render_to_json_response({
                'uploadUrl': request.build_absolute_uri('/api/upload/text'),
                'url': request.build_absolute_uri(text.get_absolute_url()),
                'result': 1
            })
    else:
        response = json_response(status=404, text='permission denied')
    response = json_response(status=400, text='this request requires POST')
    return render_to_json_response(response)
def editClip(request):
    '''
       takes {
           id: string,
           in: float,
           out: float
        }
        returns {
        }
    '''
    response = json_response()
    data = json.loads(request.POST['data'])
    clip = get_object_or_404_json(models.Clip, pk=ox.fromAZ(data['id']))
    valid = True
    if clip.edit.editable(request.user):
        for key in ('in', 'out'):
            if key in data:
                if clip.annotation:
                    clip.start = clip.annotation.start
                    clip.end = clip.annotation.end
                    clip.item = clip.annotation.item
                    clip.annotation = None
                setattr(clip, {'in': 'start', 'out': 'end'}.get(key), float(data[key]))
        if not clip.annotation:
            duration = clip.item.sort.duration
            if clip.start >= clip.end or clip.start >= duration or clip.end > duration:
                response = json_response(status=500, text='invalid in/out')
                valid = False
        if valid:
            clip.save()
            response['data'] = clip.json(user=request.user)
    else:
        response = json_response(status=403, text='permission denied')
    return render_to_json_response(response)
Пример #23
0
def signin(request):
    '''
        takes {
            username: string,
            password: string
        }

        returns {
            errors: {
                username: '******',
                password: '******'
            }
            user: {
                ...
            }
        }
    '''
    data = json.loads(request.POST['data'])
    if 'assertion' in data:
        response = persona.signin(request)
    elif 'username' in data and 'password' in data:
        data['username'] = data['username'].strip()
        if settings.AUTH_CHECK_USERNAME:
            qs = User.objects.filter(username__iexact=data['username'])
            if qs.count() == 0:
                response = json_response({
                    'errors': {
                        'username': '******'
                    }
                })
                username = None
            else:
                username = qs[0].username
        else:
            username = data['username']
        if username:
            user = authenticate(username=username, password=data['password'])
            if user is not None:
                if user.is_active:
                    request.session['ui'] = '{}'
                    login(request, user)
                    user_json = models.init_user(user, request)
                    response = json_response({
                        'user': user_json
                    })
                else:
                    response = json_response({
                        'errors': {
                            'username': '******'
                        }
                    })
            else:
                response = json_response({
                    'errors': {
                        'password': '******'
                    }
                })
    else:
        response = json_response(status=400, text='invalid data')
    return render_to_json_response(response)
def signin(request):
    data = json.loads(request.POST['data'])
    response = json_response({'errors': {'email': 'Failed to verify email'}})
    verification_data = verify(request, data['assertion'])
    if verification_data:
        email = verification_data['email']
        username = data.get('username')
        qs = User.objects.filter(email__iexact=email)
        if qs.count() == 0:
            if not username:
                response = json_response({
                    'errors': {
                        'username': '******'
                    }
                })
                return response
            user = User()
            user.email = email
            user.username = username
            user.save()
        else:
            user = qs[0]
        if user.is_active:
            request.session['ui'] = '{}'
            #fixme. use custom backend instead?
            user.backend = 'django.contrib.auth.backends.ModelBackend'
            auth.login(request, user)
            user_json = models.init_user(user, request)
            response = json_response({'user': user_json})
        else:
            response = json_response({'errors': {'email': 'User Disabled'}})
    return response
Пример #25
0
def editPreferences(request):
    '''
        takes {
            key: value
        }
        keys: email, password
        returns {}
    '''
    data = json.loads(request.POST['data'])
    errors = {}
    change = False
    response = json_response()
    if 'email' in data:
        if User.objects.filter(
                email=data['email']).exclude(username=request.user.username).count()>0:
            errors['email'] = 'Email address already in use'
        else:
            change = True
            request.user.email = ox.escape_html(data['email'])
    if 'newsletter' in data:
        profile = request.user.get_profile()
        profile.newsletter = data['newsletter']
        profile.save()
    if 'password' in data:
        change = True
        request.user.set_password(data['password'])
    if change:
        request.user.save()
    if errors:
        response = json_response({ 'errors': errors})
    return render_to_json_response(response)
def addClips(request):
    '''
        takes {
            edit: string,
            index: int,
            clips: []
                item: string,
                in: float,
                out: float,
                annotation: string
        }
        add clips with item/in/out or annotation to edit with id
        clips are added at index or end if index is not provided
        (annoation id is in the form item/annotation)
        returns {
        }
    '''
    response = json_response()
    data = json.loads(request.POST['data'])
    edit = get_edit_or_404_json(data['edit'])
    clips = []
    if edit.editable(request.user):
        index = data.get('index', edit.clips.count())
        for c in data['clips']:
            clip = edit.add_clip(c, index)
            index += 1
            if not clip:
                response = json_response(status=500, text='invalid in/out')
                return render_to_json_response(response)
            else:
                clips.append(clip.json(request.user))
        response['data']['clips'] = clips
    else:
        response = json_response(status=403, text='permission denied')
    return render_to_json_response(response)
def editPreferences(request):
    '''
        takes {
            key: value
        }
        keys: email, password
        returns {}
    '''
    data = json.loads(request.POST['data'])
    errors = {}
    change = False
    response = json_response()
    if 'email' in data:
        if User.objects.filter(email=data['email']).exclude(
                username=request.user.username).count() > 0:
            errors['email'] = 'Email address already in use'
        else:
            change = True
            request.user.email = ox.escape_html(data['email'])
    if 'newsletter' in data:
        profile = request.user.get_profile()
        profile.newsletter = data['newsletter']
        profile.save()
    if 'password' in data:
        change = True
        request.user.set_password(data['password'])
    if change:
        request.user.save()
    if errors:
        response = json_response({'errors': errors})
    return render_to_json_response(response)
def remove(request):
    '''
        remove item with id, return status is 200/removed on sucess or 403/permission deinied.
        takes {
            id: string
        }

        returns {
        }
    '''
    response = json_response({})
    data = json.loads(request.POST['data'])
    item = get_object_or_404_json(models.Item, itemId=data['id'])
    user = request.user
    if user.get_profile().capability('canRemoveItems') == True or \
           user.is_staff or \
           item.user == user or \
           item.groups.filter(id__in=user.groups.all()).count() > 0:
        item.log()
        #FIXME: is this cascading enough or do we end up with orphan files etc.
        item.delete()
        response = json_response(status=200, text='removed')
    else:
        response = json_response(status=403, text='permission denied')
    return render_to_json_response(response)
def lookup(request):
    '''
        takes {
            title: string,
            director: [string],
            year: string,
            id: string
        }
        returns {
            title: string,
            director: [string],
            year: string,
            id: string
        }
    '''
    data = json.loads(request.POST['data'])
    if 'id' in data:
        i = models.Item.objects.get(itemId=data['id'])
        r = {'id': i.itemId}
        for key in ('title', 'director', 'year'):
            r[key] = i.get(key)
        response = json_response(r)
    else:
        response = json_response(status=404, text='not found')
    return render_to_json_response(response)
Пример #30
0
def lookup(request):
    '''
        takes {
            title: string,
            director: [string],
            year: string,
            id: string
        }
        returns {
            title: string,
            director: [string],
            year: string,
            id: string
        }
    '''
    data = json.loads(request.POST['data'])
    if 'id' in data:
        i = models.Item.objects.get(itemId=data['id'])
        r = {'id': i.itemId}
        for key in ('title', 'director', 'year'):
            r[key] = i.get(key)
        response = json_response(r)
    else:
        response = json_response(status=404, text='not found')
    return render_to_json_response(response)
Пример #31
0
def addMedia(request):
    '''
        takes {
            id: oshash
            filename: string,
            item: string
            info: {}
        }
        returns {
            item: id,
        }
    '''
    response = json_response({})
    data = json.loads(request.POST['data'])
    oshash = data.pop('id')
    if not request.user.get_profile().capability('canAddItems'):
        response = json_response(status=403, text='permissino denied')
    elif models.File.objects.filter(oshash=oshash).count() > 0:
        f = models.File.objects.get(oshash=oshash)
        if f.available:
            response['status']['text'] = 'file exists'
        response['data']['item'] = f.item.itemId
        response['data']['itemUrl'] = request.build_absolute_uri('/%s' %
                                                                 f.item.itemId)
    else:
        if 'item' in data:
            i = Item.objects.get(itemId=data['item'])
        else:
            title = ox.parse_movie_path(os.path.splitext(
                data['filename'])[0])['title']
            i = Item()
            i.data = {
                'title': title,
                'director': data.get('director', []),
            }
            i.user = request.user
            i.save()
            i.make_poster(True)
        f = models.File(oshash=oshash, item=i)
        f.path = data.get('filename', 'Untitled')
        extension = f.path.split('.')
        if len(extension) > 1:
            extension = extension[-1]
        else:
            #wafaa
            #extension = 'webm'
            extension = 'png'
        f.selected = True
        if 'info' in data and data['info']:
            f.info = data['info']
        f.info['extension'] = extension
        f.parse_info()
        f.save()
        response['data']['item'] = i.itemId
        response['data']['itemUrl'] = request.build_absolute_uri('/%s' %
                                                                 i.itemId)
    return render_to_json_response(response)
Пример #32
0
def direct_upload(request):
    if 'id' in request.GET:
        file = models.File.objects.get(oshash=request.GET['id'])
    else:
        oshash = request.POST['id']
    response = json_response(status=400, text='this request requires POST')
    if 'chunk' in request.FILES:
        form = ChunkForm(request.POST, request.FILES)
        if form.is_valid() and file.editable(request.user):
            c = form.cleaned_data['chunk']
            chunk_id = form.cleaned_data['chunkId']
            response = {
                'result':
                1,
                'resultUrl':
                request.build_absolute_uri(file.item.get_absolute_url())
            }
            if not file.save_chunk(c, chunk_id, form.cleaned_data['done']):
                response['result'] = -1
            if form.cleaned_data['done']:
                file.uploading = False
                file.queued = True
                file.save()
                #try/execpt so it does not fail if rabitmq is down
                try:
                    t = file.extract_stream()
                    response['resultUrl'] = t.task_id
                except:
                    pass
                response['done'] = 1
            return render_to_json_response(response)
    #init upload
    else:
        file, created = models.File.objects.get_or_create(oshash=oshash)
        if file.editable(request.user):
            #remove previous uploads
            if not created:
                file.streams.all().delete()
                file.delete_frames()
                if file.item.rendered and file.selected:
                    Item.objects.filter(id=file.item.id).update(rendered=False)
            file.uploading = True
            file.save()
            upload_url = request.build_absolute_uri(
                '/api/upload/direct/?id=%s' % file.oshash)
            return render_to_json_response({
                'uploadUrl':
                upload_url,
                'url':
                request.build_absolute_uri(file.item.get_absolute_url()),
                'result':
                1
            })
        else:
            response = json_response(status=403, text='permission denied')
    return render_to_json_response(response)
def signin(request):
    '''
        takes {
            username: string,
            password: string
        }

        returns {
            errors: {
                username: '******',
                password: '******'
            }
            user: {
                ...
            }
        }
    '''
    data = json.loads(request.POST['data'])
    if 'assertion' in data:
        response = persona.signin(request)
    elif 'username' in data and 'password' in data:
        data['username'] = data['username'].strip()
        if settings.AUTH_CHECK_USERNAME:
            qs = User.objects.filter(username__iexact=data['username'])
            if qs.count() == 0:
                response = json_response(
                    {'errors': {
                        'username': '******'
                    }})
                username = None
            else:
                username = qs[0].username
        else:
            username = data['username']
        if username:
            user = authenticate(username=username, password=data['password'])
            if user is not None:
                if user.is_active:
                    request.session['ui'] = '{}'
                    login(request, user)
                    user_json = models.init_user(user, request)
                    response = json_response({'user': user_json})
                else:
                    response = json_response(
                        {'errors': {
                            'username': '******'
                        }})
            else:
                response = json_response(
                    {'errors': {
                        'password': '******'
                    }})
    else:
        response = json_response(status=400, text='invalid data')
    return render_to_json_response(response)
Пример #34
0
def firefogg_upload(request):
    profile = request.GET['profile']
    oshash = request.GET['id']
    config = settings.CONFIG['video']
    video_profile = "%sp.%s" % (max(config['resolutions']), config['formats'][0])

    #handle video upload
    if request.method == 'POST':
        #post next chunk
        if 'chunk' in request.FILES and oshash:
            f = get_object_or_404(models.File, oshash=oshash)
            form = ChunkForm(request.POST, request.FILES)
            if form.is_valid() and profile == video_profile and f.editable(request.user):
                c = form.cleaned_data['chunk']
                chunk_id = form.cleaned_data['chunkId']
                response = {
                    'result': 1,
                    'resultUrl': request.build_absolute_uri('/%s'%f.item.itemId)
                }
                if not f.save_chunk_stream(c, chunk_id, form.cleaned_data['done']):
                    response['result'] = -1
                elif form.cleaned_data['done']:
                    f.uploading = False
                    f.queued = True
                    f.save()
                    #FIXME: this fails badly if rabbitmq goes down
                    try:
                        t = tasks.process_stream.delay(f.id)
                        response['resultUrl'] = t.task_id
                    except:
                        pass
                    response['result'] = 1
                    response['done'] = 1
                return render_to_json_response(response)
        #init upload
        elif oshash and profile == video_profile:
            #404 if oshash is not know, files must be registered via update api first
            f = get_object_or_404(models.File, oshash=oshash)
            if f.editable(request.user):
                f.streams.all().delete()
                f.delete_frames()
                f.uploading = True
                f.save()
                if f.item.rendered and f.selected:
                    Item.objects.filter(id=f.item.id).update(rendered=False)
                response = {
                    'uploadUrl': request.build_absolute_uri('/api/upload/?id=%s&profile=%s' % (f.oshash, profile)),
                    'url': request.build_absolute_uri('/%s' % f.item.itemId),
                    'result': 1
                }
                return render_to_json_response(response)
            else:
                response = json_response(status=404, text='permission denied')
    response = json_response(status=400, text='this request requires POST')
    return render_to_json_response(response)
Пример #35
0
def removeVolume(request):
    data = json.loads(request.POST['data'])
    user = request.user
    try:
        volume = models.Volume.objects.get(user=user, name=data['volume'])
        volume.files.delete()
        volume.delete()
        response = json_response()
    except models.Volume.DoesNotExist:
        response = json_response(status=404, text='volume not found')
    return render_to_json_response(response)
Пример #36
0
def removeVolume(request):
    data = json.loads(request.POST['data'])
    user = request.user
    try:
        volume = models.Volume.objects.get(user=user, name=data['volume'])
        volume.files.delete()
        volume.delete()
        response = json_response()
    except models.Volume.DoesNotExist:
        response = json_response(status=404, text='volume not found')
    return render_to_json_response(response)
Пример #37
0
def editEvent(request):
    '''
        takes {
            id: string,
            name: string,
            start: string,
            end: string
        }
        returns {
            id: string,
            ...
        }
    '''
    data = json.loads(request.POST['data'])
    event = get_object_or_404_json(models.Event, pk=ox.fromAZ(data['id']))
    if event.editable(request.user):
        conflict = False
        conflict_names = []
        names = [data.get('name', event.name)] + data.get(
            'alternativeNames', [])
        for name in names:
            if models.Event.objects.filter(
                    defined=True, name_find__icontains=u'|%s|' %
                    name).exclude(id=event.id).count() != 0:
                conflict = True
                conflict_names.append(name)
        if not conflict:
            models.Event.objects.filter(defined=False, name__in=names).delete()
            for key in ('name', 'start', 'startTime', 'end', 'endTime',
                        'duration', 'durationTime', 'type',
                        'alternativeNames'):
                if key in data:
                    value = data[key]
                    if isinstance(value, basestring):
                        value = ox.escape_html(value)
                    if key == 'alternativeNames':
                        value = tuple([ox.escape_html(v) for v in value])
                    setattr(event, key, value)
            if 'name' in data:
                event.set_name_sort(ox.escape_html(data['name']))
            if 'nameSort' in data:
                event.set_name_sort(ox.escape_html(data['nameSort']))
            event.save()
            if 'name' in data or 'alternativeNames' in data:
                event.update_matches()
            response = json_response(status=200, text='updated')
            response['data'] = event.json()
        else:
            response = json_response(status=409, text='Event name conflict')
            response['data']['names'] = conflict_names
    else:
        response = json_response(status=403, text='permission denied')
    return render_to_json_response(response)
Пример #38
0
def addMedia(request):
    '''
        takes {
            id: oshash
            filename: string,
            item: string
            info: {}
        }
        returns {
            item: id,
        }
    '''
    response = json_response({})
    data = json.loads(request.POST['data'])
    oshash = data.pop('id')
    if not request.user.get_profile().capability('canAddItems'):
        response = json_response(status=403, text='permissino denied')
    elif models.File.objects.filter(oshash=oshash).count() > 0:
        f = models.File.objects.get(oshash=oshash)
        if f.available:
            response['status']['text'] = 'file exists'
        response['data']['item'] = f.item.itemId
        response['data']['itemUrl'] = request.build_absolute_uri('/%s' % f.item.itemId)
    else:
        if 'item' in data:
            i = Item.objects.get(itemId=data['item'])
        else:
            title = ox.parse_movie_path(os.path.splitext(data['filename'])[0])['title']
            i = Item()
            i.data = {
                'title': title,
                'director': data.get('director', []),
            }
            i.user = request.user
            i.save()
            i.make_poster(True)
        f = models.File(oshash=oshash, item=i)
        f.path = data.get('filename', 'Untitled')
        extension = f.path.split('.')
        if len(extension) > 1:
            extension = extension[-1]
        else:
            extension = 'webm'
        f.selected = True
        if 'info' in data and data['info']:
            f.info = data['info']
        f.info['extension'] = extension
        f.parse_info()
        f.save()
        response['data']['item'] = i.itemId
        response['data']['itemUrl'] = request.build_absolute_uri('/%s' % i.itemId)
    return render_to_json_response(response)
def editUser(request):
    '''
        takes {
            key: value
        }
        required key: id 
        optional keys: username, email, level, notes

        returns {
        }
    '''
    response = json_response()
    data = json.loads(request.POST['data'])
    user = get_object_or_404_json(User, pk=ox.fromAZ(data['id']))
    profile = user.get_profile()
    if 'disabled' in data:
        user.is_active = not data['disabled']
    if 'email' in data:
        if 'email' in data:
            data['email'] = ox.escape_html(data['email'])
        if User.objects.filter(email__iexact=data['email']).exclude(
                id=user.id).count() > 0:
            response = json_response(status=403, text='email already in use')
            return render_to_json_response(response)
        user.email = data['email']
    if 'level' in data:
        profile.set_level(data['level'])
    if 'notes' in data:
        profile.notes = data['notes']
    if 'newsletter' in data:
        profile.newsletter = data['newsletter']
    if 'groups' in data:
        groups = data['groups']
        if isinstance(groups, list):
            groups = filter(lambda g: g.strip(), groups)
            groups = [ox.escape_html(g) for g in groups]
            user.groups.exclude(name__in=groups).delete()
            current_groups = [g.name for g in user.groups.all()]
            for g in 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:
        if User.objects.filter(username__iexact=data['username']).exclude(
                id=user.id).count() > 0:
            response = json_response(status=403,
                                     text='username already in use')
            return render_to_json_response(response)
        user.username = data['username']
    user.save()
    profile.save()
    response['data'] = user.data.get().json()
    return render_to_json_response(response)
Пример #40
0
def removeMedia(request):
    data = json.loads(request.POST['data'])
    response = json_response()
    if request.user.get_profile().get_level() == 'admin':
        qs = models.File.objects.filter(oshash__in=data['ids'], instances__id=None)
        for f in qs:
            if f.item.sort.numberoffiles:
                f.item.sort.numberoffiles -= 1
                f.item.sort.save()
        qs.delete()
    else:
        response = json_response(status=403, text='permissino denied')
    return render_to_json_response(response)
Пример #41
0
def editUser(request):
    '''
        takes {
            key: value
        }
        required key: id 
        optional keys: username, email, level, notes

        returns {
        }
    '''
    response = json_response()
    data = json.loads(request.POST['data'])
    user = get_object_or_404_json(User, pk=ox.fromAZ(data['id']))
    profile = user.get_profile()
    if 'disabled' in data:
        user.is_active = not data['disabled']
    if 'email' in data:
        if 'email' in data:
            data['email'] = ox.escape_html(data['email'])
        if User.objects.filter(email__iexact=data['email']).exclude(id=user.id).count()>0:
            response = json_response(status=403, text='email already in use')
            return render_to_json_response(response)
        user.email = data['email']
    if 'level' in data:
        profile.set_level(data['level'])
    if 'notes' in data:
        profile.notes = data['notes']
    if 'newsletter' in data:
        profile.newsletter = data['newsletter']
    if 'groups' in data:
        groups = data['groups']
        if isinstance(groups, list):
            groups = filter(lambda g: g.strip(), groups)
            groups = [ox.escape_html(g) for g in groups]
            user.groups.exclude(name__in=groups).delete()
            current_groups = [g.name for g in user.groups.all()]
            for g in 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:
        if User.objects.filter(
                username__iexact=data['username']).exclude(id=user.id).count()>0:
            response = json_response(status=403, text='username already in use')
            return render_to_json_response(response)
        user.username = data['username']
    user.save()
    profile.save()
    response['data'] = user.data.get().json()
    return render_to_json_response(response)
Пример #42
0
def editEvent(request):
    '''
        takes {
            id: string,
            name: string,
            start: string,
            end: string
        }
        returns {
            id: string,
            ...
        }
    '''
    data = json.loads(request.POST['data'])
    event = get_object_or_404_json(models.Event, pk=ox.fromAZ(data['id']))
    if event.editable(request.user):
        conflict = False
        conflict_names = []
        names = [data.get('name', event.name)] + data.get('alternativeNames', [])
        for name in names:
            if models.Event.objects.filter(defined=True,
                    name_find__icontains=u'|%s|'%name).exclude(id=event.id).count() != 0:
                conflict = True
                conflict_names.append(name)
        if not conflict:
            models.Event.objects.filter(defined=False, name__in=names).delete()
            for key in ('name', 'start', 'startTime', 'end', 'endTime', 'duration', 'durationTime',
                        'type', 'alternativeNames'):
                if key in data:
                    value = data[key]
                    if isinstance(value, basestring):
                        value = ox.escape_html(value)
                    if key == 'alternativeNames':
                        value = tuple([ox.escape_html(v) for v in value])
                    setattr(event, key, value)
            if 'name' in data:
                event.set_name_sort(ox.escape_html(data['name']))
            if 'nameSort' in data:
                event.set_name_sort(ox.escape_html(data['nameSort']))
            event.save()
            if 'name' in data or 'alternativeNames' in data:
                event.update_matches()
            response = json_response(status=200, text='updated')
            response['data'] = event.json()
        else:
            response = json_response(status=409, text='Event name conflict')
            response['data']['names'] = conflict_names
    else:
        response = json_response(status=403, text='permission denied')
    return render_to_json_response(response)
Пример #43
0
def direct_upload(request):
    if 'id' in request.GET:
        file = models.File.objects.get(oshash=request.GET['id'])
    else:
        oshash = request.POST['id']
    response = json_response(status=400, text='this request requires POST')
    if 'chunk' in request.FILES:
        form = ChunkForm(request.POST, request.FILES)
        if form.is_valid() and file.editable(request.user):
            c = form.cleaned_data['chunk']
            chunk_id = form.cleaned_data['chunkId']
            response = {
                'result': 1,
                'resultUrl': request.build_absolute_uri(file.item.get_absolute_url())
            }
            if not file.save_chunk(c, chunk_id, form.cleaned_data['done']):
                response['result'] = -1
            if form.cleaned_data['done']:
                file.uploading = False
                file.queued = True
                file.save()
                #try/execpt so it does not fail if rabitmq is down
                try:
                    t = tasks.extract_stream.delay(file.id)
                    response['resultUrl'] = t.task_id
                except:
                    pass
                response['done'] = 1
            return render_to_json_response(response)
    #init upload
    else:
        file, created = models.File.objects.get_or_create(oshash=oshash)
        if file.editable(request.user):
            #remove previous uploads
            if not created:
                file.streams.all().delete()
                file.delete_frames()
                if file.item.rendered and file.selected:
                    Item.objects.filter(id=file.item.id).update(rendered=False)
            file.uploading = True
            file.save()
            upload_url = request.build_absolute_uri('/api/upload/direct/?id=%s' % file.oshash)
            return render_to_json_response({
                'uploadUrl': upload_url,
                'url': request.build_absolute_uri(file.item.get_absolute_url()),
                'result': 1
            })
        else:
            response = json_response(status=403, text='permission denied')
    return render_to_json_response(response)
Пример #44
0
def resetPassword(request):
    '''
        takes {
            username: string,
            password: string,
            code: string
        }

        returns {
            errors: {
                code: 'Incorrect Code'
            }
            user {
            }
        }
    '''
    data = json.loads(request.POST['data'])
    if 'code' in data and 'password' in data:
        if not data['password']:
            response = json_response({
                'errors': {
                    'password': '******'
                }
            })
        else:
            qs = models.UserProfile.objects.filter(reset_code=data['code'])
            if qs.count() == 1:
                user = qs[0].user
                user.set_password(data['password'])
                user.save()
                user_profile = user.get_profile()
                user_profile.reset_code = None
                user_profile.save()
                user = authenticate(username=user.username, password=data['password'])
                login(request, user)

                user_json = models.init_user(user, request)
                response = json_response({
                    'user': user_json
                }, text='password reset')
            else:
                response = json_response({
                    'errors': {
                        'code': 'Incorrect code'
                    }
                })

    else:
        response = json_response(status=400, text='invalid data')
    return render_to_json_response(response)
Пример #45
0
def removeMedia(request):
    data = json.loads(request.POST['data'])
    response = json_response()
    if request.user.get_profile().get_level() == 'admin':
        qs = models.File.objects.filter(oshash__in=data['ids'],
                                        instances__id=None)
        for f in qs:
            if f.item.sort.numberoffiles:
                f.item.sort.numberoffiles -= 1
                f.item.sort.save()
        qs.delete()
    else:
        response = json_response(status=403, text='permissino denied')
    return render_to_json_response(response)
Пример #46
0
def sortTexts(request):
    '''
        takes {
            section: 'personal',
            ids: [1,2,4,3]
        }
            known sections: 'personal', 'public', 'featured'
            featured can only be edited by admins

        returns {}
    '''
    data = json.loads(request.POST['data'])
    position = 0
    section = data['section']
    section = {
        'favorite': 'public'
    }.get(section,section)
    #ids = list(set(data['ids']))
    ids = data['ids']
    if section == 'featured' and not request.user.get_profile().capability('canEditFeaturedTexts'):
        response = json_response(status=403, text='not allowed')
    else:
        user = request.user
        if section == 'featured':
            for i in ids:
                l = get_text_or_404_json(i)
                qs = models.Position.objects.filter(section=section, text=l)
                if qs.count() > 0:
                    pos = qs[0]
                else:
                    pos = models.Position(text=l, user=user, section=section)
                if pos.position != position:
                    pos.position = position
                    pos.save()
                position += 1
                models.Position.objects.filter(section=section, text=l).exclude(id=pos.id).delete()
        else:
            for i in ids:
                l = get_text_or_404_json(i)
                pos, created = models.Position.objects.get_or_create(text=l,
                                            user=request.user, section=section)
                if pos.position != position:
                    pos.position = position
                    pos.save()
                position += 1

        response = json_response()
    return render_to_json_response(response)
def sortEdits(request):
    '''
        takes {
            section: 'personal',
            ids: [1,2,4,3]
        }
            known sections: 'personal', 'public', 'featured'
            featured can only be edited by admins

        returns {}
    '''
    data = json.loads(request.POST['data'])
    position = 0
    section = data['section']
    section = {
        'favorite': 'public'
    }.get(section,section)
    #ids = list(set(data['ids']))
    ids = data['ids']
    if section == 'featured' and not request.user.get_profile().capability('canEditFeaturedEdits'):
        response = json_response(status=403, text='not allowed')
    else:
        user = request.user
        if section == 'featured':
            for i in ids:
                l = get_edit_or_404_json(i)
                qs = models.Position.objects.filter(section=section, edit=l)
                if qs.count() > 0:
                    pos = qs[0]
                else:
                    pos = models.Position(edit=l, user=user, section=section)
                if pos.position != position:
                    pos.position = position
                    pos.save()
                position += 1
                models.Position.objects.filter(section=section, edit=l).exclude(id=pos.id).delete()
        else:
            for i in ids:
                l = get_edit_or_404_json(i)
                pos, created = models.Position.objects.get_or_create(edit=l,
                                            user=request.user, section=section)
                if pos.position != position:
                    pos.position = position
                    pos.save()
                position += 1

        response = json_response()
    return render_to_json_response(response)
def resetPassword(request):
    '''
        takes {
            username: string,
            password: string,
            code: string
        }

        returns {
            errors: {
                code: 'Incorrect Code'
            }
            user {
            }
        }
    '''
    data = json.loads(request.POST['data'])
    if 'code' in data and 'password' in data:
        if not data['password']:
            response = json_response(
                {'errors': {
                    'password': '******'
                }})
        else:
            qs = models.UserProfile.objects.filter(reset_code=data['code'])
            if qs.count() == 1:
                user = qs[0].user
                user.set_password(data['password'])
                user.save()
                user_profile = user.get_profile()
                user_profile.reset_code = None
                user_profile.save()
                user = authenticate(username=user.username,
                                    password=data['password'])
                login(request, user)

                user_json = models.init_user(user, request)
                response = json_response({'user': user_json},
                                         text='password reset')
            else:
                response = json_response(
                    {'errors': {
                        'code': 'Incorrect code'
                    }})

    else:
        response = json_response(status=400, text='invalid data')
    return render_to_json_response(response)
Пример #49
0
def findId(request):
    '''
        takes {
            'id': string
            'title': string
            'director': [string]
            'year': int
        }
    '''
    data = json.loads(request.POST['data'])
    response = json_response({})
    response['data']['items'] = []
    if 'id' in data:
        qs = models.Item.objects.filter(itemId=data['id'])
        if qs.count() == 1:
            response['data']['items'] = [
                i.get_json(['title', 'director', 'year', 'id']) for i in qs
            ]

    if not response['data']['items'] \
        and settings.USE_IMDB \
        and settings.DATA_SERVICE:
        r = models.external_data('getId', data)
        if r['status']['code'] == 200:
            response['data']['items'] = [r['data']]
    return render_to_json_response(response)
Пример #50
0
def getMetadata(request):
    '''
        takes {
            id: string,
            keys: [string]
        }

        returns {
           key: value
           ..
        }

    '''
    data = json.loads(request.POST['data'])
    response = json_response({})
    if settings.DATA_SERVICE:
        '''
        info = {}
        for c in data['query']['conditions']:
            info[c['key']] = c['value']
        r = models.external_data('getId', info)
        '''
        r = models.external_data('getData', {'id': data['id']})
        if r['status']['code'] == 200:
            if 'keys' in data and data['keys']:
                for key in data['keys']:
                    if key in r['data']:
                        response['data'][key] = r['data'][key]
            else:
                response['data'] = r['data']
    return render_to_json_response(response)
Пример #51
0
def getIds(request):
    '''
        takes {
            title: string,
            director: [string],
            year: int
        }

        returns {
            items: [{
                tite: string,
                director: [string],
                year: int,
                originalTitle: string
            }]
        }
    '''
    data = json.loads(request.POST['data'])
    response = json_response({})
    if settings.DATA_SERVICE:
        r = models.external_data('getIds', data)
        if r['status']['code'] == 200:
            response['data']['items'] = r['data']['items']
    else:
        response['data']['items']
    return render_to_json_response(response)
Пример #52
0
def updateExternalData(request):
    '''
        takes {
            id: string,
        }
        returns {
        }
    '''
    data = json.loads(request.POST['data'])
    item = get_object_or_404_json(models.Item, itemId=data['id'])
    response = json_response()
    if item.editable(request.user):
        item.update_external()
    else:
        response = json_response(status=403, text='permission denied')
    return render_to_json_response(response)
Пример #53
0
def log(request):
    '''
        takes {
            url: string,
            line: string,
            text: string
        }
        returns {
        }
    '''
    data = json.loads(request.POST['data'])
    if request.user.is_authenticated():
        user = request.user
    else:
        user = None
    url = data.get('url', '').split('/static/')[-1]
    if 'text' in data:
        if len(url) > 1000:
            url = url[:997] + '...'
        l = models.Log(
            text=data['text'],
            line=int(data.get('line', 0)),
            url=url
        )
        if user:
            l.user = user
        l.save()
    response = json_response()
    return render_to_json_response(response)
def getIds(request):
    '''
        takes {
            title: string,
            director: [string],
            year: int
        }

        returns {
            items: [{
                tite: string,
                director: [string],
                year: int,
                originalTitle: string
            }]
        }
    '''
    data = json.loads(request.POST['data'])
    response = json_response({})
    if settings.DATA_SERVICE:
        r = models.external_data('getIds', data)
        if r['status']['code'] == 200:
            response['data']['items'] = r['data']['items']
    else:
        response['data']['items']
    return render_to_json_response(response)
def updateExternalData(request):
    '''
        takes {
            id: string,
        }
        returns {
        }
    '''
    data = json.loads(request.POST['data'])
    item = get_object_or_404_json(models.Item, itemId=data['id'])
    response = json_response()
    if item.editable(request.user):
        item.update_external()
    else:
        response = json_response(status=403, text='permission denied')
    return render_to_json_response(response)
def getSequence(request):
    '''
        takes {
            id
            mode 
            position
        }

        returns {
            id
            mode
            in
            out
        }
    '''
    data = json.loads(request.POST['data'])
    response = json_response()
    position = float('%0.03f' % data['position'])
    i = Item.objects.get(itemId=data['id'])
    qs = models.Sequence.objects.filter(
        sort_id=i.sort.pk,
        mode=models.Sequence.MODE[data['mode']], 
        start__lte=position,
        end__gt=position
    ).order_by('start', 'end')
    for sequence in qs:
        response['data'] = sequence.json()
        break
    return render_to_json_response(response)
Пример #57
0
def getMediaInfo(request):
    '''
        takes {
            id: oshash of stream file
        }
        returns {
            item: itemId,
            file: oshash of source file
        }
    '''
    data = json.loads(request.POST['data'])
    f = None
    qs = models.Stream.objects.filter(oshash=data['id'])
    if qs.count() > 0:
        s = qs[0]
        f = s.file
    else:
        qs = models.File.objects.filter(oshash=data['id'])
        if qs.count() > 0:
            f = qs[0]
    response = json_response()
    if f:
        response['data'] = {
            'file': f.oshash,
            'item': f.item.itemId
        }
    return render_to_json_response(response)
Пример #58
0
def removeEvent(request):
    '''
        remove Event with given id
        takes {
            id: event id
        }
        returns {}
    '''
    data = json.loads(request.POST['data'])
    event = get_object_or_404_json(models.Event, pk=ox.fromAZ(data['id']))
    if event.editable(request.user):
        event.delete()
        response = json_response(status=200, text='removed')
    else:
        response = json_response(status=403, text='permission denied')
    return render_to_json_response(response)
Пример #59
0
def removeEvent(request):
    '''
        remove Event with given id
        takes {
            id: event id
        }
        returns {}
    '''
    data = json.loads(request.POST['data'])
    event = get_object_or_404_json(models.Event, pk=ox.fromAZ(data['id']))
    if event.editable(request.user):
        event.delete()
        response = json_response(status=200, text='removed')
    else:
        response = json_response(status=403, text='permission denied')
    return render_to_json_response(response)