您最多选择25个主题 主题必须以字母或数字开头,可以包含连字符 (-),并且长度不得超过35个字符
 
 
 
 

198 行
6.5 KiB

  1. from __future__ import annotations
  2. from _ruamel_yaml import CParser, CEmitter # type: ignore
  3. from ruamel.yaml.constructor import Constructor, BaseConstructor, SafeConstructor
  4. from ruamel.yaml.representer import Representer, SafeRepresenter, BaseRepresenter
  5. from ruamel.yaml.resolver import Resolver, BaseResolver
  6. if False: # MYPY
  7. from typing import Any, Union, Optional # NOQA
  8. from ruamel.yaml.compat import StreamTextType, StreamType, VersionType # NOQA
  9. __all__ = ['CBaseLoader', 'CSafeLoader', 'CLoader', 'CBaseDumper', 'CSafeDumper', 'CDumper']
  10. # this includes some hacks to solve the usage of resolver by lower level
  11. # parts of the parser
  12. class CBaseLoader(CParser, BaseConstructor, BaseResolver): # type: ignore
  13. def __init__(
  14. self,
  15. stream: StreamTextType,
  16. version: Optional[VersionType] = None,
  17. preserve_quotes: Optional[bool] = None,
  18. ) -> None:
  19. CParser.__init__(self, stream)
  20. self._parser = self._composer = self
  21. BaseConstructor.__init__(self, loader=self)
  22. BaseResolver.__init__(self, loadumper=self)
  23. # self.descend_resolver = self._resolver.descend_resolver
  24. # self.ascend_resolver = self._resolver.ascend_resolver
  25. # self.resolve = self._resolver.resolve
  26. class CSafeLoader(CParser, SafeConstructor, Resolver): # type: ignore
  27. def __init__(
  28. self,
  29. stream: StreamTextType,
  30. version: Optional[VersionType] = None,
  31. preserve_quotes: Optional[bool] = None,
  32. ) -> None:
  33. CParser.__init__(self, stream)
  34. self._parser = self._composer = self
  35. SafeConstructor.__init__(self, loader=self)
  36. Resolver.__init__(self, loadumper=self)
  37. # self.descend_resolver = self._resolver.descend_resolver
  38. # self.ascend_resolver = self._resolver.ascend_resolver
  39. # self.resolve = self._resolver.resolve
  40. class CLoader(CParser, Constructor, Resolver): # type: ignore
  41. def __init__(
  42. self,
  43. stream: StreamTextType,
  44. version: Optional[VersionType] = None,
  45. preserve_quotes: Optional[bool] = None,
  46. ) -> None:
  47. CParser.__init__(self, stream)
  48. self._parser = self._composer = self
  49. Constructor.__init__(self, loader=self)
  50. Resolver.__init__(self, loadumper=self)
  51. # self.descend_resolver = self._resolver.descend_resolver
  52. # self.ascend_resolver = self._resolver.ascend_resolver
  53. # self.resolve = self._resolver.resolve
  54. class CBaseDumper(CEmitter, BaseRepresenter, BaseResolver): # type: ignore
  55. def __init__(
  56. self: StreamType,
  57. stream: Any,
  58. default_style: Any = None,
  59. default_flow_style: Any = None,
  60. canonical: Optional[bool] = None,
  61. indent: Optional[int] = None,
  62. width: Optional[int] = None,
  63. allow_unicode: Optional[bool] = None,
  64. line_break: Any = None,
  65. encoding: Any = None,
  66. explicit_start: Optional[bool] = None,
  67. explicit_end: Optional[bool] = None,
  68. version: Any = None,
  69. tags: Any = None,
  70. block_seq_indent: Any = None,
  71. top_level_colon_align: Any = None,
  72. prefix_colon: Any = None,
  73. ) -> None:
  74. # NOQA
  75. CEmitter.__init__(
  76. self,
  77. stream,
  78. canonical=canonical,
  79. indent=indent,
  80. width=width,
  81. encoding=encoding,
  82. allow_unicode=allow_unicode,
  83. line_break=line_break,
  84. explicit_start=explicit_start,
  85. explicit_end=explicit_end,
  86. version=version,
  87. tags=tags,
  88. )
  89. self._emitter = self._serializer = self._representer = self
  90. BaseRepresenter.__init__(
  91. self,
  92. default_style=default_style,
  93. default_flow_style=default_flow_style,
  94. dumper=self,
  95. )
  96. BaseResolver.__init__(self, loadumper=self)
  97. class CSafeDumper(CEmitter, SafeRepresenter, Resolver): # type: ignore
  98. def __init__(
  99. self: StreamType,
  100. stream: Any,
  101. default_style: Any = None,
  102. default_flow_style: Any = None,
  103. canonical: Optional[bool] = None,
  104. indent: Optional[int] = None,
  105. width: Optional[int] = None,
  106. allow_unicode: Optional[bool] = None,
  107. line_break: Any = None,
  108. encoding: Any = None,
  109. explicit_start: Optional[bool] = None,
  110. explicit_end: Optional[bool] = None,
  111. version: Any = None,
  112. tags: Any = None,
  113. block_seq_indent: Any = None,
  114. top_level_colon_align: Any = None,
  115. prefix_colon: Any = None,
  116. ) -> None:
  117. # NOQA
  118. self._emitter = self._serializer = self._representer = self
  119. CEmitter.__init__(
  120. self,
  121. stream,
  122. canonical=canonical,
  123. indent=indent,
  124. width=width,
  125. encoding=encoding,
  126. allow_unicode=allow_unicode,
  127. line_break=line_break,
  128. explicit_start=explicit_start,
  129. explicit_end=explicit_end,
  130. version=version,
  131. tags=tags,
  132. )
  133. self._emitter = self._serializer = self._representer = self
  134. SafeRepresenter.__init__(
  135. self, default_style=default_style, default_flow_style=default_flow_style,
  136. )
  137. Resolver.__init__(self)
  138. class CDumper(CEmitter, Representer, Resolver): # type: ignore
  139. def __init__(
  140. self: StreamType,
  141. stream: Any,
  142. default_style: Any = None,
  143. default_flow_style: Any = None,
  144. canonical: Optional[bool] = None,
  145. indent: Optional[int] = None,
  146. width: Optional[int] = None,
  147. allow_unicode: Optional[bool] = None,
  148. line_break: Any = None,
  149. encoding: Any = None,
  150. explicit_start: Optional[bool] = None,
  151. explicit_end: Optional[bool] = None,
  152. version: Any = None,
  153. tags: Any = None,
  154. block_seq_indent: Any = None,
  155. top_level_colon_align: Any = None,
  156. prefix_colon: Any = None,
  157. ) -> None:
  158. # NOQA
  159. CEmitter.__init__(
  160. self,
  161. stream,
  162. canonical=canonical,
  163. indent=indent,
  164. width=width,
  165. encoding=encoding,
  166. allow_unicode=allow_unicode,
  167. line_break=line_break,
  168. explicit_start=explicit_start,
  169. explicit_end=explicit_end,
  170. version=version,
  171. tags=tags,
  172. )
  173. self._emitter = self._serializer = self._representer = self
  174. Representer.__init__(
  175. self, default_style=default_style, default_flow_style=default_flow_style,
  176. )
  177. Resolver.__init__(self)