6
6
from datapackage import Package
7
7
from tableschema .exceptions import CastError
8
8
9
+ from . import exceptions
9
10
from .datastream import DataStream
10
11
from .resource_wrapper import ResourceWrapper
11
12
from .schema_validator import schema_validator
@@ -26,11 +27,13 @@ def __init__(self):
26
27
self .stats = {}
27
28
self .source = None
28
29
self .datapackage = None
30
+ self .position = None
29
31
30
- def __call__ (self , source = None ):
32
+ def __call__ (self , source = None , position = None ):
31
33
if source is None :
32
34
source = DataStream ()
33
35
self .source = source
36
+ self .position = position
34
37
return self
35
38
36
39
def process_resource (self , resource : ResourceWrapper ):
@@ -69,7 +72,18 @@ def func():
69
72
return func
70
73
71
74
def _process (self ):
72
- datastream = self .source ._process ()
75
+ try :
76
+ datastream = self .source ._process ()
77
+ except Exception as exception :
78
+ if not isinstance (exception , exceptions .ProcessorError ):
79
+ error = exceptions .ProcessorError (
80
+ exception ,
81
+ processor_name = self .source .__class__ .__name__ ,
82
+ processor_object = self .source ,
83
+ processor_position = self .source .position
84
+ )
85
+ raise error from exception
86
+ raise exception
73
87
74
88
self .datapackage = Package (descriptor = copy .deepcopy (datastream .dp .descriptor ))
75
89
self .datapackage = self .process_datapackage (self .datapackage )
@@ -90,7 +104,18 @@ def process(self):
90
104
return ds .dp , ds .merge_stats ()
91
105
92
106
def results (self , on_error = None ):
93
- ds = self ._process ()
107
+ try :
108
+ ds = self ._process ()
109
+ except Exception as exception :
110
+ if not isinstance (exception , exceptions .ProcessorError ):
111
+ error = exceptions .ProcessorError (
112
+ exception ,
113
+ processor_name = self .__class__ .__name__ ,
114
+ processor_object = self ,
115
+ processor_position = self .position
116
+ )
117
+ raise error from exception
118
+ raise exception
94
119
results = [
95
120
list (schema_validator (res .res , res , on_error = on_error ))
96
121
for res in ds .res_iter
0 commit comments