utils.py 3.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102
  1. # !/usr/bin/env python3
  2. # -*- coding: UTF-8 -*-
  3. ################################################################################
  4. #
  5. # Copyright (c) 2024 Baidu.com, Inc. All Rights Reserved
  6. #
  7. ################################################################################
  8. """
  9. Author: PaddlePaddle Authors
  10. """
  11. import os
  12. __all__ = [
  13. 'build_res_dict',
  14. 'CheckFailedError',
  15. 'ConvertFailedError',
  16. 'SplitFailedError',
  17. 'AnalyseFailedError',
  18. 'DatasetFileNotFoundError',
  19. ]
  20. def build_res_dict(check_pass, err_type=None, err_msg=None, **kwargs):
  21. """ build the dataset checking result to return """
  22. if check_pass:
  23. if err_type is not None:
  24. raise ValueError(
  25. f"`check_pass` is {check_pass}, but `err_type` is not None.")
  26. if err_msg is not None:
  27. raise ValueError(
  28. f"`check_pass` is {check_pass}, but `err_msg` is not None.")
  29. return dict(check_pass=check_pass, **kwargs)
  30. else:
  31. if err_type is None:
  32. raise ValueError(
  33. f"`check_pass` is {check_pass}, but `err_type` is None.")
  34. if err_msg is None:
  35. if _is_known_error_type(err_type):
  36. err_msg = ""
  37. else:
  38. raise ValueError(
  39. f"{err_type} is not a known error type, in which case `err_msg` must be specified to a value other \
  40. than None.")
  41. return dict(
  42. check_pass=check_pass, err_type=err_type, err_msg=err_msg, **kwargs)
  43. class FailedError(Exception):
  44. """ base error class """
  45. def __init__(self, err_info=None, solution=None, message=None):
  46. if message is None:
  47. message = self._construct_message(err_info, solution)
  48. super().__init__(message)
  49. def _construct_message(self, err_info, solution):
  50. if err_info is None:
  51. return ""
  52. else:
  53. msg = f"{self.mode} failed. We encountered the following error:\n {err_info}"
  54. if solution is not None:
  55. msg += f"\nPlease try to resolve the issue as follows:\n {solution}"
  56. return msg
  57. class CheckFailedError(FailedError):
  58. """ check dataset error """
  59. mode = "Check dataset"
  60. class ConvertFailedError(FailedError):
  61. """ convert dataset error """
  62. mode = "Convert dataset"
  63. class SplitFailedError(FailedError):
  64. """ split dataset error """
  65. mode = "Split dataset"
  66. class AnalyseFailedError(FailedError):
  67. """ analyse dataset error """
  68. mode = "Analyse dataset"
  69. class DatasetFileNotFoundError(CheckFailedError):
  70. """ dataset file not found error """
  71. def __init__(self,
  72. file_path=None,
  73. err_info=None,
  74. solution=None,
  75. message=None):
  76. if err_info is None:
  77. if file_path is not None:
  78. err_info = f"{file_path} does not exist."
  79. super().__init__(err_info, solution, message)
  80. def _is_known_error_type(err_type):
  81. """ is known error type """
  82. return isinstance(err_type, CheckFailedError)