Newer
Older
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
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
import time
from HTMLParser import HTMLParser
from htmlentitydefs import name2codepoint
import errors
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())
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)