Периодически
бывает нужно переложить данные из
емкости в емкость. Например из DBF в БД
Оракла. По дороге, как водится, подчистить
и подправить всякое. Для этого давно
придумали кучу инструментов под общим
названием ETL.
Вот еще
один в обойму, на Python . Делает
преобразование более декларативным.
Сравним:
решим пока
в лоб.
new_data = {
'name': sample_data['userNameFirst'],
'second_name': sample_data['userNameSecond'],
'password': hashlib.md5(sample_data['userPassword']).hexdigest(),
'roles': [s.strip() for s in sample_data['userRoles'].split(',')]
}
if 'userEmail' in sample_data:
new_data['email'] = sample_data['userEmail']
new_data['title'] = sample_data.get('userTitle', 'Bachelor')
assert new_data == desired_data, 'Uh oh'
Ах, хороший знакомый код без излишней
сложности, прекрасно. Но что будет когда
придет полная спецификация? Видимо
вернемся ко второму варианту, добавим
к нему проверку данных, хорошие сообщения
об ошибках, упакуем его в библиотеку и
будем использовать.
Хм, но уже есть такая библиотека, смотрите:
Хм, но уже есть такая библиотека, смотрите:
import trafaret as t
hash_md5 = lambda d: hashlib.md5(d).hexdigest()
comma_to_list = lambda d: [s.strip() for s in d.split(',')]
converter = t.Dict({
t.Key('userNameFirst') >> 'name': t.String,
t.Key('userNameSecond') >> 'second_name': t.String,
t.Key('userPassword') >> 'password': hash_md5,
t.Key('userEmail', optional=True) >> 'email': t.Email,
t.Key('userTitle', default='Bachelor') >> 'title': t.String,
t.Key('userRoles') >> 'roles': comma_to_list,
})
assert converter.check(sample_data) == desired_data
Это чертовски
удобно, когда можно только в одном месте
записать соответствие полей.
Комментариев нет:
Отправить комментарий