-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathhelpers.py
More file actions
100 lines (81 loc) · 2.83 KB
/
helpers.py
File metadata and controls
100 lines (81 loc) · 2.83 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
'''
Created on Sep 1, 2012
@author: Caroline
'''
from google.appengine.ext import db
from models import Posts
from google.appengine.api import images
from urlparse import urlparse, parse_qs
class Callable:
def __init__(self, anycallable):
self.__call__ = anycallable
class MediaHelper():
def getImageURL(self, blob_key):
if blob_key:
return images.get_serving_url(blob_key, size=None, crop=False, secure_url=None)
else:
return None
def parseYoutubeId(self, url):
if url:
return parse_qs(urlparse(url).query)['v'][0]
else:
return None
#TODO hack
def validate_vid_url(self, url):
try:
parse_qs(urlparse(url).query)['v'][0]
return True
except:
return False
class PostFilter():
mainarea = None
page_size = None
curr_page_num = 0
def __init__(self):
#init vars
if not PostFilter.mainarea:
self.setMainarea(self, 'gen_page')
if not PostFilter.page_size:
self.setPagesize(self, 10)
def loadMainPage(self, area, pagenum, *saved):
if not area:
area = self.mainarea
if not saved:
q = db.GqlQuery("SELECT * FROM Posts WHERE status='Published' ORDER BY date DESC")
else:
q = db.GqlQuery("SELECT * FROM Posts WHERE status='Saved' ORDER BY date DESC")
if pagenum:
self.curr_page_num = int(pagenum)
posts = q.fetch(self.page_size + 1, self.curr_page_num * self.page_size)
if len(posts) == self.page_size + 1:
isNext = True
posts = posts[:self.page_size]
else:
isNext = False
if self.curr_page_num > 0:
isPrev = True
else:
isPrev = False
dictImg = {}
dictVidId = {}
for post in posts:
#get image location
blob_url = MediaHelper().getImageURL(post.blob_key)
dictImg[post] = blob_url
#parse youtube url
dictVidId[post] = MediaHelper().parseYoutubeId(post.video_url)
return {'notes': posts, 'img' : dictImg, 'video' : dictVidId,
'pagenum' : self.curr_page_num, 'isNext' : isNext,
'isPrev' : isPrev}
def setMainarea(self, value):
PostFilter.mainarea = value
def setPagesize(self, value):
PostFilter.page_size = value
#get = Callable(get)
setMainarea = Callable(setMainarea)
setPagesize = Callable(setPagesize)
#TODO limit 1000, could be done better with cursors
def totalPosts(self):
return Posts.all().filter('status', 'Published').count()
def send_error(self, field, subject, content):
pass