def unlike_by_url(request): if not request.user.is_authenticated(): raise Unauthorized() querydict = request.GET if request.method == 'GET' else request.POST try: normalized_url = url_fix(querydict['url']) except MalformedURLException: raise BadRequest('Malformed URL:%s' % url) try: return as_dict(request.user.unlike_video(Video.objects.get(url=normalized_url))) except KeyError: raise BadRequest('Parameter:url missing') except Video.DoesNotExist: raise VideoNotFound(url)
def like_by_url(request): if not request.user.is_authenticated(): raise Unauthorized() querydict = request.GET if request.method == 'GET' else request.POST try: normalized_url = url_fix(querydict['url']) except KeyError: raise BadRequest('Parameter:url missing') except MalformedURLException: raise BadRequest('Malformed URL:%s' % url) try: video = Video.objects.get(url=normalized_url) try: UserVideo.objects.get(user=request.user, video=video, liked_timestamp__isnull=False) except UserVideo.DoesNotExist: push_like_to_fb.delay(video, request.user) user_video = request.user.like_video(video) task_id = video.task_id except Video.DoesNotExist: video = Video(url=normalized_url) video.save() user_video = UserVideo(user=request.user, video=video, host=request.META.get('HTTP_REFERER'), liked=True, liked_timestamp=datetime.utcnow()) user_video.save() # Fetch video metadata in background task = fetch.delay(request.user.id, normalized_url, user_video.host, callback=push_like_to_fb.subtask((request.user, ))) task_id = task.task_id info = as_dict(user_video) info['task_id'] = task_id info['first'] = request.user.notifications()['firstlike'] return info
def add(request): if not request.user.is_authenticated(): raise Unauthorized() querydict = request.GET if request.method == 'GET' else request.POST try: normalized_url = url_fix(querydict['url']) except KeyError: raise BadRequest('Parameter:url missing') except MalformedURLException: raise BadRequest('Malformed URL:%s' % url) try: user_video = UserVideo.objects.get(user=request.user, video__url=normalized_url) if user_video.saved: raise BadRequest('Video:%s already saved with id:%s' % (user_video.video.url, user_video.video.id)) except UserVideo.DoesNotExist: try: video = Video.objects.get(url=normalized_url) except Video.DoesNotExist: video = Video(url=normalized_url) video.save() user_video = UserVideo(user=request.user, video=video) user_video.saved = True user_video.saved_timestamp = datetime.utcnow() user_video.host = request.META.get('HTTP_REFERER') user_video.save() # Fetch video metadata in background task = fetch.delay(request.user.id, normalized_url, user_video.host) info = as_dict(user_video) info.update({'first': request.user.saved_videos().count() == 1, 'unwatched': request.user.unwatched_videos().count(), 'task_id': task.task_id}) return info
def info(request): querydict = request.GET if request.method == 'GET' else request.POST # Either as GET/POST parameter or REST-style url component urls = querydict.get('urls') if urls is not None: urls = [{ 'url': url } for url in split(r',\s*', urls)] # JSON payload in request body elif 'videos' in querydict: try: urls = loads(querydict['videos']) except: raise BadRequest('No JSON object could be decoded') else: raise BadRequest('Must supply url list or video array') requested, response = dict(), dict() try: for item in urls: try: normalized_url = url_fix(item['url']) requested[normalized_url] = item except MalformedURLException: item['success'] = False item['error'] = 'Malformed URL' response[item['url']] = item except (TypeError, KeyError): raise BadRequest('Input incorrectly formatted') authenticated = request.user.is_authenticated() if authenticated: for user_video in UserVideo.objects.filter(user=request.user): url = user_video.video.url try: response[url] = requested[url] except KeyError: continue response[url]['normalized'] = url response[url]['success'] = True response[url]['saved'] = user_video.saved response[url]['saves'] = UserVideo.save_count(user_video.video) response[url]['liked'] = user_video.liked response[url]['likes'] = UserVideo.like_count(user_video.video) for url in set(requested.keys()) - set(response.keys()): response[url] = requested[url] response[url]['normalized'] = url response[url]['success'] = True response[url]['saved'] = response[url]['liked'] = False try: video = Video.objects.get(url=url) response[url]['saves'] = UserVideo.save_count(video) response[url]['likes'] = UserVideo.like_count(video) except Video.DoesNotExist: response[url]['saves'] = response[url]['likes'] = 0 return { 'authenticated': authenticated, 'videos': response.values() }