port-ocean 0.4.5__tar.gz → 0.4.7__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.

Potentially problematic release.


This version of port-ocean might be problematic. Click here for more details.

Files changed (117) hide show
  1. {port_ocean-0.4.5 → port_ocean-0.4.7}/PKG-INFO +1 -1
  2. {port_ocean-0.4.5 → port_ocean-0.4.7}/port_ocean/clients/port/retry_transport.py +5 -0
  3. {port_ocean-0.4.5 → port_ocean-0.4.7}/port_ocean/clients/port/utils.py +16 -1
  4. {port_ocean-0.4.5 → port_ocean-0.4.7}/port_ocean/config/settings.py +5 -1
  5. {port_ocean-0.4.5 → port_ocean-0.4.7}/port_ocean/core/defaults/initialize.py +2 -3
  6. {port_ocean-0.4.5 → port_ocean-0.4.7}/port_ocean/helpers/retry.py +4 -1
  7. {port_ocean-0.4.5 → port_ocean-0.4.7}/pyproject.toml +1 -1
  8. {port_ocean-0.4.5 → port_ocean-0.4.7}/LICENSE.md +0 -0
  9. {port_ocean-0.4.5 → port_ocean-0.4.7}/README.md +0 -0
  10. {port_ocean-0.4.5 → port_ocean-0.4.7}/port_ocean/__init__.py +0 -0
  11. {port_ocean-0.4.5 → port_ocean-0.4.7}/port_ocean/bootstrap.py +0 -0
  12. {port_ocean-0.4.5 → port_ocean-0.4.7}/port_ocean/cli/__init__.py +0 -0
  13. {port_ocean-0.4.5 → port_ocean-0.4.7}/port_ocean/cli/cli.py +0 -0
  14. {port_ocean-0.4.5 → port_ocean-0.4.7}/port_ocean/cli/commands/__init__.py +0 -0
  15. {port_ocean-0.4.5 → port_ocean-0.4.7}/port_ocean/cli/commands/defaults/__init___.py +0 -0
  16. {port_ocean-0.4.5 → port_ocean-0.4.7}/port_ocean/cli/commands/defaults/clean.py +0 -0
  17. {port_ocean-0.4.5 → port_ocean-0.4.7}/port_ocean/cli/commands/defaults/dock.py +0 -0
  18. {port_ocean-0.4.5 → port_ocean-0.4.7}/port_ocean/cli/commands/defaults/group.py +0 -0
  19. {port_ocean-0.4.5 → port_ocean-0.4.7}/port_ocean/cli/commands/list_integrations.py +0 -0
  20. {port_ocean-0.4.5 → port_ocean-0.4.7}/port_ocean/cli/commands/main.py +0 -0
  21. {port_ocean-0.4.5 → port_ocean-0.4.7}/port_ocean/cli/commands/new.py +0 -0
  22. {port_ocean-0.4.5 → port_ocean-0.4.7}/port_ocean/cli/commands/pull.py +0 -0
  23. {port_ocean-0.4.5 → port_ocean-0.4.7}/port_ocean/cli/commands/sail.py +0 -0
  24. {port_ocean-0.4.5 → port_ocean-0.4.7}/port_ocean/cli/commands/version.py +0 -0
  25. {port_ocean-0.4.5 → port_ocean-0.4.7}/port_ocean/cli/cookiecutter/__init__.py +0 -0
  26. {port_ocean-0.4.5 → port_ocean-0.4.7}/port_ocean/cli/cookiecutter/cookiecutter.json +0 -0
  27. {port_ocean-0.4.5 → port_ocean-0.4.7}/port_ocean/cli/cookiecutter/extensions.py +0 -0
  28. {port_ocean-0.4.5 → port_ocean-0.4.7}/port_ocean/cli/cookiecutter/{{cookiecutter.integration_slug}}/.dockerignore +0 -0
  29. {port_ocean-0.4.5 → port_ocean-0.4.7}/port_ocean/cli/cookiecutter/{{cookiecutter.integration_slug}}/.gitignore +0 -0
  30. {port_ocean-0.4.5 → port_ocean-0.4.7}/port_ocean/cli/cookiecutter/{{cookiecutter.integration_slug}}/.port/resources/.gitignore +0 -0
  31. {port_ocean-0.4.5 → port_ocean-0.4.7}/port_ocean/cli/cookiecutter/{{cookiecutter.integration_slug}}/.port/spec.yaml +0 -0
  32. {port_ocean-0.4.5 → port_ocean-0.4.7}/port_ocean/cli/cookiecutter/{{cookiecutter.integration_slug}}/CHANGELOG.md +0 -0
  33. {port_ocean-0.4.5 → port_ocean-0.4.7}/port_ocean/cli/cookiecutter/{{cookiecutter.integration_slug}}/Dockerfile +0 -0
  34. {port_ocean-0.4.5 → port_ocean-0.4.7}/port_ocean/cli/cookiecutter/{{cookiecutter.integration_slug}}/Makefile +0 -0
  35. {port_ocean-0.4.5 → port_ocean-0.4.7}/port_ocean/cli/cookiecutter/{{cookiecutter.integration_slug}}/README.md +0 -0
  36. {port_ocean-0.4.5 → port_ocean-0.4.7}/port_ocean/cli/cookiecutter/{{cookiecutter.integration_slug}}/changelog/.gitignore +0 -0
  37. {port_ocean-0.4.5 → port_ocean-0.4.7}/port_ocean/cli/cookiecutter/{{cookiecutter.integration_slug}}/config.yaml +0 -0
  38. {port_ocean-0.4.5 → port_ocean-0.4.7}/port_ocean/cli/cookiecutter/{{cookiecutter.integration_slug}}/debug.py +0 -0
  39. {port_ocean-0.4.5 → port_ocean-0.4.7}/port_ocean/cli/cookiecutter/{{cookiecutter.integration_slug}}/main.py +0 -0
  40. {port_ocean-0.4.5 → port_ocean-0.4.7}/port_ocean/cli/cookiecutter/{{cookiecutter.integration_slug}}/poetry.toml +0 -0
  41. {port_ocean-0.4.5 → port_ocean-0.4.7}/port_ocean/cli/cookiecutter/{{cookiecutter.integration_slug}}/pyproject.toml +0 -0
  42. {port_ocean-0.4.5 → port_ocean-0.4.7}/port_ocean/cli/cookiecutter/{{cookiecutter.integration_slug}}/tests/__init__.py +0 -0
  43. {port_ocean-0.4.5 → port_ocean-0.4.7}/port_ocean/cli/utils.py +0 -0
  44. {port_ocean-0.4.5 → port_ocean-0.4.7}/port_ocean/clients/__init__.py +0 -0
  45. {port_ocean-0.4.5 → port_ocean-0.4.7}/port_ocean/clients/port/__init__.py +0 -0
  46. {port_ocean-0.4.5 → port_ocean-0.4.7}/port_ocean/clients/port/authentication.py +0 -0
  47. {port_ocean-0.4.5 → port_ocean-0.4.7}/port_ocean/clients/port/client.py +0 -0
  48. {port_ocean-0.4.5 → port_ocean-0.4.7}/port_ocean/clients/port/mixins/__init__.py +0 -0
  49. {port_ocean-0.4.5 → port_ocean-0.4.7}/port_ocean/clients/port/mixins/blueprints.py +0 -0
  50. {port_ocean-0.4.5 → port_ocean-0.4.7}/port_ocean/clients/port/mixins/entities.py +0 -0
  51. {port_ocean-0.4.5 → port_ocean-0.4.7}/port_ocean/clients/port/mixins/integrations.py +0 -0
  52. {port_ocean-0.4.5 → port_ocean-0.4.7}/port_ocean/clients/port/mixins/migrations.py +0 -0
  53. {port_ocean-0.4.5 → port_ocean-0.4.7}/port_ocean/clients/port/types.py +0 -0
  54. {port_ocean-0.4.5 → port_ocean-0.4.7}/port_ocean/config/__init__.py +0 -0
  55. {port_ocean-0.4.5 → port_ocean-0.4.7}/port_ocean/config/base.py +0 -0
  56. {port_ocean-0.4.5 → port_ocean-0.4.7}/port_ocean/config/dynamic.py +0 -0
  57. {port_ocean-0.4.5 → port_ocean-0.4.7}/port_ocean/consumers/__init__.py +0 -0
  58. {port_ocean-0.4.5 → port_ocean-0.4.7}/port_ocean/consumers/base_consumer.py +0 -0
  59. {port_ocean-0.4.5 → port_ocean-0.4.7}/port_ocean/consumers/kafka_consumer.py +0 -0
  60. {port_ocean-0.4.5 → port_ocean-0.4.7}/port_ocean/context/__init__.py +0 -0
  61. {port_ocean-0.4.5 → port_ocean-0.4.7}/port_ocean/context/event.py +0 -0
  62. {port_ocean-0.4.5 → port_ocean-0.4.7}/port_ocean/context/ocean.py +0 -0
  63. {port_ocean-0.4.5 → port_ocean-0.4.7}/port_ocean/context/resource.py +0 -0
  64. {port_ocean-0.4.5 → port_ocean-0.4.7}/port_ocean/context/utils.py +0 -0
  65. {port_ocean-0.4.5 → port_ocean-0.4.7}/port_ocean/core/__init__.py +0 -0
  66. {port_ocean-0.4.5 → port_ocean-0.4.7}/port_ocean/core/defaults/__init__.py +0 -0
  67. {port_ocean-0.4.5 → port_ocean-0.4.7}/port_ocean/core/defaults/clean.py +0 -0
  68. {port_ocean-0.4.5 → port_ocean-0.4.7}/port_ocean/core/defaults/common.py +0 -0
  69. {port_ocean-0.4.5 → port_ocean-0.4.7}/port_ocean/core/event_listener/__init__.py +0 -0
  70. {port_ocean-0.4.5 → port_ocean-0.4.7}/port_ocean/core/event_listener/base.py +0 -0
  71. {port_ocean-0.4.5 → port_ocean-0.4.7}/port_ocean/core/event_listener/factory.py +0 -0
  72. {port_ocean-0.4.5 → port_ocean-0.4.7}/port_ocean/core/event_listener/http.py +0 -0
  73. {port_ocean-0.4.5 → port_ocean-0.4.7}/port_ocean/core/event_listener/kafka.py +0 -0
  74. {port_ocean-0.4.5 → port_ocean-0.4.7}/port_ocean/core/event_listener/once.py +0 -0
  75. {port_ocean-0.4.5 → port_ocean-0.4.7}/port_ocean/core/event_listener/polling.py +0 -0
  76. {port_ocean-0.4.5 → port_ocean-0.4.7}/port_ocean/core/handlers/__init__.py +0 -0
  77. {port_ocean-0.4.5 → port_ocean-0.4.7}/port_ocean/core/handlers/base.py +0 -0
  78. {port_ocean-0.4.5 → port_ocean-0.4.7}/port_ocean/core/handlers/entities_state_applier/__init__.py +0 -0
  79. {port_ocean-0.4.5 → port_ocean-0.4.7}/port_ocean/core/handlers/entities_state_applier/base.py +0 -0
  80. {port_ocean-0.4.5 → port_ocean-0.4.7}/port_ocean/core/handlers/entities_state_applier/port/__init__.py +0 -0
  81. {port_ocean-0.4.5 → port_ocean-0.4.7}/port_ocean/core/handlers/entities_state_applier/port/applier.py +0 -0
  82. {port_ocean-0.4.5 → port_ocean-0.4.7}/port_ocean/core/handlers/entities_state_applier/port/get_related_entities.py +0 -0
  83. {port_ocean-0.4.5 → port_ocean-0.4.7}/port_ocean/core/handlers/entities_state_applier/port/order_by_entities_dependencies.py +0 -0
  84. {port_ocean-0.4.5 → port_ocean-0.4.7}/port_ocean/core/handlers/entities_state_applier/port/validate_entity_relations.py +0 -0
  85. {port_ocean-0.4.5 → port_ocean-0.4.7}/port_ocean/core/handlers/entity_processor/__init__.py +0 -0
  86. {port_ocean-0.4.5 → port_ocean-0.4.7}/port_ocean/core/handlers/entity_processor/base.py +0 -0
  87. {port_ocean-0.4.5 → port_ocean-0.4.7}/port_ocean/core/handlers/entity_processor/jq_entity_processor.py +0 -0
  88. {port_ocean-0.4.5 → port_ocean-0.4.7}/port_ocean/core/handlers/port_app_config/__init__.py +0 -0
  89. {port_ocean-0.4.5 → port_ocean-0.4.7}/port_ocean/core/handlers/port_app_config/api.py +0 -0
  90. {port_ocean-0.4.5 → port_ocean-0.4.7}/port_ocean/core/handlers/port_app_config/base.py +0 -0
  91. {port_ocean-0.4.5 → port_ocean-0.4.7}/port_ocean/core/handlers/port_app_config/models.py +0 -0
  92. {port_ocean-0.4.5 → port_ocean-0.4.7}/port_ocean/core/integrations/__init__.py +0 -0
  93. {port_ocean-0.4.5 → port_ocean-0.4.7}/port_ocean/core/integrations/base.py +0 -0
  94. {port_ocean-0.4.5 → port_ocean-0.4.7}/port_ocean/core/integrations/mixins/__init__.py +0 -0
  95. {port_ocean-0.4.5 → port_ocean-0.4.7}/port_ocean/core/integrations/mixins/events.py +0 -0
  96. {port_ocean-0.4.5 → port_ocean-0.4.7}/port_ocean/core/integrations/mixins/handler.py +0 -0
  97. {port_ocean-0.4.5 → port_ocean-0.4.7}/port_ocean/core/integrations/mixins/sync.py +0 -0
  98. {port_ocean-0.4.5 → port_ocean-0.4.7}/port_ocean/core/integrations/mixins/sync_raw.py +0 -0
  99. {port_ocean-0.4.5 → port_ocean-0.4.7}/port_ocean/core/integrations/mixins/utils.py +0 -0
  100. {port_ocean-0.4.5 → port_ocean-0.4.7}/port_ocean/core/models.py +0 -0
  101. {port_ocean-0.4.5 → port_ocean-0.4.7}/port_ocean/core/ocean_types.py +0 -0
  102. {port_ocean-0.4.5 → port_ocean-0.4.7}/port_ocean/core/utils.py +0 -0
  103. {port_ocean-0.4.5 → port_ocean-0.4.7}/port_ocean/exceptions/__init__.py +0 -0
  104. {port_ocean-0.4.5 → port_ocean-0.4.7}/port_ocean/exceptions/api.py +0 -0
  105. {port_ocean-0.4.5 → port_ocean-0.4.7}/port_ocean/exceptions/base.py +0 -0
  106. {port_ocean-0.4.5 → port_ocean-0.4.7}/port_ocean/exceptions/clients.py +0 -0
  107. {port_ocean-0.4.5 → port_ocean-0.4.7}/port_ocean/exceptions/context.py +0 -0
  108. {port_ocean-0.4.5 → port_ocean-0.4.7}/port_ocean/exceptions/core.py +0 -0
  109. {port_ocean-0.4.5 → port_ocean-0.4.7}/port_ocean/exceptions/port_defaults.py +0 -0
  110. {port_ocean-0.4.5 → port_ocean-0.4.7}/port_ocean/helpers/__init__.py +0 -0
  111. {port_ocean-0.4.5 → port_ocean-0.4.7}/port_ocean/logger_setup.py +0 -0
  112. {port_ocean-0.4.5 → port_ocean-0.4.7}/port_ocean/middlewares.py +0 -0
  113. {port_ocean-0.4.5 → port_ocean-0.4.7}/port_ocean/ocean.py +0 -0
  114. {port_ocean-0.4.5 → port_ocean-0.4.7}/port_ocean/py.typed +0 -0
  115. {port_ocean-0.4.5 → port_ocean-0.4.7}/port_ocean/run.py +0 -0
  116. {port_ocean-0.4.5 → port_ocean-0.4.7}/port_ocean/utils.py +0 -0
  117. {port_ocean-0.4.5 → port_ocean-0.4.7}/port_ocean/version.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: port-ocean
3
- Version: 0.4.5
3
+ Version: 0.4.7
4
4
  Summary: Port Ocean is a CLI tool for managing your Port projects.
5
5
  Home-page: https://app.getport.io
6
6
  Keywords: ocean,port-ocean,port
@@ -15,6 +15,11 @@ class TokenRetryTransport(RetryTransport):
15
15
  super().__init__(*args, **kwargs)
16
16
  self.port_client = port_client
17
17
 
18
+ def _is_retryable_method(self, request: httpx.Request) -> bool:
19
+ return super()._is_retryable_method(request) or request.url.path.endswith(
20
+ "/auth/access_token"
21
+ )
22
+
18
23
  async def _handle_unauthorized(self, response: httpx.Response) -> None:
19
24
  token = await self.port_client.auth.token
20
25
  response.headers["Authorization"] = f"Bearer {token}"
@@ -12,6 +12,19 @@ if TYPE_CHECKING:
12
12
  _http_client: LocalStack[httpx.AsyncClient] = LocalStack()
13
13
 
14
14
 
15
+ # In case the framework sends more requests to port in parallel then allowed by the limits, a PoolTimeout exception will
16
+ # be raised.
17
+ # Raising defaults for the timeout, in addition to the limits, will allow request to wait for a connection for a longer
18
+ # period of time, before raising an exception.
19
+ # We don't want to set the max_connections too highly, as it will cause the application to run out of memory.
20
+ # We also don't want to set the max_keepalive_connections too highly, as it will cause the application to run out of
21
+ # available connections.
22
+ PORT_HTTP_CLIENT_TIMEOUT = httpx.Timeout(10.0)
23
+ PORT_HTTP_CLIENT_CONNECTIONS_LIMIT = httpx.Limits(
24
+ max_connections=200, max_keepalive_connections=50
25
+ )
26
+
27
+
15
28
  def _get_http_client_context(port_client: "PortClient") -> httpx.AsyncClient:
16
29
  client = _http_client.top
17
30
  if client is None:
@@ -20,7 +33,9 @@ def _get_http_client_context(port_client: "PortClient") -> httpx.AsyncClient:
20
33
  port_client,
21
34
  httpx.AsyncHTTPTransport(),
22
35
  logger=logger,
23
- )
36
+ ),
37
+ timeout=PORT_HTTP_CLIENT_TIMEOUT,
38
+ limits=PORT_HTTP_CLIENT_CONNECTIONS_LIMIT,
24
39
  )
25
40
  _http_client.push(client)
26
41
 
@@ -1,6 +1,6 @@
1
1
  from typing import Any, Literal
2
2
 
3
- from pydantic import BaseSettings, BaseModel, Extra, AnyHttpUrl, parse_obj_as
3
+ from pydantic import BaseSettings, BaseModel, Extra, AnyHttpUrl, parse_obj_as, validator
4
4
 
5
5
  from port_ocean.config.base import BaseOceanSettings
6
6
  from port_ocean.core.event_listener import EventListenerSettingsType
@@ -33,6 +33,10 @@ class IntegrationSettings(BaseModel, extra=Extra.allow):
33
33
  type: str
34
34
  config: dict[str, Any]
35
35
 
36
+ @validator("identifier", "type")
37
+ def validate_lower(cls, v: str) -> str:
38
+ return v.lower()
39
+
36
40
 
37
41
  class IntegrationConfiguration(BaseOceanSettings, extra=Extra.allow):
38
42
  initialize_port_resources: bool = True
@@ -8,13 +8,12 @@ from port_ocean.clients.port.client import PortClient
8
8
  from port_ocean.clients.port.types import UserAgentType
9
9
  from port_ocean.config.settings import IntegrationConfiguration
10
10
  from port_ocean.context.ocean import ocean
11
+ from port_ocean.core.defaults.common import Defaults, get_port_integration_defaults
11
12
  from port_ocean.core.handlers.port_app_config.models import PortAppConfig
12
13
  from port_ocean.exceptions.port_defaults import (
13
14
  AbortDefaultCreationError,
14
15
  )
15
16
 
16
- from port_ocean.core.defaults.common import Defaults, get_port_integration_defaults
17
-
18
17
 
19
18
  def deconstruct_blueprints_to_creation_steps(
20
19
  raw_blueprints: list[dict[str, Any]]
@@ -111,7 +110,7 @@ async def _create_resources(
111
110
  )
112
111
  )
113
112
 
114
- await port_client.initialize_integration(
113
+ await port_client.create_integration(
115
114
  integration_config.integration.type,
116
115
  integration_config.event_listener.to_request(),
117
116
  port_app_config=defaults.port_app_config,
@@ -151,7 +151,7 @@ class RetryTransport(httpx.AsyncBaseTransport, httpx.BaseTransport):
151
151
 
152
152
  """
153
153
  transport: httpx.AsyncBaseTransport = self._wrapped_transport # type: ignore
154
- if request.method in self._retryable_methods:
154
+ if self._is_retryable_method(request):
155
155
  send_method = partial(transport.handle_async_request)
156
156
  response = await self._retry_operation_async(request, send_method)
157
157
  else:
@@ -178,6 +178,9 @@ class RetryTransport(httpx.AsyncBaseTransport, httpx.BaseTransport):
178
178
  transport: httpx.BaseTransport = self._wrapped_transport # type: ignore
179
179
  transport.close()
180
180
 
181
+ def _is_retryable_method(self, request: httpx.Request) -> bool:
182
+ return request.method in self._retryable_methods
183
+
181
184
  def _should_retry(self, response: httpx.Response) -> bool:
182
185
  return response.status_code in self._retry_status_codes
183
186
 
@@ -1,6 +1,6 @@
1
1
  [tool.poetry]
2
2
  name = "port-ocean"
3
- version = "0.4.5"
3
+ version = "0.4.7"
4
4
  description = "Port Ocean is a CLI tool for managing your Port projects."
5
5
  readme = "README.md"
6
6
  homepage = "https://app.getport.io"
File without changes
File without changes
File without changes