From d639f8bb72182c9b13d6673ad70c6b4d7d3ef215 Mon Sep 17 00:00:00 2001 From: Ivan Kalinovski Date: Mon, 9 Dec 2024 18:14:53 +0200 Subject: [PATCH 1/3] [Core] Change token refresh condition and retry upserts 1. Update the condition upon which the JWT token is refreshed so it will refresh on expiration instead of only after. 2. Set upsert entenies as retryable. 3. Remove timeout in favor of global timeout. 4. Update `handle_request` to use method for indentifying retryable requests. --- port_ocean/clients/port/authentication.py | 2 +- port_ocean/clients/port/mixins/entities.py | 2 +- port_ocean/helpers/retry.py | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/port_ocean/clients/port/authentication.py b/port_ocean/clients/port/authentication.py index b05fbdd59c..4855651816 100644 --- a/port_ocean/clients/port/authentication.py +++ b/port_ocean/clients/port/authentication.py @@ -18,7 +18,7 @@ class TokenResponse(BaseModel): @property def expired(self) -> bool: - return self._retrieved_time + self.expires_in < get_time() + return self._retrieved_time + self.expires_in <= get_time() @property def full_token(self) -> str: diff --git a/port_ocean/clients/port/mixins/entities.py b/port_ocean/clients/port/mixins/entities.py index f8d5f63fa3..80f8178849 100644 --- a/port_ocean/clients/port/mixins/entities.py +++ b/port_ocean/clients/port/mixins/entities.py @@ -48,6 +48,7 @@ async def upsert_entity( ).lower(), "validation_only": str(validation_only).lower(), }, + extensions={"retryable": True}, ) if response.is_error: @@ -205,7 +206,6 @@ async def search_entities( "include": ["blueprint", "identifier"], }, extensions={"retryable": True}, - timeout=30, ) handle_status_code(response) return [Entity.parse_obj(result) for result in response.json()["entities"]] diff --git a/port_ocean/helpers/retry.py b/port_ocean/helpers/retry.py index 0893235c4a..5b2058c86c 100644 --- a/port_ocean/helpers/retry.py +++ b/port_ocean/helpers/retry.py @@ -134,7 +134,7 @@ def handle_request(self, request: httpx.Request) -> httpx.Response: """ try: transport: httpx.BaseTransport = self._wrapped_transport # type: ignore - if request.method in self._retryable_methods: + if self._is_retryable_method(request): send_method = partial(transport.handle_request) response = self._retry_operation(request, send_method) else: From b1d7aebb9451c10f10acbb659775eec8926be661 Mon Sep 17 00:00:00 2001 From: Ivan Kalinovski Date: Mon, 9 Dec 2024 18:47:42 +0200 Subject: [PATCH 2/3] [Core] Change token refresh condition and retry upserts Bump ocean version. --- CHANGELOG.md | 11 +++++++++++ pyproject.toml | 2 +- 2 files changed, 12 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 5d1630d8b3..71ec5e9d00 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -7,6 +7,17 @@ this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.htm +## 0.14.7 (2024-12-09) + + +### Bug Fixes + +- Remove specific timeout for search request in favor of global timeout. +- Update `handle_request` to use method for indentifying retryable requests. +- Set upsert entenies as retryable. +- Update the condition upon which the JWT token is refreshed so it will refresh on expiration instead of only after. + + ## 0.14.6 (2024-12-04) diff --git a/pyproject.toml b/pyproject.toml index 2762c2a607..bb799d82da 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -1,6 +1,6 @@ [tool.poetry] name = "port-ocean" -version = "0.14.6" +version = "0.14.7" description = "Port Ocean is a CLI tool for managing your Port projects." readme = "README.md" homepage = "https://app.getport.io" From 04b4bbde5ff0749783edca13e6cfee4a55be4631 Mon Sep 17 00:00:00 2001 From: Ivan Kalinovski Date: Mon, 9 Dec 2024 18:48:59 +0200 Subject: [PATCH 3/3] [Core] Change token refresh condition and retry upserts fix lint. --- integrations/jira/.port/resources/port-app-config.yaml | 1 - 1 file changed, 1 deletion(-) diff --git a/integrations/jira/.port/resources/port-app-config.yaml b/integrations/jira/.port/resources/port-app-config.yaml index f83db206be..97139b55b9 100644 --- a/integrations/jira/.port/resources/port-app-config.yaml +++ b/integrations/jira/.port/resources/port-app-config.yaml @@ -58,4 +58,3 @@ resources: subtasks: .fields.subtasks | map(.key) assignee: .fields.assignee.accountId reporter: .fields.reporter.accountId -