Home | Trees | Indices | Help |
|
---|
|
1 # -*- coding: utf-8 -*- 2 3 u""" 4 Источник - объект, из которого возможно получение данных о котировках. Это 5 может быть база данных, сервер HTTP, файл, что угодно. 6 7 Основной класс этого модуля - L{Source}. Основной метод этого класса - 8 L{Source.runImport}. Этот метод запускает процесс импорта данных. 9 """ 10 11 __author__ = "Zasimov Alexey" 12 __email__ = "zasimov-a@yandex-team.ru" 13 14 15 from stocks3.core.config import Configurable, ConfigurationError 16 from stocks3.core import factories # подключаем фабрики 17 from stocks3.core.default import Default 18 1921 u""" 22 Из источника данные сначала забираются (это делает транспорт), потом 23 разбираются (это делает парсер), потом вычисляются вычисляемые поля (каждый 24 объект, выданные парсером, обрабатывается калькулятором), потом приводится 25 в форму, понятную модулю записи в БД. 26 27 Задача объекта класса L{Source} - создать транспорт, парсер, калькуляторы и 28 модуль записи. То есть этот класс управляет процессом импорта 29 (L{Source.runImport}). 30 """131 132 133 factories.sources.register("stocks3.sources.Standart", Source) 13432 self.default = Default() # конфигурация по умолчанию 33 34 self.active = self.readBool("", "active", True) 35 # Считываем параметры источника. 36 self._readSourceParams() 37 # Считываем параметры транспортов. 38 self._readTransports() 39 # Считываем параметры парсера. 40 self._readParser() 41 # Считываем параметры калькулятора. 42 self._readCalculators() 43 # Считываем параметры места, куда будут загружаться данные. 44 self._readPlace() 45 # Считываем параметра saver'a. 46 self._readSaver() 47 return self48 49 # Функции для обработки XML-файла с конфигурацией51 u""" 52 Обработка <source/>. Могут присутствовать параметры: 53 - id - идентификатор источника; 54 - weight - вес источника; 55 - active - активен источник или нет? 56 """ 57 self.sourceId = self.readString("/source", "id") 58 # Человеческое имя источника. 59 self.name = self.readString("/source", "name") 60 self.weight = self.readInt("/source", "weight") 61 self.active = self.readBool("/source", "active", True)6264 u""" 65 Считываем списка транспортов, используя которые можно достучаться до 66 данных котировок. 67 68 Все транспорты описываются в секции transports/transport. 69 """ 70 self.transports = self.createObjects(factories.transports, "transports/transport")7173 parsers = self.createObjects(factories.parsers, "parser") 74 if len(parsers) != 1: 75 raise ConfigurationError("Please, check parser configuration.") 76 self.parser = parsers[0]7779 savers = self.createObjects(factories.savers, "saver", self) 80 if len(savers) != 1: 81 raise ConfigurationError("Please, check saver configuration.") 82 self.saver = savers[0]8385 calculatorsNode = self.node.find("calculators") 86 if calculatorsNode: 87 dontUseDefaultsCalculators = calculators.attrib.get("dont-use-default", False) 88 else: 89 dontUseDefaultsCalculators = False 90 if not dontUseDefaultsCalculators: 91 self.calculators = self.default.getDefaultCalculators() 92 else: 93 self.calculators = [] 94 self.calculators.extend(self.createObjects(factories.calculators, "calculators/calculator"))9597 places = self.createObjects(factories.places, "place") 98 if len(places) != 1: 99 # Пытаемся взять Place из конфигурации по умолчанию 100 self.place = self.default.getDefaultPlace() 101 if self.place is None: 102 raise ConfigurationError("Please, check place configuration.") 103 else: 104 self.place = places[0]105107 u""" 108 Запускает процесс импорта данных из источника с использованием 109 транспорта transport. 110 """ 111 transport.transfer(self.place) 112 try: 113 # Парсем данные источника 114 for stock in self.parser.parse(self.place): 115 # Расчитываем поля. При это объект идет как по конвейеру. 116 for calculator in self.calculators: 117 stock = calculator.calc(stock) 118 # Сохраняем данные котировки 119 self.saver.save(stock) 120 self.saver.flush() 121 finally: 122 # Очищаем ресурсы, занятые транспортом 123 transport.clean()124 128
Home | Trees | Indices | Help |
|
---|
Generated by Epydoc 3.0.1 on Wed Jul 20 17:49:39 2011 | http://epydoc.sourceforge.net |