def base_snapshot_timespan(topics_id): # find the timespan matching this one in the base snapshot (ie. with no foci_id) snapshots_id, timespans_id, foci_id, q = filters_from_args(request.args) base_snapshot_timespans = apicache.cached_topic_timespan_list(user_mediacloud_key(), topics_id, snapshots_id=snapshots_id, foci_id=None) timespan = apicache.topic_timespan(topics_id, snapshots_id, foci_id, timespans_id) # the selected timespan for t in base_snapshot_timespans: if apicache.is_timespans_match(timespan, t): return t raise ValueError("Can't find a timespan in the base snapshot matching the one specified")
def topic_focal_set_sentences_compare(topics_id, focal_sets_id): snapshots_id, timespans_id, foci_id, q = filters_from_args(request.args) all_focal_sets = topic_focal_sets(user_mediacloud_key(), topics_id, snapshots_id) # need the timespan info, to find the appropriate timespan with each focus base_snapshot_timespans = cached_topic_timespan_list( user_mediacloud_key(), topics_id, snapshots_id=snapshots_id) # if they have a focus selected, we need to find the appropriate overall timespan if foci_id is not None: timespan = topic_timespan(topics_id, snapshots_id, foci_id, timespans_id) for t in base_snapshot_timespans: if timespans_match(timespan, t): base_timespan = t else: base_timespan = None for t in base_snapshot_timespans: if t['timespans_id'] == int(timespans_id): base_timespan = t logger.info('base timespan = %s', timespans_id) if base_timespan is None: return json_error_response("Couldn't find the timespan you specified") # iterate through to find the one of interest focal_set = None for fs in all_focal_sets: if int(fs['focal_sets_id']) == int(focal_sets_id): focal_set = fs if focal_set is None: return json_error_response('Invalid Focal Set Id') # collect the sentence counts for each foci for focus in focal_set['foci']: # find the matching timespan within this focus snapshot_timespans = cached_topic_timespan_list( user_mediacloud_key(), topics_id, snapshots_id=snapshots_id, foci_id=focus['foci_id']) timespan = None for t in snapshot_timespans: if timespans_match(t, base_timespan): timespan = t logger.info('matching in focus %s, timespan = %s', focus['foci_id'], t['timespans_id']) if timespan is None: return json_error_response( 'Couldn\'t find a matching timespan in the ' + focus.name + ' focus') data = topic_sentence_counts(user_mediacloud_key(), topics_id, snapshots_id=snapshots_id, timespans_id=timespan['timespans_id'], foci_id=focus['foci_id']) focus['sentence_counts'] = data return jsonify(focal_set)
def topic_focal_set_split_stories_compare(topics_id, focal_sets_id): snapshots_id, timespans_id, foci_id, q = filters_from_args(request.args) # need the timespan info, to find the appropriate timespan with each focus base_snapshot_timespans = apicache.cached_topic_timespan_list( user_mediacloud_key(), topics_id, snapshots_id=snapshots_id) # if they have a focus selected, we need to find the appropriate overall timespan if foci_id is not None: timespan = apicache.topic_timespan(topics_id, snapshots_id, foci_id, timespans_id) for t in base_snapshot_timespans: if apicache.is_timespans_match(timespan, t): base_timespan = t else: base_timespan = None for t in base_snapshot_timespans: if t['timespans_id'] == int(timespans_id): base_timespan = t logger.info('base timespan = %s', timespans_id) if base_timespan is None: return json_error_response("Couldn't find the timespan you specified") # iterate through to find the one of interest focal_set = apicache.topic_focal_set(user_mediacloud_key(), topics_id, snapshots_id, focal_sets_id) if focal_set is None: return json_error_response('Invalid Focal Set Id') # collect the story split counts for each foci timespans = apicache.matching_timespans_in_foci(topics_id, base_timespan, focal_set['foci']) for idx in range(0, len(timespans)): data = apicache.topic_split_story_counts( user_mediacloud_key(), topics_id, snapshots_id=snapshots_id, timespans_id=timespans[idx]['timespans_id']) focal_set['foci'][idx]['split_story_counts'] = data return jsonify(focal_set)