You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

126 lines
3.6 KiB

""" This module contains classes and functions to contain the kanban board information """
import numpy as np
import yaml
class Task:
""" This class represents each task,
"""
def __init__(self, summary, score, description):
""" Initialize the task class
"""
# Each task has the following properties
self.summary = summary # Summary of the task
self.score = score # Score for ticket
self.description = description # Description of ticket
class Board:
def __init__(self, file = None):
""" Initialize the Board class, this class has three important class variables.
These are:
self.sprint | str - name of the current sprint
self.columns | list(str) - columns in kanban board
self.tasks | list(list()) - tasks in each column
"""
self.sprint = None
self.columns = list()
self.tasks = list()
self.file = file
if file:
self.read_yaml(file)
def read_yaml(self, file):
""" Read the yaml file in and set up the data
Arguments:
file - yaml file to read in
"""
# Read in the data
with open(file, 'r') as f:
data = yaml.safe_load(f)
# Assign the data to board variables
self.columns = data['columns']
self.tasks = [[] for col in self.columns]
for task in data['tasks']:
self.tasks[self.columns.index(task['column'])].append(
Task(task['summary'], task['score'], task['description']))
def write_yaml(self, file):
""" Write the yaml file
Arguments:
file - yaml file to write to
"""
# Set up data to write out
data = dict()
data['columns'] = self.columns
data['tasks'] = list()
for col,task_list in zip(self.columns, self.tasks):
for task in task_list:
data['tasks'].append({'column':col, 'summary':task.summary, 'score':task.score,
'description':task.description})
with open(file, 'w') as f:
yaml.dump(data, f)
def move_task(self, col_index, task_index, direction):
""" This class method moves tasks between columns by incrementing/decrementing the column
index
Arguments:
col_index - index of the column we are in
task_index - index of the task we are changing in the column
direction - direction to move the task
Returns:
moved - True if a task was moved else false
"""
task = self.tasks[col_index][task_index]
if col_index+direction >= 0 and col_index+direction < len(self.columns):
self.tasks[col_index+direction].append(task)
del self.tasks[col_index][task_index]
return True
else:
return False
def print_board_items(self):
for i, col in enumerate(self.columns):
print(col)
print(self.tasks[i])
def get_columns(self):
""" Return columns"""
return self.columns
def get_tasks(self):
""" Return tasks"""
return self.tasks
def get_task(self, icol, itask):
""" Return a task based on column and task index"""
return self.tasks[icol][itask]
def update_task( self, icol, itask, task):
""" Update the task based on text """
self.tasks[icol][itask] = task
def add_task( self, icol, task):
"""Add a task to icol"""
self.tasks[icol].append(task)
def del_task(self, icol, itask):
del self.tasks[icol][itask]