示例#1
0
文件: main.py 项目: virtadpt/MSPARP
def chat(chat=None):

    if chat is None:
        chat_meta = { 'type': 'unsaved' }
        existing_lines = []
        latest_num = -1
    else:
        if g.redis.zrank('ip-bans', chat+'/'+request.environ['HTTP_X_REAL_IP']) is not None:
            chat = OUBLIETTE_ID
        # Check if chat exists
        chat_meta = g.redis.hgetall('chat.'+chat+'.meta')
        # Convert topic to unicode.
        if 'topic' in chat_meta.keys():
            chat_meta['topic'] = unicode(chat_meta['topic'], encoding='utf8')
        if len(chat_meta)==0:
            # XXX CREATE
            abort(404)
        # Load chat-based session data.
        g.user.set_chat(chat)
        existing_lines = [parse_line(line, 0) for line in g.redis.lrange('chat.'+chat, 0, -1)]
        latest_num = len(existing_lines)-1

    return render_template(
        'chat.html',
        user=g.user,
        character_dict=g.user.json_info(),
        case_options=CASE_OPTIONS,
        groups=CHARACTER_GROUPS,
        characters=CHARACTERS,
        chat=chat,
        chat_meta=chat_meta,
        lines=existing_lines,
        latest_num=latest_num
    )
示例#2
0
文件: main.py 项目: opaquebox/TAnon
def view_log(chat=None):

    try:
        log = g.mysql.query(Log).filter(Log.url == chat).one()
    except NoResultFound:
        abort(404)

    current_page = request.args.get('page') or log.page_count
    mode = request.args.get('mode') or 'normal'

    try:
        log_page = g.mysql.query(LogPage).filter(
            and_(LogPage.log_id == log.id,
                 LogPage.number == current_page)).one()
    except NoResultFound:
        abort(404)

    url_generator = paginate.PageURL(url_for('view_log', chat=chat),
                                     {'page': current_page})

    # It's only one row per page and we want to fetch them via both log id and
    # page number rather than slicing, so we'll just give it an empty list and
    # override the count.
    paginator = paginate.Page([],
                              page=current_page,
                              items_per_page=1,
                              item_count=log.page_count,
                              url=url_generator)

    # Pages end with a line break, so the last line is blank.
    lines = log_page.content.split('\n')[0:-1]
    lines = filter(lambda x: x is not None,
                   map(lambda _: parse_line(_, 0), lines))

    for line in lines:
        line['datetime'] = datetime.datetime.fromtimestamp(line['timestamp'])

    return render_template(
        'log.html',
        chat=chat,
        lines=lines,
        current_page=current_page,
        mode=mode,
        paginator=paginator,
    )
示例#3
0
文件: main.py 项目: thecount92/MSPARP
def chat(chat=None):

    if chat is None:
        chat_meta = { 'type': 'unsaved' }
        existing_lines = []
        latest_num = -1
    else:
        if g.redis.hexists("global-bans", request.headers['CF-Connecting-IP']):
            return redirect("http://erigam.tk/")
        if g.redis.zrank('ip-bans', chat+'/'+request.headers['CF-Connecting-IP']) is not None:
            return redirect("http://help.msparp.com/kb/faq.php?id=21")
        # Check if chat exists
        chat_meta = g.redis.hgetall('chat.'+chat+'.meta')
        # Convert topic to unicode.
        if 'topic' in chat_meta.keys():
            chat_meta['topic'] = unicode(chat_meta['topic'], encoding='utf8')
        if len(chat_meta)==0:
            # XXX CREATE
            abort(404)
        # Load chat-based session data.
        g.user.set_chat(chat)
        existing_lines = [parse_line(line, 0) for line in g.redis.lrange('chat.'+chat, 0, -1)]
        latest_num = len(existing_lines)-1

        # *music* DUCT TAPE...
        if g.user.meta['counter'] == "Redis is loading the dataset in memory":
            abort(500)
    return render_template(
        'chat.html',
        user=g.user,
        character_dict=g.user.json_info(),
        case_options=CASE_OPTIONS,
        groups=CHARACTER_GROUPS,
        characters=CHARACTERS,
        chat=chat,
        chat_meta=chat_meta,
        lines=existing_lines,
        latest_num=latest_num,
        chat_links=g.redis.get('chat_links'),
    )
示例#4
0
文件: main.py 项目: thecount92/MSPARP
def view_log(chat=None):

    # Decide whether or not to put a continue link in.
    continuable = g.redis.hget('chat.'+chat+'.meta', 'type') is not None

    try:
        log = g.mysql.query(Log).filter(Log.url==chat).one()
    except:
        abort(404)

    current_page = request.args.get('page') or log.page_count
    mode = request.args.get('mode') or 'normal'

    try:
        log_page = g.mysql.query(LogPage).filter(and_(LogPage.log_id==log.id, LogPage.number==current_page)).one()
    except NoResultFound:
        abort(404)

    url_generator = paginate.PageURL(url_for('view_log', chat=chat), {'page': current_page})

    # It's only one row per page and we want to fetch them via both log id and
    # page number rather than slicing, so we'll just give it an empty list and
    # override the count.
    paginator = paginate.Page([], page=current_page, items_per_page=1, item_count=log.page_count, url=url_generator)

    # Pages end with a line break, so the last line is blank.
    lines = log_page.content.split('\n')[0:-1]
    lines = map(lambda _: parse_line(_, 0), lines)

    for line in lines:
        line['datetime'] = datetime.datetime.fromtimestamp(line['timestamp'])

    return render_template('log.html',
        chat=chat,
        lines=lines,
        continuable=continuable,
        current_page=current_page,
        mode=mode,
        paginator=paginator
    )
示例#5
0
brokenChats = set()
fixedLines = 0
fixedCounters = 0

a = redis.keys("chat.*.meta")
for x in a:
    split = x.split(".")
    chats.add(split[1])

pbar = ProgressBar(widgets=[Percentage(), Bar()], maxval=len(chats)).start()
i = 0
for chat in chats:
	i += 1
	for line in redis.lrange('chat.'+chat, 0, -1):
		try:
			l = parse_line(line, 0)
		except ValueError:
			brokenChats.add(chat)
			fixedLines += 1
			redis.lrem('chat.' + chat, line, 0)
	for counter in redis.hgetall('chat.' + chat + '.counters'):
		if counter.isdigit():
			pass
		else:
			fixedCounters += 1
			cookie = redis.hget('chat.' + chat + '.counters',counter)
			#print cookie
			redis.hdel('chat.'+chat+'.counters',counter)
			redis.delete('session.' + cookie + '.chat.' + chat)
			redis.delete('session.' + cookie + '.meta.' + chat)
	pbar.update(i)
示例#6
0
brokenChats = set()
fixedLines = 0
fixedCounters = 0

a = redis.keys("chat.*.meta")
for x in a:
    split = x.split(".")
    chats.add(split[1])

pbar = ProgressBar(widgets=[Percentage(), Bar()], maxval=len(chats)).start()
i = 0
for chat in chats:
    i += 1
    for line in redis.lrange('chat.' + chat, 0, -1):
        try:
            l = parse_line(line, 0)
        except ValueError:
            brokenChats.add(chat)
            fixedLines += 1
            redis.lrem('chat.' + chat, line, 0)
    for counter in redis.hgetall('chat.' + chat + '.counters'):
        if counter.isdigit():
            pass
        else:
            fixedCounters += 1
            cookie = redis.hget('chat.' + chat + '.counters', counter)
            #print cookie
            redis.hdel('chat.' + chat + '.counters', counter)
            redis.delete('session.' + cookie + '.chat.' + chat)
            redis.delete('session.' + cookie + '.meta.' + chat)
    pbar.update(i)