Function answer_challenge_http is trying to return CONTENT_TYPE attribute of acme.challenges.HTTP01 object - there's no such attribude (maybe it was removed from acme library?).
There are a lot of ways an exception might be thrown. For instance, the library isn't checking that an existing ACME registration is valid. How should we handle all of these cases?
Adding Python 2.7 support is extremely easy, why not doing it? As far as i tested it, only two things are needed:
change 'print' syntax based on Python version
domain names for issue_certificate function in Python 2.7 must be provided in unicode ([u'domain1', u'domain2', ...]) so only example code must be changed
In case when there is no error property in ChallengeBody we have a message = '; '.join(c.error.detail for c in challg.challenges if c.status.name == "invalid") AttributeError: 'NoneType' object has no attribute 'detail'
So we need read uri instead.
And then we will have error like this The HTTP Validation challenge for daridana.ru failed: https://acme-v01.api.letsencrypt.org/acme/challenge/blablabla; "*****.com" was considered an unsafe domain by a third-party API.