class TransformVariableHandler(Handler):

    # spec:
    # key_value_delimiter: str
    # known_key_predicate: str, State -> bool
    # key_transformer: str, str, State -> str
    # transform_fun: str -> object
    # value: object
    # rt: TransformVariableHandler
    def __init__(self, key_value_delimiter, known_key_predicate, key_transformer, transform_fun, value):
        self._key_value_handler = TransformKeyValueHandler(key_value_delimiter, known_key_predicate, key_transformer, transform_fun)
        self._single_key_handler = SingleKeyHandler.create_with_known_key_predicate(key_value_delimiter, known_key_predicate, key_transformer, value)

    # spec:
    # key_value_delimiter: str
    # known_key_list: [str]
    # key_transformer: str, str, State -> str
    # transform_fun: str -> object
    # value: object
    # rt: TransformVariableHandler
    @classmethod
    def create_with_known_key_list(cls, key_value_delimiter, known_key_list, key_transformer, transform_fun, value):
        known_key_predicate = lambda key, state: key in known_key_list
        return cls(key_value_delimiter, known_key_predicate, key_transformer, transform_fun, value)

    # spec:
    # key_value_delimiter: str
    # known_key_predicate: str, State -> bool
    # key_transformer: str, str, State -> str
    # transform_fun: str -> object
    # value: object
    # rt: TransformVariableHandler
    @classmethod
    def create_with_known_key_predicate(cls, key_value_delimiter, known_key_predicate, key_transformer, transform_fun, value):
        return cls(key_value_delimiter, known_key_predicate, key_transformer, transform_fun, value)

    # spec: str, State -> (bool, State)
    def process(self, source, state):
        (result, state) = self._key_value_handler.process(source, state)
        if result:
            return (True, state)
        return self._single_key_handler.process(source, state)
Пример #2
0
 def __init__(self, source_filename, db_file_path, logger):
     filters = [CommentFilter("#"), SpacesFilter()]
     standard_key_transformer = StandardKeyTransformer()
     ip_key_transformer = lambda key, state: "%(category)s.ip" % {"category": state.state_id}
     handlers = [
         StandardConfigSectionHandler(),
         SimpleKeyValueHandler.create_with_known_key_predicate(
             "=", lambda key, state: state.state_id == "services", standard_key_transformer
         ),
         TransformKeyValueHandler.create_with_known_key_predicate(
             "=", lambda key, state: state.state_id == "users", standard_key_transformer, transform_user_fun
         ),
         AggregateKeyValueHandler.create_with_known_key_list(
             "=", ["ip0", "ip1", "ip2", "ip3", "ip4"], ip_key_transformer, lambda old_value, item: old_value + 1, 0
         ),
     ]
     init_state = OrderedDict()
     encoding = "utf-8"
     self._collect_task = FileSourceCollectTask(
         self._source, filters, handlers, init_state, source_filename, encoding, db_file_path, logger
     )
 def __init__(self, methodName='runTest'):
     super(TestTransformKeyValueHandler, self).__init__(methodName)
     key_transformer = lambda key, value, state: key
     value_transformer = lambda value: '__' + str(value) + '__'
     self._handler = TransformKeyValueHandler.create_with_known_key_list('=', ['key13', 'key666'], key_transformer, value_transformer)
 def __init__(self, key_value_delimiter, known_key_predicate, key_transformer, transform_fun, value):
     self._key_value_handler = TransformKeyValueHandler(key_value_delimiter, known_key_predicate, key_transformer, transform_fun)
     self._single_key_handler = SingleKeyHandler.create_with_known_key_predicate(key_value_delimiter, known_key_predicate, key_transformer, value)