Package common :: Module nec
[hide private]
[frames] | no frames]

Source Code for Module common.nec

  1  # -*- coding: utf-8 -*- 
  2   
  3  ## This file is part of Gajim. 
  4  ## 
  5  ## Gajim is free software; you can redistribute it and/or modify 
  6  ## it under the terms of the GNU General Public License as published 
  7  ## by the Free Software Foundation; version 3 only. 
  8  ## 
  9  ## Gajim is distributed in the hope that it will be useful, 
 10  ## but WITHOUT ANY WARRANTY; without even the implied warranty of 
 11  ## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the 
 12  ## GNU General Public License for more details. 
 13  ## 
 14  ## You should have received a copy of the GNU General Public License 
 15  ## along with Gajim.  If not, see <http://www.gnu.org/licenses/>. 
 16  ## 
 17   
 18  ''' 
 19  Network Events Controller. 
 20   
 21  :author: Mateusz Biliński <mateusz@bilinski.it> 
 22  :since: 10th August 2008 
 23  :copyright: Copyright (2008) Mateusz Biliński <mateusz@bilinski.it> 
 24  :license: GPL 
 25  ''' 
 26   
 27  from pprint import pformat 
 28   
 29  #from plugins.helpers import log 
 30  from common import gajim 
 31   
32 -class NetworkEventsController(object):
33
34 - def __init__(self):
35 self.incoming_events_generators = {} 36 ''' 37 Keys: names of events 38 Values: list of class objects that are subclasses 39 of `NetworkIncomingEvent` 40 '''
41
42 - def register_incoming_event(self, event_class):
43 for base_event_name in event_class.base_network_events: 44 event_list = self.incoming_events_generators.setdefault(base_event_name, []) 45 if not event_class in event_list: 46 event_list.append(event_class)
47
48 - def unregister_incoming_event(self, event_class):
49 for base_event_name in event_class.base_network_events: 50 if base_event_name in self.incoming_events_generators: 51 self.incoming_events_generators[base_event_name].remove(event_class)
52
53 - def register_outgoing_event(self, event_class):
54 pass
55
56 - def unregister_outgoing_event(self, event_class):
57 pass
58
59 - def push_incoming_event(self, event_object):
60 if event_object.generate(): 61 if self._generate_events_based_on_incoming_event(event_object): 62 gajim.ged.raise_event(event_object.name, event_object)
63
64 - def push_outgoing_event(self, event_object):
65 pass
66
67 - def _generate_events_based_on_incoming_event(self, event_object):
68 ''' 69 :return: True if even_object should be dispatched through Global 70 Events Dispatcher, False otherwise. This can be used to replace 71 base events with those that more data computed (easier to use 72 by handlers). 73 :note: replacing mechanism is not implemented currently, but will be 74 based on attribute in new network events object. 75 ''' 76 base_event_name = event_object.name 77 if base_event_name in self.incoming_events_generators: 78 for new_event_class in self.incoming_events_generators[base_event_name]: 79 new_event_object = new_event_class(None, base_event=event_object) 80 if new_event_object.generate(): 81 if self._generate_events_based_on_incoming_event(new_event_object): 82 gajim.ged.raise_event(new_event_object.name, new_event_object) 83 return True
84
85 -class NetworkEvent(object):
86 name = '' 87
88 - def __init__(self, new_name, **kwargs):
89 if new_name: 90 self.name = new_name 91 92 self._set_kwargs_as_attributes(**kwargs) 93 94 self.init()
95
96 - def init(self):
97 pass
98 99
100 - def generate(self):
101 ''' 102 Generates new event (sets it's attributes) based on event object. 103 104 Base event object name is one of those in `base_network_events`. 105 106 Reference to base event object is stored in `self.base_event` attribute. 107 108 Note that this is a reference, so modifications to that event object 109 are possible before dispatching to Global Events Dispatcher. 110 111 :return: True if generated event should be dispatched, False otherwise. 112 ''' 113 return True
114
115 - def _set_kwargs_as_attributes(self, **kwargs):
116 for k, v in kwargs.iteritems(): 117 setattr(self, k, v)
118
119 - def __str__(self):
120 return '<NetworkEvent object> Attributes: %s'%(pformat(self.__dict__))
121
122 - def __repr__(self):
123 return '<NetworkEvent object> Attributes: %s'%(pformat(self.__dict__))
124 125
126 -class NetworkIncomingEvent(NetworkEvent):
127 base_network_events = [] 128 ''' 129 Names of base network events that new event is going to be generated on. 130 '''
131 132
133 -class NetworkOutgoingEvent(NetworkEvent):
134 pass
135