wpipe 2.1.2__tar.gz → 2.1.4__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.
- {wpipe-2.1.2 → wpipe-2.1.4}/PKG-INFO +1 -1
- {wpipe-2.1.2 → wpipe-2.1.4}/pyproject.toml +1 -1
- {wpipe-2.1.2 → wpipe-2.1.4}/wpipe/pipe/pipe.py +31 -6
- {wpipe-2.1.2 → wpipe-2.1.4}/.gitignore +0 -0
- {wpipe-2.1.2 → wpipe-2.1.4}/LICENSE +0 -0
- {wpipe-2.1.2 → wpipe-2.1.4}/README.md +0 -0
- {wpipe-2.1.2 → wpipe-2.1.4}/examples/01_basic_pipeline/01_simple_function/README.md +0 -0
- {wpipe-2.1.2 → wpipe-2.1.4}/examples/01_basic_pipeline/01_simple_function/example.py +0 -0
- {wpipe-2.1.2 → wpipe-2.1.4}/examples/01_basic_pipeline/02_class_steps/README.md +0 -0
- {wpipe-2.1.2 → wpipe-2.1.4}/examples/01_basic_pipeline/02_class_steps/example.py +0 -0
- {wpipe-2.1.2 → wpipe-2.1.4}/examples/01_basic_pipeline/03_mixed_steps/README.md +0 -0
- {wpipe-2.1.2 → wpipe-2.1.4}/examples/01_basic_pipeline/03_mixed_steps/example.py +0 -0
- {wpipe-2.1.2 → wpipe-2.1.4}/examples/01_basic_pipeline/04_default_values/README.md +0 -0
- {wpipe-2.1.2 → wpipe-2.1.4}/examples/01_basic_pipeline/04_default_values/example.py +0 -0
- {wpipe-2.1.2 → wpipe-2.1.4}/examples/01_basic_pipeline/05_args_kwargs/README.md +0 -0
- {wpipe-2.1.2 → wpipe-2.1.4}/examples/01_basic_pipeline/05_args_kwargs/example.py +0 -0
- {wpipe-2.1.2 → wpipe-2.1.4}/examples/01_basic_pipeline/06_dict_processing/README.md +0 -0
- {wpipe-2.1.2 → wpipe-2.1.4}/examples/01_basic_pipeline/06_dict_processing/example.py +0 -0
- {wpipe-2.1.2 → wpipe-2.1.4}/examples/01_basic_pipeline/07_multiple_runs/README.md +0 -0
- {wpipe-2.1.2 → wpipe-2.1.4}/examples/01_basic_pipeline/07_multiple_runs/example.py +0 -0
- {wpipe-2.1.2 → wpipe-2.1.4}/examples/01_basic_pipeline/08_data_aggregation/README.md +0 -0
- {wpipe-2.1.2 → wpipe-2.1.4}/examples/01_basic_pipeline/08_data_aggregation/example.py +0 -0
- {wpipe-2.1.2 → wpipe-2.1.4}/examples/01_basic_pipeline/09_empty_data/README.md +0 -0
- {wpipe-2.1.2 → wpipe-2.1.4}/examples/01_basic_pipeline/09_empty_data/example.py +0 -0
- {wpipe-2.1.2 → wpipe-2.1.4}/examples/01_basic_pipeline/10_lambda_steps/README.md +0 -0
- {wpipe-2.1.2 → wpipe-2.1.4}/examples/01_basic_pipeline/10_lambda_steps/example.py +0 -0
- {wpipe-2.1.2 → wpipe-2.1.4}/examples/01_basic_pipeline/11_decorator_steps/README.md +0 -0
- {wpipe-2.1.2 → wpipe-2.1.4}/examples/01_basic_pipeline/11_decorator_steps/example.py +0 -0
- {wpipe-2.1.2 → wpipe-2.1.4}/examples/01_basic_pipeline/12_context_manager/README.md +0 -0
- {wpipe-2.1.2 → wpipe-2.1.4}/examples/01_basic_pipeline/12_context_manager/example.py +0 -0
- {wpipe-2.1.2 → wpipe-2.1.4}/examples/01_basic_pipeline/13_async_pipeline/README.md +0 -0
- {wpipe-2.1.2 → wpipe-2.1.4}/examples/01_basic_pipeline/13_async_pipeline/example.py +0 -0
- {wpipe-2.1.2 → wpipe-2.1.4}/examples/01_basic_pipeline/14_pipeline_chaining/README.md +0 -0
- {wpipe-2.1.2 → wpipe-2.1.4}/examples/01_basic_pipeline/14_pipeline_chaining/example.py +0 -0
- {wpipe-2.1.2 → wpipe-2.1.4}/examples/01_basic_pipeline/15_pipeline_clone/README.md +0 -0
- {wpipe-2.1.2 → wpipe-2.1.4}/examples/01_basic_pipeline/15_pipeline_clone/example.py +0 -0
- {wpipe-2.1.2 → wpipe-2.1.4}/examples/01_basic_pipeline/16_LogGestor/example.py +0 -0
- {wpipe-2.1.2 → wpipe-2.1.4}/examples/01_basic_pipeline/README.md +0 -0
- {wpipe-2.1.2 → wpipe-2.1.4}/examples/15_export/01_json/export_json.py +0 -0
- {wpipe-2.1.2 → wpipe-2.1.4}/examples/15_export/README.md +0 -0
- {wpipe-2.1.2 → wpipe-2.1.4}/test/__init__.py +0 -0
- {wpipe-2.1.2 → wpipe-2.1.4}/test/test_api_pipeline.py +0 -0
- {wpipe-2.1.2 → wpipe-2.1.4}/test/test_async.py +0 -0
- {wpipe-2.1.2 → wpipe-2.1.4}/test/test_basic_pipeline.py +0 -0
- {wpipe-2.1.2 → wpipe-2.1.4}/test/test_checkpoint.py +0 -0
- {wpipe-2.1.2 → wpipe-2.1.4}/test/test_core.py +0 -0
- {wpipe-2.1.2 → wpipe-2.1.4}/test/test_dashboard_and_monitor.py +0 -0
- {wpipe-2.1.2 → wpipe-2.1.4}/test/test_export.py +0 -0
- {wpipe-2.1.2 → wpipe-2.1.4}/test/test_misc.py +0 -0
- {wpipe-2.1.2 → wpipe-2.1.4}/test/test_nested_pipelines.py +0 -0
- {wpipe-2.1.2 → wpipe-2.1.4}/test/test_pipe.py +0 -0
- {wpipe-2.1.2 → wpipe-2.1.4}/test/test_pipe_async.py +0 -0
- {wpipe-2.1.2 → wpipe-2.1.4}/test/test_pipeline_config.py +0 -0
- {wpipe-2.1.2 → wpipe-2.1.4}/test/test_sqlite.py +0 -0
- {wpipe-2.1.2 → wpipe-2.1.4}/test/test_tracking.py +0 -0
- {wpipe-2.1.2 → wpipe-2.1.4}/test/test_util.py +0 -0
- {wpipe-2.1.2 → wpipe-2.1.4}/test/test_yaml_config.py +0 -0
- {wpipe-2.1.2 → wpipe-2.1.4}/wpipe/README.md +0 -0
- {wpipe-2.1.2 → wpipe-2.1.4}/wpipe/__init__.py +0 -0
- {wpipe-2.1.2 → wpipe-2.1.4}/wpipe/api_client/__init__.py +0 -0
- {wpipe-2.1.2 → wpipe-2.1.4}/wpipe/api_client/api_client.py +0 -0
- {wpipe-2.1.2 → wpipe-2.1.4}/wpipe/checkpoint/README.md +0 -0
- {wpipe-2.1.2 → wpipe-2.1.4}/wpipe/checkpoint/__init__.py +0 -0
- {wpipe-2.1.2 → wpipe-2.1.4}/wpipe/checkpoint/checkpoint.py +0 -0
- {wpipe-2.1.2 → wpipe-2.1.4}/wpipe/composition/README.md +0 -0
- {wpipe-2.1.2 → wpipe-2.1.4}/wpipe/composition/__init__.py +0 -0
- {wpipe-2.1.2 → wpipe-2.1.4}/wpipe/composition/pipeline_step.py +0 -0
- {wpipe-2.1.2 → wpipe-2.1.4}/wpipe/dashboard/__init__.py +0 -0
- {wpipe-2.1.2 → wpipe-2.1.4}/wpipe/dashboard/__main__.py +0 -0
- {wpipe-2.1.2 → wpipe-2.1.4}/wpipe/dashboard/main.py +0 -0
- {wpipe-2.1.2 → wpipe-2.1.4}/wpipe/dashboard/static/dashboard.js +0 -0
- {wpipe-2.1.2 → wpipe-2.1.4}/wpipe/dashboard/static/styles.css +0 -0
- {wpipe-2.1.2 → wpipe-2.1.4}/wpipe/dashboard/templates/base.html +0 -0
- {wpipe-2.1.2 → wpipe-2.1.4}/wpipe/dashboard/templates/tabs/alerts.html +0 -0
- {wpipe-2.1.2 → wpipe-2.1.4}/wpipe/dashboard/templates/tabs/analytics.html +0 -0
- {wpipe-2.1.2 → wpipe-2.1.4}/wpipe/dashboard/templates/tabs/data.html +0 -0
- {wpipe-2.1.2 → wpipe-2.1.4}/wpipe/dashboard/templates/tabs/events.html +0 -0
- {wpipe-2.1.2 → wpipe-2.1.4}/wpipe/dashboard/templates/tabs/graph.html +0 -0
- {wpipe-2.1.2 → wpipe-2.1.4}/wpipe/dashboard/templates/tabs/pipelines.html +0 -0
- {wpipe-2.1.2 → wpipe-2.1.4}/wpipe/dashboard/templates/tabs/states.html +0 -0
- {wpipe-2.1.2 → wpipe-2.1.4}/wpipe/dashboard/templates/tabs/timeline.html +0 -0
- {wpipe-2.1.2 → wpipe-2.1.4}/wpipe/decorators/README.md +0 -0
- {wpipe-2.1.2 → wpipe-2.1.4}/wpipe/decorators/__init__.py +0 -0
- {wpipe-2.1.2 → wpipe-2.1.4}/wpipe/decorators/step.py +0 -0
- {wpipe-2.1.2 → wpipe-2.1.4}/wpipe/exception/__init__.py +0 -0
- {wpipe-2.1.2 → wpipe-2.1.4}/wpipe/exception/api_error.py +0 -0
- {wpipe-2.1.2 → wpipe-2.1.4}/wpipe/export/README.md +0 -0
- {wpipe-2.1.2 → wpipe-2.1.4}/wpipe/export/__init__.py +0 -0
- {wpipe-2.1.2 → wpipe-2.1.4}/wpipe/export/exporter.py +0 -0
- {wpipe-2.1.2 → wpipe-2.1.4}/wpipe/log/__init__.py +0 -0
- {wpipe-2.1.2 → wpipe-2.1.4}/wpipe/log/log.py +0 -0
- {wpipe-2.1.2 → wpipe-2.1.4}/wpipe/parallel/README.md +0 -0
- {wpipe-2.1.2 → wpipe-2.1.4}/wpipe/parallel/__init__.py +0 -0
- {wpipe-2.1.2 → wpipe-2.1.4}/wpipe/parallel/executor.py +0 -0
- {wpipe-2.1.2 → wpipe-2.1.4}/wpipe/pipe/__init__.py +0 -0
- {wpipe-2.1.2 → wpipe-2.1.4}/wpipe/pipe/components/__init__.py +0 -0
- {wpipe-2.1.2 → wpipe-2.1.4}/wpipe/pipe/components/constants.py +0 -0
- {wpipe-2.1.2 → wpipe-2.1.4}/wpipe/pipe/components/logic_blocks.py +0 -0
- {wpipe-2.1.2 → wpipe-2.1.4}/wpipe/pipe/components/logic_blocks_async.py +0 -0
- {wpipe-2.1.2 → wpipe-2.1.4}/wpipe/pipe/components/metrics.py +0 -0
- {wpipe-2.1.2 → wpipe-2.1.4}/wpipe/pipe/components/progress.py +0 -0
- {wpipe-2.1.2 → wpipe-2.1.4}/wpipe/pipe/components/reporting.py +0 -0
- {wpipe-2.1.2 → wpipe-2.1.4}/wpipe/pipe/pipe_async.py +0 -0
- {wpipe-2.1.2 → wpipe-2.1.4}/wpipe/pipe/pipe_async_minimal.py +0 -0
- {wpipe-2.1.2 → wpipe-2.1.4}/wpipe/ram/__init__.py +0 -0
- {wpipe-2.1.2 → wpipe-2.1.4}/wpipe/ram/ram.py +0 -0
- {wpipe-2.1.2 → wpipe-2.1.4}/wpipe/resource_monitor/README.md +0 -0
- {wpipe-2.1.2 → wpipe-2.1.4}/wpipe/resource_monitor/__init__.py +0 -0
- {wpipe-2.1.2 → wpipe-2.1.4}/wpipe/resource_monitor/monitor.py +0 -0
- {wpipe-2.1.2 → wpipe-2.1.4}/wpipe/sqlite/Sqlite.py +0 -0
- {wpipe-2.1.2 → wpipe-2.1.4}/wpipe/sqlite/__init__.py +0 -0
- {wpipe-2.1.2 → wpipe-2.1.4}/wpipe/sqlite/tables_dto/__init__.py +0 -0
- {wpipe-2.1.2 → wpipe-2.1.4}/wpipe/sqlite/tables_dto/log_gestor_model.py +0 -0
- {wpipe-2.1.2 → wpipe-2.1.4}/wpipe/sqlite/tables_dto/records.py +0 -0
- {wpipe-2.1.2 → wpipe-2.1.4}/wpipe/sqlite/tables_dto/tracker_models.py +0 -0
- {wpipe-2.1.2 → wpipe-2.1.4}/wpipe/timeout/README.md +0 -0
- {wpipe-2.1.2 → wpipe-2.1.4}/wpipe/timeout/__init__.py +0 -0
- {wpipe-2.1.2 → wpipe-2.1.4}/wpipe/timeout/timeout.py +0 -0
- {wpipe-2.1.2 → wpipe-2.1.4}/wpipe/tracking/__init__.py +0 -0
- {wpipe-2.1.2 → wpipe-2.1.4}/wpipe/tracking/alerts.py +0 -0
- {wpipe-2.1.2 → wpipe-2.1.4}/wpipe/tracking/analysis.py +0 -0
- {wpipe-2.1.2 → wpipe-2.1.4}/wpipe/tracking/queries.py +0 -0
- {wpipe-2.1.2 → wpipe-2.1.4}/wpipe/tracking/tracker.py +0 -0
- {wpipe-2.1.2 → wpipe-2.1.4}/wpipe/type_hinting/README.md +0 -0
- {wpipe-2.1.2 → wpipe-2.1.4}/wpipe/type_hinting/__init__.py +0 -0
- {wpipe-2.1.2 → wpipe-2.1.4}/wpipe/type_hinting/validators.py +0 -0
- {wpipe-2.1.2 → wpipe-2.1.4}/wpipe/util/__init__.py +0 -0
- {wpipe-2.1.2 → wpipe-2.1.4}/wpipe/util/transform.py +0 -0
- {wpipe-2.1.2 → wpipe-2.1.4}/wpipe/util/utils.py +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: wpipe
|
|
3
|
-
Version: 2.1.
|
|
3
|
+
Version: 2.1.4
|
|
4
4
|
Summary: Pipeline library with API integration for task orchestration and execution tracking
|
|
5
5
|
Project-URL: Homepage, https://github.com/wisrovi/wpipe
|
|
6
6
|
Project-URL: Documentation, https://wpipe.readthedocs.io/en/latest/
|
|
@@ -698,15 +698,23 @@ class Pipeline(APIClient):
|
|
|
698
698
|
raise
|
|
699
699
|
except Exception as e: # pylint: disable=broad-exception-caught
|
|
700
700
|
last_exception = e
|
|
701
|
-
|
|
702
|
-
|
|
701
|
+
tb_list = traceback.extract_tb(e.__traceback__)
|
|
702
|
+
|
|
703
|
+
# Find the most relevant frame (user code instead of library code)
|
|
704
|
+
# We look for the last frame that doesn't contain 'site-packages' or 'wpipe'
|
|
705
|
+
relevant_frame = tb_list[-1]
|
|
706
|
+
for frame in reversed(tb_list):
|
|
707
|
+
if "site-packages" not in frame.filename and "wpipe/pipe" not in frame.filename:
|
|
708
|
+
relevant_frame = frame
|
|
709
|
+
break
|
|
710
|
+
|
|
703
711
|
error_details = {
|
|
704
712
|
"step_name": name,
|
|
705
713
|
"error_message": str(e),
|
|
706
714
|
"error_traceback": traceback.format_exc(),
|
|
707
|
-
"file_path":
|
|
708
|
-
"line_number":
|
|
709
|
-
"method":
|
|
715
|
+
"file_path": relevant_frame.filename,
|
|
716
|
+
"line_number": relevant_frame.lineno,
|
|
717
|
+
"method": relevant_frame.name,
|
|
710
718
|
"timestamp": datetime.now().isoformat(),
|
|
711
719
|
"attempt": attempt + 1,
|
|
712
720
|
}
|
|
@@ -794,6 +802,18 @@ class Pipeline(APIClient):
|
|
|
794
802
|
try:
|
|
795
803
|
current_group = f"group_{tracked_id or 'none'}"
|
|
796
804
|
clean_self = self
|
|
805
|
+
|
|
806
|
+
# Check if data is picklable if using processes
|
|
807
|
+
if is_multiprocess:
|
|
808
|
+
import pickle
|
|
809
|
+
try:
|
|
810
|
+
pickle.dumps(loop_data)
|
|
811
|
+
except (pickle.PicklingError, TypeError, AttributeError) as e:
|
|
812
|
+
if self.verbose:
|
|
813
|
+
print(f"[WARNING] Data not picklable: {e}. Falling back to THREADS.")
|
|
814
|
+
is_multiprocess = False
|
|
815
|
+
ExecutorClass = ThreadPoolExecutor
|
|
816
|
+
|
|
797
817
|
if is_multiprocess:
|
|
798
818
|
import copy as cp # pylint: disable=import-outside-toplevel
|
|
799
819
|
clean_self = cp.copy(self)
|
|
@@ -860,7 +880,12 @@ class Pipeline(APIClient):
|
|
|
860
880
|
step_id = item[3]
|
|
861
881
|
elif callable(item):
|
|
862
882
|
func = item
|
|
863
|
-
name
|
|
883
|
+
# Look for step name in priorities: NAME attribute > __name__ > class name
|
|
884
|
+
name = getattr(item, "NAME", getattr(item, "__name__", item.__class__.__name__))
|
|
885
|
+
if name == "task" or name == "function":
|
|
886
|
+
# Fallback to a more descriptive name if possible
|
|
887
|
+
name = item.__class__.__name__
|
|
888
|
+
|
|
864
889
|
version = getattr(item, "VERSION", "v1.0")
|
|
865
890
|
step_meta = getattr(item, "_wpipe_metadata", {})
|
|
866
891
|
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|