Вопрос в следующем. Есть некоторое серверное программное обеспечение. Есть возможность управлять им как через веб-интерфейс, так и при помощи команд через Telnet. Сейчас требуется создать обертку для этих команд на Python. Есть официальные библиотеки, которые работают, так же через Telnet, но они на других языках. Вернее, я ее уже создал, но хотелось бы убедиться, в правильном ли направлении я пошел. В связи с этим вопросы.
1. Нормально ли будет для этих целей использовать telnetlib или все же стоило применить что-нибудь другое, типа socket?
2. Нормальна ли такая организация организация кода? Один метод-исполнитель запроса и один метод-парсер, а остальные просто используют метод _exec.
#apiexecutor.py
class APIExecutor:
def _exec(self, query):
...
return self._parse(result)
def do_something1(self, arg1, arg2):
query = "DOSOMETHING %s FOR %s" % (arg1, arg2)
return self._exec(query)
def do_some_else(self, arg1):
query = "DOSOMEELSE %s" % arg1
return self._exec(query)
3. В официальных библиотеках к этому ПО все функции (около 150) лежат в одном файле. Правильным ли будет их тут так же объединить в один файл, либо разделить их в разные файлы и сделать манипуляции в __init__.py?
4. В официальных библиотеках функции возвращают данные в примитивных типах (массивы, строки, словари). Как Вам кажется, стоит ли оставить такое поведение в моей обертке, либо сделать нормальные классы, вроде Аккаунт, Сервер, Кластер, Правило и т.д. для объектов ПО. И если делать нормальными классами, то как тогда реализовать человеческую работу с ними? В моей голове есть такой вариант создать дополнительную обертку над моей библиотекой, которая будет получать примитивные данные и превращать их в классы. Нормальная ли будет подобная архитектура, или что-то не так.
class BaseClass:
def __init__(self, connection):
self._connection = connection
class Account(BaseClass):
def __init__(self, connection, account_name, **kwargs):
self.account_name = account_name
for attr, value in kwargs:
setattr(self, attr, value)
super(Account, self).__init__(connection)
def create(self):
r = self._connection.create_account(self.account_name)
if not r['success']:
raise Error
def rename(self, new_name):
r = self._connection.rename_account(self.account_name, new_name)
if not r['success']:
raise Error
self.account_name = r['account_name']
Буду крайне благодарен за мнения, советы и какую-либо информация по теме. Спасибо!