Add some basic ABCs.
This commit is contained in:
		| @@ -33,7 +33,7 @@ from .colour import Color, Colour | |||||||
| from .invite import Invite | from .invite import Invite | ||||||
| from .object import Object | from .object import Object | ||||||
| from .reaction import Reaction | from .reaction import Reaction | ||||||
| from . import utils, opus, compat | from . import utils, opus, compat, abc | ||||||
| from .voice_client import VoiceClient | from .voice_client import VoiceClient | ||||||
| from .enums import ChannelType, ServerRegion, Status, MessageType, VerificationLevel | from .enums import ChannelType, ServerRegion, Status, MessageType, VerificationLevel | ||||||
| from collections import namedtuple | from collections import namedtuple | ||||||
|   | |||||||
							
								
								
									
										77
									
								
								discord/abc.py
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										77
									
								
								discord/abc.py
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,77 @@ | |||||||
|  | # -*- coding: utf-8 -*- | ||||||
|  |  | ||||||
|  | """ | ||||||
|  | The MIT License (MIT) | ||||||
|  |  | ||||||
|  | Copyright (c) 2015-2016 Rapptz | ||||||
|  |  | ||||||
|  | Permission is hereby granted, free of charge, to any person obtaining a | ||||||
|  | copy of this software and associated documentation files (the "Software"), | ||||||
|  | to deal in the Software without restriction, including without limitation | ||||||
|  | the rights to use, copy, modify, merge, publish, distribute, sublicense, | ||||||
|  | and/or sell copies of the Software, and to permit persons to whom the | ||||||
|  | Software is furnished to do so, subject to the following conditions: | ||||||
|  |  | ||||||
|  | The above copyright notice and this permission notice shall be included in | ||||||
|  | all copies or substantial portions of the Software. | ||||||
|  |  | ||||||
|  | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS | ||||||
|  | OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, | ||||||
|  | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE | ||||||
|  | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER | ||||||
|  | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING | ||||||
|  | FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER | ||||||
|  | DEALINGS IN THE SOFTWARE. | ||||||
|  | """ | ||||||
|  |  | ||||||
|  | import abc | ||||||
|  |  | ||||||
|  | class Snowflake(metaclass=abc.ABCMeta): | ||||||
|  |     __slots__ = () | ||||||
|  |  | ||||||
|  |     @property | ||||||
|  |     @abc.abstractmethod | ||||||
|  |     def created_at(self): | ||||||
|  |         raise NotImplementedError | ||||||
|  |  | ||||||
|  |     @classmethod | ||||||
|  |     def __subclasshook__(cls, C): | ||||||
|  |         if cls is Snowflake: | ||||||
|  |             mro = C.__mro__ | ||||||
|  |             for attr in ('created_at', 'id'): | ||||||
|  |                 for base in mro: | ||||||
|  |                     if attr in base.__dict__: | ||||||
|  |                         break | ||||||
|  |                 else: | ||||||
|  |                     return NotImplemented | ||||||
|  |             return True | ||||||
|  |         return NotImplemented | ||||||
|  |  | ||||||
|  | class User(metaclass=abc.ABCMeta): | ||||||
|  |     __slots__ = () | ||||||
|  |  | ||||||
|  |     @property | ||||||
|  |     @abc.abstractmethod | ||||||
|  |     def display_name(self): | ||||||
|  |         raise NotImplementedError | ||||||
|  |  | ||||||
|  |     @property | ||||||
|  |     @abc.abstractmethod | ||||||
|  |     def mention(self): | ||||||
|  |         raise NotImplementedError | ||||||
|  |  | ||||||
|  |     @classmethod | ||||||
|  |     def __subclasshook__(cls, C): | ||||||
|  |         if cls is User: | ||||||
|  |             if Snowflake.__subclasshook__(C) is NotImplemented: | ||||||
|  |                 return NotImplemented | ||||||
|  |  | ||||||
|  |             mro = C.__mro__ | ||||||
|  |             for attr in ('display_name', 'mention', 'name', 'avatar', 'discriminator', 'bot'): | ||||||
|  |                 for base in mro: | ||||||
|  |                     if attr in base.__dict__: | ||||||
|  |                         break | ||||||
|  |                 else: | ||||||
|  |                     return NotImplemented | ||||||
|  |             return True | ||||||
|  |         return NotImplemented | ||||||
		Reference in New Issue
	
	Block a user