class Cacher(object): u"""Система кеширования запросов""" # Соединение с БД __conn = {'connection':None, 'cursor':None} _log = None _db = None # Счетчик выполняющихся в данный момент запросов __query = 0 def __init__(self): self._log = Logger() self._db = DB() def getStations(self, stationName): u"""Возвращает станции начинающиеся со строки""" self._db.execute('''SELECT * FROM `Stations` WHERE `Name` LIKE %s ORDER BY `S` DESC LIMIT 100''', ("%" + stationName + "%")) return self._db.getFetchAll(True) def setStations(self, stations): u'''Сохранение станций в кеше''' data = [] for station in stations: data.append('("%s","%s","%s","%s")' % (station['c'], station['n'], station['S'], station['L'])) self._db.execute('''INSERT IGNORE INTO `Stations` (`Code`, `Name`, `S`, `L`) VALUES %s''' % ','.join(data)) self._db.getConnDB().commit()
class Task(object): u""" Класс управления заданиями Позволяет добавлять и удалять задания из очереди """ _db = None # Логи _log = None # РЖД модуль _rzd = None # Словарь имен вызванных логов для partial _logNamesPart = {} def __init__(self): self._log = Logger() self._db = DB() self._rzd = RZD() def __getattr__(self, name): try: return self._logNamesPart[name] except KeyError: obj = getattr(self._log, name) if obj is not None: part = partial(obj, moduleName=self.__class__.__name__) self._logNamesPart[name] = part return part else: self._log.error('Попытка вызова несуществующего типа лога "%s"', name, moduleName=self.__class__.__name__) def cnt(self): u''' Получение количества активных заданий в системе @return int ''' self._db.execute('''SELECT COUNT(*) FROM `Tasks` WHERE `Complete`=%s''', IN_PROGRESS) return int(self._db.getFetchOne()[0]) def add(self, src, dst, date, phone, type): u'''Добавление нового задания в очередь''' limit = config.getint('system', 'taskLimit') if limit > self.cnt(): self._rzd.getTrains(src, dst, date) self._db.execute('''INSERT INTO `Tasks` SET `Phone`=%s, `Src`=%s, `Dst`=%s, `Date`=%s, `Type`=%s, `DateTimeCreate`=NOW(), `DateTimeCheck`=null, `Complete`=0''', phone, int(src), int(dst), date, type) self._db.getConnDB().commit() self.debug('Клиент %s добавил новую заявку', phone) else: self.error('Система не может принять %d-ю заявку', self.cnt()) raise Exception('Достигнут лимит количества активных заданий в системе')