Пример #1
0
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])
Пример #2
0
def connect_db(user, password):
    """
	Функция для соединения с базой данных.

	user - имя пользователя cerebro.
	password - пароль пользователя cerebro.
	"""
    # Создаем объект базы данных
    db = database.Database()
    # Соединяемся с базой данных
    db.connect(user, password)

    return db
Пример #3
0
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
Пример #4
0
	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()
Пример #5
0
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)
Пример #6
0
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)