Some signals/connections refactoring

This commit is contained in:
Przemyslaw Kaminski 2015-04-21 11:00:49 +02:00
parent 06fe908b3f
commit 4de8384af3

View File

@ -15,7 +15,7 @@ CLIENTS = utils.read_config_file(CLIENTS_CONFIG_KEY)
def guess_mapping(emitter, receiver): def guess_mapping(emitter, receiver):
"""Guess connection mapping between emitter and receiver. """Guess connection mapping between emitter and receiver.
Suppose emitter and receiver have inputs: Suppose emitter and receiver have common inputs:
ip, ssh_key, ssh_user ip, ssh_key, ssh_user
Then we return a connection mapping like this: Then we return a connection mapping like this:
@ -39,9 +39,7 @@ def guess_mapping(emitter, receiver):
def connect(emitter, receiver, mapping=None): def connect(emitter, receiver, mapping=None):
#mapping = mapping or {}
guessed = guess_mapping(emitter, receiver) guessed = guess_mapping(emitter, receiver)
#guessed.update(mapping)
mapping = mapping or guessed mapping = mapping or guessed
for src, dst in mapping.items(): for src, dst in mapping.items():
@ -50,18 +48,22 @@ def connect(emitter, receiver, mapping=None):
if receiver.input_types.get(dst, '') != 'list': if receiver.input_types.get(dst, '') != 'list':
disconnect_receiver_by_input(receiver, dst) disconnect_receiver_by_input(receiver, dst)
CLIENTS.setdefault(emitter.name, {}) connect_src_dst(emitter, src, receiver, dst)
CLIENTS[emitter.name].setdefault(src, [])
CLIENTS[emitter.name][src].append((receiver.name, dst))
# Copy emitter's values to receiver
if src in emitter.args:
receiver.update({dst: emitter.args[src]}, emitter=emitter)
receiver.save() receiver.save()
utils.save_to_config_file(CLIENTS_CONFIG_KEY, CLIENTS) utils.save_to_config_file(CLIENTS_CONFIG_KEY, CLIENTS)
def connect_src_dst(emitter, src, receiver, dst):
CLIENTS.setdefault(emitter.name, {})
CLIENTS[emitter.name].setdefault(src, [])
CLIENTS[emitter.name][src].append((receiver.name, dst))
# Copy emitter's values to receiver
if src in emitter.args:
receiver.update({dst: emitter.args[src]}, emitter=emitter)
def disconnect(emitter, receiver): def disconnect(emitter, receiver):
for src, destinations in CLIENTS[emitter.name].items(): for src, destinations in CLIENTS[emitter.name].items():
destinations = [ destinations = [
@ -79,10 +81,7 @@ def disconnect(emitter, receiver):
if k != emitter.name if k != emitter.name
} }
CLIENTS[emitter.name][src] = [ disconnect_by_src(emitter, src, receiver)
destination for destination in destinations
if destination[0] != receiver.name
]
# Inputs might have changed # Inputs might have changed
receiver.save() receiver.save()
@ -97,11 +96,16 @@ def disconnect_receiver_by_input(receiver, input):
:return: :return:
""" """
for emitter_name, inputs in CLIENTS.items(): for emitter_name, inputs in CLIENTS.items():
if input in inputs: emitter = db.get_resource(emitter_name)
inputs[input] = [ disconnect_by_src(emitter, input, receiver)
destination for destination in inputs[input]
if destination[0] != receiver.name
] def disconnect_by_src(emitter, src, receiver):
if src in CLIENTS[emitter.name]:
CLIENTS[emitter.name][src] = [
destination for destination in CLIENTS[emitter.name][src]
if destination[0] != receiver.name
]
def notify(source, key, value): def notify(source, key, value):
@ -120,12 +124,9 @@ def notify(source, key, value):
def assign_connections(receiver, connections): def assign_connections(receiver, connections):
mappings = defaultdict(list) mappings = defaultdict(list)
#for key, dest in connections.iteritems(): for key, dest in connections.iteritems():
# resource, r_key = dest.split('.') resource, r_key = dest.split('.')
# resource = db.get_resource(resource) mappings[resource].append((r_key, key))
# value = resource.args[r_key]
# receiver.args[key] = value
# mappings[resource].append((r_key, key))
for resource, r_mappings in mappings.iteritems(): for resource, r_mappings in mappings.iteritems():
connect(resource, receiver, r_mappings) connect(resource, receiver, r_mappings)