code: def ReadUserNotifications(self,
                              username,
                              state=None,
                              timerange=None,
                              cursor=None):
      
  
      query = ("SELECT UNIX_TIMESTAMP(timestamp), "
               "       notification_state, notification "
               "FROM user_notification "
               "WHERE username_hash = %s ")
      args = [mysql_utils.Hash(username)]
  
      if state is not None:
        query += "AND notification_state = %s "
        args.append(int(state))
  
      if timerange is not None:
        time_from, time_to = timerange  # pylint: disable=unpacking-non-sequence
  
        if time_from is not None:
          query += "AND timestamp >= FROM_UNIXTIME(%s) "
          args.append(mysql_utils.RDFDatetimeToTimestamp(time_from))
  
        if time_to is not None:
          query += "AND timestamp <= FROM_UNIXTIME(%s) "
          args.append(mysql_utils.RDFDatetimeToTimestamp(time_to))
  
      query += "ORDER BY timestamp DESC "
  
      ret = []
      cursor.execute(query, args)
  
      for timestamp, state, notification_ser in cursor.fetchall():
        n = rdf_objects.UserNotification.FromSerializedString(notification_ser)
        n.timestamp = mysql_utils.TimestampToRDFDatetime(timestamp)
        n.state = state
        ret.append(n)
  
      return ret
docs: Reads notifications scheduled for a user within a given timerange.