diff options
| author | Alvin Li <liweitianux@gmail.com> | 2013-09-20 23:52:59 +0800 | 
|---|---|---|
| committer | Alvin Li <liweitianux@gmail.com> | 2013-09-20 23:52:59 +0800 | 
| commit | c9da4168874296cf4f5ba71b9a432ceae3c26130 (patch) | |
| tree | 0c986d630c9634b8dbbbbe694546b42c7bb74210 /97suifangqa/apps/indicator/tools.py | |
| parent | 62efe8809e2cdfc84666dbd5e987a4ce473a047a (diff) | |
| download | 97dev-c9da4168874296cf4f5ba71b9a432ceae3c26130.tar.bz2 | |
*** merged changes of front pages ***
* merged changes from '97suifang-front' by mjymjydark;
    and modified to work with django
* finished 'editing_data' div of 'SheetDefault' for add new record
* added 'indicator.views.ajax_add_record()'
*** search ***
* improved 'search' function of 'NewDeleteIndex' page;
    employ AJAX to load search results;
* added 'indicator.views.search_indicators()'
*** recommend indicator ***
* improved the functions of 'recommend_indicator'
* added 'sciblog.models.UserCollection' to record the collection
    information for each user
* improved 'sciblog.views.add_user_to_m2m()' to work with
    'UserCollection'
* added field 'lastRecommendTime' in 'indicator.models.UserIndicator'
* updated 'indicator.views.indicator_status' against 'recommend_indicator'
*** qtip2 for recommended indicator ***
* added 'qtip2' tooltip for recommended indicator card
* added '97suifang' qtip css (qtip-sf)
* added tooltip for 'add record' when return error (SheetDefault page);
* improved the style of 'collection_btn' and 'go_library_btn' of
    IndexDesc page;
Diffstat (limited to '97suifangqa/apps/indicator/tools.py')
| -rw-r--r-- | 97suifangqa/apps/indicator/tools.py | 28 | 
1 files changed, 24 insertions, 4 deletions
| diff --git a/97suifangqa/apps/indicator/tools.py b/97suifangqa/apps/indicator/tools.py index 883c2f2..1a9e6ab 100644 --- a/97suifangqa/apps/indicator/tools.py +++ b/97suifangqa/apps/indicator/tools.py @@ -28,6 +28,7 @@ def follow_indicator(user_id, indicator_id):          # to remove the indicator from 'followedHistories' if exists          if indicator in ui.followedHistories.all():              ui.followedHistories.remove(indicator) +        ui.save()          return True      except:          return False @@ -46,6 +47,7 @@ def unfollow_indicator(user_id, indicator_id):          ui.followedIndicators.remove(indicator)          # add indicator to 'followedHistories'          ui.followedHistories.add(indicator) +        ui.save()          return True      except:          return False @@ -106,6 +108,7 @@ def get_followed_indicator(user_id, category_id="all", startswith="all"):      u = User.objects.get(id=user_id)      ui, created = im.UserIndicator.objects.get_or_create(user=u) +    ui.save()      _idict = {}      iqueryset = ui.followedIndicators.all()      if not category_id == 'all': @@ -141,6 +144,7 @@ def get_unfollowed_indicator(user_id, category_id="all", startswith="all"):      u = User.objects.get(id=user_id)      ui, created = im.UserIndicator.objects.get_or_create(user=u) +    ui.save()      _idict = {}      # XXX: if 'exclude(followed_indicators=ui)' OK??      iqueryset = im.Indicator.objects.exclude(followed_indicators=ui) @@ -443,6 +447,7 @@ def add_recordhistory(user_id, record_id, reason, created_at=None):      return True  # }}} +  # types of recommended indicators, and weights {{{  RI_TYPES = {      'ANNOTATION_COLLECTED': u'ANN_CL', @@ -515,11 +520,14 @@ def calc_indicator_weight(user_id, indicator_id):  # recommend_indicator {{{ -def recommend_indicator(user_id, number): +def recommend_indicator(user_id, number=1, auto_follow=False):      """      recommend unfollowed indicator for user,      based on his/her readings and collections. +    if auto_follow=True, then the recommended indicators are +    followed automatically. +      return a list of recommended indicators in format:      [ {'id': id, 'weight': w, 'type': t}, ... ]      """ @@ -528,7 +536,7 @@ def recommend_indicator(user_id, number):      # get unfollowed indicators      u = User.objects.get(id=user_id)      ui, created = im.UserIndicator.objects.get_or_create(user=u) -    # XXX: if 'exclude(followed_indicators=ui)' OK?? +    # XXX: is 'exclude(followed_indicators=ui)' OK??      uf_ind_qs = im.Indicator.objects.exclude(followed_indicators=ui)      # calc weight for each unfollowed indicator      weights = [] @@ -542,8 +550,19 @@ def recommend_indicator(user_id, number):      # sort 'weights' dict list by key 'weight'      weights_sorted = sorted(weights, key=lambda item: item['weight'])      weights_sorted.reverse() -    # return results with largest weights -    return weights_sorted[:number] +    # results with largest weights +    results = weights_sorted[:number] +    # update 'lastRecommendTime' of 'UserIndicator' +    now_utc = datetime.datetime.utcnow().replace(tzinfo=utc) +    ui.lastRecommendTime = now_utc +    # updated followedIndicators of 'auto_follow=True' +    if auto_follow: +        for wi in results: +            follow_indicator(user_id, wi['id']) +    # save 'UserIndicator' +    ui.save() +    # +    return results  # }}} @@ -676,3 +695,4 @@ def format_data(indicator_obj, value=None, val_max=None, val_min=None, type="htm      return value_str  # }}} + | 
