1 from ...types import serializable, Timestamp
2 from ...util import none_or
3 from .comment import Comment
4 from .contributor import Contributor
6 from .util import consume_tags
9 class Revision(serializable.Type):
13 __slots__ = ('id', 'timestamp', 'contributor', 'minor', 'comment', 'text',
14 'bytes', 'sha1', 'parent_id', 'model', 'format',
18 'id': lambda e: int(e.text),
19 'timestamp': lambda e: Timestamp(e.text),
20 'contributor': lambda e: Contributor.from_element(e),
21 'minor': lambda e: True,
22 'comment': lambda e: Comment.from_element(e),
23 'text': lambda e: Text.from_element(e),
24 'sha1': lambda e: str(e.text),
25 'parentid': lambda e: int(e.text),
26 'model': lambda e: str(e.text),
27 'format': lambda e: str(e.text)
30 def __init__(self, id, timestamp, contributor=None, minor=None,
31 comment=None, text=None, bytes=None, sha1=None,
32 parent_id=None, model=None, format=None,
33 beginningofpage=False):
34 self.id = none_or(id, int)
39 self.timestamp = none_or(timestamp, Timestamp)
41 Revision timestamp : :class:`mw.Timestamp`
44 self.contributor = none_or(contributor, Contributor.deserialize)
46 Contributor meta data : :class:`~mw.xml_dump.Contributor` | `None`
49 self.minor = False or none_or(minor, bool)
51 Is revision a minor change? : `bool`
54 self.comment = none_or(comment, Comment)
56 Comment left with revision : :class:`~mw.xml_dump.Comment` (behaves like `str`, with additional members)
59 self.text = none_or(text, Text)
61 Content of text : :class:`~mw.xml_dump.Text` (behaves like `str`, with additional members)
64 self.bytes = none_or(bytes, int)
66 Number of bytes of content : `str`
69 self.sha1 = none_or(sha1, str)
71 sha1 hash of the content : `str`
74 self.parent_id = none_or(parent_id, int)
76 Revision ID of preceding revision : `int` | `None`
79 self.model = none_or(model, str)
84 self.format = none_or(format, str)
89 self.beginningofpage = bool(beginningofpage)
91 Is the first revision of a page : `bool`
92 Used to identify the first revision of a page when using Wikihadoop
93 revision pairs. Otherwise is always set to False. Do not expect to use
94 this when processing an XML dump directly.
98 def from_element(cls, element):
99 values = consume_tags(cls.TAG_MAP, element)
103 values.get('timestamp'),
104 values.get('contributor'),
105 values.get('minor') is not None,
106 values.get('comment'),
110 values.get('parentid'),
112 values.get('format'),
113 element.attr('beginningofpage') is not None
115 # Probably never used by anything, ever.