From feda2385156491381f9aa8a28f9eebb46cbd8c31 Mon Sep 17 00:00:00 2001 From: "robin.keunen" Date: Tue, 2 Jun 2020 19:07:37 +0200 Subject: [PATCH] [IMP] emcc: catch 403, 404, 500 return code --- easy_my_coop_connector/demo/demo.xml | 2 +- easy_my_coop_connector/models/emc_backend.py | 21 +++++++++++++++---- .../models/subscription_request.py | 4 ++-- .../tests/test_subscription_request.py | 4 ++-- 4 files changed, 22 insertions(+), 9 deletions(-) diff --git a/easy_my_coop_connector/demo/demo.xml b/easy_my_coop_connector/demo/demo.xml index cea2a26..5a3a1c7 100644 --- a/easy_my_coop_connector/demo/demo.xml +++ b/easy_my_coop_connector/demo/demo.xml @@ -19,6 +19,6 @@ - 38 + 31 diff --git a/easy_my_coop_connector/models/emc_backend.py b/easy_my_coop_connector/models/emc_backend.py index 2bf1f4d..3079df6 100644 --- a/easy_my_coop_connector/models/emc_backend.py +++ b/easy_my_coop_connector/models/emc_backend.py @@ -6,9 +6,15 @@ import json import logging import requests -from werkzeug.exceptions import NotFound +from werkzeug.exceptions import ( + InternalServerError, + NotFound, +) from odoo import _, api, fields, models +from odoo.exceptions import ( + AccessDenied, +) _logger = logging.getLogger(__name__) @@ -40,10 +46,17 @@ class EMCBackend(models.Model): if response.status_code == 200: content = response.content.decode("utf-8") return json.loads(content) - else: - # todo handle different codes (at least 404, 403, 500) + elif response.status_code == 403: + raise AccessDenied(_("You are not allowed to access this resource")) + elif response.status_code == 404: raise NotFound( - _("request returned status code %s" % response.status_code) + _("Resource not found %s on server" % response.status_code) + ) + else: # 500 et al. + content = response.content.decode("utf-8") + raise InternalServerError( + _("request returned status code %s with message %s" % ( + response.status_code, content)) ) @api.multi diff --git a/easy_my_coop_connector/models/subscription_request.py b/easy_my_coop_connector/models/subscription_request.py index 0d63953..c19281f 100644 --- a/easy_my_coop_connector/models/subscription_request.py +++ b/easy_my_coop_connector/models/subscription_request.py @@ -54,13 +54,13 @@ class SubscriptionRequest(models.Model): adapter = SubscriptionRequestAdapter(backend) sr_data = adapter.read(external_id) - # todo 404 request_values = adapter.to_write_values(sr_data) sr_binding = SRBinding.search_binding(backend, external_id) if sr_binding: # update request - srequest = sr_binding.internal_id.write(request_values) + srequest = sr_binding.internal_id + srequest.write(request_values) else: srequest = self.env["subscription.request"].create(request_values) SRBinding.create( diff --git a/easy_my_coop_connector/tests/test_subscription_request.py b/easy_my_coop_connector/tests/test_subscription_request.py index c61a196..a2b25f5 100644 --- a/easy_my_coop_connector/tests/test_subscription_request.py +++ b/easy_my_coop_connector/tests/test_subscription_request.py @@ -31,7 +31,7 @@ SEARCH_RESULT = { "lang": "en_US", "ordered_parts": 3, "name": "Manuel Dublues", - "share_product": {"name": "Part B - Worker", "id": 38}, + "share_product": {"name": "Part B - Worker", "id": 31}, "state": "draft", } ], @@ -49,7 +49,7 @@ GET_RESULT = { }, "lang": "en_US", "ordered_parts": 3, - "share_product": {"name": "Part B - Worker", "id": 38}, + "share_product": {"name": "Part B - Worker", "id": 31}, "state": "draft", }