Встречайте Dictator! Маленький и добрый

в 15:45, , рубрики: nosql, python, redis, Питон

Пролог

В своей работе у меня, время от времени, возникает желание изменить поведение того или иного инструмента: сделать работу с ним привычней, 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 приветствуются

Спасибо за внимание!

Автор: Amka

Источник

* - обязательные к заполнению поля


https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js