2014-12-11 5 views
2

я собираюсь использовать библиотеку под названием socket.io-python-emitter (https://github.com/ziyasal/socket.io-python-emitter) в моем проекте, однако синтаксис он вводит действительно беспокоит меня ..Создание более вещий обертку вокруг не-вещий класса

Пример использования:

e = Emitter(...) 
e.Emit('message') 
e.In('group1').Emit('message') 
e.In('group1').In('group2').Emit('message') 
e.Of("/ns").In('group1').In('group2').Emit('message') 

Я предполагаю, что автор сделал это таким образом, так что JavaScript/node.js люди будут чувствовать себя как дома, но это действительно делает его труднее кодировать динамический излучатель ..

в конечном счете, это должно быть (по крайней мере, на мой взгляд):

e = Emitter(...) 
e.emit('message') 
e.emit('message', groups=['group1']) 
e.emit('message', groups=['group1', 'group2']) 
e.emit('message', groups=['group1', 'group2'], ns='/ns') 

Каков наилучший подход?

  • Создать обертку вокруг этой библиотеки? Такие швы были бы уродливыми ...
  • Видеть проект и создать «питоническую» версию? Более уродливое и дублирование. Не хочу этого делать.
  • Добавить патч, чтобы добавить pythonic путь к проекту вверх по течению?
+1

Это довольно [маленький скрипт] (https://github.com/ziyasal/socket.io-python-emitter/blob/master/emitter/__init__.py), и большая часть кода выглядит как тонкая обертка вокруг 'redis.publish'. Я бы просто создал свой собственный класс, который обертывает redis и работает так, как я хочу. – georg

+0

Плоский лучше, чем вложенный. –

ответ

0

Ваш третий вариант кажется (для меня, конечно) хорошим подходом. Сначала я поговорю с автором (ами)/сопровождающим (-ами), чтобы узнать, как они относятся к этой идее.

Поскольку вы создаете новый метод (и используете аргументы ключевых слов в любом случае), оба синтаксиса могут сосуществовать, поэтому я думаю, что нет необходимости разветвлять проект или создавать оболочку.

+0

Спасибо. Я отправил вопрос @ https://github.com/ziyasal/socket.io-python-emitter/issues/8 – xeor

Смежные вопросы