Exemple #1
0
def get_surficial_data(site_code=None,
                       marker_id=None,
                       data_id=None,
                       mo_id=None,
                       ts_order="asc",
                       end_ts=None,
                       start_ts=None,
                       limit=None,
                       anchor="marker_data"):
    """
    Returns surficial data of a site or marker specified.
    You can filter data more using start, end timestamps and a limit.

    anchor (string):    choose whether to return 'marker_observation'
                        or 'marker_data'
    """

    if data_id:
        filtered_query = md.query.filter(md.data_id == data_id)
    elif mo_id:
        filtered_query = mo.query.filter(mo.mo_id == mo_id)
    else:
        if anchor == "marker_observations":
            base_query = mo.query
        else:
            base_query = md.query.join(mo)

        if ts_order == "asc":
            base_query = base_query.order_by(DB.asc(mo.ts))
        elif ts_order == "desc":
            base_query = base_query.order_by(DB.desc(mo.ts))

    if marker_id:
        filtered_query = base_query.filter(md.marker_id == marker_id)

    if site_code:
        filtered_query = base_query.join(Sites).filter(
            Sites.site_code == site_code)

    if end_ts:
        if not isinstance(end_ts, datetime):
            end_ts = datetime.strptime(end_ts, "%Y-%m-%d %H:%M:%S")
        filtered_query = filtered_query.filter(mo.ts <= end_ts)

    if start_ts:
        if not isinstance(start_ts, datetime):
            start_ts = datetime.strptime(start_ts, "%Y-%m-%d %H:%M:%S")
        filtered_query = filtered_query.filter(mo.ts >= start_ts)

    if limit:
        filtered_query = filtered_query.limit(limit)

    if limit == 1:
        filtered_marker_data = filtered_query.first()
    else:
        filtered_marker_data = filtered_query.all()

    return filtered_marker_data
Exemple #2
0
def get_narratives(offset=None,
                   limit=None,
                   start=None,
                   end=None,
                   site_ids=None,
                   include_count=None,
                   search=None,
                   event_id=None,
                   raise_site=True):
    """
        Returns one or more row/s of narratives.

        Args:
            offset (Integer) -
            limit (Integer) -
            start () -
            end () -
            site_ids (Integer) -
            include_count (Boolean)
            search (String)
            event_id (Integer)
    """
    nar = Narratives
    base = nar.query

    if raise_site:
        base = base.options(DB.raiseload("site"))

    if start is None and end is None:
        pass
    else:
        base = base.filter(nar.timestamp.between(start, end))

    if not event_id:
        if site_ids:
            base = base.filter(nar.site_id.in_(site_ids))

        if search != "":
            base = base.filter(nar.narrative.ilike("%" + search + "%"))

        narratives = base.order_by(DB.desc(
            nar.timestamp)).limit(limit).offset(offset).all()

        DB.session.commit()

        # DB.session.commit()

        if include_count:
            count = get_narrative_count(base)
            return [narratives, count]
        else:
            return narratives
    else:
        narratives = base.order_by(DB.asc(
            nar.timestamp)).filter(nar.event_id == event_id).all()
        DB.session.commit()
        return narratives
Exemple #3
0
def get_users_categorized_by_org(site_code=None):
    """
    """
    u_org = UserOrganizations
    org = Organizations

    base = u_org.query.join(org).order_by(DB.asc(org.scope))

    if site_code:
        base = base.join(Sites).filter(Sites.site_code == site_code)

    users_by_org = base.all()

    return users_by_org
Exemple #4
0
def get_org_ids(scopes=None, org_names=None):
    """
    Returns org ids as need by other APIs
    """
    orgs = Organizations
    base = orgs.query.order_by(DB.asc(orgs.scope))

    if scopes:
        base = base.filter(orgs.scope in scopes)

    if org_names:
        base = base.filter(orgs.org_name in org_names)

    org_ids = base.all()

    org_id_list = []
    for item in org_ids:
        org_id_list.append(item.org_id)

    return org_id_list
Exemple #5
0
def get_site_subsurface_columns(site_code, include_deactivated=False):
    """
        Returns one or more row/s of subsurface_columns.
        Edit: [190320] - no provisions for None site_code parameter.

        Args:
            site_id
    """
    sub_col = TSMSensors
    filter_var = Loggers.logger_name.like("%" + str(site_code) + "%")

    query = sub_col.query.join(Loggers).options(
        DB.joinedload("logger").joinedload("logger_model").raiseload("*"),
        DB.joinedload("logger").joinedload(
            "site", innerjoin=True).raiseload("*")
    ).order_by(
        DB.asc(Loggers.logger_name), DB.desc(sub_col.date_activated)).filter(filter_var)

    if not include_deactivated:
        query = query.filter(sub_col.date_deactivated.is_(None))

    sub_column = query.all()

    return sub_column