def yt_stat(): yt = YouTrack('https://youtrack.bisys.ru', token=youtrack_api_token) try: support_created_yesterday = yt.getNumberOfIssues( filter='проект: {!W Support [email protected]} создана: Вчера') stat['yt'].append(support_created_yesterday) customer_helpdesk_created_yesterday = yt.getNumberOfIssues( filter='проект: {Customer Help Desk} создана: Вчера') stat['yt'].append(customer_helpdesk_created_yesterday) customer_helpdesk_vezet_created_yesterday = yt.getNumberOfIssues( filter= 'проект: {Customer Help Desk Vezet, [email protected]} создана: Вчера' ) stat['yt'].append(customer_helpdesk_vezet_created_yesterday) support_kassir_created_yesterday = yt.getNumberOfIssues( filter= 'проект: {!W Support Kassir [email protected]} создана: Вчера') stat['yt'].append(support_kassir_created_yesterday) support_closed_yesterday = yt.getNumberOfIssues( filter='проект: SUPPORT дата завершения: Вчера') stat['yt'].append(support_closed_yesterday) customer_helpdesk_closed_yesterday = yt.getNumberOfIssues( filter='проект: {Customer Help Desk} дата завершения: Вчера') stat['yt'].append(customer_helpdesk_closed_yesterday) customer_helpdesk_vezet_closed_yesterday = yt.getNumberOfIssues( filter= 'проект: {Customer Help Desk Vezet, [email protected]} дата завершения: Вчера' ) stat['yt'].append(customer_helpdesk_vezet_closed_yesterday) support_kassir_closed_yesterday = yt.getNumberOfIssues( filter= 'проект: {!W Support Kassir [email protected]} дата завершения: Вчера' ) stat['yt'].append(support_kassir_closed_yesterday) issules_waiting_summary = yt.getNumberOfIssues( filter= 'проект: SUPPORT , {Customer Help Desk} , {Customer Help Desk Vezet, [email protected]} , KASSA #Незавершенная' ) stat['yt'].append(issules_waiting_summary) except TimeoutException as e: logger.error(f'Timeout Exception: {e}') except YouTrackException as e: logger.debug(f'YouTrackException: {e}') except Exception as e: logger.error(f'Other Exception: {e}') if stat['yt']: logger.debug(f'Данные YT собраны:{stat}') else: logger.debug("Can't record YT data")
class ConnectionTest(unittest.TestCase): def setUp(self): #self.con = Connection('http://teamsys.intellij.net', 'resttest', 'resttest') self.con = Connection("http://localhost:8080", "root", "root") def test_getProject(self): p = self.con.getProject('SB') self.assertEqual(p.id, 'SB') self.assertEqual(p.name, 'Sandbox') def test_getSubsystems(self): subsystems = self.con.getSubsystems('SB') default = [s for s in subsystems if s.isDefault][0] self.assertTrue(default is not None) def test_getIssue(self): i = self.con.getIssue('SB-1') self.assertEqual(i.id, 'SB-1') self.assertEqual(i.numberInProject, '1') self.assertEqual(i.projectShortName, 'SB') def test_createIssue(self): i = self.con.createIssue('SB', 'resttest', 'Test issue', 'Test description', '2', 'Bug', 'First', 'Open', '', '', '') self.assertEqual(i.projectShortName, 'SB') self.assertEqual(i.priority, '2') self.assertEqual(i.type, 'Bug') self.assertEqual(i.subsystem, 'First') def test_createIssueAttachment(self): i = self.con.createIssue('SB', 'resttest', 'For attachmkents test', 'Test description', '2', 'Bug', 'First', 'Open', '', '', '') fname = 'connection_test.py' content = open(fname) self.con.createAttachment(i.id, fname, content) self.assertEqual(fname, self.con.getAttachments(i.id)[0].name) def test_createAndDeleteSubsystem(self): name = 'Test Subsystem [' + str(random.random()) + "]" self.con.createSubsystemDetailed('SB', name, False, 'resttest') s = self.con.getSubsystem('SB', name) self.assertEqual(s.name, name) self.assertEqual(s.isDefault, 'false') #todo: uncomment when fix deployed to teamsys #self.assertEqual(s.defaultAssignee, 'resttest') self.con.deleteSubsystem('SB', name) def test_importIssues(self): issues = self.con.getIssues("A", "", 0, 10) for issue in issues: if hasattr(issue, "Assignee"): issue["assigneeName"] = issue["Assignee"] del issue.Assignee self.con.importIssues("B", "assignees", issues) def test_getNumberOfIssues(self): self.assertGreater(self.con.getNumberOfIssues(), -1)
def proyecto_elegido(bot, update, user_data): bot.sendChatAction(chat_id=update.callback_query.from_user.id, action=ChatAction.TYPING) # Es la primera vez que entra o cambia tipo de tareas? if not user_data.get('proyecto'): user_data['proyecto'] = update.callback_query.data user_data['pagging'] = [0, max_issues_per_page] user_data['tipo_tarea'] = '#{Sin resolver}' logger.info('Elegir Proyecto Opción {}'.format(user_data['proyecto'])) elif update.callback_query.data == '>': user_data['pagging'] = [ user_data['pagging'][0] + max_issues_per_page, user_data['pagging'][1] + max_issues_per_page ] elif update.callback_query.data == '<': user_data['pagging'] = [ user_data['pagging'][0] - max_issues_per_page, user_data['pagging'][1] - max_issues_per_page ] else: user_data['tipo_tarea'] = update.callback_query.data user_data['pagging'] = [0, max_issues_per_page] logger.info('Elegir Proyecto Opción {} {}'.format( user_data['proyecto'], user_data['tipo_tarea'])) logger.info('paginas {}/{}'.format(user_data['pagging'][0], user_data['pagging'][1])) connection = Connection(user_data['host']['host'], user_data['host']['username'], user_data['host']['pass']) username, email = splitEmail(user_data['host']['username']) #of #me #{Sin asignar} -Resolved query = '(asignado a: ' + username + ' o #{Sin asignar}) y ' + user_data[ 'tipo_tarea'] logger.info(query) issues = connection.getIssues(user_data['proyecto'], query, user_data['pagging'][0], max_issues_per_page) #Necesito guardar el numero de issues segun query para el paginado pq es lento if user_data['tipo_tarea'] == '#resuelta': if not user_data.get('issue_count_resueltas'): user_data['issue_count_resueltas'] = connection.getNumberOfIssues( query + ' y #' + user_data['proyecto']) issue_count = user_data['issue_count_resueltas'] else: if not user_data.get('issue_count_no_resueltas'): user_data[ 'issue_count_no_resueltas'] = connection.getNumberOfIssues( query + ' y #' + user_data['proyecto']) issue_count = user_data['issue_count_no_resueltas'] keyboard = [] texto = '*Tareas:* \n ' for issue in issues: texto += '\n *[{}]* _{}, {}_\n *Prioridad:* _{}_\n *Resumen:* {} \n'.format( issue['id'], issue['Type'], issue['State'], issue['Priority'], escapeMarkdown(utf8(issue['summary']))) keyboard.append( InlineKeyboardButton(issue['id'], callback_data=issue['id'])) # Agrego posibilidad de ver otras tareas if user_data['tipo_tarea'] == '#{Sin resolver}': keyboard.append( InlineKeyboardButton('Ver solucionadas', callback_data='#resuelta')) else: keyboard.append( InlineKeyboardButton('Ver no solucionadas', callback_data='#{Sin resolver}')) #Paginado if user_data['pagging'][0] > 0: keyboard.append(InlineKeyboardButton('<', callback_data='<')) if len(issues) >= 5: keyboard.append(InlineKeyboardButton('>', callback_data='>')) # Acomodo el teclado keyboard = [keyboard[i:i + 3] for i in range(0, len(keyboard), 3)] reply_markup = InlineKeyboardMarkup(keyboard, resize_keyboard=True, one_time_keyboard=True) texto += '\n *Elegí la tarea:*' if len(keyboard) > 0: update.callback_query.edit_message_text(text=texto, reply_markup=reply_markup, parse_mode='Markdown') return ISSUE else: update.callback_query.edit_message_text( text="No hay tareas asignadas a vos! Chau") return ConversationHandler.END