class ReserveShell(object): def __init__(self): self.sess = get_session() self.logger = settings.logging.getLogger('reserveshell') self.remote_api = RemoteAPI(username=settings.REMOTE_USERNAME, password=settings.REMOTE_PASSWORD) def run(self, rule_id=None): filter = None if rule_id is not None: filter = (Rule.id == rule_id) rules = Rule.get(filter, sess=self.sess) self.logger.info('There are %d rules.' % len(rules)) for rule in rules: self.reserve_by_rule(rule) def reserve_by_rule(self, rule): self.logger.info('processing rule: id %s' % rule.id) filter = and_(Program.rule_id == None, rule.conditions.make_filter()) programs = Program.get_reservable(filter, sess=self.sess) self.logger.info('%d program(s) to reserve found' % len(programs)) for program in programs: if self.remote_api.reserve(crid=program.crid): self.logger.info('reservation succeeded: crid %s' % program.crid) program.reserve_by = rule self.sess.add(program) self.sess.commit() self.logger.info('update program data: reserved_by = %s' % rule.id) else: self.logger.info('reservation failed: crid %s' % program.crid)
def __init__(self): self.sess = get_session() self.logger = settings.logging.getLogger('reserveshell') self.remote_api = RemoteAPI(username=settings.REMOTE_USERNAME, password=settings.REMOTE_PASSWORD)