Example #1
0
def get_status_messages(component_id=None,
                        level=None,
                        orderby=None,
                        page=None,
                        page_row=None,
                        order_desc=None,
                        component_type=None,
                        message_id=None):

    query = db.session.query(Current_Status)
    if orderby is not None:
        if orderby != 'level':
            if order_desc is not None and order_desc != 'true':
                query = query.order_by(asc(orderby))
            else:
                query = query.order_by(desc(orderby))
        else:
            # level case
            alias = aliased(Status_Message)
            if order_desc is not None and not order_desc != 'true':
                query = query.join(alias,
                                   Status_Message).order_by(desc(alias.level))
            else:
                query = query.join(alias,
                                   Status_Message).order_by(asc(alias.level))

    query = query.order_by(asc('viewed'))

    if component_id is not None:
        query = query.filter(
            Current_Status.component_id == get_bytes_from_uuid(component_id))
    if message_id is not None:
        query = query.filter(Current_Status.message_id == message_id)
    if level is not None:
        filter = [Current_Status.message.has(level=x) for x in level]
        query = query.filter(or_(*filter))

    if component_type is not None:
        query = query.filter(Current_Status.component_type == component_type)

    msgs = {}
    total = 0
    try:
        if page is None:  #return all
            data = query.all()
            msgs = [x.serialize for x in data]
            total = len(data)
        else:
            current_page = paginate(query, page, page_row, error_out=False)
            msgs = [x.serialize for x in current_page['items']]
            total = current_page['total']

    except Exception as err:
        api_log.error("status: get_status_messages: %s" % format_exc())
        return False, "Internal error %s" % str(err)

    return True, {'messages': msgs, 'total': total}
Example #2
0
def get_status_messages(component_id=None, level=None, orderby=None, page=None,
                        page_row=None, order_desc=None, component_type=None, message_id=None):

    query = db.session.query(Current_Status)
    if orderby is not None:
        if orderby != 'level':
            if order_desc is not None and order_desc != 'true':
                query = query.order_by(asc(orderby))
            else:
                query = query.order_by(desc(orderby))
        else:
            # level case
            alias = aliased(Status_Message)
            if order_desc is not None and not order_desc != 'true':
                query = query.join(alias, Status_Message).order_by(desc(alias.level))
            else:
                query = query.join(alias, Status_Message).order_by(asc(alias.level))

    query = query.order_by(asc('viewed'))

    if component_id is not None:
        query = query.filter(Current_Status.component_id == get_bytes_from_uuid(component_id))
    if message_id is not  None:
        query  = query.filter(Current_Status.message_id == message_id)
    if level is not None:
        filter = [Current_Status.message.has(level=x) for x in level]
        query = query.filter(or_(*filter))

    if component_type is not None:
        query = query.filter(Current_Status.component_type == component_type)

    msgs = {}
    total = 0
    try:
        if page is None: #return all
            data = query.all()
            msgs = [x.serialize for x in data]
            total = len(data)
        else:
            current_page = paginate(query, page, page_row, error_out=False)
            msgs = [x.serialize for x in current_page['items']]
            total = current_page['total']

    except Exception as err:
        api_log.error("status: get_status_messages: %s" % format_exc())
        return False, "Internal error %s" % str(err)

    return True, {'messages': msgs, 'total': total}
Example #3
0
def get_current_status_messages(component_id=None,
                                message_level=None,
                                order_by=None,
                                page=None,
                                page_row=None,
                                order_desc=None,
                                component_type=None,
                                message_id=None,
                                message_type=None,
                                search=None,
                                only_unread=None,
                                login_user=None,
                                is_admin=False):
    """Returns the list of current_status messages matching the given criteria.
    Args:
        component_id(UUID string): Component ID related with the message
        message_level(list<str>): Message level
        order_by(str): Current status field by which you want to sort the results.
        page(int): Page number
        page_row(int): Number of items per page
        order_desc(Boolean or None): Specify whether you want to sort the results in descendig order or not.
        component_type(str): Component Type related with the message
        message_id(UUID string): The message ID you are looking for
        message_type(list<str>): Kind of message you want to retrieve.
        search(str): It's a free text to search for message title
        only_unread(Boolean or None): If true, retrieve only unread messages
        login_user (admin): logged user on the system
        is_admin(bool): Whether the current user is admin or not.
    Returns:
       [Current_Status] A list of Current_Status Items

    """
    if login_user is None or login_user == "":
        return True, {'messages': {}, 'total': 0}

    query = db.session.query(Current_Status)
    # message_type and message_level are fields belonging to the related table status_message
    # We need to deal with this situation when we set the build the order_by clause
    if order_by is not None:
        if order_by not in ['message_level', 'message_type', 'message_title']:
            if order_desc:
                query = query.order_by(desc(order_by))
            else:
                query = query.order_by(asc(order_by))
        else:
            order_by_field = Status_Message.type
            if order_by == 'message_level':
                order_by_field = Status_Message.level
            if order_by == 'message_title':
                order_by_field = Status_Message.title
            if order_desc:
                query = query.join(Status_Message).order_by(
                    desc(order_by_field))
            else:
                query = query.join(Status_Message).order_by(
                    asc(order_by_field))

    if login_user != "admin" and not is_admin:  # neither user admin nor is_admin
        query = query.join(
            UserPermissions,
            UserPermissions.component_id == Current_Status.component_id)
        query = query.filter(and_(UserPermissions.login == login_user))
    query = query.order_by(asc(Current_Status.viewed))

    if component_id is not None:
        query = query.filter(
            and_(Current_Status.component_id == get_bytes_from_uuid(
                component_id)))
    if message_id is not None:
        query = query.filter(
            and_(Current_Status.message_id == get_bytes_from_uuid(message_id)))
    if message_level is not None:
        new_filter = [
            Current_Status.message.has(
                Status_Message.level.like(
                    Status_Message.get_level_integer_from_string(x)))
            for x in message_level
        ]
        query = query.filter(or_(*new_filter))
    if message_type is not None:
        new_filter = [
            Current_Status.message.has(Status_Message.type.like(x))
            for x in message_type
        ]
        query = query.filter(or_(*new_filter))
    if component_type is not None:
        query = query.filter(
            and_(Current_Status.component_type == component_type))
    if search is not None:
        query = query.filter(
            or_(
                Current_Status.message.has(
                    Status_Message.title.like("%" + search + "%")),
                Current_Status.message.has(
                    Status_Message.description.like("%" + search + "%"))))
    if only_unread:
        query = query.filter(and_(Current_Status.viewed == 0))

    query = query.filter(
        or_(Current_Status.suppressed == None, Current_Status.suppressed == 0))
    # Always order by creationtime
    if order_by != "creation_time":
        query = query.order_by(desc(Current_Status.creation_time))
    msgs = {}
    total = 0

    try:
        if page is None:  # return all
            data = query.all()
            msgs = [x.serialize for x in data]
            total = len(data)
        else:
            current_page = paginate(query, page, page_row, error_out=False)
            msgs = [x.serialize for x in current_page['items']]
            total = current_page['total']
    except Exception as err:
        api_log.error("status: get_status_messages: %s" % format_exc())
        return False, "Internal error %s" % str(err)

    return True, {'messages': msgs, 'total': total}
Example #4
0
def get_current_status_messages(component_id=None,
                                message_level=None,
                                order_by=None,
                                page=None,
                                page_row=None,
                                order_desc=None,
                                component_type=None,
                                message_id=None,
                                message_type=None,
                                search=None,
                                only_unread=None,
                                login_user=None,
                                is_admin=False):
    """Returns the list of current_status messages matching the given criteria.
    Args:
        component_id(UUID string): Component ID related with the message
        message_level(list<str>): Message level
        order_by(str): Current status field by which you want to sort the results.
        page(int): Page number
        page_row(int): Number of items per page
        order_desc(Boolean or None): Specify whether you want to sort the results in descendig order or not.
        component_type(str): Component Type related with the message
        message_id(UUID string): The message ID you are looking for
        message_type(list<str>): Kind of message you want to retrieve.
        search(str): It's a free text to search for message title
        only_unread(Boolean or None): If true, retrieve only unread messages
        login_user (admin): logged user on the system
        is_admin(bool): Whether the current user is admin or not.
    Returns:
       [Current_Status] A list of Current_Status Items

    """
    if login_user is None or login_user == "":
        return True, {'messages': {}, 'total': 0}

    query = db.session.query(Current_Status)
    # message_type and message_level are fields belonging to the related table status_message
    # We need to deal with this situation when we set the build the order_by clause
    if order_by is not None:
        if order_by not in ['message_level', 'message_type', 'message_title']:
            if order_desc:
                query = query.order_by(desc(order_by))
            else:
                query = query.order_by(asc(order_by))
        else:
            order_by_field = Status_Message.type
            if order_by == 'message_level':
                order_by_field = Status_Message.level
            if order_by == 'message_title':
                order_by_field = Status_Message.title
            if order_desc:
                query = query.join(Status_Message).order_by(desc(order_by_field))
            else:
                query = query.join(Status_Message).order_by(asc(order_by_field))

    if login_user != "admin" and not is_admin:  # neither user admin nor is_admin
        query = query.join(UserPermissions, UserPermissions.component_id == Current_Status.component_id)
        query = query.filter(and_(UserPermissions.login == login_user))
    query = query.order_by(asc(Current_Status.viewed))

    if component_id is not None:
        query = query.filter(and_(Current_Status.component_id == get_bytes_from_uuid(component_id)))
    if message_id is not None:
        query = query.filter(and_(Current_Status.message_id == get_bytes_from_uuid(message_id)))
    if message_level is not None:
        new_filter = [
            Current_Status.message.has(Status_Message.level.like(Status_Message.get_level_integer_from_string(x))) for x
            in message_level]
        query = query.filter(or_(*new_filter))
    if message_type is not None:
        new_filter = [Current_Status.message.has(Status_Message.type.like(x)) for x in message_type]
        query = query.filter(or_(*new_filter))
    if component_type is not None:
        query = query.filter(and_(Current_Status.component_type == component_type))
    if search is not None:
        query = query.filter(or_(Current_Status.message.has(Status_Message.title.like("%" + search + "%")),
                                 Current_Status.message.has(Status_Message.description.like("%" + search + "%"))))
    if only_unread:
        query = query.filter(and_(Current_Status.viewed == 0))

    query = query.filter(or_(Current_Status.suppressed == None, Current_Status.suppressed == 0))
    # Always order by creationtime
    if order_by != "creation_time":
        query = query.order_by(desc(Current_Status.creation_time))
    msgs = {}
    total = 0

    try:
        if page is None:  # return all
            data = query.all()
            msgs = [x.serialize for x in data]
            total = len(data)
        else:
            current_page = paginate(query, page, page_row, error_out=False)
            msgs = [x.serialize for x in current_page['items']]
            total = current_page['total']
    except Exception as err:
        api_log.error("status: get_status_messages: %s" % format_exc())
        return False, "Internal error %s" % str(err)

    return True, {'messages': msgs, 'total': total}