3
0
mirror of https://github.com/jlu5/PyLink.git synced 2024-11-01 01:09:22 +01:00

Separate KeyedDefaultdict into new structures module (#199)

This commit is contained in:
James Lu 2016-04-24 21:11:36 -07:00
parent 2c60aa6395
commit 7f46e1c35c
3 changed files with 21 additions and 15 deletions

View File

@ -19,6 +19,7 @@ from copy import deepcopy
from log import *
import world
import utils
import structures
### Exceptions
@ -113,7 +114,7 @@ class Irc():
internal=True, desc=self.serverdata.get('serverdesc')
or self.botdata['serverdesc'])}
self.users = {}
self.channels = utils.KeyedDefaultdict(IrcChannel)
self.channels = structures.KeyedDefaultdict(IrcChannel)
# This sets the list of supported channel and user modes: the default
# RFC1459 modes are implied. Named modes are used here to make

19
structures.py Normal file
View File

@ -0,0 +1,19 @@
"""
structures.py - PyLink data structures module.
This module contains custom data structures that may be useful in various situations.
"""
import collections
class KeyedDefaultdict(collections.defaultdict):
"""
Subclass of defaultdict allowing the key to be passed to the default factory.
"""
def __missing__(self, key):
if self.default_factory is None:
# If there is no default factory, just let defaultdict handle it
super().__missing__(self, key)
else:
value = self[key] = self.default_factory(key)
return value

View File

@ -10,25 +10,11 @@ import re
import inspect
import importlib
import os
import collections
from log import log
import world
import conf
class KeyedDefaultdict(collections.defaultdict):
"""
Subclass of defaultdict allowing the key to be passed to the default factory.
"""
def __missing__(self, key):
if self.default_factory is None:
# If there is no default factory, just let defaultdict handle it
super().__missing__(self, key)
else:
value = self[key] = self.default_factory(key)
return value
class NotAuthenticatedError(Exception):
"""
Exception raised by checkAuthenticated() when a user fails authentication