mirror of
				https://github.com/django/daphne.git
				synced 2025-10-30 23:37:25 +03:00 
			
		
		
		
	
		
			
				
	
	
		
			41 lines
		
	
	
		
			1.2 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
			
		
		
	
	
			41 lines
		
	
	
		
			1.2 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
| import functools
 | |
| 
 | |
| from django.utils import six
 | |
| 
 | |
| from .utils import name_that_thing
 | |
| 
 | |
| 
 | |
| class ConsumerRegistry(object):
 | |
|     """
 | |
|     Manages the available consumers in the project and which channels they
 | |
|     listen to.
 | |
| 
 | |
|     Generally this is attached to a backend instance as ".registry"
 | |
|     """
 | |
| 
 | |
|     def __init__(self):
 | |
|         self.consumers = {}
 | |
| 
 | |
|     def add_consumer(self, consumer, channels):
 | |
|         # Upconvert if you just pass in a string
 | |
|         if isinstance(channels, six.string_types):
 | |
|             channels = [channels]
 | |
|         # Register on each channel, checking it's unique
 | |
|         for channel in channels:
 | |
|             if channel in self.consumers:
 | |
|                 raise ValueError("Cannot register consumer %s - channel %r already consumed by %s" % (
 | |
|                     name_that_thing(consumer),
 | |
|                     channel,
 | |
|                     name_that_thing(self.consumers[channel]),
 | |
|                 ))
 | |
|             self.consumers[channel] = consumer
 | |
| 
 | |
|     def all_channel_names(self):
 | |
|         return self.consumers.keys()
 | |
| 
 | |
|     def consumer_for_channel(self, channel):
 | |
|         try:
 | |
|             return self.consumers[channel]
 | |
|         except KeyError:
 | |
|             return None
 |