Вызов ebay trading api из представления на основе классов Django не работает, но работает в консоли
В настоящее время я работаю над модулем листинга для ebay. Торговый API ebay уже готов и отлично работает, когда я запускаю его в консоли. Однако когда я пытаюсь вызвать ту же функцию в представлении, основанном на классе, я получаю ошибку сервера 500.
Это класс:
class ListSimpleProduct(generics.GenericAPIView, mixins.ListModelMixin, mixins.RetrieveModelMixin, mixins.CreateModelMixin, mixins.UpdateModelMixin, mixins.DestroyModelMixin):
queryset = SimpleProduct.objects.all()
serializer_class = SimpleProductSerializer
def post(self, request, pk):
product = SimpleProduct.objects.get(sku=pk)
serializer = SimpleProductSerializer(product, many=False)
data = serializer.data
item = buildItem(data)
addItemCheck(item)
return Response({
'data': "Item listed on ebay"
})
А это функция addItemCheck в API ebay: def addItemCheck(item):
(opts, args) = init_options()
try:
print("Line 100")
api = Trading(debug=opts.debug, config_file=opts.yaml, appid=opts.appid, domain=opts.domain,
certid=opts.certid, devid=opts.devid, warnings=True, timeout=20, siteid=opts.siteid)
print("Line 103")
response = api.execute('VerifyAddItem', item)
print("Line 105")
info = response.dict()
print("Line 107")
return info
except ConnectionError as e:
print(e)
print(e.response.dict())
Работает до строки 100, так что функция вызывается. Ошибка должна быть в переменной api. Данные, которые я передаю в функцию, точно такие же, как я ввожу из консоли.
Ок, наконец-то нашел. Путь к yaml-файлу был жестко закодирован, поэтому он мог найти его при запуске через терминал, но не на работающем сервере. Если у кого-нибудь возникнет такая же ошибка, зайдите в раздел "Django best practices", чтобы найти решение.