Шаблон проектирования для настраиваемых конвейеров с нестандартными свойствами - PullRequest
0 голосов
/ 10 мая 2019

Я пытаюсь облегчить создание конвейеров, которые передают словари между каждым элементом в конвейере для манипулирования данными.

Я могу создать стандартный конвейер, где вы начинаете с «модуля», который возвращаетсловарь, который затем передается следующему элементу в конвейере для выполнения какой-либо обработки / манипулирования словарем, который затем передает его следующему элементу и т. д ... Проблема, с которой я сталкиваюсь, заключается в том, что с каждым "каналом" вконвейер, ключи в словаре, передаваемые в канал, могут не совпадать с ключами, которые ищет канал.

Например:

def add_last_name(data, **kwargs):
  last_name = kwargs["last_name"]
  return {"full_name": "%s %s"%(data["first_name"], last_name)}

def add_middle_name_to_first_and_last(data, **kwargs):
  middle_name = kwargs["middle_name"]
  # looks for property named 'whole_name', instead of 'full_name'
  first_name, last_name = data["whole_name"].split()
  return {"first_middle_last": " ".join([first_name, middle_name, last_name])

def add_age(data, **kwargs):
  data["age"] = kwargs["age"]
  return data

# data = {"first_name": "john"} -> 
#  add_last_name(data, **{"last_name": "smith"}) 
# . returns {"full_name": "john smith"} -> 
#  add_age(data, **{"age": 30})
# . returns {"full_name": "john smith", "age": 30} ->
#  add_middle_name_to_first_and_last(data, **{"middle_name": "doe"})
# . This fails because the "whole_name" key does not exist

По сути, все сводится кДело в том, что вы не можете контролировать имена ключей, используемые во всех этих различных модулях, и мне нужен способ для преобразования свойств модулей между ссылками в конвейере.Я понимаю, что я мог бы просто использовать строгие имена свойств, но я хочу, чтобы то, над чем я работаю, было бы независимым от данных / свойств be, чтобы обеспечить максимальную гибкость, и оставить эти ссылки на усмотрение создателя (пользователя) конвейера, поэтому мне нужно что-то вродемеханизма связывания имен свойств из предыдущей ссылки с текущей ссылкой.Модули должны быть классами и иметь "обязательные имена параметров", определенные внутри.

...