From b08332e3b67875a370ceb7fadc82a3c208051ada Mon Sep 17 00:00:00 2001 From: Samuel Clay Date: Fri, 29 Oct 2010 11:34:33 -0400 Subject: [PATCH] Retrain classifiers at the end of the trainer. --- apps/reader/urls.py | 1 + apps/reader/views.py | 31 +++++++++++++++++--------- media/css/reader.css | 6 +++-- media/js/newsblur/assetmodel.js | 14 +++++++++++- media/js/newsblur/reader.js | 1 - media/js/newsblur/reader_classifier.js | 31 ++++++++++++++++++++------ 6 files changed, 62 insertions(+), 22 deletions(-) diff --git a/apps/reader/urls.py b/apps/reader/urls.py index 9fd442de4..ac515a07e 100644 --- a/apps/reader/urls.py +++ b/apps/reader/urls.py @@ -24,5 +24,6 @@ urlpatterns = patterns('', url(r'^save_feed_order', views.save_feed_order, name='save-feed-order'), url(r'^get_feeds_trainer', views.get_feeds_trainer, name='get-feeds-trainer'), url(r'^save_feed_chooser', views.save_feed_chooser, name='save-feed-chooser'), + url(r'^retrain_all_sites', views.retrain_all_sites, name='retrain-all-sites'), url(r'^buster', views.iframe_buster, name='iframe-buster'), ) diff --git a/apps/reader/views.py b/apps/reader/views.py index a9c0bef30..901092ae7 100644 --- a/apps/reader/views.py +++ b/apps/reader/views.py @@ -601,17 +601,6 @@ def get_feeds_trainer(request): logging.info(" ---> [%s] Loading Trainer: %s feeds" % (request.user, len(classifiers))) return classifiers - -@login_required -def login_as(request): - if not request.user.is_staff: - assert False - return HttpResponseForbidden() - username = request.GET['user'] - user = get_object_or_404(User, username=username) - user.backend = settings.AUTHENTICATION_BACKENDS[0] - login_user(request, user) - return HttpResponseRedirect(reverse('index')) @ajax_login_required @json.json_view @@ -637,6 +626,14 @@ def save_feed_chooser(request): usersubs.count())) return {'activated': activated} +@ajax_login_required +def retrain_all_sites(request): + for sub in UserSubscription.objects.filter(user=request.user): + sub.is_trained = False + sub.save() + + return get_feeds_trainer(request) + @login_required def activate_premium_account(request): try: @@ -657,6 +654,18 @@ def activate_premium_account(request): return HttpResponseRedirect(reverse('index')) +@login_required +def login_as(request): + if not request.user.is_staff: + logging.info(' ---> NON-STAFF LOGGING IN AS ANOTHER USER: %s' % request.user) + assert False + return HttpResponseForbidden() + username = request.GET['user'] + user = get_object_or_404(User, username=username) + user.backend = settings.AUTHENTICATION_BACKENDS[0] + login_user(request, user) + return HttpResponseRedirect(reverse('index')) + def iframe_buster(request): logging.info(" ---> [%s] iFrame bust!" % (request.user,)) return HttpResponse(status=204) \ No newline at end of file diff --git a/media/css/reader.css b/media/css/reader.css index 8ffea1c49..09103db29 100644 --- a/media/css/reader.css +++ b/media/css/reader.css @@ -1821,7 +1821,8 @@ a.NB-splash-link:hover { text-decoration: none; } -.NB-modal-submit .NB-modal-submit-back { +.NB-modal-submit .NB-modal-submit-back, +.NB-modal-submit .NB-modal-submit-reset { background-color: #d5d4dB; color: #909090; @@ -1964,7 +1965,8 @@ a.NB-splash-link:hover { /* = Classifier Trainer = */ /* ====================== */ -.NB-modal-trainer .NB-modal-submit .NB-modal-submit-back { +.NB-modal-trainer .NB-modal-submit .NB-modal-submit-back, +.NB-modal-trainer .NB-modal-submit .NB-modal-submit-reset { float: left; color: #FFF; background-color: #b5b4bB; diff --git a/media/js/newsblur/assetmodel.js b/media/js/newsblur/assetmodel.js index b9cf85f9b..91acf93f0 100644 --- a/media/js/newsblur/assetmodel.js +++ b/media/js/newsblur/assetmodel.js @@ -215,7 +215,7 @@ NEWSBLUR.AssetModel.Reader.prototype = { } $.isFunction(callback) && callback(data, first_load); }, - + get_feeds_trainer: function(feed_id, callback) { var self = this; var params = {}; @@ -231,6 +231,18 @@ NEWSBLUR.AssetModel.Reader.prototype = { } }, + + retrain_all_sites: function(callback) { + var self = this; + var params = {}; + + if (NEWSBLUR.Globals.is_authenticated) { + this.make_request('/reader/retrain_all_sites', params, callback, null); + } else { + if ($.isFunction(callback)) callback(); + } + }, + refresh_feeds: function(callback, has_unfetched_feeds) { var self = this; diff --git a/media/js/newsblur/reader.js b/media/js/newsblur/reader.js index 33e1362a2..ab89c7256 100644 --- a/media/js/newsblur/reader.js +++ b/media/js/newsblur/reader.js @@ -3284,7 +3284,6 @@ this.$s.$feed_link_loader.fadeOut(250); this.setup_feed_refresh(); if (!this.flags['has_unfetched_feeds']) { - NEWSBLUR.log(['has_unfetched_feeds']); this.hide_progress_bar(); } }, diff --git a/media/js/newsblur/reader_classifier.js b/media/js/newsblur/reader_classifier.js index 39ca5e1a4..caf60412b 100644 --- a/media/js/newsblur/reader_classifier.js +++ b/media/js/newsblur/reader_classifier.js @@ -63,8 +63,10 @@ NEWSBLUR.ReaderClassifierStory = function(story_id, feed_id, options) { var classifier_prototype = { - runner_trainer: function() { - this.user_classifiers = {}; + runner_trainer: function(reload) { + if (!reload) { + this.user_classifiers = {}; + } this.make_trainer_intro(); this.get_feeds_trainer(); @@ -113,7 +115,7 @@ var classifier_prototype = { var trainer_data_length = this.trainer_data.length; this.trainer_iterator = this.trainer_iterator - 1; var trainer_data = this.trainer_data[this.trainer_iterator]; - NEWSBLUR.log(['load_previous_feed_in_trainer', this.trainer_iterator, trainer_data]); + // NEWSBLUR.log(['load_previous_feed_in_trainer', this.trainer_iterator, trainer_data]); if (!trainer_data || this.trainer_iterator < 0) { this.make_trainer_intro(); this.reload_modal(); @@ -123,11 +125,11 @@ var classifier_prototype = { } }, - load_next_feed_in_trainer: function(backwards) { + load_next_feed_in_trainer: function() { var trainer_data_length = this.trainer_data.length; this.trainer_iterator = this.trainer_iterator + 1; var trainer_data = this.trainer_data[this.trainer_iterator]; - NEWSBLUR.log(['load_next_feed_in_trainer', this.trainer_iterator, trainer_data]); + // NEWSBLUR.log(['load_next_feed_in_trainer', this.trainer_iterator, trainer_data]); if (!trainer_data || this.trainer_iterator >= trainer_data_length) { this.make_trainer_outro(); this.reload_modal(); @@ -157,7 +159,7 @@ var classifier_prototype = { this.reload_modal(); }, - reload_modal: function() { + reload_modal: function(callback) { this.flags.modal_loading = setInterval(_.bind(function() { if (this.flags.modal_loaded) { clearInterval(this.flags.modal_loading); @@ -166,6 +168,7 @@ var classifier_prototype = { $(window).trigger('resize.simplemodal'); this.handle_cancel(); this.$modal.parent().scrollTop(0); + callback && callback(); } }, this), 125); }, @@ -177,7 +180,6 @@ var classifier_prototype = { load_feeds_trainer: function(e, data) { var $begin = $('.NB-modal-submit-begin', this.$modal); - NEWSBLUR.log(['data', data]); this.trainer_data = data; if (!data || !data.length) { @@ -191,6 +193,15 @@ var classifier_prototype = { } }, + retrain_all_sites: function() { + $('.NB-modal-submit-reset', this.$modal).text('Rewinding...').attr('disabled', true).addClass('NB-disabled'); + + this.model.retrain_all_sites(_.bind(function(data) { + this.load_feeds_trainer(null, data); + this.load_next_feed_in_trainer(); + }, this)); + }, + find_story_and_feed: function() { if (this.story_id) { this.story = this.model.get_story(this.story_id); @@ -300,6 +311,7 @@ var classifier_prototype = { ]) ]), $.make('div', { className: 'NB-modal-submit' }, [ + $.make('a', { href: '#', className: 'NB-modal-submit-button NB-modal-submit-reset' }, $.entity('«') + ' Retrain all sites'), $.make('a', { href: '#', className: 'NB-modal-submit-end NB-modal-submit-button' }, 'Close Training and Start Reading') ]) ]); @@ -746,6 +758,11 @@ var classifier_prototype = { e.preventDefault(); self.load_previous_feed_in_trainer(); }); + + $.targetIs(e, { tagSelector: '.NB-modal-submit-reset' }, function($t, $p){ + e.preventDefault(); + self.retrain_all_sites(); + }); $.targetIs(e, { tagSelector: '.NB-modal-submit-close' }, function($t, $p){ e.preventDefault();