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)