def obj_create(self, bundle, request=None, **kwargs): url = bundle.data['url'] port = get_port(bundle) bundle.data['port'] = port # check to see if this exists blacklist_item = get_BlackListItem(url, port) if blacklist_item: blacklist_item.delete() # do not create if it is a default blacklist url if url in DEFAULT_BLACKLIST: return bundle try: WhiteListItem.objects.get(user=request.user, url=url, port=port) except WhiteListItem.DoesNotExist: try: return super(WhiteListItemResource, self).obj_create(bundle, request, user=request.user, **kwargs) except MultipleObjectsReturned as e: logger.info(e) return bundle return bundle
def add_tag(request): domain = request.POST.get('domain', None) name = request.POST.get('tag', None) if not domain or not name: return {'res': 'failed'} user = request.user try: tags = Tag.objects.filter(user=user, domain=domain) if tags.count() > 0: tag = tags[0] tag.name = name tag.is_private = True tag.save() else: color_tags = Tag.objects.filter(user=user, name=name) if color_tags.count() > 0: color = color_tags[0].color else: r = lambda: random.randint(0, 255) color = '%02X%02X%02X' % (r(), r(), r()) Tag.objects.get_or_create(user=user, domain=domain, name=name, color=color) except Exception, e: logger.info(e)
def obj_create(self, bundle, request=None, **kwargs): url = bundle.data['url'] port = get_port(bundle) bundle.data['port'] = port # check to see if this exists blacklist_item = get_BlackListItem(url, port) if blacklist_item: blacklist_item.delete() # do not create if it is a default blacklist url if url in DEFAULT_BLACKLIST: return bundle try: WhiteListItem.objects.get(user=request.user, url=url, port=port) except WhiteListItem.DoesNotExist: try: return super(WhiteListItemResource, self).obj_create( bundle, request, user=request.user, **kwargs) except MultipleObjectsReturned as e: logger.info(e) return bundle return bundle
def add_tag(request): domain = request.POST.get('domain', None) name = request.POST.get('tag', None) if not domain or not name: return {'res': 'failed'} user = request.user try: tags = Tag.objects.filter(user=user, domain=domain) if tags.count() > 0: tag = tags[0] tag.name = name tag.is_private = True tag.save() else: color_tags = Tag.objects.filter(user=user, name=name) if color_tags.count() > 0: color = color_tags[0].color else: r = lambda: random.randint(0, 255) color = '%02X%02X%02X' % (r(), r(), r()) Tag.objects.get_or_create( user=user, domain=domain, name=name, color=color) except Exception, e: logger.info(e)
def sync_twitter(request): """ Edit connection (following/followers) """ user = request.user template_dict = { "connected": False, "synced": "You are not connected to Eyebrowse." } auth = tweepy.OAuthHandler( TWITTER_CONSUMER_KEY, TWITTER_CONSUMER_SECRET, "http://eyebrowse.csail.mit.edu/accounts/profile/sync_twitter") twitter_info = TwitterInfo.objects.filter(user=user) if len(twitter_info) > 0: auth.set_access_token(twitter_info[0].access_token, twitter_info[0].access_token_secret) api = tweepy.API(auth) template_dict[ "synced"] = "Your Twitter account is already connected to Eyebrowse." get_twitter_info(request, api, twitter_info[0], template_dict) else: if "request_token" in request.session: token = request.session.pop("request_token") auth.request_token = token try: verifier = request.GET.get('oauth_verifier') auth.get_access_token(verifier) token = auth.access_token secret = auth.access_token_secret api = tweepy.API(auth) twitter_user = api.me() username = twitter_user.screen_name twitter_id = twitter_user.id twit_obj = TwitterInfo.objects.create( user=user, twitter_username=username, twitter_id=twitter_id, access_token=token, access_token_secret=secret) template_dict[ "synced"] = "Your Twitter account is now connected to Eyebrowse!" get_twitter_info(request, api, twit_obj, template_dict) except tweepy.TweepError, e: logger.info(e) logger.info("Error! Failed to get access token") else:
def sync_twitter(request): """ Edit connection (following/followers) """ user = request.user template_dict = {"connected": False, "synced": "You are not connected to Eyebrowse."} auth = tweepy.OAuthHandler( TWITTER_CONSUMER_KEY, TWITTER_CONSUMER_SECRET, "http://eyebrowse.csail.mit.edu/accounts/profile/sync_twitter") twitter_info = TwitterInfo.objects.filter(user=user) if len(twitter_info) > 0: auth.set_access_token( twitter_info[0].access_token, twitter_info[0].access_token_secret) api = tweepy.API(auth) template_dict[ "synced"] = "Your Twitter account is already connected to Eyebrowse." get_twitter_info(request, api, twitter_info[0], template_dict) else: if "request_token" in request.session: token = request.session.pop("request_token") auth.request_token = token try: verifier = request.GET.get('oauth_verifier') auth.get_access_token(verifier) token = auth.access_token secret = auth.access_token_secret api = tweepy.API(auth) twitter_user = api.me() username = twitter_user.screen_name twitter_id = twitter_user.id twit_obj = TwitterInfo.objects.create( user=user, twitter_username=username, twitter_id=twitter_id, access_token=token, access_token_secret=secret) template_dict[ "synced"] = "Your Twitter account is now connected to Eyebrowse!" get_twitter_info(request, api, twit_obj, template_dict) except tweepy.TweepError, e: logger.info(e) logger.info("Error! Failed to get access token") else:
def clicked_item(request): try: logger.info(request) if request.user.is_authenticated(): user = get_object_or_404(User, username=request.user.username) else: user = None ip = get_ip(request) url_click = request.POST.get('url_click') url_refer = request.POST.get('url_refer') _ = ClickItem.objects.create(user=user, ip_address=ip, url_clicked=url_click, url_referrer=url_refer) except Exception, e: logger.info(e)
def clicked_item(request): try: logger.info(request) if request.user.is_authenticated(): user = get_object_or_404(User, username=request.user.username) else: user = None ip = get_ip(request) url_click = request.POST.get('url_click') url_refer = request.POST.get('url_refer') recommendation = request.POST.get('recommendation', None) c = ClickItem(user=user, ip_address=ip, url_clicked=url_click, url_referrer=url_refer) if recommendation: c.recommendation = True c.save() except Exception, e: logger.info(e)
def obj_create(self, bundle, request=None, **kwargs): url = bundle.data['url'] port = get_port(bundle) bundle.data['port'] = port # check to see if this exists whitelist_item = get_WhiteListItem(url, port) if whitelist_item: whitelist_item.delete() try: BlackListItem.objects.get(user=request.user, url=url, port=port) except BlackListItem.DoesNotExist: try: return super(BlackListItemResource, self ).obj_create( bundle, request, user=request.user, **kwargs) except MultipleObjectsReturned as e: logger.info(e) return bundle return bundle
user=user, twitter_username=username, twitter_id=twitter_id, access_token=token, access_token_secret=secret) template_dict[ "synced"] = "Your Twitter account is now connected to Eyebrowse!" get_twitter_info(request, api, twit_obj, template_dict) except tweepy.TweepError, e: logger.info(e) logger.info("Error! Failed to get access token") else: logger.info("no request_token") try: redirect_rule = auth.get_authorization_url() request.session["request_token"] = auth.request_token return redirect_to(request, redirect_rule) except tweepy.TweepError, e: logger.info(e) logger.info("Error! Failed to get request token") return _template_values(request, page_title="Connect Twitter", navbar='nav_account', sub_navbar="subnav_sync_twitter", **template_dict)
def obj_create(self, bundle, request=None, **kwargs): url = bundle.data['url'] domain = url_domain(url) bundle.data['domain'] = domain title = bundle.data['title'] start_time = bundle.data['start_time'] start_event = bundle.data['start_event'] end_time = bundle.data['end_time'] end_event = bundle.data['end_event'] favicon_url = bundle.data.get('favIconUrl') bundle.data['favicon_url'] = favicon_url src = bundle.data['src'] end_time = datetime.datetime.strptime( end_time, '%Y-%m-%dT%H:%M:%S.%fZ').replace(tzinfo=pytz.utc) start_time = datetime.datetime.strptime( start_time, '%Y-%m-%dT%H:%M:%S.%fZ').replace(tzinfo=pytz.utc) message = bundle.data.get('message') if message and message.strip() == '': message = None if message: bundle.data.pop('message', None) try: exists = EyeHistory.objects.filter(user=request.user, url=url, title=title, src=src, favicon_url=favicon_url, start_time__gt=start_time - datetime.timedelta(minutes=1), start_event=start_event) if exists.count() > 0: eye_his = exists[0] eye_his.end_time = end_time eye_his.end_event = end_event elapsed_time = end_time - start_time eye_his.total_time = int(round( (elapsed_time.microseconds / 1.0E3) + (elapsed_time.seconds * 1000) + (elapsed_time.days * 8.64E7))) eye_his.humanize_time = humanize_time(elapsed_time) eye_his.save() if message: eye_message, _ = EyeHistoryMessage.objects.get_or_create( eyehistory=eye_his, message=message) notify_message(message=eye_message) else: # save_raw_eyehistory(request.user, url, title, start_event, end_event, start_time, end_time, src, domain, favicon_url) dup_histories = EyeHistory.objects.filter( user=request.user, url=url, title=title, end_time__gt=start_time - datetime.timedelta(minutes=5)) if dup_histories.count() > 0: obj = merge_histories(dup_histories, end_time, end_event) if message: eye_message, _ = EyeHistoryMessage.objects.get_or_create( eyehistory=obj, message=message) notify_message(message=eye_message) else: bundle_res = super(EyeHistoryResource, self).obj_create( bundle, request, user=request.user, **kwargs) check_bumps(request.user, start_time, end_time, url) if message: eye_message, _ = EyeHistoryMessage.objects.get_or_create( eyehistory=bundle_res.obj, message=message) notify_message(message=eye_message) return bundle_res except MultipleObjectsReturned as e: logger.info(e) # multiple items created, delete duplicates call_command('remove_duplicate_history') return bundle
def log(self, msg): msg = 'update_popular_history:::%s\n' % msg logger.info(msg)
def obj_create(self, bundle, request=None, **kwargs): url = bundle.data['url'] domain = url_domain(url) bundle.data['domain'] = domain title = bundle.data.get('title') start_time = bundle.data.get('start_time') start_event = bundle.data.get('start_event') end_time = bundle.data.get('end_time') end_event = bundle.data.get('end_event') favicon_url = bundle.data.get('favIconUrl') bundle.data['favicon_url'] = favicon_url src = bundle.data.get('src') tags = bundle.data.get('tags') if tags: tags = json.loads(tags); if end_time and start_time: end_time = datetime.datetime.strptime( end_time, '%Y-%m-%dT%H:%M:%S.%fZ').replace(tzinfo=pytz.utc) start_time = datetime.datetime.strptime( start_time, '%Y-%m-%dT%H:%M:%S.%fZ').replace(tzinfo=pytz.utc) else: end_time = datetime.datetime.now().replace(tzinfo=pytz.utc) start_time = datetime.datetime.now().replace(tzinfo=pytz.utc) message = bundle.data.get('message') highlight = bundle.data.get('highlight') parent_comment = bundle.data.get('parent_comment') if message and message.strip() == '': message = None if message: bundle.data.pop('message', None) if highlight: bundle.data.pop('highlight', None) if parent_comment: bundle.data.pop('parent_comment', None) try: exists = EyeHistory.objects.filter(user=request.user, url=url, title=title, src=src, favicon_url=favicon_url, start_time__gt=start_time - datetime.timedelta(minutes=1), start_event=start_event) if exists.count() > 0: eye_his = exists[0] eye_his.end_time = end_time eye_his.end_event = end_event elapsed_time = end_time - start_time eye_his.total_time = int(round( (elapsed_time.microseconds / 1.0E3) + (elapsed_time.seconds * 1000) + (elapsed_time.days * 8.64E7))) eye_his.humanize_time = humanize_time(elapsed_time) eye_his.save() if message: eye_message, _ = EyeHistoryMessage.objects.get_or_create( eyehistory=eye_his, message=message) notify_message(message=eye_message) else: # save_raw_eyehistory(request.user, url, title, start_event, end_event, start_time, end_time, src, domain, favicon_url) dup_histories = EyeHistory.objects.filter( user=request.user, url=url, title=title, end_time__gt=start_time - datetime.timedelta(minutes=5)) if dup_histories.count() > 0: obj = merge_histories(dup_histories, end_time, end_event) if message: eye_message, _ = EyeHistoryMessage.objects.get_or_create( eyehistory=obj, message=message) notify_message(message=eye_message) else: bundle_res = super(EyeHistoryResource, self).obj_create( bundle, request, user=request.user, **kwargs) check_bumps(request.user, start_time, end_time, url) if message: eye_message = None if parent_comment: h = Highlight.objects.get(id=highlight) eye_message, _ = EyeHistoryMessage.objects.get_or_create( eyehistory=bundle_res.obj, message=message, highlight=h, parent_comment=parent_comment) elif highlight: h = Highlight.objects.get(id=highlight) eye_message, _ = EyeHistoryMessage.objects.get_or_create( eyehistory=bundle_res.obj, message=message, highlight=h) else: eye_message, _ = EyeHistoryMessage.objects.get_or_create( eyehistory=bundle_res.obj, message=message) if tags: for tag in tags: if len(Tag.objects.filter(comment=eye_message, common_tag__name=tag)) == 0: try: common_tag = CommonTag.objects.get(name=tag) vt = Tag( common_tag=common_tag, user=request.user, comment=eye_message, ) vt.save() except CommonTag.DoesNotExist: pass notify_message(message=eye_message) return bundle_res except MultipleObjectsReturned as e: logger.info(e) # multiple items created, delete duplicates call_command('remove_duplicate_history') return bundle
def profile_viz(request, username=None): if request.GET.get("date") is None or request.GET.get("date") == "null": return redirect_to(request, "/users/%s/visualizations?date=last week&query=%s" % (username, request.GET.get("query", ""))) if request.user.is_authenticated(): user = get_object_or_404(User, username=request.user.username) userprof = UserProfile.objects.get(user=user) confirmed = userprof.confirmed if not confirmed: return redirect('/consent') else: user = None userprof = None username, follows, profile_user, empty_search_msg, nav_bar = _profile_info( user, username) get_dict, query, date, sort, filter = _get_query(request) logger.info(get_dict) logger.info(date) get_dict["orderBy"] = "end_time" get_dict["direction"] = "hl" get_dict["filter"] = "" get_dict["page"] = request.GET.get("page", 1) get_dict["username"] = profile_user.username get_dict["sort"] = "time" hist, history_stream = live_stream_query_manager(get_dict, profile_user) # stats tot_time, item_count = profile_stat_gen(profile_user) fav_data = FavData.objects.get(user=profile_user) num_history = EyeHistory.objects.filter(user=profile_user).count() is_online = online_user(user=profile_user) following_count = profile_user.profile.follows.count() follower_count = UserProfile.objects.filter( follows=profile_user.profile).count() today = datetime.now() - timedelta(hours=24) day_count = hist.filter(start_time__gt=today ).values('url', 'title' ).annotate(num_urls=Sum('total_time') ).order_by('-num_urls')[:3] day_domains = hist.filter( start_time__gt=today ).values('domain' ).annotate(num_domains=Sum('total_time') ).order_by('-num_domains')[:5] day_chart = {} for domain in day_domains: day_chart[domain['domain']] = domain['num_domains'] last_week = today - timedelta(days=7) week_count = hist.filter(start_time__gt=last_week).values( 'url', 'title' ).annotate(num_urls=Sum('total_time') ).order_by('-num_urls')[:3] week_domains = hist.filter( start_time__gt=last_week ).values('domain' ).annotate(num_domains=Sum('total_time') ).order_by('-num_domains')[:5] week_chart = {} for domain in week_domains: week_chart[domain['domain']] = domain['num_domains'] template_dict = { 'visualization': True, 'username': profile_user.username, 'following_count': following_count, 'follower_count': follower_count, "profile_user": profile_user, "history_stream": history_stream, "empty_search_msg": empty_search_msg, "follows": str(follows), "is_online": is_online, "num_history": num_history, "tot_time": tot_time, "item_count": item_count, "fav_data": fav_data, "query": query, "date": date, 'day_articles': day_count, 'week_articles': week_count, 'day_chart': json.dumps(day_chart), 'week_chart': json.dumps(week_chart), } return _template_values( request, page_title="profile history", navbar=nav_bar, sub_navbar="subnav_data", **template_dict)
def obj_create(self, bundle, request=None, **kwargs): url = bundle.data['url'] domain = url_domain(url) bundle.data['domain'] = domain title = bundle.data['title'] start_time = bundle.data['start_time'] start_event = bundle.data['start_event'] end_time = bundle.data['end_time'] end_event = bundle.data['end_event'] favicon_url = bundle.data.get('favIconUrl') bundle.data['favicon_url'] = favicon_url src = bundle.data['src'] end_time = datetime.datetime.strptime( end_time, '%Y-%m-%dT%H:%M:%S.%fZ').replace(tzinfo=pytz.utc) start_time = datetime.datetime.strptime( start_time, '%Y-%m-%dT%H:%M:%S.%fZ').replace(tzinfo=pytz.utc) message = bundle.data.get('message') if message and message.strip() == '': message = None if message: bundle.data.pop('message', None) try: exists = EyeHistory.objects.filter(user=request.user, url=url, title=title, src=src, favicon_url=favicon_url, start_time__gt=start_time - datetime.timedelta(minutes=1), start_event=start_event) if exists.count() > 0: eye_his = exists[0] eye_his.end_time = end_time eye_his.end_event = end_event elapsed_time = end_time - start_time eye_his.total_time = int( round((elapsed_time.microseconds / 1.0E3) + (elapsed_time.seconds * 1000) + (elapsed_time.days * 8.64E7))) eye_his.humanize_time = humanize_time(elapsed_time) eye_his.save() if message: eye_message, _ = EyeHistoryMessage.objects.get_or_create( eyehistory=eye_his, message=message) notify_message(message=eye_message) else: # save_raw_eyehistory(request.user, url, title, start_event, end_event, start_time, end_time, src, domain, favicon_url) dup_histories = EyeHistory.objects.filter( user=request.user, url=url, title=title, end_time__gt=start_time - datetime.timedelta(minutes=5)) if dup_histories.count() > 0: obj = merge_histories(dup_histories, end_time, end_event) if message: eye_message, _ = EyeHistoryMessage.objects.get_or_create( eyehistory=obj, message=message) notify_message(message=eye_message) else: bundle_res = super(EyeHistoryResource, self).obj_create(bundle, request, user=request.user, **kwargs) check_bumps(request.user, start_time, end_time, url) if message: eye_message, _ = EyeHistoryMessage.objects.get_or_create( eyehistory=bundle_res.obj, message=message) notify_message(message=eye_message) return bundle_res except MultipleObjectsReturned as e: logger.info(e) # multiple items created, delete duplicates call_command('remove_duplicate_history') return bundle
twitter_id = twitter_user.id twit_obj = TwitterInfo.objects.create( user=user, twitter_username=username, twitter_id=twitter_id, access_token=token, access_token_secret=secret) template_dict[ "synced"] = "Your Twitter account is now connected to Eyebrowse!" get_twitter_info(request, api, twit_obj, template_dict) except tweepy.TweepError, e: logger.info(e) logger.info("Error! Failed to get access token") else: logger.info("no request_token") try: redirect_rule = auth.get_authorization_url() request.session["request_token"] = auth.request_token return redirect_to(request, redirect_rule) except tweepy.TweepError, e: logger.info(e) logger.info("Error! Failed to get request token") return _template_values(request, page_title="Connect Twitter", navbar='nav_account', sub_navbar="subnav_sync_twitter", **template_dict)
def profile_viz(request, username=None): if request.GET.get("date") is None or request.GET.get("date") == "null": return redirect_to( request, "/users/%s/visualizations?date=last week&query=%s" % (username, request.GET.get("query", ""))) if request.user.is_authenticated(): user = get_object_or_404(User, username=request.user.username) userprof = UserProfile.objects.get(user=user) confirmed = userprof.confirmed if not confirmed: return redirect('/consent') else: user = None userprof = None username, follows, profile_user, empty_search_msg, nav_bar = _profile_info( user, username) get_dict, query, date, sort, filter = _get_query(request) logger.info(get_dict) logger.info(date) get_dict["orderBy"] = "end_time" get_dict["direction"] = "hl" get_dict["filter"] = "" get_dict["page"] = request.GET.get("page", 1) get_dict["username"] = profile_user.username get_dict["sort"] = "time" hist, history_stream = live_stream_query_manager(get_dict, profile_user) # stats tot_time, item_count = profile_stat_gen(profile_user) fav_data = FavData.objects.get(user=profile_user) num_history = EyeHistory.objects.filter(user=profile_user).count() is_online = online_user(user=profile_user) following_count = profile_user.profile.follows.count() follower_count = UserProfile.objects.filter( follows=profile_user.profile).count() today = datetime.now() - timedelta(hours=24) day_count = hist.filter(start_time__gt=today).values( 'url', 'title').annotate(num_urls=Sum('total_time')).order_by('-num_urls')[:3] day_domains = hist.filter(start_time__gt=today).values('domain').annotate( num_domains=Sum('total_time')).order_by('-num_domains')[:5] day_chart = {} for domain in day_domains: day_chart[domain['domain']] = domain['num_domains'] last_week = today - timedelta(days=7) week_count = hist.filter(start_time__gt=last_week).values( 'url', 'title').annotate(num_urls=Sum('total_time')).order_by('-num_urls')[:3] week_domains = hist.filter( start_time__gt=last_week).values('domain').annotate( num_domains=Sum('total_time')).order_by('-num_domains')[:5] week_chart = {} for domain in week_domains: week_chart[domain['domain']] = domain['num_domains'] template_dict = { 'visualization': True, 'username': profile_user.username, 'following_count': following_count, 'follower_count': follower_count, "profile_user": profile_user, "history_stream": history_stream, "empty_search_msg": empty_search_msg, "follows": str(follows), "is_online": is_online, "num_history": num_history, "tot_time": tot_time, "item_count": item_count, "fav_data": fav_data, "query": query, "date": date, 'day_articles': day_count, 'week_articles': week_count, 'day_chart': json.dumps(day_chart), 'week_chart': json.dumps(week_chart), } return _template_values(request, page_title="profile history", navbar=nav_bar, sub_navbar="subnav_data", **template_dict)