data=udl.raw))
cnt += 1
if errors:
- raise core_ex.MultiError(errors)
+ raise core_ex.MultiDataLineError(errors)
raise core_ex.EncodingError(
udl.lineno,
("Data cannot be represented in the database's character"
try:
self.upload_data(processor, self.data, errors)
# Let upload handler finish
- self.uh.cleanup()
- except core_ex.MultiError as ex:
- errors.extend(ex.errors)
- except core_ex.UploadError as ex:
- errors.append(ex)
+ try:
+ self.uh.cleanup()
+ except core_ex.MultiError as ex:
+ errors.extend(ex.errors)
+ except core_ex.UploadError as ex:
+ errors.append(ex)
finally:
self.cur.close()
return errors
errors.append(core_ex.DBDataLineError(udl, ex))
except (core_ex.DataLineError, core_ex.DBError) as ex:
errors.append(ex)
+ except core_ex.MultiDataLineError as ex:
+ errors.extend(ex.errors)
class UnsafeUploadEngine(DBConnector):
self.cur.execute(
'ROLLBACK TO line_savepoint;')
errors.append(ex)
+ except core_ex.MultiDataLineError as ex:
+ self.cur.execute(
+ 'ROLLBACK TO line_savepoint;')
+ errors.extend(ex.errors)
else:
self.cur.execute(
'RELEASE line_savepoint;')
self.errors = errors
+class MultiDataLineError(MultiError):
+ '''Multiple errors that are all DataLineErrors
+ '''
+ def __init__(self, errors):
+ for error in errors:
+ if not isinstance(error, DataLineError):
+ raise TypeError(
+ f'unsupported exception type ({type(error)}) for a'
+ f' MultiDataLineError value: {error}')
+ super().__init__(errors)
+
+
class UploadError(PGWUIError):
'''
Module exceptions are derived from this class.