src/hp/views.py
author ymh <ymh.work@gmail.com>
Mon, 26 Nov 2012 17:01:05 +0100
changeset 83 07c9aa7de765
parent 74 1b68d4acab0d
permissions -rw-r--r--
update ldt + add search on videos
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
38
0fe2f3f5466f add basic pages and api endpoints
ymh <ymh.work@gmail.com>
parents:
diff changeset
     1
# -*- coding: utf-8 -*-
0fe2f3f5466f add basic pages and api endpoints
ymh <ymh.work@gmail.com>
parents:
diff changeset
     2
'''
0fe2f3f5466f add basic pages and api endpoints
ymh <ymh.work@gmail.com>
parents:
diff changeset
     3
Created on Nov 11, 2012
0fe2f3f5466f add basic pages and api endpoints
ymh <ymh.work@gmail.com>
parents:
diff changeset
     4
0fe2f3f5466f add basic pages and api endpoints
ymh <ymh.work@gmail.com>
parents:
diff changeset
     5
@author: ymh
0fe2f3f5466f add basic pages and api endpoints
ymh <ymh.work@gmail.com>
parents:
diff changeset
     6
'''
41
b6010b3d6ea8 add proxy, model, and correct embed_player
ymh <ymh.work@gmail.com>
parents: 38
diff changeset
     7
from django.conf import settings
45
316a0101512e add pagination new ldt version
ymh <ymh.work@gmail.com>
parents: 44
diff changeset
     8
from django.core.paginator import Paginator, PageNotAnInteger, EmptyPage
316a0101512e add pagination new ldt version
ymh <ymh.work@gmail.com>
parents: 44
diff changeset
     9
from django.http import HttpResponse
38
0fe2f3f5466f add basic pages and api endpoints
ymh <ymh.work@gmail.com>
parents:
diff changeset
    10
from django.shortcuts import render_to_response
0fe2f3f5466f add basic pages and api endpoints
ymh <ymh.work@gmail.com>
parents:
diff changeset
    11
from django.template.context import RequestContext
41
b6010b3d6ea8 add proxy, model, and correct embed_player
ymh <ymh.work@gmail.com>
parents: 38
diff changeset
    12
from hp.models import VideoKCRel
45
316a0101512e add pagination new ldt version
ymh <ymh.work@gmail.com>
parents: 44
diff changeset
    13
from hp.utils import get_all_objects
41
b6010b3d6ea8 add proxy, model, and correct embed_player
ymh <ymh.work@gmail.com>
parents: 38
diff changeset
    14
import logging
38
0fe2f3f5466f add basic pages and api endpoints
ymh <ymh.work@gmail.com>
parents:
diff changeset
    15
import requests
0fe2f3f5466f add basic pages and api endpoints
ymh <ymh.work@gmail.com>
parents:
diff changeset
    16
import urlparse
0fe2f3f5466f add basic pages and api endpoints
ymh <ymh.work@gmail.com>
parents:
diff changeset
    17
0fe2f3f5466f add basic pages and api endpoints
ymh <ymh.work@gmail.com>
parents:
diff changeset
    18
logger = logging.getLogger(__name__)
0fe2f3f5466f add basic pages and api endpoints
ymh <ymh.work@gmail.com>
parents:
diff changeset
    19
0fe2f3f5466f add basic pages and api endpoints
ymh <ymh.work@gmail.com>
parents:
diff changeset
    20
0fe2f3f5466f add basic pages and api endpoints
ymh <ymh.work@gmail.com>
parents:
diff changeset
    21
def all_videos(request):
0fe2f3f5466f add basic pages and api endpoints
ymh <ymh.work@gmail.com>
parents:
diff changeset
    22
    
83
07c9aa7de765 update ldt + add search on videos
ymh <ymh.work@gmail.com>
parents: 74
diff changeset
    23
    url = "%scontents/" % (settings.LDT_API_URL)
07c9aa7de765 update ldt + add search on videos
ymh <ymh.work@gmail.com>
parents: 74
diff changeset
    24
    
07c9aa7de765 update ldt + add search on videos
ymh <ymh.work@gmail.com>
parents: 74
diff changeset
    25
    request_params = {'limit' : settings.LDT_MAX_FETCH, 'order_by': 'title'}
07c9aa7de765 update ldt + add search on videos
ymh <ymh.work@gmail.com>
parents: 74
diff changeset
    26
    
07c9aa7de765 update ldt + add search on videos
ymh <ymh.work@gmail.com>
parents: 74
diff changeset
    27
    search = request.REQUEST.get("search", None)
07c9aa7de765 update ldt + add search on videos
ymh <ymh.work@gmail.com>
parents: 74
diff changeset
    28
    if search:
07c9aa7de765 update ldt + add search on videos
ymh <ymh.work@gmail.com>
parents: 74
diff changeset
    29
        search = search.strip()
07c9aa7de765 update ldt + add search on videos
ymh <ymh.work@gmail.com>
parents: 74
diff changeset
    30
        request_params['title__icontains'] = search
45
316a0101512e add pagination new ldt version
ymh <ymh.work@gmail.com>
parents: 44
diff changeset
    31
316a0101512e add pagination new ldt version
ymh <ymh.work@gmail.com>
parents: 44
diff changeset
    32
    #pagination TODO : implement a lazy loader     
83
07c9aa7de765 update ldt + add search on videos
ymh <ymh.work@gmail.com>
parents: 74
diff changeset
    33
    contents = get_all_objects(url, request_params, 'front_project')
07c9aa7de765 update ldt + add search on videos
ymh <ymh.work@gmail.com>
parents: 74
diff changeset
    34
45
316a0101512e add pagination new ldt version
ymh <ymh.work@gmail.com>
parents: 44
diff changeset
    35
    for content in contents:
38
0fe2f3f5466f add basic pages and api endpoints
ymh <ymh.work@gmail.com>
parents:
diff changeset
    36
        url_parts = urlparse.urlparse(content.get('image',''))
0fe2f3f5466f add basic pages and api endpoints
ymh <ymh.work@gmail.com>
parents:
diff changeset
    37
        if not url_parts.netloc:
0fe2f3f5466f add basic pages and api endpoints
ymh <ymh.work@gmail.com>
parents:
diff changeset
    38
            content['image'] = settings.LDT_DOMAIN + content.get('image','')
45
316a0101512e add pagination new ldt version
ymh <ymh.work@gmail.com>
parents: 44
diff changeset
    39
316a0101512e add pagination new ldt version
ymh <ymh.work@gmail.com>
parents: 44
diff changeset
    40
    paginator = Paginator(contents, settings.PER_PAGE, 0, True)
316a0101512e add pagination new ldt version
ymh <ymh.work@gmail.com>
parents: 44
diff changeset
    41
316a0101512e add pagination new ldt version
ymh <ymh.work@gmail.com>
parents: 44
diff changeset
    42
    page = request.GET.get('page',1)
316a0101512e add pagination new ldt version
ymh <ymh.work@gmail.com>
parents: 44
diff changeset
    43
    if page == 'last':
316a0101512e add pagination new ldt version
ymh <ymh.work@gmail.com>
parents: 44
diff changeset
    44
        page = paginator.num_pages
316a0101512e add pagination new ldt version
ymh <ymh.work@gmail.com>
parents: 44
diff changeset
    45
    try:
316a0101512e add pagination new ldt version
ymh <ymh.work@gmail.com>
parents: 44
diff changeset
    46
        results = paginator.page(page)
316a0101512e add pagination new ldt version
ymh <ymh.work@gmail.com>
parents: 44
diff changeset
    47
    except PageNotAnInteger:
316a0101512e add pagination new ldt version
ymh <ymh.work@gmail.com>
parents: 44
diff changeset
    48
        # If page is not an integer, deliver first page.
316a0101512e add pagination new ldt version
ymh <ymh.work@gmail.com>
parents: 44
diff changeset
    49
        results = paginator.page(1)
316a0101512e add pagination new ldt version
ymh <ymh.work@gmail.com>
parents: 44
diff changeset
    50
    except EmptyPage:
316a0101512e add pagination new ldt version
ymh <ymh.work@gmail.com>
parents: 44
diff changeset
    51
        # If page is out of range (e.g. 9999), deliver last page of results.
316a0101512e add pagination new ldt version
ymh <ymh.work@gmail.com>
parents: 44
diff changeset
    52
        results = paginator.page(paginator.num_pages)
83
07c9aa7de765 update ldt + add search on videos
ymh <ymh.work@gmail.com>
parents: 74
diff changeset
    53
    
07c9aa7de765 update ldt + add search on videos
ymh <ymh.work@gmail.com>
parents: 74
diff changeset
    54
    if search:
07c9aa7de765 update ldt + add search on videos
ymh <ymh.work@gmail.com>
parents: 74
diff changeset
    55
        search_param = "&search=%s" % search
07c9aa7de765 update ldt + add search on videos
ymh <ymh.work@gmail.com>
parents: 74
diff changeset
    56
        search_param_first = "?search=%s" % search
07c9aa7de765 update ldt + add search on videos
ymh <ymh.work@gmail.com>
parents: 74
diff changeset
    57
    else:
07c9aa7de765 update ldt + add search on videos
ymh <ymh.work@gmail.com>
parents: 74
diff changeset
    58
        search_param = ""
07c9aa7de765 update ldt + add search on videos
ymh <ymh.work@gmail.com>
parents: 74
diff changeset
    59
        search_param_first = ""
07c9aa7de765 update ldt + add search on videos
ymh <ymh.work@gmail.com>
parents: 74
diff changeset
    60
    
07c9aa7de765 update ldt + add search on videos
ymh <ymh.work@gmail.com>
parents: 74
diff changeset
    61
    return render_to_response('hp/all_videos.html',{'results':results, 'search': search, 'search_param': search_param, 'search_param_first': search_param_first}, context_instance=RequestContext(request))
38
0fe2f3f5466f add basic pages and api endpoints
ymh <ymh.work@gmail.com>
parents:
diff changeset
    62
    
0fe2f3f5466f add basic pages and api endpoints
ymh <ymh.work@gmail.com>
parents:
diff changeset
    63
0fe2f3f5466f add basic pages and api endpoints
ymh <ymh.work@gmail.com>
parents:
diff changeset
    64
def show_video_details(request, content_id):
0fe2f3f5466f add basic pages and api endpoints
ymh <ymh.work@gmail.com>
parents:
diff changeset
    65
    
0fe2f3f5466f add basic pages and api endpoints
ymh <ymh.work@gmail.com>
parents:
diff changeset
    66
    url_content = settings.LDT_API_URL + "contents/%s" % content_id
0fe2f3f5466f add basic pages and api endpoints
ymh <ymh.work@gmail.com>
parents:
diff changeset
    67
    
0fe2f3f5466f add basic pages and api endpoints
ymh <ymh.work@gmail.com>
parents:
diff changeset
    68
    r_content = requests.get(url_content)
0fe2f3f5466f add basic pages and api endpoints
ymh <ymh.work@gmail.com>
parents:
diff changeset
    69
        
0fe2f3f5466f add basic pages and api endpoints
ymh <ymh.work@gmail.com>
parents:
diff changeset
    70
    logger.debug(r_content.text)
41
b6010b3d6ea8 add proxy, model, and correct embed_player
ymh <ymh.work@gmail.com>
parents: 38
diff changeset
    71
    
b6010b3d6ea8 add proxy, model, and correct embed_player
ymh <ymh.work@gmail.com>
parents: 38
diff changeset
    72
    content = r_content.json
b6010b3d6ea8 add proxy, model, and correct embed_player
ymh <ymh.work@gmail.com>
parents: 38
diff changeset
    73
        
b6010b3d6ea8 add proxy, model, and correct embed_player
ymh <ymh.work@gmail.com>
parents: 38
diff changeset
    74
    kc_id = None
b6010b3d6ea8 add proxy, model, and correct embed_player
ymh <ymh.work@gmail.com>
parents: 38
diff changeset
    75
    topic_id = None
72
b31ba28871ca Back to normal annotation widget
ymh <ymh.work@gmail.com>
parents: 65
diff changeset
    76
    project_id = ""
41
b6010b3d6ea8 add proxy, model, and correct embed_player
ymh <ymh.work@gmail.com>
parents: 38
diff changeset
    77
    
b6010b3d6ea8 add proxy, model, and correct embed_player
ymh <ymh.work@gmail.com>
parents: 38
diff changeset
    78
    kc_relation_list = list(VideoKCRel.objects.filter(iri_id=content_id)[:1])
b6010b3d6ea8 add proxy, model, and correct embed_player
ymh <ymh.work@gmail.com>
parents: 38
diff changeset
    79
    
b6010b3d6ea8 add proxy, model, and correct embed_player
ymh <ymh.work@gmail.com>
parents: 38
diff changeset
    80
    if len(kc_relation_list) > 0:
b6010b3d6ea8 add proxy, model, and correct embed_player
ymh <ymh.work@gmail.com>
parents: 38
diff changeset
    81
        kc_id = kc_relation_list[0].graph_id
b6010b3d6ea8 add proxy, model, and correct embed_player
ymh <ymh.work@gmail.com>
parents: 38
diff changeset
    82
        topic_id = kc_relation_list[0].topic_id
65
6289931858a7 add a project property to override the front project.
ymh <ymh.work@gmail.com>
parents: 62
diff changeset
    83
        project_id = kc_relation_list[0].project_id
6289931858a7 add a project property to override the front project.
ymh <ymh.work@gmail.com>
parents: 62
diff changeset
    84
74
1b68d4acab0d back to multisegment. new version
ymh <ymh.work@gmail.com>
parents: 72
diff changeset
    85
    logger.debug("%s : %s : %s" % (kc_id, topic_id, repr(project_id)))
1b68d4acab0d back to multisegment. new version
ymh <ymh.work@gmail.com>
parents: 72
diff changeset
    86
65
6289931858a7 add a project property to override the front project.
ymh <ymh.work@gmail.com>
parents: 62
diff changeset
    87
    if not project_id:
6289931858a7 add a project property to override the front project.
ymh <ymh.work@gmail.com>
parents: 62
diff changeset
    88
        project_url = content['front_project']
6289931858a7 add a project property to override the front project.
ymh <ymh.work@gmail.com>
parents: 62
diff changeset
    89
        project_path = urlparse.urlparse(project_url).path    
6289931858a7 add a project property to override the front project.
ymh <ymh.work@gmail.com>
parents: 62
diff changeset
    90
        project_id = ""
6289931858a7 add a project property to override the front project.
ymh <ymh.work@gmail.com>
parents: 62
diff changeset
    91
        if project_path:
6289931858a7 add a project property to override the front project.
ymh <ymh.work@gmail.com>
parents: 62
diff changeset
    92
            project_path_parts = project_path.split("/")
6289931858a7 add a project property to override the front project.
ymh <ymh.work@gmail.com>
parents: 62
diff changeset
    93
            project_id = project_path_parts[-1] if project_path_parts[-1] else project_path_parts[-2]
41
b6010b3d6ea8 add proxy, model, and correct embed_player
ymh <ymh.work@gmail.com>
parents: 38
diff changeset
    94
    
74
1b68d4acab0d back to multisegment. new version
ymh <ymh.work@gmail.com>
parents: 72
diff changeset
    95
    logger.debug("%s : %s : %s" % (kc_id, topic_id, repr(project_id)))
1b68d4acab0d back to multisegment. new version
ymh <ymh.work@gmail.com>
parents: 72
diff changeset
    96
    
41
b6010b3d6ea8 add proxy, model, and correct embed_player
ymh <ymh.work@gmail.com>
parents: 38
diff changeset
    97
    return render_to_response(
b6010b3d6ea8 add proxy, model, and correct embed_player
ymh <ymh.work@gmail.com>
parents: 38
diff changeset
    98
        'hp/video_player.html',
b6010b3d6ea8 add proxy, model, and correct embed_player
ymh <ymh.work@gmail.com>
parents: 38
diff changeset
    99
        {'content':content, 'project_id': project_id, 'kc_id': kc_id, 'topic_id': topic_id},
b6010b3d6ea8 add proxy, model, and correct embed_player
ymh <ymh.work@gmail.com>
parents: 38
diff changeset
   100
        context_instance=RequestContext(request))
38
0fe2f3f5466f add basic pages and api endpoints
ymh <ymh.work@gmail.com>
parents:
diff changeset
   101
41
b6010b3d6ea8 add proxy, model, and correct embed_player
ymh <ymh.work@gmail.com>
parents: 38
diff changeset
   102
b6010b3d6ea8 add proxy, model, and correct embed_player
ymh <ymh.work@gmail.com>
parents: 38
diff changeset
   103
def kc_proxy(request, path):
b6010b3d6ea8 add proxy, model, and correct embed_player
ymh <ymh.work@gmail.com>
parents: 38
diff changeset
   104
    
44
0931f368cb9a correck kc proxy
ymh <ymh.work@gmail.com>
parents: 41
diff changeset
   105
    r = requests.request(request.method, settings.KC_URL + path, data=request.POST, params=request.GET)
41
b6010b3d6ea8 add proxy, model, and correct embed_player
ymh <ymh.work@gmail.com>
parents: 38
diff changeset
   106
    
44
0931f368cb9a correck kc proxy
ymh <ymh.work@gmail.com>
parents: 41
diff changeset
   107
    logger.debug("Proxy r url : " + r.url)
60
4a0bfe0002b1 proxy correction
ymh <ymh.work@gmail.com>
parents: 45
diff changeset
   108
    logger.debug("Proxy r method : " + r.request.method)
4a0bfe0002b1 proxy correction
ymh <ymh.work@gmail.com>
parents: 45
diff changeset
   109
    logger.debug("Proxy r full url : " + r.request.full_url)
62
0cdd0bb4141c correct proxy
ymh <ymh.work@gmail.com>
parents: 60
diff changeset
   110
    logger.debug("Proxy r status : " + str(r.status_code))
44
0931f368cb9a correck kc proxy
ymh <ymh.work@gmail.com>
parents: 41
diff changeset
   111
    logger.debug("Proxy r text : " + r.text)
0931f368cb9a correck kc proxy
ymh <ymh.work@gmail.com>
parents: 41
diff changeset
   112
        
41
b6010b3d6ea8 add proxy, model, and correct embed_player
ymh <ymh.work@gmail.com>
parents: 38
diff changeset
   113
    return HttpResponse(content=r.text, content_type='application/json;charset=UTF-8')
b6010b3d6ea8 add proxy, model, and correct embed_player
ymh <ymh.work@gmail.com>
parents: 38
diff changeset
   114