Source code for grader.datastructures
from .utils import import_module
[docs]class OrderedTestcases:
" Class that acts like a ordered dictionary, with removal and reset"
def __init__(self):
self.clear()
[docs] def clear(self):
self.cases = {}
self.order = []
[docs] def add(self, name, value):
#assert name not in self.order
self.cases[name] = value
if name in self.order:
self.order.remove(name)
self.order.append(name)
[docs] def remove(self, name):
self.order.remove(name)
self.cases.pop(name)
[docs] def rename(self, old_name, new_name):
if old_name not in self.cases:
raise ValueError('Old name {} does not exist in keys.'.format(old_name))
if new_name in self.cases:
raise ValueError('New name {} already exists in keys.'.format(new_name))
self.order[self.indexOf(old_name)] = new_name
self.cases[new_name] = self.cases[old_name]
self.cases.pop(old_name)
[docs] def load_from(self, module_path):
self.clear()
import_module(module_path)
[docs] def values(self):
return ((o, self.cases[o]) for o in self.order)
[docs] def indexOf(self, name):
return self.order.index(name)
[docs] def get_name(self, index):
return self.order[index]
def __getitem__(self, name):
return self.cases[name]
def __contains__(self, name):
return name in self.cases
def __iter__(self):
return iter(self.order)
def __len__(self):
return len(list(x for x in self))