port-ocean 0.5.24.dev1__tar.gz → 0.5.27__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 (128) hide show
  1. {port_ocean-0.5.24.dev1 → port_ocean-0.5.27}/PKG-INFO +1 -1
  2. {port_ocean-0.5.24.dev1 → port_ocean-0.5.27}/port_ocean/config/settings.py +9 -9
  3. {port_ocean-0.5.24.dev1 → port_ocean-0.5.27}/port_ocean/core/defaults/initialize.py +1 -1
  4. {port_ocean-0.5.24.dev1 → port_ocean-0.5.27}/port_ocean/core/integrations/mixins/sync_raw.py +9 -2
  5. {port_ocean-0.5.24.dev1 → port_ocean-0.5.27}/port_ocean/core/utils.py +11 -5
  6. {port_ocean-0.5.24.dev1 → port_ocean-0.5.27}/port_ocean/exceptions/port_defaults.py +1 -1
  7. {port_ocean-0.5.24.dev1 → port_ocean-0.5.27}/pyproject.toml +1 -1
  8. {port_ocean-0.5.24.dev1 → port_ocean-0.5.27}/LICENSE.md +0 -0
  9. {port_ocean-0.5.24.dev1 → port_ocean-0.5.27}/README.md +0 -0
  10. {port_ocean-0.5.24.dev1 → port_ocean-0.5.27}/port_ocean/__init__.py +0 -0
  11. {port_ocean-0.5.24.dev1 → port_ocean-0.5.27}/port_ocean/bootstrap.py +0 -0
  12. {port_ocean-0.5.24.dev1 → port_ocean-0.5.27}/port_ocean/cli/__init__.py +0 -0
  13. {port_ocean-0.5.24.dev1 → port_ocean-0.5.27}/port_ocean/cli/cli.py +0 -0
  14. {port_ocean-0.5.24.dev1 → port_ocean-0.5.27}/port_ocean/cli/commands/__init__.py +0 -0
  15. {port_ocean-0.5.24.dev1 → port_ocean-0.5.27}/port_ocean/cli/commands/defaults/__init___.py +0 -0
  16. {port_ocean-0.5.24.dev1 → port_ocean-0.5.27}/port_ocean/cli/commands/defaults/clean.py +0 -0
  17. {port_ocean-0.5.24.dev1 → port_ocean-0.5.27}/port_ocean/cli/commands/defaults/dock.py +0 -0
  18. {port_ocean-0.5.24.dev1 → port_ocean-0.5.27}/port_ocean/cli/commands/defaults/group.py +0 -0
  19. {port_ocean-0.5.24.dev1 → port_ocean-0.5.27}/port_ocean/cli/commands/list_integrations.py +0 -0
  20. {port_ocean-0.5.24.dev1 → port_ocean-0.5.27}/port_ocean/cli/commands/main.py +0 -0
  21. {port_ocean-0.5.24.dev1 → port_ocean-0.5.27}/port_ocean/cli/commands/new.py +0 -0
  22. {port_ocean-0.5.24.dev1 → port_ocean-0.5.27}/port_ocean/cli/commands/pull.py +0 -0
  23. {port_ocean-0.5.24.dev1 → port_ocean-0.5.27}/port_ocean/cli/commands/sail.py +0 -0
  24. {port_ocean-0.5.24.dev1 → port_ocean-0.5.27}/port_ocean/cli/commands/version.py +0 -0
  25. {port_ocean-0.5.24.dev1 → port_ocean-0.5.27}/port_ocean/cli/cookiecutter/__init__.py +0 -0
  26. {port_ocean-0.5.24.dev1 → port_ocean-0.5.27}/port_ocean/cli/cookiecutter/cookiecutter.json +0 -0
  27. {port_ocean-0.5.24.dev1 → port_ocean-0.5.27}/port_ocean/cli/cookiecutter/extensions.py +0 -0
  28. {port_ocean-0.5.24.dev1 → port_ocean-0.5.27}/port_ocean/cli/cookiecutter/hooks/post_gen_project.py +0 -0
  29. {port_ocean-0.5.24.dev1 → port_ocean-0.5.27}/port_ocean/cli/cookiecutter/{{cookiecutter.integration_slug}}/.dockerignore +0 -0
  30. {port_ocean-0.5.24.dev1 → port_ocean-0.5.27}/port_ocean/cli/cookiecutter/{{cookiecutter.integration_slug}}/.gitignore +0 -0
  31. {port_ocean-0.5.24.dev1 → port_ocean-0.5.27}/port_ocean/cli/cookiecutter/{{cookiecutter.integration_slug}}/.port/resources/.gitignore +0 -0
  32. {port_ocean-0.5.24.dev1 → port_ocean-0.5.27}/port_ocean/cli/cookiecutter/{{cookiecutter.integration_slug}}/.port/spec.yaml +0 -0
  33. {port_ocean-0.5.24.dev1 → port_ocean-0.5.27}/port_ocean/cli/cookiecutter/{{cookiecutter.integration_slug}}/CHANGELOG.md +0 -0
  34. {port_ocean-0.5.24.dev1 → port_ocean-0.5.27}/port_ocean/cli/cookiecutter/{{cookiecutter.integration_slug}}/Dockerfile +0 -0
  35. {port_ocean-0.5.24.dev1 → port_ocean-0.5.27}/port_ocean/cli/cookiecutter/{{cookiecutter.integration_slug}}/Makefile +0 -0
  36. {port_ocean-0.5.24.dev1 → port_ocean-0.5.27}/port_ocean/cli/cookiecutter/{{cookiecutter.integration_slug}}/README.md +0 -0
  37. {port_ocean-0.5.24.dev1 → port_ocean-0.5.27}/port_ocean/cli/cookiecutter/{{cookiecutter.integration_slug}}/changelog/.gitignore +0 -0
  38. {port_ocean-0.5.24.dev1 → port_ocean-0.5.27}/port_ocean/cli/cookiecutter/{{cookiecutter.integration_slug}}/debug.py +0 -0
  39. {port_ocean-0.5.24.dev1 → port_ocean-0.5.27}/port_ocean/cli/cookiecutter/{{cookiecutter.integration_slug}}/main.py +0 -0
  40. {port_ocean-0.5.24.dev1 → port_ocean-0.5.27}/port_ocean/cli/cookiecutter/{{cookiecutter.integration_slug}}/poetry.toml +0 -0
  41. {port_ocean-0.5.24.dev1 → port_ocean-0.5.27}/port_ocean/cli/cookiecutter/{{cookiecutter.integration_slug}}/pyproject.toml +0 -0
  42. {port_ocean-0.5.24.dev1 → port_ocean-0.5.27}/port_ocean/cli/cookiecutter/{{cookiecutter.integration_slug}}/sonar-project.properties +0 -0
  43. {port_ocean-0.5.24.dev1 → port_ocean-0.5.27}/port_ocean/cli/cookiecutter/{{cookiecutter.integration_slug}}/tests/__init__.py +0 -0
  44. {port_ocean-0.5.24.dev1 → port_ocean-0.5.27}/port_ocean/cli/utils.py +0 -0
  45. {port_ocean-0.5.24.dev1 → port_ocean-0.5.27}/port_ocean/clients/__init__.py +0 -0
  46. {port_ocean-0.5.24.dev1 → port_ocean-0.5.27}/port_ocean/clients/port/__init__.py +0 -0
  47. {port_ocean-0.5.24.dev1 → port_ocean-0.5.27}/port_ocean/clients/port/authentication.py +0 -0
  48. {port_ocean-0.5.24.dev1 → port_ocean-0.5.27}/port_ocean/clients/port/client.py +0 -0
  49. {port_ocean-0.5.24.dev1 → port_ocean-0.5.27}/port_ocean/clients/port/mixins/__init__.py +0 -0
  50. {port_ocean-0.5.24.dev1 → port_ocean-0.5.27}/port_ocean/clients/port/mixins/blueprints.py +0 -0
  51. {port_ocean-0.5.24.dev1 → port_ocean-0.5.27}/port_ocean/clients/port/mixins/entities.py +0 -0
  52. {port_ocean-0.5.24.dev1 → port_ocean-0.5.27}/port_ocean/clients/port/mixins/integrations.py +0 -0
  53. {port_ocean-0.5.24.dev1 → port_ocean-0.5.27}/port_ocean/clients/port/mixins/migrations.py +0 -0
  54. {port_ocean-0.5.24.dev1 → port_ocean-0.5.27}/port_ocean/clients/port/retry_transport.py +0 -0
  55. {port_ocean-0.5.24.dev1 → port_ocean-0.5.27}/port_ocean/clients/port/types.py +0 -0
  56. {port_ocean-0.5.24.dev1 → port_ocean-0.5.27}/port_ocean/clients/port/utils.py +0 -0
  57. {port_ocean-0.5.24.dev1 → port_ocean-0.5.27}/port_ocean/config/__init__.py +0 -0
  58. {port_ocean-0.5.24.dev1 → port_ocean-0.5.27}/port_ocean/config/base.py +0 -0
  59. {port_ocean-0.5.24.dev1 → port_ocean-0.5.27}/port_ocean/config/dynamic.py +0 -0
  60. {port_ocean-0.5.24.dev1 → port_ocean-0.5.27}/port_ocean/consumers/__init__.py +0 -0
  61. {port_ocean-0.5.24.dev1 → port_ocean-0.5.27}/port_ocean/consumers/kafka_consumer.py +0 -0
  62. {port_ocean-0.5.24.dev1 → port_ocean-0.5.27}/port_ocean/context/__init__.py +0 -0
  63. {port_ocean-0.5.24.dev1 → port_ocean-0.5.27}/port_ocean/context/event.py +0 -0
  64. {port_ocean-0.5.24.dev1 → port_ocean-0.5.27}/port_ocean/context/ocean.py +0 -0
  65. {port_ocean-0.5.24.dev1 → port_ocean-0.5.27}/port_ocean/context/resource.py +0 -0
  66. {port_ocean-0.5.24.dev1 → port_ocean-0.5.27}/port_ocean/core/__init__.py +0 -0
  67. {port_ocean-0.5.24.dev1 → port_ocean-0.5.27}/port_ocean/core/defaults/__init__.py +0 -0
  68. {port_ocean-0.5.24.dev1 → port_ocean-0.5.27}/port_ocean/core/defaults/clean.py +0 -0
  69. {port_ocean-0.5.24.dev1 → port_ocean-0.5.27}/port_ocean/core/defaults/common.py +0 -0
  70. {port_ocean-0.5.24.dev1 → port_ocean-0.5.27}/port_ocean/core/event_listener/__init__.py +0 -0
  71. {port_ocean-0.5.24.dev1 → port_ocean-0.5.27}/port_ocean/core/event_listener/base.py +0 -0
  72. {port_ocean-0.5.24.dev1 → port_ocean-0.5.27}/port_ocean/core/event_listener/factory.py +0 -0
  73. {port_ocean-0.5.24.dev1 → port_ocean-0.5.27}/port_ocean/core/event_listener/http.py +0 -0
  74. {port_ocean-0.5.24.dev1 → port_ocean-0.5.27}/port_ocean/core/event_listener/kafka.py +0 -0
  75. {port_ocean-0.5.24.dev1 → port_ocean-0.5.27}/port_ocean/core/event_listener/once.py +0 -0
  76. {port_ocean-0.5.24.dev1 → port_ocean-0.5.27}/port_ocean/core/event_listener/polling.py +0 -0
  77. {port_ocean-0.5.24.dev1 → port_ocean-0.5.27}/port_ocean/core/handlers/__init__.py +0 -0
  78. {port_ocean-0.5.24.dev1 → port_ocean-0.5.27}/port_ocean/core/handlers/base.py +0 -0
  79. {port_ocean-0.5.24.dev1 → port_ocean-0.5.27}/port_ocean/core/handlers/entities_state_applier/__init__.py +0 -0
  80. {port_ocean-0.5.24.dev1 → port_ocean-0.5.27}/port_ocean/core/handlers/entities_state_applier/base.py +0 -0
  81. {port_ocean-0.5.24.dev1 → port_ocean-0.5.27}/port_ocean/core/handlers/entities_state_applier/port/__init__.py +0 -0
  82. {port_ocean-0.5.24.dev1 → port_ocean-0.5.27}/port_ocean/core/handlers/entities_state_applier/port/applier.py +0 -0
  83. {port_ocean-0.5.24.dev1 → port_ocean-0.5.27}/port_ocean/core/handlers/entities_state_applier/port/get_related_entities.py +0 -0
  84. {port_ocean-0.5.24.dev1 → port_ocean-0.5.27}/port_ocean/core/handlers/entities_state_applier/port/order_by_entities_dependencies.py +0 -0
  85. {port_ocean-0.5.24.dev1 → port_ocean-0.5.27}/port_ocean/core/handlers/entity_processor/__init__.py +0 -0
  86. {port_ocean-0.5.24.dev1 → port_ocean-0.5.27}/port_ocean/core/handlers/entity_processor/base.py +0 -0
  87. {port_ocean-0.5.24.dev1 → port_ocean-0.5.27}/port_ocean/core/handlers/entity_processor/jq_entity_processor.py +0 -0
  88. {port_ocean-0.5.24.dev1 → port_ocean-0.5.27}/port_ocean/core/handlers/port_app_config/__init__.py +0 -0
  89. {port_ocean-0.5.24.dev1 → port_ocean-0.5.27}/port_ocean/core/handlers/port_app_config/api.py +0 -0
  90. {port_ocean-0.5.24.dev1 → port_ocean-0.5.27}/port_ocean/core/handlers/port_app_config/base.py +0 -0
  91. {port_ocean-0.5.24.dev1 → port_ocean-0.5.27}/port_ocean/core/handlers/port_app_config/models.py +0 -0
  92. {port_ocean-0.5.24.dev1 → port_ocean-0.5.27}/port_ocean/core/integrations/__init__.py +0 -0
  93. {port_ocean-0.5.24.dev1 → port_ocean-0.5.27}/port_ocean/core/integrations/base.py +0 -0
  94. {port_ocean-0.5.24.dev1 → port_ocean-0.5.27}/port_ocean/core/integrations/mixins/__init__.py +0 -0
  95. {port_ocean-0.5.24.dev1 → port_ocean-0.5.27}/port_ocean/core/integrations/mixins/events.py +0 -0
  96. {port_ocean-0.5.24.dev1 → port_ocean-0.5.27}/port_ocean/core/integrations/mixins/handler.py +0 -0
  97. {port_ocean-0.5.24.dev1 → port_ocean-0.5.27}/port_ocean/core/integrations/mixins/sync.py +0 -0
  98. {port_ocean-0.5.24.dev1 → port_ocean-0.5.27}/port_ocean/core/integrations/mixins/utils.py +0 -0
  99. {port_ocean-0.5.24.dev1 → port_ocean-0.5.27}/port_ocean/core/models.py +0 -0
  100. {port_ocean-0.5.24.dev1 → port_ocean-0.5.27}/port_ocean/core/ocean_types.py +0 -0
  101. {port_ocean-0.5.24.dev1 → port_ocean-0.5.27}/port_ocean/exceptions/__init__.py +0 -0
  102. {port_ocean-0.5.24.dev1 → port_ocean-0.5.27}/port_ocean/exceptions/api.py +0 -0
  103. {port_ocean-0.5.24.dev1 → port_ocean-0.5.27}/port_ocean/exceptions/base.py +0 -0
  104. {port_ocean-0.5.24.dev1 → port_ocean-0.5.27}/port_ocean/exceptions/clients.py +0 -0
  105. {port_ocean-0.5.24.dev1 → port_ocean-0.5.27}/port_ocean/exceptions/context.py +0 -0
  106. {port_ocean-0.5.24.dev1 → port_ocean-0.5.27}/port_ocean/exceptions/core.py +0 -0
  107. {port_ocean-0.5.24.dev1 → port_ocean-0.5.27}/port_ocean/exceptions/utils.py +0 -0
  108. {port_ocean-0.5.24.dev1 → port_ocean-0.5.27}/port_ocean/helpers/__init__.py +0 -0
  109. {port_ocean-0.5.24.dev1 → port_ocean-0.5.27}/port_ocean/helpers/async_client.py +0 -0
  110. {port_ocean-0.5.24.dev1 → port_ocean-0.5.27}/port_ocean/helpers/retry.py +0 -0
  111. {port_ocean-0.5.24.dev1 → port_ocean-0.5.27}/port_ocean/log/__init__.py +0 -0
  112. {port_ocean-0.5.24.dev1 → port_ocean-0.5.27}/port_ocean/log/handlers.py +0 -0
  113. {port_ocean-0.5.24.dev1 → port_ocean-0.5.27}/port_ocean/log/logger_setup.py +0 -0
  114. {port_ocean-0.5.24.dev1 → port_ocean-0.5.27}/port_ocean/log/sensetive.py +0 -0
  115. {port_ocean-0.5.24.dev1 → port_ocean-0.5.27}/port_ocean/middlewares.py +0 -0
  116. {port_ocean-0.5.24.dev1 → port_ocean-0.5.27}/port_ocean/ocean.py +0 -0
  117. {port_ocean-0.5.24.dev1 → port_ocean-0.5.27}/port_ocean/py.typed +0 -0
  118. {port_ocean-0.5.24.dev1 → port_ocean-0.5.27}/port_ocean/run.py +0 -0
  119. {port_ocean-0.5.24.dev1 → port_ocean-0.5.27}/port_ocean/sonar-project.properties +0 -0
  120. {port_ocean-0.5.24.dev1 → port_ocean-0.5.27}/port_ocean/utils/__init__.py +0 -0
  121. {port_ocean-0.5.24.dev1 → port_ocean-0.5.27}/port_ocean/utils/async_http.py +0 -0
  122. {port_ocean-0.5.24.dev1 → port_ocean-0.5.27}/port_ocean/utils/async_iterators.py +0 -0
  123. {port_ocean-0.5.24.dev1 → port_ocean-0.5.27}/port_ocean/utils/cache.py +0 -0
  124. {port_ocean-0.5.24.dev1 → port_ocean-0.5.27}/port_ocean/utils/misc.py +0 -0
  125. {port_ocean-0.5.24.dev1 → port_ocean-0.5.27}/port_ocean/utils/queue_utils.py +0 -0
  126. {port_ocean-0.5.24.dev1 → port_ocean-0.5.27}/port_ocean/utils/repeat.py +0 -0
  127. {port_ocean-0.5.24.dev1 → port_ocean-0.5.27}/port_ocean/utils/signal.py +0 -0
  128. {port_ocean-0.5.24.dev1 → port_ocean-0.5.27}/port_ocean/version.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: port-ocean
3
- Version: 0.5.24.dev1
3
+ Version: 0.5.27
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
@@ -1,15 +1,14 @@
1
1
  from typing import Any, Literal
2
2
 
3
+ from port_ocean.config.base import BaseOceanSettings, BaseOceanModel
4
+ from port_ocean.core.event_listener import EventListenerSettingsType
5
+ from port_ocean.utils.misc import get_integration_name
3
6
  from pydantic import Extra, AnyHttpUrl, parse_obj_as
4
7
  from pydantic.class_validators import root_validator
5
8
  from pydantic.env_settings import InitSettingsSource, EnvSettingsSource, BaseSettings
6
9
  from pydantic.fields import Field
7
10
  from pydantic.main import BaseModel
8
11
 
9
- from port_ocean.config.base import BaseOceanSettings, BaseOceanModel
10
- from port_ocean.core.event_listener import EventListenerSettingsType
11
- from port_ocean.utils.misc import get_integration_name
12
-
13
12
  LogLevelType = Literal["ERROR", "WARNING", "INFO", "DEBUG", "CRITICAL"]
14
13
 
15
14
 
@@ -42,12 +41,12 @@ class PortSettings(BaseOceanModel, extra=Extra.allow):
42
41
 
43
42
 
44
43
  class IntegrationSettings(BaseOceanModel, extra=Extra.allow):
45
- identifier: str = Field(..., min_length=1)
46
- type: str = Field(..., min_length=1)
47
- config: dict[str, Any] | BaseModel
44
+ identifier: str
45
+ type: str
46
+ config: dict[str, Any] | BaseModel = Field(default_factory=dict)
48
47
 
49
48
  @root_validator(pre=True)
50
- def a(cls, values: dict[str, Any]) -> dict[str, Any]:
49
+ def root_validator(cls, values: dict[str, Any]) -> dict[str, Any]:
51
50
  integ_type = values.get("type")
52
51
 
53
52
  if not integ_type:
@@ -68,4 +67,5 @@ class IntegrationConfiguration(BaseOceanSettings, extra=Extra.allow):
68
67
  send_raw_data_examples: bool = True
69
68
  port: PortSettings
70
69
  event_listener: EventListenerSettingsType
71
- integration: IntegrationSettings
70
+ # If an identifier or type is not provided, it will be generated based on the integration name
71
+ integration: IntegrationSettings = IntegrationSettings(type="", identifier="")
@@ -159,7 +159,7 @@ async def _create_resources(
159
159
  f"Failed to create resources: {err.response.text}. Rolling back changes..."
160
160
  )
161
161
  raise AbortDefaultCreationError(
162
- created_blueprints_identifiers, [err], created_pages
162
+ created_blueprints_identifiers, [err], created_pages_identifiers
163
163
  )
164
164
 
165
165
 
@@ -372,7 +372,10 @@ class SyncRawMixin(HandlerMixin, EventsMixin):
372
372
  )
373
373
 
374
374
  if after_errors:
375
- message = f"Failed to calculate diff for entities with {len(after_errors)} errors. Skipping delete phase due to incomplete state"
375
+ message = (
376
+ f"Failed to calculate diff for entities with {len(after_errors)} errors. "
377
+ f"Skipping delete phase due to incomplete state"
378
+ )
376
379
  logger.error(message, exc_info=after_errors)
377
380
  entities_before_flatten = []
378
381
 
@@ -416,7 +419,11 @@ class SyncRawMixin(HandlerMixin, EventsMixin):
416
419
  )
417
420
  except httpx.HTTPError as e:
418
421
  logger.warning(
419
- "Failed to fetch the current state of entities at Port. Skipping delete phase due to unknown initial state"
422
+ "Failed to fetch the current state of entities at Port. "
423
+ "Skipping delete phase due to unknown initial state. "
424
+ f"Error: {e}\n"
425
+ f"Response status code: {e.response.status_code if isinstance(e, httpx.HTTPStatusError) else None}\n"
426
+ f"Response content: {e.response.text if isinstance(e, httpx.HTTPStatusError) else None}\n"
420
427
  )
421
428
  entities_at_port = []
422
429
 
@@ -34,13 +34,19 @@ Q = TypeVar("Q")
34
34
 
35
35
  async def gather_and_split_errors_from_results(
36
36
  task: Iterable[Awaitable[Q]],
37
- result_threshold_validation: Callable[[Q | BaseException], bool] | None = None,
38
- ) -> tuple[list[Q], list[BaseException]]:
39
- valid_items = []
40
- errors = []
37
+ result_threshold_validation: Callable[[Q | Exception], bool] | None = None,
38
+ ) -> tuple[list[Q], list[Exception]]:
39
+ valid_items: list[Q] = []
40
+ errors: list[Exception] = []
41
41
  results = await asyncio.gather(*task, return_exceptions=True)
42
42
  for item in results:
43
- if isinstance(item, Exception):
43
+ # return_exceptions will also catch Python BaseException which also includes KeyboardInterrupt, SystemExit, GeneratorExit
44
+ # https://docs.python.org/3/library/asyncio-task.html#asyncio.gather
45
+ # These exceptions should be raised and not caught for the application to exit properly.
46
+ # https://stackoverflow.com/a/17802352
47
+ if isinstance(item, BaseException) and not isinstance(item, Exception):
48
+ raise item
49
+ elif isinstance(item, Exception):
44
50
  errors.append(item)
45
51
  elif not result_threshold_validation or result_threshold_validation(item):
46
52
  valid_items.append(item)
@@ -5,7 +5,7 @@ class AbortDefaultCreationError(BaseOceanException):
5
5
  def __init__(
6
6
  self,
7
7
  blueprints_to_rollback: list[str],
8
- errors: list[BaseException],
8
+ errors: list[Exception],
9
9
  pages_to_rollback: list[str] | None = None,
10
10
  ):
11
11
  self.blueprints_to_rollback = blueprints_to_rollback
@@ -1,6 +1,6 @@
1
1
  [tool.poetry]
2
2
  name = "port-ocean"
3
- version = "0.5.24.dev01"
3
+ version = "0.5.27"
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