Example #1
0
    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
Example #2
0
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)
Example #5
0
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")
Example #6
0
    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()
Example #7
0
    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']
Example #8
0
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)
Example #9
0
    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']
Example #10
0
 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()
Example #11
0
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)
Example #12
0
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))
Example #13
0
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()
Example #14
0
    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
Example #17
0
    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
Example #18
0
    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()
Example #19
0
    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)
Example #20
0
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)
Example #21
0
 def onClose(self, event):
     a = DbManager()
     a.closeDb()
     self.Destroy()
     sys.exit()
Example #22
0
    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
Example #23
0
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]
        }
Example #24
0
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)
Example #25
0
 def __init__(self):
     self.db = DbManager()
     self.db.mysqlConnect()
     self.camelUtils = CamelUtils()
Example #26
0
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)
Example #27
0
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
Example #28
0
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.
Example #29
0
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():
Example #31
0
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
Example #32
0
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)
Example #33
0
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()
Example #34
0
    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
Example #35
0
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)
Example #36
0
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)
Example #37
0
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
Example #38
0
 def __init__(self):
     self.dm = DbManager()