У меня есть класс «Подписчик», который обрабатывает подписчиков с различными методами SOAP, перечисленными в тоннах WSDL, например:
class Subscriber(object):
soaps = {}
@classmethod
def load_soap(cls, name, wsdl):
cls.soaps[name] = zeep.Client(wsdl=wsdl).service
def __getattr__(self, item):
if item in self.soaps:
return self.soaps[item]
else:
raise AttributeError
def __init__(self, msisdn):
self.msisdn = msisdn
, а затем использую его следующим образом:
Subscriber.load_soap('Group', 'http://...')
ab1 = Subscriber('12221112233')
ab1.Group.CreateGroup(msisdn = ab1.msisdn, code = i, length = 1)
И я хочу использовать только ab1.Group.CreateGroup(code = i, length = 1)
с msisdn
и другими обязательными атрибутами, автоматически добавляемыми в вызов SOAP.Я могу перечислить обязательные атрибуты конкретного метода SOAP и сравнить его со списком атрибутов подписчика, но как мне добавить свой код в вызываемый подобъект класса zeep.Client.Service
?Я думаю, что мне нужно какое-то сочетание partial()
, __call__
и __getattr__
, но я не могу их правильно склеить.
Есть предложения?