class IssuesRemindersSitePostings(UserMixin, DB.Model):
    """
    Class representation of earthquake_events table
    """

    __tablename__ = "issues_reminders_site_postings"
    __bind_key__ = "commons_db"
    __table_args__ = {"schema": "commons_db"}

    iar_id = DB.Column(DB.Integer, DB.ForeignKey(
        "commons_db.issues_and_reminders.iar_id"), primary_key=True)
    site_id = DB.Column(DB.Integer, DB.ForeignKey(
        "commons_db.sites.site_id"), primary_key=True)
    event_id = DB.Column(DB.Integer, DB.ForeignKey(
        "ewi_db.monitoring_events.event_id"))

    event = DB.relationship(
        "MonitoringEvents", backref=DB.backref("issues_reminders_site_posting", lazy="raise"), lazy="joined")
    site = DB.relationship(
        "Sites", backref=DB.backref("issues_reminders_site_posting", lazy="raise"), lazy="joined")

    def __repr__(self):
        return (f"Type <{self.__class__.__name__}> iar_p_id: {self.iar_p_id}"
                f" site_id: {self.site_id} event_id: {self.event_id}"
                f" iar_id: {self.iar_id}")
Example #2
0
def get_ewi_recipients(site_ids=None, site_codes=None, alert_level=0):
    """
    Function that get ewi recipients per site
    """

    query = UsersRelationship.query.join(UserOrganizations).join(
        Sites).options(
            DB.subqueryload("mobile_numbers").joinedload("mobile_number",
                                                         innerjoin=True),
            DB.subqueryload("organizations").joinedload("site",
                                                        innerjoin=True),
            DB.subqueryload("organizations").joinedload("organization",
                                                        innerjoin=True),
            DB.raiseload("*")).filter(Users.ewi_recipient == 1)

    if site_ids:
        query = query.filter(Sites.site_id.in_(site_ids))

    if site_codes:
        query = query.filter(Sites.site_code.in_(site_codes))

    if alert_level != 0:
        uer = UserEwiRestrictions
        query = query.join(uer).filter(
            DB.or_(uer.user_id.is_(None), uer.alert_level < alert_level))

    user_per_site_query = query.all()
    user_per_site_result = UsersRelationshipSchema(
        many=True,
        exclude=["emails", "teams", "landline_numbers",
                 "ewi_restriction"]).dump(user_per_site_query).data

    return user_per_site_result
Example #3
0
def get_dynaslope_users(active_only=True, return_schema_format=False):
    """
    Function that gets all Dynaslope users and related data
    """

    ur = UsersRelationship
    query = ur.query.options(
        DB.joinedload("account", innerjoin=True).raiseload("*"),
        DB.raiseload("*")).order_by(ur.last_name)

    if active_only:
        # Note use status in users instead of is_active in UserAccounts
        query = query.filter_by(status=1)

    result = query.all()

    if return_schema_format:
        result = UsersRelationshipSchema(many=True,
                                         exclude=[
                                             "mobile_numbers", "organizations",
                                             "ewi_restriction", "teams",
                                             "landline_numbers", "emails"
                                         ]).dump(result).data

    return result
Example #4
0
class MonitoringTriggers(UserMixin, DB.Model):
    """
    Class representation of monitoring_triggers table
    """

    __tablename__ = "monitoring_triggers"
    __bind_key__ = "ewi_db"
    __table_args__ = {"schema": "ewi_db"}

    trigger_id = DB.Column(DB.Integer, primary_key=True, nullable=False)
    release_id = DB.Column(
        DB.Integer,
        DB.ForeignKey("ewi_db.monitoring_releases.release_id"),
        nullable=False)
    internal_sym_id = DB.Column(
        DB.Integer,
        DB.ForeignKey("ewi_db.internal_alert_symbols.internal_sym_id"),
        nullable=False)
    ts = DB.Column(DB.DateTime, nullable=False)
    info = DB.Column(DB.String(360))

    internal_sym = DB.relationship(
        "InternalAlertSymbols", backref=DB.backref("monitoring_triggers", \
        lazy="dynamic"), lazy="joined", innerjoin=True)

    def __repr__(self):
        return (
            f"Type <{self.__class__.__name__}> Trigger ID: {self.trigger_id}"
            f" Release ID: {self.release_id} Internal Symbol ID: {self.internal_sym_id}"
            f" TS: {self.ts} Info: {self.info}")
Example #5
0
class AlertStatusSync(DB.Model):
    """
    Class representation of alert_status_sync table
    """

    __tablename__ = "alert_status_sync"
    __bind_key__ = "analysis_db"
    __table_args__ = {"schema": "analysis_db"}

    as_update_id = DB.Column(DB.Integer, primary_key=True, nullable=False)
    stat_id = DB.Column(DB.Integer, nullable=False)
    ts_last_retrigger = DB.Column(DB.DateTime)
    trigger_id = DB.Column(DB.Integer)
    ts_set = DB.Column(DB.DateTime)
    ts_ack = DB.Column(DB.DateTime)
    alert_status = DB.Column(DB.Integer)
    remarks = DB.Column(DB.String(450))
    user_id = DB.Column(DB.Integer, nullable=False)

    def __repr__(self):
        return (
            f"Type <{self.__class__.__name__}> as_update_id: {self.as_update_id} stat ID: {self.stat_id}"
            f" ts_last_retrigger: {self.ts_last_retrigger} ts_set: {self.ts_set}"
            f" ts_ack: {self.ts_ack} alert_status: {self.alert_status}"
            f" remarks: {self.remarks} user_id: {self.user_id}"
            f" || TRIGGER: {self.trigger} || user: {self.user}")
Example #6
0
class MarkerData(DB.Model):
    """
    Class representation of marker_data table
    """

    __tablename__ = "marker_data"
    __bind_key__ = "senslopedb"
    __table_args__ = {"schema": "senslopedb"}

    data_id = DB.Column(DB.Integer, primary_key=True, nullable=False)
    mo_id = DB.Column(DB.Integer,
                      DB.ForeignKey("senslopedb.marker_observations.mo_id"),
                      nullable=False)
    marker_id = DB.Column(DB.Integer,
                          DB.ForeignKey("senslopedb.markers.marker_id"),
                          nullable=False)
    measurement = DB.Column(DB.Float)

    marker = DB.relationship("Markers",
                             backref=DB.backref("marker_data", lazy="dynamic"),
                             lazy="select")
    marker_observation = DB.relationship("MarkerObservations",
                                         backref=DB.backref("marker_data",
                                                            lazy="subquery"),
                                         lazy="select")

    def __repr__(self):
        return (f"Type <{self.__class__.__name__}> Data ID: {self.data_id}"
                f" Marker ID: {self.marker_id} Measurement: {self.measurement}"
                f" Marker Obs ID: {self.mo_id}")
Example #7
0
class MonitoringTriggersMisc(UserMixin, DB.Model):
    """
    Class representation of monitoring_release_publishers table
    """

    __tablename__ = "monitoring_triggers_misc"
    __bind_key__ = "ewi_db"
    __table_args__ = {"schema": "ewi_db"}

    trig_misc_id = DB.Column(DB.Integer, primary_key=True, nullable=False)
    trigger_id = DB.Column(
        DB.Integer,
        DB.ForeignKey("ewi_db.monitoring_triggers.trigger_id"),
        nullable=False)
    od_id = DB.Column(DB.Integer,
                      DB.ForeignKey("ewi_db.monitoring_on_demand.od_id"))
    eq_id = DB.Column(DB.Integer,
                      DB.ForeignKey("ewi_db.monitoring_earthquake.eq_id"))
    # Changed to has_moms to accommodate multiple moms
    has_moms = DB.Column(DB.Boolean)

    trigger_parent = DB.relationship("MonitoringTriggers",
                                     backref=DB.backref("trigger_misc",
                                                        lazy="joined",
                                                        uselist=False),
                                     lazy="subquery",
                                     uselist=False)

    def __repr__(self):
        return (
            f"Type <{self.__class__.__name__}> Trigger Misc ID: {self.trig_misc_id}"
            f" Trigger ID: {self.trigger_id} OD ID: {self.od_id}"
            f" EQ ID: {self.eq_id} Has Moms: {self.has_moms}")
Example #8
0
    def google_login(self, user):
        db = DB()

        GOOGLE_AUTH_URL = 'https://oauth2.googleapis.com/tokeninfo?id_token='
        CORRECT_ISS_LIST = [
            'accounts.google.com', 'https://accounts.google.com'
        ]

        google_id = user['id']
        google_token = user['token']

        token_data = json.loads(
            requests.get(GOOGLE_AUTH_URL + google_token).text)

        if (token_data['iss']
                not in CORRECT_ISS_LIST) or (token_data['sub'] != google_id):
            return {'message': 'MODIFIED_TOKEN'}, 401

        user_id = self.user_dao.google_login(user, db)

        if user_id is None:
            user_id = self.user_dao.get_user(google_id, db)

        token = jwt.encode({
            'id': user_id
        },
                           SECRET_KEY['secret'],
                           algorithm=ALGORITHM['algorithm']).decode('utf-8')

        if db:
            db.close()

        return {'token': token}, 200
Example #9
0
def get_site_season(site_code=None, site_id=None, return_schema_format=True):
    """
    """

    query = Sites.query.options(
        DB.joinedload("season_months",
                      innerjoin=True).subqueryload("routine_schedules"),
        DB.raiseload("*"))

    is_many = True
    if site_code or site_id:
        is_many = False

        if site_code:
            query = query.filter_by(site_code=site_code)

        if site_id:
            query = query.filter_by(site_id=site_id)

        result = query.first()
    else:
        result = query.all()

    if return_schema_format:
        schema = SitesSchema(many=is_many, include=["season_months"])
        result = schema.dump(result).data

    return result
Example #10
0
class PublicAlerts(UserMixin, DB.Model):
    """
    Class representation of public_alerts
    """

    __tablename__ = "public_alerts"
    __bind_key__ = "ewi_db"
    __table_args__ = {"schema": "ewi_db"}

    public_id = DB.Column(DB.Integer, primary_key=True, nullable=False)
    ts = DB.Column(DB.DateTime, nullable=False)
    site_id = DB.Column(DB.Integer,
                        DB.ForeignKey("commons_db.sites.site_id"),
                        nullable=False)
    pub_sym_id = DB.Column(
        DB.Integer,
        DB.ForeignKey("ewi_db.public_alert_symbols.pub_sym_id"),
        nullable=False)
    ts_updated = DB.Column(DB.DateTime, nullable=False)

    site = DB.relationship("Sites",
                           backref=DB.backref("public_alerts", lazy="dynamic"),
                           lazy="select")
    # primaryjoin="PublicAlerts.site_id==Sites.site_id", lazy="joined", innerjoin=True)

    alert_symbol = DB.relationship("PublicAlertSymbols",
                                   backref="public_alerts",
                                   lazy="select")

    def __repr__(self):
        return (f"Type <{self.__class__.__name__}> Public_ID: {self.public_id}"
                f" Site_ID: {self.site_id} pub_sym_id: {self.pub_sym_id}"
                f" TS: {self.ts} TS_UPDATED: {self.ts_updated}")
Example #11
0
class UserMobiles(DB.Model):
    """
    Class representation of user_mobiles table
    """

    __tablename__ = "user_mobiles"
    __bind_key__ = "comms_db_3"
    __table_args__ = {"schema": "comms_db_3"}

    user_id = DB.Column(SMALLINT, DB.ForeignKey(
        "commons_db.users.user_id"), primary_key=True)
    mobile_id = DB.Column(SMALLINT, DB.ForeignKey(
        "comms_db_3.mobile_numbers.mobile_id"), primary_key=True)
    priority = DB.Column(TINYINT)
    status = DB.Column(TINYINT, nullable=False)

    user = DB.relationship(UsersRelationship, backref=DB.backref(
        "mobile_numbers", lazy="raise"),
        lazy="joined", innerjoin=True)
    mobile_number = DB.relationship(MobileNumbers, backref=DB.backref(
        "user_details", lazy="joined", uselist=False),
        lazy="joined", innerjoin=True)

    def __repr__(self):
        return (f"Type <{self.__class__.__name__}> User ID: {self.user_id}"
                f" Mobile ID: {self.mobile_id} Priority: {self.priority}"
                f" Status: {self.status}")
def get_issues_and_reminders(offset=None,
                             limit=None,
                             start=None,
                             end=None,
                             site_ids=None,
                             include_count=None,
                             search=None,
                             event_id=None,
                             include_expired=None):
    """
        Returns one or more row/s of narratives.

        Args:
            offset (Integer) -
            limit (Integer) -
            start () -
            end () -
            include_count (Boolean)
            search (String)
            event_id (Integer)
    """
    print(get_process_status_log("get_issues_and_reminders", "start"))

    iar = IssuesAndReminders
    irp = IssuesRemindersSitePostings
    # base = DB.session.query(iar)
    base = iar.query.options(joinedload(iar.postings).joinedload(
        irp.event)).filter(iar.resolution == None)
    return_data = None

    if start and end:
        base = base.filter(iar.ts_posted.between(start, end))

    if not event_id:
        if search:
            base = base.filter(iar.detail.ilike("%" + search + "%"))

        if not include_expired:
            base = base.filter(
                DB.or_(iar.ts_expiration > datetime.now(),
                       iar.ts_expiration == None))

        issues_and_reminders = base.order_by(DB.desc(
            iar.ts_posted)).limit(limit).offset(offset).all()
        DB.session.commit()

        if include_count:
            count = get_issues_count(base)
            return_data = [issues_and_reminders, count]
        else:
            return_data = issues_and_reminders
    else:
        issues_and_reminders = base.order_by(DB.desc(
            iar.timestamp)).filter(iar.event_id == event_id).all()
        DB.session.commit()
        return_data = issues_and_reminders

    print(get_process_status_log("get_issues_and_reminders", "end"))
    return return_data
Example #13
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
Example #14
0
def get_latest_data_presence(group, item_name="all"):
    """
    group (str):        type of data group to get, 
                        can be "rain_gauges", "tsm" or "loggers"
    item_name (str):    defaults to "all", specific entry to query
                        (e.g. logger name like "agbta" for group "loggers")
    """

    is_many = True
    if item_name != "all":
        is_many = False

    options = False
    if group == "rain_gauges":
        table = DataPresenceRainGauges
        options = DB.joinedload("rain_gauge").raiseload("*")
        schema = DataPresenceRainGaugesSchema(
            many=is_many, exclude=("rain_gauge.rainfall_alerts", "rain_gauge.rainfall_priorities"))
        join_table = [RainfallGauges]
        order = RainfallGauges.gauge_name
        filter_attr = RainfallGauges.gauge_name
    elif group == "tsm":
        table = DataPresenceTSM
        options = DB.joinedload("tsm_sensor")
        schema = DataPresenceTSMSchema(many=is_many)
        join_table = [TSMSensors, Loggers]
        order = Loggers.logger_name
        filter_attr = Loggers.logger_name
    elif group == "loggers":
        table = DataPresenceLoggers
        schema = DataPresenceLoggersSchema(many=is_many)
        join_table = [Loggers]
        order = Loggers.logger_name
        filter_attr = Loggers.logger_name
    elif group == "surficial":
        pass
    else:
        return "Data group inputs for querying data presence can only be 'rain_gauges', 'surficial', 'tsm' or 'loggers'"

    if group != "surficial":
        query = DB.session.query(table)

        if options:
            query = query.options(options)

        for jt in join_table:
            query = query.join(jt)

        if item_name != "all":
            query = query.filter(filter_attr == item_name).first()
        else:
            query = query.order_by(order).all()

        result = schema.dump(query).data
    else:
        result = get_surficial_data_presence()

    return jsonify(result)
Example #15
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
Example #16
0
def get_latest_messages(mobile_id, messages_per_convo=20):
    """
    """

    query_start = datetime.now()

    siu = SmsInboxUsers
    siut = SmsInboxUserTags

    sms_inbox = DB.session.query(
        siu.inbox_id.label("convo_id"),
        siu.inbox_id,
        bindparam("outbox_id", None),
        siu.mobile_id,
        siu.sms_msg,
        siu.ts_sms.label("ts"),
        siu.ts_sms.label("ts_received"),
        bindparam("ts_written", None),
        bindparam("ts_sent", None),
        literal("inbox").label("source"),
        bindparam("send_status", None)
    ).options(raiseload("*")).filter(siu.mobile_id == mobile_id).order_by(DB.desc(siu.ts_sms))

    sou = SmsOutboxUsers
    sous = SmsOutboxUserStatus
    sout = SmsOutboxUserTags

    outbox_sub = sout.query.join(sou).filter(
        sout.outbox_id == sou.outbox_id).subquery()

    sms_outbox = DB.session.query(
        sous.stat_id.label("convo_id"),
        bindparam("inbox_id", None),
        sous.outbox_id,
        sous.mobile_id,
        sou.sms_msg,
        sou.ts_written.label("ts"),
        bindparam("ts_received", None),
        sou.ts_written,
        sous.ts_sent,
        literal("outbox").label("source"),
        sous.send_status
    ).options(raiseload("*")).join(sou).filter(sous.mobile_id == mobile_id) \
        .order_by(DB.desc(sous.outbox_id))

    union = sms_inbox.union(sms_outbox).order_by(
        DB.desc(text("anon_1_ts"))).limit(messages_per_convo)

    query_end = datetime.now()

    print("")
    print("SCRIPT RUNTIME: GET LATEST MESSAGES",
          (query_end - query_start).total_seconds())
    print("")

    return union
Example #17
0
def get_all_events_wo_relationship():
    """
    Sample implementation of preventing lazy load on relationship
    """
    events = MonitoringEvents.query.options(DB.raiseload(MonitoringEvents.releases)).filter(
        MonitoringEvents.status == "finished").order_by(DB.desc(MonitoringEvents.event_id)).all()

    event_data = MonitoringEventsSchema(
        many=True, exclude=("releases", )).dump(events).data
    return jsonify(event_data)
Example #18
0
class MonitoringReleasePublishers(UserMixin, DB.Model):
    """
    Class representation of monitoring_release_publishers table
    """

    __tablename__ = "monitoring_release_publishers"
    __bind_key__ = "ewi_db"
    __table_args__ = {"schema": "ewi_db"}

    publisher_id = DB.Column(DB.Integer, primary_key=True, nullable=False)
    release_id = DB.Column(
        DB.Integer,
        DB.ForeignKey("ewi_db.monitoring_releases.release_id"),
        nullable=False)
    user_id = DB.Column(DB.Integer,
                        DB.ForeignKey("commons_db.users.user_id"),
                        nullable=False)
    role = DB.Column(DB.String(45))

    user_details = DB.relationship("Users",
                                   backref=DB.backref("publisher",
                                                      lazy="select"),
                                   lazy="joined",
                                   innerjoin=True)

    def __repr__(self):
        return (
            f"Type <{self.__class__.__name__}> Publisher ID: {self.publisher_id}"
            f" Release ID: {self.release_id} User ID: {self.user_id}"
            f" User Details: {self.user_details}")
Example #19
0
class OperationalTriggerSymbols(UserMixin, DB.Model):
    """
    Class representation of operational_triggers table
    """

    __tablename__ = "operational_trigger_symbols"
    __bind_key__ = "ewi_db"
    __table_args__ = {"schema": "ewi_db"}

    trigger_sym_id = DB.Column(DB.Integer, primary_key=True, nullable=False)
    alert_level = DB.Column(DB.Integer, nullable=False)
    alert_symbol = DB.Column(DB.String(2), nullable=False)
    alert_description = DB.Column(DB.String(100), nullable=False)
    source_id = DB.Column(
        DB.Integer,
        DB.ForeignKey("ewi_db.trigger_hierarchies.source_id"),
        nullable=False)

    trigger_hierarchy = DB.relationship("TriggerHierarchies",
                                        backref="trigger_symbols",
                                        lazy="joined",
                                        innerjoin=True)  # lazy="select")

    def __repr__(self):
        return (
            f"Type <{self.__class__.__name__}> Trigger Symbol ID: {self.trigger_sym_id}"
            f" Alert Level: {self.alert_level} Alert Symbol: {self.alert_symbol}"
            f" Alert Desc: {self.alert_description} Source ID: {self.source_id}"
            f" | Trigger_Hierarchy {self.trigger_hierarchy}")
Example #20
0
class InternalAlertSymbols(UserMixin, DB.Model):
    """
    Class representation of internal_alert_symbols table
    """

    __tablename__ = "internal_alert_symbols"
    __bind_key__ = "ewi_db"
    __table_args__ = {"schema": "ewi_db"}

    internal_sym_id = DB.Column(DB.Integer, primary_key=True, nullable=False)
    alert_symbol = DB.Column(DB.String(4), nullable=False)
    trigger_sym_id = DB.Column(
        DB.Integer,
        DB.ForeignKey("ewi_db.operational_trigger_symbols.trigger_sym_id"),
        nullable=False)
    alert_description = DB.Column(DB.String(120))

    trigger_symbol = DB.relationship("OperationalTriggerSymbols",
                                     lazy="select",
                                     uselist=False,
                                     backref=DB.backref(
                                         "internal_alert_symbol",
                                         lazy="select",
                                         uselist=False))

    def __repr__(self):
        return (
            f"Type <{self.__class__.__name__}> Internal Sym ID: {self.internal_sym_id}"
            f" Alert Symbol: {self.alert_symbol} Trigger Sym ID: {self.trigger_sym_id}"
            f" Alert Description: {self.alert_description} "
            f" OP Trigger Symbols: {self.trigger_symbol}")
Example #21
0
class RainfallThresholds(DB.Model):
    """
    Class representation of rainfall_thresholds table
    """

    __tablename__ = "rainfall_thresholds"
    __bind_key__ = "senslopedb"
    __table_args__ = {"schema": "senslopedb"}

    rt_id = DB.Column(DB.Integer, primary_key=True, nullable=False)
    site_id = DB.Column(DB.Integer,
                        DB.ForeignKey("commons_db.sites.site_id"),
                        nullable=False)
    threshold_name = DB.Column(DB.String(12), nullable=False)
    threshold_value = DB.Column(DB.Float(8, 5), nullable=False)

    site = DB.relationship("Sites",
                           backref=DB.backref("rainfall_thresholds",
                                              lazy="dynamic"),
                           lazy="subquery")

    def __repr__(self):
        return (
            f"Type <{self.__class__.__name__}> Rain Threshold ID: {self.rt_id}"
            f" Site ID: {self.site_id} Thres Name: {self.threshold_name}"
            f" Threshold Value: {self.threshold_value}")
Example #22
0
def get_contacts_per_site(site_ids=None,
                          site_codes=None,
                          only_ewi_recipients=True,
                          include_ewi_restrictions=False,
                          org_ids=None,
                          return_schema_format=True,
                          include_inactive_numbers=False):
    """
    Function that get contacts per site
    """

    query = UsersRelationship.query.join(UserOrganizations).join(Sites).join(
        UserMobiles).options(
            DB.subqueryload("mobile_numbers").joinedload("mobile_number",
                                                         innerjoin=True),
            DB.subqueryload("organizations").joinedload("site",
                                                        innerjoin=True),
            DB.subqueryload("organizations").joinedload("organization",
                                                        innerjoin=True),
            DB.raiseload("*"))

    if site_ids:
        query = query.filter(Sites.site_id.in_(site_ids))

    if site_codes:
        query = query.filter(Sites.site_code.in_(site_codes))

    if org_ids:
        query = query.join(UserOrganizations).filter(
            UserOrganizations.org_id.in_(org_ids))

    if only_ewi_recipients:
        query = query.filter(Users.ewi_recipient == 1)

    schema_exclusions = [
        "emails", "teams", "landline_numbers", "ewi_restriction"
    ]

    if include_ewi_restrictions:
        # uer = UserEwiRestrictions
        query = query.options(DB.joinedload("ewi_restriction"))
        schema_exclusions.remove("ewi_restriction")

    if not include_inactive_numbers:
        query = query.filter(UserMobiles.status == 1)

    user_per_site_result = query.all()

    if return_schema_format:
        user_per_site_result = UsersRelationshipSchema(
            many=True, exclude=schema_exclusions) \
            .dump(user_per_site_result).data

    return user_per_site_result
Example #23
0
class UserAlertInfo(DB.Model):
    __tablename__ = "user_alert_info"

    __bind_key__ = "comms_db_3"

    uai_id = DB.Column(DB.Integer, primary_key=True)
    send_alert = DB.Column(DB.Integer, nullable=False)
    user_id = DB.Column(DB.Integer, DB.ForeignKey("users.user_id"))

    def __repr__(self):
        return f"Type <{self.send_alert}>"
Example #24
0
class NetworkCarriers(DB.Model):
    """
    Class representation of network_carrier table
    """
    __tablename__ = "network_carriers"
    __bind_key__ = "comms_db_3"
    __table_args__ = {"schema": "comms_db_3"}

    network_id = DB.Column(DB.Integer, primary_key=True)
    carrier = DB.Column(DB.String(45))

    def __repr__(self):
        return f"Class Representation"
Example #25
0
class LoggerModels(DB.Model):
    """
    Class representation of logger_models table
    """

    __tablename__ = "logger_models"
    __bind_key__ = "senslopedb"
    __table_args__ = {"schema": "senslopedb"}

    model_id = DB.Column(DB.Integer, primary_key=True, nullable=False)
    has_tilt = DB.Column(DB.Integer)
    has_rain = DB.Column(DB.Integer)
    has_piezo = DB.Column(DB.Integer)
    has_soms = DB.Column(DB.Integer)
    logger_type = DB.Column(DB.String(10))

    loggers = DB.relationship("Loggers",
                              backref="logger_model",
                              lazy="subquery")

    def __repr__(self):
        return (
            f"Type <{self.__class__.__name__}> TSM ID: {self.tsm_id}"
            f" TSM Name: {self.tsm_name} Number of Segments: {self.number_of_segments}"
            f"Date Activated: {self.date_activated}")
Example #26
0
class GintagsReference(DB.Model):
    """
    Class representation of general_data_references table
    """
    __tablename__ = "gintags_reference"
    __bind_key__ = "comms_db_3"
    __table_args__ = {"schema": "comms_db_3"}

    tag_id = DB.Column(DB.Integer, primary_key=True)
    tag_name = DB.Column(DB.String(200))
    tag_description = DB.Column(DB.String(1000))

    def __repr__(self):
        return f"Class Representation"
Example #27
0
class RiskProfile(DB.Model):
    """
    Class representation of ewi_templates table
    """
    __tablename__ = "risk_profile"
    __bind_key__ = "commons_db"
    __table_args__ = {"schema": "commons_db"}

    risk_profile_id = DB.Column(DB.Integer, primary_key=True)
    entry = DB.Column(DB.String(1000))
    timestamp = DB.Column(DB.String(45))

    def __repr__(self):
        return f"Class Representation"
Example #28
0
    class GenericTiltTable(DB.Model):
        """
        """

        __tablename__ = table_name
        __bind_key__ = "senslopedb"
        __table_args__ = {"schema": "senslopedb", "extend_existing": True}

        data_id = DB.Column(DB.Integer, primary_key=True)
        ts = DB.Column(DB.DateTime, nullable=False)

        def __repr__(self):
            return (f"Type <{self.__class__.__name__}> data_id: {self.data_id}"
                    f" ts: {self.ts}")
Example #29
0
class UserEmails(DB.Model):
    """
    Class representation of user_teams table
    """
    __tablename__ = "user_emails"
    __bind_key__ = "commons_db"
    __table_args__ = {"schema": "commons_db"}

    email_id = DB.Column(DB.Integer, primary_key=True)
    user_id = DB.Column(DB.Integer, DB.ForeignKey("commons_db.users.user_id"))
    email = DB.Column(DB.String(45))

    def __repr__(self):
        return f"{self.email}"
Example #30
0
class MomsFeatureAlerts(UserMixin, DB.Model):
    """
    Class representation of moms_features table
    """

    __tablename__ = "moms_feature_alerts"
    __bind_key__ = "ewi_db"
    __table_args__ = {"schema": "ewi_db"}

    feature_alert_id = DB.Column(DB.Integer, primary_key=True, nullable=False)
    feature_id = DB.Column(DB.Integer,
                           DB.ForeignKey("ewi_db.moms_features.feature_id"),
                           nullable=False)
    alert_level = DB.Column(DB.Integer)
    description = DB.Column(DB.String(500))

    feature = DB.relationship("MomsFeatures",
                              backref=DB.backref("alerts", lazy="subquery"),
                              lazy="select")

    def __repr__(self):
        return (
            f"Type <{self.__class__.__name__}> Feature ID: {self.feature_alert_id}"
            f" Feature Type: {self.feature_id} Alert Level: {self.alert_level}"
        )