From 17ce2f1f0ffd199c7f7d73bfaefd7846b792fecd Mon Sep 17 00:00:00 2001 From: Lars-Dominik Braun Date: Mon, 6 Mar 2017 14:10:17 +0100 Subject: Initial import --- ilpscheduling/model.py | 56 ++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 56 insertions(+) create mode 100644 ilpscheduling/model.py (limited to 'ilpscheduling/model.py') diff --git a/ilpscheduling/model.py b/ilpscheduling/model.py new file mode 100644 index 0000000..baa02d1 --- /dev/null +++ b/ilpscheduling/model.py @@ -0,0 +1,56 @@ +# vim: set fileencoding=utf-8 : + +import yaml + +class WorkerSlotModel: + def __init__ (self, slots, worker, env): + self._slots = slots + self._worker = worker + self._env = env + + # generated properties, public, read-only + self.slotNames = set (slots.keys ()) + assert len (self.slotNames) == len (slots.keys ()), "slot names must be unique" + self.workerNames = set (worker.keys ()) + assert len (self.workerNames) == len (worker.keys ()), "worker names must be unique" + self.minTotalSlots = self._env.get ('minSlots', 0) + self.maxTotalSlots = self._env.get ('maxSlots', len (self.slotNames)) + + @classmethod + def fromYaml (obj, fd): + """ + Import from YAML file. Structured like this: + + """ + data = yaml.load (fd) + o = obj (data['slots'], data['worker'], data.get ('env', {})) + return o + + def available (self, worker, slot): + """ + Is worker available for slot? + """ + return self.priority (worker, slot) is not None + + def priority (self, worker, slot): + """ + Get worker’s preferences/priority for slot, priority is higher for + smaller numbers and must be >= 1 + """ + return self._worker[worker]['prio'].get (slot, None) + + def maxSlots (self, worker): + return self._worker[worker]['slots']['max'] + + def minSlots (self, worker): + return self._worker[worker]['slots']['min'] + + def maxWorker (self, slot): + return self._slots[slot]['max'] + + def minWorker (self, slot): + return self._slots[slot]['min'] + + def dump (self, fd): + yaml.dump ({'worker': self._worker, 'slots': self._slots, 'env': self._env}, fd) + -- cgit v1.2.3