deltafi 2.0rc1724965202427__tar.gz → 2.0rc1725634019389__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 deltafi might be problematic. Click here for more details.

Files changed (23) hide show
  1. {deltafi-2.0rc1724965202427 → deltafi-2.0rc1725634019389}/PKG-INFO +1 -1
  2. {deltafi-2.0rc1724965202427 → deltafi-2.0rc1725634019389}/deltafi/domain.py +2 -0
  3. {deltafi-2.0rc1724965202427 → deltafi-2.0rc1725634019389}/deltafi/plugin.py +35 -27
  4. {deltafi-2.0rc1724965202427 → deltafi-2.0rc1725634019389}/deltafi/result.py +14 -10
  5. {deltafi-2.0rc1724965202427 → deltafi-2.0rc1725634019389}/deltafi/test_kit/framework.py +9 -2
  6. {deltafi-2.0rc1724965202427 → deltafi-2.0rc1725634019389}/pyproject.toml +1 -1
  7. {deltafi-2.0rc1724965202427 → deltafi-2.0rc1725634019389}/README.md +0 -0
  8. {deltafi-2.0rc1724965202427 → deltafi-2.0rc1725634019389}/deltafi/__init__.py +0 -0
  9. {deltafi-2.0rc1724965202427 → deltafi-2.0rc1725634019389}/deltafi/action.py +0 -0
  10. {deltafi-2.0rc1724965202427 → deltafi-2.0rc1725634019389}/deltafi/actioneventqueue.py +0 -0
  11. {deltafi-2.0rc1724965202427 → deltafi-2.0rc1725634019389}/deltafi/actiontype.py +0 -0
  12. {deltafi-2.0rc1724965202427 → deltafi-2.0rc1725634019389}/deltafi/exception.py +0 -0
  13. {deltafi-2.0rc1724965202427 → deltafi-2.0rc1725634019389}/deltafi/genericmodel.py +0 -0
  14. {deltafi-2.0rc1724965202427 → deltafi-2.0rc1725634019389}/deltafi/input.py +0 -0
  15. {deltafi-2.0rc1724965202427 → deltafi-2.0rc1725634019389}/deltafi/logger.py +0 -0
  16. {deltafi-2.0rc1724965202427 → deltafi-2.0rc1725634019389}/deltafi/metric.py +0 -0
  17. {deltafi-2.0rc1724965202427 → deltafi-2.0rc1725634019389}/deltafi/storage.py +0 -0
  18. {deltafi-2.0rc1724965202427 → deltafi-2.0rc1725634019389}/deltafi/test_kit/__init__.py +0 -0
  19. {deltafi-2.0rc1724965202427 → deltafi-2.0rc1725634019389}/deltafi/test_kit/assertions.py +0 -0
  20. {deltafi-2.0rc1724965202427 → deltafi-2.0rc1725634019389}/deltafi/test_kit/compare_helpers.py +0 -0
  21. {deltafi-2.0rc1724965202427 → deltafi-2.0rc1725634019389}/deltafi/test_kit/constants.py +0 -0
  22. {deltafi-2.0rc1724965202427 → deltafi-2.0rc1725634019389}/deltafi/test_kit/egress.py +0 -0
  23. {deltafi-2.0rc1724965202427 → deltafi-2.0rc1725634019389}/deltafi/test_kit/transform.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: deltafi
3
- Version: 2.0rc1724965202427
3
+ Version: 2.0rc1725634019389
4
4
  Summary: SDK for DeltaFi plugins and actions
5
5
  License: Apache License, Version 2.0
6
6
  Keywords: deltafi
@@ -54,6 +54,7 @@ class Context(NamedTuple):
54
54
  joined_dids: List[str] = None
55
55
  memo: str = None
56
56
  logger: Logger = None
57
+ saved_content: List = []
57
58
 
58
59
  @classmethod
59
60
  def create(cls, context: dict, content_service: ContentService, logger: Logger):
@@ -121,6 +122,7 @@ class Context(NamedTuple):
121
122
  joined_dids=joined_dids,
122
123
  memo=memo,
123
124
  content_service=content_service,
125
+ saved_content=[],
124
126
  logger=logger)
125
127
 
126
128
 
@@ -16,29 +16,30 @@
16
16
  # limitations under the License.
17
17
  #
18
18
 
19
+ import importlib
20
+ import inspect
19
21
  import json
20
22
  import os
23
+ import pkgutil
21
24
  import sys
22
25
  import threading
23
26
  import time
24
27
  import traceback
25
28
  from datetime import datetime, timezone, timedelta
29
+ from importlib import metadata
26
30
  from os.path import isdir, isfile, join
27
31
  from pathlib import Path
28
32
  from typing import List
29
- import importlib
30
- import inspect
31
- import pkgutil
32
33
 
33
- from importlib import metadata
34
34
  import requests
35
+
36
+ from deltafi.action import Action, Join
35
37
  from deltafi.actioneventqueue import ActionEventQueue
36
38
  from deltafi.domain import Event, ActionExecution
37
39
  from deltafi.exception import ExpectedContentException, MissingMetadataException
38
40
  from deltafi.logger import get_logger
39
41
  from deltafi.result import ErrorResult
40
42
  from deltafi.storage import ContentService
41
- from deltafi.action import Action, Join
42
43
 
43
44
 
44
45
  def _coordinates():
@@ -185,15 +186,15 @@ class Plugin(object):
185
186
  actions = [self._action_json(action) for action in self.actions]
186
187
 
187
188
  return {
188
- 'pluginCoordinates': self.coordinates.__json__(),
189
- 'displayName': self.display_name,
190
- 'description': self.description,
191
- 'actionKitVersion': metadata.version('deltafi'),
192
- 'dependencies': [],
193
- 'actions': actions,
194
- 'variables': variables,
195
- 'flowPlans': flows
196
- }
189
+ 'pluginCoordinates': self.coordinates.__json__(),
190
+ 'displayName': self.display_name,
191
+ 'description': self.description,
192
+ 'actionKitVersion': metadata.version('deltafi'),
193
+ 'dependencies': [],
194
+ 'actions': actions,
195
+ 'variables': variables,
196
+ 'flowPlans': flows
197
+ }
197
198
 
198
199
  def _register(self):
199
200
  url = f"{self.core_url}/plugins"
@@ -256,6 +257,24 @@ class Plugin(object):
256
257
  finally:
257
258
  time.sleep(10)
258
259
 
260
+ @staticmethod
261
+ def to_response(event, start_time, stop_time, result):
262
+ response = {
263
+ 'did': event.context.did,
264
+ 'flowName': event.context.flow_name,
265
+ 'flowId': event.context.flow_id,
266
+ 'actionName': event.context.action_name,
267
+ 'actionId': event.context.action_id,
268
+ 'start': start_time,
269
+ 'stop': stop_time,
270
+ 'type': result.result_type,
271
+ 'metrics': [metric.json() for metric in result.metrics],
272
+ 'savedContent': [content.json() for content in event.context.saved_content]
273
+ }
274
+ if result.result_key is not None:
275
+ response[result.result_key] = result.response()
276
+ return response
277
+
259
278
  def _do_action(self, action):
260
279
  action_logger = get_logger(self.action_name(action))
261
280
 
@@ -287,19 +306,8 @@ class Plugin(object):
287
306
 
288
307
  action.action_execution = None
289
308
 
290
- response = {
291
- 'did': event.context.did,
292
- 'flowName': event.context.flow_name,
293
- 'flowId': event.context.flow_id,
294
- 'actionName': event.context.action_name,
295
- 'actionId': event.context.action_id,
296
- 'start': start_time,
297
- 'stop': time.time(),
298
- 'type': result.result_type,
299
- 'metrics': [metric.json() for metric in result.metrics]
300
- }
301
- if result.result_key is not None:
302
- response[result.result_key] = result.response()
309
+ response = Plugin.to_response(
310
+ event, start_time, time.time(), result)
303
311
 
304
312
  topic = 'dgs'
305
313
  if event.return_address:
@@ -118,15 +118,17 @@ class IngressResultItem:
118
118
  return self
119
119
 
120
120
  def save_string_content(self, string_data: str, name: str, media_type: str):
121
- segment = self.context.content_service.put_str(self.context.did, string_data)
122
- self.content.append(
123
- Content(name=name, segments=[segment], media_type=media_type, content_service=self.context.content_service))
121
+ segment = self.context.content_service.put_str(self._did, string_data)
122
+ c = Content(name=name, segments=[segment], media_type=media_type, content_service=self.context.content_service)
123
+ self.content.append(c)
124
+ self.context.saved_content.append(c)
124
125
  return self
125
126
 
126
127
  def save_byte_content(self, byte_data: bytes, name: str, media_type: str):
127
- segment = self.context.content_service.put_bytes(self.context.did, byte_data)
128
- self.content.append(
129
- Content(name=name, segments=[segment], media_type=media_type, content_service=self.context.content_service))
128
+ segment = self.context.content_service.put_bytes(self._did, byte_data)
129
+ c = Content(name=name, segments=[segment], media_type=media_type, content_service=self.context.content_service)
130
+ self.content.append(c)
131
+ self.context.saved_content.append(c)
130
132
  return self
131
133
 
132
134
  def set_metadata(self, metadata: dict):
@@ -195,14 +197,16 @@ class TransformResult(Result):
195
197
 
196
198
  def save_string_content(self, string_data: str, name: str, media_type: str):
197
199
  segment = self.context.content_service.put_str(self.context.did, string_data)
198
- self.content.append(
199
- Content(name=name, segments=[segment], media_type=media_type, content_service=self.context.content_service))
200
+ c = Content(name=name, segments=[segment], media_type=media_type, content_service=self.context.content_service)
201
+ self.content.append(c)
202
+ self.context.saved_content.append(c)
200
203
  return self
201
204
 
202
205
  def save_byte_content(self, byte_data: bytes, name: str, media_type: str):
203
206
  segment = self.context.content_service.put_bytes(self.context.did, byte_data)
204
- self.content.append(
205
- Content(name=name, segments=[segment], media_type=media_type, content_service=self.context.content_service))
207
+ c = Content(name=name, segments=[segment], media_type=media_type, content_service=self.context.content_service)
208
+ self.content.append(c)
209
+ self.context.saved_content.append(c)
206
210
  return self
207
211
 
208
212
  def set_metadata(self, metadata: dict):
@@ -26,7 +26,6 @@ from deltafi.logger import get_logger
26
26
  from deltafi.metric import Metric
27
27
  from deltafi.result import ErrorResult, FilterResult
28
28
  from deltafi.storage import Segment
29
-
30
29
  from .assertions import *
31
30
  from .compare_helpers import GenericCompareHelper, CompareHelper
32
31
  from .constants import *
@@ -210,6 +209,7 @@ class ActionTest(ABC):
210
209
  self.loaded_inputs = []
211
210
  self.package_name = package_name
212
211
  self.res_path = ""
212
+ self.context = None
213
213
 
214
214
  def __reset__(self, did: str):
215
215
  self.content_service = InternalContentService()
@@ -219,6 +219,7 @@ class ActionTest(ABC):
219
219
  self.did = did
220
220
  self.loaded_inputs = []
221
221
  self.res_path = ""
222
+ self.context = None
222
223
 
223
224
  def load_file(self, ioc: IOContent):
224
225
  file_res = self.res_path.joinpath(ioc.file_name)
@@ -266,7 +267,7 @@ class ActionTest(ABC):
266
267
  def make_context(self, test_case: TestCaseBase):
267
268
  action_name = INGRESS_FLOW + "." + test_case.action.__class__.__name__
268
269
  join = {} if test_case.join_meta else None
269
- return Context(
270
+ self.context = Context(
270
271
  did=self.did,
271
272
  delta_file_name=test_case.file_name,
272
273
  data_source="DATASRC",
@@ -278,8 +279,10 @@ class ActionTest(ABC):
278
279
  hostname=HOSTNAME,
279
280
  system_name=SYSTEM,
280
281
  content_service=self.content_service,
282
+ saved_content=[],
281
283
  join=join,
282
284
  logger=get_logger())
285
+ return self.context
283
286
 
284
287
  def make_event(self, test_case: TestCaseBase):
285
288
  return Event(delta_file_messages=self.make_df_msgs(test_case), context=self.make_context(test_case),
@@ -354,3 +357,7 @@ class ActionTest(ABC):
354
357
  assert_equal_len(expected_metrics, results)
355
358
  for index, expected in enumerate(expected_metrics):
356
359
  self.compare_one_metric(expected, results[index])
360
+
361
+ def has_saved_content__size(self, count: int):
362
+ assert_equal_with_label(
363
+ count, len(self.context.saved_content), "savedContent")
@@ -1,6 +1,6 @@
1
1
  [tool.poetry]
2
2
  name = "deltafi"
3
- version = "2.0rc1724965202427"
3
+ version = "2.0rc1725634019389"
4
4
  description = "SDK for DeltaFi plugins and actions"
5
5
  authors = ["DeltaFi <deltafi@systolic.com>"]
6
6
  license = "Apache License, Version 2.0"