Newer
Older
import time
from HTMLParser import HTMLParser
from htmlentitydefs import name2codepoint
class OldPage(object):
@staticmethod
def save(self, text = u'', summary = u'', minor = False):
data = {}
data['wpTextbox1'] = text
data['wpSummary'] = summary
data['wpSave'] = 'Save page'
data['wpEditToken'] = self.get_token('edit')
if self.last_rev_time:
data['wpEdittime'] = time.strftime('%Y%m%d%H%M%S', self.last_rev_time)
else:
data['wpEdittime'] = time.strftime('%Y%m%d%H%M%S', time.gmtime())
if self.edit_time:
data['wpStarttime'] = time.strftime('%Y%m%d%H%M%S', self.edit_time)
else:
data['wpStarttime'] = time.strftime('%Y%m%d%H%M%S', time.gmtime())
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
data['wpStarttime'] = time.strftime('%Y%m%d%H%M%S', time.gmtime())
if minor: data['wpMinoredit'] = '1'
data['title'] = self.name
page_data = self.site.raw_index('submit', **data)
page = EditPage('editform')
page.feed(page_data)
page.close()
if page.data:
if page.readonly: raise errors.ProtectedPageError(self)
self.get_token('edit', True)
raise errors.EditError(page.title, data)
@staticmethod
def move(self, new_title, reason = '', move_talk = True):
postdata = {'wpNewTitle': new_title,
'wpOldTitle': self.name,
'wpReason': reason,
'wpMove': '1',
'wpEditToken': self.get_token('move')}
if move_talk: postdata['wpMovetalk'] = '1'
postdata['title'] = 'Special:Movepage'
page_data = self.site.raw_index('submit', **data)
page = EditPage('movepage')
page.feed(page_data.decode('utf-8', 'ignore'))
page.close()
if 'wpEditToken' in page.data:
raise errors.EditError(page.title, postdata)
@staticmethod
def delete(self, reason = ''):
postdata = {'wpReason': reason,
'wpConfirmB': 'Delete',
'mw-filedelete-submit': 'Delete',
'wpEditToken': self.get_token('delete'),
'title': self.name}
page_data = self.site.raw_index('delete', **postdata)
class EditPage(HTMLParser):
def __init__(self, form):
HTMLParser.__init__(self)
self.form = form
self.in_form = False
self.in_text = False
self.in_title = False
self.data = {}
self.textdata = []
self.title = u''
self.readonly = True
def handle_starttag(self, tag, attrs):
self.in_title = (tag == 'title')
if (u'id', self.form) in attrs:
attrs = dict(attrs)
self.in_form = True
self.action = attrs['action']
if tag == 'input' and self.in_form and (u'type', u'submit') \
not in attrs and (u'type', u'checkbox') not in attrs:
attrs = dict(attrs)
if u'name' in attrs: self.data[attrs[u'name']] = attrs.get(u'value', u'')
if self.in_form and tag == 'textarea':
self.in_text = True
self.readonly = (u'readonly', u'readonly') in attrs
def handle_endtag(self, tag):
if self.in_title and tag == 'title': self.in_title = False
if self.in_form and tag == 'form': self.in_form = False
if self.in_text and tag == 'textarea': self.in_text = False
def handle_data(self, data):
if self.in_text: self.textdata.append(data)
if self.in_title: self.title += data
def handle_entityref(self, name):
if name in name2codepoint:
self.handle_data(unichr(name2codepoint[name]))
else:
self.handle_data(u'&%s;' % name)
def handle_charref(self, name):
try:
self.handle_data(unichr(int(name)))
except ValueError:
self.handle_data(u'&#$s;' % name)