def __init__(self, parent, size, userId): wx.Frame.__init__(self, parent, id=wx.ID_ANY, title=wx.EmptyString, pos=wx.DefaultPosition, size=wx.Size(500, 300), style=wx.DEFAULT_FRAME_STYLE & ~(wx.RESIZE_BORDER | wx.MAXIMIZE_BOX)) self.SetSizeHints(wx.DefaultSize, wx.DefaultSize) bSizer1 = wx.BoxSizer(wx.VERTICAL) self.watch_button = wx.Button(self, wx.ID_ANY, u"일기보기", wx.DefaultPosition, wx.DefaultSize, 0) bSizer1.Add(self.watch_button, 1, wx.ALL | wx.EXPAND, 5) self.write_button = wx.Button(self, wx.ID_ANY, u"일기쓰기", wx.DefaultPosition, wx.DefaultSize, 0) bSizer1.Add(self.write_button, 1, wx.ALL | wx.EXPAND, 5) self.SetSizer(bSizer1) self.Layout() self.Centre(wx.BOTH) # Connect Events self.Bind(wx.EVT_CLOSE, self.onClose) self.watch_button.Bind(wx.EVT_BUTTON, self.watchButtonClicked) self.write_button.Bind(wx.EVT_BUTTON, self.writeButtonClicked) self.DbManager = DbManager() self.userId = userId
def archive_chain(): db_manager = DbManager("chains.db") chain = db_manager.get_chain() fb_actions = [] entered_users = [] user_locations = {} admins = [] for block in chain: for action in block['actions']: if action['name'] == "Enter": entered_users.append(action['id']) user_locations[action['id']] = action['location_id'] elif action['name'] == "Exit": entered_users.remove(action['id']) del user_locations[action['id']] elif action['name'] == "CreateUser": fb_actions.append(action) elif action['name'] == "CreateLocation": fb_actions.append(action) elif action['name'] == "UpgradeUser": admins.append(action['id']) elif action['name'] == "DowngradeUser": admins.remove(action['id']) for admin_id in admins: fb_actions.append({'name': 'UpgradeUser', 'id': admin_id}) for user_id in entered_users: fb_actions.append({'name': 'Enter', 'id': user_id, 'location_id': user_locations[user_id]}) fb = {'prev_hash': '', 'actions': fb_actions, 'created_at': datetime.now()} fb['hash'] = get_hash(fb) db_manager.archive_current_chain(fb)
def svm_local(isDecision=False, n_predict=0, n_neighbors=5000, isSgd=True): start = time.time() db_manager = DbManager() db_manager.connect('../db/annotated.db') print("Start converting train points") train_points_tmp = train_points.tolist() train_classes_tmp = train_classes.tolist() print("Conversion finished in time {0}s".format(time.time()-start)) predict_classes = [] for point_id, point_vector in enumerate(test_points): if point_id >= 100: break if point_id % 10 == 0: print("Start query test point {0}".format(point_id)) neighbors = [int(x) for x in db_manager.query_knn('../db/annotated.db', point_id, n_neighbors=n_neighbors)[0].split()] neighbor_points = [train_points_tmp[neighbor_id] for neighbor_id in neighbors] neighbor_classes = [train_classes_tmp[neighbor_id] for neighbor_id in neighbors] svmManager = SvmManager(None, verbose=verbose, isSgd=isSgd) svmManager.fit(np.array(neighbor_points), np.array(neighbor_classes), store=False) if not isDecision: predict_classes.append(svmManager.predict([point_vector])[0]) #only one class result else: predict_classes.append(svmManager.decision_function([point_vector], n_predict)[0] ) end = time.time() logging.info("testing local svm finished in {0}s with {1}".format(end - start, model_file)) return predict_classes
def benchmark_knn(): db_manager = DbManager() db_manager.connect() train_classes_tmp = train_classes.tolist() class_count_dict = {} for point_id, point_vector in enumerate(test_points): # test_folder = test_names[point_id][0].split('_')[0] test_class = test_classes[point_id] # if test_folder not in good_folders: # continue if point_id >= 1000: break if point_id % 10 == 0: print("Start query test point {0}".format(point_id)) neighbors = [int(x) for x in db_manager.query_knn(point_id, n_neighbors=n_neighbors)[0].split()] neighbor_classes = [train_classes_tmp[neighbor_id] for neighbor_id in neighbors] correct_classes = neighbor_classes.count(test_class) print( "{0} {1}".format( correct_classes, float(correct_classes)/len(neighbor_classes))) if test_class not in class_count_dict: class_count_dict[test_class] = [0,0]; else: class_count_dict[test_class][0] += correct_classes class_count_dict[test_class][1] += len(neighbor_classes) #200, 1000, 5000 print(class_count_dict)
def main(): print("Downloading all blogs without comments...") start = time.time() results = [] for i in range(0, 100): results.append(Result()) j = 0 for i in range(1, 1300, 13): process.crawl(Parser.Salon24Spider(), input=1 + (i), amount=13, result=results[j]) #edited j += 1 process.start() print("Took: ", time.time() - start, "sec") print("Downloading all comments...") start = time.time() data = [[], [], [], [], []] for i in range(0, 100, 5): data[0].extend(results[i].data) data[1].extend(results[i + 1].data) data[2].extend(results[i + 2].data) data[3].extend(results[i + 3].data) data[4].extend(results[i + 4].data) threads = [] for i in range(0, 5): t = threading.Thread(target=DM.parseComments, args=(data[i], )) threads.append(t) t.start() for t in threads: t.join() print("Took: ", time.time() - start, "sec") print("Inserting to Database...") start = time.time() print("Connecting to Database...") client = MongoClient('localhost:27017') db = client.Salon24 dbManager = DbManager(db) print("Connected successfully.") for result in data: for blog in result: dbManager.insert_entry(blog) print("Took: ", time.time() - start, "sec")
def __init__(self, parent, size): wx.Frame.__init__(self, parent, id=wx.ID_ANY, title=wx.EmptyString, pos=wx.DefaultPosition, size=wx.Size(300, 300), style=wx.DEFAULT_FRAME_STYLE & ~(wx.RESIZE_BORDER | wx.MAXIMIZE_BOX)) self.SetSizeHints(wx.DefaultSize, wx.DefaultSize) bSizer2 = wx.BoxSizer(wx.VERTICAL) self.go_back_button = wx.Button(self, wx.ID_ANY, u"뒤로가기", wx.DefaultPosition, wx.DefaultSize, 0) bSizer2.Add(self.go_back_button, 0, wx.ALL, 5) self.m_panel7 = wx.Panel(self, wx.ID_ANY, wx.DefaultPosition, wx.DefaultSize, 0) bSizer19 = wx.BoxSizer(wx.VERTICAL) self.id_input_box = wx.TextCtrl(self.m_panel7, wx.ID_ANY, wx.EmptyString, wx.DefaultPosition, wx.DefaultSize, 0) bSizer19.Add(self.id_input_box, 0, wx.ALL, 5) self.pw_input_box = wx.TextCtrl(self.m_panel7, wx.ID_ANY, wx.EmptyString, wx.DefaultPosition, wx.DefaultSize, wx.TE_PASSWORD | wx.TE_PROCESS_ENTER) bSizer19.Add(self.pw_input_box, 0, wx.ALL, 5) self.m_panel7.SetSizer(bSizer19) self.m_panel7.Layout() bSizer19.Fit(self.m_panel7) bSizer2.Add(self.m_panel7, 0, wx.ALL | wx.ALIGN_CENTER_HORIZONTAL, 5) self.login_button = wx.Button(self, wx.ID_ANY, u"로그인", wx.DefaultPosition, wx.DefaultSize, 0) bSizer2.Add(self.login_button, 0, wx.ALL | wx.ALIGN_CENTER_HORIZONTAL, 5) self.SetSizer(bSizer2) self.Layout() self.Centre(wx.BOTH) # Connect Events self.Bind(wx.EVT_CLOSE, self.onClose) self.go_back_button.Bind(wx.EVT_BUTTON, self.goBackButtonClicked) self.pw_input_box.Bind(wx.EVT_TEXT_ENTER, self.pwInputFinished) self.login_button.Bind(wx.EVT_BUTTON, self.loginButtonClicked) self.DbManager = DbManager() self.accountManager = AccountManager()
def getUserUniversityId(self, user_id): userInfo = DbManager.getTgUserInfo(user_id) if not userInfo: alert = f'UserController.getUserUniversityId failed: user {user_id} info empty' LogController().alert(alert) AlertManager().notify(alert, AlertManager.WARNING_LEVEL) return self.DEFAULT_UNIVERSITY_ID return userInfo['university_id']
class AccountManager: def __init__(self): self.DbManager = DbManager() def makeHash(self, inputText): inputText = inputText.encode() hashObject = hashlib.sha256() hashObject.update(inputText) hexDig = hashObject.hexdigest() return hexDig def logIn(self, id, pw): hexDig = self.makeHash(pw) userPw = self.DbManager.readUserPw(id) if userPw == (hexDig, ): #userPw가 튜플임. return True else: return False def registerUser(self, id, pw, sQuestionNum, answer): pw = self.makeHash(pw) answer = self.makeHash(answer) self.DbManager.saveUserInfo(id=id, pw=pw, sQuestionNum=sQuestionNum, answer=answer) return True def deleteId(self, id): self.DbManager.deleteUserInfo(id) def findId(self, sQuestionNum, answer): answer = self.makeHash(answer) id = self.DbManager.readUserIdByQA(sQuestionNum, answer) if len(id) == 1: id = id[0] else: return -1 return id def resetPw(self, id): newPw = 'aXeYCQV' newPw = newPw.encode() hashObject = hashlib.sha256() hashObject.update(newPw) hexDig = hashObject.hexdigest() newPw = hexDig self.DbManager.updatePw(id, newPw)
def getUserGroupId(self, user_id): userInfo = DbManager.getTgUserInfo(user_id) if not userInfo: alert = f'UserController.getUserGroupId failed: user {user_id} info empty' LogController().alert(alert) AlertManager().notify(alert, AlertManager.WARNING_LEVEL) return self.DEFAULT_GROUP_ID return userInfo['group_id']
def __init__(self, url_argv): sys.setrecursionlimit(10000000) """ 调度数据库接口, 引入初始化, 调度器, 爬取器, 分析器 """ self.db = DbManager.DbManager(db_config).mysql_connect() self.config = spider_config.spider_config() self.initialization = Initialization.Initialization( self.db, self.config, url_argv) self.manager = UrlManager.UrlManager(self.db, self.config) self.craw = UrlCraw.UrlCraw(self.db, self.config) self.analyse = UrlAnalyse.UrlAnalyse(self.db, self.config) self.sprint = SpiderPrint.SpiderPrint() self.initialize_spider()
def archive_chain(): db_manager = DbManager("chains.db") chain = db_manager.get_chain() fb_actions = [] entered_users = [] user_locations = {} admins = [] for block in chain: for action in block['actions']: if action['name'] == "Enter": entered_users.append(action['id']) user_locations[action['id']] = action['location_id'] elif action['name'] == "Exit": entered_users.remove(action['id']) del user_locations[action['id']] elif action['name'] == "CreateUser": fb_actions.append(action) elif action['name'] == "CreateLocation": fb_actions.append(action) elif action['name'] == "UpgradeUser": admins.append(action['id']) elif action['name'] == "DowngradeUser": admins.remove(action['id']) for admin_id in admins: fb_actions.append({'name': 'UpgradeUser', 'id': admin_id}) for user_id in entered_users: fb_actions.append({ 'name': 'Enter', 'id': user_id, 'location_id': user_locations[user_id] }) fb = {'prev_hash': '', 'actions': fb_actions, 'created_at': datetime.now()} fb['hash'] = get_hash(fb) db_manager.archive_current_chain(fb)
def createGroundTruth(): ''' Download tracks stored in mongo db collection and download in the right directory (of genre) :return: ''' list_tracks = DbManager.getCollectionMusic().find() list_tracks = list_tracks[utils.loadVersionOnCache():] for track_data in list_tracks: try: track = Track(track_data) if len(track.primary_genres) == 0: print("\n[!] {0}-{1} hasn't primary genre".format( track.artist_name, track.track_name)) else: isValidTrackName = "".join( e for e in track.track_name.encode('utf8') if e.isalnum()).isalnum() # If track contains genres if (len(track.primary_genres) > 0 and isValidTrackName): # Download tracks track_title = MusicManager.downloadTrack( track.track_name.encode('utf8'), track.artist_name.encode('utf8')) # split audio file, export to wav track_path = utils.get_pathfile_for_name_in_current_dir( __projectPath, track_title, "mp3") MusicManager.splitAudiofileWithName( "{0}".format(track_path), track_title, "mp3") MusicManager.toWav(track_title) assert os.path.exists(track_path) # if it has more genres, move to each genre dir for primary_genre in track.primary_genres: MusicManager.moveTrackToGenreFolder( track_path, primary_genre.localName) # Remove audio file in root dir utils.remove_audio_files_on_current_dir() utils.incrementVersionOnCache() # Reset Cache for retry download __cacheDatasetCreate.clear() except Exception as ex: print("EXCEPTION", ex) if (track.track_name not in __cacheDatasetCreate): __cacheDatasetCreate[track.track_name] = True print("RETRY another time.... ") createGroundTruth() else: print("SKIPPING Track {0}".format(track.track_name))
class CamelSchema: MYSQL_SCHEMA_VERSION = "SELECT camel_get_schema_version()" MYSQL_UPDATE_SCHEMA_VERSION = "SELECT camel_update_version(%(current)01d, %(new)01d)" db = None camelUtils = None def __init__(self): self.db = DbManager() self.db.mysqlConnect() self.camelUtils = CamelUtils() def executeChangesets(self, directory): # execute changesets queryCounter = 0; for change in self.camelUtils.getChangesets(directory): if change[1]["closed"] is False: print " ----Open change: %s" % change[0] dbSchemaVersion = self.getSchemaVersion() if dbSchemaVersion == change[1]["version"]: queryCounter += 1 for sql in change[1]["sql"]: self.executeQuery(sql[0]) self.camelUtils.replace(change[0], "\"closed\" : false", "\"closed\" : true") else: print " -----Incorrect db version." print " -----Databse schema version is: %d" % dbSchemaVersion + ", version in file is : %d" % change[1]["version"] if queryCounter != 0: print " ----Query executions complete :)" print " ----Executed queries: %d" % queryCounter def updateSchema(self, newSchema): currentSchema = self.getSchemaVersion() if currentSchema >= newSchema: print " ----Current schema is: %(current)01d ,new: %(new)01d" % {"current": currentSchema, "new": newSchema} print " -----Downgrade schema is not available!" else: print " ---UPDATE SCHEMA: FROM %(current)01d to %(new)01d" % {"current": currentSchema, "new": newSchema} self.executeQuery(CamelSchema.MYSQL_UPDATE_SCHEMA_VERSION % {"current": currentSchema, "new": newSchema}) def executeQuery(self, query): self.db.mysqlExecute(query) def executeQueryAndReturnObject(self, query): return self.db.mysqlExecuteAndReturnObject(query)[0] def getSchemaVersion(self): result = self.executeQueryAndReturnObject(self.MYSQL_SCHEMA_VERSION)[0] return result def disconnect(self): self.db.mysqlDisconnect()
def __init__(self): token = "1699009884:AAHjE7wUGrSQgLUlIWgzucaV91dVJSDZhVs" message_queue = MessageQueue(all_burst_limit=29, all_time_limit_ms=1017) request = Request(con_pool_size=8) bot = MessageQueueBot(token, request=request, message_queue=message_queue) self._updater = Updater(bot=bot) self._dispatcher = self._updater.dispatcher self._db_manager = DbManager() self._localizer = Localizer(self._db_manager) self._health_checker = HealthChecker(self._updater.bot, self._db_manager) self._health_check_interval = int( os.environ.get('HEALTH_CHECK_INTERVAL')) self.__setup_command_handlers() self.__setup_callback_query_handlers() self.__setup_message_handlers() self.__setup_error_handler()
def getGroupKeyboardMarkup(universityId) -> ReplyKeyboardMarkup: """ @deprecated Currently deprecated. @param universityId Id for universities. @return Telegram keyboard markup. """ markup = ReplyKeyboardMarkup(resize_keyboard=True) groups = DbManager.getGroupsByUniversityId(universityId) for group in groups: markup.row(group[1]) return markup
def getUniversityKeyboardMarkup() -> ReplyKeyboardMarkup: markup = ReplyKeyboardMarkup(resize_keyboard=True, one_time_keyboard=True) universities = DbManager.getUniversities() if not universities: LogController().alert( "getUniversityKeyboardMarkup failed: universities empty") AlertManager().notify( "getUniversityKeyboardMarkup failed: universities empty", AlertManager.WARNING_LEVEL) universities = [['Default']] for university in universities: markup.row(university['university_name']) return markup
def getCurrStatus(self, user_id): userInfo = DbManager.getTgUserInfo(user_id) if not userInfo: alert = f'UserController.getCurrStatus failed: user {user_id} info empty' LogController().alert(alert) AlertManager().notify(alert, AlertManager.WARNING_LEVEL) return self.DEFAULT_STATUS if userInfo['group_id'] != self.DEFAULT_GROUP_ID \ and userInfo['university_id'] != self.DEFAULT_UNIVERSITY_ID: return self.GROUP_CHOSEN elif userInfo['university_id'] != self.DEFAULT_UNIVERSITY_ID: return self.UNIVERSITY_CHOSEN else: return self.DEFAULT_STATUS
def __init__(self): token = os.environ.get('ALTER_ME_TOKEN') message_queue = MessageQueue(all_burst_limit=29, all_time_limit_ms=1017) request = Request(con_pool_size=8) bot = MessageQueueBot(token, request=request, message_queue=message_queue) self._updater = Updater(bot=bot) self._dispatcher = self._updater.dispatcher self._db_manager = DbManager() self._localizer = Localizer(self._db_manager) self._health_checker = HealthChecker(self._updater.bot, self._db_manager) self._health_check_interval = int(os.environ.get('HEALTH_CHECK_INTERVAL')) self.__setup_command_handlers() self.__setup_callback_query_handlers() self.__setup_message_handlers() self.__setup_error_handler()
def __init__(self, parent, size, userId): if size == 'max': wx.Frame.__init__(self, parent, id=wx.ID_ANY, title=wx.EmptyString, pos=wx.DefaultPosition, size=wx.Size(500, 300), style=wx.DEFAULT_FRAME_STYLE | wx.TAB_TRAVERSAL) self.Maximize() else: wx.Frame.__init__(self, parent, id=wx.ID_ANY, title=wx.EmptyString, pos=wx.DefaultPosition, size=wx.Size(size), style=wx.DEFAULT_FRAME_STYLE | wx.TAB_TRAVERSAL) self.SetSizeHints(wx.DefaultSize, wx.DefaultSize) bSizer12 = wx.BoxSizer(wx.VERTICAL) self.go_back_button = wx.Button(self, wx.ID_ANY, u"뒤로가기", wx.DefaultPosition, wx.DefaultSize, 0) bSizer12.Add(self.go_back_button, 0, wx.ALL, 5) self.m_panel81 = wx.Panel(self, wx.ID_ANY, wx.DefaultPosition, wx.DefaultSize, wx.TAB_TRAVERSAL) gbSizer31 = wx.GridBagSizer(0, 0) gbSizer31.SetFlexibleDirection(wx.BOTH) gbSizer31.SetNonFlexibleGrowMode(wx.FLEX_GROWMODE_SPECIFIED) self.range_text = wx.StaticText(self.m_panel81, wx.ID_ANY, u"범위", wx.DefaultPosition, wx.DefaultSize, 0) self.range_text.Wrap(-1) gbSizer31.Add(self.range_text, wx.GBPosition(0, 0), wx.GBSpan(1, 1), wx.ALL, 5) range_choiceChoices = [u"전체", u"선택"] self.range_choice = wx.Choice(self.m_panel81, wx.ID_ANY, wx.DefaultPosition, wx.DefaultSize, range_choiceChoices, 0) self.range_choice.SetSelection(0) gbSizer31.Add(self.range_choice, wx.GBPosition(0, 1), wx.GBSpan(1, 1), wx.ALL, 5) self.feel_text = wx.StaticText(self.m_panel81, wx.ID_ANY, u"기분", wx.DefaultPosition, wx.DefaultSize, 0) self.feel_text.Wrap(-1) gbSizer31.Add(self.feel_text, wx.GBPosition(0, 2), wx.GBSpan(1, 1), wx.ALL, 5) feel_range_choiceChoices = [u"전체", u"선택"] self.feel_range_choice = wx.Choice(self.m_panel81, wx.ID_ANY, wx.DefaultPosition, wx.DefaultSize, feel_range_choiceChoices, 0) self.feel_range_choice.SetSelection(0) gbSizer31.Add(self.feel_range_choice, wx.GBPosition(0, 3), wx.GBSpan(1, 1), wx.ALL, 5) self.thoughts_count_text = wx.StaticText(self.m_panel81, wx.ID_ANY, u"생각개수", wx.DefaultPosition, wx.DefaultSize, 0) self.thoughts_count_text.Wrap(-1) gbSizer31.Add(self.thoughts_count_text, wx.GBPosition(0, 4), wx.GBSpan(1, 1), wx.ALL, 5) feel_range_choice1Choices = [u"전체", u"선택"] self.feel_range_choice1 = wx.Choice(self.m_panel81, wx.ID_ANY, wx.DefaultPosition, wx.DefaultSize, feel_range_choice1Choices, 0) self.feel_range_choice1.SetSelection(0) gbSizer31.Add(self.feel_range_choice1, wx.GBPosition(0, 5), wx.GBSpan(1, 1), wx.ALL, 5) self.search_button = wx.Button(self.m_panel81, wx.ID_ANY, u"검색", wx.DefaultPosition, wx.DefaultSize, 0) gbSizer31.Add(self.search_button, wx.GBPosition(0, 6), wx.GBSpan(1, 1), wx.ALL, 5) self.m_panel81.SetSizer(gbSizer31) self.m_panel81.Layout() gbSizer31.Fit(self.m_panel81) bSizer12.Add(self.m_panel81, 0, wx.ALL | wx.EXPAND, 5) self.m_scrolledWindow2 = wx.ScrolledWindow(self, wx.ID_ANY, wx.DefaultPosition, wx.DefaultSize, wx.HSCROLL | wx.VSCROLL) self.m_scrolledWindow2.SetScrollRate(5, 5) bSizer22 = wx.BoxSizer(wx.VERTICAL) self.starPng = wx.Image('star.png', wx.BITMAP_TYPE_ANY) frameSizeX, frameSizeY = self.GetSize() self.starPng.Rescale(16, 16) self.starPng = self.starPng.ConvertToBitmap() del frameSizeX, frameSizeY self.DbManager = DbManager() self.userId = userId diary = self.DbManager.findDiaryWithCondition(startDate='1970-01-01', finishDate='2099-01-01', startFeelRange=1, finishFeelRange=5, thoughtsStartRange=0, thoughtsFinishRange=100, userId=self.userId) for i in range(len(diary)): date = diary[i][0] time = diary[i][1] todayFeel = diary[i][2] todayThoughtsCount = diary[i][3] diaryPanel = self.makeDiaryPanel(date, time, todayFeel, todayThoughtsCount, len(diary), self.m_scrolledWindow2) bSizer22.Add(diaryPanel, 1, wx.EXPAND | wx.ALL, 5) self.m_scrolledWindow2.SetSizer(bSizer22) self.m_scrolledWindow2.Layout() bSizer22.Fit(self.m_scrolledWindow2) bSizer12.Add(self.m_scrolledWindow2, 1, wx.EXPAND | wx.ALL, 5) self.SetSizer(bSizer12) self.Layout() self.Centre(wx.BOTH) # Connect Events self.Bind(wx.EVT_CLOSE, self.onClose) self.range_choice.Bind(wx.EVT_CHOICE, self.rangeChoiced) self.feel_range_choice.Bind(wx.EVT_CHOICE, self.feelRangeChoiced) self.feel_range_choice1.Bind(wx.EVT_CHOICE, self.thoughtsRangeChoiced) self.search_button.Bind(wx.EVT_BUTTON, self.searchButtonClicked) self.go_back_button.Bind(wx.EVT_BUTTON, self.goBackButtonClicked)
class WatchDiaryMenu(wx.Frame): def __init__(self, parent, size, userId): if size == 'max': wx.Frame.__init__(self, parent, id=wx.ID_ANY, title=wx.EmptyString, pos=wx.DefaultPosition, size=wx.Size(500, 300), style=wx.DEFAULT_FRAME_STYLE | wx.TAB_TRAVERSAL) self.Maximize() else: wx.Frame.__init__(self, parent, id=wx.ID_ANY, title=wx.EmptyString, pos=wx.DefaultPosition, size=wx.Size(size), style=wx.DEFAULT_FRAME_STYLE | wx.TAB_TRAVERSAL) self.SetSizeHints(wx.DefaultSize, wx.DefaultSize) bSizer12 = wx.BoxSizer(wx.VERTICAL) self.go_back_button = wx.Button(self, wx.ID_ANY, u"뒤로가기", wx.DefaultPosition, wx.DefaultSize, 0) bSizer12.Add(self.go_back_button, 0, wx.ALL, 5) self.m_panel81 = wx.Panel(self, wx.ID_ANY, wx.DefaultPosition, wx.DefaultSize, wx.TAB_TRAVERSAL) gbSizer31 = wx.GridBagSizer(0, 0) gbSizer31.SetFlexibleDirection(wx.BOTH) gbSizer31.SetNonFlexibleGrowMode(wx.FLEX_GROWMODE_SPECIFIED) self.range_text = wx.StaticText(self.m_panel81, wx.ID_ANY, u"범위", wx.DefaultPosition, wx.DefaultSize, 0) self.range_text.Wrap(-1) gbSizer31.Add(self.range_text, wx.GBPosition(0, 0), wx.GBSpan(1, 1), wx.ALL, 5) range_choiceChoices = [u"전체", u"선택"] self.range_choice = wx.Choice(self.m_panel81, wx.ID_ANY, wx.DefaultPosition, wx.DefaultSize, range_choiceChoices, 0) self.range_choice.SetSelection(0) gbSizer31.Add(self.range_choice, wx.GBPosition(0, 1), wx.GBSpan(1, 1), wx.ALL, 5) self.feel_text = wx.StaticText(self.m_panel81, wx.ID_ANY, u"기분", wx.DefaultPosition, wx.DefaultSize, 0) self.feel_text.Wrap(-1) gbSizer31.Add(self.feel_text, wx.GBPosition(0, 2), wx.GBSpan(1, 1), wx.ALL, 5) feel_range_choiceChoices = [u"전체", u"선택"] self.feel_range_choice = wx.Choice(self.m_panel81, wx.ID_ANY, wx.DefaultPosition, wx.DefaultSize, feel_range_choiceChoices, 0) self.feel_range_choice.SetSelection(0) gbSizer31.Add(self.feel_range_choice, wx.GBPosition(0, 3), wx.GBSpan(1, 1), wx.ALL, 5) self.thoughts_count_text = wx.StaticText(self.m_panel81, wx.ID_ANY, u"생각개수", wx.DefaultPosition, wx.DefaultSize, 0) self.thoughts_count_text.Wrap(-1) gbSizer31.Add(self.thoughts_count_text, wx.GBPosition(0, 4), wx.GBSpan(1, 1), wx.ALL, 5) feel_range_choice1Choices = [u"전체", u"선택"] self.feel_range_choice1 = wx.Choice(self.m_panel81, wx.ID_ANY, wx.DefaultPosition, wx.DefaultSize, feel_range_choice1Choices, 0) self.feel_range_choice1.SetSelection(0) gbSizer31.Add(self.feel_range_choice1, wx.GBPosition(0, 5), wx.GBSpan(1, 1), wx.ALL, 5) self.search_button = wx.Button(self.m_panel81, wx.ID_ANY, u"검색", wx.DefaultPosition, wx.DefaultSize, 0) gbSizer31.Add(self.search_button, wx.GBPosition(0, 6), wx.GBSpan(1, 1), wx.ALL, 5) self.m_panel81.SetSizer(gbSizer31) self.m_panel81.Layout() gbSizer31.Fit(self.m_panel81) bSizer12.Add(self.m_panel81, 0, wx.ALL | wx.EXPAND, 5) self.m_scrolledWindow2 = wx.ScrolledWindow(self, wx.ID_ANY, wx.DefaultPosition, wx.DefaultSize, wx.HSCROLL | wx.VSCROLL) self.m_scrolledWindow2.SetScrollRate(5, 5) bSizer22 = wx.BoxSizer(wx.VERTICAL) self.starPng = wx.Image('star.png', wx.BITMAP_TYPE_ANY) frameSizeX, frameSizeY = self.GetSize() self.starPng.Rescale(16, 16) self.starPng = self.starPng.ConvertToBitmap() del frameSizeX, frameSizeY self.DbManager = DbManager() self.userId = userId diary = self.DbManager.findDiaryWithCondition(startDate='1970-01-01', finishDate='2099-01-01', startFeelRange=1, finishFeelRange=5, thoughtsStartRange=0, thoughtsFinishRange=100, userId=self.userId) for i in range(len(diary)): date = diary[i][0] time = diary[i][1] todayFeel = diary[i][2] todayThoughtsCount = diary[i][3] diaryPanel = self.makeDiaryPanel(date, time, todayFeel, todayThoughtsCount, len(diary), self.m_scrolledWindow2) bSizer22.Add(diaryPanel, 1, wx.EXPAND | wx.ALL, 5) self.m_scrolledWindow2.SetSizer(bSizer22) self.m_scrolledWindow2.Layout() bSizer22.Fit(self.m_scrolledWindow2) bSizer12.Add(self.m_scrolledWindow2, 1, wx.EXPAND | wx.ALL, 5) self.SetSizer(bSizer12) self.Layout() self.Centre(wx.BOTH) # Connect Events self.Bind(wx.EVT_CLOSE, self.onClose) self.range_choice.Bind(wx.EVT_CHOICE, self.rangeChoiced) self.feel_range_choice.Bind(wx.EVT_CHOICE, self.feelRangeChoiced) self.feel_range_choice1.Bind(wx.EVT_CHOICE, self.thoughtsRangeChoiced) self.search_button.Bind(wx.EVT_BUTTON, self.searchButtonClicked) self.go_back_button.Bind(wx.EVT_BUTTON, self.goBackButtonClicked) def __del__(self): pass def makeDiaryPanel(self, date, time, star, thoughtsCount, diaryCount, m_scrolledWindow2): m_panel8 = wx.Panel(m_scrolledWindow2, wx.ID_ANY, wx.DefaultPosition, wx.DefaultSize, wx.TAB_TRAVERSAL) gbSizer3 = wx.GridBagSizer(0, 0) gbSizer3.SetFlexibleDirection(wx.BOTH) gbSizer3.SetNonFlexibleGrowMode(wx.FLEX_GROWMODE_SPECIFIED) date_text = wx.StaticText(m_panel8, wx.ID_ANY, u'{0}'.format(date), wx.DefaultPosition, wx.DefaultSize, 0) date_text.Wrap(-1) gbSizer3.Add(date_text, wx.GBPosition(0, 0), wx.GBSpan(1, 1), wx.ALL, 5) time_text = wx.StaticText(m_panel8, wx.ID_ANY, u"{0}".format(time), wx.DefaultPosition, wx.DefaultSize, 0) time_text.Wrap(-1) gbSizer3.Add(time_text, wx.GBPosition(0, 2), wx.GBSpan(1, 1), wx.ALL, 5) thoughts_count = wx.StaticText(m_panel8, wx.ID_ANY, u"{0}".format(thoughtsCount), wx.DefaultPosition, wx.DefaultSize, 0) thoughts_count.Wrap(-1) gbSizer3.Add(thoughts_count, wx.GBPosition(0, 3), wx.GBSpan(1, 1), wx.ALL, 5) diary_show_button = wx.Button(m_panel8, wx.ID_ANY, u"일기보기", wx.DefaultPosition, wx.DefaultSize, 0) gbSizer3.Add(diary_show_button, wx.GBPosition(0, 5), wx.GBSpan(1, 1), wx.ALL, 5) m_panel18 = wx.Panel(m_panel8, wx.ID_ANY, wx.DefaultPosition, wx.DefaultSize, wx.TAB_TRAVERSAL) gbSizer4 = wx.GridBagSizer(0, 0) gbSizer4.SetFlexibleDirection(wx.BOTH) gbSizer4.SetNonFlexibleGrowMode(wx.FLEX_GROWMODE_SPECIFIED) for i in range(int(star)): star = wx.StaticBitmap(m_panel18, wx.ID_ANY, self.starPng, wx.DefaultPosition, wx.DefaultSize, 0) gbSizer4.Add(star, wx.GBPosition(0, i), wx.GBSpan(1, 1), wx.ALL | wx.ALIGN_CENTER_HORIZONTAL, 5) m_panel18.SetSizer(gbSizer4) m_panel18.Layout() gbSizer4.Fit(m_panel18) gbSizer3.Add(m_panel18, wx.GBPosition(0, 4), wx.GBSpan(1, 1), wx.EXPAND | wx.ALL, 5) m_panel8.SetSizer(gbSizer3) m_panel8.Layout() gbSizer3.Fit(m_panel8) diary_show_button.Bind( wx.EVT_BUTTON, lambda event: self.diaryShowButtonClicked(event, date)) return m_panel8 # Virtual event handlers, overide them in your derived class def onClose(self, event): self.DbManager.closeDb() self.Destroy() sys.exit() def rangeChoiced(self, event): event.Skip() def feelRangeChoiced(self, event): event.Skip() def thoughtsRangeChoiced(self, event): event.Skip() def searchButtonClicked(self, event): event.Skip() def goBackButtonClicked(self, event): if self.IsMaximized(): frameSize = 'max' else: frameSize = self.GetSize() frame1 = DiaryMainMenu(parent=None, size=frameSize, userId=self.userId) frame1.Show(True) self.Show(False) def diaryShowButtonClicked(self, event, date): watchDiary = WatchDiary() diaryContent = watchDiary.readCorrectDiaryTxt(date) todayThoughtsContent = watchDiary.readCorrectTodayThoughtsTxt(date) diaryInfo = self.DbManager.readDiaryInfo(date, self.userId) if self.IsMaximized(): frameSize = 'max' else: frameSize = self.GetSize() if date == str(arrow.now().date()): frame1 = WriteDiaryMenu(parent=None, mode='w', size=frameSize, userId=self.userId, diaryContent=diaryContent, todayFeel=diaryInfo[2], todayThoughts=todayThoughtsContent) else: frame1 = WriteDiaryMenu(parent=None, mode='r', size=frameSize, userId=self.userId, diaryContent=diaryContent, todayFeel=diaryInfo[2], todayThoughts=todayThoughtsContent) frame1.Show(True) self.Show(False)
def onClose(self, event): a = DbManager() a.closeDb() self.Destroy() sys.exit()
def __init__(self, parent, mode, size, userId, diaryContent=None, todayFeel=5, todayThoughts=None): if size == 'max': wx.Frame.__init__(self, parent, id=wx.ID_ANY, title=wx.EmptyString, pos=wx.DefaultPosition, size=wx.Size(500, 300), style=wx.DEFAULT_FRAME_STYLE | wx.TAB_TRAVERSAL) self.Maximize() else: wx.Frame.__init__(self, parent, id=wx.ID_ANY, title=wx.EmptyString, pos=wx.DefaultPosition, size=wx.Size(size), style=wx.DEFAULT_FRAME_STYLE | wx.TAB_TRAVERSAL) self.SetSizeHints(wx.DefaultSize, wx.DefaultSize) gSizer3 = wx.GridSizer(0, 2, 0, 0) bSizer7 = wx.BoxSizer(wx.VERTICAL) self.go_back_button = wx.Button(self, wx.ID_ANY, u"뒤로가기", wx.DefaultPosition, wx.DefaultSize, 0) bSizer7.Add(self.go_back_button, 0, wx.ALL, 5) if mode == "w": if diaryContent == None: self.diary_input_box = wx.TextCtrl(self, wx.ID_ANY, wx.EmptyString, wx.DefaultPosition, wx.DefaultSize, wx.TE_MULTILINE) else: self.diary_input_box = wx.TextCtrl(self, wx.ID_ANY, u"{0}".format(diaryContent), wx.DefaultPosition, wx.DefaultSize, wx.TE_MULTILINE) else: self.diary_input_box = wx.TextCtrl( self, wx.ID_ANY, u'{0}'.format(diaryContent), wx.DefaultPosition, wx.DefaultSize, wx.TE_MULTILINE | wx.TE_READONLY) bSizer7.Add(self.diary_input_box, 1, wx.ALL | wx.EXPAND, 5) gSizer3.Add(bSizer7, 1, wx.EXPAND, 5) bSizer8 = wx.BoxSizer(wx.VERTICAL) self.m_panel1 = wx.Panel(self, wx.ID_ANY, wx.DefaultPosition, wx.DefaultSize, wx.TAB_TRAVERSAL) bSizer9 = wx.BoxSizer(wx.VERTICAL) self.today_feel_text = wx.StaticText(self.m_panel1, wx.ID_ANY, u"오늘 기분1/5", wx.DefaultPosition, wx.DefaultSize, 0) self.today_feel_text.Wrap(-1) bSizer9.Add(self.today_feel_text, 0, wx.ALL, 5) if mode == 'w': self.today_feel_slider = wx.Slider( self.m_panel1, wx.ID_ANY, todayFeel, 1, 5, wx.DefaultPosition, wx.DefaultSize, wx.SL_HORIZONTAL | wx.SL_SELRANGE | wx.SL_VALUE_LABEL) bSizer9.Add(self.today_feel_slider, 0, wx.ALL | wx.EXPAND, 5) else: self.today_feel_text = wx.StaticText(self.m_panel1, wx.ID_ANY, u"{0}".format(todayFeel), wx.DefaultPosition, wx.DefaultSize, 0) self.today_feel_text.Wrap(-1) bSizer9.Add(self.today_feel_text, 0, wx.ALL, 5) self.m_panel1.SetSizer(bSizer9) self.m_panel1.Layout() bSizer9.Fit(self.m_panel1) bSizer8.Add(self.m_panel1, 0, wx.EXPAND | wx.ALL, 5) self.m_panel2 = wx.Panel(self, wx.ID_ANY, wx.DefaultPosition, wx.DefaultSize, wx.TAB_TRAVERSAL) bSizer10 = wx.BoxSizer(wx.VERTICAL) self.today_thoughts_text = wx.StaticText(self.m_panel2, wx.ID_ANY, u"오늘 생각한것", wx.DefaultPosition, wx.DefaultSize, 0) self.today_thoughts_text.Wrap(-1) bSizer10.Add(self.today_thoughts_text, 0, wx.ALL, 5) if mode == 'w': if todayThoughts == None: self.today_thoughts_input_box = wx.TextCtrl( self.m_panel2, wx.ID_ANY, wx.EmptyString, wx.DefaultPosition, wx.DefaultSize, wx.TE_MULTILINE) else: self.today_thoughts_input_box = wx.TextCtrl( self.m_panel2, wx.ID_ANY, u"{0}".format(todayThoughts), wx.DefaultPosition, wx.DefaultSize, wx.TE_MULTILINE) else: self.today_thoughts_input_box = wx.TextCtrl( self.m_panel2, wx.ID_ANY, u"{0}".format(todayThoughts), wx.DefaultPosition, wx.DefaultSize, wx.TE_MULTILINE | wx.TE_READONLY) bSizer10.Add(self.today_thoughts_input_box, 1, wx.ALL | wx.EXPAND, 5) self.m_panel2.SetSizer(bSizer10) self.m_panel2.Layout() bSizer10.Fit(self.m_panel2) bSizer8.Add(self.m_panel2, 1, wx.EXPAND | wx.ALL, 5) if mode == 'w': self.save_diary_button = wx.Button(self, wx.ID_ANY, u"일기 저장", wx.DefaultPosition, wx.DefaultSize, 0) bSizer8.Add(self.save_diary_button, 0, wx.ALL | wx.ALIGN_CENTER_HORIZONTAL, 5) self.save_diary_button.Bind(wx.EVT_BUTTON, self.saveButtonClicked) gSizer3.Add(bSizer8, 1, wx.EXPAND, 5) self.SetSizer(gSizer3) self.Layout() self.Centre(wx.BOTH) # Connect Events self.Bind(wx.EVT_CLOSE, self.onClose) self.go_back_button.Bind(wx.EVT_BUTTON, self.goBackButtonClicked) self.dbManager = DbManager() self.WriteDiary = WriteDiary() self.userId = userId
class CoreDb: def __init__(self): self.dm = DbManager() def lock_next_page(self): query = """ UPDATE crawldb.server ss SET last_visit = (now() at time zone 'utc'), lock = true FROM ( SELECT p.id as pid, s.id as sid FROM crawldb.page p LEFT JOIN crawldb.site d on p.site_id = d.id LEFT JOIN crawldb.server s on d.server_id = s.id WHERE s.lock = false AND (now() at time zone 'utc') - s.last_visit > d.delay * (INTERVAL '1 second') AND p.page_type_code = %s ORDER BY p.id ASC LIMIT 1 ) AS subquery WHERE ss.id = subquery.sid RETURNING subquery.pid, subquery.sid;""" pid_sid = self.dm.execute_query_fetchone(query, (PageType.FRONTIER.value, ), commit=True) logging.debug("Locked (page, server): " + repr(pid_sid)) return pid_sid def update_next_page(self, pid, sid): query = """ UPDATE crawldb.page SET page_type_code = %s WHERE id = %s; UPDATE crawldb.server SET lock = false WHERE id = %s; SELECT * FROM crawldb.page WHERE id = %s;""" row = self.dm.execute_query_fetchone( query, (PageType.PROCESSING.value, pid, sid, pid), commit=True) logging.debug("Unlocked server and got next page: " + repr(row)) return CoreDb.format_page_data(row) def lock_server(self, id): query = """ UPDATE crawldb.server SET lock = true WHERE id = %s AND lock = false RETURNING last_visit;""" last_visit = self.dm.execute_query_fetchone(query, (id, ), commit=True) logging.debug("Locked server: " + repr(id) + " last visit: " + repr(last_visit)) return last_visit def get_server_by_ip_address(self, ip_address): query = 'SELECT * FROM crawldb.server ' \ 'WHERE ip_address = %s ; ' row = self.dm.execute_query_fetchone(query, (ip_address, )) logging.debug("Got server by ip address: " + repr(row)) return None if (row is None) else CoreDb.format_server_data(row) def get_site_by_domain(self, domain): query = 'SELECT * FROM crawldb.site ' \ 'WHERE domain = %s ; ' row = self.dm.execute_query_fetchone(query, (domain, )) logging.debug("Got site by domain: " + repr(row)) return None if (row is None) else CoreDb.format_site_data(row) def get_page_by_url(self, url): query = 'SELECT * FROM crawldb.page ' \ 'WHERE url = %s ; ' row = self.dm.execute_query_fetchone(query, (url, )) logging.debug("Got page by url: " + repr(url) + " found: " + (repr(row) if row is None else repr(row[0]))) return None if (row is None) else CoreDb.format_page_data(row) def get_page_with_hash(self, html_hash): query = """ SELECT * FROM crawldb.page WHERE html_hash = %s """ row = self.dm.execute_query_fetchone(query, (html_hash, )) return None if (row is None) else CoreDb.format_page_data(row) def get_link(self, from_id, to_id): query = """ SELECT * FROM crawldb.link WHERE from_page = %s AND to_page = %s """ row = self.dm.execute_query_fetchone(query, (from_id, to_id)) return False if (row is None) else True def add_server(self, ip_address, last_visit=None): query = 'INSERT INTO crawldb.server (ip_address, last_visit, lock) ' \ 'VALUES (%s, %s, false) ' \ 'RETURNING * ; ' row = self.dm.execute_query_fetchone(query, (ip_address, last_visit), commit=True) logging.debug("Added server: " + repr(ip_address)) return None if (row is None) else CoreDb.format_server_data(row) def add_site(self, domain, server_id, robots_content, sitemap_content, delay): query = 'INSERT INTO crawldb.site (domain, server_id, robots_content, sitemap_content, delay) ' \ 'VALUES (%s, %s, %s, %s, %s) ' \ 'RETURNING * ; ' row = self.dm.execute_query_fetchone( query, (domain, server_id, robots_content, sitemap_content, delay), commit=True) logging.debug("Added site: " + repr(domain)) return None if (row is None) else CoreDb.format_site_data(row) def add_page(self, site_id, url): query = """ INSERT INTO crawldb.page (site_id, page_type_code, url) VALUES (%s, %s, %s) RETURNING *;""" row = self.dm.execute_query_fetchone( query, (site_id, PageType.FRONTIER.value, url), commit=True) logging.debug("Added page: " + repr(url)) return None if (row is None) else CoreDb.format_page_data(row) def add_link(self, from_id, to_id): query = """ INSERT INTO crawldb.link (from_page, to_page) VALUES (%s, %s);""" self.dm.execute_query(query, (from_id, to_id), commit=True) logging.debug("Added link from: " + repr(from_id) + " to: " + repr(to_id)) def add_img(self, page_id, filename, content_type): query = """ INSERT INTO crawldb.image (page_id, filename, content_type, data, accessed_time) VALUES (%s, %s, %s, %s, (now() at time zone 'utc')) """ self.dm.execute_query(query, (page_id, filename, content_type, None), commit=True) logging.debug("Added image with full filename: " + "{0}.{1}".format(filename, content_type)) def add_page_data(self, page_id, content_type): query = """ INSERT INTO crawldb.page_data (page_id, data_type_code, data) VALUES (%s, %s, %s) """ self.dm.execute_query(query, (page_id, content_type.value, None), commit=True) logging.debug("Added page data for page {}".format(page_id)) def update_server_last_visit(self, server_id, last_visit): query = 'UPDATE crawldb.server ' \ 'SET last_visit = %s, lock = false ' \ 'WHERE id = %s ; ' self.dm.execute_query(query, (last_visit, server_id), commit=True) logging.debug('Updated server: ' + repr(server_id) + ' last visit: ' + repr(last_visit)) def update_page(self, page_id, page_type, status_code, html_content=None, html_hash=None, duplicate_page_id=None): query = """ UPDATE crawldb.page SET page_type_code = %s, http_status_code = %s, html_content = %s, html_hash = %s, duplicate_page_id = %s, accessed_time=(now() at time zone 'utc') WHERE id = %s; """ self.dm.execute_query(query, (page_type, status_code, html_content, html_hash, duplicate_page_id, page_id), commit=True) logging.debug("Updated page: " + repr((page_id, page_type, status_code))) @staticmethod def format_server_data(server_row): return { 'id': server_row[0], 'ip_address': server_row[1], 'last_visit': server_row[2], 'lock': server_row[3] } @staticmethod def format_page_data(page_row): return { 'id': page_row[0], 'site_id': page_row[1], 'page_type_code': page_row[2], 'url': page_row[3], 'html_content': page_row[4], 'html_hash': page_row[5], 'duplicate_page_id': page_row[6], 'http_status_code': page_row[7], 'accessed_time': page_row[8] } @staticmethod def format_site_data(site_row): return { 'id': site_row[0], 'domain': site_row[1], 'server_id': site_row[2], 'robots_content': site_row[3], 'sitemap_content': site_row[4], 'delay': site_row[5] }
class Bot(object): """description of class""" def __init__(self): token = "1699009884:AAHjE7wUGrSQgLUlIWgzucaV91dVJSDZhVs" message_queue = MessageQueue(all_burst_limit=29, all_time_limit_ms=1017) request = Request(con_pool_size=8) bot = MessageQueueBot(token, request=request, message_queue=message_queue) self._updater = Updater(bot=bot) self._dispatcher = self._updater.dispatcher self._db_manager = DbManager() self._localizer = Localizer(self._db_manager) self._health_checker = HealthChecker(self._updater.bot, self._db_manager) self._health_check_interval = int( os.environ.get('HEALTH_CHECK_INTERVAL')) self.__setup_command_handlers() self.__setup_callback_query_handlers() self.__setup_message_handlers() self.__setup_error_handler() def start(self): logging.info('Starting the bot...') self._updater.start_polling() self.__perform_health_check() logging.info('Bot is started') self._updater.idle() def stop(self): logging.info('Stopping the bot...') self._updater.stop() logging.info('Bot is stopped') def error_callback(self, bot, update, error): try: logging.error('Error occurred: %s' % error.message) raise error except ChatMigrated as e: self._db_manager.update_chat_id(update.message.chat_id, e.new_chat_id) except TelegramError as e: logging.error('Unknown error: %s' % e.message) def __perform_health_check(self): self._health_checker.perform_health_check() timer = threading.Timer(self._health_check_interval, self.__perform_health_check) timer.start() def __setup_error_handler(self): self._dispatcher.add_error_handler(self.error_callback) def __setup_command_handlers(self): handlers = [ AliasCommandHandler(self._db_manager, self._localizer), ListCommandHandler(self._db_manager, self._localizer), HelpCommandHandler(self._localizer), RemoveCommandHandler(self._db_manager, self._localizer), ClearCommandHandler(self._db_manager, self._localizer), OnCommandHandler(self._db_manager, self._localizer), OffCommandHandler(self._db_manager, self._localizer), LangCommandHandler(self._db_manager, self._localizer) ] for handler in handlers: self._dispatcher.add_handler(handler) def __setup_message_handlers(self): handlers = [AliasMessageHandler(self._db_manager)] for handler in handlers: self._dispatcher.add_handler(handler) def __setup_callback_query_handlers(self): handlers = [ LanguageCallbackQueryHandler(self._db_manager, self._localizer) ] for handler in handlers: self._dispatcher.add_handler(handler)
def __init__(self): self.db = DbManager() self.db.mysqlConnect() self.camelUtils = CamelUtils()
from DbManager import DbManager from RatePredictor import RatePredictor dbm = DbManager() # for li in bank_currency: # print(li,'\t',["%.3f" % v for v in bank_currency[li]]) # ''' bank_cur_map = dbm.select_all() nc_bank_cur_map = dbm.select_all_nb() rpred = RatePredictor() fcsts, mdls = rpred.predicted_values_all_banks(bank_cur_map) # rpred.fcast_plots(fcsts) rpred.model_plots(mdls, fcsts) mt, mo, btails, boveralls = rpred.predicted_stat(fcsts) print('\n', 'Min predicted course') print('\n', 'bank : ', mt, '\n INFO :') expected_min_tail = fcsts[mt]['trend'][-10:] print(expected_min_tail) print('\n', 'Min overal course for all time') print('\n', 'bank : ', mo, '\n INFO :') expected_min_overall = fcsts[mo]['trend'] print(expected_min_overall) saved = rpred.saved_money(bank_cur_map, mo, 'Приорбанк', 2017, 11) saved_with_bonus = rpred.saved_money_with_bonus(bank_cur_map, mo, 'Приорбанк', nc_bank_cur_map, 2017, 11)
class LoginMenu(wx.Frame): def __init__(self, parent, size): wx.Frame.__init__(self, parent, id=wx.ID_ANY, title=wx.EmptyString, pos=wx.DefaultPosition, size=wx.Size(300, 300), style=wx.DEFAULT_FRAME_STYLE & ~(wx.RESIZE_BORDER | wx.MAXIMIZE_BOX)) self.SetSizeHints(wx.DefaultSize, wx.DefaultSize) bSizer2 = wx.BoxSizer(wx.VERTICAL) self.go_back_button = wx.Button(self, wx.ID_ANY, u"뒤로가기", wx.DefaultPosition, wx.DefaultSize, 0) bSizer2.Add(self.go_back_button, 0, wx.ALL, 5) self.m_panel7 = wx.Panel(self, wx.ID_ANY, wx.DefaultPosition, wx.DefaultSize, 0) bSizer19 = wx.BoxSizer(wx.VERTICAL) self.id_input_box = wx.TextCtrl(self.m_panel7, wx.ID_ANY, wx.EmptyString, wx.DefaultPosition, wx.DefaultSize, 0) bSizer19.Add(self.id_input_box, 0, wx.ALL, 5) self.pw_input_box = wx.TextCtrl(self.m_panel7, wx.ID_ANY, wx.EmptyString, wx.DefaultPosition, wx.DefaultSize, wx.TE_PASSWORD | wx.TE_PROCESS_ENTER) bSizer19.Add(self.pw_input_box, 0, wx.ALL, 5) self.m_panel7.SetSizer(bSizer19) self.m_panel7.Layout() bSizer19.Fit(self.m_panel7) bSizer2.Add(self.m_panel7, 0, wx.ALL | wx.ALIGN_CENTER_HORIZONTAL, 5) self.login_button = wx.Button(self, wx.ID_ANY, u"로그인", wx.DefaultPosition, wx.DefaultSize, 0) bSizer2.Add(self.login_button, 0, wx.ALL | wx.ALIGN_CENTER_HORIZONTAL, 5) self.SetSizer(bSizer2) self.Layout() self.Centre(wx.BOTH) # Connect Events self.Bind(wx.EVT_CLOSE, self.onClose) self.go_back_button.Bind(wx.EVT_BUTTON, self.goBackButtonClicked) self.pw_input_box.Bind(wx.EVT_TEXT_ENTER, self.pwInputFinished) self.login_button.Bind(wx.EVT_BUTTON, self.loginButtonClicked) self.DbManager = DbManager() self.accountManager = AccountManager() def __del__(self): pass # Virtual event handlers, overide them in your derived class def onClose(self, event): self.DbManager.closeDb() self.Destroy() sys.exit() def goBackButtonClicked(self, event): if self.IsMaximized(): frameSize = 'max' else: frameSize = self.GetSize() frame1 = StartMenu(parent=None, size=frameSize) frame1.Show(True) self.Show(False) def pwInputFinished(self, event): self.loginButtonClicked(event=None) def loginButtonClicked(self, event): id = self.id_input_box.GetValue() pw = self.pw_input_box.GetValue() pwFollowRule = True try: if re.findall('[a-zA-Z0-9]+', pw)[0] != pw: pwFollowRule = False except: if len(re.findall('[^a-zA-Z0-9]+', pw)[0]) > 0: pwFollowRule = False else: raise BaseException idFollowRule = True try: if re.findall('[a-zA-Z0-9]+', id)[0] != id: idFollowRule = False except: if len(re.findall('[^a-zA-Z0-9]+', id)[0]) > 0: idFollowRule = False else: raise BaseException if pwFollowRule and idFollowRule: loginAccepted = self.accountManager.logIn(id, pw) else: loginAccepted = False if loginAccepted: if self.IsMaximized(): frameSize = 'max' else: frameSize = self.GetSize() frame1 = DiaryMainMenu(parent=None, size=frameSize, userId=self.id_input_box.GetValue()) frame1.Show(True) self.Show(False) else: wx.MessageBox("로그인 실패!") return loginAccepted
from Controllers.UserController import UserController from Controllers.Log.LogController import LogController from Controllers.CliArgsController import CliArgsController from Controllers.MetricsController import MetricsController from Controllers.TelegramViewController import TelegramViewController from Controllers.Translation.TranslationController import TranslationController configImporter = CliArgsController() configImporter.parseArgs() config = configImporter.getConfig() bot = Bot(token=config.BOT_TOKEN) dp = Dispatcher(bot) parser = ParseManager() dbManager = DbManager() alertManager = AlertManager() logger = LogController() userController = UserController() viewController = TelegramViewController() messageGenerator = TranslationController() @dp.message_handler(commands=["start", "changeuniversity"]) async def chooseUniversity(message): """Start message. Configure university. Drops university if user already registered.
class App: def __init__(self): self.db = DbManager() def initApp(self): while True: print(" Menu ".center(50, '*')) print( "1- List Students\n2- Add Student\n3- Update Student\n4- Delete Student\n5- Exit\n" ) choice = input("Your Choice: ") if choice == '1': self.displayStudents() elif choice == '2': self.addStudent() elif choice == '3': self.updateStudent() elif choice == '4': self.deleteStudent() elif choice == '5': self.db.closeConnection() break else: print("Only 1-2-3-4-5") def displayClasses(self): for i in self.db.getClasses(): print(f"{i.id}- {i.name}") def displayStudents(self): self.displayClasses() classid = int(input('*** Enter Class ID: ')) students = self.db.getStudentByClassId(classid) print(" Student List ".center(25, '*')) for i in students: print(f"{i.id}- {i.name} {i.surname}") def addStudent(self): self.displayClasses() classid = int(input('*** Enter Class ID: ')) number = input("Studen Number: ") name = input("Name: ") surname = input("Surname: ") birthdate = input("Birthdate (YYYY,MM,DD): ") gender = input("Gender (M,F): ") student = Students(None, number, name, surname, birthdate, gender, classid) self.db.addStudent(student) def updateStudent(self): self.displayStudents() studentid = int(input("Student ID: ")) student = self.db.getStudentById(studentid) print(student[0].name, student[0].surname) student[0].name = input('Name: ') or student[0].name student[0].surname = input('Surname: ') or student[0].surname student[0].birthdate = input( 'Birthdate (YYYY,MM,DD): ') or student[0].birthdate student[0].gender = input('Gender: ') or student[0].gender student[0].classid = input('Class ID: ') or student[0].classid self.db.updateStudent(student[0]) def deleteStudent(self): self.displayStudents() studentid = int(input("Student ID: ")) self.db.deleteStudent(studentid)
from DbManager import DbManager from ChatChannel import ChatChannel import ChatChannelManager from flask import jsonify from sqlalchemy.orm import aliased, joinedload DEBUG = True SECRET_KEY = 'asdfaf3q4534tegsdfgsdfgsd' app = Flask(__name__) app.config.from_object(__name__) loginManager = LoginManager() loginManager.init_app(app) dbManager = DbManager(); dbManager.createTables(); sessionMaker = dbManager.createSessionMaker() session = sessionMaker() @loginManager.user_loader def load_user(userid): return UserManager.findUserById(session, userid) @app.route("/register", methods=["GET", "POST"]) def register(): if current_user is not None and current_user.is_authenticated(): return redirect(url_for('chatChannels')) form = RegistrationForm() if form.validate_on_submit():
import sys import os sys.path.append(os.path.abspath('./src')) from DbManager import DbManager from Executor import Discoverer from Analysis import Wordcloud, Middlewares queryName = "17年雪城大学新生群" dbm = DbManager("D:/WeChatDiscover/Documents", "8087586da2b75fedcfbcfd0e7662ad1a", True) dbm.update(queryName) history = dbm.mergeAllTrunksToTuple() friendList = dbm.getFrindList() disc = Discoverer() disc.addFileForLogger() disc.data = history disc.cache["friendList"] = friendList disc.cache["groupName"] = queryName # disc.addWork(Wordcloud.WordcloudForChatRoom) # disc.addWorks( Middlewares.textMessagesSplitedByIdInGroupChat, # Wordcloud.WordcloudForEachMembersInChatRoom) disc.doWorks() pass
class DiaryMainMenu(wx.Frame): def __init__(self, parent, size, userId): wx.Frame.__init__(self, parent, id=wx.ID_ANY, title=wx.EmptyString, pos=wx.DefaultPosition, size=wx.Size(500, 300), style=wx.DEFAULT_FRAME_STYLE & ~(wx.RESIZE_BORDER | wx.MAXIMIZE_BOX)) self.SetSizeHints(wx.DefaultSize, wx.DefaultSize) bSizer1 = wx.BoxSizer(wx.VERTICAL) self.watch_button = wx.Button(self, wx.ID_ANY, u"일기보기", wx.DefaultPosition, wx.DefaultSize, 0) bSizer1.Add(self.watch_button, 1, wx.ALL | wx.EXPAND, 5) self.write_button = wx.Button(self, wx.ID_ANY, u"일기쓰기", wx.DefaultPosition, wx.DefaultSize, 0) bSizer1.Add(self.write_button, 1, wx.ALL | wx.EXPAND, 5) self.SetSizer(bSizer1) self.Layout() self.Centre(wx.BOTH) # Connect Events self.Bind(wx.EVT_CLOSE, self.onClose) self.watch_button.Bind(wx.EVT_BUTTON, self.watchButtonClicked) self.write_button.Bind(wx.EVT_BUTTON, self.writeButtonClicked) self.DbManager = DbManager() self.userId = userId def __del__(self): pass # Virtual event handlers, overide them in your derived class def onClose(self, event): self.DbManager.closeDb() self.Destroy() sys.exit() def watchButtonClicked(self, event): if self.IsMaximized(): frameSize = 'max' else: frameSize = self.GetSize() frame1 = WatchDiaryMenu(parent=None, size=frameSize, userId=self.userId) frame1.Show(True) self.Show(False) def writeButtonClicked(self, event): if self.IsMaximized(): frameSize = 'max' else: frameSize = self.GetSize() frame1 = WriteDiaryMenu(parent=None, mode='w', size=frameSize, userId=self.userId) frame1.Show(True) self.Show(False)
class SignUpMenu(wx.Frame): def __init__(self, parent, size): wx.Frame.__init__(self, parent, id=wx.ID_ANY, title=wx.EmptyString, pos=wx.DefaultPosition, size=wx.Size(500, 300), style=wx.DEFAULT_FRAME_STYLE & ~(wx.RESIZE_BORDER | wx.MAXIMIZE_BOX)) self.SetSizeHints(wx.DefaultSize, wx.DefaultSize) gSizer2 = wx.GridSizer(0, 2, 0, 0) bSizer7 = wx.BoxSizer(wx.VERTICAL) self.m_panel6 = wx.Panel(self, wx.ID_ANY, wx.DefaultPosition, wx.DefaultSize, wx.TAB_TRAVERSAL) gSizer7 = wx.GridSizer(0, 2, 0, 0) bSizer17 = wx.BoxSizer(wx.VERTICAL) self.goBackButton = wx.Button(self.m_panel6, wx.ID_ANY, u"뒤로가기", wx.DefaultPosition, wx.DefaultSize, 0) bSizer17.Add(self.goBackButton, 0, wx.ALL, 5) gSizer7.Add(bSizer17, 1, wx.EXPAND, 5) bSizer18 = wx.BoxSizer(wx.VERTICAL) self.id_confirm_button = wx.Button(self.m_panel6, wx.ID_ANY, u"ID중복확인", wx.DefaultPosition, wx.DefaultSize, 0) bSizer18.Add(self.id_confirm_button, 0, wx.ALL | wx.ALIGN_CENTER_HORIZONTAL, 5) gSizer7.Add(bSizer18, 1, wx.EXPAND, 5) self.m_panel6.SetSizer(gSizer7) self.m_panel6.Layout() gSizer7.Fit(self.m_panel6) bSizer7.Add(self.m_panel6, 0, wx.ALL | wx.EXPAND, 5) self.m_panel5 = wx.Panel(self, wx.ID_ANY, wx.DefaultPosition, wx.DefaultSize, wx.TAB_TRAVERSAL) gSizer5 = wx.GridSizer(0, 2, 0, 0) bSizer13 = wx.BoxSizer(wx.VERTICAL) self.id_input_text = wx.StaticText(self.m_panel5, wx.ID_ANY, u"ID", wx.DefaultPosition, wx.DefaultSize, 0) self.id_input_text.Wrap(-1) bSizer13.Add(self.id_input_text, 0, wx.ALL | wx.EXPAND, 5) self.id_input_box = wx.TextCtrl(self.m_panel5, wx.ID_ANY, wx.EmptyString, wx.DefaultPosition, wx.DefaultSize, 0) bSizer13.Add(self.id_input_box, 0, wx.ALL | wx.EXPAND, 5) self.pw_input_text = wx.StaticText(self.m_panel5, wx.ID_ANY, u"비밀번호", wx.DefaultPosition, wx.DefaultSize, 0) self.pw_input_text.Wrap(-1) bSizer13.Add(self.pw_input_text, 0, wx.ALL | wx.EXPAND, 5) self.pw_input_box = wx.TextCtrl(self.m_panel5, wx.ID_ANY, wx.EmptyString, wx.DefaultPosition, wx.DefaultSize, wx.TE_PASSWORD) bSizer13.Add(self.pw_input_box, 0, wx.ALL | wx.EXPAND, 5) self.pw_re_input_text = wx.StaticText(self.m_panel5, wx.ID_ANY, u"비밀번호 재입력", wx.DefaultPosition, wx.DefaultSize, 0) self.pw_re_input_text.Wrap(-1) bSizer13.Add(self.pw_re_input_text, 0, wx.ALL | wx.EXPAND, 5) self.pw_re_input_box = wx.TextCtrl(self.m_panel5, wx.ID_ANY, wx.EmptyString, wx.DefaultPosition, wx.DefaultSize, wx.TE_PASSWORD) bSizer13.Add(self.pw_re_input_box, 0, wx.ALL | wx.EXPAND, 5) gSizer5.Add(bSizer13, 1, wx.EXPAND, 5) bSizer15 = wx.BoxSizer(wx.VERTICAL) self.pw_check_text = wx.StaticText( self.m_panel5, wx.ID_ANY, u"id,비밀번호 둘다\n영어 대소문자, \n숫자만 가능\n\n비밀번호는\n10자 이상\n영어,숫자 필수", wx.DefaultPosition, wx.DefaultSize, 0) self.pw_check_text.Wrap(-1) bSizer15.Add(self.pw_check_text, 1, wx.ALL | wx.EXPAND, 5) self.pw_confirm_img = wx.StaticBitmap(self.m_panel5, wx.ID_ANY, wx.NullBitmap, wx.DefaultPosition, wx.DefaultSize, 0) bSizer15.Add(self.pw_confirm_img, 0, wx.ALL | wx.ALIGN_CENTER_HORIZONTAL, 5) bSizer15.Add((0, 0), 1, wx.EXPAND, 5) gSizer5.Add(bSizer15, 1, wx.EXPAND, 5) self.m_panel5.SetSizer(gSizer5) self.m_panel5.Layout() gSizer5.Fit(self.m_panel5) bSizer7.Add(self.m_panel5, 1, wx.EXPAND | wx.ALL, 5) self.re_pw_correct_text = wx.StaticText(self, wx.ID_ANY, wx.EmptyString, wx.DefaultPosition, wx.DefaultSize, 0) self.re_pw_correct_text.Wrap(-1) bSizer7.Add(self.re_pw_correct_text, 0, wx.ALL, 5) gSizer2.Add(bSizer7, 1, wx.EXPAND | wx.RIGHT, 5) bSizer8 = wx.BoxSizer(wx.VERTICAL) self.account_repair_question_text = wx.StaticText( self, wx.ID_ANY, u"보안질문", wx.DefaultPosition, wx.DefaultSize, 0) self.account_repair_question_text.Wrap(-1) bSizer8.Add(self.account_repair_question_text, 0, wx.ALL | wx.EXPAND, 5) account_repair_question_choiceChoices = [ u"가장 아끼는 물건은?", u"가장 좋아했던 선생님 성함은?", u"가장 감명깊게 읽은 책은?", u"가장 어려웠던 책은?" ] self.account_repair_question_choice = wx.Choice( self, wx.ID_ANY, wx.DefaultPosition, wx.DefaultSize, account_repair_question_choiceChoices, 0) self.account_repair_question_choice.SetSelection(0) bSizer8.Add(self.account_repair_question_choice, 0, wx.ALL | wx.EXPAND, 5) self.answer_text = wx.StaticText(self, wx.ID_ANY, u"답변", wx.DefaultPosition, wx.DefaultSize, 0) self.answer_text.Wrap(-1) bSizer8.Add(self.answer_text, 0, wx.ALL | wx.EXPAND, 5) self.answer_input_box = wx.TextCtrl(self, wx.ID_ANY, wx.EmptyString, wx.DefaultPosition, wx.DefaultSize, 0) bSizer8.Add(self.answer_input_box, 0, wx.ALL | wx.EXPAND, 5) self.sign_up_button = wx.Button(self, wx.ID_ANY, u"회원가입", wx.DefaultPosition, wx.DefaultSize, 0) bSizer8.Add(self.sign_up_button, 0, wx.ALL | wx.ALIGN_CENTER_HORIZONTAL, 5) gSizer2.Add(bSizer8, 1, wx.EXPAND, 5) self.SetSizer(gSizer2) self.Layout() self.Centre(wx.BOTH) # Connect Events self.Bind(wx.EVT_CLOSE, self.onClose) self.goBackButton.Bind(wx.EVT_BUTTON, self.goBackButtonClicked) self.id_confirm_button.Bind(wx.EVT_BUTTON, self.idConfirmButtonClicked) self.id_input_box.Bind(wx.EVT_TEXT, self.textInputedOnId) self.pw_input_box.Bind(wx.EVT_TEXT, self.textInputedOnPw) self.pw_re_input_box.Bind(wx.EVT_TEXT, self.textInputedOnRePw) self.account_repair_question_choice.Bind(wx.EVT_CHOICE, self.choiced) self.sign_up_button.Bind(wx.EVT_BUTTON, self.signUpButtonClicked) self.accountManager = AccountManager() self.sQuestionNum = 0 self.dbManager = DbManager() self.correctSymbolPng = wx.Image('tick.png', wx.BITMAP_TYPE_ANY) self.correctSymbolPng.Rescale(32, 32) self.correctSymbolPng = self.correctSymbolPng.ConvertToBitmap() self.incorrectSymbolPng = wx.Image('close.png', wx.BITMAP_TYPE_ANY) self.incorrectSymbolPng.Rescale(32, 32) self.incorrectSymbolPng = self.incorrectSymbolPng.ConvertToBitmap() self.pw_confirm_img.SetBitmap(self.incorrectSymbolPng) self.idFlag = -1 def __del__(self): pass # Virtual event handlers, overide them in your derived class def onClose(self, event): self.dbManager.closeDb() self.Destroy() sys.exit() def goBackButtonClicked(self, event): if self.IsMaximized(): frameSize = 'max' else: frameSize = self.GetSize() frame1 = StartMenu(parent=None, size=frameSize) frame1.Show(True) self.Show(False) def idConfirmButtonClicked(self, event): allId = self.dbManager.readAllId() id = (self.id_input_box.GetValue(), ) self.idFlag = False if not (id in allId): self.idFlag = True if self.idFlag: wx.MessageBox(f"'{id[0]}': 사용가능한 아이디 입니다.") else: wx.MessageBox(f"'{id[0]}': 사용불가능한 아이디 입니다.") def textInputedOnId(self, event): self.idFlag = -1 def textInputedOnPw(self, event): pw = self.pw_input_box.GetValue() self.pwFollowRule = True if len(pw) < 9: self.pwFollowRule = False elif re.findall( '[a-zA-Z0-9]+', pw )[0] != pw: # re에서 영어, 숫자만 찾기. 만약 다른 문자가 있다면 중간에 끊김 -> 본래 문자열과 달라짐 -> 구별 가능. self.pwFollowRule = False elif len(re.findall('[a-zA-Z]', pw)) == 0: self.pwFollowRule = False elif len(re.findall('\d', pw)) == 0: self.pwFollowRule = False if self.pwFollowRule: self.pw_confirm_img.SetBitmap(self.correctSymbolPng) else: self.pw_confirm_img.SetBitmap(self.incorrectSymbolPng) def textInputedOnRePw(self, event): self.pwFlag = self.pw_input_box.GetValue( ) == self.pw_re_input_box.GetValue() if self.pwFlag: self.re_pw_correct_text.SetLabel("비밀번호가 일치합니다!") else: self.re_pw_correct_text.SetLabel("비밀번호가 일치하지 않습니다.") def choiced(self, event): self.sQuestionNum = self.account_repair_question_choice.GetSelection() print(self.sQuestionNum) return self.sQuestionNum def signUpButtonClicked(self, event): if self.idFlag == -1: wx.MessageBox("아이디 중복확인 해주세요!") try: if re.findall('[a-zA-Z0-9]+', self.id_input_box.GetValue() )[0] != self.id_input_box.GetValue(): wx.MessageBox("이 아이디는 사용할 수 없습니다(영어 대소문자,숫자로 이루어지지 않음)") self.idFlag = False except: if len( re.findall('[^a-zA-Z0-9]+', self.id_input_box.GetValue())[0]) > 0: wx.MessageBox("이 아이디는 사용할 수 없습니다(영어 대소문자,숫자로 이루어지지 않음)") self.idFlag = False else: raise BaseException if not (self.id_input_box.GetValue() == None and self.pw_input_box.GetValue() == None and self.answer_input_box.GetValue() == None): if self.idFlag == True and self.pwFlag == True and self.pwFollowRule == True: loginSuccess = self.accountManager.registerUser( self.id_input_box.GetValue(), self.pw_input_box.GetValue(), self.sQuestionNum, self.answer_input_box.GetValue()) if loginSuccess: wx.MessageBox( f"회원가입 성공! 아이디는 '{self.id_input_box.GetValue()}'") if self.IsMaximized(): frameSize = 'max' else: frameSize = self.GetSize() frame1 = DiaryMainMenu(parent=None, size=frameSize, userId=self.id_input_box.GetValue()) frame1.Show(True) self.Show(False) else: wx.MessageBox(f"회원가입 실패ㅜㅜ") else: wx.MessageBox('공란이 있으면 안됨') return self.id_input_box.GetValue(), self.pw_input_box.GetValue( ), self.sQuestionNum, self.answer_input_box.GetValue()
def __init__(self, parent, size): wx.Frame.__init__(self, parent, id=wx.ID_ANY, title=wx.EmptyString, pos=wx.DefaultPosition, size=wx.Size(500, 300), style=wx.DEFAULT_FRAME_STYLE & ~(wx.RESIZE_BORDER | wx.MAXIMIZE_BOX)) self.SetSizeHints(wx.DefaultSize, wx.DefaultSize) gSizer2 = wx.GridSizer(0, 2, 0, 0) bSizer7 = wx.BoxSizer(wx.VERTICAL) self.m_panel6 = wx.Panel(self, wx.ID_ANY, wx.DefaultPosition, wx.DefaultSize, wx.TAB_TRAVERSAL) gSizer7 = wx.GridSizer(0, 2, 0, 0) bSizer17 = wx.BoxSizer(wx.VERTICAL) self.goBackButton = wx.Button(self.m_panel6, wx.ID_ANY, u"뒤로가기", wx.DefaultPosition, wx.DefaultSize, 0) bSizer17.Add(self.goBackButton, 0, wx.ALL, 5) gSizer7.Add(bSizer17, 1, wx.EXPAND, 5) bSizer18 = wx.BoxSizer(wx.VERTICAL) self.id_confirm_button = wx.Button(self.m_panel6, wx.ID_ANY, u"ID중복확인", wx.DefaultPosition, wx.DefaultSize, 0) bSizer18.Add(self.id_confirm_button, 0, wx.ALL | wx.ALIGN_CENTER_HORIZONTAL, 5) gSizer7.Add(bSizer18, 1, wx.EXPAND, 5) self.m_panel6.SetSizer(gSizer7) self.m_panel6.Layout() gSizer7.Fit(self.m_panel6) bSizer7.Add(self.m_panel6, 0, wx.ALL | wx.EXPAND, 5) self.m_panel5 = wx.Panel(self, wx.ID_ANY, wx.DefaultPosition, wx.DefaultSize, wx.TAB_TRAVERSAL) gSizer5 = wx.GridSizer(0, 2, 0, 0) bSizer13 = wx.BoxSizer(wx.VERTICAL) self.id_input_text = wx.StaticText(self.m_panel5, wx.ID_ANY, u"ID", wx.DefaultPosition, wx.DefaultSize, 0) self.id_input_text.Wrap(-1) bSizer13.Add(self.id_input_text, 0, wx.ALL | wx.EXPAND, 5) self.id_input_box = wx.TextCtrl(self.m_panel5, wx.ID_ANY, wx.EmptyString, wx.DefaultPosition, wx.DefaultSize, 0) bSizer13.Add(self.id_input_box, 0, wx.ALL | wx.EXPAND, 5) self.pw_input_text = wx.StaticText(self.m_panel5, wx.ID_ANY, u"비밀번호", wx.DefaultPosition, wx.DefaultSize, 0) self.pw_input_text.Wrap(-1) bSizer13.Add(self.pw_input_text, 0, wx.ALL | wx.EXPAND, 5) self.pw_input_box = wx.TextCtrl(self.m_panel5, wx.ID_ANY, wx.EmptyString, wx.DefaultPosition, wx.DefaultSize, wx.TE_PASSWORD) bSizer13.Add(self.pw_input_box, 0, wx.ALL | wx.EXPAND, 5) self.pw_re_input_text = wx.StaticText(self.m_panel5, wx.ID_ANY, u"비밀번호 재입력", wx.DefaultPosition, wx.DefaultSize, 0) self.pw_re_input_text.Wrap(-1) bSizer13.Add(self.pw_re_input_text, 0, wx.ALL | wx.EXPAND, 5) self.pw_re_input_box = wx.TextCtrl(self.m_panel5, wx.ID_ANY, wx.EmptyString, wx.DefaultPosition, wx.DefaultSize, wx.TE_PASSWORD) bSizer13.Add(self.pw_re_input_box, 0, wx.ALL | wx.EXPAND, 5) gSizer5.Add(bSizer13, 1, wx.EXPAND, 5) bSizer15 = wx.BoxSizer(wx.VERTICAL) self.pw_check_text = wx.StaticText( self.m_panel5, wx.ID_ANY, u"id,비밀번호 둘다\n영어 대소문자, \n숫자만 가능\n\n비밀번호는\n10자 이상\n영어,숫자 필수", wx.DefaultPosition, wx.DefaultSize, 0) self.pw_check_text.Wrap(-1) bSizer15.Add(self.pw_check_text, 1, wx.ALL | wx.EXPAND, 5) self.pw_confirm_img = wx.StaticBitmap(self.m_panel5, wx.ID_ANY, wx.NullBitmap, wx.DefaultPosition, wx.DefaultSize, 0) bSizer15.Add(self.pw_confirm_img, 0, wx.ALL | wx.ALIGN_CENTER_HORIZONTAL, 5) bSizer15.Add((0, 0), 1, wx.EXPAND, 5) gSizer5.Add(bSizer15, 1, wx.EXPAND, 5) self.m_panel5.SetSizer(gSizer5) self.m_panel5.Layout() gSizer5.Fit(self.m_panel5) bSizer7.Add(self.m_panel5, 1, wx.EXPAND | wx.ALL, 5) self.re_pw_correct_text = wx.StaticText(self, wx.ID_ANY, wx.EmptyString, wx.DefaultPosition, wx.DefaultSize, 0) self.re_pw_correct_text.Wrap(-1) bSizer7.Add(self.re_pw_correct_text, 0, wx.ALL, 5) gSizer2.Add(bSizer7, 1, wx.EXPAND | wx.RIGHT, 5) bSizer8 = wx.BoxSizer(wx.VERTICAL) self.account_repair_question_text = wx.StaticText( self, wx.ID_ANY, u"보안질문", wx.DefaultPosition, wx.DefaultSize, 0) self.account_repair_question_text.Wrap(-1) bSizer8.Add(self.account_repair_question_text, 0, wx.ALL | wx.EXPAND, 5) account_repair_question_choiceChoices = [ u"가장 아끼는 물건은?", u"가장 좋아했던 선생님 성함은?", u"가장 감명깊게 읽은 책은?", u"가장 어려웠던 책은?" ] self.account_repair_question_choice = wx.Choice( self, wx.ID_ANY, wx.DefaultPosition, wx.DefaultSize, account_repair_question_choiceChoices, 0) self.account_repair_question_choice.SetSelection(0) bSizer8.Add(self.account_repair_question_choice, 0, wx.ALL | wx.EXPAND, 5) self.answer_text = wx.StaticText(self, wx.ID_ANY, u"답변", wx.DefaultPosition, wx.DefaultSize, 0) self.answer_text.Wrap(-1) bSizer8.Add(self.answer_text, 0, wx.ALL | wx.EXPAND, 5) self.answer_input_box = wx.TextCtrl(self, wx.ID_ANY, wx.EmptyString, wx.DefaultPosition, wx.DefaultSize, 0) bSizer8.Add(self.answer_input_box, 0, wx.ALL | wx.EXPAND, 5) self.sign_up_button = wx.Button(self, wx.ID_ANY, u"회원가입", wx.DefaultPosition, wx.DefaultSize, 0) bSizer8.Add(self.sign_up_button, 0, wx.ALL | wx.ALIGN_CENTER_HORIZONTAL, 5) gSizer2.Add(bSizer8, 1, wx.EXPAND, 5) self.SetSizer(gSizer2) self.Layout() self.Centre(wx.BOTH) # Connect Events self.Bind(wx.EVT_CLOSE, self.onClose) self.goBackButton.Bind(wx.EVT_BUTTON, self.goBackButtonClicked) self.id_confirm_button.Bind(wx.EVT_BUTTON, self.idConfirmButtonClicked) self.id_input_box.Bind(wx.EVT_TEXT, self.textInputedOnId) self.pw_input_box.Bind(wx.EVT_TEXT, self.textInputedOnPw) self.pw_re_input_box.Bind(wx.EVT_TEXT, self.textInputedOnRePw) self.account_repair_question_choice.Bind(wx.EVT_CHOICE, self.choiced) self.sign_up_button.Bind(wx.EVT_BUTTON, self.signUpButtonClicked) self.accountManager = AccountManager() self.sQuestionNum = 0 self.dbManager = DbManager() self.correctSymbolPng = wx.Image('tick.png', wx.BITMAP_TYPE_ANY) self.correctSymbolPng.Rescale(32, 32) self.correctSymbolPng = self.correctSymbolPng.ConvertToBitmap() self.incorrectSymbolPng = wx.Image('close.png', wx.BITMAP_TYPE_ANY) self.incorrectSymbolPng.Rescale(32, 32) self.incorrectSymbolPng = self.incorrectSymbolPng.ConvertToBitmap() self.pw_confirm_img.SetBitmap(self.incorrectSymbolPng) self.idFlag = -1
class Bot(object): """description of class""" def __init__(self): token = os.environ.get('ALTER_ME_TOKEN') message_queue = MessageQueue(all_burst_limit=29, all_time_limit_ms=1017) request = Request(con_pool_size=8) bot = MessageQueueBot(token, request=request, message_queue=message_queue) self._updater = Updater(bot=bot) self._dispatcher = self._updater.dispatcher self._db_manager = DbManager() self._localizer = Localizer(self._db_manager) self._health_checker = HealthChecker(self._updater.bot, self._db_manager) self._health_check_interval = int(os.environ.get('HEALTH_CHECK_INTERVAL')) self.__setup_command_handlers() self.__setup_callback_query_handlers() self.__setup_message_handlers() self.__setup_error_handler() def start(self): logging.info('Starting the bot...') self._updater.start_polling() self.__perform_health_check() logging.info('Bot is started') self._updater.idle() def stop(self): logging.info('Stopping the bot...') self._updater.stop() logging.info('Bot is stopped') def error_callback(self, bot, update, error): try: logging.error('Error occurred: %s' % error.message) raise error except ChatMigrated as e: self._db_manager.update_chat_id(update.message.chat_id, e.new_chat_id) except TelegramError as e: logging.error('Unknown error: %s' % e.message) def __perform_health_check(self): self._health_checker.perform_health_check() timer = threading.Timer(self._health_check_interval, self.__perform_health_check) timer.start() def __setup_error_handler(self): self._dispatcher.add_error_handler(self.error_callback) def __setup_command_handlers(self): handlers = [ AliasCommandHandler(self._db_manager, self._localizer), ListCommandHandler(self._db_manager, self._localizer), HelpCommandHandler(self._localizer), RemoveCommandHandler(self._db_manager, self._localizer), ClearCommandHandler(self._db_manager, self._localizer), OnCommandHandler(self._db_manager, self._localizer), OffCommandHandler(self._db_manager, self._localizer), LangCommandHandler(self._db_manager, self._localizer) ] for handler in handlers: self._dispatcher.add_handler(handler) def __setup_message_handlers(self): handlers = [ AliasMessageHandler(self._db_manager) ] for handler in handlers: self._dispatcher.add_handler(handler) def __setup_callback_query_handlers(self): handlers = [ LanguageCallbackQueryHandler(self._db_manager, self._localizer) ] for handler in handlers: self._dispatcher.add_handler(handler)
class WriteDiaryMenu(wx.Frame): def __init__(self, parent, mode, size, userId, diaryContent=None, todayFeel=5, todayThoughts=None): if size == 'max': wx.Frame.__init__(self, parent, id=wx.ID_ANY, title=wx.EmptyString, pos=wx.DefaultPosition, size=wx.Size(500, 300), style=wx.DEFAULT_FRAME_STYLE | wx.TAB_TRAVERSAL) self.Maximize() else: wx.Frame.__init__(self, parent, id=wx.ID_ANY, title=wx.EmptyString, pos=wx.DefaultPosition, size=wx.Size(size), style=wx.DEFAULT_FRAME_STYLE | wx.TAB_TRAVERSAL) self.SetSizeHints(wx.DefaultSize, wx.DefaultSize) gSizer3 = wx.GridSizer(0, 2, 0, 0) bSizer7 = wx.BoxSizer(wx.VERTICAL) self.go_back_button = wx.Button(self, wx.ID_ANY, u"뒤로가기", wx.DefaultPosition, wx.DefaultSize, 0) bSizer7.Add(self.go_back_button, 0, wx.ALL, 5) if mode == "w": if diaryContent == None: self.diary_input_box = wx.TextCtrl(self, wx.ID_ANY, wx.EmptyString, wx.DefaultPosition, wx.DefaultSize, wx.TE_MULTILINE) else: self.diary_input_box = wx.TextCtrl(self, wx.ID_ANY, u"{0}".format(diaryContent), wx.DefaultPosition, wx.DefaultSize, wx.TE_MULTILINE) else: self.diary_input_box = wx.TextCtrl( self, wx.ID_ANY, u'{0}'.format(diaryContent), wx.DefaultPosition, wx.DefaultSize, wx.TE_MULTILINE | wx.TE_READONLY) bSizer7.Add(self.diary_input_box, 1, wx.ALL | wx.EXPAND, 5) gSizer3.Add(bSizer7, 1, wx.EXPAND, 5) bSizer8 = wx.BoxSizer(wx.VERTICAL) self.m_panel1 = wx.Panel(self, wx.ID_ANY, wx.DefaultPosition, wx.DefaultSize, wx.TAB_TRAVERSAL) bSizer9 = wx.BoxSizer(wx.VERTICAL) self.today_feel_text = wx.StaticText(self.m_panel1, wx.ID_ANY, u"오늘 기분1/5", wx.DefaultPosition, wx.DefaultSize, 0) self.today_feel_text.Wrap(-1) bSizer9.Add(self.today_feel_text, 0, wx.ALL, 5) if mode == 'w': self.today_feel_slider = wx.Slider( self.m_panel1, wx.ID_ANY, todayFeel, 1, 5, wx.DefaultPosition, wx.DefaultSize, wx.SL_HORIZONTAL | wx.SL_SELRANGE | wx.SL_VALUE_LABEL) bSizer9.Add(self.today_feel_slider, 0, wx.ALL | wx.EXPAND, 5) else: self.today_feel_text = wx.StaticText(self.m_panel1, wx.ID_ANY, u"{0}".format(todayFeel), wx.DefaultPosition, wx.DefaultSize, 0) self.today_feel_text.Wrap(-1) bSizer9.Add(self.today_feel_text, 0, wx.ALL, 5) self.m_panel1.SetSizer(bSizer9) self.m_panel1.Layout() bSizer9.Fit(self.m_panel1) bSizer8.Add(self.m_panel1, 0, wx.EXPAND | wx.ALL, 5) self.m_panel2 = wx.Panel(self, wx.ID_ANY, wx.DefaultPosition, wx.DefaultSize, wx.TAB_TRAVERSAL) bSizer10 = wx.BoxSizer(wx.VERTICAL) self.today_thoughts_text = wx.StaticText(self.m_panel2, wx.ID_ANY, u"오늘 생각한것", wx.DefaultPosition, wx.DefaultSize, 0) self.today_thoughts_text.Wrap(-1) bSizer10.Add(self.today_thoughts_text, 0, wx.ALL, 5) if mode == 'w': if todayThoughts == None: self.today_thoughts_input_box = wx.TextCtrl( self.m_panel2, wx.ID_ANY, wx.EmptyString, wx.DefaultPosition, wx.DefaultSize, wx.TE_MULTILINE) else: self.today_thoughts_input_box = wx.TextCtrl( self.m_panel2, wx.ID_ANY, u"{0}".format(todayThoughts), wx.DefaultPosition, wx.DefaultSize, wx.TE_MULTILINE) else: self.today_thoughts_input_box = wx.TextCtrl( self.m_panel2, wx.ID_ANY, u"{0}".format(todayThoughts), wx.DefaultPosition, wx.DefaultSize, wx.TE_MULTILINE | wx.TE_READONLY) bSizer10.Add(self.today_thoughts_input_box, 1, wx.ALL | wx.EXPAND, 5) self.m_panel2.SetSizer(bSizer10) self.m_panel2.Layout() bSizer10.Fit(self.m_panel2) bSizer8.Add(self.m_panel2, 1, wx.EXPAND | wx.ALL, 5) if mode == 'w': self.save_diary_button = wx.Button(self, wx.ID_ANY, u"일기 저장", wx.DefaultPosition, wx.DefaultSize, 0) bSizer8.Add(self.save_diary_button, 0, wx.ALL | wx.ALIGN_CENTER_HORIZONTAL, 5) self.save_diary_button.Bind(wx.EVT_BUTTON, self.saveButtonClicked) gSizer3.Add(bSizer8, 1, wx.EXPAND, 5) self.SetSizer(gSizer3) self.Layout() self.Centre(wx.BOTH) # Connect Events self.Bind(wx.EVT_CLOSE, self.onClose) self.go_back_button.Bind(wx.EVT_BUTTON, self.goBackButtonClicked) self.dbManager = DbManager() self.WriteDiary = WriteDiary() self.userId = userId def __del__(self): pass # Virtual event handlers, overide them in your derived class def onClose(self, event): self.dbManager.closeDb() self.Destroy() sys.exit() def goBackButtonClicked(self, event): if self.IsMaximized(): frameSize = 'max' else: frameSize = self.GetSize() frame1 = DiaryMainMenu(parent=None, size=frameSize, userId=self.userId) frame1.Show(True) self.Show(False) def saveButtonClicked(self, event): self.WriteDiary.saveDiaryTxt(arrow.now().date(), self.diary_input_box.GetValue()) self.WriteDiary.saveTodayThoughtsTxt( arrow.now().date(), self.today_thoughts_input_box.GetValue()) self.dbManager.saveDiaryInfo(arrow.now().date(), str(arrow.now().time())[:5], self.today_feel_slider.GetValue(), self.today_thoughts_input_box.GetValue(), self.userId) wx.MessageBox("일기 저장 성공!") if self.IsMaximized(): frameSize = 'max' else: frameSize = self.GetSize() frame1 = DiaryMainMenu(parent=None, size=frameSize, userId=self.userId) frame1.Show(True) self.Show(False)
def initDbCollections(fromApi='Musixmatch'): ''' Initialize MongoDb collection with genres and tracks foreach genre :param fromApi: choose the APIs from which to retrieve the genres (available: MusixMatch) :return: ''' if (fromApi == 'Musixmatch'): client = Musixmatch(__musixmatchAPIKey) # Genres if DbManager.getCollectionGenre().count() == 0: print("Init data genres...\n") count_add = 0 list_genres = client.genres_get( )["message"]["body"]["music_genre_list"] for g in list_genres: count_add += 1 genre = g["music_genre"] genre["localName"] = DbManager.fromServerToLocalGenreName( genre["music_genre_vanity"]) DbManager.getCollectionGenre().insert_one(genre) print("√ Added {0} genre/s".format(count_add)) else: print("- No genres added, {0} on database".format( DbManager.getCollectionGenre().count())) # Music if DbManager.getCollectionMusic().count() == 0: print("Init data music...") count_add = 0 if len(__map_genres_id.items()) == 0: print("You have to a hashmap {genre:id,..}") for keyGen, valGen in __map_genres_id.items(): count_item = 0 for page_count in range(1, 3): ''' list_tracks = client.chart_tracks_get(f_has_lyrics=False, page=page_count, page_size=100, country=country)["message"]["body"][ "track_list"] ''' list_tracks = client.track_by_genre_id( page_size=100, page=page_count, f_music_genre_id=valGen )["message"]["body"]["track_list"] for t in list_tracks: current = t["track"] primary_genres = list() exist = {} exist_genre_locally = False for pg in current["primary_genres"][ "music_genre_list"]: music_genre = pg["music_genre"] music_genre_local = DbManager.fromServerToLocalGenreName( music_genre["music_genre_vanity"]) if DbManager.fromServerToLocalGenreName(music_genre["music_genre_vanity"]) \ and (music_genre_local not in exist): music_genre['localName'] = music_genre_local primary_genres.append(music_genre) exist[music_genre_local] = True exist_genre_locally = True # Add track to mongoDb only if exist if exist_genre_locally: count_add += 1 count_item += 1 DbManager.getCollectionMusic().insert_one({ "artist_name": current["artist_name"], "track_name": current["track_name"], "primary_genres": primary_genres, "instrumental": current["instrumental"], "track_length": current["track_length"] if "track_length" in current else 0 }) print("√ Added {0} track/s for genre {1}".format( count_item, keyGen)) if count_add > 0: print("√ Added {0} track/s".format(count_add)) else: print("- No music added, {0} on database".format( DbManager.getCollectionMusic().count())) else: print("This API is not available\n") return 0
def __init__(self): self.dm = DbManager()