本文整理汇总了Python中storage.Storage.save方法的典型用法代码示例。如果您正苦于以下问题:Python Storage.save方法的具体用法?Python Storage.save怎么用?Python Storage.save使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类storage.Storage
的用法示例。
在下文中一共展示了Storage.save方法的15个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的Python代码示例。
示例1: FileConsumer
# 需要导入模块: from storage import Storage [as 别名]
# 或者: from storage.Storage import save [as 别名]
class FileConsumer(object):
"""
读取指定目录的文件
"""
def __init__(self):
# zip 文件 path
config = json.load(open(u'../config/config.json'))
self.redisConf = config['redis']
self.data = []
self.lines = []
self.redis = redis.Redis(host='127.0.0.1',port=6379,db=0)
self.storage = Storage(config['db'])
# self.initSelf()
def progress(self):
f = self.redis.rpop('logfile')
if f and zipfile.is_zipfile(f):
self.read_zip_file(f)
if len(self.lines) > 0:
try:
# 分析每行数据
#import pdb; pdb.set_trace()
pubData = json.loads(self.lines.pop(0).decode('utf-8'),encoding="utf-8")
for evt in self.lines:
evt = json.loads(evt.decode('utf-8'),encoding='utf-8')
param = json.dumps(evt['param'],encoding="utf-8", ensure_ascii=False)
_row = (evt['event'],param,str(pubData['uid']),pubData['deviceid'],pubData['devicemodel'],str(pubData['appid']),pubData['appversion'],pubData['os'],pubData['osversion'],time.strftime('%Y-%m-%d %H:%M:%S',time.localtime(int(evt['timestamp']))),pubData['appname'],pubData['appbuildversion'])
self.data.append(_row)
if len(self.data) > 0 :
self.storage.dbConnect()
self.saved()
self.storage.dbClose()
os.remove(f)
except OSError:
pass
def saved(self):
if self.data is None or len(self.data) == 0:
return False
try:
self.storage.save(self.data)
except Exception as e:
print("执行Mysql: 时出错:%s data is:%s" % ( e ,self.data))
def read_zip_file(self,filepath):
zfile = zipfile.ZipFile(filepath)
for finfo in zfile.infolist():
ifile = zfile.open(finfo)
self.lines = ifile.readlines()
# if __name__ == "__main__":
# f = FileConsumer()
# f.progress()
示例2: TestStorage
# 需要导入模块: from storage import Storage [as 别名]
# 或者: from storage.Storage import save [as 别名]
class TestStorage(unittest.TestCase):
def setUp(self):
self.my_storage = Storage()
def testNonexistence(self):
data = self.my_storage.retrieve('not-exist')
self.assertIsNone(data)
def testSetAndGet(self):
data = {
random.getrandbits(128): [random.getrandbits(128)]
}
self.my_storage.save(data)
self.assertEqual(self.my_storage.retrieve(), data)
new_data = {
random.getrandbits(128): [random.getrandbits(128)]
}
self.my_storage.save(new_data)
self.assertEqual(self.my_storage.retrieve(), new_data)
示例3: main
# 需要导入模块: from storage import Storage [as 别名]
# 或者: from storage.Storage import save [as 别名]
def main():
resp = requests.get(
'http://eprint.iacr.org/eprint-bin/search.pl?last=31&title=1',
headers=HTTP_HEADERS
)
if resp.status_code != 200:
msg = 'request failed: ' + str(resp.status_code) \
+ '\n\n' + resp.text
raise Exception(msg)
my_parser = EPrintParser()
curr_list = my_parser.feed(resp.text)
if curr_list is None \
or not isinstance(curr_list, list) \
or len(curr_list) < 20:
# in case the crawled page has problems
return
my_storage = Storage()
prev_list = my_storage.retrieve()
if prev_list is None \
or not isinstance(prev_list, list) \
or len(prev_list) == 0:
my_storage.save(curr_list)
else:
sentry_client.user_context({
'prev_list': prev_list,
'curr_list': curr_list,
})
list_updated = [i for i in curr_list if i not in prev_list]
if len(list_updated):
list_untweeted = tweet(list_updated)
list_to_save = [i for i in curr_list if i not in list_untweeted]
my_storage.save(list_to_save)
示例4: __init__
# 需要导入模块: from storage import Storage [as 别名]
# 或者: from storage.Storage import save [as 别名]
class Menu:
def __init__(self):
reload(sys)
sys.setdefaultencoding("UTF-8")
self.datatype = "main"
self.title = "网易云音乐"
self.datalist = ["排行榜", "艺术家", "新碟上架", "精选歌单", "我的歌单", "DJ节目", "打碟", "收藏", "搜索", "帮助"]
self.offset = 0
self.index = 0
self.storage = Storage()
self.storage.load()
self.collection = self.storage.database["collections"][0]
self.player = Player()
self.ui = Ui()
self.netease = NetEase()
self.screen = curses.initscr()
self.screen.keypad(1)
self.step = 10
self.stack = []
self.djstack = []
self.userid = None
self.username = None
self.resume_play = True
signal.signal(signal.SIGWINCH, self.change_term)
signal.signal(signal.SIGINT, self.send_kill)
self.START = time.time()
def change_term(self, signum, frame):
self.ui.screen.clear()
self.ui.screen.refresh()
def send_kill(self, signum, fram):
self.player.stop()
self.storage.save()
curses.endwin()
sys.exit()
def start(self):
self.START = time.time() // 1
self.ui.build_menu(self.datatype, self.title, self.datalist, self.offset, self.index, self.step, self.START)
self.ui.build_process_bar(
self.player.process_location,
self.player.process_length,
self.player.playing_flag,
self.player.pause_flag,
self.storage.database["player_info"]["playing_mode"],
)
self.stack.append([self.datatype, self.title, self.datalist, self.offset, self.index])
while True:
datatype = self.datatype
title = self.title
datalist = self.datalist
offset = self.offset
idx = index = self.index
step = self.step
stack = self.stack
djstack = self.djstack
self.screen.timeout(500)
key = self.screen.getch()
self.ui.screen.refresh()
# term resize
if key == -1:
self.ui.update_size()
self.player.update_size()
# 退出
if key == ord("q"):
break
# 退出并清除用户信息
if key == ord("w"):
self.storage.database["user"] = {"username": "", "password": ""}
break
# 上移
elif key == ord("k"):
self.index = carousel(offset, min(len(datalist), offset + step) - 1, idx - 1)
self.START = time.time()
# 下移
elif key == ord("j"):
self.index = carousel(offset, min(len(datalist), offset + step) - 1, idx + 1)
self.START = time.time()
# 数字快捷键
elif ord("0") <= key <= ord("9"):
if self.datatype == "songs" or self.datatype == "djchannels" or self.datatype == "help":
continue
idx = key - ord("0")
self.ui.build_menu(self.datatype, self.title, self.datalist, self.offset, idx, self.step, self.START)
self.ui.build_loading()
self.dispatch_enter(idx)
self.index = 0
self.offset = 0
# 向上翻页
elif key == ord("u"):
if offset == 0:
continue
#.........这里部分代码省略.........
示例5: __init__
# 需要导入模块: from storage import Storage [as 别名]
# 或者: from storage.Storage import save [as 别名]
class NetEase:
def __init__(self):
self.header = {
"Accept": "*/*",
"Accept-Encoding": "gzip,deflate,sdch",
"Accept-Language": "zh-CN,zh;q=0.8,gl;q=0.6,zh-TW;q=0.4",
"Connection": "keep-alive",
"Content-Type": "application/x-www-form-urlencoded",
"Host": "music.163.com",
"Referer": "http://music.163.com/search/",
"User-Agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_9_2) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/33.0.1750.152 Safari/537.36",
}
self.cookies = {"appver": "1.5.2"}
self.playlist_class_dict = {}
self.session = requests.Session()
self.storage = Storage()
self.session.cookies = LWPCookieJar(self.storage.cookie_path)
try:
self.session.cookies.load()
self.file = file(self.storage.cookie_path, "r")
cookie = self.file.read()
self.file.close()
pattern = re.compile(r"\d{4}-\d{2}-\d{2}")
str = pattern.findall(cookie)
if str:
if str[0] < time.strftime("%Y-%m-%d", time.localtime(time.time())):
self.storage.database["user"] = {"username": "", "password": "", "user_id": "", "nickname": ""}
self.storage.save()
os.remove(self.storage.cookie_path)
except:
self.session.cookies.save()
def return_toplists(self):
temp = []
for i in range(len(top_list_all)):
temp.append(top_list_all[i][0])
return temp
def httpRequest(self, method, action, query=None, urlencoded=None, callback=None, timeout=None):
connection = json.loads(self.rawHttpRequest(method, action, query, urlencoded, callback, timeout))
return connection
def rawHttpRequest(self, method, action, query=None, urlencoded=None, callback=None, timeout=None):
if method == "GET":
url = action if (query == None) else (action + "?" + query)
connection = self.session.get(url, headers=self.header, timeout=default_timeout)
elif method == "POST":
connection = self.session.post(action, data=query, headers=self.header, timeout=default_timeout)
elif method == "Login_POST":
connection = self.session.post(action, data=query, headers=self.header, timeout=default_timeout)
self.session.cookies.save()
connection.encoding = "UTF-8"
return connection.text
# 登录
def login(self, username, password):
pattern = re.compile(r"^0\d{2,3}\d{7,8}$|^1[34578]\d{9}$")
if pattern.match(username):
return self.phone_login(username, password)
action = "https://music.163.com/weapi/login/"
data = encrypted_login(username, password)
try:
return self.httpRequest("Login_POST", action, data)
except:
return {"code": 501}
# 手机登录
def phone_login(self, username, password):
action = "https://music.163.com/weapi/login/cellphone"
data = encrypted_phonelogin(username, password)
try:
return self.httpRequest("Login_POST", action, data)
except:
return {"code": 501}
# 用户歌单
def user_playlist(self, uid, offset=0, limit=100):
action = (
"http://music.163.com/api/user/playlist/?offset="
+ str(offset)
+ "&limit="
+ str(limit)
+ "&uid="
+ str(uid)
)
try:
data = self.httpRequest("GET", action)
return data["playlist"]
except:
return -1
# 每日推荐歌单
def recommend_playlist(self):
action = "http://music.163.com/discover/recommend/taste"
try:
self.session.cookies.load()
page = self.session.get(action, headers=self.header, timeout=default_timeout)
#.........这里部分代码省略.........
示例6: __init__
# 需要导入模块: from storage import Storage [as 别名]
# 或者: from storage.Storage import save [as 别名]
class Menu:
def __init__(self):
reload(sys)
sys.setdefaultencoding('UTF-8')
self.config = Config()
self.datatype = 'main'
self.title = '网易云音乐'
self.datalist = ['排行榜', '艺术家', '新碟上架', '精选歌单', '我的歌单', 'DJ节目', '每日推荐', '私人FM', '搜索', '帮助']
self.offset = 0
self.index = 0
self.storage = Storage()
self.storage.load()
self.collection = self.storage.database['collections'][0]
self.player = Player()
self.player.playing_song_changed_callback = self.song_changed_callback
self.cache = Cache()
self.ui = Ui()
self.netease = NetEase()
self.screen = curses.initscr()
self.screen.keypad(1)
self.step = 10
self.stack = []
self.djstack = []
self.userid = self.storage.database["user"]["user_id"]
self.username = self.storage.database["user"]["nickname"]
self.resume_play = True
self.at_playing_list = False
signal.signal(signal.SIGWINCH, self.change_term)
signal.signal(signal.SIGINT, self.send_kill)
self.START = time.time()
def change_term(self, signum, frame):
self.ui.screen.clear()
self.ui.screen.refresh()
def send_kill(self, signum, fram):
self.player.stop()
self.cache.quit()
self.storage.save()
curses.endwin()
sys.exit()
def update_alert(self, version):
latest = Menu().check_version()
if latest != version and latest != 0:
if platform.system() == 'Darwin':
os.system('/usr/bin/osascript -e \'display notification "MusicBox Update is available"sound name "/System/Library/Sounds/Ping.aiff"\'')
time.sleep(0.5)
os.system('/usr/bin/osascript -e \'display notification "NetEase-MusicBox installed version:' + version + '\nNetEase-MusicBox latest version:' + latest + '"\'')
else:
os.system('/usr/bin/notify-send "MusicBox Update is available"')
def signin_alert(self, type):
if type == 0:
if platform.system() == 'Darwin':
os.system('/usr/bin/osascript -e \'display notification "Mobile signin success"sound name "/System/Library/Sounds/Ping.aiff"\'')
else:
os.system('/usr/bin/notify-send "Mobile signin success"')
else:
if platform.system() == 'Darwin':
os.system('/usr/bin/osascript -e \'display notification "PC signin success"sound name "/System/Library/Sounds/Ping.aiff"\'')
else:
os.system('/usr/bin/notify-send "PC signin success"')
def check_version(self):
# 检查更新 && 签到
try:
mobilesignin = self.netease.daily_signin(0)
if mobilesignin != -1 and mobilesignin['code'] != -2:
self.signin_alert(0)
time.sleep(0.5)
pcsignin = self.netease.daily_signin(1)
if pcsignin != -1 and pcsignin['code'] != -2:
self.signin_alert(1)
tree = ET.ElementTree(ET.fromstring(str(self.netease.get_version())))
root = tree.getroot()
return root[0][4][0][0].text
except:
return 0
def start_fork(self, version):
pid = os.fork()
if pid == 0:
Menu().update_alert(version)
else:
Menu().start()
def play_pause(self):
if len(self.storage.database["player_info"]["player_list"]) == 0:
return
if self.player.pause_flag:
self.player.resume()
else:
self.player.pause()
time.sleep(0.1)
def next_song(self):
if len(self.storage.database["player_info"]["player_list"]) == 0:
return
self.player.next()
#.........这里部分代码省略.........
示例7: __init__
# 需要导入模块: from storage import Storage [as 别名]
# 或者: from storage.Storage import save [as 别名]
class NetEase:
def __init__(self):
self.header = {
'Accept': '*/*',
'Accept-Encoding': 'gzip,deflate,sdch',
'Accept-Language': 'zh-CN,zh;q=0.8,gl;q=0.6,zh-TW;q=0.4',
'Connection': 'keep-alive',
'Content-Type': 'application/x-www-form-urlencoded',
'Host': 'music.163.com',
'Referer': 'http://music.163.com/search/',
'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_9_2) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/33.0.1750.152 Safari/537.36'
}
self.cookies = {
'appver': '1.5.2'
}
self.playlist_class_dict = {}
self.session = requests.Session()
self.storage = Storage()
self.session.cookies = LWPCookieJar(self.storage.cookie_path)
try:
self.session.cookies.load()
self.file = file(self.storage.cookie_path, 'r')
cookie = self.file.read()
self.file.close()
pattern = re.compile(r'\d{4}-\d{2}-\d{2}')
str = pattern.findall(cookie)
if str:
if str[0] < time.strftime('%Y-%m-%d', time.localtime(time.time())):
self.storage.database['user'] = {
"username": "",
"password": "",
"user_id": "",
"nickname": "",
}
self.storage.save()
os.remove(self.storage.cookie_path)
except:
self.session.cookies.save()
def return_toplists(self):
temp = []
for i in range(len(top_list_all)):
temp.append(top_list_all[i][0])
return temp
def httpRequest(self, method, action, query=None, urlencoded=None, callback=None, timeout=None):
connection = json.loads(self.rawHttpRequest(method, action, query, urlencoded, callback, timeout))
return connection
def rawHttpRequest(self, method, action, query=None, urlencoded=None, callback=None, timeout=None):
if (method == 'GET'):
url = action if (query == None) else (action + '?' + query)
connection = self.session.get(url, headers=self.header, timeout=default_timeout)
elif (method == 'POST'):
connection = self.session.post(
action,
data=query,
headers=self.header,
timeout=default_timeout
)
elif (method == 'Login_POST'):
connection = self.session.post(
action,
data=query,
headers=self.header,
timeout=default_timeout
)
self.session.cookies.save()
connection.encoding = "UTF-8"
return connection.text
# 登录
def login(self, username, password):
pattern = re.compile(r'^0\d{2,3}\d{7,8}$|^1[34578]\d{9}$')
if (pattern.match(username)):
return self.phone_login(username, password)
action = 'https://music.163.com/weapi/login/'
data = encrypted_login(username, password)
try:
return self.httpRequest('Login_POST', action, data)
except:
return {'code': 501}
# 手机登录
def phone_login(self, username, password):
action = 'https://music.163.com/weapi/login/cellphone'
data = encrypted_phonelogin(username, password)
try:
return self.httpRequest('Login_POST', action, data)
except:
return {'code': 501}
# 用户歌单
def user_playlist(self, uid, offset=0, limit=100):
action = 'http://music.163.com/api/user/playlist/?offset=' + str(offset) + '&limit=' + str(
limit) + '&uid=' + str(uid)
try:
#.........这里部分代码省略.........
示例8: __init__
# 需要导入模块: from storage import Storage [as 别名]
# 或者: from storage.Storage import save [as 别名]
class Menu:
def __init__(self):
reload(sys)
sys.setdefaultencoding("UTF-8")
self.config = Config()
self.datatype = "main"
self.title = "网易云音乐"
self.datalist = ["排行榜", "艺术家", "新碟上架", "精选歌单", "我的歌单", "DJ节目", "每日推荐", "私人FM", "搜索", "帮助"]
self.offset = 0
self.index = 0
self.storage = Storage()
self.storage.load()
self.collection = self.storage.database["collections"][0]
self.player = Player()
self.player.playing_song_changed_callback = self.song_changed_callback
self.cache = Cache()
self.ui = Ui()
self.netease = NetEase()
self.screen = curses.initscr()
self.screen.keypad(1)
self.step = 10
self.stack = []
self.djstack = []
self.userid = self.storage.database["user"]["user_id"]
self.username = self.storage.database["user"]["nickname"]
self.resume_play = True
self.at_playing_list = False
signal.signal(signal.SIGWINCH, self.change_term)
signal.signal(signal.SIGINT, self.send_kill)
self.START = time.time()
def change_term(self, signum, frame):
self.ui.screen.clear()
self.ui.screen.refresh()
def send_kill(self, signum, fram):
self.player.stop()
self.cache.quit()
self.storage.save()
curses.endwin()
sys.exit()
def alert(self, version):
latest = Menu().check_version()
if latest != version:
if platform.system() == "Darwin":
os.system(
'/usr/bin/osascript -e \'display notification "MusicBox Update is available"sound name "/System/Library/Sounds/Ping.aiff"\''
)
time.sleep(0.5)
os.system(
"/usr/bin/osascript -e 'display notification \"NetEase-MusicBox installed version:"
+ version
+ "\nNetEase-MusicBox latest version:"
+ latest
+ "\"'"
)
else:
os.system('/usr/bin/notify-send "MusicBox Update is available"')
def check_version(self):
# 检查更新
tree = ET.ElementTree(ET.fromstring(str(self.netease.get_version())))
root = tree.getroot()
return root[0][4][0][0].text
def start_fork(self, version):
# Hong, Fork a child process.
# Return 0 in the child and the child’s process id in the parent.
pid = os.fork()
if pid == 0:
Menu().alert(version)
else:
Menu().start()
def play_pause(self):
if len(self.storage.database["player_info"]["player_list"]) == 0:
return
if self.player.pause_flag:
self.player.resume()
else:
self.player.pause()
time.sleep(0.1)
def next_song(self):
if len(self.storage.database["player_info"]["player_list"]) == 0:
return
self.player.next()
time.sleep(0.1)
def previous_song(self):
if len(self.storage.database["player_info"]["player_list"]) == 0:
return
self.player.prev()
time.sleep(0.1)
def start(self):
# Hong, Return the time in seconds since the epoch as a floating point number.
self.START = time.time() // 1
self.ui.build_menu(self.datatype, self.title, self.datalist, self.offset, self.index, self.step, self.START)
#.........这里部分代码省略.........
示例9: __init__
# 需要导入模块: from storage import Storage [as 别名]
# 或者: from storage.Storage import save [as 别名]
class Consumer:
"""
获取redis的数据,取出后做处理
"""
def __init__(self):
self.config = json.load(open(u'../config/config.json'))
self.redisConf = self.config['redis']
self.queue_key = self.redisConf['queue_key']
# 链接redis
# self.redis = redis.Redis(host=str(self.redisConf['server']),port=int(self.redisConf['port']),db=int(self.redisConf['db']))
self.redis = redis.Redis(host='127.0.0.1',port=6379,db=0)
logging.basicConfig(filename = self.config['error_log'], level = logging.DEBUG)
# self.db = None
self.storage = Storage(self.config['db'])
self.num = 50
self.data = []
def progress(self):
#import pdb; pdb.set_trace()
start = 0
len_events = self.redis.llen('log')
if int(len_events) > 0:
self.data = []
while start < min(len_events,self.num):
_data = self.redis.rpop('log')
self.parseData(_data)
start+=1
if len(self.data) > 0 :
self.storage.dbConnect()
self.saved()
self.storage.dbClose()
else:
return
def parseData(self,dataStr):
"""
分析数据
:return:
"""
from urllib import unquote
test = unquote(dataStr)
dataStr = test
if dataStr is None:
return None
try:
data = json.loads(dataStr.decode('utf-8'),encoding="utf-8")
events = data['events']
if not isinstance(events,list):
events = [events]
for dict in events:
param = json.dumps(dict['param'],encoding="utf-8", ensure_ascii=False)
_row = (dict['event'],param,str(data['uid']),data['deviceid'],data['devicemodel'],str(data['appid']),data['appversion'],data['os'],data['osversion'],time.strftime('%Y-%m-%d %H:%M:%S',time.localtime(int(dict['timestamp']))),data['appname'],data['appbuildversion'])
#_row = (str(data['event']),param,str(data['uid']),data['deviceid'],data['deviceModel'])
self.data.append(_row)
except Exception as e:
logging.error("convert data to json object error! --data is :" + dataStr + "; \nerror is " + str(e) + ";\n===============================================================\n")
return None
# finally:
def saved(self):
"""
:return : bool
"""
#连接数据库
if self.data is None or len(self.data) == 0:
return False
if isinstance(self.data,type({})):
self.singleSave()
print("执行Mysql: 时出错:%s data is:%s" % ( e ,self.data))
elif isinstance(self.data,(tuple, list)):
"""
批量更新数据
"""
self.mutilSave()
def singleSave(self,row):
"""
保存数据到数据库中
:param data:
:return:
"""
if row is None or row =='':
return
print (row)
def mutilSave(self):
"""
批量插入数据
:param data:
:return:
"""
# cursor = self.db.cursor()
try:
self.storage.save(self.data)
#.........这里部分代码省略.........
示例10: __init__
# 需要导入模块: from storage import Storage [as 别名]
# 或者: from storage.Storage import save [as 别名]
class Menu:
def __init__(self):
reload(sys)
sys.setdefaultencoding('UTF-8')
self.datatype = 'main'
self.title = '网易云音乐'
self.datalist = ['排行榜', '艺术家', '新碟上架', '精选歌单', '我的歌单', 'DJ节目', '打碟', '收藏', '搜索', '帮助']
self.offset = 0
self.index = 0
self.storage = Storage()
self.storage.load()
self.collection = self.storage.database['collections'][0]
self.player = Player()
self.cache = Cache()
self.ui = Ui()
self.netease = NetEase()
self.screen = curses.initscr()
self.screen.keypad(1)
self.step = 10
self.stack = []
self.djstack = []
self.userid = None
self.username = None
self.resume_play = True
signal.signal(signal.SIGWINCH, self.change_term)
signal.signal(signal.SIGINT, self.send_kill)
self.START = time.time()
def change_term(self, signum, frame):
self.ui.screen.clear()
self.ui.screen.refresh()
def send_kill(self, signum, fram):
self.player.stop()
self.cache.quit()
self.storage.save()
curses.endwin()
sys.exit()
def start(self):
self.START = time.time() // 1
self.ui.build_menu(self.datatype, self.title, self.datalist, self.offset, self.index, self.step, self.START)
self.ui.build_process_bar(self.player.process_location, self.player.process_length, self.player.playing_flag,
self.player.pause_flag, self.storage.database['player_info']['playing_mode'])
self.stack.append([self.datatype, self.title, self.datalist, self.offset, self.index])
while True:
datatype = self.datatype
title = self.title
datalist = self.datalist
offset = self.offset
idx = index = self.index
step = self.step
stack = self.stack
djstack = self.djstack
self.screen.timeout(500)
key = self.screen.getch()
self.ui.screen.refresh()
# term resize
if key == -1:
self.ui.update_size()
self.player.update_size()
# 退出
if key == ord('q'):
break
# 退出并清除用户信息
if key == ord('w'):
self.storage.database['user'] = {
"username": "",
"password": "",
}
break
# 上移
elif key == ord('k'):
self.index = carousel(offset, min(len(datalist), offset + step) - 1, idx - 1)
self.START = time.time()
# 下移
elif key == ord('j'):
self.index = carousel(offset, min(len(datalist), offset + step) - 1, idx + 1)
self.START = time.time()
# 数字快捷键
elif ord('0') <= key <= ord('9'):
if self.datatype == 'songs' or self.datatype == 'djchannels' or self.datatype == 'help':
continue
idx = key - ord('0')
self.ui.build_menu(self.datatype, self.title, self.datalist, self.offset, idx, self.step, self.START)
self.ui.build_loading()
self.dispatch_enter(idx)
self.index = 0
self.offset = 0
# 向上翻页
elif key == ord('u'):
if offset == 0:
continue
#.........这里部分代码省略.........
示例11: Mainloop
# 需要导入模块: from storage import Storage [as 别名]
# 或者: from storage.Storage import save [as 别名]
class Mainloop(threading.Thread):
def __init__(self, parent):
threading.Thread.__init__(self)
self.parent = parent
self.network = Network()
self.storage = Storage()
self.controlFrame = Frame(parent)
self.controlFrame.grid(row=0, column=0, columnspan=99, padx=10, pady=10, sticky=NW)
self.recordingName = Textbox(self.controlFrame, 'Name of recording: ')
self.recordingName.grid(row=0, column=0, sticky=NW, padx=10)
self.buttonsFrame = Frame(self.controlFrame)
self.buttonsFrame.grid(row=1, column=0, sticky=NW, pady=10)
self.recordButton = Toggle(self.buttonsFrame, 'Record', lambda: self.record('on'), lambda: self.record('off'))
self.TCPOverride = Toggle(self.buttonsFrame, 'Enable TCP', lambda: self.tcp('on'), lambda: self.tcp('off'))
self.recordButton.grid(row=0, column=0, sticky=NW, padx=10)
self.TCPOverride.grid(row=0, column=1, sticky=NW, padx=10)
self.camerasFrame = Frame(parent)
self.camerasFrame.grid(row=1, column=0, padx=10, pady=10, sticky=NW)
self.gpMaster = GoProMaster(self.camerasFrame, self.network)
self.TCPServer = tcp.TCP()
self.localUDP = udp.UDP()
self.shouldExit = False
self.load()
def run(self):
self.localUDP.open('127.0.0.1', 6000, 7000, timeout=0)
timer = 0
while not self.shouldExit:
self.save()
self.addMountedCameras()
self.sendAliveMessage()
if self.TCPServer.isActive():
self.processMessage(self.TCPServer.get())
if timer % 20 == 0:
for ssid in self.network.getSSIDList():
if self.network.isGoPro(ssid):
self.addCamera(ssid)
time.sleep(0.1)
timer += 1
def addCamera(self, ssid):
if not self.gpMaster.exists(ssid):
self.gpMaster.addSlave(ssid)
def record(self, state):
self.gpMaster.record(state, self.recordingName.getText())
def tcp(self, state):
if state == 'on':
self.recordButton.disable()
self.TCPServer = tcp.TCP()
self.TCPServer.listen(config.getTCPInfo()[0], int(config.getTCPInfo()[1]), timeout=0.01)
elif state == 'off':
self.recordButton.enable()
self.TCPServer.close()
def processMessage(self, message):
if not message:
return
message = message.lower()
if message == 'record on':
self.TCPServer.put('Starts recording')
self.record('on')
self.recordButton.setState(True)
elif message == 'record off':
self.TCPServer.put('Stops recording')
self.record('off')
self.recordButton.setState(False)
elif message[0:7] == 'recname':
self.TCPServer.put('Recording name set to: ' + message[8:])
self.recordingName.setText(message[8:])
def exit(self):
self.shouldExit = True
self.localUDP.close()
self.TCPServer.close()
self.gpMaster.exit()
def save(self):
toSave = self.recordingName.getText() + ',' + str(self.recordButton.getState())
self.storage.save('main', toSave)
def load(self):
loaded = self.storage.load('main')
if not loaded:
return
loaded = loaded.split(',')
self.recordingName.setText(loaded[0])
#.........这里部分代码省略.........
示例12: Menu
# 需要导入模块: from storage import Storage [as 别名]
# 或者: from storage.Storage import save [as 别名]
class Menu(object):
def __init__(self):
reload(sys)
sys.setdefaultencoding('UTF-8')
self.config = Config()
self.datatype = 'main'
self.title = 'NetEase Music'
self.datalist = ['Charts', 'Artists', 'New Songs', 'Songs', 'My Songs', 'Radio Stations', 'Recommended',
'Personal Radio', 'Search', 'Help']
self.offset = 0
self.index = 0
self.storage = Storage()
self.storage.load()
self.collection = self.storage.database['collections'][0]
self.player = Player()
self.player.playing_song_changed_callback = self.song_changed_callback
self.cache = Cache()
self.ui = Ui()
self.netease = NetEase()
self.screen = curses.initscr()
self.screen.keypad(1)
self.step = 10
self.stack = []
self.djstack = []
self.userid = self.storage.database['user']['user_id']
self.username = self.storage.database['user']['nickname']
self.resume_play = True
self.at_playing_list = False
signal.signal(signal.SIGWINCH, self.change_term)
signal.signal(signal.SIGINT, self.send_kill)
self.START = time.time()
def change_term(self, signum, frame):
self.ui.screen.clear()
self.ui.screen.refresh()
def send_kill(self, signum, fram):
self.player.stop()
self.cache.quit()
self.storage.save()
curses.endwin()
sys.exit()
def update_alert(self, version):
latest = Menu().check_version()
if latest != version and latest != 0:
notify('MusicBox Update is available', 1)
time.sleep(0.5)
notify('NetEase-MusicBox installed version:' + version +
'\nNetEase-MusicBox latest version:' + latest, 0)
def check_version(self):
# 检查更新 && 签到
try:
mobilesignin = self.netease.daily_signin(0)
if mobilesignin != -1 and mobilesignin['code'] != -2:
notify('Mobile signin success', 1)
time.sleep(0.5)
pcsignin = self.netease.daily_signin(1)
if pcsignin != -1 and pcsignin['code'] != -2:
notify('PC signin success', 1)
tree = ET.ElementTree(ET.fromstring(str(self.netease.get_version(
))))
root = tree.getroot()
return root[0][4][0][0].text
except TypeError as e:
log.error(e)
return 0
def start_fork(self, version):
pid = os.fork()
if pid == 0:
Menu().update_alert(version)
else:
Menu().start()
def _is_playlist_empty(self):
return len(self.storage.database['player_info']['player_list']) == 0
def play_pause(self):
if self._is_playlist_empty():
return
if self.player.pause_flag:
self.player.resume()
else:
self.player.pause()
time.sleep(0.1)
def next_song(self):
if self._is_playlist_empty():
return
self.player.next()
time.sleep(0.5)
def previous_song(self):
if self._is_playlist_empty():
return
self.player.prev()
time.sleep(0.5)
#.........这里部分代码省略.........
示例13: __init__
# 需要导入模块: from storage import Storage [as 别名]
# 或者: from storage.Storage import save [as 别名]
class KeePassHttpServer:
def __init__(self, db_path, password):
self.id = 'KeePassHttpX'
self.host = 'localhost'
self.port = 19455
self.db_path = db_path
self.password = password
self.storage = Storage()
def activate(self):
server_sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
server_sock.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
server_sock.bind((self.host, self.port))
while True:
#print '-- begin while ------'
server_sock.listen(3)
#print 'Waiting for connections...'
client_sock, client_address = server_sock.accept()
receive_message = client_sock.recv(4096)
if receive_message.rstrip() == "":
sys.exit()
response = self.handle_request(receive_message)
client_sock.sendall(response)
client_sock.close()
server_sock.close()
def create_response(self, body):
data = []
data.append('HTTP/1.1 200 OK')
data.append('Date: ' + time.strftime("%a, %d %b %Y %H:%M:%S", time.localtime()))
data.append('Server: python-keypass-http')
data.append('Connection: close')
data.append('Content-Type: application/json; charset=utf-8')
data.append('')
data.append(body)
data.append('')
response = "\n".join(data)
return response
def handle_request(self, request):
#print '-- start handle_request ------'
#print request
#print '-- close handle_request ------'
header, body = request.split('\r\n\r\n')
response = json.loads(body)
if response['RequestType'] == 'associate':
response['Id'] = 'KeePassHttpX'
response['Success'] = False
key = base64.b64decode(response['Key'])
iv = base64.b64decode(response['Nonce'])
verifier = base64.b64decode(response['Verifier'])
kpc = keepass_crypt.KeePassCrypt(key, iv)
if base64.b64encode(iv) == kpc.decrypt(verifier):
response['Success'] = True
self.storage.save('body', body);
elif response['RequestType'] == 'test-associate':
response = self.test_associate(response)
elif response['RequestType'] == 'get-logins':
response = self.get_logins(response)
else:
print '-- start unknown request type response ------'
print response
http_response = self.create_response(json.dumps(response))
return http_response
def test_associate(self, response):
response['Id'] = self.id
response['Success'] = False
storage_data = self.storage.load('body')
if storage_data is None:
return response
keyfile = json.loads(storage_data)
key = base64.b64decode(keyfile['Key']);
iv = base64.b64decode(keyfile['Nonce'])
verifier = base64.b64decode(keyfile['Verifier'])
kpc = keepass_crypt.KeePassCrypt(key, iv)
#.........这里部分代码省略.........
示例14: Main
# 需要导入模块: from storage import Storage [as 别名]
# 或者: from storage.Storage import save [as 别名]
class Main(Frame):
"""
Main class of the system.
"""
def __init__(self, master=None):
"""
Main contstructor. Creates an instance of :class:`Storage<storage.Storage>` and starts the graphics-window.
"""
args = {
"fields": ["name", "date", "lifetime"],
"ident": "name",
"uniqueident": True,
"objectname": "person",
"gui": self,
}
self.storage = Storage(**args)
self.is_clicked = False
self.clicked_id = -1
Frame.__init__(self, master)
self.master.title("Medlemsregister Cybernetisk Selskab")
self.grid(padx=15, pady=15)
if not self.storage._testfile():
path = os.path.abspath(__file__).rsplit("/", 1)[0]
self._popup(
"ERROR!",
'Cannot write to file! make sure folder "{}/medlemslister" exists, then restart..'.format(path),
"error",
)
self.destroy()
self.master.destroy()
return
self.create_elements()
loadmsg = self.storage.load()
if "error" in loadmsg:
self.infotext.set("ERROR! {}".format(loadmsg["error"]))
elif "success" in loadmsg:
self.infotext.set("Success! {}".format(loadmsg["success"]))
self._populate_list()
def create_elements(self):
"""
creates all graphics elements and places them in the graphics grid.
"""
# global shortcuts
self.master.bind("<F1>", self.display_help)
self.master.bind("<Control-f>", self.search)
self.master.bind("<Control-d>", self.delete)
self.master.bind("<Control-r>", self._populate_list)
self.master.bind("<Control-s>", self.save_to_file)
monospace = tkFont.Font(family="Courier", size=10, weight="normal")
# menubar:
menubar = Menu(self.master)
backupmenu = Menu(menubar, tearoff=0)
backupmenu.add_command(label="Backup to Google (Note: Slow!)", command=self.google_write)
backupmenu.add_command(label="Read backup from Google", command=self.google_read)
backupmenu.add_separator()
backupmenu.add_command(label="Merge with Wiki", command=self.wiki_merge)
backupmenu.add_command(label="Overwrite Wiki with local storage", command=self.wiki_overwrite)
specialmenu = Menu(menubar, tearoff=0)
specialmenu.add_command(label="Set as lifetime member", command=self.set_lifetime)
specialmenu.add_command(label="Remove lifetime membership", command=self.unset_lifetime)
specialmenu.add_command(label="Change a users id", command=self.update_id)
menubar.add_cascade(label="Backup", menu=backupmenu)
menubar.add_cascade(label="Special Actions", menu=specialmenu)
menubar.add_command(label="Help (F1)", command=self.display_help)
self.master.config(menu=menubar)
# Info-label
self.infotext = StringVar()
self.info = Label(self, textvariable=self.infotext)
self.info.pack()
self.info.grid(row=0, column=0, columnspan=10)
self.infotext.set("Welcome")
# Save-button
self.savebtn = Button(self, text="Save (enter)", command=self.create, width=11)
self.savebtn.grid(row=3, column=7)
# Omnibar (entry-field for add/search/delete)
self.omnibar = Entry(self, width=28)
self.omnibar.grid(row=3, column=0, columnspan=1)
self.omnibar.bind("<Return>", self.create)
self.omnibar.configure(font=monospace)
# List of members
self.memlist = SL(self, height=25, width=71, callback=self._click_list)
self.memlist.grid(row=7, column=0, columnspan=10)
self.memlist.listbox.configure(font=monospace)
#.........这里部分代码省略.........
示例15: GoPro
# 需要导入模块: from storage import Storage [as 别名]
# 或者: from storage.Storage import save [as 别名]
class GoPro(threading.Thread):
def __init__(self, parent, goproinfo, network):
threading.Thread.__init__(self)
self.info = goproinfo
self.camera = GoProHero(password=self.info.getPassword(), log_level=logging.CRITICAL)
self.storage = Storage()
self.status = goprostatus.GoProStatus()
self.files = goprofiles.GoProFiles()
self.recordings = goprorecordings.GoProRecordings()
self.gui = GoProGUI(parent, self.info.getSSID(), lambda: self.addObjective('snap'), lambda: self.addObjective('transfer'), self.status.clearObjectives)
self.network = network
self.exitVar = False
self.load()
self.files.unmount(self.info.getUSBid(), self.info.getUSBserial(), self.info.getModel())
print self.info.getSSID() + ': Initialized'
def addObjective(self, objective):
self.status.addObjective(objective)
def run(self):
actions = {
'record': self.record,
'snap': self.snap,
'transfer': self.transfer
}
actionThread = threading.Thread()
while not self.exitVar:
self.save()
self.files.mount(self.info.getUSBid(), self.info.getUSBserial(), self.info.getModel())
self.status.setName(self.gui.getName())
self.gui.setUnsaved(self.recordings.isEmpty())
self.gui.setMounted(self.files.isMounted())
self.gui.setRecording(self.status.isRecording())
self.gui.displayObjectives(self.status.getObjectives())
action, args = self.status.decodeObjective()
if action in actions and not actionThread.isAlive():
actionThread = threading.Thread(target=actions[action], args=(args,))
actionThread.start()
time.sleep(0.1)
def record(self, args):
if args[0] == 'on' and self.status.isRecording() == False and self.gui.shouldRecord():
if not self.command(['mode video', 'record on']):
self.status.completeObjective()
return
self.status.isRecording(True)
self.recordings.stage(' '.join(args[1:]), self.status.getName())
elif args[0] == 'off' and self.status.isRecording() == True:
time.sleep(1)
if not self.command(['record off']):
self.status.completeObjective()
return
self.status.isRecording(False)
self.recordings.commit()
self.status.completeObjective()
def transfer(self, args):
if self.files.isMounted() and not self.recordings.isEmpty():
patterns = self.files.findMatchingFiles(self.recordings.getRecordings())
correctPattern = self.gui.confirmPattern(self.recordings.getRecordings(), patterns)
self.files.trackAllExcept(correctPattern)
self.save()
successfulIndices = self.files.copy(self.recordings.getRecordings(), correctPattern)
self.files.trackAll()
self.save()
for i in reversed(successfulIndices):
self.recordings.delete(i)
self.status.completeObjective()
def snap(self, args):
try:
self.connect()
_, image = self.camera.image().split(',')
if not os.path.isdir('tmp'):
os.mkdir('tmp')
file = open('tmp/image.png', 'wb')
file.write(image.decode('base64'))
file.close()
os.system('eog tmp/image.png &')
except:
pass
finally:
self.disconnect()
self.status.completeObjective()
def connect(self):
self.network.connect(self.info.getSSID(), self.info.getPassword())
def disconnect(self):
self.network.disconnect()
def testConnection(self):
self.connect()
self.disconnect()
#.........这里部分代码省略.........