Exemple #1
0
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()
Exemple #2
0
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('Достигнут лимит количества активных заданий в системе')