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))