Я не могу заставить python модуль работать правильно - PullRequest
1 голос
/ 02 марта 2020

Я пытаюсь заставить работать скрипт для проверки / редактирования моего днс на transip. Это работает частично, пока я действительно не хочу что-то делать.

Текущий код:

#!/usr/bin/env python3

from transip.service.domain import DomainService

basedomain='gemert.net'
key='MY_KEY_IS_SECRET'

dnsservice = DomainService('MY_USERNAME', private_key=key)
print(dnsservice.get_domain_names())
print(dnsservice.check_availability(basedomain))
print(dnsservice.get_info(basedomain))

Результат при запуске выглядит следующим образом:

./setdns.py 
[mydomain1.com, mydomain2.org, mydomain3.net]
inyouraccount
Traceback (most recent call last):
  File "./setdns.py", line 49, in <module>
    print(dnsservice.get_info(basedomain))
  File "/usr/local/lib/python3.7/dist-packages/suds/__init__.py", line 166, in <lambda>
    __str__ = lambda x: x.__unicode__()
  File "/usr/local/lib/python3.7/dist-packages/suds/sudsobject.py", line 172, in __unicode__
    return self.__printer__.tostr(self)
  File "/usr/local/lib/python3.7/dist-packages/suds/sudsobject.py", line 256, in tostr
    return self.process(object, history, indent)
  File "/usr/local/lib/python3.7/dist-packages/suds/sudsobject.py", line 265, in process
    return self.print_object(object, h, n+2, nl)
  File "/usr/local/lib/python3.7/dist-packages/suds/sudsobject.py", line 312, in print_object
    s.append(self.process(item[1], h, n, True))
  File "/usr/local/lib/python3.7/dist-packages/suds/sudsobject.py", line 273, in process
    return self.print_collection(object, h, n+2)
  File "/usr/local/lib/python3.7/dist-packages/suds/sudsobject.py", line 352, in print_collection
    s.append(self.process(item, h, n-2))
  File "/usr/local/lib/python3.7/dist-packages/suds/sudsobject.py", line 265, in process
    return self.print_object(object, h, n+2, nl)
  File "/usr/local/lib/python3.7/dist-packages/suds/sudsobject.py", line 282, in print_object
    if d in h:
  File "/usr/local/lib/python3.7/dist-packages/transip/service/objects.py", line 57, in __eq__
    return self.name == other.name and self.type == other.type and self.content == other.content
AttributeError: 'list' object has no attribute 'name'

Что я делаю неправильно? Первые две команды работают, но dnsservice.get_info(basedomain) не работает

Версия transip module

pip3 show transip
Name: transip
Version: 2.0.0
Summary: TransIP API Connector
Home-page: https://github.com/benkonrath/transip-api
Author: Go About B.V.
Author-email: tech@goabout.com
License: MIT
Location: /usr/local/lib/python3.7/dist-packages
Requires: cryptography, suds-jurko, requests
Required-by: 

1 Ответ

0 голосов
/ 02 марта 2020

Точно так же, как вы знаете, я не знаю много о api transip.

Я взглянул на их код, в котором выдается ошибка в transip / service / objects.py , и похоже, что у них есть ошибка:

def __eq__(self, other): 
    # other can be a list. This check ensures that other is a DnsEntry. 
    if not hasattr(self, 'name') or not hasattr(self, 'type') or not hasattr(self, 'content'): 
        return False 

    # expire is intentionally not used for equality. 
    return self.name == other.name and self.type == other.type and self.content == other.content

В комментарии говорится, что other может быть списком, поэтому они гарантируют, что это DNSEntry, но на самом деле они этого не проверяют. совсем. Если self имеет атрибуты name, type и content, а other - нет, это будет нарушено. В вашем случае other - это список, поэтому он не имеет атрибута name.

Что-то вроде изменения первого оператора if для проверки other вместо self может решить эту проблему:

if not hasattr(other, 'name') or not hasattr(other, 'type') or not hasattr(other, 'content'): 
        return False 

На самом деле, возможно, было бы лучше просто проверить, является ли other списком:

if isinstance(other, list):
   return False

На вашем месте, я бы либо открыл проблему в transip API GitHub. Сделайте репо или сделайте быстрое исправление самостоятельно и отправьте запрос на извлечение.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...