Skip to content

Commit 04acbc4

Browse files
committed
Remove the need for calling super() in filters
1 parent 6cc84b2 commit 04acbc4

File tree

1 file changed

+66
-38
lines changed

1 file changed

+66
-38
lines changed

telegram/ext/filters.py

Lines changed: 66 additions & 38 deletions
Original file line numberDiff line numberDiff line change
@@ -51,10 +51,13 @@ class BaseFilter(object):
5151
a `filter` method that returns a boolean: `True` if the message should be handled, `False`
5252
otherwise. Note that the filters work only as class instances, not actual class objects
5353
(so remember to initialize your filter classes).
54+
55+
By default the filters name (what will get printed when converted to a string for display)
56+
will be the class name. If you want to overwrite this assign a better name to the `name`
57+
class variable.
5458
"""
5559

56-
def __init__(self, name=None):
57-
self.name = name
60+
name = None
5861

5962
def __call__(self, message):
6063
return self.filter(message)
@@ -69,9 +72,8 @@ def __invert__(self):
6972
return InvertedFilter(self)
7073

7174
def __repr__(self):
72-
# Do not rely on classes overwriting __init__ to set a name
73-
# so we can keep backwards compatibility
74-
if not hasattr(self, 'name') or self.name is None:
75+
# We do this here instead of in a __init__ so filter don't have to call __init__ or super()
76+
if self.name is None:
7577
self.name = self.__class__.__name__
7678
return self.name
7779

@@ -87,7 +89,6 @@ class InvertedFilter(BaseFilter):
8789
"""
8890

8991
def __init__(self, f):
90-
super(InvertedFilter, self).__init__()
9192
self.f = f
9293

9394
def filter(self, message):
@@ -107,7 +108,6 @@ class MergedFilter(BaseFilter):
107108
"""
108109

109110
def __init__(self, base_filter, and_filter=None, or_filter=None):
110-
super(MergedFilter, self).__init__()
111111
self.base_filter = base_filter
112112
self.and_filter = and_filter
113113
self.or_filter = or_filter
@@ -129,176 +129,201 @@ class Filters(object):
129129
"""
130130

131131
class _All(BaseFilter):
132+
name = 'Filters.all'
132133

133134
def filter(self, message):
134135
return True
135136

136-
all = _All(name='Filters.all')
137+
all = _All()
137138

138139
class _Text(BaseFilter):
140+
name = 'Filters.text'
139141

140142
def filter(self, message):
141143
return bool(message.text and not message.text.startswith('/'))
142144

143-
text = _Text(name='Filters.text')
145+
text = _Text()
144146

145147
class _Command(BaseFilter):
148+
name = 'Filters.command'
146149

147150
def filter(self, message):
148151
return bool(message.text and message.text.startswith('/'))
149152

150-
command = _Command(name='Filters.command')
153+
command = _Command()
151154

152155
class _Reply(BaseFilter):
156+
name = 'Filters.reply'
153157

154158
def filter(self, message):
155159
return bool(message.reply_to_message)
156160

157-
reply = _Reply(name='Filters.reply')
161+
reply = _Reply()
158162

159163
class _Audio(BaseFilter):
164+
name = 'Filters.audio'
160165

161166
def filter(self, message):
162167
return bool(message.audio)
163168

164-
audio = _Audio(name='Filters.audio')
169+
audio = _Audio()
165170

166171
class _Document(BaseFilter):
172+
name = 'Filters.document'
167173

168174
def filter(self, message):
169175
return bool(message.document)
170176

171-
document = _Document(name='Filters.document')
177+
document = _Document()
172178

173179
class _Photo(BaseFilter):
180+
name = 'Filters.photo'
174181

175182
def filter(self, message):
176183
return bool(message.photo)
177184

178-
photo = _Photo(name='Filters.photo')
185+
photo = _Photo()
179186

180187
class _Sticker(BaseFilter):
188+
name = 'Filters.sticker'
181189

182190
def filter(self, message):
183191
return bool(message.sticker)
184192

185-
sticker = _Sticker(name='Filters.sticker')
193+
sticker = _Sticker()
186194

187195
class _Video(BaseFilter):
196+
name = 'Filters.video'
188197

189198
def filter(self, message):
190199
return bool(message.video)
191200

192-
video = _Video(name='Filters.video')
201+
video = _Video()
193202

194203
class _Voice(BaseFilter):
204+
name = 'Filters.voice'
195205

196206
def filter(self, message):
197207
return bool(message.voice)
198208

199-
voice = _Voice(name='Filters.voice')
209+
voice = _Voice()
200210

201211
class _Contact(BaseFilter):
212+
name = 'Filters.contact'
202213

203214
def filter(self, message):
204215
return bool(message.contact)
205216

206-
contact = _Contact(name='Filters.contact')
217+
contact = _Contact()
207218

208219
class _Location(BaseFilter):
220+
name = 'Filters.location'
209221

210222
def filter(self, message):
211223
return bool(message.location)
212224

213-
location = _Location(name='Filters.location')
225+
location = _Location()
214226

215227
class _Venue(BaseFilter):
228+
name = 'Filters.venue'
216229

217230
def filter(self, message):
218231
return bool(message.venue)
219232

220-
venue = _Venue(name='Filters.venue')
233+
venue = _Venue()
221234

222235
class _StatusUpdate(BaseFilter):
223236

224237
class _NewChatMembers(BaseFilter):
238+
name = 'Filters.status_update.new_chat_members'
225239

226240
def filter(self, message):
227241
return bool(message.new_chat_members)
228242

229-
new_chat_members = _NewChatMembers(name='Filters.status_update.new_chat_members')
243+
new_chat_members = _NewChatMembers()
230244

231245
class _LeftChatMember(BaseFilter):
246+
name = 'Filters.status_update.left_chat_member'
232247

233248
def filter(self, message):
234249
return bool(message.left_chat_member)
235250

236-
left_chat_member = _LeftChatMember(name='Filters.status_update.left_chat_member')
251+
left_chat_member = _LeftChatMember()
237252

238253
class _NewChatTitle(BaseFilter):
254+
name = 'Filters.status_update.new_chat_title'
239255

240256
def filter(self, message):
241257
return bool(message.new_chat_title)
242258

243-
new_chat_title = _NewChatTitle(name='Filters.status_update.new_chat_title')
259+
new_chat_title = _NewChatTitle()
244260

245261
class _NewChatPhoto(BaseFilter):
262+
name = 'Filters.status_update.new_chat_photo'
246263

247264
def filter(self, message):
248265
return bool(message.new_chat_photo)
249266

250-
new_chat_photo = _NewChatPhoto(name='Filters.status_update.new_chat_photo')
267+
new_chat_photo = _NewChatPhoto()
251268

252269
class _DeleteChatPhoto(BaseFilter):
270+
name = 'Filters.status_update.delete_chat_photo'
253271

254272
def filter(self, message):
255273
return bool(message.delete_chat_photo)
256274

257-
delete_chat_photo = _DeleteChatPhoto(name='Filters.status_update.delete_chat_photo')
275+
delete_chat_photo = _DeleteChatPhoto()
258276

259277
class _ChatCreated(BaseFilter):
278+
name = 'Filters.status_update.chat_created'
260279

261280
def filter(self, message):
262281
return bool(message.group_chat_created or message.supergroup_chat_created or
263282
message.channel_chat_created)
264283

265-
chat_created = _ChatCreated(name='Filters.status_update.chat_created')
284+
chat_created = _ChatCreated()
266285

267286
class _Migrate(BaseFilter):
287+
name = 'Filters.status_update.migrate'
268288

269289
def filter(self, message):
270290
return bool(message.migrate_from_chat_id or message.migrate_to_chat_id)
271291

272-
migrate = _Migrate(name='Filters.status_update.migrate')
292+
migrate = _Migrate()
273293

274294
class _PinnedMessage(BaseFilter):
295+
name = 'Filters.status_update.pinned_message'
275296

276297
def filter(self, message):
277298
return bool(message.pinned_message)
278299

279-
pinned_message = _PinnedMessage(name='Filters.status_update.pinned_message')
300+
pinned_message = _PinnedMessage()
301+
302+
name = 'Filters.status_update'
280303

281304
def filter(self, message):
282305
return bool(self.new_chat_members(message) or self.left_chat_member(message) or
283306
self.new_chat_title(message) or self.new_chat_photo(message) or
284307
self.delete_chat_photo(message) or self.chat_created(message) or
285308
self.migrate(message) or self.pinned_message(message))
286309

287-
status_update = _StatusUpdate(name='Filters.status_update')
310+
status_update = _StatusUpdate()
288311

289312
class _Forwarded(BaseFilter):
313+
name = 'Filters.forwarded'
290314

291315
def filter(self, message):
292316
return bool(message.forward_date)
293317

294-
forwarded = _Forwarded(name='Filters.forwarded')
318+
forwarded = _Forwarded()
295319

296320
class _Game(BaseFilter):
321+
name = 'Filters.game'
297322

298323
def filter(self, message):
299324
return bool(message.game)
300325

301-
game = _Game(name='Filters.game')
326+
game = _Game()
302327

303328
class entity(BaseFilter):
304329
"""Filters messages to only allow those which have a :class:`telegram.MessageEntity`
@@ -313,39 +338,42 @@ class entity(BaseFilter):
313338

314339
def __init__(self, entity_type):
315340
self.entity_type = entity_type
316-
super(Filters.entity, self).__init__(name='Filters.entity({})'.format(
317-
self.entity_type))
341+
self.name = 'Filters.entity({})'.format(self.entity_type)
318342

319343
def filter(self, message):
320344
return any([entity.type == self.entity_type for entity in message.entities])
321345

322346
class _Private(BaseFilter):
347+
name = 'Filters.private'
323348

324349
def filter(self, message):
325350
return message.chat.type == Chat.PRIVATE
326351

327-
private = _Private(name='Filters.private')
352+
private = _Private()
328353

329354
class _Group(BaseFilter):
355+
name = 'Filters.group'
330356

331357
def filter(self, message):
332358
return message.chat.type in [Chat.GROUP, Chat.SUPERGROUP]
333359

334-
group = _Group(name='Filters.group')
360+
group = _Group()
335361

336362
class _Invoice(BaseFilter):
363+
name = 'Filters.invoice'
337364

338365
def filter(self, message):
339366
return bool(message.invoice)
340367

341-
invoice = _Invoice(name='Filters.invoice')
368+
invoice = _Invoice()
342369

343370
class _SuccessfulPayment(BaseFilter):
371+
name = 'Filters.successful_payment'
344372

345373
def filter(self, message):
346374
return bool(message.successful_payment)
347375

348-
successful_payment = _SuccessfulPayment(name='Filters.successful_payment')
376+
successful_payment = _SuccessfulPayment()
349377

350378
class language(BaseFilter):
351379
"""
@@ -363,7 +391,7 @@ def __init__(self, lang):
363391
self.lang = [lang]
364392
else:
365393
self.lang = lang
366-
super(Filters.language, self).__init__(name='Filters.language({})'.format(self.lang))
394+
self.name = 'Filters.language({})'.format(self.lang)
367395

368396
def filter(self, message):
369397
return message.from_user.language_code and any(

0 commit comments

Comments
 (0)