Beispiel #1
0
    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?! Походу есть такая таблица!')
Beispiel #2
0
class Preparing:
    def __init__(self):

        crud = Crud('localhost', 'andrew', 'andrew', 'proxy')
        #Проверить наличие прокси
        self.checkProxiesTable()

    def __del__(self):

        self.crud.closeConnection()

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

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

        # Таблицы нету, её прийдеться создать
        if len(result) == 0:
            print('Нету таблицы с прокси адресами! Щас создадим')
            #Cоздадим таблицу proxies
            self.crud.sql = '''CREATE TABLE proxies (
                             id INT AUTO_INCREMENT NOT NULL PRIMARY KEY,
                             ip_address VARCHAR(20),
                             port SMALLINT, 
                             time INT, 
                             UNIQUE (ip_address));'''
            result = self.crud.createAct()

        #В противном случае можно завязывать с этапом создания proxies
        else:
            print('proxies?! Походу есть такая таблица!')
Beispiel #3
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()
Beispiel #4
0
    def addToList(self):

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

        self.listWidget.setSelectionMode(
            QtGui.QAbstractItemView.MultiSelection)
        for x in self.results[0]:
            self.listWidget.addItems(x)
Beispiel #5
0
    def __init__(self):

        #Удаляем queue
        crud = Crud('localhost', 'andrew', 'andrew', 'verses')
        crud.sql = 'DROP TABLE queue;'
        crud.deleteAct()
        print('Drop\'нули таблицу queue')
        crud.closeConnection()
Beispiel #6
0
    def queueBlocker(self):

        exec_time = self.curTime + 72000
        crud = Crud('localhost', 'andrew', 'andrew', 'verses')
        crud.sql="INSERT INTO queue (name, email, exec_time, verse_id)" \
                 "VALUES (\'{0}\',\'{1}\',\'{2}\',\'{3}\')".format(
                'blocker_queue','none',exec_time,1234567)
        crud.createAct()
        crud.closeConnection()
Beispiel #7
0
    def addRowIntoQueue(self, name, email, exec_time, verse_id):

        # print(' Имя - {0},\n Email - {1},\n exec_time - {2},\n '
        #       'verse_id - {3}\n'.format(name,email,exec_time,verse_id))
        crud = Crud('localhost', 'andrew', 'andrew', 'verses')
        crud.sql="INSERT INTO queue (name, email, exec_time, verse_id) " \
                 "VALUES (\'{0}\',\'{1}\',\'{2}\',\'{3}\')".format(name,
                 email,exec_time,verse_id)
        crud.createAct()
        crud.closeConnection()
Beispiel #8
0
    def checkProxiesTable(self):

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

        # Таблицы нету, её прийдеться создать
        if len(result) == 0:
            print('Нету таблицы с прокси адресами! Щас создадим')
            #Cоздадим таблицу proxies
            self.crud.sql = '''CREATE TABLE proxies (
                             id INT AUTO_INCREMENT NOT NULL PRIMARY KEY,
                             ip_address VARCHAR(20),
                             port SMALLINT, 
                             time INT, 
                             UNIQUE (ip_address));'''
            result = self.crud.createAct()

        #В противном случае можно завязывать с этапом создания proxies
        else:
            print('proxies?! Походу есть такая таблица!')
Beispiel #9
0
class AuthorTable():
    def __init__(self):

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

    def __del__(self):

        self.crud.closeConnection()

    def createPoetsTable(self):

        self.crud.sql = '''CREATE TABLE poets (
                            id INT NOT NULL AUTO_INCREMENT,
                            PRIMARY KEY(id),
                            name VARCHAR(40) NOT NULL,
                            patronymic VARCHAR(40) NOT NULL,
                            lastname VARCHAR(40) NOT NULL,
                            followers INT NOT NULL,
                            rating float NOT NULL
                            );'''

        self.crud.createAct()

    def checkPoetsTable(self):

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

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

    def existTable(self):

        if self.checkPoetsTable() == False:
            self.createPoetsTable()
Beispiel #10
0
    def getWholeVerseData(self, verse_id):
        crud = Crud('localhost', 'andrew', 'andrew', 'verses')
        crud.sql = 'SELECT * FROM verses_list WHERE id=\'{0}\''.format(
            verse_id)
        verse_data = crud.readAct()
        crud.closeConnection()

        return verse_data
Beispiel #11
0
    def canSend(self, id):

        crud = Crud('localhost', 'andrew', 'andrew', 'verses')
        crud.sql = 'SELECT exec_time FROM queue WHERE id=\'{0}\''.format(id)
        exec_time = (crud.readAct())[0][0]
        curTime = round(time.time())
        crud.closeConnection()

        if curTime >= exec_time:
            print(curTime - exec_time)
            return True
        else:
            print(curTime - exec_time)
            return False
Beispiel #12
0
    def getRandVerseID(self, authors):

        # получить случайного автора
        authors = authors.split(',')
        rand_author = (random.choice(authors)).strip()
        print('random author ------ > {0}'.format(rand_author))
        #получить случайный verse_id
        crud = Crud('localhost', 'andrew', 'andrew', 'verses')

        crud.sql = '''SELECT * FROM verses_list WHERE author_id={0}
                    ORDER BY RAND() LIMIT 1'''.format(rand_author)
        #Возвращает кортеж, поэтому прийдеться извлечь ключ
        verse_id = (crud.readAct())[0][0]
        crud.closeConnection()

        return verse_id
Beispiel #13
0
class ProxyAct:
    def __init__(self, ip_address, port):

        self.ip_address = ip_address
        self.port = port
        self.crud = Crud('localhost', 'andrew', 'andrew', 'proxy')

    # проверяет прокси на доступность. Если прокси не рабочий он игнорируеться.
    def checkProxy(self):

        timeout = 10
        result = call(
            'curl -s --connect-timeout {0} -x {1}:{2} http://google.com'.
            format(timeout, self.ip_address, self.port),
            stdout=PIPE,
            shell=True)

        if result == 0:
            print('Всё путем! IP: {0:16} - хороший'.format(self.ip_address))

            return True
        else:
            print('Плохо, не подошел')

            return False

    # добавляет прокси в БД
    def addProxy(self):

        if (self.checkProxy()) == True:

            self.crud.sql = ('''INSERT INTO proxies (ip_address, port, time)
                             VALUES ('{0}', '{1}', '{2}')'''.format(
                self.ip_address, self.port, round(time.time())))
            self.crud.createAct()

    # удатяет прокси из БД. Используеться в основном в случаях если ранее
    # добавленный прокси устарел.
    def deleteProxy(self):

        self.crud.sql = ('DELETE FROM proxies WHERE ip_address=\'{0}\''.format(
            self.ip_address))
        self.crud.deleteAct()

    def __del__(self):

        self.crud.closeConnection()
Beispiel #14
0
    def __init__(self):

        crud = Crud('localhost', 'andrew', 'andrew', 'verses')
        #получить количество элементов queue
        crud.sql = 'SELECT * FROM queue'
        queue = crud.readAct()
        if (len(queue)) >= 1:

            # По-тихоньку отправляем письма из очереди
            for x in queue:

                if self.canSend(x[0]) == True:
                    self.sender(x)
                    # Если не одного элемента не осталось - завершаем цикл
                else:
                    'Прийдеться подождать с отправкой сообщений...'
        else:
            print('Очередь на данный момент пустая!')

        crud.closeConnection()
#!/usr/bin/python3

#        отступы пробелами
#        by Andrew Sotnikov aka Luca Brasi,
#        e-mail: [email protected]
#        --------------

#        clearing cash in DB and removing log file_as_well

from saumysql import Crud
from subprocess import call

passwd = "fearofthedark"
logfile = "/var/log/andrew/good_verse_mailer.log"

#removing temporary tables from DataBase
crud = Crud('localhost', 'andrew', 'andrew', 'verses')
crud.sql = ("DROP TABLE queue, time_marks")
crud.deleteAct()

#clearing logs
call("echo \"{0}\" | sudo -S rm {1}".format(passwd, logfile),
     shell=True,
     universal_newlines=True)
class RatingFile():

    output_file = '/srv/http/poetry.com/authors_rating_file.html'
    top = 15

    def __init__(self):
        self.getTopList()
        self.makeFile()
        print(
            'Шикарно. Сфоримирован список авторов. Найти его можно по адресу '
            '- {0}'.format(self.output_file))

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

        self.crud = Crud('localhost', 'andrew', 'andrew', 'verses')
        self.crud.sql = '''SELECT lastname, name, patronymic, rating FROM poets
                         ORDER BY rating DESC LIMIT {0}'''.format(self.top)
        self.authors = self.crud.readAct()

    # Запускает на исполнение создание файла авторов
    def makeFile(self):

        self.f = open(self.output_file, 'w')
        self.doHeader()
        self.doTable()
        self.doFooter()
        self.f.close()

    # Фомирует хэдер файла
    def doHeader(self):

        self.f.write('''
        <!DOCTYPE html>
        <html>
        <head>
        <meta charset="UTF-8">
        </head>
        <body>
        <table>
        <title>Full poetry list</title>
        <style type="text/css">
        table {margin-left: auto;margin-right: auto; margin-top: 5%}
        td {padding: 5px 30px; font-size: 14pt}
        </style>
        ''')

    # Формирует футер
    def doFooter(self):

        self.f.write('''
        </table>
        </body>
        </html>
        ''')

    # Формирует таблицу с авторами. С учетом ранее полученных предпочтений
    # (сортировки и выводимых полей)
    def doTable(self):

        self.f.write('''<tr><td colspan="3" style='text-align:center'>
                        <b>ТОП-{0} АВТОРОВ</b></td></tr>
                        <tr><td style='height:90px'>№</td><td>автор</td>
                        <td>рейтинг</td></tr>
                        '''.format(self.top))
        i = 1
        for row in self.authors:

            self.f.write(
                '''<tr><td>{0}</td><td>{1}</td><td>{2} %</td></tr>'''.format(
                    i, ' '.join([row[0], row[1], row[2]]), row[3]))
            i = i + 1
Beispiel #17
0
    def __init__(self, ip_address, port):

        self.ip_address = ip_address
        self.port = port
        self.crud = Crud('localhost', 'andrew', 'andrew', 'proxy')
Beispiel #18
0
    def deleteFromQueue(self, id):

        crud = Crud('localhost', 'andrew', 'andrew', 'verses')
        crud.sql = 'DELETE FROM queue WHERE id=\'{0}\''.format(id)
        verse_data = crud.deleteAct()
        crud.closeConnection()
Beispiel #19
0
class Add(QtGui.QWidget, add_view.Ui_Form):
    def __init__(self, parent=None):

        super().__init__(parent=None)
        self.setupUi(self)
        self.connect(self.pushButton, QtCore.SIGNAL('clicked()'),
                     self.printInput)

        self.connect(self.pushButton_2, QtCore.SIGNAL('clicked()'),
                     self.uncheckAll)

        self.addToList()

    # Выборка списка авторов из verses_list. Вывод выборки в listWidget
    # в окне добавления.
    def addToList(self):

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

        self.listWidget.setSelectionMode(
            QtGui.QAbstractItemView.MultiSelection)
        for x in self.results[0]:
            self.listWidget.addItems(x)

    def uncheckAll(self):

        for row in range(0, self.listWidget.count()):

            item = self.listWidget.item(row)
            self.listWidget.setItemSelected(item, False)

    def printInput(self):

        print(self.lineEdit.text())
        print(self.lineEdit_2.text())
        print(self.lineEdit_3.text())
        print(self.lineEdit_4.text())
        items = self.listWidget.selectedItems()

        # Получим индексы выбранных авторов. Запишем их в indexes
        indexes = []
        for item in items:
            index = self.listWidget.row(item)
            indexes.append(index)

        authors_id = []
        for index in indexes:
            authors_id.append(str(self.results[1][index][0]))

        # Добавление в таблцу с контактами
        self.model = Model()
        self.model.addIntoContacts(self.lineEdit_2.text(),
                                   self.lineEdit.text(),
                                   self.lineEdit_4.text(),
                                   self.lineEdit_3.text(), authors_id)

    def getRow(self):

        self.crud.sql = ('SELECT lastname, name, patronymic '
                         'FROM poets ORDER BY lastname')
        raw_authors = self.crud.readAct()
        authors_name = []
        for elem in raw_authors:
            authors_name.append([' '.join(elem)])

        self.crud.sql = ('SELECT id FROM poets ORDER BY lastname')
        authors_id = self.crud.readAct()

        return authors_name, authors_id
Beispiel #20
0
class Remove(QtGui.QWidget, remove_view.Ui_Form):
    def __init__(self, parent=None):

        super().__init__(parent=None)
        self.setupUi(self)
        self.center()
        self.showIntoTable()

        # Подключили кнопку deactivate
        self.connect(self.pushButton_5, QtCore.SIGNAL('clicked()'),
                     self.deactivateContact)
        # Подключили кнопку remove
        self.connect(self.pushButton_4, QtCore.SIGNAL('clicked()'),
                     self.deleteRowData)
        # Подключили кнопку quit
        self.connect(self.pushButton_3, QtCore.SIGNAL('clicked()'), self.close)
        # Подключили кнопку refresh
        self.connect(self.pushButton_6, QtCore.SIGNAL('clicked()'),
                     self.refreshTable)

    # Центрирование окна
    def center(self):

        qr = self.frameGeometry()
        cp = QtGui.QDesktopWidget().availableGeometry().center()
        qr.moveCenter(cp)
        self.move(qr.topLeft())

    # Делает refresh таблицы. А то без него как то скучно.
    def refreshTable(self):

        self.tableWidget.clear()
        self.showIntoTable()

    # Делает выборку контактов из таблицы
    def fetchAllFromContacts(self):

        self.crud = Crud('localhost', 'andrew', 'andrew', 'verses')
        self.crud.sql = 'SELECT * FROM contacts ORDER BY name'
        self.contacts = self.crud.readAct()
        self.crud.closeConnection()

    def paintZeroQpd(self):

        color = QtGui.QColor(255, 204, 230)

        for row in range(0, self.tableWidget.rowCount()):
            qpd_col = self.tableWidget.item(row, 3)
            qpd = int(qpd_col.text())
            if qpd == 0:

                for column in range(0, 6):
                    cell = self.tableWidget.item(row, column)
                    cell.setBackgroundColor(color)

    # Выводит содержимое из БД в таблицу
    def showIntoTable(self):

        self.fetchAllFromContacts()
        rows = len(self.contacts)
        # Рисуем header и делаем разметку
        self.tableWidget.setRowCount(rows)
        self.tableWidget.setColumnCount(6)
        self.tableWidget.setHorizontalHeaderLabels([
            'id', 'name', 'email', 'quantity_per_day', 'intervals', 'authors'
        ])
        # Выставим ширину столбцов
        self.tableWidget.setColumnWidth(1, 160)
        self.tableWidget.setColumnWidth(2, 160)
        self.tableWidget.setColumnWidth(5, 798)
        # Растянем ширину столбца до контента хедера
        self.tableWidget.resizeColumnToContents(0)
        self.tableWidget.resizeColumnToContents(3)

        try:

            # Заполнение таблицы содержимым
            rownumb = 0  #Номер текущего ряда
            for row in self.contacts:
                colnumb = 0  #Номер текущего столбца
                for column in row:

                    if (colnumb == 3) or (colnumb == 4):
                        item = QtGui.QTableWidgetItem(str(column))
                        item.setTextAlignment(QtCore.Qt.AlignCenter)
                        self.tableWidget.setItem(rownumb, colnumb, item)

                    else:
                        self.tableWidget.setItem(
                            rownumb, colnumb,
                            QtGui.QTableWidgetItem(str(column)))

                    colnumb = colnumb + 1
                rownumb = rownumb + 1

            self.paintZeroQpd()
            # Таблица уже заполнена содержимым
        except TypeError:

            print('В таблице осталось мало записей!')

    # Удаляет выбранную строку из БД
    def deleteRowData(self):

        currentRow = self.tableWidget.currentRow()
        id_value = self.tableWidget.item(currentRow, 0).text()
        print('Текущее значени выбранного элемента {0}'.format(id_value))
        crud = Model()
        crud.removeFromContacts(id_value)
        self.tableWidget.clear()
        self.showIntoTable()

    # Деактивирует выбранный контакт. Устанавливает значение qpd=0.
    # В результате контакт отписывается от рассылки.
    def deactivateContact(self):

        currentRow = self.tableWidget.currentRow()
        id_value = self.tableWidget.item(currentRow, 0).text()
        name = self.tableWidget.item(currentRow, 1).text()
        qpd = self.tableWidget.item(currentRow, 3).text()
        print('Текущее значени выбранного элемента {0}'.format(id_value))
        crud = Model()
        self.window4 = None
        if int(qpd) != 0:
            crud.zeroizeQpd(id_value)

        else:

            if self.window4 is None:
                id_value = str(id_value)
                print(id_value)
                self.window4 = Edit(self)
                self.window4.selectPreviousAuthors(id_value)
                self.window4.showPreviousName(name)

            self.window4.show()

        self.tableWidget.clear()
        self.showIntoTable()
Beispiel #21
0
    def __init__(self):

        self.working_proxies = []
        self.not_working_proxies = []
        # получаем список всех прокси
        self.crud = Crud('localhost', 'andrew', 'andrew', 'proxy')
        self.crud.sql = ('SELECT * FROM proxies')

        # Вывод строки следующего формата '1, '79.188.42.46', 8080, 1473365169'
        # ////                             id, ip_address,    port,  gmt_time
        proxies = self.crud.readAct()

        # проверим прокси на работоспособность. Попутно подведем статитику
        # какие рабочие а какие нет.
        for elem in proxies:

            proxy = ProxyAct(elem[1], elem[2])
            if (proxy.checkProxy() == True):

                elapsed_hours = round((time.time() - elem[3]) / 3600)
                print('ip {0:18} рабочий! Уже аж {1:3} часов \n'.format(
                    elem[1], elapsed_hours))
                self.working_proxies.append(elem[1])

            else:

                print('ip {0:18} не рабочий! \n'.format(elem[1]))
                self.not_working_proxies.append(elem[1])
                proxy.deleteProxy()

        print('Рабочих ip - {0}'.format(len(self.working_proxies)))
        print('Не рабочих ip - {0}'.format(len(self.not_working_proxies)))

        # проверим старый ли лог. Возьмем его размер

        cur_log_size = os.path.getsize(self.logfile)
        # лимит файл 10К
        logfile_size_limit = 10000
        if (cur_log_size) >= logfile_size_limit:

            os.remove(self.logfile)
            f = open(self.logfile, 'w')

            f.write('{0:#>100}\n{1:#^100}\n{2:#>100}'.format(
                '', ' This is log file with proxies ', '\n' * 2))
            f.close()

        try:

            # Пишем инфу в лог
            # получим самый старый и самый молодой возраст прокси
            self.crud.sql = 'SELECT MIN(time), MAX(time) FROM proxies'
            res = self.crud.readAct()
            # Переведи мне все это в часы
            older_proxy = round((time.time() - res[0]) / 3600)
            younger_proxy = round((time.time() - res[1]) / 3600)

            # Запишем инфу в лог
            saulog.WriteLog(
                self.logfile,
                'Рабочих ip - {0}'.format(len(self.working_proxies)))
            saulog.WriteLog(
                self.logfile,
                'Не рабочих ip - {0}'.format(len(self.not_working_proxies)))
            saulog.WriteLog(
                self.logfile,
                'Возраст самого старого прокси - {0} часов'.format(
                    older_proxy))
            saulog.WriteLog(
                self.logfile,
                'Возраст самого недавнего прокси - {0} часов\n\n'.format(
                    younger_proxy))
            # Лог записали
        except TypeError:

            print('не получилось...')

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

        self.crud = Crud('localhost', 'andrew', 'andrew', 'verses')
        self.getFollowers()
        self.updateFollowers()
Beispiel #23
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()
Beispiel #24
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()
Beispiel #25
0
    def __init__(self):

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

        self.crud = Crud('localhost', 'andrew', 'andrew', 'verses')
        self.crud.sql = '''SELECT lastname, name, patronymic, id FROM poets
                         ORDER BY lastname'''
        self.authors = self.crud.readAct()
Beispiel #27
0
    def fetchAllFromContacts(self):

        self.crud = Crud('localhost', 'andrew', 'andrew', 'verses')
        self.crud.sql = 'SELECT * FROM contacts ORDER BY name'
        self.contacts = self.crud.readAct()
        self.crud.closeConnection()
Beispiel #28
0
    def __init__(self):

        crud = Crud('localhost', 'andrew', 'andrew', 'proxy')
        #Проверить наличие прокси
        self.checkProxiesTable()
Beispiel #29
0
    def __init__(self):

        # Время для начала отсчета
        st_time = self.curTime
        #задержка межу отправками сообщения получателям
        delay = -10

        #Проверить существует ли таблица queue
        crud = Crud('localhost', 'andrew', 'andrew', 'verses')
        crud.sql = 'SHOW TABLE STATUS LIKE \'queue\''
        result = crud.readAct()
        # Таблицы нету, его прийдеться создать
        if len(result) == 0:
            print('Нету таблицы queue!')
            #Cоздадим таблицу queue
            crud.sql = '''CREATE TABLE queue(
                            id INT NOT NULL AUTO_INCREMENT,
                            name VARCHAR(40) NOT NULL,
                            email VARCHAR(40) NOT NULL,
                            exec_time INT NOT NULL,
                            verse_id INT NOT NULL,
                            PRIMARY KEY (id)
                            );'''
            result = crud.createAct()

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

        # Сделать выборку из таблицы с контактами
        crud.sql = 'SELECT * FROM contacts'
        list = crud.readAct()
        #print(list)

        for row in list:
            exec_time = self.curTime
            name = str(row[1])
            email = str(row[2])
            interval = 2
            # author_id. Атовра представлены в виде id
            authors = str(row[5])
            # quantity_per_day - желаемое количество стишков в день
            qpd = int(row[3])

            if qpd == 0:
                print('Этот человек уже отписался от рассылки!')
                continue

            elif qpd == 1:
                # каждый раз генериуем новый verse_id для следущего абонента
                # в таблице queue
                verse_id = self.getRandVerseID(authors)
                exec_time = exec_time + delay
                self.addRowIntoQueue(name, email, exec_time, verse_id)

            # Для тех кто отписался от рассылки стишки не рассылаем!

            else:
                #то же что и в ветке if, только для больего количества qpd
                #print('qpd is {0}'.format(qpd))
                interval_list = self.calculateDayInterval(qpd)

                for once, interval in zip((range(0, qpd)), interval_list):

                    exec_time = self.curTime
                    verse_id = self.getRandVerseID(authors)
                    exec_time = exec_time + delay + interval
                    self.addRowIntoQueue(name, email, exec_time, verse_id)

        crud.closeConnection()
        self.queueBlocker()
class IndexFile():

    output_file = '/tmp/index.html'

    def __init__(self):
        self.getTopList()
        self.makeFile()
        print(
            'Шикарно. Сфоримирован список авторов. Найти его можно по адресу '
            '- {0}'.format(self.output_file))

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

        self.crud = Crud('localhost', 'andrew', 'andrew', 'verses')
        self.crud.sql = '''SELECT lastname, name, patronymic, id FROM poets
                         ORDER BY lastname'''
        self.authors = self.crud.readAct()

    # Запускает на исполнение создание файла авторов
    def makeFile(self):

        self.f = open(self.output_file, 'w')
        self.doHeader()
        self.doAuthorList()
        self.doBottomPart()
        self.doFooter()
        self.f.close()

    # Фомирует хэдер файла
    def doHeader(self):

        self.f.write('''
        <!DOCTYPE html>
        <html>
        <head>
        <meta charset="UTF-8">
        <script src="myScript.js"></script>
        <script>
            (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
            (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
            m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
            })(window,document,'script','https://www.google-analytics.com/analytics.js','ga');

            ga('create', 'UA-49334817-2', 'auto');
            ga('send', 'pageview');
        </script>
        <style type="text/css">
            #wrapper {width: 700px; margin-left: auto;margin-right: auto; border: 1px solid black;
            padding-left:30px}
            #header {height: 200px; margin-left:-30px; margin-bottom:40px; font-size: 24pt;color:green; font-weight: bold;
            text-align: center}
            .user_input {width: 375px} select {width: 635px}
            option {font-size: 12pt} tr {height: 35px} .btn {font-size: 12pt;
            width: 100px}
            #content {height: 680px}
            #footer  {height: 30px; font-size: 16pt; color:#CAE1FF;
            margin-left: -30px;padding: 15px 170px; text-align: center;
            background-color:#228B22}
            #sau_link:hover, #sau_link:link, #sau_link:visited, #sau_link:active {color:#CAE1FF; text-decoration: underline}
        </style>
        </head>
        <body>
        <title>Поэзия для каждого!</title>
        <form method="POST" action="handler.php" onsubmit="return empty_form()">
        <div id="wrapper">
        <div id="header">
        GOOD VERSE MAILER
        <img src="images/header_image.jpg" alt="authors" style="margin: 5px 0px 0px 3px">
        <div style="font-size: 16pt; color:green; margin: -6px 0px 0px 0px; font-weight: normal"> poetry for everyone </div>
        </div>
        <div id="content">
        <div style="margin-bottom: 20px">
        <table>
            <tr><td width="250px">Имя: </td> <td><input type="text" class="user_input" name="name"></td> </tr>
            <tr><td>email:</td><td><input type="email" class="user_input" name="email"></td> </tr>
            <tr><td>количество в день:</td><td><input type="text" pattern="[1-9]{1}" name="qpd" class="user_input"></td> </tr>
        </table>
        </div>

        ''')

    def doBottomPart(self):

        self.f.write('''
        <div style="width: 450px; float:left; margin:10px 0px 10px 0px"><input type="radio" name="user" value="new" checked>новый пользователь</div>
        <div style="width: 200px; float:left; margin:10px 0px 10px 0px"><input type="radio" name="user" value="old">мне бы поменять :)</div>
        <div style="margin-top:60px; margin-bottom:0px"> <table><tr>
        <td width="425px"><button type="button" onclick="location.href='http://poetry.progreso.com.ua/help.html'" class="btn">Помощь</button></td>
        <td width="100px"><button type="reset" class="btn">Сборосить </button> </td>
        <td width="100px"><button type="submit" class="btn">ОК!</button></td>
        </tr></table> </div>
        </div>

        ''')

    # Формирует футер
    def doFooter(self):

        self.f.write('''

        <div id="footer"><a id='sau_link' target='_blank' href='https://www.facebook.com/andrew.sotnikov'>Andrew Sotnikov </a> ^ 2017 ^ </div>
        </div>
        </form>
        </body>
        </html>
        ''')

    # Формирует таблицу с авторами. С учетом ранее полученных предпочтений
    # (сортировки и выводимых полей)
    def doAuthorList(self):

        self.f.write('''<div><select size="20" multiple  name="author[]">''')
        for row in self.authors:

            self.f.write('''<option value="{1}">{0}</option>'''.format(
                ' '.join([row[0], row[1], row[2]]), row[3]))

        self.f.write('''</select></div>''')