add pagination new ldt version
authorymh <ymh.work@gmail.com>
Thu, 15 Nov 2012 04:11:59 +0100
changeset 45 316a0101512e
parent 44 0931f368cb9a
child 46 de1e5c484575
add pagination new ldt version
src/hp/__init__.py
src/hp/config.py.tmpl
src/hp/forms.py
src/hp/settings.py
src/hp/static/hp/css/videos.css
src/hp/templates/hp/all_videos.html
src/hp/utils.py
src/hp/views.py
virtualenv/res/src/ldt-1.30.tar.gz
--- a/src/hp/__init__.py	Wed Nov 14 18:47:17 2012 +0100
+++ b/src/hp/__init__.py	Thu Nov 15 04:11:59 2012 +0100
@@ -1,4 +1,4 @@
-VERSION = (0, 1, 0, "alpha", 0)
+VERSION = (0, 2, 0, "alpha", 0)
 
 VERSION_STR = unicode(".".join(map(lambda i:"%02d" % (i,), VERSION[:2])))
 
--- a/src/hp/config.py.tmpl	Wed Nov 14 18:47:17 2012 +0100
+++ b/src/hp/config.py.tmpl	Thu Nov 15 04:11:59 2012 +0100
@@ -104,7 +104,14 @@
     }
 }
 
-LDT_DOMAIN = 'http://localhost'
-LDT_API_URL = LDT_DOMAIN + '/~ymh/hp_ldt/ldtplatform/api/1.0/'
+LDT_NETLOC = "localhost"
+LDT_DOMAIN = 'http://'+LDT_NETLOC
+LDT_BASE_URL = LDT_DOMAIN + '/~ymh/hp_ldt/'
+LDT_URL = LDT_BASE_URL + "ldtplatform/"
+LDT_API_URL = LDT_URL + 'api/ldt/1.0/'
+LDT_STATIC_URL = LDT_BASE_URL + "static/site/"
 
+PER_PAGE = 9
 
+KC_URL = 'http://176.32.94.234/kn-concierge/'
+
--- a/src/hp/forms.py	Wed Nov 14 18:47:17 2012 +0100
+++ b/src/hp/forms.py	Thu Nov 15 04:11:59 2012 +0100
@@ -5,10 +5,13 @@
 @author: ymh
 '''
 
-from django import forms
+from . import settings
 from .models import VideoKCRel
-import requests
-from . import settings
+from .utils import get_all_objects
+from django import forms
+import logging
+
+logger = logging.getLogger(__name__)
 
 class VideoKCRelForm(forms.ModelForm):
     
@@ -17,10 +20,9 @@
     def __init__(self, *args, **kwargs):
         super(VideoKCRelForm, self).__init__(*args, **kwargs)
         
-        url = settings.LDT_API_URL + "contents/"
-        #limit=20&offset=20
-        r = requests.get(url)        
-        self.fields['iri_id'].widget.choices = [(content['iri_id'], content['title']) for content in r.json['objects']]
+        url = settings.LDT_API_URL + "contents/?limit=" + str(settings.LDT_MAX_FETCH)
+        contents = get_all_objects(url, 'front_project')
+        self.fields['iri_id'].widget.choices = [(content['iri_id'], content['title']) for content in contents]
         
     class Meta:
         model = VideoKCRel
--- a/src/hp/settings.py	Wed Nov 14 18:47:17 2012 +0100
+++ b/src/hp/settings.py	Thu Nov 15 04:11:59 2012 +0100
@@ -163,7 +163,8 @@
     }
 }
 
-LDT_DOMAIN = 'http://capsicum'
+LDT_NETLOC = "capsicum"
+LDT_DOMAIN = 'http://'+LDT_NETLOC
 LDT_BASE_URL = LDT_DOMAIN + '/pf/'
 LDT_URL = LDT_BASE_URL + "ldtplatform/"
 LDT_API_URL = LDT_URL + 'api/ldt/1.0/'
@@ -171,9 +172,12 @@
 
 KC_URL = 'http://176.32.94.234/kn-concierge/'
 
+PER_PAGE = 9
+LDT_MAX_FETCH = 200
+
+
 
 from .config import * #@UnusedWildImport
 
 
 
-
--- a/src/hp/static/hp/css/videos.css	Wed Nov 14 18:47:17 2012 +0100
+++ b/src/hp/static/hp/css/videos.css	Thu Nov 15 04:11:59 2012 +0100
@@ -30,3 +30,9 @@
 .video-author {
     text-decoration: underline;
 }
+
+.pagination {
+	float: right;
+	width: 110px;
+	text-align: center;
+}
--- a/src/hp/templates/hp/all_videos.html	Wed Nov 14 18:47:17 2012 +0100
+++ b/src/hp/templates/hp/all_videos.html	Thu Nov 15 04:11:59 2012 +0100
@@ -21,7 +21,7 @@
 <div class="main row">
     <h2>{% trans 'All videos' %}</h2>
     <div class="row">
-    {% for content in results.objects %}
+    {% for content in results %}
         <div class="video">
             <p>
                 <a href="{% url hp.views.show_video_details content.iri_id %}">
@@ -41,5 +41,24 @@
         {% endif %}
     {% endfor %}
     </div>
+    {% if results.has_other_pages %}
+    <div class="pagination">
+        <span class="step-links">
+        {% if results.has_previous %}
+            <a href="{% url hp.views.all_videos %}><<</a> <a href="{% url hp.views.all_videos %}?page={{ results.previous_page_number }}"><</a>
+        {% else %}
+            {{"&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;"|safe}}
+        {% endif %}
+        <span class="current">
+            {{ results.number }}/{{ results.paginator.num_pages }}
+        </span>
+        {% if results.has_next %}
+            <a href="{% url hp.views.all_videos %}?page={{ results.next_page_number }}">></a> <a href="{% url hp.views.all_videos %}?page=last">>></a>
+        {% else %}
+            {{"&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;"|safe}}
+        {% endif %}
+        </span>
+    </div>
+    {% endif %}
 </div>
 {% endblock %}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/hp/utils.py	Thu Nov 15 04:11:59 2012 +0100
@@ -0,0 +1,36 @@
+# -*- coding: utf-8 -*-
+'''
+Created on Nov 14, 2012
+
+@author: ymh
+'''
+import urlparse
+import requests
+from . import settings
+import logging
+
+logger = logging.getLogger(__name__)
+
+def get_abs_url(url, default_domain):
+    
+    if not url:
+        return url
+    url_part = urlparse.urlparse(url)
+    if url_part.netloc:
+        return url
+    else:
+        pr = urlparse.ParseResult('http', default_domain, url_part.path, url_part.params, url_part.query, url_part.fragment)
+        return pr.geturl()
+    
+
+def get_all_objects(res_url, field_filter):
+    contents = []
+    url = res_url
+    while url:        
+        r = requests.get(url)
+        if r.status_code != requests.codes.ok: #@UndefinedVariable
+            logger.error("Error when requesting contents " + repr(r.status_code) + " : " + repr(r.text))
+            break
+        contents.extend([ c for c in  r.json['objects'] if c.get(field_filter, None) ])
+        url = get_abs_url(r.json.get('meta',{}).get('next',None), settings.LDT_NETLOC)
+    return contents
--- a/src/hp/views.py	Wed Nov 14 18:47:17 2012 +0100
+++ b/src/hp/views.py	Thu Nov 15 04:11:59 2012 +0100
@@ -5,10 +5,12 @@
 @author: ymh
 '''
 from django.conf import settings
+from django.core.paginator import Paginator, PageNotAnInteger, EmptyPage
+from django.http import HttpResponse
 from django.shortcuts import render_to_response
 from django.template.context import RequestContext
-from django.http import HttpResponse
 from hp.models import VideoKCRel
+from hp.utils import get_all_objects
 import logging
 import requests
 import urlparse
@@ -18,20 +20,28 @@
 
 def all_videos(request):
     
-    #get all videos
-    #render
-    url = settings.LDT_API_URL + "contents/"
-    #limit=20&offset=20
-    r = requests.get(url)
-        
-    
-    
-    results = r.json
-        
-    for content in results.get('objects', []):
+    url = settings.LDT_API_URL + "contents/?limit=" + str(settings.LDT_MAX_FETCH)
+
+    #pagination TODO : implement a lazy loader     
+    contents = get_all_objects(url, 'front_project')
+    for content in contents:
         url_parts = urlparse.urlparse(content.get('image',''))
         if not url_parts.netloc:
             content['image'] = settings.LDT_DOMAIN + content.get('image','')
+
+    paginator = Paginator(contents, settings.PER_PAGE, 0, True)
+
+    page = request.GET.get('page',1)
+    if page == 'last':
+        page = paginator.num_pages
+    try:
+        results = paginator.page(page)
+    except PageNotAnInteger:
+        # If page is not an integer, deliver first page.
+        results = paginator.page(1)
+    except EmptyPage:
+        # If page is out of range (e.g. 9999), deliver last page of results.
+        results = paginator.page(paginator.num_pages)
         
     return render_to_response('hp/all_videos.html',{'results':results}, context_instance=RequestContext(request))
     
Binary file virtualenv/res/src/ldt-1.30.tar.gz has changed