def as_dict(obj): if isinstance(obj, UserVideo): return {'url': obj.video.url, 'id': obj.video.id, 'liked': obj.liked, 'likes': UserVideo.like_count(obj.video), 'saved': obj.saved, 'saves': UserVideo.save_count(obj.video), 'position': obj.position} elif isinstance(obj, User): return {'name': ' '.join([obj.first_name, obj.last_name]), 'username': obj.username, 'picture': obj.picture(), 'email': obj.email, 'notifications': obj.notifications(), 'preferences': obj.preferences(), 'queued': obj.saved_videos().count(), 'saved': obj.videos.count(), 'watched': obj.watched_videos().count(), 'liked': obj.liked_videos().count()} elif isinstance(obj, Source): return {'name': obj.name, 'url': obj.url, 'favicon': obj.favicon} elif isinstance(obj, Thumbnail): return {'url': obj.url, 'width': obj.width, 'height': obj.height} elif isinstance(obj, Video): try: thumbnail = as_dict(obj.get_thumbnail()) except Thumbnail.DoesNotExist: thumbnail = None try: source = obj.source if source is not None: source = as_dict(source) except Source.DoesNotExist: source = None return {'id': obj.id, 'url': obj.url, 'title': obj.title, 'description': obj.description, 'thumbnail': thumbnail, 'source': source, 'saves': UserVideo.save_count(obj), 'likes': UserVideo.like_count(obj), 'state': default_app.backend.get_status(obj.task_id)} raise Exception('Unknown type:%s' % type(obj))
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() }