port-ocean 0.5.6__tar.gz → 0.17.8__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 (178) hide show
  1. {port_ocean-0.5.6 → port_ocean-0.17.8}/PKG-INFO +27 -19
  2. {port_ocean-0.5.6 → port_ocean-0.17.8}/README.md +15 -11
  3. port_ocean-0.17.8/integrations/_infra/Dockerfile.Deb +56 -0
  4. port_ocean-0.17.8/integrations/_infra/Dockerfile.alpine +108 -0
  5. port_ocean-0.17.8/integrations/_infra/Dockerfile.base.builder +26 -0
  6. port_ocean-0.17.8/integrations/_infra/Dockerfile.base.runner +13 -0
  7. port_ocean-0.17.8/integrations/_infra/Dockerfile.dockerignore +94 -0
  8. {port_ocean-0.5.6/port_ocean/cli/cookiecutter/{{cookiecutter.integration_slug}} → port_ocean-0.17.8/integrations/_infra}/Makefile +21 -8
  9. port_ocean-0.17.8/integrations/_infra/grpcio.sh +18 -0
  10. port_ocean-0.17.8/integrations/_infra/init.sh +5 -0
  11. {port_ocean-0.5.6 → port_ocean-0.17.8}/port_ocean/bootstrap.py +1 -1
  12. {port_ocean-0.5.6 → port_ocean-0.17.8}/port_ocean/cli/commands/defaults/clean.py +3 -1
  13. port_ocean-0.17.8/port_ocean/cli/commands/new.py +91 -0
  14. {port_ocean-0.5.6 → port_ocean-0.17.8}/port_ocean/cli/commands/sail.py +7 -1
  15. {port_ocean-0.5.6 → port_ocean-0.17.8}/port_ocean/cli/cookiecutter/cookiecutter.json +3 -0
  16. port_ocean-0.17.8/port_ocean/cli/cookiecutter/hooks/post_gen_project.py +30 -0
  17. port_ocean-0.17.8/port_ocean/cli/cookiecutter/{{cookiecutter.integration_slug}}/.env.example +6 -0
  18. port_ocean-0.17.8/port_ocean/cli/cookiecutter/{{cookiecutter.integration_slug}}/.port/resources/blueprints.json +41 -0
  19. port_ocean-0.17.8/port_ocean/cli/cookiecutter/{{cookiecutter.integration_slug}}/.port/resources/port-app-config.yml +16 -0
  20. port_ocean-0.17.8/port_ocean/cli/cookiecutter/{{cookiecutter.integration_slug}}/.port/spec.yaml +15 -0
  21. {port_ocean-0.5.6 → port_ocean-0.17.8}/port_ocean/cli/cookiecutter/{{cookiecutter.integration_slug}}/CHANGELOG.md +1 -1
  22. port_ocean-0.17.8/port_ocean/cli/cookiecutter/{{cookiecutter.integration_slug}}/CONTRIBUTING.md +7 -0
  23. {port_ocean-0.5.6 → port_ocean-0.17.8}/port_ocean/cli/cookiecutter/{{cookiecutter.integration_slug}}/changelog/.gitignore +1 -0
  24. {port_ocean-0.5.6 → port_ocean-0.17.8}/port_ocean/cli/cookiecutter/{{cookiecutter.integration_slug}}/main.py +16 -1
  25. {port_ocean-0.5.6 → port_ocean-0.17.8}/port_ocean/cli/cookiecutter/{{cookiecutter.integration_slug}}/pyproject.toml +21 -10
  26. port_ocean-0.17.8/port_ocean/cli/cookiecutter/{{cookiecutter.integration_slug}}/tests/test_sample.py +2 -0
  27. {port_ocean-0.5.6 → port_ocean-0.17.8}/port_ocean/clients/port/authentication.py +16 -4
  28. {port_ocean-0.5.6 → port_ocean-0.17.8}/port_ocean/clients/port/client.py +17 -0
  29. {port_ocean-0.5.6 → port_ocean-0.17.8}/port_ocean/clients/port/mixins/blueprints.py +7 -8
  30. {port_ocean-0.5.6 → port_ocean-0.17.8}/port_ocean/clients/port/mixins/entities.py +108 -53
  31. {port_ocean-0.5.6 → port_ocean-0.17.8}/port_ocean/clients/port/mixins/integrations.py +23 -34
  32. {port_ocean-0.5.6 → port_ocean-0.17.8}/port_ocean/clients/port/retry_transport.py +0 -5
  33. {port_ocean-0.5.6 → port_ocean-0.17.8}/port_ocean/clients/port/utils.py +9 -3
  34. {port_ocean-0.5.6 → port_ocean-0.17.8}/port_ocean/config/base.py +16 -16
  35. port_ocean-0.17.8/port_ocean/config/settings.py +118 -0
  36. {port_ocean-0.5.6 → port_ocean-0.17.8}/port_ocean/context/event.py +18 -5
  37. {port_ocean-0.5.6 → port_ocean-0.17.8}/port_ocean/context/ocean.py +14 -3
  38. {port_ocean-0.5.6 → port_ocean-0.17.8}/port_ocean/core/defaults/clean.py +10 -3
  39. {port_ocean-0.5.6 → port_ocean-0.17.8}/port_ocean/core/defaults/common.py +25 -9
  40. port_ocean-0.17.8/port_ocean/core/defaults/initialize.py +243 -0
  41. {port_ocean-0.5.6 → port_ocean-0.17.8}/port_ocean/core/event_listener/__init__.py +8 -0
  42. port_ocean-0.17.8/port_ocean/core/event_listener/base.py +93 -0
  43. {port_ocean-0.5.6 → port_ocean-0.17.8}/port_ocean/core/event_listener/factory.py +9 -1
  44. {port_ocean-0.5.6 → port_ocean-0.17.8}/port_ocean/core/event_listener/http.py +11 -3
  45. {port_ocean-0.5.6 → port_ocean-0.17.8}/port_ocean/core/event_listener/kafka.py +24 -5
  46. port_ocean-0.17.8/port_ocean/core/event_listener/once.py +156 -0
  47. {port_ocean-0.5.6 → port_ocean-0.17.8}/port_ocean/core/event_listener/polling.py +16 -14
  48. port_ocean-0.17.8/port_ocean/core/event_listener/webhooks_only.py +41 -0
  49. {port_ocean-0.5.6 → port_ocean-0.17.8}/port_ocean/core/handlers/__init__.py +1 -2
  50. {port_ocean-0.5.6 → port_ocean-0.17.8}/port_ocean/core/handlers/entities_state_applier/base.py +4 -1
  51. {port_ocean-0.5.6 → port_ocean-0.17.8}/port_ocean/core/handlers/entities_state_applier/port/applier.py +29 -87
  52. {port_ocean-0.5.6 → port_ocean-0.17.8}/port_ocean/core/handlers/entities_state_applier/port/order_by_entities_dependencies.py +5 -2
  53. {port_ocean-0.5.6 → port_ocean-0.17.8}/port_ocean/core/handlers/entity_processor/base.py +26 -22
  54. port_ocean-0.17.8/port_ocean/core/handlers/entity_processor/jq_entity_processor.py +313 -0
  55. port_ocean-0.17.8/port_ocean/core/handlers/port_app_config/base.py +84 -0
  56. {port_ocean-0.5.6 → port_ocean-0.17.8}/port_ocean/core/handlers/port_app_config/models.py +24 -5
  57. port_ocean-0.17.8/port_ocean/core/handlers/resync_state_updater/__init__.py +5 -0
  58. port_ocean-0.17.8/port_ocean/core/handlers/resync_state_updater/updater.py +84 -0
  59. {port_ocean-0.5.6 → port_ocean-0.17.8}/port_ocean/core/integrations/base.py +5 -7
  60. {port_ocean-0.5.6 → port_ocean-0.17.8}/port_ocean/core/integrations/mixins/events.py +3 -1
  61. {port_ocean-0.5.6 → port_ocean-0.17.8}/port_ocean/core/integrations/mixins/sync.py +4 -2
  62. {port_ocean-0.5.6 → port_ocean-0.17.8}/port_ocean/core/integrations/mixins/sync_raw.py +209 -74
  63. {port_ocean-0.5.6 → port_ocean-0.17.8}/port_ocean/core/integrations/mixins/utils.py +1 -1
  64. port_ocean-0.17.8/port_ocean/core/models.py +80 -0
  65. {port_ocean-0.5.6 → port_ocean-0.17.8}/port_ocean/core/ocean_types.py +29 -11
  66. port_ocean-0.17.8/port_ocean/core/utils/entity_topological_sorter.py +90 -0
  67. port_ocean-0.17.8/port_ocean/core/utils/utils.py +109 -0
  68. port_ocean-0.17.8/port_ocean/debug_cli.py +5 -0
  69. {port_ocean-0.5.6 → port_ocean-0.17.8}/port_ocean/exceptions/core.py +4 -0
  70. {port_ocean-0.5.6 → port_ocean-0.17.8}/port_ocean/exceptions/port_defaults.py +0 -2
  71. {port_ocean-0.5.6 → port_ocean-0.17.8}/port_ocean/helpers/retry.py +85 -24
  72. {port_ocean-0.5.6 → port_ocean-0.17.8}/port_ocean/log/handlers.py +23 -2
  73. {port_ocean-0.5.6 → port_ocean-0.17.8}/port_ocean/log/logger_setup.py +8 -1
  74. {port_ocean-0.5.6 → port_ocean-0.17.8}/port_ocean/log/sensetive.py +25 -10
  75. {port_ocean-0.5.6 → port_ocean-0.17.8}/port_ocean/middlewares.py +10 -2
  76. {port_ocean-0.5.6 → port_ocean-0.17.8}/port_ocean/ocean.py +57 -24
  77. {port_ocean-0.5.6 → port_ocean-0.17.8}/port_ocean/run.py +10 -5
  78. port_ocean-0.17.8/port_ocean/tests/__init__.py +0 -0
  79. port_ocean-0.17.8/port_ocean/tests/clients/port/mixins/test_entities.py +53 -0
  80. port_ocean-0.17.8/port_ocean/tests/conftest.py +4 -0
  81. port_ocean-0.17.8/port_ocean/tests/core/defaults/test_common.py +166 -0
  82. port_ocean-0.17.8/port_ocean/tests/core/handlers/entity_processor/test_jq_entity_processor.py +350 -0
  83. port_ocean-0.17.8/port_ocean/tests/core/handlers/mixins/test_sync_raw.py +552 -0
  84. port_ocean-0.17.8/port_ocean/tests/core/test_utils.py +73 -0
  85. port_ocean-0.17.8/port_ocean/tests/core/utils/test_entity_topological_sorter.py +99 -0
  86. port_ocean-0.17.8/port_ocean/tests/helpers/__init__.py +0 -0
  87. port_ocean-0.17.8/port_ocean/tests/helpers/fake_port_api.py +191 -0
  88. port_ocean-0.17.8/port_ocean/tests/helpers/fixtures.py +46 -0
  89. port_ocean-0.17.8/port_ocean/tests/helpers/integration.py +31 -0
  90. port_ocean-0.17.8/port_ocean/tests/helpers/ocean_app.py +66 -0
  91. port_ocean-0.17.8/port_ocean/tests/helpers/port_client.py +21 -0
  92. port_ocean-0.17.8/port_ocean/tests/helpers/smoke_test.py +82 -0
  93. port_ocean-0.17.8/port_ocean/tests/log/test_handlers.py +71 -0
  94. port_ocean-0.17.8/port_ocean/tests/test_smoke.py +74 -0
  95. port_ocean-0.17.8/port_ocean/tests/utils/test_async_iterators.py +45 -0
  96. port_ocean-0.17.8/port_ocean/tests/utils/test_cache.py +189 -0
  97. port_ocean-0.17.8/port_ocean/utils/async_iterators.py +109 -0
  98. {port_ocean-0.5.6 → port_ocean-0.17.8}/port_ocean/utils/cache.py +37 -1
  99. {port_ocean-0.5.6 → port_ocean-0.17.8}/port_ocean/utils/misc.py +22 -4
  100. port_ocean-0.17.8/port_ocean/utils/queue_utils.py +88 -0
  101. {port_ocean-0.5.6 → port_ocean-0.17.8}/port_ocean/utils/signal.py +1 -4
  102. port_ocean-0.17.8/port_ocean/utils/time.py +54 -0
  103. {port_ocean-0.5.6 → port_ocean-0.17.8}/pyproject.toml +62 -40
  104. port_ocean-0.5.6/port_ocean/cli/commands/new.py +0 -56
  105. port_ocean-0.5.6/port_ocean/cli/cookiecutter/hooks/post_gen_project.py +0 -13
  106. port_ocean-0.5.6/port_ocean/cli/cookiecutter/{{cookiecutter.integration_slug}}/.dockerignore +0 -94
  107. port_ocean-0.5.6/port_ocean/cli/cookiecutter/{{cookiecutter.integration_slug}}/.port/spec.yaml +0 -16
  108. port_ocean-0.5.6/port_ocean/cli/cookiecutter/{{cookiecutter.integration_slug}}/Dockerfile +0 -15
  109. port_ocean-0.5.6/port_ocean/cli/cookiecutter/{{cookiecutter.integration_slug}}/config.yaml +0 -17
  110. port_ocean-0.5.6/port_ocean/config/settings.py +0 -50
  111. port_ocean-0.5.6/port_ocean/core/defaults/initialize.py +0 -232
  112. port_ocean-0.5.6/port_ocean/core/event_listener/base.py +0 -54
  113. port_ocean-0.5.6/port_ocean/core/event_listener/once.py +0 -64
  114. port_ocean-0.5.6/port_ocean/core/handlers/entities_state_applier/port/validate_entity_relations.py +0 -40
  115. port_ocean-0.5.6/port_ocean/core/handlers/entity_processor/jq_entity_processor.py +0 -105
  116. port_ocean-0.5.6/port_ocean/core/handlers/port_app_config/base.py +0 -44
  117. port_ocean-0.5.6/port_ocean/core/models.py +0 -36
  118. port_ocean-0.5.6/port_ocean/core/utils.py +0 -65
  119. {port_ocean-0.5.6 → port_ocean-0.17.8}/LICENSE.md +0 -0
  120. {port_ocean-0.5.6 → port_ocean-0.17.8}/port_ocean/__init__.py +0 -0
  121. {port_ocean-0.5.6 → port_ocean-0.17.8}/port_ocean/cli/__init__.py +0 -0
  122. {port_ocean-0.5.6 → port_ocean-0.17.8}/port_ocean/cli/cli.py +0 -0
  123. {port_ocean-0.5.6 → port_ocean-0.17.8}/port_ocean/cli/commands/__init__.py +0 -0
  124. {port_ocean-0.5.6 → port_ocean-0.17.8}/port_ocean/cli/commands/defaults/__init___.py +0 -0
  125. {port_ocean-0.5.6 → port_ocean-0.17.8}/port_ocean/cli/commands/defaults/dock.py +0 -0
  126. {port_ocean-0.5.6 → port_ocean-0.17.8}/port_ocean/cli/commands/defaults/group.py +0 -0
  127. {port_ocean-0.5.6 → port_ocean-0.17.8}/port_ocean/cli/commands/list_integrations.py +0 -0
  128. {port_ocean-0.5.6 → port_ocean-0.17.8}/port_ocean/cli/commands/main.py +0 -0
  129. {port_ocean-0.5.6 → port_ocean-0.17.8}/port_ocean/cli/commands/pull.py +0 -0
  130. {port_ocean-0.5.6 → port_ocean-0.17.8}/port_ocean/cli/commands/version.py +0 -0
  131. {port_ocean-0.5.6 → port_ocean-0.17.8}/port_ocean/cli/cookiecutter/__init__.py +0 -0
  132. {port_ocean-0.5.6 → port_ocean-0.17.8}/port_ocean/cli/cookiecutter/extensions.py +0 -0
  133. {port_ocean-0.5.6 → port_ocean-0.17.8}/port_ocean/cli/cookiecutter/{{cookiecutter.integration_slug}}/.gitignore +0 -0
  134. {port_ocean-0.5.6 → port_ocean-0.17.8}/port_ocean/cli/cookiecutter/{{cookiecutter.integration_slug}}/.port/resources/.gitignore +0 -0
  135. {port_ocean-0.5.6 → port_ocean-0.17.8}/port_ocean/cli/cookiecutter/{{cookiecutter.integration_slug}}/README.md +0 -0
  136. {port_ocean-0.5.6 → port_ocean-0.17.8}/port_ocean/cli/cookiecutter/{{cookiecutter.integration_slug}}/debug.py +0 -0
  137. {port_ocean-0.5.6 → port_ocean-0.17.8}/port_ocean/cli/cookiecutter/{{cookiecutter.integration_slug}}/poetry.toml +0 -0
  138. {port_ocean-0.5.6 → port_ocean-0.17.8}/port_ocean/cli/cookiecutter/{{cookiecutter.integration_slug}}/sonar-project.properties +0 -0
  139. {port_ocean-0.5.6 → port_ocean-0.17.8}/port_ocean/cli/cookiecutter/{{cookiecutter.integration_slug}}/tests/__init__.py +0 -0
  140. {port_ocean-0.5.6 → port_ocean-0.17.8}/port_ocean/cli/utils.py +0 -0
  141. {port_ocean-0.5.6 → port_ocean-0.17.8}/port_ocean/clients/__init__.py +0 -0
  142. {port_ocean-0.5.6 → port_ocean-0.17.8}/port_ocean/clients/port/__init__.py +0 -0
  143. {port_ocean-0.5.6 → port_ocean-0.17.8}/port_ocean/clients/port/mixins/__init__.py +0 -0
  144. {port_ocean-0.5.6 → port_ocean-0.17.8}/port_ocean/clients/port/mixins/migrations.py +0 -0
  145. {port_ocean-0.5.6 → port_ocean-0.17.8}/port_ocean/clients/port/types.py +0 -0
  146. {port_ocean-0.5.6 → port_ocean-0.17.8}/port_ocean/config/__init__.py +0 -0
  147. {port_ocean-0.5.6 → port_ocean-0.17.8}/port_ocean/config/dynamic.py +0 -0
  148. {port_ocean-0.5.6 → port_ocean-0.17.8}/port_ocean/consumers/__init__.py +0 -0
  149. {port_ocean-0.5.6 → port_ocean-0.17.8}/port_ocean/consumers/kafka_consumer.py +0 -0
  150. {port_ocean-0.5.6 → port_ocean-0.17.8}/port_ocean/context/__init__.py +0 -0
  151. {port_ocean-0.5.6 → port_ocean-0.17.8}/port_ocean/context/resource.py +0 -0
  152. {port_ocean-0.5.6 → port_ocean-0.17.8}/port_ocean/core/__init__.py +0 -0
  153. {port_ocean-0.5.6 → port_ocean-0.17.8}/port_ocean/core/defaults/__init__.py +0 -0
  154. {port_ocean-0.5.6 → port_ocean-0.17.8}/port_ocean/core/handlers/base.py +0 -0
  155. {port_ocean-0.5.6 → port_ocean-0.17.8}/port_ocean/core/handlers/entities_state_applier/__init__.py +0 -0
  156. {port_ocean-0.5.6 → port_ocean-0.17.8}/port_ocean/core/handlers/entities_state_applier/port/__init__.py +0 -0
  157. {port_ocean-0.5.6 → port_ocean-0.17.8}/port_ocean/core/handlers/entities_state_applier/port/get_related_entities.py +0 -0
  158. {port_ocean-0.5.6 → port_ocean-0.17.8}/port_ocean/core/handlers/entity_processor/__init__.py +0 -0
  159. {port_ocean-0.5.6 → port_ocean-0.17.8}/port_ocean/core/handlers/port_app_config/__init__.py +0 -0
  160. {port_ocean-0.5.6 → port_ocean-0.17.8}/port_ocean/core/handlers/port_app_config/api.py +0 -0
  161. {port_ocean-0.5.6 → port_ocean-0.17.8}/port_ocean/core/integrations/__init__.py +0 -0
  162. {port_ocean-0.5.6 → port_ocean-0.17.8}/port_ocean/core/integrations/mixins/__init__.py +0 -0
  163. {port_ocean-0.5.6 → port_ocean-0.17.8}/port_ocean/core/integrations/mixins/handler.py +0 -0
  164. {port_ocean-0.5.6 → port_ocean-0.17.8}/port_ocean/exceptions/__init__.py +0 -0
  165. {port_ocean-0.5.6 → port_ocean-0.17.8}/port_ocean/exceptions/api.py +0 -0
  166. {port_ocean-0.5.6 → port_ocean-0.17.8}/port_ocean/exceptions/base.py +0 -0
  167. {port_ocean-0.5.6 → port_ocean-0.17.8}/port_ocean/exceptions/clients.py +0 -0
  168. {port_ocean-0.5.6 → port_ocean-0.17.8}/port_ocean/exceptions/context.py +0 -0
  169. {port_ocean-0.5.6 → port_ocean-0.17.8}/port_ocean/exceptions/utils.py +0 -0
  170. {port_ocean-0.5.6 → port_ocean-0.17.8}/port_ocean/helpers/__init__.py +0 -0
  171. {port_ocean-0.5.6 → port_ocean-0.17.8}/port_ocean/helpers/async_client.py +0 -0
  172. {port_ocean-0.5.6 → port_ocean-0.17.8}/port_ocean/log/__init__.py +0 -0
  173. {port_ocean-0.5.6 → port_ocean-0.17.8}/port_ocean/py.typed +0 -0
  174. {port_ocean-0.5.6 → port_ocean-0.17.8}/port_ocean/sonar-project.properties +0 -0
  175. {port_ocean-0.5.6 → port_ocean-0.17.8}/port_ocean/utils/__init__.py +0 -0
  176. {port_ocean-0.5.6 → port_ocean-0.17.8}/port_ocean/utils/async_http.py +0 -0
  177. {port_ocean-0.5.6 → port_ocean-0.17.8}/port_ocean/utils/repeat.py +0 -0
  178. {port_ocean-0.5.6 → port_ocean-0.17.8}/port_ocean/version.py +0 -0
@@ -1,12 +1,12 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: port-ocean
3
- Version: 0.5.6
3
+ Version: 0.17.8
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
7
7
  Author: Daniel Sinai
8
8
  Author-email: daniel@getport.io
9
- Requires-Python: >=3.11,<4.0
9
+ Requires-Python: >=3.12,<4.0
10
10
  Classifier: Framework :: FastAPI
11
11
  Classifier: Intended Audience :: Developers
12
12
  Classifier: License :: OSI Approved :: Apache Software License
@@ -14,36 +14,38 @@ Classifier: Natural Language :: English
14
14
  Classifier: Operating System :: POSIX
15
15
  Classifier: Programming Language :: Python
16
16
  Classifier: Programming Language :: Python :: 3
17
- Classifier: Programming Language :: Python :: 3.11
18
17
  Classifier: Programming Language :: Python :: 3.12
18
+ Classifier: Programming Language :: Python :: 3.13
19
+ Classifier: Programming Language :: Python :: 3.11
19
20
  Classifier: Topic :: Software Development :: Libraries
20
21
  Classifier: Topic :: Software Development :: Libraries :: Application Frameworks
21
22
  Classifier: Topic :: Software Development :: Libraries :: Python Modules
22
23
  Classifier: Topic :: Utilities
23
24
  Provides-Extra: cli
25
+ Requires-Dist: aiostream (>=0.5.2,<0.7.0)
24
26
  Requires-Dist: click (>=8.1.3,<9.0.0) ; extra == "cli"
25
27
  Requires-Dist: confluent-kafka (>=2.1.1,<3.0.0)
26
28
  Requires-Dist: cookiecutter (>=2.1.1,<3.0.0) ; extra == "cli"
27
- Requires-Dist: fastapi (>=0.100,<0.110)
28
- Requires-Dist: httpx (>=0.24.1,<0.25.0)
29
+ Requires-Dist: fastapi (>=0.115.3,<0.116.0)
30
+ Requires-Dist: httpx (>=0.24.1,<0.28.0)
29
31
  Requires-Dist: jinja2-time (>=0.2.0,<0.3.0) ; extra == "cli"
32
+ Requires-Dist: jq (>=1.8.0,<2.0.0)
30
33
  Requires-Dist: loguru (>=0.7.0,<0.8.0)
31
- Requires-Dist: pydantic (>=1.10.8,<2.0.0)
34
+ Requires-Dist: pydantic[dotenv] (>=1.10.8,<2.0.0)
32
35
  Requires-Dist: pydispatcher (>=2.0.7,<3.0.0)
33
36
  Requires-Dist: pyhumps (>=3.8.0,<4.0.0)
34
- Requires-Dist: pyjq (>=2.6.0,<3.0.0)
37
+ Requires-Dist: python-dateutil (>=2.9.0.post0,<3.0.0)
35
38
  Requires-Dist: pyyaml (>=6.0,<7.0)
36
39
  Requires-Dist: rich (>=13.4.1,<14.0.0) ; extra == "cli"
37
40
  Requires-Dist: six (>=1.16.0,<2.0.0)
38
41
  Requires-Dist: tomli (>=2.0.1,<3.0.0)
39
- Requires-Dist: urllib3 (>=1.26.16,<2.0.0)
40
- Requires-Dist: uvicorn (>=0.22.0,<0.23.0)
42
+ Requires-Dist: urllib3 (>=1.26.16,<3.0.0)
43
+ Requires-Dist: uvicorn (>=0.22,<0.31)
41
44
  Requires-Dist: werkzeug (>=2.3.4,<4.0.0)
42
45
  Project-URL: Repository, https://github.com/port-labs/Port-Ocean
43
46
  Description-Content-Type: text/markdown
44
47
 
45
- <img src="./assets/Thumbnail.jpg" alt="Ocean">
46
-
48
+ <img src="./assets/Thumbnail.png" alt="Ocean">
47
49
 
48
50
  # Ocean <img src="./assets/OceanSymbol.svg" alt="Ocean" width="100" height="100" align="right">
49
51
 
@@ -56,24 +58,23 @@ empowering engineers to effortlessly prioritize key features and streamline the
56
58
 
57
59
  - Python 3.11
58
60
 
59
-
60
-
61
61
  ## Installation
62
+
62
63
  In order to install the Ocean Framework, run the following command:
63
64
 
64
65
  ```bash
65
- pip install port-ocean[cli]
66
+ pip install "port-ocean[cli]"
66
67
  ```
67
68
 
68
69
  Or
69
70
 
70
71
  ```bash
71
- poetry add port-ocean[cli]
72
+ poetry add "port-ocean[cli]"
72
73
  ```
73
74
 
74
75
  ## Run Integration
75
76
 
76
- 1. source the integration venv
77
+ 1. source the integration venv
77
78
 
78
79
  ```bash
79
80
  . .venv/bin/activate
@@ -82,8 +83,7 @@ poetry add port-ocean[cli]
82
83
  2. Run
83
84
 
84
85
  ```bash
85
- ocean sail ./path/to/
86
- integration
86
+ ocean sail ./path/to/integration
87
87
  ```
88
88
 
89
89
  # Export Architecture
@@ -91,14 +91,15 @@ poetry add port-ocean[cli]
91
91
  ![image](./assets/ExportArchitecture.svg)
92
92
 
93
93
  ## Real-Time updates Architecture
94
+
94
95
  ![image](./assets/RealTimeUpdatesArchitecture.svg)
95
96
 
96
97
  ## Integration Lifecycle
97
98
 
98
99
  ![image](./assets/LifecycleOfIntegration.svg)
99
100
 
100
-
101
101
  ## Folder Structure
102
+
102
103
  The Ocean Integration Framework follows a specific folder structure within this mono repository. This structure ensures proper organization and easy identification of integration modules. The suggested folder structure is as follows:
103
104
 
104
105
  ```
@@ -122,9 +123,11 @@ port-ocean/
122
123
  - The `pyproject.toml` file inside each integration folder lists the required dependencies for that integration.
123
124
 
124
125
  ## Configuration
126
+
125
127
  The Integration Framework utilizes a `config.yaml` file for its configuration. This file defines both the framework configuration and the integration configuration within it. Each integration is identified by its type and unique identifier, which are utilized during initialization to appropriately update Port.
126
128
 
127
129
  Example `config.yaml`:
130
+
128
131
  ```yaml
129
132
  # This is an example configuration file for the integration service.
130
133
  # Please copy this file to config.yaml file in the integration folder and edit it to your needs.
@@ -153,6 +156,7 @@ The reason Ocean is open source is that we aim for the Port integration library
153
156
  In order to learn how you can contribute to Ocean, read our [contributing guide](./CONTRIBUTING.md)
154
157
 
155
158
  ### Local Development (Framework)
159
+
156
160
  1. Clone the repository
157
161
 
158
162
  2. Install dependencies:
@@ -174,6 +178,7 @@ In order to learn how you can contribute to Ocean, read our [contributing guide]
174
178
  ```
175
179
 
176
180
  ### Local Development (Integration)
181
+
177
182
  1. Clone the repository
178
183
 
179
184
  2. For new integration run
@@ -209,7 +214,10 @@ In order to learn how you can contribute to Ocean, read our [contributing guide]
209
214
  ```
210
215
 
211
216
  ## License
217
+
212
218
  The Ocean Framework is open-source software licensed under the [Apache 2.0 License](https://www.apache.org/licenses/LICENSE-2.0). See the [LICENSE](./LICENSE) file for more information.
213
219
 
214
220
  ## Contact
221
+
215
222
  For any questions or inquiries, please reach out to our team at support@getport.io
223
+
@@ -1,5 +1,4 @@
1
- <img src="./assets/Thumbnail.jpg" alt="Ocean">
2
-
1
+ <img src="./assets/Thumbnail.png" alt="Ocean">
3
2
 
4
3
  # Ocean <img src="./assets/OceanSymbol.svg" alt="Ocean" width="100" height="100" align="right">
5
4
 
@@ -12,24 +11,23 @@ empowering engineers to effortlessly prioritize key features and streamline the
12
11
 
13
12
  - Python 3.11
14
13
 
15
-
16
-
17
14
  ## Installation
15
+
18
16
  In order to install the Ocean Framework, run the following command:
19
17
 
20
18
  ```bash
21
- pip install port-ocean[cli]
19
+ pip install "port-ocean[cli]"
22
20
  ```
23
21
 
24
22
  Or
25
23
 
26
24
  ```bash
27
- poetry add port-ocean[cli]
25
+ poetry add "port-ocean[cli]"
28
26
  ```
29
27
 
30
28
  ## Run Integration
31
29
 
32
- 1. source the integration venv
30
+ 1. source the integration venv
33
31
 
34
32
  ```bash
35
33
  . .venv/bin/activate
@@ -38,8 +36,7 @@ poetry add port-ocean[cli]
38
36
  2. Run
39
37
 
40
38
  ```bash
41
- ocean sail ./path/to/
42
- integration
39
+ ocean sail ./path/to/integration
43
40
  ```
44
41
 
45
42
  # Export Architecture
@@ -47,14 +44,15 @@ poetry add port-ocean[cli]
47
44
  ![image](./assets/ExportArchitecture.svg)
48
45
 
49
46
  ## Real-Time updates Architecture
47
+
50
48
  ![image](./assets/RealTimeUpdatesArchitecture.svg)
51
49
 
52
50
  ## Integration Lifecycle
53
51
 
54
52
  ![image](./assets/LifecycleOfIntegration.svg)
55
53
 
56
-
57
54
  ## Folder Structure
55
+
58
56
  The Ocean Integration Framework follows a specific folder structure within this mono repository. This structure ensures proper organization and easy identification of integration modules. The suggested folder structure is as follows:
59
57
 
60
58
  ```
@@ -78,9 +76,11 @@ port-ocean/
78
76
  - The `pyproject.toml` file inside each integration folder lists the required dependencies for that integration.
79
77
 
80
78
  ## Configuration
79
+
81
80
  The Integration Framework utilizes a `config.yaml` file for its configuration. This file defines both the framework configuration and the integration configuration within it. Each integration is identified by its type and unique identifier, which are utilized during initialization to appropriately update Port.
82
81
 
83
82
  Example `config.yaml`:
83
+
84
84
  ```yaml
85
85
  # This is an example configuration file for the integration service.
86
86
  # Please copy this file to config.yaml file in the integration folder and edit it to your needs.
@@ -109,6 +109,7 @@ The reason Ocean is open source is that we aim for the Port integration library
109
109
  In order to learn how you can contribute to Ocean, read our [contributing guide](./CONTRIBUTING.md)
110
110
 
111
111
  ### Local Development (Framework)
112
+
112
113
  1. Clone the repository
113
114
 
114
115
  2. Install dependencies:
@@ -130,6 +131,7 @@ In order to learn how you can contribute to Ocean, read our [contributing guide]
130
131
  ```
131
132
 
132
133
  ### Local Development (Integration)
134
+
133
135
  1. Clone the repository
134
136
 
135
137
  2. For new integration run
@@ -165,7 +167,9 @@ In order to learn how you can contribute to Ocean, read our [contributing guide]
165
167
  ```
166
168
 
167
169
  ## License
170
+
168
171
  The Ocean Framework is open-source software licensed under the [Apache 2.0 License](https://www.apache.org/licenses/LICENSE-2.0). See the [LICENSE](./LICENSE) file for more information.
169
172
 
170
173
  ## Contact
171
- For any questions or inquiries, please reach out to our team at support@getport.io
174
+
175
+ For any questions or inquiries, please reach out to our team at support@getport.io
@@ -0,0 +1,56 @@
1
+ ARG BASE_BUILDER_PYTHON_IMAGE=ghcr.io/port-labs/port-ocean-base-builder:latest
2
+ ARG BASE_RUNNER_PYTHON_IMAGE=ghcr.io/port-labs/port-ocean-base-runner:latest
3
+
4
+ FROM ${BASE_BUILDER_PYTHON_IMAGE} AS base
5
+
6
+ ARG BUILD_CONTEXT
7
+ ARG BUILDPLATFORM
8
+
9
+ ENV LIBRDKAFKA_VERSION=1.9.2 \
10
+ PYTHONUNBUFFERED=1 \
11
+ POETRY_VIRTUALENVS_IN_PROJECT=1 \
12
+ PIP_ROOT_USER_ACTION=ignore
13
+
14
+ WORKDIR /app
15
+
16
+ COPY ./${BUILD_CONTEXT}/pyproject.toml ./${BUILD_CONTEXT}/poetry.lock /app/
17
+
18
+ RUN poetry install --without dev --no-root --no-interaction --no-ansi --no-cache
19
+
20
+ FROM ${BASE_RUNNER_PYTHON_IMAGE} AS prod
21
+
22
+ ARG INTEGRATION_VERSION
23
+ ARG BUILD_CONTEXT
24
+
25
+ ENV LIBRDKAFKA_VERSION=1.9.2
26
+
27
+ RUN apt-get update \
28
+ && apt-get install -y \
29
+ ca-certificates \
30
+ openssl \
31
+ curl \
32
+ && apt-get clean
33
+
34
+ LABEL INTEGRATION_VERSION=${INTEGRATION_VERSION}
35
+ # Used to ensure that new integrations will be public, see https://docs.github.com/en/packages/learn-github-packages/configuring-a-packages-access-control-and-visibility
36
+ LABEL org.opencontainers.image.source=https://github.com/port-labs/ocean
37
+
38
+ ENV PIP_ROOT_USER_ACTION=ignore
39
+
40
+ WORKDIR /app
41
+
42
+ # Copy the application code
43
+ COPY ./${BUILD_CONTEXT} /app
44
+
45
+ # Copy dependencies from the build stage
46
+ COPY --from=base /app/.venv /app/.venv
47
+
48
+ COPY ./integrations/_infra/init.sh /app/init.sh
49
+
50
+ # Ensure that ocean is available for all in path
51
+ RUN chmod a+x /app/.venv/bin/ocean
52
+
53
+ RUN chmod a+x /app/init.sh
54
+ RUN ln -s /app/.venv/bin/ocean /usr/bin/ocean
55
+ # Run the application
56
+ CMD ["bash", "/app/init.sh"]
@@ -0,0 +1,108 @@
1
+ ARG BASE_PYTHON_IMAGE=alpine:3.20.1
2
+
3
+ FROM ${BASE_PYTHON_IMAGE} AS base
4
+
5
+ ARG BUILD_CONTEXT
6
+ ARG BUILDPLATFORM
7
+
8
+ ENV LIBRDKAFKA_VERSION=1.9.2 \
9
+ PYTHONUNBUFFERED=1 \
10
+ PIP_DISABLE_PIP_VERSION_CHECK=on \
11
+ POETRY_NO_INTERACTION=1 \
12
+ PIP_NO_CACHE_DIR=on \
13
+ PIP_DEFAULT_TIMEOUT=100 \
14
+ GRPC_PYTHON_DISABLE_LIBC_COMPATIBILITY=1 \
15
+ PYTHONDONTWRITEBYTECODE=1
16
+
17
+ # Install system dependencies and libraries
18
+ RUN \
19
+ apk add --no-cache \
20
+ gcc \
21
+ g++ \
22
+ musl-dev \
23
+ build-base \
24
+ bash \
25
+ oniguruma-dev \
26
+ make \
27
+ autoconf \
28
+ automake \
29
+ libtool \
30
+ curl \
31
+ openssl-dev \
32
+ cargo \
33
+ pkgconfig \
34
+ linux-headers \
35
+ libstdc++ \
36
+ libffi-dev \
37
+ py3-grpcio \
38
+ py3-protobuf \
39
+ python3-dev \
40
+ # librdkafka-dev \
41
+ # Install community librdkafka-dev since the default in alpine is older
42
+ && echo "@edge http://dl-cdn.alpinelinux.org/alpine/edge/main" >> /etc/apk/repositories \
43
+ && echo "@edgecommunity http://dl-cdn.alpinelinux.org/alpine/edge/community" >> /etc/apk/repositories \
44
+ && apk add --no-cache \
45
+ alpine-sdk \
46
+ "librdkafka@edgecommunity>=${LIBRDKAFKA_VERSION}" \
47
+ "librdkafka-dev@edgecommunity>=${LIBRDKAFKA_VERSION}" \
48
+ && curl -sSL https://install.python-poetry.org | python3 - \
49
+ && apk upgrade gcc linux-headers libstdc++ gcc g++ --repository=http://dl-cdn.alpinelinux.org/alpine/edge/main/ \
50
+ && ln -s /root/.local/bin/poetry /usr/bin/poetry \
51
+ && poetry config virtualenvs.in-project true
52
+
53
+ WORKDIR /app
54
+
55
+ COPY ./${BUILD_CONTEXT}/pyproject.toml ./${BUILD_CONTEXT}/poetry.lock /app/
56
+
57
+ COPY ./integrations/_infra/grpcio.sh /app/grpcio.sh
58
+
59
+ RUN chmod a+x /app/grpcio.sh && /app/grpcio.sh "${BUILDPLATFORM}"
60
+
61
+ RUN export GRPC_PYTHON_DISABLE_LIBC_COMPATIBILITY=1 \
62
+ && poetry install --without dev --no-root --no-interaction --no-ansi --no-cache
63
+
64
+ FROM ${BASE_PYTHON_IMAGE} AS prod
65
+
66
+ ARG INTEGRATION_VERSION
67
+ ARG BUILD_CONTEXT
68
+
69
+ ENV LIBRDKAFKA_VERSION=1.9.2
70
+
71
+ LABEL INTEGRATION_VERSION=${INTEGRATION_VERSION}
72
+ # Used to ensure that new integrations will be public, see https://docs.github.com/en/packages/learn-github-packages/configuring-a-packages-access-control-and-visibility
73
+ LABEL org.opencontainers.image.source=https://github.com/port-labs/ocean
74
+
75
+ # Install only runtime dependencies
76
+ RUN \
77
+ apk add --no-cache \
78
+ bash \
79
+ oniguruma-dev \
80
+ python3 \
81
+ # Install community librdkafka-dev since the default in alpine is older
82
+ && echo "@edge http://dl-cdn.alpinelinux.org/alpine/edge/main" >> /etc/apk/repositories \
83
+ && echo "@edgecommunity http://dl-cdn.alpinelinux.org/alpine/edge/community" >> /etc/apk/repositories \
84
+ && apk update \
85
+ && apk add --no-cache \
86
+ alpine-sdk \
87
+ "librdkafka@edgecommunity>=${LIBRDKAFKA_VERSION}" \
88
+ "librdkafka-dev@edgecommunity>=${LIBRDKAFKA_VERSION}" \
89
+ # Fix security issues
90
+ && apk upgrade busybox libcrypto3 libssl3 --repository=http://dl-cdn.alpinelinux.org/alpine/edge/main/
91
+
92
+ WORKDIR /app
93
+
94
+ # Copy the application code
95
+ COPY ./${BUILD_CONTEXT} /app
96
+
97
+ # Copy dependencies from the build stage
98
+ COPY --from=base /app/.venv /app/.venv
99
+
100
+ COPY ./integrations/_infra/init.sh /app/init.sh
101
+
102
+ # Ensure that ocean is available for all in path
103
+ RUN chmod a+x /app/.venv/bin/ocean
104
+
105
+ RUN chmod a+x /app/init.sh
106
+ RUN ln -s /app/.venv/bin/ocean /usr/bin/ocean
107
+ # Run the application
108
+ CMD ["bash", "/app/init.sh"]
@@ -0,0 +1,26 @@
1
+ ARG BASE_PYTHON_IMAGE=debian:trixie-slim
2
+ # debian:trixie-slim - Python 3.12
3
+ FROM ${BASE_PYTHON_IMAGE}
4
+
5
+ LABEL org.opencontainers.image.source=https://github.com/port-labs/ocean
6
+
7
+ ENV LIBRDKAFKA_VERSION=1.9.2 \
8
+ PYTHONUNBUFFERED=1 \
9
+ POETRY_VIRTUALENVS_IN_PROJECT=1 \
10
+ PIP_ROOT_USER_ACTION=ignore
11
+
12
+ RUN apt-get update \
13
+ && apt-get install -y \
14
+ --no-install-recommends \
15
+ wget \
16
+ g++ \
17
+ libssl-dev \
18
+ autoconf \
19
+ automake \
20
+ libtool \
21
+ curl \
22
+ librdkafka-dev \
23
+ python3 \
24
+ python3-pip \
25
+ python3-poetry \
26
+ && apt-get clean
@@ -0,0 +1,13 @@
1
+ ARG BASE_PYTHON_IMAGE=debian:trixie-slim
2
+ # debian:trixie-slim - Python 3.12
3
+ FROM ${BASE_PYTHON_IMAGE}
4
+
5
+ LABEL org.opencontainers.image.source=https://github.com/port-labs/ocean
6
+
7
+ ENV LIBRDKAFKA_VERSION=1.9.2
8
+
9
+ ENV PIP_ROOT_USER_ACTION=ignore
10
+
11
+ RUN apt-get update \
12
+ && apt-get install -y --no-install-recommends librdkafka-dev python3 \
13
+ && apt-get clean
@@ -0,0 +1,94 @@
1
+
2
+ # Git
3
+ **/.git
4
+ **/.gitignore
5
+ **/.gitattributes
6
+
7
+
8
+ # CI
9
+ **/.codeclimate.yml
10
+ **/.travis.yml
11
+ **/.taskcluster.yml
12
+
13
+ # Docker
14
+ **/docker-compose.yml
15
+ **/Dockerfile
16
+ **/.docker
17
+ **/.dockerignore
18
+
19
+ # Byte-compiled / optimized / DLL files
20
+ **/__pycache__/
21
+ **/*.py[cod]
22
+
23
+ # C extensions
24
+ **/*.so
25
+
26
+ # Distribution / packaging
27
+ **/.Python
28
+ **/env/
29
+ **/build/
30
+ **/develop-eggs/
31
+ **/dist/
32
+ **/downloads/
33
+ **/eggs/
34
+ **/lib/
35
+ **/lib64/
36
+ **/parts/
37
+ **/sdist/
38
+ **/var/
39
+ **/*.egg-info/
40
+ **/.installed.cfg
41
+ **/*.egg
42
+
43
+ # PyInstaller
44
+ # Usually these files are written by a python script from a template
45
+ # before PyInstaller builds the exe, so as to inject date/other infos into it.
46
+ **/*.manifest
47
+ **/*.spec
48
+
49
+ # Installer logs
50
+ **/pip-log.txt
51
+ **/pip-delete-this-directory.txt
52
+
53
+ # Unit test / coverage reports
54
+ **/htmlcov/
55
+ **/.tox/
56
+ **/.coverage
57
+ **/.cache
58
+ **/nosetests.xml
59
+ **/coverage.xml
60
+
61
+ # Translations
62
+ **/*.mo
63
+ **/*.pot
64
+
65
+ # Django stuff:
66
+ **/*.log
67
+
68
+ # Sphinx documentation
69
+ **/docs/_build/
70
+
71
+ # PyBuilder
72
+ **/target/
73
+
74
+ # Virtual environment
75
+ **/.env
76
+ **/.venv/
77
+ **/venv/
78
+
79
+ # PyCharm
80
+ **/.idea
81
+
82
+ # Python mode for VIM
83
+ **/.ropeproject
84
+
85
+ # Vim swap files
86
+ **/*.swp
87
+
88
+ # VS Code
89
+ **/.vscode/
90
+
91
+ **/*.md
92
+ **/.ruff_cache
93
+ **/changelog
94
+ **/tests
@@ -3,9 +3,13 @@ ACTIVATE := . .venv/bin/activate
3
3
  define run_checks
4
4
  exit_code=0; \
5
5
  cd $1; \
6
+ echo "Running poetry check"; \
6
7
  poetry check || exit_code=$$?;\
7
- mypy . || exit_code=$$?; \
8
- ruff . || exit_code=$$?; \
8
+ echo "Running mypy"; \
9
+ mypy . --exclude '/\.venv/' || exit_code=$$?; \
10
+ echo "Running ruff"; \
11
+ ruff check . || exit_code=$$?; \
12
+ echo "Running black"; \
9
13
  black --check . || exit_code=$$?; \
10
14
  if [ $$exit_code -eq 1 ]; then \
11
15
  echo "\033[0;31mOne or more checks failed with exit code $$exit_code\033[0m"; \
@@ -18,7 +22,7 @@ endef
18
22
  define install_poetry
19
23
  if ! command -v poetry &> /dev/null; then \
20
24
  pip install --upgrade pip; \
21
- pip install poetry; \
25
+ pip install 'poetry>=1.0.0,<2.0.0'; \
22
26
  else \
23
27
  echo "Poetry is already installed."; \
24
28
  fi
@@ -37,26 +41,35 @@ define deactivate_virtualenv
37
41
  fi
38
42
  endef
39
43
 
40
- .SILENT: install install/prod lint run test clean
44
+ .SILENT: install install/prod install/local-core lint lint/fix run test clean
41
45
 
42
46
  install:
43
47
  $(call deactivate_virtualenv) && \
44
48
  $(call install_poetry) && \
45
49
  poetry install --with dev
46
50
 
51
+ install/local-core: install
52
+ # NOTE: This is a temporary change that shouldn't be committed
53
+ $(ACTIVATE) && pip install -e ../../
54
+
47
55
  install/prod:
48
- $(call install_poetry) && \
49
56
  poetry install --without dev --no-root --no-interaction --no-ansi --no-cache
57
+ $(call install_poetry) && \
50
58
 
51
59
  lint:
52
60
  $(ACTIVATE) && \
53
61
  $(call run_checks,.)
54
62
 
63
+ lint/fix:
64
+ $(ACTIVATE) && \
65
+ black .
66
+ ruff check --fix .
67
+
55
68
  run:
56
69
  $(ACTIVATE) && ocean sail
57
70
 
58
- test: lint
59
- $(ACTIVATE) && poetry run pytest
71
+ test:
72
+ $(ACTIVATE) && poetry run pytest -n auto
60
73
 
61
74
  clean:
62
75
  @find . -name '.venv' -type d -exec rm -rf {} \;
@@ -71,4 +84,4 @@ clean:
71
84
  rm -rf htmlcov
72
85
  rm -rf .tox/
73
86
  rm -rf docs/_build
74
- rm -rf dist/
87
+ rm -rf dist/
@@ -0,0 +1,18 @@
1
+ #!/usr/bin/env bash
2
+ PLATFORM=${1}
3
+
4
+ if [[ ! $(grep -q 'grpcio' ./poetry.lock) ]]; then
5
+ echo 'grpcio not present, skipping explicit build'
6
+ else
7
+ echo 'found grpcio, checking platform'
8
+ fi
9
+
10
+ if [[ "${PLATFORM}" == "linux/arm64" ]]; then
11
+ echo "On arm, need to explicitly install grpcio"
12
+ poetry env use "$(which python)"
13
+ echo "${VIRTUAL_ENV}"
14
+ poetry run pip install --upgrade pip
15
+ GRPC_PYTHON_BUILD_SYSTEM_OPENSSL=1 GRPC_PYTHON_BUILD_SYSTEM_ZLIB=1 GRPC_PYTHON_DISABLE_LIBC_COMPATIBILITY=1 poetry run pip install 'grpcio==1.66.2'
16
+ else
17
+ echo "Not on arm, no need to explicitly install grpcio"
18
+ fi
@@ -0,0 +1,5 @@
1
+ if test -e /usr/local/share/ca-certificates/cert.crt; then
2
+ update-ca-certificates
3
+ fi
4
+
5
+ ocean sail
@@ -16,7 +16,7 @@ def _get_base_integration_class_from_module(
16
16
  for name, obj in getmembers(module):
17
17
  if (
18
18
  isclass(obj)
19
- and type(obj) == type
19
+ and type(obj) is type
20
20
  and issubclass(obj, BaseIntegration)
21
21
  and obj != BaseIntegration
22
22
  ):
@@ -51,4 +51,6 @@ def clean(path: str, force: bool, wait: bool) -> None:
51
51
  default_app,
52
52
  )
53
53
 
54
- clean_defaults(app.integration.AppConfigHandlerClass.CONFIG_CLASS, force, wait)
54
+ clean_defaults(
55
+ app.integration.AppConfigHandlerClass.CONFIG_CLASS, app.config, force, wait
56
+ )