本文整理汇总了Python中x84.bbs.DBProxy.keys方法的典型用法代码示例。如果您正苦于以下问题:Python DBProxy.keys方法的具体用法?Python DBProxy.keys怎么用?Python DBProxy.keys使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类x84.bbs.DBProxy
的用法示例。
在下文中一共展示了DBProxy.keys方法的6个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的Python代码示例。
示例1: publish_network_messages
# 需要导入模块: from x84.bbs import DBProxy [as 别名]
# 或者: from x84.bbs.DBProxy import keys [as 别名]
def publish_network_messages(net):
" Push messages to network. "
from x84.bbs import DBProxy
from x84.bbs.msgbase import format_origin_line, MSGDB
log = logging.getLogger(__name__)
log.debug(u'[{net[name]}] publishing new messages.'.format(net=net))
queuedb = DBProxy('{0}queues'.format(net['name']), use_session=False)
transdb = DBProxy('{0}trans'.format(net['name']), use_session=False)
msgdb = DBProxy(MSGDB, use_session=False)
# publish each message
for msg_id in sorted(queuedb.keys(),
cmp=lambda x, y: cmp(int(x), int(y))):
if msg_id not in msgdb:
log.warn('{net[name]} No such message (msg_id={msg_id})'
.format(net=net, msg_id=msg_id))
del queuedb[msg_id]
continue
msg = msgdb[msg_id]
trans_parent = None
if msg.parent is not None:
matches = [key for key, data in transdb.items()
if int(data) == msg.parent]
if len(matches) > 0:
trans_parent = matches[0]
else:
log.warn('{net[name]} Parent ID {msg.parent} '
'not in translation-DB (msg_id={msg_id})'
.format(net=net, msg=msg, msg_id=msg_id))
trans_id = push_rest(net=net, msg=msg, parent=trans_parent)
if trans_id is False:
log.error('{net[name]} Message not posted (msg_id={msg_id})'
.format(net=net['name'], msg_id=msg_id))
continue
if trans_id in transdb.keys():
log.error('{net[name]} trans_id={trans_id} conflicts with '
'(msg_id={msg_id})'
.format(net=net, trans_id=trans_id, msg_id=msg_id))
with queuedb:
del queuedb[msg_id]
continue
# transform, and possibly duplicate(?) message ..
with transdb, msgdb, queuedb:
transdb[trans_id] = msg_id
msg.body = u''.join((msg.body, format_origin_line()))
msgdb[msg_id] = msg
del queuedb[msg_id]
log.info('{net[name]} Published (msg_id={msg_id}) => {trans_id}'
.format(net=net, msg_id=msg_id, trans_id=trans_id))
示例2: add_oneline
# 需要导入模块: from x84.bbs import DBProxy [as 别名]
# 或者: from x84.bbs.DBProxy import keys [as 别名]
def add_oneline(session, message):
""" Add a oneliner to the local database. """
udb = DBProxy('oneliner')
with udb:
key = max([int(key) for key in udb.keys()] or [0]) + 1
udb[key] = {
'oneliner': message,
'alias': getsession().user.handle,
'bbsname': get_ini('system', 'bbsname'),
'timestamp': time.strftime('%Y-%m-%d %H:%M:%S'),
}
maybe_expunge_records()
# tell everybody a new oneliner was posted, including our
# -- allows it to work something like a chatroom.
session.send_event('global', ('oneliner', True))
示例3: add_oneline
# 需要导入模块: from x84.bbs import DBProxy [as 别名]
# 或者: from x84.bbs.DBProxy import keys [as 别名]
def add_oneline(msg):
"""
Add a oneliner to the local database.
"""
import time
from x84.bbs import getsession, DBProxy, ini
session = getsession()
udb = DBProxy('oneliner')
udb.acquire()
udb[max([int(key) for key in udb.keys()] or [0]) + 1] = {
'oneliner': msg,
'alias': getsession().handle,
'bbsname': ini.CFG.get('system', 'bbsname'),
'timestamp': time.strftime('%Y-%m-%d %H:%M:%S'),
}
udb.release()
session.buffer_event('oneliner_update', True)
session.send_event('global', ('oneliner_update', True))
示例4: chk_thread
# 需要导入模块: from x84.bbs import DBProxy [as 别名]
# 或者: from x84.bbs.DBProxy import keys [as 别名]
def chk_thread(thread):
"""
check if bbs-scene.org thread finished, if so, farm
its data and send updates via event 'oneliner_update' if there
are any.
"""
from x84.bbs import getsession, DBProxy
import logging
log = logging.getLogger(__name__)
session = getsession()
if thread is not None and not thread.is_alive():
udb = DBProxy('oneliner')
udbkeys = udb.keys()
nlc = 0
for key, value in thread.content:
if key not in udbkeys:
udb[key] = value
nlc += 1
if nlc:
log.debug('%d new entries', nlc)
session.buffer_event('oneliner_update', True)
else:
log.debug('no new %s entries'.format(thread.ident))
return True
示例5: poll_network_for_messages
# 需要导入模块: from x84.bbs import DBProxy [as 别名]
# 或者: from x84.bbs.DBProxy import keys [as 别名]
def poll_network_for_messages(net):
" pull for new messages of network, storing locally. "
from x84.bbs import Msg, DBProxy
from x84.bbs.msgbase import to_localtime
log = logging.getLogger(__name__)
log.debug(u'[{net[name]}] polling for new messages.'.format(net=net))
try:
last_msg_id = get_last_msg_id(net['last_file'])
except (OSError, IOError) as err:
log.error('[{net[name]}] skipping network: {err}'
.format(net=net, err=err))
return
msgs = pull_rest(net=net, last_msg_id=last_msg_id)
if msgs is not False:
log.info('{net[name]} Retrieved {num} messages'
.format(net=net, num=len(msgs)))
else:
log.debug('{net[name]} no messages.'.format(net=net))
return
transdb = DBProxy('{0}trans'.format(net['name']), use_session=False)
transkeys = transdb.keys()
msgs = sorted(msgs, cmp=lambda x, y: cmp(int(x['id']), int(y['id'])))
# store messages locally, saving their translated IDs to the transdb
for msg in msgs:
store_msg = Msg()
store_msg.recipient = msg['recipient']
store_msg.author = msg['author']
store_msg.subject = msg['subject']
store_msg.body = msg['body']
store_msg.tags = set(msg['tags'])
store_msg.tags.add(u''.join((net['name'])))
if msg['recipient'] is None and u'public' not in msg['tags']:
log.warn("{net[name]} No recipient (msg_id={msg[id]}), "
"adding 'public' tag".format(net=net, msg=msg))
store_msg.tags.add(u'public')
if (msg['parent'] is not None and
str(msg['parent']) not in transkeys):
log.warn('{net[name]} No such parent message ({msg[parent]}, '
'msg_id={msg[id]}), removing reference.'
.format(net=net, msg=msg))
elif msg['parent'] is not None:
store_msg.parent = int(transdb[msg['parent']])
if msg['id'] in transkeys:
log.warn('{net[name]} dupe (msg_id={msg[id]}) discarded.'
.format(net=net, msg=msg))
else:
# do not save this message to network, we already received
# it from the network, set send_net=False
store_msg.save(send_net=False, ctime=to_localtime(msg['ctime']))
with transdb:
transdb[msg['id']] = store_msg.idx
transkeys.append(msg['id'])
log.info('{net[name]} Processed (msg_id={msg[id]}) => {new_id}'
.format(net=net, msg=msg, new_id=store_msg.idx))
if 'last' not in net.keys() or int(net['last']) < int(msg['id']):
net['last'] = msg['id']
if 'last' in net.keys():
with open(net['last_file'], 'w') as last_fp:
last_fp.write(str(net['last']))
return
示例6: main
# 需要导入模块: from x84.bbs import DBProxy [as 别名]
# 或者: from x84.bbs.DBProxy import keys [as 别名]
#.........这里部分代码省略.........
term.underline('sysop'.ljust(15)),),
u'\r\n'.join([board_fmt % (
term.bold(host.rjust(25)),
term.reverse(board.center(30)),
term.bold_underline(sysop),)
for (host, board, sysop) in boards]),
u'\r\n\r\n',
term.bold(
u'back to the mundane world...'),
u'\r\n',))
commit_msg = term.bold_blue(
u'-- ! thANk YOU fOR YOUR CONtRibUtiON, bROthER ! --')
write_msg = term.red_reverse(
u'bURNiNG tO ROM, PlEASE WAiT ...')
db_firstrecord = ((time.time() - 1984,
u'B. b.', u'bEhAVE YOURSElVES ...'),)
automsg_len = 40
artfile = os.path.join(os.path.dirname(__file__), 'art', '1984.asc')
def refresh_prompt(msg):
""" Refresh automsg prompt using string msg. """
echo(u''.join((u'\r\n\r\n', term.clear_eol, msg)))
def refresh_automsg(idx):
""" Refresh automsg database, display automsg of idx, return idx. """
session.flush_event('automsg')
autodb = DBProxy('automsg')
automsgs = sorted(autodb.values()) if len(autodb) else db_firstrecord
dblen = len(automsgs)
# bounds check
if idx < 0:
idx = dblen - 1
elif idx > dblen - 1:
idx = 0
tm_ago, handle, msg = automsgs[idx]
asc_ago = u'%s ago' % (timeago(time.time() - tm_ago))
disp = (u''.join(('\r\n\r\n',
term.bold(handle.rjust(max_user)),
term.bold_blue(u'/'),
term.blue(u'%*d' % (len('%d' % (dblen,)), idx,)),
term.bold_blue(u':'),
term.blue_reverse(msg.ljust(automsg_len)),
term.bold(u'\\'),
term.blue(asc_ago),)))
echo(u''.join((
u'\r\n\r\n',
Ansi(disp).wrap(term.width),
)))
return idx
def refresh_all(idx=None):
"""
refresh screen, database, and return database index
"""
echo(u''.join((u'\r\n\r\n', term.clear_eol,)))
for line in showcp437(artfile):
echo(line)
idx = refresh_automsg(-1 if idx is None else idx)
refresh_prompt(prompt_msg)
return idx
idx = refresh_all()
while True:
if session.poll_event('refresh'):
idx = refresh_all()
elif session.poll_event('automsg'):
refresh_automsg(-1)
echo(u'\a') # bel
refresh_prompt(prompt_msg)
inp = getch(1)
if inp in (u'g', u'G', term.KEY_EXIT, unichr(27), unichr(3),):
# http://www.xfree86.org/4.5.0/ctlseqs.html
# Restore xterm icon and window title from stack.
echo(unichr(27) + u'[23;0t')
echo(goodbye_msg)
getch(1.5)
disconnect('logoff.')
elif inp in (u'n', u'N', term.KEY_DOWN, term.KEY_NPAGE,):
idx = refresh_automsg(idx + 1)
refresh_prompt(prompt_msg)
elif inp in (u'p', u'P', term.KEY_UP, term.KEY_PPAGE,):
idx = refresh_automsg(idx - 1)
refresh_prompt(prompt_msg)
elif inp in (u's', u'S'):
# new prompt: say something !
refresh_prompt(prompt_say)
msg = LineEditor(width=automsg_len).read()
if msg is not None and msg.strip():
echo(u''.join((u'\r\n\r\n', write_msg,)))
autodb = DBProxy('automsg')
autodb.acquire()
idx = max([int(ixx) for ixx in autodb.keys()] or [-1]) + 1
autodb[idx] = (time.time(), handle, msg.strip())
autodb.release()
session.send_event('global', ('automsg', True,))
refresh_automsg(idx)
echo(u''.join((u'\r\n\r\n', commit_msg,)))
getch(0.5) # for effect, LoL
# display prompt
refresh_prompt(prompt_msg)