def get_content_timeseries(user, org, content_item_id): """ Query an individual content timeseries. """ c = ContentItem.query\ .filter_by(id=content_item_id)\ .filter_by(org_id=org.id)\ .first() if not c: raise NotFoundError( 'A ContentItem with ID {} does not exist'.format(content_item_id)) kw = request_ts(unit='hour') q = QueryContentMetricTimeseries(org, [content_item_id], **kw) return jsonify(list(q.execute()))
def get_org_timeseries(user, org_id_slug): # fetch org org = fetch_by_id_or_field(Org, "slug", org_id_slug) # if it still doesn't exist, raise an error. if not org: raise NotFoundError("This Org does not exist.") # ensure the active user can edit this Org if user.id not in org.user_ids: raise ForbiddenError("You are not allowed to access this Org") kw = request_ts() q = QueryOrgMetricTimeseries(org, [org.id], **kw) return jsonify(list(q.execute()))
def get_org_timeseries(user, org_id_slug): # fetch org org = fetch_by_id_or_field(Org, 'slug', org_id_slug) # if it still doesn't exist, raise an error. if not org: raise NotFoundError('This Org does not exist.') # ensure the active user can edit this Org if user.id not in org.user_ids: raise ForbiddenError('You are not allowed to access this Org') kw = request_ts() q = QueryOrgMetricTimeseries(org, [org.id], **kw) return jsonify(list(q.execute()))
def get_content_timeseries(user, org, content_item_id): """ Query an individual content timeseries. """ c = ContentItem.query\ .filter_by(id=content_item_id)\ .filter_by(org_id=org.id)\ .first() if not c: raise NotFoundError( 'A ContentItem with ID {} does not exist' .format(content_item_id)) kw = request_ts(unit='hour') q = QueryContentMetricTimeseries(org, [content_item_id], **kw) return jsonify(list(q.execute()))
def list_content_timeseries(user, org): """ Query the content timeseries for an entire org. """ # query content by: incl_cids, excl_cids = \ arg_list('ids', typ=int, exclusions=True, default=['all']) incl_author_ids, excl_author_ids = \ arg_list('author_ids', typ=int, exclusions=True, default=[]) incl_st_ids, excl_st_ids = \ arg_list('subject_tag_ids', typ=int, exclusions=True, default=[]) incl_im_ids, excl_im_ids = \ arg_list('impact_tag_ids', typ=int, exclusions=True, default=[]) incl_event_ids, excl_event_ids = \ arg_list('event_ids', typ=int, exclusions=True, default=[]) has_filter = False # we use this to keep track of whether # a filter has been applied. # get all cids all_cids = copy.copy(org.content_item_ids) # add in cids cids = [] # include authors if len(incl_author_ids): has_filter = True res = db.session.query(content_items_authors.c.content_item_id)\ .filter(content_items_authors.c.author_id.in_(incl_author_ids))\ .all() for r in res: if r[0] not in cids: cids.append(r[0]) # exclude authors if len(excl_author_ids): has_filter = True res = db.session.query(content_items_authors.c.content_item_id)\ .filter(~content_items_authors.c.author_id.in_(excl_author_ids))\ .all() for r in res: if r[0] in all_cids: all_cids.remove(r[0]) # include subject tags if len(incl_st_ids): has_filter = True res = db.session.query(content_items_tags.c.content_item_id)\ .filter(content_items_tags.c.tag_id.in_(incl_st_ids))\ .all() for r in res: if r[0] not in cids: cids.append(r[0]) # exclude subject tags if len(excl_st_ids): has_filter = True res = db.session.query(content_items_tags.c.content_item_id)\ .filter(~content_items_tags.c.tag_id.in_(excl_st_ids))\ .all() for r in res: if r[0] in all_cids: all_cids.remove(r[0]) # include events if len(incl_event_ids): has_filter = True res = db.session.query(content_items_events.c.content_item_id)\ .filter(content_items_events.c.event_id.in_(incl_event_ids))\ .all() for r in res: if r[0] not in cids: cids.append(r[0]) # exclude events if len(excl_event_ids): has_filter = True res = db.session.query(content_items_events.c.content_item_id)\ .filter(~content_items_events.c.event_id.in_(incl_event_ids))\ .all() for r in res: if r[0] in all_cids: all_cids.remove(r[0]) # include impact tags if len(incl_im_ids): has_filter = True res = db.session\ .query(distinct(content_items_events.c.content_item_id))\ .outerjoin(events_tags, events_tags.c.event_id == content_items_events.c.event_id)\ .filter(events_tags.c.tag_id.in_(incl_im_ids))\ .all() for r in res: if r[0] not in cids: cids.append(r[0]) # exclude impact tags if len(excl_im_ids): has_filter = True res = db.session\ .query(distinct(content_items_events.c.content_item_id))\ .outerjoin(events_tags, events_tags.c.event_id == content_items_events.c.event_id)\ .filter(~events_tags.c.tag_id.in_(incl_im_ids))\ .all() for r in res: if r[0] in all_cids: all_cids.remove(r[0]) # remove exlucde cids: for c in cids: if c not in all_cids: cids.remove(c) if has_filter and not len(cids): raise NotFoundError( 'Could not find Content Item Ids that matched the input parameters' ) elif not has_filter and not len(cids): if 'all' in incl_cids: cids.extend(all_cids) else: has_filter = True cids.extend(incl_cids) # remove cids if not 'all' in excl_cids: has_filter = True for c in excl_cids: all_cids.remove(c) # execute the query. kw = request_ts(unit='day', group_by_id=True) q = QueryContentMetricTimeseries(org, cids, **kw) return jsonify(list(q.execute()))
def list_content_timeseries(user, org): """ Query the content timeseries for an entire org. """ # query content by: incl_cids, excl_cids = \ arg_list('ids', typ=int, exclusions=True, default=['all']) incl_author_ids, excl_author_ids = \ arg_list('author_ids', typ=int, exclusions=True, default=[]) incl_st_ids, excl_st_ids = \ arg_list('subject_tag_ids', typ=int, exclusions=True, default=[]) incl_im_ids, excl_im_ids = \ arg_list('impact_tag_ids', typ=int, exclusions=True, default=[]) incl_event_ids, excl_event_ids = \ arg_list('event_ids', typ=int, exclusions=True, default=[]) has_filter = False # we use this to keep track of whether # a filter has been applied. # get all cids all_cids = copy.copy(org.content_item_ids) # add in cids cids = [] # include authors if len(incl_author_ids): has_filter = True res = db.session.query(content_items_authors.c.content_item_id)\ .filter(content_items_authors.c.author_id.in_(incl_author_ids))\ .all() for r in res: if r[0] not in cids: cids.append(r[0]) # exclude authors if len(excl_author_ids): has_filter = True res = db.session.query(content_items_authors.c.content_item_id)\ .filter(~content_items_authors.c.author_id.in_(excl_author_ids))\ .all() for r in res: if r[0] in all_cids: all_cids.remove(r[0]) # include subject tags if len(incl_st_ids): has_filter = True res = db.session.query(content_items_tags.c.content_item_id)\ .filter(content_items_tags.c.tag_id.in_(incl_st_ids))\ .all() for r in res: if r[0] not in cids: cids.append(r[0]) # exclude subject tags if len(excl_st_ids): has_filter = True res = db.session.query(content_items_tags.c.content_item_id)\ .filter(~content_items_tags.c.tag_id.in_(excl_st_ids))\ .all() for r in res: if r[0] in all_cids: all_cids.remove(r[0]) # include events if len(incl_event_ids): has_filter = True res = db.session.query(content_items_events.c.content_item_id)\ .filter(content_items_events.c.event_id.in_(incl_event_ids))\ .all() for r in res: if r[0] not in cids: cids.append(r[0]) # exclude events if len(excl_event_ids): has_filter = True res = db.session.query(content_items_events.c.content_item_id)\ .filter(~content_items_events.c.event_id.in_(incl_event_ids))\ .all() for r in res: if r[0] in all_cids: all_cids.remove(r[0]) # include impact tags if len(incl_im_ids): has_filter = True res = db.session\ .query(distinct(content_items_events.c.content_item_id))\ .outerjoin(events_tags, events_tags.c.event_id == content_items_events.c.event_id)\ .filter(events_tags.c.tag_id.in_(incl_im_ids))\ .all() for r in res: if r[0] not in cids: cids.append(r[0]) # exclude impact tags if len(excl_im_ids): has_filter = True res = db.session\ .query(distinct(content_items_events.c.content_item_id))\ .outerjoin(events_tags, events_tags.c.event_id == content_items_events.c.event_id)\ .filter(~events_tags.c.tag_id.in_(incl_im_ids))\ .all() for r in res: if r[0] in all_cids: all_cids.remove(r[0]) # remove exlucde cids: for c in cids: if c not in all_cids: cids.remove(c) if has_filter and not len(cids): raise NotFoundError( 'Could not find Content Item Ids that matched the input parameters' ) elif not has_filter and not len(cids): if 'all' in incl_cids: cids.extend(all_cids) else: has_filter = True cids.extend(incl_cids) # remove cids if not 'all' in excl_cids: has_filter = True for c in excl_cids: all_cids.remove(c) # execute the query. kw = request_ts( unit='day', group_by_id=True ) q = QueryContentMetricTimeseries(org, cids, **kw) return jsonify(list(q.execute()))