def start(self): self.nodes = [] from mpx.service.time.time_zone import TimeZone if not IScheduleHolderParent.implementedBy(TimeZone): class_implements(TimeZone, IScheduleHolderParent) self.security_manager = self.nodespace.as_node(self.security_manager) self._pdo_lock.acquire() try: if not self._pdo: self._pdo = PersistentDataObject(self, dmtype=GC_NEVER) self._pdo.holders = {} self._pdo.schedules = {} self._pdo.load() holderdicts = self._pdo.holders.values() holderdumps = [] for holderdict in holderdicts: holderdumps.extend(holderdict.items()) # schedules = {'local': {'Holder1': {'Sched1': Sched1Dump}, 'Holder2': ...}, 'UTC': ...} scheduledicts = [] [ scheduledicts.extend(holderdict.values()) for holderdict in self._pdo.schedules.values() ] scheduledumps = [] for scheduledict in scheduledicts: scheduledumps.extend(scheduledict.items()) finally: self._pdo_lock.release() super(ScheduleConfigurator, self).start() tstart = time.time() for holdername, holderdump in holderdumps: try: self.nodes.append(IPickles(cPickle.loads(holderdump))()) except: message = self.LOADFAILURE % (self.name, 'Schedule Holder', holdername) msglog.log('broadway', msglog.types.ERR, message) msglog.exception(prefix='Handled') tend = time.time() tlapse = tend - tstart msglog.log( 'broadway', msglog.types.INFO, 'Schedule Configurator loaded ' '%s nodes in %s seconds.' % (len(holderdumps), tlapse)) tstart = time.time() for schedulename, scheduledump in scheduledumps: try: self.nodes.append(IPickles(cPickle.loads(scheduledump))()) except: message = self.LOADFAILURE % (self.name, 'Schedule Holder', schedulename) msglog.log('broadway', msglog.types.ERR, message) msglog.exception(prefix='Handled') tend = time.time() tlapse = tend - tstart msglog.log( 'broadway', msglog.types.INFO, 'Schedule Configurator loaded ' '%s nodes in %s seconds.' % (len(scheduledumps), tlapse)) self.template = self.parent.read_resource(self.page_template)
def start(self): self.nodes = [] from mpx.service.time.time_zone import TimeZone if not IScheduleHolderParent.implementedBy(TimeZone): class_implements(TimeZone, IScheduleHolderParent) self.security_manager = self.nodespace.as_node(self.security_manager) self._pdo_lock.acquire() try: if not self._pdo: self._pdo = PersistentDataObject(self, dmtype=GC_NEVER) self._pdo.holders = {} self._pdo.schedules = {} self._pdo.load() holderdicts = self._pdo.holders.values() holderdumps = [] for holderdict in holderdicts: holderdumps.extend(holderdict.items()) # schedules = {'local': {'Holder1': {'Sched1': Sched1Dump}, 'Holder2': ...}, 'UTC': ...} scheduledicts = [] [scheduledicts.extend(holderdict.values()) for holderdict in self._pdo.schedules.values()] scheduledumps = [] for scheduledict in scheduledicts: scheduledumps.extend(scheduledict.items()) finally: self._pdo_lock.release() super(ScheduleConfigurator, self).start() tstart = time.time() for holdername, holderdump in holderdumps: try: self.nodes.append(IPickles(cPickle.loads(holderdump))()) except: message = self.LOADFAILURE % (self.name, 'Schedule Holder', holdername) msglog.log('broadway', msglog.types.ERR, message) msglog.exception(prefix = 'Handled') tend = time.time() tlapse = tend - tstart msglog.log('broadway', msglog.types.INFO, 'Schedule Configurator loaded ' '%s nodes in %s seconds.' % (len(holderdumps), tlapse)) tstart = time.time() for schedulename, scheduledump in scheduledumps: try: self.nodes.append(IPickles(cPickle.loads(scheduledump))()) except: message = self.LOADFAILURE % (self.name, 'Schedule Holder', schedulename) msglog.log('broadway', msglog.types.ERR, message) msglog.exception(prefix = 'Handled') tend = time.time() tlapse = tend - tstart msglog.log('broadway', msglog.types.INFO, 'Schedule Configurator loaded ' '%s nodes in %s seconds.' % (len(scheduledumps), tlapse)) self.template = self.parent.read_resource(self.page_template)
def createnode(self, node, data): if IScheduleHolderParent.providedBy(node): defaultname = "Holder %d" nodetype = ScheduleHolder elif IScheduleHolder.providedBy(node): defaultname = "RZShed_%d" nodetype = Schedule else: message = "createnode() does not know what to create for %s" raise TypeError(message % node) parentnode = node if data.has_key("configure.name"): childname = urllib.unquote_plus(data['configure.name'][0]) else: index = len(parentnode.children_nodes()) + 1 childname = defaultname % index while parentnode.has_child(childname): index += 1 childname = defaultname % index childname = defaultname % len(parentnode.children_nodes()) if not childname: raise TypeError("Illegal node name: %r" % childname) if IScheduleHolder.providedBy(node): if childname == '': error = "Holder name required" raise TypeError(error) if not childname.startswith("RZSched_"): if childname.lower().startswith("rzsched_"): childname = childname.lower().split("rzsched_")[1] childname = "RZSched_" + childname config = { 'name': childname, 'parent': parentnode, 'description': '', 'source': 'ScheduleConfigurator' } message = "createnode() creating %s type child of %s." self.message(message, nodetype.__name__, parentnode) childnode = nodetype() childnode.configure(config) return parentnode
def updatepdo(self, managernode): self.debugout("updatepdo(%s)", as_node_url(managernode)) tstart = time.time() while not IScheduleHolderParent.providedBy(managernode): managernode = managernode.parent managername = managernode.name self.message('updating PDO for %s.', as_node_url(managernode)) self._pdo_lock.acquire() try: holderdict = self._pdo.holders.setdefault(managername, {}) holderdict.clear() scheduledicts = self._pdo.schedules.setdefault(managername, {}) scheduledicts.clear() children = managernode.children_nodes() holders = filter(IScheduleHolder.providedBy, children) for holder in holders: if holder.source == 'ScheduleConfigurator': self.debugout('storing holder %s.', as_node_url(holder)) holderdict[holder.name] = cPickle.dumps(IPickles(holder)) else: self.debugout('skipping holder %s.', as_node_url(holder)) scheduledict = scheduledicts.setdefault(holder.name, {}) scheduledict.clear() schedules = filter(ISchedule.providedBy, holder.children_nodes()) for schedule in schedules: if schedule.source == 'ScheduleConfigurator': self.debugout('storing schedule %s.', as_node_url(schedule)) scheduledata = cPickle.dumps(IPickles(schedule)) scheduledict[schedule.name] = scheduledata else: self.debugout('skipping schedule %s.', as_node_url(schedule)) self._pdo.save() finally: self._pdo_lock.release() tend = time.time() self.debugout('took %0.3f secs to update PDO.', tend - tstart)
def updatepdo(self, managernode): self.debugout("updatepdo(%s)", as_node_url(managernode)) tstart = time.time() while not IScheduleHolderParent.providedBy(managernode): managernode = managernode.parent managername = managernode.name self.message('updating PDO for %s.', as_node_url(managernode)) self._pdo_lock.acquire() try: holderdict = self._pdo.holders.setdefault(managername, {}) holderdict.clear() scheduledicts = self._pdo.schedules.setdefault(managername,{}) scheduledicts.clear() children = managernode.children_nodes() holders = filter(IScheduleHolder.providedBy, children) for holder in holders: if holder.source == 'ScheduleConfigurator': self.debugout('storing holder %s.', as_node_url(holder)) holderdict[holder.name] = cPickle.dumps(IPickles(holder)) else: self.debugout('skipping holder %s.', as_node_url(holder)) scheduledict = scheduledicts.setdefault(holder.name, {}) scheduledict.clear() schedules = filter(ISchedule.providedBy, holder.children_nodes()) for schedule in schedules: if schedule.source == 'ScheduleConfigurator': self.debugout( 'storing schedule %s.', as_node_url(schedule)) scheduledata = cPickle.dumps(IPickles(schedule)) scheduledict[schedule.name] = scheduledata else: self.debugout( 'skipping schedule %s.', as_node_url(schedule)) self._pdo.save() finally: self._pdo_lock.release() tend = time.time() self.debugout('took %0.3f secs to update PDO.', tend - tstart)
def createnode(self, node, data): if IScheduleHolderParent.providedBy(node): defaultname = "Holder %d" nodetype = ScheduleHolder elif IScheduleHolder.providedBy(node): defaultname = "RZShed_%d" nodetype = Schedule else: message = "createnode() does not know what to create for %s" raise TypeError(message % node) parentnode = node if data.has_key("configure.name"): childname = urllib.unquote_plus(data['configure.name'][0]) else: index = len(parentnode.children_nodes()) + 1 childname = defaultname % index while parentnode.has_child(childname): index += 1 childname = defaultname % index childname = defaultname % len(parentnode.children_nodes()) if not childname: raise TypeError("Illegal node name: %r" % childname) if IScheduleHolder.providedBy(node): if childname == '': error = "Holder name required" raise TypeError(error) if not childname.startswith("RZSched_"): if childname.lower().startswith("rzsched_"): childname = childname.lower().split("rzsched_")[1] childname = "RZSched_" + childname config = {'name': childname, 'parent': parentnode, 'description': '', 'source': 'ScheduleConfigurator'} message = "createnode() creating %s type child of %s." self.message(message, nodetype.__name__, parentnode) childnode = nodetype() childnode.configure(config) return parentnode