azure-devops/azext_devops/dev/boards/_format.py (187 lines of code) (raw):

# -------------------------------------------------------------------------------------------- # Copyright (c) Microsoft Corporation. All rights reserved. # Licensed under the MIT License. See License.txt in the project root for license information. # -------------------------------------------------------------------------------------------- from collections import OrderedDict _WORK_ITEM_TITLE_TRUNCATION_LENGTH = 70 _PATH_TRUNCATION_LENGTH = 50 def transform_work_item_relation_type_table_output(result): table_output = [] for item in result: table_row = OrderedDict() table_row['Name'] = item['name'] table_row['ReferenceName'] = item['referenceName'] table_row['Enabled'] = item['attributes']['enabled'] table_row['Usage'] = item['attributes']['usage'] table_output.append(table_row) return table_output def transform_work_item_relations(result): if result['relations'] is None: return [] relations = result['relations'] table_output = [] for item in relations: table_row = OrderedDict() table_row['Relation Type'] = item['rel'] table_row['Url'] = item['url'] table_output.append(table_row) return table_output def transform_work_items_table_output(result): table_output = [] for item in result: table_output.append(_transform_work_items_row(item)) return table_output def transform_work_item_table_output(result): table_output = [_transform_work_items_row(result)] return table_output def _transform_work_items_row(row): table_row = OrderedDict() table_row['ID'] = row['id'] if 'fields' in row: if 'System.WorkItemType' in row['fields']: table_row['Type'] = row['fields']['System.WorkItemType'] else: table_row['Type'] = ' ' if 'System.Title' in row['fields']: title = row['fields']['System.Title'] if len(title) > _WORK_ITEM_TITLE_TRUNCATION_LENGTH: title = title[0:_WORK_ITEM_TITLE_TRUNCATION_LENGTH - 3] + '...' table_row['Title'] = title else: table_row['Title'] = ' ' if 'System.AssignedTo' in row['fields']: table_row['Assigned To'] = row['fields']['System.AssignedTo']['uniqueName'] else: table_row['Assigned To'] = ' ' if 'System.State' in row['fields']: table_row['State'] = row['fields']['System.State'] else: table_row['State'] = ' ' else: table_row['Type'] = ' ' table_row['Title'] = ' ' table_row['Assigned To'] = ' ' table_row['State'] = ' ' return table_row def transform_work_item_query_result_table_output(result): table_output = [] for item in result: if 'fields' in item: table_output.append(transform_work_item_query_result_row_output(item['fields'])) return table_output def transform_work_item_query_result_row_output(row): from azext_devops.dev.boards.work_item import get_last_query_result table_row = OrderedDict() max_columns = 5 i = 0 for field_reference in get_last_query_result().columns: if field_reference.reference_name in row: if row[field_reference.reference_name] == 0: # knack hides column values that are equal to numeric 0. table_row[field_reference.name] = '0' else: if field_reference.reference_name == 'System.Title': title = row[field_reference.reference_name] if len(title) > _WORK_ITEM_TITLE_TRUNCATION_LENGTH: title = title[0:_WORK_ITEM_TITLE_TRUNCATION_LENGTH - 3] + '...' table_row[field_reference.name] = title elif field_reference.reference_name == 'System.AssignedTo': table_row[field_reference.name] = row[field_reference.reference_name]['uniqueName'] else: table_row[field_reference.name] = row[field_reference.reference_name] else: table_row[field_reference.name] = ' ' i += 1 if i >= max_columns: # limit number of columns in table view break return table_row def transform_work_item_team_iterations_table_output(result): table_output = [] for item in sorted(result, key=_get_team_iteration_key): table_output.append(_transform_team_iteration_row(item)) return table_output def transform_work_item_team_iteration_table_output(result): table_output = [_transform_team_iteration_row(result)] return table_output def _transform_team_iteration_row(row): table_row = OrderedDict() table_row['ID'] = row['id'] table_row['Name'] = row['name'] if row['attributes']: if row['attributes']['startDate'] is None: table_row['Start Date'] = '' else: table_row['Start Date'] = row['attributes']['startDate'] if row['attributes']['finishDate'] is None: table_row['Finish Date'] = '' else: table_row['Finish Date'] = row['attributes']['finishDate'] if 'timeFrame' in row['attributes']: table_row['Time Frame'] = row['attributes']['timeFrame'] table_row['Path'] = row['path'] return table_row def transform_work_item_team_iteration_work_items(result): table_output = [] for item in result['workItemRelations']: table_output.append(_transform_team_iteration_work_item_row(item)) return table_output def _transform_team_iteration_work_item_row(row): table_row = OrderedDict() if row['source']: table_row['Source'] = row['source']['id'] if row['target']: table_row['Target'] = row['target']['id'] table_row['Relation Type'] = row['rel'] return table_row def transform_work_item_team_default_iteration_table_output(result): table_output = [] table_row = OrderedDict() if result['defaultIteration']: table_row = _transform_team_iteration_row(result['defaultIteration']) table_row['Default Iteration Macro'] = result['defaultIterationMacro'] table_output.append(table_row) return table_output def transform_work_item_team_backlog_iteration_table_output(result): table_output = [] table_output.append(_transform_team_iteration_row(result['backlogIteration'])) return table_output def transform_work_item_project_classification_nodes_table_output(response): table_op = [] table_op = transform_work_item_project_classification_nodes_table_output_recursive(response, table_op) return table_op def transform_work_item_project_classification_nodes_table_output_recursive(result, table_output): table_output.append(_transform_project_classification_node_row(result)) if result['children']: for item in result['children']: table_output = transform_work_item_project_classification_nodes_table_output_recursive(item, table_output) return table_output def transform_work_item_project_classification_node_table_output(result): table_output = [_transform_project_classification_node_row(result[0])] return table_output def _transform_project_classification_node_row(row): table_row = OrderedDict() table_row['ID'] = row['id'] table_row['Identifier'] = row['identifier'] table_row['Name'] = row['name'] if row['attributes']: table_row['Start Date'] = row['attributes']['startDate'] table_row['Finish Date'] = row['attributes']['finishDate'] path = row['path'] if len(path) > _PATH_TRUNCATION_LENGTH: path = path[0:_PATH_TRUNCATION_LENGTH - 3] + '...' table_row['Path'] = path table_row['Has Children'] = row['hasChildren'] return table_row def transform_work_item_team_areas_table_output(result): table_output = [] for item in sorted(result['values'], key=_get_team_area_key): table_output.append(_transform_work_item_team_area_row(item, default_area_path=result['defaultValue'])) return table_output def _transform_work_item_team_area_row(row, default_area_path): table_row = OrderedDict() table_row['Area'] = row['value'] table_row['Include sub areas'] = row['includeChildren'] if row['value'] == default_area_path: table_row['Is Default'] = True else: table_row['Is Default'] = False return table_row def _get_team_iteration_key(team_iteration_row): return team_iteration_row['name'].lower() def _get_team_area_key(team_area_row): return team_area_row['value'].lower()