В настоящее время я использую гипотезу fixed_dictionaries для создания словаря с определенными ключами и типами данных, которые считаются действительными для моего приложения.Мне нужна стратегия, которая производит этот фиксированный словарь, а также другие с удаленными определенными ключами.Или словарь с определенным минимальным набором ключей с дополнительными дополнительными ключами, предпочтительно таким образом, чтобы создавать различные комбинации этих дополнительных ключей.
Это пример схемы json, которую необходимо проверить, с2 необязательных поля.Я хотел бы сгенерировать все возможные действительные данные для этой схемы.
'user_stub': {
'_id': {'type': 'string'},
'username': {'type': 'string'},
'social': {'type': 'string'},
'api_name': {'type': 'string',
'required': False},
'profile_id': {'type': 'integer',
'required': False},
}
Это то, что я придумал, но это неверно, потому что он сохраняет ключи, но использует None в качестве значения, и я хочу вместо этогочто ключи удалены.
return st.fixed_dictionaries({
'_id': st.text(),
'username': st.text(),
'social': st.text(),
'api_name': st.one_of(st.none(),
st.text()),
'profile_id': st.one_of(st.none(),
st.integers()),
})
РЕДАКТИРОВАТЬ: обновленная составная стратегия ->
Кажется, что было бы лучше отделить дополнительные необязательные словари на основе типа возвращаемых данных, в противном случаеможет получить ключи с несовпадающими значениями.
@st.composite
def generate_data(draw):
base_data = st.fixed_dictionaries({
'_id': st.text(),
'username': st.text(),
'social': st.text(),
})
optional_strs = st.dictionaries(
keys=st.just('api_name'),
values=st.text()
)
optional_ints = st.dictionaries(
keys=st.just('profile_id'),
values=st.integers()
)
b = draw(base_data)
s = draw(optional_strs)
i = draw(optional_ints)
return {**b, **s, **i} # noice