From 4de8384af38f0359a19867cccf6327c516df88ac Mon Sep 17 00:00:00 2001 From: Przemyslaw Kaminski Date: Tue, 21 Apr 2015 11:00:49 +0200 Subject: [PATCH] Some signals/connections refactoring --- x/signals.py | 51 ++++++++++++++++++++++++++------------------------- 1 file changed, 26 insertions(+), 25 deletions(-) diff --git a/x/signals.py b/x/signals.py index 604f9717..fdb7c2ac 100644 --- a/x/signals.py +++ b/x/signals.py @@ -15,7 +15,7 @@ CLIENTS = utils.read_config_file(CLIENTS_CONFIG_KEY) def guess_mapping(emitter, 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 Then we return a connection mapping like this: @@ -39,9 +39,7 @@ def guess_mapping(emitter, receiver): def connect(emitter, receiver, mapping=None): - #mapping = mapping or {} guessed = guess_mapping(emitter, receiver) - #guessed.update(mapping) mapping = mapping or guessed for src, dst in mapping.items(): @@ -50,18 +48,22 @@ def connect(emitter, receiver, mapping=None): if receiver.input_types.get(dst, '') != 'list': disconnect_receiver_by_input(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) + connect_src_dst(emitter, src, receiver, dst) receiver.save() 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): for src, destinations in CLIENTS[emitter.name].items(): destinations = [ @@ -79,10 +81,7 @@ def disconnect(emitter, receiver): if k != emitter.name } - CLIENTS[emitter.name][src] = [ - destination for destination in destinations - if destination[0] != receiver.name - ] + disconnect_by_src(emitter, src, receiver) # Inputs might have changed receiver.save() @@ -97,11 +96,16 @@ def disconnect_receiver_by_input(receiver, input): :return: """ for emitter_name, inputs in CLIENTS.items(): - if input in inputs: - inputs[input] = [ - destination for destination in inputs[input] - if destination[0] != receiver.name - ] + emitter = db.get_resource(emitter_name) + disconnect_by_src(emitter, input, receiver) + + +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): @@ -120,12 +124,9 @@ def notify(source, key, value): def assign_connections(receiver, connections): mappings = defaultdict(list) - #for key, dest in connections.iteritems(): - # resource, r_key = dest.split('.') - # resource = db.get_resource(resource) - # value = resource.args[r_key] - # receiver.args[key] = value - # mappings[resource].append((r_key, key)) + for key, dest in connections.iteritems(): + resource, r_key = dest.split('.') + mappings[resource].append((r_key, key)) for resource, r_mappings in mappings.iteritems(): connect(resource, receiver, r_mappings)