def setupUi(self, form): Ui_Form.setupUi(self,form) dbconfig = read_config(filename='realty.ini', section='mysql') self.dbconn = MySQLConnection(**dbconfig) # Открываем БД из конфиг-файла self.first_setup_tableWidget() return
def __init__(self): self.dbconfig = read_config(filename='move.ini', section='mysql') self.leSQLcl = '' self.leSQLco = '' self.phones = [] self.parser = argparse.ArgumentParser() self.parser.add_argument('-sheetName') self.parser.add_argument('-fond', default=0, type=int) self.parser.add_argument('-agent', default=0, type=int) self.parser.add_argument('-signer', default=0, type=int) self.parser.add_argument('-clientOnly', default=False, type=bool) self.parser.add_argument('-socium', default=False, type=bool) self.parser.add_argument('-suff', default='', type=str) self.parser.add_argument('-ourStat', default=False, type=bool) self.parser.add_argument('-fondStat', default=False, type=bool) self.parser.add_argument('-arhivON', default=False, type=bool) self.parser.add_argument('-arhivOFF', default=False, type=bool) self.parser.add_argument('-noDubPhonePartner', default=False, type=bool) self.parser.add_argument('-noBackup', default=False, type=bool) self.args = self.parser.parse_args(sys.argv[2:])
# -*- coding: utf-8 -*- from mysql.connector import MySQLConnection, Error import openpyxl import sys from datetime import datetime from lib import read_config, l, lenl, get_filename dbconfig = read_config(filename='bulkload.ini', section='mysql') dbconn = MySQLConnection(**dbconfig) # Открываем БД из конфиг-файла read_cursor = dbconn.cursor() read_cursor.execute("SELECT * FROM big WHERE id < 2") # !!! имя таблицы !!! a = read_cursor.fetchall() print('\n' + datetime.now().strftime("%H:%M:%S") + ' Начинаем загрузку \n') fields = [] sql = 'INSERT INTO big(' # !!! имя таблицы !!! sql_end = '' for i, q in enumerate(read_cursor.description): if i == 0: continue elif i == 1: sql += q[0] sql_end += '%s' else: fields.append(q[0]) sql += ',' + q[0] sql_end += ',' + '%s' sql += ') VALUES (' + sql_end + ')'
# -*- coding: utf-8 -*- # Помечаем в БД совпадающие по сигнатурам файлы по файлу *_mp3wav.csv __author__ = 'Denis' import os import hashlib from mysql.connector import MySQLConnection from lib import read_config dbconfig_crm = read_config(filename='asocium.ini', section='crm') dbconn_crm = MySQLConnection(**dbconfig_crm) cursor_crm = dbconn_crm.cursor() dbconfig_alone = read_config(filename='asocium.ini', section='alone') dbconn_alone = MySQLConnection(**dbconfig_alone) cursor_alone = dbconn_alone.cursor() files = os.listdir('.') #is_ready = False # Пропускаем цикл пока не True, пока не дошли до нужной строчки for file in files: if file.endswith('_mp3wav.csv'): with open(file) as file_handler: for line in file_handler: line_ok = False a_p_f = line.split('\t')[0] callcenter_id = '' if len(a_p_f.split('/back/recup_dir.')) > 1: aster_path = int( a_p_f.split('/back/recup_dir.')[1].split('/')[0]) aster_file = a_p_f.split('/back/recup_dir.')[1].split( '/')[1] #if aster_file == 'f4095301304.wav':
from mysql.connector import MySQLConnection, Error import openpyxl from openpyxl import Workbook from lib import read_config, lenl, s_minus, s, l, filter_rus_sp, filter_rus_minus # Партнеры, по которым не надо обрезать !!! MIN - 1 шт !!! OUR_PARTNERS = [45, 191, 234] # Коэффициент обрезки K_HIDDEN = 0.2 # Дата начала обрезки DATE_HIDE = '2018-01-29' # До какой даты ставить статус "Отрицательный результат" DATE_END_OTKAZ = '2017-12-31' dbconfig = read_config(filename='alfa.ini', section='SaturnFIN') has_files = False all_files = os.listdir(path=".") for all_file in all_files: if all_file.endswith(".xlsx"): has_files = True if not has_files: sys.exit() # обнуление скрытых отказов банка (которые раньше были предварительно одобрены) dbconn = MySQLConnection(**dbconfig) cursor = dbconn.cursor() cursor.execute( 'UPDATE saturn_fin.alfabank_products SET status_hidden = 0 ' 'WHERE status_hidden = 1 AND (status_code = 3 OR status_code = 5)')
k = range(9, 0, -1) pairs = zip(k, [int(x) for x in snils.replace('-', '').replace(' ', '')]) return sum([k * v for k, v in pairs]) snils = '{0:09d}'.format(snils_dig) csum = snils_csum(snils) while csum > 101: csum %= 101 if csum in (100, 101): csum = 0 return csum dbconfig = read_config(filename='gen_snils.ini', section='main_mysql') dbconn = MySQLConnection(**dbconfig) workbooks = [] sheets = [] for i, xlsx_file in enumerate(sys.argv): # Загружаем все xlsx файлы if i == 0: continue workbooks.append(openpyxl.load_workbook(filename=xlsx_file, read_only=True)) sheets.append(workbooks[i - 1][workbooks[i - 1].sheetnames[0]]) total_rows = 0 sheets_keys = [] keys = {} for i, sheet in enumerate(sheets): # Маркируем нужные столбцы
# -*- coding: utf-8 -*- # Берем из монго, сортируем, результат в Excel import sys, argparse from _datetime import datetime, timedelta, date import os from mysql.connector import MySQLConnection, Error from collections import OrderedDict import openpyxl from pymongo import MongoClient from lib import read_config, fine_phone # подключаемся к серверу cfg = read_config(filename='anketa.ini', section='Mongo') conn = MongoClient('mongodb://' + cfg['user'] + ':' + cfg['password'] + '@' + cfg['ip'] + ':' + cfg['port'] + '/' + cfg['db']) # выбираем базу данных db = conn.saturn_v # выбираем коллекцию документов colls = db.Provider_Alfabank_CreditCards wb_rez = openpyxl.Workbook(write_only=True) ws_rez = wb_rez.create_sheet('Даты выгрузки') ws_rez.append( ['Ф', 'И', 'О', 'Телефон', 'Дата и время создания', 'Дата выгрузки']) for coll in colls.find({}, { "passport_lastname": 1, "passport_name": 1, "passport_middlename": 1, "personal_phone": 1,
def base(self): webconfig = read_config(filename='alfa.ini', section='web') fillconfig = read_config(filename='alfa.ini', section='fill') self.pid = os.getpid() post_api = read_config(filename='alfa.ini', section='postAPI') self.post_url = post_api['url'] if DEBUG_JSON: with open(DEBUG_JSON) as f: inp = f.read() else: inp = sys.stdin.readline().rstrip() ajson = json.loads(inp) self.aid = ajson['click_id'] if ajson['__landing_url']: self.driver.get(url=land2cc_short(ajson['__landing_url']) + '&afclick=' + ajson['click_id']) else: raise RequiredPartnerLinkException loading = ajson['__command']['type'] == 'queue' complete_orderity = False cycles_orderity = 0 formatting_error = '' tek_i = 0 while (not complete_orderity ) and cycles_orderity <= CYCLES_ORDERITY and loading: documents = '' try: # Начинаем заполнять writelog( self.log, self.aid, 'Начинаем заполнять по ссылке' + ajson['__landing_url'] + '&afclick=' + ajson['click_id'] + str(ajson), self.pid) if not tek_i: post_status(self.post_url, self.aid, 1, 'Начинаем выгрузку на сервер', self.log, self.bad_log) for i in range(tek_i, len(orderity)): order = orderity[i] tek_i = i # Проверяем stdin ready, x, y = check_select([sys.stdin], [], [], 0) if ready: self.current_stdin = sys.stdin.readline().rstrip() if self.current_stdin: bjson = json.loads(self.current_stdin) if bjson['__command']['type'] == 'kill': self.current_stdin = '' raise KillException wj(self.driver) # Проверяем на всякие неожиданности current_html = self.driver.find_element_by_xpath( '//HTML').get_attribute('innerHTML') if current_html.find( 'Ваша заявка на кредитную карту устала ждать :)' ) > -1: raise ServerTimeOutException if current_html.find('Ваши дальнейшие шаги') > -1: writelog( self.log, self.aid, 'Банк прервал транcфер заявки, чтобы уточнить некоторые данные ' 'лично у Вас. Ожидайте звонка из Альфа-Банка', self.pid) post_status( self.post_url, self.aid, 11, 'Банк прервал транcфер заявки, чтобы уточнить ' 'некоторые данные лично у Вас. Ожидайте звонка из Альфа-Банка', self.log, self.bad_log) raise UspehException elif current_html.find( 'вы можете подать заявку повторно через 30 дней' ) > -1: raise RejectException if current_html.find('Хотите ускорить заполнение?') > -1: elem = self.driver.find_element_by_xpath( '//SPAN[@class="link__text"][text()="Продолжить заполнение"]' ) wj(self.driver) elem.click() if current_html.find( 'Введите одноразовый пароль из SMS' ) > -1: complete_orderity = True continue self.use_order(order, ajson) complete_orderity = True except ServerTimeOutException: raise except RequiredPartnerLinkException: writelog( self.log, self.aid, 'Необходимо указать партнерскую ссылку - обратитесть к Вашему куратору', self.pid) post_status( self.post_url, self.aid, 5, 'Необходимо указать партнерскую ссылку - обратитесть к ' 'Вашему куратору', self.log, self.bad_log) raise except NoDeliveryException: writelog( self.log, self.aid, 'Для Вашего города доставка курьером невозможна. После ' 'поступления СМС от банка, пройдите по ссылке, указанной в нем и выберите удобное Вам место' ' получения карты', self.pid) post_status( self.post_url, self.aid, 11, 'Этого города нет в списке доставки курьером. Решение - ' 'сказать клиенту: Для Вашего города доставка курьером ' 'невозможна. Мы для Вас заполнили заявку. В течении часа Вам придет СМС со ссылкой на ' 'заполненную заявку. Пройдите по ссылке, выберите удобное Вам место ' 'получения карты и отправьте заявку в Альфа-Банк', self.log, self.bad_log) raise except RequiredDocumentException: writelog( self.log, self.aid, 'Для Вашего региона необходимо предоставить один из документов: ' + documents + '.\n Исправьте заявку и отправьте её заново', self.pid) post_status( self.post_url, self.aid, 11, 'Для Вашего региона необходимо предоставить один из ' 'документов: ' + documents + '.\n Исправьте заявку и отправьте её заново', self.log, self.bad_log) raise except KillException: raise except UspehException: raise except RejectException: raise except Exception as e: time.sleep(1) current_html = self.driver.find_element_by_xpath( '//HTML').get_attribute('innerHTML') if current_html.find( 'Ваша заявка на кредитную карту устала ждать :)') > -1: raise ServerTimeOutException elif current_html.find('Ваши дальнейшие шаги') > -1: writelog( self.log, self.aid, 'Банк прервал транcфер заявки, чтобы уточнить некоторые данные ' 'лично у Вас. Ожидайте звонка из Альфа-Банка', self.pid) post_status( self.post_url, self.aid, 11, 'Банк прервал транcфер заявки, чтобы уточнить ' 'некоторые данные лично у Вас. Ожидайте звонка из Альфа-Банка', self.log, self.bad_log) raise UspehException elif current_html.find( 'вы можете подать заявку повторно через 30 дней') > -1: raise RejectException elif current_html.find('Хотите ускорить заполнение?') > -1: elem = self.driver.find_element_by_xpath( '//SPAN[@class="link__text"]' '[text()="Продолжить заполнение"]') wj(self.driver) elem.click() else: cycles_orderity += 1 data4send = { 't': 'x', 's': '//SPAN[contains(@class,"input_invalid")]//SPAN[@class="input__sub"]/..', 'a': 'text' } input_errors = p(d=al.driver, f='ps', **data4send) errors_nulled = [] data4send = { 't': 'x', 's': '//SPAN[contains(@class,"textarea_invalid")]//SPAN[@class="textarea__sub"]/..', 'a': 'text' } other_errors = p(d=al.driver, f='ps', **data4send) formatting_error = '' if len(input_errors): for i, input_error in enumerate(input_errors): if input_error.strip(' ').strip('\n').strip( ' ').strip('\n').strip(' '): errors_nulled.append( input_error.replace('\n', ': ')) formatting_error = 'Ошибки ввода:' for i, input_error in enumerate(errors_nulled): formatting_error += '\n' + str( i + 1) + ') ' + input_error errors_nulled = [] if len(input_errors): for i, other_error in enumerate(other_errors): if other_error.strip(' ').strip('\n').strip( ' ').strip('\n').strip(' '): if other_error == 'Кем выдан\nПоле обязательно для заполнения': errors_nulled.append( 'Возможно ошибка в Коде подразделения УФМС. ' 'Проверьте код подразделения и заполните поле "Кем выдан"' ) else: errors_nulled.append( other_error.replace('\n', ': ')) for i, other_error in enumerate(errors_nulled): formatting_error += '\n' + str( i + 1) + ') ' + other_error formatting_error += '\n. Исправьте ошибки, сохраните и отправьте заявку заново' nowtime = datetime.now() stamp = self.aid + '(' + str( self.pid) + ')' + nowtime.strftime("%d-%H:%M:%S") if formatting_error: writelog(self.bad_log, self.aid, orderity[tek_i]['alfa'] + formatting_error, self.pid, nowtime) post_status(self.post_url, self.aid, 1, formatting_error, self.log, self.bad_log) raise DecodedErrorException else: writelog( self.bad_log, self.aid, 'Ошибка транспорта: Отправьте заявку заново.\n' 'информация для отладки:' + orderity[tek_i]['alfa'] + '\n' + str(ajson) + '\n * * * \n' + str(e), self.pid, nowtime) html_log = open(LOG_PATH + stamp + '.html', 'w') html_elem = self.driver.find_element_by_xpath('//HTML') html_log.write(html_elem.get_attribute('innerHTML')) html_log.close() self.driver.save_screenshot(LOG_PATH + stamp + '.png') writelog( self.log, self.aid, 'Ошибка - см. лог ошибок, скриншот, файл html', self.pid, nowtime) raise TrasferErrorException # Пока выключил повторную отправку ------------------------------------------ #self.driver.execute_script('window.open("' + ajson['__landing_url'] + '&afclick=' + ajson['click_id'] + # '","_blank");') #self.driver.switch_to.window(self.driver.window_handles[0]) #self.driver.close() #self.driver.switch_to.window(self.driver.window_handles[0]) #tek_i = 0 #----------------------------------------------------------------------------- if complete_orderity: sms_start_time = datetime.now() server_timeout = False uspeh = False last_state = 0 client_timeout = False time.sleep(1) while datetime.now() - sms_start_time < timedelta( minutes=ALOADER_TIMEOUT ) and not server_timeout and not uspeh: while datetime.now() - sms_start_time < timedelta(minutes=ALOADER_TIMEOUT) and not self.current_stdin \ and not server_timeout and not uspeh: time.sleep(1) current_html = self.driver.find_element_by_xpath( '//HTML').get_attribute('innerHTML') if current_html.find('Неправильно введен код смс') > -1 or \ current_html.find('Некорректные данные.\n Пожалуйста, попробуйте ещё раз.') > -1: if last_state != 1: last_state = 1 post_status(self.post_url, self.aid, 5, 'Неправильная СМС, введите заново', self.log, self.bad_log) elif current_html.find( 'Вы превысили количество попыток. ' 'Просьба повторить попытку через 15 минут') > -1: writelog( self.log, self.aid, 'Вы превысили количество возможных SMS за период, ' 'отправьте заявку заново', self.pid) post_status( self.post_url, self.aid, 3, 'Вы превысили количество возможных SMS за период, ' 'отправьте заявку заново через 15 минут', self.log, self.bad_log) raise DecodedErrorException elif current_html.find( 'Ваша заявка на кредитную карту устала ждать :)' ) > -1: raise ServerTimeOutException elif current_html.find( 'вы можете подать заявку повторно через 30 дней' ) > -1: raise RejectException elif (current_html.find('Ваши следующие шаги') > -1) or ( current_html.find('Информация по заявке') > -1): raise UspehException elif (current_html.find(' сек<!-- /react-text --></p>') > -1 or current_html.find('Запросить ' 'повторно можно через 0') > -1) and current_html.find( '60 сек<!-- /react-text --></p>') == -1: if last_state != 2: last_state = 2 writelog(self.log, self.aid, 'Ждем СМС', self.pid) post_status(self.post_url, self.aid, 2, 'Ждем СМС', self.log, self.bad_log) elif (current_html.find('Запросить пароль повторно') > -1 or current_html.find('Превышено ' 'количество попыток ввода пароля.\n Пожалуйста, запросите пароль повторно')) and \ current_html.find('60 сек<!-- /react-text --></p>') == -1: if last_state != 3: last_state = 3 writelog(self.log, self.aid, 'Ждем запроса на СМС', self.pid) post_status(self.post_url, self.aid, 3, 'Ждем запроса на СМС', self.log, self.bad_log) else: if last_state != 6: last_state = 6 writelog( self.log, self.aid, 'Непонятно чего ждем, похоже aloader сбился', self.pid) stamp = self.aid + '(' + str( self.pid) + ')' + datetime.now().strftime( "%d-%H:%M:%S") html_log = open(LOG_PATH + stamp + '.html', 'w') html_elem = self.driver.find_element_by_xpath( '//HTML') html_log.write( html_elem.get_attribute('innerHTML')) html_log.close() self.driver.save_screenshot(LOG_PATH + stamp + '.png') raise TrasferErrorException ready, x, y = check_select([sys.stdin], [], [], 0) if ready: self.current_stdin = sys.stdin.readline().rstrip() if self.current_stdin: bjson = json.loads(self.current_stdin) if bjson['__command']['type'] == 'confirm': try: self.current_stdin = '' writelog(self.log, self.aid, 'Получено СМС: ' + str(bjson), self.pid) data4send = {'t': 'x', 's': smsity['Ввести СМС']} elem = p(d=self.driver, f='p', **data4send) wj(self.driver) for k in range(6): elem.send_keys(Keys.BACKSPACE) wj(self.driver) elem.send_keys(bjson['__command']['value']) wj(self.driver) last_state = 0 except Exception as e: writelog( self.log, self.aid, 'Ошибка при отправлении СМС: ' + str(bjson), self.pid) # data4send = {'t': 'x', 's': '//DIV[@class="confirmation-modal__body"]'} # sms_window = p(d=self.driver, f='p', **data4send) # sms_window_htm = '\n-------- окошко запроса пароля --------\n' +\ # sms_window.get_attribute('innerHTML') sms_window_htm = '' writelog( self.bad_log, self.aid, 'Ошибка при отправлении СМС: ' + str(bjson) + sms_window_htm, self.pid) post_status( self.post_url, self.aid, 5, 'Ошибка при отправлении СМС, повторите отправку ' 'той же СМС', self.log, self.bad_log) elif bjson['__command']['type'] == 'retry': try: self.current_stdin = '' writelog( self.log, self.aid, 'Получена заявка на запрос СМС: ' + str(bjson), self.pid) data4send = { 't': 'x', 's': smsity['Запросить пароль повторно'] } elem = p(d=self.driver, f='c', **data4send) wj(self.driver) elem.click() time.sleep(2) except Exception as e: writelog( self.log, self.aid, 'Ошибка при запросе повторной СМС: ' + str(bjson), self.pid) # data4send = {'t': 'x', 's': '//DIV[@class="confirmation-modal__body"]'} # sms_window = p(d=self.driver, f='p', **data4send) # sms_window_htm = '\n-------- окошко запроса пароля --------\n' +\ # sms_window.get_attribute('innerHTML') sms_window_htm = '' writelog( self.bad_log, self.aid, 'Ошибка при запросе повторной СМС: ' + str(bjson) + sms_window_htm, self.pid) post_status( self.post_url, self.aid, 5, 'Ошибка при запросе повторной СМС, повторите запрос', self.log, self.bad_log) elif bjson['__command']['type'] == 'kill': self.current_stdin = '' raise KillException if datetime.now() - sms_start_time > timedelta( minutes=ALOADER_TIMEOUT): raise ServerTimeOutException else: if loading: raise TrasferErrorException else: post_status(self.post_url, self.aid, 5, 'Ошибка, повторите отправку', self.log, self.bad_log) writelog(self.log, self.aid, 'Вылетел с неизвестной ошибкой', self.pid)
QUESTIONS = [ 'financial_state', 'financial_strategy', 'savings_strategy', 'savings_state', 'savings_target', 'savings_method', 'savings_insurance', 'personal_credit', 'personal_credit_debt', 'personal_accounting', 'savings_safest_method', 'savings_profitable_method', 'product_analytics', 'mlm_awareness', 'insurance_state', 'pension_awareness', 'pension_contract', 'pension_payments_awareness', 'information_reliable_source', 'secured_rights', 'secured_rights_police', 'financial_education_level', 'financial_education_sufficient', 'financial_education_update', 'education_conference', 'education_conference_theme', 'information_source_list', 'financial_subject_school' ] cfg = read_config(filename='anketa.ini', section='postgresql') conn = psycopg2.connect(**cfg) cursor = conn.cursor() cursor.execute( 'select ac.id, ac.lastname, ac.name, ac.middlename, di.title from account as ac ' 'left join division as di on ac.division_id = di.id;') agents = {} for row in cursor: agents[row[0]] = row agents_descriptions = {} for i, description in enumerate(cursor.description): agents_descriptions[description.name] = i cursor.close() conn.close() wb = openpyxl.load_workbook(filename='agents.xlsx', read_only=True)
def main(): config = read_config() write_file(config)
sys.exit() elif not sys.argv[1].endswith('.xlsx'): print(datetime.now().strftime("%H:%M:%S"), 'В командной строке не указан файл Excel') sys.exit() wb = openpyxl.load_workbook(filename=sys.argv[1], read_only=True) sheet = wb[wb.sheetnames[0]] if not sheet.max_row: print( datetime.now().strftime("%H:%M:%S"), 'Файл Excel некорректно сохранен OpenPyxl. Откройте и пересохраните его' ) sys.exit() keys = {} last_cell = 0 dbconfig = read_config(filename='move.ini', section='mysql') dbconn = MySQLConnection(**dbconfig) cursor = dbconn.cursor() #big_string = '' tuples_contracts = [] for j, row in enumerate(sheet.rows): if j == 0: for k, cell in enumerate(row): # Проверяем, чтобы был client_id if str(cell.value).upper() in IN_IDS: keys[IN_IDS[0]] = k if len(keys) > 0: for k, cell in enumerate(row): for n, name in enumerate(IN_NAMES): if n == 0: continue if cell.value != None:
"Невозможно ввести SMS, отправьте заявку в очередь заново", log, bad_log) if DEBUG: logging.basicConfig(level=logging.WARNING, format="%(asctime)s:%(levelname)s:%(message)s") else: logging.basicConfig(level=logging.WARNING, filename='warnings.log', format="%(asctime)s:%(levelname)s:%(message)s") logging.warning('Загружен abalancer ' + VERSION) aloader = os.path.join(os.path.dirname(__file__), "aloader.py") log = open(LOG_PATH + LOG_FILE, 'a') bad_log = open(LOG_PATH + BAD_TRANSACTION_LOG_FILE, 'a') post_api = read_config(filename='alfa.ini', section='postAPI') post_url = post_api['url'] procs = {} rabbituser = read_config(filename='alfa.ini', section='RabbitUser') rabbiturl = read_config(filename='alfa.ini', section='RabbitUrl') credentials = pika.PlainCredentials(**rabbituser) parameters = pika.ConnectionParameters(credentials=credentials, **rabbiturl) connection = pika.BlockingConnection(parameters=parameters) channel = connection.channel() #channel.queue_declare(queue='alfabank_100', durable=True) logging.warning(' [*] Waiting for messages. To exit press CTRL+C')
print( args.file, ' - файл отсутствует или не .xlsx ' 'Укажите путь и имя существующего .xlsx (Excel-2007) файла') sys.exit() if args.dir != '.': if not os.path.exists(args.dir): print( args.dir, ' - директория отсутствует. Укажите путь к существующей директории' ) sys.exit() # Создаем директории загруженных файлов-логов для всех продуктов for product in PRODUCTS: if not os.path.exists('loaded' + product.upper() + '/'): os.mkdir('loaded' + product.upper() + '/') # подключаемся к серверу cfg = read_config(filename='status.ini', section='Mongo') conn = MongoClient('mongodb://' + cfg['user'] + ':' + cfg['password'] + '@' + cfg['ip'] + ':' + cfg['port'] + '/' + cfg['db']) # выбираем базу данных db = conn.saturn_v # выбираем коллекцию документов db.Products # Вызываем функцию с именем модуля locals()[locals()['args'].product](args.product, db.Products, args.dir, file=args.file)
now = datetime.datetime.now() if now.timetuple().tm_hour < 10 or now.timetuple().tm_hour > 21: # print(datetime.datetime.now().strftime("%H:%M:%S") + ' Не рабочее время. Работа скрипта окончена') sys.exit() processes = subprocess.check_output(["ps", "x"]).decode().split('\n') tink_processes = 0 for process in processes: if process.find('python3 tink.py') > -1: tink_processes += 1 if tink_processes > 8: # print(datetime.datetime.now().strftime("%H:%M:%S") + ' Слишком много процессов. Работа скрипта окончена') sys.exit() webconfig = read_config(filename='tink.ini', section='web') fillconfig = read_config(filename='tink.ini', section='fill') dbconfig = read_config(filename='tink.ini', section='mysql') ## Формируем SQL main_sql = 'SELECT ' for i, inp_i in enumerate(clicktity): if str(type(clicktity[inp_i] ['SQL'])) == "<class 'str'>" and clicktity[inp_i]['SQL'] != '': main_sql += clicktity[inp_i]['SQL'] + ',' for i, inp_i in enumerate(inputtity): if str(type(inputtity[inp_i] ['SQL'])) == "<class 'str'>" and inputtity[inp_i]['SQL'] != '': main_sql += inputtity[inp_i]['SQL'] + ','
services, browser = pychromecast.discovery.discover_chromecasts() pychromecast.discovery.stop_discovery(browser) chromecasts, browser = pychromecast.get_listed_chromecasts( friendly_names=[friendly_name]) cast = chromecasts[0] cast.wait() mc = cast.media_controller mc.play_media(url, "audio/mpeg") mc.block_until_active() def read_alarm(): with open("alarm.json") as f: alarm = load(f) return alarm if __name__ == "__main__": config = read_config() alarm = read_alarm() now = datetime.now() if not alarm["alarm"]: exit(0) if (now.year == alarm["year"] and now.month == alarm["month"] and now.day == alarm["day"] and now.hour == alarm["hour"] and now.minute == alarm["minute"]): print("Running alarm!") play_sound(config["url"], config["friendly_name"])
"СМОЛЕНСКАЯ ОБЛАСТЬ","СТАВРОПОЛЬСКИЙ КРАЙ","ТАМБОВСКАЯ ОБЛАСТЬ","ТВЕРСКАЯ ОБЛАСТЬ","ТОМСКАЯ ОБЛАСТЬ", "ТУЛЬСКАЯ ОБЛАСТЬ","ТЮМЕНСКАЯ ОБЛАСТЬ","УДМУРТСКАЯ РЕСПУБЛИКА","УЛЬЯНОВСКАЯ ОБЛАСТЬ","ХАБАРОВСКИЙ КРАЙ", "ХАНТЫ-МАНСИЙСКИЙ АВТОНОМНЫЙ ОКРУГ - ЮГРА","ЧЕЛЯБИНСКАЯ ОБЛАСТЬ","ЧУВАШСКАЯ РЕСПУБЛИКА", "ЧУКОТСКИЙ АВТОНОМНЫЙ ОКРУГ","ЯМАЛО-НЕНЕЦКИЙ АВТОНОМНЫЙ ОКРУГ","ЯРОСЛАВСКАЯ ОБЛАСТЬ","КУРГАНСКАЯ ОБЛАСТЬ"] def chuvak(is_chuvak): if s(is_chuvak).find('ЧУВАШСКАЯ') > -1: return 'ЧУВАШСКАЯ' elif s(is_chuvak).find('САХА') > -1: return 'САХА' elif s(is_chuvak).find('КУЗБАСС') > -1: return 'КЕМЕРОВСКАЯ' else: return is_chuvak dbconfig_ops = read_config(filename='halva.ini', section='SaturnOPS') dbconn_ops = MySQLConnection(**dbconfig_ops) dbconfig_fin = read_config(filename='halva.ini', section='SaturnFIN') dbconn_fin = MySQLConnection(**dbconfig_fin) has_ph = [] cursor_chk = dbconn_fin.cursor() cursor_chk.execute('SELECT phone FROM sovcombank_products WHERE inserted_date > %s GROUP BY phone', (datetime.now() - relativedelta.relativedelta(months=3),)) #cursor_chk.execute('SELECT phone FROM sovcombank_products GROUP BY phone') rows = cursor_chk.fetchall() for row in rows: has_ph.append(row[0]) has_phones = tuple(has_ph)
from subprocess import * import time from lib import read_config if __name__ == '__main__': config = read_config('config.yaml') runners = {} for k, v in config['runners'].items(): runners[k] = v['cmd'] for r in config['runs']: if r in runners: cmd = runners[r] print('\n\n[RUN COMMAND]: {}'.format(cmd)) cmds = cmd.split(' ') run(cmds) time.sleep(0.25) else: err_str = "Invalid runner found in runs section of config.yaml: {}".format( r) raise RuntimeError(err_str)