Some signals/connections refactoring
This commit is contained in:
parent
06fe908b3f
commit
4de8384af3
51
x/signals.py
51
x/signals.py
@ -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)
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user