コード例 #1
0
class Model():
    def __init__(self):

        self.crud = Crud('localhost', 'andrew', 'andrew', 'verses')

    def __del__(self):
        self.crud.closeConnection()

#    получает текст стишка по заданному ID

    def getVerseContent(self, idVal):

        self.crud.sql = '''SELECT verse_content FROM `verses_list` WHERE `id`={0}'''.format(
            idVal)
        verseContent = self.crud.readAct()

        return verseContent[0]


#    меняет содержание стишка в БД

    def changeVerseContent(self, idVal, verseContent):

        self.crud.sql = '''UPDATE verses_list SET verse_content='{1}' 
        WHERE id={0}'''.format(idVal, verseContent)
        self.crud.updateAct()
コード例 #2
0
class Model():
    def __init__(self):

        self.crud = Crud('localhost', 'andrew', 'andrew', 'verses')
        self.existTable()

    def __del__(self):
        self.crud.closeConnection()

    def checkContactTable(self):

        self.crud.sql = 'SHOW TABLE STATUS LIKE \'contacts\''
        contacts = self.crud.readAct()
        if len(contacts) == 0:
            print('Нету таблицы с контактами!')
            return False

        else:
            print('Есть такая таблица')
            return True

    def createContactTable(self):

        self.crud.sql = '''CREATE TABLE contacts (
                            id INT NOT NULL AUTO_INCREMENT,
                            PRIMARY KEY(id),
                            name VARCHAR(40) NOT NULL,
                            email VARCHAR(40) NOT NULL,
                            quantity_per_day INT NOT NULL,
                            intervals INT NOT NULL,
                            authors TEXT NOT NULL
                            );'''

        self.crud.createAct()

    def existTable(self):

        if self.checkContactTable() == False:
            self.createContactTable()

    def addIntoContacts(self, name, email, quantity_per_day, intervals,
                        authors):

        authors = ','.join(authors)

        self.crud.sql = '''INSERT INTO contacts (name, email, quantity_per_day,
                         intervals, authors) VALUES (\'{0}\',\'{1}\', {2}, {3},
                         \'{4}\')'''.format(name, email, quantity_per_day,
                                            intervals, authors)

        self.crud.createAct()

    def editContacts(self, id, name, qpd, authors):

        authors = ','.join(authors)
        self.crud.sql = '''UPDATE contacts SET name='{0}',quantity_per_day='{1}',
                         authors='{2}' WHERE id=\'{3}\''''.format(
            name, qpd, authors, id)

        self.crud.updateAct()

    def removeFromContacts(self, id):

        id = int(id)
        self.crud.sql = 'DELETE FROM contacts WHERE id={0}'.format(id)
        self.crud.deleteAct()

    def zeroizeQpd(self, id):

        id = int(id)
        self.crud.sql = ("UPDATE contacts SET quantity_per_day=0 "
                         "WHERE id={0}".format(id))
        self.crud.updateAct()
コード例 #3
0
class Rating():
    def __init__(self):

        self.crud = Crud('localhost', 'andrew', 'andrew', 'verses')
        self.getFollowers()
        self.updateFollowers()

    # Подсчитывает количество подписчиков приходящегося на каждого автора.
    def getFollowers(self):

        # Получить всех подписчиков
        self.crud.sql = "SELECT authors FROM contacts"
        authors = self.crud.readAct()
        temp_list = []

        # Создадим глобальный список в где один элемен - один автор.
        for author_group in authors:
            temp_list.append(author_group[0])

        all_authors = ','.join(temp_list)
        all_authors = all_authors.split(',')

        # Теперь в authors_list - словарь.
        # Ключи - это имена авторов, значения- подпсичики
        self.authors_list = collections.Counter(all_authors)
        self.followersInAll()

    # Обновляет таблицу poets. Пишет актуальное количество подписчиков в
    # поле followers, и рейтинг, который высчитываеться исходя из числа
    # подписчиков.
    def updateFollowers(self):

        self.authors_list = dict(self.authors_list)
        for key in self.authors_list:
            try:
                rating = self.calculateRating(self.authors_list[key])
                self.crud.sql = '''UPDATE poets SET followers={0}
                                 WHERE id={1}'''.format(
                    self.authors_list[key], key)
                self.crud.updateAct()

                self.crud.sql = '''UPDATE poets SET rating={0}
                                 WHERE id={1}'''.format(rating, key)
                self.crud.updateAct()

            except Exception:
                print('Блеать!')

    # Подсчитывает сколько подписчиков всего, с учетом задействованных авторов
    def followersInAll(self):

        followers_in_all = 0
        for key in self.authors_list:
            try:
                followers_in_all = followers_in_all + int(
                    self.authors_list[key])
            except TypeError:
                print('Блеать!')

        self.followers_in_all = followers_in_all

    # Получает число подписчиков и вычисляет рейтинг по несложной формуле.
    # Возвращает рейтинг в %
    def calculateRating(self, followers):

        rating = (followers / self.followers_in_all) * 100
        rating = round(rating, 2)

        return rating

    def __del__(self):

        self.crud.closeConnection()
コード例 #4
0
class TimeMarks(Logs):
    def __init__(self):

        #Проверить наличие time_marks
        self.checkTimeMarksExist()
        self.clearLogFile()
        #Пробуем разблокировать очередь, если прошло 20 часов
        self.unlockQueue()

    def __del__(self):

        self.crud.closeConnection()

    #Проверяет наличие таблицы time_marks. Если ее нет, то создает.
    #В противном случае проходит мимо
    def checkTimeMarksExist(self):

        self.crud = Crud('localhost', 'andrew', 'andrew', 'verses')
        self.crud.sql = 'SHOW TABLE STATUS LIKE \'time_marks\''
        result = self.crud.readAct()

        # Таблицы нету, её прийдеться создать
        if len(result) == 0:
            print('Нету таблицы временных меток! Щас создадим')
            #Cоздадим таблицу time_marks
            self.crud.sql = '''CREATE TABLE time_marks(
                            name VARCHAR(40) NOT NULL,
                            last_time INT NOT NULL,
                            locked BOOLEAN NOT NULL
                            );'''
            result = self.crud.createAct()
            #наполним значениями
            self.crud.sql = ('INSERT INTO time_marks (name,last_time,locked)'
                             'VALUES (\'queue\',{0},false)'.format(
                                 self.curTime))
            self.crud.createAct()
            self.crud.sql = ('INSERT INTO time_marks (name,last_time,locked)'
                             'VALUES (\'log\',{0},false)'.format(self.curTime))
            self.crud.createAct()

        #В противном случае можно завязывать с этапом создания time_marks
        else:
            print('time_marks?! Походу есть такая таблица!')

    # Получает значени блокировки таблицы queue
    def getQueueLock(self):

        self.crud.sql = 'SELECT locked FROM time_marks WHERE name=\'queue\''
        locked = self.crud.readAct()[0]
        locked = locked[0]

        return locked

    # Принимает lockedval. Это булево значение в числовом виде (0 или 1).
    # На основе lockedval ставит бит доступа на запись в таблицу Queue.
    def setQueueLock(self, lockedval):

        self.crud.sql = ('UPDATE time_marks SET locked=\'{0}\' WHERE '
                         'name=\'queue\''.format(lockedval))
        self.crud.updateAct()

        self.crud.sql = ('SELECT locked FROM time_marks WHERE '
                         'name=\'queue\'')
        locked = (self.crud.readAct())[0]
        print('Значение locked было изменено. Текущее значение'
              ' {0}'.format(locked))

    # Снимает блокировку на запись таблицы queue. Делает это только при
    # случае если минуло значение времени allowed_time
    def unlockQueue(self):

        allowed_time = 72000  #Эквивалентно 20-ти часам

        self.crud.sql = (
            'SELECT last_time FROM time_marks WHERE name=\'queue\'')
        last_time = self.crud.readAct()[0][0]

        elapsed = self.curTime - last_time
        print('Прошло времени - {0}, а нужно {1} для сбрасывания '
              'блокировки'.format(elapsed, allowed_time))

        if elapsed >= allowed_time:
            #Снять блокировку с queue
            self.setQueueLock(0)
            # выставим актуальное время
            self.setActualQueueTime()

        else:
            print('Еще рано сбрасывать блокировку')

    # Выставляет текущее время в таблице временных меток для строки queue
    def setActualQueueTime(self):

        actual_time = self.curTime
        self.crud.sql = ('UPDATE time_marks SET last_time=\'{0}\' WHERE '
                         'name=\'queue\''.format(actual_time))
        self.crud.updateAct()

    # Выставляет текущее время в таблице временных меток для строки log
    def setActualLogTime(self):

        actual_time = self.curTime
        self.crud.sql = ('UPDATE time_marks SET last_time=\'{0}\' WHERE '
                         'name=\'log\''.format(actual_time))
        self.crud.updateAct()
コード例 #5
0
class FillAuthors():
    def __init__(self):

        self.crud = Crud('localhost', 'andrew', 'andrew', 'verses')
        self.gatAllAuthors()
        self.getOneLineAuthors()

    def __del__(self):

        self.crud.closeConnection()

    # Парсит автора. Получает строку типа Александр Сергеевич Пушкин.
    # Возвращает словарь: authors['name':Александр, 'patronymic':Сергеевич,
    # 'lastname':Пушкин]
    def parseAuthors(self, string):

        names = string.split(' ')
        temp_names = []
        # Вырежем пробелы вокруг строки
        for x in names:
            temp_names.append(x.strip(' '))
        names = temp_names

        names_number = len(names)

        # Если тольоко фамилия
        if names_number == 1:

            author = {'lastname': string, 'name': '', 'patronymic': ''}

        # Если фамилия имя
        elif names_number == 2:

            author = {'lastname': names[1], 'name': names[0], 'patronymic': ''}

        # Если фамилия, имя, отчество
        elif names_number == 3:

            author = {
                'lastname': names[2],
                'name': names[0],
                'patronymic': names[1]
            }

        return author

    # Получает список всех авторов и ложит их в lst_distinct
    def gatAllAuthors(self):

        self.crud.sql = 'SELECT DISTINCT author FROM verses_list'
        self.lst_distinct = self.crud.readAct()

        authors_list = []
        # Пошел процесс преобразования фамилий
        for elem in self.lst_distinct:

            self.verseslist_IN_poets(elem[0])

    # Соединяет список всех авторов в одну строку
    def getOneLineAuthors(self):

        self.authors_line = []
        for elem in self.lst_distinct:

            self.authors_line.append(elem[0])

    # Проверяет наличие поэта в poets. Если такового нету - добавляет его
    def verseslist_IN_poets(self, raw_author):

        author = self.parseAuthors(raw_author)
        self.crud.sql = '''SELECT * FROM poets WHERE name=\'{0}\' and
                         patronymic=\'{1}\' and lastname=\'{2}\''''.format(
            author['name'], author['patronymic'], author['lastname'])
        res = self.crud.readAct()
        if len(res) == 0:
            print('Автора {0} нету в списке!'.format(author['lastname']))
            id = self.addAuthorIntoPoets(author)
            self.updateAuthorID(id, raw_author)

    # Получает список authors=[имя, отчество, фамилия]
    # Приводит в соответстиве таблицу poets. Если автор есть в poets, но его
    # нету в verses_list - этот автор удаляеться.
    def poets_IN_verseslist(self, author):

        lst_distinct = ';'.join(self.authors_line)
        # author - это кортеж, поэтому создадим новую переменную
        lastname = author[2]

        # Если такая фамилия есть то поищем подетальней
        if lst_distinct.count(lastname) != 0:

            # Проекранируем спецсимволы
            lastname = lastname.replace('(', '\(')
            lastname = lastname.replace(')', '\)')
            pattern = r'{0}\s*{1}\s*{2}'.format(author[0], author[1], lastname)
            # Ищем по всем имеющимся параметрам. Имя, Отчество, Фамилия
            res = re.search(pattern, lst_distinct)
            if res == None:
                print('Такого автора действительно нету в verses_list'
                      ' {0} {1} {2}'.format(author[0], author[1], lastname))
                # Молча удаляем лишнего поэта
                self.crud.sql = ("DELETE FROM poets WHERE name='{0}' and "
                                 "patronymic='{1}' and lastname='{2}'").format(
                                     author[0], author[1], author[2])
                self.crud.deleteAct()

        # Нету автора с такой фамилией? Смело можно удалять.
        else:
            print('Какой-то левый автор, нету его в verses_list'
                  ' {0}'.format(lastname))
            self.crud.sql = ("DELETE FROM poets WHERE name='{0}' and "
                             "patronymic='{1}' and lastname='{2}'").format(
                                 author[0], author[1], author[2])
            self.crud.deleteAct()

    # Непосредственно доавляет автора в poets table. Возвращет свеже присвоенное
    # id для данного поэта
    def addAuthorIntoPoets(self, author):

        self.crud.sql = '''INSERT INTO poets (name, patronymic, lastname)
                      VALUES (\'{0}\',\'{1}\',\'{2}\')'''.format(
            author['name'], author['patronymic'], author['lastname'])
        self.crud.createAct()

        self.crud.sql = '''SELECT id FROM poets WHERE name=\'{0}\' and
                         patronymic=\'{1}\' and lastname=\'{2}\''''.format(
            author['name'], author['patronymic'], author['lastname'])

        id = self.crud.readAct()

        return id[0]

    # Обновляет id поэта в verese_list table
    def updateAuthorID(self, id, author):

        self.crud.sql = ('''UPDATE verses_list SET author_id=\'{0}\'
                       WHERE author=\'{1}\''''.format(id, author))
        print('Успешно присовен ID={0:5} автору {1}'.format(id, author))
        self.crud.updateAct()

    # Остюда начинаеться процесс синхронизации поэтов verses_list -> poets
    def synchroPoetryToVerses_list(self):

        self.crud.sql = 'SELECT name, patronymic, lastname FROM poets'
        authors = self.crud.readAct()
        for author in authors:
            self.poets_IN_verseslist(author)