123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264 |
- # coding: utf-8
- # Abstract classes.
- from typing import Any, Dict, Optional, List # NOQA
- from ruamel.yaml.tag import Tag
- SHOW_LINES = False
- def CommentCheck() -> None:
- pass
- class Event:
- __slots__ = 'start_mark', 'end_mark', 'comment'
- crepr = 'Unspecified Event'
- def __init__(
- self, start_mark: Any = None, end_mark: Any = None, comment: Any = CommentCheck,
- ) -> None:
- self.start_mark = start_mark
- self.end_mark = end_mark
- # assert comment is not CommentCheck
- if comment is CommentCheck:
- comment = None
- self.comment = comment
- def __repr__(self) -> Any:
- if True:
- arguments = []
- if hasattr(self, 'value'):
- # if you use repr(getattr(self, 'value')) then flake8 complains about
- # abuse of getattr with a constant. When you change to self.value
- # then mypy throws an error
- arguments.append(repr(self.value))
- for key in ['anchor', 'tag', 'implicit', 'flow_style', 'style']:
- v = getattr(self, key, None)
- if v is not None:
- arguments.append(f'{key!s}={v!r}')
- if self.comment not in [None, CommentCheck]:
- arguments.append(f'comment={self.comment!r}')
- if SHOW_LINES:
- arguments.append(
- f'({self.start_mark.line}:{self.start_mark.column}/'
- f'{self.end_mark.line}:{self.end_mark.column})',
- )
- arguments = ', '.join(arguments) # type: ignore
- else:
- attributes = [
- key
- for key in ['anchor', 'tag', 'implicit', 'value', 'flow_style', 'style']
- if hasattr(self, key)
- ]
- arguments = ', '.join([f'{key!s}={getattr(self, key)!r}' for key in attributes])
- if self.comment not in [None, CommentCheck]:
- arguments += f', comment={self.comment!r}'
- return f'{self.__class__.__name__!s}({arguments!s})'
- def compact_repr(self) -> str:
- return f'{self.crepr}'
- class NodeEvent(Event):
- __slots__ = ('anchor',)
- def __init__(
- self, anchor: Any, start_mark: Any = None, end_mark: Any = None, comment: Any = None,
- ) -> None:
- Event.__init__(self, start_mark, end_mark, comment)
- self.anchor = anchor
- class CollectionStartEvent(NodeEvent):
- __slots__ = 'ctag', 'implicit', 'flow_style', 'nr_items'
- def __init__(
- self,
- anchor: Any,
- tag: Any,
- implicit: Any,
- start_mark: Any = None,
- end_mark: Any = None,
- flow_style: Any = None,
- comment: Any = None,
- nr_items: Optional[int] = None,
- ) -> None:
- NodeEvent.__init__(self, anchor, start_mark, end_mark, comment)
- self.ctag = tag
- self.implicit = implicit
- self.flow_style = flow_style
- self.nr_items = nr_items
- @property
- def tag(self) -> Optional[str]:
- return None if self.ctag is None else str(self.ctag)
- class CollectionEndEvent(Event):
- __slots__ = ()
- # Implementations.
- class StreamStartEvent(Event):
- __slots__ = ('encoding',)
- crepr = '+STR'
- def __init__(
- self,
- start_mark: Any = None,
- end_mark: Any = None,
- encoding: Any = None,
- comment: Any = None,
- ) -> None:
- Event.__init__(self, start_mark, end_mark, comment)
- self.encoding = encoding
- class StreamEndEvent(Event):
- __slots__ = ()
- crepr = '-STR'
- class DocumentStartEvent(Event):
- __slots__ = 'explicit', 'version', 'tags'
- crepr = '+DOC'
- def __init__(
- self,
- start_mark: Any = None,
- end_mark: Any = None,
- explicit: Any = None,
- version: Any = None,
- tags: Any = None,
- comment: Any = None,
- ) -> None:
- Event.__init__(self, start_mark, end_mark, comment)
- self.explicit = explicit
- self.version = version
- self.tags = tags
- def compact_repr(self) -> str:
- start = ' ---' if self.explicit else ''
- return f'{self.crepr}{start}'
- class DocumentEndEvent(Event):
- __slots__ = ('explicit',)
- crepr = '-DOC'
- def __init__(
- self,
- start_mark: Any = None,
- end_mark: Any = None,
- explicit: Any = None,
- comment: Any = None,
- ) -> None:
- Event.__init__(self, start_mark, end_mark, comment)
- self.explicit = explicit
- def compact_repr(self) -> str:
- end = ' ...' if self.explicit else ''
- return f'{self.crepr}{end}'
- class AliasEvent(NodeEvent):
- __slots__ = 'style'
- crepr = '=ALI'
- def __init__(
- self,
- anchor: Any,
- start_mark: Any = None,
- end_mark: Any = None,
- style: Any = None,
- comment: Any = None,
- ) -> None:
- NodeEvent.__init__(self, anchor, start_mark, end_mark, comment)
- self.style = style
- def compact_repr(self) -> str:
- return f'{self.crepr} *{self.anchor}'
- class ScalarEvent(NodeEvent):
- __slots__ = 'ctag', 'implicit', 'value', 'style'
- crepr = '=VAL'
- def __init__(
- self,
- anchor: Any,
- tag: Any,
- implicit: Any,
- value: Any,
- start_mark: Any = None,
- end_mark: Any = None,
- style: Any = None,
- comment: Any = None,
- ) -> None:
- NodeEvent.__init__(self, anchor, start_mark, end_mark, comment)
- self.ctag = tag
- self.implicit = implicit
- self.value = value
- self.style = style
- @property
- def tag(self) -> Optional[str]:
- return None if self.ctag is None else str(self.ctag)
- @tag.setter
- def tag(self, val: Any) -> None:
- if isinstance(val, str):
- val = Tag(suffix=val)
- self.ctag = val
- def compact_repr(self) -> str:
- style = ':' if self.style is None else self.style
- anchor = f'&{self.anchor} ' if self.anchor else ''
- tag = f'<{self.tag!s}> ' if self.tag else ''
- value = self.value
- for ch, rep in [
- ('\\', '\\\\'),
- ('\t', '\\t'),
- ('\n', '\\n'),
- ('\a', ''), # remove from folded
- ('\r', '\\r'),
- ('\b', '\\b'),
- ]:
- value = value.replace(ch, rep)
- return f'{self.crepr} {anchor}{tag}{style}{value}'
- class SequenceStartEvent(CollectionStartEvent):
- __slots__ = ()
- crepr = '+SEQ'
- def compact_repr(self) -> str:
- flow = ' []' if self.flow_style else ''
- anchor = f' &{self.anchor}' if self.anchor else ''
- tag = f' <{self.tag!s}>' if self.tag else ''
- return f'{self.crepr}{flow}{anchor}{tag}'
- class SequenceEndEvent(CollectionEndEvent):
- __slots__ = ()
- crepr = '-SEQ'
- class MappingStartEvent(CollectionStartEvent):
- __slots__ = ()
- crepr = '+MAP'
- def compact_repr(self) -> str:
- flow = ' {}' if self.flow_style else ''
- anchor = f' &{self.anchor}' if self.anchor else ''
- tag = f' <{self.tag!s}>' if self.tag else ''
- return f'{self.crepr}{flow}{anchor}{tag}'
- class MappingEndEvent(CollectionEndEvent):
- __slots__ = ()
- crepr = '-MAP'
|