Встречайте Dictator! Маленький и добрый
Пролог
В своей работе у меня, время от времени, возникает желание изменить поведение того или иного инструмента: сделать работу с ним привычней, API прозрачней и т. п. Так случилось и когда мне в наследство достался проект, где в качестве хранилища использовался Redis. Несомненно, Python имеет достаточно библиотек для удобной работы с Redis, однако вспоминая, что это именно key-value хранилище, мне не могла не прийти в голову мысль о том, как было бы замечательно работать с ним как с обычным Python-словарём (dict).
Вместо
>>> redis_obj.exist(key)использовать
>>> key in redis_objСохранять объекты привычным присваиванием:
>>> redis_obj['Planets'] = ['Mercury', 'Venus', 'Earth', 'Mars']Так и родился на свет Dictator. Dictator имитирует методы класса dict, пряча интерфейс Redis от пользователя.
Установка
Установка крайне проста, как и множество Python библиотек, он доступен в Pypi
$ pip install dictatorИсходные коды с лицензией MIT забирать в хранилище на GitHub.
Использование
Использовать Dictator крайне просто, однако инициализация объектов всё таки отлична от словаря (надо же знать куда подключаться):
>>> dc = Dictator(host='localhost', port=6379, db=0)Далее с созданным объектом можно работать в привычной манере:
.set(key, value)>>> dc.set('Planets', ['Mercury', 'Venus', 'Earth']) >>> dc['Stars'] = ['Sun'].get(key)>>> dc['Stars'] ['Sun'] >>> dc.get('Planets') ['Mercury', 'Venus', 'Earth']Можно задать значение, на случай если по ключу
keyне будет ничего найдено>>> dc.get('Comets', 'No data') 'No data'.update(other=None, **kwargs)>>> dc.update({'Stars': ['Sun', 'Vega']}) >>> dc.update(Stars=['Sun']).pop(key, default=None)>>> dc.pop('Stars') ['Sun'] >>> dc.pop('Comets').delete(key)>>> dc.delete('Comets')or
>>> del dc['Comets'].keys()and.values()>>> dc.keys() ['Planets', 'Stars'] >>> dc.values() [['Mercury', 'Venus', 'Earth']].items()>>> dc.iterms() [('Planets', ['Mercury', 'Venus', 'Earth'])]и, конечно, итерация с помощью объекта-генератора:
.iterkeys().itervalues().iteritems()
И это не всё :)
Эпилог
Проект находится в начальной стадии, заботливо задокументирован и украшен.
Fork-и, pull-request-ы и другие issues приветствуются
Спасибо за внимание!
Комментарии (2)
5 октября 2016 в 19:15
0↑
↓
В мире питона иногда кажется что все написано до нас…
Очень похоже на модуль redis-collections5 октября 2016 в 19:15
0↑
↓
Ссылки на гитхаб раскидайте почаще. И уж точно рядом с фразой про pull-реквесты.
А в целом отличная идея. Одобряю. Может быть теперь попробую redis.
