def initialize_handler(configuration, engine): """Initialize the handler from configuration.""" metadata = MetaData() files = {} parsers = {} sinks = {} for filename, patterns in configuration.get_file_to_patterns().items(): files[filename] = LogFile(filename) parsers[filename] = [] for name, pattern in patterns.items(): parser = Parser(pattern['regex'], pattern['fields'], pattern['datetime-format']) parsers[filename].append(parser) (table, model) = get_table(metadata, name, pattern['fields'], pattern['order']) sinks[parser] = Sink(sessionmaker(bind=engine), table, model) # SqlAlchemy will auto create tables, but it will not update existing ones. metadata.create_all(engine) handler = Handler(files, parsers, sinks) notifier = Handler.get_notifier(handler) # Kick off a scan before blocking on file updates. handler.handle_all() return notifier
def test_difference(self): """Test that two tables don't return the same instances.""" (table, model_class) = get_table(self.metadata, "table_2", self.fields, self.order) self.assertNotEqual(self.table, table) self.assertNotEqual(self.model_class, model_class)
def test_order_ignoring(self): """Assert special orders are ignored.""" self.order.append("id") self.order.append("date") self.order.append("time") (table, model_class) = get_table(self.metadata, "table_2", self.fields, self.order) # pylint: disable=W0612 model = model_class({"id": 1, "time": datetime.now(), "test1": "test1", "test2": "test2"}) for key in model.get_data().keys(): self.assertNotIn(key, ["id", "date", "time"])
def test_field_ignoring(self): """Assert special fields are ignored.""" self.fields.append("id") self.fields.append("date") self.fields.append("time") (table, model_class) = get_table(self.metadata, "table_2", self.fields, self.order) # pylint: disable=W0612 for column in table.columns: if column.name == "id": self.assertEqual(type(column.type), Integer) elif column.name == "time": self.assertEqual(type(column.type), DateTime) self.assertNotEqual("date", column.name)
def _config(configuration): """Get Logolas web configuration.""" fields = [] for patterns in configuration.get_file_to_patterns().values(): for pattern in patterns.values(): fields.extend(pattern['fields']) fields = list(frozenset(fields)) tables = [] for patterns in configuration.get_file_to_patterns().values(): for name, pattern in patterns.items(): pair = get_table(db.metadata, name, pattern['fields'], pattern['order']) tables.append(pair) return { 'fields': fields, 'tables': tables }
def setUp(self): #pylint: disable=C0103 """Initialize""" engine = create_engine('sqlite:///:memory:') metadata = MetaData() (self.table, self.model) = get_table( metadata, 'table', [ 'time', 'test1', 'test2' ], [ 'test2', 'test1' ], ) metadata.create_all(engine) self.sessionmaker = sessionmaker(bind=engine) self.sink = Sink(self.sessionmaker, self.table, self.model)
def setUp(self): # pylint: disable=C0103 """Initialize""" self.metadata = MetaData() self.fields = ["time", "test1", "test2"] self.order = ["test2", "test1"] (self.table, self.model_class) = get_table(self.metadata, "table", self.fields, self.order)