port-ocean 0.5.6__tar.gz → 0.5.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 (128) hide show
  1. {port_ocean-0.5.6 → port_ocean-0.5.7}/PKG-INFO +13 -7
  2. {port_ocean-0.5.6 → port_ocean-0.5.7}/README.md +12 -7
  3. {port_ocean-0.5.6 → port_ocean-0.5.7}/port_ocean/core/handlers/entity_processor/jq_entity_processor.py +59 -9
  4. {port_ocean-0.5.6 → port_ocean-0.5.7}/port_ocean/core/handlers/port_app_config/models.py +1 -0
  5. {port_ocean-0.5.6 → port_ocean-0.5.7}/pyproject.toml +1 -1
  6. {port_ocean-0.5.6 → port_ocean-0.5.7}/LICENSE.md +0 -0
  7. {port_ocean-0.5.6 → port_ocean-0.5.7}/port_ocean/__init__.py +0 -0
  8. {port_ocean-0.5.6 → port_ocean-0.5.7}/port_ocean/bootstrap.py +0 -0
  9. {port_ocean-0.5.6 → port_ocean-0.5.7}/port_ocean/cli/__init__.py +0 -0
  10. {port_ocean-0.5.6 → port_ocean-0.5.7}/port_ocean/cli/cli.py +0 -0
  11. {port_ocean-0.5.6 → port_ocean-0.5.7}/port_ocean/cli/commands/__init__.py +0 -0
  12. {port_ocean-0.5.6 → port_ocean-0.5.7}/port_ocean/cli/commands/defaults/__init___.py +0 -0
  13. {port_ocean-0.5.6 → port_ocean-0.5.7}/port_ocean/cli/commands/defaults/clean.py +0 -0
  14. {port_ocean-0.5.6 → port_ocean-0.5.7}/port_ocean/cli/commands/defaults/dock.py +0 -0
  15. {port_ocean-0.5.6 → port_ocean-0.5.7}/port_ocean/cli/commands/defaults/group.py +0 -0
  16. {port_ocean-0.5.6 → port_ocean-0.5.7}/port_ocean/cli/commands/list_integrations.py +0 -0
  17. {port_ocean-0.5.6 → port_ocean-0.5.7}/port_ocean/cli/commands/main.py +0 -0
  18. {port_ocean-0.5.6 → port_ocean-0.5.7}/port_ocean/cli/commands/new.py +0 -0
  19. {port_ocean-0.5.6 → port_ocean-0.5.7}/port_ocean/cli/commands/pull.py +0 -0
  20. {port_ocean-0.5.6 → port_ocean-0.5.7}/port_ocean/cli/commands/sail.py +0 -0
  21. {port_ocean-0.5.6 → port_ocean-0.5.7}/port_ocean/cli/commands/version.py +0 -0
  22. {port_ocean-0.5.6 → port_ocean-0.5.7}/port_ocean/cli/cookiecutter/__init__.py +0 -0
  23. {port_ocean-0.5.6 → port_ocean-0.5.7}/port_ocean/cli/cookiecutter/cookiecutter.json +0 -0
  24. {port_ocean-0.5.6 → port_ocean-0.5.7}/port_ocean/cli/cookiecutter/extensions.py +0 -0
  25. {port_ocean-0.5.6 → port_ocean-0.5.7}/port_ocean/cli/cookiecutter/hooks/post_gen_project.py +0 -0
  26. {port_ocean-0.5.6 → port_ocean-0.5.7}/port_ocean/cli/cookiecutter/{{cookiecutter.integration_slug}}/.dockerignore +0 -0
  27. {port_ocean-0.5.6 → port_ocean-0.5.7}/port_ocean/cli/cookiecutter/{{cookiecutter.integration_slug}}/.gitignore +0 -0
  28. {port_ocean-0.5.6 → port_ocean-0.5.7}/port_ocean/cli/cookiecutter/{{cookiecutter.integration_slug}}/.port/resources/.gitignore +0 -0
  29. {port_ocean-0.5.6 → port_ocean-0.5.7}/port_ocean/cli/cookiecutter/{{cookiecutter.integration_slug}}/.port/spec.yaml +0 -0
  30. {port_ocean-0.5.6 → port_ocean-0.5.7}/port_ocean/cli/cookiecutter/{{cookiecutter.integration_slug}}/CHANGELOG.md +0 -0
  31. {port_ocean-0.5.6 → port_ocean-0.5.7}/port_ocean/cli/cookiecutter/{{cookiecutter.integration_slug}}/Dockerfile +0 -0
  32. {port_ocean-0.5.6 → port_ocean-0.5.7}/port_ocean/cli/cookiecutter/{{cookiecutter.integration_slug}}/Makefile +0 -0
  33. {port_ocean-0.5.6 → port_ocean-0.5.7}/port_ocean/cli/cookiecutter/{{cookiecutter.integration_slug}}/README.md +0 -0
  34. {port_ocean-0.5.6 → port_ocean-0.5.7}/port_ocean/cli/cookiecutter/{{cookiecutter.integration_slug}}/changelog/.gitignore +0 -0
  35. {port_ocean-0.5.6 → port_ocean-0.5.7}/port_ocean/cli/cookiecutter/{{cookiecutter.integration_slug}}/config.yaml +0 -0
  36. {port_ocean-0.5.6 → port_ocean-0.5.7}/port_ocean/cli/cookiecutter/{{cookiecutter.integration_slug}}/debug.py +0 -0
  37. {port_ocean-0.5.6 → port_ocean-0.5.7}/port_ocean/cli/cookiecutter/{{cookiecutter.integration_slug}}/main.py +0 -0
  38. {port_ocean-0.5.6 → port_ocean-0.5.7}/port_ocean/cli/cookiecutter/{{cookiecutter.integration_slug}}/poetry.toml +0 -0
  39. {port_ocean-0.5.6 → port_ocean-0.5.7}/port_ocean/cli/cookiecutter/{{cookiecutter.integration_slug}}/pyproject.toml +0 -0
  40. {port_ocean-0.5.6 → port_ocean-0.5.7}/port_ocean/cli/cookiecutter/{{cookiecutter.integration_slug}}/sonar-project.properties +0 -0
  41. {port_ocean-0.5.6 → port_ocean-0.5.7}/port_ocean/cli/cookiecutter/{{cookiecutter.integration_slug}}/tests/__init__.py +0 -0
  42. {port_ocean-0.5.6 → port_ocean-0.5.7}/port_ocean/cli/utils.py +0 -0
  43. {port_ocean-0.5.6 → port_ocean-0.5.7}/port_ocean/clients/__init__.py +0 -0
  44. {port_ocean-0.5.6 → port_ocean-0.5.7}/port_ocean/clients/port/__init__.py +0 -0
  45. {port_ocean-0.5.6 → port_ocean-0.5.7}/port_ocean/clients/port/authentication.py +0 -0
  46. {port_ocean-0.5.6 → port_ocean-0.5.7}/port_ocean/clients/port/client.py +0 -0
  47. {port_ocean-0.5.6 → port_ocean-0.5.7}/port_ocean/clients/port/mixins/__init__.py +0 -0
  48. {port_ocean-0.5.6 → port_ocean-0.5.7}/port_ocean/clients/port/mixins/blueprints.py +0 -0
  49. {port_ocean-0.5.6 → port_ocean-0.5.7}/port_ocean/clients/port/mixins/entities.py +0 -0
  50. {port_ocean-0.5.6 → port_ocean-0.5.7}/port_ocean/clients/port/mixins/integrations.py +0 -0
  51. {port_ocean-0.5.6 → port_ocean-0.5.7}/port_ocean/clients/port/mixins/migrations.py +0 -0
  52. {port_ocean-0.5.6 → port_ocean-0.5.7}/port_ocean/clients/port/retry_transport.py +0 -0
  53. {port_ocean-0.5.6 → port_ocean-0.5.7}/port_ocean/clients/port/types.py +0 -0
  54. {port_ocean-0.5.6 → port_ocean-0.5.7}/port_ocean/clients/port/utils.py +0 -0
  55. {port_ocean-0.5.6 → port_ocean-0.5.7}/port_ocean/config/__init__.py +0 -0
  56. {port_ocean-0.5.6 → port_ocean-0.5.7}/port_ocean/config/base.py +0 -0
  57. {port_ocean-0.5.6 → port_ocean-0.5.7}/port_ocean/config/dynamic.py +0 -0
  58. {port_ocean-0.5.6 → port_ocean-0.5.7}/port_ocean/config/settings.py +0 -0
  59. {port_ocean-0.5.6 → port_ocean-0.5.7}/port_ocean/consumers/__init__.py +0 -0
  60. {port_ocean-0.5.6 → port_ocean-0.5.7}/port_ocean/consumers/kafka_consumer.py +0 -0
  61. {port_ocean-0.5.6 → port_ocean-0.5.7}/port_ocean/context/__init__.py +0 -0
  62. {port_ocean-0.5.6 → port_ocean-0.5.7}/port_ocean/context/event.py +0 -0
  63. {port_ocean-0.5.6 → port_ocean-0.5.7}/port_ocean/context/ocean.py +0 -0
  64. {port_ocean-0.5.6 → port_ocean-0.5.7}/port_ocean/context/resource.py +0 -0
  65. {port_ocean-0.5.6 → port_ocean-0.5.7}/port_ocean/core/__init__.py +0 -0
  66. {port_ocean-0.5.6 → port_ocean-0.5.7}/port_ocean/core/defaults/__init__.py +0 -0
  67. {port_ocean-0.5.6 → port_ocean-0.5.7}/port_ocean/core/defaults/clean.py +0 -0
  68. {port_ocean-0.5.6 → port_ocean-0.5.7}/port_ocean/core/defaults/common.py +0 -0
  69. {port_ocean-0.5.6 → port_ocean-0.5.7}/port_ocean/core/defaults/initialize.py +0 -0
  70. {port_ocean-0.5.6 → port_ocean-0.5.7}/port_ocean/core/event_listener/__init__.py +0 -0
  71. {port_ocean-0.5.6 → port_ocean-0.5.7}/port_ocean/core/event_listener/base.py +0 -0
  72. {port_ocean-0.5.6 → port_ocean-0.5.7}/port_ocean/core/event_listener/factory.py +0 -0
  73. {port_ocean-0.5.6 → port_ocean-0.5.7}/port_ocean/core/event_listener/http.py +0 -0
  74. {port_ocean-0.5.6 → port_ocean-0.5.7}/port_ocean/core/event_listener/kafka.py +0 -0
  75. {port_ocean-0.5.6 → port_ocean-0.5.7}/port_ocean/core/event_listener/once.py +0 -0
  76. {port_ocean-0.5.6 → port_ocean-0.5.7}/port_ocean/core/event_listener/polling.py +0 -0
  77. {port_ocean-0.5.6 → port_ocean-0.5.7}/port_ocean/core/handlers/__init__.py +0 -0
  78. {port_ocean-0.5.6 → port_ocean-0.5.7}/port_ocean/core/handlers/base.py +0 -0
  79. {port_ocean-0.5.6 → port_ocean-0.5.7}/port_ocean/core/handlers/entities_state_applier/__init__.py +0 -0
  80. {port_ocean-0.5.6 → port_ocean-0.5.7}/port_ocean/core/handlers/entities_state_applier/base.py +0 -0
  81. {port_ocean-0.5.6 → port_ocean-0.5.7}/port_ocean/core/handlers/entities_state_applier/port/__init__.py +0 -0
  82. {port_ocean-0.5.6 → port_ocean-0.5.7}/port_ocean/core/handlers/entities_state_applier/port/applier.py +0 -0
  83. {port_ocean-0.5.6 → port_ocean-0.5.7}/port_ocean/core/handlers/entities_state_applier/port/get_related_entities.py +0 -0
  84. {port_ocean-0.5.6 → port_ocean-0.5.7}/port_ocean/core/handlers/entities_state_applier/port/order_by_entities_dependencies.py +0 -0
  85. {port_ocean-0.5.6 → port_ocean-0.5.7}/port_ocean/core/handlers/entities_state_applier/port/validate_entity_relations.py +0 -0
  86. {port_ocean-0.5.6 → port_ocean-0.5.7}/port_ocean/core/handlers/entity_processor/__init__.py +0 -0
  87. {port_ocean-0.5.6 → port_ocean-0.5.7}/port_ocean/core/handlers/entity_processor/base.py +0 -0
  88. {port_ocean-0.5.6 → port_ocean-0.5.7}/port_ocean/core/handlers/port_app_config/__init__.py +0 -0
  89. {port_ocean-0.5.6 → port_ocean-0.5.7}/port_ocean/core/handlers/port_app_config/api.py +0 -0
  90. {port_ocean-0.5.6 → port_ocean-0.5.7}/port_ocean/core/handlers/port_app_config/base.py +0 -0
  91. {port_ocean-0.5.6 → port_ocean-0.5.7}/port_ocean/core/integrations/__init__.py +0 -0
  92. {port_ocean-0.5.6 → port_ocean-0.5.7}/port_ocean/core/integrations/base.py +0 -0
  93. {port_ocean-0.5.6 → port_ocean-0.5.7}/port_ocean/core/integrations/mixins/__init__.py +0 -0
  94. {port_ocean-0.5.6 → port_ocean-0.5.7}/port_ocean/core/integrations/mixins/events.py +0 -0
  95. {port_ocean-0.5.6 → port_ocean-0.5.7}/port_ocean/core/integrations/mixins/handler.py +0 -0
  96. {port_ocean-0.5.6 → port_ocean-0.5.7}/port_ocean/core/integrations/mixins/sync.py +0 -0
  97. {port_ocean-0.5.6 → port_ocean-0.5.7}/port_ocean/core/integrations/mixins/sync_raw.py +0 -0
  98. {port_ocean-0.5.6 → port_ocean-0.5.7}/port_ocean/core/integrations/mixins/utils.py +0 -0
  99. {port_ocean-0.5.6 → port_ocean-0.5.7}/port_ocean/core/models.py +0 -0
  100. {port_ocean-0.5.6 → port_ocean-0.5.7}/port_ocean/core/ocean_types.py +0 -0
  101. {port_ocean-0.5.6 → port_ocean-0.5.7}/port_ocean/core/utils.py +0 -0
  102. {port_ocean-0.5.6 → port_ocean-0.5.7}/port_ocean/exceptions/__init__.py +0 -0
  103. {port_ocean-0.5.6 → port_ocean-0.5.7}/port_ocean/exceptions/api.py +0 -0
  104. {port_ocean-0.5.6 → port_ocean-0.5.7}/port_ocean/exceptions/base.py +0 -0
  105. {port_ocean-0.5.6 → port_ocean-0.5.7}/port_ocean/exceptions/clients.py +0 -0
  106. {port_ocean-0.5.6 → port_ocean-0.5.7}/port_ocean/exceptions/context.py +0 -0
  107. {port_ocean-0.5.6 → port_ocean-0.5.7}/port_ocean/exceptions/core.py +0 -0
  108. {port_ocean-0.5.6 → port_ocean-0.5.7}/port_ocean/exceptions/port_defaults.py +0 -0
  109. {port_ocean-0.5.6 → port_ocean-0.5.7}/port_ocean/exceptions/utils.py +0 -0
  110. {port_ocean-0.5.6 → port_ocean-0.5.7}/port_ocean/helpers/__init__.py +0 -0
  111. {port_ocean-0.5.6 → port_ocean-0.5.7}/port_ocean/helpers/async_client.py +0 -0
  112. {port_ocean-0.5.6 → port_ocean-0.5.7}/port_ocean/helpers/retry.py +0 -0
  113. {port_ocean-0.5.6 → port_ocean-0.5.7}/port_ocean/log/__init__.py +0 -0
  114. {port_ocean-0.5.6 → port_ocean-0.5.7}/port_ocean/log/handlers.py +0 -0
  115. {port_ocean-0.5.6 → port_ocean-0.5.7}/port_ocean/log/logger_setup.py +0 -0
  116. {port_ocean-0.5.6 → port_ocean-0.5.7}/port_ocean/log/sensetive.py +0 -0
  117. {port_ocean-0.5.6 → port_ocean-0.5.7}/port_ocean/middlewares.py +0 -0
  118. {port_ocean-0.5.6 → port_ocean-0.5.7}/port_ocean/ocean.py +0 -0
  119. {port_ocean-0.5.6 → port_ocean-0.5.7}/port_ocean/py.typed +0 -0
  120. {port_ocean-0.5.6 → port_ocean-0.5.7}/port_ocean/run.py +0 -0
  121. {port_ocean-0.5.6 → port_ocean-0.5.7}/port_ocean/sonar-project.properties +0 -0
  122. {port_ocean-0.5.6 → port_ocean-0.5.7}/port_ocean/utils/__init__.py +0 -0
  123. {port_ocean-0.5.6 → port_ocean-0.5.7}/port_ocean/utils/async_http.py +0 -0
  124. {port_ocean-0.5.6 → port_ocean-0.5.7}/port_ocean/utils/cache.py +0 -0
  125. {port_ocean-0.5.6 → port_ocean-0.5.7}/port_ocean/utils/misc.py +0 -0
  126. {port_ocean-0.5.6 → port_ocean-0.5.7}/port_ocean/utils/repeat.py +0 -0
  127. {port_ocean-0.5.6 → port_ocean-0.5.7}/port_ocean/utils/signal.py +0 -0
  128. {port_ocean-0.5.6 → port_ocean-0.5.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.5.6
3
+ Version: 0.5.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
@@ -42,8 +42,7 @@ Requires-Dist: werkzeug (>=2.3.4,<4.0.0)
42
42
  Project-URL: Repository, https://github.com/port-labs/Port-Ocean
43
43
  Description-Content-Type: text/markdown
44
44
 
45
- <img src="./assets/Thumbnail.jpg" alt="Ocean">
46
-
45
+ <img src="./assets/Thumbnail.png" alt="Ocean">
47
46
 
48
47
  # Ocean <img src="./assets/OceanSymbol.svg" alt="Ocean" width="100" height="100" align="right">
49
48
 
@@ -56,9 +55,8 @@ empowering engineers to effortlessly prioritize key features and streamline the
56
55
 
57
56
  - Python 3.11
58
57
 
59
-
60
-
61
58
  ## Installation
59
+
62
60
  In order to install the Ocean Framework, run the following command:
63
61
 
64
62
  ```bash
@@ -73,7 +71,7 @@ poetry add port-ocean[cli]
73
71
 
74
72
  ## Run Integration
75
73
 
76
- 1. source the integration venv
74
+ 1. source the integration venv
77
75
 
78
76
  ```bash
79
77
  . .venv/bin/activate
@@ -91,14 +89,15 @@ poetry add port-ocean[cli]
91
89
  ![image](./assets/ExportArchitecture.svg)
92
90
 
93
91
  ## Real-Time updates Architecture
92
+
94
93
  ![image](./assets/RealTimeUpdatesArchitecture.svg)
95
94
 
96
95
  ## Integration Lifecycle
97
96
 
98
97
  ![image](./assets/LifecycleOfIntegration.svg)
99
98
 
100
-
101
99
  ## Folder Structure
100
+
102
101
  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
102
 
104
103
  ```
@@ -122,9 +121,11 @@ port-ocean/
122
121
  - The `pyproject.toml` file inside each integration folder lists the required dependencies for that integration.
123
122
 
124
123
  ## Configuration
124
+
125
125
  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
126
 
127
127
  Example `config.yaml`:
128
+
128
129
  ```yaml
129
130
  # This is an example configuration file for the integration service.
130
131
  # Please copy this file to config.yaml file in the integration folder and edit it to your needs.
@@ -153,6 +154,7 @@ The reason Ocean is open source is that we aim for the Port integration library
153
154
  In order to learn how you can contribute to Ocean, read our [contributing guide](./CONTRIBUTING.md)
154
155
 
155
156
  ### Local Development (Framework)
157
+
156
158
  1. Clone the repository
157
159
 
158
160
  2. Install dependencies:
@@ -174,6 +176,7 @@ In order to learn how you can contribute to Ocean, read our [contributing guide]
174
176
  ```
175
177
 
176
178
  ### Local Development (Integration)
179
+
177
180
  1. Clone the repository
178
181
 
179
182
  2. For new integration run
@@ -209,7 +212,10 @@ In order to learn how you can contribute to Ocean, read our [contributing guide]
209
212
  ```
210
213
 
211
214
  ## License
215
+
212
216
  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
217
 
214
218
  ## Contact
219
+
215
220
  For any questions or inquiries, please reach out to our team at support@getport.io
221
+
@@ -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,9 +11,8 @@ 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
@@ -29,7 +27,7 @@ poetry add port-ocean[cli]
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
@@ -47,14 +45,15 @@ poetry add port-ocean[cli]
47
45
  ![image](./assets/ExportArchitecture.svg)
48
46
 
49
47
  ## Real-Time updates Architecture
48
+
50
49
  ![image](./assets/RealTimeUpdatesArchitecture.svg)
51
50
 
52
51
  ## Integration Lifecycle
53
52
 
54
53
  ![image](./assets/LifecycleOfIntegration.svg)
55
54
 
56
-
57
55
  ## Folder Structure
56
+
58
57
  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
58
 
60
59
  ```
@@ -78,9 +77,11 @@ port-ocean/
78
77
  - The `pyproject.toml` file inside each integration folder lists the required dependencies for that integration.
79
78
 
80
79
  ## Configuration
80
+
81
81
  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
82
 
83
83
  Example `config.yaml`:
84
+
84
85
  ```yaml
85
86
  # This is an example configuration file for the integration service.
86
87
  # Please copy this file to config.yaml file in the integration folder and edit it to your needs.
@@ -109,6 +110,7 @@ The reason Ocean is open source is that we aim for the Port integration library
109
110
  In order to learn how you can contribute to Ocean, read our [contributing guide](./CONTRIBUTING.md)
110
111
 
111
112
  ### Local Development (Framework)
113
+
112
114
  1. Clone the repository
113
115
 
114
116
  2. Install dependencies:
@@ -130,6 +132,7 @@ In order to learn how you can contribute to Ocean, read our [contributing guide]
130
132
  ```
131
133
 
132
134
  ### Local Development (Integration)
135
+
133
136
  1. Clone the repository
134
137
 
135
138
  2. For new integration run
@@ -165,7 +168,9 @@ In order to learn how you can contribute to Ocean, read our [contributing guide]
165
168
  ```
166
169
 
167
170
  ## License
171
+
168
172
  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
173
 
170
174
  ## Contact
171
- For any questions or inquiries, please reach out to our team at support@getport.io
175
+
176
+ For any questions or inquiries, please reach out to our team at support@getport.io
@@ -2,6 +2,7 @@ import asyncio
2
2
  import functools
3
3
  from functools import lru_cache
4
4
  from typing import Any
5
+ from loguru import logger
5
6
 
6
7
  import pyjq as jq # type: ignore
7
8
 
@@ -67,25 +68,74 @@ class JQEntityProcessor(BaseEntityProcessor):
67
68
 
68
69
  return result
69
70
 
71
+ async def _get_entity_if_passed_selector(
72
+ self,
73
+ data: dict[str, Any],
74
+ raw_entity_mappings: dict[str, Any],
75
+ selector_query: str,
76
+ ) -> dict[str, Any]:
77
+ should_run = await self._search_as_bool(data, selector_query)
78
+ if should_run:
79
+ return await self._search_as_object(data, raw_entity_mappings)
80
+ return {}
81
+
82
+ async def _calculate_entity(
83
+ self,
84
+ data: dict[str, Any],
85
+ raw_entity_mappings: dict[str, Any],
86
+ items_to_parse: str | None,
87
+ selector_query: str,
88
+ ) -> list[dict[str, Any]]:
89
+ if items_to_parse:
90
+ items = await self._search(data, items_to_parse)
91
+ if isinstance(items, list):
92
+ return await asyncio.gather(
93
+ *[
94
+ self._get_entity_if_passed_selector(
95
+ {"item": item, **data},
96
+ raw_entity_mappings,
97
+ selector_query,
98
+ )
99
+ for item in items
100
+ ]
101
+ )
102
+ logger.warning(
103
+ f"Failed to parse items for JQ expression {items_to_parse}, Expected list but got {type(items)}."
104
+ f" Skipping..."
105
+ )
106
+ else:
107
+ return [
108
+ await self._get_entity_if_passed_selector(
109
+ data, raw_entity_mappings, selector_query
110
+ )
111
+ ]
112
+ return [{}]
113
+
70
114
  async def _calculate_entities(
71
115
  self, mapping: ResourceConfig, raw_data: list[dict[str, Any]]
72
116
  ) -> list[Entity]:
73
- async def calculate_raw(data: dict[str, Any]) -> dict[str, Any]:
74
- should_run = await self._search_as_bool(data, mapping.selector.query)
75
- if should_run and mapping.port.entity:
76
- return await self._search_as_object(
77
- data, mapping.port.entity.mappings.dict(exclude_unset=True)
117
+ raw_entity_mappings: dict[str, Any] = mapping.port.entity.mappings.dict(
118
+ exclude_unset=True
119
+ )
120
+ entities_tasks = [
121
+ asyncio.create_task(
122
+ self._calculate_entity(
123
+ data,
124
+ raw_entity_mappings,
125
+ mapping.port.items_to_parse,
126
+ mapping.selector.query,
78
127
  )
79
- return {}
80
-
81
- entities_tasks = [asyncio.create_task(calculate_raw(data)) for data in raw_data]
128
+ )
129
+ for data in raw_data
130
+ ]
82
131
  entities = await asyncio.gather(*entities_tasks)
83
132
 
84
133
  return [
85
134
  Entity.parse_obj(entity_data)
135
+ for flatten in entities
86
136
  for entity_data in filter(
87
137
  lambda entity: entity.get("identifier") and entity.get("blueprint"),
88
- entities,
138
+ flatten,
89
139
  )
90
140
  ]
91
141
 
@@ -19,6 +19,7 @@ class PortResourceConfig(BaseModel):
19
19
  mappings: EntityMapping
20
20
 
21
21
  entity: MappingsConfig
22
+ items_to_parse: str | None = Field(alias="itemsToParse")
22
23
 
23
24
 
24
25
  class Selector(BaseModel):
@@ -1,6 +1,6 @@
1
1
  [tool.poetry]
2
2
  name = "port-ocean"
3
- version = "0.5.6"
3
+ version = "0.5.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