cyaml.py 6.4 KB

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