port-ocean 0.14.6__tar.gz → 0.14.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 (157) hide show
  1. {port_ocean-0.14.6 → port_ocean-0.14.7}/PKG-INFO +1 -1
  2. {port_ocean-0.14.6 → port_ocean-0.14.7}/port_ocean/clients/port/authentication.py +1 -1
  3. {port_ocean-0.14.6 → port_ocean-0.14.7}/port_ocean/clients/port/mixins/entities.py +1 -1
  4. {port_ocean-0.14.6 → port_ocean-0.14.7}/port_ocean/helpers/retry.py +1 -1
  5. port_ocean-0.14.7/port_ocean/tests/helpers/fake_port_api.py +191 -0
  6. {port_ocean-0.14.6 → port_ocean-0.14.7}/pyproject.toml +1 -1
  7. {port_ocean-0.14.6 → port_ocean-0.14.7}/LICENSE.md +0 -0
  8. {port_ocean-0.14.6 → port_ocean-0.14.7}/README.md +0 -0
  9. {port_ocean-0.14.6 → port_ocean-0.14.7}/integrations/_infra/Dockerfile.Deb +0 -0
  10. {port_ocean-0.14.6 → port_ocean-0.14.7}/integrations/_infra/Dockerfile.alpine +0 -0
  11. {port_ocean-0.14.6 → port_ocean-0.14.7}/integrations/_infra/Dockerfile.base.builder +0 -0
  12. {port_ocean-0.14.6 → port_ocean-0.14.7}/integrations/_infra/Dockerfile.base.runner +0 -0
  13. {port_ocean-0.14.6 → port_ocean-0.14.7}/integrations/_infra/Dockerfile.dockerignore +0 -0
  14. {port_ocean-0.14.6 → port_ocean-0.14.7}/integrations/_infra/Makefile +0 -0
  15. {port_ocean-0.14.6 → port_ocean-0.14.7}/integrations/_infra/grpcio.sh +0 -0
  16. {port_ocean-0.14.6 → port_ocean-0.14.7}/integrations/_infra/init.sh +0 -0
  17. {port_ocean-0.14.6 → port_ocean-0.14.7}/port_ocean/__init__.py +0 -0
  18. {port_ocean-0.14.6 → port_ocean-0.14.7}/port_ocean/bootstrap.py +0 -0
  19. {port_ocean-0.14.6 → port_ocean-0.14.7}/port_ocean/cli/__init__.py +0 -0
  20. {port_ocean-0.14.6 → port_ocean-0.14.7}/port_ocean/cli/cli.py +0 -0
  21. {port_ocean-0.14.6 → port_ocean-0.14.7}/port_ocean/cli/commands/__init__.py +0 -0
  22. {port_ocean-0.14.6 → port_ocean-0.14.7}/port_ocean/cli/commands/defaults/__init___.py +0 -0
  23. {port_ocean-0.14.6 → port_ocean-0.14.7}/port_ocean/cli/commands/defaults/clean.py +0 -0
  24. {port_ocean-0.14.6 → port_ocean-0.14.7}/port_ocean/cli/commands/defaults/dock.py +0 -0
  25. {port_ocean-0.14.6 → port_ocean-0.14.7}/port_ocean/cli/commands/defaults/group.py +0 -0
  26. {port_ocean-0.14.6 → port_ocean-0.14.7}/port_ocean/cli/commands/list_integrations.py +0 -0
  27. {port_ocean-0.14.6 → port_ocean-0.14.7}/port_ocean/cli/commands/main.py +0 -0
  28. {port_ocean-0.14.6 → port_ocean-0.14.7}/port_ocean/cli/commands/new.py +0 -0
  29. {port_ocean-0.14.6 → port_ocean-0.14.7}/port_ocean/cli/commands/pull.py +0 -0
  30. {port_ocean-0.14.6 → port_ocean-0.14.7}/port_ocean/cli/commands/sail.py +0 -0
  31. {port_ocean-0.14.6 → port_ocean-0.14.7}/port_ocean/cli/commands/version.py +0 -0
  32. {port_ocean-0.14.6 → port_ocean-0.14.7}/port_ocean/cli/cookiecutter/__init__.py +0 -0
  33. {port_ocean-0.14.6 → port_ocean-0.14.7}/port_ocean/cli/cookiecutter/cookiecutter.json +0 -0
  34. {port_ocean-0.14.6 → port_ocean-0.14.7}/port_ocean/cli/cookiecutter/extensions.py +0 -0
  35. {port_ocean-0.14.6 → port_ocean-0.14.7}/port_ocean/cli/cookiecutter/hooks/post_gen_project.py +0 -0
  36. {port_ocean-0.14.6 → port_ocean-0.14.7}/port_ocean/cli/cookiecutter/{{cookiecutter.integration_slug}}/.env.example +0 -0
  37. {port_ocean-0.14.6 → port_ocean-0.14.7}/port_ocean/cli/cookiecutter/{{cookiecutter.integration_slug}}/.gitignore +0 -0
  38. {port_ocean-0.14.6 → port_ocean-0.14.7}/port_ocean/cli/cookiecutter/{{cookiecutter.integration_slug}}/.port/resources/.gitignore +0 -0
  39. {port_ocean-0.14.6 → port_ocean-0.14.7}/port_ocean/cli/cookiecutter/{{cookiecutter.integration_slug}}/.port/resources/blueprints.json +0 -0
  40. {port_ocean-0.14.6 → port_ocean-0.14.7}/port_ocean/cli/cookiecutter/{{cookiecutter.integration_slug}}/.port/resources/port-app-config.yml +0 -0
  41. {port_ocean-0.14.6 → port_ocean-0.14.7}/port_ocean/cli/cookiecutter/{{cookiecutter.integration_slug}}/.port/spec.yaml +0 -0
  42. {port_ocean-0.14.6 → port_ocean-0.14.7}/port_ocean/cli/cookiecutter/{{cookiecutter.integration_slug}}/CHANGELOG.md +0 -0
  43. {port_ocean-0.14.6 → port_ocean-0.14.7}/port_ocean/cli/cookiecutter/{{cookiecutter.integration_slug}}/CONTRIBUTING.md +0 -0
  44. {port_ocean-0.14.6 → port_ocean-0.14.7}/port_ocean/cli/cookiecutter/{{cookiecutter.integration_slug}}/README.md +0 -0
  45. {port_ocean-0.14.6 → port_ocean-0.14.7}/port_ocean/cli/cookiecutter/{{cookiecutter.integration_slug}}/changelog/.gitignore +0 -0
  46. {port_ocean-0.14.6 → port_ocean-0.14.7}/port_ocean/cli/cookiecutter/{{cookiecutter.integration_slug}}/debug.py +0 -0
  47. {port_ocean-0.14.6 → port_ocean-0.14.7}/port_ocean/cli/cookiecutter/{{cookiecutter.integration_slug}}/main.py +0 -0
  48. {port_ocean-0.14.6 → port_ocean-0.14.7}/port_ocean/cli/cookiecutter/{{cookiecutter.integration_slug}}/poetry.toml +0 -0
  49. {port_ocean-0.14.6 → port_ocean-0.14.7}/port_ocean/cli/cookiecutter/{{cookiecutter.integration_slug}}/pyproject.toml +0 -0
  50. {port_ocean-0.14.6 → port_ocean-0.14.7}/port_ocean/cli/cookiecutter/{{cookiecutter.integration_slug}}/sonar-project.properties +0 -0
  51. {port_ocean-0.14.6 → port_ocean-0.14.7}/port_ocean/cli/cookiecutter/{{cookiecutter.integration_slug}}/tests/__init__.py +0 -0
  52. {port_ocean-0.14.6 → port_ocean-0.14.7}/port_ocean/cli/cookiecutter/{{cookiecutter.integration_slug}}/tests/test_sample.py +0 -0
  53. {port_ocean-0.14.6 → port_ocean-0.14.7}/port_ocean/cli/utils.py +0 -0
  54. {port_ocean-0.14.6 → port_ocean-0.14.7}/port_ocean/clients/__init__.py +0 -0
  55. {port_ocean-0.14.6 → port_ocean-0.14.7}/port_ocean/clients/port/__init__.py +0 -0
  56. {port_ocean-0.14.6 → port_ocean-0.14.7}/port_ocean/clients/port/client.py +0 -0
  57. {port_ocean-0.14.6 → port_ocean-0.14.7}/port_ocean/clients/port/mixins/__init__.py +0 -0
  58. {port_ocean-0.14.6 → port_ocean-0.14.7}/port_ocean/clients/port/mixins/blueprints.py +0 -0
  59. {port_ocean-0.14.6 → port_ocean-0.14.7}/port_ocean/clients/port/mixins/integrations.py +0 -0
  60. {port_ocean-0.14.6 → port_ocean-0.14.7}/port_ocean/clients/port/mixins/migrations.py +0 -0
  61. {port_ocean-0.14.6 → port_ocean-0.14.7}/port_ocean/clients/port/retry_transport.py +0 -0
  62. {port_ocean-0.14.6 → port_ocean-0.14.7}/port_ocean/clients/port/types.py +0 -0
  63. {port_ocean-0.14.6 → port_ocean-0.14.7}/port_ocean/clients/port/utils.py +0 -0
  64. {port_ocean-0.14.6 → port_ocean-0.14.7}/port_ocean/config/__init__.py +0 -0
  65. {port_ocean-0.14.6 → port_ocean-0.14.7}/port_ocean/config/base.py +0 -0
  66. {port_ocean-0.14.6 → port_ocean-0.14.7}/port_ocean/config/dynamic.py +0 -0
  67. {port_ocean-0.14.6 → port_ocean-0.14.7}/port_ocean/config/settings.py +0 -0
  68. {port_ocean-0.14.6 → port_ocean-0.14.7}/port_ocean/consumers/__init__.py +0 -0
  69. {port_ocean-0.14.6 → port_ocean-0.14.7}/port_ocean/consumers/kafka_consumer.py +0 -0
  70. {port_ocean-0.14.6 → port_ocean-0.14.7}/port_ocean/context/__init__.py +0 -0
  71. {port_ocean-0.14.6 → port_ocean-0.14.7}/port_ocean/context/event.py +0 -0
  72. {port_ocean-0.14.6 → port_ocean-0.14.7}/port_ocean/context/ocean.py +0 -0
  73. {port_ocean-0.14.6 → port_ocean-0.14.7}/port_ocean/context/resource.py +0 -0
  74. {port_ocean-0.14.6 → port_ocean-0.14.7}/port_ocean/core/__init__.py +0 -0
  75. {port_ocean-0.14.6 → port_ocean-0.14.7}/port_ocean/core/defaults/__init__.py +0 -0
  76. {port_ocean-0.14.6 → port_ocean-0.14.7}/port_ocean/core/defaults/clean.py +0 -0
  77. {port_ocean-0.14.6 → port_ocean-0.14.7}/port_ocean/core/defaults/common.py +0 -0
  78. {port_ocean-0.14.6 → port_ocean-0.14.7}/port_ocean/core/defaults/initialize.py +0 -0
  79. {port_ocean-0.14.6 → port_ocean-0.14.7}/port_ocean/core/event_listener/__init__.py +0 -0
  80. {port_ocean-0.14.6 → port_ocean-0.14.7}/port_ocean/core/event_listener/base.py +0 -0
  81. {port_ocean-0.14.6 → port_ocean-0.14.7}/port_ocean/core/event_listener/factory.py +0 -0
  82. {port_ocean-0.14.6 → port_ocean-0.14.7}/port_ocean/core/event_listener/http.py +0 -0
  83. {port_ocean-0.14.6 → port_ocean-0.14.7}/port_ocean/core/event_listener/kafka.py +0 -0
  84. {port_ocean-0.14.6 → port_ocean-0.14.7}/port_ocean/core/event_listener/once.py +0 -0
  85. {port_ocean-0.14.6 → port_ocean-0.14.7}/port_ocean/core/event_listener/polling.py +0 -0
  86. {port_ocean-0.14.6 → port_ocean-0.14.7}/port_ocean/core/handlers/__init__.py +0 -0
  87. {port_ocean-0.14.6 → port_ocean-0.14.7}/port_ocean/core/handlers/base.py +0 -0
  88. {port_ocean-0.14.6 → port_ocean-0.14.7}/port_ocean/core/handlers/entities_state_applier/__init__.py +0 -0
  89. {port_ocean-0.14.6 → port_ocean-0.14.7}/port_ocean/core/handlers/entities_state_applier/base.py +0 -0
  90. {port_ocean-0.14.6 → port_ocean-0.14.7}/port_ocean/core/handlers/entities_state_applier/port/__init__.py +0 -0
  91. {port_ocean-0.14.6 → port_ocean-0.14.7}/port_ocean/core/handlers/entities_state_applier/port/applier.py +0 -0
  92. {port_ocean-0.14.6 → port_ocean-0.14.7}/port_ocean/core/handlers/entities_state_applier/port/get_related_entities.py +0 -0
  93. {port_ocean-0.14.6 → port_ocean-0.14.7}/port_ocean/core/handlers/entities_state_applier/port/order_by_entities_dependencies.py +0 -0
  94. {port_ocean-0.14.6 → port_ocean-0.14.7}/port_ocean/core/handlers/entity_processor/__init__.py +0 -0
  95. {port_ocean-0.14.6 → port_ocean-0.14.7}/port_ocean/core/handlers/entity_processor/base.py +0 -0
  96. {port_ocean-0.14.6 → port_ocean-0.14.7}/port_ocean/core/handlers/entity_processor/jq_entity_processor.py +0 -0
  97. {port_ocean-0.14.6 → port_ocean-0.14.7}/port_ocean/core/handlers/port_app_config/__init__.py +0 -0
  98. {port_ocean-0.14.6 → port_ocean-0.14.7}/port_ocean/core/handlers/port_app_config/api.py +0 -0
  99. {port_ocean-0.14.6 → port_ocean-0.14.7}/port_ocean/core/handlers/port_app_config/base.py +0 -0
  100. {port_ocean-0.14.6 → port_ocean-0.14.7}/port_ocean/core/handlers/port_app_config/models.py +0 -0
  101. {port_ocean-0.14.6 → port_ocean-0.14.7}/port_ocean/core/handlers/resync_state_updater/__init__.py +0 -0
  102. {port_ocean-0.14.6 → port_ocean-0.14.7}/port_ocean/core/handlers/resync_state_updater/updater.py +0 -0
  103. {port_ocean-0.14.6 → port_ocean-0.14.7}/port_ocean/core/integrations/__init__.py +0 -0
  104. {port_ocean-0.14.6 → port_ocean-0.14.7}/port_ocean/core/integrations/base.py +0 -0
  105. {port_ocean-0.14.6 → port_ocean-0.14.7}/port_ocean/core/integrations/mixins/__init__.py +0 -0
  106. {port_ocean-0.14.6 → port_ocean-0.14.7}/port_ocean/core/integrations/mixins/events.py +0 -0
  107. {port_ocean-0.14.6 → port_ocean-0.14.7}/port_ocean/core/integrations/mixins/handler.py +0 -0
  108. {port_ocean-0.14.6 → port_ocean-0.14.7}/port_ocean/core/integrations/mixins/sync.py +0 -0
  109. {port_ocean-0.14.6 → port_ocean-0.14.7}/port_ocean/core/integrations/mixins/sync_raw.py +0 -0
  110. {port_ocean-0.14.6 → port_ocean-0.14.7}/port_ocean/core/integrations/mixins/utils.py +0 -0
  111. {port_ocean-0.14.6 → port_ocean-0.14.7}/port_ocean/core/models.py +0 -0
  112. {port_ocean-0.14.6 → port_ocean-0.14.7}/port_ocean/core/ocean_types.py +0 -0
  113. {port_ocean-0.14.6 → port_ocean-0.14.7}/port_ocean/core/utils.py +0 -0
  114. {port_ocean-0.14.6 → port_ocean-0.14.7}/port_ocean/exceptions/__init__.py +0 -0
  115. {port_ocean-0.14.6 → port_ocean-0.14.7}/port_ocean/exceptions/api.py +0 -0
  116. {port_ocean-0.14.6 → port_ocean-0.14.7}/port_ocean/exceptions/base.py +0 -0
  117. {port_ocean-0.14.6 → port_ocean-0.14.7}/port_ocean/exceptions/clients.py +0 -0
  118. {port_ocean-0.14.6 → port_ocean-0.14.7}/port_ocean/exceptions/context.py +0 -0
  119. {port_ocean-0.14.6 → port_ocean-0.14.7}/port_ocean/exceptions/core.py +0 -0
  120. {port_ocean-0.14.6 → port_ocean-0.14.7}/port_ocean/exceptions/port_defaults.py +0 -0
  121. {port_ocean-0.14.6 → port_ocean-0.14.7}/port_ocean/exceptions/utils.py +0 -0
  122. {port_ocean-0.14.6 → port_ocean-0.14.7}/port_ocean/helpers/__init__.py +0 -0
  123. {port_ocean-0.14.6 → port_ocean-0.14.7}/port_ocean/helpers/async_client.py +0 -0
  124. {port_ocean-0.14.6 → port_ocean-0.14.7}/port_ocean/log/__init__.py +0 -0
  125. {port_ocean-0.14.6 → port_ocean-0.14.7}/port_ocean/log/handlers.py +0 -0
  126. {port_ocean-0.14.6 → port_ocean-0.14.7}/port_ocean/log/logger_setup.py +0 -0
  127. {port_ocean-0.14.6 → port_ocean-0.14.7}/port_ocean/log/sensetive.py +0 -0
  128. {port_ocean-0.14.6 → port_ocean-0.14.7}/port_ocean/middlewares.py +0 -0
  129. {port_ocean-0.14.6 → port_ocean-0.14.7}/port_ocean/ocean.py +0 -0
  130. {port_ocean-0.14.6 → port_ocean-0.14.7}/port_ocean/py.typed +0 -0
  131. {port_ocean-0.14.6 → port_ocean-0.14.7}/port_ocean/run.py +0 -0
  132. {port_ocean-0.14.6 → port_ocean-0.14.7}/port_ocean/sonar-project.properties +0 -0
  133. {port_ocean-0.14.6 → port_ocean-0.14.7}/port_ocean/tests/__init__.py +0 -0
  134. {port_ocean-0.14.6 → port_ocean-0.14.7}/port_ocean/tests/clients/port/mixins/test_entities.py +0 -0
  135. {port_ocean-0.14.6 → port_ocean-0.14.7}/port_ocean/tests/conftest.py +0 -0
  136. {port_ocean-0.14.6 → port_ocean-0.14.7}/port_ocean/tests/core/defaults/test_common.py +0 -0
  137. {port_ocean-0.14.6 → port_ocean-0.14.7}/port_ocean/tests/core/handlers/entity_processor/test_jq_entity_processor.py +0 -0
  138. {port_ocean-0.14.6 → port_ocean-0.14.7}/port_ocean/tests/helpers/__init__.py +0 -0
  139. {port_ocean-0.14.6 → port_ocean-0.14.7}/port_ocean/tests/helpers/fixtures.py +0 -0
  140. {port_ocean-0.14.6 → port_ocean-0.14.7}/port_ocean/tests/helpers/integration.py +0 -0
  141. {port_ocean-0.14.6 → port_ocean-0.14.7}/port_ocean/tests/helpers/ocean_app.py +0 -0
  142. {port_ocean-0.14.6 → port_ocean-0.14.7}/port_ocean/tests/helpers/port_client.py +0 -0
  143. {port_ocean-0.14.6 → port_ocean-0.14.7}/port_ocean/tests/helpers/smoke_test.py +0 -0
  144. {port_ocean-0.14.6 → port_ocean-0.14.7}/port_ocean/tests/log/test_handlers.py +0 -0
  145. {port_ocean-0.14.6 → port_ocean-0.14.7}/port_ocean/tests/test_smoke.py +0 -0
  146. {port_ocean-0.14.6 → port_ocean-0.14.7}/port_ocean/tests/utils/test_async_iterators.py +0 -0
  147. {port_ocean-0.14.6 → port_ocean-0.14.7}/port_ocean/tests/utils/test_cache.py +0 -0
  148. {port_ocean-0.14.6 → port_ocean-0.14.7}/port_ocean/utils/__init__.py +0 -0
  149. {port_ocean-0.14.6 → port_ocean-0.14.7}/port_ocean/utils/async_http.py +0 -0
  150. {port_ocean-0.14.6 → port_ocean-0.14.7}/port_ocean/utils/async_iterators.py +0 -0
  151. {port_ocean-0.14.6 → port_ocean-0.14.7}/port_ocean/utils/cache.py +0 -0
  152. {port_ocean-0.14.6 → port_ocean-0.14.7}/port_ocean/utils/misc.py +0 -0
  153. {port_ocean-0.14.6 → port_ocean-0.14.7}/port_ocean/utils/queue_utils.py +0 -0
  154. {port_ocean-0.14.6 → port_ocean-0.14.7}/port_ocean/utils/repeat.py +0 -0
  155. {port_ocean-0.14.6 → port_ocean-0.14.7}/port_ocean/utils/signal.py +0 -0
  156. {port_ocean-0.14.6 → port_ocean-0.14.7}/port_ocean/utils/time.py +0 -0
  157. {port_ocean-0.14.6 → port_ocean-0.14.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.14.6
3
+ Version: 0.14.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
@@ -18,7 +18,7 @@ class TokenResponse(BaseModel):
18
18
 
19
19
  @property
20
20
  def expired(self) -> bool:
21
- return self._retrieved_time + self.expires_in < get_time()
21
+ return self._retrieved_time + self.expires_in <= get_time()
22
22
 
23
23
  @property
24
24
  def full_token(self) -> str:
@@ -48,6 +48,7 @@ class EntityClientMixin:
48
48
  ).lower(),
49
49
  "validation_only": str(validation_only).lower(),
50
50
  },
51
+ extensions={"retryable": True},
51
52
  )
52
53
 
53
54
  if response.is_error:
@@ -205,7 +206,6 @@ class EntityClientMixin:
205
206
  "include": ["blueprint", "identifier"],
206
207
  },
207
208
  extensions={"retryable": True},
208
- timeout=30,
209
209
  )
210
210
  handle_status_code(response)
211
211
  return [Entity.parse_obj(result) for result in response.json()["entities"]]
@@ -134,7 +134,7 @@ class RetryTransport(httpx.AsyncBaseTransport, httpx.BaseTransport):
134
134
  """
135
135
  try:
136
136
  transport: httpx.BaseTransport = self._wrapped_transport # type: ignore
137
- if request.method in self._retryable_methods:
137
+ if self._is_retryable_method(request):
138
138
  send_method = partial(transport.handle_request)
139
139
  response = self._retry_operation(request, send_method)
140
140
  else:
@@ -0,0 +1,191 @@
1
+ import uvicorn
2
+ import os
3
+ from typing import Dict, Any
4
+ from fastapi import FastAPI, Request
5
+
6
+ SMOKE_TEST_SUFFIX = os.environ.get("SMOKE_TEST_SUFFIX", "smoke")
7
+
8
+ app = FastAPI()
9
+
10
+ FAKE_DEPARTMENT_BLUEPRINT = {
11
+ "identifier": f"fake-department-{SMOKE_TEST_SUFFIX}",
12
+ "title": "Fake Department",
13
+ "icon": "Blueprint",
14
+ "schema": {"properties": {"name": {"type": "string"}, "id": {"type": "string"}}},
15
+ "relations": {},
16
+ }
17
+ FAKE_PERSON_BLUEPRINT = {
18
+ "identifier": f"fake-person-{SMOKE_TEST_SUFFIX}",
19
+ "title": "Fake Person",
20
+ "icon": "Blueprint",
21
+ "schema": {
22
+ "properties": {
23
+ "status": {
24
+ "type": "string",
25
+ "enum": ["WORKING", "NOPE"],
26
+ "enumColors": {"WORKING": "green", "NOPE": "red"},
27
+ "title": "Status",
28
+ },
29
+ "email": {"type": "string", "format": "email", "title": "Email"},
30
+ "age": {"type": "number", "title": "Age"},
31
+ "bio": {"type": "string", "title": "Bio"},
32
+ }
33
+ },
34
+ "relations": {
35
+ "department": {
36
+ "title": "Department",
37
+ "description": "Fake Department",
38
+ "target": f"fake-department-{SMOKE_TEST_SUFFIX}",
39
+ "required": False,
40
+ "many": False,
41
+ }
42
+ },
43
+ }
44
+
45
+
46
+ @app.router.get("/v1/blueprints/{blueprint_id}")
47
+ @app.router.patch("/v1/blueprints/{blueprint_id}")
48
+ async def get_blueprint(blueprint_id: str) -> Dict[str, Any]:
49
+ return {
50
+ "blueprint": (
51
+ FAKE_PERSON_BLUEPRINT
52
+ if blueprint_id.startswith("fake-person")
53
+ else FAKE_DEPARTMENT_BLUEPRINT
54
+ )
55
+ }
56
+
57
+
58
+ @app.router.post("/v1/entities/search")
59
+ async def search_entities() -> Dict[str, Any]:
60
+ return {"ok": True, "entities": []}
61
+
62
+
63
+ @app.router.get("/v1/integration/{integration_id}")
64
+ @app.router.patch("/v1/integration/{integration_id}")
65
+ @app.router.patch("/v1/integration/{integration_id}/resync-state")
66
+ async def get_integration(integration_id: str) -> Dict[str, Any]:
67
+ return {
68
+ "integration": {
69
+ "identifer": integration_id,
70
+ "resyncState": {
71
+ "status": "completed",
72
+ "lastResyncEnd": "2024-11-20T12:01:54.225362+00:00",
73
+ "lastResyncStart": "2024-11-20T12:01:45.483844+00:00",
74
+ "nextResync": None,
75
+ "intervalInMinuets": None,
76
+ "updatedAt": "2024-11-20T12:01:54.355Z",
77
+ },
78
+ "config": {
79
+ "deleteDependentEntities": True,
80
+ "createMissingRelatedEntities": True,
81
+ "enableMergeEntity": True,
82
+ "resources": [
83
+ {
84
+ "kind": "fake-department",
85
+ "selector": {"query": "true"},
86
+ "port": {
87
+ "entity": {
88
+ "mappings": {
89
+ "identifier": ".id",
90
+ "title": ".name",
91
+ "blueprint": f'"fake-department-{SMOKE_TEST_SUFFIX}"',
92
+ "properties": {"name": ".name", "id": ".id"},
93
+ }
94
+ }
95
+ },
96
+ },
97
+ {
98
+ "kind": "fake-person",
99
+ "selector": {"query": "true"},
100
+ "port": {
101
+ "entity": {
102
+ "mappings": {
103
+ "identifier": ".id",
104
+ "title": ".name",
105
+ "blueprint": f'"fake-person-{SMOKE_TEST_SUFFIX}"',
106
+ "properties": {
107
+ "name": ".name",
108
+ "email": ".email",
109
+ "status": ".status",
110
+ "age": ".age",
111
+ "department": ".department.name",
112
+ },
113
+ "relations": {"department": ".department.id"},
114
+ }
115
+ }
116
+ },
117
+ },
118
+ ],
119
+ },
120
+ "installationType": "OnPrem",
121
+ "_orgId": "org_ZOMGMYUNIQUEID",
122
+ "_id": "integration_0dOOhnlJQDjMPnfe",
123
+ "identifier": f"smoke-test-integration-{SMOKE_TEST_SUFFIX}",
124
+ "integrationType": "smoke-test",
125
+ "createdBy": "APSQAYsYoIwPXqjn6XpwCAgnPakkNO67",
126
+ "updatedBy": "APSQAYsYoIwPXqjn6XpwCAgnPakkNO67",
127
+ "createdAt": "2024-11-20T12:01:42.651Z",
128
+ "updatedAt": "2024-11-20T12:01:54.355Z",
129
+ "clientId": "",
130
+ "logAttributes": {
131
+ "ingestId": "DOHSAIDHOMER",
132
+ "ingestUrl": "http://localhost:5555/logs/integration/DOHSAIDHOMER",
133
+ },
134
+ },
135
+ }
136
+
137
+
138
+ @app.router.post("/v1/blueprints/{blueprint_id}/entities")
139
+ async def upsert_entities(blueprint_id: str, request: Request) -> Dict[str, Any]:
140
+ json = await request.json()
141
+
142
+ return {
143
+ "ok": True,
144
+ "entity": json,
145
+ }
146
+
147
+
148
+ @app.router.post("/v1/auth/access_token")
149
+ async def auth_token() -> Dict[str, Any]:
150
+ return {
151
+ "accessToken": "ZOMG",
152
+ "expiresIn": 1232131231,
153
+ "tokenType": "adadad",
154
+ }
155
+
156
+
157
+ @app.router.delete("/v1/blueprints/{blueprint_id}/all-entities")
158
+ async def delete_blueprint(blueprint_id: str, request: Request) -> Dict[str, Any]:
159
+ return {"migrationId": "ZOMG"}
160
+
161
+
162
+ @app.router.get("/v1/migrations/{migration_id}")
163
+ async def migration(migration_id: str, request: Request) -> Dict[str, Any]:
164
+ return {
165
+ "migration": {
166
+ "id": migration_id,
167
+ "status": "COMPLETE",
168
+ "actor": "Dwayne Scissors Johnson",
169
+ "sourceBlueprint": "leBlue",
170
+ "mapping": {},
171
+ }
172
+ }
173
+
174
+
175
+ CATCH_ALL = "/{full_path:path}"
176
+
177
+
178
+ @app.router.get(CATCH_ALL)
179
+ @app.router.post(CATCH_ALL)
180
+ @app.router.patch(CATCH_ALL)
181
+ @app.router.delete(CATCH_ALL)
182
+ async def catch_all(full_path: str, request: Request) -> str:
183
+ return f"Hello there from fake Port API - {full_path}, thanks for accessing me with {request.method}"
184
+
185
+
186
+ def start() -> None:
187
+ uvicorn.run(app, host="0.0.0.0", port=5555)
188
+
189
+
190
+ if __name__ == "__main__":
191
+ start()
@@ -1,6 +1,6 @@
1
1
  [tool.poetry]
2
2
  name = "port-ocean"
3
- version = "0.14.6"
3
+ version = "0.14.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