def test_all(): db = database.Database("any", 123) db.connect("test_user", "qqq") f = open(OUT_FILE, 'w') f.close() for f in TEST_FUNCS: execute(db, f[0], f[1])
def connect_db(user, password): """ Функция для соединения с базой данных. user - имя пользователя cerebro. password - пароль пользователя cerebro. """ # Создаем объект базы данных db = database.Database() # Соединяемся с базой данных db.connect(user, password) return db
def main(): db = database.Database() if (db.connect_from_cerebro_client() == 0): res = db.execute('select mtm, name from "listUsers"(false)') for r in res: dt = str(r[0].day) + '-' + str(r[0].month) + '-' + str( r[0].year) + ' ' + str(r[0].hour) + ':' + str( r[0].minute) + ':' + str(r[0].second) print('User: '******' Last login: '******'Can not connect to database. Host: ' + host + ' or port: ' + str(port) + ' is not correct, or Cerebro client is not running!') pass
def __call__(self): self.lock_cache = threading.RLock() self.lock_execute = threading.Lock() self.event_stop = threading.Event() self.thread = threading.Thread(target=self.thread_load, args=()) self.log = clogger.CLogger().log self.config = config.Config() self.db = database.Database() self.object = DbHelper() self.login_action = QAction(None) self.login_action.triggered.connect(self.bad_client) self.load_config() self.disconnect() self.thread.start()
def create_and_link_tasks(db_user, db_password): """ db_user и db_password это логин и пароль пользователя Cerebro В этом примере мы создадим в проекте задачу и две подзадачи. У задачи выставим время начала, у подзадач запланируем время исполнения и свяжем их между собой. Также мы создадим у подзадач сообщения типа постановка задачи и приложим к ним файлы. Мы не будем в этом примере самостоятельно писать sql-запросы, а воспольуемся функцями класса database.Database, которые по сути являются обертками над sql-запросами. Описание всех функций смотрите в модуле database пакета pycerebro. Пример вызова функции: :: import create_tasks create_tasks.create_and_link_tasks('user', 'password') :: """ def find(f, seq): # поиск объектов в списке for item in seq: if f(item): return item try: db = database.Database() # Устанавливаем соединение с базой данных if db.connect_from_cerebro_client( ) != 0: # пробуем установить соединение с помощью запущенного клиента Cerebro. # Если не выходит, устанавливаем с помощью логина и пароля db.connect(db_user, db_password) root_tasks = db.root_tasks( ) # Получаем список корневых задач проектов. # Ищем нужную корневую задачу проекта в который и будем добовлять задачи root_task = find( lambda val: val[dbtypes.TASK_DATA_NAME] == project_name, root_tasks) # Создаем задачу в проекте new_task_id = db.add_task(root_task[dbtypes.TASK_DATA_ID], 'New Test Task') """ Функция add_task принимает на вход два агрумента: - идентификатор родительской задачи, в данном случаи идентификатор корневой задачи проекта - имя задачи, Будте внимательны имя задачи имеет ограничения. Подробнее о них смотрите в описании функции add_task. Результат функции - идентификатор новой задачи. """ # Устанавливаем время начала задачи в теушее время """ Время начала задачи устанавливается в днях от 01.01.2000 в UTC Подробнее о этом смотрите в описании функции task_set_start. """ datetime_now = datetime.datetime.utcnow() datetime_2000 = datetime.datetime(2000, 1, 1) timedelta = datetime_now - datetime_2000 days = timedelta.total_seconds() / (24 * 60 * 60) db.task_set_start(new_task_id, days) # Создаем две подзадачи к новой задаче new_subtask_id_1 = db.add_task(new_task_id, 'New Test Subtask 1') new_subtask_id_2 = db.add_task(new_task_id, 'New Test Subtask 2') # Добовляем к подзадачам постановки задач с файлами def_id_1 = db.add_definition(new_subtask_id_1, 'Do something 1') def_id_2 = db.add_definition(new_subtask_id_2, 'Do something 2') # Во второй подзадаче создадим еще 5 задач. # Для удобства просто создадим 5 копий подзадачи 1 lst_for_copy = [ (new_subtask_id_1, 'Subtask 1'), (new_subtask_id_1, 'Subtask 2'), (new_subtask_id_1, 'Subtask 3'), (new_subtask_id_1, 'Subtask 4'), (new_subtask_id_1, 'Subtask 5'), ] # Создадим массив типа [(ID_копируемой задачи, 'Новое имя'), ...] new_tasks = db.copy_tasks(new_subtask_id_2, lst_for_copy) # Копируем в подзадачу 2 filename1 = local_dir + '/test.png' # файл для первой подзадачи thumbnails1 = make_thumnails( filename1) # генерация эскизов для файла filename1 filename2 = local_dir + '/test.mp4' # файл для второй подзадачи thumbnails2 = make_thumnails( filename2) # генерация эскизов файла filename2 # Создаем объект для добавления файлов в файловое хранилище (Cargador) carga = cargador.Cargador(cargador_host, cargador_xmlrpc_port, cargador_http_port) # Добовляем к сообщениям типа постановки задач файлы и, заодно, экспортируем их в хранилище db.add_attachment(def_id_1, carga, filename1, thumbnails1, '', False) db.add_attachment(def_id_2, carga, filename2, thumbnails2, '', False) """ Параметр carga, передается для экспортирования файла в файловое хранилише. Подробнее об этом смотрите в модуле cargador. Последний параметр означает, будет ли файл добавлен как линк, без экспорта в хранилище (значение True), или же он будет экспортитован (значение False) Подробнее об этом смотрите в описании функции add_attachment. """ # Удаляем сгенерированные эскизы, поскольку мы их уже экспортировали в хранилище for f in thumbnails1: os.remove(f) for f in thumbnails2: os.remove(f) # Устанавливаем запланированное время на подзадачи db.task_set_planned_time( new_subtask_id_1, 12.5) # первой подзадаче устанавливаем 12 с половиной часов db.task_set_planned_time(new_subtask_id_2, 30) # второй подзадаче устанавливаем 30 часов # Связываем подзадачи db.set_link_tasks(new_subtask_id_1, new_subtask_id_2) """ Эта связь значит, что вторая подзадача начнется после окончания первой подзадачи """ except Exception as err: print(err)
def add_report_to_task(task_url, db_user, db_password, text, work_time, file, file_as_link): """ Функция по добавлению нового сообщения. Параметр task_url - тектовый локатор(путь) до задачи. Формат локатора: '/Проект/Задача 1/Задача 2', то есть по сути путь до задачи. Примечание: Имена задач регистрозависимы! Параметры db_user и db_password - логин и пароль пользователя Cerebro, который создает отчет. Параметр text - текс сообщения Параметр work_time - затраченные часы Параметр file - путь до файла, который должен быть приложен Параметр file_as_link - способ добавления файла к сообщению: True - файл добавляется как ссылка; False - файл добавляется как вложение, то есть импортируется в файловое хранилище(Cargador). Пример вызова функции: :: import report report.add_report_to_task('/Проект/Задача 1/Задача 2', 'user', 'password', 'Example report', 1.5, 'с:/temp/Test.file', False) :: """ try: db = database.Database() # Устанавливаем соединение с базой данных if db.connect_from_cerebro_client() != 0: # пробуем установить соединение с помощью запущенного клиента Cerebro. # Если не выходит, устанавливаем с помощью логина и пароля db.connect(db_user, db_password) # Получение идентификатора задачи и сообщения типа "Постановка задачи" по локатору задачи task = db.task_by_url(task_url) # Получили ID задач if len(task) == 0 or task[0] == None: # Проверяем существуют ли задачи с таким локатором raise Exception('Задача не найдена') messages = db.task_definition(task[0]) # Получили сообщения задачи if len(messages) == 0: # Проверяем есть ли у задачи сообщения raise Exception('Сообщение отсутствует') parent_message = messages[dbtypes.MESSAGE_DATA_ID] # Получили ID сообщения if parent_message == None or parent_message == 0: raise Exception('Сообщение отсутствует') """ Параметры task и parent_message - это идентификаторы задачи и сообщения к которому добавляется новое сообщение. """ # Создание сообщения типа "Отчет" new_message_id = db.add_report(task[0], parent_message, text, int(work_time*60)) """ Выполняем запрос на добавление нового соообщения. Последний параметр, затраченное время, задается в минутах Результатом запроса является идентификатор нового сообщения """ # Приложение файла к отчету if file != None and len(file) != 0 and os.path.exists(file): # проверяем, задан ли файл, который нужно приложить к отчету # генерация эскизов для файла file thumbnails = make_thumnails(file) """ Если файл является изображением или видео, то можно добавить для него уменшенные эскизы. Можно добавить до 3-х эскизов (первый, средний, последний кадры). Для генерации эскизов в этом примере мы будем использовать программу Mirada. Она постовляется вместе с дистрибутивом Cerebro. Можно использовать и другие программы для генерации, например, ffmpeg. Смотрите подробнее об этом в описании функции make_thumnails. """ # Создаем объект для добавления файла и/или эскизов в файловое хранилище (Cargador) carga = cargador.Cargador(cargador_host, cargador_xmlrpc_port, cargador_http_port) """ Если файл прикладывается как ссылка, то сам файл не будет """ # Добовляем к отчету постановки задач файлы и, заодно, экспортируем их в хранилище db.add_attachment(new_message_id, carga, file, thumbnails, '', file_as_link) """ Если файл прикладывается как ссылка, то сам файл не будет экспортироваться в хранилище, но будут экспортированы эскизы. Пустая строка - это комментарий к вложению. Можете его задать по желанию. """ except Exception as err: print(err)