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}
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}
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}
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}