Зустрічайте Dictator! Маленький і добрий

Пролог
У своїй роботі у мене час від часу виникає бажання змінити поведінку того чи іншого інструменту: зробити роботу з ним звичніше, API прозорішим і т. п. Так сталося і коли мені в спадок дістався проект, де в якості сховища використовувався Redis. Безсумнівно, Python має досить бібліотек для зручної роботи з Redis, однак згадуючи, що це саме key-value сховище, мені не могла не прийти в голову думка про те, як було б чудово працювати з ним як зі звичайним Python-словником (dict).

Замість
>>> redis_obj.exist(key)


>>> key in redis_obj

Зберігати об'єкти звичним присвоюванням:
>>> redis_obj['Planets'] = ['Mercury', 'Venus', 'Земля', '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', 'Земля'])
    >>> dc['Stars'] = ['Sun'] 

  • .get(key)

    >>> dc['Stars']
    ['Sun']
    >>> dc.get('Planets')
    ['Mercury', 'Venus', 'Земля']

    Можна задати значення, на випадок якщо за ключем
    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', 'Земля']]

  • .items()

    >>> dc.iterms()
    [('Planets', ['Mercury', 'Venus', 'Земля'])]

  • і, звичайно, ітерація за допомогою об'єкта-генератора:
    • .iterkeys()
    • .itervalues()
    • .iteritems()
І це не все :)
Епілог
Проект знаходиться на початковій стадії, дбайливо задокументований і прикрашений.
Fork-і, pull-request-и та інші issues вітаються
Дякую за увагу!
Джерело: Хабрахабр

0 коментарів

Тільки зареєстровані та авторизовані користувачі можуть залишати коментарі.