omnata-plugin-runtime 0.5.4a121__tar.gz → 0.5.4a123__tar.gz

Sign up to get free protection for your applications and to get access to all the features.
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: omnata-plugin-runtime
3
- Version: 0.5.4a121
3
+ Version: 0.5.4a123
4
4
  Summary: Classes and common runtime components for building and running Omnata Plugins
5
5
  Author: James Weakley
6
6
  Author-email: james.weakley@omnata.com
@@ -1,6 +1,6 @@
1
1
  [tool.poetry]
2
2
  name = "omnata-plugin-runtime"
3
- version = "0.5.4-a121"
3
+ version = "0.5.4-a123"
4
4
  description = "Classes and common runtime components for building and running Omnata Plugins"
5
5
  authors = ["James Weakley <james.weakley@omnata.com>"]
6
6
  readme = "README.md"
@@ -8,7 +8,7 @@ from typing import Any, List, Dict, Literal, Union, Optional
8
8
  from enum import Enum
9
9
 
10
10
  from abc import ABC
11
- from pydantic import BaseModel, Field, PrivateAttr, SerializationInfo, model_serializer, validator # pylint: disable=no-name-in-module
11
+ from pydantic import BaseModel, Field, PrivateAttr, SerializationInfo, field_validator, model_serializer, validator # pylint: disable=no-name-in-module
12
12
 
13
13
  if tuple(sys.version_info[:2]) >= (3, 9):
14
14
  # Python 3.9 and above
@@ -449,6 +449,13 @@ class StoredStreamConfiguration(SubscriptableBaseModel):
449
449
  stream: StreamConfiguration
450
450
  latest_state: dict = Field(default_factory=dict,description="The latest state of the stream, used for incremental syncs")
451
451
 
452
+ @field_validator('latest_state',mode='before')
453
+ @classmethod
454
+ def state_must_not_be_none(cls, v: Optional[dict]) -> dict:
455
+ if v is None:
456
+ return {}
457
+ return v
458
+
452
459
 
453
460
  class StreamConfiguration(SubscriptableBaseModel):
454
461
  """
@@ -2042,9 +2042,13 @@ def __managed_inbound_processing_worker(
2042
2042
  # restore the first argument, was originally the dataframe/generator but now it's the appropriately sized dataframe
2043
2043
  try:
2044
2044
  logger.info(f"worker {worker_index} processing stream {stream.stream_name}, invoking plugin class method {method.__name__}")
2045
- method(plugin_class_obj, *(stream, *method_args), **method_kwargs)
2046
- logger.info(f"worker {worker_index} completed processing stream {stream.stream_name}, marking as complete")
2047
- plugin_class_obj._sync_request.mark_stream_complete(stream.stream_name)
2045
+ result = method(plugin_class_obj, *(stream, *method_args), **method_kwargs)
2046
+ logger.info(f"worker {worker_index} completed processing stream {stream.stream_name}")
2047
+ if result is not None and result is False:
2048
+ logger.info(f"worker {worker_index} requested that {stream.stream_name} be not marked as complete")
2049
+ else:
2050
+ logger.info(f"worker {worker_index} marking stream {stream.stream_name} as complete")
2051
+ plugin_class_obj._sync_request.mark_stream_complete(stream.stream_name)
2048
2052
  except InterruptedWhileWaitingException:
2049
2053
  # If an inbound run is cancelled while waiting for rate limiting, this should mean that
2050
2054
  # the cancellation is handled elsewhere, so we don't need to do anything special here other than stop waiting