From e71a488f1c7ab7041b5c64f265a77e25e0503a54 Mon Sep 17 00:00:00 2001 From: mcapuccini Date: Mon, 23 May 2022 13:59:42 +0000 Subject: [PATCH 001/185] Add instructions to connect examples to distributed deployment --- examples/mnist-keras/.gitignore | 3 ++- examples/mnist-keras/README.md | 28 ++++++++++++++++++++++--- examples/mnist-keras/client/fedn.yaml | 4 ++-- examples/mnist-pytorch/.gitignore | 3 ++- examples/mnist-pytorch/README.md | 24 ++++++++++++++++++++- examples/mnist-pytorch/client/fedn.yaml | 4 ++-- 6 files changed, 56 insertions(+), 10 deletions(-) diff --git a/examples/mnist-keras/.gitignore b/examples/mnist-keras/.gitignore index 7d1e7c70d..4e531b135 100644 --- a/examples/mnist-keras/.gitignore +++ b/examples/mnist-keras/.gitignore @@ -2,4 +2,5 @@ data *.npz *.tgz *.tar.gz -.mnist-keras \ No newline at end of file +.mnist-keras +client.yaml \ No newline at end of file diff --git a/examples/mnist-keras/README.md b/examples/mnist-keras/README.md index 3bd4aefaa..b46c9cbc1 100644 --- a/examples/mnist-keras/README.md +++ b/examples/mnist-keras/README.md @@ -5,15 +5,16 @@ This classic example of hand-written text recognition is well suited both as a l - [MNIST Example (Keras version)](#mnist-example-keras-version) - [Table of Contents](#table-of-contents) - [Prerequisites](#prerequisites) - - [Running the example](#running-the-example) + - [Running the example (pseudo-distributed)](#running-the-example-pseudo-distributed) - [Clean up](#clean-up) + - [Connecting to a distributed deployment](#connecting-to-a-distributed-deployment) ## Prerequisites - [Docker](https://docs.docker.com/get-docker) - [Docker Compose](https://docs.docker.com/compose/install) - [Python 3.8](https://www.python.org/downloads) -## Running the example +## Running the example (pseudo-distributed) Clone FEDn and locate into this directory. ```sh git clone https://github.com/scaleoutsystems/fedn.git @@ -52,4 +53,25 @@ bin/build.sh Finally, you can start the experiment from the "control" tab. ## Clean up -You can clean up by running `docker-compose down`. \ No newline at end of file +You can clean up by running `docker-compose down`. + +## Connecting to a distributed deployment +To start and remotely connect a client with the required dependencies for this example, start by downloading the `client.yaml` file. You can either navigate the reducer UI or run the following command. + +```bash +curl -k https://:/config/download > client.yaml +``` +> **Note** make sure to replace `` and `` with appropriate values. + +Now you are ready to start the client via Docker by running the following command. + +```bash +docker run -d \ + -v $PWD/client.yaml:/app/client.yaml \ + -v $PWD/data:/var/data \ + -e ENTRYPOINT_OPTS=--data_path=/var/data/mnist.npz \ + --add-host=reducer: \ + --add-host=combiner: \ + ghcr.io/scaleoutsystems/fedn/fedn:develop-mnist-keras run client -in client.yaml +``` +> **Note** make sure to replace `` and `` with appropriate values. \ No newline at end of file diff --git a/examples/mnist-keras/client/fedn.yaml b/examples/mnist-keras/client/fedn.yaml index 6da6104bb..29c475270 100644 --- a/examples/mnist-keras/client/fedn.yaml +++ b/examples/mnist-keras/client/fedn.yaml @@ -1,5 +1,5 @@ entry_points: train: - command: /venv/bin/python entrypoint train + command: /venv/bin/python entrypoint train $ENTRYPOINT_OPTS validate: - command: /venv/bin/python entrypoint validate \ No newline at end of file + command: /venv/bin/python entrypoint validate $ENTRYPOINT_OPTS \ No newline at end of file diff --git a/examples/mnist-pytorch/.gitignore b/examples/mnist-pytorch/.gitignore index a2af3f0e2..a9f01054b 100644 --- a/examples/mnist-pytorch/.gitignore +++ b/examples/mnist-pytorch/.gitignore @@ -2,4 +2,5 @@ data *.npz *.tgz *.tar.gz -.mnist-pytorch \ No newline at end of file +.mnist-pytorch +client.yaml \ No newline at end of file diff --git a/examples/mnist-pytorch/README.md b/examples/mnist-pytorch/README.md index 5e14ac3d9..619074e03 100644 --- a/examples/mnist-pytorch/README.md +++ b/examples/mnist-pytorch/README.md @@ -7,6 +7,7 @@ This classic example of hand-written text recognition is well suited both as a l - [Prerequisites](#prerequisites) - [Running the example](#running-the-example) - [Clean up](#clean-up) + - [Connecting to a distributed deployment](#connecting-to-a-distributed-deployment) ## Prerequisites - [Docker](https://docs.docker.com/get-docker) @@ -46,4 +47,25 @@ bin/build.sh Finally, you can start the experiment from the "control" tab. ## Clean up -You can clean up by running `docker-compose down`. \ No newline at end of file +You can clean up by running `docker-compose down`. + +## Connecting to a distributed deployment +To start and remotely connect a client with the required dependencies for this example, start by downloading the `client.yaml` file. You can either navigate the reducer UI or run the following command. + +```bash +curl -k https://:/config/download > client.yaml +``` +> **Note** make sure to replace `` and `` with appropriate values. + +Now you are ready to start the client via Docker by running the following command. + +```bash +docker run -d \ + -v $PWD/client.yaml:/app/client.yaml \ + -v $PWD/data:/var/data \ + -e ENTRYPOINT_OPTS=--data_path=/var/data/mnist.npz \ + --add-host=reducer: \ + --add-host=combiner: \ + ghcr.io/scaleoutsystems/fedn/fedn:develop-mnist-pytorch run client -in client.yaml +``` +> **Note** make sure to replace `` and `` with appropriate values. \ No newline at end of file diff --git a/examples/mnist-pytorch/client/fedn.yaml b/examples/mnist-pytorch/client/fedn.yaml index 6da6104bb..29c475270 100644 --- a/examples/mnist-pytorch/client/fedn.yaml +++ b/examples/mnist-pytorch/client/fedn.yaml @@ -1,5 +1,5 @@ entry_points: train: - command: /venv/bin/python entrypoint train + command: /venv/bin/python entrypoint train $ENTRYPOINT_OPTS validate: - command: /venv/bin/python entrypoint validate \ No newline at end of file + command: /venv/bin/python entrypoint validate $ENTRYPOINT_OPTS \ No newline at end of file From 85f517db443559c2f9334099477809ef5e680905 Mon Sep 17 00:00:00 2001 From: Marco Capuccini Date: Tue, 24 May 2022 09:54:24 +0200 Subject: [PATCH 002/185] Update README.md --- examples/mnist-pytorch/README.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/examples/mnist-pytorch/README.md b/examples/mnist-pytorch/README.md index 619074e03..155ed281d 100644 --- a/examples/mnist-pytorch/README.md +++ b/examples/mnist-pytorch/README.md @@ -14,7 +14,7 @@ This classic example of hand-written text recognition is well suited both as a l - [Docker Compose](https://docs.docker.com/compose/install) - [Python 3.8](https://www.python.org/downloads) -## Running the example +## Running the example (pseudo-distributed) Start by initializing a virtual enviroment with all of the required dependencies. ``` bin/init_venv.sh @@ -68,4 +68,4 @@ docker run -d \ --add-host=combiner: \ ghcr.io/scaleoutsystems/fedn/fedn:develop-mnist-pytorch run client -in client.yaml ``` -> **Note** make sure to replace `` and `` with appropriate values. \ No newline at end of file +> **Note** make sure to replace `` and `` with appropriate values. From bfe8dc5f4033ef5a73b40f1732caa13fc132d052 Mon Sep 17 00:00:00 2001 From: Marco Capuccini Date: Tue, 24 May 2022 16:14:38 +0200 Subject: [PATCH 003/185] Update README.md --- examples/mnist-keras/README.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/examples/mnist-keras/README.md b/examples/mnist-keras/README.md index b46c9cbc1..85be27b94 100644 --- a/examples/mnist-keras/README.md +++ b/examples/mnist-keras/README.md @@ -70,8 +70,8 @@ docker run -d \ -v $PWD/client.yaml:/app/client.yaml \ -v $PWD/data:/var/data \ -e ENTRYPOINT_OPTS=--data_path=/var/data/mnist.npz \ - --add-host=reducer: \ - --add-host=combiner: \ + --add-host=reducer: \ + --add-host=combiner: \ ghcr.io/scaleoutsystems/fedn/fedn:develop-mnist-keras run client -in client.yaml ``` -> **Note** make sure to replace `` and `` with appropriate values. \ No newline at end of file +> **Note** make sure to replace `` and `` with appropriate values. From 989b0626fe01dfbdfa3b15e0f447711705556ec7 Mon Sep 17 00:00:00 2001 From: Marco Capuccini Date: Tue, 24 May 2022 16:15:14 +0200 Subject: [PATCH 004/185] Update README.md --- examples/mnist-pytorch/README.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/examples/mnist-pytorch/README.md b/examples/mnist-pytorch/README.md index 155ed281d..6337c3efb 100644 --- a/examples/mnist-pytorch/README.md +++ b/examples/mnist-pytorch/README.md @@ -64,8 +64,8 @@ docker run -d \ -v $PWD/client.yaml:/app/client.yaml \ -v $PWD/data:/var/data \ -e ENTRYPOINT_OPTS=--data_path=/var/data/mnist.npz \ - --add-host=reducer: \ - --add-host=combiner: \ + --add-host=reducer: \ + --add-host=combiner: \ ghcr.io/scaleoutsystems/fedn/fedn:develop-mnist-pytorch run client -in client.yaml ``` -> **Note** make sure to replace `` and `` with appropriate values. +> **Note** make sure to replace `` and `` with appropriate values. From 2a01be2739e4c1660765131ff12caf239f7cce30 Mon Sep 17 00:00:00 2001 From: mcapuccini Date: Mon, 30 May 2022 10:44:06 +0000 Subject: [PATCH 005/185] Formatting and sorting imports in Python files --- .ci/tests/examples/is_success.py | 5 +- .devcontainer/bin/init_venv.sh | 4 +- .devcontainer/devcontainer.json.tpl | 3 +- .github/workflows/code-checks.yaml | 27 +++ .vscode/settings.json | 6 + docs/source/conf.py | 1 + examples/mnist-keras/bin/get_data | 14 +- examples/mnist-keras/bin/split_data | 17 +- examples/mnist-keras/client/entrypoint | 43 ++-- examples/mnist-pytorch/bin/get_data | 17 +- examples/mnist-pytorch/bin/split_data | 21 +- examples/mnist-pytorch/client/entrypoint | 50 ++-- fedn/cli/__init__.py | 2 +- fedn/cli/control_cmd.py | 3 +- fedn/cli/main.py | 4 +- fedn/cli/run_cmd.py | 41 ++-- fedn/cli/tests/__init__.py | 1 - fedn/cli/tests/tests.py | 36 +-- fedn/fedn/__init__.py | 7 +- fedn/fedn/aggregators/aggregator.py | 16 +- fedn/fedn/aggregators/fedavg.py | 60 ++--- fedn/fedn/client.py | 217 ++++++++++-------- fedn/fedn/clients/combiner/modelservice.py | 15 +- fedn/fedn/clients/combiner/roundcontrol.py | 77 ++++--- fedn/fedn/clients/reducer/control.py | 57 +++-- fedn/fedn/clients/reducer/interfaces.py | 36 ++- fedn/fedn/clients/reducer/network.py | 11 +- fedn/fedn/clients/reducer/plots.py | 162 +++++++------ fedn/fedn/clients/reducer/restservice.py | 141 +++++++----- .../statestore/mongoreducerstatestore.py | 60 +++-- fedn/fedn/combiner.py | 125 +++++----- fedn/fedn/common/control/package.py | 39 ++-- fedn/fedn/common/net/connect.py | 31 +-- fedn/fedn/common/net/grpc/fedn_pb2.py | 2 +- fedn/fedn/common/net/grpc/fedn_pb2_grpc.py | 3 +- fedn/fedn/common/net/grpc/server.py | 11 +- fedn/fedn/common/net/web/__init__.py | 5 +- fedn/fedn/common/security/certificate.py | 9 +- .../common/security/certificatemanager.py | 6 +- .../storage/models/memorymodelstorage.py | 6 +- .../common/storage/models/tempmodelstorage.py | 6 +- fedn/fedn/common/storage/s3/miniorepo.py | 25 +- fedn/fedn/common/storage/s3/s3repo.py | 12 +- fedn/fedn/common/tracer/mongotracer.py | 42 ++-- fedn/fedn/reducer.py | 6 +- fedn/fedn/tests/test_reducer_service.py | 23 +- fedn/fedn/utils/dispatcher.py | 3 +- fedn/fedn/utils/helpers.py | 2 +- fedn/fedn/utils/kerashelper.py | 4 +- fedn/fedn/utils/logger.py | 3 +- fedn/fedn/utils/numpyarrayhelper.py | 6 +- fedn/fedn/utils/process.py | 5 +- fedn/fedn/utils/pytorchhelper.py | 4 +- fedn/setup.py | 2 +- 54 files changed, 907 insertions(+), 627 deletions(-) create mode 100644 .github/workflows/code-checks.yaml create mode 100644 .vscode/settings.json diff --git a/.ci/tests/examples/is_success.py b/.ci/tests/examples/is_success.py index 90cb7c1c2..0e52dba5a 100644 --- a/.ci/tests/examples/is_success.py +++ b/.ci/tests/examples/is_success.py @@ -1,6 +1,7 @@ -import pymongo -from time import sleep import sys +from time import sleep + +import pymongo N_ROUNDS = 3 RETRIES= 6 diff --git a/.devcontainer/bin/init_venv.sh b/.devcontainer/bin/init_venv.sh index 4c5dcdf51..24e4d84c2 100755 --- a/.devcontainer/bin/init_venv.sh +++ b/.devcontainer/bin/init_venv.sh @@ -9,5 +9,7 @@ python -m venv .venv .venv/bin/pip install \ sphinx==4.4.0 \ sphinx_press_theme==0.8.0 \ - sphinx-autobuild==2021.3.14 + sphinx-autobuild==2021.3.14 \ + autopep8==1.5.7 \ + isort==5.10.1 .venv/bin/pip install -e fedn \ No newline at end of file diff --git a/.devcontainer/devcontainer.json.tpl b/.devcontainer/devcontainer.json.tpl index de392db69..3a09b005f 100644 --- a/.devcontainer/devcontainer.json.tpl +++ b/.devcontainer/devcontainer.json.tpl @@ -9,7 +9,8 @@ "ms-azuretools.vscode-docker", "ms-python.python", "exiasr.hadolint", - "yzhang.markdown-all-in-one" + "yzhang.markdown-all-in-one", + "ms-python.isort" ], "mounts": [ "source=/var/run/docker.sock,target=/var/run/docker.sock,type=bind,consistency=default", diff --git a/.github/workflows/code-checks.yaml b/.github/workflows/code-checks.yaml new file mode 100644 index 000000000..a21a3305c --- /dev/null +++ b/.github/workflows/code-checks.yaml @@ -0,0 +1,27 @@ +name: "code checks" + +on: push + +jobs: + code-checks: + runs-on: ubuntu-20.04 + steps: + - name: checkout + uses: actions/checkout@v2 + + - name: check Python imports + run: > + isort . --check --diff + --skip .venv + --skip .mnist-keras + --skip .mnist-pytorch + + - name: check Python formatting + run: > + autopep8 --recursive --diff + --exclude .venv + --exclude .mnist-keras + --exclude .mnist-pytorch + . + + # TODO: add linting/formatting for all file types \ No newline at end of file diff --git a/.vscode/settings.json b/.vscode/settings.json new file mode 100644 index 000000000..35fa1902d --- /dev/null +++ b/.vscode/settings.json @@ -0,0 +1,6 @@ +{ + "editor.formatOnSave": true, + "editor.codeActionsOnSave": { + "source.organizeImports": true + }, +} \ No newline at end of file diff --git a/docs/source/conf.py b/docs/source/conf.py index c05432ccf..cc3543318 100644 --- a/docs/source/conf.py +++ b/docs/source/conf.py @@ -12,6 +12,7 @@ # import os import sys + sys.path.insert(0, os.path.abspath('../../fedn')) diff --git a/examples/mnist-keras/bin/get_data b/examples/mnist-keras/bin/get_data index 0faf8c04f..4c449d03e 100755 --- a/examples/mnist-keras/bin/get_data +++ b/examples/mnist-keras/bin/get_data @@ -1,17 +1,21 @@ #!./.mnist-keras/bin/python +import os + import fire -import tensorflow as tf import numpy as np -import os +import tensorflow as tf + def get_data(out_dir='data'): # Make dir if necessary if not os.path.exists(out_dir): os.mkdir(out_dir) - + # Download data (x_train, y_train), (x_test, y_test) = tf.keras.datasets.mnist.load_data() - np.savez(f'{out_dir}/mnist.npz', x_train=x_train, y_train=y_train, x_test=x_test, y_test=y_test) + np.savez(f'{out_dir}/mnist.npz', x_train=x_train, + y_train=y_train, x_test=x_test, y_test=y_test) + if __name__ == '__main__': - fire.Fire(get_data) \ No newline at end of file + fire.Fire(get_data) diff --git a/examples/mnist-keras/bin/split_data b/examples/mnist-keras/bin/split_data index 035bdc449..bb583b6d7 100755 --- a/examples/mnist-keras/bin/split_data +++ b/examples/mnist-keras/bin/split_data @@ -1,8 +1,10 @@ #!./.mnist-keras/bin/python import os -import numpy as np from math import floor + import fire +import numpy as np + def splitset(dataset, parts): n = dataset.shape[0] @@ -26,14 +28,15 @@ def split(dataset='data/mnist.npz', outdir='data', n_splits=2): # Make splits for i in range(n_splits): - subdir=f'{outdir}/clients/{str(i+1)}' + subdir = f'{outdir}/clients/{str(i+1)}' if not os.path.exists(subdir): os.mkdir(subdir) np.savez(f'{subdir}/mnist.npz', - x_train=data['x_train'][i], - y_train=data['y_train'][i], - x_test=data['x_test'][i], - y_test=data['y_test'][i]) + x_train=data['x_train'][i], + y_train=data['y_train'][i], + x_test=data['x_test'][i], + y_test=data['y_test'][i]) + if __name__ == '__main__': - fire.Fire(split) \ No newline at end of file + fire.Fire(split) diff --git a/examples/mnist-keras/client/entrypoint b/examples/mnist-keras/client/entrypoint index 7fef1eb18..e9609f2ca 100755 --- a/examples/mnist-keras/client/entrypoint +++ b/examples/mnist-keras/client/entrypoint @@ -1,23 +1,27 @@ #!./.mnist-keras/bin/python -import tensorflow as tf -import numpy as np -from fedn.utils.kerashelper import KerasHelper -import fire import json -import docker import os -NUM_CLASSES=10 +import docker +import fire +import numpy as np +import tensorflow as tf + +from fedn.utils.kerashelper import KerasHelper + +NUM_CLASSES = 10 + def _get_data_path(): # Figure out FEDn client number from container name client = docker.from_env() container = client.containers.get(os.environ['HOSTNAME']) number = container.name[-1] - + # Return data path return f"/var/data/clients/{number}/mnist.npz" + def _compile_model(img_rows=28, img_cols=28): # Set input shape input_shape = (img_rows, img_cols, 1) @@ -30,10 +34,11 @@ def _compile_model(img_rows=28, img_cols=28): model.add(tf.keras.layers.Dense(32, activation='relu')) model.add(tf.keras.layers.Dense(NUM_CLASSES, activation='softmax')) model.compile(loss=tf.keras.losses.categorical_crossentropy, - optimizer=tf.keras.optimizers.Adam(), - metrics=['accuracy']) + optimizer=tf.keras.optimizers.Adam(), + metrics=['accuracy']) return model + def _load_data(data_path, is_train=True): # Load data if data_path is None: @@ -50,16 +55,18 @@ def _load_data(data_path, is_train=True): # Normalize X = X.astype('float32') - X = np.expand_dims(X,-1) + X = np.expand_dims(X, -1) X = X / 255 y = tf.keras.utils.to_categorical(y, NUM_CLASSES) return X, y + def init_seed(out_path='seed.npz'): - weights = _compile_model().get_weights() - helper = KerasHelper() - helper.save_model(weights, out_path) + weights = _compile_model().get_weights() + helper = KerasHelper() + helper.save_model(weights, out_path) + def train(in_model_path, out_model_path, data_path=None, batch_size=32, epochs=1): # Load data @@ -73,11 +80,12 @@ def train(in_model_path, out_model_path, data_path=None, batch_size=32, epochs=1 # Train model.fit(x_train, y_train, batch_size=batch_size, epochs=epochs) - + # Save weights = model.get_weights() helper.save_model(weights, out_model_path) + def validate(in_model_path, out_json_path, data_path=None): # Load data x_train, y_train = _load_data(data_path) @@ -104,13 +112,14 @@ def validate(in_model_path, out_json_path, data_path=None): } # Save JSON - with open(out_json_path,"w") as fh: + with open(out_json_path, "w") as fh: fh.write(json.dumps(report)) + if __name__ == '__main__': fire.Fire({ 'init_seed': init_seed, 'train': train, 'validate': validate, - '_get_data_path': _get_data_path, # for testing - }) \ No newline at end of file + '_get_data_path': _get_data_path, # for testing + }) diff --git a/examples/mnist-pytorch/bin/get_data b/examples/mnist-pytorch/bin/get_data index 72b775433..abe8a7197 100755 --- a/examples/mnist-pytorch/bin/get_data +++ b/examples/mnist-pytorch/bin/get_data @@ -1,17 +1,22 @@ #!./.mnist-pytorch/bin/python +import os + import fire -import torchvision import numpy as np -import os +import torchvision + def get_data(out_dir='data'): # Make dir if necessary if not os.path.exists(out_dir): os.mkdir(out_dir) - + # Download data - torchvision.datasets.MNIST(root=f'{out_dir}/train', transform=torchvision.transforms.ToTensor, train=True, download=True) - torchvision.datasets.MNIST(root=f'{out_dir}/test', transform=torchvision.transforms.ToTensor, train=False, download=True) + torchvision.datasets.MNIST( + root=f'{out_dir}/train', transform=torchvision.transforms.ToTensor, train=True, download=True) + torchvision.datasets.MNIST( + root=f'{out_dir}/test', transform=torchvision.transforms.ToTensor, train=False, download=True) + if __name__ == '__main__': - fire.Fire(get_data) \ No newline at end of file + fire.Fire(get_data) diff --git a/examples/mnist-pytorch/bin/split_data b/examples/mnist-pytorch/bin/split_data index b884c054e..51e38b4d4 100755 --- a/examples/mnist-pytorch/bin/split_data +++ b/examples/mnist-pytorch/bin/split_data @@ -1,9 +1,11 @@ #!./.mnist-pytorch/bin/python -import torchvision -import torch +import os from math import floor + import fire -import os +import torch +import torchvision + def splitset(dataset, parts): n = dataset.shape[0] @@ -20,8 +22,10 @@ def split(out_dir='data', n_splits=2): os.mkdir(f'{out_dir}/clients') # Load and convert to dict - train_data = torchvision.datasets.MNIST(root=f'{out_dir}/train', transform=torchvision.transforms.ToTensor, train=True) - test_data = torchvision.datasets.MNIST(root=f'{out_dir}/test', transform=torchvision.transforms.ToTensor, train=False) + train_data = torchvision.datasets.MNIST( + root=f'{out_dir}/train', transform=torchvision.transforms.ToTensor, train=True) + test_data = torchvision.datasets.MNIST( + root=f'{out_dir}/test', transform=torchvision.transforms.ToTensor, train=False) data = { 'x_train': splitset(train_data.data, n_splits), 'y_train': splitset(train_data.targets, n_splits), @@ -31,7 +35,7 @@ def split(out_dir='data', n_splits=2): # Make splits for i in range(n_splits): - subdir=f'{out_dir}/clients/{str(i+1)}' + subdir = f'{out_dir}/clients/{str(i+1)}' if not os.path.exists(subdir): os.mkdir(subdir) torch.save({ @@ -40,7 +44,8 @@ def split(out_dir='data', n_splits=2): 'x_test': data['x_test'][i], 'y_test': data['y_test'][i], }, - f'{subdir}/mnist.pt') + f'{subdir}/mnist.pt') + if __name__ == '__main__': - fire.Fire(split) \ No newline at end of file + fire.Fire(split) diff --git a/examples/mnist-pytorch/client/entrypoint b/examples/mnist-pytorch/client/entrypoint index d56fb7e66..429ca268a 100755 --- a/examples/mnist-pytorch/client/entrypoint +++ b/examples/mnist-pytorch/client/entrypoint @@ -1,24 +1,28 @@ #!./.mnist-pytorch/bin/python -import torch -from fedn.utils.pytorchhelper import PytorchHelper -import fire -import json -import docker -import os import collections +import json import math +import os + +import docker +import fire +import torch + +from fedn.utils.pytorchhelper import PytorchHelper + +NUM_CLASSES = 10 -NUM_CLASSES=10 def _get_data_path(): # Figure out FEDn client number from container name client = docker.from_env() container = client.containers.get(os.environ['HOSTNAME']) number = container.name[-1] - + # Return data path return f"/var/data/clients/{number}/mnist.pt" + def _compile_model(): # Define model class Net(torch.nn.Module): @@ -38,6 +42,7 @@ def _compile_model(): # Return model return Net() + def _load_data(data_path, is_train=True): # Load data if data_path is None: @@ -57,6 +62,7 @@ def _load_data(data_path, is_train=True): return X, y + def _save_model(model, out_path): weights = model.state_dict() weights_np = collections.OrderedDict() @@ -65,6 +71,7 @@ def _save_model(model, out_path): helper = PytorchHelper() helper.save_model(weights, out_path) + def _load_model(model_path): helper = PytorchHelper() weights_np = helper.load_model(model_path) @@ -76,11 +83,13 @@ def _load_model(model_path): model.eval() return model + def init_seed(out_path='seed.npz'): # Init and save - model = _compile_model() + model = _compile_model() _save_model(model, out_path) + def train(in_model_path, out_model_path, data_path=None, batch_size=32, epochs=1, lr=0.01): # Load data x_train, y_train = _load_data(data_path) @@ -92,8 +101,8 @@ def train(in_model_path, out_model_path, data_path=None, batch_size=32, epochs=1 optimizer = torch.optim.SGD(model.parameters(), lr=lr) n_batches = int(math.ceil(len(x_train) / batch_size)) criterion = torch.nn.NLLLoss() - for e in range(epochs): # epoch loop - for b in range(n_batches): # batch loop + for e in range(epochs): # epoch loop + for b in range(n_batches): # batch loop # Retrieve current batch batch_x = x_train[b * batch_size:(b + 1) * batch_size] batch_y = y_train[b * batch_size:(b + 1) * batch_size] @@ -104,12 +113,14 @@ def train(in_model_path, out_model_path, data_path=None, batch_size=32, epochs=1 loss.backward() optimizer.step() # Log - if b % 100 == 0: - print(f"Epoch {e}/{epochs-1} | Batch: {b}/{n_batches-1} | Loss: {loss.item()}") + if b % 100 == 0: + print( + f"Epoch {e}/{epochs-1} | Batch: {b}/{n_batches-1} | Loss: {loss.item()}") # Save _save_model(model, out_model_path) + def validate(in_model_path, out_json_path, data_path=None): # Load data x_train, y_train = _load_data(data_path) @@ -123,10 +134,12 @@ def validate(in_model_path, out_json_path, data_path=None): with torch.no_grad(): train_out = model(x_train) training_loss = criterion(train_out, y_train) - training_accuracy = torch.sum(torch.argmax(train_out, dim=1) == y_train) / len(train_out) + training_accuracy = torch.sum(torch.argmax( + train_out, dim=1) == y_train) / len(train_out) test_out = model(x_test) test_loss = criterion(test_out, y_test) - test_accuracy = torch.sum(torch.argmax(test_out, dim=1) == y_test) / len(test_out) + test_accuracy = torch.sum(torch.argmax( + test_out, dim=1) == y_test) / len(test_out) # JSON schema report = { @@ -137,13 +150,14 @@ def validate(in_model_path, out_json_path, data_path=None): } # Save JSON - with open(out_json_path,"w") as fh: + with open(out_json_path, "w") as fh: fh.write(json.dumps(report)) + if __name__ == '__main__': fire.Fire({ 'init_seed': init_seed, 'train': train, 'validate': validate, - '_get_data_path': _get_data_path, # for testing - }) \ No newline at end of file + '_get_data_path': _get_data_path, # for testing + }) diff --git a/fedn/cli/__init__.py b/fedn/cli/__init__.py index 4048eb69c..dbea41de3 100644 --- a/fedn/cli/__init__.py +++ b/fedn/cli/__init__.py @@ -1,3 +1,3 @@ +from .control_cmd import control_cmd from .main import main from .run_cmd import run_cmd -from .control_cmd import control_cmd diff --git a/fedn/cli/control_cmd.py b/fedn/cli/control_cmd.py index a1114c1ed..ecfa631f5 100644 --- a/fedn/cli/control_cmd.py +++ b/fedn/cli/control_cmd.py @@ -44,7 +44,8 @@ def package_cmd(ctx, reducer, port, token, name, upload, validate, cwd): if not name: from datetime import datetime - name = str(os.path.basename(cwd)) + '-' + datetime.today().strftime('%Y-%m-%d-%H%M%S') + name = str(os.path.basename(cwd)) + '-' + \ + datetime.today().strftime('%Y-%m-%d-%H%M%S') config = {'host': reducer, 'port': port, 'token': token, 'name': name, 'cwd': cwd} diff --git a/fedn/cli/main.py b/fedn/cli/main.py index bfaa3b95f..cc33c579b 100644 --- a/fedn/cli/main.py +++ b/fedn/cli/main.py @@ -1,7 +1,7 @@ -import click - import logging +import click + logging.basicConfig(format='%(asctime)s [%(filename)s:%(lineno)d] %(message)s', datefmt='%m/%d/%Y %I:%M:%S %p') # , level=logging.DEBUG) diff --git a/fedn/cli/run_cmd.py b/fedn/cli/run_cmd.py index e87b7bd85..0e6766325 100644 --- a/fedn/cli/run_cmd.py +++ b/fedn/cli/run_cmd.py @@ -1,10 +1,15 @@ -import click +import time import uuid + +import click import yaml -import time -from fedn.clients.reducer.restservice import encode_auth_token, decode_auth_token + +from fedn.clients.reducer.restservice import (decode_auth_token, + encode_auth_token) + from .main import main + def get_statestore_config_from_file(init): """ @@ -18,6 +23,7 @@ def get_statestore_config_from_file(init): except yaml.YAMLError as e: raise (e) + def check_helper_config_file(config): control = config['control'] try: @@ -27,6 +33,7 @@ def check_helper_config_file(config): exit(-1) return helper + @main.group('run') @click.pass_context def run_cmd(ctx): @@ -57,8 +64,8 @@ def run_cmd(ctx): help='Set to a filename to (re)init client from file state.') @click.option('-l', '--logfile', required=False, default='{}-client.log'.format(time.strftime("%Y%m%d-%H%M%S")), help='Set logfile for client log to file.') -@click.option('--heartbeat-interval',required=False, default=2) -@click.option('--reconnect-after-missed-heartbeat',required=False, default=30) +@click.option('--heartbeat-interval', required=False, default=2) +@click.option('--reconnect-after-missed-heartbeat', required=False, default=30) @click.pass_context def client_cmd(ctx, discoverhost, discoverport, token, name, client_id, local_package, dry_run, secure, preshared_cert, verify_cert, preferred_combiner, validator, trainer, init, logfile, heartbeat_interval, reconnect_after_missed_heartbeat): @@ -86,7 +93,7 @@ def client_cmd(ctx, discoverhost, discoverport, token, name, client_id, local_pa config = {'discover_host': discoverhost, 'discover_port': discoverport, 'token': token, 'name': name, 'client_id': client_id, 'remote_compute_context': remote, 'dry_run': dry_run, 'secure': secure, 'preshared_cert': preshared_cert, 'verify_cert': verify_cert, 'preferred_combiner': preferred_combiner, - 'validator': validator, 'trainer': trainer, 'init': init, 'logfile': logfile,'heartbeat_interval': heartbeat_interval, + 'validator': validator, 'trainer': trainer, 'init': init, 'logfile': logfile, 'heartbeat_interval': heartbeat_interval, 'reconnect_after_missed_heartbeat': 30} if config['init']: @@ -109,7 +116,8 @@ def client_cmd(ctx, discoverhost, discoverport, token, name, client_id, local_pa config['discover_host'] == '' or \ config['discover_host'] is None or \ config['discover_port'] == '': - print("Missing required configuration: discover_host, discover_port", flush=True) + print( + "Missing required configuration: discover_host, discover_port", flush=True) return except Exception as e: print("Could not load config appropriately. Check config", flush=True) @@ -140,7 +148,7 @@ def reducer_cmd(ctx, discoverhost, discoverport, secret_key, local_package, name :param init: """ remote = False if local_package else True - config = {'discover_host': discoverhost, 'discover_port': discoverport, 'secret_key': secret_key, 'name': name, + config = {'discover_host': discoverhost, 'discover_port': discoverport, 'secret_key': secret_key, 'name': name, 'remote_compute_context': remote, 'init': init} # Read settings from config file @@ -151,10 +159,10 @@ def reducer_cmd(ctx, discoverhost, discoverport, secret_key, local_package, name print('Failed to read config from settings file, exiting.', flush=True) print(e, flush=True) exit(-1) - + if not remote: helper = check_helper_config_file(fedn_config) - + try: network_id = fedn_config['network_id'] except KeyError: @@ -163,21 +171,22 @@ def reducer_cmd(ctx, discoverhost, discoverport, secret_key, local_package, name statestore_config = fedn_config['statestore'] if statestore_config['type'] == 'MongoDB': - from fedn.clients.reducer.statestore.mongoreducerstatestore import MongoReducerStateStore - statestore = MongoReducerStateStore(network_id, statestore_config['mongo_config'], defaults=config['init']) + from fedn.clients.reducer.statestore.mongoreducerstatestore import \ + MongoReducerStateStore + statestore = MongoReducerStateStore( + network_id, statestore_config['mongo_config'], defaults=config['init']) else: print("Unsupported statestore type, exiting. ", flush=True) exit(-1) - if config['secret_key']: - # If we already have a valid token in statestore config, use that one. + # If we already have a valid token in statestore config, use that one. existing_config = statestore.get_reducer() - if existing_config: + if existing_config: try: existing_config = statestore.get_reducer() current_token = existing_config['token'] - status = decode_auth_token(current_token,config['secret_key']) + status = decode_auth_token(current_token, config['secret_key']) if status != 'Success': token = encode_auth_token(config['secret_key']) config['token'] = token diff --git a/fedn/cli/tests/__init__.py b/fedn/cli/tests/__init__.py index 8b1378917..e69de29bb 100644 --- a/fedn/cli/tests/__init__.py +++ b/fedn/cli/tests/__init__.py @@ -1 +0,0 @@ - diff --git a/fedn/cli/tests/tests.py b/fedn/cli/tests/tests.py index ece34396a..4c71c3816 100644 --- a/fedn/cli/tests/tests.py +++ b/fedn/cli/tests/tests.py @@ -1,10 +1,12 @@ import unittest from unittest.mock import MagicMock, patch +from uuid import UUID + import yaml from click.testing import CliRunner -from uuid import UUID from run_cmd import check_helper_config_file + class TestReducerCLI(unittest.TestCase): def setUp(self): @@ -12,11 +14,11 @@ def setUp(self): self.INIT_FILE_REDUCER = { "network_id": "fedn-test-network", "token": "fedn_token", - "control":{ + "control": { "state": "idle", "helper": "keras", }, - "statestore":{ + "statestore": { "type": "MongoDB", "mongo_config": { "username": "fedn_admin", @@ -25,9 +27,9 @@ def setUp(self): "port": "6534" } }, - "storage":{ + "storage": { "storage_type": "S3", - "storage_config":{ + "storage_config": { "storage_hostname": "minio", "storage_port": "9000", "storage_access_key": "fedn_admin", @@ -38,36 +40,36 @@ def setUp(self): } } } - + @unittest.skip def test_get_statestore_config_from_file(self): pass - # def test_reducer_cmd_remote(self): - + # with self.runner.isolated_filesystem(): - + # COPY_INIT_FILE = self.INIT_FILE_REDUCER # del COPY_INIT_FILE["control"]["helper"] # with open('settings.yaml', 'w') as f: - # f.write(yaml.dump(COPY_INIT_FILE)) - + # f.write(yaml.dump(COPY_INIT_FILE)) + # result = self.runner.invoke(reducer_cmd, ['--remote', False, '--init',"settings.yaml"]) # self.assertEqual(result.output, "--remote was set to False, but no helper was found in --init settings file: settings.yaml\n") # self.assertEqual(result.exit_code, -1) def test_check_helper_config_file(self): - - self.assertEqual(check_helper_config_file(self.INIT_FILE_REDUCER), "keras") - + + self.assertEqual(check_helper_config_file( + self.INIT_FILE_REDUCER), "keras") + COPY_INIT_FILE = self.INIT_FILE_REDUCER del COPY_INIT_FILE["control"]["helper"] - + with self.assertRaises(SystemExit): helper = check_helper_config_file(COPY_INIT_FILE) - + if __name__ == '__main__': - unittest.main() \ No newline at end of file + unittest.main() diff --git a/fedn/fedn/__init__.py b/fedn/fedn/__init__.py index 7fe596081..c28090431 100644 --- a/fedn/fedn/__init__.py +++ b/fedn/fedn/__init__.py @@ -1,10 +1,11 @@ -from os.path import dirname, basename, isfile +import os import glob +from os.path import basename, dirname, isfile modules = glob.glob(dirname(__file__) + "/*.py") -__all__ = [basename(f)[:-3] for f in modules if isfile(f) and not f.endswith('__init__.py')] +__all__ = [basename(f)[:-3] for f in modules if isfile(f) + and not f.endswith('__init__.py')] -import os _ROOT = os.path.abspath(os.path.dirname(__file__)) diff --git a/fedn/fedn/aggregators/aggregator.py b/fedn/fedn/aggregators/aggregator.py index 1af0f6640..3e7b3bd20 100644 --- a/fedn/fedn/aggregators/aggregator.py +++ b/fedn/fedn/aggregators/aggregator.py @@ -1,14 +1,14 @@ import collections -from abc import ABC, abstractmethod import os import tempfile +from abc import ABC, abstractmethod class AggregatorBase(ABC): """ Abstract class defining helpers. """ @abstractmethod - def __init__(self, id, storage, server, modelservice, control): + def __init__(self, id, storage, server, modelservice, control): """ """ self.name = "" self.storage = storage @@ -28,14 +28,14 @@ def on_model_validation(self, validation): @abstractmethod def combine_models(self, nr_expected_models=None, nr_required_models=1, helper=None, timeout=180): pass - - -#def get_aggregator(aggregator_type): -# """ Return an instance of the aggregator class. + + +# def get_aggregator(aggregator_type): +# """ Return an instance of the aggregator class. # # :param aggregator_type (str): The aggregator type ('fedavg') -# :return: +# :return: # """ # if helper_type == 'fedavg': # from fedn.aggregators.fedavg import FedAvgAggregator -# return FedAvgAggregator() \ No newline at end of file +# return FedAvgAggregator() diff --git a/fedn/fedn/aggregators/fedavg.py b/fedn/fedn/aggregators/fedavg.py index d928adbce..034e22a70 100644 --- a/fedn/fedn/aggregators/fedavg.py +++ b/fedn/fedn/aggregators/fedavg.py @@ -1,18 +1,19 @@ import json import os import queue +import sys import tempfile import time import uuid -import sys import fedn.common.net.grpc.fedn_pb2 as fedn -from fedn.utils.helpers import get_helper from fedn.aggregators.aggregator import AggregatorBase +from fedn.utils.helpers import get_helper + class FedAvgAggregator(AggregatorBase): """ Local SGD / Federated Averaging (FedAvg) aggregator. - + :param id: A reference to id of :class: `fedn.combiner.Combiner` :type id: str :param storage: Model repository for :class: `fedn.combiner.Combiner` @@ -30,8 +31,8 @@ def __init__(self, id, storage, server, modelservice, control): """Constructor method """ - super().__init__(id,storage, server, modelservice, control) - + super().__init__(id, storage, server, modelservice, control) + self.name = "FedAvg" self.validations = {} self.model_updates = queue.Queue() @@ -40,19 +41,19 @@ def on_model_update(self, model_id): """Callback when a new model update is recieved from a client. Performs (optional) pre-processing and the puts the update id on the aggregation queue. - + :param model_id: ID of model update :type model_id: str """ try: self.server.report_status("AGGREGATOR({}): callback received model {}".format(self.name, model_id), - log_level=fedn.Status.INFO) + log_level=fedn.Status.INFO) # Push the model update to the processing queue self.model_updates.put(model_id) except Exception as e: self.server.report_status("AGGREGATOR({}): Failed to receive candidate model! {}".format(self.name, e), - log_level=fedn.Status.WARNING) + log_level=fedn.Status.WARNING) pass def on_model_validation(self, validation): @@ -63,10 +64,10 @@ def on_model_validation(self, validation): :type validation: dict """ - # Currently, the validations are actually sent as status messages + # Currently, the validations are actually sent as status messages # directly in the client, so here we are just storing them in the - # combiner memory. This will need to be refactored later so that this - # callback is responsible for reporting the validation to the db. + # combiner memory. This will need to be refactored later so that this + # callback is responsible for reporting the validation to the db. model_id = validation.model_id data = json.loads(validation.data) @@ -76,8 +77,7 @@ def on_model_validation(self, validation): self.validations[model_id] = [data] self.server.report_status("AGGREGATOR({}): callback processed validation {}".format(self.name, validation.model_id), - log_level=fedn.Status.INFO) - + log_level=fedn.Status.INFO) def combine_models(self, nr_expected_models=None, nr_required_models=1, helper=None, timeout=180): """Compute a running average of model updates. @@ -94,12 +94,12 @@ def combine_models(self, nr_expected_models=None, nr_required_models=1, helper=N :rtype: tuple """ - data = {} data['time_model_load'] = 0.0 data['time_model_aggregation'] = 0.0 - self.server.report_status("AGGREGATOR({}): Aggregating model updates...".format(self.name)) + self.server.report_status( + "AGGREGATOR({}): Aggregating model updates...".format(self.name)) round_time = 0.0 polling_interval = 1.0 @@ -107,46 +107,52 @@ def combine_models(self, nr_expected_models=None, nr_required_models=1, helper=N while nr_processed_models < nr_expected_models: try: model_id = self.model_updates.get(block=False) - self.server.report_status("AGGREGATOR({}): Received model update with id {}".format(self.name, model_id)) + self.server.report_status( + "AGGREGATOR({}): Received model update with id {}".format(self.name, model_id)) # Load the model update from disk tic = time.time() model_str = self.control.load_model_fault_tolerant(model_id) if model_str: try: - model_next = helper.load_model_from_BytesIO(model_str.getbuffer()) + model_next = helper.load_model_from_BytesIO( + model_str.getbuffer()) except IOError: - self.server.report_status("AGGREGATOR({}): Failed to load model!".format(self.name)) - else: + self.server.report_status( + "AGGREGATOR({}): Failed to load model!".format(self.name)) + else: raise data['time_model_load'] += time.time() - tic - # Aggregate / reduce + # Aggregate / reduce tic = time.time() if nr_processed_models == 0: model = model_next else: - model = helper.increment_average(model, model_next, nr_processed_models + 1) + model = helper.increment_average( + model, model_next, nr_processed_models + 1) data['time_model_aggregation'] += time.time() - tic nr_processed_models += 1 self.model_updates.task_done() except queue.Empty: - self.server.report_status("AGGREGATOR({}): waiting for model updates: {} of {} completed.".format(self.name, + self.server.report_status("AGGREGATOR({}): waiting for model updates: {} of {} completed.".format(self.name, nr_processed_models, nr_expected_models)) time.sleep(polling_interval) round_time += polling_interval except Exception as e: - self.server.report_status("AGGERGATOR({}): Error encoutered while reading model update, skipping this update. {}".format(self.name, e)) + self.server.report_status( + "AGGERGATOR({}): Error encoutered while reading model update, skipping this update. {}".format(self.name, e)) nr_expected_models -= 1 if nr_expected_models <= 0: return None, data self.model_updates.task_done() - + if round_time >= timeout: - self.server.report_status("AGGREGATOR({}): training round timed out.".format(self.name), log_level=fedn.Status.WARNING) - # TODO: Generalize policy for what to do in case of timeout. + self.server.report_status("AGGREGATOR({}): training round timed out.".format( + self.name), log_level=fedn.Status.WARNING) + # TODO: Generalize policy for what to do in case of timeout. if nr_processed_models >= nr_required_models: break else: @@ -155,5 +161,5 @@ def combine_models(self, nr_expected_models=None, nr_required_models=1, helper=N data['nr_successful_updates'] = nr_processed_models self.server.report_status("AGGREGATOR({}): Training round completed, aggregated {} models.".format(self.name, nr_processed_models), - log_level=fedn.Status.INFO) + log_level=fedn.Status.INFO) return model, data diff --git a/fedn/fedn/client.py b/fedn/fedn/client.py index f86e1bb28..e6ffdc5c3 100644 --- a/fedn/fedn/client.py +++ b/fedn/fedn/client.py @@ -1,44 +1,41 @@ +from datetime import datetime +import io import json import os +import queue import sys -import io -import uuid import tempfile -import threading, queue +import threading import time -from aiohttp import client +import uuid import grpc +from aiohttp import client import fedn.common.net.grpc.fedn_pb2 as fedn import fedn.common.net.grpc.fedn_pb2_grpc as rpc -from fedn.common.net.connect import ConnectorClient, Status +from fedn.clients.client.state import ClientState, ClientStateToString from fedn.common.control.package import PackageRuntime - -from fedn.utils.logger import Logger -from fedn.utils.helpers import get_helper - +from fedn.common.net.connect import ConnectorClient, Status # TODO Remove from this level. Abstract to unified non implementation specific client. from fedn.utils.dispatcher import Dispatcher - -from fedn.clients.client.state import ClientState, ClientStateToString +from fedn.utils.helpers import get_helper +from fedn.utils.logger import Logger CHUNK_SIZE = 1024 * 1024 -from datetime import datetime - class Client: """FEDn Client. Service running on client/datanodes in a federation, recieving and handling model update and model validation requests. - + Attibutes --------- config: dict A configuration dictionary containing connection information for the discovery service (controller) and settings governing e.g. client-combiner assignment behavior. - + """ def __init__(self, config): @@ -54,8 +51,8 @@ def __init__(self, config): self.state = None self.error_state = False self._attached = False - self._missed_heartbeat=0 - self.config = config + self._missed_heartbeat = 0 + self.config = config self.connector = ConnectorClient(config['discover_host'], config['discover_port'], @@ -67,13 +64,14 @@ def __init__(self, config): secure=config['secure'], preshared_cert=config['preshared_cert'], verify_cert=config['verify_cert']) - + self.name = config['name'] dirname = time.strftime("%Y%m%d-%H%M%S") self.run_path = os.path.join(os.getcwd(), dirname) os.mkdir(self.run_path) - self.logger = Logger(to_file=config['logfile'], file_path=self.run_path) + self.logger = Logger( + to_file=config['logfile'], file_path=self.run_path) self.started_at = datetime.now() self.logs = [] @@ -81,21 +79,22 @@ def __init__(self, config): # Attach to the FEDn network (get combiner) client_config = self._attach() - + self._initialize_dispatcher(config) self._initialize_helper(client_config) if not self.helper: - print("Failed to retrive helper class settings! {}".format(client_config), flush=True) + print("Failed to retrive helper class settings! {}".format( + client_config), flush=True) self._subscribe_to_combiner(config) self.state = ClientState.idle def _detach(self): - # Setting _attached to False will make all processing threads return + # Setting _attached to False will make all processing threads return if not self._attached: - print("Client is not attached.",flush=True) + print("Client is not attached.", flush=True) self._attached = False # Close gRPC connection to combiner @@ -104,35 +103,38 @@ def _detach(self): def _attach(self): """ """ # Ask controller for a combiner and connect to that combiner. - if self._attached: - print("Client is already attached. ",flush=True) + if self._attached: + print("Client is already attached. ", flush=True) return None client_config = self._assign() self._connect(client_config) - if client_config: - self._attached=True + if client_config: + self._attached = True return client_config - def _initialize_helper(self,client_config): - + def _initialize_helper(self, client_config): + if 'model_type' in client_config.keys(): self.helper = get_helper(client_config['model_type']) - def _subscribe_to_combiner(self,config): + def _subscribe_to_combiner(self, config): """Listen to combiner message stream and start all processing threads. - + """ - # Start sending heartbeats to the combiner. - threading.Thread(target=self._send_heartbeat, kwargs={'update_frequency': config['heartbeat_interval']}, daemon=True).start() + # Start sending heartbeats to the combiner. + threading.Thread(target=self._send_heartbeat, kwargs={ + 'update_frequency': config['heartbeat_interval']}, daemon=True).start() - # Start listening for combiner training and validation messages + # Start listening for combiner training and validation messages if config['trainer'] == True: - threading.Thread(target=self._listen_to_model_update_request_stream, daemon=True).start() + threading.Thread( + target=self._listen_to_model_update_request_stream, daemon=True).start() if config['validator'] == True: - threading.Thread(target=self._listen_to_model_validation_request_stream, daemon=True).start() + threading.Thread( + target=self._listen_to_model_validation_request_stream, daemon=True).start() self._attached = True # Start processing the client message inbox @@ -147,11 +149,13 @@ def _initialize_dispatcher(self, config): tries = 10 while tries > 0: - retval = pr.download(config['discover_host'], config['discover_port'], config['token']) + retval = pr.download( + config['discover_host'], config['discover_port'], config['token']) if retval: break time.sleep(60) - print("No compute package available... retrying in 60s Trying {} more times.".format(tries), flush=True) + print("No compute package available... retrying in 60s Trying {} more times.".format( + tries), flush=True) tries -= 1 if retval: @@ -178,9 +182,9 @@ def _initialize_dispatcher(self, config): else: # TODO: Deprecate dispatch_config = {'entry_points': - {'predict': {'command': 'python3 predict.py'}, - 'train': {'command': 'python3 train.py'}, - 'validate': {'command': 'python3 validate.py'}}} + {'predict': {'command': 'python3 predict.py'}, + 'train': {'command': 'python3 train.py'}, + 'validate': {'command': 'python3 validate.py'}}} dispatch_dir = os.getcwd() from_path = os.path.join(os.getcwd(), 'client') @@ -188,8 +192,7 @@ def _initialize_dispatcher(self, config): copy_tree(from_path, self.run_path) self.dispatcher = Dispatcher(dispatch_config, self.run_path) - - def _assign(self): + def _assign(self): """Contacts the controller and asks for combiner assignment. """ print("Asking for assignment!", flush=True) @@ -210,30 +213,32 @@ def _assign(self): sys.exit("Exiting: UnMatchedConfig") time.sleep(5) print(".", end=' ', flush=True) - + print("Got assigned!", flush=True) return client_config def _connect(self, client_config): """Connect to assigned combiner. - + Parameters ---------- client_config : dict A dictionary with connection information and settings for the assigned combiner. - + """ # TODO use the client_config['certificate'] for setting up secure comms' if client_config['certificate']: import base64 - cert = base64.b64decode(client_config['certificate']) # .decode('utf-8') + cert = base64.b64decode( + client_config['certificate']) # .decode('utf-8') credentials = grpc.ssl_channel_credentials(root_certificates=cert) channel = grpc.secure_channel("{}:{}".format(client_config['host'], str(client_config['port'])), credentials) else: - channel = grpc.insecure_channel("{}:{}".format(client_config['host'], str(client_config['port']))) + channel = grpc.insecure_channel("{}:{}".format( + client_config['host'], str(client_config['port']))) self.channel = channel @@ -244,8 +249,9 @@ def _connect(self, client_config): print("Client: {} connected {} to {}:{}".format(self.name, "SECURED" if client_config['certificate'] else "INSECURE", client_config['host'], client_config['port']), flush=True) - - print("Client: Using {} compute package.".format(client_config["package"])) + + print("Client: Using {} compute package.".format( + client_config["package"])) def _disconnect(self): self.channel.close() @@ -254,12 +260,12 @@ def get_model(self, id): """Fetch a model from the assigned combiner. Downloads the model update object via a gRPC streaming channel, Dowload. - + Parameters ---------- id : str The id of the model update object. - + """ from io import BytesIO @@ -289,7 +295,7 @@ def set_model(self, model, id): The model update object. id : str The id of the model update object. - """ + """ from io import BytesIO @@ -312,9 +318,11 @@ def upload_request_generator(mdl): while True: b = mdl.read(CHUNK_SIZE) if b: - result = fedn.ModelRequest(data=b, id=id, status=fedn.ModelStatus.IN_PROGRESS) + result = fedn.ModelRequest( + data=b, id=id, status=fedn.ModelStatus.IN_PROGRESS) else: - result = fedn.ModelRequest(id=id, status=fedn.ModelStatus.OK) + result = fedn.ModelRequest( + id=id, status=fedn.ModelStatus.OK) yield result if not b: @@ -339,24 +347,24 @@ def _listen_to_model_update_request_stream(self): if request.sender.role == fedn.COMBINER: # Process training request self._send_status("Received model update request.", log_level=fedn.Status.AUDIT, - type=fedn.StatusType.MODEL_UPDATE_REQUEST, request=request) + type=fedn.StatusType.MODEL_UPDATE_REQUEST, request=request) self.inbox.put(('train', request)) - - if not self._attached: - return + + if not self._attached: + return except grpc.RpcError as e: status_code = e.code() - #TODO: make configurable + # TODO: make configurable timeout = 5 - #print("CLIENT __listen_to_model_update_request_stream: GRPC ERROR {} retrying in {}..".format( + # print("CLIENT __listen_to_model_update_request_stream: GRPC ERROR {} retrying in {}..".format( # status_code.name, timeout), flush=True) - time.sleep(timeout) + time.sleep(timeout) except: raise - if not self._attached: + if not self._attached: return def _listen_to_model_validation_request_stream(self): @@ -371,36 +379,37 @@ def _listen_to_model_validation_request_stream(self): # Process validation request model_id = request.model_id self._send_status("Recieved model validation request.", log_level=fedn.Status.AUDIT, - type=fedn.StatusType.MODEL_VALIDATION_REQUEST, request=request) + type=fedn.StatusType.MODEL_VALIDATION_REQUEST, request=request) self.inbox.put(('validate', request)) except grpc.RpcError as e: status_code = e.code() # TODO: make configurable timeout = 5 - #print("CLIENT __listen_to_model_validation_request_stream: GRPC ERROR {} retrying in {}..".format( + # print("CLIENT __listen_to_model_validation_request_stream: GRPC ERROR {} retrying in {}..".format( # status_code.name, timeout), flush=True) time.sleep(timeout) except: - raise + raise - if not self._attached: + if not self._attached: return def process_request(self): """Process training and validation tasks. """ while True: - if not self._attached: - return + if not self._attached: + return try: - (task_type, request) = self.inbox.get(timeout=1.0) + (task_type, request) = self.inbox.get(timeout=1.0) if task_type == 'train': tic = time.time() self.state = ClientState.training - model_id, meta = self._process_training_request(request.model_id) + model_id, meta = self._process_training_request( + request.model_id) processing_time = time.time()-tic meta['processing_time'] = processing_time @@ -416,22 +425,23 @@ def process_request(self): update.timestamp = str(datetime.now()) update.correlation_id = request.correlation_id update.meta = json.dumps(meta) - #TODO: Check responses + # TODO: Check responses response = self.orchestrator.SendModelUpdate(update) self._send_status("Model update completed.", log_level=fedn.Status.AUDIT, - type=fedn.StatusType.MODEL_UPDATE, request=update) + type=fedn.StatusType.MODEL_UPDATE, request=update) else: self._send_status("Client {} failed to complete model update.", - log_level=fedn.Status.WARNING, - request=request) + log_level=fedn.Status.WARNING, + request=request) self.state = ClientState.idle self.inbox.task_done() elif task_type == 'validate': self.state = ClientState.validating - metrics = self._process_validation_request(request.model_id) + metrics = self._process_validation_request( + request.model_id) if metrics != None: # Send validation @@ -445,12 +455,13 @@ def process_request(self): self.str = str(datetime.now()) validation.timestamp = self.str validation.correlation_id = request.correlation_id - response = self.orchestrator.SendModelValidation(validation) + response = self.orchestrator.SendModelValidation( + validation) self._send_status("Model validation completed.", log_level=fedn.Status.AUDIT, - type=fedn.StatusType.MODEL_VALIDATION, request=validation) + type=fedn.StatusType.MODEL_VALIDATION, request=validation) else: self._send_status("Client {} failed to complete model validation.".format(self.name), - log_level=fedn.Status.WARNING, request=request) + log_level=fedn.Status.WARNING, request=request) self.state = ClientState.idle self.inbox.task_done() @@ -459,15 +470,16 @@ def process_request(self): def _process_training_request(self, model_id): """Process a training (model update) request. - + Parameters ---------- model_id : Str The id of the model to update. - + """ - self._send_status("\t Starting processing of training request for model_id {}".format(model_id)) + self._send_status( + "\t Starting processing of training request for model_id {}".format(model_id)) self.state = ClientState.training try: @@ -500,7 +512,8 @@ def _process_training_request(self, model_id): os.unlink(outpath) except Exception as e: - print("ERROR could not process training request due to error: {}".format(e), flush=True) + print("ERROR could not process training request due to error: {}".format( + e), flush=True) updated_model_id = None meta = {'status': 'failed', 'error': str(e)} @@ -509,7 +522,8 @@ def _process_training_request(self, model_id): return updated_model_id, meta def _process_validation_request(self, model_id): - self._send_status("Processing validation request for model_id {}".format(model_id)) + self._send_status( + "Processing validation request for model_id {}".format(model_id)) self.state = ClientState.validating try: model = self.get_model(str(model_id)) @@ -540,33 +554,35 @@ def _handle_combiner_failure(self): """ Register failed combiner connection. """ - self._missed_heartbeat += 1 - if self._missed_heartbeat > self.config['reconnect_after_missed_heartbeat']: + self._missed_heartbeat += 1 + if self._missed_heartbeat > self.config['reconnect_after_missed_heartbeat']: self._detach() def _send_heartbeat(self, update_frequency=2.0): """Send a heartbeat to the combiner. - + Parameters ---------- update_frequency : float The interval in seconds between heartbeat messages. - + """ while True: - heartbeat = fedn.Heartbeat(sender=fedn.Client(name=self.name, role=fedn.WORKER)) + heartbeat = fedn.Heartbeat(sender=fedn.Client( + name=self.name, role=fedn.WORKER)) try: self.connection.SendHeartbeat(heartbeat) self._missed_heartbeat = 0 except grpc.RpcError as e: status_code = e.code() - print("CLIENT heartbeat: GRPC ERROR {} retrying..".format(status_code.name), flush=True) + print("CLIENT heartbeat: GRPC ERROR {} retrying..".format( + status_code.name), flush=True) self._handle_combiner_failure() time.sleep(update_frequency) - if not self._attached: - return + if not self._attached: + return def _send_status(self, msg, log_level=fedn.Status.INFO, type=None, request=None): """Send status message. """ @@ -590,17 +606,17 @@ def _send_status(self, msg, log_level=fedn.Status.INFO, type=None, request=None) status.status)) response = self.connection.SendStatus(status) - def run_web(self): """Starts a local logging UI (Flask app) serving on port 8080. - + Currently not in use as default. - + """ from flask import Flask app = Flask(__name__) from fedn.common.net.web.client import page, style + @app.route('/') def index(): """ @@ -613,7 +629,8 @@ def index(): return page.format(client=self.name, state=ClientStateToString(self.state), style=style, logs=logs_fancy) - import os, sys + import os + import sys self._original_stdout = sys.stdout sys.stdout = open(os.devnull, 'w') app.run(host="0.0.0.0", port="8080") @@ -630,13 +647,15 @@ def run(self): time.sleep(1) cnt += 1 if self.state != old_state: - print("{}:CLIENT in {} state".format(datetime.now().strftime('%Y-%m-%d %H:%M:%S'), ClientStateToString(self.state)), flush=True) + print("{}:CLIENT in {} state".format(datetime.now().strftime( + '%Y-%m-%d %H:%M:%S'), ClientStateToString(self.state)), flush=True) if cnt > 5: - print("{}:CLIENT active".format(datetime.now().strftime('%Y-%m-%d %H:%M:%S')), flush=True) + print("{}:CLIENT active".format( + datetime.now().strftime('%Y-%m-%d %H:%M:%S')), flush=True) cnt = 0 if not self._attached: print("Detatched from combiner.", flush=True) - # TODO: Implement a check/condition to ulitmately close down if too many reattachment attepts have failed. s + # TODO: Implement a check/condition to ulitmately close down if too many reattachment attepts have failed. s self._attach() self._subscribe_to_combiner(self.config) if self.error_state: diff --git a/fedn/fedn/clients/combiner/modelservice.py b/fedn/fedn/clients/combiner/modelservice.py index da5eed7a9..395bed346 100644 --- a/fedn/fedn/clients/combiner/modelservice.py +++ b/fedn/fedn/clients/combiner/modelservice.py @@ -1,6 +1,7 @@ import fedn.common.net.grpc.fedn_pb2 as fedn -import fedn.common.net.grpc.fedn_pb2_grpc as rpc from fedn.common.storage.models.tempmodelstorage import TempModelStorage +import fedn.common.net.grpc.fedn_pb2_grpc as rpc + CHUNK_SIZE = 1024 * 1024 @@ -32,8 +33,8 @@ def get_model(self, id): from io import BytesIO data = BytesIO() data.seek(0, 0) - import time import random + import time parts = self.Download(fedn.ModelRequest(id=id), self) for part in parts: @@ -73,9 +74,11 @@ def upload_request_generator(mdl): while True: b = mdl.read(CHUNK_SIZE) if b: - result = fedn.ModelRequest(data=b, id=id, status=fedn.ModelStatus.IN_PROGRESS) + result = fedn.ModelRequest( + data=b, id=id, status=fedn.ModelStatus.IN_PROGRESS) else: - result = fedn.ModelRequest(id=id, data=None, status=fedn.ModelStatus.OK) + result = fedn.ModelRequest( + id=id, data=None, status=fedn.ModelStatus.OK) yield result if not b: break @@ -83,7 +86,7 @@ def upload_request_generator(mdl): # TODO: Check result result = self.Upload(upload_request_generator(bt), self) - ## Model Service + # Model Service def Upload(self, request_iterator, context): """ @@ -100,7 +103,7 @@ def Upload(self, request_iterator, context): if request.status == fedn.ModelStatus.OK and not request.data: result = fedn.ModelResponse(id=request.id, status=fedn.ModelStatus.OK, - message="Got model successfully.") + message="Got model successfully.") # self.models_metadata.update({request.id: fedn.ModelStatus.OK}) self.models.set_meta(request.id, fedn.ModelStatus.OK) self.models.get_ptr(request.id).flush() diff --git a/fedn/fedn/clients/combiner/roundcontrol.py b/fedn/fedn/clients/combiner/roundcontrol.py index 6da204840..c6d3be9db 100644 --- a/fedn/fedn/clients/combiner/roundcontrol.py +++ b/fedn/fedn/clients/combiner/roundcontrol.py @@ -1,20 +1,19 @@ -import time import json import os import queue +import sys import tempfile import time import uuid -import sys -import queue +from threading import Lock, Thread import fedn.common.net.grpc.fedn_pb2 as fedn -from threading import Thread, Lock from fedn.utils.helpers import get_helper - + + class RoundControl: """ Combiner level round controller. - + The controller recieves round configurations from the global controller and acts on them by soliciting model updates and model validations from the connected clients. @@ -40,7 +39,8 @@ def __init__(self, id, storage, server, modelservice): # TODO, make runtime configurable from fedn.aggregators.fedavg import FedAvgAggregator - self.aggregator = FedAvgAggregator(self.id, self.storage, self.server, self.modelservice, self) + self.aggregator = FedAvgAggregator( + self.id, self.storage, self.server, self.modelservice, self) def push_round_config(self, round_config): """ Recieve a round_config (job description) and push on the queue. @@ -55,10 +55,11 @@ def push_round_config(self, round_config): round_config['_job_id'] = str(uuid.uuid4()) self.round_configs.put(round_config) except: - self.server.report_status("ROUNDCONTROL: Failed to push round config.", flush=True) + self.server.report_status( + "ROUNDCONTROL: Failed to push round config.", flush=True) raise return round_config['_job_id'] - + def load_model_fault_tolerant(self, model_id, retry=3): """Load model update object. @@ -79,7 +80,8 @@ def load_model_fault_tolerant(self, model_id, retry=3): while tries < retry: tries += 1 if not model_str or sys.getsizeof(model_str) == 80: - self.server.report_status("ROUNDCONTROL: Model download failed. retrying", flush=True) + self.server.report_status( + "ROUNDCONTROL: Model download failed. retrying", flush=True) import time time.sleep(1) model_str = self.modelservice.get_model(model_id) @@ -98,11 +100,12 @@ def _training_round(self, config, clients): """ # We flush the queue at a beginning of a round (no stragglers allowed) - # TODO: Support other ways to handle stragglers. + # TODO: Support other ways to handle stragglers. with self.aggregator.model_updates.mutex: self.aggregator.model_updates.queue.clear() - self.server.report_status("ROUNDCONTROL: Initiating training round, participating members: {}".format(clients)) + self.server.report_status( + "ROUNDCONTROL: Initiating training round, participating members: {}".format(clients)) self.server.request_model_update(config['model_id'], clients=clients) meta = {} @@ -115,8 +118,9 @@ def _training_round(self, config, clients): try: helper = get_helper(config['helper_type']) model, data = self.aggregator.combine_models(nr_expected_models=len(clients), - nr_required_models=int(config['clients_required']), - helper=helper, timeout=float(config['round_timeout'])) + nr_required_models=int( + config['clients_required']), + helper=helper, timeout=float(config['round_timeout'])) except Exception as e: print("TRAINING ROUND FAILED AT COMBINER! {}".format(e), flush=True) meta['time_combination'] = time.time() - tic @@ -150,7 +154,7 @@ def stage_model(self, model_id, timeout_retry=3, retry=2): if self.modelservice.models.exist(model_id): return - # If it is not there, download it from storage and stage it in memory at the server. + # If it is not there, download it from storage and stage it in memory at the server. tries = 0 while True: try: @@ -159,15 +163,16 @@ def stage_model(self, model_id, timeout_retry=3, retry=2): break except Exception as e: self.server.report_status("ROUNDCONTROL: Could not fetch model from storage backend, retrying.", - flush=True) + flush=True) time.sleep(timeout_retry) tries += 1 if tries > retry: - self.server.report_status("ROUNDCONTROL: Failed to stage model {} from storage backend!".format(model_id), flush=True) + self.server.report_status( + "ROUNDCONTROL: Failed to stage model {} from storage backend!".format(model_id), flush=True) return self.modelservice.set_model(model, model_id) - + def __assign_round_clients(self, n, type="trainers"): """ Obtain a list of clients (trainers or validators) to talk to in a round. @@ -184,14 +189,14 @@ def __assign_round_clients(self, n, type="trainers"): elif type == "trainers": clients = self.server.get_active_trainers() else: - self.server.report_status("ROUNDCONTROL(ERROR): {} is not a supported type of client".format(type), flush=True) + self.server.report_status( + "ROUNDCONTROL(ERROR): {} is not a supported type of client".format(type), flush=True) raise - - # If the number of requested trainers exceeds the number of available, use all available. + # If the number of requested trainers exceeds the number of available, use all available. if n > len(clients): n = len(clients) - + # If not, we pick a random subsample of all available clients. import random clients = random.sample(clients, n) @@ -239,10 +244,12 @@ def execute_validation(self, round_config): :type round_config: [type] """ model_id = round_config['model_id'] - self.server.report_status("COMBINER orchestrating validation of model {}".format(model_id)) + self.server.report_status( + "COMBINER orchestrating validation of model {}".format(model_id)) self.stage_model(model_id) - validators = self.__assign_round_clients(self.server.max_clients,type="validators") - self._validation_round(round_config,validators,model_id) + validators = self.__assign_round_clients( + self.server.max_clients, type="validators") + self._validation_round(round_config, validators, model_id) def execute_training(self, config): """ Coordinates clients to execute training and validation tasks. """ @@ -256,17 +263,19 @@ def execute_training(self, config): # Execute the configured number of rounds round_meta['local_round'] = {} for r in range(1, int(config['rounds']) + 1): - self.server.report_status("ROUNDCONTROL: Starting training round {}".format(r), flush=True) + self.server.report_status( + "ROUNDCONTROL: Starting training round {}".format(r), flush=True) clients = self.__assign_round_clients(self.server.max_clients) model, meta = self._training_round(config, clients) round_meta['local_round'][str(r)] = meta if model is None: - self.server.report_status("\t Failed to update global model in round {0}!".format(r)) + self.server.report_status( + "\t Failed to update global model in round {0}!".format(r)) if model is not None: helper = get_helper(config['helper_type']) a = helper.serialize_model_to_BytesIO(model) - # Send aggregated model to server + # Send aggregated model to server model_id = str(uuid.uuid4()) self.modelservice.set_model(a, model_id) a.close() @@ -275,7 +284,8 @@ def execute_training(self, config): self.server.set_active_model(model_id) print("------------------------------------------") - self.server.report_status("ROUNDCONTROL: TRAINING ROUND COMPLETED.", flush=True) + self.server.report_status( + "ROUNDCONTROL: TRAINING ROUND COMPLETED.", flush=True) print("\n") return round_meta @@ -293,15 +303,18 @@ def run(self): if round_config['task'] == 'training': tic = time.time() round_meta = self.execute_training(round_config) - round_meta['time_exec_training'] = time.time() - tic + round_meta['time_exec_training'] = time.time() - \ + tic round_meta['name'] = self.id self.server.tracer.set_round_meta(round_meta) elif round_config['task'] == 'validation': self.execute_validation(round_config) else: - self.server.report_status("ROUNDCONTROL: Round config contains unkown task type.", flush=True) + self.server.report_status( + "ROUNDCONTROL: Round config contains unkown task type.", flush=True) else: - self.server.report_status("ROUNDCONTROL: Failed to meet client allocation requirements for this round config.", flush=True) + self.server.report_status( + "ROUNDCONTROL: Failed to meet client allocation requirements for this round config.", flush=True) except queue.Empty: time.sleep(1) diff --git a/fedn/fedn/clients/reducer/control.py b/fedn/fedn/clients/reducer/control.py index 83c82ac1a..692dfcfca 100644 --- a/fedn/fedn/clients/reducer/control.py +++ b/fedn/fedn/clients/reducer/control.py @@ -4,10 +4,10 @@ import time from datetime import datetime +import fedn.utils.helpers from fedn.clients.reducer.interfaces import CombinerUnavailableError from fedn.clients.reducer.network import Network from fedn.common.tracer.mongotracer import MongoTracer -import fedn.utils.helpers from .state import ReducerState @@ -35,10 +35,12 @@ def __init__(self, statestore): try: config = self.statestore.get_storage_backend() except: - print("REDUCER CONTROL: Failed to retrive storage configuration, exiting.", flush=True) + print( + "REDUCER CONTROL: Failed to retrive storage configuration, exiting.", flush=True) raise MisconfiguredStorageBackend() if not config: - print("REDUCER CONTROL: No storage configuration available, exiting.", flush=True) + print( + "REDUCER CONTROL: No storage configuration available, exiting.", flush=True) raise MisconfiguredStorageBackend() if config['storage_type'] == 'S3': @@ -135,7 +137,8 @@ def get_compute_context(self): context = definition['filename'] return context except (IndexError, KeyError): - print("No context filename set for compute context definition", flush=True) + print( + "No context filename set for compute context definition", flush=True) return None else: return None @@ -164,7 +167,8 @@ def commit(self, model_id, model=None): outfile_name = helper.save_model(model) print("DONE", flush=True) print("Uploading model to Minio...", flush=True) - model_id = self.model_repository.set_model(outfile_name, is_file=True) + model_id = self.model_repository.set_model( + outfile_name, is_file=True) print("DONE", flush=True) os.unlink(outfile_name) @@ -182,7 +186,7 @@ def _out_of_sync(self, combiners=None): except CombinerUnavailableError: self._handle_unavailable_combiner(combiner) model_id = None - + if model_id and (model_id != self.get_latest_model()): osync.append(combiner) return osync @@ -198,7 +202,7 @@ def check_round_participation_policy(self, compute_plan, combiner_state): elif compute_plan['task'] == 'validation': nr_active_clients = int(combiner_state['nr_active_validators']) else: - print("Invalid task type!",flush=True) + print("Invalid task type!", flush=True) return False if int(compute_plan['clients_required']) <= nr_active_clients: @@ -228,10 +232,10 @@ def check_round_validity_policy(self, combiners): def _handle_unavailable_combiner(self, combiner): """ This callback is triggered if a combiner is found to be unresponsive. """ # TODO: Implement strategy to handle the case. - print("REDUCER CONTROL: Combiner {} unavailable.".format(combiner.name), flush=True) + print("REDUCER CONTROL: Combiner {} unavailable.".format( + combiner.name), flush=True) - - def _select_round_combiners(self,compute_plan): + def _select_round_combiners(self, compute_plan): combiners = [] for combiner in self.network.get_combiners(): try: @@ -241,9 +245,10 @@ def _select_round_combiners(self,compute_plan): combiner_state = None if combiner_state: - is_participating = self.check_round_participation_policy(compute_plan,combiner_state) + is_participating = self.check_round_participation_policy( + compute_plan, combiner_state) if is_participating: - combiners.append((combiner,compute_plan)) + combiners.append((combiner, compute_plan)) return combiners def round(self, config, round_number): @@ -275,23 +280,26 @@ def round(self, config, round_number): combiner_state = None if combiner_state != None: - is_participating = self.check_round_participation_policy(compute_plan, combiner_state) + is_participating = self.check_round_participation_policy( + compute_plan, combiner_state) if is_participating: combiners.append((combiner, compute_plan)) round_start = self.check_round_start_policy(combiners) - print("CONTROL: round start policy met, participating combiners {}".format(combiners), flush=True) + print("CONTROL: round start policy met, participating combiners {}".format( + combiners), flush=True) if not round_start: print("CONTROL: Round start policy not met, skipping round!", flush=True) return None # 2. Sync up and ask participating combiners to coordinate model updates # TODO refactor - + statestore_config = self.statestore.get_config() - self.tracer = MongoTracer(statestore_config['mongo_config'], statestore_config['network_id']) + self.tracer = MongoTracer( + statestore_config['mongo_config'], statestore_config['network_id']) start_time = datetime.now() @@ -346,7 +354,8 @@ def round(self, config, round_number): model, data = self.reduce(updated) round_meta['reduce'] = data except Exception as e: - print("CONTROL: Failed to reduce models from combiners: {}".format(updated), flush=True) + print("CONTROL: Failed to reduce models from combiners: {}".format( + updated), flush=True) print(e, flush=True) return None, round_meta print("DONE", flush=True) @@ -361,7 +370,8 @@ def round(self, config, round_number): self.commit(model_id, model) round_meta['time_commit'] = time.time() - tic else: - print("REDUCER: failed to update model in round with config {}".format(config), flush=True) + print("REDUCER: failed to update model in round with config {}".format( + config), flush=True) return None, round_meta print("DONE", flush=True) @@ -373,11 +383,12 @@ def round(self, config, round_number): combiner_config['task'] = 'validation' combiner_config['helper_type'] = self.statestore.get_framework() - validating_combiners = self._select_round_combiners(combiner_config) + validating_combiners = self._select_round_combiners( + combiner_config) for combiner, combiner_config in validating_combiners: try: - self.sync_combiners([combiner],self.get_latest_model()) + self.sync_combiners([combiner], self.get_latest_model()) combiner.start(combiner_config) except CombinerUnavailableError: # OK if validation fails for a combiner @@ -418,7 +429,8 @@ def instruct(self, config): # TODO: Refactor from fedn.common.tracer.mongotracer import MongoTracer statestore_config = self.statestore.get_config() - self.tracer = MongoTracer(statestore_config['mongo_config'], statestore_config['network_id']) + self.tracer = MongoTracer( + statestore_config['mongo_config'], statestore_config['network_id']) last_round = self.tracer.get_latest_round() for round in range(1, int(config['rounds'] + 1)): @@ -443,7 +455,8 @@ def instruct(self, config): end_time = datetime.now() if model_id: - print("REDUCER: Global round completed, new model: {}".format(model_id), flush=True) + print("REDUCER: Global round completed, new model: {}".format( + model_id), flush=True) round_time = end_time - start_time self.tracer.set_latest_time(current_round, round_time.seconds) round_meta['status'] = 'Success' diff --git a/fedn/fedn/clients/reducer/interfaces.py b/fedn/fedn/clients/reducer/interfaces.py index 359440fae..5cb855ca5 100644 --- a/fedn/fedn/clients/reducer/interfaces.py +++ b/fedn/fedn/clients/reducer/interfaces.py @@ -1,7 +1,9 @@ +import json + +import grpc + import fedn.common.net.grpc.fedn_pb2 as fedn import fedn.common.net.grpc.fedn_pb2_grpc as rpc -import grpc -import json class CombinerUnavailableError(Exception): @@ -19,10 +21,13 @@ def __init__(self, address, port, certificate): self.certificate = certificate if self.certificate: import copy - credentials = grpc.ssl_channel_credentials(root_certificates=copy.deepcopy(certificate)) - self.channel = grpc.secure_channel('{}:{}'.format(self.address, str(self.port)), credentials) + credentials = grpc.ssl_channel_credentials( + root_certificates=copy.deepcopy(certificate)) + self.channel = grpc.secure_channel('{}:{}'.format( + self.address, str(self.port)), credentials) else: - self.channel = grpc.insecure_channel('{}:{}'.format(self.address, str(self.port))) + self.channel = grpc.insecure_channel( + '{}:{}'.format(self.address, str(self.port))) def get_channel(self): """ @@ -105,7 +110,8 @@ def report(self, config=None): :param config: :return: """ - channel = Channel(self.address, self.port, self.certificate).get_channel() + channel = Channel(self.address, self.port, + self.certificate).get_channel() control = rpc.ControlStub(channel) request = fedn.ControlRequest() try: @@ -127,7 +133,8 @@ def configure(self, config=None): """ if not config: config = self.config - channel = Channel(self.address, self.port, self.certificate).get_channel() + channel = Channel(self.address, self.port, + self.certificate).get_channel() control = rpc.ControlStub(channel) request = fedn.ControlRequest() @@ -150,7 +157,8 @@ def start(self, config): :param config: :return: """ - channel = Channel(self.address, self.port, self.certificate).get_channel() + channel = Channel(self.address, self.port, + self.certificate).get_channel() control = rpc.ControlStub(channel) request = fedn.ControlRequest() request.command = fedn.Command.START @@ -175,7 +183,8 @@ def set_model_id(self, model_id): :param model_id: """ - channel = Channel(self.address, self.port, self.certificate).get_channel() + channel = Channel(self.address, self.port, + self.certificate).get_channel() control = rpc.ControlStub(channel) request = fedn.ControlRequest() p = request.parameter.add() @@ -195,7 +204,8 @@ def get_model_id(self): :return: """ - channel = Channel(self.address, self.port, self.certificate).get_channel() + channel = Channel(self.address, self.port, + self.certificate).get_channel() reducer = rpc.ReducerStub(channel) request = fedn.GetGlobalModelRequest() try: @@ -211,7 +221,8 @@ def get_model_id(self): def get_model(self, id=None): """ Retrive the model bundle from a combiner. """ - channel = Channel(self.address, self.port, self.certificate).get_channel() + channel = Channel(self.address, self.port, + self.certificate).get_channel() modelservice = rpc.ModelServiceStub(channel) if not id: @@ -235,7 +246,8 @@ def allowing_clients(self): :return: """ - channel = Channel(self.address, self.port, self.certificate).get_channel() + channel = Channel(self.address, self.port, + self.certificate).get_channel() connector = rpc.ConnectorStub(channel) request = fedn.ConnectionRequest() diff --git a/fedn/fedn/clients/reducer/network.py b/fedn/fedn/clients/reducer/network.py index 2c64762dc..0bdd4f0ee 100644 --- a/fedn/fedn/clients/reducer/network.py +++ b/fedn/fedn/clients/reducer/network.py @@ -1,10 +1,11 @@ +import base64 import copy import time -import base64 + +from fedn.clients.reducer.interfaces import (CombinerInterface, + CombinerUnavailableError) from .state import ReducerState -from fedn.clients.reducer.interfaces import CombinerInterface -from fedn.clients.reducer.interfaces import CombinerUnavailableError class Network: @@ -67,7 +68,7 @@ def add_client(self, client): """ if self.find_client(client['name']): - return + return print("adding client {}".format(client['name']), flush=True) self.statestore.set_client(client) @@ -125,4 +126,4 @@ def update_client_data(self, client_data, status, role): def get_client_info(self): """ list available client in DB""" - return self.statestore.list_clients() \ No newline at end of file + return self.statestore.list_clients() diff --git a/fedn/fedn/clients/reducer/plots.py b/fedn/fedn/clients/reducer/plots.py index aa7a9691b..b3c6f22e3 100644 --- a/fedn/fedn/clients/reducer/plots.py +++ b/fedn/fedn/clients/reducer/plots.py @@ -1,24 +1,24 @@ -from numpy.core.einsumfunc import _flop_count -import pymongo import json -import numpy -import plotly.graph_objs as go -from datetime import datetime, timedelta -import plotly -import os -from fedn.common.storage.db.mongo import connect_to_mongodb, drop_mongodb import math +import os +from datetime import datetime, timedelta -import plotly.express as px import geoip2.database -import pandas as pd - import networkx +import numpy import pandas as pd -from bokeh.models import (Circle, Label, LabelSet, - MultiLine, NodesAndLinkedEdges, Range1d, ColumnDataSource) -from bokeh.plotting import figure, from_networkx +import plotly +import plotly.express as px +import plotly.graph_objs as go +import pymongo +from bokeh.models import (Circle, ColumnDataSource, Label, LabelSet, MultiLine, + NodesAndLinkedEdges, Range1d) from bokeh.palettes import Spectral8 +from bokeh.plotting import figure, from_networkx +from numpy.core.einsumfunc import _flop_count + +from fedn.common.storage.db.mongo import connect_to_mongodb, drop_mongodb + class Plot: """ @@ -28,7 +28,8 @@ class Plot: def __init__(self, statestore): try: statestore_config = statestore.get_config() - self.mdb = connect_to_mongodb(statestore_config['mongo_config'], statestore_config['network_id']) + self.mdb = connect_to_mongodb( + statestore_config['mongo_config'], statestore_config['network_id']) self.status = self.mdb['control.status'] self.round_time = self.mdb["control.round_time"] self.combiner_round_time = self.mdb["control.combiner_round_time"] @@ -66,7 +67,8 @@ def create_table_plot(self): metrics = self.status.find_one({'type': 'MODEL_VALIDATION'}) if metrics == None: fig = go.Figure(data=[]) - fig.update_layout(title_text='No data currently available for table mean metrics') + fig.update_layout( + title_text='No data currently available for table mean metrics') table = json.dumps(fig, cls=plotly.utils.PlotlyJSONEncoder) return False @@ -84,9 +86,11 @@ def create_table_plot(self): for post in self.status.find({'type': 'MODEL_VALIDATION'}): e = json.loads(post['data']) try: - validations[e['modelId']].append(float(json.loads(e['data'])[metric])) + validations[e['modelId']].append( + float(json.loads(e['data'])[metric])) except KeyError: - validations[e['modelId']] = [float(json.loads(e['data'])[metric])] + validations[e['modelId']] = [ + float(json.loads(e['data'])[metric])] vals = [] models = [] @@ -202,7 +206,8 @@ def create_client_training_distribution(self): if not training: return False fig = go.Figure(data=go.Histogram(x=training)) - fig.update_layout(title_text='Client model training time, mean: {}'.format(numpy.mean(training))) + fig.update_layout( + title_text='Client model training time, mean: {}'.format(numpy.mean(training))) histogram = json.dumps(fig, cls=plotly.utils.PlotlyJSONEncoder) return histogram @@ -224,12 +229,14 @@ def create_client_plot(self): processing.append(meta['processing_time']) from plotly.subplots import make_subplots - fig = make_subplots(rows=1, cols=2, specs=[[{"type": "pie"}, {"type": "histogram"}]]) + fig = make_subplots(rows=1, cols=2, specs=[ + [{"type": "pie"}, {"type": "histogram"}]]) fig.update_layout( template="simple_white", xaxis=dict(title_text="Seconds"), - title="Total mean client processing time: {}".format(numpy.mean(processing)), + title="Total mean client processing time: {}".format( + numpy.mean(processing)), showlegend=True ) if not processing: @@ -266,13 +273,16 @@ def create_combiner_plot(self): except: pass - labels = ['Waiting for updates', 'Aggregating model updates', 'Loading model updates'] - val = [numpy.mean(waiting), numpy.mean(aggregation), numpy.mean(model_load)] + labels = ['Waiting for updates', + 'Aggregating model updates', 'Loading model updates'] + val = [numpy.mean(waiting), numpy.mean( + aggregation), numpy.mean(model_load)] fig = go.Figure() fig.update_layout( template="simple_white", - title="Total mean combiner round time: {}".format(numpy.mean(combination)), + title="Total mean combiner round time: {}".format( + numpy.mean(combination)), showlegend=True ) if not combination: @@ -315,9 +325,11 @@ def create_box_plot(self, metric): for post in self.status.find({'type': 'MODEL_VALIDATION'}): e = json.loads(post['data']) try: - validations[e['modelId']].append(float(json.loads(e['data'])[metric])) + validations[e['modelId']].append( + float(json.loads(e['data'])[metric])) except KeyError: - validations[e['modelId']] = [float(json.loads(e['data'])[metric])] + validations[e['modelId']] = [ + float(json.loads(e['data'])[metric])] # Make sure validations are plotted in chronological order model_trail = self.mdb.control.model.find_one({'key': 'model_trail'}) @@ -343,7 +355,8 @@ def create_box_plot(self, metric): box.add_trace(go.Box(y=acc, name=str(j), marker_color="royalblue", showlegend=False, boxpoints=False)) else: - box.add_trace(go.Scatter(x=[str(j)], y=[y[j]], showlegend=False)) + box.add_trace(go.Scatter( + x=[str(j)], y=[y[j]], showlegend=False)) rounds = list(range(len(y))) box.add_trace(go.Scatter( @@ -353,7 +366,8 @@ def create_box_plot(self, metric): )) box.update_xaxes(title_text='Rounds') - box.update_yaxes(tickvals=[0.0, 0.1, 0.2, 0.3, 0.4, 0.5, 0.6, 0.7, 0.8, 0.9, 1.0]) + box.update_yaxes( + tickvals=[0.0, 0.1, 0.2, 0.3, 0.4, 0.5, 0.6, 0.7, 0.8, 0.9, 1.0]) box.update_layout(title_text='Metric distribution over clients: {}'.format(metric), margin=dict(l=20, r=20, t=45, b=20)) box = json.dumps(box, cls=plotly.utils.PlotlyJSONEncoder) @@ -368,7 +382,8 @@ def create_round_plot(self): metrics = self.round_time.find_one({'key': 'round_time'}) if metrics == None: fig = go.Figure(data=[]) - fig.update_layout(title_text='No data currently available for round time') + fig.update_layout( + title_text='No data currently available for round time') ml = json.dumps(fig, cls=plotly.utils.PlotlyJSONEncoder) return False @@ -408,7 +423,8 @@ def create_cpu_plot(self): metrics = self.psutil_usage.find_one({'key': 'cpu_mem_usage'}) if metrics == None: fig = go.Figure(data=[]) - fig.update_layout(title_text='No data currently available for MEM and CPU usage') + fig.update_layout( + title_text='No data currently available for MEM and CPU usage') cpu = json.dumps(fig, cls=plotly.utils.PlotlyJSONEncoder) return False @@ -452,10 +468,10 @@ def create_cpu_plot(self): def get_client_df(self): clients = self.network_clients df = pd.DataFrame(list(clients.find())) - active_clients = df['status']=="active" + active_clients = df['status'] == "active" print(df[active_clients]) return df - + def make_single_node_plot(self): """ Plot single node graph with reducer @@ -468,23 +484,24 @@ def make_single_node_plot(self): ("Role", "@role"), ("Status", "@status"), ("Id", "@index"), - ] - + ] + G = networkx.Graph() G.add_node("reducer", adjusted_node_size=20, role='reducer', - status='active', - name='reducer', - color_by_this_attribute=Spectral8[0]) + status='active', + name='reducer', + color_by_this_attribute=Spectral8[0]) network_graph = from_networkx(G, networkx.spring_layout) - network_graph.node_renderer.glyph = Circle(size=20, fill_color = Spectral8[0]) + network_graph.node_renderer.glyph = Circle( + size=20, fill_color=Spectral8[0]) network_graph.node_renderer.hover_glyph = Circle(size=20, fill_color='white', line_width=2) network_graph.node_renderer.selection_glyph = Circle(size=20, fill_color='white', line_width=2) plot = figure(tooltips=HOVER_TOOLTIPS, tools="pan,wheel_zoom,save,reset", active_scroll='wheel_zoom', - width=725, height=460, sizing_mode='stretch_width', - x_range=Range1d(-1.5, 1.5), y_range=Range1d(-1.5, 1.5)) - + width=725, height=460, sizing_mode='stretch_width', + x_range=Range1d(-1.5, 1.5), y_range=Range1d(-1.5, 1.5)) + plot.renderers.append(network_graph) plot.axis.visible = False @@ -492,14 +509,11 @@ def make_single_node_plot(self): plot.outline_line_color = None label = Label(x=0, y=0, text='reducer', - background_fill_color='#4bbf73', text_font_size='15px', - background_fill_alpha=.7, x_offset=-20, y_offset=10) - + background_fill_color='#4bbf73', text_font_size='15px', + background_fill_alpha=.7, x_offset=-20, y_offset=10) + plot.add_layout(label) return plot - - - def make_netgraph_plot(self, df, df_nodes): """ @@ -514,18 +528,21 @@ def make_netgraph_plot(self, df, df_nodes): """ if df.empty: - #no combiners and thus no clients, plot only reducer + # no combiners and thus no clients, plot only reducer plot = self.make_single_node_plot() return plot - - G = networkx.from_pandas_edgelist(df, 'source', 'target', create_using=networkx.Graph()) + + G = networkx.from_pandas_edgelist( + df, 'source', 'target', create_using=networkx.Graph()) degrees = dict(networkx.degree(G)) networkx.set_node_attributes(G, name='degree', values=degrees) number_to_adjust_by = 20 - adjusted_node_size = dict([(node, degree + number_to_adjust_by) for node, degree in networkx.degree(G)]) - networkx.set_node_attributes(G, name='adjusted_node_size', values=adjusted_node_size) - + adjusted_node_size = dict( + [(node, degree + number_to_adjust_by) for node, degree in networkx.degree(G)]) + networkx.set_node_attributes( + G, name='adjusted_node_size', values=adjusted_node_size) + # community from networkx.algorithms import community communities = community.greedy_modularity_communities(G) @@ -543,16 +560,15 @@ def make_netgraph_plot(self, df, df_nodes): networkx.set_node_attributes(G, modularity_class, 'modularity_class') networkx.set_node_attributes(G, modularity_color, 'modularity_color') - node_role = {k:v for k,v in zip(df_nodes.id, df_nodes.role)} + node_role = {k: v for k, v in zip(df_nodes.id, df_nodes.role)} networkx.set_node_attributes(G, node_role, 'role') - - node_status = {k:v for k,v in zip(df_nodes.id, df_nodes.status)} + + node_status = {k: v for k, v in zip(df_nodes.id, df_nodes.status)} networkx.set_node_attributes(G, node_status, 'status') - node_name = {k:v for k,v in zip(df_nodes.id, df_nodes.name)} + node_name = {k: v for k, v in zip(df_nodes.id, df_nodes.name)} networkx.set_node_attributes(G, node_name, 'name') - # Choose colors for node and edge highlighting node_highlight_color = 'white' edge_highlight_color = 'black' @@ -578,29 +594,34 @@ def make_netgraph_plot(self, df, df_nodes): # Create a network graph object # https://networkx.github.io/documentation/networkx-1.9/reference/generated/networkx.drawing.layout.spring_layout.html # if one like lock reducer add args: pos={'reducer':(0,1)}, fixed=['reducer'] - network_graph = from_networkx(G, networkx.spring_layout, scale=1, center=(0, 0), seed=45) + network_graph = from_networkx( + G, networkx.spring_layout, scale=1, center=(0, 0), seed=45) # Set node sizes and colors according to node degree (color as category from attribute) - network_graph.node_renderer.glyph = Circle(size=size_by_this_attribute, fill_color=color_by_this_attribute) + network_graph.node_renderer.glyph = Circle( + size=size_by_this_attribute, fill_color=color_by_this_attribute) # Set node highlight colors network_graph.node_renderer.hover_glyph = Circle(size=size_by_this_attribute, fill_color=node_highlight_color, line_width=2) network_graph.node_renderer.selection_glyph = Circle(size=size_by_this_attribute, fill_color=node_highlight_color, line_width=2) - + # Set edge opacity and width - network_graph.edge_renderer.glyph = MultiLine(line_alpha=0.5, line_width=1) + network_graph.edge_renderer.glyph = MultiLine( + line_alpha=0.5, line_width=1) # Set edge highlight colors - network_graph.edge_renderer.selection_glyph = MultiLine(line_color=edge_highlight_color, line_width=2) - network_graph.edge_renderer.hover_glyph = MultiLine(line_color=edge_highlight_color, line_width=2) + network_graph.edge_renderer.selection_glyph = MultiLine( + line_color=edge_highlight_color, line_width=2) + network_graph.edge_renderer.hover_glyph = MultiLine( + line_color=edge_highlight_color, line_width=2) # Highlight nodes and edges network_graph.selection_policy = NodesAndLinkedEdges() network_graph.inspection_policy = NodesAndLinkedEdges() plot.renderers.append(network_graph) - - #Node labels, red if status is offline, green is active + + # Node labels, red if status is offline, green is active x, y = zip(*network_graph.layout_provider.graph_layout.values()) node_names = list(G.nodes(data='name')) node_status = list(G.nodes(data='status')) @@ -615,14 +636,15 @@ def make_netgraph_plot(self, df, df_nodes): idx_offline.append(e) node_labels.append(n[1]) - source_on = ColumnDataSource({'x': numpy.asarray(x)[idx_online], 'y': numpy.asarray(y)[idx_online], 'name': numpy.asarray(node_labels)[idx_online]}) + source_on = ColumnDataSource({'x': numpy.asarray(x)[idx_online], 'y': numpy.asarray(y)[ + idx_online], 'name': numpy.asarray(node_labels)[idx_online]}) labels = LabelSet(x='x', y='y', text='name', source=source_on, background_fill_color='#4bbf73', text_font_size='15px', background_fill_alpha=.7, x_offset=-20, y_offset=10) plot.renderers.append(labels) - - source_off = ColumnDataSource({'x': numpy.asarray(x)[idx_offline], 'y': numpy.asarray(y)[idx_offline], 'name': numpy.asarray(node_labels)[idx_offline]}) + source_off = ColumnDataSource({'x': numpy.asarray(x)[idx_offline], 'y': numpy.asarray( + y)[idx_offline], 'name': numpy.asarray(node_labels)[idx_offline]}) labels = LabelSet(x='x', y='y', text='name', source=source_off, background_fill_color='#d9534f', text_font_size='15px', background_fill_alpha=.7, x_offset=-20, y_offset=10) @@ -631,4 +653,4 @@ def make_netgraph_plot(self, df, df_nodes): plot.axis.visible = False plot.grid.visible = False plot.outline_line_color = None - return plot \ No newline at end of file + return plot diff --git a/fedn/fedn/clients/reducer/restservice.py b/fedn/fedn/clients/reducer/restservice.py index 313b85549..860c8844f 100644 --- a/fedn/fedn/clients/reducer/restservice.py +++ b/fedn/fedn/clients/reducer/restservice.py @@ -1,33 +1,32 @@ -from urllib import response +import datetime +import json +import math +import os +import re import uuid -from fedn.clients.reducer.interfaces import CombinerInterface -from fedn.clients.reducer.state import ReducerState, ReducerStateToString -from idna import check_initial_combiner -from tenacity import retry -from werkzeug.utils import secure_filename - -from flask import Flask, jsonify, make_response, render_template, request -from flask import redirect, url_for, flash, abort - from threading import Lock -import re +from urllib import response -import os +import geoip2.database import jwt -import datetime -import json -import plotly -import pandas as pd import numpy -import math - +import pandas as pd +import plotly import plotly.express as px -import geoip2.database +from flask import (Flask, abort, flash, jsonify, make_response, redirect, + render_template, request, url_for) +from idna import check_initial_combiner +from tenacity import retry +from werkzeug.utils import secure_filename + +from fedn.clients.reducer.interfaces import CombinerInterface from fedn.clients.reducer.plots import Plot +from fedn.clients.reducer.state import ReducerState, ReducerStateToString UPLOAD_FOLDER = '/app/client/package/' ALLOWED_EXTENSIONS = {'gz', 'bz2', 'tar', 'zip', 'tgz'} + def allowed_file(filename): """ @@ -37,6 +36,7 @@ def allowed_file(filename): return '.' in filename and \ filename.rsplit('.', 1)[1].lower() in ALLOWED_EXTENSIONS + def encode_auth_token(secret_key): """Generates the Auth Token :return: string @@ -57,6 +57,7 @@ def encode_auth_token(secret_key): except Exception as e: return e + def decode_auth_token(auth_token, secret): """Decodes the auth token :param auth_token: @@ -64,7 +65,7 @@ def decode_auth_token(auth_token, secret): """ try: payload = jwt.decode( - auth_token, + auth_token, secret, algorithms=['HS256'] ) @@ -92,18 +93,17 @@ def __init__(self, config, control, certificate_manager, certificate=None): self.port = config['discover_port'] self.network_id = config['name'] + '-network' - + if 'token' in config.keys(): self.token_auth_enabled = True else: self.token_auth_enabled = False - if 'secret_key' in config.keys(): + if 'secret_key' in config.keys(): self.SECRET_KEY = config['secret_key'] else: self.SECRET_KEY = None - self.remote_compute_context = config["remote_compute_context"] if self.remote_compute_context: self.package = 'remote' @@ -139,7 +139,7 @@ def check_compute_context(self): return False else: return True - + def check_initial_model(self): """Check if initial model (seed model) has been configured @@ -151,7 +151,7 @@ def check_initial_model(self): return True else: return False - + def check_configured_response(self): """Check if everything has been configured for client to connect, return response if not. @@ -168,7 +168,7 @@ def check_configured_response(self): return jsonify({'status': 'retry', 'package': self.package, 'msg': "Compute package is not configured. Please upload the compute package."}) - + if not self.check_initial_model(): return jsonify({'status': 'retry', 'package': self.package, @@ -211,28 +211,31 @@ def authorize(self, r, secret): """ try: # Get token - if 'Authorization' in r.headers: # header auth + if 'Authorization' in r.headers: # header auth request_token = r.headers.get('Authorization').split()[1] - elif 'token' in r.args: # args auth + elif 'token' in r.args: # args auth request_token = str(r.args.get('token')) elif 'fedn_token' in r.cookies: request_token = r.cookies.get('fedn_token') - else: # no token provided + else: # no token provided print('Authorization failed. No token provided.', flush=True) abort(401) # Log token and secret - print(f'Secret: {secret}. Request token: {request_token}.', flush=True) + print( + f'Secret: {secret}. Request token: {request_token}.', flush=True) # Authenticate status = decode_auth_token(request_token, secret) if status == 'Success': return True else: - print('Authorization failed. Status: "{}"'.format(status), flush=True) + print('Authorization failed. Status: "{}"'.format( + status), flush=True) abort(401) except Exception as e: - print('Authorization failed. Expection encountered: "{}".'.format(e), flush=True) + print('Authorization failed. Expection encountered: "{}".'.format( + e), flush=True) abort(401) def run(self): @@ -263,12 +266,12 @@ def index(): message = request.args.get('message', None) message_type = request.args.get('message_type', None) template = render_template('events.html', client=self.name, state=ReducerStateToString(self.control.state()), - events=events, - logs=None, refresh=True, configured=True, message=message, message_type=message_type) + events=events, + logs=None, refresh=True, configured=True, message=message, message_type=message_type) # Set token cookie in response if needed response = make_response(template) - if 'token' in request.args: # args auth + if 'token' in request.args: # args auth response.set_cookie('fedn_token', str(request.args['token'])) # Return response @@ -298,16 +301,16 @@ def netgraph(): "label": "Reducer", "role": 'reducer', "status": 'active', - "name": 'reducer', #TODO: get real host name + "name": 'reducer', # TODO: get real host name "type": 'reducer', }) - + combiner_info = combiner_status() client_info = client_status() if len(combiner_info) < 1: return result - + for combiner in combiner_info: print("combiner info {}".format(combiner_info), flush=True) try: @@ -315,7 +318,7 @@ def netgraph(): "id": combiner['name'], # "n{}".format(count), "label": "Combiner ({} clients)".format(combiner['nr_active_clients']), "role": 'combiner', - "status": 'active', #TODO: Hard-coded, combiner_info does not contain status + "status": 'active', # TODO: Hard-coded, combiner_info does not contain status "name": combiner['name'], "type": 'combiner', }) @@ -335,7 +338,7 @@ def netgraph(): }) except Exception as err: print(err) - + count = 0 for node in result['nodes']: try: @@ -380,6 +383,7 @@ def events(): :return: """ import json + from bson import json_util json_docs = [] @@ -413,7 +417,8 @@ def add(): if not combiner: # Create a new combiner import base64 - certificate, key = self.certificate_manager.get_or_create(address).get_keypair_raw() + certificate, key = self.certificate_manager.get_or_create( + address).get_keypair_raw() cert_b64 = base64.b64encode(certificate) key_b64 = base64.b64encode(key) @@ -490,7 +495,8 @@ def delete_model_trail(): if request.method == 'POST': from fedn.common.tracer.mongotracer import MongoTracer statestore_config = self.control.statestore.get_config() - self.tracer = MongoTracer(statestore_config['mongo_config'], statestore_config['network_id']) + self.tracer = MongoTracer( + statestore_config['mongo_config'], statestore_config['network_id']) try: self.control.drop_models() except: @@ -550,7 +556,7 @@ def control(): # checking if there are enough clients connected to start! clients_available = 0 for combiner in self.control.network.get_combiners(): - try: + try: combiner_state = combiner.report() nac = combiner_state['nr_active_clients'] clients_available = clients_available + int(nac) @@ -577,7 +583,8 @@ def control(): 'validate': validate, 'helper_type': helper_type} import threading - threading.Thread(target=self.control.instruct, args=(config,)).start() + threading.Thread(target=self.control.instruct, + args=(config,)).start() # self.control.instruct(config) return redirect(url_for('index', state=state, refresh=refresh, message="Sent execution plan.", message_type='SUCCESS')) @@ -614,7 +621,6 @@ def assign(): if response: return response - name = request.args.get('name', None) combiner_preferred = request.args.get('combiner', None) @@ -636,7 +642,7 @@ def assign(): 'status': 'available' } - # Add client to database + # Add client to database self.control.network.add_client(client) # Return connection information to client @@ -698,19 +704,26 @@ def client_status(): for client in combiner_info: active_trainers_str = client['active_trainers'] active_validators_str = client['active_validators'] - active_trainers_str = re.sub('[^a-zA-Z0-9-:\n\.]', '', active_trainers_str).replace('name:', ' ') - active_validators_str = re.sub('[^a-zA-Z0-9-:\n\.]', '', active_validators_str).replace('name:', ' ') - all_active_trainers.extend(' '.join(active_trainers_str.split(" ")).split()) - all_active_validators.extend(' '.join(active_validators_str.split(" ")).split()) - - active_trainers_list = [client for client in client_info if client['name'] in all_active_trainers] - active_validators_list = [cl for cl in client_info if cl['name'] in all_active_validators] + active_trainers_str = re.sub( + '[^a-zA-Z0-9-:\n\.]', '', active_trainers_str).replace('name:', ' ') + active_validators_str = re.sub( + '[^a-zA-Z0-9-:\n\.]', '', active_validators_str).replace('name:', ' ') + all_active_trainers.extend( + ' '.join(active_trainers_str.split(" ")).split()) + all_active_validators.extend( + ' '.join(active_validators_str.split(" ")).split()) + + active_trainers_list = [ + client for client in client_info if client['name'] in all_active_trainers] + active_validators_list = [ + cl for cl in client_info if cl['name'] in all_active_validators] all_clients = [cl for cl in client_info] for client in all_clients: status = 'offline' role = 'None' - self.control.network.update_client_data(client, status, role) + self.control.network.update_client_data( + client, status, role) all_active_clients = active_validators_list + active_trainers_list for client in all_active_clients: @@ -723,14 +736,15 @@ def client_status(): role = 'validator' else: role = 'unknown' - self.control.network.update_client_data(client, status, role) + self.control.network.update_client_data( + client, status, role) return {'active_clients': all_clients, 'active_trainers': active_trainers_list, 'active_validators': active_validators_list } except: - pass + pass return {'active_clients': [], 'active_trainers': [], @@ -757,7 +771,7 @@ def dashboard(): # Token auth if self.token_auth_enabled: self.authorize(request, app.config.get('SECRET_KEY')) - + not_configured = self.check_configured() if not_configured: return not_configured @@ -792,7 +806,7 @@ def network(): # Token auth if self.token_auth_enabled: self.authorize(request, app.config.get('SECRET_KEY')) - + not_configured = self.check_configured() if not_configured: return not_configured @@ -847,6 +861,7 @@ def config_download(): chk_string=chk_string) from io import BytesIO + from flask import send_file obj = BytesIO() obj.write(ctx.encode('UTF-8')) @@ -868,7 +883,8 @@ def context(): # if self.control.state() != ReducerState.setup or self.control.state() != ReducerState.idle: # return "Error, Context already assigned!" - reset = request.args.get('reset', None) # if reset is not empty then allow context re-set + # if reset is not empty then allow context re-set + reset = request.args.get('reset', None) if reset: return render_template('context.html') @@ -888,7 +904,8 @@ def context(): if file and allowed_file(file.filename): filename = secure_filename(file.filename) - file_path = os.path.join(app.config['UPLOAD_FOLDER'], filename) + file_path = os.path.join( + app.config['UPLOAD_FOLDER'], filename) file.save(file_path) if self.control.state() == ReducerState.instructing or self.control.state() == ReducerState.monitoring: @@ -907,7 +924,7 @@ def context(): return render_template('context.html') # There is a potential race condition here, if one client requests a package and at - # the same time another one triggers a fetch from Minio and writes to disk. + # the same time another one triggers a fetch from Minio and writes to disk. try: mutex = Lock() mutex.acquire() @@ -957,5 +974,5 @@ def checksum(): str(self.certificate.key_path)), flush=True) app.run(host="0.0.0.0", port=self.port, ssl_context=(str(self.certificate.cert_path), str(self.certificate.key_path))) - + return app diff --git a/fedn/fedn/clients/reducer/statestore/mongoreducerstatestore.py b/fedn/fedn/clients/reducer/statestore/mongoreducerstatestore.py index 1c36c2466..1a1030853 100644 --- a/fedn/fedn/clients/reducer/statestore/mongoreducerstatestore.py +++ b/fedn/fedn/clients/reducer/statestore/mongoreducerstatestore.py @@ -1,5 +1,7 @@ -from fedn.clients.reducer.state import ReducerStateToString, StringToReducerState +from fedn.clients.reducer.state import (ReducerStateToString, + StringToReducerState) from fedn.common.storage.db.mongo import connect_to_mongodb + from .reducerstatestore import ReducerStateStore @@ -22,7 +24,7 @@ def __init__(self, network_id, config, defaults=None): self.clients = self.network['clients'] self.storage = self.network['storage'] self.certificates = self.network['certificates'] - # Control + # Control self.control = self.mdb['control'] self.control_config = self.control['config'] self.state = self.control['state'] @@ -70,11 +72,12 @@ def __init__(self, network_id, config, defaults=None): flush=True) if "context" in control: - print("Setting filepath to {}".format(control['context']), flush=True) + print("Setting filepath to {}".format( + control['context']), flush=True) # TODO Fix the ugly latering of indirection due to a bug in secure_filename returning an object with filename as attribute # TODO fix with unboxing of value before storing and where consuming. self.control.config.update_one({'key': 'package'}, - {'$set': {'filename': control['context']}}, True) + {'$set': {'filename': control['context']}}, True) if "helper" in control: # self.set_framework(control['helper']) pass @@ -133,7 +136,8 @@ def transition(self, state): if old_state != state: return self.state.update_one({'state': 'current_state'}, {'$set': {'state': ReducerStateToString(state)}}, True) else: - print("Not updating state, already in {}".format(ReducerStateToString(state))) + print("Not updating state, already in {}".format( + ReducerStateToString(state))) def set_latest(self, model_id): """ @@ -141,14 +145,16 @@ def set_latest(self, model_id): :param model_id: """ from datetime import datetime - x = self.model.update_one({'key': 'current_model'}, {'$set': {'model': model_id}}, True) + x = self.model.update_one({'key': 'current_model'}, { + '$set': {'model': model_id}}, True) self.model.update_one({'key': 'model_trail'}, {'$push': {'model': model_id, 'committed_at': str(datetime.now())}}, - True) + True) def get_first(self): """ Return model_id for the latest model in the model_trail """ import pymongo - ret = self.model.find_one({'key': 'model_trail'}, sort=[("committed_at", pymongo.ASCENDING)]) + ret = self.model.find_one({'key': 'model_trail'}, sort=[ + ("committed_at", pymongo.ASCENDING)]) if ret == None: return None @@ -180,7 +186,8 @@ def set_round_config(self, config): :param config: """ from datetime import datetime - x = self.control.config.update_one({'key': 'round_config'}, {'$set': config}, True) + x = self.control.config.update_one( + {'key': 'round_config'}, {'$set': config}, True) def get_round_config(self): """ @@ -202,9 +209,10 @@ def set_compute_context(self, filename): :param filename: """ from datetime import datetime - x = self.control.config.update_one({'key': 'package'}, {'$set': {'filename': filename}}, True) + x = self.control.config.update_one( + {'key': 'package'}, {'$set': {'filename': filename}}, True) self.control.config.update_one({'key': 'package_trail'}, - {'$push': {'filename': filename, 'committed_at': str(datetime.now())}}, True) + {'$push': {'filename': filename, 'committed_at': str(datetime.now())}}, True) def get_compute_context(self): """ @@ -226,7 +234,7 @@ def set_framework(self, helper): :param helper: """ self.control.config.update_one({'key': 'package'}, - {'$set': {'helper': helper}}, True) + {'$set': {'helper': helper}}, True) def get_framework(self): """ @@ -234,9 +242,9 @@ def get_framework(self): :return: """ ret = self.control.config.find_one({'key': 'package'}) - #if local compute package used, then 'package' is None + # if local compute package used, then 'package' is None if not ret: - #get framework from round_config instead + # get framework from round_config instead ret = self.control.config.find_one({'key': 'round_config'}) print('FRAMEWORK:', ret) try: @@ -275,25 +283,28 @@ def get_events(self): def get_storage_backend(self): """ """ try: - ret = self.storage.find({'status': 'enabled'}, projection={'_id': False}) + ret = self.storage.find( + {'status': 'enabled'}, projection={'_id': False}) return ret[0] except (KeyError, IndexError): return None def set_storage_backend(self, config): """ """ - from datetime import datetime import copy + from datetime import datetime config = copy.deepcopy(config) config['updated_at'] = str(datetime.now()) config['status'] = 'enabled' - ret = self.storage.update_one({'storage_type': config['storage_type']}, {'$set': config}, True) + ret = self.storage.update_one( + {'storage_type': config['storage_type']}, {'$set': config}, True) def set_reducer(self, reducer_data): """ """ from datetime import datetime reducer_data['updated_at'] = str(datetime.now()) - ret = self.reducer.update_one({'name': reducer_data['name']}, {'$set': reducer_data}, True) + ret = self.reducer.update_one({'name': reducer_data['name']}, { + '$set': reducer_data}, True) def get_reducer(self): """ """ @@ -334,14 +345,16 @@ def set_combiner(self, combiner_data): """ from datetime import datetime combiner_data['updated_at'] = str(datetime.now()) - ret = self.combiners.update_one({'name': combiner_data['name']}, {'$set': combiner_data}, True) + ret = self.combiners.update_one({'name': combiner_data['name']}, { + '$set': combiner_data}, True) def delete_combiner(self, combiner): """ """ try: self.combiners.delete_one({'name': combiner}) except: - print("WARNING, failed to delete combiner: {}".format(combiner), flush=True) + print("WARNING, failed to delete combiner: {}".format( + combiner), flush=True) def set_client(self, client_data): """ @@ -350,7 +363,8 @@ def set_client(self, client_data): """ from datetime import datetime client_data['updated_at'] = str(datetime.now()) - ret = self.clients.update_one({'name': client_data['name']}, {'$set': client_data}, True) + ret = self.clients.update_one({'name': client_data['name']}, { + '$set': client_data}, True) def get_client(self, name): """ """ @@ -373,7 +387,7 @@ def list_clients(self): def drop_control(self): """ """ - # Control + # Control self.state.drop() self.control_config.drop() self.control.drop() @@ -400,4 +414,4 @@ def update_client_status(self, client_data, status, role): "status": status, "role": role } - }) + }) diff --git a/fedn/fedn/combiner.py b/fedn/fedn/combiner.py index cb907fc51..8b38a6d37 100644 --- a/fedn/fedn/combiner.py +++ b/fedn/fedn/combiner.py @@ -1,27 +1,25 @@ +import base64 +import io +import json import os import queue import sys import threading +import time import uuid +from collections import defaultdict from datetime import datetime, timedelta +from enum import Enum + +import requests -from fedn.common.net.connect import ConnectorCombiner, Status -from fedn.common.net.grpc.server import Server import fedn.common.net.grpc.fedn_pb2 as fedn import fedn.common.net.grpc.fedn_pb2_grpc as rpc - from fedn.clients.combiner.modelservice import ModelService +from fedn.common.net.connect import ConnectorCombiner, Status +from fedn.common.net.grpc.server import Server from fedn.common.storage.s3.s3repo import S3ModelRepository -import requests -import json -import io -import time -import base64 - -from collections import defaultdict - -from enum import Enum class Role(Enum): WORKER = 1 @@ -54,7 +52,7 @@ class Combiner(rpc.CombinerServicer, rpc.ReducerServicer, rpc.ConnectorServicer, def __init__(self, connect_config): - # Holds client queues + # Holds client queues self.clients = {} self.modelservice = ModelService() @@ -81,13 +79,13 @@ def __init__(self, connect_config): continue if status == Status.Assigned: config = response - print("COMBINER: was announced successfully. Waiting for clients and commands!", flush=True) + print( + "COMBINER: was announced successfully. Waiting for clients and commands!", flush=True) break if status == Status.UnAuthorized: print(response, flush=True) sys.exit("Exiting: Unauthorized") - cert = base64.b64decode(config['certificate']) # .decode('utf-8') key = base64.b64decode(config['key']) # .decode('utf-8') @@ -96,15 +94,18 @@ def __init__(self, connect_config): 'certificate': cert, 'key': key} - self.repository = S3ModelRepository(config['storage']['storage_config']) + self.repository = S3ModelRepository( + config['storage']['storage_config']) self.server = Server(self, self.modelservice, grpc_config) from fedn.common.tracer.mongotracer import MongoTracer - self.tracer = MongoTracer(config['statestore']['mongo_config'], config['statestore']['network_id']) + self.tracer = MongoTracer( + config['statestore']['mongo_config'], config['statestore']['network_id']) from fedn.clients.combiner.roundcontrol import RoundControl - self.control = RoundControl(self.id, self.repository, self, self.modelservice) - threading.Thread(target=self.control.run, daemon=True).start() + self.control = RoundControl( + self.id, self.repository, self, self.modelservice) + threading.Thread(target=self.control.run, daemon=True).start() self.server.start() @@ -144,11 +145,12 @@ def set_active_model(self, model_id): self.model_id = model_id def report_status(self, msg, log_level=fedn.Status.INFO, type=None, request=None, flush=True): - print("{}:COMBINER({}):{} {}".format(datetime.now().strftime('%Y-%m-%d %H:%M:%S'), self.id, log_level, msg), flush=flush) + print("{}:COMBINER({}):{} {}".format(datetime.now().strftime( + '%Y-%m-%d %H:%M:%S'), self.id, log_level, msg), flush=flush) def request_model_update(self, model_id, clients=[]): """ Ask clients to update the current global model. - + Parameters ---------- model_id : str @@ -157,7 +159,7 @@ def request_model_update(self, model_id, clients=[]): List of clients to submit a model update request to. An empty list (default) results in a broadcast to all connected trainig clients. - + """ request = fedn.ModelUpdateRequest() @@ -173,9 +175,9 @@ def request_model_update(self, model_id, clients=[]): request.receiver.name = client.name request.receiver.role = fedn.WORKER self.SendModelUpdateRequest(request, self) - - print("COMBINER: Sent model update request for model {} to clients {}".format(model_id,clients), flush=True) + print("COMBINER: Sent model update request for model {} to clients {}".format( + model_id, clients), flush=True) def request_model_validation(self, model_id, clients=[]): """ Ask clients to validate the current global model. @@ -188,9 +190,9 @@ def request_model_validation(self, model_id, clients=[]): List of clients to submit a model update request to. An empty list (default) results in a broadcast to all connected trainig clients. - + """ - + request = fedn.ModelValidationRequest() self.__whoami(request.sender, self) request.model_id = model_id @@ -205,7 +207,8 @@ def request_model_validation(self, model_id, clients=[]): request.receiver.role = fedn.WORKER self.SendModelValidationRequest(request, self) - print("COMBINER: Sent validation request for model {} to clients {}".format(model_id,clients), flush=True) + print("COMBINER: Sent validation request for model {} to clients {}".format( + model_id, clients), flush=True) def _list_clients(self, channel): request = fedn.ListClientsRequest() @@ -279,7 +282,8 @@ def __route_request_to_client(self, request, client, queue_name): q = self.__get_queue(client, queue_name) q.put(request) except: - print("Failed to route request to client: {} {}", request.receiver, queue_name) + print("Failed to route request to client: {} {}", + request.receiver, queue_name) raise def _send_status(self, status): @@ -300,7 +304,7 @@ def __register_heartbeat(self, client): ##################################################################################################################### - ## Control Service + # Control Service def Start(self, control: fedn.ControlRequest, context): """ Push a round config to RoundControl. @@ -315,7 +319,8 @@ def Start(self, control: fedn.ControlRequest, context): config = {} for parameter in control.parameter: config.update({parameter.key: parameter.value}) - print("\n\nSTARTING ROUND AT COMBINER WITH ROUND CONFIG: {}\n\n".format(config), flush=True) + print("\n\nSTARTING ROUND AT COMBINER WITH ROUND CONFIG: {}\n\n".format( + config), flush=True) job_id = self.control.push_round_config(config) return response @@ -353,7 +358,7 @@ def Report(self, control: fedn.ControlRequest, context): p = response.parameter.add() p.key = "nr_active_trainers" p.value = str(len(active_trainers)) - + active_validators = self.get_active_validators() p = response.parameter.add() p.key = "nr_active_validators" @@ -378,7 +383,7 @@ def Report(self, control: fedn.ControlRequest, context): p = response.parameter.add() p.key = "nr_active_clients" p.value = str(len(active_trainers)+len(active_validators)) - + p = response.parameter.add() p.key = "model_id" model_id = self.get_active_model() @@ -393,14 +398,15 @@ def Report(self, control: fedn.ControlRequest, context): p = response.parameter.add() p.key = "name" p.value = str(self.id) - + return response ##################################################################################################################### def AllianceStatusStream(self, response, context): """ A server stream RPC endpoint that emits status messages. """ - status = fedn.Status(status="Client {} connecting to AllianceStatusStream.".format(response.sender)) + status = fedn.Status( + status="Client {} connecting to AllianceStatusStream.".format(response.sender)) status.log_level = fedn.Status.INFO status.sender.name = self.id status.sender.role = role_to_proto_role(self.role) @@ -466,7 +472,8 @@ def AcceptingClients(self, request: fedn.ConnectionRequest, context): :return: """ response = fedn.ConnectionResponse() - active_clients = self._list_active_clients(fedn.Channel.MODEL_UPDATE_REQUESTS) + active_clients = self._list_active_clients( + fedn.Channel.MODEL_UPDATE_REQUESTS) try: requested = int(self.max_clients) @@ -494,7 +501,7 @@ def SendHeartbeat(self, heartbeat: fedn.Heartbeat, context): response.response = "Heartbeat received" return response - ## Combiner Service + # Combiner Service def ModelUpdateStream(self, update, context): """ @@ -503,7 +510,8 @@ def ModelUpdateStream(self, update, context): :param context: """ client = update.sender - status = fedn.Status(status="Client {} connecting to ModelUpdateStream.".format(client.name)) + status = fedn.Status( + status="Client {} connecting to ModelUpdateStream.".format(client.name)) status.log_level = fedn.Status.INFO status.sender.name = self.id status.sender.role = role_to_proto_role(self.role) @@ -517,7 +525,7 @@ def ModelUpdateStream(self, update, context): try: yield q.get(timeout=1.0) except queue.Empty: - pass + pass def ModelUpdateRequestStream(self, response, context): """ A server stream RPC endpoint. Messages from client stream. """ @@ -527,14 +535,15 @@ def ModelUpdateRequestStream(self, response, context): if metadata: print("\n\n\nGOT METADATA: {}\n\n\n".format(metadata), flush=True) - status = fedn.Status(status="Client {} connecting to ModelUpdateRequestStream.".format(client.name)) + status = fedn.Status( + status="Client {} connecting to ModelUpdateRequestStream.".format(client.name)) status.log_level = fedn.Status.INFO status.timestamp = str(datetime.now()) - self.__whoami(status.sender, self) - self._subscribe_client_to_queue(client, fedn.Channel.MODEL_UPDATE_REQUESTS) + self._subscribe_client_to_queue( + client, fedn.Channel.MODEL_UPDATE_REQUESTS) q = self.__get_queue(client, fedn.Channel.MODEL_UPDATE_REQUESTS) self._send_status(status) @@ -543,8 +552,7 @@ def ModelUpdateRequestStream(self, response, context): try: yield q.get(timeout=1.0) except queue.Empty: - pass - + pass def ModelValidationStream(self, update, context): """ @@ -553,7 +561,8 @@ def ModelValidationStream(self, update, context): :param context: """ client = update.sender - status = fedn.Status(status="Client {} connecting to ModelValidationStream.".format(client.name)) + status = fedn.Status( + status="Client {} connecting to ModelValidationStream.".format(client.name)) status.log_level = fedn.Status.INFO status.sender.name = self.id @@ -568,20 +577,21 @@ def ModelValidationStream(self, update, context): try: yield q.get(timeout=1.0) except queue.Empty: - pass + pass def ModelValidationRequestStream(self, response, context): """ A server stream RPC endpoint. Messages from client stream. """ client = response.sender - status = fedn.Status(status="Client {} connecting to ModelValidationRequestStream.".format(client.name)) + status = fedn.Status( + status="Client {} connecting to ModelValidationRequestStream.".format(client.name)) status.log_level = fedn.Status.INFO status.sender.name = self.id status.sender.role = role_to_proto_role(self.role) status.timestamp = str(datetime.now()) - - self._subscribe_client_to_queue(client, fedn.Channel.MODEL_VALIDATION_REQUESTS) + self._subscribe_client_to_queue( + client, fedn.Channel.MODEL_VALIDATION_REQUESTS) q = self.__get_queue(client, fedn.Channel.MODEL_VALIDATION_REQUESTS) self._send_status(status) @@ -590,14 +600,15 @@ def ModelValidationRequestStream(self, response, context): try: yield q.get(timeout=1.0) except queue.Empty: - pass + pass def SendModelUpdateRequest(self, request, context): """ Send a model update request. """ self._send_request(request, fedn.Channel.MODEL_UPDATE_REQUESTS) response = fedn.Response() - response.response = "CONTROLLER RECEIVED ModelUpdateRequest from client {}".format(request.sender.name) + response.response = "CONTROLLER RECEIVED ModelUpdateRequest from client {}".format( + request.sender.name) return response # TODO Fill later def SendModelUpdate(self, request, context): @@ -606,7 +617,8 @@ def SendModelUpdate(self, request, context): print("ORCHESTRATOR: Received model update", flush=True) response = fedn.Response() - response.response = "RECEIVED ModelUpdate {} from client {}".format(response, response.sender.name) + response.response = "RECEIVED ModelUpdate {} from client {}".format( + response, response.sender.name) return response # TODO Fill later def SendModelValidationRequest(self, request, context): @@ -614,7 +626,8 @@ def SendModelValidationRequest(self, request, context): self._send_request(request, fedn.Channel.MODEL_VALIDATION_REQUESTS) response = fedn.Response() - response.response = "CONTROLLER RECEIVED ModelValidationRequest from client {}".format(request.sender.name) + response.response = "CONTROLLER RECEIVED ModelValidationRequest from client {}".format( + request.sender.name) return response # TODO Fill later def SendModelValidation(self, request, context): @@ -622,10 +635,11 @@ def SendModelValidation(self, request, context): self.control.aggregator.on_model_validation(request) print("ORCHESTRATOR received validation ", flush=True) response = fedn.Response() - response.response = "RECEIVED ModelValidation {} from client {}".format(response, response.sender.name) + response.response = "RECEIVED ModelValidation {} from client {}".format( + response, response.sender.name) return response # TODO Fill later - ## Reducer Service + # Reducer Service def GetGlobalModel(self, request, context): """ @@ -651,7 +665,8 @@ def run(self): """ import signal - print("COMBINER: {} started, ready for requests. ".format(self.id), flush=True) + print("COMBINER: {} started, ready for requests. ".format( + self.id), flush=True) try: while True: signal.pause() diff --git a/fedn/fedn/common/control/package.py b/fedn/fedn/common/control/package.py index 8f31bb83e..d15817054 100644 --- a/fedn/fedn/common/control/package.py +++ b/fedn/fedn/common/control/package.py @@ -68,11 +68,14 @@ def upload(self): """ if self.package_file: - import requests import os + + import requests + # data = {'name': self.package_file, 'hash': str(self.package_hash)} # print("going to send {}".format(data),flush=True) - f = open(os.path.join(os.path.dirname(self.file_path), self.package_file), 'rb') + f = open(os.path.join(os.path.dirname( + self.file_path), self.package_file), 'rb') print("Sending the following file {}".format(f.read()), flush=True) f.seek(0, 0) files = {'file': f} @@ -82,7 +85,8 @@ def upload(self): # data=data, headers={'Authorization': 'Token {}'.format(self.reducer_token)}) except Exception as e: - print("failed to put execution context to reducer. {}".format(e), flush=True) + print("failed to put execution context to reducer. {}".format( + e), flush=True) finally: f.close() @@ -97,9 +101,9 @@ class PackageRuntime: def __init__(self, package_path, package_dir): self.dispatch_config = {'entry_points': - {'predict': {'command': 'python3 predict.py'}, - 'train': {'command': 'python3 train.py'}, - 'validate': {'command': 'python3 validate.py'}}} + {'predict': {'command': 'python3 predict.py'}, + 'train': {'command': 'python3 train.py'}, + 'validate': {'command': 'python3 validate.py'}}} self.pkg_path = package_path self.pkg_name = None @@ -125,7 +129,8 @@ def download(self, host, port, token, name=None): with requests.get(path, stream=True, verify=False, headers={'Authorization': 'Token {}'.format(token)}) as r: if 200 <= r.status_code < 204: import cgi - params = cgi.parse_header(r.headers.get('Content-Disposition', ''))[-1] + params = cgi.parse_header( + r.headers.get('Content-Disposition', ''))[-1] try: self.pkg_name = params['filename'] except KeyError: @@ -186,11 +191,14 @@ def unpack(self): if self.pkg_name: f = None if self.pkg_name.endswith('tar.gz'): - f = tarfile.open(os.path.join(self.pkg_path, self.pkg_name), 'r:gz') + f = tarfile.open(os.path.join( + self.pkg_path, self.pkg_name), 'r:gz') if self.pkg_name.endswith('.tgz'): - f = tarfile.open(os.path.join(self.pkg_path, self.pkg_name), 'r:gz') + f = tarfile.open(os.path.join( + self.pkg_path, self.pkg_name), 'r:gz') if self.pkg_name.endswith('tar.bz2'): - f = tarfile.open(os.path.join(self.pkg_path, self.pkg_name), 'r:bz2') + f = tarfile.open(os.path.join( + self.pkg_path, self.pkg_name), 'r:bz2') else: print( "Failed to unpack compute package, no pkg_name set. Has the reducer been configured with a compute package?") @@ -202,7 +210,8 @@ def unpack(self): if f: f.extractall() - print("Successfully extracted compute package content in {}".format(self.dir), flush=True) + print("Successfully extracted compute package content in {}".format( + self.dir), flush=True) except: print("Error extracting files!") @@ -213,9 +222,10 @@ def dispatcher(self, run_path): :return: """ from_path = os.path.join(os.getcwd(), 'client') - + from distutils.dir_util import copy_tree - copy_tree(from_path, run_path, preserve_times=False) # preserve_times=False ensures compatibility with Gramine LibOS + # preserve_times=False ensures compatibility with Gramine LibOS + copy_tree(from_path, run_path, preserve_times=False) try: cfg = None @@ -225,7 +235,8 @@ def dispatcher(self, run_path): self.dispatch_config = cfg except Exception as e: - print("Error trying to load and unpack dispatcher config - trying default", flush=True) + print( + "Error trying to load and unpack dispatcher config - trying default", flush=True) dispatcher = Dispatcher(self.dispatch_config, run_path) diff --git a/fedn/fedn/common/net/connect.py b/fedn/fedn/common/net/connect.py index 0e4a3e806..5de56d354 100644 --- a/fedn/fedn/common/net/connect.py +++ b/fedn/fedn/common/net/connect.py @@ -1,3 +1,4 @@ +from fedn.common.security.certificate import Certificate import enum from http.client import UNAUTHORIZED @@ -15,10 +16,7 @@ class Status(enum.Enum): Assigned = 1 TryAgain = 2 UnAuthorized = 3 - UnMatchedConfig = 4 - - -from fedn.common.security.certificate import Certificate + UnMatchedConfig = 4 class ConnectorClient: @@ -56,8 +54,10 @@ def __init__(self, host, port, token, name, remote_package, combiner=None, id=No self.verify_cert = False self.prefix = prefix - self.connect_string = "{}{}:{}".format(self.prefix, self.host, self.port) - print("\n\nsetting the connection string to {}\n\n".format(self.connect_string), flush=True) + self.connect_string = "{}{}:{}".format( + self.prefix, self.host, self.port) + print("\n\nsetting the connection string to {}\n\n".format( + self.connect_string), flush=True) if self.certificate: print("Securely connecting with certificate", flush=True) @@ -87,15 +87,16 @@ def assign(self): print('***** {}'.format(e), flush=True) # self.state = State.Disconnected return Status.Unassigned, {} - + if retval.status_code == 401: reason = "Unauthorized connection to reducer, make sure the correct token is set" return Status.UnAuthorized, reason - + reducer_package = retval.json()['package'] if reducer_package != self.package: - reason = "Unmatched config of compute package between client and reducer.\n"+\ - "Reducer uses {} package and client uses {}.".format(reducer_package, self.package) + reason = "Unmatched config of compute package between client and reducer.\n" +\ + "Reducer uses {} package and client uses {}.".format( + reducer_package, self.package) return Status.UnMatchedConfig, reason if retval.status_code >= 200 and retval.status_code < 204: @@ -145,8 +146,10 @@ def __init__(self, host, port, myhost, myport, token, name, secure=True, preshar self.verify_cert = False self.prefix = prefix - self.connect_string = "{}{}:{}".format(self.prefix, self.host, self.port) - print("\n\nsetting the connection string to {}\n\n".format(self.connect_string), flush=True) + self.connect_string = "{}{}:{}".format( + self.prefix, self.host, self.port) + print("\n\nsetting the connection string to {}\n\n".format( + self.connect_string), flush=True) print("Securely connecting with certificate", flush=True) def state(self): @@ -172,11 +175,11 @@ def announce(self): except Exception as e: # self.state = State.Disconnected return Status.Unassigned, {} - + if retval.status_code == 401: reason = "Unauthorized connection to reducer, make sure the correct token is set" return Status.UnAuthorized, reason - + if retval.status_code >= 200 and retval.status_code < 204: if retval.json()['status'] == 'retry': reason = "Reducer was not ready. Try again later." diff --git a/fedn/fedn/common/net/grpc/fedn_pb2.py b/fedn/fedn/common/net/grpc/fedn_pb2.py index 64a7a6ddf..f53fd40e6 100644 --- a/fedn/fedn/common/net/grpc/fedn_pb2.py +++ b/fedn/fedn/common/net/grpc/fedn_pb2.py @@ -2,11 +2,11 @@ # Generated by the protocol buffer compiler. DO NOT EDIT! # source: fedn/common/net/grpc/fedn.proto """Generated protocol buffer code.""" -from google.protobuf.internal import enum_type_wrapper from google.protobuf import descriptor as _descriptor from google.protobuf import message as _message from google.protobuf import reflection as _reflection from google.protobuf import symbol_database as _symbol_database +from google.protobuf.internal import enum_type_wrapper # @@protoc_insertion_point(imports) diff --git a/fedn/fedn/common/net/grpc/fedn_pb2_grpc.py b/fedn/fedn/common/net/grpc/fedn_pb2_grpc.py index 072493cc5..9989824f7 100644 --- a/fedn/fedn/common/net/grpc/fedn_pb2_grpc.py +++ b/fedn/fedn/common/net/grpc/fedn_pb2_grpc.py @@ -2,7 +2,8 @@ """Client and server classes corresponding to protobuf-defined services.""" import grpc -from fedn.common.net.grpc import fedn_pb2 as fedn_dot_common_dot_net_dot_grpc_dot_fedn__pb2 +from fedn.common.net.grpc import \ + fedn_pb2 as fedn_dot_common_dot_net_dot_grpc_dot_fedn__pb2 class ModelServiceStub(object): diff --git a/fedn/fedn/common/net/grpc/server.py b/fedn/fedn/common/net/grpc/server.py index 1b15f7383..79a251de1 100644 --- a/fedn/fedn/common/net/grpc/server.py +++ b/fedn/fedn/common/net/grpc/server.py @@ -1,8 +1,9 @@ from concurrent import futures -import fedn.common.net.grpc.fedn_pb2_grpc as rpc import grpc +import fedn.common.net.grpc.fedn_pb2_grpc as rpc + class Server: """ @@ -26,15 +27,17 @@ def __init__(self, servicer, modelservicer, config): rpc.add_ControlServicer_to_server(servicer, self.server) if config['secure']: - from fedn.common.security.certificate import Certificate import os - # self.certificate = Certificate(os.getcwd() + '/certs/', cert_name='combiner-cert.pem', key_name='combiner-key.pem') + from fedn.common.security.certificate import Certificate + + # self.certificate = Certificate(os.getcwd() + '/certs/', cert_name='combiner-cert.pem', key_name='combiner-key.pem') # self.certificate.set_keypair_raw(config['certificate'], config['key']) server_credentials = grpc.ssl_server_credentials( ((config['key'], config['certificate'],),)) - self.server.add_secure_port('[::]:' + str(config['port']), server_credentials) + self.server.add_secure_port( + '[::]:' + str(config['port']), server_credentials) else: self.server.add_insecure_port('[::]:' + str(config['port'])) diff --git a/fedn/fedn/common/net/web/__init__.py b/fedn/fedn/common/net/web/__init__.py index ff1b58e20..c87d94d17 100644 --- a/fedn/fedn/common/net/web/__init__.py +++ b/fedn/fedn/common/net/web/__init__.py @@ -1,5 +1,6 @@ -from os.path import dirname, basename, isfile import glob +from os.path import basename, dirname, isfile modules = glob.glob(dirname(__file__) + "/*.py") -__all__ = [basename(f)[:-3] for f in modules if isfile(f) and not f.endswith('__init__.py')] +__all__ = [basename(f)[:-3] for f in modules if isfile(f) + and not f.endswith('__init__.py')] diff --git a/fedn/fedn/common/security/certificate.py b/fedn/fedn/common/security/certificate.py index cd2412d3a..bf90645f7 100644 --- a/fedn/fedn/common/security/certificate.py +++ b/fedn/fedn/common/security/certificate.py @@ -18,7 +18,8 @@ def __init__(self, cwd, name=None, key_name="key.pem", cert_name="cert.pem", cre except OSError: print("Directory exists, will store all cert and keys here.") else: - print("Successfully created the directory to store cert and keys in {}".format(cwd)) + print( + "Successfully created the directory to store cert and keys in {}".format(cwd)) self.key_path = os.path.join(cwd, key_name) self.cert_path = os.path.join(cwd, cert_name) import uuid @@ -62,10 +63,12 @@ def set_keypair_raw(self, certificate, privatekey): :param privatekey: """ with open(self.key_path, "wb") as keyfile: - keyfile.write(crypto.dump_privatekey(crypto.FILETYPE_PEM, privatekey)) + keyfile.write(crypto.dump_privatekey( + crypto.FILETYPE_PEM, privatekey)) with open(self.cert_path, "wb") as certfile: - certfile.write(crypto.dump_certificate(crypto.FILETYPE_PEM, certificate)) + certfile.write(crypto.dump_certificate( + crypto.FILETYPE_PEM, certificate)) def get_keypair_raw(self): """ diff --git a/fedn/fedn/common/security/certificatemanager.py b/fedn/fedn/common/security/certificatemanager.py index acfeb6e52..5637d7344 100644 --- a/fedn/fedn/common/security/certificatemanager.py +++ b/fedn/fedn/common/security/certificatemanager.py @@ -23,7 +23,8 @@ def get_or_create(self, name): if search: return search else: - cert = Certificate(self.directory, name=name, cert_name=name + '-cert.pem', key_name=name + '-key.pem') + cert = Certificate(self.directory, name=name, + cert_name=name + '-cert.pem', key_name=name + '-key.pem') cert.gen_keypair() self.certificates.append(cert) return cert @@ -52,7 +53,8 @@ def load_all(self): # print("trying with {}".format(key_name)) if os.path.isfile(os.path.join(self.directory, key_name)): - c = Certificate(self.directory, name=name, cert_name=filename, key_name=key_name) + c = Certificate(self.directory, name=name, + cert_name=filename, key_name=key_name) self.certificates.append(c) else: c = Certificate(self.directory, name=name, cert_name=filename, diff --git a/fedn/fedn/common/storage/models/memorymodelstorage.py b/fedn/fedn/common/storage/models/memorymodelstorage.py index 4e8047a6e..27ad9c8be 100644 --- a/fedn/fedn/common/storage/models/memorymodelstorage.py +++ b/fedn/fedn/common/storage/models/memorymodelstorage.py @@ -1,6 +1,7 @@ -from fedn.common.storage.models.modelstorage import ModelStorage -from collections import defaultdict import io +from collections import defaultdict + +from fedn.common.storage.models.modelstorage import ModelStorage CHUNK_SIZE = 1024 * 1024 @@ -12,6 +13,7 @@ class MemoryModelStorage(ModelStorage): def __init__(self): import tempfile + # self.dir = tempfile.TemporaryDirectory() self.models = defaultdict(io.BytesIO) self.models_metadata = {} diff --git a/fedn/fedn/common/storage/models/tempmodelstorage.py b/fedn/fedn/common/storage/models/tempmodelstorage.py index 89232c27d..249c9c8bb 100644 --- a/fedn/fedn/common/storage/models/tempmodelstorage.py +++ b/fedn/fedn/common/storage/models/tempmodelstorage.py @@ -1,10 +1,9 @@ +import os import fedn.common.net.grpc.fedn_pb2 as fedn from fedn.common.storage.models.modelstorage import ModelStorage CHUNK_SIZE = 1024 * 1024 -import os - class TempModelStorage(ModelStorage): """ @@ -13,7 +12,8 @@ class TempModelStorage(ModelStorage): def __init__(self): - self.default_dir = os.environ.get('FEDN_MODEL_DIR', '/tmp/models') # set default to tmp + self.default_dir = os.environ.get( + 'FEDN_MODEL_DIR', '/tmp/models') # set default to tmp if not os.path.exists(self.default_dir): os.makedirs(self.default_dir) diff --git a/fedn/fedn/common/storage/s3/miniorepo.py b/fedn/fedn/common/storage/s3/miniorepo.py index c0977e7e8..cb489de89 100644 --- a/fedn/fedn/common/storage/s3/miniorepo.py +++ b/fedn/fedn/common/storage/s3/miniorepo.py @@ -1,14 +1,15 @@ +import io +import json +import logging import os +import uuid +from urllib.parse import urlparse + import requests -from .base import Repository from minio import Minio from minio.error import InvalidResponseError -import io -import logging -from urllib.parse import urlparse -import uuid -import json +from .base import Repository logger = logging.getLogger(__name__) @@ -43,11 +44,13 @@ def __init__(self, config): self.secure_mode = False if not self.secure_mode: - print("\n\n\nWARNING : S3/MINIO RUNNING IN **INSECURE** MODE! THIS IS NOT FOR PRODUCTION!\n\n\n") + print( + "\n\n\nWARNING : S3/MINIO RUNNING IN **INSECURE** MODE! THIS IS NOT FOR PRODUCTION!\n\n\n") if self.secure_mode: from urllib3.poolmanager import PoolManager - manager = PoolManager(num_pools=100, cert_reqs='CERT_NONE', assert_hostname=False) + manager = PoolManager( + num_pools=100, cert_reqs='CERT_NONE', assert_hostname=False) self.client = Minio("{0}:{1}".format(config['storage_hostname'], config['storage_port']), access_key=access_key, secret_key=secret_key, @@ -83,7 +86,8 @@ def set_artifact(self, instance_name, instance, is_file=False, bucket=''): self.client.fput_object(bucket, instance_name, instance) else: try: - self.client.put_object(bucket, instance_name, io.BytesIO(instance), len(instance)) + self.client.put_object( + bucket, instance_name, io.BytesIO(instance), len(instance)) except Exception as e: raise Exception("Could not load data into bytes {}".format(e)) @@ -129,7 +133,8 @@ def list_artifacts(self): print(obj.object_name) objects_to_delete.append(obj.object_name) except Exception as e: - raise Exception("Could not list models in bucket {}".format(self.bucket)) + raise Exception( + "Could not list models in bucket {}".format(self.bucket)) return objects_to_delete def delete_artifact(self, instance_name, bucket=[]): diff --git a/fedn/fedn/common/storage/s3/s3repo.py b/fedn/fedn/common/storage/s3/s3repo.py index 89518818d..d572be4ba 100644 --- a/fedn/fedn/common/storage/s3/s3repo.py +++ b/fedn/fedn/common/storage/s3/s3repo.py @@ -15,7 +15,8 @@ def get_model(self, model_id): :param model_id: :return: """ - print("Client {} trying to get model with id: {}".format(self.client, model_id), flush=True) + print("Client {} trying to get model with id: {}".format( + self.client, model_id), flush=True) return self.get_artifact(model_id) def get_model_stream(self, model_id): @@ -24,7 +25,8 @@ def get_model_stream(self, model_id): :param model_id: :return: """ - print("Client {} trying to get model with id: {}".format(self.client, model_id), flush=True) + print("Client {} trying to get model with id: {}".format( + self.client, model_id), flush=True) return self.get_artifact_stream(model_id) def set_model(self, model, is_file=True): @@ -38,7 +40,8 @@ def set_model(self, model, is_file=True): model_id = uuid.uuid4() # TODO: Check that this call succeeds try: - self.set_artifact(str(model_id), model, bucket=self.bucket, is_file=is_file) + self.set_artifact(str(model_id), model, + bucket=self.bucket, is_file=is_file) except Exception as e: print("Failed to write model with ID {} to repository.".format(model_id)) raise @@ -52,7 +55,8 @@ def set_compute_context(self, name, compute_package, is_file=True): :param is_file: """ try: - self.set_artifact(str(name), compute_package, bucket="fedn-context", is_file=is_file) + self.set_artifact(str(name), compute_package, + bucket="fedn-context", is_file=is_file) except Exception as e: print("Failed to write compute_package to repository.") raise diff --git a/fedn/fedn/common/tracer/mongotracer.py b/fedn/fedn/common/tracer/mongotracer.py index be401d9b7..0af957e79 100644 --- a/fedn/fedn/common/tracer/mongotracer.py +++ b/fedn/fedn/common/tracer/mongotracer.py @@ -1,10 +1,12 @@ -from fedn.common.tracer.tracer import Tracer -from fedn.common.storage.db.mongo import connect_to_mongodb -import time import threading -import psutil +import time from datetime import datetime +import psutil + +from fedn.common.storage.db.mongo import connect_to_mongodb +from fedn.common.tracer.tracer import Tracer + class MongoTracer(Tracer): """ @@ -37,7 +39,7 @@ def report(self, msg): print("LOG: \n {} \n".format(data), flush=True) - if self.status!=None: + if self.status != None: self.status.insert_one(data) def drop_round_time(self): @@ -95,8 +97,10 @@ def set_latest_time(self, round, round_time): :param round: :param round_time: """ - self.round_time.update_one({'key': 'round_time'}, {'$push': {'round': round}}, True) - self.round_time.update_one({'key': 'round_time'}, {'$push': {'round_time': round_time}}, True) + self.round_time.update_one({'key': 'round_time'}, { + '$push': {'round': round}}, True) + self.round_time.update_one({'key': 'round_time'}, { + '$push': {'round_time': round_time}}, True) def set_combiner_time(self, round, round_time): """ @@ -104,8 +108,10 @@ def set_combiner_time(self, round, round_time): :param round: :param round_time: """ - self.combiner_round_time.update_one({'key': 'combiner_round_time'}, {'$push': {'round': round}}, True) - self.combiner_round_time.update_one({'key': 'combiner_round_time'}, {'$push': {'round_time': round_time}}, True) + self.combiner_round_time.update_one({'key': 'combiner_round_time'}, { + '$push': {'round': round}}, True) + self.combiner_round_time.update_one({'key': 'combiner_round_time'}, { + '$push': {'round_time': round_time}}, True) # def set_combiner_queue_length(self,timestamp,ql): # self.combiner_queue_length({'key': 'combiner_queue_length'}, {'$push': {'queue_length': ql}}, True) @@ -117,14 +123,16 @@ def set_round_meta(self, round_meta): :param round_meta: """ - self.round.update_one({'key': str(round_meta['round_id'])}, {'$push': {'combiners': round_meta}}, True) + self.round.update_one({'key': str(round_meta['round_id'])}, { + '$push': {'combiners': round_meta}}, True) def set_round_meta_reducer(self, round_meta): """ :param round_meta: """ - self.round.update_one({'key': str(round_meta['round_id'])}, {'$push': {'reducer': round_meta}}, True) + self.round.update_one({'key': str(round_meta['round_id'])}, { + '$push': {'reducer': round_meta}}, True) def get_latest_round(self): """ @@ -149,10 +157,14 @@ def ps_util_monitor(self, round=None): mem_percents = currentProcess.memory_percent() ps_time = str(datetime.now()) - self.psutil_monitoring.update_one({'key': 'cpu_mem_usage'}, {'$push': {'cpu': cpu_percents}}, True) - self.psutil_monitoring.update_one({'key': 'cpu_mem_usage'}, {'$push': {'mem': mem_percents}}, True) - self.psutil_monitoring.update_one({'key': 'cpu_mem_usage'}, {'$push': {'time': ps_time}}, True) - self.psutil_monitoring.update_one({'key': 'cpu_mem_usage'}, {'$push': {'round': round}}, True) + self.psutil_monitoring.update_one({'key': 'cpu_mem_usage'}, { + '$push': {'cpu': cpu_percents}}, True) + self.psutil_monitoring.update_one({'key': 'cpu_mem_usage'}, { + '$push': {'mem': mem_percents}}, True) + self.psutil_monitoring.update_one({'key': 'cpu_mem_usage'}, { + '$push': {'time': ps_time}}, True) + self.psutil_monitoring.update_one({'key': 'cpu_mem_usage'}, { + '$push': {'round': round}}, True) def start_monitor(self, round=None): """ diff --git a/fedn/fedn/reducer.py b/fedn/fedn/reducer.py index ce2592b7c..1394c5904 100644 --- a/fedn/fedn/reducer.py +++ b/fedn/fedn/reducer.py @@ -5,8 +5,9 @@ from fedn.clients.reducer.interfaces import ReducerInferenceInterface from fedn.clients.reducer.restservice import ReducerRestService from fedn.clients.reducer.state import ReducerStateToString +from fedn.clients.reducer.statestore.mongoreducerstatestore import \ + MongoReducerStateStore from fedn.common.security.certificatemanager import CertificateManager -from fedn.clients.reducer.statestore.mongoreducerstatestore import MongoReducerStateStore class InvalidReducerConfiguration(Exception): @@ -42,7 +43,8 @@ def __init__(self, statestore): self.control = ReducerControl(self.statestore) self.inference = ReducerInferenceInterface() rest_certificate = self.certificate_manager.get_or_create("reducer") - self.rest = ReducerRestService(config, self.control, self.certificate_manager, certificate=rest_certificate) + self.rest = ReducerRestService( + config, self.control, self.certificate_manager, certificate=rest_certificate) def run(self): """ diff --git a/fedn/fedn/tests/test_reducer_service.py b/fedn/fedn/tests/test_reducer_service.py index 199b3da08..93cf761b1 100644 --- a/fedn/fedn/tests/test_reducer_service.py +++ b/fedn/fedn/tests/test_reducer_service.py @@ -1,7 +1,8 @@ import unittest +from unittest.mock import MagicMock, patch + from fedn.clients.reducer.restservice import ReducerRestService from fedn.clients.reducer.state import ReducerState -from unittest.mock import MagicMock, patch class TestInit(unittest.TestCase): @@ -18,7 +19,7 @@ def test_discover_host(self, mock_control): restservice = ReducerRestService(CONFIG, mock_control, None) self.assertEqual(restservice.name, 'TEST_HOST') self.assertEqual(restservice.network_id, 'TEST_NAME-network') - + @patch('fedn.clients.reducer.control.ReducerControl') def test_name(self, mock_control): CONFIG = { @@ -30,7 +31,7 @@ def test_name(self, mock_control): } restservice = ReducerRestService(CONFIG, mock_control, None) self.assertEqual(restservice.name, 'TEST_NAME') - + @patch('fedn.clients.reducer.control.ReducerControl') def test_network_id(self, mock_control): CONFIG = { @@ -43,6 +44,7 @@ def test_network_id(self, mock_control): restservice = ReducerRestService(CONFIG, mock_control, None) self.assertEqual(restservice.network_id, 'TEST_NAME-network') + class TestChecks(unittest.TestCase): @patch('fedn.clients.reducer.control.ReducerControl') def setUp(self, mock_control): @@ -58,7 +60,8 @@ def setUp(self, mock_control): def test_check_compute_package(self): - self.restservice.control.get_compute_context.return_value = {'NOT': 'NONE'} + self.restservice.control.get_compute_context.return_value = { + 'NOT': 'NONE'} retval = self.restservice.check_compute_context() self.assertTrue(retval) @@ -70,7 +73,7 @@ def test_check_compute_package(self): retval = self.restservice.check_compute_context() self.assertFalse(retval) - self.restservice.remote_compute_context = False + self.restservice.remote_compute_context = False retval = self.restservice.check_compute_context() self.assertTrue(retval) @@ -102,21 +105,19 @@ def setUp(self, mock_control): } self.restservice = ReducerRestService(CONFIG, mock_control, None) - + def test_encode_decode_auth_token(self): SECRET_KEY = 'test_secret' token = self.restservice.encode_auth_token(SECRET_KEY) payload_success = self.restservice.decode_auth_token(token, SECRET_KEY) - payload_invalid = self.restservice.decode_auth_token('wrong_token', SECRET_KEY) + payload_invalid = self.restservice.decode_auth_token( + 'wrong_token', SECRET_KEY) payload_error = self.restservice.decode_auth_token(token, 'wrong_key') self.assertEqual(payload_success, "Success") self.assertEqual(payload_invalid, "Invalid token.") self.assertEqual(payload_error, "Invalid token.") - - - if __name__ == '__main__': - unittest.main() \ No newline at end of file + unittest.main() diff --git a/fedn/fedn/utils/dispatcher.py b/fedn/fedn/utils/dispatcher.py index d2b8d1332..228c4f4bd 100644 --- a/fedn/fedn/utils/dispatcher.py +++ b/fedn/fedn/utils/dispatcher.py @@ -1,5 +1,6 @@ -import re import logging +import re + from fedn.utils.process import run_process logger = logging.getLogger(__name__) diff --git a/fedn/fedn/utils/helpers.py b/fedn/fedn/utils/helpers.py index 52cd5af6a..6e4d990a3 100644 --- a/fedn/fedn/utils/helpers.py +++ b/fedn/fedn/utils/helpers.py @@ -1,7 +1,7 @@ import collections -from abc import ABC, abstractmethod import os import tempfile +from abc import ABC, abstractmethod class HelperBase(ABC): diff --git a/fedn/fedn/utils/kerashelper.py b/fedn/fedn/utils/kerashelper.py index 9c4613fe1..5d5b2a164 100644 --- a/fedn/fedn/utils/kerashelper.py +++ b/fedn/fedn/utils/kerashelper.py @@ -1,8 +1,8 @@ +import collections import os import tempfile + import numpy as np -import collections -import tempfile from .helpers import HelperBase diff --git a/fedn/fedn/utils/logger.py b/fedn/fedn/utils/logger.py index 00d0fd61e..22e50ebc1 100644 --- a/fedn/fedn/utils/logger.py +++ b/fedn/fedn/utils/logger.py @@ -22,6 +22,7 @@ def __init__(self, log_level=logging.DEBUG, to_file='', file_path=os.getcwd()): root.addHandler(sh) if to_file != '': - fh = logging.FileHandler(os.path.join(file_path, '{}'.format(to_file))) + fh = logging.FileHandler(os.path.join( + file_path, '{}'.format(to_file))) fh.setFormatter(logging.Formatter(log_format)) root.addHandler(fh) diff --git a/fedn/fedn/utils/numpyarrayhelper.py b/fedn/fedn/utils/numpyarrayhelper.py index d54574206..1f481a309 100644 --- a/fedn/fedn/utils/numpyarrayhelper.py +++ b/fedn/fedn/utils/numpyarrayhelper.py @@ -1,10 +1,10 @@ +import collections import os -import tempfile -import numpy as np import pickle -import collections import tempfile +import numpy as np + from .helpers import HelperBase diff --git a/fedn/fedn/utils/process.py b/fedn/fedn/utils/process.py index 11850a1ae..5a005e0cd 100644 --- a/fedn/fedn/utils/process.py +++ b/fedn/fedn/utils/process.py @@ -1,5 +1,5 @@ -import subprocess import logging +import subprocess logger = logging.getLogger() @@ -10,7 +10,8 @@ def run_process(args, cwd): :param args: :param cwd: """ - status = subprocess.Popen(args, cwd=cwd, stdout=subprocess.PIPE, stderr=subprocess.STDOUT) + status = subprocess.Popen( + args, cwd=cwd, stdout=subprocess.PIPE, stderr=subprocess.STDOUT) # print(status) def check_io(): diff --git a/fedn/fedn/utils/pytorchhelper.py b/fedn/fedn/utils/pytorchhelper.py index 3066a2763..7d816bc8c 100644 --- a/fedn/fedn/utils/pytorchhelper.py +++ b/fedn/fedn/utils/pytorchhelper.py @@ -1,10 +1,12 @@ import os import tempfile from collections import OrderedDict -from .helpers import HelperBase from functools import reduce + import numpy as np +from .helpers import HelperBase + class PytorchHelper(HelperBase): diff --git a/fedn/setup.py b/fedn/setup.py index 861bf98f9..611d28ead 100644 --- a/fedn/setup.py +++ b/fedn/setup.py @@ -1,4 +1,4 @@ -from setuptools import setup, find_packages +from setuptools import find_packages, setup setup( name='fedn', From 3c4a7364164edfd7f0c3fc4d440a3172682590d0 Mon Sep 17 00:00:00 2001 From: mcapuccini Date: Mon, 30 May 2022 10:50:17 +0000 Subject: [PATCH 006/185] fix --- .github/workflows/code-checks.yaml | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/.github/workflows/code-checks.yaml b/.github/workflows/code-checks.yaml index a21a3305c..3f32c87d0 100644 --- a/.github/workflows/code-checks.yaml +++ b/.github/workflows/code-checks.yaml @@ -8,17 +8,20 @@ jobs: steps: - name: checkout uses: actions/checkout@v2 + + - name: init venv + run: .devcontainer/bin/init_venv.sh - name: check Python imports run: > - isort . --check --diff + .venv/bin/isort . --check --diff --skip .venv --skip .mnist-keras --skip .mnist-pytorch - name: check Python formatting run: > - autopep8 --recursive --diff + .venv/bin/autopep8 --recursive --diff --exclude .venv --exclude .mnist-keras --exclude .mnist-pytorch From 31bbea1fa68bb6aeeeffbeafe8e79bc30bdb34a7 Mon Sep 17 00:00:00 2001 From: mcapuccini Date: Mon, 30 May 2022 10:53:50 +0000 Subject: [PATCH 007/185] Fix sorting --- fedn/fedn/__init__.py | 2 +- fedn/fedn/client.py | 2 +- fedn/fedn/clients/combiner/modelservice.py | 3 +-- fedn/fedn/common/control/package.py | 1 + fedn/fedn/common/net/connect.py | 3 ++- fedn/fedn/common/storage/models/tempmodelstorage.py | 1 + 6 files changed, 7 insertions(+), 5 deletions(-) diff --git a/fedn/fedn/__init__.py b/fedn/fedn/__init__.py index c28090431..f04a9cd80 100644 --- a/fedn/fedn/__init__.py +++ b/fedn/fedn/__init__.py @@ -1,5 +1,5 @@ -import os import glob +import os from os.path import basename, dirname, isfile modules = glob.glob(dirname(__file__) + "/*.py") diff --git a/fedn/fedn/client.py b/fedn/fedn/client.py index e6ffdc5c3..50d6a885f 100644 --- a/fedn/fedn/client.py +++ b/fedn/fedn/client.py @@ -1,4 +1,3 @@ -from datetime import datetime import io import json import os @@ -8,6 +7,7 @@ import threading import time import uuid +from datetime import datetime import grpc from aiohttp import client diff --git a/fedn/fedn/clients/combiner/modelservice.py b/fedn/fedn/clients/combiner/modelservice.py index 395bed346..b5cd35de7 100644 --- a/fedn/fedn/clients/combiner/modelservice.py +++ b/fedn/fedn/clients/combiner/modelservice.py @@ -1,7 +1,6 @@ import fedn.common.net.grpc.fedn_pb2 as fedn -from fedn.common.storage.models.tempmodelstorage import TempModelStorage import fedn.common.net.grpc.fedn_pb2_grpc as rpc - +from fedn.common.storage.models.tempmodelstorage import TempModelStorage CHUNK_SIZE = 1024 * 1024 diff --git a/fedn/fedn/common/control/package.py b/fedn/fedn/common/control/package.py index d15817054..0118b4529 100644 --- a/fedn/fedn/common/control/package.py +++ b/fedn/fedn/common/control/package.py @@ -224,6 +224,7 @@ def dispatcher(self, run_path): from_path = os.path.join(os.getcwd(), 'client') from distutils.dir_util import copy_tree + # preserve_times=False ensures compatibility with Gramine LibOS copy_tree(from_path, run_path, preserve_times=False) diff --git a/fedn/fedn/common/net/connect.py b/fedn/fedn/common/net/connect.py index 5de56d354..ebfd15bc5 100644 --- a/fedn/fedn/common/net/connect.py +++ b/fedn/fedn/common/net/connect.py @@ -1,9 +1,10 @@ -from fedn.common.security.certificate import Certificate import enum from http.client import UNAUTHORIZED import requests as r +from fedn.common.security.certificate import Certificate + class State(enum.Enum): Disconnected = 0 diff --git a/fedn/fedn/common/storage/models/tempmodelstorage.py b/fedn/fedn/common/storage/models/tempmodelstorage.py index 249c9c8bb..681573b94 100644 --- a/fedn/fedn/common/storage/models/tempmodelstorage.py +++ b/fedn/fedn/common/storage/models/tempmodelstorage.py @@ -1,4 +1,5 @@ import os + import fedn.common.net.grpc.fedn_pb2 as fedn from fedn.common.storage.models.modelstorage import ModelStorage From a39fd435ce0e3261e0c3c8ba5bfb10afcdb58ea9 Mon Sep 17 00:00:00 2001 From: mcapuccini Date: Tue, 31 May 2022 08:58:32 +0000 Subject: [PATCH 008/185] inference rest --- fedn/fedn/clients/reducer/restservice.py | 59 +++++++++++++++++++++--- 1 file changed, 53 insertions(+), 6 deletions(-) diff --git a/fedn/fedn/clients/reducer/restservice.py b/fedn/fedn/clients/reducer/restservice.py index 860c8844f..da9f181d1 100644 --- a/fedn/fedn/clients/reducer/restservice.py +++ b/fedn/fedn/clients/reducer/restservice.py @@ -3,6 +3,7 @@ import math import os import re +import threading import uuid from threading import Lock from urllib import response @@ -13,16 +14,15 @@ import pandas as pd import plotly import plotly.express as px +from fedn.clients.reducer.interfaces import CombinerInterface +from fedn.clients.reducer.plots import Plot +from fedn.clients.reducer.state import ReducerState, ReducerStateToString from flask import (Flask, abort, flash, jsonify, make_response, redirect, render_template, request, url_for) from idna import check_initial_combiner from tenacity import retry from werkzeug.utils import secure_filename -from fedn.clients.reducer.interfaces import CombinerInterface -from fedn.clients.reducer.plots import Plot -from fedn.clients.reducer.state import ReducerState, ReducerStateToString - UPLOAD_FOLDER = '/app/client/package/' ALLOWED_EXTENSIONS = {'gz', 'bz2', 'tar', 'zip', 'tgz'} @@ -182,7 +182,7 @@ def check_configured_response(self): def check_configured(self): """Check if compute package has been configured and that and that the - state of the ReducerControl is not in setup otherwise render setup template. + state of the ReducerControl is not in setup otherwise render setup template. Check if initial model has been configured, otherwise render setup_model template. :return: Rendered html template or None """ @@ -677,7 +677,7 @@ def infer(): return result def combiner_status(): - """ Get current status reports from all combiners registered in the network. + """ Get current status reports from all combiners registered in the network. :return: """ @@ -969,6 +969,53 @@ def checksum(): from flask import jsonify return jsonify(data) + @app.route('/inference', methods=['POST']) + def inference(): + """ + + :return: + """ + # Token auth + if self.token_auth_enabled: + self.authorize(request, app.config.get('SECRET_KEY')) + + # Check configured + not_configured = self.check_configured() + if not_configured: + return not_configured + + # Check compute context + if self.remote_compute_context: + try: + self.current_compute_context = self.control.get_compute_context() + except: + self.current_compute_context = None + else: + self.current_compute_context = "None:Local" + + # Redirect if in monitoring state + if self.control.state() == ReducerState.monitoring: + return redirect( + url_for('index', state=ReducerStateToString(self.control.state()), refresh=True, message="Reducer is in monitoring state")) + + # POST params + timeout = int(request.form.get('timeout', 180)) + helper_type = request.form.get('helper', 'keras') + clients_required = request.form.get('clients_required', 1) + clients_requested = request.form.get('clients_requested', 8) + + # Start inference request + config = {'round_timeout': timeout, 'model_id': self.control.get_latest_model(), + 'rounds': 1, 'clients_required': clients_required, + 'clients_requested': clients_requested, 'task': 'inference', + 'validate': False, 'helper_type': helper_type} + threading.Thread(target=self.control.instruct, + args=(config,)).start() + + # Redirect + return redirect(url_for('index', state=ReducerStateToString(self.control.state()), refresh=True, message="Sent execution plan (inference).", + message_type='SUCCESS')) + if self.certificate: print("trying to connect with certs {} and key {}".format(str(self.certificate.cert_path), str(self.certificate.key_path)), flush=True) From 58559439a7b6d75ddeb3de5b401b5f577154f667 Mon Sep 17 00:00:00 2001 From: mcapuccini Date: Wed, 1 Jun 2022 11:14:15 +0000 Subject: [PATCH 009/185] add inference to validation channel --- fedn/fedn/client.py | 14 +- fedn/fedn/clients/combiner/roundcontrol.py | 5 +- fedn/fedn/clients/reducer/control.py | 69 +- fedn/fedn/clients/reducer/restservice.py | 30 +- fedn/fedn/combiner.py | 3 +- fedn/fedn/common/net/grpc/fedn.proto | 1 + fedn/fedn/common/net/grpc/fedn_pb2.py | 3253 ++++++++++---------- fedn/fedn/common/net/grpc/fedn_pb2_grpc.py | 1331 +++----- 8 files changed, 2233 insertions(+), 2473 deletions(-) diff --git a/fedn/fedn/client.py b/fedn/fedn/client.py index 50d6a885f..1d033459b 100644 --- a/fedn/fedn/client.py +++ b/fedn/fedn/client.py @@ -441,7 +441,7 @@ def process_request(self): elif task_type == 'validate': self.state = ClientState.validating metrics = self._process_validation_request( - request.model_id) + request.model_id, request.is_inference) if metrics != None: # Send validation @@ -521,9 +521,15 @@ def _process_training_request(self, model_id): return updated_model_id, meta - def _process_validation_request(self, model_id): + def _process_validation_request(self, model_id, is_inference): + # Figure out cmd + if is_inference: + cmd = 'infer' + else: + cmd = 'validate' + self._send_status( - "Processing validation request for model_id {}".format(model_id)) + f"Processing {cmd} request for model_id {model_id}") self.state = ClientState.validating try: model = self.get_model(str(model_id)) @@ -533,7 +539,7 @@ def _process_validation_request(self, model_id): fh.write(model.getbuffer()) _, outpath = tempfile.mkstemp() - self.dispatcher.run_cmd("validate {} {}".format(inpath, outpath)) + self.dispatcher.run_cmd(f"{cmd} {inpath} {outpath}") with open(outpath, "r") as fh: validation = json.loads(fh.read()) diff --git a/fedn/fedn/clients/combiner/roundcontrol.py b/fedn/fedn/clients/combiner/roundcontrol.py index c6d3be9db..e0d0d9f48 100644 --- a/fedn/fedn/clients/combiner/roundcontrol.py +++ b/fedn/fedn/clients/combiner/roundcontrol.py @@ -137,7 +137,7 @@ def _validation_round(self, config, clients, model_id): :param model_id: [description] :type model_id: [type] """ - self.server.request_model_validation(model_id, clients=clients) + self.server.request_model_validation(model_id, config, clients) def stage_model(self, model_id, timeout_retry=3, retry=2): """Download model from persistent storage. @@ -307,7 +307,8 @@ def run(self): tic round_meta['name'] = self.id self.server.tracer.set_round_meta(round_meta) - elif round_config['task'] == 'validation': + # Note: for inference we reuse validation logic + elif round_config['task'] == 'validation' or round_config['task'] == 'inference': self.execute_validation(round_config) else: self.server.report_status( diff --git a/fedn/fedn/clients/reducer/control.py b/fedn/fedn/clients/reducer/control.py index 692dfcfca..ceefb7a4f 100644 --- a/fedn/fedn/clients/reducer/control.py +++ b/fedn/fedn/clients/reducer/control.py @@ -21,7 +21,7 @@ class MisconfiguredStorageBackend(Exception): class ReducerControl: - """ Main conroller for training round. + """ Main conroller for training round. """ @@ -400,6 +400,48 @@ def round(self, config, round_number): return model_id, round_meta + def inference_round(self, config): + """ Execute inference round. """ + + # Init meta + round_meta = {} + + # Check for at least one combiner in statestore + if len(self.network.get_combiners()) < 1: + print("REDUCER: No combiners connected!") + return round_meta + + # Setup combiner configuration + combiner_config = copy.deepcopy(config) + combiner_config['model_id'] = self.get_latest_model() + combiner_config['task'] = 'inference' + combiner_config['helper_type'] = self.statestore.get_framework() + + # Select combiners + validating_combiners = self._select_round_combiners( + combiner_config) + + # Test round start policy + round_start = self.check_round_start_policy(validating_combiners) + if round_start: + print("CONTROL: round start policy met, participating combiners {}".format( + validating_combiners), flush=True) + else: + print("CONTROL: Round start policy not met, skipping round!", flush=True) + return None + + # Synch combiners with latest model and trigger inference + for combiner, combiner_config in validating_combiners: + try: + self.sync_combiners([combiner], self.get_latest_model()) + combiner.start(combiner_config) + except CombinerUnavailableError: + # It is OK if inference fails for a combiner + self._handle_unavailable_combiner(combiner) + pass + + return round_meta + def sync_combiners(self, combiners, model_id): """ Spread the current consensus model to all active combiner nodes. """ if not model_id: @@ -510,6 +552,31 @@ def reduce(self, combiners): return model, meta + def infer_instruct(self, config): + """ Main entrypoint for executing the inference compute plan. """ + + # Check/set instucting state + if self.__state == ReducerState.instructing: + print("Already set in INSTRUCTING state", flush=True) + return + self.__state = ReducerState.instructing + + # Check for a model chain + if not self.get_latest_model(): + print("No model in model chain, please seed the alliance!") + + # Set reducer in monitoring state + self.__state = ReducerState.monitoring + + # Start inference round + try: + self.inference_round(config) + except TypeError: + print("Could not unpack data from round...", flush=True) + + # Set reducer in idle state + self.__state = ReducerState.idle + def monitor(self, config=None): """ diff --git a/fedn/fedn/clients/reducer/restservice.py b/fedn/fedn/clients/reducer/restservice.py index da9f181d1..d12625f54 100644 --- a/fedn/fedn/clients/reducer/restservice.py +++ b/fedn/fedn/clients/reducer/restservice.py @@ -660,22 +660,6 @@ def assign(): return jsonify(response) - @app.route('/infer') - def infer(): - """ - - :return: - """ - if self.control.state() == ReducerState.setup: - return "Error, not configured" - result = "" - try: - self.control.set_model_id() - except fedn.exceptions.ModelError: - print("Failed to seed control.") - - return result - def combiner_status(): """ Get current status reports from all combiners registered in the network. @@ -969,8 +953,8 @@ def checksum(): from flask import jsonify return jsonify(data) - @app.route('/inference', methods=['POST']) - def inference(): + @app.route('/infer', methods=['POST']) + def infer(): """ :return: @@ -1005,10 +989,12 @@ def inference(): clients_requested = request.form.get('clients_requested', 8) # Start inference request - config = {'round_timeout': timeout, 'model_id': self.control.get_latest_model(), - 'rounds': 1, 'clients_required': clients_required, - 'clients_requested': clients_requested, 'task': 'inference', - 'validate': False, 'helper_type': helper_type} + config = {'round_timeout': timeout, + 'model_id': self.control.get_latest_model(), + 'clients_required': clients_required, + 'clients_requested': clients_requested, + 'task': 'inference', + 'helper_type': helper_type} threading.Thread(target=self.control.instruct, args=(config,)).start() diff --git a/fedn/fedn/combiner.py b/fedn/fedn/combiner.py index 8b38a6d37..70add1bd5 100644 --- a/fedn/fedn/combiner.py +++ b/fedn/fedn/combiner.py @@ -179,7 +179,7 @@ def request_model_update(self, model_id, clients=[]): print("COMBINER: Sent model update request for model {} to clients {}".format( model_id, clients), flush=True) - def request_model_validation(self, model_id, clients=[]): + def request_model_validation(self, model_id, config, clients=[]): """ Ask clients to validate the current global model. Parameters @@ -198,6 +198,7 @@ def request_model_validation(self, model_id, clients=[]): request.model_id = model_id request.correlation_id = str(uuid.uuid4()) request.timestamp = str(datetime.now()) + request.is_inference = (config['task'] == 'inference') if len(clients) == 0: clients = self.get_active_validators() diff --git a/fedn/fedn/common/net/grpc/fedn.proto b/fedn/fedn/common/net/grpc/fedn.proto index 0e595b451..7535a712e 100644 --- a/fedn/fedn/common/net/grpc/fedn.proto +++ b/fedn/fedn/common/net/grpc/fedn.proto @@ -73,6 +73,7 @@ message ModelValidationRequest { string data = 4; string correlation_id = 5; string timestamp = 6; + bool is_inference = 7; } message ModelValidation { diff --git a/fedn/fedn/common/net/grpc/fedn_pb2.py b/fedn/fedn/common/net/grpc/fedn_pb2.py index f53fd40e6..82640eb28 100644 --- a/fedn/fedn/common/net/grpc/fedn_pb2.py +++ b/fedn/fedn/common/net/grpc/fedn_pb2.py @@ -2,257 +2,259 @@ # Generated by the protocol buffer compiler. DO NOT EDIT! # source: fedn/common/net/grpc/fedn.proto """Generated protocol buffer code.""" +from google.protobuf.internal import enum_type_wrapper from google.protobuf import descriptor as _descriptor from google.protobuf import message as _message from google.protobuf import reflection as _reflection from google.protobuf import symbol_database as _symbol_database -from google.protobuf.internal import enum_type_wrapper - # @@protoc_insertion_point(imports) _sym_db = _symbol_database.Default() + + + DESCRIPTOR = _descriptor.FileDescriptor( - name='fedn/common/net/grpc/fedn.proto', - package='grpc', - syntax='proto3', - serialized_options=None, - create_key=_descriptor._internal_create_key, - serialized_pb=b'\n\x1f\x66\x65\x64n/common/net/grpc/fedn.proto\x12\x04grpc\":\n\x08Response\x12\x1c\n\x06sender\x18\x01 \x01(\x0b\x32\x0c.grpc.Client\x12\x10\n\x08response\x18\x02 \x01(\t\"\x8c\x02\n\x06Status\x12\x1c\n\x06sender\x18\x01 \x01(\x0b\x32\x0c.grpc.Client\x12\x0e\n\x06status\x18\x02 \x01(\t\x12(\n\tlog_level\x18\x03 \x01(\x0e\x32\x15.grpc.Status.LogLevel\x12\x0c\n\x04\x64\x61ta\x18\x04 \x01(\t\x12\x16\n\x0e\x63orrelation_id\x18\x05 \x01(\t\x12\x11\n\ttimestamp\x18\x06 \x01(\t\x12\x1e\n\x04type\x18\x07 \x01(\x0e\x32\x10.grpc.StatusType\x12\r\n\x05\x65xtra\x18\x08 \x01(\t\"B\n\x08LogLevel\x12\x08\n\x04INFO\x10\x00\x12\t\n\x05\x44\x45\x42UG\x10\x01\x12\x0b\n\x07WARNING\x10\x02\x12\t\n\x05\x45RROR\x10\x03\x12\t\n\x05\x41UDIT\x10\x04\"\x9d\x01\n\x12ModelUpdateRequest\x12\x1c\n\x06sender\x18\x01 \x01(\x0b\x32\x0c.grpc.Client\x12\x1e\n\x08receiver\x18\x02 \x01(\x0b\x32\x0c.grpc.Client\x12\x10\n\x08model_id\x18\x03 \x01(\t\x12\x0c\n\x04\x64\x61ta\x18\x04 \x01(\t\x12\x16\n\x0e\x63orrelation_id\x18\x05 \x01(\t\x12\x11\n\ttimestamp\x18\x06 \x01(\t\"\xaf\x01\n\x0bModelUpdate\x12\x1c\n\x06sender\x18\x01 \x01(\x0b\x32\x0c.grpc.Client\x12\x1e\n\x08receiver\x18\x02 \x01(\x0b\x32\x0c.grpc.Client\x12\x10\n\x08model_id\x18\x03 \x01(\t\x12\x17\n\x0fmodel_update_id\x18\x04 \x01(\t\x12\x16\n\x0e\x63orrelation_id\x18\x05 \x01(\t\x12\x11\n\ttimestamp\x18\x06 \x01(\t\x12\x0c\n\x04meta\x18\x07 \x01(\t\"\xa1\x01\n\x16ModelValidationRequest\x12\x1c\n\x06sender\x18\x01 \x01(\x0b\x32\x0c.grpc.Client\x12\x1e\n\x08receiver\x18\x02 \x01(\x0b\x32\x0c.grpc.Client\x12\x10\n\x08model_id\x18\x03 \x01(\t\x12\x0c\n\x04\x64\x61ta\x18\x04 \x01(\t\x12\x16\n\x0e\x63orrelation_id\x18\x05 \x01(\t\x12\x11\n\ttimestamp\x18\x06 \x01(\t\"\xa8\x01\n\x0fModelValidation\x12\x1c\n\x06sender\x18\x01 \x01(\x0b\x32\x0c.grpc.Client\x12\x1e\n\x08receiver\x18\x02 \x01(\x0b\x32\x0c.grpc.Client\x12\x10\n\x08model_id\x18\x03 \x01(\t\x12\x0c\n\x04\x64\x61ta\x18\x04 \x01(\t\x12\x16\n\x0e\x63orrelation_id\x18\x05 \x01(\t\x12\x11\n\ttimestamp\x18\x06 \x01(\t\x12\x0c\n\x04meta\x18\x07 \x01(\t\"\x89\x01\n\x0cModelRequest\x12\x1c\n\x06sender\x18\x01 \x01(\x0b\x32\x0c.grpc.Client\x12\x1e\n\x08receiver\x18\x02 \x01(\x0b\x32\x0c.grpc.Client\x12\x0c\n\x04\x64\x61ta\x18\x03 \x01(\x0c\x12\n\n\x02id\x18\x04 \x01(\t\x12!\n\x06status\x18\x05 \x01(\x0e\x32\x11.grpc.ModelStatus\"]\n\rModelResponse\x12\x0c\n\x04\x64\x61ta\x18\x01 \x01(\x0c\x12\n\n\x02id\x18\x02 \x01(\t\x12!\n\x06status\x18\x03 \x01(\x0e\x32\x11.grpc.ModelStatus\x12\x0f\n\x07message\x18\x04 \x01(\t\"U\n\x15GetGlobalModelRequest\x12\x1c\n\x06sender\x18\x01 \x01(\x0b\x32\x0c.grpc.Client\x12\x1e\n\x08receiver\x18\x02 \x01(\x0b\x32\x0c.grpc.Client\"h\n\x16GetGlobalModelResponse\x12\x1c\n\x06sender\x18\x01 \x01(\x0b\x32\x0c.grpc.Client\x12\x1e\n\x08receiver\x18\x02 \x01(\x0b\x32\x0c.grpc.Client\x12\x10\n\x08model_id\x18\x03 \x01(\t\")\n\tHeartbeat\x12\x1c\n\x06sender\x18\x01 \x01(\x0b\x32\x0c.grpc.Client\"W\n\x16\x43lientAvailableMessage\x12\x1c\n\x06sender\x18\x01 \x01(\x0b\x32\x0c.grpc.Client\x12\x0c\n\x04\x64\x61ta\x18\x02 \x01(\t\x12\x11\n\ttimestamp\x18\x03 \x01(\t\"R\n\x12ListClientsRequest\x12\x1c\n\x06sender\x18\x01 \x01(\x0b\x32\x0c.grpc.Client\x12\x1e\n\x07\x63hannel\x18\x02 \x01(\x0e\x32\r.grpc.Channel\"*\n\nClientList\x12\x1c\n\x06\x63lient\x18\x01 \x03(\x0b\x32\x0c.grpc.Client\"0\n\x06\x43lient\x12\x18\n\x04role\x18\x01 \x01(\x0e\x32\n.grpc.Role\x12\x0c\n\x04name\x18\x02 \x01(\t\"m\n\x0fReassignRequest\x12\x1c\n\x06sender\x18\x01 \x01(\x0b\x32\x0c.grpc.Client\x12\x1e\n\x08receiver\x18\x02 \x01(\x0b\x32\x0c.grpc.Client\x12\x0e\n\x06server\x18\x03 \x01(\t\x12\x0c\n\x04port\x18\x04 \x01(\r\"c\n\x10ReconnectRequest\x12\x1c\n\x06sender\x18\x01 \x01(\x0b\x32\x0c.grpc.Client\x12\x1e\n\x08receiver\x18\x02 \x01(\x0b\x32\x0c.grpc.Client\x12\x11\n\treconnect\x18\x03 \x01(\r\"\'\n\tParameter\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\r\n\x05value\x18\x02 \x01(\t\"T\n\x0e\x43ontrolRequest\x12\x1e\n\x07\x63ommand\x18\x01 \x01(\x0e\x32\r.grpc.Command\x12\"\n\tparameter\x18\x02 \x03(\x0b\x32\x0f.grpc.Parameter\"F\n\x0f\x43ontrolResponse\x12\x0f\n\x07message\x18\x01 \x01(\t\x12\"\n\tparameter\x18\x02 \x03(\x0b\x32\x0f.grpc.Parameter\"R\n\x0eReportResponse\x12\x1c\n\x06sender\x18\x01 \x01(\x0b\x32\x0c.grpc.Client\x12\"\n\tparameter\x18\x02 \x03(\x0b\x32\x0f.grpc.Parameter\"\x13\n\x11\x43onnectionRequest\"<\n\x12\x43onnectionResponse\x12&\n\x06status\x18\x01 \x01(\x0e\x32\x16.grpc.ConnectionStatus*u\n\nStatusType\x12\x07\n\x03LOG\x10\x00\x12\x18\n\x14MODEL_UPDATE_REQUEST\x10\x01\x12\x10\n\x0cMODEL_UPDATE\x10\x02\x12\x1c\n\x18MODEL_VALIDATION_REQUEST\x10\x03\x12\x14\n\x10MODEL_VALIDATION\x10\x04*\x86\x01\n\x07\x43hannel\x12\x0b\n\x07\x44\x45\x46\x41ULT\x10\x00\x12\x19\n\x15MODEL_UPDATE_REQUESTS\x10\x01\x12\x11\n\rMODEL_UPDATES\x10\x02\x12\x1d\n\x19MODEL_VALIDATION_REQUESTS\x10\x03\x12\x15\n\x11MODEL_VALIDATIONS\x10\x04\x12\n\n\x06STATUS\x10\x05*F\n\x0bModelStatus\x12\x06\n\x02OK\x10\x00\x12\x0f\n\x0bIN_PROGRESS\x10\x01\x12\x12\n\x0eIN_PROGRESS_OK\x10\x02\x12\n\n\x06\x46\x41ILED\x10\x03*8\n\x04Role\x12\n\n\x06WORKER\x10\x00\x12\x0c\n\x08\x43OMBINER\x10\x01\x12\x0b\n\x07REDUCER\x10\x02\x12\t\n\x05OTHER\x10\x03*J\n\x07\x43ommand\x12\x08\n\x04IDLE\x10\x00\x12\t\n\x05START\x10\x01\x12\t\n\x05PAUSE\x10\x02\x12\x08\n\x04STOP\x10\x03\x12\t\n\x05RESET\x10\x04\x12\n\n\x06REPORT\x10\x05*I\n\x10\x43onnectionStatus\x12\x11\n\rNOT_ACCEPTING\x10\x00\x12\r\n\tACCEPTING\x10\x01\x12\x13\n\x0fTRY_AGAIN_LATER\x10\x02\x32z\n\x0cModelService\x12\x33\n\x06Upload\x12\x12.grpc.ModelRequest\x1a\x13.grpc.ModelResponse(\x01\x12\x35\n\x08\x44ownload\x12\x12.grpc.ModelRequest\x1a\x13.grpc.ModelResponse0\x01\x32\xe3\x01\n\x07\x43ontrol\x12\x34\n\x05Start\x12\x14.grpc.ControlRequest\x1a\x15.grpc.ControlResponse\x12\x33\n\x04Stop\x12\x14.grpc.ControlRequest\x1a\x15.grpc.ControlResponse\x12\x37\n\tConfigure\x12\x14.grpc.ControlRequest\x1a\x14.grpc.ReportResponse\x12\x34\n\x06Report\x12\x14.grpc.ControlRequest\x1a\x14.grpc.ReportResponse2V\n\x07Reducer\x12K\n\x0eGetGlobalModel\x12\x1b.grpc.GetGlobalModelRequest\x1a\x1c.grpc.GetGlobalModelResponse2\xab\x03\n\tConnector\x12\x44\n\x14\x41llianceStatusStream\x12\x1c.grpc.ClientAvailableMessage\x1a\x0c.grpc.Status0\x01\x12*\n\nSendStatus\x12\x0c.grpc.Status\x1a\x0e.grpc.Response\x12?\n\x11ListActiveClients\x12\x18.grpc.ListClientsRequest\x1a\x10.grpc.ClientList\x12\x45\n\x10\x41\x63\x63\x65ptingClients\x12\x17.grpc.ConnectionRequest\x1a\x18.grpc.ConnectionResponse\x12\x30\n\rSendHeartbeat\x12\x0f.grpc.Heartbeat\x1a\x0e.grpc.Response\x12\x37\n\x0eReassignClient\x12\x15.grpc.ReassignRequest\x1a\x0e.grpc.Response\x12\x39\n\x0fReconnectClient\x12\x16.grpc.ReconnectRequest\x1a\x0e.grpc.Response2\xda\x04\n\x08\x43ombiner\x12T\n\x18ModelUpdateRequestStream\x12\x1c.grpc.ClientAvailableMessage\x1a\x18.grpc.ModelUpdateRequest0\x01\x12\x46\n\x11ModelUpdateStream\x12\x1c.grpc.ClientAvailableMessage\x1a\x11.grpc.ModelUpdate0\x01\x12\\\n\x1cModelValidationRequestStream\x12\x1c.grpc.ClientAvailableMessage\x1a\x1c.grpc.ModelValidationRequest0\x01\x12N\n\x15ModelValidationStream\x12\x1c.grpc.ClientAvailableMessage\x1a\x15.grpc.ModelValidation0\x01\x12\x42\n\x16SendModelUpdateRequest\x12\x18.grpc.ModelUpdateRequest\x1a\x0e.grpc.Response\x12\x34\n\x0fSendModelUpdate\x12\x11.grpc.ModelUpdate\x1a\x0e.grpc.Response\x12J\n\x1aSendModelValidationRequest\x12\x1c.grpc.ModelValidationRequest\x1a\x0e.grpc.Response\x12<\n\x13SendModelValidation\x12\x15.grpc.ModelValidation\x1a\x0e.grpc.Responseb\x06proto3' + name='fedn/common/net/grpc/fedn.proto', + package='grpc', + syntax='proto3', + serialized_options=None, + create_key=_descriptor._internal_create_key, + serialized_pb=b'\n\x1f\x66\x65\x64n/common/net/grpc/fedn.proto\x12\x04grpc\":\n\x08Response\x12\x1c\n\x06sender\x18\x01 \x01(\x0b\x32\x0c.grpc.Client\x12\x10\n\x08response\x18\x02 \x01(\t\"\x8c\x02\n\x06Status\x12\x1c\n\x06sender\x18\x01 \x01(\x0b\x32\x0c.grpc.Client\x12\x0e\n\x06status\x18\x02 \x01(\t\x12(\n\tlog_level\x18\x03 \x01(\x0e\x32\x15.grpc.Status.LogLevel\x12\x0c\n\x04\x64\x61ta\x18\x04 \x01(\t\x12\x16\n\x0e\x63orrelation_id\x18\x05 \x01(\t\x12\x11\n\ttimestamp\x18\x06 \x01(\t\x12\x1e\n\x04type\x18\x07 \x01(\x0e\x32\x10.grpc.StatusType\x12\r\n\x05\x65xtra\x18\x08 \x01(\t\"B\n\x08LogLevel\x12\x08\n\x04INFO\x10\x00\x12\t\n\x05\x44\x45\x42UG\x10\x01\x12\x0b\n\x07WARNING\x10\x02\x12\t\n\x05\x45RROR\x10\x03\x12\t\n\x05\x41UDIT\x10\x04\"\x9d\x01\n\x12ModelUpdateRequest\x12\x1c\n\x06sender\x18\x01 \x01(\x0b\x32\x0c.grpc.Client\x12\x1e\n\x08receiver\x18\x02 \x01(\x0b\x32\x0c.grpc.Client\x12\x10\n\x08model_id\x18\x03 \x01(\t\x12\x0c\n\x04\x64\x61ta\x18\x04 \x01(\t\x12\x16\n\x0e\x63orrelation_id\x18\x05 \x01(\t\x12\x11\n\ttimestamp\x18\x06 \x01(\t\"\xaf\x01\n\x0bModelUpdate\x12\x1c\n\x06sender\x18\x01 \x01(\x0b\x32\x0c.grpc.Client\x12\x1e\n\x08receiver\x18\x02 \x01(\x0b\x32\x0c.grpc.Client\x12\x10\n\x08model_id\x18\x03 \x01(\t\x12\x17\n\x0fmodel_update_id\x18\x04 \x01(\t\x12\x16\n\x0e\x63orrelation_id\x18\x05 \x01(\t\x12\x11\n\ttimestamp\x18\x06 \x01(\t\x12\x0c\n\x04meta\x18\x07 \x01(\t\"\xb7\x01\n\x16ModelValidationRequest\x12\x1c\n\x06sender\x18\x01 \x01(\x0b\x32\x0c.grpc.Client\x12\x1e\n\x08receiver\x18\x02 \x01(\x0b\x32\x0c.grpc.Client\x12\x10\n\x08model_id\x18\x03 \x01(\t\x12\x0c\n\x04\x64\x61ta\x18\x04 \x01(\t\x12\x16\n\x0e\x63orrelation_id\x18\x05 \x01(\t\x12\x11\n\ttimestamp\x18\x06 \x01(\t\x12\x14\n\x0cis_inference\x18\x07 \x01(\x08\"\xa8\x01\n\x0fModelValidation\x12\x1c\n\x06sender\x18\x01 \x01(\x0b\x32\x0c.grpc.Client\x12\x1e\n\x08receiver\x18\x02 \x01(\x0b\x32\x0c.grpc.Client\x12\x10\n\x08model_id\x18\x03 \x01(\t\x12\x0c\n\x04\x64\x61ta\x18\x04 \x01(\t\x12\x16\n\x0e\x63orrelation_id\x18\x05 \x01(\t\x12\x11\n\ttimestamp\x18\x06 \x01(\t\x12\x0c\n\x04meta\x18\x07 \x01(\t\"\x89\x01\n\x0cModelRequest\x12\x1c\n\x06sender\x18\x01 \x01(\x0b\x32\x0c.grpc.Client\x12\x1e\n\x08receiver\x18\x02 \x01(\x0b\x32\x0c.grpc.Client\x12\x0c\n\x04\x64\x61ta\x18\x03 \x01(\x0c\x12\n\n\x02id\x18\x04 \x01(\t\x12!\n\x06status\x18\x05 \x01(\x0e\x32\x11.grpc.ModelStatus\"]\n\rModelResponse\x12\x0c\n\x04\x64\x61ta\x18\x01 \x01(\x0c\x12\n\n\x02id\x18\x02 \x01(\t\x12!\n\x06status\x18\x03 \x01(\x0e\x32\x11.grpc.ModelStatus\x12\x0f\n\x07message\x18\x04 \x01(\t\"U\n\x15GetGlobalModelRequest\x12\x1c\n\x06sender\x18\x01 \x01(\x0b\x32\x0c.grpc.Client\x12\x1e\n\x08receiver\x18\x02 \x01(\x0b\x32\x0c.grpc.Client\"h\n\x16GetGlobalModelResponse\x12\x1c\n\x06sender\x18\x01 \x01(\x0b\x32\x0c.grpc.Client\x12\x1e\n\x08receiver\x18\x02 \x01(\x0b\x32\x0c.grpc.Client\x12\x10\n\x08model_id\x18\x03 \x01(\t\")\n\tHeartbeat\x12\x1c\n\x06sender\x18\x01 \x01(\x0b\x32\x0c.grpc.Client\"W\n\x16\x43lientAvailableMessage\x12\x1c\n\x06sender\x18\x01 \x01(\x0b\x32\x0c.grpc.Client\x12\x0c\n\x04\x64\x61ta\x18\x02 \x01(\t\x12\x11\n\ttimestamp\x18\x03 \x01(\t\"R\n\x12ListClientsRequest\x12\x1c\n\x06sender\x18\x01 \x01(\x0b\x32\x0c.grpc.Client\x12\x1e\n\x07\x63hannel\x18\x02 \x01(\x0e\x32\r.grpc.Channel\"*\n\nClientList\x12\x1c\n\x06\x63lient\x18\x01 \x03(\x0b\x32\x0c.grpc.Client\"0\n\x06\x43lient\x12\x18\n\x04role\x18\x01 \x01(\x0e\x32\n.grpc.Role\x12\x0c\n\x04name\x18\x02 \x01(\t\"m\n\x0fReassignRequest\x12\x1c\n\x06sender\x18\x01 \x01(\x0b\x32\x0c.grpc.Client\x12\x1e\n\x08receiver\x18\x02 \x01(\x0b\x32\x0c.grpc.Client\x12\x0e\n\x06server\x18\x03 \x01(\t\x12\x0c\n\x04port\x18\x04 \x01(\r\"c\n\x10ReconnectRequest\x12\x1c\n\x06sender\x18\x01 \x01(\x0b\x32\x0c.grpc.Client\x12\x1e\n\x08receiver\x18\x02 \x01(\x0b\x32\x0c.grpc.Client\x12\x11\n\treconnect\x18\x03 \x01(\r\"\'\n\tParameter\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\r\n\x05value\x18\x02 \x01(\t\"T\n\x0e\x43ontrolRequest\x12\x1e\n\x07\x63ommand\x18\x01 \x01(\x0e\x32\r.grpc.Command\x12\"\n\tparameter\x18\x02 \x03(\x0b\x32\x0f.grpc.Parameter\"F\n\x0f\x43ontrolResponse\x12\x0f\n\x07message\x18\x01 \x01(\t\x12\"\n\tparameter\x18\x02 \x03(\x0b\x32\x0f.grpc.Parameter\"R\n\x0eReportResponse\x12\x1c\n\x06sender\x18\x01 \x01(\x0b\x32\x0c.grpc.Client\x12\"\n\tparameter\x18\x02 \x03(\x0b\x32\x0f.grpc.Parameter\"\x13\n\x11\x43onnectionRequest\"<\n\x12\x43onnectionResponse\x12&\n\x06status\x18\x01 \x01(\x0e\x32\x16.grpc.ConnectionStatus*u\n\nStatusType\x12\x07\n\x03LOG\x10\x00\x12\x18\n\x14MODEL_UPDATE_REQUEST\x10\x01\x12\x10\n\x0cMODEL_UPDATE\x10\x02\x12\x1c\n\x18MODEL_VALIDATION_REQUEST\x10\x03\x12\x14\n\x10MODEL_VALIDATION\x10\x04*\x86\x01\n\x07\x43hannel\x12\x0b\n\x07\x44\x45\x46\x41ULT\x10\x00\x12\x19\n\x15MODEL_UPDATE_REQUESTS\x10\x01\x12\x11\n\rMODEL_UPDATES\x10\x02\x12\x1d\n\x19MODEL_VALIDATION_REQUESTS\x10\x03\x12\x15\n\x11MODEL_VALIDATIONS\x10\x04\x12\n\n\x06STATUS\x10\x05*F\n\x0bModelStatus\x12\x06\n\x02OK\x10\x00\x12\x0f\n\x0bIN_PROGRESS\x10\x01\x12\x12\n\x0eIN_PROGRESS_OK\x10\x02\x12\n\n\x06\x46\x41ILED\x10\x03*8\n\x04Role\x12\n\n\x06WORKER\x10\x00\x12\x0c\n\x08\x43OMBINER\x10\x01\x12\x0b\n\x07REDUCER\x10\x02\x12\t\n\x05OTHER\x10\x03*J\n\x07\x43ommand\x12\x08\n\x04IDLE\x10\x00\x12\t\n\x05START\x10\x01\x12\t\n\x05PAUSE\x10\x02\x12\x08\n\x04STOP\x10\x03\x12\t\n\x05RESET\x10\x04\x12\n\n\x06REPORT\x10\x05*I\n\x10\x43onnectionStatus\x12\x11\n\rNOT_ACCEPTING\x10\x00\x12\r\n\tACCEPTING\x10\x01\x12\x13\n\x0fTRY_AGAIN_LATER\x10\x02\x32z\n\x0cModelService\x12\x33\n\x06Upload\x12\x12.grpc.ModelRequest\x1a\x13.grpc.ModelResponse(\x01\x12\x35\n\x08\x44ownload\x12\x12.grpc.ModelRequest\x1a\x13.grpc.ModelResponse0\x01\x32\xe3\x01\n\x07\x43ontrol\x12\x34\n\x05Start\x12\x14.grpc.ControlRequest\x1a\x15.grpc.ControlResponse\x12\x33\n\x04Stop\x12\x14.grpc.ControlRequest\x1a\x15.grpc.ControlResponse\x12\x37\n\tConfigure\x12\x14.grpc.ControlRequest\x1a\x14.grpc.ReportResponse\x12\x34\n\x06Report\x12\x14.grpc.ControlRequest\x1a\x14.grpc.ReportResponse2V\n\x07Reducer\x12K\n\x0eGetGlobalModel\x12\x1b.grpc.GetGlobalModelRequest\x1a\x1c.grpc.GetGlobalModelResponse2\xab\x03\n\tConnector\x12\x44\n\x14\x41llianceStatusStream\x12\x1c.grpc.ClientAvailableMessage\x1a\x0c.grpc.Status0\x01\x12*\n\nSendStatus\x12\x0c.grpc.Status\x1a\x0e.grpc.Response\x12?\n\x11ListActiveClients\x12\x18.grpc.ListClientsRequest\x1a\x10.grpc.ClientList\x12\x45\n\x10\x41\x63\x63\x65ptingClients\x12\x17.grpc.ConnectionRequest\x1a\x18.grpc.ConnectionResponse\x12\x30\n\rSendHeartbeat\x12\x0f.grpc.Heartbeat\x1a\x0e.grpc.Response\x12\x37\n\x0eReassignClient\x12\x15.grpc.ReassignRequest\x1a\x0e.grpc.Response\x12\x39\n\x0fReconnectClient\x12\x16.grpc.ReconnectRequest\x1a\x0e.grpc.Response2\xda\x04\n\x08\x43ombiner\x12T\n\x18ModelUpdateRequestStream\x12\x1c.grpc.ClientAvailableMessage\x1a\x18.grpc.ModelUpdateRequest0\x01\x12\x46\n\x11ModelUpdateStream\x12\x1c.grpc.ClientAvailableMessage\x1a\x11.grpc.ModelUpdate0\x01\x12\\\n\x1cModelValidationRequestStream\x12\x1c.grpc.ClientAvailableMessage\x1a\x1c.grpc.ModelValidationRequest0\x01\x12N\n\x15ModelValidationStream\x12\x1c.grpc.ClientAvailableMessage\x1a\x15.grpc.ModelValidation0\x01\x12\x42\n\x16SendModelUpdateRequest\x12\x18.grpc.ModelUpdateRequest\x1a\x0e.grpc.Response\x12\x34\n\x0fSendModelUpdate\x12\x11.grpc.ModelUpdate\x1a\x0e.grpc.Response\x12J\n\x1aSendModelValidationRequest\x12\x1c.grpc.ModelValidationRequest\x1a\x0e.grpc.Response\x12<\n\x13SendModelValidation\x12\x15.grpc.ModelValidation\x1a\x0e.grpc.Responseb\x06proto3' ) _STATUSTYPE = _descriptor.EnumDescriptor( - name='StatusType', - full_name='grpc.StatusType', - filename=None, - file=DESCRIPTOR, - create_key=_descriptor._internal_create_key, - values=[ - _descriptor.EnumValueDescriptor( - name='LOG', index=0, number=0, - serialized_options=None, - type=None, - create_key=_descriptor._internal_create_key), - _descriptor.EnumValueDescriptor( - name='MODEL_UPDATE_REQUEST', index=1, number=1, - serialized_options=None, - type=None, - create_key=_descriptor._internal_create_key), - _descriptor.EnumValueDescriptor( - name='MODEL_UPDATE', index=2, number=2, - serialized_options=None, - type=None, - create_key=_descriptor._internal_create_key), - _descriptor.EnumValueDescriptor( - name='MODEL_VALIDATION_REQUEST', index=3, number=3, - serialized_options=None, - type=None, - create_key=_descriptor._internal_create_key), - _descriptor.EnumValueDescriptor( - name='MODEL_VALIDATION', index=4, number=4, - serialized_options=None, - type=None, - create_key=_descriptor._internal_create_key), - ], - containing_type=None, - serialized_options=None, - serialized_start=2361, - serialized_end=2478, + name='StatusType', + full_name='grpc.StatusType', + filename=None, + file=DESCRIPTOR, + create_key=_descriptor._internal_create_key, + values=[ + _descriptor.EnumValueDescriptor( + name='LOG', index=0, number=0, + serialized_options=None, + type=None, + create_key=_descriptor._internal_create_key), + _descriptor.EnumValueDescriptor( + name='MODEL_UPDATE_REQUEST', index=1, number=1, + serialized_options=None, + type=None, + create_key=_descriptor._internal_create_key), + _descriptor.EnumValueDescriptor( + name='MODEL_UPDATE', index=2, number=2, + serialized_options=None, + type=None, + create_key=_descriptor._internal_create_key), + _descriptor.EnumValueDescriptor( + name='MODEL_VALIDATION_REQUEST', index=3, number=3, + serialized_options=None, + type=None, + create_key=_descriptor._internal_create_key), + _descriptor.EnumValueDescriptor( + name='MODEL_VALIDATION', index=4, number=4, + serialized_options=None, + type=None, + create_key=_descriptor._internal_create_key), + ], + containing_type=None, + serialized_options=None, + serialized_start=2383, + serialized_end=2500, ) _sym_db.RegisterEnumDescriptor(_STATUSTYPE) StatusType = enum_type_wrapper.EnumTypeWrapper(_STATUSTYPE) _CHANNEL = _descriptor.EnumDescriptor( - name='Channel', - full_name='grpc.Channel', - filename=None, - file=DESCRIPTOR, - create_key=_descriptor._internal_create_key, - values=[ - _descriptor.EnumValueDescriptor( - name='DEFAULT', index=0, number=0, - serialized_options=None, - type=None, - create_key=_descriptor._internal_create_key), - _descriptor.EnumValueDescriptor( - name='MODEL_UPDATE_REQUESTS', index=1, number=1, - serialized_options=None, - type=None, - create_key=_descriptor._internal_create_key), - _descriptor.EnumValueDescriptor( - name='MODEL_UPDATES', index=2, number=2, - serialized_options=None, - type=None, - create_key=_descriptor._internal_create_key), - _descriptor.EnumValueDescriptor( - name='MODEL_VALIDATION_REQUESTS', index=3, number=3, - serialized_options=None, - type=None, - create_key=_descriptor._internal_create_key), - _descriptor.EnumValueDescriptor( - name='MODEL_VALIDATIONS', index=4, number=4, - serialized_options=None, - type=None, - create_key=_descriptor._internal_create_key), - _descriptor.EnumValueDescriptor( - name='STATUS', index=5, number=5, - serialized_options=None, - type=None, - create_key=_descriptor._internal_create_key), - ], - containing_type=None, - serialized_options=None, - serialized_start=2481, - serialized_end=2615, + name='Channel', + full_name='grpc.Channel', + filename=None, + file=DESCRIPTOR, + create_key=_descriptor._internal_create_key, + values=[ + _descriptor.EnumValueDescriptor( + name='DEFAULT', index=0, number=0, + serialized_options=None, + type=None, + create_key=_descriptor._internal_create_key), + _descriptor.EnumValueDescriptor( + name='MODEL_UPDATE_REQUESTS', index=1, number=1, + serialized_options=None, + type=None, + create_key=_descriptor._internal_create_key), + _descriptor.EnumValueDescriptor( + name='MODEL_UPDATES', index=2, number=2, + serialized_options=None, + type=None, + create_key=_descriptor._internal_create_key), + _descriptor.EnumValueDescriptor( + name='MODEL_VALIDATION_REQUESTS', index=3, number=3, + serialized_options=None, + type=None, + create_key=_descriptor._internal_create_key), + _descriptor.EnumValueDescriptor( + name='MODEL_VALIDATIONS', index=4, number=4, + serialized_options=None, + type=None, + create_key=_descriptor._internal_create_key), + _descriptor.EnumValueDescriptor( + name='STATUS', index=5, number=5, + serialized_options=None, + type=None, + create_key=_descriptor._internal_create_key), + ], + containing_type=None, + serialized_options=None, + serialized_start=2503, + serialized_end=2637, ) _sym_db.RegisterEnumDescriptor(_CHANNEL) Channel = enum_type_wrapper.EnumTypeWrapper(_CHANNEL) _MODELSTATUS = _descriptor.EnumDescriptor( - name='ModelStatus', - full_name='grpc.ModelStatus', - filename=None, - file=DESCRIPTOR, - create_key=_descriptor._internal_create_key, - values=[ - _descriptor.EnumValueDescriptor( - name='OK', index=0, number=0, - serialized_options=None, - type=None, - create_key=_descriptor._internal_create_key), - _descriptor.EnumValueDescriptor( - name='IN_PROGRESS', index=1, number=1, - serialized_options=None, - type=None, - create_key=_descriptor._internal_create_key), - _descriptor.EnumValueDescriptor( - name='IN_PROGRESS_OK', index=2, number=2, - serialized_options=None, - type=None, - create_key=_descriptor._internal_create_key), - _descriptor.EnumValueDescriptor( - name='FAILED', index=3, number=3, - serialized_options=None, - type=None, - create_key=_descriptor._internal_create_key), - ], - containing_type=None, - serialized_options=None, - serialized_start=2617, - serialized_end=2687, + name='ModelStatus', + full_name='grpc.ModelStatus', + filename=None, + file=DESCRIPTOR, + create_key=_descriptor._internal_create_key, + values=[ + _descriptor.EnumValueDescriptor( + name='OK', index=0, number=0, + serialized_options=None, + type=None, + create_key=_descriptor._internal_create_key), + _descriptor.EnumValueDescriptor( + name='IN_PROGRESS', index=1, number=1, + serialized_options=None, + type=None, + create_key=_descriptor._internal_create_key), + _descriptor.EnumValueDescriptor( + name='IN_PROGRESS_OK', index=2, number=2, + serialized_options=None, + type=None, + create_key=_descriptor._internal_create_key), + _descriptor.EnumValueDescriptor( + name='FAILED', index=3, number=3, + serialized_options=None, + type=None, + create_key=_descriptor._internal_create_key), + ], + containing_type=None, + serialized_options=None, + serialized_start=2639, + serialized_end=2709, ) _sym_db.RegisterEnumDescriptor(_MODELSTATUS) ModelStatus = enum_type_wrapper.EnumTypeWrapper(_MODELSTATUS) _ROLE = _descriptor.EnumDescriptor( - name='Role', - full_name='grpc.Role', - filename=None, - file=DESCRIPTOR, - create_key=_descriptor._internal_create_key, - values=[ - _descriptor.EnumValueDescriptor( - name='WORKER', index=0, number=0, - serialized_options=None, - type=None, - create_key=_descriptor._internal_create_key), - _descriptor.EnumValueDescriptor( - name='COMBINER', index=1, number=1, - serialized_options=None, - type=None, - create_key=_descriptor._internal_create_key), - _descriptor.EnumValueDescriptor( - name='REDUCER', index=2, number=2, - serialized_options=None, - type=None, - create_key=_descriptor._internal_create_key), - _descriptor.EnumValueDescriptor( - name='OTHER', index=3, number=3, - serialized_options=None, - type=None, - create_key=_descriptor._internal_create_key), - ], - containing_type=None, - serialized_options=None, - serialized_start=2689, - serialized_end=2745, + name='Role', + full_name='grpc.Role', + filename=None, + file=DESCRIPTOR, + create_key=_descriptor._internal_create_key, + values=[ + _descriptor.EnumValueDescriptor( + name='WORKER', index=0, number=0, + serialized_options=None, + type=None, + create_key=_descriptor._internal_create_key), + _descriptor.EnumValueDescriptor( + name='COMBINER', index=1, number=1, + serialized_options=None, + type=None, + create_key=_descriptor._internal_create_key), + _descriptor.EnumValueDescriptor( + name='REDUCER', index=2, number=2, + serialized_options=None, + type=None, + create_key=_descriptor._internal_create_key), + _descriptor.EnumValueDescriptor( + name='OTHER', index=3, number=3, + serialized_options=None, + type=None, + create_key=_descriptor._internal_create_key), + ], + containing_type=None, + serialized_options=None, + serialized_start=2711, + serialized_end=2767, ) _sym_db.RegisterEnumDescriptor(_ROLE) Role = enum_type_wrapper.EnumTypeWrapper(_ROLE) _COMMAND = _descriptor.EnumDescriptor( - name='Command', - full_name='grpc.Command', - filename=None, - file=DESCRIPTOR, - create_key=_descriptor._internal_create_key, - values=[ - _descriptor.EnumValueDescriptor( - name='IDLE', index=0, number=0, - serialized_options=None, - type=None, - create_key=_descriptor._internal_create_key), - _descriptor.EnumValueDescriptor( - name='START', index=1, number=1, - serialized_options=None, - type=None, - create_key=_descriptor._internal_create_key), - _descriptor.EnumValueDescriptor( - name='PAUSE', index=2, number=2, - serialized_options=None, - type=None, - create_key=_descriptor._internal_create_key), - _descriptor.EnumValueDescriptor( - name='STOP', index=3, number=3, - serialized_options=None, - type=None, - create_key=_descriptor._internal_create_key), - _descriptor.EnumValueDescriptor( - name='RESET', index=4, number=4, - serialized_options=None, - type=None, - create_key=_descriptor._internal_create_key), - _descriptor.EnumValueDescriptor( - name='REPORT', index=5, number=5, - serialized_options=None, - type=None, - create_key=_descriptor._internal_create_key), - ], - containing_type=None, - serialized_options=None, - serialized_start=2747, - serialized_end=2821, + name='Command', + full_name='grpc.Command', + filename=None, + file=DESCRIPTOR, + create_key=_descriptor._internal_create_key, + values=[ + _descriptor.EnumValueDescriptor( + name='IDLE', index=0, number=0, + serialized_options=None, + type=None, + create_key=_descriptor._internal_create_key), + _descriptor.EnumValueDescriptor( + name='START', index=1, number=1, + serialized_options=None, + type=None, + create_key=_descriptor._internal_create_key), + _descriptor.EnumValueDescriptor( + name='PAUSE', index=2, number=2, + serialized_options=None, + type=None, + create_key=_descriptor._internal_create_key), + _descriptor.EnumValueDescriptor( + name='STOP', index=3, number=3, + serialized_options=None, + type=None, + create_key=_descriptor._internal_create_key), + _descriptor.EnumValueDescriptor( + name='RESET', index=4, number=4, + serialized_options=None, + type=None, + create_key=_descriptor._internal_create_key), + _descriptor.EnumValueDescriptor( + name='REPORT', index=5, number=5, + serialized_options=None, + type=None, + create_key=_descriptor._internal_create_key), + ], + containing_type=None, + serialized_options=None, + serialized_start=2769, + serialized_end=2843, ) _sym_db.RegisterEnumDescriptor(_COMMAND) Command = enum_type_wrapper.EnumTypeWrapper(_COMMAND) _CONNECTIONSTATUS = _descriptor.EnumDescriptor( - name='ConnectionStatus', - full_name='grpc.ConnectionStatus', - filename=None, - file=DESCRIPTOR, - create_key=_descriptor._internal_create_key, - values=[ - _descriptor.EnumValueDescriptor( - name='NOT_ACCEPTING', index=0, number=0, - serialized_options=None, - type=None, - create_key=_descriptor._internal_create_key), - _descriptor.EnumValueDescriptor( - name='ACCEPTING', index=1, number=1, - serialized_options=None, - type=None, - create_key=_descriptor._internal_create_key), - _descriptor.EnumValueDescriptor( - name='TRY_AGAIN_LATER', index=2, number=2, - serialized_options=None, - type=None, - create_key=_descriptor._internal_create_key), - ], - containing_type=None, - serialized_options=None, - serialized_start=2823, - serialized_end=2896, + name='ConnectionStatus', + full_name='grpc.ConnectionStatus', + filename=None, + file=DESCRIPTOR, + create_key=_descriptor._internal_create_key, + values=[ + _descriptor.EnumValueDescriptor( + name='NOT_ACCEPTING', index=0, number=0, + serialized_options=None, + type=None, + create_key=_descriptor._internal_create_key), + _descriptor.EnumValueDescriptor( + name='ACCEPTING', index=1, number=1, + serialized_options=None, + type=None, + create_key=_descriptor._internal_create_key), + _descriptor.EnumValueDescriptor( + name='TRY_AGAIN_LATER', index=2, number=2, + serialized_options=None, + type=None, + create_key=_descriptor._internal_create_key), + ], + containing_type=None, + serialized_options=None, + serialized_start=2845, + serialized_end=2918, ) _sym_db.RegisterEnumDescriptor(_CONNECTIONSTATUS) @@ -286,1122 +288,1153 @@ ACCEPTING = 1 TRY_AGAIN_LATER = 2 + _STATUS_LOGLEVEL = _descriptor.EnumDescriptor( - name='LogLevel', - full_name='grpc.Status.LogLevel', - filename=None, - file=DESCRIPTOR, - create_key=_descriptor._internal_create_key, - values=[ - _descriptor.EnumValueDescriptor( - name='INFO', index=0, number=0, - serialized_options=None, - type=None, - create_key=_descriptor._internal_create_key), - _descriptor.EnumValueDescriptor( - name='DEBUG', index=1, number=1, - serialized_options=None, - type=None, - create_key=_descriptor._internal_create_key), - _descriptor.EnumValueDescriptor( - name='WARNING', index=2, number=2, - serialized_options=None, - type=None, - create_key=_descriptor._internal_create_key), - _descriptor.EnumValueDescriptor( - name='ERROR', index=3, number=3, - serialized_options=None, - type=None, - create_key=_descriptor._internal_create_key), - _descriptor.EnumValueDescriptor( - name='AUDIT', index=4, number=4, - serialized_options=None, - type=None, - create_key=_descriptor._internal_create_key), - ], - containing_type=None, - serialized_options=None, - serialized_start=304, - serialized_end=370, + name='LogLevel', + full_name='grpc.Status.LogLevel', + filename=None, + file=DESCRIPTOR, + create_key=_descriptor._internal_create_key, + values=[ + _descriptor.EnumValueDescriptor( + name='INFO', index=0, number=0, + serialized_options=None, + type=None, + create_key=_descriptor._internal_create_key), + _descriptor.EnumValueDescriptor( + name='DEBUG', index=1, number=1, + serialized_options=None, + type=None, + create_key=_descriptor._internal_create_key), + _descriptor.EnumValueDescriptor( + name='WARNING', index=2, number=2, + serialized_options=None, + type=None, + create_key=_descriptor._internal_create_key), + _descriptor.EnumValueDescriptor( + name='ERROR', index=3, number=3, + serialized_options=None, + type=None, + create_key=_descriptor._internal_create_key), + _descriptor.EnumValueDescriptor( + name='AUDIT', index=4, number=4, + serialized_options=None, + type=None, + create_key=_descriptor._internal_create_key), + ], + containing_type=None, + serialized_options=None, + serialized_start=304, + serialized_end=370, ) _sym_db.RegisterEnumDescriptor(_STATUS_LOGLEVEL) + _RESPONSE = _descriptor.Descriptor( - name='Response', - full_name='grpc.Response', - filename=None, - file=DESCRIPTOR, - containing_type=None, - create_key=_descriptor._internal_create_key, - fields=[ - _descriptor.FieldDescriptor( - name='sender', full_name='grpc.Response.sender', index=0, - number=1, type=11, cpp_type=10, label=1, - has_default_value=False, default_value=None, - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), - _descriptor.FieldDescriptor( - name='response', full_name='grpc.Response.response', index=1, - number=2, type=9, cpp_type=9, label=1, - has_default_value=False, default_value=b"".decode('utf-8'), - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), - ], - extensions=[ - ], - nested_types=[], - enum_types=[ - ], - serialized_options=None, - is_extendable=False, - syntax='proto3', - extension_ranges=[], - oneofs=[ - ], - serialized_start=41, - serialized_end=99, + name='Response', + full_name='grpc.Response', + filename=None, + file=DESCRIPTOR, + containing_type=None, + create_key=_descriptor._internal_create_key, + fields=[ + _descriptor.FieldDescriptor( + name='sender', full_name='grpc.Response.sender', index=0, + number=1, type=11, cpp_type=10, label=1, + has_default_value=False, default_value=None, + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + _descriptor.FieldDescriptor( + name='response', full_name='grpc.Response.response', index=1, + number=2, type=9, cpp_type=9, label=1, + has_default_value=False, default_value=b"".decode('utf-8'), + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + ], + extensions=[ + ], + nested_types=[], + enum_types=[ + ], + serialized_options=None, + is_extendable=False, + syntax='proto3', + extension_ranges=[], + oneofs=[ + ], + serialized_start=41, + serialized_end=99, ) + _STATUS = _descriptor.Descriptor( - name='Status', - full_name='grpc.Status', - filename=None, - file=DESCRIPTOR, - containing_type=None, - create_key=_descriptor._internal_create_key, - fields=[ - _descriptor.FieldDescriptor( - name='sender', full_name='grpc.Status.sender', index=0, - number=1, type=11, cpp_type=10, label=1, - has_default_value=False, default_value=None, - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), - _descriptor.FieldDescriptor( - name='status', full_name='grpc.Status.status', index=1, - number=2, type=9, cpp_type=9, label=1, - has_default_value=False, default_value=b"".decode('utf-8'), - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), - _descriptor.FieldDescriptor( - name='log_level', full_name='grpc.Status.log_level', index=2, - number=3, type=14, cpp_type=8, label=1, - has_default_value=False, default_value=0, - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), - _descriptor.FieldDescriptor( - name='data', full_name='grpc.Status.data', index=3, - number=4, type=9, cpp_type=9, label=1, - has_default_value=False, default_value=b"".decode('utf-8'), - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), - _descriptor.FieldDescriptor( - name='correlation_id', full_name='grpc.Status.correlation_id', index=4, - number=5, type=9, cpp_type=9, label=1, - has_default_value=False, default_value=b"".decode('utf-8'), - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), - _descriptor.FieldDescriptor( - name='timestamp', full_name='grpc.Status.timestamp', index=5, - number=6, type=9, cpp_type=9, label=1, - has_default_value=False, default_value=b"".decode('utf-8'), - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), - _descriptor.FieldDescriptor( - name='type', full_name='grpc.Status.type', index=6, - number=7, type=14, cpp_type=8, label=1, - has_default_value=False, default_value=0, - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), - _descriptor.FieldDescriptor( - name='extra', full_name='grpc.Status.extra', index=7, - number=8, type=9, cpp_type=9, label=1, - has_default_value=False, default_value=b"".decode('utf-8'), - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), - ], - extensions=[ - ], - nested_types=[], - enum_types=[ - _STATUS_LOGLEVEL, - ], - serialized_options=None, - is_extendable=False, - syntax='proto3', - extension_ranges=[], - oneofs=[ - ], - serialized_start=102, - serialized_end=370, + name='Status', + full_name='grpc.Status', + filename=None, + file=DESCRIPTOR, + containing_type=None, + create_key=_descriptor._internal_create_key, + fields=[ + _descriptor.FieldDescriptor( + name='sender', full_name='grpc.Status.sender', index=0, + number=1, type=11, cpp_type=10, label=1, + has_default_value=False, default_value=None, + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + _descriptor.FieldDescriptor( + name='status', full_name='grpc.Status.status', index=1, + number=2, type=9, cpp_type=9, label=1, + has_default_value=False, default_value=b"".decode('utf-8'), + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + _descriptor.FieldDescriptor( + name='log_level', full_name='grpc.Status.log_level', index=2, + number=3, type=14, cpp_type=8, label=1, + has_default_value=False, default_value=0, + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + _descriptor.FieldDescriptor( + name='data', full_name='grpc.Status.data', index=3, + number=4, type=9, cpp_type=9, label=1, + has_default_value=False, default_value=b"".decode('utf-8'), + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + _descriptor.FieldDescriptor( + name='correlation_id', full_name='grpc.Status.correlation_id', index=4, + number=5, type=9, cpp_type=9, label=1, + has_default_value=False, default_value=b"".decode('utf-8'), + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + _descriptor.FieldDescriptor( + name='timestamp', full_name='grpc.Status.timestamp', index=5, + number=6, type=9, cpp_type=9, label=1, + has_default_value=False, default_value=b"".decode('utf-8'), + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + _descriptor.FieldDescriptor( + name='type', full_name='grpc.Status.type', index=6, + number=7, type=14, cpp_type=8, label=1, + has_default_value=False, default_value=0, + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + _descriptor.FieldDescriptor( + name='extra', full_name='grpc.Status.extra', index=7, + number=8, type=9, cpp_type=9, label=1, + has_default_value=False, default_value=b"".decode('utf-8'), + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + ], + extensions=[ + ], + nested_types=[], + enum_types=[ + _STATUS_LOGLEVEL, + ], + serialized_options=None, + is_extendable=False, + syntax='proto3', + extension_ranges=[], + oneofs=[ + ], + serialized_start=102, + serialized_end=370, ) + _MODELUPDATEREQUEST = _descriptor.Descriptor( - name='ModelUpdateRequest', - full_name='grpc.ModelUpdateRequest', - filename=None, - file=DESCRIPTOR, - containing_type=None, - create_key=_descriptor._internal_create_key, - fields=[ - _descriptor.FieldDescriptor( - name='sender', full_name='grpc.ModelUpdateRequest.sender', index=0, - number=1, type=11, cpp_type=10, label=1, - has_default_value=False, default_value=None, - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), - _descriptor.FieldDescriptor( - name='receiver', full_name='grpc.ModelUpdateRequest.receiver', index=1, - number=2, type=11, cpp_type=10, label=1, - has_default_value=False, default_value=None, - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), - _descriptor.FieldDescriptor( - name='model_id', full_name='grpc.ModelUpdateRequest.model_id', index=2, - number=3, type=9, cpp_type=9, label=1, - has_default_value=False, default_value=b"".decode('utf-8'), - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), - _descriptor.FieldDescriptor( - name='data', full_name='grpc.ModelUpdateRequest.data', index=3, - number=4, type=9, cpp_type=9, label=1, - has_default_value=False, default_value=b"".decode('utf-8'), - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), - _descriptor.FieldDescriptor( - name='correlation_id', full_name='grpc.ModelUpdateRequest.correlation_id', index=4, - number=5, type=9, cpp_type=9, label=1, - has_default_value=False, default_value=b"".decode('utf-8'), - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), - _descriptor.FieldDescriptor( - name='timestamp', full_name='grpc.ModelUpdateRequest.timestamp', index=5, - number=6, type=9, cpp_type=9, label=1, - has_default_value=False, default_value=b"".decode('utf-8'), - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), - ], - extensions=[ - ], - nested_types=[], - enum_types=[ - ], - serialized_options=None, - is_extendable=False, - syntax='proto3', - extension_ranges=[], - oneofs=[ - ], - serialized_start=373, - serialized_end=530, + name='ModelUpdateRequest', + full_name='grpc.ModelUpdateRequest', + filename=None, + file=DESCRIPTOR, + containing_type=None, + create_key=_descriptor._internal_create_key, + fields=[ + _descriptor.FieldDescriptor( + name='sender', full_name='grpc.ModelUpdateRequest.sender', index=0, + number=1, type=11, cpp_type=10, label=1, + has_default_value=False, default_value=None, + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + _descriptor.FieldDescriptor( + name='receiver', full_name='grpc.ModelUpdateRequest.receiver', index=1, + number=2, type=11, cpp_type=10, label=1, + has_default_value=False, default_value=None, + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + _descriptor.FieldDescriptor( + name='model_id', full_name='grpc.ModelUpdateRequest.model_id', index=2, + number=3, type=9, cpp_type=9, label=1, + has_default_value=False, default_value=b"".decode('utf-8'), + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + _descriptor.FieldDescriptor( + name='data', full_name='grpc.ModelUpdateRequest.data', index=3, + number=4, type=9, cpp_type=9, label=1, + has_default_value=False, default_value=b"".decode('utf-8'), + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + _descriptor.FieldDescriptor( + name='correlation_id', full_name='grpc.ModelUpdateRequest.correlation_id', index=4, + number=5, type=9, cpp_type=9, label=1, + has_default_value=False, default_value=b"".decode('utf-8'), + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + _descriptor.FieldDescriptor( + name='timestamp', full_name='grpc.ModelUpdateRequest.timestamp', index=5, + number=6, type=9, cpp_type=9, label=1, + has_default_value=False, default_value=b"".decode('utf-8'), + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + ], + extensions=[ + ], + nested_types=[], + enum_types=[ + ], + serialized_options=None, + is_extendable=False, + syntax='proto3', + extension_ranges=[], + oneofs=[ + ], + serialized_start=373, + serialized_end=530, ) + _MODELUPDATE = _descriptor.Descriptor( - name='ModelUpdate', - full_name='grpc.ModelUpdate', - filename=None, - file=DESCRIPTOR, - containing_type=None, - create_key=_descriptor._internal_create_key, - fields=[ - _descriptor.FieldDescriptor( - name='sender', full_name='grpc.ModelUpdate.sender', index=0, - number=1, type=11, cpp_type=10, label=1, - has_default_value=False, default_value=None, - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), - _descriptor.FieldDescriptor( - name='receiver', full_name='grpc.ModelUpdate.receiver', index=1, - number=2, type=11, cpp_type=10, label=1, - has_default_value=False, default_value=None, - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), - _descriptor.FieldDescriptor( - name='model_id', full_name='grpc.ModelUpdate.model_id', index=2, - number=3, type=9, cpp_type=9, label=1, - has_default_value=False, default_value=b"".decode('utf-8'), - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), - _descriptor.FieldDescriptor( - name='model_update_id', full_name='grpc.ModelUpdate.model_update_id', index=3, - number=4, type=9, cpp_type=9, label=1, - has_default_value=False, default_value=b"".decode('utf-8'), - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), - _descriptor.FieldDescriptor( - name='correlation_id', full_name='grpc.ModelUpdate.correlation_id', index=4, - number=5, type=9, cpp_type=9, label=1, - has_default_value=False, default_value=b"".decode('utf-8'), - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), - _descriptor.FieldDescriptor( - name='timestamp', full_name='grpc.ModelUpdate.timestamp', index=5, - number=6, type=9, cpp_type=9, label=1, - has_default_value=False, default_value=b"".decode('utf-8'), - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), - _descriptor.FieldDescriptor( - name='meta', full_name='grpc.ModelUpdate.meta', index=6, - number=7, type=9, cpp_type=9, label=1, - has_default_value=False, default_value=b"".decode('utf-8'), - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), - ], - extensions=[ - ], - nested_types=[], - enum_types=[ - ], - serialized_options=None, - is_extendable=False, - syntax='proto3', - extension_ranges=[], - oneofs=[ - ], - serialized_start=533, - serialized_end=708, + name='ModelUpdate', + full_name='grpc.ModelUpdate', + filename=None, + file=DESCRIPTOR, + containing_type=None, + create_key=_descriptor._internal_create_key, + fields=[ + _descriptor.FieldDescriptor( + name='sender', full_name='grpc.ModelUpdate.sender', index=0, + number=1, type=11, cpp_type=10, label=1, + has_default_value=False, default_value=None, + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + _descriptor.FieldDescriptor( + name='receiver', full_name='grpc.ModelUpdate.receiver', index=1, + number=2, type=11, cpp_type=10, label=1, + has_default_value=False, default_value=None, + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + _descriptor.FieldDescriptor( + name='model_id', full_name='grpc.ModelUpdate.model_id', index=2, + number=3, type=9, cpp_type=9, label=1, + has_default_value=False, default_value=b"".decode('utf-8'), + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + _descriptor.FieldDescriptor( + name='model_update_id', full_name='grpc.ModelUpdate.model_update_id', index=3, + number=4, type=9, cpp_type=9, label=1, + has_default_value=False, default_value=b"".decode('utf-8'), + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + _descriptor.FieldDescriptor( + name='correlation_id', full_name='grpc.ModelUpdate.correlation_id', index=4, + number=5, type=9, cpp_type=9, label=1, + has_default_value=False, default_value=b"".decode('utf-8'), + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + _descriptor.FieldDescriptor( + name='timestamp', full_name='grpc.ModelUpdate.timestamp', index=5, + number=6, type=9, cpp_type=9, label=1, + has_default_value=False, default_value=b"".decode('utf-8'), + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + _descriptor.FieldDescriptor( + name='meta', full_name='grpc.ModelUpdate.meta', index=6, + number=7, type=9, cpp_type=9, label=1, + has_default_value=False, default_value=b"".decode('utf-8'), + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + ], + extensions=[ + ], + nested_types=[], + enum_types=[ + ], + serialized_options=None, + is_extendable=False, + syntax='proto3', + extension_ranges=[], + oneofs=[ + ], + serialized_start=533, + serialized_end=708, ) + _MODELVALIDATIONREQUEST = _descriptor.Descriptor( - name='ModelValidationRequest', - full_name='grpc.ModelValidationRequest', - filename=None, - file=DESCRIPTOR, - containing_type=None, - create_key=_descriptor._internal_create_key, - fields=[ - _descriptor.FieldDescriptor( - name='sender', full_name='grpc.ModelValidationRequest.sender', index=0, - number=1, type=11, cpp_type=10, label=1, - has_default_value=False, default_value=None, - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), - _descriptor.FieldDescriptor( - name='receiver', full_name='grpc.ModelValidationRequest.receiver', index=1, - number=2, type=11, cpp_type=10, label=1, - has_default_value=False, default_value=None, - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), - _descriptor.FieldDescriptor( - name='model_id', full_name='grpc.ModelValidationRequest.model_id', index=2, - number=3, type=9, cpp_type=9, label=1, - has_default_value=False, default_value=b"".decode('utf-8'), - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), - _descriptor.FieldDescriptor( - name='data', full_name='grpc.ModelValidationRequest.data', index=3, - number=4, type=9, cpp_type=9, label=1, - has_default_value=False, default_value=b"".decode('utf-8'), - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), - _descriptor.FieldDescriptor( - name='correlation_id', full_name='grpc.ModelValidationRequest.correlation_id', index=4, - number=5, type=9, cpp_type=9, label=1, - has_default_value=False, default_value=b"".decode('utf-8'), - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), - _descriptor.FieldDescriptor( - name='timestamp', full_name='grpc.ModelValidationRequest.timestamp', index=5, - number=6, type=9, cpp_type=9, label=1, - has_default_value=False, default_value=b"".decode('utf-8'), - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), - ], - extensions=[ - ], - nested_types=[], - enum_types=[ - ], - serialized_options=None, - is_extendable=False, - syntax='proto3', - extension_ranges=[], - oneofs=[ - ], - serialized_start=711, - serialized_end=872, + name='ModelValidationRequest', + full_name='grpc.ModelValidationRequest', + filename=None, + file=DESCRIPTOR, + containing_type=None, + create_key=_descriptor._internal_create_key, + fields=[ + _descriptor.FieldDescriptor( + name='sender', full_name='grpc.ModelValidationRequest.sender', index=0, + number=1, type=11, cpp_type=10, label=1, + has_default_value=False, default_value=None, + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + _descriptor.FieldDescriptor( + name='receiver', full_name='grpc.ModelValidationRequest.receiver', index=1, + number=2, type=11, cpp_type=10, label=1, + has_default_value=False, default_value=None, + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + _descriptor.FieldDescriptor( + name='model_id', full_name='grpc.ModelValidationRequest.model_id', index=2, + number=3, type=9, cpp_type=9, label=1, + has_default_value=False, default_value=b"".decode('utf-8'), + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + _descriptor.FieldDescriptor( + name='data', full_name='grpc.ModelValidationRequest.data', index=3, + number=4, type=9, cpp_type=9, label=1, + has_default_value=False, default_value=b"".decode('utf-8'), + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + _descriptor.FieldDescriptor( + name='correlation_id', full_name='grpc.ModelValidationRequest.correlation_id', index=4, + number=5, type=9, cpp_type=9, label=1, + has_default_value=False, default_value=b"".decode('utf-8'), + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + _descriptor.FieldDescriptor( + name='timestamp', full_name='grpc.ModelValidationRequest.timestamp', index=5, + number=6, type=9, cpp_type=9, label=1, + has_default_value=False, default_value=b"".decode('utf-8'), + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + _descriptor.FieldDescriptor( + name='is_inference', full_name='grpc.ModelValidationRequest.is_inference', index=6, + number=7, type=8, cpp_type=7, label=1, + has_default_value=False, default_value=False, + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + ], + extensions=[ + ], + nested_types=[], + enum_types=[ + ], + serialized_options=None, + is_extendable=False, + syntax='proto3', + extension_ranges=[], + oneofs=[ + ], + serialized_start=711, + serialized_end=894, ) + _MODELVALIDATION = _descriptor.Descriptor( - name='ModelValidation', - full_name='grpc.ModelValidation', - filename=None, - file=DESCRIPTOR, - containing_type=None, - create_key=_descriptor._internal_create_key, - fields=[ - _descriptor.FieldDescriptor( - name='sender', full_name='grpc.ModelValidation.sender', index=0, - number=1, type=11, cpp_type=10, label=1, - has_default_value=False, default_value=None, - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), - _descriptor.FieldDescriptor( - name='receiver', full_name='grpc.ModelValidation.receiver', index=1, - number=2, type=11, cpp_type=10, label=1, - has_default_value=False, default_value=None, - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), - _descriptor.FieldDescriptor( - name='model_id', full_name='grpc.ModelValidation.model_id', index=2, - number=3, type=9, cpp_type=9, label=1, - has_default_value=False, default_value=b"".decode('utf-8'), - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), - _descriptor.FieldDescriptor( - name='data', full_name='grpc.ModelValidation.data', index=3, - number=4, type=9, cpp_type=9, label=1, - has_default_value=False, default_value=b"".decode('utf-8'), - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), - _descriptor.FieldDescriptor( - name='correlation_id', full_name='grpc.ModelValidation.correlation_id', index=4, - number=5, type=9, cpp_type=9, label=1, - has_default_value=False, default_value=b"".decode('utf-8'), - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), - _descriptor.FieldDescriptor( - name='timestamp', full_name='grpc.ModelValidation.timestamp', index=5, - number=6, type=9, cpp_type=9, label=1, - has_default_value=False, default_value=b"".decode('utf-8'), - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), - _descriptor.FieldDescriptor( - name='meta', full_name='grpc.ModelValidation.meta', index=6, - number=7, type=9, cpp_type=9, label=1, - has_default_value=False, default_value=b"".decode('utf-8'), - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), - ], - extensions=[ - ], - nested_types=[], - enum_types=[ - ], - serialized_options=None, - is_extendable=False, - syntax='proto3', - extension_ranges=[], - oneofs=[ - ], - serialized_start=875, - serialized_end=1043, + name='ModelValidation', + full_name='grpc.ModelValidation', + filename=None, + file=DESCRIPTOR, + containing_type=None, + create_key=_descriptor._internal_create_key, + fields=[ + _descriptor.FieldDescriptor( + name='sender', full_name='grpc.ModelValidation.sender', index=0, + number=1, type=11, cpp_type=10, label=1, + has_default_value=False, default_value=None, + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + _descriptor.FieldDescriptor( + name='receiver', full_name='grpc.ModelValidation.receiver', index=1, + number=2, type=11, cpp_type=10, label=1, + has_default_value=False, default_value=None, + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + _descriptor.FieldDescriptor( + name='model_id', full_name='grpc.ModelValidation.model_id', index=2, + number=3, type=9, cpp_type=9, label=1, + has_default_value=False, default_value=b"".decode('utf-8'), + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + _descriptor.FieldDescriptor( + name='data', full_name='grpc.ModelValidation.data', index=3, + number=4, type=9, cpp_type=9, label=1, + has_default_value=False, default_value=b"".decode('utf-8'), + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + _descriptor.FieldDescriptor( + name='correlation_id', full_name='grpc.ModelValidation.correlation_id', index=4, + number=5, type=9, cpp_type=9, label=1, + has_default_value=False, default_value=b"".decode('utf-8'), + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + _descriptor.FieldDescriptor( + name='timestamp', full_name='grpc.ModelValidation.timestamp', index=5, + number=6, type=9, cpp_type=9, label=1, + has_default_value=False, default_value=b"".decode('utf-8'), + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + _descriptor.FieldDescriptor( + name='meta', full_name='grpc.ModelValidation.meta', index=6, + number=7, type=9, cpp_type=9, label=1, + has_default_value=False, default_value=b"".decode('utf-8'), + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + ], + extensions=[ + ], + nested_types=[], + enum_types=[ + ], + serialized_options=None, + is_extendable=False, + syntax='proto3', + extension_ranges=[], + oneofs=[ + ], + serialized_start=897, + serialized_end=1065, ) + _MODELREQUEST = _descriptor.Descriptor( - name='ModelRequest', - full_name='grpc.ModelRequest', - filename=None, - file=DESCRIPTOR, - containing_type=None, - create_key=_descriptor._internal_create_key, - fields=[ - _descriptor.FieldDescriptor( - name='sender', full_name='grpc.ModelRequest.sender', index=0, - number=1, type=11, cpp_type=10, label=1, - has_default_value=False, default_value=None, - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), - _descriptor.FieldDescriptor( - name='receiver', full_name='grpc.ModelRequest.receiver', index=1, - number=2, type=11, cpp_type=10, label=1, - has_default_value=False, default_value=None, - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), - _descriptor.FieldDescriptor( - name='data', full_name='grpc.ModelRequest.data', index=2, - number=3, type=12, cpp_type=9, label=1, - has_default_value=False, default_value=b"", - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), - _descriptor.FieldDescriptor( - name='id', full_name='grpc.ModelRequest.id', index=3, - number=4, type=9, cpp_type=9, label=1, - has_default_value=False, default_value=b"".decode('utf-8'), - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), - _descriptor.FieldDescriptor( - name='status', full_name='grpc.ModelRequest.status', index=4, - number=5, type=14, cpp_type=8, label=1, - has_default_value=False, default_value=0, - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), - ], - extensions=[ - ], - nested_types=[], - enum_types=[ - ], - serialized_options=None, - is_extendable=False, - syntax='proto3', - extension_ranges=[], - oneofs=[ - ], - serialized_start=1046, - serialized_end=1183, + name='ModelRequest', + full_name='grpc.ModelRequest', + filename=None, + file=DESCRIPTOR, + containing_type=None, + create_key=_descriptor._internal_create_key, + fields=[ + _descriptor.FieldDescriptor( + name='sender', full_name='grpc.ModelRequest.sender', index=0, + number=1, type=11, cpp_type=10, label=1, + has_default_value=False, default_value=None, + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + _descriptor.FieldDescriptor( + name='receiver', full_name='grpc.ModelRequest.receiver', index=1, + number=2, type=11, cpp_type=10, label=1, + has_default_value=False, default_value=None, + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + _descriptor.FieldDescriptor( + name='data', full_name='grpc.ModelRequest.data', index=2, + number=3, type=12, cpp_type=9, label=1, + has_default_value=False, default_value=b"", + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + _descriptor.FieldDescriptor( + name='id', full_name='grpc.ModelRequest.id', index=3, + number=4, type=9, cpp_type=9, label=1, + has_default_value=False, default_value=b"".decode('utf-8'), + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + _descriptor.FieldDescriptor( + name='status', full_name='grpc.ModelRequest.status', index=4, + number=5, type=14, cpp_type=8, label=1, + has_default_value=False, default_value=0, + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + ], + extensions=[ + ], + nested_types=[], + enum_types=[ + ], + serialized_options=None, + is_extendable=False, + syntax='proto3', + extension_ranges=[], + oneofs=[ + ], + serialized_start=1068, + serialized_end=1205, ) + _MODELRESPONSE = _descriptor.Descriptor( - name='ModelResponse', - full_name='grpc.ModelResponse', - filename=None, - file=DESCRIPTOR, - containing_type=None, - create_key=_descriptor._internal_create_key, - fields=[ - _descriptor.FieldDescriptor( - name='data', full_name='grpc.ModelResponse.data', index=0, - number=1, type=12, cpp_type=9, label=1, - has_default_value=False, default_value=b"", - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), - _descriptor.FieldDescriptor( - name='id', full_name='grpc.ModelResponse.id', index=1, - number=2, type=9, cpp_type=9, label=1, - has_default_value=False, default_value=b"".decode('utf-8'), - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), - _descriptor.FieldDescriptor( - name='status', full_name='grpc.ModelResponse.status', index=2, - number=3, type=14, cpp_type=8, label=1, - has_default_value=False, default_value=0, - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), - _descriptor.FieldDescriptor( - name='message', full_name='grpc.ModelResponse.message', index=3, - number=4, type=9, cpp_type=9, label=1, - has_default_value=False, default_value=b"".decode('utf-8'), - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), - ], - extensions=[ - ], - nested_types=[], - enum_types=[ - ], - serialized_options=None, - is_extendable=False, - syntax='proto3', - extension_ranges=[], - oneofs=[ - ], - serialized_start=1185, - serialized_end=1278, + name='ModelResponse', + full_name='grpc.ModelResponse', + filename=None, + file=DESCRIPTOR, + containing_type=None, + create_key=_descriptor._internal_create_key, + fields=[ + _descriptor.FieldDescriptor( + name='data', full_name='grpc.ModelResponse.data', index=0, + number=1, type=12, cpp_type=9, label=1, + has_default_value=False, default_value=b"", + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + _descriptor.FieldDescriptor( + name='id', full_name='grpc.ModelResponse.id', index=1, + number=2, type=9, cpp_type=9, label=1, + has_default_value=False, default_value=b"".decode('utf-8'), + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + _descriptor.FieldDescriptor( + name='status', full_name='grpc.ModelResponse.status', index=2, + number=3, type=14, cpp_type=8, label=1, + has_default_value=False, default_value=0, + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + _descriptor.FieldDescriptor( + name='message', full_name='grpc.ModelResponse.message', index=3, + number=4, type=9, cpp_type=9, label=1, + has_default_value=False, default_value=b"".decode('utf-8'), + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + ], + extensions=[ + ], + nested_types=[], + enum_types=[ + ], + serialized_options=None, + is_extendable=False, + syntax='proto3', + extension_ranges=[], + oneofs=[ + ], + serialized_start=1207, + serialized_end=1300, ) + _GETGLOBALMODELREQUEST = _descriptor.Descriptor( - name='GetGlobalModelRequest', - full_name='grpc.GetGlobalModelRequest', - filename=None, - file=DESCRIPTOR, - containing_type=None, - create_key=_descriptor._internal_create_key, - fields=[ - _descriptor.FieldDescriptor( - name='sender', full_name='grpc.GetGlobalModelRequest.sender', index=0, - number=1, type=11, cpp_type=10, label=1, - has_default_value=False, default_value=None, - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), - _descriptor.FieldDescriptor( - name='receiver', full_name='grpc.GetGlobalModelRequest.receiver', index=1, - number=2, type=11, cpp_type=10, label=1, - has_default_value=False, default_value=None, - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), - ], - extensions=[ - ], - nested_types=[], - enum_types=[ - ], - serialized_options=None, - is_extendable=False, - syntax='proto3', - extension_ranges=[], - oneofs=[ - ], - serialized_start=1280, - serialized_end=1365, + name='GetGlobalModelRequest', + full_name='grpc.GetGlobalModelRequest', + filename=None, + file=DESCRIPTOR, + containing_type=None, + create_key=_descriptor._internal_create_key, + fields=[ + _descriptor.FieldDescriptor( + name='sender', full_name='grpc.GetGlobalModelRequest.sender', index=0, + number=1, type=11, cpp_type=10, label=1, + has_default_value=False, default_value=None, + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + _descriptor.FieldDescriptor( + name='receiver', full_name='grpc.GetGlobalModelRequest.receiver', index=1, + number=2, type=11, cpp_type=10, label=1, + has_default_value=False, default_value=None, + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + ], + extensions=[ + ], + nested_types=[], + enum_types=[ + ], + serialized_options=None, + is_extendable=False, + syntax='proto3', + extension_ranges=[], + oneofs=[ + ], + serialized_start=1302, + serialized_end=1387, ) + _GETGLOBALMODELRESPONSE = _descriptor.Descriptor( - name='GetGlobalModelResponse', - full_name='grpc.GetGlobalModelResponse', - filename=None, - file=DESCRIPTOR, - containing_type=None, - create_key=_descriptor._internal_create_key, - fields=[ - _descriptor.FieldDescriptor( - name='sender', full_name='grpc.GetGlobalModelResponse.sender', index=0, - number=1, type=11, cpp_type=10, label=1, - has_default_value=False, default_value=None, - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), - _descriptor.FieldDescriptor( - name='receiver', full_name='grpc.GetGlobalModelResponse.receiver', index=1, - number=2, type=11, cpp_type=10, label=1, - has_default_value=False, default_value=None, - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), - _descriptor.FieldDescriptor( - name='model_id', full_name='grpc.GetGlobalModelResponse.model_id', index=2, - number=3, type=9, cpp_type=9, label=1, - has_default_value=False, default_value=b"".decode('utf-8'), - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), - ], - extensions=[ - ], - nested_types=[], - enum_types=[ - ], - serialized_options=None, - is_extendable=False, - syntax='proto3', - extension_ranges=[], - oneofs=[ - ], - serialized_start=1367, - serialized_end=1471, + name='GetGlobalModelResponse', + full_name='grpc.GetGlobalModelResponse', + filename=None, + file=DESCRIPTOR, + containing_type=None, + create_key=_descriptor._internal_create_key, + fields=[ + _descriptor.FieldDescriptor( + name='sender', full_name='grpc.GetGlobalModelResponse.sender', index=0, + number=1, type=11, cpp_type=10, label=1, + has_default_value=False, default_value=None, + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + _descriptor.FieldDescriptor( + name='receiver', full_name='grpc.GetGlobalModelResponse.receiver', index=1, + number=2, type=11, cpp_type=10, label=1, + has_default_value=False, default_value=None, + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + _descriptor.FieldDescriptor( + name='model_id', full_name='grpc.GetGlobalModelResponse.model_id', index=2, + number=3, type=9, cpp_type=9, label=1, + has_default_value=False, default_value=b"".decode('utf-8'), + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + ], + extensions=[ + ], + nested_types=[], + enum_types=[ + ], + serialized_options=None, + is_extendable=False, + syntax='proto3', + extension_ranges=[], + oneofs=[ + ], + serialized_start=1389, + serialized_end=1493, ) + _HEARTBEAT = _descriptor.Descriptor( - name='Heartbeat', - full_name='grpc.Heartbeat', - filename=None, - file=DESCRIPTOR, - containing_type=None, - create_key=_descriptor._internal_create_key, - fields=[ - _descriptor.FieldDescriptor( - name='sender', full_name='grpc.Heartbeat.sender', index=0, - number=1, type=11, cpp_type=10, label=1, - has_default_value=False, default_value=None, - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), - ], - extensions=[ - ], - nested_types=[], - enum_types=[ - ], - serialized_options=None, - is_extendable=False, - syntax='proto3', - extension_ranges=[], - oneofs=[ - ], - serialized_start=1473, - serialized_end=1514, + name='Heartbeat', + full_name='grpc.Heartbeat', + filename=None, + file=DESCRIPTOR, + containing_type=None, + create_key=_descriptor._internal_create_key, + fields=[ + _descriptor.FieldDescriptor( + name='sender', full_name='grpc.Heartbeat.sender', index=0, + number=1, type=11, cpp_type=10, label=1, + has_default_value=False, default_value=None, + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + ], + extensions=[ + ], + nested_types=[], + enum_types=[ + ], + serialized_options=None, + is_extendable=False, + syntax='proto3', + extension_ranges=[], + oneofs=[ + ], + serialized_start=1495, + serialized_end=1536, ) + _CLIENTAVAILABLEMESSAGE = _descriptor.Descriptor( - name='ClientAvailableMessage', - full_name='grpc.ClientAvailableMessage', - filename=None, - file=DESCRIPTOR, - containing_type=None, - create_key=_descriptor._internal_create_key, - fields=[ - _descriptor.FieldDescriptor( - name='sender', full_name='grpc.ClientAvailableMessage.sender', index=0, - number=1, type=11, cpp_type=10, label=1, - has_default_value=False, default_value=None, - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), - _descriptor.FieldDescriptor( - name='data', full_name='grpc.ClientAvailableMessage.data', index=1, - number=2, type=9, cpp_type=9, label=1, - has_default_value=False, default_value=b"".decode('utf-8'), - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), - _descriptor.FieldDescriptor( - name='timestamp', full_name='grpc.ClientAvailableMessage.timestamp', index=2, - number=3, type=9, cpp_type=9, label=1, - has_default_value=False, default_value=b"".decode('utf-8'), - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), - ], - extensions=[ - ], - nested_types=[], - enum_types=[ - ], - serialized_options=None, - is_extendable=False, - syntax='proto3', - extension_ranges=[], - oneofs=[ - ], - serialized_start=1516, - serialized_end=1603, + name='ClientAvailableMessage', + full_name='grpc.ClientAvailableMessage', + filename=None, + file=DESCRIPTOR, + containing_type=None, + create_key=_descriptor._internal_create_key, + fields=[ + _descriptor.FieldDescriptor( + name='sender', full_name='grpc.ClientAvailableMessage.sender', index=0, + number=1, type=11, cpp_type=10, label=1, + has_default_value=False, default_value=None, + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + _descriptor.FieldDescriptor( + name='data', full_name='grpc.ClientAvailableMessage.data', index=1, + number=2, type=9, cpp_type=9, label=1, + has_default_value=False, default_value=b"".decode('utf-8'), + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + _descriptor.FieldDescriptor( + name='timestamp', full_name='grpc.ClientAvailableMessage.timestamp', index=2, + number=3, type=9, cpp_type=9, label=1, + has_default_value=False, default_value=b"".decode('utf-8'), + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + ], + extensions=[ + ], + nested_types=[], + enum_types=[ + ], + serialized_options=None, + is_extendable=False, + syntax='proto3', + extension_ranges=[], + oneofs=[ + ], + serialized_start=1538, + serialized_end=1625, ) + _LISTCLIENTSREQUEST = _descriptor.Descriptor( - name='ListClientsRequest', - full_name='grpc.ListClientsRequest', - filename=None, - file=DESCRIPTOR, - containing_type=None, - create_key=_descriptor._internal_create_key, - fields=[ - _descriptor.FieldDescriptor( - name='sender', full_name='grpc.ListClientsRequest.sender', index=0, - number=1, type=11, cpp_type=10, label=1, - has_default_value=False, default_value=None, - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), - _descriptor.FieldDescriptor( - name='channel', full_name='grpc.ListClientsRequest.channel', index=1, - number=2, type=14, cpp_type=8, label=1, - has_default_value=False, default_value=0, - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), - ], - extensions=[ - ], - nested_types=[], - enum_types=[ - ], - serialized_options=None, - is_extendable=False, - syntax='proto3', - extension_ranges=[], - oneofs=[ - ], - serialized_start=1605, - serialized_end=1687, + name='ListClientsRequest', + full_name='grpc.ListClientsRequest', + filename=None, + file=DESCRIPTOR, + containing_type=None, + create_key=_descriptor._internal_create_key, + fields=[ + _descriptor.FieldDescriptor( + name='sender', full_name='grpc.ListClientsRequest.sender', index=0, + number=1, type=11, cpp_type=10, label=1, + has_default_value=False, default_value=None, + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + _descriptor.FieldDescriptor( + name='channel', full_name='grpc.ListClientsRequest.channel', index=1, + number=2, type=14, cpp_type=8, label=1, + has_default_value=False, default_value=0, + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + ], + extensions=[ + ], + nested_types=[], + enum_types=[ + ], + serialized_options=None, + is_extendable=False, + syntax='proto3', + extension_ranges=[], + oneofs=[ + ], + serialized_start=1627, + serialized_end=1709, ) + _CLIENTLIST = _descriptor.Descriptor( - name='ClientList', - full_name='grpc.ClientList', - filename=None, - file=DESCRIPTOR, - containing_type=None, - create_key=_descriptor._internal_create_key, - fields=[ - _descriptor.FieldDescriptor( - name='client', full_name='grpc.ClientList.client', index=0, - number=1, type=11, cpp_type=10, label=3, - has_default_value=False, default_value=[], - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), - ], - extensions=[ - ], - nested_types=[], - enum_types=[ - ], - serialized_options=None, - is_extendable=False, - syntax='proto3', - extension_ranges=[], - oneofs=[ - ], - serialized_start=1689, - serialized_end=1731, + name='ClientList', + full_name='grpc.ClientList', + filename=None, + file=DESCRIPTOR, + containing_type=None, + create_key=_descriptor._internal_create_key, + fields=[ + _descriptor.FieldDescriptor( + name='client', full_name='grpc.ClientList.client', index=0, + number=1, type=11, cpp_type=10, label=3, + has_default_value=False, default_value=[], + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + ], + extensions=[ + ], + nested_types=[], + enum_types=[ + ], + serialized_options=None, + is_extendable=False, + syntax='proto3', + extension_ranges=[], + oneofs=[ + ], + serialized_start=1711, + serialized_end=1753, ) + _CLIENT = _descriptor.Descriptor( - name='Client', - full_name='grpc.Client', - filename=None, - file=DESCRIPTOR, - containing_type=None, - create_key=_descriptor._internal_create_key, - fields=[ - _descriptor.FieldDescriptor( - name='role', full_name='grpc.Client.role', index=0, - number=1, type=14, cpp_type=8, label=1, - has_default_value=False, default_value=0, - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), - _descriptor.FieldDescriptor( - name='name', full_name='grpc.Client.name', index=1, - number=2, type=9, cpp_type=9, label=1, - has_default_value=False, default_value=b"".decode('utf-8'), - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), - ], - extensions=[ - ], - nested_types=[], - enum_types=[ - ], - serialized_options=None, - is_extendable=False, - syntax='proto3', - extension_ranges=[], - oneofs=[ - ], - serialized_start=1733, - serialized_end=1781, + name='Client', + full_name='grpc.Client', + filename=None, + file=DESCRIPTOR, + containing_type=None, + create_key=_descriptor._internal_create_key, + fields=[ + _descriptor.FieldDescriptor( + name='role', full_name='grpc.Client.role', index=0, + number=1, type=14, cpp_type=8, label=1, + has_default_value=False, default_value=0, + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + _descriptor.FieldDescriptor( + name='name', full_name='grpc.Client.name', index=1, + number=2, type=9, cpp_type=9, label=1, + has_default_value=False, default_value=b"".decode('utf-8'), + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + ], + extensions=[ + ], + nested_types=[], + enum_types=[ + ], + serialized_options=None, + is_extendable=False, + syntax='proto3', + extension_ranges=[], + oneofs=[ + ], + serialized_start=1755, + serialized_end=1803, ) + _REASSIGNREQUEST = _descriptor.Descriptor( - name='ReassignRequest', - full_name='grpc.ReassignRequest', - filename=None, - file=DESCRIPTOR, - containing_type=None, - create_key=_descriptor._internal_create_key, - fields=[ - _descriptor.FieldDescriptor( - name='sender', full_name='grpc.ReassignRequest.sender', index=0, - number=1, type=11, cpp_type=10, label=1, - has_default_value=False, default_value=None, - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), - _descriptor.FieldDescriptor( - name='receiver', full_name='grpc.ReassignRequest.receiver', index=1, - number=2, type=11, cpp_type=10, label=1, - has_default_value=False, default_value=None, - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), - _descriptor.FieldDescriptor( - name='server', full_name='grpc.ReassignRequest.server', index=2, - number=3, type=9, cpp_type=9, label=1, - has_default_value=False, default_value=b"".decode('utf-8'), - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), - _descriptor.FieldDescriptor( - name='port', full_name='grpc.ReassignRequest.port', index=3, - number=4, type=13, cpp_type=3, label=1, - has_default_value=False, default_value=0, - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), - ], - extensions=[ - ], - nested_types=[], - enum_types=[ - ], - serialized_options=None, - is_extendable=False, - syntax='proto3', - extension_ranges=[], - oneofs=[ - ], - serialized_start=1783, - serialized_end=1892, + name='ReassignRequest', + full_name='grpc.ReassignRequest', + filename=None, + file=DESCRIPTOR, + containing_type=None, + create_key=_descriptor._internal_create_key, + fields=[ + _descriptor.FieldDescriptor( + name='sender', full_name='grpc.ReassignRequest.sender', index=0, + number=1, type=11, cpp_type=10, label=1, + has_default_value=False, default_value=None, + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + _descriptor.FieldDescriptor( + name='receiver', full_name='grpc.ReassignRequest.receiver', index=1, + number=2, type=11, cpp_type=10, label=1, + has_default_value=False, default_value=None, + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + _descriptor.FieldDescriptor( + name='server', full_name='grpc.ReassignRequest.server', index=2, + number=3, type=9, cpp_type=9, label=1, + has_default_value=False, default_value=b"".decode('utf-8'), + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + _descriptor.FieldDescriptor( + name='port', full_name='grpc.ReassignRequest.port', index=3, + number=4, type=13, cpp_type=3, label=1, + has_default_value=False, default_value=0, + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + ], + extensions=[ + ], + nested_types=[], + enum_types=[ + ], + serialized_options=None, + is_extendable=False, + syntax='proto3', + extension_ranges=[], + oneofs=[ + ], + serialized_start=1805, + serialized_end=1914, ) + _RECONNECTREQUEST = _descriptor.Descriptor( - name='ReconnectRequest', - full_name='grpc.ReconnectRequest', - filename=None, - file=DESCRIPTOR, - containing_type=None, - create_key=_descriptor._internal_create_key, - fields=[ - _descriptor.FieldDescriptor( - name='sender', full_name='grpc.ReconnectRequest.sender', index=0, - number=1, type=11, cpp_type=10, label=1, - has_default_value=False, default_value=None, - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), - _descriptor.FieldDescriptor( - name='receiver', full_name='grpc.ReconnectRequest.receiver', index=1, - number=2, type=11, cpp_type=10, label=1, - has_default_value=False, default_value=None, - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), - _descriptor.FieldDescriptor( - name='reconnect', full_name='grpc.ReconnectRequest.reconnect', index=2, - number=3, type=13, cpp_type=3, label=1, - has_default_value=False, default_value=0, - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), - ], - extensions=[ - ], - nested_types=[], - enum_types=[ - ], - serialized_options=None, - is_extendable=False, - syntax='proto3', - extension_ranges=[], - oneofs=[ - ], - serialized_start=1894, - serialized_end=1993, + name='ReconnectRequest', + full_name='grpc.ReconnectRequest', + filename=None, + file=DESCRIPTOR, + containing_type=None, + create_key=_descriptor._internal_create_key, + fields=[ + _descriptor.FieldDescriptor( + name='sender', full_name='grpc.ReconnectRequest.sender', index=0, + number=1, type=11, cpp_type=10, label=1, + has_default_value=False, default_value=None, + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + _descriptor.FieldDescriptor( + name='receiver', full_name='grpc.ReconnectRequest.receiver', index=1, + number=2, type=11, cpp_type=10, label=1, + has_default_value=False, default_value=None, + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + _descriptor.FieldDescriptor( + name='reconnect', full_name='grpc.ReconnectRequest.reconnect', index=2, + number=3, type=13, cpp_type=3, label=1, + has_default_value=False, default_value=0, + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + ], + extensions=[ + ], + nested_types=[], + enum_types=[ + ], + serialized_options=None, + is_extendable=False, + syntax='proto3', + extension_ranges=[], + oneofs=[ + ], + serialized_start=1916, + serialized_end=2015, ) + _PARAMETER = _descriptor.Descriptor( - name='Parameter', - full_name='grpc.Parameter', - filename=None, - file=DESCRIPTOR, - containing_type=None, - create_key=_descriptor._internal_create_key, - fields=[ - _descriptor.FieldDescriptor( - name='key', full_name='grpc.Parameter.key', index=0, - number=1, type=9, cpp_type=9, label=1, - has_default_value=False, default_value=b"".decode('utf-8'), - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), - _descriptor.FieldDescriptor( - name='value', full_name='grpc.Parameter.value', index=1, - number=2, type=9, cpp_type=9, label=1, - has_default_value=False, default_value=b"".decode('utf-8'), - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), - ], - extensions=[ - ], - nested_types=[], - enum_types=[ - ], - serialized_options=None, - is_extendable=False, - syntax='proto3', - extension_ranges=[], - oneofs=[ - ], - serialized_start=1995, - serialized_end=2034, + name='Parameter', + full_name='grpc.Parameter', + filename=None, + file=DESCRIPTOR, + containing_type=None, + create_key=_descriptor._internal_create_key, + fields=[ + _descriptor.FieldDescriptor( + name='key', full_name='grpc.Parameter.key', index=0, + number=1, type=9, cpp_type=9, label=1, + has_default_value=False, default_value=b"".decode('utf-8'), + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + _descriptor.FieldDescriptor( + name='value', full_name='grpc.Parameter.value', index=1, + number=2, type=9, cpp_type=9, label=1, + has_default_value=False, default_value=b"".decode('utf-8'), + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + ], + extensions=[ + ], + nested_types=[], + enum_types=[ + ], + serialized_options=None, + is_extendable=False, + syntax='proto3', + extension_ranges=[], + oneofs=[ + ], + serialized_start=2017, + serialized_end=2056, ) + _CONTROLREQUEST = _descriptor.Descriptor( - name='ControlRequest', - full_name='grpc.ControlRequest', - filename=None, - file=DESCRIPTOR, - containing_type=None, - create_key=_descriptor._internal_create_key, - fields=[ - _descriptor.FieldDescriptor( - name='command', full_name='grpc.ControlRequest.command', index=0, - number=1, type=14, cpp_type=8, label=1, - has_default_value=False, default_value=0, - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), - _descriptor.FieldDescriptor( - name='parameter', full_name='grpc.ControlRequest.parameter', index=1, - number=2, type=11, cpp_type=10, label=3, - has_default_value=False, default_value=[], - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), - ], - extensions=[ - ], - nested_types=[], - enum_types=[ - ], - serialized_options=None, - is_extendable=False, - syntax='proto3', - extension_ranges=[], - oneofs=[ - ], - serialized_start=2036, - serialized_end=2120, + name='ControlRequest', + full_name='grpc.ControlRequest', + filename=None, + file=DESCRIPTOR, + containing_type=None, + create_key=_descriptor._internal_create_key, + fields=[ + _descriptor.FieldDescriptor( + name='command', full_name='grpc.ControlRequest.command', index=0, + number=1, type=14, cpp_type=8, label=1, + has_default_value=False, default_value=0, + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + _descriptor.FieldDescriptor( + name='parameter', full_name='grpc.ControlRequest.parameter', index=1, + number=2, type=11, cpp_type=10, label=3, + has_default_value=False, default_value=[], + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + ], + extensions=[ + ], + nested_types=[], + enum_types=[ + ], + serialized_options=None, + is_extendable=False, + syntax='proto3', + extension_ranges=[], + oneofs=[ + ], + serialized_start=2058, + serialized_end=2142, ) + _CONTROLRESPONSE = _descriptor.Descriptor( - name='ControlResponse', - full_name='grpc.ControlResponse', - filename=None, - file=DESCRIPTOR, - containing_type=None, - create_key=_descriptor._internal_create_key, - fields=[ - _descriptor.FieldDescriptor( - name='message', full_name='grpc.ControlResponse.message', index=0, - number=1, type=9, cpp_type=9, label=1, - has_default_value=False, default_value=b"".decode('utf-8'), - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), - _descriptor.FieldDescriptor( - name='parameter', full_name='grpc.ControlResponse.parameter', index=1, - number=2, type=11, cpp_type=10, label=3, - has_default_value=False, default_value=[], - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), - ], - extensions=[ - ], - nested_types=[], - enum_types=[ - ], - serialized_options=None, - is_extendable=False, - syntax='proto3', - extension_ranges=[], - oneofs=[ - ], - serialized_start=2122, - serialized_end=2192, + name='ControlResponse', + full_name='grpc.ControlResponse', + filename=None, + file=DESCRIPTOR, + containing_type=None, + create_key=_descriptor._internal_create_key, + fields=[ + _descriptor.FieldDescriptor( + name='message', full_name='grpc.ControlResponse.message', index=0, + number=1, type=9, cpp_type=9, label=1, + has_default_value=False, default_value=b"".decode('utf-8'), + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + _descriptor.FieldDescriptor( + name='parameter', full_name='grpc.ControlResponse.parameter', index=1, + number=2, type=11, cpp_type=10, label=3, + has_default_value=False, default_value=[], + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + ], + extensions=[ + ], + nested_types=[], + enum_types=[ + ], + serialized_options=None, + is_extendable=False, + syntax='proto3', + extension_ranges=[], + oneofs=[ + ], + serialized_start=2144, + serialized_end=2214, ) + _REPORTRESPONSE = _descriptor.Descriptor( - name='ReportResponse', - full_name='grpc.ReportResponse', - filename=None, - file=DESCRIPTOR, - containing_type=None, - create_key=_descriptor._internal_create_key, - fields=[ - _descriptor.FieldDescriptor( - name='sender', full_name='grpc.ReportResponse.sender', index=0, - number=1, type=11, cpp_type=10, label=1, - has_default_value=False, default_value=None, - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), - _descriptor.FieldDescriptor( - name='parameter', full_name='grpc.ReportResponse.parameter', index=1, - number=2, type=11, cpp_type=10, label=3, - has_default_value=False, default_value=[], - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), - ], - extensions=[ - ], - nested_types=[], - enum_types=[ - ], - serialized_options=None, - is_extendable=False, - syntax='proto3', - extension_ranges=[], - oneofs=[ - ], - serialized_start=2194, - serialized_end=2276, + name='ReportResponse', + full_name='grpc.ReportResponse', + filename=None, + file=DESCRIPTOR, + containing_type=None, + create_key=_descriptor._internal_create_key, + fields=[ + _descriptor.FieldDescriptor( + name='sender', full_name='grpc.ReportResponse.sender', index=0, + number=1, type=11, cpp_type=10, label=1, + has_default_value=False, default_value=None, + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + _descriptor.FieldDescriptor( + name='parameter', full_name='grpc.ReportResponse.parameter', index=1, + number=2, type=11, cpp_type=10, label=3, + has_default_value=False, default_value=[], + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + ], + extensions=[ + ], + nested_types=[], + enum_types=[ + ], + serialized_options=None, + is_extendable=False, + syntax='proto3', + extension_ranges=[], + oneofs=[ + ], + serialized_start=2216, + serialized_end=2298, ) + _CONNECTIONREQUEST = _descriptor.Descriptor( - name='ConnectionRequest', - full_name='grpc.ConnectionRequest', - filename=None, - file=DESCRIPTOR, - containing_type=None, - create_key=_descriptor._internal_create_key, - fields=[ - ], - extensions=[ - ], - nested_types=[], - enum_types=[ - ], - serialized_options=None, - is_extendable=False, - syntax='proto3', - extension_ranges=[], - oneofs=[ - ], - serialized_start=2278, - serialized_end=2297, + name='ConnectionRequest', + full_name='grpc.ConnectionRequest', + filename=None, + file=DESCRIPTOR, + containing_type=None, + create_key=_descriptor._internal_create_key, + fields=[ + ], + extensions=[ + ], + nested_types=[], + enum_types=[ + ], + serialized_options=None, + is_extendable=False, + syntax='proto3', + extension_ranges=[], + oneofs=[ + ], + serialized_start=2300, + serialized_end=2319, ) + _CONNECTIONRESPONSE = _descriptor.Descriptor( - name='ConnectionResponse', - full_name='grpc.ConnectionResponse', - filename=None, - file=DESCRIPTOR, - containing_type=None, - create_key=_descriptor._internal_create_key, - fields=[ - _descriptor.FieldDescriptor( - name='status', full_name='grpc.ConnectionResponse.status', index=0, - number=1, type=14, cpp_type=8, label=1, - has_default_value=False, default_value=0, - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), - ], - extensions=[ - ], - nested_types=[], - enum_types=[ - ], - serialized_options=None, - is_extendable=False, - syntax='proto3', - extension_ranges=[], - oneofs=[ - ], - serialized_start=2299, - serialized_end=2359, + name='ConnectionResponse', + full_name='grpc.ConnectionResponse', + filename=None, + file=DESCRIPTOR, + containing_type=None, + create_key=_descriptor._internal_create_key, + fields=[ + _descriptor.FieldDescriptor( + name='status', full_name='grpc.ConnectionResponse.status', index=0, + number=1, type=14, cpp_type=8, label=1, + has_default_value=False, default_value=0, + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + ], + extensions=[ + ], + nested_types=[], + enum_types=[ + ], + serialized_options=None, + is_extendable=False, + syntax='proto3', + extension_ranges=[], + oneofs=[ + ], + serialized_start=2321, + serialized_end=2381, ) _RESPONSE.fields_by_name['sender'].message_type = _CLIENT @@ -1473,457 +1506,463 @@ _sym_db.RegisterFileDescriptor(DESCRIPTOR) Response = _reflection.GeneratedProtocolMessageType('Response', (_message.Message,), { - 'DESCRIPTOR': _RESPONSE, - '__module__': 'fedn.common.net.grpc.fedn_pb2' - # @@protoc_insertion_point(class_scope:grpc.Response) -}) + 'DESCRIPTOR' : _RESPONSE, + '__module__' : 'fedn.common.net.grpc.fedn_pb2' + # @@protoc_insertion_point(class_scope:grpc.Response) + }) _sym_db.RegisterMessage(Response) Status = _reflection.GeneratedProtocolMessageType('Status', (_message.Message,), { - 'DESCRIPTOR': _STATUS, - '__module__': 'fedn.common.net.grpc.fedn_pb2' - # @@protoc_insertion_point(class_scope:grpc.Status) -}) + 'DESCRIPTOR' : _STATUS, + '__module__' : 'fedn.common.net.grpc.fedn_pb2' + # @@protoc_insertion_point(class_scope:grpc.Status) + }) _sym_db.RegisterMessage(Status) ModelUpdateRequest = _reflection.GeneratedProtocolMessageType('ModelUpdateRequest', (_message.Message,), { - 'DESCRIPTOR': _MODELUPDATEREQUEST, - '__module__': 'fedn.common.net.grpc.fedn_pb2' - # @@protoc_insertion_point(class_scope:grpc.ModelUpdateRequest) -}) + 'DESCRIPTOR' : _MODELUPDATEREQUEST, + '__module__' : 'fedn.common.net.grpc.fedn_pb2' + # @@protoc_insertion_point(class_scope:grpc.ModelUpdateRequest) + }) _sym_db.RegisterMessage(ModelUpdateRequest) ModelUpdate = _reflection.GeneratedProtocolMessageType('ModelUpdate', (_message.Message,), { - 'DESCRIPTOR': _MODELUPDATE, - '__module__': 'fedn.common.net.grpc.fedn_pb2' - # @@protoc_insertion_point(class_scope:grpc.ModelUpdate) -}) + 'DESCRIPTOR' : _MODELUPDATE, + '__module__' : 'fedn.common.net.grpc.fedn_pb2' + # @@protoc_insertion_point(class_scope:grpc.ModelUpdate) + }) _sym_db.RegisterMessage(ModelUpdate) ModelValidationRequest = _reflection.GeneratedProtocolMessageType('ModelValidationRequest', (_message.Message,), { - 'DESCRIPTOR': _MODELVALIDATIONREQUEST, - '__module__': 'fedn.common.net.grpc.fedn_pb2' - # @@protoc_insertion_point(class_scope:grpc.ModelValidationRequest) -}) + 'DESCRIPTOR' : _MODELVALIDATIONREQUEST, + '__module__' : 'fedn.common.net.grpc.fedn_pb2' + # @@protoc_insertion_point(class_scope:grpc.ModelValidationRequest) + }) _sym_db.RegisterMessage(ModelValidationRequest) ModelValidation = _reflection.GeneratedProtocolMessageType('ModelValidation', (_message.Message,), { - 'DESCRIPTOR': _MODELVALIDATION, - '__module__': 'fedn.common.net.grpc.fedn_pb2' - # @@protoc_insertion_point(class_scope:grpc.ModelValidation) -}) + 'DESCRIPTOR' : _MODELVALIDATION, + '__module__' : 'fedn.common.net.grpc.fedn_pb2' + # @@protoc_insertion_point(class_scope:grpc.ModelValidation) + }) _sym_db.RegisterMessage(ModelValidation) ModelRequest = _reflection.GeneratedProtocolMessageType('ModelRequest', (_message.Message,), { - 'DESCRIPTOR': _MODELREQUEST, - '__module__': 'fedn.common.net.grpc.fedn_pb2' - # @@protoc_insertion_point(class_scope:grpc.ModelRequest) -}) + 'DESCRIPTOR' : _MODELREQUEST, + '__module__' : 'fedn.common.net.grpc.fedn_pb2' + # @@protoc_insertion_point(class_scope:grpc.ModelRequest) + }) _sym_db.RegisterMessage(ModelRequest) ModelResponse = _reflection.GeneratedProtocolMessageType('ModelResponse', (_message.Message,), { - 'DESCRIPTOR': _MODELRESPONSE, - '__module__': 'fedn.common.net.grpc.fedn_pb2' - # @@protoc_insertion_point(class_scope:grpc.ModelResponse) -}) + 'DESCRIPTOR' : _MODELRESPONSE, + '__module__' : 'fedn.common.net.grpc.fedn_pb2' + # @@protoc_insertion_point(class_scope:grpc.ModelResponse) + }) _sym_db.RegisterMessage(ModelResponse) GetGlobalModelRequest = _reflection.GeneratedProtocolMessageType('GetGlobalModelRequest', (_message.Message,), { - 'DESCRIPTOR': _GETGLOBALMODELREQUEST, - '__module__': 'fedn.common.net.grpc.fedn_pb2' - # @@protoc_insertion_point(class_scope:grpc.GetGlobalModelRequest) -}) + 'DESCRIPTOR' : _GETGLOBALMODELREQUEST, + '__module__' : 'fedn.common.net.grpc.fedn_pb2' + # @@protoc_insertion_point(class_scope:grpc.GetGlobalModelRequest) + }) _sym_db.RegisterMessage(GetGlobalModelRequest) GetGlobalModelResponse = _reflection.GeneratedProtocolMessageType('GetGlobalModelResponse', (_message.Message,), { - 'DESCRIPTOR': _GETGLOBALMODELRESPONSE, - '__module__': 'fedn.common.net.grpc.fedn_pb2' - # @@protoc_insertion_point(class_scope:grpc.GetGlobalModelResponse) -}) + 'DESCRIPTOR' : _GETGLOBALMODELRESPONSE, + '__module__' : 'fedn.common.net.grpc.fedn_pb2' + # @@protoc_insertion_point(class_scope:grpc.GetGlobalModelResponse) + }) _sym_db.RegisterMessage(GetGlobalModelResponse) Heartbeat = _reflection.GeneratedProtocolMessageType('Heartbeat', (_message.Message,), { - 'DESCRIPTOR': _HEARTBEAT, - '__module__': 'fedn.common.net.grpc.fedn_pb2' - # @@protoc_insertion_point(class_scope:grpc.Heartbeat) -}) + 'DESCRIPTOR' : _HEARTBEAT, + '__module__' : 'fedn.common.net.grpc.fedn_pb2' + # @@protoc_insertion_point(class_scope:grpc.Heartbeat) + }) _sym_db.RegisterMessage(Heartbeat) ClientAvailableMessage = _reflection.GeneratedProtocolMessageType('ClientAvailableMessage', (_message.Message,), { - 'DESCRIPTOR': _CLIENTAVAILABLEMESSAGE, - '__module__': 'fedn.common.net.grpc.fedn_pb2' - # @@protoc_insertion_point(class_scope:grpc.ClientAvailableMessage) -}) + 'DESCRIPTOR' : _CLIENTAVAILABLEMESSAGE, + '__module__' : 'fedn.common.net.grpc.fedn_pb2' + # @@protoc_insertion_point(class_scope:grpc.ClientAvailableMessage) + }) _sym_db.RegisterMessage(ClientAvailableMessage) ListClientsRequest = _reflection.GeneratedProtocolMessageType('ListClientsRequest', (_message.Message,), { - 'DESCRIPTOR': _LISTCLIENTSREQUEST, - '__module__': 'fedn.common.net.grpc.fedn_pb2' - # @@protoc_insertion_point(class_scope:grpc.ListClientsRequest) -}) + 'DESCRIPTOR' : _LISTCLIENTSREQUEST, + '__module__' : 'fedn.common.net.grpc.fedn_pb2' + # @@protoc_insertion_point(class_scope:grpc.ListClientsRequest) + }) _sym_db.RegisterMessage(ListClientsRequest) ClientList = _reflection.GeneratedProtocolMessageType('ClientList', (_message.Message,), { - 'DESCRIPTOR': _CLIENTLIST, - '__module__': 'fedn.common.net.grpc.fedn_pb2' - # @@protoc_insertion_point(class_scope:grpc.ClientList) -}) + 'DESCRIPTOR' : _CLIENTLIST, + '__module__' : 'fedn.common.net.grpc.fedn_pb2' + # @@protoc_insertion_point(class_scope:grpc.ClientList) + }) _sym_db.RegisterMessage(ClientList) Client = _reflection.GeneratedProtocolMessageType('Client', (_message.Message,), { - 'DESCRIPTOR': _CLIENT, - '__module__': 'fedn.common.net.grpc.fedn_pb2' - # @@protoc_insertion_point(class_scope:grpc.Client) -}) + 'DESCRIPTOR' : _CLIENT, + '__module__' : 'fedn.common.net.grpc.fedn_pb2' + # @@protoc_insertion_point(class_scope:grpc.Client) + }) _sym_db.RegisterMessage(Client) ReassignRequest = _reflection.GeneratedProtocolMessageType('ReassignRequest', (_message.Message,), { - 'DESCRIPTOR': _REASSIGNREQUEST, - '__module__': 'fedn.common.net.grpc.fedn_pb2' - # @@protoc_insertion_point(class_scope:grpc.ReassignRequest) -}) + 'DESCRIPTOR' : _REASSIGNREQUEST, + '__module__' : 'fedn.common.net.grpc.fedn_pb2' + # @@protoc_insertion_point(class_scope:grpc.ReassignRequest) + }) _sym_db.RegisterMessage(ReassignRequest) ReconnectRequest = _reflection.GeneratedProtocolMessageType('ReconnectRequest', (_message.Message,), { - 'DESCRIPTOR': _RECONNECTREQUEST, - '__module__': 'fedn.common.net.grpc.fedn_pb2' - # @@protoc_insertion_point(class_scope:grpc.ReconnectRequest) -}) + 'DESCRIPTOR' : _RECONNECTREQUEST, + '__module__' : 'fedn.common.net.grpc.fedn_pb2' + # @@protoc_insertion_point(class_scope:grpc.ReconnectRequest) + }) _sym_db.RegisterMessage(ReconnectRequest) Parameter = _reflection.GeneratedProtocolMessageType('Parameter', (_message.Message,), { - 'DESCRIPTOR': _PARAMETER, - '__module__': 'fedn.common.net.grpc.fedn_pb2' - # @@protoc_insertion_point(class_scope:grpc.Parameter) -}) + 'DESCRIPTOR' : _PARAMETER, + '__module__' : 'fedn.common.net.grpc.fedn_pb2' + # @@protoc_insertion_point(class_scope:grpc.Parameter) + }) _sym_db.RegisterMessage(Parameter) ControlRequest = _reflection.GeneratedProtocolMessageType('ControlRequest', (_message.Message,), { - 'DESCRIPTOR': _CONTROLREQUEST, - '__module__': 'fedn.common.net.grpc.fedn_pb2' - # @@protoc_insertion_point(class_scope:grpc.ControlRequest) -}) + 'DESCRIPTOR' : _CONTROLREQUEST, + '__module__' : 'fedn.common.net.grpc.fedn_pb2' + # @@protoc_insertion_point(class_scope:grpc.ControlRequest) + }) _sym_db.RegisterMessage(ControlRequest) ControlResponse = _reflection.GeneratedProtocolMessageType('ControlResponse', (_message.Message,), { - 'DESCRIPTOR': _CONTROLRESPONSE, - '__module__': 'fedn.common.net.grpc.fedn_pb2' - # @@protoc_insertion_point(class_scope:grpc.ControlResponse) -}) + 'DESCRIPTOR' : _CONTROLRESPONSE, + '__module__' : 'fedn.common.net.grpc.fedn_pb2' + # @@protoc_insertion_point(class_scope:grpc.ControlResponse) + }) _sym_db.RegisterMessage(ControlResponse) ReportResponse = _reflection.GeneratedProtocolMessageType('ReportResponse', (_message.Message,), { - 'DESCRIPTOR': _REPORTRESPONSE, - '__module__': 'fedn.common.net.grpc.fedn_pb2' - # @@protoc_insertion_point(class_scope:grpc.ReportResponse) -}) + 'DESCRIPTOR' : _REPORTRESPONSE, + '__module__' : 'fedn.common.net.grpc.fedn_pb2' + # @@protoc_insertion_point(class_scope:grpc.ReportResponse) + }) _sym_db.RegisterMessage(ReportResponse) ConnectionRequest = _reflection.GeneratedProtocolMessageType('ConnectionRequest', (_message.Message,), { - 'DESCRIPTOR': _CONNECTIONREQUEST, - '__module__': 'fedn.common.net.grpc.fedn_pb2' - # @@protoc_insertion_point(class_scope:grpc.ConnectionRequest) -}) + 'DESCRIPTOR' : _CONNECTIONREQUEST, + '__module__' : 'fedn.common.net.grpc.fedn_pb2' + # @@protoc_insertion_point(class_scope:grpc.ConnectionRequest) + }) _sym_db.RegisterMessage(ConnectionRequest) ConnectionResponse = _reflection.GeneratedProtocolMessageType('ConnectionResponse', (_message.Message,), { - 'DESCRIPTOR': _CONNECTIONRESPONSE, - '__module__': 'fedn.common.net.grpc.fedn_pb2' - # @@protoc_insertion_point(class_scope:grpc.ConnectionResponse) -}) + 'DESCRIPTOR' : _CONNECTIONRESPONSE, + '__module__' : 'fedn.common.net.grpc.fedn_pb2' + # @@protoc_insertion_point(class_scope:grpc.ConnectionResponse) + }) _sym_db.RegisterMessage(ConnectionResponse) + + _MODELSERVICE = _descriptor.ServiceDescriptor( - name='ModelService', - full_name='grpc.ModelService', - file=DESCRIPTOR, + name='ModelService', + full_name='grpc.ModelService', + file=DESCRIPTOR, + index=0, + serialized_options=None, + create_key=_descriptor._internal_create_key, + serialized_start=2920, + serialized_end=3042, + methods=[ + _descriptor.MethodDescriptor( + name='Upload', + full_name='grpc.ModelService.Upload', index=0, + containing_service=None, + input_type=_MODELREQUEST, + output_type=_MODELRESPONSE, + serialized_options=None, + create_key=_descriptor._internal_create_key, + ), + _descriptor.MethodDescriptor( + name='Download', + full_name='grpc.ModelService.Download', + index=1, + containing_service=None, + input_type=_MODELREQUEST, + output_type=_MODELRESPONSE, serialized_options=None, create_key=_descriptor._internal_create_key, - serialized_start=2898, - serialized_end=3020, - methods=[ - _descriptor.MethodDescriptor( - name='Upload', - full_name='grpc.ModelService.Upload', - index=0, - containing_service=None, - input_type=_MODELREQUEST, - output_type=_MODELRESPONSE, - serialized_options=None, - create_key=_descriptor._internal_create_key, - ), - _descriptor.MethodDescriptor( - name='Download', - full_name='grpc.ModelService.Download', - index=1, - containing_service=None, - input_type=_MODELREQUEST, - output_type=_MODELRESPONSE, - serialized_options=None, - create_key=_descriptor._internal_create_key, - ), - ]) + ), +]) _sym_db.RegisterServiceDescriptor(_MODELSERVICE) DESCRIPTOR.services_by_name['ModelService'] = _MODELSERVICE + _CONTROL = _descriptor.ServiceDescriptor( - name='Control', - full_name='grpc.Control', - file=DESCRIPTOR, + name='Control', + full_name='grpc.Control', + file=DESCRIPTOR, + index=1, + serialized_options=None, + create_key=_descriptor._internal_create_key, + serialized_start=3045, + serialized_end=3272, + methods=[ + _descriptor.MethodDescriptor( + name='Start', + full_name='grpc.Control.Start', + index=0, + containing_service=None, + input_type=_CONTROLREQUEST, + output_type=_CONTROLRESPONSE, + serialized_options=None, + create_key=_descriptor._internal_create_key, + ), + _descriptor.MethodDescriptor( + name='Stop', + full_name='grpc.Control.Stop', index=1, + containing_service=None, + input_type=_CONTROLREQUEST, + output_type=_CONTROLRESPONSE, serialized_options=None, create_key=_descriptor._internal_create_key, - serialized_start=3023, - serialized_end=3250, - methods=[ - _descriptor.MethodDescriptor( - name='Start', - full_name='grpc.Control.Start', - index=0, - containing_service=None, - input_type=_CONTROLREQUEST, - output_type=_CONTROLRESPONSE, - serialized_options=None, - create_key=_descriptor._internal_create_key, - ), - _descriptor.MethodDescriptor( - name='Stop', - full_name='grpc.Control.Stop', - index=1, - containing_service=None, - input_type=_CONTROLREQUEST, - output_type=_CONTROLRESPONSE, - serialized_options=None, - create_key=_descriptor._internal_create_key, - ), - _descriptor.MethodDescriptor( - name='Configure', - full_name='grpc.Control.Configure', - index=2, - containing_service=None, - input_type=_CONTROLREQUEST, - output_type=_REPORTRESPONSE, - serialized_options=None, - create_key=_descriptor._internal_create_key, - ), - _descriptor.MethodDescriptor( - name='Report', - full_name='grpc.Control.Report', - index=3, - containing_service=None, - input_type=_CONTROLREQUEST, - output_type=_REPORTRESPONSE, - serialized_options=None, - create_key=_descriptor._internal_create_key, - ), - ]) + ), + _descriptor.MethodDescriptor( + name='Configure', + full_name='grpc.Control.Configure', + index=2, + containing_service=None, + input_type=_CONTROLREQUEST, + output_type=_REPORTRESPONSE, + serialized_options=None, + create_key=_descriptor._internal_create_key, + ), + _descriptor.MethodDescriptor( + name='Report', + full_name='grpc.Control.Report', + index=3, + containing_service=None, + input_type=_CONTROLREQUEST, + output_type=_REPORTRESPONSE, + serialized_options=None, + create_key=_descriptor._internal_create_key, + ), +]) _sym_db.RegisterServiceDescriptor(_CONTROL) DESCRIPTOR.services_by_name['Control'] = _CONTROL + _REDUCER = _descriptor.ServiceDescriptor( - name='Reducer', - full_name='grpc.Reducer', - file=DESCRIPTOR, - index=2, + name='Reducer', + full_name='grpc.Reducer', + file=DESCRIPTOR, + index=2, + serialized_options=None, + create_key=_descriptor._internal_create_key, + serialized_start=3274, + serialized_end=3360, + methods=[ + _descriptor.MethodDescriptor( + name='GetGlobalModel', + full_name='grpc.Reducer.GetGlobalModel', + index=0, + containing_service=None, + input_type=_GETGLOBALMODELREQUEST, + output_type=_GETGLOBALMODELRESPONSE, serialized_options=None, create_key=_descriptor._internal_create_key, - serialized_start=3252, - serialized_end=3338, - methods=[ - _descriptor.MethodDescriptor( - name='GetGlobalModel', - full_name='grpc.Reducer.GetGlobalModel', - index=0, - containing_service=None, - input_type=_GETGLOBALMODELREQUEST, - output_type=_GETGLOBALMODELRESPONSE, - serialized_options=None, - create_key=_descriptor._internal_create_key, - ), - ]) + ), +]) _sym_db.RegisterServiceDescriptor(_REDUCER) DESCRIPTOR.services_by_name['Reducer'] = _REDUCER + _CONNECTOR = _descriptor.ServiceDescriptor( - name='Connector', - full_name='grpc.Connector', - file=DESCRIPTOR, + name='Connector', + full_name='grpc.Connector', + file=DESCRIPTOR, + index=3, + serialized_options=None, + create_key=_descriptor._internal_create_key, + serialized_start=3363, + serialized_end=3790, + methods=[ + _descriptor.MethodDescriptor( + name='AllianceStatusStream', + full_name='grpc.Connector.AllianceStatusStream', + index=0, + containing_service=None, + input_type=_CLIENTAVAILABLEMESSAGE, + output_type=_STATUS, + serialized_options=None, + create_key=_descriptor._internal_create_key, + ), + _descriptor.MethodDescriptor( + name='SendStatus', + full_name='grpc.Connector.SendStatus', + index=1, + containing_service=None, + input_type=_STATUS, + output_type=_RESPONSE, + serialized_options=None, + create_key=_descriptor._internal_create_key, + ), + _descriptor.MethodDescriptor( + name='ListActiveClients', + full_name='grpc.Connector.ListActiveClients', + index=2, + containing_service=None, + input_type=_LISTCLIENTSREQUEST, + output_type=_CLIENTLIST, + serialized_options=None, + create_key=_descriptor._internal_create_key, + ), + _descriptor.MethodDescriptor( + name='AcceptingClients', + full_name='grpc.Connector.AcceptingClients', index=3, + containing_service=None, + input_type=_CONNECTIONREQUEST, + output_type=_CONNECTIONRESPONSE, serialized_options=None, create_key=_descriptor._internal_create_key, - serialized_start=3341, - serialized_end=3768, - methods=[ - _descriptor.MethodDescriptor( - name='AllianceStatusStream', - full_name='grpc.Connector.AllianceStatusStream', - index=0, - containing_service=None, - input_type=_CLIENTAVAILABLEMESSAGE, - output_type=_STATUS, - serialized_options=None, - create_key=_descriptor._internal_create_key, - ), - _descriptor.MethodDescriptor( - name='SendStatus', - full_name='grpc.Connector.SendStatus', - index=1, - containing_service=None, - input_type=_STATUS, - output_type=_RESPONSE, - serialized_options=None, - create_key=_descriptor._internal_create_key, - ), - _descriptor.MethodDescriptor( - name='ListActiveClients', - full_name='grpc.Connector.ListActiveClients', - index=2, - containing_service=None, - input_type=_LISTCLIENTSREQUEST, - output_type=_CLIENTLIST, - serialized_options=None, - create_key=_descriptor._internal_create_key, - ), - _descriptor.MethodDescriptor( - name='AcceptingClients', - full_name='grpc.Connector.AcceptingClients', - index=3, - containing_service=None, - input_type=_CONNECTIONREQUEST, - output_type=_CONNECTIONRESPONSE, - serialized_options=None, - create_key=_descriptor._internal_create_key, - ), - _descriptor.MethodDescriptor( - name='SendHeartbeat', - full_name='grpc.Connector.SendHeartbeat', - index=4, - containing_service=None, - input_type=_HEARTBEAT, - output_type=_RESPONSE, - serialized_options=None, - create_key=_descriptor._internal_create_key, - ), - _descriptor.MethodDescriptor( - name='ReassignClient', - full_name='grpc.Connector.ReassignClient', - index=5, - containing_service=None, - input_type=_REASSIGNREQUEST, - output_type=_RESPONSE, - serialized_options=None, - create_key=_descriptor._internal_create_key, - ), - _descriptor.MethodDescriptor( - name='ReconnectClient', - full_name='grpc.Connector.ReconnectClient', - index=6, - containing_service=None, - input_type=_RECONNECTREQUEST, - output_type=_RESPONSE, - serialized_options=None, - create_key=_descriptor._internal_create_key, - ), - ]) + ), + _descriptor.MethodDescriptor( + name='SendHeartbeat', + full_name='grpc.Connector.SendHeartbeat', + index=4, + containing_service=None, + input_type=_HEARTBEAT, + output_type=_RESPONSE, + serialized_options=None, + create_key=_descriptor._internal_create_key, + ), + _descriptor.MethodDescriptor( + name='ReassignClient', + full_name='grpc.Connector.ReassignClient', + index=5, + containing_service=None, + input_type=_REASSIGNREQUEST, + output_type=_RESPONSE, + serialized_options=None, + create_key=_descriptor._internal_create_key, + ), + _descriptor.MethodDescriptor( + name='ReconnectClient', + full_name='grpc.Connector.ReconnectClient', + index=6, + containing_service=None, + input_type=_RECONNECTREQUEST, + output_type=_RESPONSE, + serialized_options=None, + create_key=_descriptor._internal_create_key, + ), +]) _sym_db.RegisterServiceDescriptor(_CONNECTOR) DESCRIPTOR.services_by_name['Connector'] = _CONNECTOR + _COMBINER = _descriptor.ServiceDescriptor( - name='Combiner', - full_name='grpc.Combiner', - file=DESCRIPTOR, + name='Combiner', + full_name='grpc.Combiner', + file=DESCRIPTOR, + index=4, + serialized_options=None, + create_key=_descriptor._internal_create_key, + serialized_start=3793, + serialized_end=4395, + methods=[ + _descriptor.MethodDescriptor( + name='ModelUpdateRequestStream', + full_name='grpc.Combiner.ModelUpdateRequestStream', + index=0, + containing_service=None, + input_type=_CLIENTAVAILABLEMESSAGE, + output_type=_MODELUPDATEREQUEST, + serialized_options=None, + create_key=_descriptor._internal_create_key, + ), + _descriptor.MethodDescriptor( + name='ModelUpdateStream', + full_name='grpc.Combiner.ModelUpdateStream', + index=1, + containing_service=None, + input_type=_CLIENTAVAILABLEMESSAGE, + output_type=_MODELUPDATE, + serialized_options=None, + create_key=_descriptor._internal_create_key, + ), + _descriptor.MethodDescriptor( + name='ModelValidationRequestStream', + full_name='grpc.Combiner.ModelValidationRequestStream', + index=2, + containing_service=None, + input_type=_CLIENTAVAILABLEMESSAGE, + output_type=_MODELVALIDATIONREQUEST, + serialized_options=None, + create_key=_descriptor._internal_create_key, + ), + _descriptor.MethodDescriptor( + name='ModelValidationStream', + full_name='grpc.Combiner.ModelValidationStream', + index=3, + containing_service=None, + input_type=_CLIENTAVAILABLEMESSAGE, + output_type=_MODELVALIDATION, + serialized_options=None, + create_key=_descriptor._internal_create_key, + ), + _descriptor.MethodDescriptor( + name='SendModelUpdateRequest', + full_name='grpc.Combiner.SendModelUpdateRequest', index=4, + containing_service=None, + input_type=_MODELUPDATEREQUEST, + output_type=_RESPONSE, + serialized_options=None, + create_key=_descriptor._internal_create_key, + ), + _descriptor.MethodDescriptor( + name='SendModelUpdate', + full_name='grpc.Combiner.SendModelUpdate', + index=5, + containing_service=None, + input_type=_MODELUPDATE, + output_type=_RESPONSE, + serialized_options=None, + create_key=_descriptor._internal_create_key, + ), + _descriptor.MethodDescriptor( + name='SendModelValidationRequest', + full_name='grpc.Combiner.SendModelValidationRequest', + index=6, + containing_service=None, + input_type=_MODELVALIDATIONREQUEST, + output_type=_RESPONSE, + serialized_options=None, + create_key=_descriptor._internal_create_key, + ), + _descriptor.MethodDescriptor( + name='SendModelValidation', + full_name='grpc.Combiner.SendModelValidation', + index=7, + containing_service=None, + input_type=_MODELVALIDATION, + output_type=_RESPONSE, serialized_options=None, create_key=_descriptor._internal_create_key, - serialized_start=3771, - serialized_end=4373, - methods=[ - _descriptor.MethodDescriptor( - name='ModelUpdateRequestStream', - full_name='grpc.Combiner.ModelUpdateRequestStream', - index=0, - containing_service=None, - input_type=_CLIENTAVAILABLEMESSAGE, - output_type=_MODELUPDATEREQUEST, - serialized_options=None, - create_key=_descriptor._internal_create_key, - ), - _descriptor.MethodDescriptor( - name='ModelUpdateStream', - full_name='grpc.Combiner.ModelUpdateStream', - index=1, - containing_service=None, - input_type=_CLIENTAVAILABLEMESSAGE, - output_type=_MODELUPDATE, - serialized_options=None, - create_key=_descriptor._internal_create_key, - ), - _descriptor.MethodDescriptor( - name='ModelValidationRequestStream', - full_name='grpc.Combiner.ModelValidationRequestStream', - index=2, - containing_service=None, - input_type=_CLIENTAVAILABLEMESSAGE, - output_type=_MODELVALIDATIONREQUEST, - serialized_options=None, - create_key=_descriptor._internal_create_key, - ), - _descriptor.MethodDescriptor( - name='ModelValidationStream', - full_name='grpc.Combiner.ModelValidationStream', - index=3, - containing_service=None, - input_type=_CLIENTAVAILABLEMESSAGE, - output_type=_MODELVALIDATION, - serialized_options=None, - create_key=_descriptor._internal_create_key, - ), - _descriptor.MethodDescriptor( - name='SendModelUpdateRequest', - full_name='grpc.Combiner.SendModelUpdateRequest', - index=4, - containing_service=None, - input_type=_MODELUPDATEREQUEST, - output_type=_RESPONSE, - serialized_options=None, - create_key=_descriptor._internal_create_key, - ), - _descriptor.MethodDescriptor( - name='SendModelUpdate', - full_name='grpc.Combiner.SendModelUpdate', - index=5, - containing_service=None, - input_type=_MODELUPDATE, - output_type=_RESPONSE, - serialized_options=None, - create_key=_descriptor._internal_create_key, - ), - _descriptor.MethodDescriptor( - name='SendModelValidationRequest', - full_name='grpc.Combiner.SendModelValidationRequest', - index=6, - containing_service=None, - input_type=_MODELVALIDATIONREQUEST, - output_type=_RESPONSE, - serialized_options=None, - create_key=_descriptor._internal_create_key, - ), - _descriptor.MethodDescriptor( - name='SendModelValidation', - full_name='grpc.Combiner.SendModelValidation', - index=7, - containing_service=None, - input_type=_MODELVALIDATION, - output_type=_RESPONSE, - serialized_options=None, - create_key=_descriptor._internal_create_key, - ), - ]) + ), +]) _sym_db.RegisterServiceDescriptor(_COMBINER) DESCRIPTOR.services_by_name['Combiner'] = _COMBINER diff --git a/fedn/fedn/common/net/grpc/fedn_pb2_grpc.py b/fedn/fedn/common/net/grpc/fedn_pb2_grpc.py index 9989824f7..97c73e5d5 100644 --- a/fedn/fedn/common/net/grpc/fedn_pb2_grpc.py +++ b/fedn/fedn/common/net/grpc/fedn_pb2_grpc.py @@ -2,8 +2,7 @@ """Client and server classes corresponding to protobuf-defined services.""" import grpc -from fedn.common.net.grpc import \ - fedn_pb2 as fedn_dot_common_dot_net_dot_grpc_dot_fedn__pb2 +from fedn.common.net.grpc import fedn_pb2 as fedn_dot_common_dot_net_dot_grpc_dot_fedn__pb2 class ModelServiceStub(object): @@ -16,15 +15,15 @@ def __init__(self, channel): channel: A grpc.Channel. """ self.Upload = channel.stream_unary( - '/grpc.ModelService/Upload', - request_serializer=fedn_dot_common_dot_net_dot_grpc_dot_fedn__pb2.ModelRequest.SerializeToString, - response_deserializer=fedn_dot_common_dot_net_dot_grpc_dot_fedn__pb2.ModelResponse.FromString, - ) + '/grpc.ModelService/Upload', + request_serializer=fedn_dot_common_dot_net_dot_grpc_dot_fedn__pb2.ModelRequest.SerializeToString, + response_deserializer=fedn_dot_common_dot_net_dot_grpc_dot_fedn__pb2.ModelResponse.FromString, + ) self.Download = channel.unary_stream( - '/grpc.ModelService/Download', - request_serializer=fedn_dot_common_dot_net_dot_grpc_dot_fedn__pb2.ModelRequest.SerializeToString, - response_deserializer=fedn_dot_common_dot_net_dot_grpc_dot_fedn__pb2.ModelResponse.FromString, - ) + '/grpc.ModelService/Download', + request_serializer=fedn_dot_common_dot_net_dot_grpc_dot_fedn__pb2.ModelRequest.SerializeToString, + response_deserializer=fedn_dot_common_dot_net_dot_grpc_dot_fedn__pb2.ModelResponse.FromString, + ) class ModelServiceServicer(object): @@ -44,95 +43,60 @@ def Download(self, request, context): def add_ModelServiceServicer_to_server(servicer, server): - """ - - :param servicer: - :param server: - """ rpc_method_handlers = { - 'Upload': grpc.stream_unary_rpc_method_handler( - servicer.Upload, - request_deserializer=fedn_dot_common_dot_net_dot_grpc_dot_fedn__pb2.ModelRequest.FromString, - response_serializer=fedn_dot_common_dot_net_dot_grpc_dot_fedn__pb2.ModelResponse.SerializeToString, - ), - 'Download': grpc.unary_stream_rpc_method_handler( - servicer.Download, - request_deserializer=fedn_dot_common_dot_net_dot_grpc_dot_fedn__pb2.ModelRequest.FromString, - response_serializer=fedn_dot_common_dot_net_dot_grpc_dot_fedn__pb2.ModelResponse.SerializeToString, - ), + 'Upload': grpc.stream_unary_rpc_method_handler( + servicer.Upload, + request_deserializer=fedn_dot_common_dot_net_dot_grpc_dot_fedn__pb2.ModelRequest.FromString, + response_serializer=fedn_dot_common_dot_net_dot_grpc_dot_fedn__pb2.ModelResponse.SerializeToString, + ), + 'Download': grpc.unary_stream_rpc_method_handler( + servicer.Download, + request_deserializer=fedn_dot_common_dot_net_dot_grpc_dot_fedn__pb2.ModelRequest.FromString, + response_serializer=fedn_dot_common_dot_net_dot_grpc_dot_fedn__pb2.ModelResponse.SerializeToString, + ), } generic_handler = grpc.method_handlers_generic_handler( - 'grpc.ModelService', rpc_method_handlers) + 'grpc.ModelService', rpc_method_handlers) server.add_generic_rpc_handlers((generic_handler,)) -# This class is part of an EXPERIMENTAL API. + # This class is part of an EXPERIMENTAL API. class ModelService(object): """Missing associated documentation comment in .proto file.""" @staticmethod def Upload(request_iterator, - target, - options=(), - channel_credentials=None, - call_credentials=None, - insecure=False, - compression=None, - wait_for_ready=None, - timeout=None, - metadata=None): - """ - - :param request_iterator: - :param target: - :param options: - :param channel_credentials: - :param call_credentials: - :param insecure: - :param compression: - :param wait_for_ready: - :param timeout: - :param metadata: - :return: - """ + target, + options=(), + channel_credentials=None, + call_credentials=None, + insecure=False, + compression=None, + wait_for_ready=None, + timeout=None, + metadata=None): return grpc.experimental.stream_unary(request_iterator, target, '/grpc.ModelService/Upload', - fedn_dot_common_dot_net_dot_grpc_dot_fedn__pb2.ModelRequest.SerializeToString, - fedn_dot_common_dot_net_dot_grpc_dot_fedn__pb2.ModelResponse.FromString, - options, channel_credentials, - insecure, call_credentials, compression, wait_for_ready, timeout, - metadata) + fedn_dot_common_dot_net_dot_grpc_dot_fedn__pb2.ModelRequest.SerializeToString, + fedn_dot_common_dot_net_dot_grpc_dot_fedn__pb2.ModelResponse.FromString, + options, channel_credentials, + insecure, call_credentials, compression, wait_for_ready, timeout, metadata) @staticmethod def Download(request, - target, - options=(), - channel_credentials=None, - call_credentials=None, - insecure=False, - compression=None, - wait_for_ready=None, - timeout=None, - metadata=None): - """ - - :param request: - :param target: - :param options: - :param channel_credentials: - :param call_credentials: - :param insecure: - :param compression: - :param wait_for_ready: - :param timeout: - :param metadata: - :return: - """ + target, + options=(), + channel_credentials=None, + call_credentials=None, + insecure=False, + compression=None, + wait_for_ready=None, + timeout=None, + metadata=None): return grpc.experimental.unary_stream(request, target, '/grpc.ModelService/Download', - fedn_dot_common_dot_net_dot_grpc_dot_fedn__pb2.ModelRequest.SerializeToString, - fedn_dot_common_dot_net_dot_grpc_dot_fedn__pb2.ModelResponse.FromString, - options, channel_credentials, - insecure, call_credentials, compression, wait_for_ready, timeout, - metadata) + fedn_dot_common_dot_net_dot_grpc_dot_fedn__pb2.ModelRequest.SerializeToString, + fedn_dot_common_dot_net_dot_grpc_dot_fedn__pb2.ModelResponse.FromString, + options, channel_credentials, + insecure, call_credentials, compression, wait_for_ready, timeout, metadata) class ControlStub(object): @@ -145,25 +109,25 @@ def __init__(self, channel): channel: A grpc.Channel. """ self.Start = channel.unary_unary( - '/grpc.Control/Start', - request_serializer=fedn_dot_common_dot_net_dot_grpc_dot_fedn__pb2.ControlRequest.SerializeToString, - response_deserializer=fedn_dot_common_dot_net_dot_grpc_dot_fedn__pb2.ControlResponse.FromString, - ) + '/grpc.Control/Start', + request_serializer=fedn_dot_common_dot_net_dot_grpc_dot_fedn__pb2.ControlRequest.SerializeToString, + response_deserializer=fedn_dot_common_dot_net_dot_grpc_dot_fedn__pb2.ControlResponse.FromString, + ) self.Stop = channel.unary_unary( - '/grpc.Control/Stop', - request_serializer=fedn_dot_common_dot_net_dot_grpc_dot_fedn__pb2.ControlRequest.SerializeToString, - response_deserializer=fedn_dot_common_dot_net_dot_grpc_dot_fedn__pb2.ControlResponse.FromString, - ) + '/grpc.Control/Stop', + request_serializer=fedn_dot_common_dot_net_dot_grpc_dot_fedn__pb2.ControlRequest.SerializeToString, + response_deserializer=fedn_dot_common_dot_net_dot_grpc_dot_fedn__pb2.ControlResponse.FromString, + ) self.Configure = channel.unary_unary( - '/grpc.Control/Configure', - request_serializer=fedn_dot_common_dot_net_dot_grpc_dot_fedn__pb2.ControlRequest.SerializeToString, - response_deserializer=fedn_dot_common_dot_net_dot_grpc_dot_fedn__pb2.ReportResponse.FromString, - ) + '/grpc.Control/Configure', + request_serializer=fedn_dot_common_dot_net_dot_grpc_dot_fedn__pb2.ControlRequest.SerializeToString, + response_deserializer=fedn_dot_common_dot_net_dot_grpc_dot_fedn__pb2.ReportResponse.FromString, + ) self.Report = channel.unary_unary( - '/grpc.Control/Report', - request_serializer=fedn_dot_common_dot_net_dot_grpc_dot_fedn__pb2.ControlRequest.SerializeToString, - response_deserializer=fedn_dot_common_dot_net_dot_grpc_dot_fedn__pb2.ReportResponse.FromString, - ) + '/grpc.Control/Report', + request_serializer=fedn_dot_common_dot_net_dot_grpc_dot_fedn__pb2.ControlRequest.SerializeToString, + response_deserializer=fedn_dot_common_dot_net_dot_grpc_dot_fedn__pb2.ReportResponse.FromString, + ) class ControlServicer(object): @@ -195,165 +159,104 @@ def Report(self, request, context): def add_ControlServicer_to_server(servicer, server): - """ - - :param servicer: - :param server: - """ rpc_method_handlers = { - 'Start': grpc.unary_unary_rpc_method_handler( - servicer.Start, - request_deserializer=fedn_dot_common_dot_net_dot_grpc_dot_fedn__pb2.ControlRequest.FromString, - response_serializer=fedn_dot_common_dot_net_dot_grpc_dot_fedn__pb2.ControlResponse.SerializeToString, - ), - 'Stop': grpc.unary_unary_rpc_method_handler( - servicer.Stop, - request_deserializer=fedn_dot_common_dot_net_dot_grpc_dot_fedn__pb2.ControlRequest.FromString, - response_serializer=fedn_dot_common_dot_net_dot_grpc_dot_fedn__pb2.ControlResponse.SerializeToString, - ), - 'Configure': grpc.unary_unary_rpc_method_handler( - servicer.Configure, - request_deserializer=fedn_dot_common_dot_net_dot_grpc_dot_fedn__pb2.ControlRequest.FromString, - response_serializer=fedn_dot_common_dot_net_dot_grpc_dot_fedn__pb2.ReportResponse.SerializeToString, - ), - 'Report': grpc.unary_unary_rpc_method_handler( - servicer.Report, - request_deserializer=fedn_dot_common_dot_net_dot_grpc_dot_fedn__pb2.ControlRequest.FromString, - response_serializer=fedn_dot_common_dot_net_dot_grpc_dot_fedn__pb2.ReportResponse.SerializeToString, - ), + 'Start': grpc.unary_unary_rpc_method_handler( + servicer.Start, + request_deserializer=fedn_dot_common_dot_net_dot_grpc_dot_fedn__pb2.ControlRequest.FromString, + response_serializer=fedn_dot_common_dot_net_dot_grpc_dot_fedn__pb2.ControlResponse.SerializeToString, + ), + 'Stop': grpc.unary_unary_rpc_method_handler( + servicer.Stop, + request_deserializer=fedn_dot_common_dot_net_dot_grpc_dot_fedn__pb2.ControlRequest.FromString, + response_serializer=fedn_dot_common_dot_net_dot_grpc_dot_fedn__pb2.ControlResponse.SerializeToString, + ), + 'Configure': grpc.unary_unary_rpc_method_handler( + servicer.Configure, + request_deserializer=fedn_dot_common_dot_net_dot_grpc_dot_fedn__pb2.ControlRequest.FromString, + response_serializer=fedn_dot_common_dot_net_dot_grpc_dot_fedn__pb2.ReportResponse.SerializeToString, + ), + 'Report': grpc.unary_unary_rpc_method_handler( + servicer.Report, + request_deserializer=fedn_dot_common_dot_net_dot_grpc_dot_fedn__pb2.ControlRequest.FromString, + response_serializer=fedn_dot_common_dot_net_dot_grpc_dot_fedn__pb2.ReportResponse.SerializeToString, + ), } generic_handler = grpc.method_handlers_generic_handler( - 'grpc.Control', rpc_method_handlers) + 'grpc.Control', rpc_method_handlers) server.add_generic_rpc_handlers((generic_handler,)) -# This class is part of an EXPERIMENTAL API. + # This class is part of an EXPERIMENTAL API. class Control(object): """Missing associated documentation comment in .proto file.""" @staticmethod def Start(request, - target, - options=(), - channel_credentials=None, - call_credentials=None, - insecure=False, - compression=None, - wait_for_ready=None, - timeout=None, - metadata=None): - """ - - :param request: - :param target: - :param options: - :param channel_credentials: - :param call_credentials: - :param insecure: - :param compression: - :param wait_for_ready: - :param timeout: - :param metadata: - :return: - """ + target, + options=(), + channel_credentials=None, + call_credentials=None, + insecure=False, + compression=None, + wait_for_ready=None, + timeout=None, + metadata=None): return grpc.experimental.unary_unary(request, target, '/grpc.Control/Start', - fedn_dot_common_dot_net_dot_grpc_dot_fedn__pb2.ControlRequest.SerializeToString, - fedn_dot_common_dot_net_dot_grpc_dot_fedn__pb2.ControlResponse.FromString, - options, channel_credentials, - insecure, call_credentials, compression, wait_for_ready, timeout, metadata) + fedn_dot_common_dot_net_dot_grpc_dot_fedn__pb2.ControlRequest.SerializeToString, + fedn_dot_common_dot_net_dot_grpc_dot_fedn__pb2.ControlResponse.FromString, + options, channel_credentials, + insecure, call_credentials, compression, wait_for_ready, timeout, metadata) @staticmethod def Stop(request, - target, - options=(), - channel_credentials=None, - call_credentials=None, - insecure=False, - compression=None, - wait_for_ready=None, - timeout=None, - metadata=None): - """ - - :param request: - :param target: - :param options: - :param channel_credentials: - :param call_credentials: - :param insecure: - :param compression: - :param wait_for_ready: - :param timeout: - :param metadata: - :return: - """ + target, + options=(), + channel_credentials=None, + call_credentials=None, + insecure=False, + compression=None, + wait_for_ready=None, + timeout=None, + metadata=None): return grpc.experimental.unary_unary(request, target, '/grpc.Control/Stop', - fedn_dot_common_dot_net_dot_grpc_dot_fedn__pb2.ControlRequest.SerializeToString, - fedn_dot_common_dot_net_dot_grpc_dot_fedn__pb2.ControlResponse.FromString, - options, channel_credentials, - insecure, call_credentials, compression, wait_for_ready, timeout, metadata) + fedn_dot_common_dot_net_dot_grpc_dot_fedn__pb2.ControlRequest.SerializeToString, + fedn_dot_common_dot_net_dot_grpc_dot_fedn__pb2.ControlResponse.FromString, + options, channel_credentials, + insecure, call_credentials, compression, wait_for_ready, timeout, metadata) @staticmethod def Configure(request, - target, - options=(), - channel_credentials=None, - call_credentials=None, - insecure=False, - compression=None, - wait_for_ready=None, - timeout=None, - metadata=None): - """ - - :param request: - :param target: - :param options: - :param channel_credentials: - :param call_credentials: - :param insecure: - :param compression: - :param wait_for_ready: - :param timeout: - :param metadata: - :return: - """ + target, + options=(), + channel_credentials=None, + call_credentials=None, + insecure=False, + compression=None, + wait_for_ready=None, + timeout=None, + metadata=None): return grpc.experimental.unary_unary(request, target, '/grpc.Control/Configure', - fedn_dot_common_dot_net_dot_grpc_dot_fedn__pb2.ControlRequest.SerializeToString, - fedn_dot_common_dot_net_dot_grpc_dot_fedn__pb2.ReportResponse.FromString, - options, channel_credentials, - insecure, call_credentials, compression, wait_for_ready, timeout, metadata) + fedn_dot_common_dot_net_dot_grpc_dot_fedn__pb2.ControlRequest.SerializeToString, + fedn_dot_common_dot_net_dot_grpc_dot_fedn__pb2.ReportResponse.FromString, + options, channel_credentials, + insecure, call_credentials, compression, wait_for_ready, timeout, metadata) @staticmethod def Report(request, - target, - options=(), - channel_credentials=None, - call_credentials=None, - insecure=False, - compression=None, - wait_for_ready=None, - timeout=None, - metadata=None): - """ - - :param request: - :param target: - :param options: - :param channel_credentials: - :param call_credentials: - :param insecure: - :param compression: - :param wait_for_ready: - :param timeout: - :param metadata: - :return: - """ + target, + options=(), + channel_credentials=None, + call_credentials=None, + insecure=False, + compression=None, + wait_for_ready=None, + timeout=None, + metadata=None): return grpc.experimental.unary_unary(request, target, '/grpc.Control/Report', - fedn_dot_common_dot_net_dot_grpc_dot_fedn__pb2.ControlRequest.SerializeToString, - fedn_dot_common_dot_net_dot_grpc_dot_fedn__pb2.ReportResponse.FromString, - options, channel_credentials, - insecure, call_credentials, compression, wait_for_ready, timeout, metadata) + fedn_dot_common_dot_net_dot_grpc_dot_fedn__pb2.ControlRequest.SerializeToString, + fedn_dot_common_dot_net_dot_grpc_dot_fedn__pb2.ReportResponse.FromString, + options, channel_credentials, + insecure, call_credentials, compression, wait_for_ready, timeout, metadata) class ReducerStub(object): @@ -366,10 +269,10 @@ def __init__(self, channel): channel: A grpc.Channel. """ self.GetGlobalModel = channel.unary_unary( - '/grpc.Reducer/GetGlobalModel', - request_serializer=fedn_dot_common_dot_net_dot_grpc_dot_fedn__pb2.GetGlobalModelRequest.SerializeToString, - response_deserializer=fedn_dot_common_dot_net_dot_grpc_dot_fedn__pb2.GetGlobalModelResponse.FromString, - ) + '/grpc.Reducer/GetGlobalModel', + request_serializer=fedn_dot_common_dot_net_dot_grpc_dot_fedn__pb2.GetGlobalModelRequest.SerializeToString, + response_deserializer=fedn_dot_common_dot_net_dot_grpc_dot_fedn__pb2.GetGlobalModelResponse.FromString, + ) class ReducerServicer(object): @@ -383,57 +286,38 @@ def GetGlobalModel(self, request, context): def add_ReducerServicer_to_server(servicer, server): - """ - - :param servicer: - :param server: - """ rpc_method_handlers = { - 'GetGlobalModel': grpc.unary_unary_rpc_method_handler( - servicer.GetGlobalModel, - request_deserializer=fedn_dot_common_dot_net_dot_grpc_dot_fedn__pb2.GetGlobalModelRequest.FromString, - response_serializer=fedn_dot_common_dot_net_dot_grpc_dot_fedn__pb2.GetGlobalModelResponse.SerializeToString, - ), + 'GetGlobalModel': grpc.unary_unary_rpc_method_handler( + servicer.GetGlobalModel, + request_deserializer=fedn_dot_common_dot_net_dot_grpc_dot_fedn__pb2.GetGlobalModelRequest.FromString, + response_serializer=fedn_dot_common_dot_net_dot_grpc_dot_fedn__pb2.GetGlobalModelResponse.SerializeToString, + ), } generic_handler = grpc.method_handlers_generic_handler( - 'grpc.Reducer', rpc_method_handlers) + 'grpc.Reducer', rpc_method_handlers) server.add_generic_rpc_handlers((generic_handler,)) -# This class is part of an EXPERIMENTAL API. + # This class is part of an EXPERIMENTAL API. class Reducer(object): """Missing associated documentation comment in .proto file.""" @staticmethod def GetGlobalModel(request, - target, - options=(), - channel_credentials=None, - call_credentials=None, - insecure=False, - compression=None, - wait_for_ready=None, - timeout=None, - metadata=None): - """ - - :param request: - :param target: - :param options: - :param channel_credentials: - :param call_credentials: - :param insecure: - :param compression: - :param wait_for_ready: - :param timeout: - :param metadata: - :return: - """ + target, + options=(), + channel_credentials=None, + call_credentials=None, + insecure=False, + compression=None, + wait_for_ready=None, + timeout=None, + metadata=None): return grpc.experimental.unary_unary(request, target, '/grpc.Reducer/GetGlobalModel', - fedn_dot_common_dot_net_dot_grpc_dot_fedn__pb2.GetGlobalModelRequest.SerializeToString, - fedn_dot_common_dot_net_dot_grpc_dot_fedn__pb2.GetGlobalModelResponse.FromString, - options, channel_credentials, - insecure, call_credentials, compression, wait_for_ready, timeout, metadata) + fedn_dot_common_dot_net_dot_grpc_dot_fedn__pb2.GetGlobalModelRequest.SerializeToString, + fedn_dot_common_dot_net_dot_grpc_dot_fedn__pb2.GetGlobalModelResponse.FromString, + options, channel_credentials, + insecure, call_credentials, compression, wait_for_ready, timeout, metadata) class ConnectorStub(object): @@ -446,40 +330,40 @@ def __init__(self, channel): channel: A grpc.Channel. """ self.AllianceStatusStream = channel.unary_stream( - '/grpc.Connector/AllianceStatusStream', - request_serializer=fedn_dot_common_dot_net_dot_grpc_dot_fedn__pb2.ClientAvailableMessage.SerializeToString, - response_deserializer=fedn_dot_common_dot_net_dot_grpc_dot_fedn__pb2.Status.FromString, - ) + '/grpc.Connector/AllianceStatusStream', + request_serializer=fedn_dot_common_dot_net_dot_grpc_dot_fedn__pb2.ClientAvailableMessage.SerializeToString, + response_deserializer=fedn_dot_common_dot_net_dot_grpc_dot_fedn__pb2.Status.FromString, + ) self.SendStatus = channel.unary_unary( - '/grpc.Connector/SendStatus', - request_serializer=fedn_dot_common_dot_net_dot_grpc_dot_fedn__pb2.Status.SerializeToString, - response_deserializer=fedn_dot_common_dot_net_dot_grpc_dot_fedn__pb2.Response.FromString, - ) + '/grpc.Connector/SendStatus', + request_serializer=fedn_dot_common_dot_net_dot_grpc_dot_fedn__pb2.Status.SerializeToString, + response_deserializer=fedn_dot_common_dot_net_dot_grpc_dot_fedn__pb2.Response.FromString, + ) self.ListActiveClients = channel.unary_unary( - '/grpc.Connector/ListActiveClients', - request_serializer=fedn_dot_common_dot_net_dot_grpc_dot_fedn__pb2.ListClientsRequest.SerializeToString, - response_deserializer=fedn_dot_common_dot_net_dot_grpc_dot_fedn__pb2.ClientList.FromString, - ) + '/grpc.Connector/ListActiveClients', + request_serializer=fedn_dot_common_dot_net_dot_grpc_dot_fedn__pb2.ListClientsRequest.SerializeToString, + response_deserializer=fedn_dot_common_dot_net_dot_grpc_dot_fedn__pb2.ClientList.FromString, + ) self.AcceptingClients = channel.unary_unary( - '/grpc.Connector/AcceptingClients', - request_serializer=fedn_dot_common_dot_net_dot_grpc_dot_fedn__pb2.ConnectionRequest.SerializeToString, - response_deserializer=fedn_dot_common_dot_net_dot_grpc_dot_fedn__pb2.ConnectionResponse.FromString, - ) + '/grpc.Connector/AcceptingClients', + request_serializer=fedn_dot_common_dot_net_dot_grpc_dot_fedn__pb2.ConnectionRequest.SerializeToString, + response_deserializer=fedn_dot_common_dot_net_dot_grpc_dot_fedn__pb2.ConnectionResponse.FromString, + ) self.SendHeartbeat = channel.unary_unary( - '/grpc.Connector/SendHeartbeat', - request_serializer=fedn_dot_common_dot_net_dot_grpc_dot_fedn__pb2.Heartbeat.SerializeToString, - response_deserializer=fedn_dot_common_dot_net_dot_grpc_dot_fedn__pb2.Response.FromString, - ) + '/grpc.Connector/SendHeartbeat', + request_serializer=fedn_dot_common_dot_net_dot_grpc_dot_fedn__pb2.Heartbeat.SerializeToString, + response_deserializer=fedn_dot_common_dot_net_dot_grpc_dot_fedn__pb2.Response.FromString, + ) self.ReassignClient = channel.unary_unary( - '/grpc.Connector/ReassignClient', - request_serializer=fedn_dot_common_dot_net_dot_grpc_dot_fedn__pb2.ReassignRequest.SerializeToString, - response_deserializer=fedn_dot_common_dot_net_dot_grpc_dot_fedn__pb2.Response.FromString, - ) + '/grpc.Connector/ReassignClient', + request_serializer=fedn_dot_common_dot_net_dot_grpc_dot_fedn__pb2.ReassignRequest.SerializeToString, + response_deserializer=fedn_dot_common_dot_net_dot_grpc_dot_fedn__pb2.Response.FromString, + ) self.ReconnectClient = channel.unary_unary( - '/grpc.Connector/ReconnectClient', - request_serializer=fedn_dot_common_dot_net_dot_grpc_dot_fedn__pb2.ReconnectRequest.SerializeToString, - response_deserializer=fedn_dot_common_dot_net_dot_grpc_dot_fedn__pb2.Response.FromString, - ) + '/grpc.Connector/ReconnectClient', + request_serializer=fedn_dot_common_dot_net_dot_grpc_dot_fedn__pb2.ReconnectRequest.SerializeToString, + response_deserializer=fedn_dot_common_dot_net_dot_grpc_dot_fedn__pb2.Response.FromString, + ) class ConnectorServicer(object): @@ -534,274 +418,170 @@ def ReconnectClient(self, request, context): def add_ConnectorServicer_to_server(servicer, server): - """ - - :param servicer: - :param server: - """ rpc_method_handlers = { - 'AllianceStatusStream': grpc.unary_stream_rpc_method_handler( - servicer.AllianceStatusStream, - request_deserializer=fedn_dot_common_dot_net_dot_grpc_dot_fedn__pb2.ClientAvailableMessage.FromString, - response_serializer=fedn_dot_common_dot_net_dot_grpc_dot_fedn__pb2.Status.SerializeToString, - ), - 'SendStatus': grpc.unary_unary_rpc_method_handler( - servicer.SendStatus, - request_deserializer=fedn_dot_common_dot_net_dot_grpc_dot_fedn__pb2.Status.FromString, - response_serializer=fedn_dot_common_dot_net_dot_grpc_dot_fedn__pb2.Response.SerializeToString, - ), - 'ListActiveClients': grpc.unary_unary_rpc_method_handler( - servicer.ListActiveClients, - request_deserializer=fedn_dot_common_dot_net_dot_grpc_dot_fedn__pb2.ListClientsRequest.FromString, - response_serializer=fedn_dot_common_dot_net_dot_grpc_dot_fedn__pb2.ClientList.SerializeToString, - ), - 'AcceptingClients': grpc.unary_unary_rpc_method_handler( - servicer.AcceptingClients, - request_deserializer=fedn_dot_common_dot_net_dot_grpc_dot_fedn__pb2.ConnectionRequest.FromString, - response_serializer=fedn_dot_common_dot_net_dot_grpc_dot_fedn__pb2.ConnectionResponse.SerializeToString, - ), - 'SendHeartbeat': grpc.unary_unary_rpc_method_handler( - servicer.SendHeartbeat, - request_deserializer=fedn_dot_common_dot_net_dot_grpc_dot_fedn__pb2.Heartbeat.FromString, - response_serializer=fedn_dot_common_dot_net_dot_grpc_dot_fedn__pb2.Response.SerializeToString, - ), - 'ReassignClient': grpc.unary_unary_rpc_method_handler( - servicer.ReassignClient, - request_deserializer=fedn_dot_common_dot_net_dot_grpc_dot_fedn__pb2.ReassignRequest.FromString, - response_serializer=fedn_dot_common_dot_net_dot_grpc_dot_fedn__pb2.Response.SerializeToString, - ), - 'ReconnectClient': grpc.unary_unary_rpc_method_handler( - servicer.ReconnectClient, - request_deserializer=fedn_dot_common_dot_net_dot_grpc_dot_fedn__pb2.ReconnectRequest.FromString, - response_serializer=fedn_dot_common_dot_net_dot_grpc_dot_fedn__pb2.Response.SerializeToString, - ), + 'AllianceStatusStream': grpc.unary_stream_rpc_method_handler( + servicer.AllianceStatusStream, + request_deserializer=fedn_dot_common_dot_net_dot_grpc_dot_fedn__pb2.ClientAvailableMessage.FromString, + response_serializer=fedn_dot_common_dot_net_dot_grpc_dot_fedn__pb2.Status.SerializeToString, + ), + 'SendStatus': grpc.unary_unary_rpc_method_handler( + servicer.SendStatus, + request_deserializer=fedn_dot_common_dot_net_dot_grpc_dot_fedn__pb2.Status.FromString, + response_serializer=fedn_dot_common_dot_net_dot_grpc_dot_fedn__pb2.Response.SerializeToString, + ), + 'ListActiveClients': grpc.unary_unary_rpc_method_handler( + servicer.ListActiveClients, + request_deserializer=fedn_dot_common_dot_net_dot_grpc_dot_fedn__pb2.ListClientsRequest.FromString, + response_serializer=fedn_dot_common_dot_net_dot_grpc_dot_fedn__pb2.ClientList.SerializeToString, + ), + 'AcceptingClients': grpc.unary_unary_rpc_method_handler( + servicer.AcceptingClients, + request_deserializer=fedn_dot_common_dot_net_dot_grpc_dot_fedn__pb2.ConnectionRequest.FromString, + response_serializer=fedn_dot_common_dot_net_dot_grpc_dot_fedn__pb2.ConnectionResponse.SerializeToString, + ), + 'SendHeartbeat': grpc.unary_unary_rpc_method_handler( + servicer.SendHeartbeat, + request_deserializer=fedn_dot_common_dot_net_dot_grpc_dot_fedn__pb2.Heartbeat.FromString, + response_serializer=fedn_dot_common_dot_net_dot_grpc_dot_fedn__pb2.Response.SerializeToString, + ), + 'ReassignClient': grpc.unary_unary_rpc_method_handler( + servicer.ReassignClient, + request_deserializer=fedn_dot_common_dot_net_dot_grpc_dot_fedn__pb2.ReassignRequest.FromString, + response_serializer=fedn_dot_common_dot_net_dot_grpc_dot_fedn__pb2.Response.SerializeToString, + ), + 'ReconnectClient': grpc.unary_unary_rpc_method_handler( + servicer.ReconnectClient, + request_deserializer=fedn_dot_common_dot_net_dot_grpc_dot_fedn__pb2.ReconnectRequest.FromString, + response_serializer=fedn_dot_common_dot_net_dot_grpc_dot_fedn__pb2.Response.SerializeToString, + ), } generic_handler = grpc.method_handlers_generic_handler( - 'grpc.Connector', rpc_method_handlers) + 'grpc.Connector', rpc_method_handlers) server.add_generic_rpc_handlers((generic_handler,)) -# This class is part of an EXPERIMENTAL API. + # This class is part of an EXPERIMENTAL API. class Connector(object): """Missing associated documentation comment in .proto file.""" @staticmethod def AllianceStatusStream(request, - target, - options=(), - channel_credentials=None, - call_credentials=None, - insecure=False, - compression=None, - wait_for_ready=None, - timeout=None, - metadata=None): - """ - - :param request: - :param target: - :param options: - :param channel_credentials: - :param call_credentials: - :param insecure: - :param compression: - :param wait_for_ready: - :param timeout: - :param metadata: - :return: - """ + target, + options=(), + channel_credentials=None, + call_credentials=None, + insecure=False, + compression=None, + wait_for_ready=None, + timeout=None, + metadata=None): return grpc.experimental.unary_stream(request, target, '/grpc.Connector/AllianceStatusStream', - fedn_dot_common_dot_net_dot_grpc_dot_fedn__pb2.ClientAvailableMessage.SerializeToString, - fedn_dot_common_dot_net_dot_grpc_dot_fedn__pb2.Status.FromString, - options, channel_credentials, - insecure, call_credentials, compression, wait_for_ready, timeout, - metadata) + fedn_dot_common_dot_net_dot_grpc_dot_fedn__pb2.ClientAvailableMessage.SerializeToString, + fedn_dot_common_dot_net_dot_grpc_dot_fedn__pb2.Status.FromString, + options, channel_credentials, + insecure, call_credentials, compression, wait_for_ready, timeout, metadata) @staticmethod def SendStatus(request, - target, - options=(), - channel_credentials=None, - call_credentials=None, - insecure=False, - compression=None, - wait_for_ready=None, - timeout=None, - metadata=None): - """ - - :param request: - :param target: - :param options: - :param channel_credentials: - :param call_credentials: - :param insecure: - :param compression: - :param wait_for_ready: - :param timeout: - :param metadata: - :return: - """ + target, + options=(), + channel_credentials=None, + call_credentials=None, + insecure=False, + compression=None, + wait_for_ready=None, + timeout=None, + metadata=None): return grpc.experimental.unary_unary(request, target, '/grpc.Connector/SendStatus', - fedn_dot_common_dot_net_dot_grpc_dot_fedn__pb2.Status.SerializeToString, - fedn_dot_common_dot_net_dot_grpc_dot_fedn__pb2.Response.FromString, - options, channel_credentials, - insecure, call_credentials, compression, wait_for_ready, timeout, metadata) + fedn_dot_common_dot_net_dot_grpc_dot_fedn__pb2.Status.SerializeToString, + fedn_dot_common_dot_net_dot_grpc_dot_fedn__pb2.Response.FromString, + options, channel_credentials, + insecure, call_credentials, compression, wait_for_ready, timeout, metadata) @staticmethod def ListActiveClients(request, - target, - options=(), - channel_credentials=None, - call_credentials=None, - insecure=False, - compression=None, - wait_for_ready=None, - timeout=None, - metadata=None): - """ - - :param request: - :param target: - :param options: - :param channel_credentials: - :param call_credentials: - :param insecure: - :param compression: - :param wait_for_ready: - :param timeout: - :param metadata: - :return: - """ + target, + options=(), + channel_credentials=None, + call_credentials=None, + insecure=False, + compression=None, + wait_for_ready=None, + timeout=None, + metadata=None): return grpc.experimental.unary_unary(request, target, '/grpc.Connector/ListActiveClients', - fedn_dot_common_dot_net_dot_grpc_dot_fedn__pb2.ListClientsRequest.SerializeToString, - fedn_dot_common_dot_net_dot_grpc_dot_fedn__pb2.ClientList.FromString, - options, channel_credentials, - insecure, call_credentials, compression, wait_for_ready, timeout, metadata) + fedn_dot_common_dot_net_dot_grpc_dot_fedn__pb2.ListClientsRequest.SerializeToString, + fedn_dot_common_dot_net_dot_grpc_dot_fedn__pb2.ClientList.FromString, + options, channel_credentials, + insecure, call_credentials, compression, wait_for_ready, timeout, metadata) @staticmethod def AcceptingClients(request, - target, - options=(), - channel_credentials=None, - call_credentials=None, - insecure=False, - compression=None, - wait_for_ready=None, - timeout=None, - metadata=None): - """ - - :param request: - :param target: - :param options: - :param channel_credentials: - :param call_credentials: - :param insecure: - :param compression: - :param wait_for_ready: - :param timeout: - :param metadata: - :return: - """ + target, + options=(), + channel_credentials=None, + call_credentials=None, + insecure=False, + compression=None, + wait_for_ready=None, + timeout=None, + metadata=None): return grpc.experimental.unary_unary(request, target, '/grpc.Connector/AcceptingClients', - fedn_dot_common_dot_net_dot_grpc_dot_fedn__pb2.ConnectionRequest.SerializeToString, - fedn_dot_common_dot_net_dot_grpc_dot_fedn__pb2.ConnectionResponse.FromString, - options, channel_credentials, - insecure, call_credentials, compression, wait_for_ready, timeout, metadata) + fedn_dot_common_dot_net_dot_grpc_dot_fedn__pb2.ConnectionRequest.SerializeToString, + fedn_dot_common_dot_net_dot_grpc_dot_fedn__pb2.ConnectionResponse.FromString, + options, channel_credentials, + insecure, call_credentials, compression, wait_for_ready, timeout, metadata) @staticmethod def SendHeartbeat(request, - target, - options=(), - channel_credentials=None, - call_credentials=None, - insecure=False, - compression=None, - wait_for_ready=None, - timeout=None, - metadata=None): - """ - - :param request: - :param target: - :param options: - :param channel_credentials: - :param call_credentials: - :param insecure: - :param compression: - :param wait_for_ready: - :param timeout: - :param metadata: - :return: - """ + target, + options=(), + channel_credentials=None, + call_credentials=None, + insecure=False, + compression=None, + wait_for_ready=None, + timeout=None, + metadata=None): return grpc.experimental.unary_unary(request, target, '/grpc.Connector/SendHeartbeat', - fedn_dot_common_dot_net_dot_grpc_dot_fedn__pb2.Heartbeat.SerializeToString, - fedn_dot_common_dot_net_dot_grpc_dot_fedn__pb2.Response.FromString, - options, channel_credentials, - insecure, call_credentials, compression, wait_for_ready, timeout, metadata) + fedn_dot_common_dot_net_dot_grpc_dot_fedn__pb2.Heartbeat.SerializeToString, + fedn_dot_common_dot_net_dot_grpc_dot_fedn__pb2.Response.FromString, + options, channel_credentials, + insecure, call_credentials, compression, wait_for_ready, timeout, metadata) @staticmethod def ReassignClient(request, - target, - options=(), - channel_credentials=None, - call_credentials=None, - insecure=False, - compression=None, - wait_for_ready=None, - timeout=None, - metadata=None): - """ - - :param request: - :param target: - :param options: - :param channel_credentials: - :param call_credentials: - :param insecure: - :param compression: - :param wait_for_ready: - :param timeout: - :param metadata: - :return: - """ + target, + options=(), + channel_credentials=None, + call_credentials=None, + insecure=False, + compression=None, + wait_for_ready=None, + timeout=None, + metadata=None): return grpc.experimental.unary_unary(request, target, '/grpc.Connector/ReassignClient', - fedn_dot_common_dot_net_dot_grpc_dot_fedn__pb2.ReassignRequest.SerializeToString, - fedn_dot_common_dot_net_dot_grpc_dot_fedn__pb2.Response.FromString, - options, channel_credentials, - insecure, call_credentials, compression, wait_for_ready, timeout, metadata) + fedn_dot_common_dot_net_dot_grpc_dot_fedn__pb2.ReassignRequest.SerializeToString, + fedn_dot_common_dot_net_dot_grpc_dot_fedn__pb2.Response.FromString, + options, channel_credentials, + insecure, call_credentials, compression, wait_for_ready, timeout, metadata) @staticmethod def ReconnectClient(request, - target, - options=(), - channel_credentials=None, - call_credentials=None, - insecure=False, - compression=None, - wait_for_ready=None, - timeout=None, - metadata=None): - """ - - :param request: - :param target: - :param options: - :param channel_credentials: - :param call_credentials: - :param insecure: - :param compression: - :param wait_for_ready: - :param timeout: - :param metadata: - :return: - """ + target, + options=(), + channel_credentials=None, + call_credentials=None, + insecure=False, + compression=None, + wait_for_ready=None, + timeout=None, + metadata=None): return grpc.experimental.unary_unary(request, target, '/grpc.Connector/ReconnectClient', - fedn_dot_common_dot_net_dot_grpc_dot_fedn__pb2.ReconnectRequest.SerializeToString, - fedn_dot_common_dot_net_dot_grpc_dot_fedn__pb2.Response.FromString, - options, channel_credentials, - insecure, call_credentials, compression, wait_for_ready, timeout, metadata) + fedn_dot_common_dot_net_dot_grpc_dot_fedn__pb2.ReconnectRequest.SerializeToString, + fedn_dot_common_dot_net_dot_grpc_dot_fedn__pb2.Response.FromString, + options, channel_credentials, + insecure, call_credentials, compression, wait_for_ready, timeout, metadata) class CombinerStub(object): @@ -814,45 +594,45 @@ def __init__(self, channel): channel: A grpc.Channel. """ self.ModelUpdateRequestStream = channel.unary_stream( - '/grpc.Combiner/ModelUpdateRequestStream', - request_serializer=fedn_dot_common_dot_net_dot_grpc_dot_fedn__pb2.ClientAvailableMessage.SerializeToString, - response_deserializer=fedn_dot_common_dot_net_dot_grpc_dot_fedn__pb2.ModelUpdateRequest.FromString, - ) + '/grpc.Combiner/ModelUpdateRequestStream', + request_serializer=fedn_dot_common_dot_net_dot_grpc_dot_fedn__pb2.ClientAvailableMessage.SerializeToString, + response_deserializer=fedn_dot_common_dot_net_dot_grpc_dot_fedn__pb2.ModelUpdateRequest.FromString, + ) self.ModelUpdateStream = channel.unary_stream( - '/grpc.Combiner/ModelUpdateStream', - request_serializer=fedn_dot_common_dot_net_dot_grpc_dot_fedn__pb2.ClientAvailableMessage.SerializeToString, - response_deserializer=fedn_dot_common_dot_net_dot_grpc_dot_fedn__pb2.ModelUpdate.FromString, - ) + '/grpc.Combiner/ModelUpdateStream', + request_serializer=fedn_dot_common_dot_net_dot_grpc_dot_fedn__pb2.ClientAvailableMessage.SerializeToString, + response_deserializer=fedn_dot_common_dot_net_dot_grpc_dot_fedn__pb2.ModelUpdate.FromString, + ) self.ModelValidationRequestStream = channel.unary_stream( - '/grpc.Combiner/ModelValidationRequestStream', - request_serializer=fedn_dot_common_dot_net_dot_grpc_dot_fedn__pb2.ClientAvailableMessage.SerializeToString, - response_deserializer=fedn_dot_common_dot_net_dot_grpc_dot_fedn__pb2.ModelValidationRequest.FromString, - ) + '/grpc.Combiner/ModelValidationRequestStream', + request_serializer=fedn_dot_common_dot_net_dot_grpc_dot_fedn__pb2.ClientAvailableMessage.SerializeToString, + response_deserializer=fedn_dot_common_dot_net_dot_grpc_dot_fedn__pb2.ModelValidationRequest.FromString, + ) self.ModelValidationStream = channel.unary_stream( - '/grpc.Combiner/ModelValidationStream', - request_serializer=fedn_dot_common_dot_net_dot_grpc_dot_fedn__pb2.ClientAvailableMessage.SerializeToString, - response_deserializer=fedn_dot_common_dot_net_dot_grpc_dot_fedn__pb2.ModelValidation.FromString, - ) + '/grpc.Combiner/ModelValidationStream', + request_serializer=fedn_dot_common_dot_net_dot_grpc_dot_fedn__pb2.ClientAvailableMessage.SerializeToString, + response_deserializer=fedn_dot_common_dot_net_dot_grpc_dot_fedn__pb2.ModelValidation.FromString, + ) self.SendModelUpdateRequest = channel.unary_unary( - '/grpc.Combiner/SendModelUpdateRequest', - request_serializer=fedn_dot_common_dot_net_dot_grpc_dot_fedn__pb2.ModelUpdateRequest.SerializeToString, - response_deserializer=fedn_dot_common_dot_net_dot_grpc_dot_fedn__pb2.Response.FromString, - ) + '/grpc.Combiner/SendModelUpdateRequest', + request_serializer=fedn_dot_common_dot_net_dot_grpc_dot_fedn__pb2.ModelUpdateRequest.SerializeToString, + response_deserializer=fedn_dot_common_dot_net_dot_grpc_dot_fedn__pb2.Response.FromString, + ) self.SendModelUpdate = channel.unary_unary( - '/grpc.Combiner/SendModelUpdate', - request_serializer=fedn_dot_common_dot_net_dot_grpc_dot_fedn__pb2.ModelUpdate.SerializeToString, - response_deserializer=fedn_dot_common_dot_net_dot_grpc_dot_fedn__pb2.Response.FromString, - ) + '/grpc.Combiner/SendModelUpdate', + request_serializer=fedn_dot_common_dot_net_dot_grpc_dot_fedn__pb2.ModelUpdate.SerializeToString, + response_deserializer=fedn_dot_common_dot_net_dot_grpc_dot_fedn__pb2.Response.FromString, + ) self.SendModelValidationRequest = channel.unary_unary( - '/grpc.Combiner/SendModelValidationRequest', - request_serializer=fedn_dot_common_dot_net_dot_grpc_dot_fedn__pb2.ModelValidationRequest.SerializeToString, - response_deserializer=fedn_dot_common_dot_net_dot_grpc_dot_fedn__pb2.Response.FromString, - ) + '/grpc.Combiner/SendModelValidationRequest', + request_serializer=fedn_dot_common_dot_net_dot_grpc_dot_fedn__pb2.ModelValidationRequest.SerializeToString, + response_deserializer=fedn_dot_common_dot_net_dot_grpc_dot_fedn__pb2.Response.FromString, + ) self.SendModelValidation = channel.unary_unary( - '/grpc.Combiner/SendModelValidation', - request_serializer=fedn_dot_common_dot_net_dot_grpc_dot_fedn__pb2.ModelValidation.SerializeToString, - response_deserializer=fedn_dot_common_dot_net_dot_grpc_dot_fedn__pb2.Response.FromString, - ) + '/grpc.Combiner/SendModelValidation', + request_serializer=fedn_dot_common_dot_net_dot_grpc_dot_fedn__pb2.ModelValidation.SerializeToString, + response_deserializer=fedn_dot_common_dot_net_dot_grpc_dot_fedn__pb2.Response.FromString, + ) class CombinerServicer(object): @@ -909,310 +689,189 @@ def SendModelValidation(self, request, context): def add_CombinerServicer_to_server(servicer, server): - """ - - :param servicer: - :param server: - """ rpc_method_handlers = { - 'ModelUpdateRequestStream': grpc.unary_stream_rpc_method_handler( - servicer.ModelUpdateRequestStream, - request_deserializer=fedn_dot_common_dot_net_dot_grpc_dot_fedn__pb2.ClientAvailableMessage.FromString, - response_serializer=fedn_dot_common_dot_net_dot_grpc_dot_fedn__pb2.ModelUpdateRequest.SerializeToString, - ), - 'ModelUpdateStream': grpc.unary_stream_rpc_method_handler( - servicer.ModelUpdateStream, - request_deserializer=fedn_dot_common_dot_net_dot_grpc_dot_fedn__pb2.ClientAvailableMessage.FromString, - response_serializer=fedn_dot_common_dot_net_dot_grpc_dot_fedn__pb2.ModelUpdate.SerializeToString, - ), - 'ModelValidationRequestStream': grpc.unary_stream_rpc_method_handler( - servicer.ModelValidationRequestStream, - request_deserializer=fedn_dot_common_dot_net_dot_grpc_dot_fedn__pb2.ClientAvailableMessage.FromString, - response_serializer=fedn_dot_common_dot_net_dot_grpc_dot_fedn__pb2.ModelValidationRequest.SerializeToString, - ), - 'ModelValidationStream': grpc.unary_stream_rpc_method_handler( - servicer.ModelValidationStream, - request_deserializer=fedn_dot_common_dot_net_dot_grpc_dot_fedn__pb2.ClientAvailableMessage.FromString, - response_serializer=fedn_dot_common_dot_net_dot_grpc_dot_fedn__pb2.ModelValidation.SerializeToString, - ), - 'SendModelUpdateRequest': grpc.unary_unary_rpc_method_handler( - servicer.SendModelUpdateRequest, - request_deserializer=fedn_dot_common_dot_net_dot_grpc_dot_fedn__pb2.ModelUpdateRequest.FromString, - response_serializer=fedn_dot_common_dot_net_dot_grpc_dot_fedn__pb2.Response.SerializeToString, - ), - 'SendModelUpdate': grpc.unary_unary_rpc_method_handler( - servicer.SendModelUpdate, - request_deserializer=fedn_dot_common_dot_net_dot_grpc_dot_fedn__pb2.ModelUpdate.FromString, - response_serializer=fedn_dot_common_dot_net_dot_grpc_dot_fedn__pb2.Response.SerializeToString, - ), - 'SendModelValidationRequest': grpc.unary_unary_rpc_method_handler( - servicer.SendModelValidationRequest, - request_deserializer=fedn_dot_common_dot_net_dot_grpc_dot_fedn__pb2.ModelValidationRequest.FromString, - response_serializer=fedn_dot_common_dot_net_dot_grpc_dot_fedn__pb2.Response.SerializeToString, - ), - 'SendModelValidation': grpc.unary_unary_rpc_method_handler( - servicer.SendModelValidation, - request_deserializer=fedn_dot_common_dot_net_dot_grpc_dot_fedn__pb2.ModelValidation.FromString, - response_serializer=fedn_dot_common_dot_net_dot_grpc_dot_fedn__pb2.Response.SerializeToString, - ), + 'ModelUpdateRequestStream': grpc.unary_stream_rpc_method_handler( + servicer.ModelUpdateRequestStream, + request_deserializer=fedn_dot_common_dot_net_dot_grpc_dot_fedn__pb2.ClientAvailableMessage.FromString, + response_serializer=fedn_dot_common_dot_net_dot_grpc_dot_fedn__pb2.ModelUpdateRequest.SerializeToString, + ), + 'ModelUpdateStream': grpc.unary_stream_rpc_method_handler( + servicer.ModelUpdateStream, + request_deserializer=fedn_dot_common_dot_net_dot_grpc_dot_fedn__pb2.ClientAvailableMessage.FromString, + response_serializer=fedn_dot_common_dot_net_dot_grpc_dot_fedn__pb2.ModelUpdate.SerializeToString, + ), + 'ModelValidationRequestStream': grpc.unary_stream_rpc_method_handler( + servicer.ModelValidationRequestStream, + request_deserializer=fedn_dot_common_dot_net_dot_grpc_dot_fedn__pb2.ClientAvailableMessage.FromString, + response_serializer=fedn_dot_common_dot_net_dot_grpc_dot_fedn__pb2.ModelValidationRequest.SerializeToString, + ), + 'ModelValidationStream': grpc.unary_stream_rpc_method_handler( + servicer.ModelValidationStream, + request_deserializer=fedn_dot_common_dot_net_dot_grpc_dot_fedn__pb2.ClientAvailableMessage.FromString, + response_serializer=fedn_dot_common_dot_net_dot_grpc_dot_fedn__pb2.ModelValidation.SerializeToString, + ), + 'SendModelUpdateRequest': grpc.unary_unary_rpc_method_handler( + servicer.SendModelUpdateRequest, + request_deserializer=fedn_dot_common_dot_net_dot_grpc_dot_fedn__pb2.ModelUpdateRequest.FromString, + response_serializer=fedn_dot_common_dot_net_dot_grpc_dot_fedn__pb2.Response.SerializeToString, + ), + 'SendModelUpdate': grpc.unary_unary_rpc_method_handler( + servicer.SendModelUpdate, + request_deserializer=fedn_dot_common_dot_net_dot_grpc_dot_fedn__pb2.ModelUpdate.FromString, + response_serializer=fedn_dot_common_dot_net_dot_grpc_dot_fedn__pb2.Response.SerializeToString, + ), + 'SendModelValidationRequest': grpc.unary_unary_rpc_method_handler( + servicer.SendModelValidationRequest, + request_deserializer=fedn_dot_common_dot_net_dot_grpc_dot_fedn__pb2.ModelValidationRequest.FromString, + response_serializer=fedn_dot_common_dot_net_dot_grpc_dot_fedn__pb2.Response.SerializeToString, + ), + 'SendModelValidation': grpc.unary_unary_rpc_method_handler( + servicer.SendModelValidation, + request_deserializer=fedn_dot_common_dot_net_dot_grpc_dot_fedn__pb2.ModelValidation.FromString, + response_serializer=fedn_dot_common_dot_net_dot_grpc_dot_fedn__pb2.Response.SerializeToString, + ), } generic_handler = grpc.method_handlers_generic_handler( - 'grpc.Combiner', rpc_method_handlers) + 'grpc.Combiner', rpc_method_handlers) server.add_generic_rpc_handlers((generic_handler,)) -# This class is part of an EXPERIMENTAL API. + # This class is part of an EXPERIMENTAL API. class Combiner(object): """Missing associated documentation comment in .proto file.""" @staticmethod def ModelUpdateRequestStream(request, - target, - options=(), - channel_credentials=None, - call_credentials=None, - insecure=False, - compression=None, - wait_for_ready=None, - timeout=None, - metadata=None): - """ - - :param request: - :param target: - :param options: - :param channel_credentials: - :param call_credentials: - :param insecure: - :param compression: - :param wait_for_ready: - :param timeout: - :param metadata: - :return: - """ + target, + options=(), + channel_credentials=None, + call_credentials=None, + insecure=False, + compression=None, + wait_for_ready=None, + timeout=None, + metadata=None): return grpc.experimental.unary_stream(request, target, '/grpc.Combiner/ModelUpdateRequestStream', - fedn_dot_common_dot_net_dot_grpc_dot_fedn__pb2.ClientAvailableMessage.SerializeToString, - fedn_dot_common_dot_net_dot_grpc_dot_fedn__pb2.ModelUpdateRequest.FromString, - options, channel_credentials, - insecure, call_credentials, compression, wait_for_ready, timeout, - metadata) + fedn_dot_common_dot_net_dot_grpc_dot_fedn__pb2.ClientAvailableMessage.SerializeToString, + fedn_dot_common_dot_net_dot_grpc_dot_fedn__pb2.ModelUpdateRequest.FromString, + options, channel_credentials, + insecure, call_credentials, compression, wait_for_ready, timeout, metadata) @staticmethod def ModelUpdateStream(request, - target, - options=(), - channel_credentials=None, - call_credentials=None, - insecure=False, - compression=None, - wait_for_ready=None, - timeout=None, - metadata=None): - """ - - :param request: - :param target: - :param options: - :param channel_credentials: - :param call_credentials: - :param insecure: - :param compression: - :param wait_for_ready: - :param timeout: - :param metadata: - :return: - """ + target, + options=(), + channel_credentials=None, + call_credentials=None, + insecure=False, + compression=None, + wait_for_ready=None, + timeout=None, + metadata=None): return grpc.experimental.unary_stream(request, target, '/grpc.Combiner/ModelUpdateStream', - fedn_dot_common_dot_net_dot_grpc_dot_fedn__pb2.ClientAvailableMessage.SerializeToString, - fedn_dot_common_dot_net_dot_grpc_dot_fedn__pb2.ModelUpdate.FromString, - options, channel_credentials, - insecure, call_credentials, compression, wait_for_ready, timeout, - metadata) + fedn_dot_common_dot_net_dot_grpc_dot_fedn__pb2.ClientAvailableMessage.SerializeToString, + fedn_dot_common_dot_net_dot_grpc_dot_fedn__pb2.ModelUpdate.FromString, + options, channel_credentials, + insecure, call_credentials, compression, wait_for_ready, timeout, metadata) @staticmethod def ModelValidationRequestStream(request, - target, - options=(), - channel_credentials=None, - call_credentials=None, - insecure=False, - compression=None, - wait_for_ready=None, - timeout=None, - metadata=None): - """ - - :param request: - :param target: - :param options: - :param channel_credentials: - :param call_credentials: - :param insecure: - :param compression: - :param wait_for_ready: - :param timeout: - :param metadata: - :return: - """ + target, + options=(), + channel_credentials=None, + call_credentials=None, + insecure=False, + compression=None, + wait_for_ready=None, + timeout=None, + metadata=None): return grpc.experimental.unary_stream(request, target, '/grpc.Combiner/ModelValidationRequestStream', - fedn_dot_common_dot_net_dot_grpc_dot_fedn__pb2.ClientAvailableMessage.SerializeToString, - fedn_dot_common_dot_net_dot_grpc_dot_fedn__pb2.ModelValidationRequest.FromString, - options, channel_credentials, - insecure, call_credentials, compression, wait_for_ready, timeout, - metadata) + fedn_dot_common_dot_net_dot_grpc_dot_fedn__pb2.ClientAvailableMessage.SerializeToString, + fedn_dot_common_dot_net_dot_grpc_dot_fedn__pb2.ModelValidationRequest.FromString, + options, channel_credentials, + insecure, call_credentials, compression, wait_for_ready, timeout, metadata) @staticmethod def ModelValidationStream(request, - target, - options=(), - channel_credentials=None, - call_credentials=None, - insecure=False, - compression=None, - wait_for_ready=None, - timeout=None, - metadata=None): - """ - - :param request: - :param target: - :param options: - :param channel_credentials: - :param call_credentials: - :param insecure: - :param compression: - :param wait_for_ready: - :param timeout: - :param metadata: - :return: - """ + target, + options=(), + channel_credentials=None, + call_credentials=None, + insecure=False, + compression=None, + wait_for_ready=None, + timeout=None, + metadata=None): return grpc.experimental.unary_stream(request, target, '/grpc.Combiner/ModelValidationStream', - fedn_dot_common_dot_net_dot_grpc_dot_fedn__pb2.ClientAvailableMessage.SerializeToString, - fedn_dot_common_dot_net_dot_grpc_dot_fedn__pb2.ModelValidation.FromString, - options, channel_credentials, - insecure, call_credentials, compression, wait_for_ready, timeout, - metadata) + fedn_dot_common_dot_net_dot_grpc_dot_fedn__pb2.ClientAvailableMessage.SerializeToString, + fedn_dot_common_dot_net_dot_grpc_dot_fedn__pb2.ModelValidation.FromString, + options, channel_credentials, + insecure, call_credentials, compression, wait_for_ready, timeout, metadata) @staticmethod def SendModelUpdateRequest(request, - target, - options=(), - channel_credentials=None, - call_credentials=None, - insecure=False, - compression=None, - wait_for_ready=None, - timeout=None, - metadata=None): - """ - - :param request: - :param target: - :param options: - :param channel_credentials: - :param call_credentials: - :param insecure: - :param compression: - :param wait_for_ready: - :param timeout: - :param metadata: - :return: - """ + target, + options=(), + channel_credentials=None, + call_credentials=None, + insecure=False, + compression=None, + wait_for_ready=None, + timeout=None, + metadata=None): return grpc.experimental.unary_unary(request, target, '/grpc.Combiner/SendModelUpdateRequest', - fedn_dot_common_dot_net_dot_grpc_dot_fedn__pb2.ModelUpdateRequest.SerializeToString, - fedn_dot_common_dot_net_dot_grpc_dot_fedn__pb2.Response.FromString, - options, channel_credentials, - insecure, call_credentials, compression, wait_for_ready, timeout, metadata) + fedn_dot_common_dot_net_dot_grpc_dot_fedn__pb2.ModelUpdateRequest.SerializeToString, + fedn_dot_common_dot_net_dot_grpc_dot_fedn__pb2.Response.FromString, + options, channel_credentials, + insecure, call_credentials, compression, wait_for_ready, timeout, metadata) @staticmethod def SendModelUpdate(request, - target, - options=(), - channel_credentials=None, - call_credentials=None, - insecure=False, - compression=None, - wait_for_ready=None, - timeout=None, - metadata=None): - """ - - :param request: - :param target: - :param options: - :param channel_credentials: - :param call_credentials: - :param insecure: - :param compression: - :param wait_for_ready: - :param timeout: - :param metadata: - :return: - """ + target, + options=(), + channel_credentials=None, + call_credentials=None, + insecure=False, + compression=None, + wait_for_ready=None, + timeout=None, + metadata=None): return grpc.experimental.unary_unary(request, target, '/grpc.Combiner/SendModelUpdate', - fedn_dot_common_dot_net_dot_grpc_dot_fedn__pb2.ModelUpdate.SerializeToString, - fedn_dot_common_dot_net_dot_grpc_dot_fedn__pb2.Response.FromString, - options, channel_credentials, - insecure, call_credentials, compression, wait_for_ready, timeout, metadata) + fedn_dot_common_dot_net_dot_grpc_dot_fedn__pb2.ModelUpdate.SerializeToString, + fedn_dot_common_dot_net_dot_grpc_dot_fedn__pb2.Response.FromString, + options, channel_credentials, + insecure, call_credentials, compression, wait_for_ready, timeout, metadata) @staticmethod def SendModelValidationRequest(request, - target, - options=(), - channel_credentials=None, - call_credentials=None, - insecure=False, - compression=None, - wait_for_ready=None, - timeout=None, - metadata=None): - """ - - :param request: - :param target: - :param options: - :param channel_credentials: - :param call_credentials: - :param insecure: - :param compression: - :param wait_for_ready: - :param timeout: - :param metadata: - :return: - """ + target, + options=(), + channel_credentials=None, + call_credentials=None, + insecure=False, + compression=None, + wait_for_ready=None, + timeout=None, + metadata=None): return grpc.experimental.unary_unary(request, target, '/grpc.Combiner/SendModelValidationRequest', - fedn_dot_common_dot_net_dot_grpc_dot_fedn__pb2.ModelValidationRequest.SerializeToString, - fedn_dot_common_dot_net_dot_grpc_dot_fedn__pb2.Response.FromString, - options, channel_credentials, - insecure, call_credentials, compression, wait_for_ready, timeout, metadata) + fedn_dot_common_dot_net_dot_grpc_dot_fedn__pb2.ModelValidationRequest.SerializeToString, + fedn_dot_common_dot_net_dot_grpc_dot_fedn__pb2.Response.FromString, + options, channel_credentials, + insecure, call_credentials, compression, wait_for_ready, timeout, metadata) @staticmethod def SendModelValidation(request, - target, - options=(), - channel_credentials=None, - call_credentials=None, - insecure=False, - compression=None, - wait_for_ready=None, - timeout=None, - metadata=None): - """ - - :param request: - :param target: - :param options: - :param channel_credentials: - :param call_credentials: - :param insecure: - :param compression: - :param wait_for_ready: - :param timeout: - :param metadata: - :return: - """ + target, + options=(), + channel_credentials=None, + call_credentials=None, + insecure=False, + compression=None, + wait_for_ready=None, + timeout=None, + metadata=None): return grpc.experimental.unary_unary(request, target, '/grpc.Combiner/SendModelValidation', - fedn_dot_common_dot_net_dot_grpc_dot_fedn__pb2.ModelValidation.SerializeToString, - fedn_dot_common_dot_net_dot_grpc_dot_fedn__pb2.Response.FromString, - options, channel_credentials, - insecure, call_credentials, compression, wait_for_ready, timeout, metadata) + fedn_dot_common_dot_net_dot_grpc_dot_fedn__pb2.ModelValidation.SerializeToString, + fedn_dot_common_dot_net_dot_grpc_dot_fedn__pb2.Response.FromString, + options, channel_credentials, + insecure, call_credentials, compression, wait_for_ready, timeout, metadata) From 31cbd5e979b5a5bf1568b26d72eade53a0f2c255 Mon Sep 17 00:00:00 2001 From: mcapuccini Date: Wed, 1 Jun 2022 11:24:27 +0000 Subject: [PATCH 010/185] fixing formatting --- fedn/fedn/clients/combiner/modelservice.py | 2 +- fedn/fedn/clients/reducer/restservice.py | 7 +- fedn/fedn/common/net/grpc/fedn_pb2.py | 3230 ++++++++++---------- fedn/fedn/common/net/grpc/fedn_pb2_grpc.py | 996 +++--- 4 files changed, 2120 insertions(+), 2115 deletions(-) diff --git a/fedn/fedn/clients/combiner/modelservice.py b/fedn/fedn/clients/combiner/modelservice.py index b5cd35de7..b5105efef 100644 --- a/fedn/fedn/clients/combiner/modelservice.py +++ b/fedn/fedn/clients/combiner/modelservice.py @@ -102,7 +102,7 @@ def Upload(self, request_iterator, context): if request.status == fedn.ModelStatus.OK and not request.data: result = fedn.ModelResponse(id=request.id, status=fedn.ModelStatus.OK, - message="Got model successfully.") + message="Got model successfully.") # self.models_metadata.update({request.id: fedn.ModelStatus.OK}) self.models.set_meta(request.id, fedn.ModelStatus.OK) self.models.get_ptr(request.id).flush() diff --git a/fedn/fedn/clients/reducer/restservice.py b/fedn/fedn/clients/reducer/restservice.py index d12625f54..992933c5a 100644 --- a/fedn/fedn/clients/reducer/restservice.py +++ b/fedn/fedn/clients/reducer/restservice.py @@ -14,15 +14,16 @@ import pandas as pd import plotly import plotly.express as px -from fedn.clients.reducer.interfaces import CombinerInterface -from fedn.clients.reducer.plots import Plot -from fedn.clients.reducer.state import ReducerState, ReducerStateToString from flask import (Flask, abort, flash, jsonify, make_response, redirect, render_template, request, url_for) from idna import check_initial_combiner from tenacity import retry from werkzeug.utils import secure_filename +from fedn.clients.reducer.interfaces import CombinerInterface +from fedn.clients.reducer.plots import Plot +from fedn.clients.reducer.state import ReducerState, ReducerStateToString + UPLOAD_FOLDER = '/app/client/package/' ALLOWED_EXTENSIONS = {'gz', 'bz2', 'tar', 'zip', 'tgz'} diff --git a/fedn/fedn/common/net/grpc/fedn_pb2.py b/fedn/fedn/common/net/grpc/fedn_pb2.py index 82640eb28..f98b8f3b2 100644 --- a/fedn/fedn/common/net/grpc/fedn_pb2.py +++ b/fedn/fedn/common/net/grpc/fedn_pb2.py @@ -2,259 +2,258 @@ # Generated by the protocol buffer compiler. DO NOT EDIT! # source: fedn/common/net/grpc/fedn.proto """Generated protocol buffer code.""" -from google.protobuf.internal import enum_type_wrapper from google.protobuf import descriptor as _descriptor from google.protobuf import message as _message from google.protobuf import reflection as _reflection from google.protobuf import symbol_database as _symbol_database +from google.protobuf.internal import enum_type_wrapper + # @@protoc_insertion_point(imports) _sym_db = _symbol_database.Default() - - DESCRIPTOR = _descriptor.FileDescriptor( - name='fedn/common/net/grpc/fedn.proto', - package='grpc', - syntax='proto3', - serialized_options=None, - create_key=_descriptor._internal_create_key, - serialized_pb=b'\n\x1f\x66\x65\x64n/common/net/grpc/fedn.proto\x12\x04grpc\":\n\x08Response\x12\x1c\n\x06sender\x18\x01 \x01(\x0b\x32\x0c.grpc.Client\x12\x10\n\x08response\x18\x02 \x01(\t\"\x8c\x02\n\x06Status\x12\x1c\n\x06sender\x18\x01 \x01(\x0b\x32\x0c.grpc.Client\x12\x0e\n\x06status\x18\x02 \x01(\t\x12(\n\tlog_level\x18\x03 \x01(\x0e\x32\x15.grpc.Status.LogLevel\x12\x0c\n\x04\x64\x61ta\x18\x04 \x01(\t\x12\x16\n\x0e\x63orrelation_id\x18\x05 \x01(\t\x12\x11\n\ttimestamp\x18\x06 \x01(\t\x12\x1e\n\x04type\x18\x07 \x01(\x0e\x32\x10.grpc.StatusType\x12\r\n\x05\x65xtra\x18\x08 \x01(\t\"B\n\x08LogLevel\x12\x08\n\x04INFO\x10\x00\x12\t\n\x05\x44\x45\x42UG\x10\x01\x12\x0b\n\x07WARNING\x10\x02\x12\t\n\x05\x45RROR\x10\x03\x12\t\n\x05\x41UDIT\x10\x04\"\x9d\x01\n\x12ModelUpdateRequest\x12\x1c\n\x06sender\x18\x01 \x01(\x0b\x32\x0c.grpc.Client\x12\x1e\n\x08receiver\x18\x02 \x01(\x0b\x32\x0c.grpc.Client\x12\x10\n\x08model_id\x18\x03 \x01(\t\x12\x0c\n\x04\x64\x61ta\x18\x04 \x01(\t\x12\x16\n\x0e\x63orrelation_id\x18\x05 \x01(\t\x12\x11\n\ttimestamp\x18\x06 \x01(\t\"\xaf\x01\n\x0bModelUpdate\x12\x1c\n\x06sender\x18\x01 \x01(\x0b\x32\x0c.grpc.Client\x12\x1e\n\x08receiver\x18\x02 \x01(\x0b\x32\x0c.grpc.Client\x12\x10\n\x08model_id\x18\x03 \x01(\t\x12\x17\n\x0fmodel_update_id\x18\x04 \x01(\t\x12\x16\n\x0e\x63orrelation_id\x18\x05 \x01(\t\x12\x11\n\ttimestamp\x18\x06 \x01(\t\x12\x0c\n\x04meta\x18\x07 \x01(\t\"\xb7\x01\n\x16ModelValidationRequest\x12\x1c\n\x06sender\x18\x01 \x01(\x0b\x32\x0c.grpc.Client\x12\x1e\n\x08receiver\x18\x02 \x01(\x0b\x32\x0c.grpc.Client\x12\x10\n\x08model_id\x18\x03 \x01(\t\x12\x0c\n\x04\x64\x61ta\x18\x04 \x01(\t\x12\x16\n\x0e\x63orrelation_id\x18\x05 \x01(\t\x12\x11\n\ttimestamp\x18\x06 \x01(\t\x12\x14\n\x0cis_inference\x18\x07 \x01(\x08\"\xa8\x01\n\x0fModelValidation\x12\x1c\n\x06sender\x18\x01 \x01(\x0b\x32\x0c.grpc.Client\x12\x1e\n\x08receiver\x18\x02 \x01(\x0b\x32\x0c.grpc.Client\x12\x10\n\x08model_id\x18\x03 \x01(\t\x12\x0c\n\x04\x64\x61ta\x18\x04 \x01(\t\x12\x16\n\x0e\x63orrelation_id\x18\x05 \x01(\t\x12\x11\n\ttimestamp\x18\x06 \x01(\t\x12\x0c\n\x04meta\x18\x07 \x01(\t\"\x89\x01\n\x0cModelRequest\x12\x1c\n\x06sender\x18\x01 \x01(\x0b\x32\x0c.grpc.Client\x12\x1e\n\x08receiver\x18\x02 \x01(\x0b\x32\x0c.grpc.Client\x12\x0c\n\x04\x64\x61ta\x18\x03 \x01(\x0c\x12\n\n\x02id\x18\x04 \x01(\t\x12!\n\x06status\x18\x05 \x01(\x0e\x32\x11.grpc.ModelStatus\"]\n\rModelResponse\x12\x0c\n\x04\x64\x61ta\x18\x01 \x01(\x0c\x12\n\n\x02id\x18\x02 \x01(\t\x12!\n\x06status\x18\x03 \x01(\x0e\x32\x11.grpc.ModelStatus\x12\x0f\n\x07message\x18\x04 \x01(\t\"U\n\x15GetGlobalModelRequest\x12\x1c\n\x06sender\x18\x01 \x01(\x0b\x32\x0c.grpc.Client\x12\x1e\n\x08receiver\x18\x02 \x01(\x0b\x32\x0c.grpc.Client\"h\n\x16GetGlobalModelResponse\x12\x1c\n\x06sender\x18\x01 \x01(\x0b\x32\x0c.grpc.Client\x12\x1e\n\x08receiver\x18\x02 \x01(\x0b\x32\x0c.grpc.Client\x12\x10\n\x08model_id\x18\x03 \x01(\t\")\n\tHeartbeat\x12\x1c\n\x06sender\x18\x01 \x01(\x0b\x32\x0c.grpc.Client\"W\n\x16\x43lientAvailableMessage\x12\x1c\n\x06sender\x18\x01 \x01(\x0b\x32\x0c.grpc.Client\x12\x0c\n\x04\x64\x61ta\x18\x02 \x01(\t\x12\x11\n\ttimestamp\x18\x03 \x01(\t\"R\n\x12ListClientsRequest\x12\x1c\n\x06sender\x18\x01 \x01(\x0b\x32\x0c.grpc.Client\x12\x1e\n\x07\x63hannel\x18\x02 \x01(\x0e\x32\r.grpc.Channel\"*\n\nClientList\x12\x1c\n\x06\x63lient\x18\x01 \x03(\x0b\x32\x0c.grpc.Client\"0\n\x06\x43lient\x12\x18\n\x04role\x18\x01 \x01(\x0e\x32\n.grpc.Role\x12\x0c\n\x04name\x18\x02 \x01(\t\"m\n\x0fReassignRequest\x12\x1c\n\x06sender\x18\x01 \x01(\x0b\x32\x0c.grpc.Client\x12\x1e\n\x08receiver\x18\x02 \x01(\x0b\x32\x0c.grpc.Client\x12\x0e\n\x06server\x18\x03 \x01(\t\x12\x0c\n\x04port\x18\x04 \x01(\r\"c\n\x10ReconnectRequest\x12\x1c\n\x06sender\x18\x01 \x01(\x0b\x32\x0c.grpc.Client\x12\x1e\n\x08receiver\x18\x02 \x01(\x0b\x32\x0c.grpc.Client\x12\x11\n\treconnect\x18\x03 \x01(\r\"\'\n\tParameter\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\r\n\x05value\x18\x02 \x01(\t\"T\n\x0e\x43ontrolRequest\x12\x1e\n\x07\x63ommand\x18\x01 \x01(\x0e\x32\r.grpc.Command\x12\"\n\tparameter\x18\x02 \x03(\x0b\x32\x0f.grpc.Parameter\"F\n\x0f\x43ontrolResponse\x12\x0f\n\x07message\x18\x01 \x01(\t\x12\"\n\tparameter\x18\x02 \x03(\x0b\x32\x0f.grpc.Parameter\"R\n\x0eReportResponse\x12\x1c\n\x06sender\x18\x01 \x01(\x0b\x32\x0c.grpc.Client\x12\"\n\tparameter\x18\x02 \x03(\x0b\x32\x0f.grpc.Parameter\"\x13\n\x11\x43onnectionRequest\"<\n\x12\x43onnectionResponse\x12&\n\x06status\x18\x01 \x01(\x0e\x32\x16.grpc.ConnectionStatus*u\n\nStatusType\x12\x07\n\x03LOG\x10\x00\x12\x18\n\x14MODEL_UPDATE_REQUEST\x10\x01\x12\x10\n\x0cMODEL_UPDATE\x10\x02\x12\x1c\n\x18MODEL_VALIDATION_REQUEST\x10\x03\x12\x14\n\x10MODEL_VALIDATION\x10\x04*\x86\x01\n\x07\x43hannel\x12\x0b\n\x07\x44\x45\x46\x41ULT\x10\x00\x12\x19\n\x15MODEL_UPDATE_REQUESTS\x10\x01\x12\x11\n\rMODEL_UPDATES\x10\x02\x12\x1d\n\x19MODEL_VALIDATION_REQUESTS\x10\x03\x12\x15\n\x11MODEL_VALIDATIONS\x10\x04\x12\n\n\x06STATUS\x10\x05*F\n\x0bModelStatus\x12\x06\n\x02OK\x10\x00\x12\x0f\n\x0bIN_PROGRESS\x10\x01\x12\x12\n\x0eIN_PROGRESS_OK\x10\x02\x12\n\n\x06\x46\x41ILED\x10\x03*8\n\x04Role\x12\n\n\x06WORKER\x10\x00\x12\x0c\n\x08\x43OMBINER\x10\x01\x12\x0b\n\x07REDUCER\x10\x02\x12\t\n\x05OTHER\x10\x03*J\n\x07\x43ommand\x12\x08\n\x04IDLE\x10\x00\x12\t\n\x05START\x10\x01\x12\t\n\x05PAUSE\x10\x02\x12\x08\n\x04STOP\x10\x03\x12\t\n\x05RESET\x10\x04\x12\n\n\x06REPORT\x10\x05*I\n\x10\x43onnectionStatus\x12\x11\n\rNOT_ACCEPTING\x10\x00\x12\r\n\tACCEPTING\x10\x01\x12\x13\n\x0fTRY_AGAIN_LATER\x10\x02\x32z\n\x0cModelService\x12\x33\n\x06Upload\x12\x12.grpc.ModelRequest\x1a\x13.grpc.ModelResponse(\x01\x12\x35\n\x08\x44ownload\x12\x12.grpc.ModelRequest\x1a\x13.grpc.ModelResponse0\x01\x32\xe3\x01\n\x07\x43ontrol\x12\x34\n\x05Start\x12\x14.grpc.ControlRequest\x1a\x15.grpc.ControlResponse\x12\x33\n\x04Stop\x12\x14.grpc.ControlRequest\x1a\x15.grpc.ControlResponse\x12\x37\n\tConfigure\x12\x14.grpc.ControlRequest\x1a\x14.grpc.ReportResponse\x12\x34\n\x06Report\x12\x14.grpc.ControlRequest\x1a\x14.grpc.ReportResponse2V\n\x07Reducer\x12K\n\x0eGetGlobalModel\x12\x1b.grpc.GetGlobalModelRequest\x1a\x1c.grpc.GetGlobalModelResponse2\xab\x03\n\tConnector\x12\x44\n\x14\x41llianceStatusStream\x12\x1c.grpc.ClientAvailableMessage\x1a\x0c.grpc.Status0\x01\x12*\n\nSendStatus\x12\x0c.grpc.Status\x1a\x0e.grpc.Response\x12?\n\x11ListActiveClients\x12\x18.grpc.ListClientsRequest\x1a\x10.grpc.ClientList\x12\x45\n\x10\x41\x63\x63\x65ptingClients\x12\x17.grpc.ConnectionRequest\x1a\x18.grpc.ConnectionResponse\x12\x30\n\rSendHeartbeat\x12\x0f.grpc.Heartbeat\x1a\x0e.grpc.Response\x12\x37\n\x0eReassignClient\x12\x15.grpc.ReassignRequest\x1a\x0e.grpc.Response\x12\x39\n\x0fReconnectClient\x12\x16.grpc.ReconnectRequest\x1a\x0e.grpc.Response2\xda\x04\n\x08\x43ombiner\x12T\n\x18ModelUpdateRequestStream\x12\x1c.grpc.ClientAvailableMessage\x1a\x18.grpc.ModelUpdateRequest0\x01\x12\x46\n\x11ModelUpdateStream\x12\x1c.grpc.ClientAvailableMessage\x1a\x11.grpc.ModelUpdate0\x01\x12\\\n\x1cModelValidationRequestStream\x12\x1c.grpc.ClientAvailableMessage\x1a\x1c.grpc.ModelValidationRequest0\x01\x12N\n\x15ModelValidationStream\x12\x1c.grpc.ClientAvailableMessage\x1a\x15.grpc.ModelValidation0\x01\x12\x42\n\x16SendModelUpdateRequest\x12\x18.grpc.ModelUpdateRequest\x1a\x0e.grpc.Response\x12\x34\n\x0fSendModelUpdate\x12\x11.grpc.ModelUpdate\x1a\x0e.grpc.Response\x12J\n\x1aSendModelValidationRequest\x12\x1c.grpc.ModelValidationRequest\x1a\x0e.grpc.Response\x12<\n\x13SendModelValidation\x12\x15.grpc.ModelValidation\x1a\x0e.grpc.Responseb\x06proto3' + name='fedn/common/net/grpc/fedn.proto', + package='grpc', + syntax='proto3', + serialized_options=None, + create_key=_descriptor._internal_create_key, + serialized_pb=b'\n\x1f\x66\x65\x64n/common/net/grpc/fedn.proto\x12\x04grpc\":\n\x08Response\x12\x1c\n\x06sender\x18\x01 \x01(\x0b\x32\x0c.grpc.Client\x12\x10\n\x08response\x18\x02 \x01(\t\"\x8c\x02\n\x06Status\x12\x1c\n\x06sender\x18\x01 \x01(\x0b\x32\x0c.grpc.Client\x12\x0e\n\x06status\x18\x02 \x01(\t\x12(\n\tlog_level\x18\x03 \x01(\x0e\x32\x15.grpc.Status.LogLevel\x12\x0c\n\x04\x64\x61ta\x18\x04 \x01(\t\x12\x16\n\x0e\x63orrelation_id\x18\x05 \x01(\t\x12\x11\n\ttimestamp\x18\x06 \x01(\t\x12\x1e\n\x04type\x18\x07 \x01(\x0e\x32\x10.grpc.StatusType\x12\r\n\x05\x65xtra\x18\x08 \x01(\t\"B\n\x08LogLevel\x12\x08\n\x04INFO\x10\x00\x12\t\n\x05\x44\x45\x42UG\x10\x01\x12\x0b\n\x07WARNING\x10\x02\x12\t\n\x05\x45RROR\x10\x03\x12\t\n\x05\x41UDIT\x10\x04\"\x9d\x01\n\x12ModelUpdateRequest\x12\x1c\n\x06sender\x18\x01 \x01(\x0b\x32\x0c.grpc.Client\x12\x1e\n\x08receiver\x18\x02 \x01(\x0b\x32\x0c.grpc.Client\x12\x10\n\x08model_id\x18\x03 \x01(\t\x12\x0c\n\x04\x64\x61ta\x18\x04 \x01(\t\x12\x16\n\x0e\x63orrelation_id\x18\x05 \x01(\t\x12\x11\n\ttimestamp\x18\x06 \x01(\t\"\xaf\x01\n\x0bModelUpdate\x12\x1c\n\x06sender\x18\x01 \x01(\x0b\x32\x0c.grpc.Client\x12\x1e\n\x08receiver\x18\x02 \x01(\x0b\x32\x0c.grpc.Client\x12\x10\n\x08model_id\x18\x03 \x01(\t\x12\x17\n\x0fmodel_update_id\x18\x04 \x01(\t\x12\x16\n\x0e\x63orrelation_id\x18\x05 \x01(\t\x12\x11\n\ttimestamp\x18\x06 \x01(\t\x12\x0c\n\x04meta\x18\x07 \x01(\t\"\xb7\x01\n\x16ModelValidationRequest\x12\x1c\n\x06sender\x18\x01 \x01(\x0b\x32\x0c.grpc.Client\x12\x1e\n\x08receiver\x18\x02 \x01(\x0b\x32\x0c.grpc.Client\x12\x10\n\x08model_id\x18\x03 \x01(\t\x12\x0c\n\x04\x64\x61ta\x18\x04 \x01(\t\x12\x16\n\x0e\x63orrelation_id\x18\x05 \x01(\t\x12\x11\n\ttimestamp\x18\x06 \x01(\t\x12\x14\n\x0cis_inference\x18\x07 \x01(\x08\"\xa8\x01\n\x0fModelValidation\x12\x1c\n\x06sender\x18\x01 \x01(\x0b\x32\x0c.grpc.Client\x12\x1e\n\x08receiver\x18\x02 \x01(\x0b\x32\x0c.grpc.Client\x12\x10\n\x08model_id\x18\x03 \x01(\t\x12\x0c\n\x04\x64\x61ta\x18\x04 \x01(\t\x12\x16\n\x0e\x63orrelation_id\x18\x05 \x01(\t\x12\x11\n\ttimestamp\x18\x06 \x01(\t\x12\x0c\n\x04meta\x18\x07 \x01(\t\"\x89\x01\n\x0cModelRequest\x12\x1c\n\x06sender\x18\x01 \x01(\x0b\x32\x0c.grpc.Client\x12\x1e\n\x08receiver\x18\x02 \x01(\x0b\x32\x0c.grpc.Client\x12\x0c\n\x04\x64\x61ta\x18\x03 \x01(\x0c\x12\n\n\x02id\x18\x04 \x01(\t\x12!\n\x06status\x18\x05 \x01(\x0e\x32\x11.grpc.ModelStatus\"]\n\rModelResponse\x12\x0c\n\x04\x64\x61ta\x18\x01 \x01(\x0c\x12\n\n\x02id\x18\x02 \x01(\t\x12!\n\x06status\x18\x03 \x01(\x0e\x32\x11.grpc.ModelStatus\x12\x0f\n\x07message\x18\x04 \x01(\t\"U\n\x15GetGlobalModelRequest\x12\x1c\n\x06sender\x18\x01 \x01(\x0b\x32\x0c.grpc.Client\x12\x1e\n\x08receiver\x18\x02 \x01(\x0b\x32\x0c.grpc.Client\"h\n\x16GetGlobalModelResponse\x12\x1c\n\x06sender\x18\x01 \x01(\x0b\x32\x0c.grpc.Client\x12\x1e\n\x08receiver\x18\x02 \x01(\x0b\x32\x0c.grpc.Client\x12\x10\n\x08model_id\x18\x03 \x01(\t\")\n\tHeartbeat\x12\x1c\n\x06sender\x18\x01 \x01(\x0b\x32\x0c.grpc.Client\"W\n\x16\x43lientAvailableMessage\x12\x1c\n\x06sender\x18\x01 \x01(\x0b\x32\x0c.grpc.Client\x12\x0c\n\x04\x64\x61ta\x18\x02 \x01(\t\x12\x11\n\ttimestamp\x18\x03 \x01(\t\"R\n\x12ListClientsRequest\x12\x1c\n\x06sender\x18\x01 \x01(\x0b\x32\x0c.grpc.Client\x12\x1e\n\x07\x63hannel\x18\x02 \x01(\x0e\x32\r.grpc.Channel\"*\n\nClientList\x12\x1c\n\x06\x63lient\x18\x01 \x03(\x0b\x32\x0c.grpc.Client\"0\n\x06\x43lient\x12\x18\n\x04role\x18\x01 \x01(\x0e\x32\n.grpc.Role\x12\x0c\n\x04name\x18\x02 \x01(\t\"m\n\x0fReassignRequest\x12\x1c\n\x06sender\x18\x01 \x01(\x0b\x32\x0c.grpc.Client\x12\x1e\n\x08receiver\x18\x02 \x01(\x0b\x32\x0c.grpc.Client\x12\x0e\n\x06server\x18\x03 \x01(\t\x12\x0c\n\x04port\x18\x04 \x01(\r\"c\n\x10ReconnectRequest\x12\x1c\n\x06sender\x18\x01 \x01(\x0b\x32\x0c.grpc.Client\x12\x1e\n\x08receiver\x18\x02 \x01(\x0b\x32\x0c.grpc.Client\x12\x11\n\treconnect\x18\x03 \x01(\r\"\'\n\tParameter\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\r\n\x05value\x18\x02 \x01(\t\"T\n\x0e\x43ontrolRequest\x12\x1e\n\x07\x63ommand\x18\x01 \x01(\x0e\x32\r.grpc.Command\x12\"\n\tparameter\x18\x02 \x03(\x0b\x32\x0f.grpc.Parameter\"F\n\x0f\x43ontrolResponse\x12\x0f\n\x07message\x18\x01 \x01(\t\x12\"\n\tparameter\x18\x02 \x03(\x0b\x32\x0f.grpc.Parameter\"R\n\x0eReportResponse\x12\x1c\n\x06sender\x18\x01 \x01(\x0b\x32\x0c.grpc.Client\x12\"\n\tparameter\x18\x02 \x03(\x0b\x32\x0f.grpc.Parameter\"\x13\n\x11\x43onnectionRequest\"<\n\x12\x43onnectionResponse\x12&\n\x06status\x18\x01 \x01(\x0e\x32\x16.grpc.ConnectionStatus*u\n\nStatusType\x12\x07\n\x03LOG\x10\x00\x12\x18\n\x14MODEL_UPDATE_REQUEST\x10\x01\x12\x10\n\x0cMODEL_UPDATE\x10\x02\x12\x1c\n\x18MODEL_VALIDATION_REQUEST\x10\x03\x12\x14\n\x10MODEL_VALIDATION\x10\x04*\x86\x01\n\x07\x43hannel\x12\x0b\n\x07\x44\x45\x46\x41ULT\x10\x00\x12\x19\n\x15MODEL_UPDATE_REQUESTS\x10\x01\x12\x11\n\rMODEL_UPDATES\x10\x02\x12\x1d\n\x19MODEL_VALIDATION_REQUESTS\x10\x03\x12\x15\n\x11MODEL_VALIDATIONS\x10\x04\x12\n\n\x06STATUS\x10\x05*F\n\x0bModelStatus\x12\x06\n\x02OK\x10\x00\x12\x0f\n\x0bIN_PROGRESS\x10\x01\x12\x12\n\x0eIN_PROGRESS_OK\x10\x02\x12\n\n\x06\x46\x41ILED\x10\x03*8\n\x04Role\x12\n\n\x06WORKER\x10\x00\x12\x0c\n\x08\x43OMBINER\x10\x01\x12\x0b\n\x07REDUCER\x10\x02\x12\t\n\x05OTHER\x10\x03*J\n\x07\x43ommand\x12\x08\n\x04IDLE\x10\x00\x12\t\n\x05START\x10\x01\x12\t\n\x05PAUSE\x10\x02\x12\x08\n\x04STOP\x10\x03\x12\t\n\x05RESET\x10\x04\x12\n\n\x06REPORT\x10\x05*I\n\x10\x43onnectionStatus\x12\x11\n\rNOT_ACCEPTING\x10\x00\x12\r\n\tACCEPTING\x10\x01\x12\x13\n\x0fTRY_AGAIN_LATER\x10\x02\x32z\n\x0cModelService\x12\x33\n\x06Upload\x12\x12.grpc.ModelRequest\x1a\x13.grpc.ModelResponse(\x01\x12\x35\n\x08\x44ownload\x12\x12.grpc.ModelRequest\x1a\x13.grpc.ModelResponse0\x01\x32\xe3\x01\n\x07\x43ontrol\x12\x34\n\x05Start\x12\x14.grpc.ControlRequest\x1a\x15.grpc.ControlResponse\x12\x33\n\x04Stop\x12\x14.grpc.ControlRequest\x1a\x15.grpc.ControlResponse\x12\x37\n\tConfigure\x12\x14.grpc.ControlRequest\x1a\x14.grpc.ReportResponse\x12\x34\n\x06Report\x12\x14.grpc.ControlRequest\x1a\x14.grpc.ReportResponse2V\n\x07Reducer\x12K\n\x0eGetGlobalModel\x12\x1b.grpc.GetGlobalModelRequest\x1a\x1c.grpc.GetGlobalModelResponse2\xab\x03\n\tConnector\x12\x44\n\x14\x41llianceStatusStream\x12\x1c.grpc.ClientAvailableMessage\x1a\x0c.grpc.Status0\x01\x12*\n\nSendStatus\x12\x0c.grpc.Status\x1a\x0e.grpc.Response\x12?\n\x11ListActiveClients\x12\x18.grpc.ListClientsRequest\x1a\x10.grpc.ClientList\x12\x45\n\x10\x41\x63\x63\x65ptingClients\x12\x17.grpc.ConnectionRequest\x1a\x18.grpc.ConnectionResponse\x12\x30\n\rSendHeartbeat\x12\x0f.grpc.Heartbeat\x1a\x0e.grpc.Response\x12\x37\n\x0eReassignClient\x12\x15.grpc.ReassignRequest\x1a\x0e.grpc.Response\x12\x39\n\x0fReconnectClient\x12\x16.grpc.ReconnectRequest\x1a\x0e.grpc.Response2\xda\x04\n\x08\x43ombiner\x12T\n\x18ModelUpdateRequestStream\x12\x1c.grpc.ClientAvailableMessage\x1a\x18.grpc.ModelUpdateRequest0\x01\x12\x46\n\x11ModelUpdateStream\x12\x1c.grpc.ClientAvailableMessage\x1a\x11.grpc.ModelUpdate0\x01\x12\\\n\x1cModelValidationRequestStream\x12\x1c.grpc.ClientAvailableMessage\x1a\x1c.grpc.ModelValidationRequest0\x01\x12N\n\x15ModelValidationStream\x12\x1c.grpc.ClientAvailableMessage\x1a\x15.grpc.ModelValidation0\x01\x12\x42\n\x16SendModelUpdateRequest\x12\x18.grpc.ModelUpdateRequest\x1a\x0e.grpc.Response\x12\x34\n\x0fSendModelUpdate\x12\x11.grpc.ModelUpdate\x1a\x0e.grpc.Response\x12J\n\x1aSendModelValidationRequest\x12\x1c.grpc.ModelValidationRequest\x1a\x0e.grpc.Response\x12<\n\x13SendModelValidation\x12\x15.grpc.ModelValidation\x1a\x0e.grpc.Responseb\x06proto3' ) _STATUSTYPE = _descriptor.EnumDescriptor( - name='StatusType', - full_name='grpc.StatusType', - filename=None, - file=DESCRIPTOR, - create_key=_descriptor._internal_create_key, - values=[ - _descriptor.EnumValueDescriptor( - name='LOG', index=0, number=0, - serialized_options=None, - type=None, - create_key=_descriptor._internal_create_key), - _descriptor.EnumValueDescriptor( - name='MODEL_UPDATE_REQUEST', index=1, number=1, - serialized_options=None, - type=None, - create_key=_descriptor._internal_create_key), - _descriptor.EnumValueDescriptor( - name='MODEL_UPDATE', index=2, number=2, - serialized_options=None, - type=None, - create_key=_descriptor._internal_create_key), - _descriptor.EnumValueDescriptor( - name='MODEL_VALIDATION_REQUEST', index=3, number=3, - serialized_options=None, - type=None, - create_key=_descriptor._internal_create_key), - _descriptor.EnumValueDescriptor( - name='MODEL_VALIDATION', index=4, number=4, - serialized_options=None, - type=None, - create_key=_descriptor._internal_create_key), - ], - containing_type=None, - serialized_options=None, - serialized_start=2383, - serialized_end=2500, + name='StatusType', + full_name='grpc.StatusType', + filename=None, + file=DESCRIPTOR, + create_key=_descriptor._internal_create_key, + values=[ + _descriptor.EnumValueDescriptor( + name='LOG', index=0, number=0, + serialized_options=None, + type=None, + create_key=_descriptor._internal_create_key), + _descriptor.EnumValueDescriptor( + name='MODEL_UPDATE_REQUEST', index=1, number=1, + serialized_options=None, + type=None, + create_key=_descriptor._internal_create_key), + _descriptor.EnumValueDescriptor( + name='MODEL_UPDATE', index=2, number=2, + serialized_options=None, + type=None, + create_key=_descriptor._internal_create_key), + _descriptor.EnumValueDescriptor( + name='MODEL_VALIDATION_REQUEST', index=3, number=3, + serialized_options=None, + type=None, + create_key=_descriptor._internal_create_key), + _descriptor.EnumValueDescriptor( + name='MODEL_VALIDATION', index=4, number=4, + serialized_options=None, + type=None, + create_key=_descriptor._internal_create_key), + ], + containing_type=None, + serialized_options=None, + serialized_start=2383, + serialized_end=2500, ) _sym_db.RegisterEnumDescriptor(_STATUSTYPE) StatusType = enum_type_wrapper.EnumTypeWrapper(_STATUSTYPE) _CHANNEL = _descriptor.EnumDescriptor( - name='Channel', - full_name='grpc.Channel', - filename=None, - file=DESCRIPTOR, - create_key=_descriptor._internal_create_key, - values=[ - _descriptor.EnumValueDescriptor( - name='DEFAULT', index=0, number=0, - serialized_options=None, - type=None, - create_key=_descriptor._internal_create_key), - _descriptor.EnumValueDescriptor( - name='MODEL_UPDATE_REQUESTS', index=1, number=1, - serialized_options=None, - type=None, - create_key=_descriptor._internal_create_key), - _descriptor.EnumValueDescriptor( - name='MODEL_UPDATES', index=2, number=2, - serialized_options=None, - type=None, - create_key=_descriptor._internal_create_key), - _descriptor.EnumValueDescriptor( - name='MODEL_VALIDATION_REQUESTS', index=3, number=3, - serialized_options=None, - type=None, - create_key=_descriptor._internal_create_key), - _descriptor.EnumValueDescriptor( - name='MODEL_VALIDATIONS', index=4, number=4, - serialized_options=None, - type=None, - create_key=_descriptor._internal_create_key), - _descriptor.EnumValueDescriptor( - name='STATUS', index=5, number=5, - serialized_options=None, - type=None, - create_key=_descriptor._internal_create_key), - ], - containing_type=None, - serialized_options=None, - serialized_start=2503, - serialized_end=2637, + name='Channel', + full_name='grpc.Channel', + filename=None, + file=DESCRIPTOR, + create_key=_descriptor._internal_create_key, + values=[ + _descriptor.EnumValueDescriptor( + name='DEFAULT', index=0, number=0, + serialized_options=None, + type=None, + create_key=_descriptor._internal_create_key), + _descriptor.EnumValueDescriptor( + name='MODEL_UPDATE_REQUESTS', index=1, number=1, + serialized_options=None, + type=None, + create_key=_descriptor._internal_create_key), + _descriptor.EnumValueDescriptor( + name='MODEL_UPDATES', index=2, number=2, + serialized_options=None, + type=None, + create_key=_descriptor._internal_create_key), + _descriptor.EnumValueDescriptor( + name='MODEL_VALIDATION_REQUESTS', index=3, number=3, + serialized_options=None, + type=None, + create_key=_descriptor._internal_create_key), + _descriptor.EnumValueDescriptor( + name='MODEL_VALIDATIONS', index=4, number=4, + serialized_options=None, + type=None, + create_key=_descriptor._internal_create_key), + _descriptor.EnumValueDescriptor( + name='STATUS', index=5, number=5, + serialized_options=None, + type=None, + create_key=_descriptor._internal_create_key), + ], + containing_type=None, + serialized_options=None, + serialized_start=2503, + serialized_end=2637, ) _sym_db.RegisterEnumDescriptor(_CHANNEL) Channel = enum_type_wrapper.EnumTypeWrapper(_CHANNEL) _MODELSTATUS = _descriptor.EnumDescriptor( - name='ModelStatus', - full_name='grpc.ModelStatus', - filename=None, - file=DESCRIPTOR, - create_key=_descriptor._internal_create_key, - values=[ - _descriptor.EnumValueDescriptor( - name='OK', index=0, number=0, - serialized_options=None, - type=None, - create_key=_descriptor._internal_create_key), - _descriptor.EnumValueDescriptor( - name='IN_PROGRESS', index=1, number=1, - serialized_options=None, - type=None, - create_key=_descriptor._internal_create_key), - _descriptor.EnumValueDescriptor( - name='IN_PROGRESS_OK', index=2, number=2, - serialized_options=None, - type=None, - create_key=_descriptor._internal_create_key), - _descriptor.EnumValueDescriptor( - name='FAILED', index=3, number=3, - serialized_options=None, - type=None, - create_key=_descriptor._internal_create_key), - ], - containing_type=None, - serialized_options=None, - serialized_start=2639, - serialized_end=2709, + name='ModelStatus', + full_name='grpc.ModelStatus', + filename=None, + file=DESCRIPTOR, + create_key=_descriptor._internal_create_key, + values=[ + _descriptor.EnumValueDescriptor( + name='OK', index=0, number=0, + serialized_options=None, + type=None, + create_key=_descriptor._internal_create_key), + _descriptor.EnumValueDescriptor( + name='IN_PROGRESS', index=1, number=1, + serialized_options=None, + type=None, + create_key=_descriptor._internal_create_key), + _descriptor.EnumValueDescriptor( + name='IN_PROGRESS_OK', index=2, number=2, + serialized_options=None, + type=None, + create_key=_descriptor._internal_create_key), + _descriptor.EnumValueDescriptor( + name='FAILED', index=3, number=3, + serialized_options=None, + type=None, + create_key=_descriptor._internal_create_key), + ], + containing_type=None, + serialized_options=None, + serialized_start=2639, + serialized_end=2709, ) _sym_db.RegisterEnumDescriptor(_MODELSTATUS) ModelStatus = enum_type_wrapper.EnumTypeWrapper(_MODELSTATUS) _ROLE = _descriptor.EnumDescriptor( - name='Role', - full_name='grpc.Role', - filename=None, - file=DESCRIPTOR, - create_key=_descriptor._internal_create_key, - values=[ - _descriptor.EnumValueDescriptor( - name='WORKER', index=0, number=0, - serialized_options=None, - type=None, - create_key=_descriptor._internal_create_key), - _descriptor.EnumValueDescriptor( - name='COMBINER', index=1, number=1, - serialized_options=None, - type=None, - create_key=_descriptor._internal_create_key), - _descriptor.EnumValueDescriptor( - name='REDUCER', index=2, number=2, - serialized_options=None, - type=None, - create_key=_descriptor._internal_create_key), - _descriptor.EnumValueDescriptor( - name='OTHER', index=3, number=3, - serialized_options=None, - type=None, - create_key=_descriptor._internal_create_key), - ], - containing_type=None, - serialized_options=None, - serialized_start=2711, - serialized_end=2767, + name='Role', + full_name='grpc.Role', + filename=None, + file=DESCRIPTOR, + create_key=_descriptor._internal_create_key, + values=[ + _descriptor.EnumValueDescriptor( + name='WORKER', index=0, number=0, + serialized_options=None, + type=None, + create_key=_descriptor._internal_create_key), + _descriptor.EnumValueDescriptor( + name='COMBINER', index=1, number=1, + serialized_options=None, + type=None, + create_key=_descriptor._internal_create_key), + _descriptor.EnumValueDescriptor( + name='REDUCER', index=2, number=2, + serialized_options=None, + type=None, + create_key=_descriptor._internal_create_key), + _descriptor.EnumValueDescriptor( + name='OTHER', index=3, number=3, + serialized_options=None, + type=None, + create_key=_descriptor._internal_create_key), + ], + containing_type=None, + serialized_options=None, + serialized_start=2711, + serialized_end=2767, ) _sym_db.RegisterEnumDescriptor(_ROLE) Role = enum_type_wrapper.EnumTypeWrapper(_ROLE) _COMMAND = _descriptor.EnumDescriptor( - name='Command', - full_name='grpc.Command', - filename=None, - file=DESCRIPTOR, - create_key=_descriptor._internal_create_key, - values=[ - _descriptor.EnumValueDescriptor( - name='IDLE', index=0, number=0, - serialized_options=None, - type=None, - create_key=_descriptor._internal_create_key), - _descriptor.EnumValueDescriptor( - name='START', index=1, number=1, - serialized_options=None, - type=None, - create_key=_descriptor._internal_create_key), - _descriptor.EnumValueDescriptor( - name='PAUSE', index=2, number=2, - serialized_options=None, - type=None, - create_key=_descriptor._internal_create_key), - _descriptor.EnumValueDescriptor( - name='STOP', index=3, number=3, - serialized_options=None, - type=None, - create_key=_descriptor._internal_create_key), - _descriptor.EnumValueDescriptor( - name='RESET', index=4, number=4, - serialized_options=None, - type=None, - create_key=_descriptor._internal_create_key), - _descriptor.EnumValueDescriptor( - name='REPORT', index=5, number=5, - serialized_options=None, - type=None, - create_key=_descriptor._internal_create_key), - ], - containing_type=None, - serialized_options=None, - serialized_start=2769, - serialized_end=2843, + name='Command', + full_name='grpc.Command', + filename=None, + file=DESCRIPTOR, + create_key=_descriptor._internal_create_key, + values=[ + _descriptor.EnumValueDescriptor( + name='IDLE', index=0, number=0, + serialized_options=None, + type=None, + create_key=_descriptor._internal_create_key), + _descriptor.EnumValueDescriptor( + name='START', index=1, number=1, + serialized_options=None, + type=None, + create_key=_descriptor._internal_create_key), + _descriptor.EnumValueDescriptor( + name='PAUSE', index=2, number=2, + serialized_options=None, + type=None, + create_key=_descriptor._internal_create_key), + _descriptor.EnumValueDescriptor( + name='STOP', index=3, number=3, + serialized_options=None, + type=None, + create_key=_descriptor._internal_create_key), + _descriptor.EnumValueDescriptor( + name='RESET', index=4, number=4, + serialized_options=None, + type=None, + create_key=_descriptor._internal_create_key), + _descriptor.EnumValueDescriptor( + name='REPORT', index=5, number=5, + serialized_options=None, + type=None, + create_key=_descriptor._internal_create_key), + ], + containing_type=None, + serialized_options=None, + serialized_start=2769, + serialized_end=2843, ) _sym_db.RegisterEnumDescriptor(_COMMAND) Command = enum_type_wrapper.EnumTypeWrapper(_COMMAND) _CONNECTIONSTATUS = _descriptor.EnumDescriptor( - name='ConnectionStatus', - full_name='grpc.ConnectionStatus', - filename=None, - file=DESCRIPTOR, - create_key=_descriptor._internal_create_key, - values=[ - _descriptor.EnumValueDescriptor( - name='NOT_ACCEPTING', index=0, number=0, - serialized_options=None, - type=None, - create_key=_descriptor._internal_create_key), - _descriptor.EnumValueDescriptor( - name='ACCEPTING', index=1, number=1, - serialized_options=None, - type=None, - create_key=_descriptor._internal_create_key), - _descriptor.EnumValueDescriptor( - name='TRY_AGAIN_LATER', index=2, number=2, - serialized_options=None, - type=None, - create_key=_descriptor._internal_create_key), - ], - containing_type=None, - serialized_options=None, - serialized_start=2845, - serialized_end=2918, + name='ConnectionStatus', + full_name='grpc.ConnectionStatus', + filename=None, + file=DESCRIPTOR, + create_key=_descriptor._internal_create_key, + values=[ + _descriptor.EnumValueDescriptor( + name='NOT_ACCEPTING', index=0, number=0, + serialized_options=None, + type=None, + create_key=_descriptor._internal_create_key), + _descriptor.EnumValueDescriptor( + name='ACCEPTING', index=1, number=1, + serialized_options=None, + type=None, + create_key=_descriptor._internal_create_key), + _descriptor.EnumValueDescriptor( + name='TRY_AGAIN_LATER', index=2, number=2, + serialized_options=None, + type=None, + create_key=_descriptor._internal_create_key), + ], + containing_type=None, + serialized_options=None, + serialized_start=2845, + serialized_end=2918, ) _sym_db.RegisterEnumDescriptor(_CONNECTIONSTATUS) @@ -290,1151 +289,1151 @@ _STATUS_LOGLEVEL = _descriptor.EnumDescriptor( - name='LogLevel', - full_name='grpc.Status.LogLevel', - filename=None, - file=DESCRIPTOR, - create_key=_descriptor._internal_create_key, - values=[ - _descriptor.EnumValueDescriptor( - name='INFO', index=0, number=0, - serialized_options=None, - type=None, - create_key=_descriptor._internal_create_key), - _descriptor.EnumValueDescriptor( - name='DEBUG', index=1, number=1, - serialized_options=None, - type=None, - create_key=_descriptor._internal_create_key), - _descriptor.EnumValueDescriptor( - name='WARNING', index=2, number=2, - serialized_options=None, - type=None, - create_key=_descriptor._internal_create_key), - _descriptor.EnumValueDescriptor( - name='ERROR', index=3, number=3, - serialized_options=None, - type=None, - create_key=_descriptor._internal_create_key), - _descriptor.EnumValueDescriptor( - name='AUDIT', index=4, number=4, - serialized_options=None, - type=None, - create_key=_descriptor._internal_create_key), - ], - containing_type=None, - serialized_options=None, - serialized_start=304, - serialized_end=370, + name='LogLevel', + full_name='grpc.Status.LogLevel', + filename=None, + file=DESCRIPTOR, + create_key=_descriptor._internal_create_key, + values=[ + _descriptor.EnumValueDescriptor( + name='INFO', index=0, number=0, + serialized_options=None, + type=None, + create_key=_descriptor._internal_create_key), + _descriptor.EnumValueDescriptor( + name='DEBUG', index=1, number=1, + serialized_options=None, + type=None, + create_key=_descriptor._internal_create_key), + _descriptor.EnumValueDescriptor( + name='WARNING', index=2, number=2, + serialized_options=None, + type=None, + create_key=_descriptor._internal_create_key), + _descriptor.EnumValueDescriptor( + name='ERROR', index=3, number=3, + serialized_options=None, + type=None, + create_key=_descriptor._internal_create_key), + _descriptor.EnumValueDescriptor( + name='AUDIT', index=4, number=4, + serialized_options=None, + type=None, + create_key=_descriptor._internal_create_key), + ], + containing_type=None, + serialized_options=None, + serialized_start=304, + serialized_end=370, ) _sym_db.RegisterEnumDescriptor(_STATUS_LOGLEVEL) _RESPONSE = _descriptor.Descriptor( - name='Response', - full_name='grpc.Response', - filename=None, - file=DESCRIPTOR, - containing_type=None, - create_key=_descriptor._internal_create_key, - fields=[ - _descriptor.FieldDescriptor( - name='sender', full_name='grpc.Response.sender', index=0, - number=1, type=11, cpp_type=10, label=1, - has_default_value=False, default_value=None, - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), - _descriptor.FieldDescriptor( - name='response', full_name='grpc.Response.response', index=1, - number=2, type=9, cpp_type=9, label=1, - has_default_value=False, default_value=b"".decode('utf-8'), - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), - ], - extensions=[ - ], - nested_types=[], - enum_types=[ - ], - serialized_options=None, - is_extendable=False, - syntax='proto3', - extension_ranges=[], - oneofs=[ - ], - serialized_start=41, - serialized_end=99, + name='Response', + full_name='grpc.Response', + filename=None, + file=DESCRIPTOR, + containing_type=None, + create_key=_descriptor._internal_create_key, + fields=[ + _descriptor.FieldDescriptor( + name='sender', full_name='grpc.Response.sender', index=0, + number=1, type=11, cpp_type=10, label=1, + has_default_value=False, default_value=None, + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + _descriptor.FieldDescriptor( + name='response', full_name='grpc.Response.response', index=1, + number=2, type=9, cpp_type=9, label=1, + has_default_value=False, default_value=b"".decode('utf-8'), + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + ], + extensions=[ + ], + nested_types=[], + enum_types=[ + ], + serialized_options=None, + is_extendable=False, + syntax='proto3', + extension_ranges=[], + oneofs=[ + ], + serialized_start=41, + serialized_end=99, ) _STATUS = _descriptor.Descriptor( - name='Status', - full_name='grpc.Status', - filename=None, - file=DESCRIPTOR, - containing_type=None, - create_key=_descriptor._internal_create_key, - fields=[ - _descriptor.FieldDescriptor( - name='sender', full_name='grpc.Status.sender', index=0, - number=1, type=11, cpp_type=10, label=1, - has_default_value=False, default_value=None, - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), - _descriptor.FieldDescriptor( - name='status', full_name='grpc.Status.status', index=1, - number=2, type=9, cpp_type=9, label=1, - has_default_value=False, default_value=b"".decode('utf-8'), - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), - _descriptor.FieldDescriptor( - name='log_level', full_name='grpc.Status.log_level', index=2, - number=3, type=14, cpp_type=8, label=1, - has_default_value=False, default_value=0, - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), - _descriptor.FieldDescriptor( - name='data', full_name='grpc.Status.data', index=3, - number=4, type=9, cpp_type=9, label=1, - has_default_value=False, default_value=b"".decode('utf-8'), - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), - _descriptor.FieldDescriptor( - name='correlation_id', full_name='grpc.Status.correlation_id', index=4, - number=5, type=9, cpp_type=9, label=1, - has_default_value=False, default_value=b"".decode('utf-8'), - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), - _descriptor.FieldDescriptor( - name='timestamp', full_name='grpc.Status.timestamp', index=5, - number=6, type=9, cpp_type=9, label=1, - has_default_value=False, default_value=b"".decode('utf-8'), - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), - _descriptor.FieldDescriptor( - name='type', full_name='grpc.Status.type', index=6, - number=7, type=14, cpp_type=8, label=1, - has_default_value=False, default_value=0, - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), - _descriptor.FieldDescriptor( - name='extra', full_name='grpc.Status.extra', index=7, - number=8, type=9, cpp_type=9, label=1, - has_default_value=False, default_value=b"".decode('utf-8'), - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), - ], - extensions=[ - ], - nested_types=[], - enum_types=[ - _STATUS_LOGLEVEL, - ], - serialized_options=None, - is_extendable=False, - syntax='proto3', - extension_ranges=[], - oneofs=[ - ], - serialized_start=102, - serialized_end=370, + name='Status', + full_name='grpc.Status', + filename=None, + file=DESCRIPTOR, + containing_type=None, + create_key=_descriptor._internal_create_key, + fields=[ + _descriptor.FieldDescriptor( + name='sender', full_name='grpc.Status.sender', index=0, + number=1, type=11, cpp_type=10, label=1, + has_default_value=False, default_value=None, + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + _descriptor.FieldDescriptor( + name='status', full_name='grpc.Status.status', index=1, + number=2, type=9, cpp_type=9, label=1, + has_default_value=False, default_value=b"".decode('utf-8'), + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + _descriptor.FieldDescriptor( + name='log_level', full_name='grpc.Status.log_level', index=2, + number=3, type=14, cpp_type=8, label=1, + has_default_value=False, default_value=0, + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + _descriptor.FieldDescriptor( + name='data', full_name='grpc.Status.data', index=3, + number=4, type=9, cpp_type=9, label=1, + has_default_value=False, default_value=b"".decode('utf-8'), + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + _descriptor.FieldDescriptor( + name='correlation_id', full_name='grpc.Status.correlation_id', index=4, + number=5, type=9, cpp_type=9, label=1, + has_default_value=False, default_value=b"".decode('utf-8'), + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + _descriptor.FieldDescriptor( + name='timestamp', full_name='grpc.Status.timestamp', index=5, + number=6, type=9, cpp_type=9, label=1, + has_default_value=False, default_value=b"".decode('utf-8'), + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + _descriptor.FieldDescriptor( + name='type', full_name='grpc.Status.type', index=6, + number=7, type=14, cpp_type=8, label=1, + has_default_value=False, default_value=0, + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + _descriptor.FieldDescriptor( + name='extra', full_name='grpc.Status.extra', index=7, + number=8, type=9, cpp_type=9, label=1, + has_default_value=False, default_value=b"".decode('utf-8'), + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + ], + extensions=[ + ], + nested_types=[], + enum_types=[ + _STATUS_LOGLEVEL, + ], + serialized_options=None, + is_extendable=False, + syntax='proto3', + extension_ranges=[], + oneofs=[ + ], + serialized_start=102, + serialized_end=370, ) _MODELUPDATEREQUEST = _descriptor.Descriptor( - name='ModelUpdateRequest', - full_name='grpc.ModelUpdateRequest', - filename=None, - file=DESCRIPTOR, - containing_type=None, - create_key=_descriptor._internal_create_key, - fields=[ - _descriptor.FieldDescriptor( - name='sender', full_name='grpc.ModelUpdateRequest.sender', index=0, - number=1, type=11, cpp_type=10, label=1, - has_default_value=False, default_value=None, - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), - _descriptor.FieldDescriptor( - name='receiver', full_name='grpc.ModelUpdateRequest.receiver', index=1, - number=2, type=11, cpp_type=10, label=1, - has_default_value=False, default_value=None, - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), - _descriptor.FieldDescriptor( - name='model_id', full_name='grpc.ModelUpdateRequest.model_id', index=2, - number=3, type=9, cpp_type=9, label=1, - has_default_value=False, default_value=b"".decode('utf-8'), - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), - _descriptor.FieldDescriptor( - name='data', full_name='grpc.ModelUpdateRequest.data', index=3, - number=4, type=9, cpp_type=9, label=1, - has_default_value=False, default_value=b"".decode('utf-8'), - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), - _descriptor.FieldDescriptor( - name='correlation_id', full_name='grpc.ModelUpdateRequest.correlation_id', index=4, - number=5, type=9, cpp_type=9, label=1, - has_default_value=False, default_value=b"".decode('utf-8'), - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), - _descriptor.FieldDescriptor( - name='timestamp', full_name='grpc.ModelUpdateRequest.timestamp', index=5, - number=6, type=9, cpp_type=9, label=1, - has_default_value=False, default_value=b"".decode('utf-8'), - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), - ], - extensions=[ - ], - nested_types=[], - enum_types=[ - ], - serialized_options=None, - is_extendable=False, - syntax='proto3', - extension_ranges=[], - oneofs=[ - ], - serialized_start=373, - serialized_end=530, + name='ModelUpdateRequest', + full_name='grpc.ModelUpdateRequest', + filename=None, + file=DESCRIPTOR, + containing_type=None, + create_key=_descriptor._internal_create_key, + fields=[ + _descriptor.FieldDescriptor( + name='sender', full_name='grpc.ModelUpdateRequest.sender', index=0, + number=1, type=11, cpp_type=10, label=1, + has_default_value=False, default_value=None, + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + _descriptor.FieldDescriptor( + name='receiver', full_name='grpc.ModelUpdateRequest.receiver', index=1, + number=2, type=11, cpp_type=10, label=1, + has_default_value=False, default_value=None, + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + _descriptor.FieldDescriptor( + name='model_id', full_name='grpc.ModelUpdateRequest.model_id', index=2, + number=3, type=9, cpp_type=9, label=1, + has_default_value=False, default_value=b"".decode('utf-8'), + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + _descriptor.FieldDescriptor( + name='data', full_name='grpc.ModelUpdateRequest.data', index=3, + number=4, type=9, cpp_type=9, label=1, + has_default_value=False, default_value=b"".decode('utf-8'), + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + _descriptor.FieldDescriptor( + name='correlation_id', full_name='grpc.ModelUpdateRequest.correlation_id', index=4, + number=5, type=9, cpp_type=9, label=1, + has_default_value=False, default_value=b"".decode('utf-8'), + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + _descriptor.FieldDescriptor( + name='timestamp', full_name='grpc.ModelUpdateRequest.timestamp', index=5, + number=6, type=9, cpp_type=9, label=1, + has_default_value=False, default_value=b"".decode('utf-8'), + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + ], + extensions=[ + ], + nested_types=[], + enum_types=[ + ], + serialized_options=None, + is_extendable=False, + syntax='proto3', + extension_ranges=[], + oneofs=[ + ], + serialized_start=373, + serialized_end=530, ) _MODELUPDATE = _descriptor.Descriptor( - name='ModelUpdate', - full_name='grpc.ModelUpdate', - filename=None, - file=DESCRIPTOR, - containing_type=None, - create_key=_descriptor._internal_create_key, - fields=[ - _descriptor.FieldDescriptor( - name='sender', full_name='grpc.ModelUpdate.sender', index=0, - number=1, type=11, cpp_type=10, label=1, - has_default_value=False, default_value=None, - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), - _descriptor.FieldDescriptor( - name='receiver', full_name='grpc.ModelUpdate.receiver', index=1, - number=2, type=11, cpp_type=10, label=1, - has_default_value=False, default_value=None, - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), - _descriptor.FieldDescriptor( - name='model_id', full_name='grpc.ModelUpdate.model_id', index=2, - number=3, type=9, cpp_type=9, label=1, - has_default_value=False, default_value=b"".decode('utf-8'), - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), - _descriptor.FieldDescriptor( - name='model_update_id', full_name='grpc.ModelUpdate.model_update_id', index=3, - number=4, type=9, cpp_type=9, label=1, - has_default_value=False, default_value=b"".decode('utf-8'), - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), - _descriptor.FieldDescriptor( - name='correlation_id', full_name='grpc.ModelUpdate.correlation_id', index=4, - number=5, type=9, cpp_type=9, label=1, - has_default_value=False, default_value=b"".decode('utf-8'), - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), - _descriptor.FieldDescriptor( - name='timestamp', full_name='grpc.ModelUpdate.timestamp', index=5, - number=6, type=9, cpp_type=9, label=1, - has_default_value=False, default_value=b"".decode('utf-8'), - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), - _descriptor.FieldDescriptor( - name='meta', full_name='grpc.ModelUpdate.meta', index=6, - number=7, type=9, cpp_type=9, label=1, - has_default_value=False, default_value=b"".decode('utf-8'), - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), - ], - extensions=[ - ], - nested_types=[], - enum_types=[ - ], - serialized_options=None, - is_extendable=False, - syntax='proto3', - extension_ranges=[], - oneofs=[ - ], - serialized_start=533, - serialized_end=708, + name='ModelUpdate', + full_name='grpc.ModelUpdate', + filename=None, + file=DESCRIPTOR, + containing_type=None, + create_key=_descriptor._internal_create_key, + fields=[ + _descriptor.FieldDescriptor( + name='sender', full_name='grpc.ModelUpdate.sender', index=0, + number=1, type=11, cpp_type=10, label=1, + has_default_value=False, default_value=None, + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + _descriptor.FieldDescriptor( + name='receiver', full_name='grpc.ModelUpdate.receiver', index=1, + number=2, type=11, cpp_type=10, label=1, + has_default_value=False, default_value=None, + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + _descriptor.FieldDescriptor( + name='model_id', full_name='grpc.ModelUpdate.model_id', index=2, + number=3, type=9, cpp_type=9, label=1, + has_default_value=False, default_value=b"".decode('utf-8'), + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + _descriptor.FieldDescriptor( + name='model_update_id', full_name='grpc.ModelUpdate.model_update_id', index=3, + number=4, type=9, cpp_type=9, label=1, + has_default_value=False, default_value=b"".decode('utf-8'), + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + _descriptor.FieldDescriptor( + name='correlation_id', full_name='grpc.ModelUpdate.correlation_id', index=4, + number=5, type=9, cpp_type=9, label=1, + has_default_value=False, default_value=b"".decode('utf-8'), + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + _descriptor.FieldDescriptor( + name='timestamp', full_name='grpc.ModelUpdate.timestamp', index=5, + number=6, type=9, cpp_type=9, label=1, + has_default_value=False, default_value=b"".decode('utf-8'), + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + _descriptor.FieldDescriptor( + name='meta', full_name='grpc.ModelUpdate.meta', index=6, + number=7, type=9, cpp_type=9, label=1, + has_default_value=False, default_value=b"".decode('utf-8'), + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + ], + extensions=[ + ], + nested_types=[], + enum_types=[ + ], + serialized_options=None, + is_extendable=False, + syntax='proto3', + extension_ranges=[], + oneofs=[ + ], + serialized_start=533, + serialized_end=708, ) _MODELVALIDATIONREQUEST = _descriptor.Descriptor( - name='ModelValidationRequest', - full_name='grpc.ModelValidationRequest', - filename=None, - file=DESCRIPTOR, - containing_type=None, - create_key=_descriptor._internal_create_key, - fields=[ - _descriptor.FieldDescriptor( - name='sender', full_name='grpc.ModelValidationRequest.sender', index=0, - number=1, type=11, cpp_type=10, label=1, - has_default_value=False, default_value=None, - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), - _descriptor.FieldDescriptor( - name='receiver', full_name='grpc.ModelValidationRequest.receiver', index=1, - number=2, type=11, cpp_type=10, label=1, - has_default_value=False, default_value=None, - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), - _descriptor.FieldDescriptor( - name='model_id', full_name='grpc.ModelValidationRequest.model_id', index=2, - number=3, type=9, cpp_type=9, label=1, - has_default_value=False, default_value=b"".decode('utf-8'), - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), - _descriptor.FieldDescriptor( - name='data', full_name='grpc.ModelValidationRequest.data', index=3, - number=4, type=9, cpp_type=9, label=1, - has_default_value=False, default_value=b"".decode('utf-8'), - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), - _descriptor.FieldDescriptor( - name='correlation_id', full_name='grpc.ModelValidationRequest.correlation_id', index=4, - number=5, type=9, cpp_type=9, label=1, - has_default_value=False, default_value=b"".decode('utf-8'), - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), - _descriptor.FieldDescriptor( - name='timestamp', full_name='grpc.ModelValidationRequest.timestamp', index=5, - number=6, type=9, cpp_type=9, label=1, - has_default_value=False, default_value=b"".decode('utf-8'), - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), - _descriptor.FieldDescriptor( - name='is_inference', full_name='grpc.ModelValidationRequest.is_inference', index=6, - number=7, type=8, cpp_type=7, label=1, - has_default_value=False, default_value=False, - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), - ], - extensions=[ - ], - nested_types=[], - enum_types=[ - ], - serialized_options=None, - is_extendable=False, - syntax='proto3', - extension_ranges=[], - oneofs=[ - ], - serialized_start=711, - serialized_end=894, + name='ModelValidationRequest', + full_name='grpc.ModelValidationRequest', + filename=None, + file=DESCRIPTOR, + containing_type=None, + create_key=_descriptor._internal_create_key, + fields=[ + _descriptor.FieldDescriptor( + name='sender', full_name='grpc.ModelValidationRequest.sender', index=0, + number=1, type=11, cpp_type=10, label=1, + has_default_value=False, default_value=None, + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + _descriptor.FieldDescriptor( + name='receiver', full_name='grpc.ModelValidationRequest.receiver', index=1, + number=2, type=11, cpp_type=10, label=1, + has_default_value=False, default_value=None, + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + _descriptor.FieldDescriptor( + name='model_id', full_name='grpc.ModelValidationRequest.model_id', index=2, + number=3, type=9, cpp_type=9, label=1, + has_default_value=False, default_value=b"".decode('utf-8'), + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + _descriptor.FieldDescriptor( + name='data', full_name='grpc.ModelValidationRequest.data', index=3, + number=4, type=9, cpp_type=9, label=1, + has_default_value=False, default_value=b"".decode('utf-8'), + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + _descriptor.FieldDescriptor( + name='correlation_id', full_name='grpc.ModelValidationRequest.correlation_id', index=4, + number=5, type=9, cpp_type=9, label=1, + has_default_value=False, default_value=b"".decode('utf-8'), + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + _descriptor.FieldDescriptor( + name='timestamp', full_name='grpc.ModelValidationRequest.timestamp', index=5, + number=6, type=9, cpp_type=9, label=1, + has_default_value=False, default_value=b"".decode('utf-8'), + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + _descriptor.FieldDescriptor( + name='is_inference', full_name='grpc.ModelValidationRequest.is_inference', index=6, + number=7, type=8, cpp_type=7, label=1, + has_default_value=False, default_value=False, + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + ], + extensions=[ + ], + nested_types=[], + enum_types=[ + ], + serialized_options=None, + is_extendable=False, + syntax='proto3', + extension_ranges=[], + oneofs=[ + ], + serialized_start=711, + serialized_end=894, ) _MODELVALIDATION = _descriptor.Descriptor( - name='ModelValidation', - full_name='grpc.ModelValidation', - filename=None, - file=DESCRIPTOR, - containing_type=None, - create_key=_descriptor._internal_create_key, - fields=[ - _descriptor.FieldDescriptor( - name='sender', full_name='grpc.ModelValidation.sender', index=0, - number=1, type=11, cpp_type=10, label=1, - has_default_value=False, default_value=None, - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), - _descriptor.FieldDescriptor( - name='receiver', full_name='grpc.ModelValidation.receiver', index=1, - number=2, type=11, cpp_type=10, label=1, - has_default_value=False, default_value=None, - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), - _descriptor.FieldDescriptor( - name='model_id', full_name='grpc.ModelValidation.model_id', index=2, - number=3, type=9, cpp_type=9, label=1, - has_default_value=False, default_value=b"".decode('utf-8'), - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), - _descriptor.FieldDescriptor( - name='data', full_name='grpc.ModelValidation.data', index=3, - number=4, type=9, cpp_type=9, label=1, - has_default_value=False, default_value=b"".decode('utf-8'), - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), - _descriptor.FieldDescriptor( - name='correlation_id', full_name='grpc.ModelValidation.correlation_id', index=4, - number=5, type=9, cpp_type=9, label=1, - has_default_value=False, default_value=b"".decode('utf-8'), - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), - _descriptor.FieldDescriptor( - name='timestamp', full_name='grpc.ModelValidation.timestamp', index=5, - number=6, type=9, cpp_type=9, label=1, - has_default_value=False, default_value=b"".decode('utf-8'), - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), - _descriptor.FieldDescriptor( - name='meta', full_name='grpc.ModelValidation.meta', index=6, - number=7, type=9, cpp_type=9, label=1, - has_default_value=False, default_value=b"".decode('utf-8'), - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), - ], - extensions=[ - ], - nested_types=[], - enum_types=[ - ], - serialized_options=None, - is_extendable=False, - syntax='proto3', - extension_ranges=[], - oneofs=[ - ], - serialized_start=897, - serialized_end=1065, + name='ModelValidation', + full_name='grpc.ModelValidation', + filename=None, + file=DESCRIPTOR, + containing_type=None, + create_key=_descriptor._internal_create_key, + fields=[ + _descriptor.FieldDescriptor( + name='sender', full_name='grpc.ModelValidation.sender', index=0, + number=1, type=11, cpp_type=10, label=1, + has_default_value=False, default_value=None, + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + _descriptor.FieldDescriptor( + name='receiver', full_name='grpc.ModelValidation.receiver', index=1, + number=2, type=11, cpp_type=10, label=1, + has_default_value=False, default_value=None, + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + _descriptor.FieldDescriptor( + name='model_id', full_name='grpc.ModelValidation.model_id', index=2, + number=3, type=9, cpp_type=9, label=1, + has_default_value=False, default_value=b"".decode('utf-8'), + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + _descriptor.FieldDescriptor( + name='data', full_name='grpc.ModelValidation.data', index=3, + number=4, type=9, cpp_type=9, label=1, + has_default_value=False, default_value=b"".decode('utf-8'), + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + _descriptor.FieldDescriptor( + name='correlation_id', full_name='grpc.ModelValidation.correlation_id', index=4, + number=5, type=9, cpp_type=9, label=1, + has_default_value=False, default_value=b"".decode('utf-8'), + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + _descriptor.FieldDescriptor( + name='timestamp', full_name='grpc.ModelValidation.timestamp', index=5, + number=6, type=9, cpp_type=9, label=1, + has_default_value=False, default_value=b"".decode('utf-8'), + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + _descriptor.FieldDescriptor( + name='meta', full_name='grpc.ModelValidation.meta', index=6, + number=7, type=9, cpp_type=9, label=1, + has_default_value=False, default_value=b"".decode('utf-8'), + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + ], + extensions=[ + ], + nested_types=[], + enum_types=[ + ], + serialized_options=None, + is_extendable=False, + syntax='proto3', + extension_ranges=[], + oneofs=[ + ], + serialized_start=897, + serialized_end=1065, ) _MODELREQUEST = _descriptor.Descriptor( - name='ModelRequest', - full_name='grpc.ModelRequest', - filename=None, - file=DESCRIPTOR, - containing_type=None, - create_key=_descriptor._internal_create_key, - fields=[ - _descriptor.FieldDescriptor( - name='sender', full_name='grpc.ModelRequest.sender', index=0, - number=1, type=11, cpp_type=10, label=1, - has_default_value=False, default_value=None, - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), - _descriptor.FieldDescriptor( - name='receiver', full_name='grpc.ModelRequest.receiver', index=1, - number=2, type=11, cpp_type=10, label=1, - has_default_value=False, default_value=None, - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), - _descriptor.FieldDescriptor( - name='data', full_name='grpc.ModelRequest.data', index=2, - number=3, type=12, cpp_type=9, label=1, - has_default_value=False, default_value=b"", - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), - _descriptor.FieldDescriptor( - name='id', full_name='grpc.ModelRequest.id', index=3, - number=4, type=9, cpp_type=9, label=1, - has_default_value=False, default_value=b"".decode('utf-8'), - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), - _descriptor.FieldDescriptor( - name='status', full_name='grpc.ModelRequest.status', index=4, - number=5, type=14, cpp_type=8, label=1, - has_default_value=False, default_value=0, - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), - ], - extensions=[ - ], - nested_types=[], - enum_types=[ - ], - serialized_options=None, - is_extendable=False, - syntax='proto3', - extension_ranges=[], - oneofs=[ - ], - serialized_start=1068, - serialized_end=1205, + name='ModelRequest', + full_name='grpc.ModelRequest', + filename=None, + file=DESCRIPTOR, + containing_type=None, + create_key=_descriptor._internal_create_key, + fields=[ + _descriptor.FieldDescriptor( + name='sender', full_name='grpc.ModelRequest.sender', index=0, + number=1, type=11, cpp_type=10, label=1, + has_default_value=False, default_value=None, + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + _descriptor.FieldDescriptor( + name='receiver', full_name='grpc.ModelRequest.receiver', index=1, + number=2, type=11, cpp_type=10, label=1, + has_default_value=False, default_value=None, + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + _descriptor.FieldDescriptor( + name='data', full_name='grpc.ModelRequest.data', index=2, + number=3, type=12, cpp_type=9, label=1, + has_default_value=False, default_value=b"", + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + _descriptor.FieldDescriptor( + name='id', full_name='grpc.ModelRequest.id', index=3, + number=4, type=9, cpp_type=9, label=1, + has_default_value=False, default_value=b"".decode('utf-8'), + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + _descriptor.FieldDescriptor( + name='status', full_name='grpc.ModelRequest.status', index=4, + number=5, type=14, cpp_type=8, label=1, + has_default_value=False, default_value=0, + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + ], + extensions=[ + ], + nested_types=[], + enum_types=[ + ], + serialized_options=None, + is_extendable=False, + syntax='proto3', + extension_ranges=[], + oneofs=[ + ], + serialized_start=1068, + serialized_end=1205, ) _MODELRESPONSE = _descriptor.Descriptor( - name='ModelResponse', - full_name='grpc.ModelResponse', - filename=None, - file=DESCRIPTOR, - containing_type=None, - create_key=_descriptor._internal_create_key, - fields=[ - _descriptor.FieldDescriptor( - name='data', full_name='grpc.ModelResponse.data', index=0, - number=1, type=12, cpp_type=9, label=1, - has_default_value=False, default_value=b"", - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), - _descriptor.FieldDescriptor( - name='id', full_name='grpc.ModelResponse.id', index=1, - number=2, type=9, cpp_type=9, label=1, - has_default_value=False, default_value=b"".decode('utf-8'), - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), - _descriptor.FieldDescriptor( - name='status', full_name='grpc.ModelResponse.status', index=2, - number=3, type=14, cpp_type=8, label=1, - has_default_value=False, default_value=0, - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), - _descriptor.FieldDescriptor( - name='message', full_name='grpc.ModelResponse.message', index=3, - number=4, type=9, cpp_type=9, label=1, - has_default_value=False, default_value=b"".decode('utf-8'), - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), - ], - extensions=[ - ], - nested_types=[], - enum_types=[ - ], - serialized_options=None, - is_extendable=False, - syntax='proto3', - extension_ranges=[], - oneofs=[ - ], - serialized_start=1207, - serialized_end=1300, + name='ModelResponse', + full_name='grpc.ModelResponse', + filename=None, + file=DESCRIPTOR, + containing_type=None, + create_key=_descriptor._internal_create_key, + fields=[ + _descriptor.FieldDescriptor( + name='data', full_name='grpc.ModelResponse.data', index=0, + number=1, type=12, cpp_type=9, label=1, + has_default_value=False, default_value=b"", + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + _descriptor.FieldDescriptor( + name='id', full_name='grpc.ModelResponse.id', index=1, + number=2, type=9, cpp_type=9, label=1, + has_default_value=False, default_value=b"".decode('utf-8'), + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + _descriptor.FieldDescriptor( + name='status', full_name='grpc.ModelResponse.status', index=2, + number=3, type=14, cpp_type=8, label=1, + has_default_value=False, default_value=0, + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + _descriptor.FieldDescriptor( + name='message', full_name='grpc.ModelResponse.message', index=3, + number=4, type=9, cpp_type=9, label=1, + has_default_value=False, default_value=b"".decode('utf-8'), + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + ], + extensions=[ + ], + nested_types=[], + enum_types=[ + ], + serialized_options=None, + is_extendable=False, + syntax='proto3', + extension_ranges=[], + oneofs=[ + ], + serialized_start=1207, + serialized_end=1300, ) _GETGLOBALMODELREQUEST = _descriptor.Descriptor( - name='GetGlobalModelRequest', - full_name='grpc.GetGlobalModelRequest', - filename=None, - file=DESCRIPTOR, - containing_type=None, - create_key=_descriptor._internal_create_key, - fields=[ - _descriptor.FieldDescriptor( - name='sender', full_name='grpc.GetGlobalModelRequest.sender', index=0, - number=1, type=11, cpp_type=10, label=1, - has_default_value=False, default_value=None, - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), - _descriptor.FieldDescriptor( - name='receiver', full_name='grpc.GetGlobalModelRequest.receiver', index=1, - number=2, type=11, cpp_type=10, label=1, - has_default_value=False, default_value=None, - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), - ], - extensions=[ - ], - nested_types=[], - enum_types=[ - ], - serialized_options=None, - is_extendable=False, - syntax='proto3', - extension_ranges=[], - oneofs=[ - ], - serialized_start=1302, - serialized_end=1387, + name='GetGlobalModelRequest', + full_name='grpc.GetGlobalModelRequest', + filename=None, + file=DESCRIPTOR, + containing_type=None, + create_key=_descriptor._internal_create_key, + fields=[ + _descriptor.FieldDescriptor( + name='sender', full_name='grpc.GetGlobalModelRequest.sender', index=0, + number=1, type=11, cpp_type=10, label=1, + has_default_value=False, default_value=None, + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + _descriptor.FieldDescriptor( + name='receiver', full_name='grpc.GetGlobalModelRequest.receiver', index=1, + number=2, type=11, cpp_type=10, label=1, + has_default_value=False, default_value=None, + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + ], + extensions=[ + ], + nested_types=[], + enum_types=[ + ], + serialized_options=None, + is_extendable=False, + syntax='proto3', + extension_ranges=[], + oneofs=[ + ], + serialized_start=1302, + serialized_end=1387, ) _GETGLOBALMODELRESPONSE = _descriptor.Descriptor( - name='GetGlobalModelResponse', - full_name='grpc.GetGlobalModelResponse', - filename=None, - file=DESCRIPTOR, - containing_type=None, - create_key=_descriptor._internal_create_key, - fields=[ - _descriptor.FieldDescriptor( - name='sender', full_name='grpc.GetGlobalModelResponse.sender', index=0, - number=1, type=11, cpp_type=10, label=1, - has_default_value=False, default_value=None, - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), - _descriptor.FieldDescriptor( - name='receiver', full_name='grpc.GetGlobalModelResponse.receiver', index=1, - number=2, type=11, cpp_type=10, label=1, - has_default_value=False, default_value=None, - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), - _descriptor.FieldDescriptor( - name='model_id', full_name='grpc.GetGlobalModelResponse.model_id', index=2, - number=3, type=9, cpp_type=9, label=1, - has_default_value=False, default_value=b"".decode('utf-8'), - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), - ], - extensions=[ - ], - nested_types=[], - enum_types=[ - ], - serialized_options=None, - is_extendable=False, - syntax='proto3', - extension_ranges=[], - oneofs=[ - ], - serialized_start=1389, - serialized_end=1493, + name='GetGlobalModelResponse', + full_name='grpc.GetGlobalModelResponse', + filename=None, + file=DESCRIPTOR, + containing_type=None, + create_key=_descriptor._internal_create_key, + fields=[ + _descriptor.FieldDescriptor( + name='sender', full_name='grpc.GetGlobalModelResponse.sender', index=0, + number=1, type=11, cpp_type=10, label=1, + has_default_value=False, default_value=None, + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + _descriptor.FieldDescriptor( + name='receiver', full_name='grpc.GetGlobalModelResponse.receiver', index=1, + number=2, type=11, cpp_type=10, label=1, + has_default_value=False, default_value=None, + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + _descriptor.FieldDescriptor( + name='model_id', full_name='grpc.GetGlobalModelResponse.model_id', index=2, + number=3, type=9, cpp_type=9, label=1, + has_default_value=False, default_value=b"".decode('utf-8'), + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + ], + extensions=[ + ], + nested_types=[], + enum_types=[ + ], + serialized_options=None, + is_extendable=False, + syntax='proto3', + extension_ranges=[], + oneofs=[ + ], + serialized_start=1389, + serialized_end=1493, ) _HEARTBEAT = _descriptor.Descriptor( - name='Heartbeat', - full_name='grpc.Heartbeat', - filename=None, - file=DESCRIPTOR, - containing_type=None, - create_key=_descriptor._internal_create_key, - fields=[ - _descriptor.FieldDescriptor( - name='sender', full_name='grpc.Heartbeat.sender', index=0, - number=1, type=11, cpp_type=10, label=1, - has_default_value=False, default_value=None, - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), - ], - extensions=[ - ], - nested_types=[], - enum_types=[ - ], - serialized_options=None, - is_extendable=False, - syntax='proto3', - extension_ranges=[], - oneofs=[ - ], - serialized_start=1495, - serialized_end=1536, + name='Heartbeat', + full_name='grpc.Heartbeat', + filename=None, + file=DESCRIPTOR, + containing_type=None, + create_key=_descriptor._internal_create_key, + fields=[ + _descriptor.FieldDescriptor( + name='sender', full_name='grpc.Heartbeat.sender', index=0, + number=1, type=11, cpp_type=10, label=1, + has_default_value=False, default_value=None, + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + ], + extensions=[ + ], + nested_types=[], + enum_types=[ + ], + serialized_options=None, + is_extendable=False, + syntax='proto3', + extension_ranges=[], + oneofs=[ + ], + serialized_start=1495, + serialized_end=1536, ) _CLIENTAVAILABLEMESSAGE = _descriptor.Descriptor( - name='ClientAvailableMessage', - full_name='grpc.ClientAvailableMessage', - filename=None, - file=DESCRIPTOR, - containing_type=None, - create_key=_descriptor._internal_create_key, - fields=[ - _descriptor.FieldDescriptor( - name='sender', full_name='grpc.ClientAvailableMessage.sender', index=0, - number=1, type=11, cpp_type=10, label=1, - has_default_value=False, default_value=None, - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), - _descriptor.FieldDescriptor( - name='data', full_name='grpc.ClientAvailableMessage.data', index=1, - number=2, type=9, cpp_type=9, label=1, - has_default_value=False, default_value=b"".decode('utf-8'), - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), - _descriptor.FieldDescriptor( - name='timestamp', full_name='grpc.ClientAvailableMessage.timestamp', index=2, - number=3, type=9, cpp_type=9, label=1, - has_default_value=False, default_value=b"".decode('utf-8'), - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), - ], - extensions=[ - ], - nested_types=[], - enum_types=[ - ], - serialized_options=None, - is_extendable=False, - syntax='proto3', - extension_ranges=[], - oneofs=[ - ], - serialized_start=1538, - serialized_end=1625, + name='ClientAvailableMessage', + full_name='grpc.ClientAvailableMessage', + filename=None, + file=DESCRIPTOR, + containing_type=None, + create_key=_descriptor._internal_create_key, + fields=[ + _descriptor.FieldDescriptor( + name='sender', full_name='grpc.ClientAvailableMessage.sender', index=0, + number=1, type=11, cpp_type=10, label=1, + has_default_value=False, default_value=None, + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + _descriptor.FieldDescriptor( + name='data', full_name='grpc.ClientAvailableMessage.data', index=1, + number=2, type=9, cpp_type=9, label=1, + has_default_value=False, default_value=b"".decode('utf-8'), + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + _descriptor.FieldDescriptor( + name='timestamp', full_name='grpc.ClientAvailableMessage.timestamp', index=2, + number=3, type=9, cpp_type=9, label=1, + has_default_value=False, default_value=b"".decode('utf-8'), + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + ], + extensions=[ + ], + nested_types=[], + enum_types=[ + ], + serialized_options=None, + is_extendable=False, + syntax='proto3', + extension_ranges=[], + oneofs=[ + ], + serialized_start=1538, + serialized_end=1625, ) _LISTCLIENTSREQUEST = _descriptor.Descriptor( - name='ListClientsRequest', - full_name='grpc.ListClientsRequest', - filename=None, - file=DESCRIPTOR, - containing_type=None, - create_key=_descriptor._internal_create_key, - fields=[ - _descriptor.FieldDescriptor( - name='sender', full_name='grpc.ListClientsRequest.sender', index=0, - number=1, type=11, cpp_type=10, label=1, - has_default_value=False, default_value=None, - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), - _descriptor.FieldDescriptor( - name='channel', full_name='grpc.ListClientsRequest.channel', index=1, - number=2, type=14, cpp_type=8, label=1, - has_default_value=False, default_value=0, - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), - ], - extensions=[ - ], - nested_types=[], - enum_types=[ - ], - serialized_options=None, - is_extendable=False, - syntax='proto3', - extension_ranges=[], - oneofs=[ - ], - serialized_start=1627, - serialized_end=1709, + name='ListClientsRequest', + full_name='grpc.ListClientsRequest', + filename=None, + file=DESCRIPTOR, + containing_type=None, + create_key=_descriptor._internal_create_key, + fields=[ + _descriptor.FieldDescriptor( + name='sender', full_name='grpc.ListClientsRequest.sender', index=0, + number=1, type=11, cpp_type=10, label=1, + has_default_value=False, default_value=None, + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + _descriptor.FieldDescriptor( + name='channel', full_name='grpc.ListClientsRequest.channel', index=1, + number=2, type=14, cpp_type=8, label=1, + has_default_value=False, default_value=0, + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + ], + extensions=[ + ], + nested_types=[], + enum_types=[ + ], + serialized_options=None, + is_extendable=False, + syntax='proto3', + extension_ranges=[], + oneofs=[ + ], + serialized_start=1627, + serialized_end=1709, ) _CLIENTLIST = _descriptor.Descriptor( - name='ClientList', - full_name='grpc.ClientList', - filename=None, - file=DESCRIPTOR, - containing_type=None, - create_key=_descriptor._internal_create_key, - fields=[ - _descriptor.FieldDescriptor( - name='client', full_name='grpc.ClientList.client', index=0, - number=1, type=11, cpp_type=10, label=3, - has_default_value=False, default_value=[], - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), - ], - extensions=[ - ], - nested_types=[], - enum_types=[ - ], - serialized_options=None, - is_extendable=False, - syntax='proto3', - extension_ranges=[], - oneofs=[ - ], - serialized_start=1711, - serialized_end=1753, + name='ClientList', + full_name='grpc.ClientList', + filename=None, + file=DESCRIPTOR, + containing_type=None, + create_key=_descriptor._internal_create_key, + fields=[ + _descriptor.FieldDescriptor( + name='client', full_name='grpc.ClientList.client', index=0, + number=1, type=11, cpp_type=10, label=3, + has_default_value=False, default_value=[], + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + ], + extensions=[ + ], + nested_types=[], + enum_types=[ + ], + serialized_options=None, + is_extendable=False, + syntax='proto3', + extension_ranges=[], + oneofs=[ + ], + serialized_start=1711, + serialized_end=1753, ) _CLIENT = _descriptor.Descriptor( - name='Client', - full_name='grpc.Client', - filename=None, - file=DESCRIPTOR, - containing_type=None, - create_key=_descriptor._internal_create_key, - fields=[ - _descriptor.FieldDescriptor( - name='role', full_name='grpc.Client.role', index=0, - number=1, type=14, cpp_type=8, label=1, - has_default_value=False, default_value=0, - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), - _descriptor.FieldDescriptor( - name='name', full_name='grpc.Client.name', index=1, - number=2, type=9, cpp_type=9, label=1, - has_default_value=False, default_value=b"".decode('utf-8'), - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), - ], - extensions=[ - ], - nested_types=[], - enum_types=[ - ], - serialized_options=None, - is_extendable=False, - syntax='proto3', - extension_ranges=[], - oneofs=[ - ], - serialized_start=1755, - serialized_end=1803, + name='Client', + full_name='grpc.Client', + filename=None, + file=DESCRIPTOR, + containing_type=None, + create_key=_descriptor._internal_create_key, + fields=[ + _descriptor.FieldDescriptor( + name='role', full_name='grpc.Client.role', index=0, + number=1, type=14, cpp_type=8, label=1, + has_default_value=False, default_value=0, + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + _descriptor.FieldDescriptor( + name='name', full_name='grpc.Client.name', index=1, + number=2, type=9, cpp_type=9, label=1, + has_default_value=False, default_value=b"".decode('utf-8'), + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + ], + extensions=[ + ], + nested_types=[], + enum_types=[ + ], + serialized_options=None, + is_extendable=False, + syntax='proto3', + extension_ranges=[], + oneofs=[ + ], + serialized_start=1755, + serialized_end=1803, ) _REASSIGNREQUEST = _descriptor.Descriptor( - name='ReassignRequest', - full_name='grpc.ReassignRequest', - filename=None, - file=DESCRIPTOR, - containing_type=None, - create_key=_descriptor._internal_create_key, - fields=[ - _descriptor.FieldDescriptor( - name='sender', full_name='grpc.ReassignRequest.sender', index=0, - number=1, type=11, cpp_type=10, label=1, - has_default_value=False, default_value=None, - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), - _descriptor.FieldDescriptor( - name='receiver', full_name='grpc.ReassignRequest.receiver', index=1, - number=2, type=11, cpp_type=10, label=1, - has_default_value=False, default_value=None, - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), - _descriptor.FieldDescriptor( - name='server', full_name='grpc.ReassignRequest.server', index=2, - number=3, type=9, cpp_type=9, label=1, - has_default_value=False, default_value=b"".decode('utf-8'), - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), - _descriptor.FieldDescriptor( - name='port', full_name='grpc.ReassignRequest.port', index=3, - number=4, type=13, cpp_type=3, label=1, - has_default_value=False, default_value=0, - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), - ], - extensions=[ - ], - nested_types=[], - enum_types=[ - ], - serialized_options=None, - is_extendable=False, - syntax='proto3', - extension_ranges=[], - oneofs=[ - ], - serialized_start=1805, - serialized_end=1914, + name='ReassignRequest', + full_name='grpc.ReassignRequest', + filename=None, + file=DESCRIPTOR, + containing_type=None, + create_key=_descriptor._internal_create_key, + fields=[ + _descriptor.FieldDescriptor( + name='sender', full_name='grpc.ReassignRequest.sender', index=0, + number=1, type=11, cpp_type=10, label=1, + has_default_value=False, default_value=None, + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + _descriptor.FieldDescriptor( + name='receiver', full_name='grpc.ReassignRequest.receiver', index=1, + number=2, type=11, cpp_type=10, label=1, + has_default_value=False, default_value=None, + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + _descriptor.FieldDescriptor( + name='server', full_name='grpc.ReassignRequest.server', index=2, + number=3, type=9, cpp_type=9, label=1, + has_default_value=False, default_value=b"".decode('utf-8'), + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + _descriptor.FieldDescriptor( + name='port', full_name='grpc.ReassignRequest.port', index=3, + number=4, type=13, cpp_type=3, label=1, + has_default_value=False, default_value=0, + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + ], + extensions=[ + ], + nested_types=[], + enum_types=[ + ], + serialized_options=None, + is_extendable=False, + syntax='proto3', + extension_ranges=[], + oneofs=[ + ], + serialized_start=1805, + serialized_end=1914, ) _RECONNECTREQUEST = _descriptor.Descriptor( - name='ReconnectRequest', - full_name='grpc.ReconnectRequest', - filename=None, - file=DESCRIPTOR, - containing_type=None, - create_key=_descriptor._internal_create_key, - fields=[ - _descriptor.FieldDescriptor( - name='sender', full_name='grpc.ReconnectRequest.sender', index=0, - number=1, type=11, cpp_type=10, label=1, - has_default_value=False, default_value=None, - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), - _descriptor.FieldDescriptor( - name='receiver', full_name='grpc.ReconnectRequest.receiver', index=1, - number=2, type=11, cpp_type=10, label=1, - has_default_value=False, default_value=None, - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), - _descriptor.FieldDescriptor( - name='reconnect', full_name='grpc.ReconnectRequest.reconnect', index=2, - number=3, type=13, cpp_type=3, label=1, - has_default_value=False, default_value=0, - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), - ], - extensions=[ - ], - nested_types=[], - enum_types=[ - ], - serialized_options=None, - is_extendable=False, - syntax='proto3', - extension_ranges=[], - oneofs=[ - ], - serialized_start=1916, - serialized_end=2015, + name='ReconnectRequest', + full_name='grpc.ReconnectRequest', + filename=None, + file=DESCRIPTOR, + containing_type=None, + create_key=_descriptor._internal_create_key, + fields=[ + _descriptor.FieldDescriptor( + name='sender', full_name='grpc.ReconnectRequest.sender', index=0, + number=1, type=11, cpp_type=10, label=1, + has_default_value=False, default_value=None, + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + _descriptor.FieldDescriptor( + name='receiver', full_name='grpc.ReconnectRequest.receiver', index=1, + number=2, type=11, cpp_type=10, label=1, + has_default_value=False, default_value=None, + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + _descriptor.FieldDescriptor( + name='reconnect', full_name='grpc.ReconnectRequest.reconnect', index=2, + number=3, type=13, cpp_type=3, label=1, + has_default_value=False, default_value=0, + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + ], + extensions=[ + ], + nested_types=[], + enum_types=[ + ], + serialized_options=None, + is_extendable=False, + syntax='proto3', + extension_ranges=[], + oneofs=[ + ], + serialized_start=1916, + serialized_end=2015, ) _PARAMETER = _descriptor.Descriptor( - name='Parameter', - full_name='grpc.Parameter', - filename=None, - file=DESCRIPTOR, - containing_type=None, - create_key=_descriptor._internal_create_key, - fields=[ - _descriptor.FieldDescriptor( - name='key', full_name='grpc.Parameter.key', index=0, - number=1, type=9, cpp_type=9, label=1, - has_default_value=False, default_value=b"".decode('utf-8'), - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), - _descriptor.FieldDescriptor( - name='value', full_name='grpc.Parameter.value', index=1, - number=2, type=9, cpp_type=9, label=1, - has_default_value=False, default_value=b"".decode('utf-8'), - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), - ], - extensions=[ - ], - nested_types=[], - enum_types=[ - ], - serialized_options=None, - is_extendable=False, - syntax='proto3', - extension_ranges=[], - oneofs=[ - ], - serialized_start=2017, - serialized_end=2056, + name='Parameter', + full_name='grpc.Parameter', + filename=None, + file=DESCRIPTOR, + containing_type=None, + create_key=_descriptor._internal_create_key, + fields=[ + _descriptor.FieldDescriptor( + name='key', full_name='grpc.Parameter.key', index=0, + number=1, type=9, cpp_type=9, label=1, + has_default_value=False, default_value=b"".decode('utf-8'), + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + _descriptor.FieldDescriptor( + name='value', full_name='grpc.Parameter.value', index=1, + number=2, type=9, cpp_type=9, label=1, + has_default_value=False, default_value=b"".decode('utf-8'), + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + ], + extensions=[ + ], + nested_types=[], + enum_types=[ + ], + serialized_options=None, + is_extendable=False, + syntax='proto3', + extension_ranges=[], + oneofs=[ + ], + serialized_start=2017, + serialized_end=2056, ) _CONTROLREQUEST = _descriptor.Descriptor( - name='ControlRequest', - full_name='grpc.ControlRequest', - filename=None, - file=DESCRIPTOR, - containing_type=None, - create_key=_descriptor._internal_create_key, - fields=[ - _descriptor.FieldDescriptor( - name='command', full_name='grpc.ControlRequest.command', index=0, - number=1, type=14, cpp_type=8, label=1, - has_default_value=False, default_value=0, - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), - _descriptor.FieldDescriptor( - name='parameter', full_name='grpc.ControlRequest.parameter', index=1, - number=2, type=11, cpp_type=10, label=3, - has_default_value=False, default_value=[], - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), - ], - extensions=[ - ], - nested_types=[], - enum_types=[ - ], - serialized_options=None, - is_extendable=False, - syntax='proto3', - extension_ranges=[], - oneofs=[ - ], - serialized_start=2058, - serialized_end=2142, + name='ControlRequest', + full_name='grpc.ControlRequest', + filename=None, + file=DESCRIPTOR, + containing_type=None, + create_key=_descriptor._internal_create_key, + fields=[ + _descriptor.FieldDescriptor( + name='command', full_name='grpc.ControlRequest.command', index=0, + number=1, type=14, cpp_type=8, label=1, + has_default_value=False, default_value=0, + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + _descriptor.FieldDescriptor( + name='parameter', full_name='grpc.ControlRequest.parameter', index=1, + number=2, type=11, cpp_type=10, label=3, + has_default_value=False, default_value=[], + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + ], + extensions=[ + ], + nested_types=[], + enum_types=[ + ], + serialized_options=None, + is_extendable=False, + syntax='proto3', + extension_ranges=[], + oneofs=[ + ], + serialized_start=2058, + serialized_end=2142, ) _CONTROLRESPONSE = _descriptor.Descriptor( - name='ControlResponse', - full_name='grpc.ControlResponse', - filename=None, - file=DESCRIPTOR, - containing_type=None, - create_key=_descriptor._internal_create_key, - fields=[ - _descriptor.FieldDescriptor( - name='message', full_name='grpc.ControlResponse.message', index=0, - number=1, type=9, cpp_type=9, label=1, - has_default_value=False, default_value=b"".decode('utf-8'), - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), - _descriptor.FieldDescriptor( - name='parameter', full_name='grpc.ControlResponse.parameter', index=1, - number=2, type=11, cpp_type=10, label=3, - has_default_value=False, default_value=[], - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), - ], - extensions=[ - ], - nested_types=[], - enum_types=[ - ], - serialized_options=None, - is_extendable=False, - syntax='proto3', - extension_ranges=[], - oneofs=[ - ], - serialized_start=2144, - serialized_end=2214, + name='ControlResponse', + full_name='grpc.ControlResponse', + filename=None, + file=DESCRIPTOR, + containing_type=None, + create_key=_descriptor._internal_create_key, + fields=[ + _descriptor.FieldDescriptor( + name='message', full_name='grpc.ControlResponse.message', index=0, + number=1, type=9, cpp_type=9, label=1, + has_default_value=False, default_value=b"".decode('utf-8'), + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + _descriptor.FieldDescriptor( + name='parameter', full_name='grpc.ControlResponse.parameter', index=1, + number=2, type=11, cpp_type=10, label=3, + has_default_value=False, default_value=[], + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + ], + extensions=[ + ], + nested_types=[], + enum_types=[ + ], + serialized_options=None, + is_extendable=False, + syntax='proto3', + extension_ranges=[], + oneofs=[ + ], + serialized_start=2144, + serialized_end=2214, ) _REPORTRESPONSE = _descriptor.Descriptor( - name='ReportResponse', - full_name='grpc.ReportResponse', - filename=None, - file=DESCRIPTOR, - containing_type=None, - create_key=_descriptor._internal_create_key, - fields=[ - _descriptor.FieldDescriptor( - name='sender', full_name='grpc.ReportResponse.sender', index=0, - number=1, type=11, cpp_type=10, label=1, - has_default_value=False, default_value=None, - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), - _descriptor.FieldDescriptor( - name='parameter', full_name='grpc.ReportResponse.parameter', index=1, - number=2, type=11, cpp_type=10, label=3, - has_default_value=False, default_value=[], - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), - ], - extensions=[ - ], - nested_types=[], - enum_types=[ - ], - serialized_options=None, - is_extendable=False, - syntax='proto3', - extension_ranges=[], - oneofs=[ - ], - serialized_start=2216, - serialized_end=2298, + name='ReportResponse', + full_name='grpc.ReportResponse', + filename=None, + file=DESCRIPTOR, + containing_type=None, + create_key=_descriptor._internal_create_key, + fields=[ + _descriptor.FieldDescriptor( + name='sender', full_name='grpc.ReportResponse.sender', index=0, + number=1, type=11, cpp_type=10, label=1, + has_default_value=False, default_value=None, + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + _descriptor.FieldDescriptor( + name='parameter', full_name='grpc.ReportResponse.parameter', index=1, + number=2, type=11, cpp_type=10, label=3, + has_default_value=False, default_value=[], + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + ], + extensions=[ + ], + nested_types=[], + enum_types=[ + ], + serialized_options=None, + is_extendable=False, + syntax='proto3', + extension_ranges=[], + oneofs=[ + ], + serialized_start=2216, + serialized_end=2298, ) _CONNECTIONREQUEST = _descriptor.Descriptor( - name='ConnectionRequest', - full_name='grpc.ConnectionRequest', - filename=None, - file=DESCRIPTOR, - containing_type=None, - create_key=_descriptor._internal_create_key, - fields=[ - ], - extensions=[ - ], - nested_types=[], - enum_types=[ - ], - serialized_options=None, - is_extendable=False, - syntax='proto3', - extension_ranges=[], - oneofs=[ - ], - serialized_start=2300, - serialized_end=2319, + name='ConnectionRequest', + full_name='grpc.ConnectionRequest', + filename=None, + file=DESCRIPTOR, + containing_type=None, + create_key=_descriptor._internal_create_key, + fields=[ + ], + extensions=[ + ], + nested_types=[], + enum_types=[ + ], + serialized_options=None, + is_extendable=False, + syntax='proto3', + extension_ranges=[], + oneofs=[ + ], + serialized_start=2300, + serialized_end=2319, ) _CONNECTIONRESPONSE = _descriptor.Descriptor( - name='ConnectionResponse', - full_name='grpc.ConnectionResponse', - filename=None, - file=DESCRIPTOR, - containing_type=None, - create_key=_descriptor._internal_create_key, - fields=[ - _descriptor.FieldDescriptor( - name='status', full_name='grpc.ConnectionResponse.status', index=0, - number=1, type=14, cpp_type=8, label=1, - has_default_value=False, default_value=0, - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), - ], - extensions=[ - ], - nested_types=[], - enum_types=[ - ], - serialized_options=None, - is_extendable=False, - syntax='proto3', - extension_ranges=[], - oneofs=[ - ], - serialized_start=2321, - serialized_end=2381, + name='ConnectionResponse', + full_name='grpc.ConnectionResponse', + filename=None, + file=DESCRIPTOR, + containing_type=None, + create_key=_descriptor._internal_create_key, + fields=[ + _descriptor.FieldDescriptor( + name='status', full_name='grpc.ConnectionResponse.status', index=0, + number=1, type=14, cpp_type=8, label=1, + has_default_value=False, default_value=0, + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + ], + extensions=[ + ], + nested_types=[], + enum_types=[ + ], + serialized_options=None, + is_extendable=False, + syntax='proto3', + extension_ranges=[], + oneofs=[ + ], + serialized_start=2321, + serialized_end=2381, ) _RESPONSE.fields_by_name['sender'].message_type = _CLIENT @@ -1506,463 +1505,462 @@ _sym_db.RegisterFileDescriptor(DESCRIPTOR) Response = _reflection.GeneratedProtocolMessageType('Response', (_message.Message,), { - 'DESCRIPTOR' : _RESPONSE, - '__module__' : 'fedn.common.net.grpc.fedn_pb2' - # @@protoc_insertion_point(class_scope:grpc.Response) - }) + 'DESCRIPTOR': _RESPONSE, + '__module__': 'fedn.common.net.grpc.fedn_pb2' + # @@protoc_insertion_point(class_scope:grpc.Response) +}) _sym_db.RegisterMessage(Response) Status = _reflection.GeneratedProtocolMessageType('Status', (_message.Message,), { - 'DESCRIPTOR' : _STATUS, - '__module__' : 'fedn.common.net.grpc.fedn_pb2' - # @@protoc_insertion_point(class_scope:grpc.Status) - }) + 'DESCRIPTOR': _STATUS, + '__module__': 'fedn.common.net.grpc.fedn_pb2' + # @@protoc_insertion_point(class_scope:grpc.Status) +}) _sym_db.RegisterMessage(Status) ModelUpdateRequest = _reflection.GeneratedProtocolMessageType('ModelUpdateRequest', (_message.Message,), { - 'DESCRIPTOR' : _MODELUPDATEREQUEST, - '__module__' : 'fedn.common.net.grpc.fedn_pb2' - # @@protoc_insertion_point(class_scope:grpc.ModelUpdateRequest) - }) + 'DESCRIPTOR': _MODELUPDATEREQUEST, + '__module__': 'fedn.common.net.grpc.fedn_pb2' + # @@protoc_insertion_point(class_scope:grpc.ModelUpdateRequest) +}) _sym_db.RegisterMessage(ModelUpdateRequest) ModelUpdate = _reflection.GeneratedProtocolMessageType('ModelUpdate', (_message.Message,), { - 'DESCRIPTOR' : _MODELUPDATE, - '__module__' : 'fedn.common.net.grpc.fedn_pb2' - # @@protoc_insertion_point(class_scope:grpc.ModelUpdate) - }) + 'DESCRIPTOR': _MODELUPDATE, + '__module__': 'fedn.common.net.grpc.fedn_pb2' + # @@protoc_insertion_point(class_scope:grpc.ModelUpdate) +}) _sym_db.RegisterMessage(ModelUpdate) ModelValidationRequest = _reflection.GeneratedProtocolMessageType('ModelValidationRequest', (_message.Message,), { - 'DESCRIPTOR' : _MODELVALIDATIONREQUEST, - '__module__' : 'fedn.common.net.grpc.fedn_pb2' - # @@protoc_insertion_point(class_scope:grpc.ModelValidationRequest) - }) + 'DESCRIPTOR': _MODELVALIDATIONREQUEST, + '__module__': 'fedn.common.net.grpc.fedn_pb2' + # @@protoc_insertion_point(class_scope:grpc.ModelValidationRequest) +}) _sym_db.RegisterMessage(ModelValidationRequest) ModelValidation = _reflection.GeneratedProtocolMessageType('ModelValidation', (_message.Message,), { - 'DESCRIPTOR' : _MODELVALIDATION, - '__module__' : 'fedn.common.net.grpc.fedn_pb2' - # @@protoc_insertion_point(class_scope:grpc.ModelValidation) - }) + 'DESCRIPTOR': _MODELVALIDATION, + '__module__': 'fedn.common.net.grpc.fedn_pb2' + # @@protoc_insertion_point(class_scope:grpc.ModelValidation) +}) _sym_db.RegisterMessage(ModelValidation) ModelRequest = _reflection.GeneratedProtocolMessageType('ModelRequest', (_message.Message,), { - 'DESCRIPTOR' : _MODELREQUEST, - '__module__' : 'fedn.common.net.grpc.fedn_pb2' - # @@protoc_insertion_point(class_scope:grpc.ModelRequest) - }) + 'DESCRIPTOR': _MODELREQUEST, + '__module__': 'fedn.common.net.grpc.fedn_pb2' + # @@protoc_insertion_point(class_scope:grpc.ModelRequest) +}) _sym_db.RegisterMessage(ModelRequest) ModelResponse = _reflection.GeneratedProtocolMessageType('ModelResponse', (_message.Message,), { - 'DESCRIPTOR' : _MODELRESPONSE, - '__module__' : 'fedn.common.net.grpc.fedn_pb2' - # @@protoc_insertion_point(class_scope:grpc.ModelResponse) - }) + 'DESCRIPTOR': _MODELRESPONSE, + '__module__': 'fedn.common.net.grpc.fedn_pb2' + # @@protoc_insertion_point(class_scope:grpc.ModelResponse) +}) _sym_db.RegisterMessage(ModelResponse) GetGlobalModelRequest = _reflection.GeneratedProtocolMessageType('GetGlobalModelRequest', (_message.Message,), { - 'DESCRIPTOR' : _GETGLOBALMODELREQUEST, - '__module__' : 'fedn.common.net.grpc.fedn_pb2' - # @@protoc_insertion_point(class_scope:grpc.GetGlobalModelRequest) - }) + 'DESCRIPTOR': _GETGLOBALMODELREQUEST, + '__module__': 'fedn.common.net.grpc.fedn_pb2' + # @@protoc_insertion_point(class_scope:grpc.GetGlobalModelRequest) +}) _sym_db.RegisterMessage(GetGlobalModelRequest) GetGlobalModelResponse = _reflection.GeneratedProtocolMessageType('GetGlobalModelResponse', (_message.Message,), { - 'DESCRIPTOR' : _GETGLOBALMODELRESPONSE, - '__module__' : 'fedn.common.net.grpc.fedn_pb2' - # @@protoc_insertion_point(class_scope:grpc.GetGlobalModelResponse) - }) + 'DESCRIPTOR': _GETGLOBALMODELRESPONSE, + '__module__': 'fedn.common.net.grpc.fedn_pb2' + # @@protoc_insertion_point(class_scope:grpc.GetGlobalModelResponse) +}) _sym_db.RegisterMessage(GetGlobalModelResponse) Heartbeat = _reflection.GeneratedProtocolMessageType('Heartbeat', (_message.Message,), { - 'DESCRIPTOR' : _HEARTBEAT, - '__module__' : 'fedn.common.net.grpc.fedn_pb2' - # @@protoc_insertion_point(class_scope:grpc.Heartbeat) - }) + 'DESCRIPTOR': _HEARTBEAT, + '__module__': 'fedn.common.net.grpc.fedn_pb2' + # @@protoc_insertion_point(class_scope:grpc.Heartbeat) +}) _sym_db.RegisterMessage(Heartbeat) ClientAvailableMessage = _reflection.GeneratedProtocolMessageType('ClientAvailableMessage', (_message.Message,), { - 'DESCRIPTOR' : _CLIENTAVAILABLEMESSAGE, - '__module__' : 'fedn.common.net.grpc.fedn_pb2' - # @@protoc_insertion_point(class_scope:grpc.ClientAvailableMessage) - }) + 'DESCRIPTOR': _CLIENTAVAILABLEMESSAGE, + '__module__': 'fedn.common.net.grpc.fedn_pb2' + # @@protoc_insertion_point(class_scope:grpc.ClientAvailableMessage) +}) _sym_db.RegisterMessage(ClientAvailableMessage) ListClientsRequest = _reflection.GeneratedProtocolMessageType('ListClientsRequest', (_message.Message,), { - 'DESCRIPTOR' : _LISTCLIENTSREQUEST, - '__module__' : 'fedn.common.net.grpc.fedn_pb2' - # @@protoc_insertion_point(class_scope:grpc.ListClientsRequest) - }) + 'DESCRIPTOR': _LISTCLIENTSREQUEST, + '__module__': 'fedn.common.net.grpc.fedn_pb2' + # @@protoc_insertion_point(class_scope:grpc.ListClientsRequest) +}) _sym_db.RegisterMessage(ListClientsRequest) ClientList = _reflection.GeneratedProtocolMessageType('ClientList', (_message.Message,), { - 'DESCRIPTOR' : _CLIENTLIST, - '__module__' : 'fedn.common.net.grpc.fedn_pb2' - # @@protoc_insertion_point(class_scope:grpc.ClientList) - }) + 'DESCRIPTOR': _CLIENTLIST, + '__module__': 'fedn.common.net.grpc.fedn_pb2' + # @@protoc_insertion_point(class_scope:grpc.ClientList) +}) _sym_db.RegisterMessage(ClientList) Client = _reflection.GeneratedProtocolMessageType('Client', (_message.Message,), { - 'DESCRIPTOR' : _CLIENT, - '__module__' : 'fedn.common.net.grpc.fedn_pb2' - # @@protoc_insertion_point(class_scope:grpc.Client) - }) + 'DESCRIPTOR': _CLIENT, + '__module__': 'fedn.common.net.grpc.fedn_pb2' + # @@protoc_insertion_point(class_scope:grpc.Client) +}) _sym_db.RegisterMessage(Client) ReassignRequest = _reflection.GeneratedProtocolMessageType('ReassignRequest', (_message.Message,), { - 'DESCRIPTOR' : _REASSIGNREQUEST, - '__module__' : 'fedn.common.net.grpc.fedn_pb2' - # @@protoc_insertion_point(class_scope:grpc.ReassignRequest) - }) + 'DESCRIPTOR': _REASSIGNREQUEST, + '__module__': 'fedn.common.net.grpc.fedn_pb2' + # @@protoc_insertion_point(class_scope:grpc.ReassignRequest) +}) _sym_db.RegisterMessage(ReassignRequest) ReconnectRequest = _reflection.GeneratedProtocolMessageType('ReconnectRequest', (_message.Message,), { - 'DESCRIPTOR' : _RECONNECTREQUEST, - '__module__' : 'fedn.common.net.grpc.fedn_pb2' - # @@protoc_insertion_point(class_scope:grpc.ReconnectRequest) - }) + 'DESCRIPTOR': _RECONNECTREQUEST, + '__module__': 'fedn.common.net.grpc.fedn_pb2' + # @@protoc_insertion_point(class_scope:grpc.ReconnectRequest) +}) _sym_db.RegisterMessage(ReconnectRequest) Parameter = _reflection.GeneratedProtocolMessageType('Parameter', (_message.Message,), { - 'DESCRIPTOR' : _PARAMETER, - '__module__' : 'fedn.common.net.grpc.fedn_pb2' - # @@protoc_insertion_point(class_scope:grpc.Parameter) - }) + 'DESCRIPTOR': _PARAMETER, + '__module__': 'fedn.common.net.grpc.fedn_pb2' + # @@protoc_insertion_point(class_scope:grpc.Parameter) +}) _sym_db.RegisterMessage(Parameter) ControlRequest = _reflection.GeneratedProtocolMessageType('ControlRequest', (_message.Message,), { - 'DESCRIPTOR' : _CONTROLREQUEST, - '__module__' : 'fedn.common.net.grpc.fedn_pb2' - # @@protoc_insertion_point(class_scope:grpc.ControlRequest) - }) + 'DESCRIPTOR': _CONTROLREQUEST, + '__module__': 'fedn.common.net.grpc.fedn_pb2' + # @@protoc_insertion_point(class_scope:grpc.ControlRequest) +}) _sym_db.RegisterMessage(ControlRequest) ControlResponse = _reflection.GeneratedProtocolMessageType('ControlResponse', (_message.Message,), { - 'DESCRIPTOR' : _CONTROLRESPONSE, - '__module__' : 'fedn.common.net.grpc.fedn_pb2' - # @@protoc_insertion_point(class_scope:grpc.ControlResponse) - }) + 'DESCRIPTOR': _CONTROLRESPONSE, + '__module__': 'fedn.common.net.grpc.fedn_pb2' + # @@protoc_insertion_point(class_scope:grpc.ControlResponse) +}) _sym_db.RegisterMessage(ControlResponse) ReportResponse = _reflection.GeneratedProtocolMessageType('ReportResponse', (_message.Message,), { - 'DESCRIPTOR' : _REPORTRESPONSE, - '__module__' : 'fedn.common.net.grpc.fedn_pb2' - # @@protoc_insertion_point(class_scope:grpc.ReportResponse) - }) + 'DESCRIPTOR': _REPORTRESPONSE, + '__module__': 'fedn.common.net.grpc.fedn_pb2' + # @@protoc_insertion_point(class_scope:grpc.ReportResponse) +}) _sym_db.RegisterMessage(ReportResponse) ConnectionRequest = _reflection.GeneratedProtocolMessageType('ConnectionRequest', (_message.Message,), { - 'DESCRIPTOR' : _CONNECTIONREQUEST, - '__module__' : 'fedn.common.net.grpc.fedn_pb2' - # @@protoc_insertion_point(class_scope:grpc.ConnectionRequest) - }) + 'DESCRIPTOR': _CONNECTIONREQUEST, + '__module__': 'fedn.common.net.grpc.fedn_pb2' + # @@protoc_insertion_point(class_scope:grpc.ConnectionRequest) +}) _sym_db.RegisterMessage(ConnectionRequest) ConnectionResponse = _reflection.GeneratedProtocolMessageType('ConnectionResponse', (_message.Message,), { - 'DESCRIPTOR' : _CONNECTIONRESPONSE, - '__module__' : 'fedn.common.net.grpc.fedn_pb2' - # @@protoc_insertion_point(class_scope:grpc.ConnectionResponse) - }) + 'DESCRIPTOR': _CONNECTIONRESPONSE, + '__module__': 'fedn.common.net.grpc.fedn_pb2' + # @@protoc_insertion_point(class_scope:grpc.ConnectionResponse) +}) _sym_db.RegisterMessage(ConnectionResponse) - _MODELSERVICE = _descriptor.ServiceDescriptor( - name='ModelService', - full_name='grpc.ModelService', - file=DESCRIPTOR, - index=0, - serialized_options=None, - create_key=_descriptor._internal_create_key, - serialized_start=2920, - serialized_end=3042, - methods=[ - _descriptor.MethodDescriptor( - name='Upload', - full_name='grpc.ModelService.Upload', + name='ModelService', + full_name='grpc.ModelService', + file=DESCRIPTOR, index=0, - containing_service=None, - input_type=_MODELREQUEST, - output_type=_MODELRESPONSE, serialized_options=None, create_key=_descriptor._internal_create_key, - ), - _descriptor.MethodDescriptor( - name='Download', - full_name='grpc.ModelService.Download', - index=1, - containing_service=None, - input_type=_MODELREQUEST, - output_type=_MODELRESPONSE, - serialized_options=None, - create_key=_descriptor._internal_create_key, - ), -]) + serialized_start=2920, + serialized_end=3042, + methods=[ + _descriptor.MethodDescriptor( + name='Upload', + full_name='grpc.ModelService.Upload', + index=0, + containing_service=None, + input_type=_MODELREQUEST, + output_type=_MODELRESPONSE, + serialized_options=None, + create_key=_descriptor._internal_create_key, + ), + _descriptor.MethodDescriptor( + name='Download', + full_name='grpc.ModelService.Download', + index=1, + containing_service=None, + input_type=_MODELREQUEST, + output_type=_MODELRESPONSE, + serialized_options=None, + create_key=_descriptor._internal_create_key, + ), + ]) _sym_db.RegisterServiceDescriptor(_MODELSERVICE) DESCRIPTOR.services_by_name['ModelService'] = _MODELSERVICE _CONTROL = _descriptor.ServiceDescriptor( - name='Control', - full_name='grpc.Control', - file=DESCRIPTOR, - index=1, - serialized_options=None, - create_key=_descriptor._internal_create_key, - serialized_start=3045, - serialized_end=3272, - methods=[ - _descriptor.MethodDescriptor( - name='Start', - full_name='grpc.Control.Start', - index=0, - containing_service=None, - input_type=_CONTROLREQUEST, - output_type=_CONTROLRESPONSE, - serialized_options=None, - create_key=_descriptor._internal_create_key, - ), - _descriptor.MethodDescriptor( - name='Stop', - full_name='grpc.Control.Stop', + name='Control', + full_name='grpc.Control', + file=DESCRIPTOR, index=1, - containing_service=None, - input_type=_CONTROLREQUEST, - output_type=_CONTROLRESPONSE, - serialized_options=None, - create_key=_descriptor._internal_create_key, - ), - _descriptor.MethodDescriptor( - name='Configure', - full_name='grpc.Control.Configure', - index=2, - containing_service=None, - input_type=_CONTROLREQUEST, - output_type=_REPORTRESPONSE, - serialized_options=None, - create_key=_descriptor._internal_create_key, - ), - _descriptor.MethodDescriptor( - name='Report', - full_name='grpc.Control.Report', - index=3, - containing_service=None, - input_type=_CONTROLREQUEST, - output_type=_REPORTRESPONSE, serialized_options=None, create_key=_descriptor._internal_create_key, - ), -]) + serialized_start=3045, + serialized_end=3272, + methods=[ + _descriptor.MethodDescriptor( + name='Start', + full_name='grpc.Control.Start', + index=0, + containing_service=None, + input_type=_CONTROLREQUEST, + output_type=_CONTROLRESPONSE, + serialized_options=None, + create_key=_descriptor._internal_create_key, + ), + _descriptor.MethodDescriptor( + name='Stop', + full_name='grpc.Control.Stop', + index=1, + containing_service=None, + input_type=_CONTROLREQUEST, + output_type=_CONTROLRESPONSE, + serialized_options=None, + create_key=_descriptor._internal_create_key, + ), + _descriptor.MethodDescriptor( + name='Configure', + full_name='grpc.Control.Configure', + index=2, + containing_service=None, + input_type=_CONTROLREQUEST, + output_type=_REPORTRESPONSE, + serialized_options=None, + create_key=_descriptor._internal_create_key, + ), + _descriptor.MethodDescriptor( + name='Report', + full_name='grpc.Control.Report', + index=3, + containing_service=None, + input_type=_CONTROLREQUEST, + output_type=_REPORTRESPONSE, + serialized_options=None, + create_key=_descriptor._internal_create_key, + ), + ]) _sym_db.RegisterServiceDescriptor(_CONTROL) DESCRIPTOR.services_by_name['Control'] = _CONTROL _REDUCER = _descriptor.ServiceDescriptor( - name='Reducer', - full_name='grpc.Reducer', - file=DESCRIPTOR, - index=2, - serialized_options=None, - create_key=_descriptor._internal_create_key, - serialized_start=3274, - serialized_end=3360, - methods=[ - _descriptor.MethodDescriptor( - name='GetGlobalModel', - full_name='grpc.Reducer.GetGlobalModel', - index=0, - containing_service=None, - input_type=_GETGLOBALMODELREQUEST, - output_type=_GETGLOBALMODELRESPONSE, + name='Reducer', + full_name='grpc.Reducer', + file=DESCRIPTOR, + index=2, serialized_options=None, create_key=_descriptor._internal_create_key, - ), -]) + serialized_start=3274, + serialized_end=3360, + methods=[ + _descriptor.MethodDescriptor( + name='GetGlobalModel', + full_name='grpc.Reducer.GetGlobalModel', + index=0, + containing_service=None, + input_type=_GETGLOBALMODELREQUEST, + output_type=_GETGLOBALMODELRESPONSE, + serialized_options=None, + create_key=_descriptor._internal_create_key, + ), + ]) _sym_db.RegisterServiceDescriptor(_REDUCER) DESCRIPTOR.services_by_name['Reducer'] = _REDUCER _CONNECTOR = _descriptor.ServiceDescriptor( - name='Connector', - full_name='grpc.Connector', - file=DESCRIPTOR, - index=3, - serialized_options=None, - create_key=_descriptor._internal_create_key, - serialized_start=3363, - serialized_end=3790, - methods=[ - _descriptor.MethodDescriptor( - name='AllianceStatusStream', - full_name='grpc.Connector.AllianceStatusStream', - index=0, - containing_service=None, - input_type=_CLIENTAVAILABLEMESSAGE, - output_type=_STATUS, - serialized_options=None, - create_key=_descriptor._internal_create_key, - ), - _descriptor.MethodDescriptor( - name='SendStatus', - full_name='grpc.Connector.SendStatus', - index=1, - containing_service=None, - input_type=_STATUS, - output_type=_RESPONSE, - serialized_options=None, - create_key=_descriptor._internal_create_key, - ), - _descriptor.MethodDescriptor( - name='ListActiveClients', - full_name='grpc.Connector.ListActiveClients', - index=2, - containing_service=None, - input_type=_LISTCLIENTSREQUEST, - output_type=_CLIENTLIST, - serialized_options=None, - create_key=_descriptor._internal_create_key, - ), - _descriptor.MethodDescriptor( - name='AcceptingClients', - full_name='grpc.Connector.AcceptingClients', + name='Connector', + full_name='grpc.Connector', + file=DESCRIPTOR, index=3, - containing_service=None, - input_type=_CONNECTIONREQUEST, - output_type=_CONNECTIONRESPONSE, serialized_options=None, create_key=_descriptor._internal_create_key, - ), - _descriptor.MethodDescriptor( - name='SendHeartbeat', - full_name='grpc.Connector.SendHeartbeat', - index=4, - containing_service=None, - input_type=_HEARTBEAT, - output_type=_RESPONSE, - serialized_options=None, - create_key=_descriptor._internal_create_key, - ), - _descriptor.MethodDescriptor( - name='ReassignClient', - full_name='grpc.Connector.ReassignClient', - index=5, - containing_service=None, - input_type=_REASSIGNREQUEST, - output_type=_RESPONSE, - serialized_options=None, - create_key=_descriptor._internal_create_key, - ), - _descriptor.MethodDescriptor( - name='ReconnectClient', - full_name='grpc.Connector.ReconnectClient', - index=6, - containing_service=None, - input_type=_RECONNECTREQUEST, - output_type=_RESPONSE, - serialized_options=None, - create_key=_descriptor._internal_create_key, - ), -]) + serialized_start=3363, + serialized_end=3790, + methods=[ + _descriptor.MethodDescriptor( + name='AllianceStatusStream', + full_name='grpc.Connector.AllianceStatusStream', + index=0, + containing_service=None, + input_type=_CLIENTAVAILABLEMESSAGE, + output_type=_STATUS, + serialized_options=None, + create_key=_descriptor._internal_create_key, + ), + _descriptor.MethodDescriptor( + name='SendStatus', + full_name='grpc.Connector.SendStatus', + index=1, + containing_service=None, + input_type=_STATUS, + output_type=_RESPONSE, + serialized_options=None, + create_key=_descriptor._internal_create_key, + ), + _descriptor.MethodDescriptor( + name='ListActiveClients', + full_name='grpc.Connector.ListActiveClients', + index=2, + containing_service=None, + input_type=_LISTCLIENTSREQUEST, + output_type=_CLIENTLIST, + serialized_options=None, + create_key=_descriptor._internal_create_key, + ), + _descriptor.MethodDescriptor( + name='AcceptingClients', + full_name='grpc.Connector.AcceptingClients', + index=3, + containing_service=None, + input_type=_CONNECTIONREQUEST, + output_type=_CONNECTIONRESPONSE, + serialized_options=None, + create_key=_descriptor._internal_create_key, + ), + _descriptor.MethodDescriptor( + name='SendHeartbeat', + full_name='grpc.Connector.SendHeartbeat', + index=4, + containing_service=None, + input_type=_HEARTBEAT, + output_type=_RESPONSE, + serialized_options=None, + create_key=_descriptor._internal_create_key, + ), + _descriptor.MethodDescriptor( + name='ReassignClient', + full_name='grpc.Connector.ReassignClient', + index=5, + containing_service=None, + input_type=_REASSIGNREQUEST, + output_type=_RESPONSE, + serialized_options=None, + create_key=_descriptor._internal_create_key, + ), + _descriptor.MethodDescriptor( + name='ReconnectClient', + full_name='grpc.Connector.ReconnectClient', + index=6, + containing_service=None, + input_type=_RECONNECTREQUEST, + output_type=_RESPONSE, + serialized_options=None, + create_key=_descriptor._internal_create_key, + ), + ]) _sym_db.RegisterServiceDescriptor(_CONNECTOR) DESCRIPTOR.services_by_name['Connector'] = _CONNECTOR _COMBINER = _descriptor.ServiceDescriptor( - name='Combiner', - full_name='grpc.Combiner', - file=DESCRIPTOR, - index=4, - serialized_options=None, - create_key=_descriptor._internal_create_key, - serialized_start=3793, - serialized_end=4395, - methods=[ - _descriptor.MethodDescriptor( - name='ModelUpdateRequestStream', - full_name='grpc.Combiner.ModelUpdateRequestStream', - index=0, - containing_service=None, - input_type=_CLIENTAVAILABLEMESSAGE, - output_type=_MODELUPDATEREQUEST, - serialized_options=None, - create_key=_descriptor._internal_create_key, - ), - _descriptor.MethodDescriptor( - name='ModelUpdateStream', - full_name='grpc.Combiner.ModelUpdateStream', - index=1, - containing_service=None, - input_type=_CLIENTAVAILABLEMESSAGE, - output_type=_MODELUPDATE, - serialized_options=None, - create_key=_descriptor._internal_create_key, - ), - _descriptor.MethodDescriptor( - name='ModelValidationRequestStream', - full_name='grpc.Combiner.ModelValidationRequestStream', - index=2, - containing_service=None, - input_type=_CLIENTAVAILABLEMESSAGE, - output_type=_MODELVALIDATIONREQUEST, - serialized_options=None, - create_key=_descriptor._internal_create_key, - ), - _descriptor.MethodDescriptor( - name='ModelValidationStream', - full_name='grpc.Combiner.ModelValidationStream', - index=3, - containing_service=None, - input_type=_CLIENTAVAILABLEMESSAGE, - output_type=_MODELVALIDATION, - serialized_options=None, - create_key=_descriptor._internal_create_key, - ), - _descriptor.MethodDescriptor( - name='SendModelUpdateRequest', - full_name='grpc.Combiner.SendModelUpdateRequest', + name='Combiner', + full_name='grpc.Combiner', + file=DESCRIPTOR, index=4, - containing_service=None, - input_type=_MODELUPDATEREQUEST, - output_type=_RESPONSE, - serialized_options=None, - create_key=_descriptor._internal_create_key, - ), - _descriptor.MethodDescriptor( - name='SendModelUpdate', - full_name='grpc.Combiner.SendModelUpdate', - index=5, - containing_service=None, - input_type=_MODELUPDATE, - output_type=_RESPONSE, - serialized_options=None, - create_key=_descriptor._internal_create_key, - ), - _descriptor.MethodDescriptor( - name='SendModelValidationRequest', - full_name='grpc.Combiner.SendModelValidationRequest', - index=6, - containing_service=None, - input_type=_MODELVALIDATIONREQUEST, - output_type=_RESPONSE, - serialized_options=None, - create_key=_descriptor._internal_create_key, - ), - _descriptor.MethodDescriptor( - name='SendModelValidation', - full_name='grpc.Combiner.SendModelValidation', - index=7, - containing_service=None, - input_type=_MODELVALIDATION, - output_type=_RESPONSE, serialized_options=None, create_key=_descriptor._internal_create_key, - ), -]) + serialized_start=3793, + serialized_end=4395, + methods=[ + _descriptor.MethodDescriptor( + name='ModelUpdateRequestStream', + full_name='grpc.Combiner.ModelUpdateRequestStream', + index=0, + containing_service=None, + input_type=_CLIENTAVAILABLEMESSAGE, + output_type=_MODELUPDATEREQUEST, + serialized_options=None, + create_key=_descriptor._internal_create_key, + ), + _descriptor.MethodDescriptor( + name='ModelUpdateStream', + full_name='grpc.Combiner.ModelUpdateStream', + index=1, + containing_service=None, + input_type=_CLIENTAVAILABLEMESSAGE, + output_type=_MODELUPDATE, + serialized_options=None, + create_key=_descriptor._internal_create_key, + ), + _descriptor.MethodDescriptor( + name='ModelValidationRequestStream', + full_name='grpc.Combiner.ModelValidationRequestStream', + index=2, + containing_service=None, + input_type=_CLIENTAVAILABLEMESSAGE, + output_type=_MODELVALIDATIONREQUEST, + serialized_options=None, + create_key=_descriptor._internal_create_key, + ), + _descriptor.MethodDescriptor( + name='ModelValidationStream', + full_name='grpc.Combiner.ModelValidationStream', + index=3, + containing_service=None, + input_type=_CLIENTAVAILABLEMESSAGE, + output_type=_MODELVALIDATION, + serialized_options=None, + create_key=_descriptor._internal_create_key, + ), + _descriptor.MethodDescriptor( + name='SendModelUpdateRequest', + full_name='grpc.Combiner.SendModelUpdateRequest', + index=4, + containing_service=None, + input_type=_MODELUPDATEREQUEST, + output_type=_RESPONSE, + serialized_options=None, + create_key=_descriptor._internal_create_key, + ), + _descriptor.MethodDescriptor( + name='SendModelUpdate', + full_name='grpc.Combiner.SendModelUpdate', + index=5, + containing_service=None, + input_type=_MODELUPDATE, + output_type=_RESPONSE, + serialized_options=None, + create_key=_descriptor._internal_create_key, + ), + _descriptor.MethodDescriptor( + name='SendModelValidationRequest', + full_name='grpc.Combiner.SendModelValidationRequest', + index=6, + containing_service=None, + input_type=_MODELVALIDATIONREQUEST, + output_type=_RESPONSE, + serialized_options=None, + create_key=_descriptor._internal_create_key, + ), + _descriptor.MethodDescriptor( + name='SendModelValidation', + full_name='grpc.Combiner.SendModelValidation', + index=7, + containing_service=None, + input_type=_MODELVALIDATION, + output_type=_RESPONSE, + serialized_options=None, + create_key=_descriptor._internal_create_key, + ), + ]) _sym_db.RegisterServiceDescriptor(_COMBINER) DESCRIPTOR.services_by_name['Combiner'] = _COMBINER diff --git a/fedn/fedn/common/net/grpc/fedn_pb2_grpc.py b/fedn/fedn/common/net/grpc/fedn_pb2_grpc.py index 97c73e5d5..975fee755 100644 --- a/fedn/fedn/common/net/grpc/fedn_pb2_grpc.py +++ b/fedn/fedn/common/net/grpc/fedn_pb2_grpc.py @@ -2,7 +2,8 @@ """Client and server classes corresponding to protobuf-defined services.""" import grpc -from fedn.common.net.grpc import fedn_pb2 as fedn_dot_common_dot_net_dot_grpc_dot_fedn__pb2 +from fedn.common.net.grpc import \ + fedn_pb2 as fedn_dot_common_dot_net_dot_grpc_dot_fedn__pb2 class ModelServiceStub(object): @@ -15,15 +16,15 @@ def __init__(self, channel): channel: A grpc.Channel. """ self.Upload = channel.stream_unary( - '/grpc.ModelService/Upload', - request_serializer=fedn_dot_common_dot_net_dot_grpc_dot_fedn__pb2.ModelRequest.SerializeToString, - response_deserializer=fedn_dot_common_dot_net_dot_grpc_dot_fedn__pb2.ModelResponse.FromString, - ) + '/grpc.ModelService/Upload', + request_serializer=fedn_dot_common_dot_net_dot_grpc_dot_fedn__pb2.ModelRequest.SerializeToString, + response_deserializer=fedn_dot_common_dot_net_dot_grpc_dot_fedn__pb2.ModelResponse.FromString, + ) self.Download = channel.unary_stream( - '/grpc.ModelService/Download', - request_serializer=fedn_dot_common_dot_net_dot_grpc_dot_fedn__pb2.ModelRequest.SerializeToString, - response_deserializer=fedn_dot_common_dot_net_dot_grpc_dot_fedn__pb2.ModelResponse.FromString, - ) + '/grpc.ModelService/Download', + request_serializer=fedn_dot_common_dot_net_dot_grpc_dot_fedn__pb2.ModelRequest.SerializeToString, + response_deserializer=fedn_dot_common_dot_net_dot_grpc_dot_fedn__pb2.ModelResponse.FromString, + ) class ModelServiceServicer(object): @@ -44,59 +45,60 @@ def Download(self, request, context): def add_ModelServiceServicer_to_server(servicer, server): rpc_method_handlers = { - 'Upload': grpc.stream_unary_rpc_method_handler( - servicer.Upload, - request_deserializer=fedn_dot_common_dot_net_dot_grpc_dot_fedn__pb2.ModelRequest.FromString, - response_serializer=fedn_dot_common_dot_net_dot_grpc_dot_fedn__pb2.ModelResponse.SerializeToString, - ), - 'Download': grpc.unary_stream_rpc_method_handler( - servicer.Download, - request_deserializer=fedn_dot_common_dot_net_dot_grpc_dot_fedn__pb2.ModelRequest.FromString, - response_serializer=fedn_dot_common_dot_net_dot_grpc_dot_fedn__pb2.ModelResponse.SerializeToString, - ), + 'Upload': grpc.stream_unary_rpc_method_handler( + servicer.Upload, + request_deserializer=fedn_dot_common_dot_net_dot_grpc_dot_fedn__pb2.ModelRequest.FromString, + response_serializer=fedn_dot_common_dot_net_dot_grpc_dot_fedn__pb2.ModelResponse.SerializeToString, + ), + 'Download': grpc.unary_stream_rpc_method_handler( + servicer.Download, + request_deserializer=fedn_dot_common_dot_net_dot_grpc_dot_fedn__pb2.ModelRequest.FromString, + response_serializer=fedn_dot_common_dot_net_dot_grpc_dot_fedn__pb2.ModelResponse.SerializeToString, + ), } generic_handler = grpc.method_handlers_generic_handler( - 'grpc.ModelService', rpc_method_handlers) + 'grpc.ModelService', rpc_method_handlers) server.add_generic_rpc_handlers((generic_handler,)) - # This class is part of an EXPERIMENTAL API. + + class ModelService(object): """Missing associated documentation comment in .proto file.""" @staticmethod def Upload(request_iterator, - target, - options=(), - channel_credentials=None, - call_credentials=None, - insecure=False, - compression=None, - wait_for_ready=None, - timeout=None, - metadata=None): + target, + options=(), + channel_credentials=None, + call_credentials=None, + insecure=False, + compression=None, + wait_for_ready=None, + timeout=None, + metadata=None): return grpc.experimental.stream_unary(request_iterator, target, '/grpc.ModelService/Upload', - fedn_dot_common_dot_net_dot_grpc_dot_fedn__pb2.ModelRequest.SerializeToString, - fedn_dot_common_dot_net_dot_grpc_dot_fedn__pb2.ModelResponse.FromString, - options, channel_credentials, - insecure, call_credentials, compression, wait_for_ready, timeout, metadata) + fedn_dot_common_dot_net_dot_grpc_dot_fedn__pb2.ModelRequest.SerializeToString, + fedn_dot_common_dot_net_dot_grpc_dot_fedn__pb2.ModelResponse.FromString, + options, channel_credentials, + insecure, call_credentials, compression, wait_for_ready, timeout, metadata) @staticmethod def Download(request, - target, - options=(), - channel_credentials=None, - call_credentials=None, - insecure=False, - compression=None, - wait_for_ready=None, - timeout=None, - metadata=None): + target, + options=(), + channel_credentials=None, + call_credentials=None, + insecure=False, + compression=None, + wait_for_ready=None, + timeout=None, + metadata=None): return grpc.experimental.unary_stream(request, target, '/grpc.ModelService/Download', - fedn_dot_common_dot_net_dot_grpc_dot_fedn__pb2.ModelRequest.SerializeToString, - fedn_dot_common_dot_net_dot_grpc_dot_fedn__pb2.ModelResponse.FromString, - options, channel_credentials, - insecure, call_credentials, compression, wait_for_ready, timeout, metadata) + fedn_dot_common_dot_net_dot_grpc_dot_fedn__pb2.ModelRequest.SerializeToString, + fedn_dot_common_dot_net_dot_grpc_dot_fedn__pb2.ModelResponse.FromString, + options, channel_credentials, + insecure, call_credentials, compression, wait_for_ready, timeout, metadata) class ControlStub(object): @@ -109,25 +111,25 @@ def __init__(self, channel): channel: A grpc.Channel. """ self.Start = channel.unary_unary( - '/grpc.Control/Start', - request_serializer=fedn_dot_common_dot_net_dot_grpc_dot_fedn__pb2.ControlRequest.SerializeToString, - response_deserializer=fedn_dot_common_dot_net_dot_grpc_dot_fedn__pb2.ControlResponse.FromString, - ) + '/grpc.Control/Start', + request_serializer=fedn_dot_common_dot_net_dot_grpc_dot_fedn__pb2.ControlRequest.SerializeToString, + response_deserializer=fedn_dot_common_dot_net_dot_grpc_dot_fedn__pb2.ControlResponse.FromString, + ) self.Stop = channel.unary_unary( - '/grpc.Control/Stop', - request_serializer=fedn_dot_common_dot_net_dot_grpc_dot_fedn__pb2.ControlRequest.SerializeToString, - response_deserializer=fedn_dot_common_dot_net_dot_grpc_dot_fedn__pb2.ControlResponse.FromString, - ) + '/grpc.Control/Stop', + request_serializer=fedn_dot_common_dot_net_dot_grpc_dot_fedn__pb2.ControlRequest.SerializeToString, + response_deserializer=fedn_dot_common_dot_net_dot_grpc_dot_fedn__pb2.ControlResponse.FromString, + ) self.Configure = channel.unary_unary( - '/grpc.Control/Configure', - request_serializer=fedn_dot_common_dot_net_dot_grpc_dot_fedn__pb2.ControlRequest.SerializeToString, - response_deserializer=fedn_dot_common_dot_net_dot_grpc_dot_fedn__pb2.ReportResponse.FromString, - ) + '/grpc.Control/Configure', + request_serializer=fedn_dot_common_dot_net_dot_grpc_dot_fedn__pb2.ControlRequest.SerializeToString, + response_deserializer=fedn_dot_common_dot_net_dot_grpc_dot_fedn__pb2.ReportResponse.FromString, + ) self.Report = channel.unary_unary( - '/grpc.Control/Report', - request_serializer=fedn_dot_common_dot_net_dot_grpc_dot_fedn__pb2.ControlRequest.SerializeToString, - response_deserializer=fedn_dot_common_dot_net_dot_grpc_dot_fedn__pb2.ReportResponse.FromString, - ) + '/grpc.Control/Report', + request_serializer=fedn_dot_common_dot_net_dot_grpc_dot_fedn__pb2.ControlRequest.SerializeToString, + response_deserializer=fedn_dot_common_dot_net_dot_grpc_dot_fedn__pb2.ReportResponse.FromString, + ) class ControlServicer(object): @@ -160,103 +162,104 @@ def Report(self, request, context): def add_ControlServicer_to_server(servicer, server): rpc_method_handlers = { - 'Start': grpc.unary_unary_rpc_method_handler( - servicer.Start, - request_deserializer=fedn_dot_common_dot_net_dot_grpc_dot_fedn__pb2.ControlRequest.FromString, - response_serializer=fedn_dot_common_dot_net_dot_grpc_dot_fedn__pb2.ControlResponse.SerializeToString, - ), - 'Stop': grpc.unary_unary_rpc_method_handler( - servicer.Stop, - request_deserializer=fedn_dot_common_dot_net_dot_grpc_dot_fedn__pb2.ControlRequest.FromString, - response_serializer=fedn_dot_common_dot_net_dot_grpc_dot_fedn__pb2.ControlResponse.SerializeToString, - ), - 'Configure': grpc.unary_unary_rpc_method_handler( - servicer.Configure, - request_deserializer=fedn_dot_common_dot_net_dot_grpc_dot_fedn__pb2.ControlRequest.FromString, - response_serializer=fedn_dot_common_dot_net_dot_grpc_dot_fedn__pb2.ReportResponse.SerializeToString, - ), - 'Report': grpc.unary_unary_rpc_method_handler( - servicer.Report, - request_deserializer=fedn_dot_common_dot_net_dot_grpc_dot_fedn__pb2.ControlRequest.FromString, - response_serializer=fedn_dot_common_dot_net_dot_grpc_dot_fedn__pb2.ReportResponse.SerializeToString, - ), + 'Start': grpc.unary_unary_rpc_method_handler( + servicer.Start, + request_deserializer=fedn_dot_common_dot_net_dot_grpc_dot_fedn__pb2.ControlRequest.FromString, + response_serializer=fedn_dot_common_dot_net_dot_grpc_dot_fedn__pb2.ControlResponse.SerializeToString, + ), + 'Stop': grpc.unary_unary_rpc_method_handler( + servicer.Stop, + request_deserializer=fedn_dot_common_dot_net_dot_grpc_dot_fedn__pb2.ControlRequest.FromString, + response_serializer=fedn_dot_common_dot_net_dot_grpc_dot_fedn__pb2.ControlResponse.SerializeToString, + ), + 'Configure': grpc.unary_unary_rpc_method_handler( + servicer.Configure, + request_deserializer=fedn_dot_common_dot_net_dot_grpc_dot_fedn__pb2.ControlRequest.FromString, + response_serializer=fedn_dot_common_dot_net_dot_grpc_dot_fedn__pb2.ReportResponse.SerializeToString, + ), + 'Report': grpc.unary_unary_rpc_method_handler( + servicer.Report, + request_deserializer=fedn_dot_common_dot_net_dot_grpc_dot_fedn__pb2.ControlRequest.FromString, + response_serializer=fedn_dot_common_dot_net_dot_grpc_dot_fedn__pb2.ReportResponse.SerializeToString, + ), } generic_handler = grpc.method_handlers_generic_handler( - 'grpc.Control', rpc_method_handlers) + 'grpc.Control', rpc_method_handlers) server.add_generic_rpc_handlers((generic_handler,)) - # This class is part of an EXPERIMENTAL API. + + class Control(object): """Missing associated documentation comment in .proto file.""" @staticmethod def Start(request, - target, - options=(), - channel_credentials=None, - call_credentials=None, - insecure=False, - compression=None, - wait_for_ready=None, - timeout=None, - metadata=None): + target, + options=(), + channel_credentials=None, + call_credentials=None, + insecure=False, + compression=None, + wait_for_ready=None, + timeout=None, + metadata=None): return grpc.experimental.unary_unary(request, target, '/grpc.Control/Start', - fedn_dot_common_dot_net_dot_grpc_dot_fedn__pb2.ControlRequest.SerializeToString, - fedn_dot_common_dot_net_dot_grpc_dot_fedn__pb2.ControlResponse.FromString, - options, channel_credentials, - insecure, call_credentials, compression, wait_for_ready, timeout, metadata) + fedn_dot_common_dot_net_dot_grpc_dot_fedn__pb2.ControlRequest.SerializeToString, + fedn_dot_common_dot_net_dot_grpc_dot_fedn__pb2.ControlResponse.FromString, + options, channel_credentials, + insecure, call_credentials, compression, wait_for_ready, timeout, metadata) @staticmethod def Stop(request, - target, - options=(), - channel_credentials=None, - call_credentials=None, - insecure=False, - compression=None, - wait_for_ready=None, - timeout=None, - metadata=None): + target, + options=(), + channel_credentials=None, + call_credentials=None, + insecure=False, + compression=None, + wait_for_ready=None, + timeout=None, + metadata=None): return grpc.experimental.unary_unary(request, target, '/grpc.Control/Stop', - fedn_dot_common_dot_net_dot_grpc_dot_fedn__pb2.ControlRequest.SerializeToString, - fedn_dot_common_dot_net_dot_grpc_dot_fedn__pb2.ControlResponse.FromString, - options, channel_credentials, - insecure, call_credentials, compression, wait_for_ready, timeout, metadata) + fedn_dot_common_dot_net_dot_grpc_dot_fedn__pb2.ControlRequest.SerializeToString, + fedn_dot_common_dot_net_dot_grpc_dot_fedn__pb2.ControlResponse.FromString, + options, channel_credentials, + insecure, call_credentials, compression, wait_for_ready, timeout, metadata) @staticmethod def Configure(request, - target, - options=(), - channel_credentials=None, - call_credentials=None, - insecure=False, - compression=None, - wait_for_ready=None, - timeout=None, - metadata=None): + target, + options=(), + channel_credentials=None, + call_credentials=None, + insecure=False, + compression=None, + wait_for_ready=None, + timeout=None, + metadata=None): return grpc.experimental.unary_unary(request, target, '/grpc.Control/Configure', - fedn_dot_common_dot_net_dot_grpc_dot_fedn__pb2.ControlRequest.SerializeToString, - fedn_dot_common_dot_net_dot_grpc_dot_fedn__pb2.ReportResponse.FromString, - options, channel_credentials, - insecure, call_credentials, compression, wait_for_ready, timeout, metadata) + fedn_dot_common_dot_net_dot_grpc_dot_fedn__pb2.ControlRequest.SerializeToString, + fedn_dot_common_dot_net_dot_grpc_dot_fedn__pb2.ReportResponse.FromString, + options, channel_credentials, + insecure, call_credentials, compression, wait_for_ready, timeout, metadata) @staticmethod def Report(request, - target, - options=(), - channel_credentials=None, - call_credentials=None, - insecure=False, - compression=None, - wait_for_ready=None, - timeout=None, - metadata=None): + target, + options=(), + channel_credentials=None, + call_credentials=None, + insecure=False, + compression=None, + wait_for_ready=None, + timeout=None, + metadata=None): return grpc.experimental.unary_unary(request, target, '/grpc.Control/Report', - fedn_dot_common_dot_net_dot_grpc_dot_fedn__pb2.ControlRequest.SerializeToString, - fedn_dot_common_dot_net_dot_grpc_dot_fedn__pb2.ReportResponse.FromString, - options, channel_credentials, - insecure, call_credentials, compression, wait_for_ready, timeout, metadata) + fedn_dot_common_dot_net_dot_grpc_dot_fedn__pb2.ControlRequest.SerializeToString, + fedn_dot_common_dot_net_dot_grpc_dot_fedn__pb2.ReportResponse.FromString, + options, channel_credentials, + insecure, call_credentials, compression, wait_for_ready, timeout, metadata) class ReducerStub(object): @@ -269,10 +272,10 @@ def __init__(self, channel): channel: A grpc.Channel. """ self.GetGlobalModel = channel.unary_unary( - '/grpc.Reducer/GetGlobalModel', - request_serializer=fedn_dot_common_dot_net_dot_grpc_dot_fedn__pb2.GetGlobalModelRequest.SerializeToString, - response_deserializer=fedn_dot_common_dot_net_dot_grpc_dot_fedn__pb2.GetGlobalModelResponse.FromString, - ) + '/grpc.Reducer/GetGlobalModel', + request_serializer=fedn_dot_common_dot_net_dot_grpc_dot_fedn__pb2.GetGlobalModelRequest.SerializeToString, + response_deserializer=fedn_dot_common_dot_net_dot_grpc_dot_fedn__pb2.GetGlobalModelResponse.FromString, + ) class ReducerServicer(object): @@ -287,37 +290,38 @@ def GetGlobalModel(self, request, context): def add_ReducerServicer_to_server(servicer, server): rpc_method_handlers = { - 'GetGlobalModel': grpc.unary_unary_rpc_method_handler( - servicer.GetGlobalModel, - request_deserializer=fedn_dot_common_dot_net_dot_grpc_dot_fedn__pb2.GetGlobalModelRequest.FromString, - response_serializer=fedn_dot_common_dot_net_dot_grpc_dot_fedn__pb2.GetGlobalModelResponse.SerializeToString, - ), + 'GetGlobalModel': grpc.unary_unary_rpc_method_handler( + servicer.GetGlobalModel, + request_deserializer=fedn_dot_common_dot_net_dot_grpc_dot_fedn__pb2.GetGlobalModelRequest.FromString, + response_serializer=fedn_dot_common_dot_net_dot_grpc_dot_fedn__pb2.GetGlobalModelResponse.SerializeToString, + ), } generic_handler = grpc.method_handlers_generic_handler( - 'grpc.Reducer', rpc_method_handlers) + 'grpc.Reducer', rpc_method_handlers) server.add_generic_rpc_handlers((generic_handler,)) - # This class is part of an EXPERIMENTAL API. + + class Reducer(object): """Missing associated documentation comment in .proto file.""" @staticmethod def GetGlobalModel(request, - target, - options=(), - channel_credentials=None, - call_credentials=None, - insecure=False, - compression=None, - wait_for_ready=None, - timeout=None, - metadata=None): + target, + options=(), + channel_credentials=None, + call_credentials=None, + insecure=False, + compression=None, + wait_for_ready=None, + timeout=None, + metadata=None): return grpc.experimental.unary_unary(request, target, '/grpc.Reducer/GetGlobalModel', - fedn_dot_common_dot_net_dot_grpc_dot_fedn__pb2.GetGlobalModelRequest.SerializeToString, - fedn_dot_common_dot_net_dot_grpc_dot_fedn__pb2.GetGlobalModelResponse.FromString, - options, channel_credentials, - insecure, call_credentials, compression, wait_for_ready, timeout, metadata) + fedn_dot_common_dot_net_dot_grpc_dot_fedn__pb2.GetGlobalModelRequest.SerializeToString, + fedn_dot_common_dot_net_dot_grpc_dot_fedn__pb2.GetGlobalModelResponse.FromString, + options, channel_credentials, + insecure, call_credentials, compression, wait_for_ready, timeout, metadata) class ConnectorStub(object): @@ -330,40 +334,40 @@ def __init__(self, channel): channel: A grpc.Channel. """ self.AllianceStatusStream = channel.unary_stream( - '/grpc.Connector/AllianceStatusStream', - request_serializer=fedn_dot_common_dot_net_dot_grpc_dot_fedn__pb2.ClientAvailableMessage.SerializeToString, - response_deserializer=fedn_dot_common_dot_net_dot_grpc_dot_fedn__pb2.Status.FromString, - ) + '/grpc.Connector/AllianceStatusStream', + request_serializer=fedn_dot_common_dot_net_dot_grpc_dot_fedn__pb2.ClientAvailableMessage.SerializeToString, + response_deserializer=fedn_dot_common_dot_net_dot_grpc_dot_fedn__pb2.Status.FromString, + ) self.SendStatus = channel.unary_unary( - '/grpc.Connector/SendStatus', - request_serializer=fedn_dot_common_dot_net_dot_grpc_dot_fedn__pb2.Status.SerializeToString, - response_deserializer=fedn_dot_common_dot_net_dot_grpc_dot_fedn__pb2.Response.FromString, - ) + '/grpc.Connector/SendStatus', + request_serializer=fedn_dot_common_dot_net_dot_grpc_dot_fedn__pb2.Status.SerializeToString, + response_deserializer=fedn_dot_common_dot_net_dot_grpc_dot_fedn__pb2.Response.FromString, + ) self.ListActiveClients = channel.unary_unary( - '/grpc.Connector/ListActiveClients', - request_serializer=fedn_dot_common_dot_net_dot_grpc_dot_fedn__pb2.ListClientsRequest.SerializeToString, - response_deserializer=fedn_dot_common_dot_net_dot_grpc_dot_fedn__pb2.ClientList.FromString, - ) + '/grpc.Connector/ListActiveClients', + request_serializer=fedn_dot_common_dot_net_dot_grpc_dot_fedn__pb2.ListClientsRequest.SerializeToString, + response_deserializer=fedn_dot_common_dot_net_dot_grpc_dot_fedn__pb2.ClientList.FromString, + ) self.AcceptingClients = channel.unary_unary( - '/grpc.Connector/AcceptingClients', - request_serializer=fedn_dot_common_dot_net_dot_grpc_dot_fedn__pb2.ConnectionRequest.SerializeToString, - response_deserializer=fedn_dot_common_dot_net_dot_grpc_dot_fedn__pb2.ConnectionResponse.FromString, - ) + '/grpc.Connector/AcceptingClients', + request_serializer=fedn_dot_common_dot_net_dot_grpc_dot_fedn__pb2.ConnectionRequest.SerializeToString, + response_deserializer=fedn_dot_common_dot_net_dot_grpc_dot_fedn__pb2.ConnectionResponse.FromString, + ) self.SendHeartbeat = channel.unary_unary( - '/grpc.Connector/SendHeartbeat', - request_serializer=fedn_dot_common_dot_net_dot_grpc_dot_fedn__pb2.Heartbeat.SerializeToString, - response_deserializer=fedn_dot_common_dot_net_dot_grpc_dot_fedn__pb2.Response.FromString, - ) + '/grpc.Connector/SendHeartbeat', + request_serializer=fedn_dot_common_dot_net_dot_grpc_dot_fedn__pb2.Heartbeat.SerializeToString, + response_deserializer=fedn_dot_common_dot_net_dot_grpc_dot_fedn__pb2.Response.FromString, + ) self.ReassignClient = channel.unary_unary( - '/grpc.Connector/ReassignClient', - request_serializer=fedn_dot_common_dot_net_dot_grpc_dot_fedn__pb2.ReassignRequest.SerializeToString, - response_deserializer=fedn_dot_common_dot_net_dot_grpc_dot_fedn__pb2.Response.FromString, - ) + '/grpc.Connector/ReassignClient', + request_serializer=fedn_dot_common_dot_net_dot_grpc_dot_fedn__pb2.ReassignRequest.SerializeToString, + response_deserializer=fedn_dot_common_dot_net_dot_grpc_dot_fedn__pb2.Response.FromString, + ) self.ReconnectClient = channel.unary_unary( - '/grpc.Connector/ReconnectClient', - request_serializer=fedn_dot_common_dot_net_dot_grpc_dot_fedn__pb2.ReconnectRequest.SerializeToString, - response_deserializer=fedn_dot_common_dot_net_dot_grpc_dot_fedn__pb2.Response.FromString, - ) + '/grpc.Connector/ReconnectClient', + request_serializer=fedn_dot_common_dot_net_dot_grpc_dot_fedn__pb2.ReconnectRequest.SerializeToString, + response_deserializer=fedn_dot_common_dot_net_dot_grpc_dot_fedn__pb2.Response.FromString, + ) class ConnectorServicer(object): @@ -419,169 +423,170 @@ def ReconnectClient(self, request, context): def add_ConnectorServicer_to_server(servicer, server): rpc_method_handlers = { - 'AllianceStatusStream': grpc.unary_stream_rpc_method_handler( - servicer.AllianceStatusStream, - request_deserializer=fedn_dot_common_dot_net_dot_grpc_dot_fedn__pb2.ClientAvailableMessage.FromString, - response_serializer=fedn_dot_common_dot_net_dot_grpc_dot_fedn__pb2.Status.SerializeToString, - ), - 'SendStatus': grpc.unary_unary_rpc_method_handler( - servicer.SendStatus, - request_deserializer=fedn_dot_common_dot_net_dot_grpc_dot_fedn__pb2.Status.FromString, - response_serializer=fedn_dot_common_dot_net_dot_grpc_dot_fedn__pb2.Response.SerializeToString, - ), - 'ListActiveClients': grpc.unary_unary_rpc_method_handler( - servicer.ListActiveClients, - request_deserializer=fedn_dot_common_dot_net_dot_grpc_dot_fedn__pb2.ListClientsRequest.FromString, - response_serializer=fedn_dot_common_dot_net_dot_grpc_dot_fedn__pb2.ClientList.SerializeToString, - ), - 'AcceptingClients': grpc.unary_unary_rpc_method_handler( - servicer.AcceptingClients, - request_deserializer=fedn_dot_common_dot_net_dot_grpc_dot_fedn__pb2.ConnectionRequest.FromString, - response_serializer=fedn_dot_common_dot_net_dot_grpc_dot_fedn__pb2.ConnectionResponse.SerializeToString, - ), - 'SendHeartbeat': grpc.unary_unary_rpc_method_handler( - servicer.SendHeartbeat, - request_deserializer=fedn_dot_common_dot_net_dot_grpc_dot_fedn__pb2.Heartbeat.FromString, - response_serializer=fedn_dot_common_dot_net_dot_grpc_dot_fedn__pb2.Response.SerializeToString, - ), - 'ReassignClient': grpc.unary_unary_rpc_method_handler( - servicer.ReassignClient, - request_deserializer=fedn_dot_common_dot_net_dot_grpc_dot_fedn__pb2.ReassignRequest.FromString, - response_serializer=fedn_dot_common_dot_net_dot_grpc_dot_fedn__pb2.Response.SerializeToString, - ), - 'ReconnectClient': grpc.unary_unary_rpc_method_handler( - servicer.ReconnectClient, - request_deserializer=fedn_dot_common_dot_net_dot_grpc_dot_fedn__pb2.ReconnectRequest.FromString, - response_serializer=fedn_dot_common_dot_net_dot_grpc_dot_fedn__pb2.Response.SerializeToString, - ), + 'AllianceStatusStream': grpc.unary_stream_rpc_method_handler( + servicer.AllianceStatusStream, + request_deserializer=fedn_dot_common_dot_net_dot_grpc_dot_fedn__pb2.ClientAvailableMessage.FromString, + response_serializer=fedn_dot_common_dot_net_dot_grpc_dot_fedn__pb2.Status.SerializeToString, + ), + 'SendStatus': grpc.unary_unary_rpc_method_handler( + servicer.SendStatus, + request_deserializer=fedn_dot_common_dot_net_dot_grpc_dot_fedn__pb2.Status.FromString, + response_serializer=fedn_dot_common_dot_net_dot_grpc_dot_fedn__pb2.Response.SerializeToString, + ), + 'ListActiveClients': grpc.unary_unary_rpc_method_handler( + servicer.ListActiveClients, + request_deserializer=fedn_dot_common_dot_net_dot_grpc_dot_fedn__pb2.ListClientsRequest.FromString, + response_serializer=fedn_dot_common_dot_net_dot_grpc_dot_fedn__pb2.ClientList.SerializeToString, + ), + 'AcceptingClients': grpc.unary_unary_rpc_method_handler( + servicer.AcceptingClients, + request_deserializer=fedn_dot_common_dot_net_dot_grpc_dot_fedn__pb2.ConnectionRequest.FromString, + response_serializer=fedn_dot_common_dot_net_dot_grpc_dot_fedn__pb2.ConnectionResponse.SerializeToString, + ), + 'SendHeartbeat': grpc.unary_unary_rpc_method_handler( + servicer.SendHeartbeat, + request_deserializer=fedn_dot_common_dot_net_dot_grpc_dot_fedn__pb2.Heartbeat.FromString, + response_serializer=fedn_dot_common_dot_net_dot_grpc_dot_fedn__pb2.Response.SerializeToString, + ), + 'ReassignClient': grpc.unary_unary_rpc_method_handler( + servicer.ReassignClient, + request_deserializer=fedn_dot_common_dot_net_dot_grpc_dot_fedn__pb2.ReassignRequest.FromString, + response_serializer=fedn_dot_common_dot_net_dot_grpc_dot_fedn__pb2.Response.SerializeToString, + ), + 'ReconnectClient': grpc.unary_unary_rpc_method_handler( + servicer.ReconnectClient, + request_deserializer=fedn_dot_common_dot_net_dot_grpc_dot_fedn__pb2.ReconnectRequest.FromString, + response_serializer=fedn_dot_common_dot_net_dot_grpc_dot_fedn__pb2.Response.SerializeToString, + ), } generic_handler = grpc.method_handlers_generic_handler( - 'grpc.Connector', rpc_method_handlers) + 'grpc.Connector', rpc_method_handlers) server.add_generic_rpc_handlers((generic_handler,)) - # This class is part of an EXPERIMENTAL API. + + class Connector(object): """Missing associated documentation comment in .proto file.""" @staticmethod def AllianceStatusStream(request, - target, - options=(), - channel_credentials=None, - call_credentials=None, - insecure=False, - compression=None, - wait_for_ready=None, - timeout=None, - metadata=None): + target, + options=(), + channel_credentials=None, + call_credentials=None, + insecure=False, + compression=None, + wait_for_ready=None, + timeout=None, + metadata=None): return grpc.experimental.unary_stream(request, target, '/grpc.Connector/AllianceStatusStream', - fedn_dot_common_dot_net_dot_grpc_dot_fedn__pb2.ClientAvailableMessage.SerializeToString, - fedn_dot_common_dot_net_dot_grpc_dot_fedn__pb2.Status.FromString, - options, channel_credentials, - insecure, call_credentials, compression, wait_for_ready, timeout, metadata) + fedn_dot_common_dot_net_dot_grpc_dot_fedn__pb2.ClientAvailableMessage.SerializeToString, + fedn_dot_common_dot_net_dot_grpc_dot_fedn__pb2.Status.FromString, + options, channel_credentials, + insecure, call_credentials, compression, wait_for_ready, timeout, metadata) @staticmethod def SendStatus(request, - target, - options=(), - channel_credentials=None, - call_credentials=None, - insecure=False, - compression=None, - wait_for_ready=None, - timeout=None, - metadata=None): + target, + options=(), + channel_credentials=None, + call_credentials=None, + insecure=False, + compression=None, + wait_for_ready=None, + timeout=None, + metadata=None): return grpc.experimental.unary_unary(request, target, '/grpc.Connector/SendStatus', - fedn_dot_common_dot_net_dot_grpc_dot_fedn__pb2.Status.SerializeToString, - fedn_dot_common_dot_net_dot_grpc_dot_fedn__pb2.Response.FromString, - options, channel_credentials, - insecure, call_credentials, compression, wait_for_ready, timeout, metadata) + fedn_dot_common_dot_net_dot_grpc_dot_fedn__pb2.Status.SerializeToString, + fedn_dot_common_dot_net_dot_grpc_dot_fedn__pb2.Response.FromString, + options, channel_credentials, + insecure, call_credentials, compression, wait_for_ready, timeout, metadata) @staticmethod def ListActiveClients(request, - target, - options=(), - channel_credentials=None, - call_credentials=None, - insecure=False, - compression=None, - wait_for_ready=None, - timeout=None, - metadata=None): + target, + options=(), + channel_credentials=None, + call_credentials=None, + insecure=False, + compression=None, + wait_for_ready=None, + timeout=None, + metadata=None): return grpc.experimental.unary_unary(request, target, '/grpc.Connector/ListActiveClients', - fedn_dot_common_dot_net_dot_grpc_dot_fedn__pb2.ListClientsRequest.SerializeToString, - fedn_dot_common_dot_net_dot_grpc_dot_fedn__pb2.ClientList.FromString, - options, channel_credentials, - insecure, call_credentials, compression, wait_for_ready, timeout, metadata) + fedn_dot_common_dot_net_dot_grpc_dot_fedn__pb2.ListClientsRequest.SerializeToString, + fedn_dot_common_dot_net_dot_grpc_dot_fedn__pb2.ClientList.FromString, + options, channel_credentials, + insecure, call_credentials, compression, wait_for_ready, timeout, metadata) @staticmethod def AcceptingClients(request, - target, - options=(), - channel_credentials=None, - call_credentials=None, - insecure=False, - compression=None, - wait_for_ready=None, - timeout=None, - metadata=None): + target, + options=(), + channel_credentials=None, + call_credentials=None, + insecure=False, + compression=None, + wait_for_ready=None, + timeout=None, + metadata=None): return grpc.experimental.unary_unary(request, target, '/grpc.Connector/AcceptingClients', - fedn_dot_common_dot_net_dot_grpc_dot_fedn__pb2.ConnectionRequest.SerializeToString, - fedn_dot_common_dot_net_dot_grpc_dot_fedn__pb2.ConnectionResponse.FromString, - options, channel_credentials, - insecure, call_credentials, compression, wait_for_ready, timeout, metadata) + fedn_dot_common_dot_net_dot_grpc_dot_fedn__pb2.ConnectionRequest.SerializeToString, + fedn_dot_common_dot_net_dot_grpc_dot_fedn__pb2.ConnectionResponse.FromString, + options, channel_credentials, + insecure, call_credentials, compression, wait_for_ready, timeout, metadata) @staticmethod def SendHeartbeat(request, - target, - options=(), - channel_credentials=None, - call_credentials=None, - insecure=False, - compression=None, - wait_for_ready=None, - timeout=None, - metadata=None): + target, + options=(), + channel_credentials=None, + call_credentials=None, + insecure=False, + compression=None, + wait_for_ready=None, + timeout=None, + metadata=None): return grpc.experimental.unary_unary(request, target, '/grpc.Connector/SendHeartbeat', - fedn_dot_common_dot_net_dot_grpc_dot_fedn__pb2.Heartbeat.SerializeToString, - fedn_dot_common_dot_net_dot_grpc_dot_fedn__pb2.Response.FromString, - options, channel_credentials, - insecure, call_credentials, compression, wait_for_ready, timeout, metadata) + fedn_dot_common_dot_net_dot_grpc_dot_fedn__pb2.Heartbeat.SerializeToString, + fedn_dot_common_dot_net_dot_grpc_dot_fedn__pb2.Response.FromString, + options, channel_credentials, + insecure, call_credentials, compression, wait_for_ready, timeout, metadata) @staticmethod def ReassignClient(request, - target, - options=(), - channel_credentials=None, - call_credentials=None, - insecure=False, - compression=None, - wait_for_ready=None, - timeout=None, - metadata=None): + target, + options=(), + channel_credentials=None, + call_credentials=None, + insecure=False, + compression=None, + wait_for_ready=None, + timeout=None, + metadata=None): return grpc.experimental.unary_unary(request, target, '/grpc.Connector/ReassignClient', - fedn_dot_common_dot_net_dot_grpc_dot_fedn__pb2.ReassignRequest.SerializeToString, - fedn_dot_common_dot_net_dot_grpc_dot_fedn__pb2.Response.FromString, - options, channel_credentials, - insecure, call_credentials, compression, wait_for_ready, timeout, metadata) + fedn_dot_common_dot_net_dot_grpc_dot_fedn__pb2.ReassignRequest.SerializeToString, + fedn_dot_common_dot_net_dot_grpc_dot_fedn__pb2.Response.FromString, + options, channel_credentials, + insecure, call_credentials, compression, wait_for_ready, timeout, metadata) @staticmethod def ReconnectClient(request, - target, - options=(), - channel_credentials=None, - call_credentials=None, - insecure=False, - compression=None, - wait_for_ready=None, - timeout=None, - metadata=None): + target, + options=(), + channel_credentials=None, + call_credentials=None, + insecure=False, + compression=None, + wait_for_ready=None, + timeout=None, + metadata=None): return grpc.experimental.unary_unary(request, target, '/grpc.Connector/ReconnectClient', - fedn_dot_common_dot_net_dot_grpc_dot_fedn__pb2.ReconnectRequest.SerializeToString, - fedn_dot_common_dot_net_dot_grpc_dot_fedn__pb2.Response.FromString, - options, channel_credentials, - insecure, call_credentials, compression, wait_for_ready, timeout, metadata) + fedn_dot_common_dot_net_dot_grpc_dot_fedn__pb2.ReconnectRequest.SerializeToString, + fedn_dot_common_dot_net_dot_grpc_dot_fedn__pb2.Response.FromString, + options, channel_credentials, + insecure, call_credentials, compression, wait_for_ready, timeout, metadata) class CombinerStub(object): @@ -594,45 +599,45 @@ def __init__(self, channel): channel: A grpc.Channel. """ self.ModelUpdateRequestStream = channel.unary_stream( - '/grpc.Combiner/ModelUpdateRequestStream', - request_serializer=fedn_dot_common_dot_net_dot_grpc_dot_fedn__pb2.ClientAvailableMessage.SerializeToString, - response_deserializer=fedn_dot_common_dot_net_dot_grpc_dot_fedn__pb2.ModelUpdateRequest.FromString, - ) + '/grpc.Combiner/ModelUpdateRequestStream', + request_serializer=fedn_dot_common_dot_net_dot_grpc_dot_fedn__pb2.ClientAvailableMessage.SerializeToString, + response_deserializer=fedn_dot_common_dot_net_dot_grpc_dot_fedn__pb2.ModelUpdateRequest.FromString, + ) self.ModelUpdateStream = channel.unary_stream( - '/grpc.Combiner/ModelUpdateStream', - request_serializer=fedn_dot_common_dot_net_dot_grpc_dot_fedn__pb2.ClientAvailableMessage.SerializeToString, - response_deserializer=fedn_dot_common_dot_net_dot_grpc_dot_fedn__pb2.ModelUpdate.FromString, - ) + '/grpc.Combiner/ModelUpdateStream', + request_serializer=fedn_dot_common_dot_net_dot_grpc_dot_fedn__pb2.ClientAvailableMessage.SerializeToString, + response_deserializer=fedn_dot_common_dot_net_dot_grpc_dot_fedn__pb2.ModelUpdate.FromString, + ) self.ModelValidationRequestStream = channel.unary_stream( - '/grpc.Combiner/ModelValidationRequestStream', - request_serializer=fedn_dot_common_dot_net_dot_grpc_dot_fedn__pb2.ClientAvailableMessage.SerializeToString, - response_deserializer=fedn_dot_common_dot_net_dot_grpc_dot_fedn__pb2.ModelValidationRequest.FromString, - ) + '/grpc.Combiner/ModelValidationRequestStream', + request_serializer=fedn_dot_common_dot_net_dot_grpc_dot_fedn__pb2.ClientAvailableMessage.SerializeToString, + response_deserializer=fedn_dot_common_dot_net_dot_grpc_dot_fedn__pb2.ModelValidationRequest.FromString, + ) self.ModelValidationStream = channel.unary_stream( - '/grpc.Combiner/ModelValidationStream', - request_serializer=fedn_dot_common_dot_net_dot_grpc_dot_fedn__pb2.ClientAvailableMessage.SerializeToString, - response_deserializer=fedn_dot_common_dot_net_dot_grpc_dot_fedn__pb2.ModelValidation.FromString, - ) + '/grpc.Combiner/ModelValidationStream', + request_serializer=fedn_dot_common_dot_net_dot_grpc_dot_fedn__pb2.ClientAvailableMessage.SerializeToString, + response_deserializer=fedn_dot_common_dot_net_dot_grpc_dot_fedn__pb2.ModelValidation.FromString, + ) self.SendModelUpdateRequest = channel.unary_unary( - '/grpc.Combiner/SendModelUpdateRequest', - request_serializer=fedn_dot_common_dot_net_dot_grpc_dot_fedn__pb2.ModelUpdateRequest.SerializeToString, - response_deserializer=fedn_dot_common_dot_net_dot_grpc_dot_fedn__pb2.Response.FromString, - ) + '/grpc.Combiner/SendModelUpdateRequest', + request_serializer=fedn_dot_common_dot_net_dot_grpc_dot_fedn__pb2.ModelUpdateRequest.SerializeToString, + response_deserializer=fedn_dot_common_dot_net_dot_grpc_dot_fedn__pb2.Response.FromString, + ) self.SendModelUpdate = channel.unary_unary( - '/grpc.Combiner/SendModelUpdate', - request_serializer=fedn_dot_common_dot_net_dot_grpc_dot_fedn__pb2.ModelUpdate.SerializeToString, - response_deserializer=fedn_dot_common_dot_net_dot_grpc_dot_fedn__pb2.Response.FromString, - ) + '/grpc.Combiner/SendModelUpdate', + request_serializer=fedn_dot_common_dot_net_dot_grpc_dot_fedn__pb2.ModelUpdate.SerializeToString, + response_deserializer=fedn_dot_common_dot_net_dot_grpc_dot_fedn__pb2.Response.FromString, + ) self.SendModelValidationRequest = channel.unary_unary( - '/grpc.Combiner/SendModelValidationRequest', - request_serializer=fedn_dot_common_dot_net_dot_grpc_dot_fedn__pb2.ModelValidationRequest.SerializeToString, - response_deserializer=fedn_dot_common_dot_net_dot_grpc_dot_fedn__pb2.Response.FromString, - ) + '/grpc.Combiner/SendModelValidationRequest', + request_serializer=fedn_dot_common_dot_net_dot_grpc_dot_fedn__pb2.ModelValidationRequest.SerializeToString, + response_deserializer=fedn_dot_common_dot_net_dot_grpc_dot_fedn__pb2.Response.FromString, + ) self.SendModelValidation = channel.unary_unary( - '/grpc.Combiner/SendModelValidation', - request_serializer=fedn_dot_common_dot_net_dot_grpc_dot_fedn__pb2.ModelValidation.SerializeToString, - response_deserializer=fedn_dot_common_dot_net_dot_grpc_dot_fedn__pb2.Response.FromString, - ) + '/grpc.Combiner/SendModelValidation', + request_serializer=fedn_dot_common_dot_net_dot_grpc_dot_fedn__pb2.ModelValidation.SerializeToString, + response_deserializer=fedn_dot_common_dot_net_dot_grpc_dot_fedn__pb2.Response.FromString, + ) class CombinerServicer(object): @@ -690,188 +695,189 @@ def SendModelValidation(self, request, context): def add_CombinerServicer_to_server(servicer, server): rpc_method_handlers = { - 'ModelUpdateRequestStream': grpc.unary_stream_rpc_method_handler( - servicer.ModelUpdateRequestStream, - request_deserializer=fedn_dot_common_dot_net_dot_grpc_dot_fedn__pb2.ClientAvailableMessage.FromString, - response_serializer=fedn_dot_common_dot_net_dot_grpc_dot_fedn__pb2.ModelUpdateRequest.SerializeToString, - ), - 'ModelUpdateStream': grpc.unary_stream_rpc_method_handler( - servicer.ModelUpdateStream, - request_deserializer=fedn_dot_common_dot_net_dot_grpc_dot_fedn__pb2.ClientAvailableMessage.FromString, - response_serializer=fedn_dot_common_dot_net_dot_grpc_dot_fedn__pb2.ModelUpdate.SerializeToString, - ), - 'ModelValidationRequestStream': grpc.unary_stream_rpc_method_handler( - servicer.ModelValidationRequestStream, - request_deserializer=fedn_dot_common_dot_net_dot_grpc_dot_fedn__pb2.ClientAvailableMessage.FromString, - response_serializer=fedn_dot_common_dot_net_dot_grpc_dot_fedn__pb2.ModelValidationRequest.SerializeToString, - ), - 'ModelValidationStream': grpc.unary_stream_rpc_method_handler( - servicer.ModelValidationStream, - request_deserializer=fedn_dot_common_dot_net_dot_grpc_dot_fedn__pb2.ClientAvailableMessage.FromString, - response_serializer=fedn_dot_common_dot_net_dot_grpc_dot_fedn__pb2.ModelValidation.SerializeToString, - ), - 'SendModelUpdateRequest': grpc.unary_unary_rpc_method_handler( - servicer.SendModelUpdateRequest, - request_deserializer=fedn_dot_common_dot_net_dot_grpc_dot_fedn__pb2.ModelUpdateRequest.FromString, - response_serializer=fedn_dot_common_dot_net_dot_grpc_dot_fedn__pb2.Response.SerializeToString, - ), - 'SendModelUpdate': grpc.unary_unary_rpc_method_handler( - servicer.SendModelUpdate, - request_deserializer=fedn_dot_common_dot_net_dot_grpc_dot_fedn__pb2.ModelUpdate.FromString, - response_serializer=fedn_dot_common_dot_net_dot_grpc_dot_fedn__pb2.Response.SerializeToString, - ), - 'SendModelValidationRequest': grpc.unary_unary_rpc_method_handler( - servicer.SendModelValidationRequest, - request_deserializer=fedn_dot_common_dot_net_dot_grpc_dot_fedn__pb2.ModelValidationRequest.FromString, - response_serializer=fedn_dot_common_dot_net_dot_grpc_dot_fedn__pb2.Response.SerializeToString, - ), - 'SendModelValidation': grpc.unary_unary_rpc_method_handler( - servicer.SendModelValidation, - request_deserializer=fedn_dot_common_dot_net_dot_grpc_dot_fedn__pb2.ModelValidation.FromString, - response_serializer=fedn_dot_common_dot_net_dot_grpc_dot_fedn__pb2.Response.SerializeToString, - ), + 'ModelUpdateRequestStream': grpc.unary_stream_rpc_method_handler( + servicer.ModelUpdateRequestStream, + request_deserializer=fedn_dot_common_dot_net_dot_grpc_dot_fedn__pb2.ClientAvailableMessage.FromString, + response_serializer=fedn_dot_common_dot_net_dot_grpc_dot_fedn__pb2.ModelUpdateRequest.SerializeToString, + ), + 'ModelUpdateStream': grpc.unary_stream_rpc_method_handler( + servicer.ModelUpdateStream, + request_deserializer=fedn_dot_common_dot_net_dot_grpc_dot_fedn__pb2.ClientAvailableMessage.FromString, + response_serializer=fedn_dot_common_dot_net_dot_grpc_dot_fedn__pb2.ModelUpdate.SerializeToString, + ), + 'ModelValidationRequestStream': grpc.unary_stream_rpc_method_handler( + servicer.ModelValidationRequestStream, + request_deserializer=fedn_dot_common_dot_net_dot_grpc_dot_fedn__pb2.ClientAvailableMessage.FromString, + response_serializer=fedn_dot_common_dot_net_dot_grpc_dot_fedn__pb2.ModelValidationRequest.SerializeToString, + ), + 'ModelValidationStream': grpc.unary_stream_rpc_method_handler( + servicer.ModelValidationStream, + request_deserializer=fedn_dot_common_dot_net_dot_grpc_dot_fedn__pb2.ClientAvailableMessage.FromString, + response_serializer=fedn_dot_common_dot_net_dot_grpc_dot_fedn__pb2.ModelValidation.SerializeToString, + ), + 'SendModelUpdateRequest': grpc.unary_unary_rpc_method_handler( + servicer.SendModelUpdateRequest, + request_deserializer=fedn_dot_common_dot_net_dot_grpc_dot_fedn__pb2.ModelUpdateRequest.FromString, + response_serializer=fedn_dot_common_dot_net_dot_grpc_dot_fedn__pb2.Response.SerializeToString, + ), + 'SendModelUpdate': grpc.unary_unary_rpc_method_handler( + servicer.SendModelUpdate, + request_deserializer=fedn_dot_common_dot_net_dot_grpc_dot_fedn__pb2.ModelUpdate.FromString, + response_serializer=fedn_dot_common_dot_net_dot_grpc_dot_fedn__pb2.Response.SerializeToString, + ), + 'SendModelValidationRequest': grpc.unary_unary_rpc_method_handler( + servicer.SendModelValidationRequest, + request_deserializer=fedn_dot_common_dot_net_dot_grpc_dot_fedn__pb2.ModelValidationRequest.FromString, + response_serializer=fedn_dot_common_dot_net_dot_grpc_dot_fedn__pb2.Response.SerializeToString, + ), + 'SendModelValidation': grpc.unary_unary_rpc_method_handler( + servicer.SendModelValidation, + request_deserializer=fedn_dot_common_dot_net_dot_grpc_dot_fedn__pb2.ModelValidation.FromString, + response_serializer=fedn_dot_common_dot_net_dot_grpc_dot_fedn__pb2.Response.SerializeToString, + ), } generic_handler = grpc.method_handlers_generic_handler( - 'grpc.Combiner', rpc_method_handlers) + 'grpc.Combiner', rpc_method_handlers) server.add_generic_rpc_handlers((generic_handler,)) - # This class is part of an EXPERIMENTAL API. + + class Combiner(object): """Missing associated documentation comment in .proto file.""" @staticmethod def ModelUpdateRequestStream(request, - target, - options=(), - channel_credentials=None, - call_credentials=None, - insecure=False, - compression=None, - wait_for_ready=None, - timeout=None, - metadata=None): + target, + options=(), + channel_credentials=None, + call_credentials=None, + insecure=False, + compression=None, + wait_for_ready=None, + timeout=None, + metadata=None): return grpc.experimental.unary_stream(request, target, '/grpc.Combiner/ModelUpdateRequestStream', - fedn_dot_common_dot_net_dot_grpc_dot_fedn__pb2.ClientAvailableMessage.SerializeToString, - fedn_dot_common_dot_net_dot_grpc_dot_fedn__pb2.ModelUpdateRequest.FromString, - options, channel_credentials, - insecure, call_credentials, compression, wait_for_ready, timeout, metadata) + fedn_dot_common_dot_net_dot_grpc_dot_fedn__pb2.ClientAvailableMessage.SerializeToString, + fedn_dot_common_dot_net_dot_grpc_dot_fedn__pb2.ModelUpdateRequest.FromString, + options, channel_credentials, + insecure, call_credentials, compression, wait_for_ready, timeout, metadata) @staticmethod def ModelUpdateStream(request, - target, - options=(), - channel_credentials=None, - call_credentials=None, - insecure=False, - compression=None, - wait_for_ready=None, - timeout=None, - metadata=None): + target, + options=(), + channel_credentials=None, + call_credentials=None, + insecure=False, + compression=None, + wait_for_ready=None, + timeout=None, + metadata=None): return grpc.experimental.unary_stream(request, target, '/grpc.Combiner/ModelUpdateStream', - fedn_dot_common_dot_net_dot_grpc_dot_fedn__pb2.ClientAvailableMessage.SerializeToString, - fedn_dot_common_dot_net_dot_grpc_dot_fedn__pb2.ModelUpdate.FromString, - options, channel_credentials, - insecure, call_credentials, compression, wait_for_ready, timeout, metadata) + fedn_dot_common_dot_net_dot_grpc_dot_fedn__pb2.ClientAvailableMessage.SerializeToString, + fedn_dot_common_dot_net_dot_grpc_dot_fedn__pb2.ModelUpdate.FromString, + options, channel_credentials, + insecure, call_credentials, compression, wait_for_ready, timeout, metadata) @staticmethod def ModelValidationRequestStream(request, - target, - options=(), - channel_credentials=None, - call_credentials=None, - insecure=False, - compression=None, - wait_for_ready=None, - timeout=None, - metadata=None): + target, + options=(), + channel_credentials=None, + call_credentials=None, + insecure=False, + compression=None, + wait_for_ready=None, + timeout=None, + metadata=None): return grpc.experimental.unary_stream(request, target, '/grpc.Combiner/ModelValidationRequestStream', - fedn_dot_common_dot_net_dot_grpc_dot_fedn__pb2.ClientAvailableMessage.SerializeToString, - fedn_dot_common_dot_net_dot_grpc_dot_fedn__pb2.ModelValidationRequest.FromString, - options, channel_credentials, - insecure, call_credentials, compression, wait_for_ready, timeout, metadata) + fedn_dot_common_dot_net_dot_grpc_dot_fedn__pb2.ClientAvailableMessage.SerializeToString, + fedn_dot_common_dot_net_dot_grpc_dot_fedn__pb2.ModelValidationRequest.FromString, + options, channel_credentials, + insecure, call_credentials, compression, wait_for_ready, timeout, metadata) @staticmethod def ModelValidationStream(request, - target, - options=(), - channel_credentials=None, - call_credentials=None, - insecure=False, - compression=None, - wait_for_ready=None, - timeout=None, - metadata=None): + target, + options=(), + channel_credentials=None, + call_credentials=None, + insecure=False, + compression=None, + wait_for_ready=None, + timeout=None, + metadata=None): return grpc.experimental.unary_stream(request, target, '/grpc.Combiner/ModelValidationStream', - fedn_dot_common_dot_net_dot_grpc_dot_fedn__pb2.ClientAvailableMessage.SerializeToString, - fedn_dot_common_dot_net_dot_grpc_dot_fedn__pb2.ModelValidation.FromString, - options, channel_credentials, - insecure, call_credentials, compression, wait_for_ready, timeout, metadata) + fedn_dot_common_dot_net_dot_grpc_dot_fedn__pb2.ClientAvailableMessage.SerializeToString, + fedn_dot_common_dot_net_dot_grpc_dot_fedn__pb2.ModelValidation.FromString, + options, channel_credentials, + insecure, call_credentials, compression, wait_for_ready, timeout, metadata) @staticmethod def SendModelUpdateRequest(request, - target, - options=(), - channel_credentials=None, - call_credentials=None, - insecure=False, - compression=None, - wait_for_ready=None, - timeout=None, - metadata=None): + target, + options=(), + channel_credentials=None, + call_credentials=None, + insecure=False, + compression=None, + wait_for_ready=None, + timeout=None, + metadata=None): return grpc.experimental.unary_unary(request, target, '/grpc.Combiner/SendModelUpdateRequest', - fedn_dot_common_dot_net_dot_grpc_dot_fedn__pb2.ModelUpdateRequest.SerializeToString, - fedn_dot_common_dot_net_dot_grpc_dot_fedn__pb2.Response.FromString, - options, channel_credentials, - insecure, call_credentials, compression, wait_for_ready, timeout, metadata) + fedn_dot_common_dot_net_dot_grpc_dot_fedn__pb2.ModelUpdateRequest.SerializeToString, + fedn_dot_common_dot_net_dot_grpc_dot_fedn__pb2.Response.FromString, + options, channel_credentials, + insecure, call_credentials, compression, wait_for_ready, timeout, metadata) @staticmethod def SendModelUpdate(request, - target, - options=(), - channel_credentials=None, - call_credentials=None, - insecure=False, - compression=None, - wait_for_ready=None, - timeout=None, - metadata=None): + target, + options=(), + channel_credentials=None, + call_credentials=None, + insecure=False, + compression=None, + wait_for_ready=None, + timeout=None, + metadata=None): return grpc.experimental.unary_unary(request, target, '/grpc.Combiner/SendModelUpdate', - fedn_dot_common_dot_net_dot_grpc_dot_fedn__pb2.ModelUpdate.SerializeToString, - fedn_dot_common_dot_net_dot_grpc_dot_fedn__pb2.Response.FromString, - options, channel_credentials, - insecure, call_credentials, compression, wait_for_ready, timeout, metadata) + fedn_dot_common_dot_net_dot_grpc_dot_fedn__pb2.ModelUpdate.SerializeToString, + fedn_dot_common_dot_net_dot_grpc_dot_fedn__pb2.Response.FromString, + options, channel_credentials, + insecure, call_credentials, compression, wait_for_ready, timeout, metadata) @staticmethod def SendModelValidationRequest(request, - target, - options=(), - channel_credentials=None, - call_credentials=None, - insecure=False, - compression=None, - wait_for_ready=None, - timeout=None, - metadata=None): + target, + options=(), + channel_credentials=None, + call_credentials=None, + insecure=False, + compression=None, + wait_for_ready=None, + timeout=None, + metadata=None): return grpc.experimental.unary_unary(request, target, '/grpc.Combiner/SendModelValidationRequest', - fedn_dot_common_dot_net_dot_grpc_dot_fedn__pb2.ModelValidationRequest.SerializeToString, - fedn_dot_common_dot_net_dot_grpc_dot_fedn__pb2.Response.FromString, - options, channel_credentials, - insecure, call_credentials, compression, wait_for_ready, timeout, metadata) + fedn_dot_common_dot_net_dot_grpc_dot_fedn__pb2.ModelValidationRequest.SerializeToString, + fedn_dot_common_dot_net_dot_grpc_dot_fedn__pb2.Response.FromString, + options, channel_credentials, + insecure, call_credentials, compression, wait_for_ready, timeout, metadata) @staticmethod def SendModelValidation(request, - target, - options=(), - channel_credentials=None, - call_credentials=None, - insecure=False, - compression=None, - wait_for_ready=None, - timeout=None, - metadata=None): + target, + options=(), + channel_credentials=None, + call_credentials=None, + insecure=False, + compression=None, + wait_for_ready=None, + timeout=None, + metadata=None): return grpc.experimental.unary_unary(request, target, '/grpc.Combiner/SendModelValidation', - fedn_dot_common_dot_net_dot_grpc_dot_fedn__pb2.ModelValidation.SerializeToString, - fedn_dot_common_dot_net_dot_grpc_dot_fedn__pb2.Response.FromString, - options, channel_credentials, - insecure, call_credentials, compression, wait_for_ready, timeout, metadata) + fedn_dot_common_dot_net_dot_grpc_dot_fedn__pb2.ModelValidation.SerializeToString, + fedn_dot_common_dot_net_dot_grpc_dot_fedn__pb2.Response.FromString, + options, channel_credentials, + insecure, call_credentials, compression, wait_for_ready, timeout, metadata) From ce6b4b51b889cdc887ff353c6333f295ab6882ae Mon Sep 17 00:00:00 2001 From: mcapuccini Date: Wed, 1 Jun 2022 11:34:57 +0000 Subject: [PATCH 011/185] formatting --- fedn/fedn/clients/combiner/modelservice.py | 2 +- fedn/fedn/clients/reducer/restservice.py | 7 ++++--- 2 files changed, 5 insertions(+), 4 deletions(-) diff --git a/fedn/fedn/clients/combiner/modelservice.py b/fedn/fedn/clients/combiner/modelservice.py index b5cd35de7..b5105efef 100644 --- a/fedn/fedn/clients/combiner/modelservice.py +++ b/fedn/fedn/clients/combiner/modelservice.py @@ -102,7 +102,7 @@ def Upload(self, request_iterator, context): if request.status == fedn.ModelStatus.OK and not request.data: result = fedn.ModelResponse(id=request.id, status=fedn.ModelStatus.OK, - message="Got model successfully.") + message="Got model successfully.") # self.models_metadata.update({request.id: fedn.ModelStatus.OK}) self.models.set_meta(request.id, fedn.ModelStatus.OK) self.models.get_ptr(request.id).flush() diff --git a/fedn/fedn/clients/reducer/restservice.py b/fedn/fedn/clients/reducer/restservice.py index d12625f54..992933c5a 100644 --- a/fedn/fedn/clients/reducer/restservice.py +++ b/fedn/fedn/clients/reducer/restservice.py @@ -14,15 +14,16 @@ import pandas as pd import plotly import plotly.express as px -from fedn.clients.reducer.interfaces import CombinerInterface -from fedn.clients.reducer.plots import Plot -from fedn.clients.reducer.state import ReducerState, ReducerStateToString from flask import (Flask, abort, flash, jsonify, make_response, redirect, render_template, request, url_for) from idna import check_initial_combiner from tenacity import retry from werkzeug.utils import secure_filename +from fedn.clients.reducer.interfaces import CombinerInterface +from fedn.clients.reducer.plots import Plot +from fedn.clients.reducer.state import ReducerState, ReducerStateToString + UPLOAD_FOLDER = '/app/client/package/' ALLOWED_EXTENSIONS = {'gz', 'bz2', 'tar', 'zip', 'tgz'} From 4e04650e53d23b7cf7abe7f90abbc7bfb90007a2 Mon Sep 17 00:00:00 2001 From: mcapuccini Date: Wed, 1 Jun 2022 13:27:28 +0000 Subject: [PATCH 012/185] merge option for entripoints --- examples/mnist-keras/client/entrypoint | 24 +++++++++++++++++++++++- examples/mnist-keras/client/fedn.yaml | 4 +++- fedn/fedn/clients/reducer/restservice.py | 9 ++++----- 3 files changed, 30 insertions(+), 7 deletions(-) diff --git a/examples/mnist-keras/client/entrypoint b/examples/mnist-keras/client/entrypoint index e9609f2ca..b12e434db 100755 --- a/examples/mnist-keras/client/entrypoint +++ b/examples/mnist-keras/client/entrypoint @@ -6,7 +6,6 @@ import docker import fire import numpy as np import tensorflow as tf - from fedn.utils.kerashelper import KerasHelper NUM_CLASSES = 10 @@ -116,10 +115,33 @@ def validate(in_model_path, out_json_path, data_path=None): fh.write(json.dumps(report)) +def infer(in_model_path, out_json_path, data_path=None): + # Using test data for inference but another dataset could be loaded + x_test, _ = _load_data(data_path, is_train=False) + + # Load model + model = _compile_model() + helper = KerasHelper() + weights = helper.load_model(in_model_path) + model.set_weights(weights) + + # Infer + y_pred = model.predict(x_test) + y_pred = np.argmax(y_pred, axis=1) + + # Save JSON + with open(out_json_path, "w") as fh: + fh.write(json.dumps(y_pred.tolist())) + + # Print to stdout TODO:remove + print(json.dumps(y_pred[:10].tolist())) + + if __name__ == '__main__': fire.Fire({ 'init_seed': init_seed, 'train': train, 'validate': validate, + 'infer': infer, '_get_data_path': _get_data_path, # for testing }) diff --git a/examples/mnist-keras/client/fedn.yaml b/examples/mnist-keras/client/fedn.yaml index 29c475270..91ec40c2a 100644 --- a/examples/mnist-keras/client/fedn.yaml +++ b/examples/mnist-keras/client/fedn.yaml @@ -2,4 +2,6 @@ entry_points: train: command: /venv/bin/python entrypoint train $ENTRYPOINT_OPTS validate: - command: /venv/bin/python entrypoint validate $ENTRYPOINT_OPTS \ No newline at end of file + command: /venv/bin/python entrypoint validate $ENTRYPOINT_OPTS + infer: + command: /venv/bin/python entrypoint infer $ENTRYPOINT_OPTS diff --git a/fedn/fedn/clients/reducer/restservice.py b/fedn/fedn/clients/reducer/restservice.py index 992933c5a..12857abd9 100644 --- a/fedn/fedn/clients/reducer/restservice.py +++ b/fedn/fedn/clients/reducer/restservice.py @@ -14,16 +14,15 @@ import pandas as pd import plotly import plotly.express as px +from fedn.clients.reducer.interfaces import CombinerInterface +from fedn.clients.reducer.plots import Plot +from fedn.clients.reducer.state import ReducerState, ReducerStateToString from flask import (Flask, abort, flash, jsonify, make_response, redirect, render_template, request, url_for) from idna import check_initial_combiner from tenacity import retry from werkzeug.utils import secure_filename -from fedn.clients.reducer.interfaces import CombinerInterface -from fedn.clients.reducer.plots import Plot -from fedn.clients.reducer.state import ReducerState, ReducerStateToString - UPLOAD_FOLDER = '/app/client/package/' ALLOWED_EXTENSIONS = {'gz', 'bz2', 'tar', 'zip', 'tgz'} @@ -996,7 +995,7 @@ def infer(): 'clients_requested': clients_requested, 'task': 'inference', 'helper_type': helper_type} - threading.Thread(target=self.control.instruct, + threading.Thread(target=self.control.infer_instruct, args=(config,)).start() # Redirect From edcf74ef886da4c8fd894b8c648e55880baa6937 Mon Sep 17 00:00:00 2001 From: mcapuccini Date: Wed, 1 Jun 2022 14:13:52 +0000 Subject: [PATCH 013/185] add task type --- fedn/fedn/clients/reducer/control.py | 3 +++ 1 file changed, 3 insertions(+) diff --git a/fedn/fedn/clients/reducer/control.py b/fedn/fedn/clients/reducer/control.py index ceefb7a4f..4bbc1c8d1 100644 --- a/fedn/fedn/clients/reducer/control.py +++ b/fedn/fedn/clients/reducer/control.py @@ -201,6 +201,9 @@ def check_round_participation_policy(self, compute_plan, combiner_state): nr_active_clients = int(combiner_state['nr_active_trainers']) elif compute_plan['task'] == 'validation': nr_active_clients = int(combiner_state['nr_active_validators']) + elif compute_plan['task'] == 'inference': + # Using validators for inference + nr_active_clients = int(combiner_state['nr_active_validators']) else: print("Invalid task type!", flush=True) return False From 52f30ffea3459ec8be311c5928a7f2b664353298 Mon Sep 17 00:00:00 2001 From: mcapuccini Date: Thu, 2 Jun 2022 09:50:06 +0000 Subject: [PATCH 014/185] clean up requirement.txt file/dir --- Dockerfile | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/Dockerfile b/Dockerfile index 2ab45a079..3ea905811 100644 --- a/Dockerfile +++ b/Dockerfile @@ -26,7 +26,10 @@ RUN mkdir -p /app \ && /venv/bin/pip install --no-cache-dir -e /app/fedn \ && if [[ ! -z "$REQUIREMENTS" ]]; then \ /venv/bin/pip install --no-cache-dir -r /app/config/requirements.txt; \ - fi + fi \ + # + # Clean up + && rm -r /app/config/requirements.txt # Setup working directory WORKDIR /app From f22836341564a3084fdc13bde1b183ba48ffc695 Mon Sep 17 00:00:00 2001 From: mcapuccini Date: Thu, 2 Jun 2022 13:40:44 +0000 Subject: [PATCH 015/185] Make default compose a development compose --- docker-compose.yaml | 20 ++++++++++++++++--- examples/mnist-keras/README.md | 2 +- .../mnist-keras/docker-compose.override.yaml | 3 ++- 3 files changed, 20 insertions(+), 5 deletions(-) diff --git a/docker-compose.yaml b/docker-compose.yaml index 097a98afb..20adf0666 100644 --- a/docker-compose.yaml +++ b/docker-compose.yaml @@ -64,9 +64,15 @@ services: - GET_HOSTS_FROM=dns - USER=test - PROJECT=project + - FLASK_DEBUG=1 + - FLASK_ENV=development build: . working_dir: /app - command: run reducer -n reducer --init=config/settings-reducer.yaml + volumes: + - ${HOST_FEDN_DIR:-./fedn}:/app/fedn + entrypoint: [ "sh", "-c" ] + command: + - "/venv/bin/pip install --no-cache-dir -e /app/fedn && /venv/bin/fedn run reducer -n reducer --init=config/settings-reducer.yaml" ports: - 8090:8090 @@ -77,7 +83,11 @@ services: - GET_HOSTS_FROM=dns build: . working_dir: /app - command: run combiner -in config/settings-combiner.yaml + volumes: + - ${HOST_FEDN_DIR:-./fedn}:/app/fedn + entrypoint: [ "sh", "-c" ] + command: + - "/venv/bin/pip install --no-cache-dir -e /app/fedn && /venv/bin/fedn run combiner -in config/settings-combiner.yaml" ports: - 12080:12080 @@ -87,6 +97,10 @@ services: - GET_HOSTS_FROM=dns build: . working_dir: /app - command: run client -in config/settings-client.yaml + volumes: + - ${HOST_FEDN_DIR:-./fedn}:/app/fedn + entrypoint: [ "sh", "-c" ] + command: + - "/venv/bin/pip install --no-cache-dir -e /app/fedn && /venv/bin/fedn run client -in config/settings-client.yaml" deploy: replicas: 0 diff --git a/examples/mnist-keras/README.md b/examples/mnist-keras/README.md index 3bd4aefaa..9ab1f2e93 100644 --- a/examples/mnist-keras/README.md +++ b/examples/mnist-keras/README.md @@ -39,7 +39,7 @@ bin/split_data Now we are ready to start the pseudo-distributed deployment with `docker-compose`. ```sh -docker-compose -f ../../docker-compose.yaml -f docker-compose.overide up -d +docker-compose -f ../../docker-compose.yaml -f docker-compose.override.yaml up -d ``` > **Note**: run with `--scale client=N` to start *N* clients. diff --git a/examples/mnist-keras/docker-compose.override.yaml b/examples/mnist-keras/docker-compose.override.yaml index 39bb3fa3c..77c134cd3 100644 --- a/examples/mnist-keras/docker-compose.override.yaml +++ b/examples/mnist-keras/docker-compose.override.yaml @@ -10,5 +10,6 @@ services: deploy: replicas: 2 volumes: + - ${HOST_FEDN_DIR:-./fedn}:/app/fedn - ${HOST_DATA_DIR:-./examples/mnist-keras/data}:/var/data - - /var/run/docker.sock:/var/run/docker.sock \ No newline at end of file + - /var/run/docker.sock:/var/run/docker.sock From b87eea25e752091a13bd9e0dc28e195e83220bc3 Mon Sep 17 00:00:00 2001 From: mcapuccini Date: Thu, 2 Jun 2022 13:45:11 +0000 Subject: [PATCH 016/185] Add dev mount to pytorch example --- examples/mnist-pytorch/docker-compose.override.yaml | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/examples/mnist-pytorch/docker-compose.override.yaml b/examples/mnist-pytorch/docker-compose.override.yaml index 338abafb1..0862c13a6 100644 --- a/examples/mnist-pytorch/docker-compose.override.yaml +++ b/examples/mnist-pytorch/docker-compose.override.yaml @@ -10,5 +10,6 @@ services: deploy: replicas: 2 volumes: - - ${HOST_DATA_DIR:-./examples/mnist-pytorch/data}:/var/data - - /var/run/docker.sock:/var/run/docker.sock \ No newline at end of file + - ${HOST_FEDN_DIR:-./fedn}:/app/fedn + - ${HOST_DATA_DIR:-./examples/mnist-keras/data}:/var/data + - /var/run/docker.sock:/var/run/docker.sock From 0cd874c4aa98d3327027af2e9b8bd3e9c2f26dea Mon Sep 17 00:00:00 2001 From: mcapuccini Date: Fri, 3 Jun 2022 11:58:04 +0000 Subject: [PATCH 017/185] Status type for inference --- fedn/fedn/client.py | 9 +- fedn/fedn/common/net/grpc/fedn.proto | 1 + fedn/fedn/common/net/grpc/fedn_pb2.py | 3236 ++++++++++---------- fedn/fedn/common/net/grpc/fedn_pb2_grpc.py | 996 +++--- 4 files changed, 2126 insertions(+), 2116 deletions(-) diff --git a/fedn/fedn/client.py b/fedn/fedn/client.py index 1d033459b..81c0bc0dc 100644 --- a/fedn/fedn/client.py +++ b/fedn/fedn/client.py @@ -457,8 +457,15 @@ def process_request(self): validation.correlation_id = request.correlation_id response = self.orchestrator.SendModelValidation( validation) + + # Set status type + if request.is_inference: + status_type = fedn.StatusType.INFERENCE + else: + status_type = fedn.StatusType.MODEL_VALIDATION + self._send_status("Model validation completed.", log_level=fedn.Status.AUDIT, - type=fedn.StatusType.MODEL_VALIDATION, request=validation) + type=status_type, request=validation) else: self._send_status("Client {} failed to complete model validation.".format(self.name), log_level=fedn.Status.WARNING, request=request) diff --git a/fedn/fedn/common/net/grpc/fedn.proto b/fedn/fedn/common/net/grpc/fedn.proto index 7535a712e..7fb5a76f6 100644 --- a/fedn/fedn/common/net/grpc/fedn.proto +++ b/fedn/fedn/common/net/grpc/fedn.proto @@ -14,6 +14,7 @@ enum StatusType { MODEL_UPDATE = 2; MODEL_VALIDATION_REQUEST = 3; MODEL_VALIDATION = 4; + INFERENCE = 5; } message Status { diff --git a/fedn/fedn/common/net/grpc/fedn_pb2.py b/fedn/fedn/common/net/grpc/fedn_pb2.py index f98b8f3b2..0cf9ae642 100644 --- a/fedn/fedn/common/net/grpc/fedn_pb2.py +++ b/fedn/fedn/common/net/grpc/fedn_pb2.py @@ -2,258 +2,264 @@ # Generated by the protocol buffer compiler. DO NOT EDIT! # source: fedn/common/net/grpc/fedn.proto """Generated protocol buffer code.""" +from google.protobuf.internal import enum_type_wrapper from google.protobuf import descriptor as _descriptor from google.protobuf import message as _message from google.protobuf import reflection as _reflection from google.protobuf import symbol_database as _symbol_database -from google.protobuf.internal import enum_type_wrapper - # @@protoc_insertion_point(imports) _sym_db = _symbol_database.Default() + + DESCRIPTOR = _descriptor.FileDescriptor( - name='fedn/common/net/grpc/fedn.proto', - package='grpc', - syntax='proto3', - serialized_options=None, - create_key=_descriptor._internal_create_key, - serialized_pb=b'\n\x1f\x66\x65\x64n/common/net/grpc/fedn.proto\x12\x04grpc\":\n\x08Response\x12\x1c\n\x06sender\x18\x01 \x01(\x0b\x32\x0c.grpc.Client\x12\x10\n\x08response\x18\x02 \x01(\t\"\x8c\x02\n\x06Status\x12\x1c\n\x06sender\x18\x01 \x01(\x0b\x32\x0c.grpc.Client\x12\x0e\n\x06status\x18\x02 \x01(\t\x12(\n\tlog_level\x18\x03 \x01(\x0e\x32\x15.grpc.Status.LogLevel\x12\x0c\n\x04\x64\x61ta\x18\x04 \x01(\t\x12\x16\n\x0e\x63orrelation_id\x18\x05 \x01(\t\x12\x11\n\ttimestamp\x18\x06 \x01(\t\x12\x1e\n\x04type\x18\x07 \x01(\x0e\x32\x10.grpc.StatusType\x12\r\n\x05\x65xtra\x18\x08 \x01(\t\"B\n\x08LogLevel\x12\x08\n\x04INFO\x10\x00\x12\t\n\x05\x44\x45\x42UG\x10\x01\x12\x0b\n\x07WARNING\x10\x02\x12\t\n\x05\x45RROR\x10\x03\x12\t\n\x05\x41UDIT\x10\x04\"\x9d\x01\n\x12ModelUpdateRequest\x12\x1c\n\x06sender\x18\x01 \x01(\x0b\x32\x0c.grpc.Client\x12\x1e\n\x08receiver\x18\x02 \x01(\x0b\x32\x0c.grpc.Client\x12\x10\n\x08model_id\x18\x03 \x01(\t\x12\x0c\n\x04\x64\x61ta\x18\x04 \x01(\t\x12\x16\n\x0e\x63orrelation_id\x18\x05 \x01(\t\x12\x11\n\ttimestamp\x18\x06 \x01(\t\"\xaf\x01\n\x0bModelUpdate\x12\x1c\n\x06sender\x18\x01 \x01(\x0b\x32\x0c.grpc.Client\x12\x1e\n\x08receiver\x18\x02 \x01(\x0b\x32\x0c.grpc.Client\x12\x10\n\x08model_id\x18\x03 \x01(\t\x12\x17\n\x0fmodel_update_id\x18\x04 \x01(\t\x12\x16\n\x0e\x63orrelation_id\x18\x05 \x01(\t\x12\x11\n\ttimestamp\x18\x06 \x01(\t\x12\x0c\n\x04meta\x18\x07 \x01(\t\"\xb7\x01\n\x16ModelValidationRequest\x12\x1c\n\x06sender\x18\x01 \x01(\x0b\x32\x0c.grpc.Client\x12\x1e\n\x08receiver\x18\x02 \x01(\x0b\x32\x0c.grpc.Client\x12\x10\n\x08model_id\x18\x03 \x01(\t\x12\x0c\n\x04\x64\x61ta\x18\x04 \x01(\t\x12\x16\n\x0e\x63orrelation_id\x18\x05 \x01(\t\x12\x11\n\ttimestamp\x18\x06 \x01(\t\x12\x14\n\x0cis_inference\x18\x07 \x01(\x08\"\xa8\x01\n\x0fModelValidation\x12\x1c\n\x06sender\x18\x01 \x01(\x0b\x32\x0c.grpc.Client\x12\x1e\n\x08receiver\x18\x02 \x01(\x0b\x32\x0c.grpc.Client\x12\x10\n\x08model_id\x18\x03 \x01(\t\x12\x0c\n\x04\x64\x61ta\x18\x04 \x01(\t\x12\x16\n\x0e\x63orrelation_id\x18\x05 \x01(\t\x12\x11\n\ttimestamp\x18\x06 \x01(\t\x12\x0c\n\x04meta\x18\x07 \x01(\t\"\x89\x01\n\x0cModelRequest\x12\x1c\n\x06sender\x18\x01 \x01(\x0b\x32\x0c.grpc.Client\x12\x1e\n\x08receiver\x18\x02 \x01(\x0b\x32\x0c.grpc.Client\x12\x0c\n\x04\x64\x61ta\x18\x03 \x01(\x0c\x12\n\n\x02id\x18\x04 \x01(\t\x12!\n\x06status\x18\x05 \x01(\x0e\x32\x11.grpc.ModelStatus\"]\n\rModelResponse\x12\x0c\n\x04\x64\x61ta\x18\x01 \x01(\x0c\x12\n\n\x02id\x18\x02 \x01(\t\x12!\n\x06status\x18\x03 \x01(\x0e\x32\x11.grpc.ModelStatus\x12\x0f\n\x07message\x18\x04 \x01(\t\"U\n\x15GetGlobalModelRequest\x12\x1c\n\x06sender\x18\x01 \x01(\x0b\x32\x0c.grpc.Client\x12\x1e\n\x08receiver\x18\x02 \x01(\x0b\x32\x0c.grpc.Client\"h\n\x16GetGlobalModelResponse\x12\x1c\n\x06sender\x18\x01 \x01(\x0b\x32\x0c.grpc.Client\x12\x1e\n\x08receiver\x18\x02 \x01(\x0b\x32\x0c.grpc.Client\x12\x10\n\x08model_id\x18\x03 \x01(\t\")\n\tHeartbeat\x12\x1c\n\x06sender\x18\x01 \x01(\x0b\x32\x0c.grpc.Client\"W\n\x16\x43lientAvailableMessage\x12\x1c\n\x06sender\x18\x01 \x01(\x0b\x32\x0c.grpc.Client\x12\x0c\n\x04\x64\x61ta\x18\x02 \x01(\t\x12\x11\n\ttimestamp\x18\x03 \x01(\t\"R\n\x12ListClientsRequest\x12\x1c\n\x06sender\x18\x01 \x01(\x0b\x32\x0c.grpc.Client\x12\x1e\n\x07\x63hannel\x18\x02 \x01(\x0e\x32\r.grpc.Channel\"*\n\nClientList\x12\x1c\n\x06\x63lient\x18\x01 \x03(\x0b\x32\x0c.grpc.Client\"0\n\x06\x43lient\x12\x18\n\x04role\x18\x01 \x01(\x0e\x32\n.grpc.Role\x12\x0c\n\x04name\x18\x02 \x01(\t\"m\n\x0fReassignRequest\x12\x1c\n\x06sender\x18\x01 \x01(\x0b\x32\x0c.grpc.Client\x12\x1e\n\x08receiver\x18\x02 \x01(\x0b\x32\x0c.grpc.Client\x12\x0e\n\x06server\x18\x03 \x01(\t\x12\x0c\n\x04port\x18\x04 \x01(\r\"c\n\x10ReconnectRequest\x12\x1c\n\x06sender\x18\x01 \x01(\x0b\x32\x0c.grpc.Client\x12\x1e\n\x08receiver\x18\x02 \x01(\x0b\x32\x0c.grpc.Client\x12\x11\n\treconnect\x18\x03 \x01(\r\"\'\n\tParameter\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\r\n\x05value\x18\x02 \x01(\t\"T\n\x0e\x43ontrolRequest\x12\x1e\n\x07\x63ommand\x18\x01 \x01(\x0e\x32\r.grpc.Command\x12\"\n\tparameter\x18\x02 \x03(\x0b\x32\x0f.grpc.Parameter\"F\n\x0f\x43ontrolResponse\x12\x0f\n\x07message\x18\x01 \x01(\t\x12\"\n\tparameter\x18\x02 \x03(\x0b\x32\x0f.grpc.Parameter\"R\n\x0eReportResponse\x12\x1c\n\x06sender\x18\x01 \x01(\x0b\x32\x0c.grpc.Client\x12\"\n\tparameter\x18\x02 \x03(\x0b\x32\x0f.grpc.Parameter\"\x13\n\x11\x43onnectionRequest\"<\n\x12\x43onnectionResponse\x12&\n\x06status\x18\x01 \x01(\x0e\x32\x16.grpc.ConnectionStatus*u\n\nStatusType\x12\x07\n\x03LOG\x10\x00\x12\x18\n\x14MODEL_UPDATE_REQUEST\x10\x01\x12\x10\n\x0cMODEL_UPDATE\x10\x02\x12\x1c\n\x18MODEL_VALIDATION_REQUEST\x10\x03\x12\x14\n\x10MODEL_VALIDATION\x10\x04*\x86\x01\n\x07\x43hannel\x12\x0b\n\x07\x44\x45\x46\x41ULT\x10\x00\x12\x19\n\x15MODEL_UPDATE_REQUESTS\x10\x01\x12\x11\n\rMODEL_UPDATES\x10\x02\x12\x1d\n\x19MODEL_VALIDATION_REQUESTS\x10\x03\x12\x15\n\x11MODEL_VALIDATIONS\x10\x04\x12\n\n\x06STATUS\x10\x05*F\n\x0bModelStatus\x12\x06\n\x02OK\x10\x00\x12\x0f\n\x0bIN_PROGRESS\x10\x01\x12\x12\n\x0eIN_PROGRESS_OK\x10\x02\x12\n\n\x06\x46\x41ILED\x10\x03*8\n\x04Role\x12\n\n\x06WORKER\x10\x00\x12\x0c\n\x08\x43OMBINER\x10\x01\x12\x0b\n\x07REDUCER\x10\x02\x12\t\n\x05OTHER\x10\x03*J\n\x07\x43ommand\x12\x08\n\x04IDLE\x10\x00\x12\t\n\x05START\x10\x01\x12\t\n\x05PAUSE\x10\x02\x12\x08\n\x04STOP\x10\x03\x12\t\n\x05RESET\x10\x04\x12\n\n\x06REPORT\x10\x05*I\n\x10\x43onnectionStatus\x12\x11\n\rNOT_ACCEPTING\x10\x00\x12\r\n\tACCEPTING\x10\x01\x12\x13\n\x0fTRY_AGAIN_LATER\x10\x02\x32z\n\x0cModelService\x12\x33\n\x06Upload\x12\x12.grpc.ModelRequest\x1a\x13.grpc.ModelResponse(\x01\x12\x35\n\x08\x44ownload\x12\x12.grpc.ModelRequest\x1a\x13.grpc.ModelResponse0\x01\x32\xe3\x01\n\x07\x43ontrol\x12\x34\n\x05Start\x12\x14.grpc.ControlRequest\x1a\x15.grpc.ControlResponse\x12\x33\n\x04Stop\x12\x14.grpc.ControlRequest\x1a\x15.grpc.ControlResponse\x12\x37\n\tConfigure\x12\x14.grpc.ControlRequest\x1a\x14.grpc.ReportResponse\x12\x34\n\x06Report\x12\x14.grpc.ControlRequest\x1a\x14.grpc.ReportResponse2V\n\x07Reducer\x12K\n\x0eGetGlobalModel\x12\x1b.grpc.GetGlobalModelRequest\x1a\x1c.grpc.GetGlobalModelResponse2\xab\x03\n\tConnector\x12\x44\n\x14\x41llianceStatusStream\x12\x1c.grpc.ClientAvailableMessage\x1a\x0c.grpc.Status0\x01\x12*\n\nSendStatus\x12\x0c.grpc.Status\x1a\x0e.grpc.Response\x12?\n\x11ListActiveClients\x12\x18.grpc.ListClientsRequest\x1a\x10.grpc.ClientList\x12\x45\n\x10\x41\x63\x63\x65ptingClients\x12\x17.grpc.ConnectionRequest\x1a\x18.grpc.ConnectionResponse\x12\x30\n\rSendHeartbeat\x12\x0f.grpc.Heartbeat\x1a\x0e.grpc.Response\x12\x37\n\x0eReassignClient\x12\x15.grpc.ReassignRequest\x1a\x0e.grpc.Response\x12\x39\n\x0fReconnectClient\x12\x16.grpc.ReconnectRequest\x1a\x0e.grpc.Response2\xda\x04\n\x08\x43ombiner\x12T\n\x18ModelUpdateRequestStream\x12\x1c.grpc.ClientAvailableMessage\x1a\x18.grpc.ModelUpdateRequest0\x01\x12\x46\n\x11ModelUpdateStream\x12\x1c.grpc.ClientAvailableMessage\x1a\x11.grpc.ModelUpdate0\x01\x12\\\n\x1cModelValidationRequestStream\x12\x1c.grpc.ClientAvailableMessage\x1a\x1c.grpc.ModelValidationRequest0\x01\x12N\n\x15ModelValidationStream\x12\x1c.grpc.ClientAvailableMessage\x1a\x15.grpc.ModelValidation0\x01\x12\x42\n\x16SendModelUpdateRequest\x12\x18.grpc.ModelUpdateRequest\x1a\x0e.grpc.Response\x12\x34\n\x0fSendModelUpdate\x12\x11.grpc.ModelUpdate\x1a\x0e.grpc.Response\x12J\n\x1aSendModelValidationRequest\x12\x1c.grpc.ModelValidationRequest\x1a\x0e.grpc.Response\x12<\n\x13SendModelValidation\x12\x15.grpc.ModelValidation\x1a\x0e.grpc.Responseb\x06proto3' + name='fedn/common/net/grpc/fedn.proto', + package='grpc', + syntax='proto3', + serialized_options=None, + create_key=_descriptor._internal_create_key, + serialized_pb=b'\n\x1f\x66\x65\x64n/common/net/grpc/fedn.proto\x12\x04grpc\":\n\x08Response\x12\x1c\n\x06sender\x18\x01 \x01(\x0b\x32\x0c.grpc.Client\x12\x10\n\x08response\x18\x02 \x01(\t\"\x8c\x02\n\x06Status\x12\x1c\n\x06sender\x18\x01 \x01(\x0b\x32\x0c.grpc.Client\x12\x0e\n\x06status\x18\x02 \x01(\t\x12(\n\tlog_level\x18\x03 \x01(\x0e\x32\x15.grpc.Status.LogLevel\x12\x0c\n\x04\x64\x61ta\x18\x04 \x01(\t\x12\x16\n\x0e\x63orrelation_id\x18\x05 \x01(\t\x12\x11\n\ttimestamp\x18\x06 \x01(\t\x12\x1e\n\x04type\x18\x07 \x01(\x0e\x32\x10.grpc.StatusType\x12\r\n\x05\x65xtra\x18\x08 \x01(\t\"B\n\x08LogLevel\x12\x08\n\x04INFO\x10\x00\x12\t\n\x05\x44\x45\x42UG\x10\x01\x12\x0b\n\x07WARNING\x10\x02\x12\t\n\x05\x45RROR\x10\x03\x12\t\n\x05\x41UDIT\x10\x04\"\x9d\x01\n\x12ModelUpdateRequest\x12\x1c\n\x06sender\x18\x01 \x01(\x0b\x32\x0c.grpc.Client\x12\x1e\n\x08receiver\x18\x02 \x01(\x0b\x32\x0c.grpc.Client\x12\x10\n\x08model_id\x18\x03 \x01(\t\x12\x0c\n\x04\x64\x61ta\x18\x04 \x01(\t\x12\x16\n\x0e\x63orrelation_id\x18\x05 \x01(\t\x12\x11\n\ttimestamp\x18\x06 \x01(\t\"\xaf\x01\n\x0bModelUpdate\x12\x1c\n\x06sender\x18\x01 \x01(\x0b\x32\x0c.grpc.Client\x12\x1e\n\x08receiver\x18\x02 \x01(\x0b\x32\x0c.grpc.Client\x12\x10\n\x08model_id\x18\x03 \x01(\t\x12\x17\n\x0fmodel_update_id\x18\x04 \x01(\t\x12\x16\n\x0e\x63orrelation_id\x18\x05 \x01(\t\x12\x11\n\ttimestamp\x18\x06 \x01(\t\x12\x0c\n\x04meta\x18\x07 \x01(\t\"\xb7\x01\n\x16ModelValidationRequest\x12\x1c\n\x06sender\x18\x01 \x01(\x0b\x32\x0c.grpc.Client\x12\x1e\n\x08receiver\x18\x02 \x01(\x0b\x32\x0c.grpc.Client\x12\x10\n\x08model_id\x18\x03 \x01(\t\x12\x0c\n\x04\x64\x61ta\x18\x04 \x01(\t\x12\x16\n\x0e\x63orrelation_id\x18\x05 \x01(\t\x12\x11\n\ttimestamp\x18\x06 \x01(\t\x12\x14\n\x0cis_inference\x18\x07 \x01(\x08\"\xa8\x01\n\x0fModelValidation\x12\x1c\n\x06sender\x18\x01 \x01(\x0b\x32\x0c.grpc.Client\x12\x1e\n\x08receiver\x18\x02 \x01(\x0b\x32\x0c.grpc.Client\x12\x10\n\x08model_id\x18\x03 \x01(\t\x12\x0c\n\x04\x64\x61ta\x18\x04 \x01(\t\x12\x16\n\x0e\x63orrelation_id\x18\x05 \x01(\t\x12\x11\n\ttimestamp\x18\x06 \x01(\t\x12\x0c\n\x04meta\x18\x07 \x01(\t\"\x89\x01\n\x0cModelRequest\x12\x1c\n\x06sender\x18\x01 \x01(\x0b\x32\x0c.grpc.Client\x12\x1e\n\x08receiver\x18\x02 \x01(\x0b\x32\x0c.grpc.Client\x12\x0c\n\x04\x64\x61ta\x18\x03 \x01(\x0c\x12\n\n\x02id\x18\x04 \x01(\t\x12!\n\x06status\x18\x05 \x01(\x0e\x32\x11.grpc.ModelStatus\"]\n\rModelResponse\x12\x0c\n\x04\x64\x61ta\x18\x01 \x01(\x0c\x12\n\n\x02id\x18\x02 \x01(\t\x12!\n\x06status\x18\x03 \x01(\x0e\x32\x11.grpc.ModelStatus\x12\x0f\n\x07message\x18\x04 \x01(\t\"U\n\x15GetGlobalModelRequest\x12\x1c\n\x06sender\x18\x01 \x01(\x0b\x32\x0c.grpc.Client\x12\x1e\n\x08receiver\x18\x02 \x01(\x0b\x32\x0c.grpc.Client\"h\n\x16GetGlobalModelResponse\x12\x1c\n\x06sender\x18\x01 \x01(\x0b\x32\x0c.grpc.Client\x12\x1e\n\x08receiver\x18\x02 \x01(\x0b\x32\x0c.grpc.Client\x12\x10\n\x08model_id\x18\x03 \x01(\t\")\n\tHeartbeat\x12\x1c\n\x06sender\x18\x01 \x01(\x0b\x32\x0c.grpc.Client\"W\n\x16\x43lientAvailableMessage\x12\x1c\n\x06sender\x18\x01 \x01(\x0b\x32\x0c.grpc.Client\x12\x0c\n\x04\x64\x61ta\x18\x02 \x01(\t\x12\x11\n\ttimestamp\x18\x03 \x01(\t\"R\n\x12ListClientsRequest\x12\x1c\n\x06sender\x18\x01 \x01(\x0b\x32\x0c.grpc.Client\x12\x1e\n\x07\x63hannel\x18\x02 \x01(\x0e\x32\r.grpc.Channel\"*\n\nClientList\x12\x1c\n\x06\x63lient\x18\x01 \x03(\x0b\x32\x0c.grpc.Client\"0\n\x06\x43lient\x12\x18\n\x04role\x18\x01 \x01(\x0e\x32\n.grpc.Role\x12\x0c\n\x04name\x18\x02 \x01(\t\"m\n\x0fReassignRequest\x12\x1c\n\x06sender\x18\x01 \x01(\x0b\x32\x0c.grpc.Client\x12\x1e\n\x08receiver\x18\x02 \x01(\x0b\x32\x0c.grpc.Client\x12\x0e\n\x06server\x18\x03 \x01(\t\x12\x0c\n\x04port\x18\x04 \x01(\r\"c\n\x10ReconnectRequest\x12\x1c\n\x06sender\x18\x01 \x01(\x0b\x32\x0c.grpc.Client\x12\x1e\n\x08receiver\x18\x02 \x01(\x0b\x32\x0c.grpc.Client\x12\x11\n\treconnect\x18\x03 \x01(\r\"\'\n\tParameter\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\r\n\x05value\x18\x02 \x01(\t\"T\n\x0e\x43ontrolRequest\x12\x1e\n\x07\x63ommand\x18\x01 \x01(\x0e\x32\r.grpc.Command\x12\"\n\tparameter\x18\x02 \x03(\x0b\x32\x0f.grpc.Parameter\"F\n\x0f\x43ontrolResponse\x12\x0f\n\x07message\x18\x01 \x01(\t\x12\"\n\tparameter\x18\x02 \x03(\x0b\x32\x0f.grpc.Parameter\"R\n\x0eReportResponse\x12\x1c\n\x06sender\x18\x01 \x01(\x0b\x32\x0c.grpc.Client\x12\"\n\tparameter\x18\x02 \x03(\x0b\x32\x0f.grpc.Parameter\"\x13\n\x11\x43onnectionRequest\"<\n\x12\x43onnectionResponse\x12&\n\x06status\x18\x01 \x01(\x0e\x32\x16.grpc.ConnectionStatus*\x84\x01\n\nStatusType\x12\x07\n\x03LOG\x10\x00\x12\x18\n\x14MODEL_UPDATE_REQUEST\x10\x01\x12\x10\n\x0cMODEL_UPDATE\x10\x02\x12\x1c\n\x18MODEL_VALIDATION_REQUEST\x10\x03\x12\x14\n\x10MODEL_VALIDATION\x10\x04\x12\r\n\tINFERENCE\x10\x05*\x86\x01\n\x07\x43hannel\x12\x0b\n\x07\x44\x45\x46\x41ULT\x10\x00\x12\x19\n\x15MODEL_UPDATE_REQUESTS\x10\x01\x12\x11\n\rMODEL_UPDATES\x10\x02\x12\x1d\n\x19MODEL_VALIDATION_REQUESTS\x10\x03\x12\x15\n\x11MODEL_VALIDATIONS\x10\x04\x12\n\n\x06STATUS\x10\x05*F\n\x0bModelStatus\x12\x06\n\x02OK\x10\x00\x12\x0f\n\x0bIN_PROGRESS\x10\x01\x12\x12\n\x0eIN_PROGRESS_OK\x10\x02\x12\n\n\x06\x46\x41ILED\x10\x03*8\n\x04Role\x12\n\n\x06WORKER\x10\x00\x12\x0c\n\x08\x43OMBINER\x10\x01\x12\x0b\n\x07REDUCER\x10\x02\x12\t\n\x05OTHER\x10\x03*J\n\x07\x43ommand\x12\x08\n\x04IDLE\x10\x00\x12\t\n\x05START\x10\x01\x12\t\n\x05PAUSE\x10\x02\x12\x08\n\x04STOP\x10\x03\x12\t\n\x05RESET\x10\x04\x12\n\n\x06REPORT\x10\x05*I\n\x10\x43onnectionStatus\x12\x11\n\rNOT_ACCEPTING\x10\x00\x12\r\n\tACCEPTING\x10\x01\x12\x13\n\x0fTRY_AGAIN_LATER\x10\x02\x32z\n\x0cModelService\x12\x33\n\x06Upload\x12\x12.grpc.ModelRequest\x1a\x13.grpc.ModelResponse(\x01\x12\x35\n\x08\x44ownload\x12\x12.grpc.ModelRequest\x1a\x13.grpc.ModelResponse0\x01\x32\xe3\x01\n\x07\x43ontrol\x12\x34\n\x05Start\x12\x14.grpc.ControlRequest\x1a\x15.grpc.ControlResponse\x12\x33\n\x04Stop\x12\x14.grpc.ControlRequest\x1a\x15.grpc.ControlResponse\x12\x37\n\tConfigure\x12\x14.grpc.ControlRequest\x1a\x14.grpc.ReportResponse\x12\x34\n\x06Report\x12\x14.grpc.ControlRequest\x1a\x14.grpc.ReportResponse2V\n\x07Reducer\x12K\n\x0eGetGlobalModel\x12\x1b.grpc.GetGlobalModelRequest\x1a\x1c.grpc.GetGlobalModelResponse2\xab\x03\n\tConnector\x12\x44\n\x14\x41llianceStatusStream\x12\x1c.grpc.ClientAvailableMessage\x1a\x0c.grpc.Status0\x01\x12*\n\nSendStatus\x12\x0c.grpc.Status\x1a\x0e.grpc.Response\x12?\n\x11ListActiveClients\x12\x18.grpc.ListClientsRequest\x1a\x10.grpc.ClientList\x12\x45\n\x10\x41\x63\x63\x65ptingClients\x12\x17.grpc.ConnectionRequest\x1a\x18.grpc.ConnectionResponse\x12\x30\n\rSendHeartbeat\x12\x0f.grpc.Heartbeat\x1a\x0e.grpc.Response\x12\x37\n\x0eReassignClient\x12\x15.grpc.ReassignRequest\x1a\x0e.grpc.Response\x12\x39\n\x0fReconnectClient\x12\x16.grpc.ReconnectRequest\x1a\x0e.grpc.Response2\xda\x04\n\x08\x43ombiner\x12T\n\x18ModelUpdateRequestStream\x12\x1c.grpc.ClientAvailableMessage\x1a\x18.grpc.ModelUpdateRequest0\x01\x12\x46\n\x11ModelUpdateStream\x12\x1c.grpc.ClientAvailableMessage\x1a\x11.grpc.ModelUpdate0\x01\x12\\\n\x1cModelValidationRequestStream\x12\x1c.grpc.ClientAvailableMessage\x1a\x1c.grpc.ModelValidationRequest0\x01\x12N\n\x15ModelValidationStream\x12\x1c.grpc.ClientAvailableMessage\x1a\x15.grpc.ModelValidation0\x01\x12\x42\n\x16SendModelUpdateRequest\x12\x18.grpc.ModelUpdateRequest\x1a\x0e.grpc.Response\x12\x34\n\x0fSendModelUpdate\x12\x11.grpc.ModelUpdate\x1a\x0e.grpc.Response\x12J\n\x1aSendModelValidationRequest\x12\x1c.grpc.ModelValidationRequest\x1a\x0e.grpc.Response\x12<\n\x13SendModelValidation\x12\x15.grpc.ModelValidation\x1a\x0e.grpc.Responseb\x06proto3' ) _STATUSTYPE = _descriptor.EnumDescriptor( - name='StatusType', - full_name='grpc.StatusType', - filename=None, - file=DESCRIPTOR, - create_key=_descriptor._internal_create_key, - values=[ - _descriptor.EnumValueDescriptor( - name='LOG', index=0, number=0, - serialized_options=None, - type=None, - create_key=_descriptor._internal_create_key), - _descriptor.EnumValueDescriptor( - name='MODEL_UPDATE_REQUEST', index=1, number=1, - serialized_options=None, - type=None, - create_key=_descriptor._internal_create_key), - _descriptor.EnumValueDescriptor( - name='MODEL_UPDATE', index=2, number=2, - serialized_options=None, - type=None, - create_key=_descriptor._internal_create_key), - _descriptor.EnumValueDescriptor( - name='MODEL_VALIDATION_REQUEST', index=3, number=3, - serialized_options=None, - type=None, - create_key=_descriptor._internal_create_key), - _descriptor.EnumValueDescriptor( - name='MODEL_VALIDATION', index=4, number=4, - serialized_options=None, - type=None, - create_key=_descriptor._internal_create_key), - ], - containing_type=None, - serialized_options=None, - serialized_start=2383, - serialized_end=2500, + name='StatusType', + full_name='grpc.StatusType', + filename=None, + file=DESCRIPTOR, + create_key=_descriptor._internal_create_key, + values=[ + _descriptor.EnumValueDescriptor( + name='LOG', index=0, number=0, + serialized_options=None, + type=None, + create_key=_descriptor._internal_create_key), + _descriptor.EnumValueDescriptor( + name='MODEL_UPDATE_REQUEST', index=1, number=1, + serialized_options=None, + type=None, + create_key=_descriptor._internal_create_key), + _descriptor.EnumValueDescriptor( + name='MODEL_UPDATE', index=2, number=2, + serialized_options=None, + type=None, + create_key=_descriptor._internal_create_key), + _descriptor.EnumValueDescriptor( + name='MODEL_VALIDATION_REQUEST', index=3, number=3, + serialized_options=None, + type=None, + create_key=_descriptor._internal_create_key), + _descriptor.EnumValueDescriptor( + name='MODEL_VALIDATION', index=4, number=4, + serialized_options=None, + type=None, + create_key=_descriptor._internal_create_key), + _descriptor.EnumValueDescriptor( + name='INFERENCE', index=5, number=5, + serialized_options=None, + type=None, + create_key=_descriptor._internal_create_key), + ], + containing_type=None, + serialized_options=None, + serialized_start=2384, + serialized_end=2516, ) _sym_db.RegisterEnumDescriptor(_STATUSTYPE) StatusType = enum_type_wrapper.EnumTypeWrapper(_STATUSTYPE) _CHANNEL = _descriptor.EnumDescriptor( - name='Channel', - full_name='grpc.Channel', - filename=None, - file=DESCRIPTOR, - create_key=_descriptor._internal_create_key, - values=[ - _descriptor.EnumValueDescriptor( - name='DEFAULT', index=0, number=0, - serialized_options=None, - type=None, - create_key=_descriptor._internal_create_key), - _descriptor.EnumValueDescriptor( - name='MODEL_UPDATE_REQUESTS', index=1, number=1, - serialized_options=None, - type=None, - create_key=_descriptor._internal_create_key), - _descriptor.EnumValueDescriptor( - name='MODEL_UPDATES', index=2, number=2, - serialized_options=None, - type=None, - create_key=_descriptor._internal_create_key), - _descriptor.EnumValueDescriptor( - name='MODEL_VALIDATION_REQUESTS', index=3, number=3, - serialized_options=None, - type=None, - create_key=_descriptor._internal_create_key), - _descriptor.EnumValueDescriptor( - name='MODEL_VALIDATIONS', index=4, number=4, - serialized_options=None, - type=None, - create_key=_descriptor._internal_create_key), - _descriptor.EnumValueDescriptor( - name='STATUS', index=5, number=5, - serialized_options=None, - type=None, - create_key=_descriptor._internal_create_key), - ], - containing_type=None, - serialized_options=None, - serialized_start=2503, - serialized_end=2637, + name='Channel', + full_name='grpc.Channel', + filename=None, + file=DESCRIPTOR, + create_key=_descriptor._internal_create_key, + values=[ + _descriptor.EnumValueDescriptor( + name='DEFAULT', index=0, number=0, + serialized_options=None, + type=None, + create_key=_descriptor._internal_create_key), + _descriptor.EnumValueDescriptor( + name='MODEL_UPDATE_REQUESTS', index=1, number=1, + serialized_options=None, + type=None, + create_key=_descriptor._internal_create_key), + _descriptor.EnumValueDescriptor( + name='MODEL_UPDATES', index=2, number=2, + serialized_options=None, + type=None, + create_key=_descriptor._internal_create_key), + _descriptor.EnumValueDescriptor( + name='MODEL_VALIDATION_REQUESTS', index=3, number=3, + serialized_options=None, + type=None, + create_key=_descriptor._internal_create_key), + _descriptor.EnumValueDescriptor( + name='MODEL_VALIDATIONS', index=4, number=4, + serialized_options=None, + type=None, + create_key=_descriptor._internal_create_key), + _descriptor.EnumValueDescriptor( + name='STATUS', index=5, number=5, + serialized_options=None, + type=None, + create_key=_descriptor._internal_create_key), + ], + containing_type=None, + serialized_options=None, + serialized_start=2519, + serialized_end=2653, ) _sym_db.RegisterEnumDescriptor(_CHANNEL) Channel = enum_type_wrapper.EnumTypeWrapper(_CHANNEL) _MODELSTATUS = _descriptor.EnumDescriptor( - name='ModelStatus', - full_name='grpc.ModelStatus', - filename=None, - file=DESCRIPTOR, - create_key=_descriptor._internal_create_key, - values=[ - _descriptor.EnumValueDescriptor( - name='OK', index=0, number=0, - serialized_options=None, - type=None, - create_key=_descriptor._internal_create_key), - _descriptor.EnumValueDescriptor( - name='IN_PROGRESS', index=1, number=1, - serialized_options=None, - type=None, - create_key=_descriptor._internal_create_key), - _descriptor.EnumValueDescriptor( - name='IN_PROGRESS_OK', index=2, number=2, - serialized_options=None, - type=None, - create_key=_descriptor._internal_create_key), - _descriptor.EnumValueDescriptor( - name='FAILED', index=3, number=3, - serialized_options=None, - type=None, - create_key=_descriptor._internal_create_key), - ], - containing_type=None, - serialized_options=None, - serialized_start=2639, - serialized_end=2709, + name='ModelStatus', + full_name='grpc.ModelStatus', + filename=None, + file=DESCRIPTOR, + create_key=_descriptor._internal_create_key, + values=[ + _descriptor.EnumValueDescriptor( + name='OK', index=0, number=0, + serialized_options=None, + type=None, + create_key=_descriptor._internal_create_key), + _descriptor.EnumValueDescriptor( + name='IN_PROGRESS', index=1, number=1, + serialized_options=None, + type=None, + create_key=_descriptor._internal_create_key), + _descriptor.EnumValueDescriptor( + name='IN_PROGRESS_OK', index=2, number=2, + serialized_options=None, + type=None, + create_key=_descriptor._internal_create_key), + _descriptor.EnumValueDescriptor( + name='FAILED', index=3, number=3, + serialized_options=None, + type=None, + create_key=_descriptor._internal_create_key), + ], + containing_type=None, + serialized_options=None, + serialized_start=2655, + serialized_end=2725, ) _sym_db.RegisterEnumDescriptor(_MODELSTATUS) ModelStatus = enum_type_wrapper.EnumTypeWrapper(_MODELSTATUS) _ROLE = _descriptor.EnumDescriptor( - name='Role', - full_name='grpc.Role', - filename=None, - file=DESCRIPTOR, - create_key=_descriptor._internal_create_key, - values=[ - _descriptor.EnumValueDescriptor( - name='WORKER', index=0, number=0, - serialized_options=None, - type=None, - create_key=_descriptor._internal_create_key), - _descriptor.EnumValueDescriptor( - name='COMBINER', index=1, number=1, - serialized_options=None, - type=None, - create_key=_descriptor._internal_create_key), - _descriptor.EnumValueDescriptor( - name='REDUCER', index=2, number=2, - serialized_options=None, - type=None, - create_key=_descriptor._internal_create_key), - _descriptor.EnumValueDescriptor( - name='OTHER', index=3, number=3, - serialized_options=None, - type=None, - create_key=_descriptor._internal_create_key), - ], - containing_type=None, - serialized_options=None, - serialized_start=2711, - serialized_end=2767, + name='Role', + full_name='grpc.Role', + filename=None, + file=DESCRIPTOR, + create_key=_descriptor._internal_create_key, + values=[ + _descriptor.EnumValueDescriptor( + name='WORKER', index=0, number=0, + serialized_options=None, + type=None, + create_key=_descriptor._internal_create_key), + _descriptor.EnumValueDescriptor( + name='COMBINER', index=1, number=1, + serialized_options=None, + type=None, + create_key=_descriptor._internal_create_key), + _descriptor.EnumValueDescriptor( + name='REDUCER', index=2, number=2, + serialized_options=None, + type=None, + create_key=_descriptor._internal_create_key), + _descriptor.EnumValueDescriptor( + name='OTHER', index=3, number=3, + serialized_options=None, + type=None, + create_key=_descriptor._internal_create_key), + ], + containing_type=None, + serialized_options=None, + serialized_start=2727, + serialized_end=2783, ) _sym_db.RegisterEnumDescriptor(_ROLE) Role = enum_type_wrapper.EnumTypeWrapper(_ROLE) _COMMAND = _descriptor.EnumDescriptor( - name='Command', - full_name='grpc.Command', - filename=None, - file=DESCRIPTOR, - create_key=_descriptor._internal_create_key, - values=[ - _descriptor.EnumValueDescriptor( - name='IDLE', index=0, number=0, - serialized_options=None, - type=None, - create_key=_descriptor._internal_create_key), - _descriptor.EnumValueDescriptor( - name='START', index=1, number=1, - serialized_options=None, - type=None, - create_key=_descriptor._internal_create_key), - _descriptor.EnumValueDescriptor( - name='PAUSE', index=2, number=2, - serialized_options=None, - type=None, - create_key=_descriptor._internal_create_key), - _descriptor.EnumValueDescriptor( - name='STOP', index=3, number=3, - serialized_options=None, - type=None, - create_key=_descriptor._internal_create_key), - _descriptor.EnumValueDescriptor( - name='RESET', index=4, number=4, - serialized_options=None, - type=None, - create_key=_descriptor._internal_create_key), - _descriptor.EnumValueDescriptor( - name='REPORT', index=5, number=5, - serialized_options=None, - type=None, - create_key=_descriptor._internal_create_key), - ], - containing_type=None, - serialized_options=None, - serialized_start=2769, - serialized_end=2843, + name='Command', + full_name='grpc.Command', + filename=None, + file=DESCRIPTOR, + create_key=_descriptor._internal_create_key, + values=[ + _descriptor.EnumValueDescriptor( + name='IDLE', index=0, number=0, + serialized_options=None, + type=None, + create_key=_descriptor._internal_create_key), + _descriptor.EnumValueDescriptor( + name='START', index=1, number=1, + serialized_options=None, + type=None, + create_key=_descriptor._internal_create_key), + _descriptor.EnumValueDescriptor( + name='PAUSE', index=2, number=2, + serialized_options=None, + type=None, + create_key=_descriptor._internal_create_key), + _descriptor.EnumValueDescriptor( + name='STOP', index=3, number=3, + serialized_options=None, + type=None, + create_key=_descriptor._internal_create_key), + _descriptor.EnumValueDescriptor( + name='RESET', index=4, number=4, + serialized_options=None, + type=None, + create_key=_descriptor._internal_create_key), + _descriptor.EnumValueDescriptor( + name='REPORT', index=5, number=5, + serialized_options=None, + type=None, + create_key=_descriptor._internal_create_key), + ], + containing_type=None, + serialized_options=None, + serialized_start=2785, + serialized_end=2859, ) _sym_db.RegisterEnumDescriptor(_COMMAND) Command = enum_type_wrapper.EnumTypeWrapper(_COMMAND) _CONNECTIONSTATUS = _descriptor.EnumDescriptor( - name='ConnectionStatus', - full_name='grpc.ConnectionStatus', - filename=None, - file=DESCRIPTOR, - create_key=_descriptor._internal_create_key, - values=[ - _descriptor.EnumValueDescriptor( - name='NOT_ACCEPTING', index=0, number=0, - serialized_options=None, - type=None, - create_key=_descriptor._internal_create_key), - _descriptor.EnumValueDescriptor( - name='ACCEPTING', index=1, number=1, - serialized_options=None, - type=None, - create_key=_descriptor._internal_create_key), - _descriptor.EnumValueDescriptor( - name='TRY_AGAIN_LATER', index=2, number=2, - serialized_options=None, - type=None, - create_key=_descriptor._internal_create_key), - ], - containing_type=None, - serialized_options=None, - serialized_start=2845, - serialized_end=2918, + name='ConnectionStatus', + full_name='grpc.ConnectionStatus', + filename=None, + file=DESCRIPTOR, + create_key=_descriptor._internal_create_key, + values=[ + _descriptor.EnumValueDescriptor( + name='NOT_ACCEPTING', index=0, number=0, + serialized_options=None, + type=None, + create_key=_descriptor._internal_create_key), + _descriptor.EnumValueDescriptor( + name='ACCEPTING', index=1, number=1, + serialized_options=None, + type=None, + create_key=_descriptor._internal_create_key), + _descriptor.EnumValueDescriptor( + name='TRY_AGAIN_LATER', index=2, number=2, + serialized_options=None, + type=None, + create_key=_descriptor._internal_create_key), + ], + containing_type=None, + serialized_options=None, + serialized_start=2861, + serialized_end=2934, ) _sym_db.RegisterEnumDescriptor(_CONNECTIONSTATUS) @@ -263,6 +269,7 @@ MODEL_UPDATE = 2 MODEL_VALIDATION_REQUEST = 3 MODEL_VALIDATION = 4 +INFERENCE = 5 DEFAULT = 0 MODEL_UPDATE_REQUESTS = 1 MODEL_UPDATES = 2 @@ -289,1151 +296,1151 @@ _STATUS_LOGLEVEL = _descriptor.EnumDescriptor( - name='LogLevel', - full_name='grpc.Status.LogLevel', - filename=None, - file=DESCRIPTOR, - create_key=_descriptor._internal_create_key, - values=[ - _descriptor.EnumValueDescriptor( - name='INFO', index=0, number=0, - serialized_options=None, - type=None, - create_key=_descriptor._internal_create_key), - _descriptor.EnumValueDescriptor( - name='DEBUG', index=1, number=1, - serialized_options=None, - type=None, - create_key=_descriptor._internal_create_key), - _descriptor.EnumValueDescriptor( - name='WARNING', index=2, number=2, - serialized_options=None, - type=None, - create_key=_descriptor._internal_create_key), - _descriptor.EnumValueDescriptor( - name='ERROR', index=3, number=3, - serialized_options=None, - type=None, - create_key=_descriptor._internal_create_key), - _descriptor.EnumValueDescriptor( - name='AUDIT', index=4, number=4, - serialized_options=None, - type=None, - create_key=_descriptor._internal_create_key), - ], - containing_type=None, - serialized_options=None, - serialized_start=304, - serialized_end=370, + name='LogLevel', + full_name='grpc.Status.LogLevel', + filename=None, + file=DESCRIPTOR, + create_key=_descriptor._internal_create_key, + values=[ + _descriptor.EnumValueDescriptor( + name='INFO', index=0, number=0, + serialized_options=None, + type=None, + create_key=_descriptor._internal_create_key), + _descriptor.EnumValueDescriptor( + name='DEBUG', index=1, number=1, + serialized_options=None, + type=None, + create_key=_descriptor._internal_create_key), + _descriptor.EnumValueDescriptor( + name='WARNING', index=2, number=2, + serialized_options=None, + type=None, + create_key=_descriptor._internal_create_key), + _descriptor.EnumValueDescriptor( + name='ERROR', index=3, number=3, + serialized_options=None, + type=None, + create_key=_descriptor._internal_create_key), + _descriptor.EnumValueDescriptor( + name='AUDIT', index=4, number=4, + serialized_options=None, + type=None, + create_key=_descriptor._internal_create_key), + ], + containing_type=None, + serialized_options=None, + serialized_start=304, + serialized_end=370, ) _sym_db.RegisterEnumDescriptor(_STATUS_LOGLEVEL) _RESPONSE = _descriptor.Descriptor( - name='Response', - full_name='grpc.Response', - filename=None, - file=DESCRIPTOR, - containing_type=None, - create_key=_descriptor._internal_create_key, - fields=[ - _descriptor.FieldDescriptor( - name='sender', full_name='grpc.Response.sender', index=0, - number=1, type=11, cpp_type=10, label=1, - has_default_value=False, default_value=None, - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), - _descriptor.FieldDescriptor( - name='response', full_name='grpc.Response.response', index=1, - number=2, type=9, cpp_type=9, label=1, - has_default_value=False, default_value=b"".decode('utf-8'), - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), - ], - extensions=[ - ], - nested_types=[], - enum_types=[ - ], - serialized_options=None, - is_extendable=False, - syntax='proto3', - extension_ranges=[], - oneofs=[ - ], - serialized_start=41, - serialized_end=99, + name='Response', + full_name='grpc.Response', + filename=None, + file=DESCRIPTOR, + containing_type=None, + create_key=_descriptor._internal_create_key, + fields=[ + _descriptor.FieldDescriptor( + name='sender', full_name='grpc.Response.sender', index=0, + number=1, type=11, cpp_type=10, label=1, + has_default_value=False, default_value=None, + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + _descriptor.FieldDescriptor( + name='response', full_name='grpc.Response.response', index=1, + number=2, type=9, cpp_type=9, label=1, + has_default_value=False, default_value=b"".decode('utf-8'), + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + ], + extensions=[ + ], + nested_types=[], + enum_types=[ + ], + serialized_options=None, + is_extendable=False, + syntax='proto3', + extension_ranges=[], + oneofs=[ + ], + serialized_start=41, + serialized_end=99, ) _STATUS = _descriptor.Descriptor( - name='Status', - full_name='grpc.Status', - filename=None, - file=DESCRIPTOR, - containing_type=None, - create_key=_descriptor._internal_create_key, - fields=[ - _descriptor.FieldDescriptor( - name='sender', full_name='grpc.Status.sender', index=0, - number=1, type=11, cpp_type=10, label=1, - has_default_value=False, default_value=None, - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), - _descriptor.FieldDescriptor( - name='status', full_name='grpc.Status.status', index=1, - number=2, type=9, cpp_type=9, label=1, - has_default_value=False, default_value=b"".decode('utf-8'), - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), - _descriptor.FieldDescriptor( - name='log_level', full_name='grpc.Status.log_level', index=2, - number=3, type=14, cpp_type=8, label=1, - has_default_value=False, default_value=0, - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), - _descriptor.FieldDescriptor( - name='data', full_name='grpc.Status.data', index=3, - number=4, type=9, cpp_type=9, label=1, - has_default_value=False, default_value=b"".decode('utf-8'), - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), - _descriptor.FieldDescriptor( - name='correlation_id', full_name='grpc.Status.correlation_id', index=4, - number=5, type=9, cpp_type=9, label=1, - has_default_value=False, default_value=b"".decode('utf-8'), - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), - _descriptor.FieldDescriptor( - name='timestamp', full_name='grpc.Status.timestamp', index=5, - number=6, type=9, cpp_type=9, label=1, - has_default_value=False, default_value=b"".decode('utf-8'), - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), - _descriptor.FieldDescriptor( - name='type', full_name='grpc.Status.type', index=6, - number=7, type=14, cpp_type=8, label=1, - has_default_value=False, default_value=0, - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), - _descriptor.FieldDescriptor( - name='extra', full_name='grpc.Status.extra', index=7, - number=8, type=9, cpp_type=9, label=1, - has_default_value=False, default_value=b"".decode('utf-8'), - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), - ], - extensions=[ - ], - nested_types=[], - enum_types=[ - _STATUS_LOGLEVEL, - ], - serialized_options=None, - is_extendable=False, - syntax='proto3', - extension_ranges=[], - oneofs=[ - ], - serialized_start=102, - serialized_end=370, + name='Status', + full_name='grpc.Status', + filename=None, + file=DESCRIPTOR, + containing_type=None, + create_key=_descriptor._internal_create_key, + fields=[ + _descriptor.FieldDescriptor( + name='sender', full_name='grpc.Status.sender', index=0, + number=1, type=11, cpp_type=10, label=1, + has_default_value=False, default_value=None, + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + _descriptor.FieldDescriptor( + name='status', full_name='grpc.Status.status', index=1, + number=2, type=9, cpp_type=9, label=1, + has_default_value=False, default_value=b"".decode('utf-8'), + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + _descriptor.FieldDescriptor( + name='log_level', full_name='grpc.Status.log_level', index=2, + number=3, type=14, cpp_type=8, label=1, + has_default_value=False, default_value=0, + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + _descriptor.FieldDescriptor( + name='data', full_name='grpc.Status.data', index=3, + number=4, type=9, cpp_type=9, label=1, + has_default_value=False, default_value=b"".decode('utf-8'), + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + _descriptor.FieldDescriptor( + name='correlation_id', full_name='grpc.Status.correlation_id', index=4, + number=5, type=9, cpp_type=9, label=1, + has_default_value=False, default_value=b"".decode('utf-8'), + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + _descriptor.FieldDescriptor( + name='timestamp', full_name='grpc.Status.timestamp', index=5, + number=6, type=9, cpp_type=9, label=1, + has_default_value=False, default_value=b"".decode('utf-8'), + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + _descriptor.FieldDescriptor( + name='type', full_name='grpc.Status.type', index=6, + number=7, type=14, cpp_type=8, label=1, + has_default_value=False, default_value=0, + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + _descriptor.FieldDescriptor( + name='extra', full_name='grpc.Status.extra', index=7, + number=8, type=9, cpp_type=9, label=1, + has_default_value=False, default_value=b"".decode('utf-8'), + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + ], + extensions=[ + ], + nested_types=[], + enum_types=[ + _STATUS_LOGLEVEL, + ], + serialized_options=None, + is_extendable=False, + syntax='proto3', + extension_ranges=[], + oneofs=[ + ], + serialized_start=102, + serialized_end=370, ) _MODELUPDATEREQUEST = _descriptor.Descriptor( - name='ModelUpdateRequest', - full_name='grpc.ModelUpdateRequest', - filename=None, - file=DESCRIPTOR, - containing_type=None, - create_key=_descriptor._internal_create_key, - fields=[ - _descriptor.FieldDescriptor( - name='sender', full_name='grpc.ModelUpdateRequest.sender', index=0, - number=1, type=11, cpp_type=10, label=1, - has_default_value=False, default_value=None, - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), - _descriptor.FieldDescriptor( - name='receiver', full_name='grpc.ModelUpdateRequest.receiver', index=1, - number=2, type=11, cpp_type=10, label=1, - has_default_value=False, default_value=None, - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), - _descriptor.FieldDescriptor( - name='model_id', full_name='grpc.ModelUpdateRequest.model_id', index=2, - number=3, type=9, cpp_type=9, label=1, - has_default_value=False, default_value=b"".decode('utf-8'), - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), - _descriptor.FieldDescriptor( - name='data', full_name='grpc.ModelUpdateRequest.data', index=3, - number=4, type=9, cpp_type=9, label=1, - has_default_value=False, default_value=b"".decode('utf-8'), - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), - _descriptor.FieldDescriptor( - name='correlation_id', full_name='grpc.ModelUpdateRequest.correlation_id', index=4, - number=5, type=9, cpp_type=9, label=1, - has_default_value=False, default_value=b"".decode('utf-8'), - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), - _descriptor.FieldDescriptor( - name='timestamp', full_name='grpc.ModelUpdateRequest.timestamp', index=5, - number=6, type=9, cpp_type=9, label=1, - has_default_value=False, default_value=b"".decode('utf-8'), - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), - ], - extensions=[ - ], - nested_types=[], - enum_types=[ - ], - serialized_options=None, - is_extendable=False, - syntax='proto3', - extension_ranges=[], - oneofs=[ - ], - serialized_start=373, - serialized_end=530, + name='ModelUpdateRequest', + full_name='grpc.ModelUpdateRequest', + filename=None, + file=DESCRIPTOR, + containing_type=None, + create_key=_descriptor._internal_create_key, + fields=[ + _descriptor.FieldDescriptor( + name='sender', full_name='grpc.ModelUpdateRequest.sender', index=0, + number=1, type=11, cpp_type=10, label=1, + has_default_value=False, default_value=None, + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + _descriptor.FieldDescriptor( + name='receiver', full_name='grpc.ModelUpdateRequest.receiver', index=1, + number=2, type=11, cpp_type=10, label=1, + has_default_value=False, default_value=None, + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + _descriptor.FieldDescriptor( + name='model_id', full_name='grpc.ModelUpdateRequest.model_id', index=2, + number=3, type=9, cpp_type=9, label=1, + has_default_value=False, default_value=b"".decode('utf-8'), + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + _descriptor.FieldDescriptor( + name='data', full_name='grpc.ModelUpdateRequest.data', index=3, + number=4, type=9, cpp_type=9, label=1, + has_default_value=False, default_value=b"".decode('utf-8'), + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + _descriptor.FieldDescriptor( + name='correlation_id', full_name='grpc.ModelUpdateRequest.correlation_id', index=4, + number=5, type=9, cpp_type=9, label=1, + has_default_value=False, default_value=b"".decode('utf-8'), + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + _descriptor.FieldDescriptor( + name='timestamp', full_name='grpc.ModelUpdateRequest.timestamp', index=5, + number=6, type=9, cpp_type=9, label=1, + has_default_value=False, default_value=b"".decode('utf-8'), + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + ], + extensions=[ + ], + nested_types=[], + enum_types=[ + ], + serialized_options=None, + is_extendable=False, + syntax='proto3', + extension_ranges=[], + oneofs=[ + ], + serialized_start=373, + serialized_end=530, ) _MODELUPDATE = _descriptor.Descriptor( - name='ModelUpdate', - full_name='grpc.ModelUpdate', - filename=None, - file=DESCRIPTOR, - containing_type=None, - create_key=_descriptor._internal_create_key, - fields=[ - _descriptor.FieldDescriptor( - name='sender', full_name='grpc.ModelUpdate.sender', index=0, - number=1, type=11, cpp_type=10, label=1, - has_default_value=False, default_value=None, - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), - _descriptor.FieldDescriptor( - name='receiver', full_name='grpc.ModelUpdate.receiver', index=1, - number=2, type=11, cpp_type=10, label=1, - has_default_value=False, default_value=None, - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), - _descriptor.FieldDescriptor( - name='model_id', full_name='grpc.ModelUpdate.model_id', index=2, - number=3, type=9, cpp_type=9, label=1, - has_default_value=False, default_value=b"".decode('utf-8'), - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), - _descriptor.FieldDescriptor( - name='model_update_id', full_name='grpc.ModelUpdate.model_update_id', index=3, - number=4, type=9, cpp_type=9, label=1, - has_default_value=False, default_value=b"".decode('utf-8'), - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), - _descriptor.FieldDescriptor( - name='correlation_id', full_name='grpc.ModelUpdate.correlation_id', index=4, - number=5, type=9, cpp_type=9, label=1, - has_default_value=False, default_value=b"".decode('utf-8'), - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), - _descriptor.FieldDescriptor( - name='timestamp', full_name='grpc.ModelUpdate.timestamp', index=5, - number=6, type=9, cpp_type=9, label=1, - has_default_value=False, default_value=b"".decode('utf-8'), - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), - _descriptor.FieldDescriptor( - name='meta', full_name='grpc.ModelUpdate.meta', index=6, - number=7, type=9, cpp_type=9, label=1, - has_default_value=False, default_value=b"".decode('utf-8'), - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), - ], - extensions=[ - ], - nested_types=[], - enum_types=[ - ], - serialized_options=None, - is_extendable=False, - syntax='proto3', - extension_ranges=[], - oneofs=[ - ], - serialized_start=533, - serialized_end=708, + name='ModelUpdate', + full_name='grpc.ModelUpdate', + filename=None, + file=DESCRIPTOR, + containing_type=None, + create_key=_descriptor._internal_create_key, + fields=[ + _descriptor.FieldDescriptor( + name='sender', full_name='grpc.ModelUpdate.sender', index=0, + number=1, type=11, cpp_type=10, label=1, + has_default_value=False, default_value=None, + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + _descriptor.FieldDescriptor( + name='receiver', full_name='grpc.ModelUpdate.receiver', index=1, + number=2, type=11, cpp_type=10, label=1, + has_default_value=False, default_value=None, + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + _descriptor.FieldDescriptor( + name='model_id', full_name='grpc.ModelUpdate.model_id', index=2, + number=3, type=9, cpp_type=9, label=1, + has_default_value=False, default_value=b"".decode('utf-8'), + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + _descriptor.FieldDescriptor( + name='model_update_id', full_name='grpc.ModelUpdate.model_update_id', index=3, + number=4, type=9, cpp_type=9, label=1, + has_default_value=False, default_value=b"".decode('utf-8'), + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + _descriptor.FieldDescriptor( + name='correlation_id', full_name='grpc.ModelUpdate.correlation_id', index=4, + number=5, type=9, cpp_type=9, label=1, + has_default_value=False, default_value=b"".decode('utf-8'), + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + _descriptor.FieldDescriptor( + name='timestamp', full_name='grpc.ModelUpdate.timestamp', index=5, + number=6, type=9, cpp_type=9, label=1, + has_default_value=False, default_value=b"".decode('utf-8'), + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + _descriptor.FieldDescriptor( + name='meta', full_name='grpc.ModelUpdate.meta', index=6, + number=7, type=9, cpp_type=9, label=1, + has_default_value=False, default_value=b"".decode('utf-8'), + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + ], + extensions=[ + ], + nested_types=[], + enum_types=[ + ], + serialized_options=None, + is_extendable=False, + syntax='proto3', + extension_ranges=[], + oneofs=[ + ], + serialized_start=533, + serialized_end=708, ) _MODELVALIDATIONREQUEST = _descriptor.Descriptor( - name='ModelValidationRequest', - full_name='grpc.ModelValidationRequest', - filename=None, - file=DESCRIPTOR, - containing_type=None, - create_key=_descriptor._internal_create_key, - fields=[ - _descriptor.FieldDescriptor( - name='sender', full_name='grpc.ModelValidationRequest.sender', index=0, - number=1, type=11, cpp_type=10, label=1, - has_default_value=False, default_value=None, - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), - _descriptor.FieldDescriptor( - name='receiver', full_name='grpc.ModelValidationRequest.receiver', index=1, - number=2, type=11, cpp_type=10, label=1, - has_default_value=False, default_value=None, - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), - _descriptor.FieldDescriptor( - name='model_id', full_name='grpc.ModelValidationRequest.model_id', index=2, - number=3, type=9, cpp_type=9, label=1, - has_default_value=False, default_value=b"".decode('utf-8'), - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), - _descriptor.FieldDescriptor( - name='data', full_name='grpc.ModelValidationRequest.data', index=3, - number=4, type=9, cpp_type=9, label=1, - has_default_value=False, default_value=b"".decode('utf-8'), - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), - _descriptor.FieldDescriptor( - name='correlation_id', full_name='grpc.ModelValidationRequest.correlation_id', index=4, - number=5, type=9, cpp_type=9, label=1, - has_default_value=False, default_value=b"".decode('utf-8'), - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), - _descriptor.FieldDescriptor( - name='timestamp', full_name='grpc.ModelValidationRequest.timestamp', index=5, - number=6, type=9, cpp_type=9, label=1, - has_default_value=False, default_value=b"".decode('utf-8'), - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), - _descriptor.FieldDescriptor( - name='is_inference', full_name='grpc.ModelValidationRequest.is_inference', index=6, - number=7, type=8, cpp_type=7, label=1, - has_default_value=False, default_value=False, - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), - ], - extensions=[ - ], - nested_types=[], - enum_types=[ - ], - serialized_options=None, - is_extendable=False, - syntax='proto3', - extension_ranges=[], - oneofs=[ - ], - serialized_start=711, - serialized_end=894, + name='ModelValidationRequest', + full_name='grpc.ModelValidationRequest', + filename=None, + file=DESCRIPTOR, + containing_type=None, + create_key=_descriptor._internal_create_key, + fields=[ + _descriptor.FieldDescriptor( + name='sender', full_name='grpc.ModelValidationRequest.sender', index=0, + number=1, type=11, cpp_type=10, label=1, + has_default_value=False, default_value=None, + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + _descriptor.FieldDescriptor( + name='receiver', full_name='grpc.ModelValidationRequest.receiver', index=1, + number=2, type=11, cpp_type=10, label=1, + has_default_value=False, default_value=None, + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + _descriptor.FieldDescriptor( + name='model_id', full_name='grpc.ModelValidationRequest.model_id', index=2, + number=3, type=9, cpp_type=9, label=1, + has_default_value=False, default_value=b"".decode('utf-8'), + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + _descriptor.FieldDescriptor( + name='data', full_name='grpc.ModelValidationRequest.data', index=3, + number=4, type=9, cpp_type=9, label=1, + has_default_value=False, default_value=b"".decode('utf-8'), + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + _descriptor.FieldDescriptor( + name='correlation_id', full_name='grpc.ModelValidationRequest.correlation_id', index=4, + number=5, type=9, cpp_type=9, label=1, + has_default_value=False, default_value=b"".decode('utf-8'), + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + _descriptor.FieldDescriptor( + name='timestamp', full_name='grpc.ModelValidationRequest.timestamp', index=5, + number=6, type=9, cpp_type=9, label=1, + has_default_value=False, default_value=b"".decode('utf-8'), + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + _descriptor.FieldDescriptor( + name='is_inference', full_name='grpc.ModelValidationRequest.is_inference', index=6, + number=7, type=8, cpp_type=7, label=1, + has_default_value=False, default_value=False, + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + ], + extensions=[ + ], + nested_types=[], + enum_types=[ + ], + serialized_options=None, + is_extendable=False, + syntax='proto3', + extension_ranges=[], + oneofs=[ + ], + serialized_start=711, + serialized_end=894, ) _MODELVALIDATION = _descriptor.Descriptor( - name='ModelValidation', - full_name='grpc.ModelValidation', - filename=None, - file=DESCRIPTOR, - containing_type=None, - create_key=_descriptor._internal_create_key, - fields=[ - _descriptor.FieldDescriptor( - name='sender', full_name='grpc.ModelValidation.sender', index=0, - number=1, type=11, cpp_type=10, label=1, - has_default_value=False, default_value=None, - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), - _descriptor.FieldDescriptor( - name='receiver', full_name='grpc.ModelValidation.receiver', index=1, - number=2, type=11, cpp_type=10, label=1, - has_default_value=False, default_value=None, - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), - _descriptor.FieldDescriptor( - name='model_id', full_name='grpc.ModelValidation.model_id', index=2, - number=3, type=9, cpp_type=9, label=1, - has_default_value=False, default_value=b"".decode('utf-8'), - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), - _descriptor.FieldDescriptor( - name='data', full_name='grpc.ModelValidation.data', index=3, - number=4, type=9, cpp_type=9, label=1, - has_default_value=False, default_value=b"".decode('utf-8'), - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), - _descriptor.FieldDescriptor( - name='correlation_id', full_name='grpc.ModelValidation.correlation_id', index=4, - number=5, type=9, cpp_type=9, label=1, - has_default_value=False, default_value=b"".decode('utf-8'), - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), - _descriptor.FieldDescriptor( - name='timestamp', full_name='grpc.ModelValidation.timestamp', index=5, - number=6, type=9, cpp_type=9, label=1, - has_default_value=False, default_value=b"".decode('utf-8'), - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), - _descriptor.FieldDescriptor( - name='meta', full_name='grpc.ModelValidation.meta', index=6, - number=7, type=9, cpp_type=9, label=1, - has_default_value=False, default_value=b"".decode('utf-8'), - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), - ], - extensions=[ - ], - nested_types=[], - enum_types=[ - ], - serialized_options=None, - is_extendable=False, - syntax='proto3', - extension_ranges=[], - oneofs=[ - ], - serialized_start=897, - serialized_end=1065, + name='ModelValidation', + full_name='grpc.ModelValidation', + filename=None, + file=DESCRIPTOR, + containing_type=None, + create_key=_descriptor._internal_create_key, + fields=[ + _descriptor.FieldDescriptor( + name='sender', full_name='grpc.ModelValidation.sender', index=0, + number=1, type=11, cpp_type=10, label=1, + has_default_value=False, default_value=None, + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + _descriptor.FieldDescriptor( + name='receiver', full_name='grpc.ModelValidation.receiver', index=1, + number=2, type=11, cpp_type=10, label=1, + has_default_value=False, default_value=None, + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + _descriptor.FieldDescriptor( + name='model_id', full_name='grpc.ModelValidation.model_id', index=2, + number=3, type=9, cpp_type=9, label=1, + has_default_value=False, default_value=b"".decode('utf-8'), + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + _descriptor.FieldDescriptor( + name='data', full_name='grpc.ModelValidation.data', index=3, + number=4, type=9, cpp_type=9, label=1, + has_default_value=False, default_value=b"".decode('utf-8'), + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + _descriptor.FieldDescriptor( + name='correlation_id', full_name='grpc.ModelValidation.correlation_id', index=4, + number=5, type=9, cpp_type=9, label=1, + has_default_value=False, default_value=b"".decode('utf-8'), + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + _descriptor.FieldDescriptor( + name='timestamp', full_name='grpc.ModelValidation.timestamp', index=5, + number=6, type=9, cpp_type=9, label=1, + has_default_value=False, default_value=b"".decode('utf-8'), + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + _descriptor.FieldDescriptor( + name='meta', full_name='grpc.ModelValidation.meta', index=6, + number=7, type=9, cpp_type=9, label=1, + has_default_value=False, default_value=b"".decode('utf-8'), + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + ], + extensions=[ + ], + nested_types=[], + enum_types=[ + ], + serialized_options=None, + is_extendable=False, + syntax='proto3', + extension_ranges=[], + oneofs=[ + ], + serialized_start=897, + serialized_end=1065, ) _MODELREQUEST = _descriptor.Descriptor( - name='ModelRequest', - full_name='grpc.ModelRequest', - filename=None, - file=DESCRIPTOR, - containing_type=None, - create_key=_descriptor._internal_create_key, - fields=[ - _descriptor.FieldDescriptor( - name='sender', full_name='grpc.ModelRequest.sender', index=0, - number=1, type=11, cpp_type=10, label=1, - has_default_value=False, default_value=None, - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), - _descriptor.FieldDescriptor( - name='receiver', full_name='grpc.ModelRequest.receiver', index=1, - number=2, type=11, cpp_type=10, label=1, - has_default_value=False, default_value=None, - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), - _descriptor.FieldDescriptor( - name='data', full_name='grpc.ModelRequest.data', index=2, - number=3, type=12, cpp_type=9, label=1, - has_default_value=False, default_value=b"", - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), - _descriptor.FieldDescriptor( - name='id', full_name='grpc.ModelRequest.id', index=3, - number=4, type=9, cpp_type=9, label=1, - has_default_value=False, default_value=b"".decode('utf-8'), - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), - _descriptor.FieldDescriptor( - name='status', full_name='grpc.ModelRequest.status', index=4, - number=5, type=14, cpp_type=8, label=1, - has_default_value=False, default_value=0, - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), - ], - extensions=[ - ], - nested_types=[], - enum_types=[ - ], - serialized_options=None, - is_extendable=False, - syntax='proto3', - extension_ranges=[], - oneofs=[ - ], - serialized_start=1068, - serialized_end=1205, + name='ModelRequest', + full_name='grpc.ModelRequest', + filename=None, + file=DESCRIPTOR, + containing_type=None, + create_key=_descriptor._internal_create_key, + fields=[ + _descriptor.FieldDescriptor( + name='sender', full_name='grpc.ModelRequest.sender', index=0, + number=1, type=11, cpp_type=10, label=1, + has_default_value=False, default_value=None, + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + _descriptor.FieldDescriptor( + name='receiver', full_name='grpc.ModelRequest.receiver', index=1, + number=2, type=11, cpp_type=10, label=1, + has_default_value=False, default_value=None, + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + _descriptor.FieldDescriptor( + name='data', full_name='grpc.ModelRequest.data', index=2, + number=3, type=12, cpp_type=9, label=1, + has_default_value=False, default_value=b"", + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + _descriptor.FieldDescriptor( + name='id', full_name='grpc.ModelRequest.id', index=3, + number=4, type=9, cpp_type=9, label=1, + has_default_value=False, default_value=b"".decode('utf-8'), + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + _descriptor.FieldDescriptor( + name='status', full_name='grpc.ModelRequest.status', index=4, + number=5, type=14, cpp_type=8, label=1, + has_default_value=False, default_value=0, + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + ], + extensions=[ + ], + nested_types=[], + enum_types=[ + ], + serialized_options=None, + is_extendable=False, + syntax='proto3', + extension_ranges=[], + oneofs=[ + ], + serialized_start=1068, + serialized_end=1205, ) _MODELRESPONSE = _descriptor.Descriptor( - name='ModelResponse', - full_name='grpc.ModelResponse', - filename=None, - file=DESCRIPTOR, - containing_type=None, - create_key=_descriptor._internal_create_key, - fields=[ - _descriptor.FieldDescriptor( - name='data', full_name='grpc.ModelResponse.data', index=0, - number=1, type=12, cpp_type=9, label=1, - has_default_value=False, default_value=b"", - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), - _descriptor.FieldDescriptor( - name='id', full_name='grpc.ModelResponse.id', index=1, - number=2, type=9, cpp_type=9, label=1, - has_default_value=False, default_value=b"".decode('utf-8'), - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), - _descriptor.FieldDescriptor( - name='status', full_name='grpc.ModelResponse.status', index=2, - number=3, type=14, cpp_type=8, label=1, - has_default_value=False, default_value=0, - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), - _descriptor.FieldDescriptor( - name='message', full_name='grpc.ModelResponse.message', index=3, - number=4, type=9, cpp_type=9, label=1, - has_default_value=False, default_value=b"".decode('utf-8'), - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), - ], - extensions=[ - ], - nested_types=[], - enum_types=[ - ], - serialized_options=None, - is_extendable=False, - syntax='proto3', - extension_ranges=[], - oneofs=[ - ], - serialized_start=1207, - serialized_end=1300, + name='ModelResponse', + full_name='grpc.ModelResponse', + filename=None, + file=DESCRIPTOR, + containing_type=None, + create_key=_descriptor._internal_create_key, + fields=[ + _descriptor.FieldDescriptor( + name='data', full_name='grpc.ModelResponse.data', index=0, + number=1, type=12, cpp_type=9, label=1, + has_default_value=False, default_value=b"", + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + _descriptor.FieldDescriptor( + name='id', full_name='grpc.ModelResponse.id', index=1, + number=2, type=9, cpp_type=9, label=1, + has_default_value=False, default_value=b"".decode('utf-8'), + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + _descriptor.FieldDescriptor( + name='status', full_name='grpc.ModelResponse.status', index=2, + number=3, type=14, cpp_type=8, label=1, + has_default_value=False, default_value=0, + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + _descriptor.FieldDescriptor( + name='message', full_name='grpc.ModelResponse.message', index=3, + number=4, type=9, cpp_type=9, label=1, + has_default_value=False, default_value=b"".decode('utf-8'), + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + ], + extensions=[ + ], + nested_types=[], + enum_types=[ + ], + serialized_options=None, + is_extendable=False, + syntax='proto3', + extension_ranges=[], + oneofs=[ + ], + serialized_start=1207, + serialized_end=1300, ) _GETGLOBALMODELREQUEST = _descriptor.Descriptor( - name='GetGlobalModelRequest', - full_name='grpc.GetGlobalModelRequest', - filename=None, - file=DESCRIPTOR, - containing_type=None, - create_key=_descriptor._internal_create_key, - fields=[ - _descriptor.FieldDescriptor( - name='sender', full_name='grpc.GetGlobalModelRequest.sender', index=0, - number=1, type=11, cpp_type=10, label=1, - has_default_value=False, default_value=None, - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), - _descriptor.FieldDescriptor( - name='receiver', full_name='grpc.GetGlobalModelRequest.receiver', index=1, - number=2, type=11, cpp_type=10, label=1, - has_default_value=False, default_value=None, - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), - ], - extensions=[ - ], - nested_types=[], - enum_types=[ - ], - serialized_options=None, - is_extendable=False, - syntax='proto3', - extension_ranges=[], - oneofs=[ - ], - serialized_start=1302, - serialized_end=1387, + name='GetGlobalModelRequest', + full_name='grpc.GetGlobalModelRequest', + filename=None, + file=DESCRIPTOR, + containing_type=None, + create_key=_descriptor._internal_create_key, + fields=[ + _descriptor.FieldDescriptor( + name='sender', full_name='grpc.GetGlobalModelRequest.sender', index=0, + number=1, type=11, cpp_type=10, label=1, + has_default_value=False, default_value=None, + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + _descriptor.FieldDescriptor( + name='receiver', full_name='grpc.GetGlobalModelRequest.receiver', index=1, + number=2, type=11, cpp_type=10, label=1, + has_default_value=False, default_value=None, + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + ], + extensions=[ + ], + nested_types=[], + enum_types=[ + ], + serialized_options=None, + is_extendable=False, + syntax='proto3', + extension_ranges=[], + oneofs=[ + ], + serialized_start=1302, + serialized_end=1387, ) _GETGLOBALMODELRESPONSE = _descriptor.Descriptor( - name='GetGlobalModelResponse', - full_name='grpc.GetGlobalModelResponse', - filename=None, - file=DESCRIPTOR, - containing_type=None, - create_key=_descriptor._internal_create_key, - fields=[ - _descriptor.FieldDescriptor( - name='sender', full_name='grpc.GetGlobalModelResponse.sender', index=0, - number=1, type=11, cpp_type=10, label=1, - has_default_value=False, default_value=None, - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), - _descriptor.FieldDescriptor( - name='receiver', full_name='grpc.GetGlobalModelResponse.receiver', index=1, - number=2, type=11, cpp_type=10, label=1, - has_default_value=False, default_value=None, - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), - _descriptor.FieldDescriptor( - name='model_id', full_name='grpc.GetGlobalModelResponse.model_id', index=2, - number=3, type=9, cpp_type=9, label=1, - has_default_value=False, default_value=b"".decode('utf-8'), - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), - ], - extensions=[ - ], - nested_types=[], - enum_types=[ - ], - serialized_options=None, - is_extendable=False, - syntax='proto3', - extension_ranges=[], - oneofs=[ - ], - serialized_start=1389, - serialized_end=1493, + name='GetGlobalModelResponse', + full_name='grpc.GetGlobalModelResponse', + filename=None, + file=DESCRIPTOR, + containing_type=None, + create_key=_descriptor._internal_create_key, + fields=[ + _descriptor.FieldDescriptor( + name='sender', full_name='grpc.GetGlobalModelResponse.sender', index=0, + number=1, type=11, cpp_type=10, label=1, + has_default_value=False, default_value=None, + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + _descriptor.FieldDescriptor( + name='receiver', full_name='grpc.GetGlobalModelResponse.receiver', index=1, + number=2, type=11, cpp_type=10, label=1, + has_default_value=False, default_value=None, + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + _descriptor.FieldDescriptor( + name='model_id', full_name='grpc.GetGlobalModelResponse.model_id', index=2, + number=3, type=9, cpp_type=9, label=1, + has_default_value=False, default_value=b"".decode('utf-8'), + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + ], + extensions=[ + ], + nested_types=[], + enum_types=[ + ], + serialized_options=None, + is_extendable=False, + syntax='proto3', + extension_ranges=[], + oneofs=[ + ], + serialized_start=1389, + serialized_end=1493, ) _HEARTBEAT = _descriptor.Descriptor( - name='Heartbeat', - full_name='grpc.Heartbeat', - filename=None, - file=DESCRIPTOR, - containing_type=None, - create_key=_descriptor._internal_create_key, - fields=[ - _descriptor.FieldDescriptor( - name='sender', full_name='grpc.Heartbeat.sender', index=0, - number=1, type=11, cpp_type=10, label=1, - has_default_value=False, default_value=None, - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), - ], - extensions=[ - ], - nested_types=[], - enum_types=[ - ], - serialized_options=None, - is_extendable=False, - syntax='proto3', - extension_ranges=[], - oneofs=[ - ], - serialized_start=1495, - serialized_end=1536, + name='Heartbeat', + full_name='grpc.Heartbeat', + filename=None, + file=DESCRIPTOR, + containing_type=None, + create_key=_descriptor._internal_create_key, + fields=[ + _descriptor.FieldDescriptor( + name='sender', full_name='grpc.Heartbeat.sender', index=0, + number=1, type=11, cpp_type=10, label=1, + has_default_value=False, default_value=None, + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + ], + extensions=[ + ], + nested_types=[], + enum_types=[ + ], + serialized_options=None, + is_extendable=False, + syntax='proto3', + extension_ranges=[], + oneofs=[ + ], + serialized_start=1495, + serialized_end=1536, ) _CLIENTAVAILABLEMESSAGE = _descriptor.Descriptor( - name='ClientAvailableMessage', - full_name='grpc.ClientAvailableMessage', - filename=None, - file=DESCRIPTOR, - containing_type=None, - create_key=_descriptor._internal_create_key, - fields=[ - _descriptor.FieldDescriptor( - name='sender', full_name='grpc.ClientAvailableMessage.sender', index=0, - number=1, type=11, cpp_type=10, label=1, - has_default_value=False, default_value=None, - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), - _descriptor.FieldDescriptor( - name='data', full_name='grpc.ClientAvailableMessage.data', index=1, - number=2, type=9, cpp_type=9, label=1, - has_default_value=False, default_value=b"".decode('utf-8'), - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), - _descriptor.FieldDescriptor( - name='timestamp', full_name='grpc.ClientAvailableMessage.timestamp', index=2, - number=3, type=9, cpp_type=9, label=1, - has_default_value=False, default_value=b"".decode('utf-8'), - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), - ], - extensions=[ - ], - nested_types=[], - enum_types=[ - ], - serialized_options=None, - is_extendable=False, - syntax='proto3', - extension_ranges=[], - oneofs=[ - ], - serialized_start=1538, - serialized_end=1625, + name='ClientAvailableMessage', + full_name='grpc.ClientAvailableMessage', + filename=None, + file=DESCRIPTOR, + containing_type=None, + create_key=_descriptor._internal_create_key, + fields=[ + _descriptor.FieldDescriptor( + name='sender', full_name='grpc.ClientAvailableMessage.sender', index=0, + number=1, type=11, cpp_type=10, label=1, + has_default_value=False, default_value=None, + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + _descriptor.FieldDescriptor( + name='data', full_name='grpc.ClientAvailableMessage.data', index=1, + number=2, type=9, cpp_type=9, label=1, + has_default_value=False, default_value=b"".decode('utf-8'), + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + _descriptor.FieldDescriptor( + name='timestamp', full_name='grpc.ClientAvailableMessage.timestamp', index=2, + number=3, type=9, cpp_type=9, label=1, + has_default_value=False, default_value=b"".decode('utf-8'), + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + ], + extensions=[ + ], + nested_types=[], + enum_types=[ + ], + serialized_options=None, + is_extendable=False, + syntax='proto3', + extension_ranges=[], + oneofs=[ + ], + serialized_start=1538, + serialized_end=1625, ) _LISTCLIENTSREQUEST = _descriptor.Descriptor( - name='ListClientsRequest', - full_name='grpc.ListClientsRequest', - filename=None, - file=DESCRIPTOR, - containing_type=None, - create_key=_descriptor._internal_create_key, - fields=[ - _descriptor.FieldDescriptor( - name='sender', full_name='grpc.ListClientsRequest.sender', index=0, - number=1, type=11, cpp_type=10, label=1, - has_default_value=False, default_value=None, - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), - _descriptor.FieldDescriptor( - name='channel', full_name='grpc.ListClientsRequest.channel', index=1, - number=2, type=14, cpp_type=8, label=1, - has_default_value=False, default_value=0, - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), - ], - extensions=[ - ], - nested_types=[], - enum_types=[ - ], - serialized_options=None, - is_extendable=False, - syntax='proto3', - extension_ranges=[], - oneofs=[ - ], - serialized_start=1627, - serialized_end=1709, + name='ListClientsRequest', + full_name='grpc.ListClientsRequest', + filename=None, + file=DESCRIPTOR, + containing_type=None, + create_key=_descriptor._internal_create_key, + fields=[ + _descriptor.FieldDescriptor( + name='sender', full_name='grpc.ListClientsRequest.sender', index=0, + number=1, type=11, cpp_type=10, label=1, + has_default_value=False, default_value=None, + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + _descriptor.FieldDescriptor( + name='channel', full_name='grpc.ListClientsRequest.channel', index=1, + number=2, type=14, cpp_type=8, label=1, + has_default_value=False, default_value=0, + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + ], + extensions=[ + ], + nested_types=[], + enum_types=[ + ], + serialized_options=None, + is_extendable=False, + syntax='proto3', + extension_ranges=[], + oneofs=[ + ], + serialized_start=1627, + serialized_end=1709, ) _CLIENTLIST = _descriptor.Descriptor( - name='ClientList', - full_name='grpc.ClientList', - filename=None, - file=DESCRIPTOR, - containing_type=None, - create_key=_descriptor._internal_create_key, - fields=[ - _descriptor.FieldDescriptor( - name='client', full_name='grpc.ClientList.client', index=0, - number=1, type=11, cpp_type=10, label=3, - has_default_value=False, default_value=[], - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), - ], - extensions=[ - ], - nested_types=[], - enum_types=[ - ], - serialized_options=None, - is_extendable=False, - syntax='proto3', - extension_ranges=[], - oneofs=[ - ], - serialized_start=1711, - serialized_end=1753, + name='ClientList', + full_name='grpc.ClientList', + filename=None, + file=DESCRIPTOR, + containing_type=None, + create_key=_descriptor._internal_create_key, + fields=[ + _descriptor.FieldDescriptor( + name='client', full_name='grpc.ClientList.client', index=0, + number=1, type=11, cpp_type=10, label=3, + has_default_value=False, default_value=[], + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + ], + extensions=[ + ], + nested_types=[], + enum_types=[ + ], + serialized_options=None, + is_extendable=False, + syntax='proto3', + extension_ranges=[], + oneofs=[ + ], + serialized_start=1711, + serialized_end=1753, ) _CLIENT = _descriptor.Descriptor( - name='Client', - full_name='grpc.Client', - filename=None, - file=DESCRIPTOR, - containing_type=None, - create_key=_descriptor._internal_create_key, - fields=[ - _descriptor.FieldDescriptor( - name='role', full_name='grpc.Client.role', index=0, - number=1, type=14, cpp_type=8, label=1, - has_default_value=False, default_value=0, - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), - _descriptor.FieldDescriptor( - name='name', full_name='grpc.Client.name', index=1, - number=2, type=9, cpp_type=9, label=1, - has_default_value=False, default_value=b"".decode('utf-8'), - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), - ], - extensions=[ - ], - nested_types=[], - enum_types=[ - ], - serialized_options=None, - is_extendable=False, - syntax='proto3', - extension_ranges=[], - oneofs=[ - ], - serialized_start=1755, - serialized_end=1803, + name='Client', + full_name='grpc.Client', + filename=None, + file=DESCRIPTOR, + containing_type=None, + create_key=_descriptor._internal_create_key, + fields=[ + _descriptor.FieldDescriptor( + name='role', full_name='grpc.Client.role', index=0, + number=1, type=14, cpp_type=8, label=1, + has_default_value=False, default_value=0, + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + _descriptor.FieldDescriptor( + name='name', full_name='grpc.Client.name', index=1, + number=2, type=9, cpp_type=9, label=1, + has_default_value=False, default_value=b"".decode('utf-8'), + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + ], + extensions=[ + ], + nested_types=[], + enum_types=[ + ], + serialized_options=None, + is_extendable=False, + syntax='proto3', + extension_ranges=[], + oneofs=[ + ], + serialized_start=1755, + serialized_end=1803, ) _REASSIGNREQUEST = _descriptor.Descriptor( - name='ReassignRequest', - full_name='grpc.ReassignRequest', - filename=None, - file=DESCRIPTOR, - containing_type=None, - create_key=_descriptor._internal_create_key, - fields=[ - _descriptor.FieldDescriptor( - name='sender', full_name='grpc.ReassignRequest.sender', index=0, - number=1, type=11, cpp_type=10, label=1, - has_default_value=False, default_value=None, - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), - _descriptor.FieldDescriptor( - name='receiver', full_name='grpc.ReassignRequest.receiver', index=1, - number=2, type=11, cpp_type=10, label=1, - has_default_value=False, default_value=None, - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), - _descriptor.FieldDescriptor( - name='server', full_name='grpc.ReassignRequest.server', index=2, - number=3, type=9, cpp_type=9, label=1, - has_default_value=False, default_value=b"".decode('utf-8'), - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), - _descriptor.FieldDescriptor( - name='port', full_name='grpc.ReassignRequest.port', index=3, - number=4, type=13, cpp_type=3, label=1, - has_default_value=False, default_value=0, - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), - ], - extensions=[ - ], - nested_types=[], - enum_types=[ - ], - serialized_options=None, - is_extendable=False, - syntax='proto3', - extension_ranges=[], - oneofs=[ - ], - serialized_start=1805, - serialized_end=1914, + name='ReassignRequest', + full_name='grpc.ReassignRequest', + filename=None, + file=DESCRIPTOR, + containing_type=None, + create_key=_descriptor._internal_create_key, + fields=[ + _descriptor.FieldDescriptor( + name='sender', full_name='grpc.ReassignRequest.sender', index=0, + number=1, type=11, cpp_type=10, label=1, + has_default_value=False, default_value=None, + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + _descriptor.FieldDescriptor( + name='receiver', full_name='grpc.ReassignRequest.receiver', index=1, + number=2, type=11, cpp_type=10, label=1, + has_default_value=False, default_value=None, + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + _descriptor.FieldDescriptor( + name='server', full_name='grpc.ReassignRequest.server', index=2, + number=3, type=9, cpp_type=9, label=1, + has_default_value=False, default_value=b"".decode('utf-8'), + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + _descriptor.FieldDescriptor( + name='port', full_name='grpc.ReassignRequest.port', index=3, + number=4, type=13, cpp_type=3, label=1, + has_default_value=False, default_value=0, + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + ], + extensions=[ + ], + nested_types=[], + enum_types=[ + ], + serialized_options=None, + is_extendable=False, + syntax='proto3', + extension_ranges=[], + oneofs=[ + ], + serialized_start=1805, + serialized_end=1914, ) _RECONNECTREQUEST = _descriptor.Descriptor( - name='ReconnectRequest', - full_name='grpc.ReconnectRequest', - filename=None, - file=DESCRIPTOR, - containing_type=None, - create_key=_descriptor._internal_create_key, - fields=[ - _descriptor.FieldDescriptor( - name='sender', full_name='grpc.ReconnectRequest.sender', index=0, - number=1, type=11, cpp_type=10, label=1, - has_default_value=False, default_value=None, - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), - _descriptor.FieldDescriptor( - name='receiver', full_name='grpc.ReconnectRequest.receiver', index=1, - number=2, type=11, cpp_type=10, label=1, - has_default_value=False, default_value=None, - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), - _descriptor.FieldDescriptor( - name='reconnect', full_name='grpc.ReconnectRequest.reconnect', index=2, - number=3, type=13, cpp_type=3, label=1, - has_default_value=False, default_value=0, - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), - ], - extensions=[ - ], - nested_types=[], - enum_types=[ - ], - serialized_options=None, - is_extendable=False, - syntax='proto3', - extension_ranges=[], - oneofs=[ - ], - serialized_start=1916, - serialized_end=2015, + name='ReconnectRequest', + full_name='grpc.ReconnectRequest', + filename=None, + file=DESCRIPTOR, + containing_type=None, + create_key=_descriptor._internal_create_key, + fields=[ + _descriptor.FieldDescriptor( + name='sender', full_name='grpc.ReconnectRequest.sender', index=0, + number=1, type=11, cpp_type=10, label=1, + has_default_value=False, default_value=None, + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + _descriptor.FieldDescriptor( + name='receiver', full_name='grpc.ReconnectRequest.receiver', index=1, + number=2, type=11, cpp_type=10, label=1, + has_default_value=False, default_value=None, + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + _descriptor.FieldDescriptor( + name='reconnect', full_name='grpc.ReconnectRequest.reconnect', index=2, + number=3, type=13, cpp_type=3, label=1, + has_default_value=False, default_value=0, + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + ], + extensions=[ + ], + nested_types=[], + enum_types=[ + ], + serialized_options=None, + is_extendable=False, + syntax='proto3', + extension_ranges=[], + oneofs=[ + ], + serialized_start=1916, + serialized_end=2015, ) _PARAMETER = _descriptor.Descriptor( - name='Parameter', - full_name='grpc.Parameter', - filename=None, - file=DESCRIPTOR, - containing_type=None, - create_key=_descriptor._internal_create_key, - fields=[ - _descriptor.FieldDescriptor( - name='key', full_name='grpc.Parameter.key', index=0, - number=1, type=9, cpp_type=9, label=1, - has_default_value=False, default_value=b"".decode('utf-8'), - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), - _descriptor.FieldDescriptor( - name='value', full_name='grpc.Parameter.value', index=1, - number=2, type=9, cpp_type=9, label=1, - has_default_value=False, default_value=b"".decode('utf-8'), - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), - ], - extensions=[ - ], - nested_types=[], - enum_types=[ - ], - serialized_options=None, - is_extendable=False, - syntax='proto3', - extension_ranges=[], - oneofs=[ - ], - serialized_start=2017, - serialized_end=2056, + name='Parameter', + full_name='grpc.Parameter', + filename=None, + file=DESCRIPTOR, + containing_type=None, + create_key=_descriptor._internal_create_key, + fields=[ + _descriptor.FieldDescriptor( + name='key', full_name='grpc.Parameter.key', index=0, + number=1, type=9, cpp_type=9, label=1, + has_default_value=False, default_value=b"".decode('utf-8'), + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + _descriptor.FieldDescriptor( + name='value', full_name='grpc.Parameter.value', index=1, + number=2, type=9, cpp_type=9, label=1, + has_default_value=False, default_value=b"".decode('utf-8'), + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + ], + extensions=[ + ], + nested_types=[], + enum_types=[ + ], + serialized_options=None, + is_extendable=False, + syntax='proto3', + extension_ranges=[], + oneofs=[ + ], + serialized_start=2017, + serialized_end=2056, ) _CONTROLREQUEST = _descriptor.Descriptor( - name='ControlRequest', - full_name='grpc.ControlRequest', - filename=None, - file=DESCRIPTOR, - containing_type=None, - create_key=_descriptor._internal_create_key, - fields=[ - _descriptor.FieldDescriptor( - name='command', full_name='grpc.ControlRequest.command', index=0, - number=1, type=14, cpp_type=8, label=1, - has_default_value=False, default_value=0, - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), - _descriptor.FieldDescriptor( - name='parameter', full_name='grpc.ControlRequest.parameter', index=1, - number=2, type=11, cpp_type=10, label=3, - has_default_value=False, default_value=[], - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), - ], - extensions=[ - ], - nested_types=[], - enum_types=[ - ], - serialized_options=None, - is_extendable=False, - syntax='proto3', - extension_ranges=[], - oneofs=[ - ], - serialized_start=2058, - serialized_end=2142, + name='ControlRequest', + full_name='grpc.ControlRequest', + filename=None, + file=DESCRIPTOR, + containing_type=None, + create_key=_descriptor._internal_create_key, + fields=[ + _descriptor.FieldDescriptor( + name='command', full_name='grpc.ControlRequest.command', index=0, + number=1, type=14, cpp_type=8, label=1, + has_default_value=False, default_value=0, + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + _descriptor.FieldDescriptor( + name='parameter', full_name='grpc.ControlRequest.parameter', index=1, + number=2, type=11, cpp_type=10, label=3, + has_default_value=False, default_value=[], + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + ], + extensions=[ + ], + nested_types=[], + enum_types=[ + ], + serialized_options=None, + is_extendable=False, + syntax='proto3', + extension_ranges=[], + oneofs=[ + ], + serialized_start=2058, + serialized_end=2142, ) _CONTROLRESPONSE = _descriptor.Descriptor( - name='ControlResponse', - full_name='grpc.ControlResponse', - filename=None, - file=DESCRIPTOR, - containing_type=None, - create_key=_descriptor._internal_create_key, - fields=[ - _descriptor.FieldDescriptor( - name='message', full_name='grpc.ControlResponse.message', index=0, - number=1, type=9, cpp_type=9, label=1, - has_default_value=False, default_value=b"".decode('utf-8'), - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), - _descriptor.FieldDescriptor( - name='parameter', full_name='grpc.ControlResponse.parameter', index=1, - number=2, type=11, cpp_type=10, label=3, - has_default_value=False, default_value=[], - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), - ], - extensions=[ - ], - nested_types=[], - enum_types=[ - ], - serialized_options=None, - is_extendable=False, - syntax='proto3', - extension_ranges=[], - oneofs=[ - ], - serialized_start=2144, - serialized_end=2214, + name='ControlResponse', + full_name='grpc.ControlResponse', + filename=None, + file=DESCRIPTOR, + containing_type=None, + create_key=_descriptor._internal_create_key, + fields=[ + _descriptor.FieldDescriptor( + name='message', full_name='grpc.ControlResponse.message', index=0, + number=1, type=9, cpp_type=9, label=1, + has_default_value=False, default_value=b"".decode('utf-8'), + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + _descriptor.FieldDescriptor( + name='parameter', full_name='grpc.ControlResponse.parameter', index=1, + number=2, type=11, cpp_type=10, label=3, + has_default_value=False, default_value=[], + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + ], + extensions=[ + ], + nested_types=[], + enum_types=[ + ], + serialized_options=None, + is_extendable=False, + syntax='proto3', + extension_ranges=[], + oneofs=[ + ], + serialized_start=2144, + serialized_end=2214, ) _REPORTRESPONSE = _descriptor.Descriptor( - name='ReportResponse', - full_name='grpc.ReportResponse', - filename=None, - file=DESCRIPTOR, - containing_type=None, - create_key=_descriptor._internal_create_key, - fields=[ - _descriptor.FieldDescriptor( - name='sender', full_name='grpc.ReportResponse.sender', index=0, - number=1, type=11, cpp_type=10, label=1, - has_default_value=False, default_value=None, - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), - _descriptor.FieldDescriptor( - name='parameter', full_name='grpc.ReportResponse.parameter', index=1, - number=2, type=11, cpp_type=10, label=3, - has_default_value=False, default_value=[], - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), - ], - extensions=[ - ], - nested_types=[], - enum_types=[ - ], - serialized_options=None, - is_extendable=False, - syntax='proto3', - extension_ranges=[], - oneofs=[ - ], - serialized_start=2216, - serialized_end=2298, + name='ReportResponse', + full_name='grpc.ReportResponse', + filename=None, + file=DESCRIPTOR, + containing_type=None, + create_key=_descriptor._internal_create_key, + fields=[ + _descriptor.FieldDescriptor( + name='sender', full_name='grpc.ReportResponse.sender', index=0, + number=1, type=11, cpp_type=10, label=1, + has_default_value=False, default_value=None, + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + _descriptor.FieldDescriptor( + name='parameter', full_name='grpc.ReportResponse.parameter', index=1, + number=2, type=11, cpp_type=10, label=3, + has_default_value=False, default_value=[], + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + ], + extensions=[ + ], + nested_types=[], + enum_types=[ + ], + serialized_options=None, + is_extendable=False, + syntax='proto3', + extension_ranges=[], + oneofs=[ + ], + serialized_start=2216, + serialized_end=2298, ) _CONNECTIONREQUEST = _descriptor.Descriptor( - name='ConnectionRequest', - full_name='grpc.ConnectionRequest', - filename=None, - file=DESCRIPTOR, - containing_type=None, - create_key=_descriptor._internal_create_key, - fields=[ - ], - extensions=[ - ], - nested_types=[], - enum_types=[ - ], - serialized_options=None, - is_extendable=False, - syntax='proto3', - extension_ranges=[], - oneofs=[ - ], - serialized_start=2300, - serialized_end=2319, + name='ConnectionRequest', + full_name='grpc.ConnectionRequest', + filename=None, + file=DESCRIPTOR, + containing_type=None, + create_key=_descriptor._internal_create_key, + fields=[ + ], + extensions=[ + ], + nested_types=[], + enum_types=[ + ], + serialized_options=None, + is_extendable=False, + syntax='proto3', + extension_ranges=[], + oneofs=[ + ], + serialized_start=2300, + serialized_end=2319, ) _CONNECTIONRESPONSE = _descriptor.Descriptor( - name='ConnectionResponse', - full_name='grpc.ConnectionResponse', - filename=None, - file=DESCRIPTOR, - containing_type=None, - create_key=_descriptor._internal_create_key, - fields=[ - _descriptor.FieldDescriptor( - name='status', full_name='grpc.ConnectionResponse.status', index=0, - number=1, type=14, cpp_type=8, label=1, - has_default_value=False, default_value=0, - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), - ], - extensions=[ - ], - nested_types=[], - enum_types=[ - ], - serialized_options=None, - is_extendable=False, - syntax='proto3', - extension_ranges=[], - oneofs=[ - ], - serialized_start=2321, - serialized_end=2381, + name='ConnectionResponse', + full_name='grpc.ConnectionResponse', + filename=None, + file=DESCRIPTOR, + containing_type=None, + create_key=_descriptor._internal_create_key, + fields=[ + _descriptor.FieldDescriptor( + name='status', full_name='grpc.ConnectionResponse.status', index=0, + number=1, type=14, cpp_type=8, label=1, + has_default_value=False, default_value=0, + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + ], + extensions=[ + ], + nested_types=[], + enum_types=[ + ], + serialized_options=None, + is_extendable=False, + syntax='proto3', + extension_ranges=[], + oneofs=[ + ], + serialized_start=2321, + serialized_end=2381, ) _RESPONSE.fields_by_name['sender'].message_type = _CLIENT @@ -1505,462 +1512,463 @@ _sym_db.RegisterFileDescriptor(DESCRIPTOR) Response = _reflection.GeneratedProtocolMessageType('Response', (_message.Message,), { - 'DESCRIPTOR': _RESPONSE, - '__module__': 'fedn.common.net.grpc.fedn_pb2' - # @@protoc_insertion_point(class_scope:grpc.Response) -}) + 'DESCRIPTOR' : _RESPONSE, + '__module__' : 'fedn.common.net.grpc.fedn_pb2' + # @@protoc_insertion_point(class_scope:grpc.Response) + }) _sym_db.RegisterMessage(Response) Status = _reflection.GeneratedProtocolMessageType('Status', (_message.Message,), { - 'DESCRIPTOR': _STATUS, - '__module__': 'fedn.common.net.grpc.fedn_pb2' - # @@protoc_insertion_point(class_scope:grpc.Status) -}) + 'DESCRIPTOR' : _STATUS, + '__module__' : 'fedn.common.net.grpc.fedn_pb2' + # @@protoc_insertion_point(class_scope:grpc.Status) + }) _sym_db.RegisterMessage(Status) ModelUpdateRequest = _reflection.GeneratedProtocolMessageType('ModelUpdateRequest', (_message.Message,), { - 'DESCRIPTOR': _MODELUPDATEREQUEST, - '__module__': 'fedn.common.net.grpc.fedn_pb2' - # @@protoc_insertion_point(class_scope:grpc.ModelUpdateRequest) -}) + 'DESCRIPTOR' : _MODELUPDATEREQUEST, + '__module__' : 'fedn.common.net.grpc.fedn_pb2' + # @@protoc_insertion_point(class_scope:grpc.ModelUpdateRequest) + }) _sym_db.RegisterMessage(ModelUpdateRequest) ModelUpdate = _reflection.GeneratedProtocolMessageType('ModelUpdate', (_message.Message,), { - 'DESCRIPTOR': _MODELUPDATE, - '__module__': 'fedn.common.net.grpc.fedn_pb2' - # @@protoc_insertion_point(class_scope:grpc.ModelUpdate) -}) + 'DESCRIPTOR' : _MODELUPDATE, + '__module__' : 'fedn.common.net.grpc.fedn_pb2' + # @@protoc_insertion_point(class_scope:grpc.ModelUpdate) + }) _sym_db.RegisterMessage(ModelUpdate) ModelValidationRequest = _reflection.GeneratedProtocolMessageType('ModelValidationRequest', (_message.Message,), { - 'DESCRIPTOR': _MODELVALIDATIONREQUEST, - '__module__': 'fedn.common.net.grpc.fedn_pb2' - # @@protoc_insertion_point(class_scope:grpc.ModelValidationRequest) -}) + 'DESCRIPTOR' : _MODELVALIDATIONREQUEST, + '__module__' : 'fedn.common.net.grpc.fedn_pb2' + # @@protoc_insertion_point(class_scope:grpc.ModelValidationRequest) + }) _sym_db.RegisterMessage(ModelValidationRequest) ModelValidation = _reflection.GeneratedProtocolMessageType('ModelValidation', (_message.Message,), { - 'DESCRIPTOR': _MODELVALIDATION, - '__module__': 'fedn.common.net.grpc.fedn_pb2' - # @@protoc_insertion_point(class_scope:grpc.ModelValidation) -}) + 'DESCRIPTOR' : _MODELVALIDATION, + '__module__' : 'fedn.common.net.grpc.fedn_pb2' + # @@protoc_insertion_point(class_scope:grpc.ModelValidation) + }) _sym_db.RegisterMessage(ModelValidation) ModelRequest = _reflection.GeneratedProtocolMessageType('ModelRequest', (_message.Message,), { - 'DESCRIPTOR': _MODELREQUEST, - '__module__': 'fedn.common.net.grpc.fedn_pb2' - # @@protoc_insertion_point(class_scope:grpc.ModelRequest) -}) + 'DESCRIPTOR' : _MODELREQUEST, + '__module__' : 'fedn.common.net.grpc.fedn_pb2' + # @@protoc_insertion_point(class_scope:grpc.ModelRequest) + }) _sym_db.RegisterMessage(ModelRequest) ModelResponse = _reflection.GeneratedProtocolMessageType('ModelResponse', (_message.Message,), { - 'DESCRIPTOR': _MODELRESPONSE, - '__module__': 'fedn.common.net.grpc.fedn_pb2' - # @@protoc_insertion_point(class_scope:grpc.ModelResponse) -}) + 'DESCRIPTOR' : _MODELRESPONSE, + '__module__' : 'fedn.common.net.grpc.fedn_pb2' + # @@protoc_insertion_point(class_scope:grpc.ModelResponse) + }) _sym_db.RegisterMessage(ModelResponse) GetGlobalModelRequest = _reflection.GeneratedProtocolMessageType('GetGlobalModelRequest', (_message.Message,), { - 'DESCRIPTOR': _GETGLOBALMODELREQUEST, - '__module__': 'fedn.common.net.grpc.fedn_pb2' - # @@protoc_insertion_point(class_scope:grpc.GetGlobalModelRequest) -}) + 'DESCRIPTOR' : _GETGLOBALMODELREQUEST, + '__module__' : 'fedn.common.net.grpc.fedn_pb2' + # @@protoc_insertion_point(class_scope:grpc.GetGlobalModelRequest) + }) _sym_db.RegisterMessage(GetGlobalModelRequest) GetGlobalModelResponse = _reflection.GeneratedProtocolMessageType('GetGlobalModelResponse', (_message.Message,), { - 'DESCRIPTOR': _GETGLOBALMODELRESPONSE, - '__module__': 'fedn.common.net.grpc.fedn_pb2' - # @@protoc_insertion_point(class_scope:grpc.GetGlobalModelResponse) -}) + 'DESCRIPTOR' : _GETGLOBALMODELRESPONSE, + '__module__' : 'fedn.common.net.grpc.fedn_pb2' + # @@protoc_insertion_point(class_scope:grpc.GetGlobalModelResponse) + }) _sym_db.RegisterMessage(GetGlobalModelResponse) Heartbeat = _reflection.GeneratedProtocolMessageType('Heartbeat', (_message.Message,), { - 'DESCRIPTOR': _HEARTBEAT, - '__module__': 'fedn.common.net.grpc.fedn_pb2' - # @@protoc_insertion_point(class_scope:grpc.Heartbeat) -}) + 'DESCRIPTOR' : _HEARTBEAT, + '__module__' : 'fedn.common.net.grpc.fedn_pb2' + # @@protoc_insertion_point(class_scope:grpc.Heartbeat) + }) _sym_db.RegisterMessage(Heartbeat) ClientAvailableMessage = _reflection.GeneratedProtocolMessageType('ClientAvailableMessage', (_message.Message,), { - 'DESCRIPTOR': _CLIENTAVAILABLEMESSAGE, - '__module__': 'fedn.common.net.grpc.fedn_pb2' - # @@protoc_insertion_point(class_scope:grpc.ClientAvailableMessage) -}) + 'DESCRIPTOR' : _CLIENTAVAILABLEMESSAGE, + '__module__' : 'fedn.common.net.grpc.fedn_pb2' + # @@protoc_insertion_point(class_scope:grpc.ClientAvailableMessage) + }) _sym_db.RegisterMessage(ClientAvailableMessage) ListClientsRequest = _reflection.GeneratedProtocolMessageType('ListClientsRequest', (_message.Message,), { - 'DESCRIPTOR': _LISTCLIENTSREQUEST, - '__module__': 'fedn.common.net.grpc.fedn_pb2' - # @@protoc_insertion_point(class_scope:grpc.ListClientsRequest) -}) + 'DESCRIPTOR' : _LISTCLIENTSREQUEST, + '__module__' : 'fedn.common.net.grpc.fedn_pb2' + # @@protoc_insertion_point(class_scope:grpc.ListClientsRequest) + }) _sym_db.RegisterMessage(ListClientsRequest) ClientList = _reflection.GeneratedProtocolMessageType('ClientList', (_message.Message,), { - 'DESCRIPTOR': _CLIENTLIST, - '__module__': 'fedn.common.net.grpc.fedn_pb2' - # @@protoc_insertion_point(class_scope:grpc.ClientList) -}) + 'DESCRIPTOR' : _CLIENTLIST, + '__module__' : 'fedn.common.net.grpc.fedn_pb2' + # @@protoc_insertion_point(class_scope:grpc.ClientList) + }) _sym_db.RegisterMessage(ClientList) Client = _reflection.GeneratedProtocolMessageType('Client', (_message.Message,), { - 'DESCRIPTOR': _CLIENT, - '__module__': 'fedn.common.net.grpc.fedn_pb2' - # @@protoc_insertion_point(class_scope:grpc.Client) -}) + 'DESCRIPTOR' : _CLIENT, + '__module__' : 'fedn.common.net.grpc.fedn_pb2' + # @@protoc_insertion_point(class_scope:grpc.Client) + }) _sym_db.RegisterMessage(Client) ReassignRequest = _reflection.GeneratedProtocolMessageType('ReassignRequest', (_message.Message,), { - 'DESCRIPTOR': _REASSIGNREQUEST, - '__module__': 'fedn.common.net.grpc.fedn_pb2' - # @@protoc_insertion_point(class_scope:grpc.ReassignRequest) -}) + 'DESCRIPTOR' : _REASSIGNREQUEST, + '__module__' : 'fedn.common.net.grpc.fedn_pb2' + # @@protoc_insertion_point(class_scope:grpc.ReassignRequest) + }) _sym_db.RegisterMessage(ReassignRequest) ReconnectRequest = _reflection.GeneratedProtocolMessageType('ReconnectRequest', (_message.Message,), { - 'DESCRIPTOR': _RECONNECTREQUEST, - '__module__': 'fedn.common.net.grpc.fedn_pb2' - # @@protoc_insertion_point(class_scope:grpc.ReconnectRequest) -}) + 'DESCRIPTOR' : _RECONNECTREQUEST, + '__module__' : 'fedn.common.net.grpc.fedn_pb2' + # @@protoc_insertion_point(class_scope:grpc.ReconnectRequest) + }) _sym_db.RegisterMessage(ReconnectRequest) Parameter = _reflection.GeneratedProtocolMessageType('Parameter', (_message.Message,), { - 'DESCRIPTOR': _PARAMETER, - '__module__': 'fedn.common.net.grpc.fedn_pb2' - # @@protoc_insertion_point(class_scope:grpc.Parameter) -}) + 'DESCRIPTOR' : _PARAMETER, + '__module__' : 'fedn.common.net.grpc.fedn_pb2' + # @@protoc_insertion_point(class_scope:grpc.Parameter) + }) _sym_db.RegisterMessage(Parameter) ControlRequest = _reflection.GeneratedProtocolMessageType('ControlRequest', (_message.Message,), { - 'DESCRIPTOR': _CONTROLREQUEST, - '__module__': 'fedn.common.net.grpc.fedn_pb2' - # @@protoc_insertion_point(class_scope:grpc.ControlRequest) -}) + 'DESCRIPTOR' : _CONTROLREQUEST, + '__module__' : 'fedn.common.net.grpc.fedn_pb2' + # @@protoc_insertion_point(class_scope:grpc.ControlRequest) + }) _sym_db.RegisterMessage(ControlRequest) ControlResponse = _reflection.GeneratedProtocolMessageType('ControlResponse', (_message.Message,), { - 'DESCRIPTOR': _CONTROLRESPONSE, - '__module__': 'fedn.common.net.grpc.fedn_pb2' - # @@protoc_insertion_point(class_scope:grpc.ControlResponse) -}) + 'DESCRIPTOR' : _CONTROLRESPONSE, + '__module__' : 'fedn.common.net.grpc.fedn_pb2' + # @@protoc_insertion_point(class_scope:grpc.ControlResponse) + }) _sym_db.RegisterMessage(ControlResponse) ReportResponse = _reflection.GeneratedProtocolMessageType('ReportResponse', (_message.Message,), { - 'DESCRIPTOR': _REPORTRESPONSE, - '__module__': 'fedn.common.net.grpc.fedn_pb2' - # @@protoc_insertion_point(class_scope:grpc.ReportResponse) -}) + 'DESCRIPTOR' : _REPORTRESPONSE, + '__module__' : 'fedn.common.net.grpc.fedn_pb2' + # @@protoc_insertion_point(class_scope:grpc.ReportResponse) + }) _sym_db.RegisterMessage(ReportResponse) ConnectionRequest = _reflection.GeneratedProtocolMessageType('ConnectionRequest', (_message.Message,), { - 'DESCRIPTOR': _CONNECTIONREQUEST, - '__module__': 'fedn.common.net.grpc.fedn_pb2' - # @@protoc_insertion_point(class_scope:grpc.ConnectionRequest) -}) + 'DESCRIPTOR' : _CONNECTIONREQUEST, + '__module__' : 'fedn.common.net.grpc.fedn_pb2' + # @@protoc_insertion_point(class_scope:grpc.ConnectionRequest) + }) _sym_db.RegisterMessage(ConnectionRequest) ConnectionResponse = _reflection.GeneratedProtocolMessageType('ConnectionResponse', (_message.Message,), { - 'DESCRIPTOR': _CONNECTIONRESPONSE, - '__module__': 'fedn.common.net.grpc.fedn_pb2' - # @@protoc_insertion_point(class_scope:grpc.ConnectionResponse) -}) + 'DESCRIPTOR' : _CONNECTIONRESPONSE, + '__module__' : 'fedn.common.net.grpc.fedn_pb2' + # @@protoc_insertion_point(class_scope:grpc.ConnectionResponse) + }) _sym_db.RegisterMessage(ConnectionResponse) + _MODELSERVICE = _descriptor.ServiceDescriptor( - name='ModelService', - full_name='grpc.ModelService', - file=DESCRIPTOR, + name='ModelService', + full_name='grpc.ModelService', + file=DESCRIPTOR, + index=0, + serialized_options=None, + create_key=_descriptor._internal_create_key, + serialized_start=2936, + serialized_end=3058, + methods=[ + _descriptor.MethodDescriptor( + name='Upload', + full_name='grpc.ModelService.Upload', index=0, + containing_service=None, + input_type=_MODELREQUEST, + output_type=_MODELRESPONSE, serialized_options=None, create_key=_descriptor._internal_create_key, - serialized_start=2920, - serialized_end=3042, - methods=[ - _descriptor.MethodDescriptor( - name='Upload', - full_name='grpc.ModelService.Upload', - index=0, - containing_service=None, - input_type=_MODELREQUEST, - output_type=_MODELRESPONSE, - serialized_options=None, - create_key=_descriptor._internal_create_key, - ), - _descriptor.MethodDescriptor( - name='Download', - full_name='grpc.ModelService.Download', - index=1, - containing_service=None, - input_type=_MODELREQUEST, - output_type=_MODELRESPONSE, - serialized_options=None, - create_key=_descriptor._internal_create_key, - ), - ]) + ), + _descriptor.MethodDescriptor( + name='Download', + full_name='grpc.ModelService.Download', + index=1, + containing_service=None, + input_type=_MODELREQUEST, + output_type=_MODELRESPONSE, + serialized_options=None, + create_key=_descriptor._internal_create_key, + ), +]) _sym_db.RegisterServiceDescriptor(_MODELSERVICE) DESCRIPTOR.services_by_name['ModelService'] = _MODELSERVICE _CONTROL = _descriptor.ServiceDescriptor( - name='Control', - full_name='grpc.Control', - file=DESCRIPTOR, + name='Control', + full_name='grpc.Control', + file=DESCRIPTOR, + index=1, + serialized_options=None, + create_key=_descriptor._internal_create_key, + serialized_start=3061, + serialized_end=3288, + methods=[ + _descriptor.MethodDescriptor( + name='Start', + full_name='grpc.Control.Start', + index=0, + containing_service=None, + input_type=_CONTROLREQUEST, + output_type=_CONTROLRESPONSE, + serialized_options=None, + create_key=_descriptor._internal_create_key, + ), + _descriptor.MethodDescriptor( + name='Stop', + full_name='grpc.Control.Stop', index=1, + containing_service=None, + input_type=_CONTROLREQUEST, + output_type=_CONTROLRESPONSE, + serialized_options=None, + create_key=_descriptor._internal_create_key, + ), + _descriptor.MethodDescriptor( + name='Configure', + full_name='grpc.Control.Configure', + index=2, + containing_service=None, + input_type=_CONTROLREQUEST, + output_type=_REPORTRESPONSE, + serialized_options=None, + create_key=_descriptor._internal_create_key, + ), + _descriptor.MethodDescriptor( + name='Report', + full_name='grpc.Control.Report', + index=3, + containing_service=None, + input_type=_CONTROLREQUEST, + output_type=_REPORTRESPONSE, serialized_options=None, create_key=_descriptor._internal_create_key, - serialized_start=3045, - serialized_end=3272, - methods=[ - _descriptor.MethodDescriptor( - name='Start', - full_name='grpc.Control.Start', - index=0, - containing_service=None, - input_type=_CONTROLREQUEST, - output_type=_CONTROLRESPONSE, - serialized_options=None, - create_key=_descriptor._internal_create_key, - ), - _descriptor.MethodDescriptor( - name='Stop', - full_name='grpc.Control.Stop', - index=1, - containing_service=None, - input_type=_CONTROLREQUEST, - output_type=_CONTROLRESPONSE, - serialized_options=None, - create_key=_descriptor._internal_create_key, - ), - _descriptor.MethodDescriptor( - name='Configure', - full_name='grpc.Control.Configure', - index=2, - containing_service=None, - input_type=_CONTROLREQUEST, - output_type=_REPORTRESPONSE, - serialized_options=None, - create_key=_descriptor._internal_create_key, - ), - _descriptor.MethodDescriptor( - name='Report', - full_name='grpc.Control.Report', - index=3, - containing_service=None, - input_type=_CONTROLREQUEST, - output_type=_REPORTRESPONSE, - serialized_options=None, - create_key=_descriptor._internal_create_key, - ), - ]) + ), +]) _sym_db.RegisterServiceDescriptor(_CONTROL) DESCRIPTOR.services_by_name['Control'] = _CONTROL _REDUCER = _descriptor.ServiceDescriptor( - name='Reducer', - full_name='grpc.Reducer', - file=DESCRIPTOR, - index=2, + name='Reducer', + full_name='grpc.Reducer', + file=DESCRIPTOR, + index=2, + serialized_options=None, + create_key=_descriptor._internal_create_key, + serialized_start=3290, + serialized_end=3376, + methods=[ + _descriptor.MethodDescriptor( + name='GetGlobalModel', + full_name='grpc.Reducer.GetGlobalModel', + index=0, + containing_service=None, + input_type=_GETGLOBALMODELREQUEST, + output_type=_GETGLOBALMODELRESPONSE, serialized_options=None, create_key=_descriptor._internal_create_key, - serialized_start=3274, - serialized_end=3360, - methods=[ - _descriptor.MethodDescriptor( - name='GetGlobalModel', - full_name='grpc.Reducer.GetGlobalModel', - index=0, - containing_service=None, - input_type=_GETGLOBALMODELREQUEST, - output_type=_GETGLOBALMODELRESPONSE, - serialized_options=None, - create_key=_descriptor._internal_create_key, - ), - ]) + ), +]) _sym_db.RegisterServiceDescriptor(_REDUCER) DESCRIPTOR.services_by_name['Reducer'] = _REDUCER _CONNECTOR = _descriptor.ServiceDescriptor( - name='Connector', - full_name='grpc.Connector', - file=DESCRIPTOR, + name='Connector', + full_name='grpc.Connector', + file=DESCRIPTOR, + index=3, + serialized_options=None, + create_key=_descriptor._internal_create_key, + serialized_start=3379, + serialized_end=3806, + methods=[ + _descriptor.MethodDescriptor( + name='AllianceStatusStream', + full_name='grpc.Connector.AllianceStatusStream', + index=0, + containing_service=None, + input_type=_CLIENTAVAILABLEMESSAGE, + output_type=_STATUS, + serialized_options=None, + create_key=_descriptor._internal_create_key, + ), + _descriptor.MethodDescriptor( + name='SendStatus', + full_name='grpc.Connector.SendStatus', + index=1, + containing_service=None, + input_type=_STATUS, + output_type=_RESPONSE, + serialized_options=None, + create_key=_descriptor._internal_create_key, + ), + _descriptor.MethodDescriptor( + name='ListActiveClients', + full_name='grpc.Connector.ListActiveClients', + index=2, + containing_service=None, + input_type=_LISTCLIENTSREQUEST, + output_type=_CLIENTLIST, + serialized_options=None, + create_key=_descriptor._internal_create_key, + ), + _descriptor.MethodDescriptor( + name='AcceptingClients', + full_name='grpc.Connector.AcceptingClients', index=3, + containing_service=None, + input_type=_CONNECTIONREQUEST, + output_type=_CONNECTIONRESPONSE, serialized_options=None, create_key=_descriptor._internal_create_key, - serialized_start=3363, - serialized_end=3790, - methods=[ - _descriptor.MethodDescriptor( - name='AllianceStatusStream', - full_name='grpc.Connector.AllianceStatusStream', - index=0, - containing_service=None, - input_type=_CLIENTAVAILABLEMESSAGE, - output_type=_STATUS, - serialized_options=None, - create_key=_descriptor._internal_create_key, - ), - _descriptor.MethodDescriptor( - name='SendStatus', - full_name='grpc.Connector.SendStatus', - index=1, - containing_service=None, - input_type=_STATUS, - output_type=_RESPONSE, - serialized_options=None, - create_key=_descriptor._internal_create_key, - ), - _descriptor.MethodDescriptor( - name='ListActiveClients', - full_name='grpc.Connector.ListActiveClients', - index=2, - containing_service=None, - input_type=_LISTCLIENTSREQUEST, - output_type=_CLIENTLIST, - serialized_options=None, - create_key=_descriptor._internal_create_key, - ), - _descriptor.MethodDescriptor( - name='AcceptingClients', - full_name='grpc.Connector.AcceptingClients', - index=3, - containing_service=None, - input_type=_CONNECTIONREQUEST, - output_type=_CONNECTIONRESPONSE, - serialized_options=None, - create_key=_descriptor._internal_create_key, - ), - _descriptor.MethodDescriptor( - name='SendHeartbeat', - full_name='grpc.Connector.SendHeartbeat', - index=4, - containing_service=None, - input_type=_HEARTBEAT, - output_type=_RESPONSE, - serialized_options=None, - create_key=_descriptor._internal_create_key, - ), - _descriptor.MethodDescriptor( - name='ReassignClient', - full_name='grpc.Connector.ReassignClient', - index=5, - containing_service=None, - input_type=_REASSIGNREQUEST, - output_type=_RESPONSE, - serialized_options=None, - create_key=_descriptor._internal_create_key, - ), - _descriptor.MethodDescriptor( - name='ReconnectClient', - full_name='grpc.Connector.ReconnectClient', - index=6, - containing_service=None, - input_type=_RECONNECTREQUEST, - output_type=_RESPONSE, - serialized_options=None, - create_key=_descriptor._internal_create_key, - ), - ]) + ), + _descriptor.MethodDescriptor( + name='SendHeartbeat', + full_name='grpc.Connector.SendHeartbeat', + index=4, + containing_service=None, + input_type=_HEARTBEAT, + output_type=_RESPONSE, + serialized_options=None, + create_key=_descriptor._internal_create_key, + ), + _descriptor.MethodDescriptor( + name='ReassignClient', + full_name='grpc.Connector.ReassignClient', + index=5, + containing_service=None, + input_type=_REASSIGNREQUEST, + output_type=_RESPONSE, + serialized_options=None, + create_key=_descriptor._internal_create_key, + ), + _descriptor.MethodDescriptor( + name='ReconnectClient', + full_name='grpc.Connector.ReconnectClient', + index=6, + containing_service=None, + input_type=_RECONNECTREQUEST, + output_type=_RESPONSE, + serialized_options=None, + create_key=_descriptor._internal_create_key, + ), +]) _sym_db.RegisterServiceDescriptor(_CONNECTOR) DESCRIPTOR.services_by_name['Connector'] = _CONNECTOR _COMBINER = _descriptor.ServiceDescriptor( - name='Combiner', - full_name='grpc.Combiner', - file=DESCRIPTOR, + name='Combiner', + full_name='grpc.Combiner', + file=DESCRIPTOR, + index=4, + serialized_options=None, + create_key=_descriptor._internal_create_key, + serialized_start=3809, + serialized_end=4411, + methods=[ + _descriptor.MethodDescriptor( + name='ModelUpdateRequestStream', + full_name='grpc.Combiner.ModelUpdateRequestStream', + index=0, + containing_service=None, + input_type=_CLIENTAVAILABLEMESSAGE, + output_type=_MODELUPDATEREQUEST, + serialized_options=None, + create_key=_descriptor._internal_create_key, + ), + _descriptor.MethodDescriptor( + name='ModelUpdateStream', + full_name='grpc.Combiner.ModelUpdateStream', + index=1, + containing_service=None, + input_type=_CLIENTAVAILABLEMESSAGE, + output_type=_MODELUPDATE, + serialized_options=None, + create_key=_descriptor._internal_create_key, + ), + _descriptor.MethodDescriptor( + name='ModelValidationRequestStream', + full_name='grpc.Combiner.ModelValidationRequestStream', + index=2, + containing_service=None, + input_type=_CLIENTAVAILABLEMESSAGE, + output_type=_MODELVALIDATIONREQUEST, + serialized_options=None, + create_key=_descriptor._internal_create_key, + ), + _descriptor.MethodDescriptor( + name='ModelValidationStream', + full_name='grpc.Combiner.ModelValidationStream', + index=3, + containing_service=None, + input_type=_CLIENTAVAILABLEMESSAGE, + output_type=_MODELVALIDATION, + serialized_options=None, + create_key=_descriptor._internal_create_key, + ), + _descriptor.MethodDescriptor( + name='SendModelUpdateRequest', + full_name='grpc.Combiner.SendModelUpdateRequest', index=4, + containing_service=None, + input_type=_MODELUPDATEREQUEST, + output_type=_RESPONSE, + serialized_options=None, + create_key=_descriptor._internal_create_key, + ), + _descriptor.MethodDescriptor( + name='SendModelUpdate', + full_name='grpc.Combiner.SendModelUpdate', + index=5, + containing_service=None, + input_type=_MODELUPDATE, + output_type=_RESPONSE, + serialized_options=None, + create_key=_descriptor._internal_create_key, + ), + _descriptor.MethodDescriptor( + name='SendModelValidationRequest', + full_name='grpc.Combiner.SendModelValidationRequest', + index=6, + containing_service=None, + input_type=_MODELVALIDATIONREQUEST, + output_type=_RESPONSE, + serialized_options=None, + create_key=_descriptor._internal_create_key, + ), + _descriptor.MethodDescriptor( + name='SendModelValidation', + full_name='grpc.Combiner.SendModelValidation', + index=7, + containing_service=None, + input_type=_MODELVALIDATION, + output_type=_RESPONSE, serialized_options=None, create_key=_descriptor._internal_create_key, - serialized_start=3793, - serialized_end=4395, - methods=[ - _descriptor.MethodDescriptor( - name='ModelUpdateRequestStream', - full_name='grpc.Combiner.ModelUpdateRequestStream', - index=0, - containing_service=None, - input_type=_CLIENTAVAILABLEMESSAGE, - output_type=_MODELUPDATEREQUEST, - serialized_options=None, - create_key=_descriptor._internal_create_key, - ), - _descriptor.MethodDescriptor( - name='ModelUpdateStream', - full_name='grpc.Combiner.ModelUpdateStream', - index=1, - containing_service=None, - input_type=_CLIENTAVAILABLEMESSAGE, - output_type=_MODELUPDATE, - serialized_options=None, - create_key=_descriptor._internal_create_key, - ), - _descriptor.MethodDescriptor( - name='ModelValidationRequestStream', - full_name='grpc.Combiner.ModelValidationRequestStream', - index=2, - containing_service=None, - input_type=_CLIENTAVAILABLEMESSAGE, - output_type=_MODELVALIDATIONREQUEST, - serialized_options=None, - create_key=_descriptor._internal_create_key, - ), - _descriptor.MethodDescriptor( - name='ModelValidationStream', - full_name='grpc.Combiner.ModelValidationStream', - index=3, - containing_service=None, - input_type=_CLIENTAVAILABLEMESSAGE, - output_type=_MODELVALIDATION, - serialized_options=None, - create_key=_descriptor._internal_create_key, - ), - _descriptor.MethodDescriptor( - name='SendModelUpdateRequest', - full_name='grpc.Combiner.SendModelUpdateRequest', - index=4, - containing_service=None, - input_type=_MODELUPDATEREQUEST, - output_type=_RESPONSE, - serialized_options=None, - create_key=_descriptor._internal_create_key, - ), - _descriptor.MethodDescriptor( - name='SendModelUpdate', - full_name='grpc.Combiner.SendModelUpdate', - index=5, - containing_service=None, - input_type=_MODELUPDATE, - output_type=_RESPONSE, - serialized_options=None, - create_key=_descriptor._internal_create_key, - ), - _descriptor.MethodDescriptor( - name='SendModelValidationRequest', - full_name='grpc.Combiner.SendModelValidationRequest', - index=6, - containing_service=None, - input_type=_MODELVALIDATIONREQUEST, - output_type=_RESPONSE, - serialized_options=None, - create_key=_descriptor._internal_create_key, - ), - _descriptor.MethodDescriptor( - name='SendModelValidation', - full_name='grpc.Combiner.SendModelValidation', - index=7, - containing_service=None, - input_type=_MODELVALIDATION, - output_type=_RESPONSE, - serialized_options=None, - create_key=_descriptor._internal_create_key, - ), - ]) + ), +]) _sym_db.RegisterServiceDescriptor(_COMBINER) DESCRIPTOR.services_by_name['Combiner'] = _COMBINER diff --git a/fedn/fedn/common/net/grpc/fedn_pb2_grpc.py b/fedn/fedn/common/net/grpc/fedn_pb2_grpc.py index 975fee755..97c73e5d5 100644 --- a/fedn/fedn/common/net/grpc/fedn_pb2_grpc.py +++ b/fedn/fedn/common/net/grpc/fedn_pb2_grpc.py @@ -2,8 +2,7 @@ """Client and server classes corresponding to protobuf-defined services.""" import grpc -from fedn.common.net.grpc import \ - fedn_pb2 as fedn_dot_common_dot_net_dot_grpc_dot_fedn__pb2 +from fedn.common.net.grpc import fedn_pb2 as fedn_dot_common_dot_net_dot_grpc_dot_fedn__pb2 class ModelServiceStub(object): @@ -16,15 +15,15 @@ def __init__(self, channel): channel: A grpc.Channel. """ self.Upload = channel.stream_unary( - '/grpc.ModelService/Upload', - request_serializer=fedn_dot_common_dot_net_dot_grpc_dot_fedn__pb2.ModelRequest.SerializeToString, - response_deserializer=fedn_dot_common_dot_net_dot_grpc_dot_fedn__pb2.ModelResponse.FromString, - ) + '/grpc.ModelService/Upload', + request_serializer=fedn_dot_common_dot_net_dot_grpc_dot_fedn__pb2.ModelRequest.SerializeToString, + response_deserializer=fedn_dot_common_dot_net_dot_grpc_dot_fedn__pb2.ModelResponse.FromString, + ) self.Download = channel.unary_stream( - '/grpc.ModelService/Download', - request_serializer=fedn_dot_common_dot_net_dot_grpc_dot_fedn__pb2.ModelRequest.SerializeToString, - response_deserializer=fedn_dot_common_dot_net_dot_grpc_dot_fedn__pb2.ModelResponse.FromString, - ) + '/grpc.ModelService/Download', + request_serializer=fedn_dot_common_dot_net_dot_grpc_dot_fedn__pb2.ModelRequest.SerializeToString, + response_deserializer=fedn_dot_common_dot_net_dot_grpc_dot_fedn__pb2.ModelResponse.FromString, + ) class ModelServiceServicer(object): @@ -45,60 +44,59 @@ def Download(self, request, context): def add_ModelServiceServicer_to_server(servicer, server): rpc_method_handlers = { - 'Upload': grpc.stream_unary_rpc_method_handler( - servicer.Upload, - request_deserializer=fedn_dot_common_dot_net_dot_grpc_dot_fedn__pb2.ModelRequest.FromString, - response_serializer=fedn_dot_common_dot_net_dot_grpc_dot_fedn__pb2.ModelResponse.SerializeToString, - ), - 'Download': grpc.unary_stream_rpc_method_handler( - servicer.Download, - request_deserializer=fedn_dot_common_dot_net_dot_grpc_dot_fedn__pb2.ModelRequest.FromString, - response_serializer=fedn_dot_common_dot_net_dot_grpc_dot_fedn__pb2.ModelResponse.SerializeToString, - ), + 'Upload': grpc.stream_unary_rpc_method_handler( + servicer.Upload, + request_deserializer=fedn_dot_common_dot_net_dot_grpc_dot_fedn__pb2.ModelRequest.FromString, + response_serializer=fedn_dot_common_dot_net_dot_grpc_dot_fedn__pb2.ModelResponse.SerializeToString, + ), + 'Download': grpc.unary_stream_rpc_method_handler( + servicer.Download, + request_deserializer=fedn_dot_common_dot_net_dot_grpc_dot_fedn__pb2.ModelRequest.FromString, + response_serializer=fedn_dot_common_dot_net_dot_grpc_dot_fedn__pb2.ModelResponse.SerializeToString, + ), } generic_handler = grpc.method_handlers_generic_handler( - 'grpc.ModelService', rpc_method_handlers) + 'grpc.ModelService', rpc_method_handlers) server.add_generic_rpc_handlers((generic_handler,)) - # This class is part of an EXPERIMENTAL API. - + # This class is part of an EXPERIMENTAL API. class ModelService(object): """Missing associated documentation comment in .proto file.""" @staticmethod def Upload(request_iterator, - target, - options=(), - channel_credentials=None, - call_credentials=None, - insecure=False, - compression=None, - wait_for_ready=None, - timeout=None, - metadata=None): + target, + options=(), + channel_credentials=None, + call_credentials=None, + insecure=False, + compression=None, + wait_for_ready=None, + timeout=None, + metadata=None): return grpc.experimental.stream_unary(request_iterator, target, '/grpc.ModelService/Upload', - fedn_dot_common_dot_net_dot_grpc_dot_fedn__pb2.ModelRequest.SerializeToString, - fedn_dot_common_dot_net_dot_grpc_dot_fedn__pb2.ModelResponse.FromString, - options, channel_credentials, - insecure, call_credentials, compression, wait_for_ready, timeout, metadata) + fedn_dot_common_dot_net_dot_grpc_dot_fedn__pb2.ModelRequest.SerializeToString, + fedn_dot_common_dot_net_dot_grpc_dot_fedn__pb2.ModelResponse.FromString, + options, channel_credentials, + insecure, call_credentials, compression, wait_for_ready, timeout, metadata) @staticmethod def Download(request, - target, - options=(), - channel_credentials=None, - call_credentials=None, - insecure=False, - compression=None, - wait_for_ready=None, - timeout=None, - metadata=None): + target, + options=(), + channel_credentials=None, + call_credentials=None, + insecure=False, + compression=None, + wait_for_ready=None, + timeout=None, + metadata=None): return grpc.experimental.unary_stream(request, target, '/grpc.ModelService/Download', - fedn_dot_common_dot_net_dot_grpc_dot_fedn__pb2.ModelRequest.SerializeToString, - fedn_dot_common_dot_net_dot_grpc_dot_fedn__pb2.ModelResponse.FromString, - options, channel_credentials, - insecure, call_credentials, compression, wait_for_ready, timeout, metadata) + fedn_dot_common_dot_net_dot_grpc_dot_fedn__pb2.ModelRequest.SerializeToString, + fedn_dot_common_dot_net_dot_grpc_dot_fedn__pb2.ModelResponse.FromString, + options, channel_credentials, + insecure, call_credentials, compression, wait_for_ready, timeout, metadata) class ControlStub(object): @@ -111,25 +109,25 @@ def __init__(self, channel): channel: A grpc.Channel. """ self.Start = channel.unary_unary( - '/grpc.Control/Start', - request_serializer=fedn_dot_common_dot_net_dot_grpc_dot_fedn__pb2.ControlRequest.SerializeToString, - response_deserializer=fedn_dot_common_dot_net_dot_grpc_dot_fedn__pb2.ControlResponse.FromString, - ) + '/grpc.Control/Start', + request_serializer=fedn_dot_common_dot_net_dot_grpc_dot_fedn__pb2.ControlRequest.SerializeToString, + response_deserializer=fedn_dot_common_dot_net_dot_grpc_dot_fedn__pb2.ControlResponse.FromString, + ) self.Stop = channel.unary_unary( - '/grpc.Control/Stop', - request_serializer=fedn_dot_common_dot_net_dot_grpc_dot_fedn__pb2.ControlRequest.SerializeToString, - response_deserializer=fedn_dot_common_dot_net_dot_grpc_dot_fedn__pb2.ControlResponse.FromString, - ) + '/grpc.Control/Stop', + request_serializer=fedn_dot_common_dot_net_dot_grpc_dot_fedn__pb2.ControlRequest.SerializeToString, + response_deserializer=fedn_dot_common_dot_net_dot_grpc_dot_fedn__pb2.ControlResponse.FromString, + ) self.Configure = channel.unary_unary( - '/grpc.Control/Configure', - request_serializer=fedn_dot_common_dot_net_dot_grpc_dot_fedn__pb2.ControlRequest.SerializeToString, - response_deserializer=fedn_dot_common_dot_net_dot_grpc_dot_fedn__pb2.ReportResponse.FromString, - ) + '/grpc.Control/Configure', + request_serializer=fedn_dot_common_dot_net_dot_grpc_dot_fedn__pb2.ControlRequest.SerializeToString, + response_deserializer=fedn_dot_common_dot_net_dot_grpc_dot_fedn__pb2.ReportResponse.FromString, + ) self.Report = channel.unary_unary( - '/grpc.Control/Report', - request_serializer=fedn_dot_common_dot_net_dot_grpc_dot_fedn__pb2.ControlRequest.SerializeToString, - response_deserializer=fedn_dot_common_dot_net_dot_grpc_dot_fedn__pb2.ReportResponse.FromString, - ) + '/grpc.Control/Report', + request_serializer=fedn_dot_common_dot_net_dot_grpc_dot_fedn__pb2.ControlRequest.SerializeToString, + response_deserializer=fedn_dot_common_dot_net_dot_grpc_dot_fedn__pb2.ReportResponse.FromString, + ) class ControlServicer(object): @@ -162,104 +160,103 @@ def Report(self, request, context): def add_ControlServicer_to_server(servicer, server): rpc_method_handlers = { - 'Start': grpc.unary_unary_rpc_method_handler( - servicer.Start, - request_deserializer=fedn_dot_common_dot_net_dot_grpc_dot_fedn__pb2.ControlRequest.FromString, - response_serializer=fedn_dot_common_dot_net_dot_grpc_dot_fedn__pb2.ControlResponse.SerializeToString, - ), - 'Stop': grpc.unary_unary_rpc_method_handler( - servicer.Stop, - request_deserializer=fedn_dot_common_dot_net_dot_grpc_dot_fedn__pb2.ControlRequest.FromString, - response_serializer=fedn_dot_common_dot_net_dot_grpc_dot_fedn__pb2.ControlResponse.SerializeToString, - ), - 'Configure': grpc.unary_unary_rpc_method_handler( - servicer.Configure, - request_deserializer=fedn_dot_common_dot_net_dot_grpc_dot_fedn__pb2.ControlRequest.FromString, - response_serializer=fedn_dot_common_dot_net_dot_grpc_dot_fedn__pb2.ReportResponse.SerializeToString, - ), - 'Report': grpc.unary_unary_rpc_method_handler( - servicer.Report, - request_deserializer=fedn_dot_common_dot_net_dot_grpc_dot_fedn__pb2.ControlRequest.FromString, - response_serializer=fedn_dot_common_dot_net_dot_grpc_dot_fedn__pb2.ReportResponse.SerializeToString, - ), + 'Start': grpc.unary_unary_rpc_method_handler( + servicer.Start, + request_deserializer=fedn_dot_common_dot_net_dot_grpc_dot_fedn__pb2.ControlRequest.FromString, + response_serializer=fedn_dot_common_dot_net_dot_grpc_dot_fedn__pb2.ControlResponse.SerializeToString, + ), + 'Stop': grpc.unary_unary_rpc_method_handler( + servicer.Stop, + request_deserializer=fedn_dot_common_dot_net_dot_grpc_dot_fedn__pb2.ControlRequest.FromString, + response_serializer=fedn_dot_common_dot_net_dot_grpc_dot_fedn__pb2.ControlResponse.SerializeToString, + ), + 'Configure': grpc.unary_unary_rpc_method_handler( + servicer.Configure, + request_deserializer=fedn_dot_common_dot_net_dot_grpc_dot_fedn__pb2.ControlRequest.FromString, + response_serializer=fedn_dot_common_dot_net_dot_grpc_dot_fedn__pb2.ReportResponse.SerializeToString, + ), + 'Report': grpc.unary_unary_rpc_method_handler( + servicer.Report, + request_deserializer=fedn_dot_common_dot_net_dot_grpc_dot_fedn__pb2.ControlRequest.FromString, + response_serializer=fedn_dot_common_dot_net_dot_grpc_dot_fedn__pb2.ReportResponse.SerializeToString, + ), } generic_handler = grpc.method_handlers_generic_handler( - 'grpc.Control', rpc_method_handlers) + 'grpc.Control', rpc_method_handlers) server.add_generic_rpc_handlers((generic_handler,)) - # This class is part of an EXPERIMENTAL API. - + # This class is part of an EXPERIMENTAL API. class Control(object): """Missing associated documentation comment in .proto file.""" @staticmethod def Start(request, - target, - options=(), - channel_credentials=None, - call_credentials=None, - insecure=False, - compression=None, - wait_for_ready=None, - timeout=None, - metadata=None): + target, + options=(), + channel_credentials=None, + call_credentials=None, + insecure=False, + compression=None, + wait_for_ready=None, + timeout=None, + metadata=None): return grpc.experimental.unary_unary(request, target, '/grpc.Control/Start', - fedn_dot_common_dot_net_dot_grpc_dot_fedn__pb2.ControlRequest.SerializeToString, - fedn_dot_common_dot_net_dot_grpc_dot_fedn__pb2.ControlResponse.FromString, - options, channel_credentials, - insecure, call_credentials, compression, wait_for_ready, timeout, metadata) + fedn_dot_common_dot_net_dot_grpc_dot_fedn__pb2.ControlRequest.SerializeToString, + fedn_dot_common_dot_net_dot_grpc_dot_fedn__pb2.ControlResponse.FromString, + options, channel_credentials, + insecure, call_credentials, compression, wait_for_ready, timeout, metadata) @staticmethod def Stop(request, - target, - options=(), - channel_credentials=None, - call_credentials=None, - insecure=False, - compression=None, - wait_for_ready=None, - timeout=None, - metadata=None): + target, + options=(), + channel_credentials=None, + call_credentials=None, + insecure=False, + compression=None, + wait_for_ready=None, + timeout=None, + metadata=None): return grpc.experimental.unary_unary(request, target, '/grpc.Control/Stop', - fedn_dot_common_dot_net_dot_grpc_dot_fedn__pb2.ControlRequest.SerializeToString, - fedn_dot_common_dot_net_dot_grpc_dot_fedn__pb2.ControlResponse.FromString, - options, channel_credentials, - insecure, call_credentials, compression, wait_for_ready, timeout, metadata) + fedn_dot_common_dot_net_dot_grpc_dot_fedn__pb2.ControlRequest.SerializeToString, + fedn_dot_common_dot_net_dot_grpc_dot_fedn__pb2.ControlResponse.FromString, + options, channel_credentials, + insecure, call_credentials, compression, wait_for_ready, timeout, metadata) @staticmethod def Configure(request, - target, - options=(), - channel_credentials=None, - call_credentials=None, - insecure=False, - compression=None, - wait_for_ready=None, - timeout=None, - metadata=None): + target, + options=(), + channel_credentials=None, + call_credentials=None, + insecure=False, + compression=None, + wait_for_ready=None, + timeout=None, + metadata=None): return grpc.experimental.unary_unary(request, target, '/grpc.Control/Configure', - fedn_dot_common_dot_net_dot_grpc_dot_fedn__pb2.ControlRequest.SerializeToString, - fedn_dot_common_dot_net_dot_grpc_dot_fedn__pb2.ReportResponse.FromString, - options, channel_credentials, - insecure, call_credentials, compression, wait_for_ready, timeout, metadata) + fedn_dot_common_dot_net_dot_grpc_dot_fedn__pb2.ControlRequest.SerializeToString, + fedn_dot_common_dot_net_dot_grpc_dot_fedn__pb2.ReportResponse.FromString, + options, channel_credentials, + insecure, call_credentials, compression, wait_for_ready, timeout, metadata) @staticmethod def Report(request, - target, - options=(), - channel_credentials=None, - call_credentials=None, - insecure=False, - compression=None, - wait_for_ready=None, - timeout=None, - metadata=None): + target, + options=(), + channel_credentials=None, + call_credentials=None, + insecure=False, + compression=None, + wait_for_ready=None, + timeout=None, + metadata=None): return grpc.experimental.unary_unary(request, target, '/grpc.Control/Report', - fedn_dot_common_dot_net_dot_grpc_dot_fedn__pb2.ControlRequest.SerializeToString, - fedn_dot_common_dot_net_dot_grpc_dot_fedn__pb2.ReportResponse.FromString, - options, channel_credentials, - insecure, call_credentials, compression, wait_for_ready, timeout, metadata) + fedn_dot_common_dot_net_dot_grpc_dot_fedn__pb2.ControlRequest.SerializeToString, + fedn_dot_common_dot_net_dot_grpc_dot_fedn__pb2.ReportResponse.FromString, + options, channel_credentials, + insecure, call_credentials, compression, wait_for_ready, timeout, metadata) class ReducerStub(object): @@ -272,10 +269,10 @@ def __init__(self, channel): channel: A grpc.Channel. """ self.GetGlobalModel = channel.unary_unary( - '/grpc.Reducer/GetGlobalModel', - request_serializer=fedn_dot_common_dot_net_dot_grpc_dot_fedn__pb2.GetGlobalModelRequest.SerializeToString, - response_deserializer=fedn_dot_common_dot_net_dot_grpc_dot_fedn__pb2.GetGlobalModelResponse.FromString, - ) + '/grpc.Reducer/GetGlobalModel', + request_serializer=fedn_dot_common_dot_net_dot_grpc_dot_fedn__pb2.GetGlobalModelRequest.SerializeToString, + response_deserializer=fedn_dot_common_dot_net_dot_grpc_dot_fedn__pb2.GetGlobalModelResponse.FromString, + ) class ReducerServicer(object): @@ -290,38 +287,37 @@ def GetGlobalModel(self, request, context): def add_ReducerServicer_to_server(servicer, server): rpc_method_handlers = { - 'GetGlobalModel': grpc.unary_unary_rpc_method_handler( - servicer.GetGlobalModel, - request_deserializer=fedn_dot_common_dot_net_dot_grpc_dot_fedn__pb2.GetGlobalModelRequest.FromString, - response_serializer=fedn_dot_common_dot_net_dot_grpc_dot_fedn__pb2.GetGlobalModelResponse.SerializeToString, - ), + 'GetGlobalModel': grpc.unary_unary_rpc_method_handler( + servicer.GetGlobalModel, + request_deserializer=fedn_dot_common_dot_net_dot_grpc_dot_fedn__pb2.GetGlobalModelRequest.FromString, + response_serializer=fedn_dot_common_dot_net_dot_grpc_dot_fedn__pb2.GetGlobalModelResponse.SerializeToString, + ), } generic_handler = grpc.method_handlers_generic_handler( - 'grpc.Reducer', rpc_method_handlers) + 'grpc.Reducer', rpc_method_handlers) server.add_generic_rpc_handlers((generic_handler,)) - # This class is part of an EXPERIMENTAL API. - + # This class is part of an EXPERIMENTAL API. class Reducer(object): """Missing associated documentation comment in .proto file.""" @staticmethod def GetGlobalModel(request, - target, - options=(), - channel_credentials=None, - call_credentials=None, - insecure=False, - compression=None, - wait_for_ready=None, - timeout=None, - metadata=None): + target, + options=(), + channel_credentials=None, + call_credentials=None, + insecure=False, + compression=None, + wait_for_ready=None, + timeout=None, + metadata=None): return grpc.experimental.unary_unary(request, target, '/grpc.Reducer/GetGlobalModel', - fedn_dot_common_dot_net_dot_grpc_dot_fedn__pb2.GetGlobalModelRequest.SerializeToString, - fedn_dot_common_dot_net_dot_grpc_dot_fedn__pb2.GetGlobalModelResponse.FromString, - options, channel_credentials, - insecure, call_credentials, compression, wait_for_ready, timeout, metadata) + fedn_dot_common_dot_net_dot_grpc_dot_fedn__pb2.GetGlobalModelRequest.SerializeToString, + fedn_dot_common_dot_net_dot_grpc_dot_fedn__pb2.GetGlobalModelResponse.FromString, + options, channel_credentials, + insecure, call_credentials, compression, wait_for_ready, timeout, metadata) class ConnectorStub(object): @@ -334,40 +330,40 @@ def __init__(self, channel): channel: A grpc.Channel. """ self.AllianceStatusStream = channel.unary_stream( - '/grpc.Connector/AllianceStatusStream', - request_serializer=fedn_dot_common_dot_net_dot_grpc_dot_fedn__pb2.ClientAvailableMessage.SerializeToString, - response_deserializer=fedn_dot_common_dot_net_dot_grpc_dot_fedn__pb2.Status.FromString, - ) + '/grpc.Connector/AllianceStatusStream', + request_serializer=fedn_dot_common_dot_net_dot_grpc_dot_fedn__pb2.ClientAvailableMessage.SerializeToString, + response_deserializer=fedn_dot_common_dot_net_dot_grpc_dot_fedn__pb2.Status.FromString, + ) self.SendStatus = channel.unary_unary( - '/grpc.Connector/SendStatus', - request_serializer=fedn_dot_common_dot_net_dot_grpc_dot_fedn__pb2.Status.SerializeToString, - response_deserializer=fedn_dot_common_dot_net_dot_grpc_dot_fedn__pb2.Response.FromString, - ) + '/grpc.Connector/SendStatus', + request_serializer=fedn_dot_common_dot_net_dot_grpc_dot_fedn__pb2.Status.SerializeToString, + response_deserializer=fedn_dot_common_dot_net_dot_grpc_dot_fedn__pb2.Response.FromString, + ) self.ListActiveClients = channel.unary_unary( - '/grpc.Connector/ListActiveClients', - request_serializer=fedn_dot_common_dot_net_dot_grpc_dot_fedn__pb2.ListClientsRequest.SerializeToString, - response_deserializer=fedn_dot_common_dot_net_dot_grpc_dot_fedn__pb2.ClientList.FromString, - ) + '/grpc.Connector/ListActiveClients', + request_serializer=fedn_dot_common_dot_net_dot_grpc_dot_fedn__pb2.ListClientsRequest.SerializeToString, + response_deserializer=fedn_dot_common_dot_net_dot_grpc_dot_fedn__pb2.ClientList.FromString, + ) self.AcceptingClients = channel.unary_unary( - '/grpc.Connector/AcceptingClients', - request_serializer=fedn_dot_common_dot_net_dot_grpc_dot_fedn__pb2.ConnectionRequest.SerializeToString, - response_deserializer=fedn_dot_common_dot_net_dot_grpc_dot_fedn__pb2.ConnectionResponse.FromString, - ) + '/grpc.Connector/AcceptingClients', + request_serializer=fedn_dot_common_dot_net_dot_grpc_dot_fedn__pb2.ConnectionRequest.SerializeToString, + response_deserializer=fedn_dot_common_dot_net_dot_grpc_dot_fedn__pb2.ConnectionResponse.FromString, + ) self.SendHeartbeat = channel.unary_unary( - '/grpc.Connector/SendHeartbeat', - request_serializer=fedn_dot_common_dot_net_dot_grpc_dot_fedn__pb2.Heartbeat.SerializeToString, - response_deserializer=fedn_dot_common_dot_net_dot_grpc_dot_fedn__pb2.Response.FromString, - ) + '/grpc.Connector/SendHeartbeat', + request_serializer=fedn_dot_common_dot_net_dot_grpc_dot_fedn__pb2.Heartbeat.SerializeToString, + response_deserializer=fedn_dot_common_dot_net_dot_grpc_dot_fedn__pb2.Response.FromString, + ) self.ReassignClient = channel.unary_unary( - '/grpc.Connector/ReassignClient', - request_serializer=fedn_dot_common_dot_net_dot_grpc_dot_fedn__pb2.ReassignRequest.SerializeToString, - response_deserializer=fedn_dot_common_dot_net_dot_grpc_dot_fedn__pb2.Response.FromString, - ) + '/grpc.Connector/ReassignClient', + request_serializer=fedn_dot_common_dot_net_dot_grpc_dot_fedn__pb2.ReassignRequest.SerializeToString, + response_deserializer=fedn_dot_common_dot_net_dot_grpc_dot_fedn__pb2.Response.FromString, + ) self.ReconnectClient = channel.unary_unary( - '/grpc.Connector/ReconnectClient', - request_serializer=fedn_dot_common_dot_net_dot_grpc_dot_fedn__pb2.ReconnectRequest.SerializeToString, - response_deserializer=fedn_dot_common_dot_net_dot_grpc_dot_fedn__pb2.Response.FromString, - ) + '/grpc.Connector/ReconnectClient', + request_serializer=fedn_dot_common_dot_net_dot_grpc_dot_fedn__pb2.ReconnectRequest.SerializeToString, + response_deserializer=fedn_dot_common_dot_net_dot_grpc_dot_fedn__pb2.Response.FromString, + ) class ConnectorServicer(object): @@ -423,170 +419,169 @@ def ReconnectClient(self, request, context): def add_ConnectorServicer_to_server(servicer, server): rpc_method_handlers = { - 'AllianceStatusStream': grpc.unary_stream_rpc_method_handler( - servicer.AllianceStatusStream, - request_deserializer=fedn_dot_common_dot_net_dot_grpc_dot_fedn__pb2.ClientAvailableMessage.FromString, - response_serializer=fedn_dot_common_dot_net_dot_grpc_dot_fedn__pb2.Status.SerializeToString, - ), - 'SendStatus': grpc.unary_unary_rpc_method_handler( - servicer.SendStatus, - request_deserializer=fedn_dot_common_dot_net_dot_grpc_dot_fedn__pb2.Status.FromString, - response_serializer=fedn_dot_common_dot_net_dot_grpc_dot_fedn__pb2.Response.SerializeToString, - ), - 'ListActiveClients': grpc.unary_unary_rpc_method_handler( - servicer.ListActiveClients, - request_deserializer=fedn_dot_common_dot_net_dot_grpc_dot_fedn__pb2.ListClientsRequest.FromString, - response_serializer=fedn_dot_common_dot_net_dot_grpc_dot_fedn__pb2.ClientList.SerializeToString, - ), - 'AcceptingClients': grpc.unary_unary_rpc_method_handler( - servicer.AcceptingClients, - request_deserializer=fedn_dot_common_dot_net_dot_grpc_dot_fedn__pb2.ConnectionRequest.FromString, - response_serializer=fedn_dot_common_dot_net_dot_grpc_dot_fedn__pb2.ConnectionResponse.SerializeToString, - ), - 'SendHeartbeat': grpc.unary_unary_rpc_method_handler( - servicer.SendHeartbeat, - request_deserializer=fedn_dot_common_dot_net_dot_grpc_dot_fedn__pb2.Heartbeat.FromString, - response_serializer=fedn_dot_common_dot_net_dot_grpc_dot_fedn__pb2.Response.SerializeToString, - ), - 'ReassignClient': grpc.unary_unary_rpc_method_handler( - servicer.ReassignClient, - request_deserializer=fedn_dot_common_dot_net_dot_grpc_dot_fedn__pb2.ReassignRequest.FromString, - response_serializer=fedn_dot_common_dot_net_dot_grpc_dot_fedn__pb2.Response.SerializeToString, - ), - 'ReconnectClient': grpc.unary_unary_rpc_method_handler( - servicer.ReconnectClient, - request_deserializer=fedn_dot_common_dot_net_dot_grpc_dot_fedn__pb2.ReconnectRequest.FromString, - response_serializer=fedn_dot_common_dot_net_dot_grpc_dot_fedn__pb2.Response.SerializeToString, - ), + 'AllianceStatusStream': grpc.unary_stream_rpc_method_handler( + servicer.AllianceStatusStream, + request_deserializer=fedn_dot_common_dot_net_dot_grpc_dot_fedn__pb2.ClientAvailableMessage.FromString, + response_serializer=fedn_dot_common_dot_net_dot_grpc_dot_fedn__pb2.Status.SerializeToString, + ), + 'SendStatus': grpc.unary_unary_rpc_method_handler( + servicer.SendStatus, + request_deserializer=fedn_dot_common_dot_net_dot_grpc_dot_fedn__pb2.Status.FromString, + response_serializer=fedn_dot_common_dot_net_dot_grpc_dot_fedn__pb2.Response.SerializeToString, + ), + 'ListActiveClients': grpc.unary_unary_rpc_method_handler( + servicer.ListActiveClients, + request_deserializer=fedn_dot_common_dot_net_dot_grpc_dot_fedn__pb2.ListClientsRequest.FromString, + response_serializer=fedn_dot_common_dot_net_dot_grpc_dot_fedn__pb2.ClientList.SerializeToString, + ), + 'AcceptingClients': grpc.unary_unary_rpc_method_handler( + servicer.AcceptingClients, + request_deserializer=fedn_dot_common_dot_net_dot_grpc_dot_fedn__pb2.ConnectionRequest.FromString, + response_serializer=fedn_dot_common_dot_net_dot_grpc_dot_fedn__pb2.ConnectionResponse.SerializeToString, + ), + 'SendHeartbeat': grpc.unary_unary_rpc_method_handler( + servicer.SendHeartbeat, + request_deserializer=fedn_dot_common_dot_net_dot_grpc_dot_fedn__pb2.Heartbeat.FromString, + response_serializer=fedn_dot_common_dot_net_dot_grpc_dot_fedn__pb2.Response.SerializeToString, + ), + 'ReassignClient': grpc.unary_unary_rpc_method_handler( + servicer.ReassignClient, + request_deserializer=fedn_dot_common_dot_net_dot_grpc_dot_fedn__pb2.ReassignRequest.FromString, + response_serializer=fedn_dot_common_dot_net_dot_grpc_dot_fedn__pb2.Response.SerializeToString, + ), + 'ReconnectClient': grpc.unary_unary_rpc_method_handler( + servicer.ReconnectClient, + request_deserializer=fedn_dot_common_dot_net_dot_grpc_dot_fedn__pb2.ReconnectRequest.FromString, + response_serializer=fedn_dot_common_dot_net_dot_grpc_dot_fedn__pb2.Response.SerializeToString, + ), } generic_handler = grpc.method_handlers_generic_handler( - 'grpc.Connector', rpc_method_handlers) + 'grpc.Connector', rpc_method_handlers) server.add_generic_rpc_handlers((generic_handler,)) - # This class is part of an EXPERIMENTAL API. - + # This class is part of an EXPERIMENTAL API. class Connector(object): """Missing associated documentation comment in .proto file.""" @staticmethod def AllianceStatusStream(request, - target, - options=(), - channel_credentials=None, - call_credentials=None, - insecure=False, - compression=None, - wait_for_ready=None, - timeout=None, - metadata=None): + target, + options=(), + channel_credentials=None, + call_credentials=None, + insecure=False, + compression=None, + wait_for_ready=None, + timeout=None, + metadata=None): return grpc.experimental.unary_stream(request, target, '/grpc.Connector/AllianceStatusStream', - fedn_dot_common_dot_net_dot_grpc_dot_fedn__pb2.ClientAvailableMessage.SerializeToString, - fedn_dot_common_dot_net_dot_grpc_dot_fedn__pb2.Status.FromString, - options, channel_credentials, - insecure, call_credentials, compression, wait_for_ready, timeout, metadata) + fedn_dot_common_dot_net_dot_grpc_dot_fedn__pb2.ClientAvailableMessage.SerializeToString, + fedn_dot_common_dot_net_dot_grpc_dot_fedn__pb2.Status.FromString, + options, channel_credentials, + insecure, call_credentials, compression, wait_for_ready, timeout, metadata) @staticmethod def SendStatus(request, - target, - options=(), - channel_credentials=None, - call_credentials=None, - insecure=False, - compression=None, - wait_for_ready=None, - timeout=None, - metadata=None): + target, + options=(), + channel_credentials=None, + call_credentials=None, + insecure=False, + compression=None, + wait_for_ready=None, + timeout=None, + metadata=None): return grpc.experimental.unary_unary(request, target, '/grpc.Connector/SendStatus', - fedn_dot_common_dot_net_dot_grpc_dot_fedn__pb2.Status.SerializeToString, - fedn_dot_common_dot_net_dot_grpc_dot_fedn__pb2.Response.FromString, - options, channel_credentials, - insecure, call_credentials, compression, wait_for_ready, timeout, metadata) + fedn_dot_common_dot_net_dot_grpc_dot_fedn__pb2.Status.SerializeToString, + fedn_dot_common_dot_net_dot_grpc_dot_fedn__pb2.Response.FromString, + options, channel_credentials, + insecure, call_credentials, compression, wait_for_ready, timeout, metadata) @staticmethod def ListActiveClients(request, - target, - options=(), - channel_credentials=None, - call_credentials=None, - insecure=False, - compression=None, - wait_for_ready=None, - timeout=None, - metadata=None): + target, + options=(), + channel_credentials=None, + call_credentials=None, + insecure=False, + compression=None, + wait_for_ready=None, + timeout=None, + metadata=None): return grpc.experimental.unary_unary(request, target, '/grpc.Connector/ListActiveClients', - fedn_dot_common_dot_net_dot_grpc_dot_fedn__pb2.ListClientsRequest.SerializeToString, - fedn_dot_common_dot_net_dot_grpc_dot_fedn__pb2.ClientList.FromString, - options, channel_credentials, - insecure, call_credentials, compression, wait_for_ready, timeout, metadata) + fedn_dot_common_dot_net_dot_grpc_dot_fedn__pb2.ListClientsRequest.SerializeToString, + fedn_dot_common_dot_net_dot_grpc_dot_fedn__pb2.ClientList.FromString, + options, channel_credentials, + insecure, call_credentials, compression, wait_for_ready, timeout, metadata) @staticmethod def AcceptingClients(request, - target, - options=(), - channel_credentials=None, - call_credentials=None, - insecure=False, - compression=None, - wait_for_ready=None, - timeout=None, - metadata=None): + target, + options=(), + channel_credentials=None, + call_credentials=None, + insecure=False, + compression=None, + wait_for_ready=None, + timeout=None, + metadata=None): return grpc.experimental.unary_unary(request, target, '/grpc.Connector/AcceptingClients', - fedn_dot_common_dot_net_dot_grpc_dot_fedn__pb2.ConnectionRequest.SerializeToString, - fedn_dot_common_dot_net_dot_grpc_dot_fedn__pb2.ConnectionResponse.FromString, - options, channel_credentials, - insecure, call_credentials, compression, wait_for_ready, timeout, metadata) + fedn_dot_common_dot_net_dot_grpc_dot_fedn__pb2.ConnectionRequest.SerializeToString, + fedn_dot_common_dot_net_dot_grpc_dot_fedn__pb2.ConnectionResponse.FromString, + options, channel_credentials, + insecure, call_credentials, compression, wait_for_ready, timeout, metadata) @staticmethod def SendHeartbeat(request, - target, - options=(), - channel_credentials=None, - call_credentials=None, - insecure=False, - compression=None, - wait_for_ready=None, - timeout=None, - metadata=None): + target, + options=(), + channel_credentials=None, + call_credentials=None, + insecure=False, + compression=None, + wait_for_ready=None, + timeout=None, + metadata=None): return grpc.experimental.unary_unary(request, target, '/grpc.Connector/SendHeartbeat', - fedn_dot_common_dot_net_dot_grpc_dot_fedn__pb2.Heartbeat.SerializeToString, - fedn_dot_common_dot_net_dot_grpc_dot_fedn__pb2.Response.FromString, - options, channel_credentials, - insecure, call_credentials, compression, wait_for_ready, timeout, metadata) + fedn_dot_common_dot_net_dot_grpc_dot_fedn__pb2.Heartbeat.SerializeToString, + fedn_dot_common_dot_net_dot_grpc_dot_fedn__pb2.Response.FromString, + options, channel_credentials, + insecure, call_credentials, compression, wait_for_ready, timeout, metadata) @staticmethod def ReassignClient(request, - target, - options=(), - channel_credentials=None, - call_credentials=None, - insecure=False, - compression=None, - wait_for_ready=None, - timeout=None, - metadata=None): + target, + options=(), + channel_credentials=None, + call_credentials=None, + insecure=False, + compression=None, + wait_for_ready=None, + timeout=None, + metadata=None): return grpc.experimental.unary_unary(request, target, '/grpc.Connector/ReassignClient', - fedn_dot_common_dot_net_dot_grpc_dot_fedn__pb2.ReassignRequest.SerializeToString, - fedn_dot_common_dot_net_dot_grpc_dot_fedn__pb2.Response.FromString, - options, channel_credentials, - insecure, call_credentials, compression, wait_for_ready, timeout, metadata) + fedn_dot_common_dot_net_dot_grpc_dot_fedn__pb2.ReassignRequest.SerializeToString, + fedn_dot_common_dot_net_dot_grpc_dot_fedn__pb2.Response.FromString, + options, channel_credentials, + insecure, call_credentials, compression, wait_for_ready, timeout, metadata) @staticmethod def ReconnectClient(request, - target, - options=(), - channel_credentials=None, - call_credentials=None, - insecure=False, - compression=None, - wait_for_ready=None, - timeout=None, - metadata=None): + target, + options=(), + channel_credentials=None, + call_credentials=None, + insecure=False, + compression=None, + wait_for_ready=None, + timeout=None, + metadata=None): return grpc.experimental.unary_unary(request, target, '/grpc.Connector/ReconnectClient', - fedn_dot_common_dot_net_dot_grpc_dot_fedn__pb2.ReconnectRequest.SerializeToString, - fedn_dot_common_dot_net_dot_grpc_dot_fedn__pb2.Response.FromString, - options, channel_credentials, - insecure, call_credentials, compression, wait_for_ready, timeout, metadata) + fedn_dot_common_dot_net_dot_grpc_dot_fedn__pb2.ReconnectRequest.SerializeToString, + fedn_dot_common_dot_net_dot_grpc_dot_fedn__pb2.Response.FromString, + options, channel_credentials, + insecure, call_credentials, compression, wait_for_ready, timeout, metadata) class CombinerStub(object): @@ -599,45 +594,45 @@ def __init__(self, channel): channel: A grpc.Channel. """ self.ModelUpdateRequestStream = channel.unary_stream( - '/grpc.Combiner/ModelUpdateRequestStream', - request_serializer=fedn_dot_common_dot_net_dot_grpc_dot_fedn__pb2.ClientAvailableMessage.SerializeToString, - response_deserializer=fedn_dot_common_dot_net_dot_grpc_dot_fedn__pb2.ModelUpdateRequest.FromString, - ) + '/grpc.Combiner/ModelUpdateRequestStream', + request_serializer=fedn_dot_common_dot_net_dot_grpc_dot_fedn__pb2.ClientAvailableMessage.SerializeToString, + response_deserializer=fedn_dot_common_dot_net_dot_grpc_dot_fedn__pb2.ModelUpdateRequest.FromString, + ) self.ModelUpdateStream = channel.unary_stream( - '/grpc.Combiner/ModelUpdateStream', - request_serializer=fedn_dot_common_dot_net_dot_grpc_dot_fedn__pb2.ClientAvailableMessage.SerializeToString, - response_deserializer=fedn_dot_common_dot_net_dot_grpc_dot_fedn__pb2.ModelUpdate.FromString, - ) + '/grpc.Combiner/ModelUpdateStream', + request_serializer=fedn_dot_common_dot_net_dot_grpc_dot_fedn__pb2.ClientAvailableMessage.SerializeToString, + response_deserializer=fedn_dot_common_dot_net_dot_grpc_dot_fedn__pb2.ModelUpdate.FromString, + ) self.ModelValidationRequestStream = channel.unary_stream( - '/grpc.Combiner/ModelValidationRequestStream', - request_serializer=fedn_dot_common_dot_net_dot_grpc_dot_fedn__pb2.ClientAvailableMessage.SerializeToString, - response_deserializer=fedn_dot_common_dot_net_dot_grpc_dot_fedn__pb2.ModelValidationRequest.FromString, - ) + '/grpc.Combiner/ModelValidationRequestStream', + request_serializer=fedn_dot_common_dot_net_dot_grpc_dot_fedn__pb2.ClientAvailableMessage.SerializeToString, + response_deserializer=fedn_dot_common_dot_net_dot_grpc_dot_fedn__pb2.ModelValidationRequest.FromString, + ) self.ModelValidationStream = channel.unary_stream( - '/grpc.Combiner/ModelValidationStream', - request_serializer=fedn_dot_common_dot_net_dot_grpc_dot_fedn__pb2.ClientAvailableMessage.SerializeToString, - response_deserializer=fedn_dot_common_dot_net_dot_grpc_dot_fedn__pb2.ModelValidation.FromString, - ) + '/grpc.Combiner/ModelValidationStream', + request_serializer=fedn_dot_common_dot_net_dot_grpc_dot_fedn__pb2.ClientAvailableMessage.SerializeToString, + response_deserializer=fedn_dot_common_dot_net_dot_grpc_dot_fedn__pb2.ModelValidation.FromString, + ) self.SendModelUpdateRequest = channel.unary_unary( - '/grpc.Combiner/SendModelUpdateRequest', - request_serializer=fedn_dot_common_dot_net_dot_grpc_dot_fedn__pb2.ModelUpdateRequest.SerializeToString, - response_deserializer=fedn_dot_common_dot_net_dot_grpc_dot_fedn__pb2.Response.FromString, - ) + '/grpc.Combiner/SendModelUpdateRequest', + request_serializer=fedn_dot_common_dot_net_dot_grpc_dot_fedn__pb2.ModelUpdateRequest.SerializeToString, + response_deserializer=fedn_dot_common_dot_net_dot_grpc_dot_fedn__pb2.Response.FromString, + ) self.SendModelUpdate = channel.unary_unary( - '/grpc.Combiner/SendModelUpdate', - request_serializer=fedn_dot_common_dot_net_dot_grpc_dot_fedn__pb2.ModelUpdate.SerializeToString, - response_deserializer=fedn_dot_common_dot_net_dot_grpc_dot_fedn__pb2.Response.FromString, - ) + '/grpc.Combiner/SendModelUpdate', + request_serializer=fedn_dot_common_dot_net_dot_grpc_dot_fedn__pb2.ModelUpdate.SerializeToString, + response_deserializer=fedn_dot_common_dot_net_dot_grpc_dot_fedn__pb2.Response.FromString, + ) self.SendModelValidationRequest = channel.unary_unary( - '/grpc.Combiner/SendModelValidationRequest', - request_serializer=fedn_dot_common_dot_net_dot_grpc_dot_fedn__pb2.ModelValidationRequest.SerializeToString, - response_deserializer=fedn_dot_common_dot_net_dot_grpc_dot_fedn__pb2.Response.FromString, - ) + '/grpc.Combiner/SendModelValidationRequest', + request_serializer=fedn_dot_common_dot_net_dot_grpc_dot_fedn__pb2.ModelValidationRequest.SerializeToString, + response_deserializer=fedn_dot_common_dot_net_dot_grpc_dot_fedn__pb2.Response.FromString, + ) self.SendModelValidation = channel.unary_unary( - '/grpc.Combiner/SendModelValidation', - request_serializer=fedn_dot_common_dot_net_dot_grpc_dot_fedn__pb2.ModelValidation.SerializeToString, - response_deserializer=fedn_dot_common_dot_net_dot_grpc_dot_fedn__pb2.Response.FromString, - ) + '/grpc.Combiner/SendModelValidation', + request_serializer=fedn_dot_common_dot_net_dot_grpc_dot_fedn__pb2.ModelValidation.SerializeToString, + response_deserializer=fedn_dot_common_dot_net_dot_grpc_dot_fedn__pb2.Response.FromString, + ) class CombinerServicer(object): @@ -695,189 +690,188 @@ def SendModelValidation(self, request, context): def add_CombinerServicer_to_server(servicer, server): rpc_method_handlers = { - 'ModelUpdateRequestStream': grpc.unary_stream_rpc_method_handler( - servicer.ModelUpdateRequestStream, - request_deserializer=fedn_dot_common_dot_net_dot_grpc_dot_fedn__pb2.ClientAvailableMessage.FromString, - response_serializer=fedn_dot_common_dot_net_dot_grpc_dot_fedn__pb2.ModelUpdateRequest.SerializeToString, - ), - 'ModelUpdateStream': grpc.unary_stream_rpc_method_handler( - servicer.ModelUpdateStream, - request_deserializer=fedn_dot_common_dot_net_dot_grpc_dot_fedn__pb2.ClientAvailableMessage.FromString, - response_serializer=fedn_dot_common_dot_net_dot_grpc_dot_fedn__pb2.ModelUpdate.SerializeToString, - ), - 'ModelValidationRequestStream': grpc.unary_stream_rpc_method_handler( - servicer.ModelValidationRequestStream, - request_deserializer=fedn_dot_common_dot_net_dot_grpc_dot_fedn__pb2.ClientAvailableMessage.FromString, - response_serializer=fedn_dot_common_dot_net_dot_grpc_dot_fedn__pb2.ModelValidationRequest.SerializeToString, - ), - 'ModelValidationStream': grpc.unary_stream_rpc_method_handler( - servicer.ModelValidationStream, - request_deserializer=fedn_dot_common_dot_net_dot_grpc_dot_fedn__pb2.ClientAvailableMessage.FromString, - response_serializer=fedn_dot_common_dot_net_dot_grpc_dot_fedn__pb2.ModelValidation.SerializeToString, - ), - 'SendModelUpdateRequest': grpc.unary_unary_rpc_method_handler( - servicer.SendModelUpdateRequest, - request_deserializer=fedn_dot_common_dot_net_dot_grpc_dot_fedn__pb2.ModelUpdateRequest.FromString, - response_serializer=fedn_dot_common_dot_net_dot_grpc_dot_fedn__pb2.Response.SerializeToString, - ), - 'SendModelUpdate': grpc.unary_unary_rpc_method_handler( - servicer.SendModelUpdate, - request_deserializer=fedn_dot_common_dot_net_dot_grpc_dot_fedn__pb2.ModelUpdate.FromString, - response_serializer=fedn_dot_common_dot_net_dot_grpc_dot_fedn__pb2.Response.SerializeToString, - ), - 'SendModelValidationRequest': grpc.unary_unary_rpc_method_handler( - servicer.SendModelValidationRequest, - request_deserializer=fedn_dot_common_dot_net_dot_grpc_dot_fedn__pb2.ModelValidationRequest.FromString, - response_serializer=fedn_dot_common_dot_net_dot_grpc_dot_fedn__pb2.Response.SerializeToString, - ), - 'SendModelValidation': grpc.unary_unary_rpc_method_handler( - servicer.SendModelValidation, - request_deserializer=fedn_dot_common_dot_net_dot_grpc_dot_fedn__pb2.ModelValidation.FromString, - response_serializer=fedn_dot_common_dot_net_dot_grpc_dot_fedn__pb2.Response.SerializeToString, - ), + 'ModelUpdateRequestStream': grpc.unary_stream_rpc_method_handler( + servicer.ModelUpdateRequestStream, + request_deserializer=fedn_dot_common_dot_net_dot_grpc_dot_fedn__pb2.ClientAvailableMessage.FromString, + response_serializer=fedn_dot_common_dot_net_dot_grpc_dot_fedn__pb2.ModelUpdateRequest.SerializeToString, + ), + 'ModelUpdateStream': grpc.unary_stream_rpc_method_handler( + servicer.ModelUpdateStream, + request_deserializer=fedn_dot_common_dot_net_dot_grpc_dot_fedn__pb2.ClientAvailableMessage.FromString, + response_serializer=fedn_dot_common_dot_net_dot_grpc_dot_fedn__pb2.ModelUpdate.SerializeToString, + ), + 'ModelValidationRequestStream': grpc.unary_stream_rpc_method_handler( + servicer.ModelValidationRequestStream, + request_deserializer=fedn_dot_common_dot_net_dot_grpc_dot_fedn__pb2.ClientAvailableMessage.FromString, + response_serializer=fedn_dot_common_dot_net_dot_grpc_dot_fedn__pb2.ModelValidationRequest.SerializeToString, + ), + 'ModelValidationStream': grpc.unary_stream_rpc_method_handler( + servicer.ModelValidationStream, + request_deserializer=fedn_dot_common_dot_net_dot_grpc_dot_fedn__pb2.ClientAvailableMessage.FromString, + response_serializer=fedn_dot_common_dot_net_dot_grpc_dot_fedn__pb2.ModelValidation.SerializeToString, + ), + 'SendModelUpdateRequest': grpc.unary_unary_rpc_method_handler( + servicer.SendModelUpdateRequest, + request_deserializer=fedn_dot_common_dot_net_dot_grpc_dot_fedn__pb2.ModelUpdateRequest.FromString, + response_serializer=fedn_dot_common_dot_net_dot_grpc_dot_fedn__pb2.Response.SerializeToString, + ), + 'SendModelUpdate': grpc.unary_unary_rpc_method_handler( + servicer.SendModelUpdate, + request_deserializer=fedn_dot_common_dot_net_dot_grpc_dot_fedn__pb2.ModelUpdate.FromString, + response_serializer=fedn_dot_common_dot_net_dot_grpc_dot_fedn__pb2.Response.SerializeToString, + ), + 'SendModelValidationRequest': grpc.unary_unary_rpc_method_handler( + servicer.SendModelValidationRequest, + request_deserializer=fedn_dot_common_dot_net_dot_grpc_dot_fedn__pb2.ModelValidationRequest.FromString, + response_serializer=fedn_dot_common_dot_net_dot_grpc_dot_fedn__pb2.Response.SerializeToString, + ), + 'SendModelValidation': grpc.unary_unary_rpc_method_handler( + servicer.SendModelValidation, + request_deserializer=fedn_dot_common_dot_net_dot_grpc_dot_fedn__pb2.ModelValidation.FromString, + response_serializer=fedn_dot_common_dot_net_dot_grpc_dot_fedn__pb2.Response.SerializeToString, + ), } generic_handler = grpc.method_handlers_generic_handler( - 'grpc.Combiner', rpc_method_handlers) + 'grpc.Combiner', rpc_method_handlers) server.add_generic_rpc_handlers((generic_handler,)) - # This class is part of an EXPERIMENTAL API. - + # This class is part of an EXPERIMENTAL API. class Combiner(object): """Missing associated documentation comment in .proto file.""" @staticmethod def ModelUpdateRequestStream(request, - target, - options=(), - channel_credentials=None, - call_credentials=None, - insecure=False, - compression=None, - wait_for_ready=None, - timeout=None, - metadata=None): + target, + options=(), + channel_credentials=None, + call_credentials=None, + insecure=False, + compression=None, + wait_for_ready=None, + timeout=None, + metadata=None): return grpc.experimental.unary_stream(request, target, '/grpc.Combiner/ModelUpdateRequestStream', - fedn_dot_common_dot_net_dot_grpc_dot_fedn__pb2.ClientAvailableMessage.SerializeToString, - fedn_dot_common_dot_net_dot_grpc_dot_fedn__pb2.ModelUpdateRequest.FromString, - options, channel_credentials, - insecure, call_credentials, compression, wait_for_ready, timeout, metadata) + fedn_dot_common_dot_net_dot_grpc_dot_fedn__pb2.ClientAvailableMessage.SerializeToString, + fedn_dot_common_dot_net_dot_grpc_dot_fedn__pb2.ModelUpdateRequest.FromString, + options, channel_credentials, + insecure, call_credentials, compression, wait_for_ready, timeout, metadata) @staticmethod def ModelUpdateStream(request, - target, - options=(), - channel_credentials=None, - call_credentials=None, - insecure=False, - compression=None, - wait_for_ready=None, - timeout=None, - metadata=None): + target, + options=(), + channel_credentials=None, + call_credentials=None, + insecure=False, + compression=None, + wait_for_ready=None, + timeout=None, + metadata=None): return grpc.experimental.unary_stream(request, target, '/grpc.Combiner/ModelUpdateStream', - fedn_dot_common_dot_net_dot_grpc_dot_fedn__pb2.ClientAvailableMessage.SerializeToString, - fedn_dot_common_dot_net_dot_grpc_dot_fedn__pb2.ModelUpdate.FromString, - options, channel_credentials, - insecure, call_credentials, compression, wait_for_ready, timeout, metadata) + fedn_dot_common_dot_net_dot_grpc_dot_fedn__pb2.ClientAvailableMessage.SerializeToString, + fedn_dot_common_dot_net_dot_grpc_dot_fedn__pb2.ModelUpdate.FromString, + options, channel_credentials, + insecure, call_credentials, compression, wait_for_ready, timeout, metadata) @staticmethod def ModelValidationRequestStream(request, - target, - options=(), - channel_credentials=None, - call_credentials=None, - insecure=False, - compression=None, - wait_for_ready=None, - timeout=None, - metadata=None): + target, + options=(), + channel_credentials=None, + call_credentials=None, + insecure=False, + compression=None, + wait_for_ready=None, + timeout=None, + metadata=None): return grpc.experimental.unary_stream(request, target, '/grpc.Combiner/ModelValidationRequestStream', - fedn_dot_common_dot_net_dot_grpc_dot_fedn__pb2.ClientAvailableMessage.SerializeToString, - fedn_dot_common_dot_net_dot_grpc_dot_fedn__pb2.ModelValidationRequest.FromString, - options, channel_credentials, - insecure, call_credentials, compression, wait_for_ready, timeout, metadata) + fedn_dot_common_dot_net_dot_grpc_dot_fedn__pb2.ClientAvailableMessage.SerializeToString, + fedn_dot_common_dot_net_dot_grpc_dot_fedn__pb2.ModelValidationRequest.FromString, + options, channel_credentials, + insecure, call_credentials, compression, wait_for_ready, timeout, metadata) @staticmethod def ModelValidationStream(request, - target, - options=(), - channel_credentials=None, - call_credentials=None, - insecure=False, - compression=None, - wait_for_ready=None, - timeout=None, - metadata=None): + target, + options=(), + channel_credentials=None, + call_credentials=None, + insecure=False, + compression=None, + wait_for_ready=None, + timeout=None, + metadata=None): return grpc.experimental.unary_stream(request, target, '/grpc.Combiner/ModelValidationStream', - fedn_dot_common_dot_net_dot_grpc_dot_fedn__pb2.ClientAvailableMessage.SerializeToString, - fedn_dot_common_dot_net_dot_grpc_dot_fedn__pb2.ModelValidation.FromString, - options, channel_credentials, - insecure, call_credentials, compression, wait_for_ready, timeout, metadata) + fedn_dot_common_dot_net_dot_grpc_dot_fedn__pb2.ClientAvailableMessage.SerializeToString, + fedn_dot_common_dot_net_dot_grpc_dot_fedn__pb2.ModelValidation.FromString, + options, channel_credentials, + insecure, call_credentials, compression, wait_for_ready, timeout, metadata) @staticmethod def SendModelUpdateRequest(request, - target, - options=(), - channel_credentials=None, - call_credentials=None, - insecure=False, - compression=None, - wait_for_ready=None, - timeout=None, - metadata=None): + target, + options=(), + channel_credentials=None, + call_credentials=None, + insecure=False, + compression=None, + wait_for_ready=None, + timeout=None, + metadata=None): return grpc.experimental.unary_unary(request, target, '/grpc.Combiner/SendModelUpdateRequest', - fedn_dot_common_dot_net_dot_grpc_dot_fedn__pb2.ModelUpdateRequest.SerializeToString, - fedn_dot_common_dot_net_dot_grpc_dot_fedn__pb2.Response.FromString, - options, channel_credentials, - insecure, call_credentials, compression, wait_for_ready, timeout, metadata) + fedn_dot_common_dot_net_dot_grpc_dot_fedn__pb2.ModelUpdateRequest.SerializeToString, + fedn_dot_common_dot_net_dot_grpc_dot_fedn__pb2.Response.FromString, + options, channel_credentials, + insecure, call_credentials, compression, wait_for_ready, timeout, metadata) @staticmethod def SendModelUpdate(request, - target, - options=(), - channel_credentials=None, - call_credentials=None, - insecure=False, - compression=None, - wait_for_ready=None, - timeout=None, - metadata=None): + target, + options=(), + channel_credentials=None, + call_credentials=None, + insecure=False, + compression=None, + wait_for_ready=None, + timeout=None, + metadata=None): return grpc.experimental.unary_unary(request, target, '/grpc.Combiner/SendModelUpdate', - fedn_dot_common_dot_net_dot_grpc_dot_fedn__pb2.ModelUpdate.SerializeToString, - fedn_dot_common_dot_net_dot_grpc_dot_fedn__pb2.Response.FromString, - options, channel_credentials, - insecure, call_credentials, compression, wait_for_ready, timeout, metadata) + fedn_dot_common_dot_net_dot_grpc_dot_fedn__pb2.ModelUpdate.SerializeToString, + fedn_dot_common_dot_net_dot_grpc_dot_fedn__pb2.Response.FromString, + options, channel_credentials, + insecure, call_credentials, compression, wait_for_ready, timeout, metadata) @staticmethod def SendModelValidationRequest(request, - target, - options=(), - channel_credentials=None, - call_credentials=None, - insecure=False, - compression=None, - wait_for_ready=None, - timeout=None, - metadata=None): + target, + options=(), + channel_credentials=None, + call_credentials=None, + insecure=False, + compression=None, + wait_for_ready=None, + timeout=None, + metadata=None): return grpc.experimental.unary_unary(request, target, '/grpc.Combiner/SendModelValidationRequest', - fedn_dot_common_dot_net_dot_grpc_dot_fedn__pb2.ModelValidationRequest.SerializeToString, - fedn_dot_common_dot_net_dot_grpc_dot_fedn__pb2.Response.FromString, - options, channel_credentials, - insecure, call_credentials, compression, wait_for_ready, timeout, metadata) + fedn_dot_common_dot_net_dot_grpc_dot_fedn__pb2.ModelValidationRequest.SerializeToString, + fedn_dot_common_dot_net_dot_grpc_dot_fedn__pb2.Response.FromString, + options, channel_credentials, + insecure, call_credentials, compression, wait_for_ready, timeout, metadata) @staticmethod def SendModelValidation(request, - target, - options=(), - channel_credentials=None, - call_credentials=None, - insecure=False, - compression=None, - wait_for_ready=None, - timeout=None, - metadata=None): + target, + options=(), + channel_credentials=None, + call_credentials=None, + insecure=False, + compression=None, + wait_for_ready=None, + timeout=None, + metadata=None): return grpc.experimental.unary_unary(request, target, '/grpc.Combiner/SendModelValidation', - fedn_dot_common_dot_net_dot_grpc_dot_fedn__pb2.ModelValidation.SerializeToString, - fedn_dot_common_dot_net_dot_grpc_dot_fedn__pb2.Response.FromString, - options, channel_credentials, - insecure, call_credentials, compression, wait_for_ready, timeout, metadata) + fedn_dot_common_dot_net_dot_grpc_dot_fedn__pb2.ModelValidation.SerializeToString, + fedn_dot_common_dot_net_dot_grpc_dot_fedn__pb2.Response.FromString, + options, channel_credentials, + insecure, call_credentials, compression, wait_for_ready, timeout, metadata) From 77a0dd82da9c922da4e06f7b14dd479ffe39454b Mon Sep 17 00:00:00 2001 From: mcapuccini Date: Fri, 3 Jun 2022 12:26:04 +0000 Subject: [PATCH 018/185] improve entrypoint --- examples/mnist-keras/client/entrypoint | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/examples/mnist-keras/client/entrypoint b/examples/mnist-keras/client/entrypoint index b12e434db..ab631191d 100755 --- a/examples/mnist-keras/client/entrypoint +++ b/examples/mnist-keras/client/entrypoint @@ -131,10 +131,7 @@ def infer(in_model_path, out_json_path, data_path=None): # Save JSON with open(out_json_path, "w") as fh: - fh.write(json.dumps(y_pred.tolist())) - - # Print to stdout TODO:remove - print(json.dumps(y_pred[:10].tolist())) + fh.write(json.dumps({'predictions': y_pred.tolist()})) if __name__ == '__main__': From d11fa57e946d639227f9ee2f58033abef34a09b3 Mon Sep 17 00:00:00 2001 From: mcapuccini Date: Fri, 3 Jun 2022 12:29:34 +0000 Subject: [PATCH 019/185] fix sorting --- examples/mnist-keras/client/entrypoint | 1 + fedn/fedn/clients/reducer/restservice.py | 7 +- fedn/fedn/common/net/grpc/fedn_pb2.py | 3240 ++++++++++---------- fedn/fedn/common/net/grpc/fedn_pb2_grpc.py | 996 +++--- 4 files changed, 2125 insertions(+), 2119 deletions(-) diff --git a/examples/mnist-keras/client/entrypoint b/examples/mnist-keras/client/entrypoint index ab631191d..2c117c82f 100755 --- a/examples/mnist-keras/client/entrypoint +++ b/examples/mnist-keras/client/entrypoint @@ -6,6 +6,7 @@ import docker import fire import numpy as np import tensorflow as tf + from fedn.utils.kerashelper import KerasHelper NUM_CLASSES = 10 diff --git a/fedn/fedn/clients/reducer/restservice.py b/fedn/fedn/clients/reducer/restservice.py index 12857abd9..3d9eaf749 100644 --- a/fedn/fedn/clients/reducer/restservice.py +++ b/fedn/fedn/clients/reducer/restservice.py @@ -14,15 +14,16 @@ import pandas as pd import plotly import plotly.express as px -from fedn.clients.reducer.interfaces import CombinerInterface -from fedn.clients.reducer.plots import Plot -from fedn.clients.reducer.state import ReducerState, ReducerStateToString from flask import (Flask, abort, flash, jsonify, make_response, redirect, render_template, request, url_for) from idna import check_initial_combiner from tenacity import retry from werkzeug.utils import secure_filename +from fedn.clients.reducer.interfaces import CombinerInterface +from fedn.clients.reducer.plots import Plot +from fedn.clients.reducer.state import ReducerState, ReducerStateToString + UPLOAD_FOLDER = '/app/client/package/' ALLOWED_EXTENSIONS = {'gz', 'bz2', 'tar', 'zip', 'tgz'} diff --git a/fedn/fedn/common/net/grpc/fedn_pb2.py b/fedn/fedn/common/net/grpc/fedn_pb2.py index 0cf9ae642..06a8da219 100644 --- a/fedn/fedn/common/net/grpc/fedn_pb2.py +++ b/fedn/fedn/common/net/grpc/fedn_pb2.py @@ -2,264 +2,263 @@ # Generated by the protocol buffer compiler. DO NOT EDIT! # source: fedn/common/net/grpc/fedn.proto """Generated protocol buffer code.""" -from google.protobuf.internal import enum_type_wrapper from google.protobuf import descriptor as _descriptor from google.protobuf import message as _message from google.protobuf import reflection as _reflection from google.protobuf import symbol_database as _symbol_database +from google.protobuf.internal import enum_type_wrapper + # @@protoc_insertion_point(imports) _sym_db = _symbol_database.Default() - - DESCRIPTOR = _descriptor.FileDescriptor( - name='fedn/common/net/grpc/fedn.proto', - package='grpc', - syntax='proto3', - serialized_options=None, - create_key=_descriptor._internal_create_key, - serialized_pb=b'\n\x1f\x66\x65\x64n/common/net/grpc/fedn.proto\x12\x04grpc\":\n\x08Response\x12\x1c\n\x06sender\x18\x01 \x01(\x0b\x32\x0c.grpc.Client\x12\x10\n\x08response\x18\x02 \x01(\t\"\x8c\x02\n\x06Status\x12\x1c\n\x06sender\x18\x01 \x01(\x0b\x32\x0c.grpc.Client\x12\x0e\n\x06status\x18\x02 \x01(\t\x12(\n\tlog_level\x18\x03 \x01(\x0e\x32\x15.grpc.Status.LogLevel\x12\x0c\n\x04\x64\x61ta\x18\x04 \x01(\t\x12\x16\n\x0e\x63orrelation_id\x18\x05 \x01(\t\x12\x11\n\ttimestamp\x18\x06 \x01(\t\x12\x1e\n\x04type\x18\x07 \x01(\x0e\x32\x10.grpc.StatusType\x12\r\n\x05\x65xtra\x18\x08 \x01(\t\"B\n\x08LogLevel\x12\x08\n\x04INFO\x10\x00\x12\t\n\x05\x44\x45\x42UG\x10\x01\x12\x0b\n\x07WARNING\x10\x02\x12\t\n\x05\x45RROR\x10\x03\x12\t\n\x05\x41UDIT\x10\x04\"\x9d\x01\n\x12ModelUpdateRequest\x12\x1c\n\x06sender\x18\x01 \x01(\x0b\x32\x0c.grpc.Client\x12\x1e\n\x08receiver\x18\x02 \x01(\x0b\x32\x0c.grpc.Client\x12\x10\n\x08model_id\x18\x03 \x01(\t\x12\x0c\n\x04\x64\x61ta\x18\x04 \x01(\t\x12\x16\n\x0e\x63orrelation_id\x18\x05 \x01(\t\x12\x11\n\ttimestamp\x18\x06 \x01(\t\"\xaf\x01\n\x0bModelUpdate\x12\x1c\n\x06sender\x18\x01 \x01(\x0b\x32\x0c.grpc.Client\x12\x1e\n\x08receiver\x18\x02 \x01(\x0b\x32\x0c.grpc.Client\x12\x10\n\x08model_id\x18\x03 \x01(\t\x12\x17\n\x0fmodel_update_id\x18\x04 \x01(\t\x12\x16\n\x0e\x63orrelation_id\x18\x05 \x01(\t\x12\x11\n\ttimestamp\x18\x06 \x01(\t\x12\x0c\n\x04meta\x18\x07 \x01(\t\"\xb7\x01\n\x16ModelValidationRequest\x12\x1c\n\x06sender\x18\x01 \x01(\x0b\x32\x0c.grpc.Client\x12\x1e\n\x08receiver\x18\x02 \x01(\x0b\x32\x0c.grpc.Client\x12\x10\n\x08model_id\x18\x03 \x01(\t\x12\x0c\n\x04\x64\x61ta\x18\x04 \x01(\t\x12\x16\n\x0e\x63orrelation_id\x18\x05 \x01(\t\x12\x11\n\ttimestamp\x18\x06 \x01(\t\x12\x14\n\x0cis_inference\x18\x07 \x01(\x08\"\xa8\x01\n\x0fModelValidation\x12\x1c\n\x06sender\x18\x01 \x01(\x0b\x32\x0c.grpc.Client\x12\x1e\n\x08receiver\x18\x02 \x01(\x0b\x32\x0c.grpc.Client\x12\x10\n\x08model_id\x18\x03 \x01(\t\x12\x0c\n\x04\x64\x61ta\x18\x04 \x01(\t\x12\x16\n\x0e\x63orrelation_id\x18\x05 \x01(\t\x12\x11\n\ttimestamp\x18\x06 \x01(\t\x12\x0c\n\x04meta\x18\x07 \x01(\t\"\x89\x01\n\x0cModelRequest\x12\x1c\n\x06sender\x18\x01 \x01(\x0b\x32\x0c.grpc.Client\x12\x1e\n\x08receiver\x18\x02 \x01(\x0b\x32\x0c.grpc.Client\x12\x0c\n\x04\x64\x61ta\x18\x03 \x01(\x0c\x12\n\n\x02id\x18\x04 \x01(\t\x12!\n\x06status\x18\x05 \x01(\x0e\x32\x11.grpc.ModelStatus\"]\n\rModelResponse\x12\x0c\n\x04\x64\x61ta\x18\x01 \x01(\x0c\x12\n\n\x02id\x18\x02 \x01(\t\x12!\n\x06status\x18\x03 \x01(\x0e\x32\x11.grpc.ModelStatus\x12\x0f\n\x07message\x18\x04 \x01(\t\"U\n\x15GetGlobalModelRequest\x12\x1c\n\x06sender\x18\x01 \x01(\x0b\x32\x0c.grpc.Client\x12\x1e\n\x08receiver\x18\x02 \x01(\x0b\x32\x0c.grpc.Client\"h\n\x16GetGlobalModelResponse\x12\x1c\n\x06sender\x18\x01 \x01(\x0b\x32\x0c.grpc.Client\x12\x1e\n\x08receiver\x18\x02 \x01(\x0b\x32\x0c.grpc.Client\x12\x10\n\x08model_id\x18\x03 \x01(\t\")\n\tHeartbeat\x12\x1c\n\x06sender\x18\x01 \x01(\x0b\x32\x0c.grpc.Client\"W\n\x16\x43lientAvailableMessage\x12\x1c\n\x06sender\x18\x01 \x01(\x0b\x32\x0c.grpc.Client\x12\x0c\n\x04\x64\x61ta\x18\x02 \x01(\t\x12\x11\n\ttimestamp\x18\x03 \x01(\t\"R\n\x12ListClientsRequest\x12\x1c\n\x06sender\x18\x01 \x01(\x0b\x32\x0c.grpc.Client\x12\x1e\n\x07\x63hannel\x18\x02 \x01(\x0e\x32\r.grpc.Channel\"*\n\nClientList\x12\x1c\n\x06\x63lient\x18\x01 \x03(\x0b\x32\x0c.grpc.Client\"0\n\x06\x43lient\x12\x18\n\x04role\x18\x01 \x01(\x0e\x32\n.grpc.Role\x12\x0c\n\x04name\x18\x02 \x01(\t\"m\n\x0fReassignRequest\x12\x1c\n\x06sender\x18\x01 \x01(\x0b\x32\x0c.grpc.Client\x12\x1e\n\x08receiver\x18\x02 \x01(\x0b\x32\x0c.grpc.Client\x12\x0e\n\x06server\x18\x03 \x01(\t\x12\x0c\n\x04port\x18\x04 \x01(\r\"c\n\x10ReconnectRequest\x12\x1c\n\x06sender\x18\x01 \x01(\x0b\x32\x0c.grpc.Client\x12\x1e\n\x08receiver\x18\x02 \x01(\x0b\x32\x0c.grpc.Client\x12\x11\n\treconnect\x18\x03 \x01(\r\"\'\n\tParameter\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\r\n\x05value\x18\x02 \x01(\t\"T\n\x0e\x43ontrolRequest\x12\x1e\n\x07\x63ommand\x18\x01 \x01(\x0e\x32\r.grpc.Command\x12\"\n\tparameter\x18\x02 \x03(\x0b\x32\x0f.grpc.Parameter\"F\n\x0f\x43ontrolResponse\x12\x0f\n\x07message\x18\x01 \x01(\t\x12\"\n\tparameter\x18\x02 \x03(\x0b\x32\x0f.grpc.Parameter\"R\n\x0eReportResponse\x12\x1c\n\x06sender\x18\x01 \x01(\x0b\x32\x0c.grpc.Client\x12\"\n\tparameter\x18\x02 \x03(\x0b\x32\x0f.grpc.Parameter\"\x13\n\x11\x43onnectionRequest\"<\n\x12\x43onnectionResponse\x12&\n\x06status\x18\x01 \x01(\x0e\x32\x16.grpc.ConnectionStatus*\x84\x01\n\nStatusType\x12\x07\n\x03LOG\x10\x00\x12\x18\n\x14MODEL_UPDATE_REQUEST\x10\x01\x12\x10\n\x0cMODEL_UPDATE\x10\x02\x12\x1c\n\x18MODEL_VALIDATION_REQUEST\x10\x03\x12\x14\n\x10MODEL_VALIDATION\x10\x04\x12\r\n\tINFERENCE\x10\x05*\x86\x01\n\x07\x43hannel\x12\x0b\n\x07\x44\x45\x46\x41ULT\x10\x00\x12\x19\n\x15MODEL_UPDATE_REQUESTS\x10\x01\x12\x11\n\rMODEL_UPDATES\x10\x02\x12\x1d\n\x19MODEL_VALIDATION_REQUESTS\x10\x03\x12\x15\n\x11MODEL_VALIDATIONS\x10\x04\x12\n\n\x06STATUS\x10\x05*F\n\x0bModelStatus\x12\x06\n\x02OK\x10\x00\x12\x0f\n\x0bIN_PROGRESS\x10\x01\x12\x12\n\x0eIN_PROGRESS_OK\x10\x02\x12\n\n\x06\x46\x41ILED\x10\x03*8\n\x04Role\x12\n\n\x06WORKER\x10\x00\x12\x0c\n\x08\x43OMBINER\x10\x01\x12\x0b\n\x07REDUCER\x10\x02\x12\t\n\x05OTHER\x10\x03*J\n\x07\x43ommand\x12\x08\n\x04IDLE\x10\x00\x12\t\n\x05START\x10\x01\x12\t\n\x05PAUSE\x10\x02\x12\x08\n\x04STOP\x10\x03\x12\t\n\x05RESET\x10\x04\x12\n\n\x06REPORT\x10\x05*I\n\x10\x43onnectionStatus\x12\x11\n\rNOT_ACCEPTING\x10\x00\x12\r\n\tACCEPTING\x10\x01\x12\x13\n\x0fTRY_AGAIN_LATER\x10\x02\x32z\n\x0cModelService\x12\x33\n\x06Upload\x12\x12.grpc.ModelRequest\x1a\x13.grpc.ModelResponse(\x01\x12\x35\n\x08\x44ownload\x12\x12.grpc.ModelRequest\x1a\x13.grpc.ModelResponse0\x01\x32\xe3\x01\n\x07\x43ontrol\x12\x34\n\x05Start\x12\x14.grpc.ControlRequest\x1a\x15.grpc.ControlResponse\x12\x33\n\x04Stop\x12\x14.grpc.ControlRequest\x1a\x15.grpc.ControlResponse\x12\x37\n\tConfigure\x12\x14.grpc.ControlRequest\x1a\x14.grpc.ReportResponse\x12\x34\n\x06Report\x12\x14.grpc.ControlRequest\x1a\x14.grpc.ReportResponse2V\n\x07Reducer\x12K\n\x0eGetGlobalModel\x12\x1b.grpc.GetGlobalModelRequest\x1a\x1c.grpc.GetGlobalModelResponse2\xab\x03\n\tConnector\x12\x44\n\x14\x41llianceStatusStream\x12\x1c.grpc.ClientAvailableMessage\x1a\x0c.grpc.Status0\x01\x12*\n\nSendStatus\x12\x0c.grpc.Status\x1a\x0e.grpc.Response\x12?\n\x11ListActiveClients\x12\x18.grpc.ListClientsRequest\x1a\x10.grpc.ClientList\x12\x45\n\x10\x41\x63\x63\x65ptingClients\x12\x17.grpc.ConnectionRequest\x1a\x18.grpc.ConnectionResponse\x12\x30\n\rSendHeartbeat\x12\x0f.grpc.Heartbeat\x1a\x0e.grpc.Response\x12\x37\n\x0eReassignClient\x12\x15.grpc.ReassignRequest\x1a\x0e.grpc.Response\x12\x39\n\x0fReconnectClient\x12\x16.grpc.ReconnectRequest\x1a\x0e.grpc.Response2\xda\x04\n\x08\x43ombiner\x12T\n\x18ModelUpdateRequestStream\x12\x1c.grpc.ClientAvailableMessage\x1a\x18.grpc.ModelUpdateRequest0\x01\x12\x46\n\x11ModelUpdateStream\x12\x1c.grpc.ClientAvailableMessage\x1a\x11.grpc.ModelUpdate0\x01\x12\\\n\x1cModelValidationRequestStream\x12\x1c.grpc.ClientAvailableMessage\x1a\x1c.grpc.ModelValidationRequest0\x01\x12N\n\x15ModelValidationStream\x12\x1c.grpc.ClientAvailableMessage\x1a\x15.grpc.ModelValidation0\x01\x12\x42\n\x16SendModelUpdateRequest\x12\x18.grpc.ModelUpdateRequest\x1a\x0e.grpc.Response\x12\x34\n\x0fSendModelUpdate\x12\x11.grpc.ModelUpdate\x1a\x0e.grpc.Response\x12J\n\x1aSendModelValidationRequest\x12\x1c.grpc.ModelValidationRequest\x1a\x0e.grpc.Response\x12<\n\x13SendModelValidation\x12\x15.grpc.ModelValidation\x1a\x0e.grpc.Responseb\x06proto3' + name='fedn/common/net/grpc/fedn.proto', + package='grpc', + syntax='proto3', + serialized_options=None, + create_key=_descriptor._internal_create_key, + serialized_pb=b'\n\x1f\x66\x65\x64n/common/net/grpc/fedn.proto\x12\x04grpc\":\n\x08Response\x12\x1c\n\x06sender\x18\x01 \x01(\x0b\x32\x0c.grpc.Client\x12\x10\n\x08response\x18\x02 \x01(\t\"\x8c\x02\n\x06Status\x12\x1c\n\x06sender\x18\x01 \x01(\x0b\x32\x0c.grpc.Client\x12\x0e\n\x06status\x18\x02 \x01(\t\x12(\n\tlog_level\x18\x03 \x01(\x0e\x32\x15.grpc.Status.LogLevel\x12\x0c\n\x04\x64\x61ta\x18\x04 \x01(\t\x12\x16\n\x0e\x63orrelation_id\x18\x05 \x01(\t\x12\x11\n\ttimestamp\x18\x06 \x01(\t\x12\x1e\n\x04type\x18\x07 \x01(\x0e\x32\x10.grpc.StatusType\x12\r\n\x05\x65xtra\x18\x08 \x01(\t\"B\n\x08LogLevel\x12\x08\n\x04INFO\x10\x00\x12\t\n\x05\x44\x45\x42UG\x10\x01\x12\x0b\n\x07WARNING\x10\x02\x12\t\n\x05\x45RROR\x10\x03\x12\t\n\x05\x41UDIT\x10\x04\"\x9d\x01\n\x12ModelUpdateRequest\x12\x1c\n\x06sender\x18\x01 \x01(\x0b\x32\x0c.grpc.Client\x12\x1e\n\x08receiver\x18\x02 \x01(\x0b\x32\x0c.grpc.Client\x12\x10\n\x08model_id\x18\x03 \x01(\t\x12\x0c\n\x04\x64\x61ta\x18\x04 \x01(\t\x12\x16\n\x0e\x63orrelation_id\x18\x05 \x01(\t\x12\x11\n\ttimestamp\x18\x06 \x01(\t\"\xaf\x01\n\x0bModelUpdate\x12\x1c\n\x06sender\x18\x01 \x01(\x0b\x32\x0c.grpc.Client\x12\x1e\n\x08receiver\x18\x02 \x01(\x0b\x32\x0c.grpc.Client\x12\x10\n\x08model_id\x18\x03 \x01(\t\x12\x17\n\x0fmodel_update_id\x18\x04 \x01(\t\x12\x16\n\x0e\x63orrelation_id\x18\x05 \x01(\t\x12\x11\n\ttimestamp\x18\x06 \x01(\t\x12\x0c\n\x04meta\x18\x07 \x01(\t\"\xb7\x01\n\x16ModelValidationRequest\x12\x1c\n\x06sender\x18\x01 \x01(\x0b\x32\x0c.grpc.Client\x12\x1e\n\x08receiver\x18\x02 \x01(\x0b\x32\x0c.grpc.Client\x12\x10\n\x08model_id\x18\x03 \x01(\t\x12\x0c\n\x04\x64\x61ta\x18\x04 \x01(\t\x12\x16\n\x0e\x63orrelation_id\x18\x05 \x01(\t\x12\x11\n\ttimestamp\x18\x06 \x01(\t\x12\x14\n\x0cis_inference\x18\x07 \x01(\x08\"\xa8\x01\n\x0fModelValidation\x12\x1c\n\x06sender\x18\x01 \x01(\x0b\x32\x0c.grpc.Client\x12\x1e\n\x08receiver\x18\x02 \x01(\x0b\x32\x0c.grpc.Client\x12\x10\n\x08model_id\x18\x03 \x01(\t\x12\x0c\n\x04\x64\x61ta\x18\x04 \x01(\t\x12\x16\n\x0e\x63orrelation_id\x18\x05 \x01(\t\x12\x11\n\ttimestamp\x18\x06 \x01(\t\x12\x0c\n\x04meta\x18\x07 \x01(\t\"\x89\x01\n\x0cModelRequest\x12\x1c\n\x06sender\x18\x01 \x01(\x0b\x32\x0c.grpc.Client\x12\x1e\n\x08receiver\x18\x02 \x01(\x0b\x32\x0c.grpc.Client\x12\x0c\n\x04\x64\x61ta\x18\x03 \x01(\x0c\x12\n\n\x02id\x18\x04 \x01(\t\x12!\n\x06status\x18\x05 \x01(\x0e\x32\x11.grpc.ModelStatus\"]\n\rModelResponse\x12\x0c\n\x04\x64\x61ta\x18\x01 \x01(\x0c\x12\n\n\x02id\x18\x02 \x01(\t\x12!\n\x06status\x18\x03 \x01(\x0e\x32\x11.grpc.ModelStatus\x12\x0f\n\x07message\x18\x04 \x01(\t\"U\n\x15GetGlobalModelRequest\x12\x1c\n\x06sender\x18\x01 \x01(\x0b\x32\x0c.grpc.Client\x12\x1e\n\x08receiver\x18\x02 \x01(\x0b\x32\x0c.grpc.Client\"h\n\x16GetGlobalModelResponse\x12\x1c\n\x06sender\x18\x01 \x01(\x0b\x32\x0c.grpc.Client\x12\x1e\n\x08receiver\x18\x02 \x01(\x0b\x32\x0c.grpc.Client\x12\x10\n\x08model_id\x18\x03 \x01(\t\")\n\tHeartbeat\x12\x1c\n\x06sender\x18\x01 \x01(\x0b\x32\x0c.grpc.Client\"W\n\x16\x43lientAvailableMessage\x12\x1c\n\x06sender\x18\x01 \x01(\x0b\x32\x0c.grpc.Client\x12\x0c\n\x04\x64\x61ta\x18\x02 \x01(\t\x12\x11\n\ttimestamp\x18\x03 \x01(\t\"R\n\x12ListClientsRequest\x12\x1c\n\x06sender\x18\x01 \x01(\x0b\x32\x0c.grpc.Client\x12\x1e\n\x07\x63hannel\x18\x02 \x01(\x0e\x32\r.grpc.Channel\"*\n\nClientList\x12\x1c\n\x06\x63lient\x18\x01 \x03(\x0b\x32\x0c.grpc.Client\"0\n\x06\x43lient\x12\x18\n\x04role\x18\x01 \x01(\x0e\x32\n.grpc.Role\x12\x0c\n\x04name\x18\x02 \x01(\t\"m\n\x0fReassignRequest\x12\x1c\n\x06sender\x18\x01 \x01(\x0b\x32\x0c.grpc.Client\x12\x1e\n\x08receiver\x18\x02 \x01(\x0b\x32\x0c.grpc.Client\x12\x0e\n\x06server\x18\x03 \x01(\t\x12\x0c\n\x04port\x18\x04 \x01(\r\"c\n\x10ReconnectRequest\x12\x1c\n\x06sender\x18\x01 \x01(\x0b\x32\x0c.grpc.Client\x12\x1e\n\x08receiver\x18\x02 \x01(\x0b\x32\x0c.grpc.Client\x12\x11\n\treconnect\x18\x03 \x01(\r\"\'\n\tParameter\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\r\n\x05value\x18\x02 \x01(\t\"T\n\x0e\x43ontrolRequest\x12\x1e\n\x07\x63ommand\x18\x01 \x01(\x0e\x32\r.grpc.Command\x12\"\n\tparameter\x18\x02 \x03(\x0b\x32\x0f.grpc.Parameter\"F\n\x0f\x43ontrolResponse\x12\x0f\n\x07message\x18\x01 \x01(\t\x12\"\n\tparameter\x18\x02 \x03(\x0b\x32\x0f.grpc.Parameter\"R\n\x0eReportResponse\x12\x1c\n\x06sender\x18\x01 \x01(\x0b\x32\x0c.grpc.Client\x12\"\n\tparameter\x18\x02 \x03(\x0b\x32\x0f.grpc.Parameter\"\x13\n\x11\x43onnectionRequest\"<\n\x12\x43onnectionResponse\x12&\n\x06status\x18\x01 \x01(\x0e\x32\x16.grpc.ConnectionStatus*\x84\x01\n\nStatusType\x12\x07\n\x03LOG\x10\x00\x12\x18\n\x14MODEL_UPDATE_REQUEST\x10\x01\x12\x10\n\x0cMODEL_UPDATE\x10\x02\x12\x1c\n\x18MODEL_VALIDATION_REQUEST\x10\x03\x12\x14\n\x10MODEL_VALIDATION\x10\x04\x12\r\n\tINFERENCE\x10\x05*\x86\x01\n\x07\x43hannel\x12\x0b\n\x07\x44\x45\x46\x41ULT\x10\x00\x12\x19\n\x15MODEL_UPDATE_REQUESTS\x10\x01\x12\x11\n\rMODEL_UPDATES\x10\x02\x12\x1d\n\x19MODEL_VALIDATION_REQUESTS\x10\x03\x12\x15\n\x11MODEL_VALIDATIONS\x10\x04\x12\n\n\x06STATUS\x10\x05*F\n\x0bModelStatus\x12\x06\n\x02OK\x10\x00\x12\x0f\n\x0bIN_PROGRESS\x10\x01\x12\x12\n\x0eIN_PROGRESS_OK\x10\x02\x12\n\n\x06\x46\x41ILED\x10\x03*8\n\x04Role\x12\n\n\x06WORKER\x10\x00\x12\x0c\n\x08\x43OMBINER\x10\x01\x12\x0b\n\x07REDUCER\x10\x02\x12\t\n\x05OTHER\x10\x03*J\n\x07\x43ommand\x12\x08\n\x04IDLE\x10\x00\x12\t\n\x05START\x10\x01\x12\t\n\x05PAUSE\x10\x02\x12\x08\n\x04STOP\x10\x03\x12\t\n\x05RESET\x10\x04\x12\n\n\x06REPORT\x10\x05*I\n\x10\x43onnectionStatus\x12\x11\n\rNOT_ACCEPTING\x10\x00\x12\r\n\tACCEPTING\x10\x01\x12\x13\n\x0fTRY_AGAIN_LATER\x10\x02\x32z\n\x0cModelService\x12\x33\n\x06Upload\x12\x12.grpc.ModelRequest\x1a\x13.grpc.ModelResponse(\x01\x12\x35\n\x08\x44ownload\x12\x12.grpc.ModelRequest\x1a\x13.grpc.ModelResponse0\x01\x32\xe3\x01\n\x07\x43ontrol\x12\x34\n\x05Start\x12\x14.grpc.ControlRequest\x1a\x15.grpc.ControlResponse\x12\x33\n\x04Stop\x12\x14.grpc.ControlRequest\x1a\x15.grpc.ControlResponse\x12\x37\n\tConfigure\x12\x14.grpc.ControlRequest\x1a\x14.grpc.ReportResponse\x12\x34\n\x06Report\x12\x14.grpc.ControlRequest\x1a\x14.grpc.ReportResponse2V\n\x07Reducer\x12K\n\x0eGetGlobalModel\x12\x1b.grpc.GetGlobalModelRequest\x1a\x1c.grpc.GetGlobalModelResponse2\xab\x03\n\tConnector\x12\x44\n\x14\x41llianceStatusStream\x12\x1c.grpc.ClientAvailableMessage\x1a\x0c.grpc.Status0\x01\x12*\n\nSendStatus\x12\x0c.grpc.Status\x1a\x0e.grpc.Response\x12?\n\x11ListActiveClients\x12\x18.grpc.ListClientsRequest\x1a\x10.grpc.ClientList\x12\x45\n\x10\x41\x63\x63\x65ptingClients\x12\x17.grpc.ConnectionRequest\x1a\x18.grpc.ConnectionResponse\x12\x30\n\rSendHeartbeat\x12\x0f.grpc.Heartbeat\x1a\x0e.grpc.Response\x12\x37\n\x0eReassignClient\x12\x15.grpc.ReassignRequest\x1a\x0e.grpc.Response\x12\x39\n\x0fReconnectClient\x12\x16.grpc.ReconnectRequest\x1a\x0e.grpc.Response2\xda\x04\n\x08\x43ombiner\x12T\n\x18ModelUpdateRequestStream\x12\x1c.grpc.ClientAvailableMessage\x1a\x18.grpc.ModelUpdateRequest0\x01\x12\x46\n\x11ModelUpdateStream\x12\x1c.grpc.ClientAvailableMessage\x1a\x11.grpc.ModelUpdate0\x01\x12\\\n\x1cModelValidationRequestStream\x12\x1c.grpc.ClientAvailableMessage\x1a\x1c.grpc.ModelValidationRequest0\x01\x12N\n\x15ModelValidationStream\x12\x1c.grpc.ClientAvailableMessage\x1a\x15.grpc.ModelValidation0\x01\x12\x42\n\x16SendModelUpdateRequest\x12\x18.grpc.ModelUpdateRequest\x1a\x0e.grpc.Response\x12\x34\n\x0fSendModelUpdate\x12\x11.grpc.ModelUpdate\x1a\x0e.grpc.Response\x12J\n\x1aSendModelValidationRequest\x12\x1c.grpc.ModelValidationRequest\x1a\x0e.grpc.Response\x12<\n\x13SendModelValidation\x12\x15.grpc.ModelValidation\x1a\x0e.grpc.Responseb\x06proto3' ) _STATUSTYPE = _descriptor.EnumDescriptor( - name='StatusType', - full_name='grpc.StatusType', - filename=None, - file=DESCRIPTOR, - create_key=_descriptor._internal_create_key, - values=[ - _descriptor.EnumValueDescriptor( - name='LOG', index=0, number=0, - serialized_options=None, - type=None, - create_key=_descriptor._internal_create_key), - _descriptor.EnumValueDescriptor( - name='MODEL_UPDATE_REQUEST', index=1, number=1, - serialized_options=None, - type=None, - create_key=_descriptor._internal_create_key), - _descriptor.EnumValueDescriptor( - name='MODEL_UPDATE', index=2, number=2, - serialized_options=None, - type=None, - create_key=_descriptor._internal_create_key), - _descriptor.EnumValueDescriptor( - name='MODEL_VALIDATION_REQUEST', index=3, number=3, - serialized_options=None, - type=None, - create_key=_descriptor._internal_create_key), - _descriptor.EnumValueDescriptor( - name='MODEL_VALIDATION', index=4, number=4, - serialized_options=None, - type=None, - create_key=_descriptor._internal_create_key), - _descriptor.EnumValueDescriptor( - name='INFERENCE', index=5, number=5, - serialized_options=None, - type=None, - create_key=_descriptor._internal_create_key), - ], - containing_type=None, - serialized_options=None, - serialized_start=2384, - serialized_end=2516, + name='StatusType', + full_name='grpc.StatusType', + filename=None, + file=DESCRIPTOR, + create_key=_descriptor._internal_create_key, + values=[ + _descriptor.EnumValueDescriptor( + name='LOG', index=0, number=0, + serialized_options=None, + type=None, + create_key=_descriptor._internal_create_key), + _descriptor.EnumValueDescriptor( + name='MODEL_UPDATE_REQUEST', index=1, number=1, + serialized_options=None, + type=None, + create_key=_descriptor._internal_create_key), + _descriptor.EnumValueDescriptor( + name='MODEL_UPDATE', index=2, number=2, + serialized_options=None, + type=None, + create_key=_descriptor._internal_create_key), + _descriptor.EnumValueDescriptor( + name='MODEL_VALIDATION_REQUEST', index=3, number=3, + serialized_options=None, + type=None, + create_key=_descriptor._internal_create_key), + _descriptor.EnumValueDescriptor( + name='MODEL_VALIDATION', index=4, number=4, + serialized_options=None, + type=None, + create_key=_descriptor._internal_create_key), + _descriptor.EnumValueDescriptor( + name='INFERENCE', index=5, number=5, + serialized_options=None, + type=None, + create_key=_descriptor._internal_create_key), + ], + containing_type=None, + serialized_options=None, + serialized_start=2384, + serialized_end=2516, ) _sym_db.RegisterEnumDescriptor(_STATUSTYPE) StatusType = enum_type_wrapper.EnumTypeWrapper(_STATUSTYPE) _CHANNEL = _descriptor.EnumDescriptor( - name='Channel', - full_name='grpc.Channel', - filename=None, - file=DESCRIPTOR, - create_key=_descriptor._internal_create_key, - values=[ - _descriptor.EnumValueDescriptor( - name='DEFAULT', index=0, number=0, - serialized_options=None, - type=None, - create_key=_descriptor._internal_create_key), - _descriptor.EnumValueDescriptor( - name='MODEL_UPDATE_REQUESTS', index=1, number=1, - serialized_options=None, - type=None, - create_key=_descriptor._internal_create_key), - _descriptor.EnumValueDescriptor( - name='MODEL_UPDATES', index=2, number=2, - serialized_options=None, - type=None, - create_key=_descriptor._internal_create_key), - _descriptor.EnumValueDescriptor( - name='MODEL_VALIDATION_REQUESTS', index=3, number=3, - serialized_options=None, - type=None, - create_key=_descriptor._internal_create_key), - _descriptor.EnumValueDescriptor( - name='MODEL_VALIDATIONS', index=4, number=4, - serialized_options=None, - type=None, - create_key=_descriptor._internal_create_key), - _descriptor.EnumValueDescriptor( - name='STATUS', index=5, number=5, - serialized_options=None, - type=None, - create_key=_descriptor._internal_create_key), - ], - containing_type=None, - serialized_options=None, - serialized_start=2519, - serialized_end=2653, + name='Channel', + full_name='grpc.Channel', + filename=None, + file=DESCRIPTOR, + create_key=_descriptor._internal_create_key, + values=[ + _descriptor.EnumValueDescriptor( + name='DEFAULT', index=0, number=0, + serialized_options=None, + type=None, + create_key=_descriptor._internal_create_key), + _descriptor.EnumValueDescriptor( + name='MODEL_UPDATE_REQUESTS', index=1, number=1, + serialized_options=None, + type=None, + create_key=_descriptor._internal_create_key), + _descriptor.EnumValueDescriptor( + name='MODEL_UPDATES', index=2, number=2, + serialized_options=None, + type=None, + create_key=_descriptor._internal_create_key), + _descriptor.EnumValueDescriptor( + name='MODEL_VALIDATION_REQUESTS', index=3, number=3, + serialized_options=None, + type=None, + create_key=_descriptor._internal_create_key), + _descriptor.EnumValueDescriptor( + name='MODEL_VALIDATIONS', index=4, number=4, + serialized_options=None, + type=None, + create_key=_descriptor._internal_create_key), + _descriptor.EnumValueDescriptor( + name='STATUS', index=5, number=5, + serialized_options=None, + type=None, + create_key=_descriptor._internal_create_key), + ], + containing_type=None, + serialized_options=None, + serialized_start=2519, + serialized_end=2653, ) _sym_db.RegisterEnumDescriptor(_CHANNEL) Channel = enum_type_wrapper.EnumTypeWrapper(_CHANNEL) _MODELSTATUS = _descriptor.EnumDescriptor( - name='ModelStatus', - full_name='grpc.ModelStatus', - filename=None, - file=DESCRIPTOR, - create_key=_descriptor._internal_create_key, - values=[ - _descriptor.EnumValueDescriptor( - name='OK', index=0, number=0, - serialized_options=None, - type=None, - create_key=_descriptor._internal_create_key), - _descriptor.EnumValueDescriptor( - name='IN_PROGRESS', index=1, number=1, - serialized_options=None, - type=None, - create_key=_descriptor._internal_create_key), - _descriptor.EnumValueDescriptor( - name='IN_PROGRESS_OK', index=2, number=2, - serialized_options=None, - type=None, - create_key=_descriptor._internal_create_key), - _descriptor.EnumValueDescriptor( - name='FAILED', index=3, number=3, - serialized_options=None, - type=None, - create_key=_descriptor._internal_create_key), - ], - containing_type=None, - serialized_options=None, - serialized_start=2655, - serialized_end=2725, + name='ModelStatus', + full_name='grpc.ModelStatus', + filename=None, + file=DESCRIPTOR, + create_key=_descriptor._internal_create_key, + values=[ + _descriptor.EnumValueDescriptor( + name='OK', index=0, number=0, + serialized_options=None, + type=None, + create_key=_descriptor._internal_create_key), + _descriptor.EnumValueDescriptor( + name='IN_PROGRESS', index=1, number=1, + serialized_options=None, + type=None, + create_key=_descriptor._internal_create_key), + _descriptor.EnumValueDescriptor( + name='IN_PROGRESS_OK', index=2, number=2, + serialized_options=None, + type=None, + create_key=_descriptor._internal_create_key), + _descriptor.EnumValueDescriptor( + name='FAILED', index=3, number=3, + serialized_options=None, + type=None, + create_key=_descriptor._internal_create_key), + ], + containing_type=None, + serialized_options=None, + serialized_start=2655, + serialized_end=2725, ) _sym_db.RegisterEnumDescriptor(_MODELSTATUS) ModelStatus = enum_type_wrapper.EnumTypeWrapper(_MODELSTATUS) _ROLE = _descriptor.EnumDescriptor( - name='Role', - full_name='grpc.Role', - filename=None, - file=DESCRIPTOR, - create_key=_descriptor._internal_create_key, - values=[ - _descriptor.EnumValueDescriptor( - name='WORKER', index=0, number=0, - serialized_options=None, - type=None, - create_key=_descriptor._internal_create_key), - _descriptor.EnumValueDescriptor( - name='COMBINER', index=1, number=1, - serialized_options=None, - type=None, - create_key=_descriptor._internal_create_key), - _descriptor.EnumValueDescriptor( - name='REDUCER', index=2, number=2, - serialized_options=None, - type=None, - create_key=_descriptor._internal_create_key), - _descriptor.EnumValueDescriptor( - name='OTHER', index=3, number=3, - serialized_options=None, - type=None, - create_key=_descriptor._internal_create_key), - ], - containing_type=None, - serialized_options=None, - serialized_start=2727, - serialized_end=2783, + name='Role', + full_name='grpc.Role', + filename=None, + file=DESCRIPTOR, + create_key=_descriptor._internal_create_key, + values=[ + _descriptor.EnumValueDescriptor( + name='WORKER', index=0, number=0, + serialized_options=None, + type=None, + create_key=_descriptor._internal_create_key), + _descriptor.EnumValueDescriptor( + name='COMBINER', index=1, number=1, + serialized_options=None, + type=None, + create_key=_descriptor._internal_create_key), + _descriptor.EnumValueDescriptor( + name='REDUCER', index=2, number=2, + serialized_options=None, + type=None, + create_key=_descriptor._internal_create_key), + _descriptor.EnumValueDescriptor( + name='OTHER', index=3, number=3, + serialized_options=None, + type=None, + create_key=_descriptor._internal_create_key), + ], + containing_type=None, + serialized_options=None, + serialized_start=2727, + serialized_end=2783, ) _sym_db.RegisterEnumDescriptor(_ROLE) Role = enum_type_wrapper.EnumTypeWrapper(_ROLE) _COMMAND = _descriptor.EnumDescriptor( - name='Command', - full_name='grpc.Command', - filename=None, - file=DESCRIPTOR, - create_key=_descriptor._internal_create_key, - values=[ - _descriptor.EnumValueDescriptor( - name='IDLE', index=0, number=0, - serialized_options=None, - type=None, - create_key=_descriptor._internal_create_key), - _descriptor.EnumValueDescriptor( - name='START', index=1, number=1, - serialized_options=None, - type=None, - create_key=_descriptor._internal_create_key), - _descriptor.EnumValueDescriptor( - name='PAUSE', index=2, number=2, - serialized_options=None, - type=None, - create_key=_descriptor._internal_create_key), - _descriptor.EnumValueDescriptor( - name='STOP', index=3, number=3, - serialized_options=None, - type=None, - create_key=_descriptor._internal_create_key), - _descriptor.EnumValueDescriptor( - name='RESET', index=4, number=4, - serialized_options=None, - type=None, - create_key=_descriptor._internal_create_key), - _descriptor.EnumValueDescriptor( - name='REPORT', index=5, number=5, - serialized_options=None, - type=None, - create_key=_descriptor._internal_create_key), - ], - containing_type=None, - serialized_options=None, - serialized_start=2785, - serialized_end=2859, + name='Command', + full_name='grpc.Command', + filename=None, + file=DESCRIPTOR, + create_key=_descriptor._internal_create_key, + values=[ + _descriptor.EnumValueDescriptor( + name='IDLE', index=0, number=0, + serialized_options=None, + type=None, + create_key=_descriptor._internal_create_key), + _descriptor.EnumValueDescriptor( + name='START', index=1, number=1, + serialized_options=None, + type=None, + create_key=_descriptor._internal_create_key), + _descriptor.EnumValueDescriptor( + name='PAUSE', index=2, number=2, + serialized_options=None, + type=None, + create_key=_descriptor._internal_create_key), + _descriptor.EnumValueDescriptor( + name='STOP', index=3, number=3, + serialized_options=None, + type=None, + create_key=_descriptor._internal_create_key), + _descriptor.EnumValueDescriptor( + name='RESET', index=4, number=4, + serialized_options=None, + type=None, + create_key=_descriptor._internal_create_key), + _descriptor.EnumValueDescriptor( + name='REPORT', index=5, number=5, + serialized_options=None, + type=None, + create_key=_descriptor._internal_create_key), + ], + containing_type=None, + serialized_options=None, + serialized_start=2785, + serialized_end=2859, ) _sym_db.RegisterEnumDescriptor(_COMMAND) Command = enum_type_wrapper.EnumTypeWrapper(_COMMAND) _CONNECTIONSTATUS = _descriptor.EnumDescriptor( - name='ConnectionStatus', - full_name='grpc.ConnectionStatus', - filename=None, - file=DESCRIPTOR, - create_key=_descriptor._internal_create_key, - values=[ - _descriptor.EnumValueDescriptor( - name='NOT_ACCEPTING', index=0, number=0, - serialized_options=None, - type=None, - create_key=_descriptor._internal_create_key), - _descriptor.EnumValueDescriptor( - name='ACCEPTING', index=1, number=1, - serialized_options=None, - type=None, - create_key=_descriptor._internal_create_key), - _descriptor.EnumValueDescriptor( - name='TRY_AGAIN_LATER', index=2, number=2, - serialized_options=None, - type=None, - create_key=_descriptor._internal_create_key), - ], - containing_type=None, - serialized_options=None, - serialized_start=2861, - serialized_end=2934, + name='ConnectionStatus', + full_name='grpc.ConnectionStatus', + filename=None, + file=DESCRIPTOR, + create_key=_descriptor._internal_create_key, + values=[ + _descriptor.EnumValueDescriptor( + name='NOT_ACCEPTING', index=0, number=0, + serialized_options=None, + type=None, + create_key=_descriptor._internal_create_key), + _descriptor.EnumValueDescriptor( + name='ACCEPTING', index=1, number=1, + serialized_options=None, + type=None, + create_key=_descriptor._internal_create_key), + _descriptor.EnumValueDescriptor( + name='TRY_AGAIN_LATER', index=2, number=2, + serialized_options=None, + type=None, + create_key=_descriptor._internal_create_key), + ], + containing_type=None, + serialized_options=None, + serialized_start=2861, + serialized_end=2934, ) _sym_db.RegisterEnumDescriptor(_CONNECTIONSTATUS) @@ -296,1151 +295,1151 @@ _STATUS_LOGLEVEL = _descriptor.EnumDescriptor( - name='LogLevel', - full_name='grpc.Status.LogLevel', - filename=None, - file=DESCRIPTOR, - create_key=_descriptor._internal_create_key, - values=[ - _descriptor.EnumValueDescriptor( - name='INFO', index=0, number=0, - serialized_options=None, - type=None, - create_key=_descriptor._internal_create_key), - _descriptor.EnumValueDescriptor( - name='DEBUG', index=1, number=1, - serialized_options=None, - type=None, - create_key=_descriptor._internal_create_key), - _descriptor.EnumValueDescriptor( - name='WARNING', index=2, number=2, - serialized_options=None, - type=None, - create_key=_descriptor._internal_create_key), - _descriptor.EnumValueDescriptor( - name='ERROR', index=3, number=3, - serialized_options=None, - type=None, - create_key=_descriptor._internal_create_key), - _descriptor.EnumValueDescriptor( - name='AUDIT', index=4, number=4, - serialized_options=None, - type=None, - create_key=_descriptor._internal_create_key), - ], - containing_type=None, - serialized_options=None, - serialized_start=304, - serialized_end=370, + name='LogLevel', + full_name='grpc.Status.LogLevel', + filename=None, + file=DESCRIPTOR, + create_key=_descriptor._internal_create_key, + values=[ + _descriptor.EnumValueDescriptor( + name='INFO', index=0, number=0, + serialized_options=None, + type=None, + create_key=_descriptor._internal_create_key), + _descriptor.EnumValueDescriptor( + name='DEBUG', index=1, number=1, + serialized_options=None, + type=None, + create_key=_descriptor._internal_create_key), + _descriptor.EnumValueDescriptor( + name='WARNING', index=2, number=2, + serialized_options=None, + type=None, + create_key=_descriptor._internal_create_key), + _descriptor.EnumValueDescriptor( + name='ERROR', index=3, number=3, + serialized_options=None, + type=None, + create_key=_descriptor._internal_create_key), + _descriptor.EnumValueDescriptor( + name='AUDIT', index=4, number=4, + serialized_options=None, + type=None, + create_key=_descriptor._internal_create_key), + ], + containing_type=None, + serialized_options=None, + serialized_start=304, + serialized_end=370, ) _sym_db.RegisterEnumDescriptor(_STATUS_LOGLEVEL) _RESPONSE = _descriptor.Descriptor( - name='Response', - full_name='grpc.Response', - filename=None, - file=DESCRIPTOR, - containing_type=None, - create_key=_descriptor._internal_create_key, - fields=[ - _descriptor.FieldDescriptor( - name='sender', full_name='grpc.Response.sender', index=0, - number=1, type=11, cpp_type=10, label=1, - has_default_value=False, default_value=None, - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), - _descriptor.FieldDescriptor( - name='response', full_name='grpc.Response.response', index=1, - number=2, type=9, cpp_type=9, label=1, - has_default_value=False, default_value=b"".decode('utf-8'), - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), - ], - extensions=[ - ], - nested_types=[], - enum_types=[ - ], - serialized_options=None, - is_extendable=False, - syntax='proto3', - extension_ranges=[], - oneofs=[ - ], - serialized_start=41, - serialized_end=99, + name='Response', + full_name='grpc.Response', + filename=None, + file=DESCRIPTOR, + containing_type=None, + create_key=_descriptor._internal_create_key, + fields=[ + _descriptor.FieldDescriptor( + name='sender', full_name='grpc.Response.sender', index=0, + number=1, type=11, cpp_type=10, label=1, + has_default_value=False, default_value=None, + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + _descriptor.FieldDescriptor( + name='response', full_name='grpc.Response.response', index=1, + number=2, type=9, cpp_type=9, label=1, + has_default_value=False, default_value=b"".decode('utf-8'), + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + ], + extensions=[ + ], + nested_types=[], + enum_types=[ + ], + serialized_options=None, + is_extendable=False, + syntax='proto3', + extension_ranges=[], + oneofs=[ + ], + serialized_start=41, + serialized_end=99, ) _STATUS = _descriptor.Descriptor( - name='Status', - full_name='grpc.Status', - filename=None, - file=DESCRIPTOR, - containing_type=None, - create_key=_descriptor._internal_create_key, - fields=[ - _descriptor.FieldDescriptor( - name='sender', full_name='grpc.Status.sender', index=0, - number=1, type=11, cpp_type=10, label=1, - has_default_value=False, default_value=None, - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), - _descriptor.FieldDescriptor( - name='status', full_name='grpc.Status.status', index=1, - number=2, type=9, cpp_type=9, label=1, - has_default_value=False, default_value=b"".decode('utf-8'), - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), - _descriptor.FieldDescriptor( - name='log_level', full_name='grpc.Status.log_level', index=2, - number=3, type=14, cpp_type=8, label=1, - has_default_value=False, default_value=0, - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), - _descriptor.FieldDescriptor( - name='data', full_name='grpc.Status.data', index=3, - number=4, type=9, cpp_type=9, label=1, - has_default_value=False, default_value=b"".decode('utf-8'), - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), - _descriptor.FieldDescriptor( - name='correlation_id', full_name='grpc.Status.correlation_id', index=4, - number=5, type=9, cpp_type=9, label=1, - has_default_value=False, default_value=b"".decode('utf-8'), - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), - _descriptor.FieldDescriptor( - name='timestamp', full_name='grpc.Status.timestamp', index=5, - number=6, type=9, cpp_type=9, label=1, - has_default_value=False, default_value=b"".decode('utf-8'), - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), - _descriptor.FieldDescriptor( - name='type', full_name='grpc.Status.type', index=6, - number=7, type=14, cpp_type=8, label=1, - has_default_value=False, default_value=0, - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), - _descriptor.FieldDescriptor( - name='extra', full_name='grpc.Status.extra', index=7, - number=8, type=9, cpp_type=9, label=1, - has_default_value=False, default_value=b"".decode('utf-8'), - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), - ], - extensions=[ - ], - nested_types=[], - enum_types=[ - _STATUS_LOGLEVEL, - ], - serialized_options=None, - is_extendable=False, - syntax='proto3', - extension_ranges=[], - oneofs=[ - ], - serialized_start=102, - serialized_end=370, + name='Status', + full_name='grpc.Status', + filename=None, + file=DESCRIPTOR, + containing_type=None, + create_key=_descriptor._internal_create_key, + fields=[ + _descriptor.FieldDescriptor( + name='sender', full_name='grpc.Status.sender', index=0, + number=1, type=11, cpp_type=10, label=1, + has_default_value=False, default_value=None, + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + _descriptor.FieldDescriptor( + name='status', full_name='grpc.Status.status', index=1, + number=2, type=9, cpp_type=9, label=1, + has_default_value=False, default_value=b"".decode('utf-8'), + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + _descriptor.FieldDescriptor( + name='log_level', full_name='grpc.Status.log_level', index=2, + number=3, type=14, cpp_type=8, label=1, + has_default_value=False, default_value=0, + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + _descriptor.FieldDescriptor( + name='data', full_name='grpc.Status.data', index=3, + number=4, type=9, cpp_type=9, label=1, + has_default_value=False, default_value=b"".decode('utf-8'), + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + _descriptor.FieldDescriptor( + name='correlation_id', full_name='grpc.Status.correlation_id', index=4, + number=5, type=9, cpp_type=9, label=1, + has_default_value=False, default_value=b"".decode('utf-8'), + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + _descriptor.FieldDescriptor( + name='timestamp', full_name='grpc.Status.timestamp', index=5, + number=6, type=9, cpp_type=9, label=1, + has_default_value=False, default_value=b"".decode('utf-8'), + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + _descriptor.FieldDescriptor( + name='type', full_name='grpc.Status.type', index=6, + number=7, type=14, cpp_type=8, label=1, + has_default_value=False, default_value=0, + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + _descriptor.FieldDescriptor( + name='extra', full_name='grpc.Status.extra', index=7, + number=8, type=9, cpp_type=9, label=1, + has_default_value=False, default_value=b"".decode('utf-8'), + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + ], + extensions=[ + ], + nested_types=[], + enum_types=[ + _STATUS_LOGLEVEL, + ], + serialized_options=None, + is_extendable=False, + syntax='proto3', + extension_ranges=[], + oneofs=[ + ], + serialized_start=102, + serialized_end=370, ) _MODELUPDATEREQUEST = _descriptor.Descriptor( - name='ModelUpdateRequest', - full_name='grpc.ModelUpdateRequest', - filename=None, - file=DESCRIPTOR, - containing_type=None, - create_key=_descriptor._internal_create_key, - fields=[ - _descriptor.FieldDescriptor( - name='sender', full_name='grpc.ModelUpdateRequest.sender', index=0, - number=1, type=11, cpp_type=10, label=1, - has_default_value=False, default_value=None, - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), - _descriptor.FieldDescriptor( - name='receiver', full_name='grpc.ModelUpdateRequest.receiver', index=1, - number=2, type=11, cpp_type=10, label=1, - has_default_value=False, default_value=None, - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), - _descriptor.FieldDescriptor( - name='model_id', full_name='grpc.ModelUpdateRequest.model_id', index=2, - number=3, type=9, cpp_type=9, label=1, - has_default_value=False, default_value=b"".decode('utf-8'), - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), - _descriptor.FieldDescriptor( - name='data', full_name='grpc.ModelUpdateRequest.data', index=3, - number=4, type=9, cpp_type=9, label=1, - has_default_value=False, default_value=b"".decode('utf-8'), - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), - _descriptor.FieldDescriptor( - name='correlation_id', full_name='grpc.ModelUpdateRequest.correlation_id', index=4, - number=5, type=9, cpp_type=9, label=1, - has_default_value=False, default_value=b"".decode('utf-8'), - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), - _descriptor.FieldDescriptor( - name='timestamp', full_name='grpc.ModelUpdateRequest.timestamp', index=5, - number=6, type=9, cpp_type=9, label=1, - has_default_value=False, default_value=b"".decode('utf-8'), - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), - ], - extensions=[ - ], - nested_types=[], - enum_types=[ - ], - serialized_options=None, - is_extendable=False, - syntax='proto3', - extension_ranges=[], - oneofs=[ - ], - serialized_start=373, - serialized_end=530, + name='ModelUpdateRequest', + full_name='grpc.ModelUpdateRequest', + filename=None, + file=DESCRIPTOR, + containing_type=None, + create_key=_descriptor._internal_create_key, + fields=[ + _descriptor.FieldDescriptor( + name='sender', full_name='grpc.ModelUpdateRequest.sender', index=0, + number=1, type=11, cpp_type=10, label=1, + has_default_value=False, default_value=None, + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + _descriptor.FieldDescriptor( + name='receiver', full_name='grpc.ModelUpdateRequest.receiver', index=1, + number=2, type=11, cpp_type=10, label=1, + has_default_value=False, default_value=None, + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + _descriptor.FieldDescriptor( + name='model_id', full_name='grpc.ModelUpdateRequest.model_id', index=2, + number=3, type=9, cpp_type=9, label=1, + has_default_value=False, default_value=b"".decode('utf-8'), + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + _descriptor.FieldDescriptor( + name='data', full_name='grpc.ModelUpdateRequest.data', index=3, + number=4, type=9, cpp_type=9, label=1, + has_default_value=False, default_value=b"".decode('utf-8'), + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + _descriptor.FieldDescriptor( + name='correlation_id', full_name='grpc.ModelUpdateRequest.correlation_id', index=4, + number=5, type=9, cpp_type=9, label=1, + has_default_value=False, default_value=b"".decode('utf-8'), + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + _descriptor.FieldDescriptor( + name='timestamp', full_name='grpc.ModelUpdateRequest.timestamp', index=5, + number=6, type=9, cpp_type=9, label=1, + has_default_value=False, default_value=b"".decode('utf-8'), + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + ], + extensions=[ + ], + nested_types=[], + enum_types=[ + ], + serialized_options=None, + is_extendable=False, + syntax='proto3', + extension_ranges=[], + oneofs=[ + ], + serialized_start=373, + serialized_end=530, ) _MODELUPDATE = _descriptor.Descriptor( - name='ModelUpdate', - full_name='grpc.ModelUpdate', - filename=None, - file=DESCRIPTOR, - containing_type=None, - create_key=_descriptor._internal_create_key, - fields=[ - _descriptor.FieldDescriptor( - name='sender', full_name='grpc.ModelUpdate.sender', index=0, - number=1, type=11, cpp_type=10, label=1, - has_default_value=False, default_value=None, - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), - _descriptor.FieldDescriptor( - name='receiver', full_name='grpc.ModelUpdate.receiver', index=1, - number=2, type=11, cpp_type=10, label=1, - has_default_value=False, default_value=None, - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), - _descriptor.FieldDescriptor( - name='model_id', full_name='grpc.ModelUpdate.model_id', index=2, - number=3, type=9, cpp_type=9, label=1, - has_default_value=False, default_value=b"".decode('utf-8'), - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), - _descriptor.FieldDescriptor( - name='model_update_id', full_name='grpc.ModelUpdate.model_update_id', index=3, - number=4, type=9, cpp_type=9, label=1, - has_default_value=False, default_value=b"".decode('utf-8'), - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), - _descriptor.FieldDescriptor( - name='correlation_id', full_name='grpc.ModelUpdate.correlation_id', index=4, - number=5, type=9, cpp_type=9, label=1, - has_default_value=False, default_value=b"".decode('utf-8'), - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), - _descriptor.FieldDescriptor( - name='timestamp', full_name='grpc.ModelUpdate.timestamp', index=5, - number=6, type=9, cpp_type=9, label=1, - has_default_value=False, default_value=b"".decode('utf-8'), - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), - _descriptor.FieldDescriptor( - name='meta', full_name='grpc.ModelUpdate.meta', index=6, - number=7, type=9, cpp_type=9, label=1, - has_default_value=False, default_value=b"".decode('utf-8'), - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), - ], - extensions=[ - ], - nested_types=[], - enum_types=[ - ], - serialized_options=None, - is_extendable=False, - syntax='proto3', - extension_ranges=[], - oneofs=[ - ], - serialized_start=533, - serialized_end=708, + name='ModelUpdate', + full_name='grpc.ModelUpdate', + filename=None, + file=DESCRIPTOR, + containing_type=None, + create_key=_descriptor._internal_create_key, + fields=[ + _descriptor.FieldDescriptor( + name='sender', full_name='grpc.ModelUpdate.sender', index=0, + number=1, type=11, cpp_type=10, label=1, + has_default_value=False, default_value=None, + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + _descriptor.FieldDescriptor( + name='receiver', full_name='grpc.ModelUpdate.receiver', index=1, + number=2, type=11, cpp_type=10, label=1, + has_default_value=False, default_value=None, + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + _descriptor.FieldDescriptor( + name='model_id', full_name='grpc.ModelUpdate.model_id', index=2, + number=3, type=9, cpp_type=9, label=1, + has_default_value=False, default_value=b"".decode('utf-8'), + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + _descriptor.FieldDescriptor( + name='model_update_id', full_name='grpc.ModelUpdate.model_update_id', index=3, + number=4, type=9, cpp_type=9, label=1, + has_default_value=False, default_value=b"".decode('utf-8'), + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + _descriptor.FieldDescriptor( + name='correlation_id', full_name='grpc.ModelUpdate.correlation_id', index=4, + number=5, type=9, cpp_type=9, label=1, + has_default_value=False, default_value=b"".decode('utf-8'), + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + _descriptor.FieldDescriptor( + name='timestamp', full_name='grpc.ModelUpdate.timestamp', index=5, + number=6, type=9, cpp_type=9, label=1, + has_default_value=False, default_value=b"".decode('utf-8'), + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + _descriptor.FieldDescriptor( + name='meta', full_name='grpc.ModelUpdate.meta', index=6, + number=7, type=9, cpp_type=9, label=1, + has_default_value=False, default_value=b"".decode('utf-8'), + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + ], + extensions=[ + ], + nested_types=[], + enum_types=[ + ], + serialized_options=None, + is_extendable=False, + syntax='proto3', + extension_ranges=[], + oneofs=[ + ], + serialized_start=533, + serialized_end=708, ) _MODELVALIDATIONREQUEST = _descriptor.Descriptor( - name='ModelValidationRequest', - full_name='grpc.ModelValidationRequest', - filename=None, - file=DESCRIPTOR, - containing_type=None, - create_key=_descriptor._internal_create_key, - fields=[ - _descriptor.FieldDescriptor( - name='sender', full_name='grpc.ModelValidationRequest.sender', index=0, - number=1, type=11, cpp_type=10, label=1, - has_default_value=False, default_value=None, - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), - _descriptor.FieldDescriptor( - name='receiver', full_name='grpc.ModelValidationRequest.receiver', index=1, - number=2, type=11, cpp_type=10, label=1, - has_default_value=False, default_value=None, - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), - _descriptor.FieldDescriptor( - name='model_id', full_name='grpc.ModelValidationRequest.model_id', index=2, - number=3, type=9, cpp_type=9, label=1, - has_default_value=False, default_value=b"".decode('utf-8'), - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), - _descriptor.FieldDescriptor( - name='data', full_name='grpc.ModelValidationRequest.data', index=3, - number=4, type=9, cpp_type=9, label=1, - has_default_value=False, default_value=b"".decode('utf-8'), - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), - _descriptor.FieldDescriptor( - name='correlation_id', full_name='grpc.ModelValidationRequest.correlation_id', index=4, - number=5, type=9, cpp_type=9, label=1, - has_default_value=False, default_value=b"".decode('utf-8'), - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), - _descriptor.FieldDescriptor( - name='timestamp', full_name='grpc.ModelValidationRequest.timestamp', index=5, - number=6, type=9, cpp_type=9, label=1, - has_default_value=False, default_value=b"".decode('utf-8'), - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), - _descriptor.FieldDescriptor( - name='is_inference', full_name='grpc.ModelValidationRequest.is_inference', index=6, - number=7, type=8, cpp_type=7, label=1, - has_default_value=False, default_value=False, - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), - ], - extensions=[ - ], - nested_types=[], - enum_types=[ - ], - serialized_options=None, - is_extendable=False, - syntax='proto3', - extension_ranges=[], - oneofs=[ - ], - serialized_start=711, - serialized_end=894, + name='ModelValidationRequest', + full_name='grpc.ModelValidationRequest', + filename=None, + file=DESCRIPTOR, + containing_type=None, + create_key=_descriptor._internal_create_key, + fields=[ + _descriptor.FieldDescriptor( + name='sender', full_name='grpc.ModelValidationRequest.sender', index=0, + number=1, type=11, cpp_type=10, label=1, + has_default_value=False, default_value=None, + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + _descriptor.FieldDescriptor( + name='receiver', full_name='grpc.ModelValidationRequest.receiver', index=1, + number=2, type=11, cpp_type=10, label=1, + has_default_value=False, default_value=None, + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + _descriptor.FieldDescriptor( + name='model_id', full_name='grpc.ModelValidationRequest.model_id', index=2, + number=3, type=9, cpp_type=9, label=1, + has_default_value=False, default_value=b"".decode('utf-8'), + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + _descriptor.FieldDescriptor( + name='data', full_name='grpc.ModelValidationRequest.data', index=3, + number=4, type=9, cpp_type=9, label=1, + has_default_value=False, default_value=b"".decode('utf-8'), + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + _descriptor.FieldDescriptor( + name='correlation_id', full_name='grpc.ModelValidationRequest.correlation_id', index=4, + number=5, type=9, cpp_type=9, label=1, + has_default_value=False, default_value=b"".decode('utf-8'), + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + _descriptor.FieldDescriptor( + name='timestamp', full_name='grpc.ModelValidationRequest.timestamp', index=5, + number=6, type=9, cpp_type=9, label=1, + has_default_value=False, default_value=b"".decode('utf-8'), + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + _descriptor.FieldDescriptor( + name='is_inference', full_name='grpc.ModelValidationRequest.is_inference', index=6, + number=7, type=8, cpp_type=7, label=1, + has_default_value=False, default_value=False, + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + ], + extensions=[ + ], + nested_types=[], + enum_types=[ + ], + serialized_options=None, + is_extendable=False, + syntax='proto3', + extension_ranges=[], + oneofs=[ + ], + serialized_start=711, + serialized_end=894, ) _MODELVALIDATION = _descriptor.Descriptor( - name='ModelValidation', - full_name='grpc.ModelValidation', - filename=None, - file=DESCRIPTOR, - containing_type=None, - create_key=_descriptor._internal_create_key, - fields=[ - _descriptor.FieldDescriptor( - name='sender', full_name='grpc.ModelValidation.sender', index=0, - number=1, type=11, cpp_type=10, label=1, - has_default_value=False, default_value=None, - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), - _descriptor.FieldDescriptor( - name='receiver', full_name='grpc.ModelValidation.receiver', index=1, - number=2, type=11, cpp_type=10, label=1, - has_default_value=False, default_value=None, - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), - _descriptor.FieldDescriptor( - name='model_id', full_name='grpc.ModelValidation.model_id', index=2, - number=3, type=9, cpp_type=9, label=1, - has_default_value=False, default_value=b"".decode('utf-8'), - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), - _descriptor.FieldDescriptor( - name='data', full_name='grpc.ModelValidation.data', index=3, - number=4, type=9, cpp_type=9, label=1, - has_default_value=False, default_value=b"".decode('utf-8'), - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), - _descriptor.FieldDescriptor( - name='correlation_id', full_name='grpc.ModelValidation.correlation_id', index=4, - number=5, type=9, cpp_type=9, label=1, - has_default_value=False, default_value=b"".decode('utf-8'), - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), - _descriptor.FieldDescriptor( - name='timestamp', full_name='grpc.ModelValidation.timestamp', index=5, - number=6, type=9, cpp_type=9, label=1, - has_default_value=False, default_value=b"".decode('utf-8'), - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), - _descriptor.FieldDescriptor( - name='meta', full_name='grpc.ModelValidation.meta', index=6, - number=7, type=9, cpp_type=9, label=1, - has_default_value=False, default_value=b"".decode('utf-8'), - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), - ], - extensions=[ - ], - nested_types=[], - enum_types=[ - ], - serialized_options=None, - is_extendable=False, - syntax='proto3', - extension_ranges=[], - oneofs=[ - ], - serialized_start=897, - serialized_end=1065, + name='ModelValidation', + full_name='grpc.ModelValidation', + filename=None, + file=DESCRIPTOR, + containing_type=None, + create_key=_descriptor._internal_create_key, + fields=[ + _descriptor.FieldDescriptor( + name='sender', full_name='grpc.ModelValidation.sender', index=0, + number=1, type=11, cpp_type=10, label=1, + has_default_value=False, default_value=None, + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + _descriptor.FieldDescriptor( + name='receiver', full_name='grpc.ModelValidation.receiver', index=1, + number=2, type=11, cpp_type=10, label=1, + has_default_value=False, default_value=None, + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + _descriptor.FieldDescriptor( + name='model_id', full_name='grpc.ModelValidation.model_id', index=2, + number=3, type=9, cpp_type=9, label=1, + has_default_value=False, default_value=b"".decode('utf-8'), + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + _descriptor.FieldDescriptor( + name='data', full_name='grpc.ModelValidation.data', index=3, + number=4, type=9, cpp_type=9, label=1, + has_default_value=False, default_value=b"".decode('utf-8'), + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + _descriptor.FieldDescriptor( + name='correlation_id', full_name='grpc.ModelValidation.correlation_id', index=4, + number=5, type=9, cpp_type=9, label=1, + has_default_value=False, default_value=b"".decode('utf-8'), + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + _descriptor.FieldDescriptor( + name='timestamp', full_name='grpc.ModelValidation.timestamp', index=5, + number=6, type=9, cpp_type=9, label=1, + has_default_value=False, default_value=b"".decode('utf-8'), + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + _descriptor.FieldDescriptor( + name='meta', full_name='grpc.ModelValidation.meta', index=6, + number=7, type=9, cpp_type=9, label=1, + has_default_value=False, default_value=b"".decode('utf-8'), + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + ], + extensions=[ + ], + nested_types=[], + enum_types=[ + ], + serialized_options=None, + is_extendable=False, + syntax='proto3', + extension_ranges=[], + oneofs=[ + ], + serialized_start=897, + serialized_end=1065, ) _MODELREQUEST = _descriptor.Descriptor( - name='ModelRequest', - full_name='grpc.ModelRequest', - filename=None, - file=DESCRIPTOR, - containing_type=None, - create_key=_descriptor._internal_create_key, - fields=[ - _descriptor.FieldDescriptor( - name='sender', full_name='grpc.ModelRequest.sender', index=0, - number=1, type=11, cpp_type=10, label=1, - has_default_value=False, default_value=None, - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), - _descriptor.FieldDescriptor( - name='receiver', full_name='grpc.ModelRequest.receiver', index=1, - number=2, type=11, cpp_type=10, label=1, - has_default_value=False, default_value=None, - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), - _descriptor.FieldDescriptor( - name='data', full_name='grpc.ModelRequest.data', index=2, - number=3, type=12, cpp_type=9, label=1, - has_default_value=False, default_value=b"", - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), - _descriptor.FieldDescriptor( - name='id', full_name='grpc.ModelRequest.id', index=3, - number=4, type=9, cpp_type=9, label=1, - has_default_value=False, default_value=b"".decode('utf-8'), - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), - _descriptor.FieldDescriptor( - name='status', full_name='grpc.ModelRequest.status', index=4, - number=5, type=14, cpp_type=8, label=1, - has_default_value=False, default_value=0, - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), - ], - extensions=[ - ], - nested_types=[], - enum_types=[ - ], - serialized_options=None, - is_extendable=False, - syntax='proto3', - extension_ranges=[], - oneofs=[ - ], - serialized_start=1068, - serialized_end=1205, + name='ModelRequest', + full_name='grpc.ModelRequest', + filename=None, + file=DESCRIPTOR, + containing_type=None, + create_key=_descriptor._internal_create_key, + fields=[ + _descriptor.FieldDescriptor( + name='sender', full_name='grpc.ModelRequest.sender', index=0, + number=1, type=11, cpp_type=10, label=1, + has_default_value=False, default_value=None, + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + _descriptor.FieldDescriptor( + name='receiver', full_name='grpc.ModelRequest.receiver', index=1, + number=2, type=11, cpp_type=10, label=1, + has_default_value=False, default_value=None, + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + _descriptor.FieldDescriptor( + name='data', full_name='grpc.ModelRequest.data', index=2, + number=3, type=12, cpp_type=9, label=1, + has_default_value=False, default_value=b"", + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + _descriptor.FieldDescriptor( + name='id', full_name='grpc.ModelRequest.id', index=3, + number=4, type=9, cpp_type=9, label=1, + has_default_value=False, default_value=b"".decode('utf-8'), + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + _descriptor.FieldDescriptor( + name='status', full_name='grpc.ModelRequest.status', index=4, + number=5, type=14, cpp_type=8, label=1, + has_default_value=False, default_value=0, + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + ], + extensions=[ + ], + nested_types=[], + enum_types=[ + ], + serialized_options=None, + is_extendable=False, + syntax='proto3', + extension_ranges=[], + oneofs=[ + ], + serialized_start=1068, + serialized_end=1205, ) _MODELRESPONSE = _descriptor.Descriptor( - name='ModelResponse', - full_name='grpc.ModelResponse', - filename=None, - file=DESCRIPTOR, - containing_type=None, - create_key=_descriptor._internal_create_key, - fields=[ - _descriptor.FieldDescriptor( - name='data', full_name='grpc.ModelResponse.data', index=0, - number=1, type=12, cpp_type=9, label=1, - has_default_value=False, default_value=b"", - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), - _descriptor.FieldDescriptor( - name='id', full_name='grpc.ModelResponse.id', index=1, - number=2, type=9, cpp_type=9, label=1, - has_default_value=False, default_value=b"".decode('utf-8'), - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), - _descriptor.FieldDescriptor( - name='status', full_name='grpc.ModelResponse.status', index=2, - number=3, type=14, cpp_type=8, label=1, - has_default_value=False, default_value=0, - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), - _descriptor.FieldDescriptor( - name='message', full_name='grpc.ModelResponse.message', index=3, - number=4, type=9, cpp_type=9, label=1, - has_default_value=False, default_value=b"".decode('utf-8'), - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), - ], - extensions=[ - ], - nested_types=[], - enum_types=[ - ], - serialized_options=None, - is_extendable=False, - syntax='proto3', - extension_ranges=[], - oneofs=[ - ], - serialized_start=1207, - serialized_end=1300, + name='ModelResponse', + full_name='grpc.ModelResponse', + filename=None, + file=DESCRIPTOR, + containing_type=None, + create_key=_descriptor._internal_create_key, + fields=[ + _descriptor.FieldDescriptor( + name='data', full_name='grpc.ModelResponse.data', index=0, + number=1, type=12, cpp_type=9, label=1, + has_default_value=False, default_value=b"", + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + _descriptor.FieldDescriptor( + name='id', full_name='grpc.ModelResponse.id', index=1, + number=2, type=9, cpp_type=9, label=1, + has_default_value=False, default_value=b"".decode('utf-8'), + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + _descriptor.FieldDescriptor( + name='status', full_name='grpc.ModelResponse.status', index=2, + number=3, type=14, cpp_type=8, label=1, + has_default_value=False, default_value=0, + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + _descriptor.FieldDescriptor( + name='message', full_name='grpc.ModelResponse.message', index=3, + number=4, type=9, cpp_type=9, label=1, + has_default_value=False, default_value=b"".decode('utf-8'), + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + ], + extensions=[ + ], + nested_types=[], + enum_types=[ + ], + serialized_options=None, + is_extendable=False, + syntax='proto3', + extension_ranges=[], + oneofs=[ + ], + serialized_start=1207, + serialized_end=1300, ) _GETGLOBALMODELREQUEST = _descriptor.Descriptor( - name='GetGlobalModelRequest', - full_name='grpc.GetGlobalModelRequest', - filename=None, - file=DESCRIPTOR, - containing_type=None, - create_key=_descriptor._internal_create_key, - fields=[ - _descriptor.FieldDescriptor( - name='sender', full_name='grpc.GetGlobalModelRequest.sender', index=0, - number=1, type=11, cpp_type=10, label=1, - has_default_value=False, default_value=None, - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), - _descriptor.FieldDescriptor( - name='receiver', full_name='grpc.GetGlobalModelRequest.receiver', index=1, - number=2, type=11, cpp_type=10, label=1, - has_default_value=False, default_value=None, - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), - ], - extensions=[ - ], - nested_types=[], - enum_types=[ - ], - serialized_options=None, - is_extendable=False, - syntax='proto3', - extension_ranges=[], - oneofs=[ - ], - serialized_start=1302, - serialized_end=1387, + name='GetGlobalModelRequest', + full_name='grpc.GetGlobalModelRequest', + filename=None, + file=DESCRIPTOR, + containing_type=None, + create_key=_descriptor._internal_create_key, + fields=[ + _descriptor.FieldDescriptor( + name='sender', full_name='grpc.GetGlobalModelRequest.sender', index=0, + number=1, type=11, cpp_type=10, label=1, + has_default_value=False, default_value=None, + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + _descriptor.FieldDescriptor( + name='receiver', full_name='grpc.GetGlobalModelRequest.receiver', index=1, + number=2, type=11, cpp_type=10, label=1, + has_default_value=False, default_value=None, + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + ], + extensions=[ + ], + nested_types=[], + enum_types=[ + ], + serialized_options=None, + is_extendable=False, + syntax='proto3', + extension_ranges=[], + oneofs=[ + ], + serialized_start=1302, + serialized_end=1387, ) _GETGLOBALMODELRESPONSE = _descriptor.Descriptor( - name='GetGlobalModelResponse', - full_name='grpc.GetGlobalModelResponse', - filename=None, - file=DESCRIPTOR, - containing_type=None, - create_key=_descriptor._internal_create_key, - fields=[ - _descriptor.FieldDescriptor( - name='sender', full_name='grpc.GetGlobalModelResponse.sender', index=0, - number=1, type=11, cpp_type=10, label=1, - has_default_value=False, default_value=None, - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), - _descriptor.FieldDescriptor( - name='receiver', full_name='grpc.GetGlobalModelResponse.receiver', index=1, - number=2, type=11, cpp_type=10, label=1, - has_default_value=False, default_value=None, - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), - _descriptor.FieldDescriptor( - name='model_id', full_name='grpc.GetGlobalModelResponse.model_id', index=2, - number=3, type=9, cpp_type=9, label=1, - has_default_value=False, default_value=b"".decode('utf-8'), - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), - ], - extensions=[ - ], - nested_types=[], - enum_types=[ - ], - serialized_options=None, - is_extendable=False, - syntax='proto3', - extension_ranges=[], - oneofs=[ - ], - serialized_start=1389, - serialized_end=1493, + name='GetGlobalModelResponse', + full_name='grpc.GetGlobalModelResponse', + filename=None, + file=DESCRIPTOR, + containing_type=None, + create_key=_descriptor._internal_create_key, + fields=[ + _descriptor.FieldDescriptor( + name='sender', full_name='grpc.GetGlobalModelResponse.sender', index=0, + number=1, type=11, cpp_type=10, label=1, + has_default_value=False, default_value=None, + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + _descriptor.FieldDescriptor( + name='receiver', full_name='grpc.GetGlobalModelResponse.receiver', index=1, + number=2, type=11, cpp_type=10, label=1, + has_default_value=False, default_value=None, + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + _descriptor.FieldDescriptor( + name='model_id', full_name='grpc.GetGlobalModelResponse.model_id', index=2, + number=3, type=9, cpp_type=9, label=1, + has_default_value=False, default_value=b"".decode('utf-8'), + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + ], + extensions=[ + ], + nested_types=[], + enum_types=[ + ], + serialized_options=None, + is_extendable=False, + syntax='proto3', + extension_ranges=[], + oneofs=[ + ], + serialized_start=1389, + serialized_end=1493, ) _HEARTBEAT = _descriptor.Descriptor( - name='Heartbeat', - full_name='grpc.Heartbeat', - filename=None, - file=DESCRIPTOR, - containing_type=None, - create_key=_descriptor._internal_create_key, - fields=[ - _descriptor.FieldDescriptor( - name='sender', full_name='grpc.Heartbeat.sender', index=0, - number=1, type=11, cpp_type=10, label=1, - has_default_value=False, default_value=None, - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), - ], - extensions=[ - ], - nested_types=[], - enum_types=[ - ], - serialized_options=None, - is_extendable=False, - syntax='proto3', - extension_ranges=[], - oneofs=[ - ], - serialized_start=1495, - serialized_end=1536, + name='Heartbeat', + full_name='grpc.Heartbeat', + filename=None, + file=DESCRIPTOR, + containing_type=None, + create_key=_descriptor._internal_create_key, + fields=[ + _descriptor.FieldDescriptor( + name='sender', full_name='grpc.Heartbeat.sender', index=0, + number=1, type=11, cpp_type=10, label=1, + has_default_value=False, default_value=None, + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + ], + extensions=[ + ], + nested_types=[], + enum_types=[ + ], + serialized_options=None, + is_extendable=False, + syntax='proto3', + extension_ranges=[], + oneofs=[ + ], + serialized_start=1495, + serialized_end=1536, ) _CLIENTAVAILABLEMESSAGE = _descriptor.Descriptor( - name='ClientAvailableMessage', - full_name='grpc.ClientAvailableMessage', - filename=None, - file=DESCRIPTOR, - containing_type=None, - create_key=_descriptor._internal_create_key, - fields=[ - _descriptor.FieldDescriptor( - name='sender', full_name='grpc.ClientAvailableMessage.sender', index=0, - number=1, type=11, cpp_type=10, label=1, - has_default_value=False, default_value=None, - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), - _descriptor.FieldDescriptor( - name='data', full_name='grpc.ClientAvailableMessage.data', index=1, - number=2, type=9, cpp_type=9, label=1, - has_default_value=False, default_value=b"".decode('utf-8'), - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), - _descriptor.FieldDescriptor( - name='timestamp', full_name='grpc.ClientAvailableMessage.timestamp', index=2, - number=3, type=9, cpp_type=9, label=1, - has_default_value=False, default_value=b"".decode('utf-8'), - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), - ], - extensions=[ - ], - nested_types=[], - enum_types=[ - ], - serialized_options=None, - is_extendable=False, - syntax='proto3', - extension_ranges=[], - oneofs=[ - ], - serialized_start=1538, - serialized_end=1625, + name='ClientAvailableMessage', + full_name='grpc.ClientAvailableMessage', + filename=None, + file=DESCRIPTOR, + containing_type=None, + create_key=_descriptor._internal_create_key, + fields=[ + _descriptor.FieldDescriptor( + name='sender', full_name='grpc.ClientAvailableMessage.sender', index=0, + number=1, type=11, cpp_type=10, label=1, + has_default_value=False, default_value=None, + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + _descriptor.FieldDescriptor( + name='data', full_name='grpc.ClientAvailableMessage.data', index=1, + number=2, type=9, cpp_type=9, label=1, + has_default_value=False, default_value=b"".decode('utf-8'), + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + _descriptor.FieldDescriptor( + name='timestamp', full_name='grpc.ClientAvailableMessage.timestamp', index=2, + number=3, type=9, cpp_type=9, label=1, + has_default_value=False, default_value=b"".decode('utf-8'), + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + ], + extensions=[ + ], + nested_types=[], + enum_types=[ + ], + serialized_options=None, + is_extendable=False, + syntax='proto3', + extension_ranges=[], + oneofs=[ + ], + serialized_start=1538, + serialized_end=1625, ) _LISTCLIENTSREQUEST = _descriptor.Descriptor( - name='ListClientsRequest', - full_name='grpc.ListClientsRequest', - filename=None, - file=DESCRIPTOR, - containing_type=None, - create_key=_descriptor._internal_create_key, - fields=[ - _descriptor.FieldDescriptor( - name='sender', full_name='grpc.ListClientsRequest.sender', index=0, - number=1, type=11, cpp_type=10, label=1, - has_default_value=False, default_value=None, - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), - _descriptor.FieldDescriptor( - name='channel', full_name='grpc.ListClientsRequest.channel', index=1, - number=2, type=14, cpp_type=8, label=1, - has_default_value=False, default_value=0, - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), - ], - extensions=[ - ], - nested_types=[], - enum_types=[ - ], - serialized_options=None, - is_extendable=False, - syntax='proto3', - extension_ranges=[], - oneofs=[ - ], - serialized_start=1627, - serialized_end=1709, + name='ListClientsRequest', + full_name='grpc.ListClientsRequest', + filename=None, + file=DESCRIPTOR, + containing_type=None, + create_key=_descriptor._internal_create_key, + fields=[ + _descriptor.FieldDescriptor( + name='sender', full_name='grpc.ListClientsRequest.sender', index=0, + number=1, type=11, cpp_type=10, label=1, + has_default_value=False, default_value=None, + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + _descriptor.FieldDescriptor( + name='channel', full_name='grpc.ListClientsRequest.channel', index=1, + number=2, type=14, cpp_type=8, label=1, + has_default_value=False, default_value=0, + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + ], + extensions=[ + ], + nested_types=[], + enum_types=[ + ], + serialized_options=None, + is_extendable=False, + syntax='proto3', + extension_ranges=[], + oneofs=[ + ], + serialized_start=1627, + serialized_end=1709, ) _CLIENTLIST = _descriptor.Descriptor( - name='ClientList', - full_name='grpc.ClientList', - filename=None, - file=DESCRIPTOR, - containing_type=None, - create_key=_descriptor._internal_create_key, - fields=[ - _descriptor.FieldDescriptor( - name='client', full_name='grpc.ClientList.client', index=0, - number=1, type=11, cpp_type=10, label=3, - has_default_value=False, default_value=[], - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), - ], - extensions=[ - ], - nested_types=[], - enum_types=[ - ], - serialized_options=None, - is_extendable=False, - syntax='proto3', - extension_ranges=[], - oneofs=[ - ], - serialized_start=1711, - serialized_end=1753, + name='ClientList', + full_name='grpc.ClientList', + filename=None, + file=DESCRIPTOR, + containing_type=None, + create_key=_descriptor._internal_create_key, + fields=[ + _descriptor.FieldDescriptor( + name='client', full_name='grpc.ClientList.client', index=0, + number=1, type=11, cpp_type=10, label=3, + has_default_value=False, default_value=[], + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + ], + extensions=[ + ], + nested_types=[], + enum_types=[ + ], + serialized_options=None, + is_extendable=False, + syntax='proto3', + extension_ranges=[], + oneofs=[ + ], + serialized_start=1711, + serialized_end=1753, ) _CLIENT = _descriptor.Descriptor( - name='Client', - full_name='grpc.Client', - filename=None, - file=DESCRIPTOR, - containing_type=None, - create_key=_descriptor._internal_create_key, - fields=[ - _descriptor.FieldDescriptor( - name='role', full_name='grpc.Client.role', index=0, - number=1, type=14, cpp_type=8, label=1, - has_default_value=False, default_value=0, - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), - _descriptor.FieldDescriptor( - name='name', full_name='grpc.Client.name', index=1, - number=2, type=9, cpp_type=9, label=1, - has_default_value=False, default_value=b"".decode('utf-8'), - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), - ], - extensions=[ - ], - nested_types=[], - enum_types=[ - ], - serialized_options=None, - is_extendable=False, - syntax='proto3', - extension_ranges=[], - oneofs=[ - ], - serialized_start=1755, - serialized_end=1803, + name='Client', + full_name='grpc.Client', + filename=None, + file=DESCRIPTOR, + containing_type=None, + create_key=_descriptor._internal_create_key, + fields=[ + _descriptor.FieldDescriptor( + name='role', full_name='grpc.Client.role', index=0, + number=1, type=14, cpp_type=8, label=1, + has_default_value=False, default_value=0, + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + _descriptor.FieldDescriptor( + name='name', full_name='grpc.Client.name', index=1, + number=2, type=9, cpp_type=9, label=1, + has_default_value=False, default_value=b"".decode('utf-8'), + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + ], + extensions=[ + ], + nested_types=[], + enum_types=[ + ], + serialized_options=None, + is_extendable=False, + syntax='proto3', + extension_ranges=[], + oneofs=[ + ], + serialized_start=1755, + serialized_end=1803, ) _REASSIGNREQUEST = _descriptor.Descriptor( - name='ReassignRequest', - full_name='grpc.ReassignRequest', - filename=None, - file=DESCRIPTOR, - containing_type=None, - create_key=_descriptor._internal_create_key, - fields=[ - _descriptor.FieldDescriptor( - name='sender', full_name='grpc.ReassignRequest.sender', index=0, - number=1, type=11, cpp_type=10, label=1, - has_default_value=False, default_value=None, - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), - _descriptor.FieldDescriptor( - name='receiver', full_name='grpc.ReassignRequest.receiver', index=1, - number=2, type=11, cpp_type=10, label=1, - has_default_value=False, default_value=None, - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), - _descriptor.FieldDescriptor( - name='server', full_name='grpc.ReassignRequest.server', index=2, - number=3, type=9, cpp_type=9, label=1, - has_default_value=False, default_value=b"".decode('utf-8'), - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), - _descriptor.FieldDescriptor( - name='port', full_name='grpc.ReassignRequest.port', index=3, - number=4, type=13, cpp_type=3, label=1, - has_default_value=False, default_value=0, - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), - ], - extensions=[ - ], - nested_types=[], - enum_types=[ - ], - serialized_options=None, - is_extendable=False, - syntax='proto3', - extension_ranges=[], - oneofs=[ - ], - serialized_start=1805, - serialized_end=1914, + name='ReassignRequest', + full_name='grpc.ReassignRequest', + filename=None, + file=DESCRIPTOR, + containing_type=None, + create_key=_descriptor._internal_create_key, + fields=[ + _descriptor.FieldDescriptor( + name='sender', full_name='grpc.ReassignRequest.sender', index=0, + number=1, type=11, cpp_type=10, label=1, + has_default_value=False, default_value=None, + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + _descriptor.FieldDescriptor( + name='receiver', full_name='grpc.ReassignRequest.receiver', index=1, + number=2, type=11, cpp_type=10, label=1, + has_default_value=False, default_value=None, + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + _descriptor.FieldDescriptor( + name='server', full_name='grpc.ReassignRequest.server', index=2, + number=3, type=9, cpp_type=9, label=1, + has_default_value=False, default_value=b"".decode('utf-8'), + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + _descriptor.FieldDescriptor( + name='port', full_name='grpc.ReassignRequest.port', index=3, + number=4, type=13, cpp_type=3, label=1, + has_default_value=False, default_value=0, + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + ], + extensions=[ + ], + nested_types=[], + enum_types=[ + ], + serialized_options=None, + is_extendable=False, + syntax='proto3', + extension_ranges=[], + oneofs=[ + ], + serialized_start=1805, + serialized_end=1914, ) _RECONNECTREQUEST = _descriptor.Descriptor( - name='ReconnectRequest', - full_name='grpc.ReconnectRequest', - filename=None, - file=DESCRIPTOR, - containing_type=None, - create_key=_descriptor._internal_create_key, - fields=[ - _descriptor.FieldDescriptor( - name='sender', full_name='grpc.ReconnectRequest.sender', index=0, - number=1, type=11, cpp_type=10, label=1, - has_default_value=False, default_value=None, - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), - _descriptor.FieldDescriptor( - name='receiver', full_name='grpc.ReconnectRequest.receiver', index=1, - number=2, type=11, cpp_type=10, label=1, - has_default_value=False, default_value=None, - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), - _descriptor.FieldDescriptor( - name='reconnect', full_name='grpc.ReconnectRequest.reconnect', index=2, - number=3, type=13, cpp_type=3, label=1, - has_default_value=False, default_value=0, - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), - ], - extensions=[ - ], - nested_types=[], - enum_types=[ - ], - serialized_options=None, - is_extendable=False, - syntax='proto3', - extension_ranges=[], - oneofs=[ - ], - serialized_start=1916, - serialized_end=2015, + name='ReconnectRequest', + full_name='grpc.ReconnectRequest', + filename=None, + file=DESCRIPTOR, + containing_type=None, + create_key=_descriptor._internal_create_key, + fields=[ + _descriptor.FieldDescriptor( + name='sender', full_name='grpc.ReconnectRequest.sender', index=0, + number=1, type=11, cpp_type=10, label=1, + has_default_value=False, default_value=None, + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + _descriptor.FieldDescriptor( + name='receiver', full_name='grpc.ReconnectRequest.receiver', index=1, + number=2, type=11, cpp_type=10, label=1, + has_default_value=False, default_value=None, + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + _descriptor.FieldDescriptor( + name='reconnect', full_name='grpc.ReconnectRequest.reconnect', index=2, + number=3, type=13, cpp_type=3, label=1, + has_default_value=False, default_value=0, + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + ], + extensions=[ + ], + nested_types=[], + enum_types=[ + ], + serialized_options=None, + is_extendable=False, + syntax='proto3', + extension_ranges=[], + oneofs=[ + ], + serialized_start=1916, + serialized_end=2015, ) _PARAMETER = _descriptor.Descriptor( - name='Parameter', - full_name='grpc.Parameter', - filename=None, - file=DESCRIPTOR, - containing_type=None, - create_key=_descriptor._internal_create_key, - fields=[ - _descriptor.FieldDescriptor( - name='key', full_name='grpc.Parameter.key', index=0, - number=1, type=9, cpp_type=9, label=1, - has_default_value=False, default_value=b"".decode('utf-8'), - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), - _descriptor.FieldDescriptor( - name='value', full_name='grpc.Parameter.value', index=1, - number=2, type=9, cpp_type=9, label=1, - has_default_value=False, default_value=b"".decode('utf-8'), - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), - ], - extensions=[ - ], - nested_types=[], - enum_types=[ - ], - serialized_options=None, - is_extendable=False, - syntax='proto3', - extension_ranges=[], - oneofs=[ - ], - serialized_start=2017, - serialized_end=2056, + name='Parameter', + full_name='grpc.Parameter', + filename=None, + file=DESCRIPTOR, + containing_type=None, + create_key=_descriptor._internal_create_key, + fields=[ + _descriptor.FieldDescriptor( + name='key', full_name='grpc.Parameter.key', index=0, + number=1, type=9, cpp_type=9, label=1, + has_default_value=False, default_value=b"".decode('utf-8'), + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + _descriptor.FieldDescriptor( + name='value', full_name='grpc.Parameter.value', index=1, + number=2, type=9, cpp_type=9, label=1, + has_default_value=False, default_value=b"".decode('utf-8'), + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + ], + extensions=[ + ], + nested_types=[], + enum_types=[ + ], + serialized_options=None, + is_extendable=False, + syntax='proto3', + extension_ranges=[], + oneofs=[ + ], + serialized_start=2017, + serialized_end=2056, ) _CONTROLREQUEST = _descriptor.Descriptor( - name='ControlRequest', - full_name='grpc.ControlRequest', - filename=None, - file=DESCRIPTOR, - containing_type=None, - create_key=_descriptor._internal_create_key, - fields=[ - _descriptor.FieldDescriptor( - name='command', full_name='grpc.ControlRequest.command', index=0, - number=1, type=14, cpp_type=8, label=1, - has_default_value=False, default_value=0, - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), - _descriptor.FieldDescriptor( - name='parameter', full_name='grpc.ControlRequest.parameter', index=1, - number=2, type=11, cpp_type=10, label=3, - has_default_value=False, default_value=[], - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), - ], - extensions=[ - ], - nested_types=[], - enum_types=[ - ], - serialized_options=None, - is_extendable=False, - syntax='proto3', - extension_ranges=[], - oneofs=[ - ], - serialized_start=2058, - serialized_end=2142, + name='ControlRequest', + full_name='grpc.ControlRequest', + filename=None, + file=DESCRIPTOR, + containing_type=None, + create_key=_descriptor._internal_create_key, + fields=[ + _descriptor.FieldDescriptor( + name='command', full_name='grpc.ControlRequest.command', index=0, + number=1, type=14, cpp_type=8, label=1, + has_default_value=False, default_value=0, + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + _descriptor.FieldDescriptor( + name='parameter', full_name='grpc.ControlRequest.parameter', index=1, + number=2, type=11, cpp_type=10, label=3, + has_default_value=False, default_value=[], + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + ], + extensions=[ + ], + nested_types=[], + enum_types=[ + ], + serialized_options=None, + is_extendable=False, + syntax='proto3', + extension_ranges=[], + oneofs=[ + ], + serialized_start=2058, + serialized_end=2142, ) _CONTROLRESPONSE = _descriptor.Descriptor( - name='ControlResponse', - full_name='grpc.ControlResponse', - filename=None, - file=DESCRIPTOR, - containing_type=None, - create_key=_descriptor._internal_create_key, - fields=[ - _descriptor.FieldDescriptor( - name='message', full_name='grpc.ControlResponse.message', index=0, - number=1, type=9, cpp_type=9, label=1, - has_default_value=False, default_value=b"".decode('utf-8'), - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), - _descriptor.FieldDescriptor( - name='parameter', full_name='grpc.ControlResponse.parameter', index=1, - number=2, type=11, cpp_type=10, label=3, - has_default_value=False, default_value=[], - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), - ], - extensions=[ - ], - nested_types=[], - enum_types=[ - ], - serialized_options=None, - is_extendable=False, - syntax='proto3', - extension_ranges=[], - oneofs=[ - ], - serialized_start=2144, - serialized_end=2214, + name='ControlResponse', + full_name='grpc.ControlResponse', + filename=None, + file=DESCRIPTOR, + containing_type=None, + create_key=_descriptor._internal_create_key, + fields=[ + _descriptor.FieldDescriptor( + name='message', full_name='grpc.ControlResponse.message', index=0, + number=1, type=9, cpp_type=9, label=1, + has_default_value=False, default_value=b"".decode('utf-8'), + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + _descriptor.FieldDescriptor( + name='parameter', full_name='grpc.ControlResponse.parameter', index=1, + number=2, type=11, cpp_type=10, label=3, + has_default_value=False, default_value=[], + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + ], + extensions=[ + ], + nested_types=[], + enum_types=[ + ], + serialized_options=None, + is_extendable=False, + syntax='proto3', + extension_ranges=[], + oneofs=[ + ], + serialized_start=2144, + serialized_end=2214, ) _REPORTRESPONSE = _descriptor.Descriptor( - name='ReportResponse', - full_name='grpc.ReportResponse', - filename=None, - file=DESCRIPTOR, - containing_type=None, - create_key=_descriptor._internal_create_key, - fields=[ - _descriptor.FieldDescriptor( - name='sender', full_name='grpc.ReportResponse.sender', index=0, - number=1, type=11, cpp_type=10, label=1, - has_default_value=False, default_value=None, - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), - _descriptor.FieldDescriptor( - name='parameter', full_name='grpc.ReportResponse.parameter', index=1, - number=2, type=11, cpp_type=10, label=3, - has_default_value=False, default_value=[], - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), - ], - extensions=[ - ], - nested_types=[], - enum_types=[ - ], - serialized_options=None, - is_extendable=False, - syntax='proto3', - extension_ranges=[], - oneofs=[ - ], - serialized_start=2216, - serialized_end=2298, + name='ReportResponse', + full_name='grpc.ReportResponse', + filename=None, + file=DESCRIPTOR, + containing_type=None, + create_key=_descriptor._internal_create_key, + fields=[ + _descriptor.FieldDescriptor( + name='sender', full_name='grpc.ReportResponse.sender', index=0, + number=1, type=11, cpp_type=10, label=1, + has_default_value=False, default_value=None, + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + _descriptor.FieldDescriptor( + name='parameter', full_name='grpc.ReportResponse.parameter', index=1, + number=2, type=11, cpp_type=10, label=3, + has_default_value=False, default_value=[], + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + ], + extensions=[ + ], + nested_types=[], + enum_types=[ + ], + serialized_options=None, + is_extendable=False, + syntax='proto3', + extension_ranges=[], + oneofs=[ + ], + serialized_start=2216, + serialized_end=2298, ) _CONNECTIONREQUEST = _descriptor.Descriptor( - name='ConnectionRequest', - full_name='grpc.ConnectionRequest', - filename=None, - file=DESCRIPTOR, - containing_type=None, - create_key=_descriptor._internal_create_key, - fields=[ - ], - extensions=[ - ], - nested_types=[], - enum_types=[ - ], - serialized_options=None, - is_extendable=False, - syntax='proto3', - extension_ranges=[], - oneofs=[ - ], - serialized_start=2300, - serialized_end=2319, + name='ConnectionRequest', + full_name='grpc.ConnectionRequest', + filename=None, + file=DESCRIPTOR, + containing_type=None, + create_key=_descriptor._internal_create_key, + fields=[ + ], + extensions=[ + ], + nested_types=[], + enum_types=[ + ], + serialized_options=None, + is_extendable=False, + syntax='proto3', + extension_ranges=[], + oneofs=[ + ], + serialized_start=2300, + serialized_end=2319, ) _CONNECTIONRESPONSE = _descriptor.Descriptor( - name='ConnectionResponse', - full_name='grpc.ConnectionResponse', - filename=None, - file=DESCRIPTOR, - containing_type=None, - create_key=_descriptor._internal_create_key, - fields=[ - _descriptor.FieldDescriptor( - name='status', full_name='grpc.ConnectionResponse.status', index=0, - number=1, type=14, cpp_type=8, label=1, - has_default_value=False, default_value=0, - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), - ], - extensions=[ - ], - nested_types=[], - enum_types=[ - ], - serialized_options=None, - is_extendable=False, - syntax='proto3', - extension_ranges=[], - oneofs=[ - ], - serialized_start=2321, - serialized_end=2381, + name='ConnectionResponse', + full_name='grpc.ConnectionResponse', + filename=None, + file=DESCRIPTOR, + containing_type=None, + create_key=_descriptor._internal_create_key, + fields=[ + _descriptor.FieldDescriptor( + name='status', full_name='grpc.ConnectionResponse.status', index=0, + number=1, type=14, cpp_type=8, label=1, + has_default_value=False, default_value=0, + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), + ], + extensions=[ + ], + nested_types=[], + enum_types=[ + ], + serialized_options=None, + is_extendable=False, + syntax='proto3', + extension_ranges=[], + oneofs=[ + ], + serialized_start=2321, + serialized_end=2381, ) _RESPONSE.fields_by_name['sender'].message_type = _CLIENT @@ -1512,463 +1511,462 @@ _sym_db.RegisterFileDescriptor(DESCRIPTOR) Response = _reflection.GeneratedProtocolMessageType('Response', (_message.Message,), { - 'DESCRIPTOR' : _RESPONSE, - '__module__' : 'fedn.common.net.grpc.fedn_pb2' - # @@protoc_insertion_point(class_scope:grpc.Response) - }) + 'DESCRIPTOR': _RESPONSE, + '__module__': 'fedn.common.net.grpc.fedn_pb2' + # @@protoc_insertion_point(class_scope:grpc.Response) +}) _sym_db.RegisterMessage(Response) Status = _reflection.GeneratedProtocolMessageType('Status', (_message.Message,), { - 'DESCRIPTOR' : _STATUS, - '__module__' : 'fedn.common.net.grpc.fedn_pb2' - # @@protoc_insertion_point(class_scope:grpc.Status) - }) + 'DESCRIPTOR': _STATUS, + '__module__': 'fedn.common.net.grpc.fedn_pb2' + # @@protoc_insertion_point(class_scope:grpc.Status) +}) _sym_db.RegisterMessage(Status) ModelUpdateRequest = _reflection.GeneratedProtocolMessageType('ModelUpdateRequest', (_message.Message,), { - 'DESCRIPTOR' : _MODELUPDATEREQUEST, - '__module__' : 'fedn.common.net.grpc.fedn_pb2' - # @@protoc_insertion_point(class_scope:grpc.ModelUpdateRequest) - }) + 'DESCRIPTOR': _MODELUPDATEREQUEST, + '__module__': 'fedn.common.net.grpc.fedn_pb2' + # @@protoc_insertion_point(class_scope:grpc.ModelUpdateRequest) +}) _sym_db.RegisterMessage(ModelUpdateRequest) ModelUpdate = _reflection.GeneratedProtocolMessageType('ModelUpdate', (_message.Message,), { - 'DESCRIPTOR' : _MODELUPDATE, - '__module__' : 'fedn.common.net.grpc.fedn_pb2' - # @@protoc_insertion_point(class_scope:grpc.ModelUpdate) - }) + 'DESCRIPTOR': _MODELUPDATE, + '__module__': 'fedn.common.net.grpc.fedn_pb2' + # @@protoc_insertion_point(class_scope:grpc.ModelUpdate) +}) _sym_db.RegisterMessage(ModelUpdate) ModelValidationRequest = _reflection.GeneratedProtocolMessageType('ModelValidationRequest', (_message.Message,), { - 'DESCRIPTOR' : _MODELVALIDATIONREQUEST, - '__module__' : 'fedn.common.net.grpc.fedn_pb2' - # @@protoc_insertion_point(class_scope:grpc.ModelValidationRequest) - }) + 'DESCRIPTOR': _MODELVALIDATIONREQUEST, + '__module__': 'fedn.common.net.grpc.fedn_pb2' + # @@protoc_insertion_point(class_scope:grpc.ModelValidationRequest) +}) _sym_db.RegisterMessage(ModelValidationRequest) ModelValidation = _reflection.GeneratedProtocolMessageType('ModelValidation', (_message.Message,), { - 'DESCRIPTOR' : _MODELVALIDATION, - '__module__' : 'fedn.common.net.grpc.fedn_pb2' - # @@protoc_insertion_point(class_scope:grpc.ModelValidation) - }) + 'DESCRIPTOR': _MODELVALIDATION, + '__module__': 'fedn.common.net.grpc.fedn_pb2' + # @@protoc_insertion_point(class_scope:grpc.ModelValidation) +}) _sym_db.RegisterMessage(ModelValidation) ModelRequest = _reflection.GeneratedProtocolMessageType('ModelRequest', (_message.Message,), { - 'DESCRIPTOR' : _MODELREQUEST, - '__module__' : 'fedn.common.net.grpc.fedn_pb2' - # @@protoc_insertion_point(class_scope:grpc.ModelRequest) - }) + 'DESCRIPTOR': _MODELREQUEST, + '__module__': 'fedn.common.net.grpc.fedn_pb2' + # @@protoc_insertion_point(class_scope:grpc.ModelRequest) +}) _sym_db.RegisterMessage(ModelRequest) ModelResponse = _reflection.GeneratedProtocolMessageType('ModelResponse', (_message.Message,), { - 'DESCRIPTOR' : _MODELRESPONSE, - '__module__' : 'fedn.common.net.grpc.fedn_pb2' - # @@protoc_insertion_point(class_scope:grpc.ModelResponse) - }) + 'DESCRIPTOR': _MODELRESPONSE, + '__module__': 'fedn.common.net.grpc.fedn_pb2' + # @@protoc_insertion_point(class_scope:grpc.ModelResponse) +}) _sym_db.RegisterMessage(ModelResponse) GetGlobalModelRequest = _reflection.GeneratedProtocolMessageType('GetGlobalModelRequest', (_message.Message,), { - 'DESCRIPTOR' : _GETGLOBALMODELREQUEST, - '__module__' : 'fedn.common.net.grpc.fedn_pb2' - # @@protoc_insertion_point(class_scope:grpc.GetGlobalModelRequest) - }) + 'DESCRIPTOR': _GETGLOBALMODELREQUEST, + '__module__': 'fedn.common.net.grpc.fedn_pb2' + # @@protoc_insertion_point(class_scope:grpc.GetGlobalModelRequest) +}) _sym_db.RegisterMessage(GetGlobalModelRequest) GetGlobalModelResponse = _reflection.GeneratedProtocolMessageType('GetGlobalModelResponse', (_message.Message,), { - 'DESCRIPTOR' : _GETGLOBALMODELRESPONSE, - '__module__' : 'fedn.common.net.grpc.fedn_pb2' - # @@protoc_insertion_point(class_scope:grpc.GetGlobalModelResponse) - }) + 'DESCRIPTOR': _GETGLOBALMODELRESPONSE, + '__module__': 'fedn.common.net.grpc.fedn_pb2' + # @@protoc_insertion_point(class_scope:grpc.GetGlobalModelResponse) +}) _sym_db.RegisterMessage(GetGlobalModelResponse) Heartbeat = _reflection.GeneratedProtocolMessageType('Heartbeat', (_message.Message,), { - 'DESCRIPTOR' : _HEARTBEAT, - '__module__' : 'fedn.common.net.grpc.fedn_pb2' - # @@protoc_insertion_point(class_scope:grpc.Heartbeat) - }) + 'DESCRIPTOR': _HEARTBEAT, + '__module__': 'fedn.common.net.grpc.fedn_pb2' + # @@protoc_insertion_point(class_scope:grpc.Heartbeat) +}) _sym_db.RegisterMessage(Heartbeat) ClientAvailableMessage = _reflection.GeneratedProtocolMessageType('ClientAvailableMessage', (_message.Message,), { - 'DESCRIPTOR' : _CLIENTAVAILABLEMESSAGE, - '__module__' : 'fedn.common.net.grpc.fedn_pb2' - # @@protoc_insertion_point(class_scope:grpc.ClientAvailableMessage) - }) + 'DESCRIPTOR': _CLIENTAVAILABLEMESSAGE, + '__module__': 'fedn.common.net.grpc.fedn_pb2' + # @@protoc_insertion_point(class_scope:grpc.ClientAvailableMessage) +}) _sym_db.RegisterMessage(ClientAvailableMessage) ListClientsRequest = _reflection.GeneratedProtocolMessageType('ListClientsRequest', (_message.Message,), { - 'DESCRIPTOR' : _LISTCLIENTSREQUEST, - '__module__' : 'fedn.common.net.grpc.fedn_pb2' - # @@protoc_insertion_point(class_scope:grpc.ListClientsRequest) - }) + 'DESCRIPTOR': _LISTCLIENTSREQUEST, + '__module__': 'fedn.common.net.grpc.fedn_pb2' + # @@protoc_insertion_point(class_scope:grpc.ListClientsRequest) +}) _sym_db.RegisterMessage(ListClientsRequest) ClientList = _reflection.GeneratedProtocolMessageType('ClientList', (_message.Message,), { - 'DESCRIPTOR' : _CLIENTLIST, - '__module__' : 'fedn.common.net.grpc.fedn_pb2' - # @@protoc_insertion_point(class_scope:grpc.ClientList) - }) + 'DESCRIPTOR': _CLIENTLIST, + '__module__': 'fedn.common.net.grpc.fedn_pb2' + # @@protoc_insertion_point(class_scope:grpc.ClientList) +}) _sym_db.RegisterMessage(ClientList) Client = _reflection.GeneratedProtocolMessageType('Client', (_message.Message,), { - 'DESCRIPTOR' : _CLIENT, - '__module__' : 'fedn.common.net.grpc.fedn_pb2' - # @@protoc_insertion_point(class_scope:grpc.Client) - }) + 'DESCRIPTOR': _CLIENT, + '__module__': 'fedn.common.net.grpc.fedn_pb2' + # @@protoc_insertion_point(class_scope:grpc.Client) +}) _sym_db.RegisterMessage(Client) ReassignRequest = _reflection.GeneratedProtocolMessageType('ReassignRequest', (_message.Message,), { - 'DESCRIPTOR' : _REASSIGNREQUEST, - '__module__' : 'fedn.common.net.grpc.fedn_pb2' - # @@protoc_insertion_point(class_scope:grpc.ReassignRequest) - }) + 'DESCRIPTOR': _REASSIGNREQUEST, + '__module__': 'fedn.common.net.grpc.fedn_pb2' + # @@protoc_insertion_point(class_scope:grpc.ReassignRequest) +}) _sym_db.RegisterMessage(ReassignRequest) ReconnectRequest = _reflection.GeneratedProtocolMessageType('ReconnectRequest', (_message.Message,), { - 'DESCRIPTOR' : _RECONNECTREQUEST, - '__module__' : 'fedn.common.net.grpc.fedn_pb2' - # @@protoc_insertion_point(class_scope:grpc.ReconnectRequest) - }) + 'DESCRIPTOR': _RECONNECTREQUEST, + '__module__': 'fedn.common.net.grpc.fedn_pb2' + # @@protoc_insertion_point(class_scope:grpc.ReconnectRequest) +}) _sym_db.RegisterMessage(ReconnectRequest) Parameter = _reflection.GeneratedProtocolMessageType('Parameter', (_message.Message,), { - 'DESCRIPTOR' : _PARAMETER, - '__module__' : 'fedn.common.net.grpc.fedn_pb2' - # @@protoc_insertion_point(class_scope:grpc.Parameter) - }) + 'DESCRIPTOR': _PARAMETER, + '__module__': 'fedn.common.net.grpc.fedn_pb2' + # @@protoc_insertion_point(class_scope:grpc.Parameter) +}) _sym_db.RegisterMessage(Parameter) ControlRequest = _reflection.GeneratedProtocolMessageType('ControlRequest', (_message.Message,), { - 'DESCRIPTOR' : _CONTROLREQUEST, - '__module__' : 'fedn.common.net.grpc.fedn_pb2' - # @@protoc_insertion_point(class_scope:grpc.ControlRequest) - }) + 'DESCRIPTOR': _CONTROLREQUEST, + '__module__': 'fedn.common.net.grpc.fedn_pb2' + # @@protoc_insertion_point(class_scope:grpc.ControlRequest) +}) _sym_db.RegisterMessage(ControlRequest) ControlResponse = _reflection.GeneratedProtocolMessageType('ControlResponse', (_message.Message,), { - 'DESCRIPTOR' : _CONTROLRESPONSE, - '__module__' : 'fedn.common.net.grpc.fedn_pb2' - # @@protoc_insertion_point(class_scope:grpc.ControlResponse) - }) + 'DESCRIPTOR': _CONTROLRESPONSE, + '__module__': 'fedn.common.net.grpc.fedn_pb2' + # @@protoc_insertion_point(class_scope:grpc.ControlResponse) +}) _sym_db.RegisterMessage(ControlResponse) ReportResponse = _reflection.GeneratedProtocolMessageType('ReportResponse', (_message.Message,), { - 'DESCRIPTOR' : _REPORTRESPONSE, - '__module__' : 'fedn.common.net.grpc.fedn_pb2' - # @@protoc_insertion_point(class_scope:grpc.ReportResponse) - }) + 'DESCRIPTOR': _REPORTRESPONSE, + '__module__': 'fedn.common.net.grpc.fedn_pb2' + # @@protoc_insertion_point(class_scope:grpc.ReportResponse) +}) _sym_db.RegisterMessage(ReportResponse) ConnectionRequest = _reflection.GeneratedProtocolMessageType('ConnectionRequest', (_message.Message,), { - 'DESCRIPTOR' : _CONNECTIONREQUEST, - '__module__' : 'fedn.common.net.grpc.fedn_pb2' - # @@protoc_insertion_point(class_scope:grpc.ConnectionRequest) - }) + 'DESCRIPTOR': _CONNECTIONREQUEST, + '__module__': 'fedn.common.net.grpc.fedn_pb2' + # @@protoc_insertion_point(class_scope:grpc.ConnectionRequest) +}) _sym_db.RegisterMessage(ConnectionRequest) ConnectionResponse = _reflection.GeneratedProtocolMessageType('ConnectionResponse', (_message.Message,), { - 'DESCRIPTOR' : _CONNECTIONRESPONSE, - '__module__' : 'fedn.common.net.grpc.fedn_pb2' - # @@protoc_insertion_point(class_scope:grpc.ConnectionResponse) - }) + 'DESCRIPTOR': _CONNECTIONRESPONSE, + '__module__': 'fedn.common.net.grpc.fedn_pb2' + # @@protoc_insertion_point(class_scope:grpc.ConnectionResponse) +}) _sym_db.RegisterMessage(ConnectionResponse) - _MODELSERVICE = _descriptor.ServiceDescriptor( - name='ModelService', - full_name='grpc.ModelService', - file=DESCRIPTOR, - index=0, - serialized_options=None, - create_key=_descriptor._internal_create_key, - serialized_start=2936, - serialized_end=3058, - methods=[ - _descriptor.MethodDescriptor( - name='Upload', - full_name='grpc.ModelService.Upload', + name='ModelService', + full_name='grpc.ModelService', + file=DESCRIPTOR, index=0, - containing_service=None, - input_type=_MODELREQUEST, - output_type=_MODELRESPONSE, serialized_options=None, create_key=_descriptor._internal_create_key, - ), - _descriptor.MethodDescriptor( - name='Download', - full_name='grpc.ModelService.Download', - index=1, - containing_service=None, - input_type=_MODELREQUEST, - output_type=_MODELRESPONSE, - serialized_options=None, - create_key=_descriptor._internal_create_key, - ), -]) + serialized_start=2936, + serialized_end=3058, + methods=[ + _descriptor.MethodDescriptor( + name='Upload', + full_name='grpc.ModelService.Upload', + index=0, + containing_service=None, + input_type=_MODELREQUEST, + output_type=_MODELRESPONSE, + serialized_options=None, + create_key=_descriptor._internal_create_key, + ), + _descriptor.MethodDescriptor( + name='Download', + full_name='grpc.ModelService.Download', + index=1, + containing_service=None, + input_type=_MODELREQUEST, + output_type=_MODELRESPONSE, + serialized_options=None, + create_key=_descriptor._internal_create_key, + ), + ]) _sym_db.RegisterServiceDescriptor(_MODELSERVICE) DESCRIPTOR.services_by_name['ModelService'] = _MODELSERVICE _CONTROL = _descriptor.ServiceDescriptor( - name='Control', - full_name='grpc.Control', - file=DESCRIPTOR, - index=1, - serialized_options=None, - create_key=_descriptor._internal_create_key, - serialized_start=3061, - serialized_end=3288, - methods=[ - _descriptor.MethodDescriptor( - name='Start', - full_name='grpc.Control.Start', - index=0, - containing_service=None, - input_type=_CONTROLREQUEST, - output_type=_CONTROLRESPONSE, - serialized_options=None, - create_key=_descriptor._internal_create_key, - ), - _descriptor.MethodDescriptor( - name='Stop', - full_name='grpc.Control.Stop', + name='Control', + full_name='grpc.Control', + file=DESCRIPTOR, index=1, - containing_service=None, - input_type=_CONTROLREQUEST, - output_type=_CONTROLRESPONSE, - serialized_options=None, - create_key=_descriptor._internal_create_key, - ), - _descriptor.MethodDescriptor( - name='Configure', - full_name='grpc.Control.Configure', - index=2, - containing_service=None, - input_type=_CONTROLREQUEST, - output_type=_REPORTRESPONSE, - serialized_options=None, - create_key=_descriptor._internal_create_key, - ), - _descriptor.MethodDescriptor( - name='Report', - full_name='grpc.Control.Report', - index=3, - containing_service=None, - input_type=_CONTROLREQUEST, - output_type=_REPORTRESPONSE, serialized_options=None, create_key=_descriptor._internal_create_key, - ), -]) + serialized_start=3061, + serialized_end=3288, + methods=[ + _descriptor.MethodDescriptor( + name='Start', + full_name='grpc.Control.Start', + index=0, + containing_service=None, + input_type=_CONTROLREQUEST, + output_type=_CONTROLRESPONSE, + serialized_options=None, + create_key=_descriptor._internal_create_key, + ), + _descriptor.MethodDescriptor( + name='Stop', + full_name='grpc.Control.Stop', + index=1, + containing_service=None, + input_type=_CONTROLREQUEST, + output_type=_CONTROLRESPONSE, + serialized_options=None, + create_key=_descriptor._internal_create_key, + ), + _descriptor.MethodDescriptor( + name='Configure', + full_name='grpc.Control.Configure', + index=2, + containing_service=None, + input_type=_CONTROLREQUEST, + output_type=_REPORTRESPONSE, + serialized_options=None, + create_key=_descriptor._internal_create_key, + ), + _descriptor.MethodDescriptor( + name='Report', + full_name='grpc.Control.Report', + index=3, + containing_service=None, + input_type=_CONTROLREQUEST, + output_type=_REPORTRESPONSE, + serialized_options=None, + create_key=_descriptor._internal_create_key, + ), + ]) _sym_db.RegisterServiceDescriptor(_CONTROL) DESCRIPTOR.services_by_name['Control'] = _CONTROL _REDUCER = _descriptor.ServiceDescriptor( - name='Reducer', - full_name='grpc.Reducer', - file=DESCRIPTOR, - index=2, - serialized_options=None, - create_key=_descriptor._internal_create_key, - serialized_start=3290, - serialized_end=3376, - methods=[ - _descriptor.MethodDescriptor( - name='GetGlobalModel', - full_name='grpc.Reducer.GetGlobalModel', - index=0, - containing_service=None, - input_type=_GETGLOBALMODELREQUEST, - output_type=_GETGLOBALMODELRESPONSE, + name='Reducer', + full_name='grpc.Reducer', + file=DESCRIPTOR, + index=2, serialized_options=None, create_key=_descriptor._internal_create_key, - ), -]) + serialized_start=3290, + serialized_end=3376, + methods=[ + _descriptor.MethodDescriptor( + name='GetGlobalModel', + full_name='grpc.Reducer.GetGlobalModel', + index=0, + containing_service=None, + input_type=_GETGLOBALMODELREQUEST, + output_type=_GETGLOBALMODELRESPONSE, + serialized_options=None, + create_key=_descriptor._internal_create_key, + ), + ]) _sym_db.RegisterServiceDescriptor(_REDUCER) DESCRIPTOR.services_by_name['Reducer'] = _REDUCER _CONNECTOR = _descriptor.ServiceDescriptor( - name='Connector', - full_name='grpc.Connector', - file=DESCRIPTOR, - index=3, - serialized_options=None, - create_key=_descriptor._internal_create_key, - serialized_start=3379, - serialized_end=3806, - methods=[ - _descriptor.MethodDescriptor( - name='AllianceStatusStream', - full_name='grpc.Connector.AllianceStatusStream', - index=0, - containing_service=None, - input_type=_CLIENTAVAILABLEMESSAGE, - output_type=_STATUS, - serialized_options=None, - create_key=_descriptor._internal_create_key, - ), - _descriptor.MethodDescriptor( - name='SendStatus', - full_name='grpc.Connector.SendStatus', - index=1, - containing_service=None, - input_type=_STATUS, - output_type=_RESPONSE, - serialized_options=None, - create_key=_descriptor._internal_create_key, - ), - _descriptor.MethodDescriptor( - name='ListActiveClients', - full_name='grpc.Connector.ListActiveClients', - index=2, - containing_service=None, - input_type=_LISTCLIENTSREQUEST, - output_type=_CLIENTLIST, - serialized_options=None, - create_key=_descriptor._internal_create_key, - ), - _descriptor.MethodDescriptor( - name='AcceptingClients', - full_name='grpc.Connector.AcceptingClients', + name='Connector', + full_name='grpc.Connector', + file=DESCRIPTOR, index=3, - containing_service=None, - input_type=_CONNECTIONREQUEST, - output_type=_CONNECTIONRESPONSE, serialized_options=None, create_key=_descriptor._internal_create_key, - ), - _descriptor.MethodDescriptor( - name='SendHeartbeat', - full_name='grpc.Connector.SendHeartbeat', - index=4, - containing_service=None, - input_type=_HEARTBEAT, - output_type=_RESPONSE, - serialized_options=None, - create_key=_descriptor._internal_create_key, - ), - _descriptor.MethodDescriptor( - name='ReassignClient', - full_name='grpc.Connector.ReassignClient', - index=5, - containing_service=None, - input_type=_REASSIGNREQUEST, - output_type=_RESPONSE, - serialized_options=None, - create_key=_descriptor._internal_create_key, - ), - _descriptor.MethodDescriptor( - name='ReconnectClient', - full_name='grpc.Connector.ReconnectClient', - index=6, - containing_service=None, - input_type=_RECONNECTREQUEST, - output_type=_RESPONSE, - serialized_options=None, - create_key=_descriptor._internal_create_key, - ), -]) + serialized_start=3379, + serialized_end=3806, + methods=[ + _descriptor.MethodDescriptor( + name='AllianceStatusStream', + full_name='grpc.Connector.AllianceStatusStream', + index=0, + containing_service=None, + input_type=_CLIENTAVAILABLEMESSAGE, + output_type=_STATUS, + serialized_options=None, + create_key=_descriptor._internal_create_key, + ), + _descriptor.MethodDescriptor( + name='SendStatus', + full_name='grpc.Connector.SendStatus', + index=1, + containing_service=None, + input_type=_STATUS, + output_type=_RESPONSE, + serialized_options=None, + create_key=_descriptor._internal_create_key, + ), + _descriptor.MethodDescriptor( + name='ListActiveClients', + full_name='grpc.Connector.ListActiveClients', + index=2, + containing_service=None, + input_type=_LISTCLIENTSREQUEST, + output_type=_CLIENTLIST, + serialized_options=None, + create_key=_descriptor._internal_create_key, + ), + _descriptor.MethodDescriptor( + name='AcceptingClients', + full_name='grpc.Connector.AcceptingClients', + index=3, + containing_service=None, + input_type=_CONNECTIONREQUEST, + output_type=_CONNECTIONRESPONSE, + serialized_options=None, + create_key=_descriptor._internal_create_key, + ), + _descriptor.MethodDescriptor( + name='SendHeartbeat', + full_name='grpc.Connector.SendHeartbeat', + index=4, + containing_service=None, + input_type=_HEARTBEAT, + output_type=_RESPONSE, + serialized_options=None, + create_key=_descriptor._internal_create_key, + ), + _descriptor.MethodDescriptor( + name='ReassignClient', + full_name='grpc.Connector.ReassignClient', + index=5, + containing_service=None, + input_type=_REASSIGNREQUEST, + output_type=_RESPONSE, + serialized_options=None, + create_key=_descriptor._internal_create_key, + ), + _descriptor.MethodDescriptor( + name='ReconnectClient', + full_name='grpc.Connector.ReconnectClient', + index=6, + containing_service=None, + input_type=_RECONNECTREQUEST, + output_type=_RESPONSE, + serialized_options=None, + create_key=_descriptor._internal_create_key, + ), + ]) _sym_db.RegisterServiceDescriptor(_CONNECTOR) DESCRIPTOR.services_by_name['Connector'] = _CONNECTOR _COMBINER = _descriptor.ServiceDescriptor( - name='Combiner', - full_name='grpc.Combiner', - file=DESCRIPTOR, - index=4, - serialized_options=None, - create_key=_descriptor._internal_create_key, - serialized_start=3809, - serialized_end=4411, - methods=[ - _descriptor.MethodDescriptor( - name='ModelUpdateRequestStream', - full_name='grpc.Combiner.ModelUpdateRequestStream', - index=0, - containing_service=None, - input_type=_CLIENTAVAILABLEMESSAGE, - output_type=_MODELUPDATEREQUEST, - serialized_options=None, - create_key=_descriptor._internal_create_key, - ), - _descriptor.MethodDescriptor( - name='ModelUpdateStream', - full_name='grpc.Combiner.ModelUpdateStream', - index=1, - containing_service=None, - input_type=_CLIENTAVAILABLEMESSAGE, - output_type=_MODELUPDATE, - serialized_options=None, - create_key=_descriptor._internal_create_key, - ), - _descriptor.MethodDescriptor( - name='ModelValidationRequestStream', - full_name='grpc.Combiner.ModelValidationRequestStream', - index=2, - containing_service=None, - input_type=_CLIENTAVAILABLEMESSAGE, - output_type=_MODELVALIDATIONREQUEST, - serialized_options=None, - create_key=_descriptor._internal_create_key, - ), - _descriptor.MethodDescriptor( - name='ModelValidationStream', - full_name='grpc.Combiner.ModelValidationStream', - index=3, - containing_service=None, - input_type=_CLIENTAVAILABLEMESSAGE, - output_type=_MODELVALIDATION, - serialized_options=None, - create_key=_descriptor._internal_create_key, - ), - _descriptor.MethodDescriptor( - name='SendModelUpdateRequest', - full_name='grpc.Combiner.SendModelUpdateRequest', + name='Combiner', + full_name='grpc.Combiner', + file=DESCRIPTOR, index=4, - containing_service=None, - input_type=_MODELUPDATEREQUEST, - output_type=_RESPONSE, - serialized_options=None, - create_key=_descriptor._internal_create_key, - ), - _descriptor.MethodDescriptor( - name='SendModelUpdate', - full_name='grpc.Combiner.SendModelUpdate', - index=5, - containing_service=None, - input_type=_MODELUPDATE, - output_type=_RESPONSE, - serialized_options=None, - create_key=_descriptor._internal_create_key, - ), - _descriptor.MethodDescriptor( - name='SendModelValidationRequest', - full_name='grpc.Combiner.SendModelValidationRequest', - index=6, - containing_service=None, - input_type=_MODELVALIDATIONREQUEST, - output_type=_RESPONSE, - serialized_options=None, - create_key=_descriptor._internal_create_key, - ), - _descriptor.MethodDescriptor( - name='SendModelValidation', - full_name='grpc.Combiner.SendModelValidation', - index=7, - containing_service=None, - input_type=_MODELVALIDATION, - output_type=_RESPONSE, serialized_options=None, create_key=_descriptor._internal_create_key, - ), -]) + serialized_start=3809, + serialized_end=4411, + methods=[ + _descriptor.MethodDescriptor( + name='ModelUpdateRequestStream', + full_name='grpc.Combiner.ModelUpdateRequestStream', + index=0, + containing_service=None, + input_type=_CLIENTAVAILABLEMESSAGE, + output_type=_MODELUPDATEREQUEST, + serialized_options=None, + create_key=_descriptor._internal_create_key, + ), + _descriptor.MethodDescriptor( + name='ModelUpdateStream', + full_name='grpc.Combiner.ModelUpdateStream', + index=1, + containing_service=None, + input_type=_CLIENTAVAILABLEMESSAGE, + output_type=_MODELUPDATE, + serialized_options=None, + create_key=_descriptor._internal_create_key, + ), + _descriptor.MethodDescriptor( + name='ModelValidationRequestStream', + full_name='grpc.Combiner.ModelValidationRequestStream', + index=2, + containing_service=None, + input_type=_CLIENTAVAILABLEMESSAGE, + output_type=_MODELVALIDATIONREQUEST, + serialized_options=None, + create_key=_descriptor._internal_create_key, + ), + _descriptor.MethodDescriptor( + name='ModelValidationStream', + full_name='grpc.Combiner.ModelValidationStream', + index=3, + containing_service=None, + input_type=_CLIENTAVAILABLEMESSAGE, + output_type=_MODELVALIDATION, + serialized_options=None, + create_key=_descriptor._internal_create_key, + ), + _descriptor.MethodDescriptor( + name='SendModelUpdateRequest', + full_name='grpc.Combiner.SendModelUpdateRequest', + index=4, + containing_service=None, + input_type=_MODELUPDATEREQUEST, + output_type=_RESPONSE, + serialized_options=None, + create_key=_descriptor._internal_create_key, + ), + _descriptor.MethodDescriptor( + name='SendModelUpdate', + full_name='grpc.Combiner.SendModelUpdate', + index=5, + containing_service=None, + input_type=_MODELUPDATE, + output_type=_RESPONSE, + serialized_options=None, + create_key=_descriptor._internal_create_key, + ), + _descriptor.MethodDescriptor( + name='SendModelValidationRequest', + full_name='grpc.Combiner.SendModelValidationRequest', + index=6, + containing_service=None, + input_type=_MODELVALIDATIONREQUEST, + output_type=_RESPONSE, + serialized_options=None, + create_key=_descriptor._internal_create_key, + ), + _descriptor.MethodDescriptor( + name='SendModelValidation', + full_name='grpc.Combiner.SendModelValidation', + index=7, + containing_service=None, + input_type=_MODELVALIDATION, + output_type=_RESPONSE, + serialized_options=None, + create_key=_descriptor._internal_create_key, + ), + ]) _sym_db.RegisterServiceDescriptor(_COMBINER) DESCRIPTOR.services_by_name['Combiner'] = _COMBINER diff --git a/fedn/fedn/common/net/grpc/fedn_pb2_grpc.py b/fedn/fedn/common/net/grpc/fedn_pb2_grpc.py index 97c73e5d5..975fee755 100644 --- a/fedn/fedn/common/net/grpc/fedn_pb2_grpc.py +++ b/fedn/fedn/common/net/grpc/fedn_pb2_grpc.py @@ -2,7 +2,8 @@ """Client and server classes corresponding to protobuf-defined services.""" import grpc -from fedn.common.net.grpc import fedn_pb2 as fedn_dot_common_dot_net_dot_grpc_dot_fedn__pb2 +from fedn.common.net.grpc import \ + fedn_pb2 as fedn_dot_common_dot_net_dot_grpc_dot_fedn__pb2 class ModelServiceStub(object): @@ -15,15 +16,15 @@ def __init__(self, channel): channel: A grpc.Channel. """ self.Upload = channel.stream_unary( - '/grpc.ModelService/Upload', - request_serializer=fedn_dot_common_dot_net_dot_grpc_dot_fedn__pb2.ModelRequest.SerializeToString, - response_deserializer=fedn_dot_common_dot_net_dot_grpc_dot_fedn__pb2.ModelResponse.FromString, - ) + '/grpc.ModelService/Upload', + request_serializer=fedn_dot_common_dot_net_dot_grpc_dot_fedn__pb2.ModelRequest.SerializeToString, + response_deserializer=fedn_dot_common_dot_net_dot_grpc_dot_fedn__pb2.ModelResponse.FromString, + ) self.Download = channel.unary_stream( - '/grpc.ModelService/Download', - request_serializer=fedn_dot_common_dot_net_dot_grpc_dot_fedn__pb2.ModelRequest.SerializeToString, - response_deserializer=fedn_dot_common_dot_net_dot_grpc_dot_fedn__pb2.ModelResponse.FromString, - ) + '/grpc.ModelService/Download', + request_serializer=fedn_dot_common_dot_net_dot_grpc_dot_fedn__pb2.ModelRequest.SerializeToString, + response_deserializer=fedn_dot_common_dot_net_dot_grpc_dot_fedn__pb2.ModelResponse.FromString, + ) class ModelServiceServicer(object): @@ -44,59 +45,60 @@ def Download(self, request, context): def add_ModelServiceServicer_to_server(servicer, server): rpc_method_handlers = { - 'Upload': grpc.stream_unary_rpc_method_handler( - servicer.Upload, - request_deserializer=fedn_dot_common_dot_net_dot_grpc_dot_fedn__pb2.ModelRequest.FromString, - response_serializer=fedn_dot_common_dot_net_dot_grpc_dot_fedn__pb2.ModelResponse.SerializeToString, - ), - 'Download': grpc.unary_stream_rpc_method_handler( - servicer.Download, - request_deserializer=fedn_dot_common_dot_net_dot_grpc_dot_fedn__pb2.ModelRequest.FromString, - response_serializer=fedn_dot_common_dot_net_dot_grpc_dot_fedn__pb2.ModelResponse.SerializeToString, - ), + 'Upload': grpc.stream_unary_rpc_method_handler( + servicer.Upload, + request_deserializer=fedn_dot_common_dot_net_dot_grpc_dot_fedn__pb2.ModelRequest.FromString, + response_serializer=fedn_dot_common_dot_net_dot_grpc_dot_fedn__pb2.ModelResponse.SerializeToString, + ), + 'Download': grpc.unary_stream_rpc_method_handler( + servicer.Download, + request_deserializer=fedn_dot_common_dot_net_dot_grpc_dot_fedn__pb2.ModelRequest.FromString, + response_serializer=fedn_dot_common_dot_net_dot_grpc_dot_fedn__pb2.ModelResponse.SerializeToString, + ), } generic_handler = grpc.method_handlers_generic_handler( - 'grpc.ModelService', rpc_method_handlers) + 'grpc.ModelService', rpc_method_handlers) server.add_generic_rpc_handlers((generic_handler,)) - # This class is part of an EXPERIMENTAL API. + + class ModelService(object): """Missing associated documentation comment in .proto file.""" @staticmethod def Upload(request_iterator, - target, - options=(), - channel_credentials=None, - call_credentials=None, - insecure=False, - compression=None, - wait_for_ready=None, - timeout=None, - metadata=None): + target, + options=(), + channel_credentials=None, + call_credentials=None, + insecure=False, + compression=None, + wait_for_ready=None, + timeout=None, + metadata=None): return grpc.experimental.stream_unary(request_iterator, target, '/grpc.ModelService/Upload', - fedn_dot_common_dot_net_dot_grpc_dot_fedn__pb2.ModelRequest.SerializeToString, - fedn_dot_common_dot_net_dot_grpc_dot_fedn__pb2.ModelResponse.FromString, - options, channel_credentials, - insecure, call_credentials, compression, wait_for_ready, timeout, metadata) + fedn_dot_common_dot_net_dot_grpc_dot_fedn__pb2.ModelRequest.SerializeToString, + fedn_dot_common_dot_net_dot_grpc_dot_fedn__pb2.ModelResponse.FromString, + options, channel_credentials, + insecure, call_credentials, compression, wait_for_ready, timeout, metadata) @staticmethod def Download(request, - target, - options=(), - channel_credentials=None, - call_credentials=None, - insecure=False, - compression=None, - wait_for_ready=None, - timeout=None, - metadata=None): + target, + options=(), + channel_credentials=None, + call_credentials=None, + insecure=False, + compression=None, + wait_for_ready=None, + timeout=None, + metadata=None): return grpc.experimental.unary_stream(request, target, '/grpc.ModelService/Download', - fedn_dot_common_dot_net_dot_grpc_dot_fedn__pb2.ModelRequest.SerializeToString, - fedn_dot_common_dot_net_dot_grpc_dot_fedn__pb2.ModelResponse.FromString, - options, channel_credentials, - insecure, call_credentials, compression, wait_for_ready, timeout, metadata) + fedn_dot_common_dot_net_dot_grpc_dot_fedn__pb2.ModelRequest.SerializeToString, + fedn_dot_common_dot_net_dot_grpc_dot_fedn__pb2.ModelResponse.FromString, + options, channel_credentials, + insecure, call_credentials, compression, wait_for_ready, timeout, metadata) class ControlStub(object): @@ -109,25 +111,25 @@ def __init__(self, channel): channel: A grpc.Channel. """ self.Start = channel.unary_unary( - '/grpc.Control/Start', - request_serializer=fedn_dot_common_dot_net_dot_grpc_dot_fedn__pb2.ControlRequest.SerializeToString, - response_deserializer=fedn_dot_common_dot_net_dot_grpc_dot_fedn__pb2.ControlResponse.FromString, - ) + '/grpc.Control/Start', + request_serializer=fedn_dot_common_dot_net_dot_grpc_dot_fedn__pb2.ControlRequest.SerializeToString, + response_deserializer=fedn_dot_common_dot_net_dot_grpc_dot_fedn__pb2.ControlResponse.FromString, + ) self.Stop = channel.unary_unary( - '/grpc.Control/Stop', - request_serializer=fedn_dot_common_dot_net_dot_grpc_dot_fedn__pb2.ControlRequest.SerializeToString, - response_deserializer=fedn_dot_common_dot_net_dot_grpc_dot_fedn__pb2.ControlResponse.FromString, - ) + '/grpc.Control/Stop', + request_serializer=fedn_dot_common_dot_net_dot_grpc_dot_fedn__pb2.ControlRequest.SerializeToString, + response_deserializer=fedn_dot_common_dot_net_dot_grpc_dot_fedn__pb2.ControlResponse.FromString, + ) self.Configure = channel.unary_unary( - '/grpc.Control/Configure', - request_serializer=fedn_dot_common_dot_net_dot_grpc_dot_fedn__pb2.ControlRequest.SerializeToString, - response_deserializer=fedn_dot_common_dot_net_dot_grpc_dot_fedn__pb2.ReportResponse.FromString, - ) + '/grpc.Control/Configure', + request_serializer=fedn_dot_common_dot_net_dot_grpc_dot_fedn__pb2.ControlRequest.SerializeToString, + response_deserializer=fedn_dot_common_dot_net_dot_grpc_dot_fedn__pb2.ReportResponse.FromString, + ) self.Report = channel.unary_unary( - '/grpc.Control/Report', - request_serializer=fedn_dot_common_dot_net_dot_grpc_dot_fedn__pb2.ControlRequest.SerializeToString, - response_deserializer=fedn_dot_common_dot_net_dot_grpc_dot_fedn__pb2.ReportResponse.FromString, - ) + '/grpc.Control/Report', + request_serializer=fedn_dot_common_dot_net_dot_grpc_dot_fedn__pb2.ControlRequest.SerializeToString, + response_deserializer=fedn_dot_common_dot_net_dot_grpc_dot_fedn__pb2.ReportResponse.FromString, + ) class ControlServicer(object): @@ -160,103 +162,104 @@ def Report(self, request, context): def add_ControlServicer_to_server(servicer, server): rpc_method_handlers = { - 'Start': grpc.unary_unary_rpc_method_handler( - servicer.Start, - request_deserializer=fedn_dot_common_dot_net_dot_grpc_dot_fedn__pb2.ControlRequest.FromString, - response_serializer=fedn_dot_common_dot_net_dot_grpc_dot_fedn__pb2.ControlResponse.SerializeToString, - ), - 'Stop': grpc.unary_unary_rpc_method_handler( - servicer.Stop, - request_deserializer=fedn_dot_common_dot_net_dot_grpc_dot_fedn__pb2.ControlRequest.FromString, - response_serializer=fedn_dot_common_dot_net_dot_grpc_dot_fedn__pb2.ControlResponse.SerializeToString, - ), - 'Configure': grpc.unary_unary_rpc_method_handler( - servicer.Configure, - request_deserializer=fedn_dot_common_dot_net_dot_grpc_dot_fedn__pb2.ControlRequest.FromString, - response_serializer=fedn_dot_common_dot_net_dot_grpc_dot_fedn__pb2.ReportResponse.SerializeToString, - ), - 'Report': grpc.unary_unary_rpc_method_handler( - servicer.Report, - request_deserializer=fedn_dot_common_dot_net_dot_grpc_dot_fedn__pb2.ControlRequest.FromString, - response_serializer=fedn_dot_common_dot_net_dot_grpc_dot_fedn__pb2.ReportResponse.SerializeToString, - ), + 'Start': grpc.unary_unary_rpc_method_handler( + servicer.Start, + request_deserializer=fedn_dot_common_dot_net_dot_grpc_dot_fedn__pb2.ControlRequest.FromString, + response_serializer=fedn_dot_common_dot_net_dot_grpc_dot_fedn__pb2.ControlResponse.SerializeToString, + ), + 'Stop': grpc.unary_unary_rpc_method_handler( + servicer.Stop, + request_deserializer=fedn_dot_common_dot_net_dot_grpc_dot_fedn__pb2.ControlRequest.FromString, + response_serializer=fedn_dot_common_dot_net_dot_grpc_dot_fedn__pb2.ControlResponse.SerializeToString, + ), + 'Configure': grpc.unary_unary_rpc_method_handler( + servicer.Configure, + request_deserializer=fedn_dot_common_dot_net_dot_grpc_dot_fedn__pb2.ControlRequest.FromString, + response_serializer=fedn_dot_common_dot_net_dot_grpc_dot_fedn__pb2.ReportResponse.SerializeToString, + ), + 'Report': grpc.unary_unary_rpc_method_handler( + servicer.Report, + request_deserializer=fedn_dot_common_dot_net_dot_grpc_dot_fedn__pb2.ControlRequest.FromString, + response_serializer=fedn_dot_common_dot_net_dot_grpc_dot_fedn__pb2.ReportResponse.SerializeToString, + ), } generic_handler = grpc.method_handlers_generic_handler( - 'grpc.Control', rpc_method_handlers) + 'grpc.Control', rpc_method_handlers) server.add_generic_rpc_handlers((generic_handler,)) - # This class is part of an EXPERIMENTAL API. + + class Control(object): """Missing associated documentation comment in .proto file.""" @staticmethod def Start(request, - target, - options=(), - channel_credentials=None, - call_credentials=None, - insecure=False, - compression=None, - wait_for_ready=None, - timeout=None, - metadata=None): + target, + options=(), + channel_credentials=None, + call_credentials=None, + insecure=False, + compression=None, + wait_for_ready=None, + timeout=None, + metadata=None): return grpc.experimental.unary_unary(request, target, '/grpc.Control/Start', - fedn_dot_common_dot_net_dot_grpc_dot_fedn__pb2.ControlRequest.SerializeToString, - fedn_dot_common_dot_net_dot_grpc_dot_fedn__pb2.ControlResponse.FromString, - options, channel_credentials, - insecure, call_credentials, compression, wait_for_ready, timeout, metadata) + fedn_dot_common_dot_net_dot_grpc_dot_fedn__pb2.ControlRequest.SerializeToString, + fedn_dot_common_dot_net_dot_grpc_dot_fedn__pb2.ControlResponse.FromString, + options, channel_credentials, + insecure, call_credentials, compression, wait_for_ready, timeout, metadata) @staticmethod def Stop(request, - target, - options=(), - channel_credentials=None, - call_credentials=None, - insecure=False, - compression=None, - wait_for_ready=None, - timeout=None, - metadata=None): + target, + options=(), + channel_credentials=None, + call_credentials=None, + insecure=False, + compression=None, + wait_for_ready=None, + timeout=None, + metadata=None): return grpc.experimental.unary_unary(request, target, '/grpc.Control/Stop', - fedn_dot_common_dot_net_dot_grpc_dot_fedn__pb2.ControlRequest.SerializeToString, - fedn_dot_common_dot_net_dot_grpc_dot_fedn__pb2.ControlResponse.FromString, - options, channel_credentials, - insecure, call_credentials, compression, wait_for_ready, timeout, metadata) + fedn_dot_common_dot_net_dot_grpc_dot_fedn__pb2.ControlRequest.SerializeToString, + fedn_dot_common_dot_net_dot_grpc_dot_fedn__pb2.ControlResponse.FromString, + options, channel_credentials, + insecure, call_credentials, compression, wait_for_ready, timeout, metadata) @staticmethod def Configure(request, - target, - options=(), - channel_credentials=None, - call_credentials=None, - insecure=False, - compression=None, - wait_for_ready=None, - timeout=None, - metadata=None): + target, + options=(), + channel_credentials=None, + call_credentials=None, + insecure=False, + compression=None, + wait_for_ready=None, + timeout=None, + metadata=None): return grpc.experimental.unary_unary(request, target, '/grpc.Control/Configure', - fedn_dot_common_dot_net_dot_grpc_dot_fedn__pb2.ControlRequest.SerializeToString, - fedn_dot_common_dot_net_dot_grpc_dot_fedn__pb2.ReportResponse.FromString, - options, channel_credentials, - insecure, call_credentials, compression, wait_for_ready, timeout, metadata) + fedn_dot_common_dot_net_dot_grpc_dot_fedn__pb2.ControlRequest.SerializeToString, + fedn_dot_common_dot_net_dot_grpc_dot_fedn__pb2.ReportResponse.FromString, + options, channel_credentials, + insecure, call_credentials, compression, wait_for_ready, timeout, metadata) @staticmethod def Report(request, - target, - options=(), - channel_credentials=None, - call_credentials=None, - insecure=False, - compression=None, - wait_for_ready=None, - timeout=None, - metadata=None): + target, + options=(), + channel_credentials=None, + call_credentials=None, + insecure=False, + compression=None, + wait_for_ready=None, + timeout=None, + metadata=None): return grpc.experimental.unary_unary(request, target, '/grpc.Control/Report', - fedn_dot_common_dot_net_dot_grpc_dot_fedn__pb2.ControlRequest.SerializeToString, - fedn_dot_common_dot_net_dot_grpc_dot_fedn__pb2.ReportResponse.FromString, - options, channel_credentials, - insecure, call_credentials, compression, wait_for_ready, timeout, metadata) + fedn_dot_common_dot_net_dot_grpc_dot_fedn__pb2.ControlRequest.SerializeToString, + fedn_dot_common_dot_net_dot_grpc_dot_fedn__pb2.ReportResponse.FromString, + options, channel_credentials, + insecure, call_credentials, compression, wait_for_ready, timeout, metadata) class ReducerStub(object): @@ -269,10 +272,10 @@ def __init__(self, channel): channel: A grpc.Channel. """ self.GetGlobalModel = channel.unary_unary( - '/grpc.Reducer/GetGlobalModel', - request_serializer=fedn_dot_common_dot_net_dot_grpc_dot_fedn__pb2.GetGlobalModelRequest.SerializeToString, - response_deserializer=fedn_dot_common_dot_net_dot_grpc_dot_fedn__pb2.GetGlobalModelResponse.FromString, - ) + '/grpc.Reducer/GetGlobalModel', + request_serializer=fedn_dot_common_dot_net_dot_grpc_dot_fedn__pb2.GetGlobalModelRequest.SerializeToString, + response_deserializer=fedn_dot_common_dot_net_dot_grpc_dot_fedn__pb2.GetGlobalModelResponse.FromString, + ) class ReducerServicer(object): @@ -287,37 +290,38 @@ def GetGlobalModel(self, request, context): def add_ReducerServicer_to_server(servicer, server): rpc_method_handlers = { - 'GetGlobalModel': grpc.unary_unary_rpc_method_handler( - servicer.GetGlobalModel, - request_deserializer=fedn_dot_common_dot_net_dot_grpc_dot_fedn__pb2.GetGlobalModelRequest.FromString, - response_serializer=fedn_dot_common_dot_net_dot_grpc_dot_fedn__pb2.GetGlobalModelResponse.SerializeToString, - ), + 'GetGlobalModel': grpc.unary_unary_rpc_method_handler( + servicer.GetGlobalModel, + request_deserializer=fedn_dot_common_dot_net_dot_grpc_dot_fedn__pb2.GetGlobalModelRequest.FromString, + response_serializer=fedn_dot_common_dot_net_dot_grpc_dot_fedn__pb2.GetGlobalModelResponse.SerializeToString, + ), } generic_handler = grpc.method_handlers_generic_handler( - 'grpc.Reducer', rpc_method_handlers) + 'grpc.Reducer', rpc_method_handlers) server.add_generic_rpc_handlers((generic_handler,)) - # This class is part of an EXPERIMENTAL API. + + class Reducer(object): """Missing associated documentation comment in .proto file.""" @staticmethod def GetGlobalModel(request, - target, - options=(), - channel_credentials=None, - call_credentials=None, - insecure=False, - compression=None, - wait_for_ready=None, - timeout=None, - metadata=None): + target, + options=(), + channel_credentials=None, + call_credentials=None, + insecure=False, + compression=None, + wait_for_ready=None, + timeout=None, + metadata=None): return grpc.experimental.unary_unary(request, target, '/grpc.Reducer/GetGlobalModel', - fedn_dot_common_dot_net_dot_grpc_dot_fedn__pb2.GetGlobalModelRequest.SerializeToString, - fedn_dot_common_dot_net_dot_grpc_dot_fedn__pb2.GetGlobalModelResponse.FromString, - options, channel_credentials, - insecure, call_credentials, compression, wait_for_ready, timeout, metadata) + fedn_dot_common_dot_net_dot_grpc_dot_fedn__pb2.GetGlobalModelRequest.SerializeToString, + fedn_dot_common_dot_net_dot_grpc_dot_fedn__pb2.GetGlobalModelResponse.FromString, + options, channel_credentials, + insecure, call_credentials, compression, wait_for_ready, timeout, metadata) class ConnectorStub(object): @@ -330,40 +334,40 @@ def __init__(self, channel): channel: A grpc.Channel. """ self.AllianceStatusStream = channel.unary_stream( - '/grpc.Connector/AllianceStatusStream', - request_serializer=fedn_dot_common_dot_net_dot_grpc_dot_fedn__pb2.ClientAvailableMessage.SerializeToString, - response_deserializer=fedn_dot_common_dot_net_dot_grpc_dot_fedn__pb2.Status.FromString, - ) + '/grpc.Connector/AllianceStatusStream', + request_serializer=fedn_dot_common_dot_net_dot_grpc_dot_fedn__pb2.ClientAvailableMessage.SerializeToString, + response_deserializer=fedn_dot_common_dot_net_dot_grpc_dot_fedn__pb2.Status.FromString, + ) self.SendStatus = channel.unary_unary( - '/grpc.Connector/SendStatus', - request_serializer=fedn_dot_common_dot_net_dot_grpc_dot_fedn__pb2.Status.SerializeToString, - response_deserializer=fedn_dot_common_dot_net_dot_grpc_dot_fedn__pb2.Response.FromString, - ) + '/grpc.Connector/SendStatus', + request_serializer=fedn_dot_common_dot_net_dot_grpc_dot_fedn__pb2.Status.SerializeToString, + response_deserializer=fedn_dot_common_dot_net_dot_grpc_dot_fedn__pb2.Response.FromString, + ) self.ListActiveClients = channel.unary_unary( - '/grpc.Connector/ListActiveClients', - request_serializer=fedn_dot_common_dot_net_dot_grpc_dot_fedn__pb2.ListClientsRequest.SerializeToString, - response_deserializer=fedn_dot_common_dot_net_dot_grpc_dot_fedn__pb2.ClientList.FromString, - ) + '/grpc.Connector/ListActiveClients', + request_serializer=fedn_dot_common_dot_net_dot_grpc_dot_fedn__pb2.ListClientsRequest.SerializeToString, + response_deserializer=fedn_dot_common_dot_net_dot_grpc_dot_fedn__pb2.ClientList.FromString, + ) self.AcceptingClients = channel.unary_unary( - '/grpc.Connector/AcceptingClients', - request_serializer=fedn_dot_common_dot_net_dot_grpc_dot_fedn__pb2.ConnectionRequest.SerializeToString, - response_deserializer=fedn_dot_common_dot_net_dot_grpc_dot_fedn__pb2.ConnectionResponse.FromString, - ) + '/grpc.Connector/AcceptingClients', + request_serializer=fedn_dot_common_dot_net_dot_grpc_dot_fedn__pb2.ConnectionRequest.SerializeToString, + response_deserializer=fedn_dot_common_dot_net_dot_grpc_dot_fedn__pb2.ConnectionResponse.FromString, + ) self.SendHeartbeat = channel.unary_unary( - '/grpc.Connector/SendHeartbeat', - request_serializer=fedn_dot_common_dot_net_dot_grpc_dot_fedn__pb2.Heartbeat.SerializeToString, - response_deserializer=fedn_dot_common_dot_net_dot_grpc_dot_fedn__pb2.Response.FromString, - ) + '/grpc.Connector/SendHeartbeat', + request_serializer=fedn_dot_common_dot_net_dot_grpc_dot_fedn__pb2.Heartbeat.SerializeToString, + response_deserializer=fedn_dot_common_dot_net_dot_grpc_dot_fedn__pb2.Response.FromString, + ) self.ReassignClient = channel.unary_unary( - '/grpc.Connector/ReassignClient', - request_serializer=fedn_dot_common_dot_net_dot_grpc_dot_fedn__pb2.ReassignRequest.SerializeToString, - response_deserializer=fedn_dot_common_dot_net_dot_grpc_dot_fedn__pb2.Response.FromString, - ) + '/grpc.Connector/ReassignClient', + request_serializer=fedn_dot_common_dot_net_dot_grpc_dot_fedn__pb2.ReassignRequest.SerializeToString, + response_deserializer=fedn_dot_common_dot_net_dot_grpc_dot_fedn__pb2.Response.FromString, + ) self.ReconnectClient = channel.unary_unary( - '/grpc.Connector/ReconnectClient', - request_serializer=fedn_dot_common_dot_net_dot_grpc_dot_fedn__pb2.ReconnectRequest.SerializeToString, - response_deserializer=fedn_dot_common_dot_net_dot_grpc_dot_fedn__pb2.Response.FromString, - ) + '/grpc.Connector/ReconnectClient', + request_serializer=fedn_dot_common_dot_net_dot_grpc_dot_fedn__pb2.ReconnectRequest.SerializeToString, + response_deserializer=fedn_dot_common_dot_net_dot_grpc_dot_fedn__pb2.Response.FromString, + ) class ConnectorServicer(object): @@ -419,169 +423,170 @@ def ReconnectClient(self, request, context): def add_ConnectorServicer_to_server(servicer, server): rpc_method_handlers = { - 'AllianceStatusStream': grpc.unary_stream_rpc_method_handler( - servicer.AllianceStatusStream, - request_deserializer=fedn_dot_common_dot_net_dot_grpc_dot_fedn__pb2.ClientAvailableMessage.FromString, - response_serializer=fedn_dot_common_dot_net_dot_grpc_dot_fedn__pb2.Status.SerializeToString, - ), - 'SendStatus': grpc.unary_unary_rpc_method_handler( - servicer.SendStatus, - request_deserializer=fedn_dot_common_dot_net_dot_grpc_dot_fedn__pb2.Status.FromString, - response_serializer=fedn_dot_common_dot_net_dot_grpc_dot_fedn__pb2.Response.SerializeToString, - ), - 'ListActiveClients': grpc.unary_unary_rpc_method_handler( - servicer.ListActiveClients, - request_deserializer=fedn_dot_common_dot_net_dot_grpc_dot_fedn__pb2.ListClientsRequest.FromString, - response_serializer=fedn_dot_common_dot_net_dot_grpc_dot_fedn__pb2.ClientList.SerializeToString, - ), - 'AcceptingClients': grpc.unary_unary_rpc_method_handler( - servicer.AcceptingClients, - request_deserializer=fedn_dot_common_dot_net_dot_grpc_dot_fedn__pb2.ConnectionRequest.FromString, - response_serializer=fedn_dot_common_dot_net_dot_grpc_dot_fedn__pb2.ConnectionResponse.SerializeToString, - ), - 'SendHeartbeat': grpc.unary_unary_rpc_method_handler( - servicer.SendHeartbeat, - request_deserializer=fedn_dot_common_dot_net_dot_grpc_dot_fedn__pb2.Heartbeat.FromString, - response_serializer=fedn_dot_common_dot_net_dot_grpc_dot_fedn__pb2.Response.SerializeToString, - ), - 'ReassignClient': grpc.unary_unary_rpc_method_handler( - servicer.ReassignClient, - request_deserializer=fedn_dot_common_dot_net_dot_grpc_dot_fedn__pb2.ReassignRequest.FromString, - response_serializer=fedn_dot_common_dot_net_dot_grpc_dot_fedn__pb2.Response.SerializeToString, - ), - 'ReconnectClient': grpc.unary_unary_rpc_method_handler( - servicer.ReconnectClient, - request_deserializer=fedn_dot_common_dot_net_dot_grpc_dot_fedn__pb2.ReconnectRequest.FromString, - response_serializer=fedn_dot_common_dot_net_dot_grpc_dot_fedn__pb2.Response.SerializeToString, - ), + 'AllianceStatusStream': grpc.unary_stream_rpc_method_handler( + servicer.AllianceStatusStream, + request_deserializer=fedn_dot_common_dot_net_dot_grpc_dot_fedn__pb2.ClientAvailableMessage.FromString, + response_serializer=fedn_dot_common_dot_net_dot_grpc_dot_fedn__pb2.Status.SerializeToString, + ), + 'SendStatus': grpc.unary_unary_rpc_method_handler( + servicer.SendStatus, + request_deserializer=fedn_dot_common_dot_net_dot_grpc_dot_fedn__pb2.Status.FromString, + response_serializer=fedn_dot_common_dot_net_dot_grpc_dot_fedn__pb2.Response.SerializeToString, + ), + 'ListActiveClients': grpc.unary_unary_rpc_method_handler( + servicer.ListActiveClients, + request_deserializer=fedn_dot_common_dot_net_dot_grpc_dot_fedn__pb2.ListClientsRequest.FromString, + response_serializer=fedn_dot_common_dot_net_dot_grpc_dot_fedn__pb2.ClientList.SerializeToString, + ), + 'AcceptingClients': grpc.unary_unary_rpc_method_handler( + servicer.AcceptingClients, + request_deserializer=fedn_dot_common_dot_net_dot_grpc_dot_fedn__pb2.ConnectionRequest.FromString, + response_serializer=fedn_dot_common_dot_net_dot_grpc_dot_fedn__pb2.ConnectionResponse.SerializeToString, + ), + 'SendHeartbeat': grpc.unary_unary_rpc_method_handler( + servicer.SendHeartbeat, + request_deserializer=fedn_dot_common_dot_net_dot_grpc_dot_fedn__pb2.Heartbeat.FromString, + response_serializer=fedn_dot_common_dot_net_dot_grpc_dot_fedn__pb2.Response.SerializeToString, + ), + 'ReassignClient': grpc.unary_unary_rpc_method_handler( + servicer.ReassignClient, + request_deserializer=fedn_dot_common_dot_net_dot_grpc_dot_fedn__pb2.ReassignRequest.FromString, + response_serializer=fedn_dot_common_dot_net_dot_grpc_dot_fedn__pb2.Response.SerializeToString, + ), + 'ReconnectClient': grpc.unary_unary_rpc_method_handler( + servicer.ReconnectClient, + request_deserializer=fedn_dot_common_dot_net_dot_grpc_dot_fedn__pb2.ReconnectRequest.FromString, + response_serializer=fedn_dot_common_dot_net_dot_grpc_dot_fedn__pb2.Response.SerializeToString, + ), } generic_handler = grpc.method_handlers_generic_handler( - 'grpc.Connector', rpc_method_handlers) + 'grpc.Connector', rpc_method_handlers) server.add_generic_rpc_handlers((generic_handler,)) - # This class is part of an EXPERIMENTAL API. + + class Connector(object): """Missing associated documentation comment in .proto file.""" @staticmethod def AllianceStatusStream(request, - target, - options=(), - channel_credentials=None, - call_credentials=None, - insecure=False, - compression=None, - wait_for_ready=None, - timeout=None, - metadata=None): + target, + options=(), + channel_credentials=None, + call_credentials=None, + insecure=False, + compression=None, + wait_for_ready=None, + timeout=None, + metadata=None): return grpc.experimental.unary_stream(request, target, '/grpc.Connector/AllianceStatusStream', - fedn_dot_common_dot_net_dot_grpc_dot_fedn__pb2.ClientAvailableMessage.SerializeToString, - fedn_dot_common_dot_net_dot_grpc_dot_fedn__pb2.Status.FromString, - options, channel_credentials, - insecure, call_credentials, compression, wait_for_ready, timeout, metadata) + fedn_dot_common_dot_net_dot_grpc_dot_fedn__pb2.ClientAvailableMessage.SerializeToString, + fedn_dot_common_dot_net_dot_grpc_dot_fedn__pb2.Status.FromString, + options, channel_credentials, + insecure, call_credentials, compression, wait_for_ready, timeout, metadata) @staticmethod def SendStatus(request, - target, - options=(), - channel_credentials=None, - call_credentials=None, - insecure=False, - compression=None, - wait_for_ready=None, - timeout=None, - metadata=None): + target, + options=(), + channel_credentials=None, + call_credentials=None, + insecure=False, + compression=None, + wait_for_ready=None, + timeout=None, + metadata=None): return grpc.experimental.unary_unary(request, target, '/grpc.Connector/SendStatus', - fedn_dot_common_dot_net_dot_grpc_dot_fedn__pb2.Status.SerializeToString, - fedn_dot_common_dot_net_dot_grpc_dot_fedn__pb2.Response.FromString, - options, channel_credentials, - insecure, call_credentials, compression, wait_for_ready, timeout, metadata) + fedn_dot_common_dot_net_dot_grpc_dot_fedn__pb2.Status.SerializeToString, + fedn_dot_common_dot_net_dot_grpc_dot_fedn__pb2.Response.FromString, + options, channel_credentials, + insecure, call_credentials, compression, wait_for_ready, timeout, metadata) @staticmethod def ListActiveClients(request, - target, - options=(), - channel_credentials=None, - call_credentials=None, - insecure=False, - compression=None, - wait_for_ready=None, - timeout=None, - metadata=None): + target, + options=(), + channel_credentials=None, + call_credentials=None, + insecure=False, + compression=None, + wait_for_ready=None, + timeout=None, + metadata=None): return grpc.experimental.unary_unary(request, target, '/grpc.Connector/ListActiveClients', - fedn_dot_common_dot_net_dot_grpc_dot_fedn__pb2.ListClientsRequest.SerializeToString, - fedn_dot_common_dot_net_dot_grpc_dot_fedn__pb2.ClientList.FromString, - options, channel_credentials, - insecure, call_credentials, compression, wait_for_ready, timeout, metadata) + fedn_dot_common_dot_net_dot_grpc_dot_fedn__pb2.ListClientsRequest.SerializeToString, + fedn_dot_common_dot_net_dot_grpc_dot_fedn__pb2.ClientList.FromString, + options, channel_credentials, + insecure, call_credentials, compression, wait_for_ready, timeout, metadata) @staticmethod def AcceptingClients(request, - target, - options=(), - channel_credentials=None, - call_credentials=None, - insecure=False, - compression=None, - wait_for_ready=None, - timeout=None, - metadata=None): + target, + options=(), + channel_credentials=None, + call_credentials=None, + insecure=False, + compression=None, + wait_for_ready=None, + timeout=None, + metadata=None): return grpc.experimental.unary_unary(request, target, '/grpc.Connector/AcceptingClients', - fedn_dot_common_dot_net_dot_grpc_dot_fedn__pb2.ConnectionRequest.SerializeToString, - fedn_dot_common_dot_net_dot_grpc_dot_fedn__pb2.ConnectionResponse.FromString, - options, channel_credentials, - insecure, call_credentials, compression, wait_for_ready, timeout, metadata) + fedn_dot_common_dot_net_dot_grpc_dot_fedn__pb2.ConnectionRequest.SerializeToString, + fedn_dot_common_dot_net_dot_grpc_dot_fedn__pb2.ConnectionResponse.FromString, + options, channel_credentials, + insecure, call_credentials, compression, wait_for_ready, timeout, metadata) @staticmethod def SendHeartbeat(request, - target, - options=(), - channel_credentials=None, - call_credentials=None, - insecure=False, - compression=None, - wait_for_ready=None, - timeout=None, - metadata=None): + target, + options=(), + channel_credentials=None, + call_credentials=None, + insecure=False, + compression=None, + wait_for_ready=None, + timeout=None, + metadata=None): return grpc.experimental.unary_unary(request, target, '/grpc.Connector/SendHeartbeat', - fedn_dot_common_dot_net_dot_grpc_dot_fedn__pb2.Heartbeat.SerializeToString, - fedn_dot_common_dot_net_dot_grpc_dot_fedn__pb2.Response.FromString, - options, channel_credentials, - insecure, call_credentials, compression, wait_for_ready, timeout, metadata) + fedn_dot_common_dot_net_dot_grpc_dot_fedn__pb2.Heartbeat.SerializeToString, + fedn_dot_common_dot_net_dot_grpc_dot_fedn__pb2.Response.FromString, + options, channel_credentials, + insecure, call_credentials, compression, wait_for_ready, timeout, metadata) @staticmethod def ReassignClient(request, - target, - options=(), - channel_credentials=None, - call_credentials=None, - insecure=False, - compression=None, - wait_for_ready=None, - timeout=None, - metadata=None): + target, + options=(), + channel_credentials=None, + call_credentials=None, + insecure=False, + compression=None, + wait_for_ready=None, + timeout=None, + metadata=None): return grpc.experimental.unary_unary(request, target, '/grpc.Connector/ReassignClient', - fedn_dot_common_dot_net_dot_grpc_dot_fedn__pb2.ReassignRequest.SerializeToString, - fedn_dot_common_dot_net_dot_grpc_dot_fedn__pb2.Response.FromString, - options, channel_credentials, - insecure, call_credentials, compression, wait_for_ready, timeout, metadata) + fedn_dot_common_dot_net_dot_grpc_dot_fedn__pb2.ReassignRequest.SerializeToString, + fedn_dot_common_dot_net_dot_grpc_dot_fedn__pb2.Response.FromString, + options, channel_credentials, + insecure, call_credentials, compression, wait_for_ready, timeout, metadata) @staticmethod def ReconnectClient(request, - target, - options=(), - channel_credentials=None, - call_credentials=None, - insecure=False, - compression=None, - wait_for_ready=None, - timeout=None, - metadata=None): + target, + options=(), + channel_credentials=None, + call_credentials=None, + insecure=False, + compression=None, + wait_for_ready=None, + timeout=None, + metadata=None): return grpc.experimental.unary_unary(request, target, '/grpc.Connector/ReconnectClient', - fedn_dot_common_dot_net_dot_grpc_dot_fedn__pb2.ReconnectRequest.SerializeToString, - fedn_dot_common_dot_net_dot_grpc_dot_fedn__pb2.Response.FromString, - options, channel_credentials, - insecure, call_credentials, compression, wait_for_ready, timeout, metadata) + fedn_dot_common_dot_net_dot_grpc_dot_fedn__pb2.ReconnectRequest.SerializeToString, + fedn_dot_common_dot_net_dot_grpc_dot_fedn__pb2.Response.FromString, + options, channel_credentials, + insecure, call_credentials, compression, wait_for_ready, timeout, metadata) class CombinerStub(object): @@ -594,45 +599,45 @@ def __init__(self, channel): channel: A grpc.Channel. """ self.ModelUpdateRequestStream = channel.unary_stream( - '/grpc.Combiner/ModelUpdateRequestStream', - request_serializer=fedn_dot_common_dot_net_dot_grpc_dot_fedn__pb2.ClientAvailableMessage.SerializeToString, - response_deserializer=fedn_dot_common_dot_net_dot_grpc_dot_fedn__pb2.ModelUpdateRequest.FromString, - ) + '/grpc.Combiner/ModelUpdateRequestStream', + request_serializer=fedn_dot_common_dot_net_dot_grpc_dot_fedn__pb2.ClientAvailableMessage.SerializeToString, + response_deserializer=fedn_dot_common_dot_net_dot_grpc_dot_fedn__pb2.ModelUpdateRequest.FromString, + ) self.ModelUpdateStream = channel.unary_stream( - '/grpc.Combiner/ModelUpdateStream', - request_serializer=fedn_dot_common_dot_net_dot_grpc_dot_fedn__pb2.ClientAvailableMessage.SerializeToString, - response_deserializer=fedn_dot_common_dot_net_dot_grpc_dot_fedn__pb2.ModelUpdate.FromString, - ) + '/grpc.Combiner/ModelUpdateStream', + request_serializer=fedn_dot_common_dot_net_dot_grpc_dot_fedn__pb2.ClientAvailableMessage.SerializeToString, + response_deserializer=fedn_dot_common_dot_net_dot_grpc_dot_fedn__pb2.ModelUpdate.FromString, + ) self.ModelValidationRequestStream = channel.unary_stream( - '/grpc.Combiner/ModelValidationRequestStream', - request_serializer=fedn_dot_common_dot_net_dot_grpc_dot_fedn__pb2.ClientAvailableMessage.SerializeToString, - response_deserializer=fedn_dot_common_dot_net_dot_grpc_dot_fedn__pb2.ModelValidationRequest.FromString, - ) + '/grpc.Combiner/ModelValidationRequestStream', + request_serializer=fedn_dot_common_dot_net_dot_grpc_dot_fedn__pb2.ClientAvailableMessage.SerializeToString, + response_deserializer=fedn_dot_common_dot_net_dot_grpc_dot_fedn__pb2.ModelValidationRequest.FromString, + ) self.ModelValidationStream = channel.unary_stream( - '/grpc.Combiner/ModelValidationStream', - request_serializer=fedn_dot_common_dot_net_dot_grpc_dot_fedn__pb2.ClientAvailableMessage.SerializeToString, - response_deserializer=fedn_dot_common_dot_net_dot_grpc_dot_fedn__pb2.ModelValidation.FromString, - ) + '/grpc.Combiner/ModelValidationStream', + request_serializer=fedn_dot_common_dot_net_dot_grpc_dot_fedn__pb2.ClientAvailableMessage.SerializeToString, + response_deserializer=fedn_dot_common_dot_net_dot_grpc_dot_fedn__pb2.ModelValidation.FromString, + ) self.SendModelUpdateRequest = channel.unary_unary( - '/grpc.Combiner/SendModelUpdateRequest', - request_serializer=fedn_dot_common_dot_net_dot_grpc_dot_fedn__pb2.ModelUpdateRequest.SerializeToString, - response_deserializer=fedn_dot_common_dot_net_dot_grpc_dot_fedn__pb2.Response.FromString, - ) + '/grpc.Combiner/SendModelUpdateRequest', + request_serializer=fedn_dot_common_dot_net_dot_grpc_dot_fedn__pb2.ModelUpdateRequest.SerializeToString, + response_deserializer=fedn_dot_common_dot_net_dot_grpc_dot_fedn__pb2.Response.FromString, + ) self.SendModelUpdate = channel.unary_unary( - '/grpc.Combiner/SendModelUpdate', - request_serializer=fedn_dot_common_dot_net_dot_grpc_dot_fedn__pb2.ModelUpdate.SerializeToString, - response_deserializer=fedn_dot_common_dot_net_dot_grpc_dot_fedn__pb2.Response.FromString, - ) + '/grpc.Combiner/SendModelUpdate', + request_serializer=fedn_dot_common_dot_net_dot_grpc_dot_fedn__pb2.ModelUpdate.SerializeToString, + response_deserializer=fedn_dot_common_dot_net_dot_grpc_dot_fedn__pb2.Response.FromString, + ) self.SendModelValidationRequest = channel.unary_unary( - '/grpc.Combiner/SendModelValidationRequest', - request_serializer=fedn_dot_common_dot_net_dot_grpc_dot_fedn__pb2.ModelValidationRequest.SerializeToString, - response_deserializer=fedn_dot_common_dot_net_dot_grpc_dot_fedn__pb2.Response.FromString, - ) + '/grpc.Combiner/SendModelValidationRequest', + request_serializer=fedn_dot_common_dot_net_dot_grpc_dot_fedn__pb2.ModelValidationRequest.SerializeToString, + response_deserializer=fedn_dot_common_dot_net_dot_grpc_dot_fedn__pb2.Response.FromString, + ) self.SendModelValidation = channel.unary_unary( - '/grpc.Combiner/SendModelValidation', - request_serializer=fedn_dot_common_dot_net_dot_grpc_dot_fedn__pb2.ModelValidation.SerializeToString, - response_deserializer=fedn_dot_common_dot_net_dot_grpc_dot_fedn__pb2.Response.FromString, - ) + '/grpc.Combiner/SendModelValidation', + request_serializer=fedn_dot_common_dot_net_dot_grpc_dot_fedn__pb2.ModelValidation.SerializeToString, + response_deserializer=fedn_dot_common_dot_net_dot_grpc_dot_fedn__pb2.Response.FromString, + ) class CombinerServicer(object): @@ -690,188 +695,189 @@ def SendModelValidation(self, request, context): def add_CombinerServicer_to_server(servicer, server): rpc_method_handlers = { - 'ModelUpdateRequestStream': grpc.unary_stream_rpc_method_handler( - servicer.ModelUpdateRequestStream, - request_deserializer=fedn_dot_common_dot_net_dot_grpc_dot_fedn__pb2.ClientAvailableMessage.FromString, - response_serializer=fedn_dot_common_dot_net_dot_grpc_dot_fedn__pb2.ModelUpdateRequest.SerializeToString, - ), - 'ModelUpdateStream': grpc.unary_stream_rpc_method_handler( - servicer.ModelUpdateStream, - request_deserializer=fedn_dot_common_dot_net_dot_grpc_dot_fedn__pb2.ClientAvailableMessage.FromString, - response_serializer=fedn_dot_common_dot_net_dot_grpc_dot_fedn__pb2.ModelUpdate.SerializeToString, - ), - 'ModelValidationRequestStream': grpc.unary_stream_rpc_method_handler( - servicer.ModelValidationRequestStream, - request_deserializer=fedn_dot_common_dot_net_dot_grpc_dot_fedn__pb2.ClientAvailableMessage.FromString, - response_serializer=fedn_dot_common_dot_net_dot_grpc_dot_fedn__pb2.ModelValidationRequest.SerializeToString, - ), - 'ModelValidationStream': grpc.unary_stream_rpc_method_handler( - servicer.ModelValidationStream, - request_deserializer=fedn_dot_common_dot_net_dot_grpc_dot_fedn__pb2.ClientAvailableMessage.FromString, - response_serializer=fedn_dot_common_dot_net_dot_grpc_dot_fedn__pb2.ModelValidation.SerializeToString, - ), - 'SendModelUpdateRequest': grpc.unary_unary_rpc_method_handler( - servicer.SendModelUpdateRequest, - request_deserializer=fedn_dot_common_dot_net_dot_grpc_dot_fedn__pb2.ModelUpdateRequest.FromString, - response_serializer=fedn_dot_common_dot_net_dot_grpc_dot_fedn__pb2.Response.SerializeToString, - ), - 'SendModelUpdate': grpc.unary_unary_rpc_method_handler( - servicer.SendModelUpdate, - request_deserializer=fedn_dot_common_dot_net_dot_grpc_dot_fedn__pb2.ModelUpdate.FromString, - response_serializer=fedn_dot_common_dot_net_dot_grpc_dot_fedn__pb2.Response.SerializeToString, - ), - 'SendModelValidationRequest': grpc.unary_unary_rpc_method_handler( - servicer.SendModelValidationRequest, - request_deserializer=fedn_dot_common_dot_net_dot_grpc_dot_fedn__pb2.ModelValidationRequest.FromString, - response_serializer=fedn_dot_common_dot_net_dot_grpc_dot_fedn__pb2.Response.SerializeToString, - ), - 'SendModelValidation': grpc.unary_unary_rpc_method_handler( - servicer.SendModelValidation, - request_deserializer=fedn_dot_common_dot_net_dot_grpc_dot_fedn__pb2.ModelValidation.FromString, - response_serializer=fedn_dot_common_dot_net_dot_grpc_dot_fedn__pb2.Response.SerializeToString, - ), + 'ModelUpdateRequestStream': grpc.unary_stream_rpc_method_handler( + servicer.ModelUpdateRequestStream, + request_deserializer=fedn_dot_common_dot_net_dot_grpc_dot_fedn__pb2.ClientAvailableMessage.FromString, + response_serializer=fedn_dot_common_dot_net_dot_grpc_dot_fedn__pb2.ModelUpdateRequest.SerializeToString, + ), + 'ModelUpdateStream': grpc.unary_stream_rpc_method_handler( + servicer.ModelUpdateStream, + request_deserializer=fedn_dot_common_dot_net_dot_grpc_dot_fedn__pb2.ClientAvailableMessage.FromString, + response_serializer=fedn_dot_common_dot_net_dot_grpc_dot_fedn__pb2.ModelUpdate.SerializeToString, + ), + 'ModelValidationRequestStream': grpc.unary_stream_rpc_method_handler( + servicer.ModelValidationRequestStream, + request_deserializer=fedn_dot_common_dot_net_dot_grpc_dot_fedn__pb2.ClientAvailableMessage.FromString, + response_serializer=fedn_dot_common_dot_net_dot_grpc_dot_fedn__pb2.ModelValidationRequest.SerializeToString, + ), + 'ModelValidationStream': grpc.unary_stream_rpc_method_handler( + servicer.ModelValidationStream, + request_deserializer=fedn_dot_common_dot_net_dot_grpc_dot_fedn__pb2.ClientAvailableMessage.FromString, + response_serializer=fedn_dot_common_dot_net_dot_grpc_dot_fedn__pb2.ModelValidation.SerializeToString, + ), + 'SendModelUpdateRequest': grpc.unary_unary_rpc_method_handler( + servicer.SendModelUpdateRequest, + request_deserializer=fedn_dot_common_dot_net_dot_grpc_dot_fedn__pb2.ModelUpdateRequest.FromString, + response_serializer=fedn_dot_common_dot_net_dot_grpc_dot_fedn__pb2.Response.SerializeToString, + ), + 'SendModelUpdate': grpc.unary_unary_rpc_method_handler( + servicer.SendModelUpdate, + request_deserializer=fedn_dot_common_dot_net_dot_grpc_dot_fedn__pb2.ModelUpdate.FromString, + response_serializer=fedn_dot_common_dot_net_dot_grpc_dot_fedn__pb2.Response.SerializeToString, + ), + 'SendModelValidationRequest': grpc.unary_unary_rpc_method_handler( + servicer.SendModelValidationRequest, + request_deserializer=fedn_dot_common_dot_net_dot_grpc_dot_fedn__pb2.ModelValidationRequest.FromString, + response_serializer=fedn_dot_common_dot_net_dot_grpc_dot_fedn__pb2.Response.SerializeToString, + ), + 'SendModelValidation': grpc.unary_unary_rpc_method_handler( + servicer.SendModelValidation, + request_deserializer=fedn_dot_common_dot_net_dot_grpc_dot_fedn__pb2.ModelValidation.FromString, + response_serializer=fedn_dot_common_dot_net_dot_grpc_dot_fedn__pb2.Response.SerializeToString, + ), } generic_handler = grpc.method_handlers_generic_handler( - 'grpc.Combiner', rpc_method_handlers) + 'grpc.Combiner', rpc_method_handlers) server.add_generic_rpc_handlers((generic_handler,)) - # This class is part of an EXPERIMENTAL API. + + class Combiner(object): """Missing associated documentation comment in .proto file.""" @staticmethod def ModelUpdateRequestStream(request, - target, - options=(), - channel_credentials=None, - call_credentials=None, - insecure=False, - compression=None, - wait_for_ready=None, - timeout=None, - metadata=None): + target, + options=(), + channel_credentials=None, + call_credentials=None, + insecure=False, + compression=None, + wait_for_ready=None, + timeout=None, + metadata=None): return grpc.experimental.unary_stream(request, target, '/grpc.Combiner/ModelUpdateRequestStream', - fedn_dot_common_dot_net_dot_grpc_dot_fedn__pb2.ClientAvailableMessage.SerializeToString, - fedn_dot_common_dot_net_dot_grpc_dot_fedn__pb2.ModelUpdateRequest.FromString, - options, channel_credentials, - insecure, call_credentials, compression, wait_for_ready, timeout, metadata) + fedn_dot_common_dot_net_dot_grpc_dot_fedn__pb2.ClientAvailableMessage.SerializeToString, + fedn_dot_common_dot_net_dot_grpc_dot_fedn__pb2.ModelUpdateRequest.FromString, + options, channel_credentials, + insecure, call_credentials, compression, wait_for_ready, timeout, metadata) @staticmethod def ModelUpdateStream(request, - target, - options=(), - channel_credentials=None, - call_credentials=None, - insecure=False, - compression=None, - wait_for_ready=None, - timeout=None, - metadata=None): + target, + options=(), + channel_credentials=None, + call_credentials=None, + insecure=False, + compression=None, + wait_for_ready=None, + timeout=None, + metadata=None): return grpc.experimental.unary_stream(request, target, '/grpc.Combiner/ModelUpdateStream', - fedn_dot_common_dot_net_dot_grpc_dot_fedn__pb2.ClientAvailableMessage.SerializeToString, - fedn_dot_common_dot_net_dot_grpc_dot_fedn__pb2.ModelUpdate.FromString, - options, channel_credentials, - insecure, call_credentials, compression, wait_for_ready, timeout, metadata) + fedn_dot_common_dot_net_dot_grpc_dot_fedn__pb2.ClientAvailableMessage.SerializeToString, + fedn_dot_common_dot_net_dot_grpc_dot_fedn__pb2.ModelUpdate.FromString, + options, channel_credentials, + insecure, call_credentials, compression, wait_for_ready, timeout, metadata) @staticmethod def ModelValidationRequestStream(request, - target, - options=(), - channel_credentials=None, - call_credentials=None, - insecure=False, - compression=None, - wait_for_ready=None, - timeout=None, - metadata=None): + target, + options=(), + channel_credentials=None, + call_credentials=None, + insecure=False, + compression=None, + wait_for_ready=None, + timeout=None, + metadata=None): return grpc.experimental.unary_stream(request, target, '/grpc.Combiner/ModelValidationRequestStream', - fedn_dot_common_dot_net_dot_grpc_dot_fedn__pb2.ClientAvailableMessage.SerializeToString, - fedn_dot_common_dot_net_dot_grpc_dot_fedn__pb2.ModelValidationRequest.FromString, - options, channel_credentials, - insecure, call_credentials, compression, wait_for_ready, timeout, metadata) + fedn_dot_common_dot_net_dot_grpc_dot_fedn__pb2.ClientAvailableMessage.SerializeToString, + fedn_dot_common_dot_net_dot_grpc_dot_fedn__pb2.ModelValidationRequest.FromString, + options, channel_credentials, + insecure, call_credentials, compression, wait_for_ready, timeout, metadata) @staticmethod def ModelValidationStream(request, - target, - options=(), - channel_credentials=None, - call_credentials=None, - insecure=False, - compression=None, - wait_for_ready=None, - timeout=None, - metadata=None): + target, + options=(), + channel_credentials=None, + call_credentials=None, + insecure=False, + compression=None, + wait_for_ready=None, + timeout=None, + metadata=None): return grpc.experimental.unary_stream(request, target, '/grpc.Combiner/ModelValidationStream', - fedn_dot_common_dot_net_dot_grpc_dot_fedn__pb2.ClientAvailableMessage.SerializeToString, - fedn_dot_common_dot_net_dot_grpc_dot_fedn__pb2.ModelValidation.FromString, - options, channel_credentials, - insecure, call_credentials, compression, wait_for_ready, timeout, metadata) + fedn_dot_common_dot_net_dot_grpc_dot_fedn__pb2.ClientAvailableMessage.SerializeToString, + fedn_dot_common_dot_net_dot_grpc_dot_fedn__pb2.ModelValidation.FromString, + options, channel_credentials, + insecure, call_credentials, compression, wait_for_ready, timeout, metadata) @staticmethod def SendModelUpdateRequest(request, - target, - options=(), - channel_credentials=None, - call_credentials=None, - insecure=False, - compression=None, - wait_for_ready=None, - timeout=None, - metadata=None): + target, + options=(), + channel_credentials=None, + call_credentials=None, + insecure=False, + compression=None, + wait_for_ready=None, + timeout=None, + metadata=None): return grpc.experimental.unary_unary(request, target, '/grpc.Combiner/SendModelUpdateRequest', - fedn_dot_common_dot_net_dot_grpc_dot_fedn__pb2.ModelUpdateRequest.SerializeToString, - fedn_dot_common_dot_net_dot_grpc_dot_fedn__pb2.Response.FromString, - options, channel_credentials, - insecure, call_credentials, compression, wait_for_ready, timeout, metadata) + fedn_dot_common_dot_net_dot_grpc_dot_fedn__pb2.ModelUpdateRequest.SerializeToString, + fedn_dot_common_dot_net_dot_grpc_dot_fedn__pb2.Response.FromString, + options, channel_credentials, + insecure, call_credentials, compression, wait_for_ready, timeout, metadata) @staticmethod def SendModelUpdate(request, - target, - options=(), - channel_credentials=None, - call_credentials=None, - insecure=False, - compression=None, - wait_for_ready=None, - timeout=None, - metadata=None): + target, + options=(), + channel_credentials=None, + call_credentials=None, + insecure=False, + compression=None, + wait_for_ready=None, + timeout=None, + metadata=None): return grpc.experimental.unary_unary(request, target, '/grpc.Combiner/SendModelUpdate', - fedn_dot_common_dot_net_dot_grpc_dot_fedn__pb2.ModelUpdate.SerializeToString, - fedn_dot_common_dot_net_dot_grpc_dot_fedn__pb2.Response.FromString, - options, channel_credentials, - insecure, call_credentials, compression, wait_for_ready, timeout, metadata) + fedn_dot_common_dot_net_dot_grpc_dot_fedn__pb2.ModelUpdate.SerializeToString, + fedn_dot_common_dot_net_dot_grpc_dot_fedn__pb2.Response.FromString, + options, channel_credentials, + insecure, call_credentials, compression, wait_for_ready, timeout, metadata) @staticmethod def SendModelValidationRequest(request, - target, - options=(), - channel_credentials=None, - call_credentials=None, - insecure=False, - compression=None, - wait_for_ready=None, - timeout=None, - metadata=None): + target, + options=(), + channel_credentials=None, + call_credentials=None, + insecure=False, + compression=None, + wait_for_ready=None, + timeout=None, + metadata=None): return grpc.experimental.unary_unary(request, target, '/grpc.Combiner/SendModelValidationRequest', - fedn_dot_common_dot_net_dot_grpc_dot_fedn__pb2.ModelValidationRequest.SerializeToString, - fedn_dot_common_dot_net_dot_grpc_dot_fedn__pb2.Response.FromString, - options, channel_credentials, - insecure, call_credentials, compression, wait_for_ready, timeout, metadata) + fedn_dot_common_dot_net_dot_grpc_dot_fedn__pb2.ModelValidationRequest.SerializeToString, + fedn_dot_common_dot_net_dot_grpc_dot_fedn__pb2.Response.FromString, + options, channel_credentials, + insecure, call_credentials, compression, wait_for_ready, timeout, metadata) @staticmethod def SendModelValidation(request, - target, - options=(), - channel_credentials=None, - call_credentials=None, - insecure=False, - compression=None, - wait_for_ready=None, - timeout=None, - metadata=None): + target, + options=(), + channel_credentials=None, + call_credentials=None, + insecure=False, + compression=None, + wait_for_ready=None, + timeout=None, + metadata=None): return grpc.experimental.unary_unary(request, target, '/grpc.Combiner/SendModelValidation', - fedn_dot_common_dot_net_dot_grpc_dot_fedn__pb2.ModelValidation.SerializeToString, - fedn_dot_common_dot_net_dot_grpc_dot_fedn__pb2.Response.FromString, - options, channel_credentials, - insecure, call_credentials, compression, wait_for_ready, timeout, metadata) + fedn_dot_common_dot_net_dot_grpc_dot_fedn__pb2.ModelValidation.SerializeToString, + fedn_dot_common_dot_net_dot_grpc_dot_fedn__pb2.Response.FromString, + options, channel_credentials, + insecure, call_credentials, compression, wait_for_ready, timeout, metadata) From 6438bafdfa70e4361c1023cb5f703c2f0af2ad62 Mon Sep 17 00:00:00 2001 From: mcapuccini Date: Tue, 7 Jun 2022 12:40:13 +0000 Subject: [PATCH 020/185] Remove license --- LICENSE | 201 -------------------------------------------------------- 1 file changed, 201 deletions(-) delete mode 100644 LICENSE diff --git a/LICENSE b/LICENSE deleted file mode 100644 index ae263d310..000000000 --- a/LICENSE +++ /dev/null @@ -1,201 +0,0 @@ - Apache License - Version 2.0, January 2004 - http://www.apache.org/licenses/ - - TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION - - 1. Definitions. - - "License" shall mean the terms and conditions for use, reproduction, - and distribution as defined by Sections 1 through 9 of this document. - - "Licensor" shall mean the copyright owner or entity authorized by - the copyright owner that is granting the License. - - "Legal Entity" shall mean the union of the acting entity and all - other entities that control, are controlled by, or are under common - control with that entity. For the purposes of this definition, - "control" means (i) the power, direct or indirect, to cause the - direction or management of such entity, whether by contract or - otherwise, or (ii) ownership of fifty percent (50%) or more of the - outstanding shares, or (iii) beneficial ownership of such entity. - - "You" (or "Your") shall mean an individual or Legal Entity - exercising permissions granted by this License. - - "Source" form shall mean the preferred form for making modifications, - including but not limited to software source code, documentation - source, and configuration files. - - "Object" form shall mean any form resulting from mechanical - transformation or translation of a Source form, including but - not limited to compiled object code, generated documentation, - and conversions to other media types. - - "Work" shall mean the work of authorship, whether in Source or - Object form, made available under the License, as indicated by a - copyright notice that is included in or attached to the work - (an example is provided in the Appendix below). - - "Derivative Works" shall mean any work, whether in Source or Object - form, that is based on (or derived from) the Work and for which the - editorial revisions, annotations, elaborations, or other modifications - represent, as a whole, an original work of authorship. For the purposes - of this License, Derivative Works shall not include works that remain - separable from, or merely link (or bind by name) to the interfaces of, - the Work and Derivative Works thereof. - - "Contribution" shall mean any work of authorship, including - the original version of the Work and any modifications or additions - to that Work or Derivative Works thereof, that is intentionally - submitted to Licensor for inclusion in the Work by the copyright owner - or by an individual or Legal Entity authorized to submit on behalf of - the copyright owner. For the purposes of this definition, "submitted" - means any form of electronic, verbal, or written communication sent - to the Licensor or its representatives, including but not limited to - communication on electronic mailing lists, source code control systems, - and issue tracking systems that are managed by, or on behalf of, the - Licensor for the purpose of discussing and improving the Work, but - excluding communication that is conspicuously marked or otherwise - designated in writing by the copyright owner as "Not a Contribution." - - "Contributor" shall mean Licensor and any individual or Legal Entity - on behalf of whom a Contribution has been received by Licensor and - subsequently incorporated within the Work. - - 2. Grant of Copyright License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - copyright license to reproduce, prepare Derivative Works of, - publicly display, publicly perform, sublicense, and distribute the - Work and such Derivative Works in Source or Object form. - - 3. Grant of Patent License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - (except as stated in this section) patent license to make, have made, - use, offer to sell, sell, import, and otherwise transfer the Work, - where such license applies only to those patent claims licensable - by such Contributor that are necessarily infringed by their - Contribution(s) alone or by combination of their Contribution(s) - with the Work to which such Contribution(s) was submitted. If You - institute patent litigation against any entity (including a - cross-claim or counterclaim in a lawsuit) alleging that the Work - or a Contribution incorporated within the Work constitutes direct - or contributory patent infringement, then any patent licenses - granted to You under this License for that Work shall terminate - as of the date such litigation is filed. - - 4. Redistribution. You may reproduce and distribute copies of the - Work or Derivative Works thereof in any medium, with or without - modifications, and in Source or Object form, provided that You - meet the following conditions: - - (a) You must give any other recipients of the Work or - Derivative Works a copy of this License; and - - (b) You must cause any modified files to carry prominent notices - stating that You changed the files; and - - (c) You must retain, in the Source form of any Derivative Works - that You distribute, all copyright, patent, trademark, and - attribution notices from the Source form of the Work, - excluding those notices that do not pertain to any part of - the Derivative Works; and - - (d) If the Work includes a "NOTICE" text file as part of its - distribution, then any Derivative Works that You distribute must - include a readable copy of the attribution notices contained - within such NOTICE file, excluding those notices that do not - pertain to any part of the Derivative Works, in at least one - of the following places: within a NOTICE text file distributed - as part of the Derivative Works; within the Source form or - documentation, if provided along with the Derivative Works; or, - within a display generated by the Derivative Works, if and - wherever such third-party notices normally appear. The contents - of the NOTICE file are for informational purposes only and - do not modify the License. You may add Your own attribution - notices within Derivative Works that You distribute, alongside - or as an addendum to the NOTICE text from the Work, provided - that such additional attribution notices cannot be construed - as modifying the License. - - You may add Your own copyright statement to Your modifications and - may provide additional or different license terms and conditions - for use, reproduction, or distribution of Your modifications, or - for any such Derivative Works as a whole, provided Your use, - reproduction, and distribution of the Work otherwise complies with - the conditions stated in this License. - - 5. Submission of Contributions. Unless You explicitly state otherwise, - any Contribution intentionally submitted for inclusion in the Work - by You to the Licensor shall be under the terms and conditions of - this License, without any additional terms or conditions. - Notwithstanding the above, nothing herein shall supersede or modify - the terms of any separate license agreement you may have executed - with Licensor regarding such Contributions. - - 6. Trademarks. This License does not grant permission to use the trade - names, trademarks, service marks, or product names of the Licensor, - except as required for reasonable and customary use in describing the - origin of the Work and reproducing the content of the NOTICE file. - - 7. Disclaimer of Warranty. Unless required by applicable law or - agreed to in writing, Licensor provides the Work (and each - Contributor provides its Contributions) on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or - implied, including, without limitation, any warranties or conditions - of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A - PARTICULAR PURPOSE. You are solely responsible for determining the - appropriateness of using or redistributing the Work and assume any - risks associated with Your exercise of permissions under this License. - - 8. Limitation of Liability. In no event and under no legal theory, - whether in tort (including negligence), contract, or otherwise, - unless required by applicable law (such as deliberate and grossly - negligent acts) or agreed to in writing, shall any Contributor be - liable to You for damages, including any direct, indirect, special, - incidental, or consequential damages of any character arising as a - result of this License or out of the use or inability to use the - Work (including but not limited to damages for loss of goodwill, - work stoppage, computer failure or malfunction, or any and all - other commercial damages or losses), even if such Contributor - has been advised of the possibility of such damages. - - 9. Accepting Warranty or Additional Liability. While redistributing - the Work or Derivative Works thereof, You may choose to offer, - and charge a fee for, acceptance of support, warranty, indemnity, - or other liability obligations and/or rights consistent with this - License. However, in accepting such obligations, You may act only - on Your own behalf and on Your sole responsibility, not on behalf - of any other Contributor, and only if You agree to indemnify, - defend, and hold each Contributor harmless for any liability - incurred by, or claims asserted against, such Contributor by reason - of your accepting any such warranty or additional liability. - - END OF TERMS AND CONDITIONS - - APPENDIX: How to apply the Apache License to your work. - - To apply the Apache License to your work, attach the following - boilerplate notice, with the fields enclosed by brackets "[]" - replaced with your own identifying information. (Don't include - the brackets!) The text should be enclosed in the appropriate - comment syntax for the file format. We also recommend that a - file or class name and description of purpose be included on the - same "printed page" as the copyright notice for easier - identification within third-party archives. - - Copyright 2020 Scaleout Systems AB - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. From 57ab43fa8521f48555f4666b9f4f79c3d0c643b2 Mon Sep 17 00:00:00 2001 From: mcapuccini Date: Tue, 7 Jun 2022 13:07:04 +0000 Subject: [PATCH 021/185] add stuff to test --- .github/workflows/integration-tests.yaml | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) diff --git a/.github/workflows/integration-tests.yaml b/.github/workflows/integration-tests.yaml index 984ddcbb7..440fb0602 100644 --- a/.github/workflows/integration-tests.yaml +++ b/.github/workflows/integration-tests.yaml @@ -5,12 +5,14 @@ on: push jobs: integration-tests: runs-on: ubuntu-20.04 + strategy: + matrix: + to_test: + - "mnist-keras keras" + - "mnist-pytorch pytorch" steps: - name: checkout uses: actions/checkout@v2 - - name: test mnist-keras example - run: .ci/tests/examples/run.sh mnist-keras keras - - - name: test mnist-pytorch example - run: .ci/tests/examples/run.sh mnist-pytorch pytorch \ No newline at end of file + - name: test ${{ matrix.to_test }} + run: .ci/tests/examples/run.sh ${{ matrix.to_test }} \ No newline at end of file From 20767a42a15f56ffa282df7930161826a9058daa Mon Sep 17 00:00:00 2001 From: mcapuccini Date: Tue, 7 Jun 2022 13:19:58 +0000 Subject: [PATCH 022/185] add python version to matrix --- .github/workflows/integration-tests.yaml | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/.github/workflows/integration-tests.yaml b/.github/workflows/integration-tests.yaml index 440fb0602..8b28125c1 100644 --- a/.github/workflows/integration-tests.yaml +++ b/.github/workflows/integration-tests.yaml @@ -10,9 +10,15 @@ jobs: to_test: - "mnist-keras keras" - "mnist-pytorch pytorch" + python_version: + - 3.8 steps: - name: checkout uses: actions/checkout@v2 + + - uses: actions/setup-python@v3 + with: + python-version: ${{ matrix.python_version }} - name: test ${{ matrix.to_test }} run: .ci/tests/examples/run.sh ${{ matrix.to_test }} \ No newline at end of file From e3dee682b1679ff7d9735cd30fa1e35381b7ef47 Mon Sep 17 00:00:00 2001 From: mcapuccini Date: Tue, 7 Jun 2022 13:21:57 +0000 Subject: [PATCH 023/185] fix --- .github/workflows/integration-tests.yaml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/.github/workflows/integration-tests.yaml b/.github/workflows/integration-tests.yaml index 8b28125c1..2eaab1f7d 100644 --- a/.github/workflows/integration-tests.yaml +++ b/.github/workflows/integration-tests.yaml @@ -17,8 +17,8 @@ jobs: uses: actions/checkout@v2 - uses: actions/setup-python@v3 - with: - python-version: ${{ matrix.python_version }} + with: + python-version: ${{ matrix.python_version }} - - name: test ${{ matrix.to_test }} + - name: test ${{ matrix.to_test }} (python ${{ matrix.python_version }}) run: .ci/tests/examples/run.sh ${{ matrix.to_test }} \ No newline at end of file From ecb7c3c098792780a7089688dfed5d266c6b5b54 Mon Sep 17 00:00:00 2001 From: mcapuccini Date: Tue, 7 Jun 2022 13:22:48 +0000 Subject: [PATCH 024/185] remove version from name --- .github/workflows/integration-tests.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/integration-tests.yaml b/.github/workflows/integration-tests.yaml index 2eaab1f7d..0610459b6 100644 --- a/.github/workflows/integration-tests.yaml +++ b/.github/workflows/integration-tests.yaml @@ -20,5 +20,5 @@ jobs: with: python-version: ${{ matrix.python_version }} - - name: test ${{ matrix.to_test }} (python ${{ matrix.python_version }}) + - name: test ${{ matrix.to_test }} run: .ci/tests/examples/run.sh ${{ matrix.to_test }} \ No newline at end of file From d7db35fec93e128283a51b67dd617b4022163cc7 Mon Sep 17 00:00:00 2001 From: mcapuccini Date: Tue, 7 Jun 2022 13:41:41 +0000 Subject: [PATCH 025/185] Increase sleep for reducers and clients --- .ci/tests/examples/run.sh | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.ci/tests/examples/run.sh b/.ci/tests/examples/run.sh index e1a37c5be..155b08e37 100755 --- a/.ci/tests/examples/run.sh +++ b/.ci/tests/examples/run.sh @@ -27,7 +27,7 @@ docker-compose \ up -d --build >&2 echo "Wait for reducer to start" -sleep 10 # TODO: add API call to check when ready +sleep 30 # TODO: add API call to check when ready >&2 echo "Upload compute package" curl -k -X POST \ @@ -43,7 +43,7 @@ curl -k -X POST \ printf '\n' >&2 echo "Wait for clients to connect" -sleep 10 # TODO: add API call to check when ready +sleep 30 # TODO: add API call to check when ready >&2 echo "Start round" curl -k -X POST \ From 3b7d3191a097d2b0bee4b0861e11afb6301cb5df Mon Sep 17 00:00:00 2001 From: mcapuccini Date: Tue, 7 Jun 2022 14:07:00 +0000 Subject: [PATCH 026/185] Improve logs --- .ci/tests/examples/print_logs.sh | 18 ++++++++++++++++++ .github/workflows/integration-tests.yaml | 5 ++++- 2 files changed, 22 insertions(+), 1 deletion(-) create mode 100755 .ci/tests/examples/print_logs.sh diff --git a/.ci/tests/examples/print_logs.sh b/.ci/tests/examples/print_logs.sh new file mode 100755 index 000000000..6e3725c96 --- /dev/null +++ b/.ci/tests/examples/print_logs.sh @@ -0,0 +1,18 @@ +#!/bin/bash +echo "Minio logs" +docker logs fedn_minio_1 + +echo "Mongo logs" +docker logs fedn_mongo_1 + +echo "Reducer logs" +docker logs fedn_reducer_1 + +echo "Combiner logs" +docker logs fedn_combiner_1 + +echo "Client 1 logs" +docker logs fedn_client_1 + +echo "Client 2 logs" +docker logs fedn_client_2 \ No newline at end of file diff --git a/.github/workflows/integration-tests.yaml b/.github/workflows/integration-tests.yaml index 0610459b6..079f0d422 100644 --- a/.github/workflows/integration-tests.yaml +++ b/.github/workflows/integration-tests.yaml @@ -21,4 +21,7 @@ jobs: python-version: ${{ matrix.python_version }} - name: test ${{ matrix.to_test }} - run: .ci/tests/examples/run.sh ${{ matrix.to_test }} \ No newline at end of file + run: .ci/tests/examples/run.sh ${{ matrix.to_test }} + + - name: print logs + run: .ci/tests/examples/print_logs.sh \ No newline at end of file From 717541b722640a8de38de5cf9c8e2e505a5f58bb Mon Sep 17 00:00:00 2001 From: mcapuccini Date: Tue, 7 Jun 2022 14:19:36 +0000 Subject: [PATCH 027/185] Always print logs --- .github/workflows/integration-tests.yaml | 1 + 1 file changed, 1 insertion(+) diff --git a/.github/workflows/integration-tests.yaml b/.github/workflows/integration-tests.yaml index 079f0d422..8cf8d00f1 100644 --- a/.github/workflows/integration-tests.yaml +++ b/.github/workflows/integration-tests.yaml @@ -24,4 +24,5 @@ jobs: run: .ci/tests/examples/run.sh ${{ matrix.to_test }} - name: print logs + if: always() run: .ci/tests/examples/print_logs.sh \ No newline at end of file From 23ef432ff9febc53de397fafdb9e806a70405d0e Mon Sep 17 00:00:00 2001 From: Marco Capuccini Date: Tue, 7 Jun 2022 16:47:50 +0200 Subject: [PATCH 028/185] Fix PyTorch example data mount path in compose file Fix PyTorch example data mount path in override compose file. --- examples/mnist-pytorch/docker-compose.override.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/examples/mnist-pytorch/docker-compose.override.yaml b/examples/mnist-pytorch/docker-compose.override.yaml index 0862c13a6..edbdc3f89 100644 --- a/examples/mnist-pytorch/docker-compose.override.yaml +++ b/examples/mnist-pytorch/docker-compose.override.yaml @@ -11,5 +11,5 @@ services: replicas: 2 volumes: - ${HOST_FEDN_DIR:-./fedn}:/app/fedn - - ${HOST_DATA_DIR:-./examples/mnist-keras/data}:/var/data + - ${HOST_DATA_DIR:-./examples/mnist-pytorch/data}:/var/data - /var/run/docker.sock:/var/run/docker.sock From 04b78f3953c903c66cf780a71a71df634658db90 Mon Sep 17 00:00:00 2001 From: mcapuccini Date: Tue, 7 Jun 2022 15:01:10 +0000 Subject: [PATCH 029/185] mets many python versions --- .github/workflows/integration-tests.yaml | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/.github/workflows/integration-tests.yaml b/.github/workflows/integration-tests.yaml index 8cf8d00f1..892a1bb6c 100644 --- a/.github/workflows/integration-tests.yaml +++ b/.github/workflows/integration-tests.yaml @@ -10,8 +10,7 @@ jobs: to_test: - "mnist-keras keras" - "mnist-pytorch pytorch" - python_version: - - 3.8 + python_version: [3.7, 3.8, 3.9, 3.10] steps: - name: checkout uses: actions/checkout@v2 From 160ee02dd125542cde8473aead7c52feb44a6c67 Mon Sep 17 00:00:00 2001 From: mcapuccini Date: Tue, 7 Jun 2022 15:06:22 +0000 Subject: [PATCH 030/185] quotes --- .github/workflows/integration-tests.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/integration-tests.yaml b/.github/workflows/integration-tests.yaml index 892a1bb6c..e5c44cb1c 100644 --- a/.github/workflows/integration-tests.yaml +++ b/.github/workflows/integration-tests.yaml @@ -10,7 +10,7 @@ jobs: to_test: - "mnist-keras keras" - "mnist-pytorch pytorch" - python_version: [3.7, 3.8, 3.9, 3.10] + python_version: ["3.7", "3.8", "3.9", "3.10"] steps: - name: checkout uses: actions/checkout@v2 From e4ed2d4a16419d9954288a68c4f4653adf72bdb1 Mon Sep 17 00:00:00 2001 From: mcapuccini Date: Wed, 8 Jun 2022 11:20:42 +0000 Subject: [PATCH 031/185] Fix CI sleep time --- .ci/tests/examples/run.sh | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.ci/tests/examples/run.sh b/.ci/tests/examples/run.sh index e1a37c5be..155b08e37 100755 --- a/.ci/tests/examples/run.sh +++ b/.ci/tests/examples/run.sh @@ -27,7 +27,7 @@ docker-compose \ up -d --build >&2 echo "Wait for reducer to start" -sleep 10 # TODO: add API call to check when ready +sleep 30 # TODO: add API call to check when ready >&2 echo "Upload compute package" curl -k -X POST \ @@ -43,7 +43,7 @@ curl -k -X POST \ printf '\n' >&2 echo "Wait for clients to connect" -sleep 10 # TODO: add API call to check when ready +sleep 30 # TODO: add API call to check when ready >&2 echo "Start round" curl -k -X POST \ From d547b94d6b0ec698ada5c1d021dc213453ef2be6 Mon Sep 17 00:00:00 2001 From: mcapuccini Date: Wed, 8 Jun 2022 12:21:55 +0000 Subject: [PATCH 032/185] Add Python versiong --- fedn/setup.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/fedn/setup.py b/fedn/setup.py index 611d28ead..4932c78a6 100644 --- a/fedn/setup.py +++ b/fedn/setup.py @@ -10,7 +10,7 @@ author_email='contact@scaleoutsystems.com', url='https://www.scaleoutsystems.com', py_modules=['fedn'], - python_requires='>=3.8,<3.9', + python_requires='>=3.7,<=3.10', install_requires=[ "PyYAML>=5.4", "requests", From 463d48ac36ed6131d1d62a652945eae79da108cb Mon Sep 17 00:00:00 2001 From: mcapuccini Date: Wed, 8 Jun 2022 12:25:25 +0000 Subject: [PATCH 033/185] don't fail fast --- .github/workflows/integration-tests.yaml | 1 + fedn/setup.py | 3 +++ 2 files changed, 4 insertions(+) diff --git a/.github/workflows/integration-tests.yaml b/.github/workflows/integration-tests.yaml index e5c44cb1c..875e53cef 100644 --- a/.github/workflows/integration-tests.yaml +++ b/.github/workflows/integration-tests.yaml @@ -6,6 +6,7 @@ jobs: integration-tests: runs-on: ubuntu-20.04 strategy: + fail-fast: false matrix: to_test: - "mnist-keras keras" diff --git a/fedn/setup.py b/fedn/setup.py index 4932c78a6..937bccbf7 100644 --- a/fedn/setup.py +++ b/fedn/setup.py @@ -45,6 +45,9 @@ packages=find_packages(exclude=["tests", "tests.*"]), classifiers=[ 'Natural Language :: English', + 'Programming Language :: Python :: 3.7', 'Programming Language :: Python :: 3.8', + 'Programming Language :: Python :: 3.9', + 'Programming Language :: Python :: 3.10', ], ) From db384b4ccb4306d8def1b7ba284d6489ff16b9d1 Mon Sep 17 00:00:00 2001 From: mcapuccini Date: Wed, 8 Jun 2022 12:28:34 +0000 Subject: [PATCH 034/185] remove python 3.10 --- fedn/setup.py | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/fedn/setup.py b/fedn/setup.py index 937bccbf7..e6ca4e1b0 100644 --- a/fedn/setup.py +++ b/fedn/setup.py @@ -10,7 +10,7 @@ author_email='contact@scaleoutsystems.com', url='https://www.scaleoutsystems.com', py_modules=['fedn'], - python_requires='>=3.7,<=3.10', + python_requires='>=3.7,<3.10', install_requires=[ "PyYAML>=5.4", "requests", @@ -48,6 +48,5 @@ 'Programming Language :: Python :: 3.7', 'Programming Language :: Python :: 3.8', 'Programming Language :: Python :: 3.9', - 'Programming Language :: Python :: 3.10', ], ) From 9df12c38c146ed648dd2ff628ef22e867a1a07f1 Mon Sep 17 00:00:00 2001 From: mcapuccini Date: Wed, 8 Jun 2022 12:31:21 +0000 Subject: [PATCH 035/185] remove python 3.10 --- .github/workflows/integration-tests.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/integration-tests.yaml b/.github/workflows/integration-tests.yaml index 875e53cef..7721561c3 100644 --- a/.github/workflows/integration-tests.yaml +++ b/.github/workflows/integration-tests.yaml @@ -11,7 +11,7 @@ jobs: to_test: - "mnist-keras keras" - "mnist-pytorch pytorch" - python_version: ["3.7", "3.8", "3.9", "3.10"] + python_version: ["3.7", "3.8", "3.9"] steps: - name: checkout uses: actions/checkout@v2 From 6355ba8507687778bf2828e75bbc519fc0f41d1c Mon Sep 17 00:00:00 2001 From: mcapuccini Date: Wed, 8 Jun 2022 13:01:58 +0000 Subject: [PATCH 036/185] fix numpy for py 3.7 --- fedn/setup.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/fedn/setup.py b/fedn/setup.py index e6ca4e1b0..31661a1e6 100644 --- a/fedn/setup.py +++ b/fedn/setup.py @@ -19,7 +19,7 @@ "python-slugify", "grpcio-tools", "grpcio~=1.34.0", - "numpy~=1.22.2", + "numpy>=1.21.6,<=1.22.2", "protobuf", "pymongo", "Flask", From 976e12d7a5bc333f2e92cc1e447f500fd17b752c Mon Sep 17 00:00:00 2001 From: mcapuccini Date: Fri, 10 Jun 2022 08:47:27 +0000 Subject: [PATCH 037/185] Inference CI --- .ci/tests/examples/inference_test.py | 32 ++++++++++++++++++++++++++++ .ci/tests/examples/run.sh | 6 ++++++ 2 files changed, 38 insertions(+) create mode 100644 .ci/tests/examples/inference_test.py diff --git a/.ci/tests/examples/inference_test.py b/.ci/tests/examples/inference_test.py new file mode 100644 index 000000000..a35c7b17b --- /dev/null +++ b/.ci/tests/examples/inference_test.py @@ -0,0 +1,32 @@ +import sys +from time import sleep + +import pymongo + +N_CLIENTS=2 +RETRIES=18 +SLEEP=10 + +def _eprint(*args, **kwargs): + print(*args, file=sys.stderr, **kwargs) + +def _wait_n_rounds(collection): + n = 0 + for _ in range(RETRIES): + query = {'type': 'INFERENCE'} + n = collection.count_documents(query) + if n == N_CLIENTS: + return n + _eprint(f'Succeded rounds {n}. Sleeping for {SLEEP}.') + sleep(SLEEP) + _eprint(f'Succeded rounds: {n}. Giving up.') + return n + +if __name__ == '__main__': + # Connect to mongo + client = pymongo.MongoClient("mongodb://fedn_admin:password@localhost:6534") + + # Wait for successful rounds + succeded = _wait_n_rounds(client['fedn-test-network']['control']['status']) + assert(succeded == N_CLIENTS) # check that all rounds succeeded + _eprint(f'Succeded inference clients: {succeded}. Test passed.') diff --git a/.ci/tests/examples/run.sh b/.ci/tests/examples/run.sh index 8a8e56f97..77cdded2f 100755 --- a/.ci/tests/examples/run.sh +++ b/.ci/tests/examples/run.sh @@ -45,5 +45,11 @@ printf '\n' >&2 echo "Checking rounds success" ".$example/bin/python" ../../.ci/tests/examples/is_success.py +>&2 echo "Run inference" +curl -k -X POST https://localhost:8090/infer + +>&2 echo "Checking inference success" +".$example/bin/python" ../../.ci/tests/examples/inference_test.py + popd >&2 echo "Test completed successfully" \ No newline at end of file From 18de033abac9d8a78f37244e672188c1d31fb408 Mon Sep 17 00:00:00 2001 From: mcapuccini Date: Fri, 10 Jun 2022 09:11:30 +0000 Subject: [PATCH 038/185] minor --- .ci/tests/examples/inference_test.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.ci/tests/examples/inference_test.py b/.ci/tests/examples/inference_test.py index a35c7b17b..43122eece 100644 --- a/.ci/tests/examples/inference_test.py +++ b/.ci/tests/examples/inference_test.py @@ -17,9 +17,9 @@ def _wait_n_rounds(collection): n = collection.count_documents(query) if n == N_CLIENTS: return n - _eprint(f'Succeded rounds {n}. Sleeping for {SLEEP}.') + _eprint(f'Succeded cleints {n}. Sleeping for {SLEEP}.') sleep(SLEEP) - _eprint(f'Succeded rounds: {n}. Giving up.') + _eprint(f'Succeded cleints: {n}. Giving up.') return n if __name__ == '__main__': From ca5f809fc856dacd498ca967f06a9c438588bf0d Mon Sep 17 00:00:00 2001 From: mcapuccini Date: Fri, 10 Jun 2022 09:40:01 +0000 Subject: [PATCH 039/185] fix --- .ci/tests/examples/run.sh | 6 ------ .ci/tests/examples/run_inference.sh | 6 ++++++ .github/workflows/integration-tests.yaml | 4 ++++ 3 files changed, 10 insertions(+), 6 deletions(-) create mode 100755 .ci/tests/examples/run_inference.sh diff --git a/.ci/tests/examples/run.sh b/.ci/tests/examples/run.sh index 77cdded2f..8a8e56f97 100755 --- a/.ci/tests/examples/run.sh +++ b/.ci/tests/examples/run.sh @@ -45,11 +45,5 @@ printf '\n' >&2 echo "Checking rounds success" ".$example/bin/python" ../../.ci/tests/examples/is_success.py ->&2 echo "Run inference" -curl -k -X POST https://localhost:8090/infer - ->&2 echo "Checking inference success" -".$example/bin/python" ../../.ci/tests/examples/inference_test.py - popd >&2 echo "Test completed successfully" \ No newline at end of file diff --git a/.ci/tests/examples/run_inference.sh b/.ci/tests/examples/run_inference.sh new file mode 100755 index 000000000..9aa819d59 --- /dev/null +++ b/.ci/tests/examples/run_inference.sh @@ -0,0 +1,6 @@ +#!/bin/bash +>&2 echo "Run inference" +curl -k -X POST https://localhost:8090/infer + +>&2 echo "Checking inference success" +".$example/bin/python" ../../.ci/tests/examples/inference_test.py \ No newline at end of file diff --git a/.github/workflows/integration-tests.yaml b/.github/workflows/integration-tests.yaml index 275ba5fd5..b0c5681f0 100644 --- a/.github/workflows/integration-tests.yaml +++ b/.github/workflows/integration-tests.yaml @@ -29,6 +29,10 @@ jobs: run: .ci/tests/examples/run.sh ${{ matrix.to_test }} if: ${{ matrix.os != 'macos-11' }} # skip Docker part for MacOS + - name: run ${{ matrix.to_test }} inference + run: .ci/tests/examples/run_inference.sh ${{ matrix.to_test }} + if: ${{ matrix.to_test == '"mnist-keras keras"' }} # example available for Keras + - name: print logs if: failure() run: .ci/tests/examples/print_logs.sh \ No newline at end of file From 30515507da0e0bcee464c7201edbf86cb41c38ea Mon Sep 17 00:00:00 2001 From: mcapuccini Date: Fri, 10 Jun 2022 09:43:26 +0000 Subject: [PATCH 040/185] fix --- .ci/tests/examples/run_inference.sh | 5 ++++- .github/workflows/integration-tests.yaml | 2 +- 2 files changed, 5 insertions(+), 2 deletions(-) diff --git a/.ci/tests/examples/run_inference.sh b/.ci/tests/examples/run_inference.sh index 9aa819d59..e2c3082d0 100755 --- a/.ci/tests/examples/run_inference.sh +++ b/.ci/tests/examples/run_inference.sh @@ -1,6 +1,9 @@ #!/bin/bash +set -e + >&2 echo "Run inference" curl -k -X POST https://localhost:8090/infer >&2 echo "Checking inference success" -".$example/bin/python" ../../.ci/tests/examples/inference_test.py \ No newline at end of file +".$example/bin/python" ../../.ci/tests/examples/inference_test.py +>&2 echo "Test completed successfully" \ No newline at end of file diff --git a/.github/workflows/integration-tests.yaml b/.github/workflows/integration-tests.yaml index b0c5681f0..8c82bb2a3 100644 --- a/.github/workflows/integration-tests.yaml +++ b/.github/workflows/integration-tests.yaml @@ -31,7 +31,7 @@ jobs: - name: run ${{ matrix.to_test }} inference run: .ci/tests/examples/run_inference.sh ${{ matrix.to_test }} - if: ${{ matrix.to_test == '"mnist-keras keras"' }} # example available for Keras + if: ${{ matrix.to_test == 'mnist-keras keras' }} # example available for Keras - name: print logs if: failure() From 9fb4b019a4111aba6976e6e993838182c3c0534d Mon Sep 17 00:00:00 2001 From: mcapuccini Date: Fri, 10 Jun 2022 09:50:07 +0000 Subject: [PATCH 041/185] fix --- .github/workflows/integration-tests.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/integration-tests.yaml b/.github/workflows/integration-tests.yaml index 8c82bb2a3..9db4e5140 100644 --- a/.github/workflows/integration-tests.yaml +++ b/.github/workflows/integration-tests.yaml @@ -31,7 +31,7 @@ jobs: - name: run ${{ matrix.to_test }} inference run: .ci/tests/examples/run_inference.sh ${{ matrix.to_test }} - if: ${{ matrix.to_test == 'mnist-keras keras' }} # example available for Keras + if: ${{ matrix.os != 'macos-11' && matrix.to_test == 'mnist-keras keras' }} # example available for Keras - name: print logs if: failure() From 8f84f3ce522cc81b7e4959343b38e563592276f6 Mon Sep 17 00:00:00 2001 From: mcapuccini Date: Fri, 10 Jun 2022 10:01:43 +0000 Subject: [PATCH 042/185] fix --- .ci/tests/examples/run_inference.sh | 12 +++++++++++- .github/workflows/integration-tests.yaml | 2 +- 2 files changed, 12 insertions(+), 2 deletions(-) diff --git a/.ci/tests/examples/run_inference.sh b/.ci/tests/examples/run_inference.sh index e2c3082d0..b55d2c9d5 100755 --- a/.ci/tests/examples/run_inference.sh +++ b/.ci/tests/examples/run_inference.sh @@ -1,9 +1,19 @@ #!/bin/bash set -e +# Parse example name +if [ "$#" -ne 1 ]; then + >&2 echo "Wrong number of arguments (usage: run_infrence.sh )" + exit 1 +fi +example="$1" + >&2 echo "Run inference" +pushd "examples/$example" curl -k -X POST https://localhost:8090/infer >&2 echo "Checking inference success" ".$example/bin/python" ../../.ci/tests/examples/inference_test.py ->&2 echo "Test completed successfully" \ No newline at end of file + +>&2 echo "Test completed successfully" +popd \ No newline at end of file diff --git a/.github/workflows/integration-tests.yaml b/.github/workflows/integration-tests.yaml index 9db4e5140..71e9d807b 100644 --- a/.github/workflows/integration-tests.yaml +++ b/.github/workflows/integration-tests.yaml @@ -30,7 +30,7 @@ jobs: if: ${{ matrix.os != 'macos-11' }} # skip Docker part for MacOS - name: run ${{ matrix.to_test }} inference - run: .ci/tests/examples/run_inference.sh ${{ matrix.to_test }} + run: .ci/tests/examples/run_inference.sh if: ${{ matrix.os != 'macos-11' && matrix.to_test == 'mnist-keras keras' }} # example available for Keras - name: print logs From 9dddc0212ca139506d1984d39a146028b924fe1c Mon Sep 17 00:00:00 2001 From: mcapuccini Date: Fri, 10 Jun 2022 10:15:41 +0000 Subject: [PATCH 043/185] fix --- .github/workflows/integration-tests.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/integration-tests.yaml b/.github/workflows/integration-tests.yaml index 71e9d807b..9db4e5140 100644 --- a/.github/workflows/integration-tests.yaml +++ b/.github/workflows/integration-tests.yaml @@ -30,7 +30,7 @@ jobs: if: ${{ matrix.os != 'macos-11' }} # skip Docker part for MacOS - name: run ${{ matrix.to_test }} inference - run: .ci/tests/examples/run_inference.sh + run: .ci/tests/examples/run_inference.sh ${{ matrix.to_test }} if: ${{ matrix.os != 'macos-11' && matrix.to_test == 'mnist-keras keras' }} # example available for Keras - name: print logs From 98c5aba6b21df78886d77776d083d3d54766805a Mon Sep 17 00:00:00 2001 From: mcapuccini Date: Fri, 10 Jun 2022 10:29:04 +0000 Subject: [PATCH 044/185] fix --- .ci/tests/examples/run_inference.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.ci/tests/examples/run_inference.sh b/.ci/tests/examples/run_inference.sh index b55d2c9d5..27601d437 100755 --- a/.ci/tests/examples/run_inference.sh +++ b/.ci/tests/examples/run_inference.sh @@ -2,7 +2,7 @@ set -e # Parse example name -if [ "$#" -ne 1 ]; then +if [ "$#" -ge 1 ]; then >&2 echo "Wrong number of arguments (usage: run_infrence.sh )" exit 1 fi From ed3b3bdf6756d8329343a294696915ee67ea5106 Mon Sep 17 00:00:00 2001 From: mcapuccini Date: Fri, 10 Jun 2022 10:43:20 +0000 Subject: [PATCH 045/185] fix --- .ci/tests/examples/run_inference.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.ci/tests/examples/run_inference.sh b/.ci/tests/examples/run_inference.sh index 27601d437..d78771d70 100755 --- a/.ci/tests/examples/run_inference.sh +++ b/.ci/tests/examples/run_inference.sh @@ -2,7 +2,7 @@ set -e # Parse example name -if [ "$#" -ge 1 ]; then +if [ "$#" -lt 1 ]; then >&2 echo "Wrong number of arguments (usage: run_infrence.sh )" exit 1 fi From 7a457de0be44ed0c6951fb20af1218a945ad7ea9 Mon Sep 17 00:00:00 2001 From: mcapuccini Date: Mon, 13 Jun 2022 12:46:06 +0000 Subject: [PATCH 046/185] reduce CI time --- .github/workflows/integration-tests.yaml | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/.github/workflows/integration-tests.yaml b/.github/workflows/integration-tests.yaml index 9db4e5140..52dcb79e3 100644 --- a/.github/workflows/integration-tests.yaml +++ b/.github/workflows/integration-tests.yaml @@ -8,11 +8,12 @@ jobs: matrix: to_test: - "mnist-keras keras" - - "mnist-pytorch pytorch" - python_version: ["3.8", "3.9"] + # - "mnist-pytorch pytorch" # reduce CI time + # python_version: ["3.8", "3.9"] # reduce CI time + python_version: ["3.9"] # reduce CI time os: - ubuntu-20.04 - - macos-11 + # - macos-11 # reduce CI time runs-on: ${{ matrix.os }} steps: - name: checkout From d1904c11ea7a7046ce1c699cddc3d687e1e74eee Mon Sep 17 00:00:00 2001 From: mcapuccini Date: Wed, 15 Jun 2022 09:45:08 +0000 Subject: [PATCH 047/185] fix conflict --- examples/mnist-keras/client/fedn.yaml | 4 ---- 1 file changed, 4 deletions(-) diff --git a/examples/mnist-keras/client/fedn.yaml b/examples/mnist-keras/client/fedn.yaml index 26a2b0eb6..91ec40c2a 100644 --- a/examples/mnist-keras/client/fedn.yaml +++ b/examples/mnist-keras/client/fedn.yaml @@ -2,10 +2,6 @@ entry_points: train: command: /venv/bin/python entrypoint train $ENTRYPOINT_OPTS validate: -<<<<<<< HEAD command: /venv/bin/python entrypoint validate $ENTRYPOINT_OPTS infer: command: /venv/bin/python entrypoint infer $ENTRYPOINT_OPTS -======= - command: /venv/bin/python entrypoint validate $ENTRYPOINT_OPTS ->>>>>>> develop From a9ea496121647b36ff9751306444c1767a86ebb3 Mon Sep 17 00:00:00 2001 From: Andreas Hellander Date: Wed, 6 Jul 2022 12:36:25 +0200 Subject: [PATCH 048/185] Initial implementation toggle ssl for REST service --- fedn/cli/run_cmd.py | 11 ++++++----- fedn/fedn/clients/reducer/restservice.py | 4 +++- fedn/fedn/reducer.py | 9 ++++++++- 3 files changed, 17 insertions(+), 7 deletions(-) diff --git a/fedn/cli/run_cmd.py b/fedn/cli/run_cmd.py index b1299f609..89f2273c0 100644 --- a/fedn/cli/run_cmd.py +++ b/fedn/cli/run_cmd.py @@ -135,13 +135,14 @@ def client_cmd(ctx, discoverhost, discoverport, token, name, client_id, local_pa @run_cmd.command('reducer') @click.option('-d', '--discoverhost', required=False) @click.option('-p', '--discoverport', required=False, default='8090', show_default=True) -@click.option('-s', '--secret-key', required=False, help='Set secret key to enable jwt token authentication.') -@click.option('-l', '--local-package', is_flag=True, help='Enable local compute package') +@click.option('-k', '--secret-key', required=False, help='Set secret key to enable jwt token authentication.') +@click.option('-s', '--secure', required=False, default=False, help='Enable SSL encryption on REST service.') +@click.option('-l', '--local-package', is_flag=True, help='Enable use of local compute package') @click.option('-n', '--name', required=False, default="reducer" + str(uuid.uuid4())[:8]) @click.option('-i', '--init', required=True, default=None, help='Set to a filename to (re)init reducer from file state.') @click.pass_context -def reducer_cmd(ctx, discoverhost, discoverport, secret_key, local_package, name, init): +def reducer_cmd(ctx, discoverhost, discoverport, secret_key, secure, local_package, name, init): """ :param ctx: @@ -152,8 +153,8 @@ def reducer_cmd(ctx, discoverhost, discoverport, secret_key, local_package, name :param init: """ remote = False if local_package else True - config = {'discover_host': discoverhost, 'discover_port': discoverport, 'secret_key': secret_key, 'name': name, - 'remote_compute_context': remote, 'init': init} + config = {'discover_host': discoverhost, 'discover_port': discoverport, 'secret_key': secret_key, + 'secure': secure, 'name': name, 'remote_compute_context': remote, 'init': init} # Read settings from config file try: diff --git a/fedn/fedn/clients/reducer/restservice.py b/fedn/fedn/clients/reducer/restservice.py index 3420e0b96..6e0b15614 100644 --- a/fedn/fedn/clients/reducer/restservice.py +++ b/fedn/fedn/clients/reducer/restservice.py @@ -962,5 +962,7 @@ def checksum(): str(self.certificate.key_path)), flush=True) app.run(host="0.0.0.0", port=self.port, ssl_context=(str(self.certificate.cert_path), str(self.certificate.key_path))) - + else: + app.run(host="0.0.0.0", port=self.port) + return app diff --git a/fedn/fedn/reducer.py b/fedn/fedn/reducer.py index 39781d51a..d8fad170c 100644 --- a/fedn/fedn/reducer.py +++ b/fedn/fedn/reducer.py @@ -32,12 +32,19 @@ def __init__(self, statestore): raise MissingReducerConfiguration() self.name = config['name'] + self.secure = config['secure'] + # The certificate manager generates (self-signed) certs for combiner nodes self.certificate_manager = CertificateManager(os.getcwd() + "/certs/") + if self.secure: + rest_certificate = self.certificate_manager.get_or_create("reducer") + else: + rest_certificate = None + self.control = ReducerControl(self.statestore) self.inference = ReducerInferenceInterface() - rest_certificate = self.certificate_manager.get_or_create("reducer") + self.rest = ReducerRestService( config, self.control, self.certificate_manager, certificate=rest_certificate) From 5a20932e96bf288bcc0dbcc61d0f63e4ac83aaf1 Mon Sep 17 00:00:00 2001 From: Andreas Hellander Date: Wed, 6 Jul 2022 15:34:02 +0200 Subject: [PATCH 049/185] Removed unused reducer inference interface mockup --- fedn/fedn/clients/reducer/interfaces.py | 27 ------------------------- fedn/fedn/reducer.py | 1 - 2 files changed, 28 deletions(-) diff --git a/fedn/fedn/clients/reducer/interfaces.py b/fedn/fedn/clients/reducer/interfaces.py index ff1deecd0..2a6397031 100644 --- a/fedn/fedn/clients/reducer/interfaces.py +++ b/fedn/fedn/clients/reducer/interfaces.py @@ -268,30 +268,3 @@ def allowing_clients(self): return False - -class ReducerInferenceInterface: - """ - - """ - - def __init__(self): - self.model_wrapper = None - - def set(self, model): - """ - - :param model: - """ - self.model_wrapper = model - - def infer(self, params): - """ - - :param params: - :return: - """ - results = None - if self.model_wrapper: - results = self.model_wrapper.infer(params) - - return results diff --git a/fedn/fedn/reducer.py b/fedn/fedn/reducer.py index d8fad170c..fc6bdf6ff 100644 --- a/fedn/fedn/reducer.py +++ b/fedn/fedn/reducer.py @@ -43,7 +43,6 @@ def __init__(self, statestore): rest_certificate = None self.control = ReducerControl(self.statestore) - self.inference = ReducerInferenceInterface() self.rest = ReducerRestService( config, self.control, self.certificate_manager, certificate=rest_certificate) From da9d64d4a0a120e263afbe823e8b3bee79fcb7b5 Mon Sep 17 00:00:00 2001 From: Andreas Hellander Date: Wed, 6 Jul 2022 16:36:34 +0200 Subject: [PATCH 050/185] Removed geoip2 dependency --- fedn/setup.py | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/fedn/setup.py b/fedn/setup.py index 31661a1e6..6c5d9245c 100644 --- a/fedn/setup.py +++ b/fedn/setup.py @@ -18,7 +18,7 @@ "minio", "python-slugify", "grpcio-tools", - "grpcio~=1.34.0", + "grpcio", "numpy>=1.21.6,<=1.22.2", "protobuf", "pymongo", @@ -30,7 +30,6 @@ "psutil", "click==8.0.1", "jinja2", - "geoip2", "plotly", "pandas", "bokeh", From 175e3d9aaf188ae5f4b35732468398553cb903f2 Mon Sep 17 00:00:00 2001 From: Andreas Hellander Date: Wed, 6 Jul 2022 20:34:48 +0200 Subject: [PATCH 051/185] Dockerfile update, install developer tools --- Dockerfile | 3 +++ fedn/fedn/reducer.py | 5 ++--- fedn/setup.py | 2 +- 3 files changed, 6 insertions(+), 4 deletions(-) diff --git a/Dockerfile b/Dockerfile index 1e0b11b8b..33d7c34a4 100644 --- a/Dockerfile +++ b/Dockerfile @@ -12,6 +12,9 @@ COPY config/settings-combiner.yaml.template /app/config/settings-combiner.yaml COPY config/settings-reducer.yaml.template /app/config/settings-reducer.yaml COPY $REQUIREMENTS /app/config/requirements.txt +# Install developer tools (needed for psutil) +RUN apt update && apt install -y python3-dev gcc + # Create FEDn app directory SHELL ["/bin/bash", "-c"] RUN mkdir -p /app \ diff --git a/fedn/fedn/reducer.py b/fedn/fedn/reducer.py index fc6bdf6ff..3bc0be34e 100644 --- a/fedn/fedn/reducer.py +++ b/fedn/fedn/reducer.py @@ -4,7 +4,6 @@ from datetime import datetime from fedn.clients.reducer.control import ReducerControl -from fedn.clients.reducer.interfaces import ReducerInferenceInterface from fedn.clients.reducer.restservice import ReducerRestService from fedn.clients.reducer.state import ReducerStateToString from fedn.common.security.certificatemanager import CertificateManager @@ -49,7 +48,7 @@ def __init__(self, statestore): def run(self): """ - + Start REST service and control loop. """ threading.Thread(target=self.control_loop, daemon=True).start() @@ -57,7 +56,7 @@ def run(self): def control_loop(self): """ - + Manage and report the state of the Reducer. """ try: old_state = self.control.state() diff --git a/fedn/setup.py b/fedn/setup.py index 6c5d9245c..875813462 100644 --- a/fedn/setup.py +++ b/fedn/setup.py @@ -18,7 +18,7 @@ "minio", "python-slugify", "grpcio-tools", - "grpcio", + "grpcio~=1.47.0", "numpy>=1.21.6,<=1.22.2", "protobuf", "pymongo", From 0b95ebf37a1433c575c282653aeca5d0d42ec993 Mon Sep 17 00:00:00 2001 From: Andreas Hellander Date: Thu, 7 Jul 2022 10:20:06 +0200 Subject: [PATCH 052/185] Draft implementation --- fedn/cli/run_cmd.py | 8 ++----- fedn/fedn/clients/reducer/restservice.py | 22 ++++++++++++++++-- fedn/fedn/common/net/connect.py | 29 ++++++++---------------- fedn/setup.py | 1 + 4 files changed, 33 insertions(+), 27 deletions(-) diff --git a/fedn/cli/run_cmd.py b/fedn/cli/run_cmd.py index 89f2273c0..12caa1c63 100644 --- a/fedn/cli/run_cmd.py +++ b/fedn/cli/run_cmd.py @@ -59,7 +59,7 @@ def run_cmd(ctx): @click.option('-i', '--client_id', required=False) @click.option('--local-package', is_flag=True, help='Enable local compute package') @click.option('-u', '--dry-run', required=False, default=False) -@click.option('-s', '--secure', required=False, default=True) +@click.option('-s', '--secure', required=False, default=False) @click.option('-pc', '--preshared-cert', required=False, default=False) @click.option('-v', '--verify-cert', required=False, default=False) @click.option('-c', '--preferred-combiner', required=False, default=False) @@ -136,7 +136,7 @@ def client_cmd(ctx, discoverhost, discoverport, token, name, client_id, local_pa @click.option('-d', '--discoverhost', required=False) @click.option('-p', '--discoverport', required=False, default='8090', show_default=True) @click.option('-k', '--secret-key', required=False, help='Set secret key to enable jwt token authentication.') -@click.option('-s', '--secure', required=False, default=False, help='Enable SSL encryption on REST service.') +@click.option('-s', '--secure', required=False, default=False, help='Enable SSL') @click.option('-l', '--local-package', is_flag=True, help='Enable use of local compute package') @click.option('-n', '--name', required=False, default="reducer" + str(uuid.uuid4())[:8]) @click.option('-i', '--init', required=True, default=None, @@ -165,9 +165,6 @@ def reducer_cmd(ctx, discoverhost, discoverport, secret_key, secure, local_packa print(e, flush=True) exit(-1) - # if not remote: - # helper = check_helper_config_file(fedn_config) - try: network_id = fedn_config['network_id'] except KeyError: @@ -176,7 +173,6 @@ def reducer_cmd(ctx, discoverhost, discoverport, secret_key, secure, local_packa statestore_config = fedn_config['statestore'] if statestore_config['type'] == 'MongoDB': - statestore = MongoReducerStateStore( network_id, statestore_config['mongo_config'], defaults=config['init']) else: diff --git a/fedn/fedn/clients/reducer/restservice.py b/fedn/fedn/clients/reducer/restservice.py index 6e0b15614..db573cf91 100644 --- a/fedn/fedn/clients/reducer/restservice.py +++ b/fedn/fedn/clients/reducer/restservice.py @@ -105,6 +105,9 @@ def __init__(self, config, control, certificate_manager, certificate=None): else: self.SECRET_KEY = None + if 'secure' in config.keys(): + self.secure = config['secure'] + self.remote_compute_context = config["remote_compute_context"] if self.remote_compute_context: self.package = 'remote' @@ -245,9 +248,24 @@ def run(self): :return: """ app = Flask(__name__) + if self.secure: + #Among other things, force https + from flask_talisman import Talisman + Talisman(app,content_security_policy=None) + app.config['UPLOAD_FOLDER'] = UPLOAD_FOLDER app.config['SECRET_KEY'] = self.SECRET_KEY + #@app.before_request + #def before_request_callback(): + # """ If configured with SSL, forward http to https. """ + # #if not request.is_secure: + # if self.secure: + # url = request.url.replace("http://", "https://", 1) + # code = 301 + # print(url,flush=True) + # return redirect(url, code=code) + @app.route('/') def index(): """ @@ -958,11 +976,11 @@ def checksum(): return jsonify(data) if self.certificate: - print("trying to connect with certs {} and key {}".format(str(self.certificate.cert_path), + print("Starting server with certs {} and key {}".format(str(self.certificate.cert_path), str(self.certificate.key_path)), flush=True) app.run(host="0.0.0.0", port=self.port, ssl_context=(str(self.certificate.cert_path), str(self.certificate.key_path))) else: app.run(host="0.0.0.0", port=self.port) - + return app diff --git a/fedn/fedn/common/net/connect.py b/fedn/fedn/common/net/connect.py index 37b822e2d..d7d36b158 100644 --- a/fedn/fedn/common/net/connect.py +++ b/fedn/fedn/common/net/connect.py @@ -23,10 +23,10 @@ class Status(enum.Enum): class ConnectorClient: """ - + Configure connector helper for connecting client to reducer REST service. """ - def __init__(self, host, port, token, name, remote_package, combiner=None, id=None, secure=True, preshared_cert=True, + def __init__(self, host, port, token, name, remote_package, combiner=None, id=None, secure=False, preshared_cert=True, verify_cert=False): if not verify_cert: @@ -39,27 +39,22 @@ def __init__(self, host, port, token, name, remote_package, combiner=None, id=No self.preferred_combiner = combiner self.id = id self.verify_cert = verify_cert - # self.state = State.Disconnected self.secure = secure self.certificate = None self.package = 'remote' if remote_package else 'local' - if not secure: - prefix = "http://" - else: - prefix = "https://" + if secure and preshared_cert: self.certificate = Certificate(os.getcwd() + "/certs/", name="client", key_name="client-key.pem", cert_name="client-cert.pem").cert_path else: self.verify_cert = False - self.prefix = prefix + self.prefix = "http://" self.connect_string = "{}{}:{}".format( self.prefix, self.host, self.port) + print("\n\nsetting the connection string to {}\n\n".format( self.connect_string), flush=True) - if self.certificate: - print("Securely connecting with certificate", flush=True) def state(self): """ @@ -115,10 +110,10 @@ def assign(self): class ConnectorCombiner: """ - + Configure connector helper for connecting combiner to reducer REST service. """ - def __init__(self, host, port, myhost, myport, token, name, secure=True, preshared_cert=True, verify_cert=False): + def __init__(self, host, port, myhost, myport, token, name, secure=False, preshared_cert=True, verify_cert=False): if not verify_cert: urllib3.disable_warnings(urllib3.exceptions.InsecureRequestWarning) @@ -130,25 +125,21 @@ def __init__(self, host, port, myhost, myport, token, name, secure=True, preshar self.token = token self.name = name self.verify_cert = verify_cert - # self.state = State.Disconnected self.secure = secure - if not secure: - prefix = "http://" - else: - prefix = "https://" + if secure and preshared_cert: self.certificate = Certificate(os.getcwd() + "/certs/", name="client", key_name="client-key.pem", cert_name="client-cert.pem", ).cert_path else: self.verify_cert = False - self.prefix = prefix + self.prefix = "http://" self.connect_string = "{}{}:{}".format( self.prefix, self.host, self.port) + print("\n\nsetting the connection string to {}\n\n".format( self.connect_string), flush=True) - print("Securely connecting with certificate", flush=True) def state(self): """ diff --git a/fedn/setup.py b/fedn/setup.py index 875813462..44bd038a8 100644 --- a/fedn/setup.py +++ b/fedn/setup.py @@ -23,6 +23,7 @@ "protobuf", "pymongo", "Flask", + "flask-talisman", "Flask-WTF", "pyjwt", "pyopenssl", From 7e954b0d4e6228a23057281c5c045e721c32fbf2 Mon Sep 17 00:00:00 2001 From: Andreas Hellander Date: Fri, 8 Jul 2022 09:28:10 +0200 Subject: [PATCH 053/185] Remove mocked inference endpoint in restservice --- Dockerfile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Dockerfile b/Dockerfile index 33d7c34a4..67f026d03 100644 --- a/Dockerfile +++ b/Dockerfile @@ -13,7 +13,7 @@ COPY config/settings-reducer.yaml.template /app/config/settings-reducer.yaml COPY $REQUIREMENTS /app/config/requirements.txt # Install developer tools (needed for psutil) -RUN apt update && apt install -y python3-dev gcc +RUN apt-get update && apt-get install -y python3-dev gcc # Create FEDn app directory SHELL ["/bin/bash", "-c"] From 37e522d8d637242994b71cada5167ff8e1bd4994 Mon Sep 17 00:00:00 2001 From: Andreas Hellander Date: Mon, 11 Jul 2022 11:20:59 +0200 Subject: [PATCH 054/185] Develop (#418) * validate user-specified name (#415) * Delete old Docker-related files (#412) Co-authored-by: Marco Capuccini --- components/base/Dockerfile | 9 --- config/base-services.yaml | 53 ----------------- config/combiner-dev.yaml | 19 ------ config/combiner-settings.override.yaml | 9 +++ config/combiner.yaml | 17 ------ config/extra-hosts-client.yaml.template | 9 --- config/extra-hosts-reducer.yaml.template | 4 +- config/private-network.yaml | 8 --- config/reducer-dev.yaml | 22 ------- config/reducer-settings.override.yaml | 9 +++ config/reducer.yaml | 17 ------ docs/deployment.rst | 75 ++++++++++++------------ fedn/fedn/client.py | 6 ++ fedn/fedn/combiner.py | 8 +++ fedn/fedn/reducer.py | 7 +++ 15 files changed, 77 insertions(+), 195 deletions(-) delete mode 100644 components/base/Dockerfile delete mode 100644 config/base-services.yaml delete mode 100644 config/combiner-dev.yaml create mode 100644 config/combiner-settings.override.yaml delete mode 100644 config/combiner.yaml delete mode 100644 config/extra-hosts-client.yaml.template delete mode 100644 config/private-network.yaml delete mode 100644 config/reducer-dev.yaml create mode 100644 config/reducer-settings.override.yaml delete mode 100644 config/reducer.yaml diff --git a/components/base/Dockerfile b/components/base/Dockerfile deleted file mode 100644 index 30a707bdc..000000000 --- a/components/base/Dockerfile +++ /dev/null @@ -1,9 +0,0 @@ -FROM python:3.8.9 -RUN mkdir -p /app && \ - mkdir -p /app/client &&\ - mkdir -p /app/certs && \ - mkdir -p /app/client/package && \ - chmod -R 777 /app/client/package -COPY fedn /app/fedn -RUN pip install -e /app/fedn -WORKDIR /app diff --git a/config/base-services.yaml b/config/base-services.yaml deleted file mode 100644 index ecd611725..000000000 --- a/config/base-services.yaml +++ /dev/null @@ -1,53 +0,0 @@ -version: '3.3' - -services: - - minio: - image: minio/minio:latest - hostname: minio - environment: - - GET_HOSTS_FROM=dns - - MINIO_HOST=minio - - MINIO_PORT=9000 - - MINIO_ROOT_USER=fedn_admin - - MINIO_ROOT_PASSWORD=password - command: server /data --console-address minio:9001 - healthcheck: - test: ["CMD", "curl", "-f", "http://minio:9000/minio/health/live"] - interval: 30s - timeout: 20s - retries: 3 - ports: - - 9000:9000 - - 9001:9001 - volumes: - - minio-data:/data - - mongo: - image: mongo:latest - restart: always - environment: - - MONGO_INITDB_ROOT_USERNAME=fedn_admin - - MONGO_INITDB_ROOT_PASSWORD=password - ports: - - 6534:6534 - command: mongod --port 6534 - - mongo-express: - image: mongo-express:latest - restart: always - depends_on: - - "mongo" - environment: - - ME_CONFIG_MONGODB_SERVER=mongo - - ME_CONFIG_MONGODB_PORT=6534 - - ME_CONFIG_MONGODB_ADMINUSERNAME=fedn_admin - - ME_CONFIG_MONGODB_ADMINPASSWORD=password - - ME_CONFIG_BASICAUTH_USERNAME=fedn_admin - - ME_CONFIG_BASICAUTH_PASSWORD=password - ports: - - 8081:8081 - -volumes: - # CHANGE THIS IF YOU WANT TO PERSIST DATA ACROSS RUN's - minio-data: diff --git a/config/combiner-dev.yaml b/config/combiner-dev.yaml deleted file mode 100644 index dc2bec043..000000000 --- a/config/combiner-dev.yaml +++ /dev/null @@ -1,19 +0,0 @@ -version: '3.3' - -services: - - combiner: - image: "scaleoutsystems/fedn-combiner:develop" - environment: - - PYTHONUNBUFFERED=0 - - GET_HOSTS_FROM=dns - build: - context: ${PWD} - dockerfile: ${PWD}/components/base/Dockerfile - working_dir: /app/client - command: sh -c "sleep 5 && pip install -e /app/fedn/ && fedn run combiner --init=./config/settings-combiner.yaml" - volumes: - - ${PWD}/config:/app/client/config - - ${PWD}/fedn:/app/fedn - ports: - - 12080:12080 \ No newline at end of file diff --git a/config/combiner-settings.override.yaml b/config/combiner-settings.override.yaml new file mode 100644 index 000000000..fc3f86e12 --- /dev/null +++ b/config/combiner-settings.override.yaml @@ -0,0 +1,9 @@ +# Compose schema version +version: '3.3' + +# Overriding settings +services: + combiner: + volumes: + - ${HOST_REPO_DIR:-.}/fedn:/app/fedn + - ${HOST_REPO_DIR:-.}/config/settings-combiner.yaml:/app/config/settings-combiner.yaml diff --git a/config/combiner.yaml b/config/combiner.yaml deleted file mode 100644 index 812f7fc39..000000000 --- a/config/combiner.yaml +++ /dev/null @@ -1,17 +0,0 @@ -version: '3.3' - -services: - - combiner: - image: "scaleoutsystems/fedn-combiner:master" - environment: - - PYTHONUNBUFFERED=0 - - GET_HOSTS_FROM=dns - working_dir: /app/client - command: sh -c "sleep 5 && fedn run combiner -in ./config/settings-combiner.yaml" - volumes: - - ${PWD}/config:/app/client/config - - ${PWD}/tmp/c1-models:/tmp/models - ports: - - 12080:12080 - diff --git a/config/extra-hosts-client.yaml.template b/config/extra-hosts-client.yaml.template deleted file mode 100644 index 748678e12..000000000 --- a/config/extra-hosts-client.yaml.template +++ /dev/null @@ -1,9 +0,0 @@ -version: '3.3' - -# Map the "name" parameter from combiner-settings.yaml to the host IP -# Make one entry for each combiner in the network. -services: - client: - extra_hosts: - combiner: 130.239.xx.xxx - diff --git a/config/extra-hosts-reducer.yaml.template b/config/extra-hosts-reducer.yaml.template index 4a23b3a0c..1f579653e 100644 --- a/config/extra-hosts-reducer.yaml.template +++ b/config/extra-hosts-reducer.yaml.template @@ -5,6 +5,4 @@ version: '3.3' services: reducer: extra_hosts: - combiner: 130.239.xx.xxx - - + combiner: xxx.xxx.xxx.xxx # combiner IP address \ No newline at end of file diff --git a/config/private-network.yaml b/config/private-network.yaml deleted file mode 100644 index 11afc597d..000000000 --- a/config/private-network.yaml +++ /dev/null @@ -1,8 +0,0 @@ -version: '3.3' - - -networks: - default: - external: - name: fedn_default - diff --git a/config/reducer-dev.yaml b/config/reducer-dev.yaml deleted file mode 100644 index 3e44842b8..000000000 --- a/config/reducer-dev.yaml +++ /dev/null @@ -1,22 +0,0 @@ -version: '3.3' - -services: - - reducer: - environment: - - GET_HOSTS_FROM=dns - - USER=test - - PROJECT=project - - FLASK_DEBUG=1 - - FLASK_ENV=development - image: "scaleoutsystems/fedn-reducer:develop" - build: - context: ${PWD} - dockerfile: ${PWD}/components/base/Dockerfile - working_dir: /app/client - command: sh -c "pip install -e /app/fedn/ && mkdir -p /app/client/certs && fedn run reducer -n reducer --init=./config/settings-reducer.yaml" - volumes: - - ${PWD}/config:/app/client/config - - ${PWD}/fedn:/app/fedn - ports: - - 8090:8090 diff --git a/config/reducer-settings.override.yaml b/config/reducer-settings.override.yaml new file mode 100644 index 000000000..af5ee5126 --- /dev/null +++ b/config/reducer-settings.override.yaml @@ -0,0 +1,9 @@ +# Compose schema version +version: '3.3' + +# Overriding settings +services: + reducer: + volumes: + - ${HOST_REPO_DIR:-.}/fedn:/app/fedn + - ${HOST_REPO_DIR:-.}/config/settings-reducer.yaml:/app/config/settings-reducer.yaml diff --git a/config/reducer.yaml b/config/reducer.yaml deleted file mode 100644 index 482fc15dc..000000000 --- a/config/reducer.yaml +++ /dev/null @@ -1,17 +0,0 @@ -version: '3.3' - -services: - - reducer: - environment: - - GET_HOSTS_FROM=dns - - USER=test - - PROJECT=project - image: "scaleoutsystems/fedn-reducer:master" - working_dir: /app/client - command: sh -c "mkdir -p /app/client/certs && fedn run reducer -n reducer --init=./config/settings-reducer.yaml" - volumes: - - ${PWD}/config:/app/client/config - ports: - - 8090:8090 - diff --git a/docs/deployment.rst b/docs/deployment.rst index 4f59b8ead..9f27ead33 100644 --- a/docs/deployment.rst +++ b/docs/deployment.rst @@ -1,17 +1,15 @@ Deployment ====================== -By running multiple combiners (aggregation servers) at separate hosts/locations we can deploy highly decentralized networks. You can choose to deploy combiners -in geographical proximity to optimize for low-latency for client subgroups. In the case of a single combiner, we recover a standard centralized -client-server architecture. Since it is straight-forward to scale the network dynamically by attaching additional combiners, we recommend that you -start simple and expand the network as needed. - -This example serves as reference deployment for setting up a FEDn network consisting of: - - One host/VM serving the supporting services (MinIOs, MongoDB) +This guide serves as reference deployment for setting up a FEDn network consisting of: + - One host/VM serving the supporting services (MinIO, MongoDB) - One host/VM serving the controller / reducer - One host/VM running a combiner - -We will in this example use the provided docker-compose templates to deploy the components across the three different hosts / VMs. + +By running additional combiners we gain resilence, are able to scale horizontally to accomodate large number of clients, and we can achieve a decentralized network (see the architecture section of the documentation). Attaching additional combiners to an existing network is straigtforward, so we recommend to start simple and expand the network as needed. + +.. note:: + In this guide we will deploy using the provived docker-compose templates. Please note that additional configurations would be needed for a production-grade network. Prerequisites ------------- @@ -19,53 +17,49 @@ Prerequisites Hosts / VMs ........... -We assume that you have root access to 3 Ubuntu 20.04 Server hosts / VMs. We recommend at least 4 CPUs and 8GB RAM for the base services and the reducer, -and 4 CPUs and 16BG RAM for the combiner host. Each host needs the following: +We assume that you have root access to 3 Ubuntu 20.04 Server hosts / VMs. We recommend at least 4 CPUs and 8GB RAM for the base services and the reducer, and 4 CPUs and 16BG RAM for the combiner host. Each host needs the following: - `Docker `_ - `Docker Compose `_ - `Python 3.8 `_ -You can use the follwing bash script to install docker and docker-compose for Ubuntu 20.04 LTS: Certificates (optional) ....................... Certificates are needed for the Reducer and each of the Combiners to enable SSL for secure communication. -By default, FEDn will generate unsigned certificates for the reducer and each combiner using OpenSSL. +By default, FEDn will generate unsigned certificates for the reducer and each combiner using OpenSSL, but you can +also provide your own certificates. .. note:: Certificates based on IP addresses are not supported due to incompatibilities with gRPC. Token authentication (optional) ............................... -FEDn supports single token authentication between combiners/clients and the reducer. To enable token authentication use :code:`--secret-key=` flag when starting the reducer. -The secret key will generate a token (expires after 90 days by default) and display it in the standard output. -Using this configuration will require combiners and clients to authenticate via either :code:`--token=` or by specifying the "token: " in the settings YAML file provided to :code:`--init`. - +FEDn supports token-based authentication between combiners/clients and the reducer. To enable token authentication use :code:`--secret-key=` flag when starting the reducer. The secret key will be used to generate a JWT token (expires after 90 days by default) and display it in the standard output. Use this token to autheticate combiners and clients via either :code:`--token=` or by specifying the "token: " in the settings YAML file provided to :code:`--init`. .. note:: - The instructions below (1-4) does not use token authentication. + The deployment instructions below does not use token authentication. Networking .......... -You will also need to be able to configure security groups / ingress settings for each host. -The Reducer as well as each client needs to be able to resolve the hostname for each combiner (matching the certificate). In this example, -we show how this can be achieved if no DNS resolution is available, by setting "extra host" in the Docker containers for the Reducer and client. -Note that there are many other possible ways to achieve this, depending on your setup. +You will need to configure security groups / ingress settings for each host. +Also, the reducer and clients need to be able to resolve the hostname for combiners (matching the certificate). In this example +we show how this can be achieved if no external DNS resolution is available, by setting "extra host" in the Docker containers for the Reducer and client. Note that there are many other possible ways to achieve this, depending on your setup. -1. Deploy base/supporting services (MinIO, MongoDB and MongoExpress) +1. Deploy supporting services (MinIO, MongoDB and MongoExpress) -------------------------------------------------------------------- -First, use 'config/base-services.yaml' to deploy MinIO and Mongo services on one of the hosts. Edit the file to change the default passwords and ports. +First, deploy MinIO and Mongo services on one of the hosts. Edit the `docker-compose.yaml` file to change the default passwords and ports. .. code-block:: bash - sudo -E docker-compose -f config/base-services.yaml up + sudo docker-compose up -d minio mongo mongo-express -.. note:: - Remember to open ports on the host so that the API endpoints (the exported port in the 'ports' property for each of the services) can be reacheds. - Note that you can also configure the reducer to use already existing MongoDB and MinIO services, in that case you can skip this step. +Remember to open ports on the host so that the API endpoints (the exported port in the 'ports' property for each of the services) can be reached. + +.. warning:: + The deployment of MinIO and MongoDB above is insecure. For a prodcution network, please set up production deployments of the base services. 2. Deploy the reducer --------------------- @@ -79,26 +73,31 @@ Then start the reducer: .. code-block:: bash - sudo -E docker-compose -f config/reducer.yaml -f config/extra-hosts-reducer.yaml up - + sudo docker-compose \ + -f docker-compose.yaml \ + -f config/reducer-settings.override.yaml \ + -f config/extra-hosts-reducer.yaml \ + up -d reducer .. note:: - Step b is a way to add the host:IP mapping to /etc/hosts in the Docker container in docker-compose. This step can be skipped if you handle this resolution in some other way. + the use of 'extra-hosts-reducer.yaml' is a way to add the host:IP mapping to /etc/hosts in the Docker container in docker-compose. It can be skipped if you handle DNS resolution in some other way. 3. Deploy combiners ------------------- -Copy 'config/settings.yaml.template' to 'config/settings-combiner.yaml' and edit it to provide a name for the combiner (used as a unique identifier for the combiner in the network), -a hostname (which is used by reducer and clients to connect to combiner RPC), +Copy 'config/settings.yaml.template' to 'config/settings-combiner.yaml' and edit it to provide a name for the combiner (used as a unique identifier for the combiner in the FEDn network), a hostname (which is used by reducer and clients to connect to the combiner RPC server), and the port (default is 12080, make sure to allow access to this port in your security group/firewall settings). Also, provide the IP and port for the reducer under the 'controller' tag. Then deploy the combiner: .. code-block:: bash - sudo -E docker-compose -f config/combiner.yaml up + sudo docker-compose \ + -f docker-compose.yaml \ + -f config/combiner-settings.override.yaml \ + up -d combiner -Optional: Repeat this step for any number of additional combiner nodes. Make sure to provide unique names for the two combiners, -and update extra hosts for the reducer. +Optional: Repeat this step for any number of additional combiner nodes. Make sure to provide an unique name for each combiner, +and update extra_hosts for the reducer (you need to restart the reducer to do so). .. warning:: Note that it is not possible to use the IP address as 'host'. gRPC does not support certificates based on IP addresses. @@ -108,8 +107,8 @@ and update extra hosts for the reducer. You can now choose an example, upload a compute package and an initial model, and attach clients. -- `Examples <../../examples>`__ +- `Examples `__ .. note:: - The clients will also need to be able to resolve the hostname ('host' argument) for each combiner node in the network. + The clients will also need to be able to resolve each combiner node usign the 'host' argument in the combiner settings file. There is a template in 'config/extra-hosts-client.yaml.template' that can be modified for this purpose. diff --git a/fedn/fedn/client.py b/fedn/fedn/client.py index c8eb9f461..2d2a7a9b0 100644 --- a/fedn/fedn/client.py +++ b/fedn/fedn/client.py @@ -3,6 +3,7 @@ import json import os import queue +import re import sys import tempfile import threading @@ -27,6 +28,7 @@ from fedn.utils.logger import Logger CHUNK_SIZE = 1024 * 1024 +VALID_NAME_REGEX = '^[a-zA-Z0-9_-]*$' class Client: @@ -68,6 +70,10 @@ def __init__(self, config): secure=config['secure'], preshared_cert=config['preshared_cert'], verify_cert=config['verify_cert']) + # Validate client name + match = re.search(VALID_NAME_REGEX, config['name']) + if not match: + raise ValueError('Unallowed character in client name. Allowed characters: a-z, A-Z, 0-9, _, -.') self.name = config['name'] dirname = time.strftime("%Y%m%d-%H%M%S") diff --git a/fedn/fedn/combiner.py b/fedn/fedn/combiner.py index d05cd1147..f58570a95 100644 --- a/fedn/fedn/combiner.py +++ b/fedn/fedn/combiner.py @@ -1,5 +1,6 @@ import base64 import queue +import re import signal import sys import threading @@ -17,6 +18,8 @@ from fedn.common.storage.s3.s3repo import S3ModelRepository from fedn.common.tracer.mongotracer import MongoTracer +VALID_NAME_REGEX = '^[a-zA-Z0-9_-]*$' + class Role(Enum): WORKER = 1 @@ -54,6 +57,11 @@ def __init__(self, connect_config): self.modelservice = ModelService() + # Validate combiner name + match = re.search(VALID_NAME_REGEX, connect_config['myname']) + if not match: + raise ValueError('Unallowed character in combiner name. Allowed characters: a-z, A-Z, 0-9, _, -.') + self.id = connect_config['myname'] self.role = Role.COMBINER self.max_clients = connect_config['max_clients'] diff --git a/fedn/fedn/reducer.py b/fedn/fedn/reducer.py index 3bc0be34e..2bc7eb2c3 100644 --- a/fedn/fedn/reducer.py +++ b/fedn/fedn/reducer.py @@ -1,4 +1,5 @@ import os +import re import threading import time from datetime import datetime @@ -8,6 +9,8 @@ from fedn.clients.reducer.state import ReducerStateToString from fedn.common.security.certificatemanager import CertificateManager +VALID_NAME_REGEX = '^[a-zA-Z0-9_-]*$' + class InvalidReducerConfiguration(Exception): pass @@ -30,6 +33,10 @@ def __init__(self, statestore): print("REDUCER: Failed to retrive Reducer config, exiting.") raise MissingReducerConfiguration() + # Validate reducer name + match = re.search(VALID_NAME_REGEX, config['name']) + if not match: + raise ValueError('Unallowed character in reducer name. Allowed characters: a-z, A-Z, 0-9, _, -.') self.name = config['name'] self.secure = config['secure'] From 59890e2bed6545fa108ecbd1cd2674f559a73cbd Mon Sep 17 00:00:00 2001 From: Fredrik Wrede Date: Mon, 11 Jul 2022 16:21:32 +0200 Subject: [PATCH 055/185] fix code-checks --- fedn/fedn/clients/reducer/interfaces.py | 1 - fedn/fedn/clients/reducer/restservice.py | 14 +++++++------- fedn/fedn/common/net/connect.py | 6 +++--- fedn/fedn/reducer.py | 10 +++++----- 4 files changed, 15 insertions(+), 16 deletions(-) diff --git a/fedn/fedn/clients/reducer/interfaces.py b/fedn/fedn/clients/reducer/interfaces.py index 2a6397031..a946126d1 100644 --- a/fedn/fedn/clients/reducer/interfaces.py +++ b/fedn/fedn/clients/reducer/interfaces.py @@ -267,4 +267,3 @@ def allowing_clients(self): return False return False - diff --git a/fedn/fedn/clients/reducer/restservice.py b/fedn/fedn/clients/reducer/restservice.py index 63aab5d1e..d144f0789 100644 --- a/fedn/fedn/clients/reducer/restservice.py +++ b/fedn/fedn/clients/reducer/restservice.py @@ -15,6 +15,7 @@ from flask import (Flask, abort, flash, jsonify, make_response, redirect, render_template, request, send_file, send_from_directory, url_for) +from flask_talisman import Talisman from werkzeug.utils import secure_filename from fedn.clients.reducer.interfaces import CombinerInterface @@ -249,15 +250,14 @@ def run(self): """ app = Flask(__name__) if self.secure: - #Among other things, force https - from flask_talisman import Talisman - Talisman(app,content_security_policy=None) + # Among other things, force https + Talisman(app, content_security_policy=None) app.config['UPLOAD_FOLDER'] = UPLOAD_FOLDER app.config['SECRET_KEY'] = self.SECRET_KEY - #@app.before_request - #def before_request_callback(): + # @app.before_request + # def before_request_callback(): # """ If configured with SSL, forward http to https. """ # #if not request.is_secure: # if self.secure: @@ -979,10 +979,10 @@ def checksum(): if self.certificate: print("Starting server with certs {} and key {}".format(str(self.certificate.cert_path), - str(self.certificate.key_path)), flush=True) + str(self.certificate.key_path)), flush=True) app.run(host="0.0.0.0", port=self.port, ssl_context=(str(self.certificate.cert_path), str(self.certificate.key_path))) - else: + else: app.run(host="0.0.0.0", port=self.port) return app diff --git a/fedn/fedn/common/net/connect.py b/fedn/fedn/common/net/connect.py index d7d36b158..f9b170789 100644 --- a/fedn/fedn/common/net/connect.py +++ b/fedn/fedn/common/net/connect.py @@ -23,7 +23,7 @@ class Status(enum.Enum): class ConnectorClient: """ - Configure connector helper for connecting client to reducer REST service. + Configure connector helper for connecting client to reducer REST service. """ def __init__(self, host, port, token, name, remote_package, combiner=None, id=None, secure=False, preshared_cert=True, @@ -42,7 +42,7 @@ def __init__(self, host, port, token, name, remote_package, combiner=None, id=No self.secure = secure self.certificate = None self.package = 'remote' if remote_package else 'local' - + if secure and preshared_cert: self.certificate = Certificate(os.getcwd() + "/certs/", name="client", key_name="client-key.pem", cert_name="client-cert.pem").cert_path @@ -110,7 +110,7 @@ def assign(self): class ConnectorCombiner: """ - Configure connector helper for connecting combiner to reducer REST service. + Configure connector helper for connecting combiner to reducer REST service. """ def __init__(self, host, port, myhost, myport, token, name, secure=False, preshared_cert=True, verify_cert=False): diff --git a/fedn/fedn/reducer.py b/fedn/fedn/reducer.py index 2bc7eb2c3..0ca2ae140 100644 --- a/fedn/fedn/reducer.py +++ b/fedn/fedn/reducer.py @@ -38,14 +38,14 @@ def __init__(self, statestore): if not match: raise ValueError('Unallowed character in reducer name. Allowed characters: a-z, A-Z, 0-9, _, -.') self.name = config['name'] - self.secure = config['secure'] + self.secure = config['secure'] - # The certificate manager generates (self-signed) certs for combiner nodes + # The certificate manager generates (self-signed) certs for combiner nodes self.certificate_manager = CertificateManager(os.getcwd() + "/certs/") - if self.secure: + if self.secure: rest_certificate = self.certificate_manager.get_or_create("reducer") - else: + else: rest_certificate = None self.control = ReducerControl(self.statestore) @@ -63,7 +63,7 @@ def run(self): def control_loop(self): """ - Manage and report the state of the Reducer. + Manage and report the state of the Reducer. """ try: old_state = self.control.state() From 97b556ba7471bcdaa0318459a7c65b74ceddd566 Mon Sep 17 00:00:00 2001 From: Fredrik Wrede Date: Mon, 11 Jul 2022 16:32:38 +0200 Subject: [PATCH 056/185] insecure mode in ci (http) --- .ci/tests/examples/run.sh | 8 ++++---- .ci/tests/examples/wait_for.py | 2 +- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/.ci/tests/examples/run.sh b/.ci/tests/examples/run.sh index 120a1dc82..7afe8b9cc 100755 --- a/.ci/tests/examples/run.sh +++ b/.ci/tests/examples/run.sh @@ -26,13 +26,13 @@ docker-compose \ curl -k -X POST \ -F file=@package.tgz \ -F helper="$helper" \ - https://localhost:8090/context + http://localhost:8090/context printf '\n' >&2 echo "Upload seed" curl -k -X POST \ -F seed=@seed.npz \ - https://localhost:8090/models + http://localhost:8090/models printf '\n' >&2 echo "Wait for clients to connect" @@ -42,7 +42,7 @@ printf '\n' curl -k -X POST \ -F rounds=3 \ -F validate=True \ - https://localhost:8090/control + http://localhost:8090/control printf '\n' >&2 echo "Checking rounds success" @@ -50,7 +50,7 @@ printf '\n' >&2 echo "Test client connection with dowloaded settings" # Get config -curl -k https://localhost:8090/config/download > ../../client.yaml +curl -k http://localhost:8090/config/download > ../../client.yaml # Redeploy clients with config docker-compose \ diff --git a/.ci/tests/examples/wait_for.py b/.ci/tests/examples/wait_for.py index 59bc7804f..3b131532e 100644 --- a/.ci/tests/examples/wait_for.py +++ b/.ci/tests/examples/wait_for.py @@ -40,7 +40,7 @@ def _test_rounds(n_rounds): def _test_nodes(n_nodes, node_type, reducer_host='localhost', reducer_port='8090'): try: resp = requests.get( - f'https://{reducer_host}:{reducer_port}/netgraph', verify=False) + f'http://{reducer_host}:{reducer_port}/netgraph', verify=False) except Exception as e: _eprint(f'Reques exception econuntered: {e}.') return False From 0e24072c5e7b44b6ebecebda9be5205f3ef2c23a Mon Sep 17 00:00:00 2001 From: Fredrik Wrede Date: Mon, 11 Jul 2022 17:06:04 +0200 Subject: [PATCH 057/185] secure option to package download and checksum --- fedn/fedn/client.py | 6 +++++- fedn/fedn/common/control/package.py | 12 +++++++++--- 2 files changed, 14 insertions(+), 4 deletions(-) diff --git a/fedn/fedn/client.py b/fedn/fedn/client.py index 2d2a7a9b0..c3d7cf1bf 100644 --- a/fedn/fedn/client.py +++ b/fedn/fedn/client.py @@ -160,7 +160,11 @@ def _initialize_dispatcher(self, config): while tries > 0: retval = pr.download( - config['discover_host'], config['discover_port'], config['token']) + host=config['discover_host'], + port=config['discover_port'], + token=config['token'], + secure=config['secure'] + ) if retval: break time.sleep(60) diff --git a/fedn/fedn/common/control/package.py b/fedn/fedn/common/control/package.py index 23971d789..1caa5d09f 100644 --- a/fedn/fedn/common/control/package.py +++ b/fedn/fedn/common/control/package.py @@ -111,8 +111,9 @@ def __init__(self, package_path, package_dir): self.checksum = None self.expected_checksum = None - def download(self, host, port, token, name=None): + def download(self, host, port, token, secure=False, name=None): """ + Download compute package from controller :param host: :param port: @@ -120,7 +121,12 @@ def download(self, host, port, token, name=None): :param name: :return: """ - path = "https://{}:{}/context".format(host, port) + if secure: + scheme = "https" + else: + scheme = "http" + + path = f"{scheme}://{host}:{port}/context" if name: path = path + "?name={}".format(name) @@ -139,7 +145,7 @@ def download(self, host, port, token, name=None): for chunk in r.iter_content(chunk_size=8192): f.write(chunk) - path = "https://{}:{}/checksum".format(host, port) + path = f"{scheme}://{host}:{port}/checksum" if name: path = path + "?name={}".format(name) From a802c4cbc68668eebc7ca98f78fca6e48696452e Mon Sep 17 00:00:00 2001 From: Andreas Hellander Date: Mon, 11 Jul 2022 23:43:22 +0200 Subject: [PATCH 058/185] work in progress --- docker-compose.yaml | 2 +- fedn/fedn/clients/reducer/restservice.py | 41 ++++++++---------------- 2 files changed, 14 insertions(+), 29 deletions(-) diff --git a/docker-compose.yaml b/docker-compose.yaml index 4529dc231..f11459d07 100644 --- a/docker-compose.yaml +++ b/docker-compose.yaml @@ -75,7 +75,7 @@ services: - ${HOST_REPO_DIR:-.}/fedn:/app/fedn entrypoint: [ "sh", "-c" ] command: - - "/venv/bin/pip install --no-cache-dir -e /app/fedn && /venv/bin/fedn run reducer -n reducer --init=config/settings-reducer.yaml" + - "/venv/bin/pip install --no-cache-dir -e /app/fedn && /venv/bin/fedn run reducer --secure=True -n reducer --init=config/settings-reducer.yaml" ports: - 8090:8090 diff --git a/fedn/fedn/clients/reducer/restservice.py b/fedn/fedn/clients/reducer/restservice.py index 63aab5d1e..fa8ad500f 100644 --- a/fedn/fedn/clients/reducer/restservice.py +++ b/fedn/fedn/clients/reducer/restservice.py @@ -248,23 +248,24 @@ def run(self): :return: """ app = Flask(__name__) - if self.secure: + #if self.secure: #Among other things, force https - from flask_talisman import Talisman - Talisman(app,content_security_policy=None) + # from flask_talisman import Talisman + # Talisman(app,content_security_policy=None) app.config['UPLOAD_FOLDER'] = UPLOAD_FOLDER app.config['SECRET_KEY'] = self.SECRET_KEY - #@app.before_request - #def before_request_callback(): - # """ If configured with SSL, forward http to https. """ - # #if not request.is_secure: - # if self.secure: - # url = request.url.replace("http://", "https://", 1) - # code = 301 - # print(url,flush=True) - # return redirect(url, code=code) + @app.before_request + def before_request_callback(): + """ If configured with SSL, forward http to https. """ + #if not request.is_secure: + print(request,flush=True) + if self.secure and not request.is_secure: + url = request.url.replace("http://", "https://", 1) + code = 301 + print(url,flush=True) + return redirect(url, code=code) @app.route('/') def index(): @@ -674,22 +675,6 @@ def assign(): return jsonify(response) - @app.route('/infer') - def infer(): - """ - - :return: - """ - if self.control.state() == ReducerState.setup: - return "Error, not configured" - result = "" - try: - self.control.set_model_id() - except ModelError: - print("Failed to seed control.") - - return result - def combiner_status(): """ Get current status reports from all combiners registered in the network. From c831508b21e8562120807d2e52cad36df0083679 Mon Sep 17 00:00:00 2001 From: Fredrik Wrede Date: Tue, 12 Jul 2022 11:18:21 +0200 Subject: [PATCH 059/185] fix flake8 warning --- fedn/fedn/common/control/package.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/fedn/fedn/common/control/package.py b/fedn/fedn/common/control/package.py index 1caa5d09f..6e2f4504c 100644 --- a/fedn/fedn/common/control/package.py +++ b/fedn/fedn/common/control/package.py @@ -113,7 +113,7 @@ def __init__(self, package_path, package_dir): def download(self, host, port, token, secure=False, name=None): """ - Download compute package from controller + Download compute package from controller :param host: :param port: From 90396e007eb7a4f3f1b63faa1804ea631c9aaa16 Mon Sep 17 00:00:00 2001 From: Andreas Hellander Date: Wed, 13 Jul 2022 13:18:43 +0200 Subject: [PATCH 060/185] Remove Talisman --- docker-compose.yaml | 2 +- fedn/fedn/clients/reducer/restservice.py | 15 +-------------- fedn/setup.py | 3 +-- 3 files changed, 3 insertions(+), 17 deletions(-) diff --git a/docker-compose.yaml b/docker-compose.yaml index f11459d07..4529dc231 100644 --- a/docker-compose.yaml +++ b/docker-compose.yaml @@ -75,7 +75,7 @@ services: - ${HOST_REPO_DIR:-.}/fedn:/app/fedn entrypoint: [ "sh", "-c" ] command: - - "/venv/bin/pip install --no-cache-dir -e /app/fedn && /venv/bin/fedn run reducer --secure=True -n reducer --init=config/settings-reducer.yaml" + - "/venv/bin/pip install --no-cache-dir -e /app/fedn && /venv/bin/fedn run reducer -n reducer --init=config/settings-reducer.yaml" ports: - 8090:8090 diff --git a/fedn/fedn/clients/reducer/restservice.py b/fedn/fedn/clients/reducer/restservice.py index 47eec2d31..9dea36cce 100644 --- a/fedn/fedn/clients/reducer/restservice.py +++ b/fedn/fedn/clients/reducer/restservice.py @@ -15,7 +15,7 @@ from flask import (Flask, abort, flash, jsonify, make_response, redirect, render_template, request, send_file, send_from_directory, url_for) -from flask_talisman import Talisman + from werkzeug.utils import secure_filename from fedn.clients.reducer.interfaces import CombinerInterface @@ -249,23 +249,10 @@ def run(self): :return: """ app = Flask(__name__) - if self.secure: - # Among other things, force https - Talisman(app, content_security_policy=None) app.config['UPLOAD_FOLDER'] = UPLOAD_FOLDER app.config['SECRET_KEY'] = self.SECRET_KEY - # @app.before_request - # def before_request_callback(): - # """ If configured with SSL, forward http to https. """ - # #if not request.is_secure: - # if self.secure: - # url = request.url.replace("http://", "https://", 1) - # code = 301 - # print(url,flush=True) - # return redirect(url, code=code) - @app.route('/') def index(): """ diff --git a/fedn/setup.py b/fedn/setup.py index 44bd038a8..360738714 100644 --- a/fedn/setup.py +++ b/fedn/setup.py @@ -17,13 +17,12 @@ "urllib3>=1.26.4", "minio", "python-slugify", - "grpcio-tools", "grpcio~=1.47.0", + "grpcio-tools", "numpy>=1.21.6,<=1.22.2", "protobuf", "pymongo", "Flask", - "flask-talisman", "Flask-WTF", "pyjwt", "pyopenssl", From 3981f8373560891b8ec079698192e90af323d486 Mon Sep 17 00:00:00 2001 From: Andreas Hellander Date: Wed, 13 Jul 2022 13:36:22 +0200 Subject: [PATCH 061/185] bugfix, combiner now correctly uses secure flag in connector --- docker-compose.yaml | 6 +++--- fedn/fedn/combiner.py | 3 ++- fedn/fedn/common/net/connect.py | 12 ++++++++++-- 3 files changed, 15 insertions(+), 6 deletions(-) diff --git a/docker-compose.yaml b/docker-compose.yaml index 4529dc231..55f1ccb3f 100644 --- a/docker-compose.yaml +++ b/docker-compose.yaml @@ -75,7 +75,7 @@ services: - ${HOST_REPO_DIR:-.}/fedn:/app/fedn entrypoint: [ "sh", "-c" ] command: - - "/venv/bin/pip install --no-cache-dir -e /app/fedn && /venv/bin/fedn run reducer -n reducer --init=config/settings-reducer.yaml" + - "/venv/bin/pip install --no-cache-dir -e /app/fedn && /venv/bin/fedn run reducer --secure=True -n reducer --init=config/settings-reducer.yaml" ports: - 8090:8090 @@ -93,7 +93,7 @@ services: - ${HOST_REPO_DIR:-.}/fedn:/app/fedn entrypoint: [ "sh", "-c" ] command: - - "/venv/bin/pip install --no-cache-dir -e /app/fedn && /venv/bin/fedn run combiner -in config/settings-combiner.yaml" + - "/venv/bin/pip install --no-cache-dir -e /app/fedn && /venv/bin/fedn run combiner --secure=True -in config/settings-combiner.yaml" ports: - 12080:12080 @@ -110,6 +110,6 @@ services: - ${HOST_REPO_DIR:-.}/fedn:/app/fedn entrypoint: [ "sh", "-c" ] command: - - "/venv/bin/pip install --no-cache-dir -e /app/fedn && /venv/bin/fedn run client -in config/settings-client.yaml" + - "/venv/bin/pip install --no-cache-dir -e /app/fedn && /venv/bin/fedn run client --secure=True -in config/settings-client.yaml" deploy: replicas: 0 diff --git a/fedn/fedn/combiner.py b/fedn/fedn/combiner.py index f58570a95..d32058383 100644 --- a/fedn/fedn/combiner.py +++ b/fedn/fedn/combiner.py @@ -73,7 +73,8 @@ def __init__(self, connect_config): myhost=connect_config['myhost'], myport=connect_config['myport'], token=connect_config['token'], - name=connect_config['myname']) + name=connect_config['myname'], + secure=connect_config['secure']) response = None while True: diff --git a/fedn/fedn/common/net/connect.py b/fedn/fedn/common/net/connect.py index f9b170789..01873bd83 100644 --- a/fedn/fedn/common/net/connect.py +++ b/fedn/fedn/common/net/connect.py @@ -43,13 +43,17 @@ def __init__(self, host, port, token, name, remote_package, combiner=None, id=No self.certificate = None self.package = 'remote' if remote_package else 'local' + if not secure: + self.prefix = "http://" + else: + self.prefix = "https://" + if secure and preshared_cert: self.certificate = Certificate(os.getcwd() + "/certs/", name="client", key_name="client-key.pem", cert_name="client-cert.pem").cert_path else: self.verify_cert = False - self.prefix = "http://" self.connect_string = "{}{}:{}".format( self.prefix, self.host, self.port) @@ -127,6 +131,11 @@ def __init__(self, host, port, myhost, myport, token, name, secure=False, presha self.verify_cert = verify_cert self.secure = secure + if not secure: + self.prefix = "http://" + else: + self.prefix = "https://" + if secure and preshared_cert: self.certificate = Certificate(os.getcwd() + "/certs/", name="client", key_name="client-key.pem", cert_name="client-cert.pem", @@ -134,7 +143,6 @@ def __init__(self, host, port, myhost, myport, token, name, secure=False, presha else: self.verify_cert = False - self.prefix = "http://" self.connect_string = "{}{}:{}".format( self.prefix, self.host, self.port) From 53ef1141defcdf088b577242e40f79af5416a25f Mon Sep 17 00:00:00 2001 From: Andreas Hellander Date: Wed, 13 Jul 2022 13:37:54 +0200 Subject: [PATCH 062/185] Revert accidetal change to compose file --- docker-compose.yaml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/docker-compose.yaml b/docker-compose.yaml index 55f1ccb3f..4529dc231 100644 --- a/docker-compose.yaml +++ b/docker-compose.yaml @@ -75,7 +75,7 @@ services: - ${HOST_REPO_DIR:-.}/fedn:/app/fedn entrypoint: [ "sh", "-c" ] command: - - "/venv/bin/pip install --no-cache-dir -e /app/fedn && /venv/bin/fedn run reducer --secure=True -n reducer --init=config/settings-reducer.yaml" + - "/venv/bin/pip install --no-cache-dir -e /app/fedn && /venv/bin/fedn run reducer -n reducer --init=config/settings-reducer.yaml" ports: - 8090:8090 @@ -93,7 +93,7 @@ services: - ${HOST_REPO_DIR:-.}/fedn:/app/fedn entrypoint: [ "sh", "-c" ] command: - - "/venv/bin/pip install --no-cache-dir -e /app/fedn && /venv/bin/fedn run combiner --secure=True -in config/settings-combiner.yaml" + - "/venv/bin/pip install --no-cache-dir -e /app/fedn && /venv/bin/fedn run combiner -in config/settings-combiner.yaml" ports: - 12080:12080 @@ -110,6 +110,6 @@ services: - ${HOST_REPO_DIR:-.}/fedn:/app/fedn entrypoint: [ "sh", "-c" ] command: - - "/venv/bin/pip install --no-cache-dir -e /app/fedn && /venv/bin/fedn run client --secure=True -in config/settings-client.yaml" + - "/venv/bin/pip install --no-cache-dir -e /app/fedn && /venv/bin/fedn run client -in config/settings-client.yaml" deploy: replicas: 0 From 2c290090f5fdc72db044e512688b7f5a6918d7f3 Mon Sep 17 00:00:00 2001 From: Andreas Hellander Date: Wed, 13 Jul 2022 16:39:46 +0200 Subject: [PATCH 063/185] sort import --- fedn/fedn/clients/reducer/restservice.py | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/fedn/fedn/clients/reducer/restservice.py b/fedn/fedn/clients/reducer/restservice.py index 9dea36cce..8f80f6630 100644 --- a/fedn/fedn/clients/reducer/restservice.py +++ b/fedn/fedn/clients/reducer/restservice.py @@ -16,8 +16,6 @@ render_template, request, send_file, send_from_directory, url_for) -from werkzeug.utils import secure_filename - from fedn.clients.reducer.interfaces import CombinerInterface from fedn.clients.reducer.plots import Plot from fedn.clients.reducer.state import ReducerState, ReducerStateToString @@ -25,6 +23,9 @@ from fedn.common.tracer.mongotracer import MongoTracer from fedn.utils.checksum import sha +from werkzeug.utils import secure_filename + + UPLOAD_FOLDER = '/app/client/package/' ALLOWED_EXTENSIONS = {'gz', 'bz2', 'tar', 'zip', 'tgz'} From 3ebf8d9087671ee3788673cc566c526afb49df2a Mon Sep 17 00:00:00 2001 From: Andreas Hellander Date: Wed, 13 Jul 2022 16:43:28 +0200 Subject: [PATCH 064/185] Changed combiner ssl default config to False --- fedn/cli/run_cmd.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/fedn/cli/run_cmd.py b/fedn/cli/run_cmd.py index 27e619f2f..acdfbbc0e 100644 --- a/fedn/cli/run_cmd.py +++ b/fedn/cli/run_cmd.py @@ -234,7 +234,7 @@ def reducer_cmd(ctx, discoverhost, discoverport, secret_key, secure, local_packa @click.option('-n', '--name', required=False, default="combiner" + str(uuid.uuid4())[:8]) @click.option('-h', '--hostname', required=False, default="combiner") @click.option('-i', '--port', required=False, default=12080) -@click.option('-s', '--secure', required=False, default=True) +@click.option('-s', '--secure', required=False, default=False) @click.option('-c', '--max_clients', required=False, default=30) @click.option('-in', '--init', required=False, default=None, help='Set to a filename to (re)init combiner from file state.') @@ -263,6 +263,7 @@ def combiner_cmd(ctx, discoverhost, discoverport, token, name, hostname, port, s except yaml.YAMLError as e: print('Failed to read config from settings file, exiting.', flush=True) raise (e) + # Read/overide settings from config file if 'controller' in settings: controller_config = settings['controller'] From b771ed2e5f5257a8e9a864c5b7021a9a8ddf8b15 Mon Sep 17 00:00:00 2001 From: Andreas Hellander Date: Thu, 14 Jul 2022 08:53:43 +0200 Subject: [PATCH 065/185] Fixed code checks --- fedn/fedn/clients/reducer/restservice.py | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/fedn/fedn/clients/reducer/restservice.py b/fedn/fedn/clients/reducer/restservice.py index 8f80f6630..ee475b551 100644 --- a/fedn/fedn/clients/reducer/restservice.py +++ b/fedn/fedn/clients/reducer/restservice.py @@ -15,6 +15,7 @@ from flask import (Flask, abort, flash, jsonify, make_response, redirect, render_template, request, send_file, send_from_directory, url_for) +from werkzeug.utils import secure_filename from fedn.clients.reducer.interfaces import CombinerInterface from fedn.clients.reducer.plots import Plot @@ -23,9 +24,6 @@ from fedn.common.tracer.mongotracer import MongoTracer from fedn.utils.checksum import sha -from werkzeug.utils import secure_filename - - UPLOAD_FOLDER = '/app/client/package/' ALLOWED_EXTENSIONS = {'gz', 'bz2', 'tar', 'zip', 'tgz'} From be0a72608bf7f7382834c5736edbcae58676f116 Mon Sep 17 00:00:00 2001 From: Andreas Hellander Date: Thu, 14 Jul 2022 10:07:22 +0200 Subject: [PATCH 066/185] Code checks --- fedn/fedn/clients/reducer/restservice.py | 1 - fedn/fedn/common/net/connect.py | 2 +- 2 files changed, 1 insertion(+), 2 deletions(-) diff --git a/fedn/fedn/clients/reducer/restservice.py b/fedn/fedn/clients/reducer/restservice.py index ee475b551..b400232b3 100644 --- a/fedn/fedn/clients/reducer/restservice.py +++ b/fedn/fedn/clients/reducer/restservice.py @@ -20,7 +20,6 @@ from fedn.clients.reducer.interfaces import CombinerInterface from fedn.clients.reducer.plots import Plot from fedn.clients.reducer.state import ReducerState, ReducerStateToString -from fedn.common.exceptions import ModelError from fedn.common.tracer.mongotracer import MongoTracer from fedn.utils.checksum import sha diff --git a/fedn/fedn/common/net/connect.py b/fedn/fedn/common/net/connect.py index 01873bd83..23b0cb98e 100644 --- a/fedn/fedn/common/net/connect.py +++ b/fedn/fedn/common/net/connect.py @@ -135,7 +135,7 @@ def __init__(self, host, port, myhost, myport, token, name, secure=False, presha self.prefix = "http://" else: self.prefix = "https://" - + if secure and preshared_cert: self.certificate = Certificate(os.getcwd() + "/certs/", name="client", key_name="client-key.pem", cert_name="client-cert.pem", From eecc65fbd7a1afef7d695d9b92722d283791e200 Mon Sep 17 00:00:00 2001 From: Andreas Hellander Date: Thu, 14 Jul 2022 10:18:58 +0200 Subject: [PATCH 067/185] Add docstings in connecy.py --- fedn/fedn/common/net/connect.py | 18 ++++++++++++------ 1 file changed, 12 insertions(+), 6 deletions(-) diff --git a/fedn/fedn/common/net/connect.py b/fedn/fedn/common/net/connect.py index 23b0cb98e..d716ddd3d 100644 --- a/fedn/fedn/common/net/connect.py +++ b/fedn/fedn/common/net/connect.py @@ -23,7 +23,7 @@ class Status(enum.Enum): class ConnectorClient: """ - Configure connector helper for connecting client to reducer REST service. + Connector for assigning client to a combiner in the FEDn network. """ def __init__(self, host, port, token, name, remote_package, combiner=None, id=None, secure=False, preshared_cert=True, @@ -63,14 +63,17 @@ def __init__(self, host, port, token, name, remote_package, combiner=None, id=No def state(self): """ - :return: + :return: Connector State """ return self.state def assign(self): """ + Connect client to FEDn network via discovery service, ask for combiner assignment. - :return: + :return: Tuple with assingment status, combiner connection information + if sucessful, else None. + :rtype: Status, json """ try: cert = str(self.certificate) if self.verify_cert else False @@ -114,7 +117,7 @@ def assign(self): class ConnectorCombiner: """ - Configure connector helper for connecting combiner to reducer REST service. + Connector for annnouncing combiner to the FEDn network. """ def __init__(self, host, port, myhost, myport, token, name, secure=False, preshared_cert=True, verify_cert=False): @@ -152,14 +155,17 @@ def __init__(self, host, port, myhost, myport, token, name, secure=False, presha def state(self): """ - :return: + :return: Combiner State """ return self.state def announce(self): """ + Announce combiner to FEDn network via discovery service. - :return: + :return: Tuple with announcement Status, FEDn network configuration + if sucessful, else None. + :rtype: Staus, json """ try: cert = str(self.certificate) if self.verify_cert else False From c4555f104bc0bbd4a53acbde25e654dcdd6f3501 Mon Sep 17 00:00:00 2001 From: Andreas Hellander Date: Thu, 14 Jul 2022 10:34:29 +0200 Subject: [PATCH 068/185] Add docstings in certificatemanager --- fedn/fedn/common/net/grpc/server.py | 4 --- .../common/security/certificatemanager.py | 34 +++++++++++-------- 2 files changed, 19 insertions(+), 19 deletions(-) diff --git a/fedn/fedn/common/net/grpc/server.py b/fedn/fedn/common/net/grpc/server.py index d9998364b..293f49d13 100644 --- a/fedn/fedn/common/net/grpc/server.py +++ b/fedn/fedn/common/net/grpc/server.py @@ -27,14 +27,10 @@ def __init__(self, servicer, modelservicer, config): rpc.add_ControlServicer_to_server(servicer, self.server) if config['secure']: - # self.certificate = Certificate(os.getcwd() + '/certs/', cert_name='combiner-cert.pem', key_name='combiner-key.pem') - # self.certificate.set_keypair_raw(config['certificate'], config['key']) - server_credentials = grpc.ssl_server_credentials( ((config['key'], config['certificate'],),)) self.server.add_secure_port( '[::]:' + str(config['port']), server_credentials) - else: self.server.add_insecure_port('[::]:' + str(config['port'])) diff --git a/fedn/fedn/common/security/certificatemanager.py b/fedn/fedn/common/security/certificatemanager.py index 7171d26b4..ba9d6e685 100644 --- a/fedn/fedn/common/security/certificatemanager.py +++ b/fedn/fedn/common/security/certificatemanager.py @@ -5,6 +5,7 @@ class CertificateManager: """ + Utility to handle certificates for both Reducer and Combiner services. """ @@ -17,9 +18,11 @@ def __init__(self, directory): def get_or_create(self, name): """ + Look for an existing certificate, if not found, generate a self-signed certificate based on name. - :param name: - :return: + :param name: The name used when issuing the certificate. + :return: A certificate + :rtype: str """ search = self.find(name) if search: @@ -33,9 +36,11 @@ def get_or_create(self, name): def add(self, certificate): """ + Add certificate to certificate list. :param certificate: - :return: + :return: Success status (True, False) + :rtype: Boolean """ if not self.find(certificate.name): self.certificates.append(certificate) @@ -44,29 +49,28 @@ def add(self, certificate): def load_all(self): """ + Load all certificates and add to certificates list. """ for filename in sorted(os.listdir(self.directory)): if filename.endswith('cert.pem'): name = filename.split('-')[0] - # print("got a file here! Read it {}".format(filename)) key_name = name + '-key.pem' - # print("trying with {}".format(key_name)) - if os.path.isfile(os.path.join(self.directory, key_name)): - c = Certificate(self.directory, name=name, - cert_name=filename, key_name=key_name) - self.certificates.append(c) - else: - c = Certificate(self.directory, name=name, cert_name=filename, - key_name=key_name) # , cert_only=True) - self.certificates.append(c) + # if os.path.isfile(os.path.join(self.directory, key_name)): + c = Certificate(self.directory, name=name, + cert_name=filename, key_name=key_name) + self.certificates.append(c) + # else: + # c = Certificate(self.directory, name=name, + # cert_name=filename, key_name=key_name) + # self.certificates.append(c) def find(self, name): """ - :param name: - :return: + :param name: Name of certificate + :return: certificate if successful, else None """ for cert in self.certificates: if cert.name == name: From 637a7bec71a5e4576bcff05bb31da7d4a92d7ac5 Mon Sep 17 00:00:00 2001 From: Andreas Hellander Date: Thu, 28 Jul 2022 13:32:35 +0200 Subject: [PATCH 069/185] Docstrings --- docker-compose.yaml | 2 +- fedn/cli/run_cmd.py | 17 +++++++------- fedn/fedn/common/security/certificate.py | 6 ++++- fedn/fedn/reducer.py | 29 ++++++++++++++---------- 4 files changed, 32 insertions(+), 22 deletions(-) diff --git a/docker-compose.yaml b/docker-compose.yaml index 4529dc231..8a07374ab 100644 --- a/docker-compose.yaml +++ b/docker-compose.yaml @@ -93,7 +93,7 @@ services: - ${HOST_REPO_DIR:-.}/fedn:/app/fedn entrypoint: [ "sh", "-c" ] command: - - "/venv/bin/pip install --no-cache-dir -e /app/fedn && /venv/bin/fedn run combiner -in config/settings-combiner.yaml" + - "/venv/bin/pip install --no-cache-dir -e /app/fedn && /venv/bin/fedn run combiner --secure=True -in config/settings-combiner.yaml" ports: - 12080:12080 diff --git a/fedn/cli/run_cmd.py b/fedn/cli/run_cmd.py index acdfbbc0e..7ce668755 100644 --- a/fedn/cli/run_cmd.py +++ b/fedn/cli/run_cmd.py @@ -136,13 +136,13 @@ def client_cmd(ctx, discoverhost, discoverport, token, name, client_id, local_pa @click.option('-d', '--discoverhost', required=False) @click.option('-p', '--discoverport', required=False, default='8090', show_default=True) @click.option('-k', '--secret-key', required=False, help='Set secret key to enable jwt token authentication.') -@click.option('-s', '--secure', required=False, default=False, help='Enable SSL') +@click.option('-s', '--use-ssl', is_flag=True, help='Enable SSL') @click.option('-l', '--local-package', is_flag=True, help='Enable use of local compute package') -@click.option('-n', '--name', required=False, default="reducer" + str(uuid.uuid4())[:8]) +@click.option('-n', '--name', required=False, default="reducer" + str(uuid.uuid4())[:8], help='Set service name') @click.option('-i', '--init', required=True, default=None, - help='Set to a filename to (re)init reducer from file state.') + help='Set to a filename to (re)init reducer state from file.') @click.pass_context -def reducer_cmd(ctx, discoverhost, discoverport, secret_key, secure, local_package, name, init): +def reducer_cmd(ctx, discoverhost, discoverport, secret_key, use_ssl, local_package, name, init): """ :param ctx: @@ -154,12 +154,11 @@ def reducer_cmd(ctx, discoverhost, discoverport, secret_key, secure, local_packa """ remote = False if local_package else True config = {'discover_host': discoverhost, 'discover_port': discoverport, 'secret_key': secret_key, - 'secure': secure, 'name': name, 'remote_compute_context': remote, 'init': init} + 'use_ssl': use_ssl, 'name': name, 'remote_compute_context': remote, 'init': init} # Read settings from config file try: fedn_config = get_statestore_config_from_file(config['init']) - # Todo: Make more specific except Exception as e: print('Failed to read config from settings file, exiting.', flush=True) print(e, flush=True) @@ -174,6 +173,7 @@ def reducer_cmd(ctx, discoverhost, discoverport, secret_key, secure, local_packa print("No network_id in config, please specify the control network id.", flush=True) exit(-1) + # Obtain state from database, in case already initialized (service restart) statestore_config = fedn_config['statestore'] if statestore_config['type'] == 'MongoDB': statestore = MongoReducerStateStore( @@ -182,6 +182,7 @@ def reducer_cmd(ctx, discoverhost, discoverport, secret_key, secure, local_packa print("Unsupported statestore type, exiting. ", flush=True) exit(-1) + # Enable JWT token authentication. if config['secret_key']: # If we already have a valid token in statestore config, use that one. existing_config = statestore.get_reducer() @@ -199,13 +200,13 @@ def reducer_cmd(ctx, discoverhost, discoverport, secret_key, secure, local_packa else: token = encode_auth_token(config['secret_key']) config['token'] = token - try: statestore.set_reducer(config) except Exception: print("Failed to set reducer config in statestore, exiting.", flush=True) exit(-1) + # Configure storage backend (currently supports MinIO) try: statestore.set_storage_backend(fedn_config['storage']) except KeyError: @@ -215,7 +216,7 @@ def reducer_cmd(ctx, discoverhost, discoverport, secret_key, secure, local_packa print("Failed to set storage config in statestore, exiting.", flush=True) exit(-1) - # Control config + # Configure controller control_config = fedn_config['control'] try: statestore.set_round_config(control_config) diff --git a/fedn/fedn/common/security/certificate.py b/fedn/fedn/common/security/certificate.py index b3181178e..f3e76d950 100644 --- a/fedn/fedn/common/security/certificate.py +++ b/fedn/fedn/common/security/certificate.py @@ -8,6 +8,7 @@ class Certificate: """ + Utility to generate unsigned certificates. """ CERT_NAME = "cert.pem" @@ -23,8 +24,10 @@ def __init__(self, cwd, name=None, key_name="key.pem", cert_name="cert.pem", cre else: print( "Successfully created the directory to store cert and keys in {}".format(cwd)) + self.key_path = os.path.join(cwd, key_name) self.cert_path = os.path.join(cwd, cert_name) + if name: self.name = name else: @@ -32,6 +35,7 @@ def __init__(self, cwd, name=None, key_name="key.pem", cert_name="cert.pem", cre def gen_keypair(self, ): """ + Generate keypair. """ key = crypto.PKey() @@ -41,7 +45,7 @@ def gen_keypair(self, ): cert.get_subject().ST = "Stockholm" cert.get_subject().O = "Development Key" # noqa: E741 cert.get_subject().OU = "Development Key" - cert.get_subject().CN = self.name # gethostname() + cert.get_subject().CN = self.name cert.set_serial_number(int(random.randint(1000, 100000))) diff --git a/fedn/fedn/reducer.py b/fedn/fedn/reducer.py index 0ca2ae140..62488aad3 100644 --- a/fedn/fedn/reducer.py +++ b/fedn/fedn/reducer.py @@ -21,12 +21,19 @@ class MissingReducerConfiguration(Exception): class Reducer: - """ + """ A class used to instantiate the Reducer service. + Start Reducer services. """ def __init__(self, statestore): - """ """ + """ + Parameters + ---------- + statestore: dict + The backend statestore object. + """ + self.statestore = statestore config = self.statestore.get_reducer() if not config: @@ -38,13 +45,13 @@ def __init__(self, statestore): if not match: raise ValueError('Unallowed character in reducer name. Allowed characters: a-z, A-Z, 0-9, _, -.') self.name = config['name'] - self.secure = config['secure'] - # The certificate manager generates (self-signed) certs for combiner nodes + # The certificate manager is a utility that generates (self-signed) certificates. self.certificate_manager = CertificateManager(os.getcwd() + "/certs/") - if self.secure: - rest_certificate = self.certificate_manager.get_or_create("reducer") + self.use_ssl = config['use_ssl'] + if self.use_ssl: + rest_certificate = self.certificate_manager.get_or_create(self.name) else: rest_certificate = None @@ -54,17 +61,15 @@ def __init__(self, statestore): config, self.control, self.certificate_manager, certificate=rest_certificate) def run(self): - """ - Start REST service and control loop. - """ + """Start REST service and control loop.""" + threading.Thread(target=self.control_loop, daemon=True).start() self.rest.run() def control_loop(self): - """ - Manage and report the state of the Reducer. - """ + """Manage and report the state of the Reducer.""" + try: old_state = self.control.state() From 48c8deacb4a82815e0139e212da9638b7f7dede5 Mon Sep 17 00:00:00 2001 From: Andreas Hellander Date: Thu, 28 Jul 2022 13:58:40 +0200 Subject: [PATCH 070/185] Changed some parameter names in reducer CLI --- fedn/cli/run_cmd.py | 8 +++---- fedn/fedn/clients/reducer/restservice.py | 29 ++++++++++++++---------- fedn/fedn/reducer.py | 1 + 3 files changed, 22 insertions(+), 16 deletions(-) diff --git a/fedn/cli/run_cmd.py b/fedn/cli/run_cmd.py index 7ce668755..cc1dea967 100644 --- a/fedn/cli/run_cmd.py +++ b/fedn/cli/run_cmd.py @@ -133,8 +133,8 @@ def client_cmd(ctx, discoverhost, discoverport, token, name, client_id, local_pa @run_cmd.command('reducer') -@click.option('-d', '--discoverhost', required=False) -@click.option('-p', '--discoverport', required=False, default='8090', show_default=True) +@click.option('-h', '--host', required=False) +@click.option('-p', '--port', required=False, default='8090', show_default=True) @click.option('-k', '--secret-key', required=False, help='Set secret key to enable jwt token authentication.') @click.option('-s', '--use-ssl', is_flag=True, help='Enable SSL') @click.option('-l', '--local-package', is_flag=True, help='Enable use of local compute package') @@ -142,7 +142,7 @@ def client_cmd(ctx, discoverhost, discoverport, token, name, client_id, local_pa @click.option('-i', '--init', required=True, default=None, help='Set to a filename to (re)init reducer state from file.') @click.pass_context -def reducer_cmd(ctx, discoverhost, discoverport, secret_key, use_ssl, local_package, name, init): +def reducer_cmd(ctx, host, port, secret_key, use_ssl, local_package, name, init): """ :param ctx: @@ -153,7 +153,7 @@ def reducer_cmd(ctx, discoverhost, discoverport, secret_key, use_ssl, local_pack :param init: """ remote = False if local_package else True - config = {'discover_host': discoverhost, 'discover_port': discoverport, 'secret_key': secret_key, + config = {'host': host, 'port': port, 'secret_key': secret_key, 'use_ssl': use_ssl, 'name': name, 'remote_compute_context': remote, 'init': init} # Read settings from config file diff --git a/fedn/fedn/clients/reducer/restservice.py b/fedn/fedn/clients/reducer/restservice.py index b400232b3..fea415f89 100644 --- a/fedn/fedn/clients/reducer/restservice.py +++ b/fedn/fedn/clients/reducer/restservice.py @@ -86,12 +86,14 @@ class ReducerRestService: def __init__(self, config, control, certificate_manager, certificate=None): print("config object!: \n\n\n\n{}".format(config)) - if config['discover_host']: - self.name = config['discover_host'] + if config['host']: + self.host = config['host'] else: - self.name = config['name'] + self.host = None - self.port = config['discover_port'] + self.name = config['name'] + + self.port = config['port'] self.network_id = config['name'] + '-network' if 'token' in config.keys(): @@ -104,8 +106,8 @@ def __init__(self, config, control, certificate_manager, certificate=None): else: self.SECRET_KEY = None - if 'secure' in config.keys(): - self.secure = config['secure'] + if 'use_ssl' in config.keys(): + self.use_ssl = config['use_ssl'] self.remote_compute_context = config["remote_compute_context"] if self.remote_compute_context: @@ -835,8 +837,8 @@ def config_download(): discover_port = self.port ctx = """network_id: {network_id} controller: - discover_host: {discover_host} - discover_port: {discover_port} + host: {discover_host} + port: {discover_port} {chk_string}""".format(network_id=network_id, discover_host=discover_host, discover_port=discover_port, @@ -860,8 +862,6 @@ def context(): if self.token_auth_enabled: self.authorize(request, app.config.get('SECRET_KEY')) - # if self.control.state() != ReducerState.setup or self.control.state() != ReducerState.idle: - # return "Error, Context already assigned!" # if reset is not empty then allow context re-set reset = request.args.get('reset', None) if reset: @@ -946,12 +946,17 @@ def checksum(): return jsonify(data) + if not self.host: + bind = "0.0.0.0" + else: + bind = self.host + if self.certificate: print("Starting server with certs {} and key {}".format(str(self.certificate.cert_path), str(self.certificate.key_path)), flush=True) - app.run(host="0.0.0.0", port=self.port, + app.run(host=bind, port=self.port, ssl_context=(str(self.certificate.cert_path), str(self.certificate.key_path))) else: - app.run(host="0.0.0.0", port=self.port) + app.run(host=bind, port=self.port) return app diff --git a/fedn/fedn/reducer.py b/fedn/fedn/reducer.py index 62488aad3..d80887f7f 100644 --- a/fedn/fedn/reducer.py +++ b/fedn/fedn/reducer.py @@ -40,6 +40,7 @@ def __init__(self, statestore): print("REDUCER: Failed to retrive Reducer config, exiting.") raise MissingReducerConfiguration() + print(config, flush=True) # Validate reducer name match = re.search(VALID_NAME_REGEX, config['name']) if not match: From 884ef41e291486de3e5ce0f9fce650a813edc0d7 Mon Sep 17 00:00:00 2001 From: Andreas Hellander Date: Tue, 2 Aug 2022 14:24:03 +0200 Subject: [PATCH 071/185] Default no-ssl for REST, ssl for gRPC --- fedn/fedn/clients/reducer/restservice.py | 5 +---- fedn/fedn/combiner.py | 2 +- fedn/fedn/common/net/connect.py | 8 ++++---- 3 files changed, 6 insertions(+), 9 deletions(-) diff --git a/fedn/fedn/clients/reducer/restservice.py b/fedn/fedn/clients/reducer/restservice.py index fea415f89..ec8ac963d 100644 --- a/fedn/fedn/clients/reducer/restservice.py +++ b/fedn/fedn/clients/reducer/restservice.py @@ -118,7 +118,7 @@ def __init__(self, config, control, certificate_manager, certificate=None): self.control = control self.certificate = certificate self.certificate_manager = certificate_manager - self.current_compute_context = None # self.control.get_compute_context() + self.current_compute_context = None def to_dict(self): """ @@ -283,7 +283,6 @@ def index(): # Return response return response - # http://localhost:8090/add?name=combiner&address=combiner&port=12080&token=e9a3cb4c5eaff546eec33ff68a7fbe232b68a192 @app.route('/status') def status(): """ @@ -424,8 +423,6 @@ def add(): _ = base64.b64encode(certificate) _ = base64.b64encode(key) - # TODO append and redirect to index. - combiner = CombinerInterface(self, name, address, port, copy.deepcopy(certificate), copy.deepcopy(key), request.remote_addr) self.control.network.add_combiner(combiner) diff --git a/fedn/fedn/combiner.py b/fedn/fedn/combiner.py index d32058383..6692c4ee7 100644 --- a/fedn/fedn/combiner.py +++ b/fedn/fedn/combiner.py @@ -48,7 +48,7 @@ def role_to_proto_role(role): #################################################################################################################### class Combiner(rpc.CombinerServicer, rpc.ReducerServicer, rpc.ConnectorServicer, rpc.ControlServicer): - """ Communication relayer. """ + """ Combiner gRPC server. """ def __init__(self, connect_config): diff --git a/fedn/fedn/common/net/connect.py b/fedn/fedn/common/net/connect.py index d716ddd3d..53a3659e1 100644 --- a/fedn/fedn/common/net/connect.py +++ b/fedn/fedn/common/net/connect.py @@ -134,10 +134,10 @@ def __init__(self, host, port, myhost, myport, token, name, secure=False, presha self.verify_cert = verify_cert self.secure = secure - if not secure: - self.prefix = "http://" - else: - self.prefix = "https://" + # if not secure: + self.prefix = "http://" + # else: + # self.prefix = "https://" if secure and preshared_cert: self.certificate = Certificate(os.getcwd() + "/certs/", name="client", key_name="client-key.pem", From 37b66f96275310b4ca0ec00d3bee169f5898108e Mon Sep 17 00:00:00 2001 From: Andreas Hellander Date: Wed, 3 Aug 2022 09:26:46 +0200 Subject: [PATCH 072/185] Fix code check --- fedn/fedn/common/security/certificatemanager.py | 7 +------ 1 file changed, 1 insertion(+), 6 deletions(-) diff --git a/fedn/fedn/common/security/certificatemanager.py b/fedn/fedn/common/security/certificatemanager.py index ba9d6e685..3d34fa1ad 100644 --- a/fedn/fedn/common/security/certificatemanager.py +++ b/fedn/fedn/common/security/certificatemanager.py @@ -5,7 +5,7 @@ class CertificateManager: """ - Utility to handle certificates for both Reducer and Combiner services. + Utility to handle certificates for both Reducer and Combiner services. """ @@ -57,14 +57,9 @@ def load_all(self): name = filename.split('-')[0] key_name = name + '-key.pem' - # if os.path.isfile(os.path.join(self.directory, key_name)): c = Certificate(self.directory, name=name, cert_name=filename, key_name=key_name) self.certificates.append(c) - # else: - # c = Certificate(self.directory, name=name, - # cert_name=filename, key_name=key_name) - # self.certificates.append(c) def find(self, name): """ From 0741607e819dc21f1b3694638f8fabe6bf5d69b8 Mon Sep 17 00:00:00 2001 From: Andreas Hellander Date: Wed, 3 Aug 2022 09:40:27 +0200 Subject: [PATCH 073/185] Harmoize option names between combiner and reducer --- docker-compose.yaml | 2 +- fedn/cli/run_cmd.py | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/docker-compose.yaml b/docker-compose.yaml index 8a07374ab..4529dc231 100644 --- a/docker-compose.yaml +++ b/docker-compose.yaml @@ -93,7 +93,7 @@ services: - ${HOST_REPO_DIR:-.}/fedn:/app/fedn entrypoint: [ "sh", "-c" ] command: - - "/venv/bin/pip install --no-cache-dir -e /app/fedn && /venv/bin/fedn run combiner --secure=True -in config/settings-combiner.yaml" + - "/venv/bin/pip install --no-cache-dir -e /app/fedn && /venv/bin/fedn run combiner -in config/settings-combiner.yaml" ports: - 12080:12080 diff --git a/fedn/cli/run_cmd.py b/fedn/cli/run_cmd.py index cc1dea967..1d9f9749a 100644 --- a/fedn/cli/run_cmd.py +++ b/fedn/cli/run_cmd.py @@ -233,7 +233,7 @@ def reducer_cmd(ctx, host, port, secret_key, use_ssl, local_package, name, init) @click.option('-p', '--discoverport', required=False) @click.option('-t', '--token', required=False) @click.option('-n', '--name', required=False, default="combiner" + str(uuid.uuid4())[:8]) -@click.option('-h', '--hostname', required=False, default="combiner") +@click.option('-h', '--host', required=False, default="combiner") @click.option('-i', '--port', required=False, default=12080) @click.option('-s', '--secure', required=False, default=False) @click.option('-c', '--max_clients', required=False, default=30) From 9f2983ec1106983ebfe2fd073a572396a1a87efe Mon Sep 17 00:00:00 2001 From: Andreas Hellander Date: Wed, 3 Aug 2022 09:47:08 +0200 Subject: [PATCH 074/185] Add help text for combiner options --- fedn/cli/run_cmd.py | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/fedn/cli/run_cmd.py b/fedn/cli/run_cmd.py index 1d9f9749a..05fecca69 100644 --- a/fedn/cli/run_cmd.py +++ b/fedn/cli/run_cmd.py @@ -229,16 +229,16 @@ def reducer_cmd(ctx, host, port, secret_key, use_ssl, local_package, name, init) @run_cmd.command('combiner') -@click.option('-d', '--discoverhost', required=False) -@click.option('-p', '--discoverport', required=False) -@click.option('-t', '--token', required=False) -@click.option('-n', '--name', required=False, default="combiner" + str(uuid.uuid4())[:8]) -@click.option('-h', '--host', required=False, default="combiner") -@click.option('-i', '--port', required=False, default=12080) -@click.option('-s', '--secure', required=False, default=False) -@click.option('-c', '--max_clients', required=False, default=30) +@click.option('-d', '--discoverhost', required=False, help='Hostname for discovery services (reducer).') +@click.option('-p', '--discoverport', required=False, help='Port for discovery services (reducer).') +@click.option('-t', '--token', required=False, help='Specify token for connecting to the reducer.') +@click.option('-n', '--name', required=False, default="combiner" + str(uuid.uuid4())[:8], help='Set name for combiner.') +@click.option('-h', '--host', required=False, default="combiner", help='Set hostname.') +@click.option('-i', '--port', required=False, default=12080, help='Set port.') +@click.option('-s', '--secure', required=False, default=False, help='Enable SSL/TLS encrypted gRPC channels.') +@click.option('-c', '--max_clients', required=False, default=30, help='The maximal number of client connections allowed.') @click.option('-in', '--init', required=False, default=None, - help='Set to a filename to (re)init combiner from file state.') + help='Path to configuration file to (re)init combiner.') @click.pass_context def combiner_cmd(ctx, discoverhost, discoverport, token, name, hostname, port, secure, max_clients, init): """ From 79c088a358652d0decda803b7176b3a3cabee595 Mon Sep 17 00:00:00 2001 From: Andreas Hellander Date: Wed, 3 Aug 2022 09:48:53 +0200 Subject: [PATCH 075/185] Make --secure option flag --- fedn/cli/run_cmd.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/fedn/cli/run_cmd.py b/fedn/cli/run_cmd.py index 05fecca69..2e46f8f60 100644 --- a/fedn/cli/run_cmd.py +++ b/fedn/cli/run_cmd.py @@ -235,7 +235,7 @@ def reducer_cmd(ctx, host, port, secret_key, use_ssl, local_package, name, init) @click.option('-n', '--name', required=False, default="combiner" + str(uuid.uuid4())[:8], help='Set name for combiner.') @click.option('-h', '--host', required=False, default="combiner", help='Set hostname.') @click.option('-i', '--port', required=False, default=12080, help='Set port.') -@click.option('-s', '--secure', required=False, default=False, help='Enable SSL/TLS encrypted gRPC channels.') +@click.option('-s', '--secure', is_flag=True, help='Enable SSL/TLS encrypted gRPC channels.') @click.option('-c', '--max_clients', required=False, default=30, help='The maximal number of client connections allowed.') @click.option('-in', '--init', required=False, default=None, help='Path to configuration file to (re)init combiner.') From 81ea77e74ff05d527f481690e871e78f40ced8d7 Mon Sep 17 00:00:00 2001 From: Andreas Hellander Date: Thu, 11 Aug 2022 00:31:50 +0200 Subject: [PATCH 076/185] Works to disable secure grpc --- fedn/cli/run_cmd.py | 4 +-- fedn/fedn/clients/reducer/interfaces.py | 17 ++++++----- fedn/fedn/clients/reducer/network.py | 12 ++++++-- fedn/fedn/clients/reducer/restservice.py | 37 ++++++++++++++---------- fedn/fedn/combiner.py | 8 +++-- fedn/fedn/common/net/connect.py | 33 +++++++++++---------- 6 files changed, 66 insertions(+), 45 deletions(-) diff --git a/fedn/cli/run_cmd.py b/fedn/cli/run_cmd.py index 2e46f8f60..21b2bce68 100644 --- a/fedn/cli/run_cmd.py +++ b/fedn/cli/run_cmd.py @@ -240,7 +240,7 @@ def reducer_cmd(ctx, host, port, secret_key, use_ssl, local_package, name, init) @click.option('-in', '--init', required=False, default=None, help='Path to configuration file to (re)init combiner.') @click.pass_context -def combiner_cmd(ctx, discoverhost, discoverport, token, name, hostname, port, secure, max_clients, init): +def combiner_cmd(ctx, discoverhost, discoverport, token, name, host, port, secure, max_clients, init): """ :param ctx: @@ -254,7 +254,7 @@ def combiner_cmd(ctx, discoverhost, discoverport, token, name, hostname, port, s :param max_clients: :param init: """ - config = {'discover_host': discoverhost, 'discover_port': discoverport, 'token': token, 'myhost': hostname, + config = {'discover_host': discoverhost, 'discover_port': discoverport, 'token': token, 'myhost': host, 'myport': port, 'myname': name, 'secure': secure, 'max_clients': max_clients, 'init': init} if config['init']: diff --git a/fedn/fedn/clients/reducer/interfaces.py b/fedn/fedn/clients/reducer/interfaces.py index a946126d1..9a694b365 100644 --- a/fedn/fedn/clients/reducer/interfaces.py +++ b/fedn/fedn/clients/reducer/interfaces.py @@ -22,8 +22,8 @@ def __init__(self, address, port, certificate): self.address = address self.port = port self.certificate = certificate - if self.certificate: + if self.certificate: credentials = grpc.ssl_channel_credentials( root_certificates=copy.deepcopy(certificate)) self.channel = grpc.secure_channel('{}:{}'.format( @@ -79,19 +79,22 @@ def to_dict(self): :return: """ - cert_b64 = base64.b64encode(self.certificate) - key_b64 = base64.b64encode(self.key) - data = { 'parent': self.parent.to_dict(), 'name': self.name, 'address': self.address, 'port': self.port, - 'certificate': str(cert_b64).split('\'')[1], - 'key': str(key_b64).split('\'')[1], - 'ip': self.ip + 'ip': self.ip, + 'certificate': None, + 'key': None } + if self.certificate: + cert_b64 = base64.b64encode(self.certificate) + key_b64 = base64.b64encode(self.key) + data['certificate'] = str(cert_b64).split('\'')[1] + data['key'] = str(key_b64).split('\'')[1] + try: data['report'] = self.report() except CombinerUnavailableError: diff --git a/fedn/fedn/clients/reducer/network.py b/fedn/fedn/clients/reducer/network.py index 727438f50..f60d32b59 100644 --- a/fedn/fedn/clients/reducer/network.py +++ b/fedn/fedn/clients/reducer/network.py @@ -30,13 +30,19 @@ def get_combiners(self): :return: """ - # TODO: Read in combiners from statestore data = self.statestore.get_combiners() combiners = [] for c in data: + if c['certificate']: + cert = base64.b64decode(c['certificate']) + key = base64.b64decode(c['key']) + else: + cert = None + key = None + combiners.append( - CombinerInterface(c['parent'], c['name'], c['address'], c['port'], base64.b64decode(c['certificate']), - base64.b64decode(c['key']), c['ip'])) + CombinerInterface(c['parent'], c['name'], c['address'], c['port'], + certificate=cert, key=key, ip=c['ip'])) return combiners diff --git a/fedn/fedn/clients/reducer/restservice.py b/fedn/fedn/clients/reducer/restservice.py index ec8ac963d..a3816d418 100644 --- a/fedn/fedn/clients/reducer/restservice.py +++ b/fedn/fedn/clients/reducer/restservice.py @@ -404,37 +404,41 @@ def add(): if self.control.state() == ReducerState.setup: return jsonify({'status': 'retry'}) - # TODO check for get variables name = request.args.get('name', None) address = str(request.args.get('address', None)) port = request.args.get('port', None) - # token = request.args.get('token') - # TODO do validation + secure_grpc = request.args.get('secure', None) - if port is None or address is None or name is None: + if port is None or address is None or name is None or secure_grpc is None: return "Please specify correct parameters." # Try to retrieve combiner from db combiner = self.control.network.get_combiner(name) if not combiner: - # Create a new combiner - certificate, key = self.certificate_manager.get_or_create( - address).get_keypair_raw() - _ = base64.b64encode(certificate) - _ = base64.b64encode(key) - - combiner = CombinerInterface(self, name, address, port, copy.deepcopy(certificate), copy.deepcopy(key), + if secure_grpc == 'True': + certificate, key = self.certificate_manager.get_or_create( + address).get_keypair_raw() + _ = base64.b64encode(certificate) + _ = base64.b64encode(key) + else: + certificate = None + key = None + + combiner = CombinerInterface(self, name, address, port, certificate, key, request.remote_addr) self.control.network.add_combiner(combiner) + else: + certificate = combiner['certificate'] + key = combiner['key'] combiner = self.control.network.get_combiner(name) ret = { 'status': 'added', - 'certificate': combiner['certificate'], - 'key': combiner['key'], 'storage': self.control.statestore.get_storage_backend(), 'statestore': self.control.statestore.get_config(), + 'certificate': combiner['certificate'], + 'key': combiner['key'] } return jsonify(ret) @@ -644,15 +648,18 @@ def assign(): self.control.network.add_client(client) # Return connection information to client + if combiner.certificate: + cert = str(combiner.certificate).split('\'')[1] + else: + cert = None - cert_b64 = base64.b64encode(combiner.certificate) response = { 'status': 'assigned', 'host': combiner.address, 'package': self.package, 'ip': combiner.ip, 'port': combiner.port, - 'certificate': str(cert_b64).split('\'')[1], + 'certificate': cert, 'model_type': self.control.statestore.get_framework() } diff --git a/fedn/fedn/combiner.py b/fedn/fedn/combiner.py index 6692c4ee7..b2d56f647 100644 --- a/fedn/fedn/combiner.py +++ b/fedn/fedn/combiner.py @@ -92,8 +92,12 @@ def __init__(self, connect_config): print(response, flush=True) sys.exit("Exiting: Unauthorized") - cert = base64.b64decode(config['certificate']) # .decode('utf-8') - key = base64.b64decode(config['key']) # .decode('utf-8') + cert = config['certificate'] + key = config['key'] + + if config['certificate']: + cert = base64.b64decode(config['certificate']) # .decode('utf-8') + key = base64.b64decode(config['key']) # .decode('utf-8') grpc_config = {'port': connect_config['myport'], 'secure': connect_config['secure'], diff --git a/fedn/fedn/common/net/connect.py b/fedn/fedn/common/net/connect.py index 53a3659e1..7e61b2a0b 100644 --- a/fedn/fedn/common/net/connect.py +++ b/fedn/fedn/common/net/connect.py @@ -48,18 +48,19 @@ def __init__(self, host, port, token, name, remote_package, combiner=None, id=No else: self.prefix = "https://" - if secure and preshared_cert: - self.certificate = Certificate(os.getcwd() + "/certs/", name="client", key_name="client-key.pem", - cert_name="client-cert.pem").cert_path - else: - self.verify_cert = False - self.connect_string = "{}{}:{}".format( self.prefix, self.host, self.port) print("\n\nsetting the connection string to {}\n\n".format( self.connect_string), flush=True) + # Use combiner server certificate + if secure and preshared_cert: + self.certificate = Certificate(os.getcwd() + "/certs/", name="client", key_name="client-key.pem", + cert_name="client-cert.pem").cert_path + else: + self.verify_cert = False + def state(self): """ @@ -138,6 +139,11 @@ def __init__(self, host, port, myhost, myport, token, name, secure=False, presha self.prefix = "http://" # else: # self.prefix = "https://" + self.connect_string = "{}{}:{}".format( + self.prefix, self.host, self.port) + + print("\n\nsetting the connection string to {}\n\n".format( + self.connect_string), flush=True) if secure and preshared_cert: self.certificate = Certificate(os.getcwd() + "/certs/", name="client", key_name="client-key.pem", @@ -146,12 +152,6 @@ def __init__(self, host, port, myhost, myport, token, name, secure=False, presha else: self.verify_cert = False - self.connect_string = "{}{}:{}".format( - self.prefix, self.host, self.port) - - print("\n\nsetting the connection string to {}\n\n".format( - self.connect_string), flush=True) - def state(self): """ @@ -169,10 +169,11 @@ def announce(self): """ try: cert = str(self.certificate) if self.verify_cert else False - retval = r.get("{}?name={}&address={}&port={}".format(self.connect_string + '/add', - self.name, - self.myhost, - self.myport), + retval = r.get("{}?name={}&address={}&port={}&secure={}".format(self.connect_string + '/add', + self.name, + self.myhost, + self.myport, + self.secure), verify=cert, headers={'Authorization': 'Token {}'.format(self.token)}) except Exception: From 93047252e39b86dbbf5a465c24bb37078938043b Mon Sep 17 00:00:00 2001 From: Andreas Hellander Date: Fri, 12 Aug 2022 14:46:21 +0200 Subject: [PATCH 077/185] Added back use of copy --- fedn/fedn/clients/reducer/restservice.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/fedn/fedn/clients/reducer/restservice.py b/fedn/fedn/clients/reducer/restservice.py index a3816d418..fa0e67c8d 100644 --- a/fedn/fedn/clients/reducer/restservice.py +++ b/fedn/fedn/clients/reducer/restservice.py @@ -424,7 +424,7 @@ def add(): certificate = None key = None - combiner = CombinerInterface(self, name, address, port, certificate, key, + combiner = CombinerInterface(self, name, address, port, copy.deepcopy(certificate), copy.deepcopy(key), request.remote_addr) self.control.network.add_combiner(combiner) else: From 0f0a3d73e9da67836909b1931d31e40aa4cf31df Mon Sep 17 00:00:00 2001 From: Andreas Hellander Date: Mon, 15 Aug 2022 21:07:17 +0200 Subject: [PATCH 078/185] Remove possibility to generate cert for reducer --- docker-compose.yaml | 2 +- fedn/cli/run_cmd.py | 5 +-- fedn/fedn/client.py | 7 +--- fedn/fedn/clients/reducer/restservice.py | 18 ++------- fedn/fedn/common/net/connect.py | 49 +++--------------------- fedn/fedn/reducer.py | 8 +--- 6 files changed, 16 insertions(+), 73 deletions(-) diff --git a/docker-compose.yaml b/docker-compose.yaml index 4529dc231..52a492fbf 100644 --- a/docker-compose.yaml +++ b/docker-compose.yaml @@ -93,7 +93,7 @@ services: - ${HOST_REPO_DIR:-.}/fedn:/app/fedn entrypoint: [ "sh", "-c" ] command: - - "/venv/bin/pip install --no-cache-dir -e /app/fedn && /venv/bin/fedn run combiner -in config/settings-combiner.yaml" + - "/venv/bin/pip install --no-cache-dir -e /app/fedn && /venv/bin/fedn run combiner --secure -in config/settings-combiner.yaml" ports: - 12080:12080 diff --git a/fedn/cli/run_cmd.py b/fedn/cli/run_cmd.py index 21b2bce68..3ac8d397c 100644 --- a/fedn/cli/run_cmd.py +++ b/fedn/cli/run_cmd.py @@ -136,13 +136,12 @@ def client_cmd(ctx, discoverhost, discoverport, token, name, client_id, local_pa @click.option('-h', '--host', required=False) @click.option('-p', '--port', required=False, default='8090', show_default=True) @click.option('-k', '--secret-key', required=False, help='Set secret key to enable jwt token authentication.') -@click.option('-s', '--use-ssl', is_flag=True, help='Enable SSL') @click.option('-l', '--local-package', is_flag=True, help='Enable use of local compute package') @click.option('-n', '--name', required=False, default="reducer" + str(uuid.uuid4())[:8], help='Set service name') @click.option('-i', '--init', required=True, default=None, help='Set to a filename to (re)init reducer state from file.') @click.pass_context -def reducer_cmd(ctx, host, port, secret_key, use_ssl, local_package, name, init): +def reducer_cmd(ctx, host, port, secret_key, local_package, name, init): """ :param ctx: @@ -154,7 +153,7 @@ def reducer_cmd(ctx, host, port, secret_key, use_ssl, local_package, name, init) """ remote = False if local_package else True config = {'host': host, 'port': port, 'secret_key': secret_key, - 'use_ssl': use_ssl, 'name': name, 'remote_compute_context': remote, 'init': init} + 'name': name, 'remote_compute_context': remote, 'init': init} # Read settings from config file try: diff --git a/fedn/fedn/client.py b/fedn/fedn/client.py index c3d7cf1bf..827770ad6 100644 --- a/fedn/fedn/client.py +++ b/fedn/fedn/client.py @@ -66,10 +66,8 @@ def __init__(self, config): config['name'], config['remote_compute_context'], config['preferred_combiner'], - config['client_id'], - secure=config['secure'], - preshared_cert=config['preshared_cert'], - verify_cert=config['verify_cert']) + config['client_id']) + # Validate client name match = re.search(VALID_NAME_REGEX, config['name']) if not match: @@ -240,7 +238,6 @@ def _connect(self, client_config): """ - # TODO use the client_config['certificate'] for setting up secure comms' if client_config['certificate']: cert = base64.b64decode( client_config['certificate']) # .decode('utf-8') diff --git a/fedn/fedn/clients/reducer/restservice.py b/fedn/fedn/clients/reducer/restservice.py index fa0e67c8d..3c48cef25 100644 --- a/fedn/fedn/clients/reducer/restservice.py +++ b/fedn/fedn/clients/reducer/restservice.py @@ -83,7 +83,7 @@ class ReducerRestService: """ - def __init__(self, config, control, certificate_manager, certificate=None): + def __init__(self, config, control, certificate_manager): print("config object!: \n\n\n\n{}".format(config)) if config['host']: @@ -116,7 +116,6 @@ def __init__(self, config, control, certificate_manager, certificate=None): self.package = 'local' self.control = control - self.certificate = certificate self.certificate_manager = certificate_manager self.current_compute_context = None @@ -427,9 +426,6 @@ def add(): combiner = CombinerInterface(self, name, address, port, copy.deepcopy(certificate), copy.deepcopy(key), request.remote_addr) self.control.network.add_combiner(combiner) - else: - certificate = combiner['certificate'] - key = combiner['key'] combiner = self.control.network.get_combiner(name) @@ -649,7 +645,8 @@ def assign(): # Return connection information to client if combiner.certificate: - cert = str(combiner.certificate).split('\'')[1] + cert_b64 = base64.b64encode(combiner.certificate) + cert = str(cert_b64).split('\'')[1] else: cert = None @@ -774,7 +771,6 @@ def dashboard(): box_plot = None print(e, flush=True) table_plot = plot.create_table_plot() - # timeline_plot = plot.create_timeline_plot() timeline_plot = None clients_plot = plot.create_client_plot() return render_template('dashboard.html', show_plot=True, @@ -955,12 +951,6 @@ def checksum(): else: bind = self.host - if self.certificate: - print("Starting server with certs {} and key {}".format(str(self.certificate.cert_path), - str(self.certificate.key_path)), flush=True) - app.run(host=bind, port=self.port, - ssl_context=(str(self.certificate.cert_path), str(self.certificate.key_path))) - else: - app.run(host=bind, port=self.port) + app.run(host=bind, port=self.port) return app diff --git a/fedn/fedn/common/net/connect.py b/fedn/fedn/common/net/connect.py index 7e61b2a0b..6f3cc9fb4 100644 --- a/fedn/fedn/common/net/connect.py +++ b/fedn/fedn/common/net/connect.py @@ -26,11 +26,7 @@ class ConnectorClient: Connector for assigning client to a combiner in the FEDn network. """ - def __init__(self, host, port, token, name, remote_package, combiner=None, id=None, secure=False, preshared_cert=True, - verify_cert=False): - - if not verify_cert: - urllib3.disable_warnings(urllib3.exceptions.InsecureRequestWarning) + def __init__(self, host, port, token, name, remote_package, combiner=None, id=None): self.host = host self.port = port @@ -38,29 +34,15 @@ def __init__(self, host, port, token, name, remote_package, combiner=None, id=No self.name = name self.preferred_combiner = combiner self.id = id - self.verify_cert = verify_cert - self.secure = secure - self.certificate = None self.package = 'remote' if remote_package else 'local' - if not secure: - self.prefix = "http://" - else: - self.prefix = "https://" - + self.prefix = "http://" self.connect_string = "{}{}:{}".format( self.prefix, self.host, self.port) print("\n\nsetting the connection string to {}\n\n".format( self.connect_string), flush=True) - # Use combiner server certificate - if secure and preshared_cert: - self.certificate = Certificate(os.getcwd() + "/certs/", name="client", key_name="client-key.pem", - cert_name="client-cert.pem").cert_path - else: - self.verify_cert = False - def state(self): """ @@ -70,25 +52,23 @@ def state(self): def assign(self): """ - Connect client to FEDn network via discovery service, ask for combiner assignment. + Connect client to FEDn network discovery service, ask for combiner assignment. :return: Tuple with assingment status, combiner connection information if sucessful, else None. :rtype: Status, json """ try: - cert = str(self.certificate) if self.verify_cert else False retval = None if self.preferred_combiner: retval = r.get("{}?name={}&combiner={}".format(self.connect_string + '/assign', self.name, - self.preferred_combiner), verify=cert, + self.preferred_combiner), headers={'Authorization': 'Token {}'.format(self.token)}) else: - retval = r.get("{}?name={}".format(self.connect_string + '/assign', self.name), verify=cert, + retval = r.get("{}?name={}".format(self.connect_string + '/assign', self.name), headers={'Authorization': 'Token {}'.format(self.token)}) except Exception as e: print('***** {}'.format(e), flush=True) - # self.state = State.Disconnected return Status.Unassigned, {} if retval.status_code == 401: @@ -121,10 +101,7 @@ class ConnectorCombiner: Connector for annnouncing combiner to the FEDn network. """ - def __init__(self, host, port, myhost, myport, token, name, secure=False, preshared_cert=True, verify_cert=False): - - if not verify_cert: - urllib3.disable_warnings(urllib3.exceptions.InsecureRequestWarning) + def __init__(self, host, port, myhost, myport, token, name, secure=False): self.host = host self.port = port @@ -132,26 +109,15 @@ def __init__(self, host, port, myhost, myport, token, name, secure=False, presha self.myport = myport self.token = token self.name = name - self.verify_cert = verify_cert self.secure = secure - # if not secure: self.prefix = "http://" - # else: - # self.prefix = "https://" self.connect_string = "{}{}:{}".format( self.prefix, self.host, self.port) print("\n\nsetting the connection string to {}\n\n".format( self.connect_string), flush=True) - if secure and preshared_cert: - self.certificate = Certificate(os.getcwd() + "/certs/", name="client", key_name="client-key.pem", - cert_name="client-cert.pem", - ).cert_path - else: - self.verify_cert = False - def state(self): """ @@ -168,16 +134,13 @@ def announce(self): :rtype: Staus, json """ try: - cert = str(self.certificate) if self.verify_cert else False retval = r.get("{}?name={}&address={}&port={}&secure={}".format(self.connect_string + '/add', self.name, self.myhost, self.myport, self.secure), - verify=cert, headers={'Authorization': 'Token {}'.format(self.token)}) except Exception: - # self.state = State.Disconnected return Status.Unassigned, {} if retval.status_code == 401: diff --git a/fedn/fedn/reducer.py b/fedn/fedn/reducer.py index d80887f7f..271207854 100644 --- a/fedn/fedn/reducer.py +++ b/fedn/fedn/reducer.py @@ -50,16 +50,10 @@ def __init__(self, statestore): # The certificate manager is a utility that generates (self-signed) certificates. self.certificate_manager = CertificateManager(os.getcwd() + "/certs/") - self.use_ssl = config['use_ssl'] - if self.use_ssl: - rest_certificate = self.certificate_manager.get_or_create(self.name) - else: - rest_certificate = None - self.control = ReducerControl(self.statestore) self.rest = ReducerRestService( - config, self.control, self.certificate_manager, certificate=rest_certificate) + config, self.control, self.certificate_manager) def run(self): """Start REST service and control loop.""" From 09c568f57d471e74ac0bc368a5969a14b65ba17c Mon Sep 17 00:00:00 2001 From: Andreas Hellander Date: Mon, 15 Aug 2022 21:07:49 +0200 Subject: [PATCH 079/185] Default to insecure gRPC setting --- docker-compose.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docker-compose.yaml b/docker-compose.yaml index 52a492fbf..4529dc231 100644 --- a/docker-compose.yaml +++ b/docker-compose.yaml @@ -93,7 +93,7 @@ services: - ${HOST_REPO_DIR:-.}/fedn:/app/fedn entrypoint: [ "sh", "-c" ] command: - - "/venv/bin/pip install --no-cache-dir -e /app/fedn && /venv/bin/fedn run combiner --secure -in config/settings-combiner.yaml" + - "/venv/bin/pip install --no-cache-dir -e /app/fedn && /venv/bin/fedn run combiner -in config/settings-combiner.yaml" ports: - 12080:12080 From 91adabec1580516cc7afa2b6b0691063d413ebf9 Mon Sep 17 00:00:00 2001 From: Andreas Hellander Date: Mon, 15 Aug 2022 21:10:55 +0200 Subject: [PATCH 080/185] Fix code scanning alerts --- fedn/fedn/common/net/connect.py | 4 ---- 1 file changed, 4 deletions(-) diff --git a/fedn/fedn/common/net/connect.py b/fedn/fedn/common/net/connect.py index 6f3cc9fb4..a2897f727 100644 --- a/fedn/fedn/common/net/connect.py +++ b/fedn/fedn/common/net/connect.py @@ -1,10 +1,6 @@ import enum -import os import requests as r -import urllib3 - -from fedn.common.security.certificate import Certificate class State(enum.Enum): From e3252eb01658d0838c745cf167899ba7818752b4 Mon Sep 17 00:00:00 2001 From: Andreas Hellander Date: Tue, 16 Aug 2022 10:45:45 +0200 Subject: [PATCH 081/185] Initial refactor --- fedn/fedn/{clients => network}/__init__.py | 0 .../{aggregators => network/clients}/__init__.py | 0 fedn/fedn/{ => network/clients}/client.py | 0 .../{clients/client => network/clients}/state.py | 0 .../client => network/combiner}/__init__.py | 0 .../combiner/aggregators}/__init__.py | 0 .../combiner}/aggregators/aggregator.py | 0 .../{ => network/combiner}/aggregators/fedavg.py | 0 .../reducer => network/combiner}/interfaces.py | 0 .../{clients => network}/combiner/modelservice.py | 0 .../{clients => network}/combiner/roundcontrol.py | 0 .../{combiner.py => network/combiner/server.py} | 0 fedn/fedn/{clients/reducer => network}/config.py | 0 .../reducer => network/controller}/control.py | 0 .../reducer => network/dashboard}/__init__.py | 0 .../{clients/reducer => network/dashboard}/plots.py | 0 .../dashboard}/static/dist/css/dark.css | 0 .../dashboard}/static/dist/css/light.css | 0 .../dashboard}/static/dist/fonts/.gitkeep | 0 .../dashboard}/static/dist/fonts/fa-brands-400.eot | Bin .../dashboard}/static/dist/fonts/fa-brands-400.svg | 0 .../dashboard}/static/dist/fonts/fa-brands-400.ttf | Bin .../dashboard}/static/dist/fonts/fa-brands-400.woff | Bin .../static/dist/fonts/fa-brands-400.woff2 | Bin .../dashboard}/static/dist/fonts/fa-regular-400.eot | Bin .../dashboard}/static/dist/fonts/fa-regular-400.svg | 0 .../dashboard}/static/dist/fonts/fa-regular-400.ttf | Bin .../static/dist/fonts/fa-regular-400.woff | Bin .../static/dist/fonts/fa-regular-400.woff2 | Bin .../dashboard}/static/dist/fonts/fa-solid-900.eot | Bin .../dashboard}/static/dist/fonts/fa-solid-900.svg | 0 .../dashboard}/static/dist/fonts/fa-solid-900.ttf | Bin .../dashboard}/static/dist/fonts/fa-solid-900.woff | Bin .../dashboard}/static/dist/fonts/fa-solid-900.woff2 | Bin .../dashboard}/static/dist/img/avatars/avatar-2.jpg | Bin .../dashboard}/static/dist/img/avatars/avatar-3.jpg | Bin .../dashboard}/static/dist/img/avatars/avatar-4.jpg | Bin .../dashboard}/static/dist/img/avatars/avatar-5.jpg | Bin .../dashboard}/static/dist/img/avatars/avatar.jpg | Bin .../dashboard}/static/dist/img/brands/bootstrap.svg | 0 .../dashboard}/static/dist/img/favicon.ico | Bin .../dashboard}/static/dist/img/flags/ad.png | Bin .../dashboard}/static/dist/img/flags/ae.png | Bin .../dashboard}/static/dist/img/flags/af.png | Bin .../dashboard}/static/dist/img/flags/ag.png | Bin .../dashboard}/static/dist/img/flags/ai.png | Bin .../dashboard}/static/dist/img/flags/al.png | Bin .../dashboard}/static/dist/img/flags/am.png | Bin .../dashboard}/static/dist/img/flags/an.png | Bin .../dashboard}/static/dist/img/flags/ao.png | Bin .../dashboard}/static/dist/img/flags/aq.png | Bin .../dashboard}/static/dist/img/flags/ar.png | Bin .../dashboard}/static/dist/img/flags/as.png | Bin .../dashboard}/static/dist/img/flags/at.png | Bin .../dashboard}/static/dist/img/flags/au.png | Bin .../dashboard}/static/dist/img/flags/aw.png | Bin .../dashboard}/static/dist/img/flags/ax.png | Bin .../dashboard}/static/dist/img/flags/az.png | Bin .../dashboard}/static/dist/img/flags/ba.png | Bin .../dashboard}/static/dist/img/flags/bb.png | Bin .../dashboard}/static/dist/img/flags/bd.png | Bin .../dashboard}/static/dist/img/flags/be.png | Bin .../dashboard}/static/dist/img/flags/bf.png | Bin .../dashboard}/static/dist/img/flags/bg.png | Bin .../dashboard}/static/dist/img/flags/bh.png | Bin .../dashboard}/static/dist/img/flags/bi.png | Bin .../dashboard}/static/dist/img/flags/bj.png | Bin .../dashboard}/static/dist/img/flags/bl.png | Bin .../dashboard}/static/dist/img/flags/bm.png | Bin .../dashboard}/static/dist/img/flags/bn.png | Bin .../dashboard}/static/dist/img/flags/bo.png | Bin .../dashboard}/static/dist/img/flags/bq.png | Bin .../dashboard}/static/dist/img/flags/br.png | Bin .../dashboard}/static/dist/img/flags/bs.png | Bin .../dashboard}/static/dist/img/flags/bt.png | Bin .../dashboard}/static/dist/img/flags/bv.png | Bin .../dashboard}/static/dist/img/flags/bw.png | Bin .../dashboard}/static/dist/img/flags/by.png | Bin .../dashboard}/static/dist/img/flags/bz.png | Bin .../dashboard}/static/dist/img/flags/ca.png | Bin .../dashboard}/static/dist/img/flags/cc.png | Bin .../dashboard}/static/dist/img/flags/cd.png | Bin .../dashboard}/static/dist/img/flags/cf.png | Bin .../dashboard}/static/dist/img/flags/cg.png | Bin .../dashboard}/static/dist/img/flags/ch.png | Bin .../dashboard}/static/dist/img/flags/ci.png | Bin .../dashboard}/static/dist/img/flags/ck.png | Bin .../dashboard}/static/dist/img/flags/cl.png | Bin .../dashboard}/static/dist/img/flags/cm.png | Bin .../dashboard}/static/dist/img/flags/cn.png | Bin .../dashboard}/static/dist/img/flags/co.png | Bin .../dashboard}/static/dist/img/flags/cr.png | Bin .../dashboard}/static/dist/img/flags/cu.png | Bin .../dashboard}/static/dist/img/flags/cv.png | Bin .../dashboard}/static/dist/img/flags/cw.png | Bin .../dashboard}/static/dist/img/flags/cx.png | Bin .../dashboard}/static/dist/img/flags/cy.png | Bin .../dashboard}/static/dist/img/flags/cz.png | Bin .../dashboard}/static/dist/img/flags/de.png | Bin .../dashboard}/static/dist/img/flags/dj.png | Bin .../dashboard}/static/dist/img/flags/dk.png | Bin .../dashboard}/static/dist/img/flags/dm.png | Bin .../dashboard}/static/dist/img/flags/do.png | Bin .../dashboard}/static/dist/img/flags/dz.png | Bin .../dashboard}/static/dist/img/flags/ec.png | Bin .../dashboard}/static/dist/img/flags/ee.png | Bin .../dashboard}/static/dist/img/flags/eg.png | Bin .../dashboard}/static/dist/img/flags/eh.png | Bin .../dashboard}/static/dist/img/flags/er.png | Bin .../dashboard}/static/dist/img/flags/es.png | Bin .../dashboard}/static/dist/img/flags/et.png | Bin .../dashboard}/static/dist/img/flags/eu.png | Bin .../dashboard}/static/dist/img/flags/fi.png | Bin .../dashboard}/static/dist/img/flags/fj.png | Bin .../dashboard}/static/dist/img/flags/fk.png | Bin .../dashboard}/static/dist/img/flags/fm.png | Bin .../dashboard}/static/dist/img/flags/fo.png | Bin .../dashboard}/static/dist/img/flags/fr.png | Bin .../dashboard}/static/dist/img/flags/ga.png | Bin .../dashboard}/static/dist/img/flags/gb-eng.png | Bin .../dashboard}/static/dist/img/flags/gb-nir.png | Bin .../dashboard}/static/dist/img/flags/gb-sct.png | Bin .../dashboard}/static/dist/img/flags/gb-wls.png | Bin .../dashboard}/static/dist/img/flags/gb.png | Bin .../dashboard}/static/dist/img/flags/gd.png | Bin .../dashboard}/static/dist/img/flags/ge.png | Bin .../dashboard}/static/dist/img/flags/gf.png | Bin .../dashboard}/static/dist/img/flags/gg.png | Bin .../dashboard}/static/dist/img/flags/gh.png | Bin .../dashboard}/static/dist/img/flags/gi.png | Bin .../dashboard}/static/dist/img/flags/gl.png | Bin .../dashboard}/static/dist/img/flags/gm.png | Bin .../dashboard}/static/dist/img/flags/gn.png | Bin .../dashboard}/static/dist/img/flags/gp.png | Bin .../dashboard}/static/dist/img/flags/gq.png | Bin .../dashboard}/static/dist/img/flags/gr.png | Bin .../dashboard}/static/dist/img/flags/gs.png | Bin .../dashboard}/static/dist/img/flags/gt.png | Bin .../dashboard}/static/dist/img/flags/gu.png | Bin .../dashboard}/static/dist/img/flags/gw.png | Bin .../dashboard}/static/dist/img/flags/gy.png | Bin .../dashboard}/static/dist/img/flags/hk.png | Bin .../dashboard}/static/dist/img/flags/hm.png | Bin .../dashboard}/static/dist/img/flags/hn.png | Bin .../dashboard}/static/dist/img/flags/hr.png | Bin .../dashboard}/static/dist/img/flags/ht.png | Bin .../dashboard}/static/dist/img/flags/hu.png | Bin .../dashboard}/static/dist/img/flags/id.png | Bin .../dashboard}/static/dist/img/flags/ie.png | Bin .../dashboard}/static/dist/img/flags/il.png | Bin .../dashboard}/static/dist/img/flags/im.png | Bin .../dashboard}/static/dist/img/flags/in.png | Bin .../dashboard}/static/dist/img/flags/io.png | Bin .../dashboard}/static/dist/img/flags/iq.png | Bin .../dashboard}/static/dist/img/flags/ir.png | Bin .../dashboard}/static/dist/img/flags/is.png | Bin .../dashboard}/static/dist/img/flags/it.png | Bin .../dashboard}/static/dist/img/flags/je.png | Bin .../dashboard}/static/dist/img/flags/jm.png | Bin .../dashboard}/static/dist/img/flags/jo.png | Bin .../dashboard}/static/dist/img/flags/jp.png | Bin .../dashboard}/static/dist/img/flags/ke.png | Bin .../dashboard}/static/dist/img/flags/kg.png | Bin .../dashboard}/static/dist/img/flags/kh.png | Bin .../dashboard}/static/dist/img/flags/ki.png | Bin .../dashboard}/static/dist/img/flags/km.png | Bin .../dashboard}/static/dist/img/flags/kn.png | Bin .../dashboard}/static/dist/img/flags/kp.png | Bin .../dashboard}/static/dist/img/flags/kr.png | Bin .../dashboard}/static/dist/img/flags/kw.png | Bin .../dashboard}/static/dist/img/flags/ky.png | Bin .../dashboard}/static/dist/img/flags/kz.png | Bin .../dashboard}/static/dist/img/flags/la.png | Bin .../dashboard}/static/dist/img/flags/lb.png | Bin .../dashboard}/static/dist/img/flags/lc.png | Bin .../dashboard}/static/dist/img/flags/li.png | Bin .../dashboard}/static/dist/img/flags/lk.png | Bin .../dashboard}/static/dist/img/flags/lr.png | Bin .../dashboard}/static/dist/img/flags/ls.png | Bin .../dashboard}/static/dist/img/flags/lt.png | Bin .../dashboard}/static/dist/img/flags/lu.png | Bin .../dashboard}/static/dist/img/flags/lv.png | Bin .../dashboard}/static/dist/img/flags/ly.png | Bin .../dashboard}/static/dist/img/flags/ma.png | Bin .../dashboard}/static/dist/img/flags/mc.png | Bin .../dashboard}/static/dist/img/flags/md.png | Bin .../dashboard}/static/dist/img/flags/me.png | Bin .../dashboard}/static/dist/img/flags/mf.png | Bin .../dashboard}/static/dist/img/flags/mg.png | Bin .../dashboard}/static/dist/img/flags/mh.png | Bin .../dashboard}/static/dist/img/flags/mk.png | Bin .../dashboard}/static/dist/img/flags/ml.png | Bin .../dashboard}/static/dist/img/flags/mm.png | Bin .../dashboard}/static/dist/img/flags/mn.png | Bin .../dashboard}/static/dist/img/flags/mo.png | Bin .../dashboard}/static/dist/img/flags/mp.png | Bin .../dashboard}/static/dist/img/flags/mq.png | Bin .../dashboard}/static/dist/img/flags/mr.png | Bin .../dashboard}/static/dist/img/flags/ms.png | Bin .../dashboard}/static/dist/img/flags/mt.png | Bin .../dashboard}/static/dist/img/flags/mu.png | Bin .../dashboard}/static/dist/img/flags/mv.png | Bin .../dashboard}/static/dist/img/flags/mw.png | Bin .../dashboard}/static/dist/img/flags/mx.png | Bin .../dashboard}/static/dist/img/flags/my.png | Bin .../dashboard}/static/dist/img/flags/mz.png | Bin .../dashboard}/static/dist/img/flags/na.png | Bin .../dashboard}/static/dist/img/flags/nc.png | Bin .../dashboard}/static/dist/img/flags/ne.png | Bin .../dashboard}/static/dist/img/flags/nf.png | Bin .../dashboard}/static/dist/img/flags/ng.png | Bin .../dashboard}/static/dist/img/flags/ni.png | Bin .../dashboard}/static/dist/img/flags/nl.png | Bin .../dashboard}/static/dist/img/flags/no.png | Bin .../dashboard}/static/dist/img/flags/np.png | Bin .../dashboard}/static/dist/img/flags/nr.png | Bin .../dashboard}/static/dist/img/flags/nu.png | Bin .../dashboard}/static/dist/img/flags/nz.png | Bin .../dashboard}/static/dist/img/flags/om.png | Bin .../dashboard}/static/dist/img/flags/pa.png | Bin .../dashboard}/static/dist/img/flags/pe.png | Bin .../dashboard}/static/dist/img/flags/pf.png | Bin .../dashboard}/static/dist/img/flags/pg.png | Bin .../dashboard}/static/dist/img/flags/ph.png | Bin .../dashboard}/static/dist/img/flags/pk.png | Bin .../dashboard}/static/dist/img/flags/pl.png | Bin .../dashboard}/static/dist/img/flags/pm.png | Bin .../dashboard}/static/dist/img/flags/pn.png | Bin .../dashboard}/static/dist/img/flags/pr.png | Bin .../dashboard}/static/dist/img/flags/ps.png | Bin .../dashboard}/static/dist/img/flags/pt.png | Bin .../dashboard}/static/dist/img/flags/pw.png | Bin .../dashboard}/static/dist/img/flags/py.png | Bin .../dashboard}/static/dist/img/flags/qa.png | Bin .../dashboard}/static/dist/img/flags/re.png | Bin .../dashboard}/static/dist/img/flags/ro.png | Bin .../dashboard}/static/dist/img/flags/rs.png | Bin .../dashboard}/static/dist/img/flags/ru.png | Bin .../dashboard}/static/dist/img/flags/rw.png | Bin .../dashboard}/static/dist/img/flags/sa.png | Bin .../dashboard}/static/dist/img/flags/sb.png | Bin .../dashboard}/static/dist/img/flags/sc.png | Bin .../dashboard}/static/dist/img/flags/sd.png | Bin .../dashboard}/static/dist/img/flags/se.png | Bin .../dashboard}/static/dist/img/flags/sg.png | Bin .../dashboard}/static/dist/img/flags/sh.png | Bin .../dashboard}/static/dist/img/flags/si.png | Bin .../dashboard}/static/dist/img/flags/sj.png | Bin .../dashboard}/static/dist/img/flags/sk.png | Bin .../dashboard}/static/dist/img/flags/sl.png | Bin .../dashboard}/static/dist/img/flags/sm.png | Bin .../dashboard}/static/dist/img/flags/sn.png | Bin .../dashboard}/static/dist/img/flags/so.png | Bin .../dashboard}/static/dist/img/flags/sr.png | Bin .../dashboard}/static/dist/img/flags/ss.png | Bin .../dashboard}/static/dist/img/flags/st.png | Bin .../dashboard}/static/dist/img/flags/sv.png | Bin .../dashboard}/static/dist/img/flags/sx.png | Bin .../dashboard}/static/dist/img/flags/sy.png | Bin .../dashboard}/static/dist/img/flags/sz.png | Bin .../dashboard}/static/dist/img/flags/tc.png | Bin .../dashboard}/static/dist/img/flags/td.png | Bin .../dashboard}/static/dist/img/flags/tf.png | Bin .../dashboard}/static/dist/img/flags/tg.png | Bin .../dashboard}/static/dist/img/flags/th.png | Bin .../dashboard}/static/dist/img/flags/tj.png | Bin .../dashboard}/static/dist/img/flags/tk.png | Bin .../dashboard}/static/dist/img/flags/tl.png | Bin .../dashboard}/static/dist/img/flags/tm.png | Bin .../dashboard}/static/dist/img/flags/tn.png | Bin .../dashboard}/static/dist/img/flags/to.png | Bin .../dashboard}/static/dist/img/flags/tr.png | Bin .../dashboard}/static/dist/img/flags/tt.png | Bin .../dashboard}/static/dist/img/flags/tv.png | Bin .../dashboard}/static/dist/img/flags/tw.png | Bin .../dashboard}/static/dist/img/flags/tz.png | Bin .../dashboard}/static/dist/img/flags/ua.png | Bin .../dashboard}/static/dist/img/flags/ug.png | Bin .../dashboard}/static/dist/img/flags/um.png | Bin .../dashboard}/static/dist/img/flags/us.png | Bin .../dashboard}/static/dist/img/flags/uy.png | Bin .../dashboard}/static/dist/img/flags/uz.png | Bin .../dashboard}/static/dist/img/flags/va.png | Bin .../dashboard}/static/dist/img/flags/vc.png | Bin .../dashboard}/static/dist/img/flags/ve.png | Bin .../dashboard}/static/dist/img/flags/vg.png | Bin .../dashboard}/static/dist/img/flags/vi.png | Bin .../dashboard}/static/dist/img/flags/vn.png | Bin .../dashboard}/static/dist/img/flags/vu.png | Bin .../dashboard}/static/dist/img/flags/wf.png | Bin .../dashboard}/static/dist/img/flags/ws.png | Bin .../dashboard}/static/dist/img/flags/xk.png | Bin .../dashboard}/static/dist/img/flags/ye.png | Bin .../dashboard}/static/dist/img/flags/yt.png | Bin .../dashboard}/static/dist/img/flags/za.png | Bin .../dashboard}/static/dist/img/flags/zm.png | Bin .../dashboard}/static/dist/img/flags/zw.png | Bin .../dist/img/illustrations/customer-support.png | Bin .../static/dist/img/illustrations/searching.png | Bin .../static/dist/img/illustrations/social.png | Bin .../dashboard}/static/dist/img/logo.svg | 0 .../static/dist/img/photos/unsplash-1.jpg | Bin .../static/dist/img/photos/unsplash-2.jpg | Bin .../static/dist/img/photos/unsplash-3.jpg | Bin .../dist/img/screenshots/dashboard-analytics.jpg | Bin .../dist/img/screenshots/dashboard-crypto.jpg | Bin .../dist/img/screenshots/dashboard-default.jpg | Bin .../static/dist/img/screenshots/dashboard-saas.jpg | Bin .../dist/img/screenshots/dashboard-social.jpg | Bin .../static/dist/img/screenshots/mixed.jpg | Bin .../dist/img/screenshots/pages-projects-list.jpg | Bin .../static/dist/img/screenshots/sidebar-compact.jpg | Bin .../static/dist/img/screenshots/sidebar-right.jpg | Bin .../static/dist/img/screenshots/theme-colored.jpg | Bin .../static/dist/img/screenshots/theme-dark.jpg | Bin .../static/dist/img/screenshots/theme-default.jpg | Bin .../static/dist/img/screenshots/theme-light.jpg | Bin .../dashboard}/static/dist/js/app.js | 0 .../dashboard}/static/dist/js/app.js.LICENSE.txt | 0 .../dashboard}/static/dist/js/plot.js | 0 .../dist/js/plugins/sigma.exporters.svg.min.js | 0 .../dist/js/plugins/sigma.layout.forceAtlas2.min.js | 0 .../dist/js/plugins/sigma.layout.noverlap.min.js | 0 .../dist/js/plugins/sigma.neo4j.cypher.min.js | 0 .../dist/js/plugins/sigma.parsers.gexf.min.js | 0 .../dist/js/plugins/sigma.parsers.json.min.js | 0 .../dist/js/plugins/sigma.pathfinding.astar.min.js | 0 .../dist/js/plugins/sigma.plugins.animate.min.js | 0 .../dist/js/plugins/sigma.plugins.dragNodes.min.js | 0 .../dist/js/plugins/sigma.plugins.filter.min.js | 0 .../js/plugins/sigma.plugins.neighborhoods.min.js | 0 .../js/plugins/sigma.plugins.relativeSize.min.js | 0 .../plugins/sigma.renderers.customEdgeShapes.min.js | 0 .../js/plugins/sigma.renderers.customShapes.min.js | 0 .../dist/js/plugins/sigma.renderers.edgeDots.min.js | 0 .../js/plugins/sigma.renderers.edgeLabels.min.js | 0 .../js/plugins/sigma.renderers.parallelEdges.min.js | 0 .../dist/js/plugins/sigma.renderers.snapshot.min.js | 0 .../dist/js/plugins/sigma.statistics.HITS.min.js | 0 .../dashboard}/static/dist/js/settings.js | 0 .../dashboard}/static/dist/js/sigma.min.js | 0 .../dashboard}/templates/context.html | 0 .../dashboard}/templates/dashboard.html | 0 .../dashboard}/templates/eula.html | 0 .../dashboard}/templates/events.html | 0 .../dashboard}/templates/index.html | 0 .../dashboard}/templates/models.html | 0 .../dashboard}/templates/network.html | 0 .../dashboard}/templates/setup.html | 0 .../dashboard}/templates/setup_model.html | 0 fedn/fedn/{clients/reducer => network}/network.py | 0 fedn/fedn/{ => network}/reducer.py | 0 .../{clients/reducer => network}/restservice.py | 0 fedn/fedn/{clients/reducer => network}/state.py | 0 .../reducer => network}/statestore/__init__.py | 0 .../statestore/mongoreducerstatestore.py | 0 .../statestore/reducerstatestore.py | 0 357 files changed, 0 insertions(+), 0 deletions(-) rename fedn/fedn/{clients => network}/__init__.py (100%) rename fedn/fedn/{aggregators => network/clients}/__init__.py (100%) rename fedn/fedn/{ => network/clients}/client.py (100%) rename fedn/fedn/{clients/client => network/clients}/state.py (100%) rename fedn/fedn/{clients/client => network/combiner}/__init__.py (100%) rename fedn/fedn/{clients/combiner => network/combiner/aggregators}/__init__.py (100%) rename fedn/fedn/{ => network/combiner}/aggregators/aggregator.py (100%) rename fedn/fedn/{ => network/combiner}/aggregators/fedavg.py (100%) rename fedn/fedn/{clients/reducer => network/combiner}/interfaces.py (100%) rename fedn/fedn/{clients => network}/combiner/modelservice.py (100%) rename fedn/fedn/{clients => network}/combiner/roundcontrol.py (100%) rename fedn/fedn/{combiner.py => network/combiner/server.py} (100%) rename fedn/fedn/{clients/reducer => network}/config.py (100%) rename fedn/fedn/{clients/reducer => network/controller}/control.py (100%) rename fedn/fedn/{clients/reducer => network/dashboard}/__init__.py (100%) rename fedn/fedn/{clients/reducer => network/dashboard}/plots.py (100%) rename fedn/fedn/{clients/reducer => network/dashboard}/static/dist/css/dark.css (100%) rename fedn/fedn/{clients/reducer => network/dashboard}/static/dist/css/light.css (100%) rename fedn/fedn/{clients/reducer => network/dashboard}/static/dist/fonts/.gitkeep (100%) rename fedn/fedn/{clients/reducer => network/dashboard}/static/dist/fonts/fa-brands-400.eot (100%) rename fedn/fedn/{clients/reducer => network/dashboard}/static/dist/fonts/fa-brands-400.svg (100%) rename fedn/fedn/{clients/reducer => network/dashboard}/static/dist/fonts/fa-brands-400.ttf (100%) rename fedn/fedn/{clients/reducer => network/dashboard}/static/dist/fonts/fa-brands-400.woff (100%) rename fedn/fedn/{clients/reducer => network/dashboard}/static/dist/fonts/fa-brands-400.woff2 (100%) rename fedn/fedn/{clients/reducer => network/dashboard}/static/dist/fonts/fa-regular-400.eot (100%) rename fedn/fedn/{clients/reducer => network/dashboard}/static/dist/fonts/fa-regular-400.svg (100%) rename fedn/fedn/{clients/reducer => network/dashboard}/static/dist/fonts/fa-regular-400.ttf (100%) rename fedn/fedn/{clients/reducer => network/dashboard}/static/dist/fonts/fa-regular-400.woff (100%) rename fedn/fedn/{clients/reducer => network/dashboard}/static/dist/fonts/fa-regular-400.woff2 (100%) rename fedn/fedn/{clients/reducer => network/dashboard}/static/dist/fonts/fa-solid-900.eot (100%) rename fedn/fedn/{clients/reducer => network/dashboard}/static/dist/fonts/fa-solid-900.svg (100%) rename fedn/fedn/{clients/reducer => network/dashboard}/static/dist/fonts/fa-solid-900.ttf (100%) rename fedn/fedn/{clients/reducer => network/dashboard}/static/dist/fonts/fa-solid-900.woff (100%) rename fedn/fedn/{clients/reducer => network/dashboard}/static/dist/fonts/fa-solid-900.woff2 (100%) rename fedn/fedn/{clients/reducer => network/dashboard}/static/dist/img/avatars/avatar-2.jpg (100%) rename fedn/fedn/{clients/reducer => network/dashboard}/static/dist/img/avatars/avatar-3.jpg (100%) rename fedn/fedn/{clients/reducer => network/dashboard}/static/dist/img/avatars/avatar-4.jpg (100%) rename fedn/fedn/{clients/reducer => network/dashboard}/static/dist/img/avatars/avatar-5.jpg (100%) rename fedn/fedn/{clients/reducer => network/dashboard}/static/dist/img/avatars/avatar.jpg (100%) rename fedn/fedn/{clients/reducer => network/dashboard}/static/dist/img/brands/bootstrap.svg (100%) rename fedn/fedn/{clients/reducer => network/dashboard}/static/dist/img/favicon.ico (100%) rename fedn/fedn/{clients/reducer => network/dashboard}/static/dist/img/flags/ad.png (100%) rename fedn/fedn/{clients/reducer => network/dashboard}/static/dist/img/flags/ae.png (100%) rename fedn/fedn/{clients/reducer => network/dashboard}/static/dist/img/flags/af.png (100%) rename fedn/fedn/{clients/reducer => network/dashboard}/static/dist/img/flags/ag.png (100%) rename fedn/fedn/{clients/reducer => network/dashboard}/static/dist/img/flags/ai.png (100%) rename fedn/fedn/{clients/reducer => network/dashboard}/static/dist/img/flags/al.png (100%) rename fedn/fedn/{clients/reducer => network/dashboard}/static/dist/img/flags/am.png (100%) rename fedn/fedn/{clients/reducer => network/dashboard}/static/dist/img/flags/an.png (100%) rename fedn/fedn/{clients/reducer => network/dashboard}/static/dist/img/flags/ao.png (100%) rename fedn/fedn/{clients/reducer => network/dashboard}/static/dist/img/flags/aq.png (100%) rename fedn/fedn/{clients/reducer => network/dashboard}/static/dist/img/flags/ar.png (100%) rename fedn/fedn/{clients/reducer => network/dashboard}/static/dist/img/flags/as.png (100%) rename fedn/fedn/{clients/reducer => network/dashboard}/static/dist/img/flags/at.png (100%) rename fedn/fedn/{clients/reducer => network/dashboard}/static/dist/img/flags/au.png (100%) rename fedn/fedn/{clients/reducer => network/dashboard}/static/dist/img/flags/aw.png (100%) rename fedn/fedn/{clients/reducer => network/dashboard}/static/dist/img/flags/ax.png (100%) rename fedn/fedn/{clients/reducer => network/dashboard}/static/dist/img/flags/az.png (100%) rename fedn/fedn/{clients/reducer => network/dashboard}/static/dist/img/flags/ba.png (100%) rename fedn/fedn/{clients/reducer => network/dashboard}/static/dist/img/flags/bb.png (100%) rename fedn/fedn/{clients/reducer => network/dashboard}/static/dist/img/flags/bd.png (100%) rename fedn/fedn/{clients/reducer => network/dashboard}/static/dist/img/flags/be.png (100%) rename fedn/fedn/{clients/reducer => network/dashboard}/static/dist/img/flags/bf.png (100%) rename fedn/fedn/{clients/reducer => network/dashboard}/static/dist/img/flags/bg.png (100%) rename fedn/fedn/{clients/reducer => network/dashboard}/static/dist/img/flags/bh.png (100%) rename fedn/fedn/{clients/reducer => network/dashboard}/static/dist/img/flags/bi.png (100%) rename fedn/fedn/{clients/reducer => network/dashboard}/static/dist/img/flags/bj.png (100%) rename fedn/fedn/{clients/reducer => network/dashboard}/static/dist/img/flags/bl.png (100%) rename fedn/fedn/{clients/reducer => network/dashboard}/static/dist/img/flags/bm.png (100%) rename fedn/fedn/{clients/reducer => network/dashboard}/static/dist/img/flags/bn.png (100%) rename fedn/fedn/{clients/reducer => network/dashboard}/static/dist/img/flags/bo.png (100%) rename fedn/fedn/{clients/reducer => network/dashboard}/static/dist/img/flags/bq.png (100%) rename fedn/fedn/{clients/reducer => network/dashboard}/static/dist/img/flags/br.png (100%) rename fedn/fedn/{clients/reducer => network/dashboard}/static/dist/img/flags/bs.png (100%) rename fedn/fedn/{clients/reducer => network/dashboard}/static/dist/img/flags/bt.png (100%) rename fedn/fedn/{clients/reducer => network/dashboard}/static/dist/img/flags/bv.png (100%) rename fedn/fedn/{clients/reducer => network/dashboard}/static/dist/img/flags/bw.png (100%) rename fedn/fedn/{clients/reducer => network/dashboard}/static/dist/img/flags/by.png (100%) rename fedn/fedn/{clients/reducer => network/dashboard}/static/dist/img/flags/bz.png (100%) rename fedn/fedn/{clients/reducer => network/dashboard}/static/dist/img/flags/ca.png (100%) rename fedn/fedn/{clients/reducer => network/dashboard}/static/dist/img/flags/cc.png (100%) rename fedn/fedn/{clients/reducer => network/dashboard}/static/dist/img/flags/cd.png (100%) rename fedn/fedn/{clients/reducer => network/dashboard}/static/dist/img/flags/cf.png (100%) rename fedn/fedn/{clients/reducer => network/dashboard}/static/dist/img/flags/cg.png (100%) rename fedn/fedn/{clients/reducer => network/dashboard}/static/dist/img/flags/ch.png (100%) rename fedn/fedn/{clients/reducer => network/dashboard}/static/dist/img/flags/ci.png (100%) rename fedn/fedn/{clients/reducer => network/dashboard}/static/dist/img/flags/ck.png (100%) rename fedn/fedn/{clients/reducer => network/dashboard}/static/dist/img/flags/cl.png (100%) rename fedn/fedn/{clients/reducer => network/dashboard}/static/dist/img/flags/cm.png (100%) rename fedn/fedn/{clients/reducer => network/dashboard}/static/dist/img/flags/cn.png (100%) rename fedn/fedn/{clients/reducer => network/dashboard}/static/dist/img/flags/co.png (100%) rename fedn/fedn/{clients/reducer => network/dashboard}/static/dist/img/flags/cr.png (100%) rename fedn/fedn/{clients/reducer => network/dashboard}/static/dist/img/flags/cu.png (100%) rename fedn/fedn/{clients/reducer => network/dashboard}/static/dist/img/flags/cv.png (100%) rename fedn/fedn/{clients/reducer => network/dashboard}/static/dist/img/flags/cw.png (100%) rename fedn/fedn/{clients/reducer => network/dashboard}/static/dist/img/flags/cx.png (100%) rename fedn/fedn/{clients/reducer => network/dashboard}/static/dist/img/flags/cy.png (100%) rename fedn/fedn/{clients/reducer => network/dashboard}/static/dist/img/flags/cz.png (100%) rename fedn/fedn/{clients/reducer => network/dashboard}/static/dist/img/flags/de.png (100%) rename fedn/fedn/{clients/reducer => network/dashboard}/static/dist/img/flags/dj.png (100%) rename fedn/fedn/{clients/reducer => network/dashboard}/static/dist/img/flags/dk.png (100%) rename fedn/fedn/{clients/reducer => network/dashboard}/static/dist/img/flags/dm.png (100%) rename fedn/fedn/{clients/reducer => network/dashboard}/static/dist/img/flags/do.png (100%) rename fedn/fedn/{clients/reducer => network/dashboard}/static/dist/img/flags/dz.png (100%) rename fedn/fedn/{clients/reducer => network/dashboard}/static/dist/img/flags/ec.png (100%) rename fedn/fedn/{clients/reducer => network/dashboard}/static/dist/img/flags/ee.png (100%) rename fedn/fedn/{clients/reducer => network/dashboard}/static/dist/img/flags/eg.png (100%) rename fedn/fedn/{clients/reducer => network/dashboard}/static/dist/img/flags/eh.png (100%) rename fedn/fedn/{clients/reducer => network/dashboard}/static/dist/img/flags/er.png (100%) rename fedn/fedn/{clients/reducer => network/dashboard}/static/dist/img/flags/es.png (100%) rename fedn/fedn/{clients/reducer => network/dashboard}/static/dist/img/flags/et.png (100%) rename fedn/fedn/{clients/reducer => network/dashboard}/static/dist/img/flags/eu.png (100%) rename fedn/fedn/{clients/reducer => network/dashboard}/static/dist/img/flags/fi.png (100%) rename fedn/fedn/{clients/reducer => network/dashboard}/static/dist/img/flags/fj.png (100%) rename fedn/fedn/{clients/reducer => network/dashboard}/static/dist/img/flags/fk.png (100%) rename fedn/fedn/{clients/reducer => network/dashboard}/static/dist/img/flags/fm.png (100%) rename fedn/fedn/{clients/reducer => network/dashboard}/static/dist/img/flags/fo.png (100%) rename fedn/fedn/{clients/reducer => network/dashboard}/static/dist/img/flags/fr.png (100%) rename fedn/fedn/{clients/reducer => network/dashboard}/static/dist/img/flags/ga.png (100%) rename fedn/fedn/{clients/reducer => network/dashboard}/static/dist/img/flags/gb-eng.png (100%) rename fedn/fedn/{clients/reducer => network/dashboard}/static/dist/img/flags/gb-nir.png (100%) rename fedn/fedn/{clients/reducer => network/dashboard}/static/dist/img/flags/gb-sct.png (100%) rename fedn/fedn/{clients/reducer => network/dashboard}/static/dist/img/flags/gb-wls.png (100%) rename fedn/fedn/{clients/reducer => network/dashboard}/static/dist/img/flags/gb.png (100%) rename fedn/fedn/{clients/reducer => network/dashboard}/static/dist/img/flags/gd.png (100%) rename fedn/fedn/{clients/reducer => network/dashboard}/static/dist/img/flags/ge.png (100%) rename fedn/fedn/{clients/reducer => network/dashboard}/static/dist/img/flags/gf.png (100%) rename fedn/fedn/{clients/reducer => network/dashboard}/static/dist/img/flags/gg.png (100%) rename fedn/fedn/{clients/reducer => network/dashboard}/static/dist/img/flags/gh.png (100%) rename fedn/fedn/{clients/reducer => network/dashboard}/static/dist/img/flags/gi.png (100%) rename fedn/fedn/{clients/reducer => network/dashboard}/static/dist/img/flags/gl.png (100%) rename fedn/fedn/{clients/reducer => network/dashboard}/static/dist/img/flags/gm.png (100%) rename fedn/fedn/{clients/reducer => network/dashboard}/static/dist/img/flags/gn.png (100%) rename fedn/fedn/{clients/reducer => network/dashboard}/static/dist/img/flags/gp.png (100%) rename fedn/fedn/{clients/reducer => network/dashboard}/static/dist/img/flags/gq.png (100%) rename fedn/fedn/{clients/reducer => network/dashboard}/static/dist/img/flags/gr.png (100%) rename fedn/fedn/{clients/reducer => network/dashboard}/static/dist/img/flags/gs.png (100%) rename fedn/fedn/{clients/reducer => network/dashboard}/static/dist/img/flags/gt.png (100%) rename fedn/fedn/{clients/reducer => network/dashboard}/static/dist/img/flags/gu.png (100%) rename fedn/fedn/{clients/reducer => network/dashboard}/static/dist/img/flags/gw.png (100%) rename fedn/fedn/{clients/reducer => network/dashboard}/static/dist/img/flags/gy.png (100%) rename fedn/fedn/{clients/reducer => network/dashboard}/static/dist/img/flags/hk.png (100%) rename fedn/fedn/{clients/reducer => network/dashboard}/static/dist/img/flags/hm.png (100%) rename fedn/fedn/{clients/reducer => network/dashboard}/static/dist/img/flags/hn.png (100%) rename fedn/fedn/{clients/reducer => network/dashboard}/static/dist/img/flags/hr.png (100%) rename fedn/fedn/{clients/reducer => network/dashboard}/static/dist/img/flags/ht.png (100%) rename fedn/fedn/{clients/reducer => network/dashboard}/static/dist/img/flags/hu.png (100%) rename fedn/fedn/{clients/reducer => network/dashboard}/static/dist/img/flags/id.png (100%) rename fedn/fedn/{clients/reducer => network/dashboard}/static/dist/img/flags/ie.png (100%) rename fedn/fedn/{clients/reducer => network/dashboard}/static/dist/img/flags/il.png (100%) rename fedn/fedn/{clients/reducer => network/dashboard}/static/dist/img/flags/im.png (100%) rename fedn/fedn/{clients/reducer => network/dashboard}/static/dist/img/flags/in.png (100%) rename fedn/fedn/{clients/reducer => network/dashboard}/static/dist/img/flags/io.png (100%) rename fedn/fedn/{clients/reducer => network/dashboard}/static/dist/img/flags/iq.png (100%) rename fedn/fedn/{clients/reducer => network/dashboard}/static/dist/img/flags/ir.png (100%) rename fedn/fedn/{clients/reducer => network/dashboard}/static/dist/img/flags/is.png (100%) rename fedn/fedn/{clients/reducer => network/dashboard}/static/dist/img/flags/it.png (100%) rename fedn/fedn/{clients/reducer => network/dashboard}/static/dist/img/flags/je.png (100%) rename fedn/fedn/{clients/reducer => network/dashboard}/static/dist/img/flags/jm.png (100%) rename fedn/fedn/{clients/reducer => network/dashboard}/static/dist/img/flags/jo.png (100%) rename fedn/fedn/{clients/reducer => network/dashboard}/static/dist/img/flags/jp.png (100%) rename fedn/fedn/{clients/reducer => network/dashboard}/static/dist/img/flags/ke.png (100%) rename fedn/fedn/{clients/reducer => network/dashboard}/static/dist/img/flags/kg.png (100%) rename fedn/fedn/{clients/reducer => network/dashboard}/static/dist/img/flags/kh.png (100%) rename fedn/fedn/{clients/reducer => network/dashboard}/static/dist/img/flags/ki.png (100%) rename fedn/fedn/{clients/reducer => network/dashboard}/static/dist/img/flags/km.png (100%) rename fedn/fedn/{clients/reducer => network/dashboard}/static/dist/img/flags/kn.png (100%) rename fedn/fedn/{clients/reducer => network/dashboard}/static/dist/img/flags/kp.png (100%) rename fedn/fedn/{clients/reducer => network/dashboard}/static/dist/img/flags/kr.png (100%) rename fedn/fedn/{clients/reducer => network/dashboard}/static/dist/img/flags/kw.png (100%) rename fedn/fedn/{clients/reducer => network/dashboard}/static/dist/img/flags/ky.png (100%) rename fedn/fedn/{clients/reducer => network/dashboard}/static/dist/img/flags/kz.png (100%) rename fedn/fedn/{clients/reducer => network/dashboard}/static/dist/img/flags/la.png (100%) rename fedn/fedn/{clients/reducer => network/dashboard}/static/dist/img/flags/lb.png (100%) rename fedn/fedn/{clients/reducer => network/dashboard}/static/dist/img/flags/lc.png (100%) rename fedn/fedn/{clients/reducer => network/dashboard}/static/dist/img/flags/li.png (100%) rename fedn/fedn/{clients/reducer => network/dashboard}/static/dist/img/flags/lk.png (100%) rename fedn/fedn/{clients/reducer => network/dashboard}/static/dist/img/flags/lr.png (100%) rename fedn/fedn/{clients/reducer => network/dashboard}/static/dist/img/flags/ls.png (100%) rename fedn/fedn/{clients/reducer => network/dashboard}/static/dist/img/flags/lt.png (100%) rename fedn/fedn/{clients/reducer => network/dashboard}/static/dist/img/flags/lu.png (100%) rename fedn/fedn/{clients/reducer => network/dashboard}/static/dist/img/flags/lv.png (100%) rename fedn/fedn/{clients/reducer => network/dashboard}/static/dist/img/flags/ly.png (100%) rename fedn/fedn/{clients/reducer => network/dashboard}/static/dist/img/flags/ma.png (100%) rename fedn/fedn/{clients/reducer => network/dashboard}/static/dist/img/flags/mc.png (100%) rename fedn/fedn/{clients/reducer => network/dashboard}/static/dist/img/flags/md.png (100%) rename fedn/fedn/{clients/reducer => network/dashboard}/static/dist/img/flags/me.png (100%) rename fedn/fedn/{clients/reducer => network/dashboard}/static/dist/img/flags/mf.png (100%) rename fedn/fedn/{clients/reducer => network/dashboard}/static/dist/img/flags/mg.png (100%) rename fedn/fedn/{clients/reducer => network/dashboard}/static/dist/img/flags/mh.png (100%) rename fedn/fedn/{clients/reducer => network/dashboard}/static/dist/img/flags/mk.png (100%) rename fedn/fedn/{clients/reducer => network/dashboard}/static/dist/img/flags/ml.png (100%) rename fedn/fedn/{clients/reducer => network/dashboard}/static/dist/img/flags/mm.png (100%) rename fedn/fedn/{clients/reducer => network/dashboard}/static/dist/img/flags/mn.png (100%) rename fedn/fedn/{clients/reducer => network/dashboard}/static/dist/img/flags/mo.png (100%) rename fedn/fedn/{clients/reducer => network/dashboard}/static/dist/img/flags/mp.png (100%) rename fedn/fedn/{clients/reducer => network/dashboard}/static/dist/img/flags/mq.png (100%) rename fedn/fedn/{clients/reducer => network/dashboard}/static/dist/img/flags/mr.png (100%) rename fedn/fedn/{clients/reducer => network/dashboard}/static/dist/img/flags/ms.png (100%) rename fedn/fedn/{clients/reducer => network/dashboard}/static/dist/img/flags/mt.png (100%) rename fedn/fedn/{clients/reducer => network/dashboard}/static/dist/img/flags/mu.png (100%) rename fedn/fedn/{clients/reducer => network/dashboard}/static/dist/img/flags/mv.png (100%) rename fedn/fedn/{clients/reducer => network/dashboard}/static/dist/img/flags/mw.png (100%) rename fedn/fedn/{clients/reducer => network/dashboard}/static/dist/img/flags/mx.png (100%) rename fedn/fedn/{clients/reducer => network/dashboard}/static/dist/img/flags/my.png (100%) rename fedn/fedn/{clients/reducer => network/dashboard}/static/dist/img/flags/mz.png (100%) rename fedn/fedn/{clients/reducer => network/dashboard}/static/dist/img/flags/na.png (100%) rename fedn/fedn/{clients/reducer => network/dashboard}/static/dist/img/flags/nc.png (100%) rename fedn/fedn/{clients/reducer => network/dashboard}/static/dist/img/flags/ne.png (100%) rename fedn/fedn/{clients/reducer => network/dashboard}/static/dist/img/flags/nf.png (100%) rename fedn/fedn/{clients/reducer => network/dashboard}/static/dist/img/flags/ng.png (100%) rename fedn/fedn/{clients/reducer => network/dashboard}/static/dist/img/flags/ni.png (100%) rename fedn/fedn/{clients/reducer => network/dashboard}/static/dist/img/flags/nl.png (100%) rename fedn/fedn/{clients/reducer => network/dashboard}/static/dist/img/flags/no.png (100%) rename fedn/fedn/{clients/reducer => network/dashboard}/static/dist/img/flags/np.png (100%) rename fedn/fedn/{clients/reducer => network/dashboard}/static/dist/img/flags/nr.png (100%) rename fedn/fedn/{clients/reducer => network/dashboard}/static/dist/img/flags/nu.png (100%) rename fedn/fedn/{clients/reducer => network/dashboard}/static/dist/img/flags/nz.png (100%) rename fedn/fedn/{clients/reducer => network/dashboard}/static/dist/img/flags/om.png (100%) rename fedn/fedn/{clients/reducer => network/dashboard}/static/dist/img/flags/pa.png (100%) rename fedn/fedn/{clients/reducer => network/dashboard}/static/dist/img/flags/pe.png (100%) rename fedn/fedn/{clients/reducer => network/dashboard}/static/dist/img/flags/pf.png (100%) rename fedn/fedn/{clients/reducer => network/dashboard}/static/dist/img/flags/pg.png (100%) rename fedn/fedn/{clients/reducer => network/dashboard}/static/dist/img/flags/ph.png (100%) rename fedn/fedn/{clients/reducer => network/dashboard}/static/dist/img/flags/pk.png (100%) rename fedn/fedn/{clients/reducer => network/dashboard}/static/dist/img/flags/pl.png (100%) rename fedn/fedn/{clients/reducer => network/dashboard}/static/dist/img/flags/pm.png (100%) rename fedn/fedn/{clients/reducer => network/dashboard}/static/dist/img/flags/pn.png (100%) rename fedn/fedn/{clients/reducer => network/dashboard}/static/dist/img/flags/pr.png (100%) rename fedn/fedn/{clients/reducer => network/dashboard}/static/dist/img/flags/ps.png (100%) rename fedn/fedn/{clients/reducer => network/dashboard}/static/dist/img/flags/pt.png (100%) rename fedn/fedn/{clients/reducer => network/dashboard}/static/dist/img/flags/pw.png (100%) rename fedn/fedn/{clients/reducer => network/dashboard}/static/dist/img/flags/py.png (100%) rename fedn/fedn/{clients/reducer => network/dashboard}/static/dist/img/flags/qa.png (100%) rename fedn/fedn/{clients/reducer => network/dashboard}/static/dist/img/flags/re.png (100%) rename fedn/fedn/{clients/reducer => network/dashboard}/static/dist/img/flags/ro.png (100%) rename fedn/fedn/{clients/reducer => network/dashboard}/static/dist/img/flags/rs.png (100%) rename fedn/fedn/{clients/reducer => network/dashboard}/static/dist/img/flags/ru.png (100%) rename fedn/fedn/{clients/reducer => network/dashboard}/static/dist/img/flags/rw.png (100%) rename fedn/fedn/{clients/reducer => network/dashboard}/static/dist/img/flags/sa.png (100%) rename fedn/fedn/{clients/reducer => network/dashboard}/static/dist/img/flags/sb.png (100%) rename fedn/fedn/{clients/reducer => network/dashboard}/static/dist/img/flags/sc.png (100%) rename fedn/fedn/{clients/reducer => network/dashboard}/static/dist/img/flags/sd.png (100%) rename fedn/fedn/{clients/reducer => network/dashboard}/static/dist/img/flags/se.png (100%) rename fedn/fedn/{clients/reducer => network/dashboard}/static/dist/img/flags/sg.png (100%) rename fedn/fedn/{clients/reducer => network/dashboard}/static/dist/img/flags/sh.png (100%) rename fedn/fedn/{clients/reducer => network/dashboard}/static/dist/img/flags/si.png (100%) rename fedn/fedn/{clients/reducer => network/dashboard}/static/dist/img/flags/sj.png (100%) rename fedn/fedn/{clients/reducer => network/dashboard}/static/dist/img/flags/sk.png (100%) rename fedn/fedn/{clients/reducer => network/dashboard}/static/dist/img/flags/sl.png (100%) rename fedn/fedn/{clients/reducer => network/dashboard}/static/dist/img/flags/sm.png (100%) rename fedn/fedn/{clients/reducer => network/dashboard}/static/dist/img/flags/sn.png (100%) rename fedn/fedn/{clients/reducer => network/dashboard}/static/dist/img/flags/so.png (100%) rename fedn/fedn/{clients/reducer => network/dashboard}/static/dist/img/flags/sr.png (100%) rename fedn/fedn/{clients/reducer => network/dashboard}/static/dist/img/flags/ss.png (100%) rename fedn/fedn/{clients/reducer => network/dashboard}/static/dist/img/flags/st.png (100%) rename fedn/fedn/{clients/reducer => network/dashboard}/static/dist/img/flags/sv.png (100%) rename fedn/fedn/{clients/reducer => network/dashboard}/static/dist/img/flags/sx.png (100%) rename fedn/fedn/{clients/reducer => network/dashboard}/static/dist/img/flags/sy.png (100%) rename fedn/fedn/{clients/reducer => network/dashboard}/static/dist/img/flags/sz.png (100%) rename fedn/fedn/{clients/reducer => network/dashboard}/static/dist/img/flags/tc.png (100%) rename fedn/fedn/{clients/reducer => network/dashboard}/static/dist/img/flags/td.png (100%) rename fedn/fedn/{clients/reducer => network/dashboard}/static/dist/img/flags/tf.png (100%) rename fedn/fedn/{clients/reducer => network/dashboard}/static/dist/img/flags/tg.png (100%) rename fedn/fedn/{clients/reducer => network/dashboard}/static/dist/img/flags/th.png (100%) rename fedn/fedn/{clients/reducer => network/dashboard}/static/dist/img/flags/tj.png (100%) rename fedn/fedn/{clients/reducer => network/dashboard}/static/dist/img/flags/tk.png (100%) rename fedn/fedn/{clients/reducer => network/dashboard}/static/dist/img/flags/tl.png (100%) rename fedn/fedn/{clients/reducer => network/dashboard}/static/dist/img/flags/tm.png (100%) rename fedn/fedn/{clients/reducer => network/dashboard}/static/dist/img/flags/tn.png (100%) rename fedn/fedn/{clients/reducer => network/dashboard}/static/dist/img/flags/to.png (100%) rename fedn/fedn/{clients/reducer => network/dashboard}/static/dist/img/flags/tr.png (100%) rename fedn/fedn/{clients/reducer => network/dashboard}/static/dist/img/flags/tt.png (100%) rename fedn/fedn/{clients/reducer => network/dashboard}/static/dist/img/flags/tv.png (100%) rename fedn/fedn/{clients/reducer => network/dashboard}/static/dist/img/flags/tw.png (100%) rename fedn/fedn/{clients/reducer => network/dashboard}/static/dist/img/flags/tz.png (100%) rename fedn/fedn/{clients/reducer => network/dashboard}/static/dist/img/flags/ua.png (100%) rename fedn/fedn/{clients/reducer => network/dashboard}/static/dist/img/flags/ug.png (100%) rename fedn/fedn/{clients/reducer => network/dashboard}/static/dist/img/flags/um.png (100%) rename fedn/fedn/{clients/reducer => network/dashboard}/static/dist/img/flags/us.png (100%) rename fedn/fedn/{clients/reducer => network/dashboard}/static/dist/img/flags/uy.png (100%) rename fedn/fedn/{clients/reducer => network/dashboard}/static/dist/img/flags/uz.png (100%) rename fedn/fedn/{clients/reducer => network/dashboard}/static/dist/img/flags/va.png (100%) rename fedn/fedn/{clients/reducer => network/dashboard}/static/dist/img/flags/vc.png (100%) rename fedn/fedn/{clients/reducer => network/dashboard}/static/dist/img/flags/ve.png (100%) rename fedn/fedn/{clients/reducer => network/dashboard}/static/dist/img/flags/vg.png (100%) rename fedn/fedn/{clients/reducer => network/dashboard}/static/dist/img/flags/vi.png (100%) rename fedn/fedn/{clients/reducer => network/dashboard}/static/dist/img/flags/vn.png (100%) rename fedn/fedn/{clients/reducer => network/dashboard}/static/dist/img/flags/vu.png (100%) rename fedn/fedn/{clients/reducer => network/dashboard}/static/dist/img/flags/wf.png (100%) rename fedn/fedn/{clients/reducer => network/dashboard}/static/dist/img/flags/ws.png (100%) rename fedn/fedn/{clients/reducer => network/dashboard}/static/dist/img/flags/xk.png (100%) rename fedn/fedn/{clients/reducer => network/dashboard}/static/dist/img/flags/ye.png (100%) rename fedn/fedn/{clients/reducer => network/dashboard}/static/dist/img/flags/yt.png (100%) rename fedn/fedn/{clients/reducer => network/dashboard}/static/dist/img/flags/za.png (100%) rename fedn/fedn/{clients/reducer => network/dashboard}/static/dist/img/flags/zm.png (100%) rename fedn/fedn/{clients/reducer => network/dashboard}/static/dist/img/flags/zw.png (100%) rename fedn/fedn/{clients/reducer => network/dashboard}/static/dist/img/illustrations/customer-support.png (100%) rename fedn/fedn/{clients/reducer => network/dashboard}/static/dist/img/illustrations/searching.png (100%) rename fedn/fedn/{clients/reducer => network/dashboard}/static/dist/img/illustrations/social.png (100%) rename fedn/fedn/{clients/reducer => network/dashboard}/static/dist/img/logo.svg (100%) rename fedn/fedn/{clients/reducer => network/dashboard}/static/dist/img/photos/unsplash-1.jpg (100%) rename fedn/fedn/{clients/reducer => network/dashboard}/static/dist/img/photos/unsplash-2.jpg (100%) rename fedn/fedn/{clients/reducer => network/dashboard}/static/dist/img/photos/unsplash-3.jpg (100%) rename fedn/fedn/{clients/reducer => network/dashboard}/static/dist/img/screenshots/dashboard-analytics.jpg (100%) rename fedn/fedn/{clients/reducer => network/dashboard}/static/dist/img/screenshots/dashboard-crypto.jpg (100%) rename fedn/fedn/{clients/reducer => network/dashboard}/static/dist/img/screenshots/dashboard-default.jpg (100%) rename fedn/fedn/{clients/reducer => network/dashboard}/static/dist/img/screenshots/dashboard-saas.jpg (100%) rename fedn/fedn/{clients/reducer => network/dashboard}/static/dist/img/screenshots/dashboard-social.jpg (100%) rename fedn/fedn/{clients/reducer => network/dashboard}/static/dist/img/screenshots/mixed.jpg (100%) rename fedn/fedn/{clients/reducer => network/dashboard}/static/dist/img/screenshots/pages-projects-list.jpg (100%) rename fedn/fedn/{clients/reducer => network/dashboard}/static/dist/img/screenshots/sidebar-compact.jpg (100%) rename fedn/fedn/{clients/reducer => network/dashboard}/static/dist/img/screenshots/sidebar-right.jpg (100%) rename fedn/fedn/{clients/reducer => network/dashboard}/static/dist/img/screenshots/theme-colored.jpg (100%) rename fedn/fedn/{clients/reducer => network/dashboard}/static/dist/img/screenshots/theme-dark.jpg (100%) rename fedn/fedn/{clients/reducer => network/dashboard}/static/dist/img/screenshots/theme-default.jpg (100%) rename fedn/fedn/{clients/reducer => network/dashboard}/static/dist/img/screenshots/theme-light.jpg (100%) rename fedn/fedn/{clients/reducer => network/dashboard}/static/dist/js/app.js (100%) rename fedn/fedn/{clients/reducer => network/dashboard}/static/dist/js/app.js.LICENSE.txt (100%) rename fedn/fedn/{clients/reducer => network/dashboard}/static/dist/js/plot.js (100%) rename fedn/fedn/{clients/reducer => network/dashboard}/static/dist/js/plugins/sigma.exporters.svg.min.js (100%) rename fedn/fedn/{clients/reducer => network/dashboard}/static/dist/js/plugins/sigma.layout.forceAtlas2.min.js (100%) rename fedn/fedn/{clients/reducer => network/dashboard}/static/dist/js/plugins/sigma.layout.noverlap.min.js (100%) rename fedn/fedn/{clients/reducer => network/dashboard}/static/dist/js/plugins/sigma.neo4j.cypher.min.js (100%) rename fedn/fedn/{clients/reducer => network/dashboard}/static/dist/js/plugins/sigma.parsers.gexf.min.js (100%) rename fedn/fedn/{clients/reducer => network/dashboard}/static/dist/js/plugins/sigma.parsers.json.min.js (100%) rename fedn/fedn/{clients/reducer => network/dashboard}/static/dist/js/plugins/sigma.pathfinding.astar.min.js (100%) rename fedn/fedn/{clients/reducer => network/dashboard}/static/dist/js/plugins/sigma.plugins.animate.min.js (100%) rename fedn/fedn/{clients/reducer => network/dashboard}/static/dist/js/plugins/sigma.plugins.dragNodes.min.js (100%) rename fedn/fedn/{clients/reducer => network/dashboard}/static/dist/js/plugins/sigma.plugins.filter.min.js (100%) rename fedn/fedn/{clients/reducer => network/dashboard}/static/dist/js/plugins/sigma.plugins.neighborhoods.min.js (100%) rename fedn/fedn/{clients/reducer => network/dashboard}/static/dist/js/plugins/sigma.plugins.relativeSize.min.js (100%) rename fedn/fedn/{clients/reducer => network/dashboard}/static/dist/js/plugins/sigma.renderers.customEdgeShapes.min.js (100%) rename fedn/fedn/{clients/reducer => network/dashboard}/static/dist/js/plugins/sigma.renderers.customShapes.min.js (100%) rename fedn/fedn/{clients/reducer => network/dashboard}/static/dist/js/plugins/sigma.renderers.edgeDots.min.js (100%) rename fedn/fedn/{clients/reducer => network/dashboard}/static/dist/js/plugins/sigma.renderers.edgeLabels.min.js (100%) rename fedn/fedn/{clients/reducer => network/dashboard}/static/dist/js/plugins/sigma.renderers.parallelEdges.min.js (100%) rename fedn/fedn/{clients/reducer => network/dashboard}/static/dist/js/plugins/sigma.renderers.snapshot.min.js (100%) rename fedn/fedn/{clients/reducer => network/dashboard}/static/dist/js/plugins/sigma.statistics.HITS.min.js (100%) rename fedn/fedn/{clients/reducer => network/dashboard}/static/dist/js/settings.js (100%) rename fedn/fedn/{clients/reducer => network/dashboard}/static/dist/js/sigma.min.js (100%) rename fedn/fedn/{clients/reducer => network/dashboard}/templates/context.html (100%) rename fedn/fedn/{clients/reducer => network/dashboard}/templates/dashboard.html (100%) rename fedn/fedn/{clients/reducer => network/dashboard}/templates/eula.html (100%) rename fedn/fedn/{clients/reducer => network/dashboard}/templates/events.html (100%) rename fedn/fedn/{clients/reducer => network/dashboard}/templates/index.html (100%) rename fedn/fedn/{clients/reducer => network/dashboard}/templates/models.html (100%) rename fedn/fedn/{clients/reducer => network/dashboard}/templates/network.html (100%) rename fedn/fedn/{clients/reducer => network/dashboard}/templates/setup.html (100%) rename fedn/fedn/{clients/reducer => network/dashboard}/templates/setup_model.html (100%) rename fedn/fedn/{clients/reducer => network}/network.py (100%) rename fedn/fedn/{ => network}/reducer.py (100%) rename fedn/fedn/{clients/reducer => network}/restservice.py (100%) rename fedn/fedn/{clients/reducer => network}/state.py (100%) rename fedn/fedn/{clients/reducer => network}/statestore/__init__.py (100%) rename fedn/fedn/{clients/reducer => network}/statestore/mongoreducerstatestore.py (100%) rename fedn/fedn/{clients/reducer => network}/statestore/reducerstatestore.py (100%) diff --git a/fedn/fedn/clients/__init__.py b/fedn/fedn/network/__init__.py similarity index 100% rename from fedn/fedn/clients/__init__.py rename to fedn/fedn/network/__init__.py diff --git a/fedn/fedn/aggregators/__init__.py b/fedn/fedn/network/clients/__init__.py similarity index 100% rename from fedn/fedn/aggregators/__init__.py rename to fedn/fedn/network/clients/__init__.py diff --git a/fedn/fedn/client.py b/fedn/fedn/network/clients/client.py similarity index 100% rename from fedn/fedn/client.py rename to fedn/fedn/network/clients/client.py diff --git a/fedn/fedn/clients/client/state.py b/fedn/fedn/network/clients/state.py similarity index 100% rename from fedn/fedn/clients/client/state.py rename to fedn/fedn/network/clients/state.py diff --git a/fedn/fedn/clients/client/__init__.py b/fedn/fedn/network/combiner/__init__.py similarity index 100% rename from fedn/fedn/clients/client/__init__.py rename to fedn/fedn/network/combiner/__init__.py diff --git a/fedn/fedn/clients/combiner/__init__.py b/fedn/fedn/network/combiner/aggregators/__init__.py similarity index 100% rename from fedn/fedn/clients/combiner/__init__.py rename to fedn/fedn/network/combiner/aggregators/__init__.py diff --git a/fedn/fedn/aggregators/aggregator.py b/fedn/fedn/network/combiner/aggregators/aggregator.py similarity index 100% rename from fedn/fedn/aggregators/aggregator.py rename to fedn/fedn/network/combiner/aggregators/aggregator.py diff --git a/fedn/fedn/aggregators/fedavg.py b/fedn/fedn/network/combiner/aggregators/fedavg.py similarity index 100% rename from fedn/fedn/aggregators/fedavg.py rename to fedn/fedn/network/combiner/aggregators/fedavg.py diff --git a/fedn/fedn/clients/reducer/interfaces.py b/fedn/fedn/network/combiner/interfaces.py similarity index 100% rename from fedn/fedn/clients/reducer/interfaces.py rename to fedn/fedn/network/combiner/interfaces.py diff --git a/fedn/fedn/clients/combiner/modelservice.py b/fedn/fedn/network/combiner/modelservice.py similarity index 100% rename from fedn/fedn/clients/combiner/modelservice.py rename to fedn/fedn/network/combiner/modelservice.py diff --git a/fedn/fedn/clients/combiner/roundcontrol.py b/fedn/fedn/network/combiner/roundcontrol.py similarity index 100% rename from fedn/fedn/clients/combiner/roundcontrol.py rename to fedn/fedn/network/combiner/roundcontrol.py diff --git a/fedn/fedn/combiner.py b/fedn/fedn/network/combiner/server.py similarity index 100% rename from fedn/fedn/combiner.py rename to fedn/fedn/network/combiner/server.py diff --git a/fedn/fedn/clients/reducer/config.py b/fedn/fedn/network/config.py similarity index 100% rename from fedn/fedn/clients/reducer/config.py rename to fedn/fedn/network/config.py diff --git a/fedn/fedn/clients/reducer/control.py b/fedn/fedn/network/controller/control.py similarity index 100% rename from fedn/fedn/clients/reducer/control.py rename to fedn/fedn/network/controller/control.py diff --git a/fedn/fedn/clients/reducer/__init__.py b/fedn/fedn/network/dashboard/__init__.py similarity index 100% rename from fedn/fedn/clients/reducer/__init__.py rename to fedn/fedn/network/dashboard/__init__.py diff --git a/fedn/fedn/clients/reducer/plots.py b/fedn/fedn/network/dashboard/plots.py similarity index 100% rename from fedn/fedn/clients/reducer/plots.py rename to fedn/fedn/network/dashboard/plots.py diff --git a/fedn/fedn/clients/reducer/static/dist/css/dark.css b/fedn/fedn/network/dashboard/static/dist/css/dark.css similarity index 100% rename from fedn/fedn/clients/reducer/static/dist/css/dark.css rename to fedn/fedn/network/dashboard/static/dist/css/dark.css diff --git a/fedn/fedn/clients/reducer/static/dist/css/light.css b/fedn/fedn/network/dashboard/static/dist/css/light.css similarity index 100% rename from fedn/fedn/clients/reducer/static/dist/css/light.css rename to fedn/fedn/network/dashboard/static/dist/css/light.css diff --git a/fedn/fedn/clients/reducer/static/dist/fonts/.gitkeep b/fedn/fedn/network/dashboard/static/dist/fonts/.gitkeep similarity index 100% rename from fedn/fedn/clients/reducer/static/dist/fonts/.gitkeep rename to fedn/fedn/network/dashboard/static/dist/fonts/.gitkeep diff --git a/fedn/fedn/clients/reducer/static/dist/fonts/fa-brands-400.eot b/fedn/fedn/network/dashboard/static/dist/fonts/fa-brands-400.eot similarity index 100% rename from fedn/fedn/clients/reducer/static/dist/fonts/fa-brands-400.eot rename to fedn/fedn/network/dashboard/static/dist/fonts/fa-brands-400.eot diff --git a/fedn/fedn/clients/reducer/static/dist/fonts/fa-brands-400.svg b/fedn/fedn/network/dashboard/static/dist/fonts/fa-brands-400.svg similarity index 100% rename from fedn/fedn/clients/reducer/static/dist/fonts/fa-brands-400.svg rename to fedn/fedn/network/dashboard/static/dist/fonts/fa-brands-400.svg diff --git a/fedn/fedn/clients/reducer/static/dist/fonts/fa-brands-400.ttf b/fedn/fedn/network/dashboard/static/dist/fonts/fa-brands-400.ttf similarity index 100% rename from fedn/fedn/clients/reducer/static/dist/fonts/fa-brands-400.ttf rename to fedn/fedn/network/dashboard/static/dist/fonts/fa-brands-400.ttf diff --git a/fedn/fedn/clients/reducer/static/dist/fonts/fa-brands-400.woff b/fedn/fedn/network/dashboard/static/dist/fonts/fa-brands-400.woff similarity index 100% rename from fedn/fedn/clients/reducer/static/dist/fonts/fa-brands-400.woff rename to fedn/fedn/network/dashboard/static/dist/fonts/fa-brands-400.woff diff --git a/fedn/fedn/clients/reducer/static/dist/fonts/fa-brands-400.woff2 b/fedn/fedn/network/dashboard/static/dist/fonts/fa-brands-400.woff2 similarity index 100% rename from fedn/fedn/clients/reducer/static/dist/fonts/fa-brands-400.woff2 rename to fedn/fedn/network/dashboard/static/dist/fonts/fa-brands-400.woff2 diff --git a/fedn/fedn/clients/reducer/static/dist/fonts/fa-regular-400.eot b/fedn/fedn/network/dashboard/static/dist/fonts/fa-regular-400.eot similarity index 100% rename from fedn/fedn/clients/reducer/static/dist/fonts/fa-regular-400.eot rename to fedn/fedn/network/dashboard/static/dist/fonts/fa-regular-400.eot diff --git a/fedn/fedn/clients/reducer/static/dist/fonts/fa-regular-400.svg b/fedn/fedn/network/dashboard/static/dist/fonts/fa-regular-400.svg similarity index 100% rename from fedn/fedn/clients/reducer/static/dist/fonts/fa-regular-400.svg rename to fedn/fedn/network/dashboard/static/dist/fonts/fa-regular-400.svg diff --git a/fedn/fedn/clients/reducer/static/dist/fonts/fa-regular-400.ttf b/fedn/fedn/network/dashboard/static/dist/fonts/fa-regular-400.ttf similarity index 100% rename from fedn/fedn/clients/reducer/static/dist/fonts/fa-regular-400.ttf rename to fedn/fedn/network/dashboard/static/dist/fonts/fa-regular-400.ttf diff --git a/fedn/fedn/clients/reducer/static/dist/fonts/fa-regular-400.woff b/fedn/fedn/network/dashboard/static/dist/fonts/fa-regular-400.woff similarity index 100% rename from fedn/fedn/clients/reducer/static/dist/fonts/fa-regular-400.woff rename to fedn/fedn/network/dashboard/static/dist/fonts/fa-regular-400.woff diff --git a/fedn/fedn/clients/reducer/static/dist/fonts/fa-regular-400.woff2 b/fedn/fedn/network/dashboard/static/dist/fonts/fa-regular-400.woff2 similarity index 100% rename from fedn/fedn/clients/reducer/static/dist/fonts/fa-regular-400.woff2 rename to fedn/fedn/network/dashboard/static/dist/fonts/fa-regular-400.woff2 diff --git a/fedn/fedn/clients/reducer/static/dist/fonts/fa-solid-900.eot b/fedn/fedn/network/dashboard/static/dist/fonts/fa-solid-900.eot similarity index 100% rename from fedn/fedn/clients/reducer/static/dist/fonts/fa-solid-900.eot rename to fedn/fedn/network/dashboard/static/dist/fonts/fa-solid-900.eot diff --git a/fedn/fedn/clients/reducer/static/dist/fonts/fa-solid-900.svg b/fedn/fedn/network/dashboard/static/dist/fonts/fa-solid-900.svg similarity index 100% rename from fedn/fedn/clients/reducer/static/dist/fonts/fa-solid-900.svg rename to fedn/fedn/network/dashboard/static/dist/fonts/fa-solid-900.svg diff --git a/fedn/fedn/clients/reducer/static/dist/fonts/fa-solid-900.ttf b/fedn/fedn/network/dashboard/static/dist/fonts/fa-solid-900.ttf similarity index 100% rename from fedn/fedn/clients/reducer/static/dist/fonts/fa-solid-900.ttf rename to fedn/fedn/network/dashboard/static/dist/fonts/fa-solid-900.ttf diff --git a/fedn/fedn/clients/reducer/static/dist/fonts/fa-solid-900.woff b/fedn/fedn/network/dashboard/static/dist/fonts/fa-solid-900.woff similarity index 100% rename from fedn/fedn/clients/reducer/static/dist/fonts/fa-solid-900.woff rename to fedn/fedn/network/dashboard/static/dist/fonts/fa-solid-900.woff diff --git a/fedn/fedn/clients/reducer/static/dist/fonts/fa-solid-900.woff2 b/fedn/fedn/network/dashboard/static/dist/fonts/fa-solid-900.woff2 similarity index 100% rename from fedn/fedn/clients/reducer/static/dist/fonts/fa-solid-900.woff2 rename to fedn/fedn/network/dashboard/static/dist/fonts/fa-solid-900.woff2 diff --git a/fedn/fedn/clients/reducer/static/dist/img/avatars/avatar-2.jpg b/fedn/fedn/network/dashboard/static/dist/img/avatars/avatar-2.jpg similarity index 100% rename from fedn/fedn/clients/reducer/static/dist/img/avatars/avatar-2.jpg rename to fedn/fedn/network/dashboard/static/dist/img/avatars/avatar-2.jpg diff --git a/fedn/fedn/clients/reducer/static/dist/img/avatars/avatar-3.jpg b/fedn/fedn/network/dashboard/static/dist/img/avatars/avatar-3.jpg similarity index 100% rename from fedn/fedn/clients/reducer/static/dist/img/avatars/avatar-3.jpg rename to fedn/fedn/network/dashboard/static/dist/img/avatars/avatar-3.jpg diff --git a/fedn/fedn/clients/reducer/static/dist/img/avatars/avatar-4.jpg b/fedn/fedn/network/dashboard/static/dist/img/avatars/avatar-4.jpg similarity index 100% rename from fedn/fedn/clients/reducer/static/dist/img/avatars/avatar-4.jpg rename to fedn/fedn/network/dashboard/static/dist/img/avatars/avatar-4.jpg diff --git a/fedn/fedn/clients/reducer/static/dist/img/avatars/avatar-5.jpg b/fedn/fedn/network/dashboard/static/dist/img/avatars/avatar-5.jpg similarity index 100% rename from fedn/fedn/clients/reducer/static/dist/img/avatars/avatar-5.jpg rename to fedn/fedn/network/dashboard/static/dist/img/avatars/avatar-5.jpg diff --git a/fedn/fedn/clients/reducer/static/dist/img/avatars/avatar.jpg b/fedn/fedn/network/dashboard/static/dist/img/avatars/avatar.jpg similarity index 100% rename from fedn/fedn/clients/reducer/static/dist/img/avatars/avatar.jpg rename to fedn/fedn/network/dashboard/static/dist/img/avatars/avatar.jpg diff --git a/fedn/fedn/clients/reducer/static/dist/img/brands/bootstrap.svg b/fedn/fedn/network/dashboard/static/dist/img/brands/bootstrap.svg similarity index 100% rename from fedn/fedn/clients/reducer/static/dist/img/brands/bootstrap.svg rename to fedn/fedn/network/dashboard/static/dist/img/brands/bootstrap.svg diff --git a/fedn/fedn/clients/reducer/static/dist/img/favicon.ico b/fedn/fedn/network/dashboard/static/dist/img/favicon.ico similarity index 100% rename from fedn/fedn/clients/reducer/static/dist/img/favicon.ico rename to fedn/fedn/network/dashboard/static/dist/img/favicon.ico diff --git a/fedn/fedn/clients/reducer/static/dist/img/flags/ad.png b/fedn/fedn/network/dashboard/static/dist/img/flags/ad.png similarity index 100% rename from fedn/fedn/clients/reducer/static/dist/img/flags/ad.png rename to fedn/fedn/network/dashboard/static/dist/img/flags/ad.png diff --git a/fedn/fedn/clients/reducer/static/dist/img/flags/ae.png b/fedn/fedn/network/dashboard/static/dist/img/flags/ae.png similarity index 100% rename from fedn/fedn/clients/reducer/static/dist/img/flags/ae.png rename to fedn/fedn/network/dashboard/static/dist/img/flags/ae.png diff --git a/fedn/fedn/clients/reducer/static/dist/img/flags/af.png b/fedn/fedn/network/dashboard/static/dist/img/flags/af.png similarity index 100% rename from fedn/fedn/clients/reducer/static/dist/img/flags/af.png rename to fedn/fedn/network/dashboard/static/dist/img/flags/af.png diff --git a/fedn/fedn/clients/reducer/static/dist/img/flags/ag.png b/fedn/fedn/network/dashboard/static/dist/img/flags/ag.png similarity index 100% rename from fedn/fedn/clients/reducer/static/dist/img/flags/ag.png rename to fedn/fedn/network/dashboard/static/dist/img/flags/ag.png diff --git a/fedn/fedn/clients/reducer/static/dist/img/flags/ai.png b/fedn/fedn/network/dashboard/static/dist/img/flags/ai.png similarity index 100% rename from fedn/fedn/clients/reducer/static/dist/img/flags/ai.png rename to fedn/fedn/network/dashboard/static/dist/img/flags/ai.png diff --git a/fedn/fedn/clients/reducer/static/dist/img/flags/al.png b/fedn/fedn/network/dashboard/static/dist/img/flags/al.png similarity index 100% rename from fedn/fedn/clients/reducer/static/dist/img/flags/al.png rename to fedn/fedn/network/dashboard/static/dist/img/flags/al.png diff --git a/fedn/fedn/clients/reducer/static/dist/img/flags/am.png b/fedn/fedn/network/dashboard/static/dist/img/flags/am.png similarity index 100% rename from fedn/fedn/clients/reducer/static/dist/img/flags/am.png rename to fedn/fedn/network/dashboard/static/dist/img/flags/am.png diff --git a/fedn/fedn/clients/reducer/static/dist/img/flags/an.png b/fedn/fedn/network/dashboard/static/dist/img/flags/an.png similarity index 100% rename from fedn/fedn/clients/reducer/static/dist/img/flags/an.png rename to fedn/fedn/network/dashboard/static/dist/img/flags/an.png diff --git a/fedn/fedn/clients/reducer/static/dist/img/flags/ao.png b/fedn/fedn/network/dashboard/static/dist/img/flags/ao.png similarity index 100% rename from fedn/fedn/clients/reducer/static/dist/img/flags/ao.png rename to fedn/fedn/network/dashboard/static/dist/img/flags/ao.png diff --git a/fedn/fedn/clients/reducer/static/dist/img/flags/aq.png b/fedn/fedn/network/dashboard/static/dist/img/flags/aq.png similarity index 100% rename from fedn/fedn/clients/reducer/static/dist/img/flags/aq.png rename to fedn/fedn/network/dashboard/static/dist/img/flags/aq.png diff --git a/fedn/fedn/clients/reducer/static/dist/img/flags/ar.png b/fedn/fedn/network/dashboard/static/dist/img/flags/ar.png similarity index 100% rename from fedn/fedn/clients/reducer/static/dist/img/flags/ar.png rename to fedn/fedn/network/dashboard/static/dist/img/flags/ar.png diff --git a/fedn/fedn/clients/reducer/static/dist/img/flags/as.png b/fedn/fedn/network/dashboard/static/dist/img/flags/as.png similarity index 100% rename from fedn/fedn/clients/reducer/static/dist/img/flags/as.png rename to fedn/fedn/network/dashboard/static/dist/img/flags/as.png diff --git a/fedn/fedn/clients/reducer/static/dist/img/flags/at.png b/fedn/fedn/network/dashboard/static/dist/img/flags/at.png similarity index 100% rename from fedn/fedn/clients/reducer/static/dist/img/flags/at.png rename to fedn/fedn/network/dashboard/static/dist/img/flags/at.png diff --git a/fedn/fedn/clients/reducer/static/dist/img/flags/au.png b/fedn/fedn/network/dashboard/static/dist/img/flags/au.png similarity index 100% rename from fedn/fedn/clients/reducer/static/dist/img/flags/au.png rename to fedn/fedn/network/dashboard/static/dist/img/flags/au.png diff --git a/fedn/fedn/clients/reducer/static/dist/img/flags/aw.png b/fedn/fedn/network/dashboard/static/dist/img/flags/aw.png similarity index 100% rename from fedn/fedn/clients/reducer/static/dist/img/flags/aw.png rename to fedn/fedn/network/dashboard/static/dist/img/flags/aw.png diff --git a/fedn/fedn/clients/reducer/static/dist/img/flags/ax.png b/fedn/fedn/network/dashboard/static/dist/img/flags/ax.png similarity index 100% rename from fedn/fedn/clients/reducer/static/dist/img/flags/ax.png rename to fedn/fedn/network/dashboard/static/dist/img/flags/ax.png diff --git a/fedn/fedn/clients/reducer/static/dist/img/flags/az.png b/fedn/fedn/network/dashboard/static/dist/img/flags/az.png similarity index 100% rename from fedn/fedn/clients/reducer/static/dist/img/flags/az.png rename to fedn/fedn/network/dashboard/static/dist/img/flags/az.png diff --git a/fedn/fedn/clients/reducer/static/dist/img/flags/ba.png b/fedn/fedn/network/dashboard/static/dist/img/flags/ba.png similarity index 100% rename from fedn/fedn/clients/reducer/static/dist/img/flags/ba.png rename to fedn/fedn/network/dashboard/static/dist/img/flags/ba.png diff --git a/fedn/fedn/clients/reducer/static/dist/img/flags/bb.png b/fedn/fedn/network/dashboard/static/dist/img/flags/bb.png similarity index 100% rename from fedn/fedn/clients/reducer/static/dist/img/flags/bb.png rename to fedn/fedn/network/dashboard/static/dist/img/flags/bb.png diff --git a/fedn/fedn/clients/reducer/static/dist/img/flags/bd.png b/fedn/fedn/network/dashboard/static/dist/img/flags/bd.png similarity index 100% rename from fedn/fedn/clients/reducer/static/dist/img/flags/bd.png rename to fedn/fedn/network/dashboard/static/dist/img/flags/bd.png diff --git a/fedn/fedn/clients/reducer/static/dist/img/flags/be.png b/fedn/fedn/network/dashboard/static/dist/img/flags/be.png similarity index 100% rename from fedn/fedn/clients/reducer/static/dist/img/flags/be.png rename to fedn/fedn/network/dashboard/static/dist/img/flags/be.png diff --git a/fedn/fedn/clients/reducer/static/dist/img/flags/bf.png b/fedn/fedn/network/dashboard/static/dist/img/flags/bf.png similarity index 100% rename from fedn/fedn/clients/reducer/static/dist/img/flags/bf.png rename to fedn/fedn/network/dashboard/static/dist/img/flags/bf.png diff --git a/fedn/fedn/clients/reducer/static/dist/img/flags/bg.png b/fedn/fedn/network/dashboard/static/dist/img/flags/bg.png similarity index 100% rename from fedn/fedn/clients/reducer/static/dist/img/flags/bg.png rename to fedn/fedn/network/dashboard/static/dist/img/flags/bg.png diff --git a/fedn/fedn/clients/reducer/static/dist/img/flags/bh.png b/fedn/fedn/network/dashboard/static/dist/img/flags/bh.png similarity index 100% rename from fedn/fedn/clients/reducer/static/dist/img/flags/bh.png rename to fedn/fedn/network/dashboard/static/dist/img/flags/bh.png diff --git a/fedn/fedn/clients/reducer/static/dist/img/flags/bi.png b/fedn/fedn/network/dashboard/static/dist/img/flags/bi.png similarity index 100% rename from fedn/fedn/clients/reducer/static/dist/img/flags/bi.png rename to fedn/fedn/network/dashboard/static/dist/img/flags/bi.png diff --git a/fedn/fedn/clients/reducer/static/dist/img/flags/bj.png b/fedn/fedn/network/dashboard/static/dist/img/flags/bj.png similarity index 100% rename from fedn/fedn/clients/reducer/static/dist/img/flags/bj.png rename to fedn/fedn/network/dashboard/static/dist/img/flags/bj.png diff --git a/fedn/fedn/clients/reducer/static/dist/img/flags/bl.png b/fedn/fedn/network/dashboard/static/dist/img/flags/bl.png similarity index 100% rename from fedn/fedn/clients/reducer/static/dist/img/flags/bl.png rename to fedn/fedn/network/dashboard/static/dist/img/flags/bl.png diff --git a/fedn/fedn/clients/reducer/static/dist/img/flags/bm.png b/fedn/fedn/network/dashboard/static/dist/img/flags/bm.png similarity index 100% rename from fedn/fedn/clients/reducer/static/dist/img/flags/bm.png rename to fedn/fedn/network/dashboard/static/dist/img/flags/bm.png diff --git a/fedn/fedn/clients/reducer/static/dist/img/flags/bn.png b/fedn/fedn/network/dashboard/static/dist/img/flags/bn.png similarity index 100% rename from fedn/fedn/clients/reducer/static/dist/img/flags/bn.png rename to fedn/fedn/network/dashboard/static/dist/img/flags/bn.png diff --git a/fedn/fedn/clients/reducer/static/dist/img/flags/bo.png b/fedn/fedn/network/dashboard/static/dist/img/flags/bo.png similarity index 100% rename from fedn/fedn/clients/reducer/static/dist/img/flags/bo.png rename to fedn/fedn/network/dashboard/static/dist/img/flags/bo.png diff --git a/fedn/fedn/clients/reducer/static/dist/img/flags/bq.png b/fedn/fedn/network/dashboard/static/dist/img/flags/bq.png similarity index 100% rename from fedn/fedn/clients/reducer/static/dist/img/flags/bq.png rename to fedn/fedn/network/dashboard/static/dist/img/flags/bq.png diff --git a/fedn/fedn/clients/reducer/static/dist/img/flags/br.png b/fedn/fedn/network/dashboard/static/dist/img/flags/br.png similarity index 100% rename from fedn/fedn/clients/reducer/static/dist/img/flags/br.png rename to fedn/fedn/network/dashboard/static/dist/img/flags/br.png diff --git a/fedn/fedn/clients/reducer/static/dist/img/flags/bs.png b/fedn/fedn/network/dashboard/static/dist/img/flags/bs.png similarity index 100% rename from fedn/fedn/clients/reducer/static/dist/img/flags/bs.png rename to fedn/fedn/network/dashboard/static/dist/img/flags/bs.png diff --git a/fedn/fedn/clients/reducer/static/dist/img/flags/bt.png b/fedn/fedn/network/dashboard/static/dist/img/flags/bt.png similarity index 100% rename from fedn/fedn/clients/reducer/static/dist/img/flags/bt.png rename to fedn/fedn/network/dashboard/static/dist/img/flags/bt.png diff --git a/fedn/fedn/clients/reducer/static/dist/img/flags/bv.png b/fedn/fedn/network/dashboard/static/dist/img/flags/bv.png similarity index 100% rename from fedn/fedn/clients/reducer/static/dist/img/flags/bv.png rename to fedn/fedn/network/dashboard/static/dist/img/flags/bv.png diff --git a/fedn/fedn/clients/reducer/static/dist/img/flags/bw.png b/fedn/fedn/network/dashboard/static/dist/img/flags/bw.png similarity index 100% rename from fedn/fedn/clients/reducer/static/dist/img/flags/bw.png rename to fedn/fedn/network/dashboard/static/dist/img/flags/bw.png diff --git a/fedn/fedn/clients/reducer/static/dist/img/flags/by.png b/fedn/fedn/network/dashboard/static/dist/img/flags/by.png similarity index 100% rename from fedn/fedn/clients/reducer/static/dist/img/flags/by.png rename to fedn/fedn/network/dashboard/static/dist/img/flags/by.png diff --git a/fedn/fedn/clients/reducer/static/dist/img/flags/bz.png b/fedn/fedn/network/dashboard/static/dist/img/flags/bz.png similarity index 100% rename from fedn/fedn/clients/reducer/static/dist/img/flags/bz.png rename to fedn/fedn/network/dashboard/static/dist/img/flags/bz.png diff --git a/fedn/fedn/clients/reducer/static/dist/img/flags/ca.png b/fedn/fedn/network/dashboard/static/dist/img/flags/ca.png similarity index 100% rename from fedn/fedn/clients/reducer/static/dist/img/flags/ca.png rename to fedn/fedn/network/dashboard/static/dist/img/flags/ca.png diff --git a/fedn/fedn/clients/reducer/static/dist/img/flags/cc.png b/fedn/fedn/network/dashboard/static/dist/img/flags/cc.png similarity index 100% rename from fedn/fedn/clients/reducer/static/dist/img/flags/cc.png rename to fedn/fedn/network/dashboard/static/dist/img/flags/cc.png diff --git a/fedn/fedn/clients/reducer/static/dist/img/flags/cd.png b/fedn/fedn/network/dashboard/static/dist/img/flags/cd.png similarity index 100% rename from fedn/fedn/clients/reducer/static/dist/img/flags/cd.png rename to fedn/fedn/network/dashboard/static/dist/img/flags/cd.png diff --git a/fedn/fedn/clients/reducer/static/dist/img/flags/cf.png b/fedn/fedn/network/dashboard/static/dist/img/flags/cf.png similarity index 100% rename from fedn/fedn/clients/reducer/static/dist/img/flags/cf.png rename to fedn/fedn/network/dashboard/static/dist/img/flags/cf.png diff --git a/fedn/fedn/clients/reducer/static/dist/img/flags/cg.png b/fedn/fedn/network/dashboard/static/dist/img/flags/cg.png similarity index 100% rename from fedn/fedn/clients/reducer/static/dist/img/flags/cg.png rename to fedn/fedn/network/dashboard/static/dist/img/flags/cg.png diff --git a/fedn/fedn/clients/reducer/static/dist/img/flags/ch.png b/fedn/fedn/network/dashboard/static/dist/img/flags/ch.png similarity index 100% rename from fedn/fedn/clients/reducer/static/dist/img/flags/ch.png rename to fedn/fedn/network/dashboard/static/dist/img/flags/ch.png diff --git a/fedn/fedn/clients/reducer/static/dist/img/flags/ci.png b/fedn/fedn/network/dashboard/static/dist/img/flags/ci.png similarity index 100% rename from fedn/fedn/clients/reducer/static/dist/img/flags/ci.png rename to fedn/fedn/network/dashboard/static/dist/img/flags/ci.png diff --git a/fedn/fedn/clients/reducer/static/dist/img/flags/ck.png b/fedn/fedn/network/dashboard/static/dist/img/flags/ck.png similarity index 100% rename from fedn/fedn/clients/reducer/static/dist/img/flags/ck.png rename to fedn/fedn/network/dashboard/static/dist/img/flags/ck.png diff --git a/fedn/fedn/clients/reducer/static/dist/img/flags/cl.png b/fedn/fedn/network/dashboard/static/dist/img/flags/cl.png similarity index 100% rename from fedn/fedn/clients/reducer/static/dist/img/flags/cl.png rename to fedn/fedn/network/dashboard/static/dist/img/flags/cl.png diff --git a/fedn/fedn/clients/reducer/static/dist/img/flags/cm.png b/fedn/fedn/network/dashboard/static/dist/img/flags/cm.png similarity index 100% rename from fedn/fedn/clients/reducer/static/dist/img/flags/cm.png rename to fedn/fedn/network/dashboard/static/dist/img/flags/cm.png diff --git a/fedn/fedn/clients/reducer/static/dist/img/flags/cn.png b/fedn/fedn/network/dashboard/static/dist/img/flags/cn.png similarity index 100% rename from fedn/fedn/clients/reducer/static/dist/img/flags/cn.png rename to fedn/fedn/network/dashboard/static/dist/img/flags/cn.png diff --git a/fedn/fedn/clients/reducer/static/dist/img/flags/co.png b/fedn/fedn/network/dashboard/static/dist/img/flags/co.png similarity index 100% rename from fedn/fedn/clients/reducer/static/dist/img/flags/co.png rename to fedn/fedn/network/dashboard/static/dist/img/flags/co.png diff --git a/fedn/fedn/clients/reducer/static/dist/img/flags/cr.png b/fedn/fedn/network/dashboard/static/dist/img/flags/cr.png similarity index 100% rename from fedn/fedn/clients/reducer/static/dist/img/flags/cr.png rename to fedn/fedn/network/dashboard/static/dist/img/flags/cr.png diff --git a/fedn/fedn/clients/reducer/static/dist/img/flags/cu.png b/fedn/fedn/network/dashboard/static/dist/img/flags/cu.png similarity index 100% rename from fedn/fedn/clients/reducer/static/dist/img/flags/cu.png rename to fedn/fedn/network/dashboard/static/dist/img/flags/cu.png diff --git a/fedn/fedn/clients/reducer/static/dist/img/flags/cv.png b/fedn/fedn/network/dashboard/static/dist/img/flags/cv.png similarity index 100% rename from fedn/fedn/clients/reducer/static/dist/img/flags/cv.png rename to fedn/fedn/network/dashboard/static/dist/img/flags/cv.png diff --git a/fedn/fedn/clients/reducer/static/dist/img/flags/cw.png b/fedn/fedn/network/dashboard/static/dist/img/flags/cw.png similarity index 100% rename from fedn/fedn/clients/reducer/static/dist/img/flags/cw.png rename to fedn/fedn/network/dashboard/static/dist/img/flags/cw.png diff --git a/fedn/fedn/clients/reducer/static/dist/img/flags/cx.png b/fedn/fedn/network/dashboard/static/dist/img/flags/cx.png similarity index 100% rename from fedn/fedn/clients/reducer/static/dist/img/flags/cx.png rename to fedn/fedn/network/dashboard/static/dist/img/flags/cx.png diff --git a/fedn/fedn/clients/reducer/static/dist/img/flags/cy.png b/fedn/fedn/network/dashboard/static/dist/img/flags/cy.png similarity index 100% rename from fedn/fedn/clients/reducer/static/dist/img/flags/cy.png rename to fedn/fedn/network/dashboard/static/dist/img/flags/cy.png diff --git a/fedn/fedn/clients/reducer/static/dist/img/flags/cz.png b/fedn/fedn/network/dashboard/static/dist/img/flags/cz.png similarity index 100% rename from fedn/fedn/clients/reducer/static/dist/img/flags/cz.png rename to fedn/fedn/network/dashboard/static/dist/img/flags/cz.png diff --git a/fedn/fedn/clients/reducer/static/dist/img/flags/de.png b/fedn/fedn/network/dashboard/static/dist/img/flags/de.png similarity index 100% rename from fedn/fedn/clients/reducer/static/dist/img/flags/de.png rename to fedn/fedn/network/dashboard/static/dist/img/flags/de.png diff --git a/fedn/fedn/clients/reducer/static/dist/img/flags/dj.png b/fedn/fedn/network/dashboard/static/dist/img/flags/dj.png similarity index 100% rename from fedn/fedn/clients/reducer/static/dist/img/flags/dj.png rename to fedn/fedn/network/dashboard/static/dist/img/flags/dj.png diff --git a/fedn/fedn/clients/reducer/static/dist/img/flags/dk.png b/fedn/fedn/network/dashboard/static/dist/img/flags/dk.png similarity index 100% rename from fedn/fedn/clients/reducer/static/dist/img/flags/dk.png rename to fedn/fedn/network/dashboard/static/dist/img/flags/dk.png diff --git a/fedn/fedn/clients/reducer/static/dist/img/flags/dm.png b/fedn/fedn/network/dashboard/static/dist/img/flags/dm.png similarity index 100% rename from fedn/fedn/clients/reducer/static/dist/img/flags/dm.png rename to fedn/fedn/network/dashboard/static/dist/img/flags/dm.png diff --git a/fedn/fedn/clients/reducer/static/dist/img/flags/do.png b/fedn/fedn/network/dashboard/static/dist/img/flags/do.png similarity index 100% rename from fedn/fedn/clients/reducer/static/dist/img/flags/do.png rename to fedn/fedn/network/dashboard/static/dist/img/flags/do.png diff --git a/fedn/fedn/clients/reducer/static/dist/img/flags/dz.png b/fedn/fedn/network/dashboard/static/dist/img/flags/dz.png similarity index 100% rename from fedn/fedn/clients/reducer/static/dist/img/flags/dz.png rename to fedn/fedn/network/dashboard/static/dist/img/flags/dz.png diff --git a/fedn/fedn/clients/reducer/static/dist/img/flags/ec.png b/fedn/fedn/network/dashboard/static/dist/img/flags/ec.png similarity index 100% rename from fedn/fedn/clients/reducer/static/dist/img/flags/ec.png rename to fedn/fedn/network/dashboard/static/dist/img/flags/ec.png diff --git a/fedn/fedn/clients/reducer/static/dist/img/flags/ee.png b/fedn/fedn/network/dashboard/static/dist/img/flags/ee.png similarity index 100% rename from fedn/fedn/clients/reducer/static/dist/img/flags/ee.png rename to fedn/fedn/network/dashboard/static/dist/img/flags/ee.png diff --git a/fedn/fedn/clients/reducer/static/dist/img/flags/eg.png b/fedn/fedn/network/dashboard/static/dist/img/flags/eg.png similarity index 100% rename from fedn/fedn/clients/reducer/static/dist/img/flags/eg.png rename to fedn/fedn/network/dashboard/static/dist/img/flags/eg.png diff --git a/fedn/fedn/clients/reducer/static/dist/img/flags/eh.png b/fedn/fedn/network/dashboard/static/dist/img/flags/eh.png similarity index 100% rename from fedn/fedn/clients/reducer/static/dist/img/flags/eh.png rename to fedn/fedn/network/dashboard/static/dist/img/flags/eh.png diff --git a/fedn/fedn/clients/reducer/static/dist/img/flags/er.png b/fedn/fedn/network/dashboard/static/dist/img/flags/er.png similarity index 100% rename from fedn/fedn/clients/reducer/static/dist/img/flags/er.png rename to fedn/fedn/network/dashboard/static/dist/img/flags/er.png diff --git a/fedn/fedn/clients/reducer/static/dist/img/flags/es.png b/fedn/fedn/network/dashboard/static/dist/img/flags/es.png similarity index 100% rename from fedn/fedn/clients/reducer/static/dist/img/flags/es.png rename to fedn/fedn/network/dashboard/static/dist/img/flags/es.png diff --git a/fedn/fedn/clients/reducer/static/dist/img/flags/et.png b/fedn/fedn/network/dashboard/static/dist/img/flags/et.png similarity index 100% rename from fedn/fedn/clients/reducer/static/dist/img/flags/et.png rename to fedn/fedn/network/dashboard/static/dist/img/flags/et.png diff --git a/fedn/fedn/clients/reducer/static/dist/img/flags/eu.png b/fedn/fedn/network/dashboard/static/dist/img/flags/eu.png similarity index 100% rename from fedn/fedn/clients/reducer/static/dist/img/flags/eu.png rename to fedn/fedn/network/dashboard/static/dist/img/flags/eu.png diff --git a/fedn/fedn/clients/reducer/static/dist/img/flags/fi.png b/fedn/fedn/network/dashboard/static/dist/img/flags/fi.png similarity index 100% rename from fedn/fedn/clients/reducer/static/dist/img/flags/fi.png rename to fedn/fedn/network/dashboard/static/dist/img/flags/fi.png diff --git a/fedn/fedn/clients/reducer/static/dist/img/flags/fj.png b/fedn/fedn/network/dashboard/static/dist/img/flags/fj.png similarity index 100% rename from fedn/fedn/clients/reducer/static/dist/img/flags/fj.png rename to fedn/fedn/network/dashboard/static/dist/img/flags/fj.png diff --git a/fedn/fedn/clients/reducer/static/dist/img/flags/fk.png b/fedn/fedn/network/dashboard/static/dist/img/flags/fk.png similarity index 100% rename from fedn/fedn/clients/reducer/static/dist/img/flags/fk.png rename to fedn/fedn/network/dashboard/static/dist/img/flags/fk.png diff --git a/fedn/fedn/clients/reducer/static/dist/img/flags/fm.png b/fedn/fedn/network/dashboard/static/dist/img/flags/fm.png similarity index 100% rename from fedn/fedn/clients/reducer/static/dist/img/flags/fm.png rename to fedn/fedn/network/dashboard/static/dist/img/flags/fm.png diff --git a/fedn/fedn/clients/reducer/static/dist/img/flags/fo.png b/fedn/fedn/network/dashboard/static/dist/img/flags/fo.png similarity index 100% rename from fedn/fedn/clients/reducer/static/dist/img/flags/fo.png rename to fedn/fedn/network/dashboard/static/dist/img/flags/fo.png diff --git a/fedn/fedn/clients/reducer/static/dist/img/flags/fr.png b/fedn/fedn/network/dashboard/static/dist/img/flags/fr.png similarity index 100% rename from fedn/fedn/clients/reducer/static/dist/img/flags/fr.png rename to fedn/fedn/network/dashboard/static/dist/img/flags/fr.png diff --git a/fedn/fedn/clients/reducer/static/dist/img/flags/ga.png b/fedn/fedn/network/dashboard/static/dist/img/flags/ga.png similarity index 100% rename from fedn/fedn/clients/reducer/static/dist/img/flags/ga.png rename to fedn/fedn/network/dashboard/static/dist/img/flags/ga.png diff --git a/fedn/fedn/clients/reducer/static/dist/img/flags/gb-eng.png b/fedn/fedn/network/dashboard/static/dist/img/flags/gb-eng.png similarity index 100% rename from fedn/fedn/clients/reducer/static/dist/img/flags/gb-eng.png rename to fedn/fedn/network/dashboard/static/dist/img/flags/gb-eng.png diff --git a/fedn/fedn/clients/reducer/static/dist/img/flags/gb-nir.png b/fedn/fedn/network/dashboard/static/dist/img/flags/gb-nir.png similarity index 100% rename from fedn/fedn/clients/reducer/static/dist/img/flags/gb-nir.png rename to fedn/fedn/network/dashboard/static/dist/img/flags/gb-nir.png diff --git a/fedn/fedn/clients/reducer/static/dist/img/flags/gb-sct.png b/fedn/fedn/network/dashboard/static/dist/img/flags/gb-sct.png similarity index 100% rename from fedn/fedn/clients/reducer/static/dist/img/flags/gb-sct.png rename to fedn/fedn/network/dashboard/static/dist/img/flags/gb-sct.png diff --git a/fedn/fedn/clients/reducer/static/dist/img/flags/gb-wls.png b/fedn/fedn/network/dashboard/static/dist/img/flags/gb-wls.png similarity index 100% rename from fedn/fedn/clients/reducer/static/dist/img/flags/gb-wls.png rename to fedn/fedn/network/dashboard/static/dist/img/flags/gb-wls.png diff --git a/fedn/fedn/clients/reducer/static/dist/img/flags/gb.png b/fedn/fedn/network/dashboard/static/dist/img/flags/gb.png similarity index 100% rename from fedn/fedn/clients/reducer/static/dist/img/flags/gb.png rename to fedn/fedn/network/dashboard/static/dist/img/flags/gb.png diff --git a/fedn/fedn/clients/reducer/static/dist/img/flags/gd.png b/fedn/fedn/network/dashboard/static/dist/img/flags/gd.png similarity index 100% rename from fedn/fedn/clients/reducer/static/dist/img/flags/gd.png rename to fedn/fedn/network/dashboard/static/dist/img/flags/gd.png diff --git a/fedn/fedn/clients/reducer/static/dist/img/flags/ge.png b/fedn/fedn/network/dashboard/static/dist/img/flags/ge.png similarity index 100% rename from fedn/fedn/clients/reducer/static/dist/img/flags/ge.png rename to fedn/fedn/network/dashboard/static/dist/img/flags/ge.png diff --git a/fedn/fedn/clients/reducer/static/dist/img/flags/gf.png b/fedn/fedn/network/dashboard/static/dist/img/flags/gf.png similarity index 100% rename from fedn/fedn/clients/reducer/static/dist/img/flags/gf.png rename to fedn/fedn/network/dashboard/static/dist/img/flags/gf.png diff --git a/fedn/fedn/clients/reducer/static/dist/img/flags/gg.png b/fedn/fedn/network/dashboard/static/dist/img/flags/gg.png similarity index 100% rename from fedn/fedn/clients/reducer/static/dist/img/flags/gg.png rename to fedn/fedn/network/dashboard/static/dist/img/flags/gg.png diff --git a/fedn/fedn/clients/reducer/static/dist/img/flags/gh.png b/fedn/fedn/network/dashboard/static/dist/img/flags/gh.png similarity index 100% rename from fedn/fedn/clients/reducer/static/dist/img/flags/gh.png rename to fedn/fedn/network/dashboard/static/dist/img/flags/gh.png diff --git a/fedn/fedn/clients/reducer/static/dist/img/flags/gi.png b/fedn/fedn/network/dashboard/static/dist/img/flags/gi.png similarity index 100% rename from fedn/fedn/clients/reducer/static/dist/img/flags/gi.png rename to fedn/fedn/network/dashboard/static/dist/img/flags/gi.png diff --git a/fedn/fedn/clients/reducer/static/dist/img/flags/gl.png b/fedn/fedn/network/dashboard/static/dist/img/flags/gl.png similarity index 100% rename from fedn/fedn/clients/reducer/static/dist/img/flags/gl.png rename to fedn/fedn/network/dashboard/static/dist/img/flags/gl.png diff --git a/fedn/fedn/clients/reducer/static/dist/img/flags/gm.png b/fedn/fedn/network/dashboard/static/dist/img/flags/gm.png similarity index 100% rename from fedn/fedn/clients/reducer/static/dist/img/flags/gm.png rename to fedn/fedn/network/dashboard/static/dist/img/flags/gm.png diff --git a/fedn/fedn/clients/reducer/static/dist/img/flags/gn.png b/fedn/fedn/network/dashboard/static/dist/img/flags/gn.png similarity index 100% rename from fedn/fedn/clients/reducer/static/dist/img/flags/gn.png rename to fedn/fedn/network/dashboard/static/dist/img/flags/gn.png diff --git a/fedn/fedn/clients/reducer/static/dist/img/flags/gp.png b/fedn/fedn/network/dashboard/static/dist/img/flags/gp.png similarity index 100% rename from fedn/fedn/clients/reducer/static/dist/img/flags/gp.png rename to fedn/fedn/network/dashboard/static/dist/img/flags/gp.png diff --git a/fedn/fedn/clients/reducer/static/dist/img/flags/gq.png b/fedn/fedn/network/dashboard/static/dist/img/flags/gq.png similarity index 100% rename from fedn/fedn/clients/reducer/static/dist/img/flags/gq.png rename to fedn/fedn/network/dashboard/static/dist/img/flags/gq.png diff --git a/fedn/fedn/clients/reducer/static/dist/img/flags/gr.png b/fedn/fedn/network/dashboard/static/dist/img/flags/gr.png similarity index 100% rename from fedn/fedn/clients/reducer/static/dist/img/flags/gr.png rename to fedn/fedn/network/dashboard/static/dist/img/flags/gr.png diff --git a/fedn/fedn/clients/reducer/static/dist/img/flags/gs.png b/fedn/fedn/network/dashboard/static/dist/img/flags/gs.png similarity index 100% rename from fedn/fedn/clients/reducer/static/dist/img/flags/gs.png rename to fedn/fedn/network/dashboard/static/dist/img/flags/gs.png diff --git a/fedn/fedn/clients/reducer/static/dist/img/flags/gt.png b/fedn/fedn/network/dashboard/static/dist/img/flags/gt.png similarity index 100% rename from fedn/fedn/clients/reducer/static/dist/img/flags/gt.png rename to fedn/fedn/network/dashboard/static/dist/img/flags/gt.png diff --git a/fedn/fedn/clients/reducer/static/dist/img/flags/gu.png b/fedn/fedn/network/dashboard/static/dist/img/flags/gu.png similarity index 100% rename from fedn/fedn/clients/reducer/static/dist/img/flags/gu.png rename to fedn/fedn/network/dashboard/static/dist/img/flags/gu.png diff --git a/fedn/fedn/clients/reducer/static/dist/img/flags/gw.png b/fedn/fedn/network/dashboard/static/dist/img/flags/gw.png similarity index 100% rename from fedn/fedn/clients/reducer/static/dist/img/flags/gw.png rename to fedn/fedn/network/dashboard/static/dist/img/flags/gw.png diff --git a/fedn/fedn/clients/reducer/static/dist/img/flags/gy.png b/fedn/fedn/network/dashboard/static/dist/img/flags/gy.png similarity index 100% rename from fedn/fedn/clients/reducer/static/dist/img/flags/gy.png rename to fedn/fedn/network/dashboard/static/dist/img/flags/gy.png diff --git a/fedn/fedn/clients/reducer/static/dist/img/flags/hk.png b/fedn/fedn/network/dashboard/static/dist/img/flags/hk.png similarity index 100% rename from fedn/fedn/clients/reducer/static/dist/img/flags/hk.png rename to fedn/fedn/network/dashboard/static/dist/img/flags/hk.png diff --git a/fedn/fedn/clients/reducer/static/dist/img/flags/hm.png b/fedn/fedn/network/dashboard/static/dist/img/flags/hm.png similarity index 100% rename from fedn/fedn/clients/reducer/static/dist/img/flags/hm.png rename to fedn/fedn/network/dashboard/static/dist/img/flags/hm.png diff --git a/fedn/fedn/clients/reducer/static/dist/img/flags/hn.png b/fedn/fedn/network/dashboard/static/dist/img/flags/hn.png similarity index 100% rename from fedn/fedn/clients/reducer/static/dist/img/flags/hn.png rename to fedn/fedn/network/dashboard/static/dist/img/flags/hn.png diff --git a/fedn/fedn/clients/reducer/static/dist/img/flags/hr.png b/fedn/fedn/network/dashboard/static/dist/img/flags/hr.png similarity index 100% rename from fedn/fedn/clients/reducer/static/dist/img/flags/hr.png rename to fedn/fedn/network/dashboard/static/dist/img/flags/hr.png diff --git a/fedn/fedn/clients/reducer/static/dist/img/flags/ht.png b/fedn/fedn/network/dashboard/static/dist/img/flags/ht.png similarity index 100% rename from fedn/fedn/clients/reducer/static/dist/img/flags/ht.png rename to fedn/fedn/network/dashboard/static/dist/img/flags/ht.png diff --git a/fedn/fedn/clients/reducer/static/dist/img/flags/hu.png b/fedn/fedn/network/dashboard/static/dist/img/flags/hu.png similarity index 100% rename from fedn/fedn/clients/reducer/static/dist/img/flags/hu.png rename to fedn/fedn/network/dashboard/static/dist/img/flags/hu.png diff --git a/fedn/fedn/clients/reducer/static/dist/img/flags/id.png b/fedn/fedn/network/dashboard/static/dist/img/flags/id.png similarity index 100% rename from fedn/fedn/clients/reducer/static/dist/img/flags/id.png rename to fedn/fedn/network/dashboard/static/dist/img/flags/id.png diff --git a/fedn/fedn/clients/reducer/static/dist/img/flags/ie.png b/fedn/fedn/network/dashboard/static/dist/img/flags/ie.png similarity index 100% rename from fedn/fedn/clients/reducer/static/dist/img/flags/ie.png rename to fedn/fedn/network/dashboard/static/dist/img/flags/ie.png diff --git a/fedn/fedn/clients/reducer/static/dist/img/flags/il.png b/fedn/fedn/network/dashboard/static/dist/img/flags/il.png similarity index 100% rename from fedn/fedn/clients/reducer/static/dist/img/flags/il.png rename to fedn/fedn/network/dashboard/static/dist/img/flags/il.png diff --git a/fedn/fedn/clients/reducer/static/dist/img/flags/im.png b/fedn/fedn/network/dashboard/static/dist/img/flags/im.png similarity index 100% rename from fedn/fedn/clients/reducer/static/dist/img/flags/im.png rename to fedn/fedn/network/dashboard/static/dist/img/flags/im.png diff --git a/fedn/fedn/clients/reducer/static/dist/img/flags/in.png b/fedn/fedn/network/dashboard/static/dist/img/flags/in.png similarity index 100% rename from fedn/fedn/clients/reducer/static/dist/img/flags/in.png rename to fedn/fedn/network/dashboard/static/dist/img/flags/in.png diff --git a/fedn/fedn/clients/reducer/static/dist/img/flags/io.png b/fedn/fedn/network/dashboard/static/dist/img/flags/io.png similarity index 100% rename from fedn/fedn/clients/reducer/static/dist/img/flags/io.png rename to fedn/fedn/network/dashboard/static/dist/img/flags/io.png diff --git a/fedn/fedn/clients/reducer/static/dist/img/flags/iq.png b/fedn/fedn/network/dashboard/static/dist/img/flags/iq.png similarity index 100% rename from fedn/fedn/clients/reducer/static/dist/img/flags/iq.png rename to fedn/fedn/network/dashboard/static/dist/img/flags/iq.png diff --git a/fedn/fedn/clients/reducer/static/dist/img/flags/ir.png b/fedn/fedn/network/dashboard/static/dist/img/flags/ir.png similarity index 100% rename from fedn/fedn/clients/reducer/static/dist/img/flags/ir.png rename to fedn/fedn/network/dashboard/static/dist/img/flags/ir.png diff --git a/fedn/fedn/clients/reducer/static/dist/img/flags/is.png b/fedn/fedn/network/dashboard/static/dist/img/flags/is.png similarity index 100% rename from fedn/fedn/clients/reducer/static/dist/img/flags/is.png rename to fedn/fedn/network/dashboard/static/dist/img/flags/is.png diff --git a/fedn/fedn/clients/reducer/static/dist/img/flags/it.png b/fedn/fedn/network/dashboard/static/dist/img/flags/it.png similarity index 100% rename from fedn/fedn/clients/reducer/static/dist/img/flags/it.png rename to fedn/fedn/network/dashboard/static/dist/img/flags/it.png diff --git a/fedn/fedn/clients/reducer/static/dist/img/flags/je.png b/fedn/fedn/network/dashboard/static/dist/img/flags/je.png similarity index 100% rename from fedn/fedn/clients/reducer/static/dist/img/flags/je.png rename to fedn/fedn/network/dashboard/static/dist/img/flags/je.png diff --git a/fedn/fedn/clients/reducer/static/dist/img/flags/jm.png b/fedn/fedn/network/dashboard/static/dist/img/flags/jm.png similarity index 100% rename from fedn/fedn/clients/reducer/static/dist/img/flags/jm.png rename to fedn/fedn/network/dashboard/static/dist/img/flags/jm.png diff --git a/fedn/fedn/clients/reducer/static/dist/img/flags/jo.png b/fedn/fedn/network/dashboard/static/dist/img/flags/jo.png similarity index 100% rename from fedn/fedn/clients/reducer/static/dist/img/flags/jo.png rename to fedn/fedn/network/dashboard/static/dist/img/flags/jo.png diff --git a/fedn/fedn/clients/reducer/static/dist/img/flags/jp.png b/fedn/fedn/network/dashboard/static/dist/img/flags/jp.png similarity index 100% rename from fedn/fedn/clients/reducer/static/dist/img/flags/jp.png rename to fedn/fedn/network/dashboard/static/dist/img/flags/jp.png diff --git a/fedn/fedn/clients/reducer/static/dist/img/flags/ke.png b/fedn/fedn/network/dashboard/static/dist/img/flags/ke.png similarity index 100% rename from fedn/fedn/clients/reducer/static/dist/img/flags/ke.png rename to fedn/fedn/network/dashboard/static/dist/img/flags/ke.png diff --git a/fedn/fedn/clients/reducer/static/dist/img/flags/kg.png b/fedn/fedn/network/dashboard/static/dist/img/flags/kg.png similarity index 100% rename from fedn/fedn/clients/reducer/static/dist/img/flags/kg.png rename to fedn/fedn/network/dashboard/static/dist/img/flags/kg.png diff --git a/fedn/fedn/clients/reducer/static/dist/img/flags/kh.png b/fedn/fedn/network/dashboard/static/dist/img/flags/kh.png similarity index 100% rename from fedn/fedn/clients/reducer/static/dist/img/flags/kh.png rename to fedn/fedn/network/dashboard/static/dist/img/flags/kh.png diff --git a/fedn/fedn/clients/reducer/static/dist/img/flags/ki.png b/fedn/fedn/network/dashboard/static/dist/img/flags/ki.png similarity index 100% rename from fedn/fedn/clients/reducer/static/dist/img/flags/ki.png rename to fedn/fedn/network/dashboard/static/dist/img/flags/ki.png diff --git a/fedn/fedn/clients/reducer/static/dist/img/flags/km.png b/fedn/fedn/network/dashboard/static/dist/img/flags/km.png similarity index 100% rename from fedn/fedn/clients/reducer/static/dist/img/flags/km.png rename to fedn/fedn/network/dashboard/static/dist/img/flags/km.png diff --git a/fedn/fedn/clients/reducer/static/dist/img/flags/kn.png b/fedn/fedn/network/dashboard/static/dist/img/flags/kn.png similarity index 100% rename from fedn/fedn/clients/reducer/static/dist/img/flags/kn.png rename to fedn/fedn/network/dashboard/static/dist/img/flags/kn.png diff --git a/fedn/fedn/clients/reducer/static/dist/img/flags/kp.png b/fedn/fedn/network/dashboard/static/dist/img/flags/kp.png similarity index 100% rename from fedn/fedn/clients/reducer/static/dist/img/flags/kp.png rename to fedn/fedn/network/dashboard/static/dist/img/flags/kp.png diff --git a/fedn/fedn/clients/reducer/static/dist/img/flags/kr.png b/fedn/fedn/network/dashboard/static/dist/img/flags/kr.png similarity index 100% rename from fedn/fedn/clients/reducer/static/dist/img/flags/kr.png rename to fedn/fedn/network/dashboard/static/dist/img/flags/kr.png diff --git a/fedn/fedn/clients/reducer/static/dist/img/flags/kw.png b/fedn/fedn/network/dashboard/static/dist/img/flags/kw.png similarity index 100% rename from fedn/fedn/clients/reducer/static/dist/img/flags/kw.png rename to fedn/fedn/network/dashboard/static/dist/img/flags/kw.png diff --git a/fedn/fedn/clients/reducer/static/dist/img/flags/ky.png b/fedn/fedn/network/dashboard/static/dist/img/flags/ky.png similarity index 100% rename from fedn/fedn/clients/reducer/static/dist/img/flags/ky.png rename to fedn/fedn/network/dashboard/static/dist/img/flags/ky.png diff --git a/fedn/fedn/clients/reducer/static/dist/img/flags/kz.png b/fedn/fedn/network/dashboard/static/dist/img/flags/kz.png similarity index 100% rename from fedn/fedn/clients/reducer/static/dist/img/flags/kz.png rename to fedn/fedn/network/dashboard/static/dist/img/flags/kz.png diff --git a/fedn/fedn/clients/reducer/static/dist/img/flags/la.png b/fedn/fedn/network/dashboard/static/dist/img/flags/la.png similarity index 100% rename from fedn/fedn/clients/reducer/static/dist/img/flags/la.png rename to fedn/fedn/network/dashboard/static/dist/img/flags/la.png diff --git a/fedn/fedn/clients/reducer/static/dist/img/flags/lb.png b/fedn/fedn/network/dashboard/static/dist/img/flags/lb.png similarity index 100% rename from fedn/fedn/clients/reducer/static/dist/img/flags/lb.png rename to fedn/fedn/network/dashboard/static/dist/img/flags/lb.png diff --git a/fedn/fedn/clients/reducer/static/dist/img/flags/lc.png b/fedn/fedn/network/dashboard/static/dist/img/flags/lc.png similarity index 100% rename from fedn/fedn/clients/reducer/static/dist/img/flags/lc.png rename to fedn/fedn/network/dashboard/static/dist/img/flags/lc.png diff --git a/fedn/fedn/clients/reducer/static/dist/img/flags/li.png b/fedn/fedn/network/dashboard/static/dist/img/flags/li.png similarity index 100% rename from fedn/fedn/clients/reducer/static/dist/img/flags/li.png rename to fedn/fedn/network/dashboard/static/dist/img/flags/li.png diff --git a/fedn/fedn/clients/reducer/static/dist/img/flags/lk.png b/fedn/fedn/network/dashboard/static/dist/img/flags/lk.png similarity index 100% rename from fedn/fedn/clients/reducer/static/dist/img/flags/lk.png rename to fedn/fedn/network/dashboard/static/dist/img/flags/lk.png diff --git a/fedn/fedn/clients/reducer/static/dist/img/flags/lr.png b/fedn/fedn/network/dashboard/static/dist/img/flags/lr.png similarity index 100% rename from fedn/fedn/clients/reducer/static/dist/img/flags/lr.png rename to fedn/fedn/network/dashboard/static/dist/img/flags/lr.png diff --git a/fedn/fedn/clients/reducer/static/dist/img/flags/ls.png b/fedn/fedn/network/dashboard/static/dist/img/flags/ls.png similarity index 100% rename from fedn/fedn/clients/reducer/static/dist/img/flags/ls.png rename to fedn/fedn/network/dashboard/static/dist/img/flags/ls.png diff --git a/fedn/fedn/clients/reducer/static/dist/img/flags/lt.png b/fedn/fedn/network/dashboard/static/dist/img/flags/lt.png similarity index 100% rename from fedn/fedn/clients/reducer/static/dist/img/flags/lt.png rename to fedn/fedn/network/dashboard/static/dist/img/flags/lt.png diff --git a/fedn/fedn/clients/reducer/static/dist/img/flags/lu.png b/fedn/fedn/network/dashboard/static/dist/img/flags/lu.png similarity index 100% rename from fedn/fedn/clients/reducer/static/dist/img/flags/lu.png rename to fedn/fedn/network/dashboard/static/dist/img/flags/lu.png diff --git a/fedn/fedn/clients/reducer/static/dist/img/flags/lv.png b/fedn/fedn/network/dashboard/static/dist/img/flags/lv.png similarity index 100% rename from fedn/fedn/clients/reducer/static/dist/img/flags/lv.png rename to fedn/fedn/network/dashboard/static/dist/img/flags/lv.png diff --git a/fedn/fedn/clients/reducer/static/dist/img/flags/ly.png b/fedn/fedn/network/dashboard/static/dist/img/flags/ly.png similarity index 100% rename from fedn/fedn/clients/reducer/static/dist/img/flags/ly.png rename to fedn/fedn/network/dashboard/static/dist/img/flags/ly.png diff --git a/fedn/fedn/clients/reducer/static/dist/img/flags/ma.png b/fedn/fedn/network/dashboard/static/dist/img/flags/ma.png similarity index 100% rename from fedn/fedn/clients/reducer/static/dist/img/flags/ma.png rename to fedn/fedn/network/dashboard/static/dist/img/flags/ma.png diff --git a/fedn/fedn/clients/reducer/static/dist/img/flags/mc.png b/fedn/fedn/network/dashboard/static/dist/img/flags/mc.png similarity index 100% rename from fedn/fedn/clients/reducer/static/dist/img/flags/mc.png rename to fedn/fedn/network/dashboard/static/dist/img/flags/mc.png diff --git a/fedn/fedn/clients/reducer/static/dist/img/flags/md.png b/fedn/fedn/network/dashboard/static/dist/img/flags/md.png similarity index 100% rename from fedn/fedn/clients/reducer/static/dist/img/flags/md.png rename to fedn/fedn/network/dashboard/static/dist/img/flags/md.png diff --git a/fedn/fedn/clients/reducer/static/dist/img/flags/me.png b/fedn/fedn/network/dashboard/static/dist/img/flags/me.png similarity index 100% rename from fedn/fedn/clients/reducer/static/dist/img/flags/me.png rename to fedn/fedn/network/dashboard/static/dist/img/flags/me.png diff --git a/fedn/fedn/clients/reducer/static/dist/img/flags/mf.png b/fedn/fedn/network/dashboard/static/dist/img/flags/mf.png similarity index 100% rename from fedn/fedn/clients/reducer/static/dist/img/flags/mf.png rename to fedn/fedn/network/dashboard/static/dist/img/flags/mf.png diff --git a/fedn/fedn/clients/reducer/static/dist/img/flags/mg.png b/fedn/fedn/network/dashboard/static/dist/img/flags/mg.png similarity index 100% rename from fedn/fedn/clients/reducer/static/dist/img/flags/mg.png rename to fedn/fedn/network/dashboard/static/dist/img/flags/mg.png diff --git a/fedn/fedn/clients/reducer/static/dist/img/flags/mh.png b/fedn/fedn/network/dashboard/static/dist/img/flags/mh.png similarity index 100% rename from fedn/fedn/clients/reducer/static/dist/img/flags/mh.png rename to fedn/fedn/network/dashboard/static/dist/img/flags/mh.png diff --git a/fedn/fedn/clients/reducer/static/dist/img/flags/mk.png b/fedn/fedn/network/dashboard/static/dist/img/flags/mk.png similarity index 100% rename from fedn/fedn/clients/reducer/static/dist/img/flags/mk.png rename to fedn/fedn/network/dashboard/static/dist/img/flags/mk.png diff --git a/fedn/fedn/clients/reducer/static/dist/img/flags/ml.png b/fedn/fedn/network/dashboard/static/dist/img/flags/ml.png similarity index 100% rename from fedn/fedn/clients/reducer/static/dist/img/flags/ml.png rename to fedn/fedn/network/dashboard/static/dist/img/flags/ml.png diff --git a/fedn/fedn/clients/reducer/static/dist/img/flags/mm.png b/fedn/fedn/network/dashboard/static/dist/img/flags/mm.png similarity index 100% rename from fedn/fedn/clients/reducer/static/dist/img/flags/mm.png rename to fedn/fedn/network/dashboard/static/dist/img/flags/mm.png diff --git a/fedn/fedn/clients/reducer/static/dist/img/flags/mn.png b/fedn/fedn/network/dashboard/static/dist/img/flags/mn.png similarity index 100% rename from fedn/fedn/clients/reducer/static/dist/img/flags/mn.png rename to fedn/fedn/network/dashboard/static/dist/img/flags/mn.png diff --git a/fedn/fedn/clients/reducer/static/dist/img/flags/mo.png b/fedn/fedn/network/dashboard/static/dist/img/flags/mo.png similarity index 100% rename from fedn/fedn/clients/reducer/static/dist/img/flags/mo.png rename to fedn/fedn/network/dashboard/static/dist/img/flags/mo.png diff --git a/fedn/fedn/clients/reducer/static/dist/img/flags/mp.png b/fedn/fedn/network/dashboard/static/dist/img/flags/mp.png similarity index 100% rename from fedn/fedn/clients/reducer/static/dist/img/flags/mp.png rename to fedn/fedn/network/dashboard/static/dist/img/flags/mp.png diff --git a/fedn/fedn/clients/reducer/static/dist/img/flags/mq.png b/fedn/fedn/network/dashboard/static/dist/img/flags/mq.png similarity index 100% rename from fedn/fedn/clients/reducer/static/dist/img/flags/mq.png rename to fedn/fedn/network/dashboard/static/dist/img/flags/mq.png diff --git a/fedn/fedn/clients/reducer/static/dist/img/flags/mr.png b/fedn/fedn/network/dashboard/static/dist/img/flags/mr.png similarity index 100% rename from fedn/fedn/clients/reducer/static/dist/img/flags/mr.png rename to fedn/fedn/network/dashboard/static/dist/img/flags/mr.png diff --git a/fedn/fedn/clients/reducer/static/dist/img/flags/ms.png b/fedn/fedn/network/dashboard/static/dist/img/flags/ms.png similarity index 100% rename from fedn/fedn/clients/reducer/static/dist/img/flags/ms.png rename to fedn/fedn/network/dashboard/static/dist/img/flags/ms.png diff --git a/fedn/fedn/clients/reducer/static/dist/img/flags/mt.png b/fedn/fedn/network/dashboard/static/dist/img/flags/mt.png similarity index 100% rename from fedn/fedn/clients/reducer/static/dist/img/flags/mt.png rename to fedn/fedn/network/dashboard/static/dist/img/flags/mt.png diff --git a/fedn/fedn/clients/reducer/static/dist/img/flags/mu.png b/fedn/fedn/network/dashboard/static/dist/img/flags/mu.png similarity index 100% rename from fedn/fedn/clients/reducer/static/dist/img/flags/mu.png rename to fedn/fedn/network/dashboard/static/dist/img/flags/mu.png diff --git a/fedn/fedn/clients/reducer/static/dist/img/flags/mv.png b/fedn/fedn/network/dashboard/static/dist/img/flags/mv.png similarity index 100% rename from fedn/fedn/clients/reducer/static/dist/img/flags/mv.png rename to fedn/fedn/network/dashboard/static/dist/img/flags/mv.png diff --git a/fedn/fedn/clients/reducer/static/dist/img/flags/mw.png b/fedn/fedn/network/dashboard/static/dist/img/flags/mw.png similarity index 100% rename from fedn/fedn/clients/reducer/static/dist/img/flags/mw.png rename to fedn/fedn/network/dashboard/static/dist/img/flags/mw.png diff --git a/fedn/fedn/clients/reducer/static/dist/img/flags/mx.png b/fedn/fedn/network/dashboard/static/dist/img/flags/mx.png similarity index 100% rename from fedn/fedn/clients/reducer/static/dist/img/flags/mx.png rename to fedn/fedn/network/dashboard/static/dist/img/flags/mx.png diff --git a/fedn/fedn/clients/reducer/static/dist/img/flags/my.png b/fedn/fedn/network/dashboard/static/dist/img/flags/my.png similarity index 100% rename from fedn/fedn/clients/reducer/static/dist/img/flags/my.png rename to fedn/fedn/network/dashboard/static/dist/img/flags/my.png diff --git a/fedn/fedn/clients/reducer/static/dist/img/flags/mz.png b/fedn/fedn/network/dashboard/static/dist/img/flags/mz.png similarity index 100% rename from fedn/fedn/clients/reducer/static/dist/img/flags/mz.png rename to fedn/fedn/network/dashboard/static/dist/img/flags/mz.png diff --git a/fedn/fedn/clients/reducer/static/dist/img/flags/na.png b/fedn/fedn/network/dashboard/static/dist/img/flags/na.png similarity index 100% rename from fedn/fedn/clients/reducer/static/dist/img/flags/na.png rename to fedn/fedn/network/dashboard/static/dist/img/flags/na.png diff --git a/fedn/fedn/clients/reducer/static/dist/img/flags/nc.png b/fedn/fedn/network/dashboard/static/dist/img/flags/nc.png similarity index 100% rename from fedn/fedn/clients/reducer/static/dist/img/flags/nc.png rename to fedn/fedn/network/dashboard/static/dist/img/flags/nc.png diff --git a/fedn/fedn/clients/reducer/static/dist/img/flags/ne.png b/fedn/fedn/network/dashboard/static/dist/img/flags/ne.png similarity index 100% rename from fedn/fedn/clients/reducer/static/dist/img/flags/ne.png rename to fedn/fedn/network/dashboard/static/dist/img/flags/ne.png diff --git a/fedn/fedn/clients/reducer/static/dist/img/flags/nf.png b/fedn/fedn/network/dashboard/static/dist/img/flags/nf.png similarity index 100% rename from fedn/fedn/clients/reducer/static/dist/img/flags/nf.png rename to fedn/fedn/network/dashboard/static/dist/img/flags/nf.png diff --git a/fedn/fedn/clients/reducer/static/dist/img/flags/ng.png b/fedn/fedn/network/dashboard/static/dist/img/flags/ng.png similarity index 100% rename from fedn/fedn/clients/reducer/static/dist/img/flags/ng.png rename to fedn/fedn/network/dashboard/static/dist/img/flags/ng.png diff --git a/fedn/fedn/clients/reducer/static/dist/img/flags/ni.png b/fedn/fedn/network/dashboard/static/dist/img/flags/ni.png similarity index 100% rename from fedn/fedn/clients/reducer/static/dist/img/flags/ni.png rename to fedn/fedn/network/dashboard/static/dist/img/flags/ni.png diff --git a/fedn/fedn/clients/reducer/static/dist/img/flags/nl.png b/fedn/fedn/network/dashboard/static/dist/img/flags/nl.png similarity index 100% rename from fedn/fedn/clients/reducer/static/dist/img/flags/nl.png rename to fedn/fedn/network/dashboard/static/dist/img/flags/nl.png diff --git a/fedn/fedn/clients/reducer/static/dist/img/flags/no.png b/fedn/fedn/network/dashboard/static/dist/img/flags/no.png similarity index 100% rename from fedn/fedn/clients/reducer/static/dist/img/flags/no.png rename to fedn/fedn/network/dashboard/static/dist/img/flags/no.png diff --git a/fedn/fedn/clients/reducer/static/dist/img/flags/np.png b/fedn/fedn/network/dashboard/static/dist/img/flags/np.png similarity index 100% rename from fedn/fedn/clients/reducer/static/dist/img/flags/np.png rename to fedn/fedn/network/dashboard/static/dist/img/flags/np.png diff --git a/fedn/fedn/clients/reducer/static/dist/img/flags/nr.png b/fedn/fedn/network/dashboard/static/dist/img/flags/nr.png similarity index 100% rename from fedn/fedn/clients/reducer/static/dist/img/flags/nr.png rename to fedn/fedn/network/dashboard/static/dist/img/flags/nr.png diff --git a/fedn/fedn/clients/reducer/static/dist/img/flags/nu.png b/fedn/fedn/network/dashboard/static/dist/img/flags/nu.png similarity index 100% rename from fedn/fedn/clients/reducer/static/dist/img/flags/nu.png rename to fedn/fedn/network/dashboard/static/dist/img/flags/nu.png diff --git a/fedn/fedn/clients/reducer/static/dist/img/flags/nz.png b/fedn/fedn/network/dashboard/static/dist/img/flags/nz.png similarity index 100% rename from fedn/fedn/clients/reducer/static/dist/img/flags/nz.png rename to fedn/fedn/network/dashboard/static/dist/img/flags/nz.png diff --git a/fedn/fedn/clients/reducer/static/dist/img/flags/om.png b/fedn/fedn/network/dashboard/static/dist/img/flags/om.png similarity index 100% rename from fedn/fedn/clients/reducer/static/dist/img/flags/om.png rename to fedn/fedn/network/dashboard/static/dist/img/flags/om.png diff --git a/fedn/fedn/clients/reducer/static/dist/img/flags/pa.png b/fedn/fedn/network/dashboard/static/dist/img/flags/pa.png similarity index 100% rename from fedn/fedn/clients/reducer/static/dist/img/flags/pa.png rename to fedn/fedn/network/dashboard/static/dist/img/flags/pa.png diff --git a/fedn/fedn/clients/reducer/static/dist/img/flags/pe.png b/fedn/fedn/network/dashboard/static/dist/img/flags/pe.png similarity index 100% rename from fedn/fedn/clients/reducer/static/dist/img/flags/pe.png rename to fedn/fedn/network/dashboard/static/dist/img/flags/pe.png diff --git a/fedn/fedn/clients/reducer/static/dist/img/flags/pf.png b/fedn/fedn/network/dashboard/static/dist/img/flags/pf.png similarity index 100% rename from fedn/fedn/clients/reducer/static/dist/img/flags/pf.png rename to fedn/fedn/network/dashboard/static/dist/img/flags/pf.png diff --git a/fedn/fedn/clients/reducer/static/dist/img/flags/pg.png b/fedn/fedn/network/dashboard/static/dist/img/flags/pg.png similarity index 100% rename from fedn/fedn/clients/reducer/static/dist/img/flags/pg.png rename to fedn/fedn/network/dashboard/static/dist/img/flags/pg.png diff --git a/fedn/fedn/clients/reducer/static/dist/img/flags/ph.png b/fedn/fedn/network/dashboard/static/dist/img/flags/ph.png similarity index 100% rename from fedn/fedn/clients/reducer/static/dist/img/flags/ph.png rename to fedn/fedn/network/dashboard/static/dist/img/flags/ph.png diff --git a/fedn/fedn/clients/reducer/static/dist/img/flags/pk.png b/fedn/fedn/network/dashboard/static/dist/img/flags/pk.png similarity index 100% rename from fedn/fedn/clients/reducer/static/dist/img/flags/pk.png rename to fedn/fedn/network/dashboard/static/dist/img/flags/pk.png diff --git a/fedn/fedn/clients/reducer/static/dist/img/flags/pl.png b/fedn/fedn/network/dashboard/static/dist/img/flags/pl.png similarity index 100% rename from fedn/fedn/clients/reducer/static/dist/img/flags/pl.png rename to fedn/fedn/network/dashboard/static/dist/img/flags/pl.png diff --git a/fedn/fedn/clients/reducer/static/dist/img/flags/pm.png b/fedn/fedn/network/dashboard/static/dist/img/flags/pm.png similarity index 100% rename from fedn/fedn/clients/reducer/static/dist/img/flags/pm.png rename to fedn/fedn/network/dashboard/static/dist/img/flags/pm.png diff --git a/fedn/fedn/clients/reducer/static/dist/img/flags/pn.png b/fedn/fedn/network/dashboard/static/dist/img/flags/pn.png similarity index 100% rename from fedn/fedn/clients/reducer/static/dist/img/flags/pn.png rename to fedn/fedn/network/dashboard/static/dist/img/flags/pn.png diff --git a/fedn/fedn/clients/reducer/static/dist/img/flags/pr.png b/fedn/fedn/network/dashboard/static/dist/img/flags/pr.png similarity index 100% rename from fedn/fedn/clients/reducer/static/dist/img/flags/pr.png rename to fedn/fedn/network/dashboard/static/dist/img/flags/pr.png diff --git a/fedn/fedn/clients/reducer/static/dist/img/flags/ps.png b/fedn/fedn/network/dashboard/static/dist/img/flags/ps.png similarity index 100% rename from fedn/fedn/clients/reducer/static/dist/img/flags/ps.png rename to fedn/fedn/network/dashboard/static/dist/img/flags/ps.png diff --git a/fedn/fedn/clients/reducer/static/dist/img/flags/pt.png b/fedn/fedn/network/dashboard/static/dist/img/flags/pt.png similarity index 100% rename from fedn/fedn/clients/reducer/static/dist/img/flags/pt.png rename to fedn/fedn/network/dashboard/static/dist/img/flags/pt.png diff --git a/fedn/fedn/clients/reducer/static/dist/img/flags/pw.png b/fedn/fedn/network/dashboard/static/dist/img/flags/pw.png similarity index 100% rename from fedn/fedn/clients/reducer/static/dist/img/flags/pw.png rename to fedn/fedn/network/dashboard/static/dist/img/flags/pw.png diff --git a/fedn/fedn/clients/reducer/static/dist/img/flags/py.png b/fedn/fedn/network/dashboard/static/dist/img/flags/py.png similarity index 100% rename from fedn/fedn/clients/reducer/static/dist/img/flags/py.png rename to fedn/fedn/network/dashboard/static/dist/img/flags/py.png diff --git a/fedn/fedn/clients/reducer/static/dist/img/flags/qa.png b/fedn/fedn/network/dashboard/static/dist/img/flags/qa.png similarity index 100% rename from fedn/fedn/clients/reducer/static/dist/img/flags/qa.png rename to fedn/fedn/network/dashboard/static/dist/img/flags/qa.png diff --git a/fedn/fedn/clients/reducer/static/dist/img/flags/re.png b/fedn/fedn/network/dashboard/static/dist/img/flags/re.png similarity index 100% rename from fedn/fedn/clients/reducer/static/dist/img/flags/re.png rename to fedn/fedn/network/dashboard/static/dist/img/flags/re.png diff --git a/fedn/fedn/clients/reducer/static/dist/img/flags/ro.png b/fedn/fedn/network/dashboard/static/dist/img/flags/ro.png similarity index 100% rename from fedn/fedn/clients/reducer/static/dist/img/flags/ro.png rename to fedn/fedn/network/dashboard/static/dist/img/flags/ro.png diff --git a/fedn/fedn/clients/reducer/static/dist/img/flags/rs.png b/fedn/fedn/network/dashboard/static/dist/img/flags/rs.png similarity index 100% rename from fedn/fedn/clients/reducer/static/dist/img/flags/rs.png rename to fedn/fedn/network/dashboard/static/dist/img/flags/rs.png diff --git a/fedn/fedn/clients/reducer/static/dist/img/flags/ru.png b/fedn/fedn/network/dashboard/static/dist/img/flags/ru.png similarity index 100% rename from fedn/fedn/clients/reducer/static/dist/img/flags/ru.png rename to fedn/fedn/network/dashboard/static/dist/img/flags/ru.png diff --git a/fedn/fedn/clients/reducer/static/dist/img/flags/rw.png b/fedn/fedn/network/dashboard/static/dist/img/flags/rw.png similarity index 100% rename from fedn/fedn/clients/reducer/static/dist/img/flags/rw.png rename to fedn/fedn/network/dashboard/static/dist/img/flags/rw.png diff --git a/fedn/fedn/clients/reducer/static/dist/img/flags/sa.png b/fedn/fedn/network/dashboard/static/dist/img/flags/sa.png similarity index 100% rename from fedn/fedn/clients/reducer/static/dist/img/flags/sa.png rename to fedn/fedn/network/dashboard/static/dist/img/flags/sa.png diff --git a/fedn/fedn/clients/reducer/static/dist/img/flags/sb.png b/fedn/fedn/network/dashboard/static/dist/img/flags/sb.png similarity index 100% rename from fedn/fedn/clients/reducer/static/dist/img/flags/sb.png rename to fedn/fedn/network/dashboard/static/dist/img/flags/sb.png diff --git a/fedn/fedn/clients/reducer/static/dist/img/flags/sc.png b/fedn/fedn/network/dashboard/static/dist/img/flags/sc.png similarity index 100% rename from fedn/fedn/clients/reducer/static/dist/img/flags/sc.png rename to fedn/fedn/network/dashboard/static/dist/img/flags/sc.png diff --git a/fedn/fedn/clients/reducer/static/dist/img/flags/sd.png b/fedn/fedn/network/dashboard/static/dist/img/flags/sd.png similarity index 100% rename from fedn/fedn/clients/reducer/static/dist/img/flags/sd.png rename to fedn/fedn/network/dashboard/static/dist/img/flags/sd.png diff --git a/fedn/fedn/clients/reducer/static/dist/img/flags/se.png b/fedn/fedn/network/dashboard/static/dist/img/flags/se.png similarity index 100% rename from fedn/fedn/clients/reducer/static/dist/img/flags/se.png rename to fedn/fedn/network/dashboard/static/dist/img/flags/se.png diff --git a/fedn/fedn/clients/reducer/static/dist/img/flags/sg.png b/fedn/fedn/network/dashboard/static/dist/img/flags/sg.png similarity index 100% rename from fedn/fedn/clients/reducer/static/dist/img/flags/sg.png rename to fedn/fedn/network/dashboard/static/dist/img/flags/sg.png diff --git a/fedn/fedn/clients/reducer/static/dist/img/flags/sh.png b/fedn/fedn/network/dashboard/static/dist/img/flags/sh.png similarity index 100% rename from fedn/fedn/clients/reducer/static/dist/img/flags/sh.png rename to fedn/fedn/network/dashboard/static/dist/img/flags/sh.png diff --git a/fedn/fedn/clients/reducer/static/dist/img/flags/si.png b/fedn/fedn/network/dashboard/static/dist/img/flags/si.png similarity index 100% rename from fedn/fedn/clients/reducer/static/dist/img/flags/si.png rename to fedn/fedn/network/dashboard/static/dist/img/flags/si.png diff --git a/fedn/fedn/clients/reducer/static/dist/img/flags/sj.png b/fedn/fedn/network/dashboard/static/dist/img/flags/sj.png similarity index 100% rename from fedn/fedn/clients/reducer/static/dist/img/flags/sj.png rename to fedn/fedn/network/dashboard/static/dist/img/flags/sj.png diff --git a/fedn/fedn/clients/reducer/static/dist/img/flags/sk.png b/fedn/fedn/network/dashboard/static/dist/img/flags/sk.png similarity index 100% rename from fedn/fedn/clients/reducer/static/dist/img/flags/sk.png rename to fedn/fedn/network/dashboard/static/dist/img/flags/sk.png diff --git a/fedn/fedn/clients/reducer/static/dist/img/flags/sl.png b/fedn/fedn/network/dashboard/static/dist/img/flags/sl.png similarity index 100% rename from fedn/fedn/clients/reducer/static/dist/img/flags/sl.png rename to fedn/fedn/network/dashboard/static/dist/img/flags/sl.png diff --git a/fedn/fedn/clients/reducer/static/dist/img/flags/sm.png b/fedn/fedn/network/dashboard/static/dist/img/flags/sm.png similarity index 100% rename from fedn/fedn/clients/reducer/static/dist/img/flags/sm.png rename to fedn/fedn/network/dashboard/static/dist/img/flags/sm.png diff --git a/fedn/fedn/clients/reducer/static/dist/img/flags/sn.png b/fedn/fedn/network/dashboard/static/dist/img/flags/sn.png similarity index 100% rename from fedn/fedn/clients/reducer/static/dist/img/flags/sn.png rename to fedn/fedn/network/dashboard/static/dist/img/flags/sn.png diff --git a/fedn/fedn/clients/reducer/static/dist/img/flags/so.png b/fedn/fedn/network/dashboard/static/dist/img/flags/so.png similarity index 100% rename from fedn/fedn/clients/reducer/static/dist/img/flags/so.png rename to fedn/fedn/network/dashboard/static/dist/img/flags/so.png diff --git a/fedn/fedn/clients/reducer/static/dist/img/flags/sr.png b/fedn/fedn/network/dashboard/static/dist/img/flags/sr.png similarity index 100% rename from fedn/fedn/clients/reducer/static/dist/img/flags/sr.png rename to fedn/fedn/network/dashboard/static/dist/img/flags/sr.png diff --git a/fedn/fedn/clients/reducer/static/dist/img/flags/ss.png b/fedn/fedn/network/dashboard/static/dist/img/flags/ss.png similarity index 100% rename from fedn/fedn/clients/reducer/static/dist/img/flags/ss.png rename to fedn/fedn/network/dashboard/static/dist/img/flags/ss.png diff --git a/fedn/fedn/clients/reducer/static/dist/img/flags/st.png b/fedn/fedn/network/dashboard/static/dist/img/flags/st.png similarity index 100% rename from fedn/fedn/clients/reducer/static/dist/img/flags/st.png rename to fedn/fedn/network/dashboard/static/dist/img/flags/st.png diff --git a/fedn/fedn/clients/reducer/static/dist/img/flags/sv.png b/fedn/fedn/network/dashboard/static/dist/img/flags/sv.png similarity index 100% rename from fedn/fedn/clients/reducer/static/dist/img/flags/sv.png rename to fedn/fedn/network/dashboard/static/dist/img/flags/sv.png diff --git a/fedn/fedn/clients/reducer/static/dist/img/flags/sx.png b/fedn/fedn/network/dashboard/static/dist/img/flags/sx.png similarity index 100% rename from fedn/fedn/clients/reducer/static/dist/img/flags/sx.png rename to fedn/fedn/network/dashboard/static/dist/img/flags/sx.png diff --git a/fedn/fedn/clients/reducer/static/dist/img/flags/sy.png b/fedn/fedn/network/dashboard/static/dist/img/flags/sy.png similarity index 100% rename from fedn/fedn/clients/reducer/static/dist/img/flags/sy.png rename to fedn/fedn/network/dashboard/static/dist/img/flags/sy.png diff --git a/fedn/fedn/clients/reducer/static/dist/img/flags/sz.png b/fedn/fedn/network/dashboard/static/dist/img/flags/sz.png similarity index 100% rename from fedn/fedn/clients/reducer/static/dist/img/flags/sz.png rename to fedn/fedn/network/dashboard/static/dist/img/flags/sz.png diff --git a/fedn/fedn/clients/reducer/static/dist/img/flags/tc.png b/fedn/fedn/network/dashboard/static/dist/img/flags/tc.png similarity index 100% rename from fedn/fedn/clients/reducer/static/dist/img/flags/tc.png rename to fedn/fedn/network/dashboard/static/dist/img/flags/tc.png diff --git a/fedn/fedn/clients/reducer/static/dist/img/flags/td.png b/fedn/fedn/network/dashboard/static/dist/img/flags/td.png similarity index 100% rename from fedn/fedn/clients/reducer/static/dist/img/flags/td.png rename to fedn/fedn/network/dashboard/static/dist/img/flags/td.png diff --git a/fedn/fedn/clients/reducer/static/dist/img/flags/tf.png b/fedn/fedn/network/dashboard/static/dist/img/flags/tf.png similarity index 100% rename from fedn/fedn/clients/reducer/static/dist/img/flags/tf.png rename to fedn/fedn/network/dashboard/static/dist/img/flags/tf.png diff --git a/fedn/fedn/clients/reducer/static/dist/img/flags/tg.png b/fedn/fedn/network/dashboard/static/dist/img/flags/tg.png similarity index 100% rename from fedn/fedn/clients/reducer/static/dist/img/flags/tg.png rename to fedn/fedn/network/dashboard/static/dist/img/flags/tg.png diff --git a/fedn/fedn/clients/reducer/static/dist/img/flags/th.png b/fedn/fedn/network/dashboard/static/dist/img/flags/th.png similarity index 100% rename from fedn/fedn/clients/reducer/static/dist/img/flags/th.png rename to fedn/fedn/network/dashboard/static/dist/img/flags/th.png diff --git a/fedn/fedn/clients/reducer/static/dist/img/flags/tj.png b/fedn/fedn/network/dashboard/static/dist/img/flags/tj.png similarity index 100% rename from fedn/fedn/clients/reducer/static/dist/img/flags/tj.png rename to fedn/fedn/network/dashboard/static/dist/img/flags/tj.png diff --git a/fedn/fedn/clients/reducer/static/dist/img/flags/tk.png b/fedn/fedn/network/dashboard/static/dist/img/flags/tk.png similarity index 100% rename from fedn/fedn/clients/reducer/static/dist/img/flags/tk.png rename to fedn/fedn/network/dashboard/static/dist/img/flags/tk.png diff --git a/fedn/fedn/clients/reducer/static/dist/img/flags/tl.png b/fedn/fedn/network/dashboard/static/dist/img/flags/tl.png similarity index 100% rename from fedn/fedn/clients/reducer/static/dist/img/flags/tl.png rename to fedn/fedn/network/dashboard/static/dist/img/flags/tl.png diff --git a/fedn/fedn/clients/reducer/static/dist/img/flags/tm.png b/fedn/fedn/network/dashboard/static/dist/img/flags/tm.png similarity index 100% rename from fedn/fedn/clients/reducer/static/dist/img/flags/tm.png rename to fedn/fedn/network/dashboard/static/dist/img/flags/tm.png diff --git a/fedn/fedn/clients/reducer/static/dist/img/flags/tn.png b/fedn/fedn/network/dashboard/static/dist/img/flags/tn.png similarity index 100% rename from fedn/fedn/clients/reducer/static/dist/img/flags/tn.png rename to fedn/fedn/network/dashboard/static/dist/img/flags/tn.png diff --git a/fedn/fedn/clients/reducer/static/dist/img/flags/to.png b/fedn/fedn/network/dashboard/static/dist/img/flags/to.png similarity index 100% rename from fedn/fedn/clients/reducer/static/dist/img/flags/to.png rename to fedn/fedn/network/dashboard/static/dist/img/flags/to.png diff --git a/fedn/fedn/clients/reducer/static/dist/img/flags/tr.png b/fedn/fedn/network/dashboard/static/dist/img/flags/tr.png similarity index 100% rename from fedn/fedn/clients/reducer/static/dist/img/flags/tr.png rename to fedn/fedn/network/dashboard/static/dist/img/flags/tr.png diff --git a/fedn/fedn/clients/reducer/static/dist/img/flags/tt.png b/fedn/fedn/network/dashboard/static/dist/img/flags/tt.png similarity index 100% rename from fedn/fedn/clients/reducer/static/dist/img/flags/tt.png rename to fedn/fedn/network/dashboard/static/dist/img/flags/tt.png diff --git a/fedn/fedn/clients/reducer/static/dist/img/flags/tv.png b/fedn/fedn/network/dashboard/static/dist/img/flags/tv.png similarity index 100% rename from fedn/fedn/clients/reducer/static/dist/img/flags/tv.png rename to fedn/fedn/network/dashboard/static/dist/img/flags/tv.png diff --git a/fedn/fedn/clients/reducer/static/dist/img/flags/tw.png b/fedn/fedn/network/dashboard/static/dist/img/flags/tw.png similarity index 100% rename from fedn/fedn/clients/reducer/static/dist/img/flags/tw.png rename to fedn/fedn/network/dashboard/static/dist/img/flags/tw.png diff --git a/fedn/fedn/clients/reducer/static/dist/img/flags/tz.png b/fedn/fedn/network/dashboard/static/dist/img/flags/tz.png similarity index 100% rename from fedn/fedn/clients/reducer/static/dist/img/flags/tz.png rename to fedn/fedn/network/dashboard/static/dist/img/flags/tz.png diff --git a/fedn/fedn/clients/reducer/static/dist/img/flags/ua.png b/fedn/fedn/network/dashboard/static/dist/img/flags/ua.png similarity index 100% rename from fedn/fedn/clients/reducer/static/dist/img/flags/ua.png rename to fedn/fedn/network/dashboard/static/dist/img/flags/ua.png diff --git a/fedn/fedn/clients/reducer/static/dist/img/flags/ug.png b/fedn/fedn/network/dashboard/static/dist/img/flags/ug.png similarity index 100% rename from fedn/fedn/clients/reducer/static/dist/img/flags/ug.png rename to fedn/fedn/network/dashboard/static/dist/img/flags/ug.png diff --git a/fedn/fedn/clients/reducer/static/dist/img/flags/um.png b/fedn/fedn/network/dashboard/static/dist/img/flags/um.png similarity index 100% rename from fedn/fedn/clients/reducer/static/dist/img/flags/um.png rename to fedn/fedn/network/dashboard/static/dist/img/flags/um.png diff --git a/fedn/fedn/clients/reducer/static/dist/img/flags/us.png b/fedn/fedn/network/dashboard/static/dist/img/flags/us.png similarity index 100% rename from fedn/fedn/clients/reducer/static/dist/img/flags/us.png rename to fedn/fedn/network/dashboard/static/dist/img/flags/us.png diff --git a/fedn/fedn/clients/reducer/static/dist/img/flags/uy.png b/fedn/fedn/network/dashboard/static/dist/img/flags/uy.png similarity index 100% rename from fedn/fedn/clients/reducer/static/dist/img/flags/uy.png rename to fedn/fedn/network/dashboard/static/dist/img/flags/uy.png diff --git a/fedn/fedn/clients/reducer/static/dist/img/flags/uz.png b/fedn/fedn/network/dashboard/static/dist/img/flags/uz.png similarity index 100% rename from fedn/fedn/clients/reducer/static/dist/img/flags/uz.png rename to fedn/fedn/network/dashboard/static/dist/img/flags/uz.png diff --git a/fedn/fedn/clients/reducer/static/dist/img/flags/va.png b/fedn/fedn/network/dashboard/static/dist/img/flags/va.png similarity index 100% rename from fedn/fedn/clients/reducer/static/dist/img/flags/va.png rename to fedn/fedn/network/dashboard/static/dist/img/flags/va.png diff --git a/fedn/fedn/clients/reducer/static/dist/img/flags/vc.png b/fedn/fedn/network/dashboard/static/dist/img/flags/vc.png similarity index 100% rename from fedn/fedn/clients/reducer/static/dist/img/flags/vc.png rename to fedn/fedn/network/dashboard/static/dist/img/flags/vc.png diff --git a/fedn/fedn/clients/reducer/static/dist/img/flags/ve.png b/fedn/fedn/network/dashboard/static/dist/img/flags/ve.png similarity index 100% rename from fedn/fedn/clients/reducer/static/dist/img/flags/ve.png rename to fedn/fedn/network/dashboard/static/dist/img/flags/ve.png diff --git a/fedn/fedn/clients/reducer/static/dist/img/flags/vg.png b/fedn/fedn/network/dashboard/static/dist/img/flags/vg.png similarity index 100% rename from fedn/fedn/clients/reducer/static/dist/img/flags/vg.png rename to fedn/fedn/network/dashboard/static/dist/img/flags/vg.png diff --git a/fedn/fedn/clients/reducer/static/dist/img/flags/vi.png b/fedn/fedn/network/dashboard/static/dist/img/flags/vi.png similarity index 100% rename from fedn/fedn/clients/reducer/static/dist/img/flags/vi.png rename to fedn/fedn/network/dashboard/static/dist/img/flags/vi.png diff --git a/fedn/fedn/clients/reducer/static/dist/img/flags/vn.png b/fedn/fedn/network/dashboard/static/dist/img/flags/vn.png similarity index 100% rename from fedn/fedn/clients/reducer/static/dist/img/flags/vn.png rename to fedn/fedn/network/dashboard/static/dist/img/flags/vn.png diff --git a/fedn/fedn/clients/reducer/static/dist/img/flags/vu.png b/fedn/fedn/network/dashboard/static/dist/img/flags/vu.png similarity index 100% rename from fedn/fedn/clients/reducer/static/dist/img/flags/vu.png rename to fedn/fedn/network/dashboard/static/dist/img/flags/vu.png diff --git a/fedn/fedn/clients/reducer/static/dist/img/flags/wf.png b/fedn/fedn/network/dashboard/static/dist/img/flags/wf.png similarity index 100% rename from fedn/fedn/clients/reducer/static/dist/img/flags/wf.png rename to fedn/fedn/network/dashboard/static/dist/img/flags/wf.png diff --git a/fedn/fedn/clients/reducer/static/dist/img/flags/ws.png b/fedn/fedn/network/dashboard/static/dist/img/flags/ws.png similarity index 100% rename from fedn/fedn/clients/reducer/static/dist/img/flags/ws.png rename to fedn/fedn/network/dashboard/static/dist/img/flags/ws.png diff --git a/fedn/fedn/clients/reducer/static/dist/img/flags/xk.png b/fedn/fedn/network/dashboard/static/dist/img/flags/xk.png similarity index 100% rename from fedn/fedn/clients/reducer/static/dist/img/flags/xk.png rename to fedn/fedn/network/dashboard/static/dist/img/flags/xk.png diff --git a/fedn/fedn/clients/reducer/static/dist/img/flags/ye.png b/fedn/fedn/network/dashboard/static/dist/img/flags/ye.png similarity index 100% rename from fedn/fedn/clients/reducer/static/dist/img/flags/ye.png rename to fedn/fedn/network/dashboard/static/dist/img/flags/ye.png diff --git a/fedn/fedn/clients/reducer/static/dist/img/flags/yt.png b/fedn/fedn/network/dashboard/static/dist/img/flags/yt.png similarity index 100% rename from fedn/fedn/clients/reducer/static/dist/img/flags/yt.png rename to fedn/fedn/network/dashboard/static/dist/img/flags/yt.png diff --git a/fedn/fedn/clients/reducer/static/dist/img/flags/za.png b/fedn/fedn/network/dashboard/static/dist/img/flags/za.png similarity index 100% rename from fedn/fedn/clients/reducer/static/dist/img/flags/za.png rename to fedn/fedn/network/dashboard/static/dist/img/flags/za.png diff --git a/fedn/fedn/clients/reducer/static/dist/img/flags/zm.png b/fedn/fedn/network/dashboard/static/dist/img/flags/zm.png similarity index 100% rename from fedn/fedn/clients/reducer/static/dist/img/flags/zm.png rename to fedn/fedn/network/dashboard/static/dist/img/flags/zm.png diff --git a/fedn/fedn/clients/reducer/static/dist/img/flags/zw.png b/fedn/fedn/network/dashboard/static/dist/img/flags/zw.png similarity index 100% rename from fedn/fedn/clients/reducer/static/dist/img/flags/zw.png rename to fedn/fedn/network/dashboard/static/dist/img/flags/zw.png diff --git a/fedn/fedn/clients/reducer/static/dist/img/illustrations/customer-support.png b/fedn/fedn/network/dashboard/static/dist/img/illustrations/customer-support.png similarity index 100% rename from fedn/fedn/clients/reducer/static/dist/img/illustrations/customer-support.png rename to fedn/fedn/network/dashboard/static/dist/img/illustrations/customer-support.png diff --git a/fedn/fedn/clients/reducer/static/dist/img/illustrations/searching.png b/fedn/fedn/network/dashboard/static/dist/img/illustrations/searching.png similarity index 100% rename from fedn/fedn/clients/reducer/static/dist/img/illustrations/searching.png rename to fedn/fedn/network/dashboard/static/dist/img/illustrations/searching.png diff --git a/fedn/fedn/clients/reducer/static/dist/img/illustrations/social.png b/fedn/fedn/network/dashboard/static/dist/img/illustrations/social.png similarity index 100% rename from fedn/fedn/clients/reducer/static/dist/img/illustrations/social.png rename to fedn/fedn/network/dashboard/static/dist/img/illustrations/social.png diff --git a/fedn/fedn/clients/reducer/static/dist/img/logo.svg b/fedn/fedn/network/dashboard/static/dist/img/logo.svg similarity index 100% rename from fedn/fedn/clients/reducer/static/dist/img/logo.svg rename to fedn/fedn/network/dashboard/static/dist/img/logo.svg diff --git a/fedn/fedn/clients/reducer/static/dist/img/photos/unsplash-1.jpg b/fedn/fedn/network/dashboard/static/dist/img/photos/unsplash-1.jpg similarity index 100% rename from fedn/fedn/clients/reducer/static/dist/img/photos/unsplash-1.jpg rename to fedn/fedn/network/dashboard/static/dist/img/photos/unsplash-1.jpg diff --git a/fedn/fedn/clients/reducer/static/dist/img/photos/unsplash-2.jpg b/fedn/fedn/network/dashboard/static/dist/img/photos/unsplash-2.jpg similarity index 100% rename from fedn/fedn/clients/reducer/static/dist/img/photos/unsplash-2.jpg rename to fedn/fedn/network/dashboard/static/dist/img/photos/unsplash-2.jpg diff --git a/fedn/fedn/clients/reducer/static/dist/img/photos/unsplash-3.jpg b/fedn/fedn/network/dashboard/static/dist/img/photos/unsplash-3.jpg similarity index 100% rename from fedn/fedn/clients/reducer/static/dist/img/photos/unsplash-3.jpg rename to fedn/fedn/network/dashboard/static/dist/img/photos/unsplash-3.jpg diff --git a/fedn/fedn/clients/reducer/static/dist/img/screenshots/dashboard-analytics.jpg b/fedn/fedn/network/dashboard/static/dist/img/screenshots/dashboard-analytics.jpg similarity index 100% rename from fedn/fedn/clients/reducer/static/dist/img/screenshots/dashboard-analytics.jpg rename to fedn/fedn/network/dashboard/static/dist/img/screenshots/dashboard-analytics.jpg diff --git a/fedn/fedn/clients/reducer/static/dist/img/screenshots/dashboard-crypto.jpg b/fedn/fedn/network/dashboard/static/dist/img/screenshots/dashboard-crypto.jpg similarity index 100% rename from fedn/fedn/clients/reducer/static/dist/img/screenshots/dashboard-crypto.jpg rename to fedn/fedn/network/dashboard/static/dist/img/screenshots/dashboard-crypto.jpg diff --git a/fedn/fedn/clients/reducer/static/dist/img/screenshots/dashboard-default.jpg b/fedn/fedn/network/dashboard/static/dist/img/screenshots/dashboard-default.jpg similarity index 100% rename from fedn/fedn/clients/reducer/static/dist/img/screenshots/dashboard-default.jpg rename to fedn/fedn/network/dashboard/static/dist/img/screenshots/dashboard-default.jpg diff --git a/fedn/fedn/clients/reducer/static/dist/img/screenshots/dashboard-saas.jpg b/fedn/fedn/network/dashboard/static/dist/img/screenshots/dashboard-saas.jpg similarity index 100% rename from fedn/fedn/clients/reducer/static/dist/img/screenshots/dashboard-saas.jpg rename to fedn/fedn/network/dashboard/static/dist/img/screenshots/dashboard-saas.jpg diff --git a/fedn/fedn/clients/reducer/static/dist/img/screenshots/dashboard-social.jpg b/fedn/fedn/network/dashboard/static/dist/img/screenshots/dashboard-social.jpg similarity index 100% rename from fedn/fedn/clients/reducer/static/dist/img/screenshots/dashboard-social.jpg rename to fedn/fedn/network/dashboard/static/dist/img/screenshots/dashboard-social.jpg diff --git a/fedn/fedn/clients/reducer/static/dist/img/screenshots/mixed.jpg b/fedn/fedn/network/dashboard/static/dist/img/screenshots/mixed.jpg similarity index 100% rename from fedn/fedn/clients/reducer/static/dist/img/screenshots/mixed.jpg rename to fedn/fedn/network/dashboard/static/dist/img/screenshots/mixed.jpg diff --git a/fedn/fedn/clients/reducer/static/dist/img/screenshots/pages-projects-list.jpg b/fedn/fedn/network/dashboard/static/dist/img/screenshots/pages-projects-list.jpg similarity index 100% rename from fedn/fedn/clients/reducer/static/dist/img/screenshots/pages-projects-list.jpg rename to fedn/fedn/network/dashboard/static/dist/img/screenshots/pages-projects-list.jpg diff --git a/fedn/fedn/clients/reducer/static/dist/img/screenshots/sidebar-compact.jpg b/fedn/fedn/network/dashboard/static/dist/img/screenshots/sidebar-compact.jpg similarity index 100% rename from fedn/fedn/clients/reducer/static/dist/img/screenshots/sidebar-compact.jpg rename to fedn/fedn/network/dashboard/static/dist/img/screenshots/sidebar-compact.jpg diff --git a/fedn/fedn/clients/reducer/static/dist/img/screenshots/sidebar-right.jpg b/fedn/fedn/network/dashboard/static/dist/img/screenshots/sidebar-right.jpg similarity index 100% rename from fedn/fedn/clients/reducer/static/dist/img/screenshots/sidebar-right.jpg rename to fedn/fedn/network/dashboard/static/dist/img/screenshots/sidebar-right.jpg diff --git a/fedn/fedn/clients/reducer/static/dist/img/screenshots/theme-colored.jpg b/fedn/fedn/network/dashboard/static/dist/img/screenshots/theme-colored.jpg similarity index 100% rename from fedn/fedn/clients/reducer/static/dist/img/screenshots/theme-colored.jpg rename to fedn/fedn/network/dashboard/static/dist/img/screenshots/theme-colored.jpg diff --git a/fedn/fedn/clients/reducer/static/dist/img/screenshots/theme-dark.jpg b/fedn/fedn/network/dashboard/static/dist/img/screenshots/theme-dark.jpg similarity index 100% rename from fedn/fedn/clients/reducer/static/dist/img/screenshots/theme-dark.jpg rename to fedn/fedn/network/dashboard/static/dist/img/screenshots/theme-dark.jpg diff --git a/fedn/fedn/clients/reducer/static/dist/img/screenshots/theme-default.jpg b/fedn/fedn/network/dashboard/static/dist/img/screenshots/theme-default.jpg similarity index 100% rename from fedn/fedn/clients/reducer/static/dist/img/screenshots/theme-default.jpg rename to fedn/fedn/network/dashboard/static/dist/img/screenshots/theme-default.jpg diff --git a/fedn/fedn/clients/reducer/static/dist/img/screenshots/theme-light.jpg b/fedn/fedn/network/dashboard/static/dist/img/screenshots/theme-light.jpg similarity index 100% rename from fedn/fedn/clients/reducer/static/dist/img/screenshots/theme-light.jpg rename to fedn/fedn/network/dashboard/static/dist/img/screenshots/theme-light.jpg diff --git a/fedn/fedn/clients/reducer/static/dist/js/app.js b/fedn/fedn/network/dashboard/static/dist/js/app.js similarity index 100% rename from fedn/fedn/clients/reducer/static/dist/js/app.js rename to fedn/fedn/network/dashboard/static/dist/js/app.js diff --git a/fedn/fedn/clients/reducer/static/dist/js/app.js.LICENSE.txt b/fedn/fedn/network/dashboard/static/dist/js/app.js.LICENSE.txt similarity index 100% rename from fedn/fedn/clients/reducer/static/dist/js/app.js.LICENSE.txt rename to fedn/fedn/network/dashboard/static/dist/js/app.js.LICENSE.txt diff --git a/fedn/fedn/clients/reducer/static/dist/js/plot.js b/fedn/fedn/network/dashboard/static/dist/js/plot.js similarity index 100% rename from fedn/fedn/clients/reducer/static/dist/js/plot.js rename to fedn/fedn/network/dashboard/static/dist/js/plot.js diff --git a/fedn/fedn/clients/reducer/static/dist/js/plugins/sigma.exporters.svg.min.js b/fedn/fedn/network/dashboard/static/dist/js/plugins/sigma.exporters.svg.min.js similarity index 100% rename from fedn/fedn/clients/reducer/static/dist/js/plugins/sigma.exporters.svg.min.js rename to fedn/fedn/network/dashboard/static/dist/js/plugins/sigma.exporters.svg.min.js diff --git a/fedn/fedn/clients/reducer/static/dist/js/plugins/sigma.layout.forceAtlas2.min.js b/fedn/fedn/network/dashboard/static/dist/js/plugins/sigma.layout.forceAtlas2.min.js similarity index 100% rename from fedn/fedn/clients/reducer/static/dist/js/plugins/sigma.layout.forceAtlas2.min.js rename to fedn/fedn/network/dashboard/static/dist/js/plugins/sigma.layout.forceAtlas2.min.js diff --git a/fedn/fedn/clients/reducer/static/dist/js/plugins/sigma.layout.noverlap.min.js b/fedn/fedn/network/dashboard/static/dist/js/plugins/sigma.layout.noverlap.min.js similarity index 100% rename from fedn/fedn/clients/reducer/static/dist/js/plugins/sigma.layout.noverlap.min.js rename to fedn/fedn/network/dashboard/static/dist/js/plugins/sigma.layout.noverlap.min.js diff --git a/fedn/fedn/clients/reducer/static/dist/js/plugins/sigma.neo4j.cypher.min.js b/fedn/fedn/network/dashboard/static/dist/js/plugins/sigma.neo4j.cypher.min.js similarity index 100% rename from fedn/fedn/clients/reducer/static/dist/js/plugins/sigma.neo4j.cypher.min.js rename to fedn/fedn/network/dashboard/static/dist/js/plugins/sigma.neo4j.cypher.min.js diff --git a/fedn/fedn/clients/reducer/static/dist/js/plugins/sigma.parsers.gexf.min.js b/fedn/fedn/network/dashboard/static/dist/js/plugins/sigma.parsers.gexf.min.js similarity index 100% rename from fedn/fedn/clients/reducer/static/dist/js/plugins/sigma.parsers.gexf.min.js rename to fedn/fedn/network/dashboard/static/dist/js/plugins/sigma.parsers.gexf.min.js diff --git a/fedn/fedn/clients/reducer/static/dist/js/plugins/sigma.parsers.json.min.js b/fedn/fedn/network/dashboard/static/dist/js/plugins/sigma.parsers.json.min.js similarity index 100% rename from fedn/fedn/clients/reducer/static/dist/js/plugins/sigma.parsers.json.min.js rename to fedn/fedn/network/dashboard/static/dist/js/plugins/sigma.parsers.json.min.js diff --git a/fedn/fedn/clients/reducer/static/dist/js/plugins/sigma.pathfinding.astar.min.js b/fedn/fedn/network/dashboard/static/dist/js/plugins/sigma.pathfinding.astar.min.js similarity index 100% rename from fedn/fedn/clients/reducer/static/dist/js/plugins/sigma.pathfinding.astar.min.js rename to fedn/fedn/network/dashboard/static/dist/js/plugins/sigma.pathfinding.astar.min.js diff --git a/fedn/fedn/clients/reducer/static/dist/js/plugins/sigma.plugins.animate.min.js b/fedn/fedn/network/dashboard/static/dist/js/plugins/sigma.plugins.animate.min.js similarity index 100% rename from fedn/fedn/clients/reducer/static/dist/js/plugins/sigma.plugins.animate.min.js rename to fedn/fedn/network/dashboard/static/dist/js/plugins/sigma.plugins.animate.min.js diff --git a/fedn/fedn/clients/reducer/static/dist/js/plugins/sigma.plugins.dragNodes.min.js b/fedn/fedn/network/dashboard/static/dist/js/plugins/sigma.plugins.dragNodes.min.js similarity index 100% rename from fedn/fedn/clients/reducer/static/dist/js/plugins/sigma.plugins.dragNodes.min.js rename to fedn/fedn/network/dashboard/static/dist/js/plugins/sigma.plugins.dragNodes.min.js diff --git a/fedn/fedn/clients/reducer/static/dist/js/plugins/sigma.plugins.filter.min.js b/fedn/fedn/network/dashboard/static/dist/js/plugins/sigma.plugins.filter.min.js similarity index 100% rename from fedn/fedn/clients/reducer/static/dist/js/plugins/sigma.plugins.filter.min.js rename to fedn/fedn/network/dashboard/static/dist/js/plugins/sigma.plugins.filter.min.js diff --git a/fedn/fedn/clients/reducer/static/dist/js/plugins/sigma.plugins.neighborhoods.min.js b/fedn/fedn/network/dashboard/static/dist/js/plugins/sigma.plugins.neighborhoods.min.js similarity index 100% rename from fedn/fedn/clients/reducer/static/dist/js/plugins/sigma.plugins.neighborhoods.min.js rename to fedn/fedn/network/dashboard/static/dist/js/plugins/sigma.plugins.neighborhoods.min.js diff --git a/fedn/fedn/clients/reducer/static/dist/js/plugins/sigma.plugins.relativeSize.min.js b/fedn/fedn/network/dashboard/static/dist/js/plugins/sigma.plugins.relativeSize.min.js similarity index 100% rename from fedn/fedn/clients/reducer/static/dist/js/plugins/sigma.plugins.relativeSize.min.js rename to fedn/fedn/network/dashboard/static/dist/js/plugins/sigma.plugins.relativeSize.min.js diff --git a/fedn/fedn/clients/reducer/static/dist/js/plugins/sigma.renderers.customEdgeShapes.min.js b/fedn/fedn/network/dashboard/static/dist/js/plugins/sigma.renderers.customEdgeShapes.min.js similarity index 100% rename from fedn/fedn/clients/reducer/static/dist/js/plugins/sigma.renderers.customEdgeShapes.min.js rename to fedn/fedn/network/dashboard/static/dist/js/plugins/sigma.renderers.customEdgeShapes.min.js diff --git a/fedn/fedn/clients/reducer/static/dist/js/plugins/sigma.renderers.customShapes.min.js b/fedn/fedn/network/dashboard/static/dist/js/plugins/sigma.renderers.customShapes.min.js similarity index 100% rename from fedn/fedn/clients/reducer/static/dist/js/plugins/sigma.renderers.customShapes.min.js rename to fedn/fedn/network/dashboard/static/dist/js/plugins/sigma.renderers.customShapes.min.js diff --git a/fedn/fedn/clients/reducer/static/dist/js/plugins/sigma.renderers.edgeDots.min.js b/fedn/fedn/network/dashboard/static/dist/js/plugins/sigma.renderers.edgeDots.min.js similarity index 100% rename from fedn/fedn/clients/reducer/static/dist/js/plugins/sigma.renderers.edgeDots.min.js rename to fedn/fedn/network/dashboard/static/dist/js/plugins/sigma.renderers.edgeDots.min.js diff --git a/fedn/fedn/clients/reducer/static/dist/js/plugins/sigma.renderers.edgeLabels.min.js b/fedn/fedn/network/dashboard/static/dist/js/plugins/sigma.renderers.edgeLabels.min.js similarity index 100% rename from fedn/fedn/clients/reducer/static/dist/js/plugins/sigma.renderers.edgeLabels.min.js rename to fedn/fedn/network/dashboard/static/dist/js/plugins/sigma.renderers.edgeLabels.min.js diff --git a/fedn/fedn/clients/reducer/static/dist/js/plugins/sigma.renderers.parallelEdges.min.js b/fedn/fedn/network/dashboard/static/dist/js/plugins/sigma.renderers.parallelEdges.min.js similarity index 100% rename from fedn/fedn/clients/reducer/static/dist/js/plugins/sigma.renderers.parallelEdges.min.js rename to fedn/fedn/network/dashboard/static/dist/js/plugins/sigma.renderers.parallelEdges.min.js diff --git a/fedn/fedn/clients/reducer/static/dist/js/plugins/sigma.renderers.snapshot.min.js b/fedn/fedn/network/dashboard/static/dist/js/plugins/sigma.renderers.snapshot.min.js similarity index 100% rename from fedn/fedn/clients/reducer/static/dist/js/plugins/sigma.renderers.snapshot.min.js rename to fedn/fedn/network/dashboard/static/dist/js/plugins/sigma.renderers.snapshot.min.js diff --git a/fedn/fedn/clients/reducer/static/dist/js/plugins/sigma.statistics.HITS.min.js b/fedn/fedn/network/dashboard/static/dist/js/plugins/sigma.statistics.HITS.min.js similarity index 100% rename from fedn/fedn/clients/reducer/static/dist/js/plugins/sigma.statistics.HITS.min.js rename to fedn/fedn/network/dashboard/static/dist/js/plugins/sigma.statistics.HITS.min.js diff --git a/fedn/fedn/clients/reducer/static/dist/js/settings.js b/fedn/fedn/network/dashboard/static/dist/js/settings.js similarity index 100% rename from fedn/fedn/clients/reducer/static/dist/js/settings.js rename to fedn/fedn/network/dashboard/static/dist/js/settings.js diff --git a/fedn/fedn/clients/reducer/static/dist/js/sigma.min.js b/fedn/fedn/network/dashboard/static/dist/js/sigma.min.js similarity index 100% rename from fedn/fedn/clients/reducer/static/dist/js/sigma.min.js rename to fedn/fedn/network/dashboard/static/dist/js/sigma.min.js diff --git a/fedn/fedn/clients/reducer/templates/context.html b/fedn/fedn/network/dashboard/templates/context.html similarity index 100% rename from fedn/fedn/clients/reducer/templates/context.html rename to fedn/fedn/network/dashboard/templates/context.html diff --git a/fedn/fedn/clients/reducer/templates/dashboard.html b/fedn/fedn/network/dashboard/templates/dashboard.html similarity index 100% rename from fedn/fedn/clients/reducer/templates/dashboard.html rename to fedn/fedn/network/dashboard/templates/dashboard.html diff --git a/fedn/fedn/clients/reducer/templates/eula.html b/fedn/fedn/network/dashboard/templates/eula.html similarity index 100% rename from fedn/fedn/clients/reducer/templates/eula.html rename to fedn/fedn/network/dashboard/templates/eula.html diff --git a/fedn/fedn/clients/reducer/templates/events.html b/fedn/fedn/network/dashboard/templates/events.html similarity index 100% rename from fedn/fedn/clients/reducer/templates/events.html rename to fedn/fedn/network/dashboard/templates/events.html diff --git a/fedn/fedn/clients/reducer/templates/index.html b/fedn/fedn/network/dashboard/templates/index.html similarity index 100% rename from fedn/fedn/clients/reducer/templates/index.html rename to fedn/fedn/network/dashboard/templates/index.html diff --git a/fedn/fedn/clients/reducer/templates/models.html b/fedn/fedn/network/dashboard/templates/models.html similarity index 100% rename from fedn/fedn/clients/reducer/templates/models.html rename to fedn/fedn/network/dashboard/templates/models.html diff --git a/fedn/fedn/clients/reducer/templates/network.html b/fedn/fedn/network/dashboard/templates/network.html similarity index 100% rename from fedn/fedn/clients/reducer/templates/network.html rename to fedn/fedn/network/dashboard/templates/network.html diff --git a/fedn/fedn/clients/reducer/templates/setup.html b/fedn/fedn/network/dashboard/templates/setup.html similarity index 100% rename from fedn/fedn/clients/reducer/templates/setup.html rename to fedn/fedn/network/dashboard/templates/setup.html diff --git a/fedn/fedn/clients/reducer/templates/setup_model.html b/fedn/fedn/network/dashboard/templates/setup_model.html similarity index 100% rename from fedn/fedn/clients/reducer/templates/setup_model.html rename to fedn/fedn/network/dashboard/templates/setup_model.html diff --git a/fedn/fedn/clients/reducer/network.py b/fedn/fedn/network/network.py similarity index 100% rename from fedn/fedn/clients/reducer/network.py rename to fedn/fedn/network/network.py diff --git a/fedn/fedn/reducer.py b/fedn/fedn/network/reducer.py similarity index 100% rename from fedn/fedn/reducer.py rename to fedn/fedn/network/reducer.py diff --git a/fedn/fedn/clients/reducer/restservice.py b/fedn/fedn/network/restservice.py similarity index 100% rename from fedn/fedn/clients/reducer/restservice.py rename to fedn/fedn/network/restservice.py diff --git a/fedn/fedn/clients/reducer/state.py b/fedn/fedn/network/state.py similarity index 100% rename from fedn/fedn/clients/reducer/state.py rename to fedn/fedn/network/state.py diff --git a/fedn/fedn/clients/reducer/statestore/__init__.py b/fedn/fedn/network/statestore/__init__.py similarity index 100% rename from fedn/fedn/clients/reducer/statestore/__init__.py rename to fedn/fedn/network/statestore/__init__.py diff --git a/fedn/fedn/clients/reducer/statestore/mongoreducerstatestore.py b/fedn/fedn/network/statestore/mongoreducerstatestore.py similarity index 100% rename from fedn/fedn/clients/reducer/statestore/mongoreducerstatestore.py rename to fedn/fedn/network/statestore/mongoreducerstatestore.py diff --git a/fedn/fedn/clients/reducer/statestore/reducerstatestore.py b/fedn/fedn/network/statestore/reducerstatestore.py similarity index 100% rename from fedn/fedn/clients/reducer/statestore/reducerstatestore.py rename to fedn/fedn/network/statestore/reducerstatestore.py From d22bbd491896495efe762ce78b04b6331a33f126 Mon Sep 17 00:00:00 2001 From: Andreas Hellander Date: Thu, 18 Aug 2022 09:34:12 +0200 Subject: [PATCH 082/185] Initial refactor reducer --- fedn/cli/run_cmd.py | 12 ++++++------ fedn/fedn/network/clients/client.py | 2 +- fedn/fedn/network/combiner/aggregators/fedavg.py | 2 +- fedn/fedn/network/combiner/roundcontrol.py | 2 +- fedn/fedn/network/combiner/server.py | 4 ++-- fedn/fedn/network/controller/control.py | 7 +++---- fedn/fedn/network/{ => dashboard}/restservice.py | 6 +++--- fedn/fedn/network/network.py | 4 ++-- fedn/fedn/network/reducer.py | 6 +++--- .../network/statestore/mongoreducerstatestore.py | 3 +-- 10 files changed, 23 insertions(+), 25 deletions(-) rename fedn/fedn/network/{ => dashboard}/restservice.py (99%) diff --git a/fedn/cli/run_cmd.py b/fedn/cli/run_cmd.py index 3ac8d397c..cc9ba86cf 100644 --- a/fedn/cli/run_cmd.py +++ b/fedn/cli/run_cmd.py @@ -4,13 +4,13 @@ import click import yaml -from fedn.client import Client -from fedn.clients.reducer.restservice import (decode_auth_token, - encode_auth_token) -from fedn.clients.reducer.statestore.mongoreducerstatestore import \ +from fedn.network.clients.client import Client +from fedn.network.combiner.server import Combiner +from fedn.network.dashboard.restservice import (decode_auth_token, + encode_auth_token) +from fedn.network.reducer import Reducer +from fedn.network.statestore.mongoreducerstatestore import \ MongoReducerStateStore -from fedn.combiner import Combiner -from fedn.reducer import Reducer from .main import main diff --git a/fedn/fedn/network/clients/client.py b/fedn/fedn/network/clients/client.py index 827770ad6..da4823b80 100644 --- a/fedn/fedn/network/clients/client.py +++ b/fedn/fedn/network/clients/client.py @@ -19,10 +19,10 @@ import fedn.common.net.grpc.fedn_pb2 as fedn import fedn.common.net.grpc.fedn_pb2_grpc as rpc -from fedn.clients.client.state import ClientState, ClientStateToString from fedn.common.control.package import PackageRuntime from fedn.common.net.connect import ConnectorClient, Status from fedn.common.net.web.client import page, style +from fedn.network.clients.state import ClientState, ClientStateToString from fedn.utils.dispatcher import Dispatcher from fedn.utils.helpers import get_helper from fedn.utils.logger import Logger diff --git a/fedn/fedn/network/combiner/aggregators/fedavg.py b/fedn/fedn/network/combiner/aggregators/fedavg.py index 317ddc5eb..e0cc6dcb0 100644 --- a/fedn/fedn/network/combiner/aggregators/fedavg.py +++ b/fedn/fedn/network/combiner/aggregators/fedavg.py @@ -3,7 +3,7 @@ import time import fedn.common.net.grpc.fedn_pb2 as fedn -from fedn.aggregators.aggregator import AggregatorBase +from fedn.network.combiner.aggregators.aggregator import AggregatorBase class FedAvgAggregator(AggregatorBase): diff --git a/fedn/fedn/network/combiner/roundcontrol.py b/fedn/fedn/network/combiner/roundcontrol.py index 7e19065f7..c855c2e45 100644 --- a/fedn/fedn/network/combiner/roundcontrol.py +++ b/fedn/fedn/network/combiner/roundcontrol.py @@ -4,7 +4,7 @@ import time import uuid -from fedn.aggregators.fedavg import FedAvgAggregator +from fedn.network.combiner.aggregators.fedavg import FedAvgAggregator from fedn.utils.helpers import get_helper diff --git a/fedn/fedn/network/combiner/server.py b/fedn/fedn/network/combiner/server.py index b2d56f647..d92f05ec8 100644 --- a/fedn/fedn/network/combiner/server.py +++ b/fedn/fedn/network/combiner/server.py @@ -11,12 +11,12 @@ import fedn.common.net.grpc.fedn_pb2 as fedn import fedn.common.net.grpc.fedn_pb2_grpc as rpc -from fedn.clients.combiner.modelservice import ModelService -from fedn.clients.combiner.roundcontrol import RoundControl from fedn.common.net.connect import ConnectorCombiner, Status from fedn.common.net.grpc.server import Server from fedn.common.storage.s3.s3repo import S3ModelRepository from fedn.common.tracer.mongotracer import MongoTracer +from fedn.network.combiner.modelservice import ModelService +from fedn.network.combiner.roundcontrol import RoundControl VALID_NAME_REGEX = '^[a-zA-Z0-9_-]*$' diff --git a/fedn/fedn/network/controller/control.py b/fedn/fedn/network/controller/control.py index 25de88344..b9ed07e99 100644 --- a/fedn/fedn/network/controller/control.py +++ b/fedn/fedn/network/controller/control.py @@ -5,12 +5,11 @@ from datetime import datetime import fedn.utils.helpers -from fedn.clients.reducer.interfaces import CombinerUnavailableError -from fedn.clients.reducer.network import Network from fedn.common.storage.s3.s3repo import S3ModelRepository from fedn.common.tracer.mongotracer import MongoTracer - -from .state import ReducerState +from fedn.network.combiner.interfaces import CombinerUnavailableError +from fedn.network.network import Network +from fedn.network.state import ReducerState class UnsupportedStorageBackend(Exception): diff --git a/fedn/fedn/network/restservice.py b/fedn/fedn/network/dashboard/restservice.py similarity index 99% rename from fedn/fedn/network/restservice.py rename to fedn/fedn/network/dashboard/restservice.py index 3c48cef25..7e4876b76 100644 --- a/fedn/fedn/network/restservice.py +++ b/fedn/fedn/network/dashboard/restservice.py @@ -17,10 +17,10 @@ url_for) from werkzeug.utils import secure_filename -from fedn.clients.reducer.interfaces import CombinerInterface -from fedn.clients.reducer.plots import Plot -from fedn.clients.reducer.state import ReducerState, ReducerStateToString from fedn.common.tracer.mongotracer import MongoTracer +from fedn.network.combiner.interfaces import CombinerInterface +from fedn.network.dashboard.plots import Plot +from fedn.network.state import ReducerState, ReducerStateToString from fedn.utils.checksum import sha UPLOAD_FOLDER = '/app/client/package/' diff --git a/fedn/fedn/network/network.py b/fedn/fedn/network/network.py index f60d32b59..d7a7b8d29 100644 --- a/fedn/fedn/network/network.py +++ b/fedn/fedn/network/network.py @@ -1,7 +1,7 @@ import base64 -from fedn.clients.reducer.interfaces import (CombinerInterface, - CombinerUnavailableError) +from fedn.network.combiner.interfaces import (CombinerInterface, + CombinerUnavailableError) class Network: diff --git a/fedn/fedn/network/reducer.py b/fedn/fedn/network/reducer.py index 271207854..ede6c26e4 100644 --- a/fedn/fedn/network/reducer.py +++ b/fedn/fedn/network/reducer.py @@ -4,10 +4,10 @@ import time from datetime import datetime -from fedn.clients.reducer.control import ReducerControl -from fedn.clients.reducer.restservice import ReducerRestService -from fedn.clients.reducer.state import ReducerStateToString from fedn.common.security.certificatemanager import CertificateManager +from fedn.network.controller.control import ReducerControl +from fedn.network.dashboard.restservice import ReducerRestService +from fedn.network.state import ReducerStateToString VALID_NAME_REGEX = '^[a-zA-Z0-9_-]*$' diff --git a/fedn/fedn/network/statestore/mongoreducerstatestore.py b/fedn/fedn/network/statestore/mongoreducerstatestore.py index f60ae0bad..57755386d 100644 --- a/fedn/fedn/network/statestore/mongoreducerstatestore.py +++ b/fedn/fedn/network/statestore/mongoreducerstatestore.py @@ -4,9 +4,8 @@ import pymongo import yaml -from fedn.clients.reducer.state import (ReducerStateToString, - StringToReducerState) from fedn.common.storage.db.mongo import connect_to_mongodb +from fedn.network.state import ReducerStateToString, StringToReducerState from .reducerstatestore import ReducerStateStore From 5d7abeec694634b3497a8b923f346c0f1213bbdb Mon Sep 17 00:00:00 2001 From: Andreas Hellander Date: Thu, 18 Aug 2022 10:21:35 +0200 Subject: [PATCH 083/185] Introduce base class for controller --- fedn/fedn/network/controller/control.py | 307 +----------------------- fedn/fedn/network/reducer.py | 4 +- 2 files changed, 10 insertions(+), 301 deletions(-) diff --git a/fedn/fedn/network/controller/control.py b/fedn/fedn/network/controller/control.py index b9ed07e99..f2f81844d 100644 --- a/fedn/fedn/network/controller/control.py +++ b/fedn/fedn/network/controller/control.py @@ -8,6 +8,7 @@ from fedn.common.storage.s3.s3repo import S3ModelRepository from fedn.common.tracer.mongotracer import MongoTracer from fedn.network.combiner.interfaces import CombinerUnavailableError +from fedn.network.controller.controlbase import ControlBase from fedn.network.network import Network from fedn.network.state import ReducerState @@ -20,236 +21,15 @@ class MisconfiguredStorageBackend(Exception): pass -class ReducerControl: +class Control(ControlBase): """ Main conroller for training round. """ def __init__(self, statestore): - self.__state = ReducerState.setup - self.statestore = statestore - if self.statestore.is_inited(): - self.network = Network(self, statestore) - - try: - config = self.statestore.get_storage_backend() - except Exception: - print( - "REDUCER CONTROL: Failed to retrive storage configuration, exiting.", flush=True) - raise MisconfiguredStorageBackend() - if not config: - print( - "REDUCER CONTROL: No storage configuration available, exiting.", flush=True) - raise MisconfiguredStorageBackend() - - if config['storage_type'] == 'S3': - - self.model_repository = S3ModelRepository(config['storage_config']) - else: - print("REDUCER CONTROL: Unsupported storage backend, exiting.", flush=True) - raise UnsupportedStorageBackend() - - self.client_allocation_policy = self.client_allocation_policy_least_packed - - if self.statestore.is_inited(): - self.__state = ReducerState.idle - - def get_helper(self): - """ - - :return: - """ - helper_type = self.statestore.get_framework() - helper = fedn.utils.helpers.get_helper(helper_type) - if not helper: - print("CONTROL: Unsupported helper type {}, please configure compute_context.helper !".format(helper_type), - flush=True) - return None - return helper - - def delete_bucket_objects(self): - """ - - :return: - """ - return self.model_repository.delete_objects() - - def get_state(self): - """ - - :return: - """ - return self.__state - - def idle(self): - """ - - :return: - """ - if self.__state == ReducerState.idle: - return True - else: - return False - - def get_first_model(self): - """ - - :return: - """ - return self.statestore.get_first() - - def get_latest_model(self): - """ - - :return: - """ - return self.statestore.get_latest() - - def get_model_info(self): - """ - - :return: - """ - return self.statestore.get_model_info() - - def get_events(self): - """ - - :return: - """ - return self.statestore.get_events() - - def drop_models(self): - """ - - """ - self.statestore.drop_models() - - def get_compute_context(self): - """ - - :return: - """ - definition = self.statestore.get_compute_context() - if definition: - try: - context = definition['filename'] - return context - except (IndexError, KeyError): - print( - "No context filename set for compute context definition", flush=True) - return None - else: - return None - - def set_compute_context(self, filename, path): - """ Persist the configuration for the compute package. """ - self.model_repository.set_compute_context(filename, path) - self.statestore.set_compute_context(filename) - - def get_compute_package(self, compute_package=''): - """ - - :param compute_package: - :return: - """ - if compute_package == '': - compute_package = self.get_compute_context() - return self.model_repository.get_compute_package(compute_package) - - def commit(self, model_id, model=None): - """ Commit a model to the global model trail. The model commited becomes the lastest consensus model. """ - - helper = self.get_helper() - if model is not None: - print("Saving model to disk...", flush=True) - outfile_name = helper.save_model(model) - print("DONE", flush=True) - print("Uploading model to Minio...", flush=True) - model_id = self.model_repository.set_model( - outfile_name, is_file=True) - print("DONE", flush=True) - os.unlink(outfile_name) - - self.statestore.set_latest(model_id) - - def _out_of_sync(self, combiners=None): - - if not combiners: - combiners = self.network.get_combiners() - - osync = [] - for combiner in combiners: - try: - model_id = combiner.get_model_id() - except CombinerUnavailableError: - self._handle_unavailable_combiner(combiner) - model_id = None - - if model_id and (model_id != self.get_latest_model()): - osync.append(combiner) - return osync - - def check_round_participation_policy(self, compute_plan, combiner_state): - """ Evaluate reducer level policy for combiner round-participation. - This is a decision on ReducerControl level, additional checks - applies on combiner level. Not all reducer control flows might - need or want to use a participation policy. """ - - if compute_plan['task'] == 'training': - nr_active_clients = int(combiner_state['nr_active_trainers']) - elif compute_plan['task'] == 'validation': - nr_active_clients = int(combiner_state['nr_active_validators']) - else: - print("Invalid task type!", flush=True) - return False - - if int(compute_plan['clients_required']) <= nr_active_clients: - return True - else: - return False - - def check_round_start_policy(self, combiners): - """ Check if the overall network state meets the policy to start a round. """ - if len(combiners) > 0: - return True - else: - return False - - def check_round_validity_policy(self, combiners): - """ - At the end of the round, before committing a model to the model ledger, - we check if a round validity policy has been met. This can involve - e.g. asserting that a certain number of combiners have reported in an - updated model, or that criteria on model performance have been met. - """ - if combiners == []: - return False - else: - return True - - def _handle_unavailable_combiner(self, combiner): - """ This callback is triggered if a combiner is found to be unresponsive. """ - # TODO: Implement strategy to handle the case. - print("REDUCER CONTROL: Combiner {} unavailable.".format( - combiner.name), flush=True) - - def _select_round_combiners(self, compute_plan): - combiners = [] - for combiner in self.network.get_combiners(): - try: - combiner_state = combiner.report() - except CombinerUnavailableError: - self._handle_unavailable_combiner(combiner) - combiner_state = None - - if combiner_state: - is_participating = self.check_round_participation_policy( - compute_plan, combiner_state) - if is_participating: - combiners.append((combiner, compute_plan)) - return combiners + super().__init__(statestore) + self.name = "DefaultControl" def round(self, config, round_number): """ Execute one global round. """ @@ -411,16 +191,16 @@ def sync_combiners(self, combiners, model_id): def instruct(self, config): """ Main entrypoint, executes the compute plan. """ - if self.__state == ReducerState.instructing: + if self._state == ReducerState.instructing: print("Already set in INSTRUCTING state", flush=True) return - self.__state = ReducerState.instructing + self._state = ReducerState.instructing if not self.get_latest_model(): print("No model in model chain, please seed the alliance!") - self.__state = ReducerState.monitoring + self._state = ReducerState.monitoring # TODO: Validate and set the round config object # self.set_config(config) @@ -467,7 +247,7 @@ def instruct(self, config): round_meta['time_round'] = time.time() - tic self.tracer.set_round_meta_reducer(round_meta) - self.__state = ReducerState.idle + self._state = ReducerState.idle def reduce(self, combiners): """ Combine current models at Combiner nodes into one global model. """ @@ -507,74 +287,3 @@ def reduce(self, combiners): i = i + 1 return model, meta - - def monitor(self, config=None): - """ - - :param config: - """ - # status = self.network.check_health() - pass - - def client_allocation_policy_first_available(self): - """ - Allocate client to the first available combiner in the combiner list. - Packs one combiner full before filling up next combiner. - """ - for combiner in self.network.get_combiners(): - if combiner.allowing_clients(): - return combiner - return None - - def client_allocation_policy_least_packed(self): - """ - Allocate client to the available combiner with the smallest number of clients. - Spreads clients evenly over all active combiners. - - TODO: Not thread safe - not garanteed to result in a perfectly even partition. - - """ - min_clients = None - selected_combiner = None - - for combiner in self.network.get_combiners(): - try: - if combiner.allowing_clients(): - combiner_state = combiner.report() - nac = combiner_state['nr_active_clients'] - if not min_clients: - min_clients = nac - selected_combiner = combiner - elif nac < min_clients: - min_clients = nac - selected_combiner = combiner - except CombinerUnavailableError: - print("Combiner was not responding, continuing to next") - - return selected_combiner - - def find(self, name): - """ - - :param name: - :return: - """ - for combiner in self.network.get_combiners(): - if name == combiner.name: - return combiner - return None - - def find_available_combiner(self): - """ - - :return: - """ - combiner = self.client_allocation_policy() - return combiner - - def state(self): - """ - - :return: - """ - return self.__state diff --git a/fedn/fedn/network/reducer.py b/fedn/fedn/network/reducer.py index ede6c26e4..9c905b1b7 100644 --- a/fedn/fedn/network/reducer.py +++ b/fedn/fedn/network/reducer.py @@ -5,7 +5,7 @@ from datetime import datetime from fedn.common.security.certificatemanager import CertificateManager -from fedn.network.controller.control import ReducerControl +from fedn.network.controller.control import Control from fedn.network.dashboard.restservice import ReducerRestService from fedn.network.state import ReducerStateToString @@ -50,7 +50,7 @@ def __init__(self, statestore): # The certificate manager is a utility that generates (self-signed) certificates. self.certificate_manager = CertificateManager(os.getcwd() + "/certs/") - self.control = ReducerControl(self.statestore) + self.control = Control(self.statestore) self.rest = ReducerRestService( config, self.control, self.certificate_manager) From 612dd7508372bf7952bba4303e86fc58caf5ba03 Mon Sep 17 00:00:00 2001 From: Andreas Hellander Date: Fri, 26 Aug 2022 15:28:06 +0200 Subject: [PATCH 084/185] More refactoring and cleaning --- examples/mnist-keras/bin/init_venv.sh | 2 +- examples/mnist-keras/client/entrypoint | 11 +- .../combiner/aggregators/aggregator.py | 180 +++++++++++++--- .../combiner/aggregators/aggregatorbase.py | 38 ++++ .../network/combiner/aggregators/fedavg.py | 160 --------------- .../combiner/{roundcontrol.py => round.py} | 7 +- fedn/fedn/network/combiner/server.py | 4 +- fedn/fedn/network/controller/control.py | 193 +++++++++--------- fedn/fedn/network/dashboard/restservice.py | 21 +- 9 files changed, 303 insertions(+), 313 deletions(-) create mode 100644 fedn/fedn/network/combiner/aggregators/aggregatorbase.py delete mode 100644 fedn/fedn/network/combiner/aggregators/fedavg.py rename fedn/fedn/network/combiner/{roundcontrol.py => round.py} (98%) diff --git a/examples/mnist-keras/bin/init_venv.sh b/examples/mnist-keras/bin/init_venv.sh index 65c860ec4..6856700a9 100755 --- a/examples/mnist-keras/bin/init_venv.sh +++ b/examples/mnist-keras/bin/init_venv.sh @@ -2,7 +2,7 @@ set -e # Init venv -python -m venv .mnist-keras +python3 -m venv .mnist-keras # Pip deps .mnist-keras/bin/pip install --upgrade pip diff --git a/examples/mnist-keras/client/entrypoint b/examples/mnist-keras/client/entrypoint index e9609f2ca..dc0678ffe 100755 --- a/examples/mnist-keras/client/entrypoint +++ b/examples/mnist-keras/client/entrypoint @@ -1,8 +1,9 @@ #!./.mnist-keras/bin/python import json import os +import random -import docker +#import docker import fire import numpy as np import tensorflow as tf @@ -14,10 +15,10 @@ NUM_CLASSES = 10 def _get_data_path(): # Figure out FEDn client number from container name - client = docker.from_env() - container = client.containers.get(os.environ['HOSTNAME']) - number = container.name[-1] - + #client = docker.from_env() + #container = client.containers.get(os.environ['HOSTNAME']) + #number = container.name[-1] + number = random.randint(0, 1) # Return data path return f"/var/data/clients/{number}/mnist.npz" diff --git a/fedn/fedn/network/combiner/aggregators/aggregator.py b/fedn/fedn/network/combiner/aggregators/aggregator.py index d03a1811f..95fce87a4 100644 --- a/fedn/fedn/network/combiner/aggregators/aggregator.py +++ b/fedn/fedn/network/combiner/aggregators/aggregator.py @@ -1,38 +1,160 @@ -from abc import ABC, abstractmethod +import json +import queue +import time +import fedn.common.net.grpc.fedn_pb2 as fedn +from fedn.network.combiner.aggregators.aggregatorbase import AggregatorBase -class AggregatorBase(ABC): - """ Abstract class defining helpers. """ - @abstractmethod +class Aggregator(AggregatorBase): + """ Local SGD / Federated Averaging (FedAvg) aggregator. + + :param id: A reference to id of :class: `fedn.combiner.Combiner` + :type id: str + :param storage: Model repository for :class: `fedn.combiner.Combiner` + :type storage: class: `fedn.common.storage.s3.s3repo.S3ModelRepository` + :param server: A handle to the Combiner class :class: `fedn.combiner.Combiner` + :type server: class: `fedn.combiner.Combiner` + :param modelservice: A handle to the model service :class: `fedn.clients.combiner.modelservice.ModelService` + :type modelservice: class: `fedn.clients.combiner.modelservice.ModelService` + :param control: A handle to the :class: `fedn.clients.combiner.roundcontrol.RoundControl` + :type control: class: `fedn.clients.combiner.roundcontrol.RoundControl` + + """ + def __init__(self, id, storage, server, modelservice, control): - """ """ - self.name = "" - self.storage = storage - self.id = id - self.server = server - self.modelservice = modelservice - self.control = control - - @abstractmethod + """Constructor method + """ + + super().__init__(id, storage, server, modelservice, control) + + self.name = "FedAvg" + self.validations = {} + self.model_updates = queue.Queue() + def on_model_update(self, model_id): - pass + """Callback when a new model update is recieved from a client. + Performs (optional) pre-processing and the puts the update id + on the aggregation queue. + + :param model_id: ID of model update + :type model_id: str + """ + try: + self.server.report_status("AGGREGATOR({}): callback received model {}".format(self.name, model_id), + log_level=fedn.Status.INFO) + + # Push the model update to the processing queue + self.model_updates.put(model_id) + except Exception as e: + self.server.report_status("AGGREGATOR({}): Failed to receive candidate model! {}".format(self.name, e), + log_level=fedn.Status.WARNING) + pass - @abstractmethod def on_model_validation(self, validation): - pass + """ Callback when a new model validation is recieved from a client. + + :param validation: Dict containing validation data sent by client. + Must be valid JSON. + :type validation: dict + """ + + # Currently, the validations are actually sent as status messages + # directly in the client, so here we are just storing them in the + # combiner memory. This will need to be refactored later so that this + # callback is responsible for reporting the validation to the db. + + model_id = validation.model_id + data = json.loads(validation.data) + try: + self.validations[model_id].append(data) + except KeyError: + self.validations[model_id] = [data] + + self.server.report_status("AGGREGATOR({}): callback processed validation {}".format(self.name, validation.model_id), + log_level=fedn.Status.INFO) - @abstractmethod def combine_models(self, nr_expected_models=None, nr_required_models=1, helper=None, timeout=180): - pass - - -# def get_aggregator(aggregator_type): -# """ Return an instance of the aggregator class. -# -# :param aggregator_type (str): The aggregator type ('fedavg') -# :return: -# """ -# if helper_type == 'fedavg': -# from fedn.aggregators.fedavg import FedAvgAggregator -# return FedAvgAggregator() + """Compute a running average of model updates. + + :param nr_expected_models: The number of updates expected in this round, defaults to None + :type nr_expected_models: int, optional + :param nr_required_models: The number of updates needed to a valid round, defaults to 1 + :type nr_required_models: int, optional + :param helper: An instance of :class: `fedn.utils.helpers.HelperBase`, ML framework specific helper, defaults to None + :type helper: class: `fedn.utils.helpers.HelperBase`, optional + :param timeout: Timeout for model updates, defaults to 180 + :type timeout: int, optional + :return: The global model and metadata + :rtype: tuple + """ + + data = {} + data['time_model_load'] = 0.0 + data['time_model_aggregation'] = 0.0 + + self.server.report_status( + "AGGREGATOR({}): Aggregating model updates...".format(self.name)) + + round_time = 0.0 + polling_interval = 1.0 + nr_processed_models = 0 + while nr_processed_models < nr_expected_models: + try: + model_id = self.model_updates.get(block=False) + self.server.report_status( + "AGGREGATOR({}): Received model update with id {}".format(self.name, model_id)) + + # Load the model update from disk + tic = time.time() + model_str = self.control.load_model_fault_tolerant(model_id) + if model_str: + try: + model_next = helper.load_model_from_BytesIO( + model_str.getbuffer()) + except IOError: + self.server.report_status( + "AGGREGATOR({}): Failed to load model!".format(self.name)) + else: + raise + data['time_model_load'] += time.time() - tic + + # Aggregate / reduce + tic = time.time() + if nr_processed_models == 0: + model = model_next + else: + model = helper.increment_average( + model, model_next, nr_processed_models + 1) + data['time_model_aggregation'] += time.time() - tic + + nr_processed_models += 1 + self.model_updates.task_done() + except queue.Empty: + self.server.report_status("AGGREGATOR({}): waiting for model updates: {} of {} completed.".format(self.name, + nr_processed_models, + nr_expected_models)) + time.sleep(polling_interval) + round_time += polling_interval + except Exception as e: + self.server.report_status( + "AGGERGATOR({}): Error encoutered while reading model update, skipping this update. {}".format(self.name, e)) + nr_expected_models -= 1 + if nr_expected_models <= 0: + return None, data + self.model_updates.task_done() + + if round_time >= timeout: + self.server.report_status("AGGREGATOR({}): training round timed out.".format( + self.name), log_level=fedn.Status.WARNING) + # TODO: Generalize policy for what to do in case of timeout. + if nr_processed_models >= nr_required_models: + break + else: + return None, data + + data['nr_successful_updates'] = nr_processed_models + + self.server.report_status("AGGREGATOR({}): Training round completed, aggregated {} models.".format(self.name, nr_processed_models), + log_level=fedn.Status.INFO) + return model, data diff --git a/fedn/fedn/network/combiner/aggregators/aggregatorbase.py b/fedn/fedn/network/combiner/aggregators/aggregatorbase.py new file mode 100644 index 000000000..d03a1811f --- /dev/null +++ b/fedn/fedn/network/combiner/aggregators/aggregatorbase.py @@ -0,0 +1,38 @@ +from abc import ABC, abstractmethod + + +class AggregatorBase(ABC): + """ Abstract class defining helpers. """ + + @abstractmethod + def __init__(self, id, storage, server, modelservice, control): + """ """ + self.name = "" + self.storage = storage + self.id = id + self.server = server + self.modelservice = modelservice + self.control = control + + @abstractmethod + def on_model_update(self, model_id): + pass + + @abstractmethod + def on_model_validation(self, validation): + pass + + @abstractmethod + def combine_models(self, nr_expected_models=None, nr_required_models=1, helper=None, timeout=180): + pass + + +# def get_aggregator(aggregator_type): +# """ Return an instance of the aggregator class. +# +# :param aggregator_type (str): The aggregator type ('fedavg') +# :return: +# """ +# if helper_type == 'fedavg': +# from fedn.aggregators.fedavg import FedAvgAggregator +# return FedAvgAggregator() diff --git a/fedn/fedn/network/combiner/aggregators/fedavg.py b/fedn/fedn/network/combiner/aggregators/fedavg.py deleted file mode 100644 index e0cc6dcb0..000000000 --- a/fedn/fedn/network/combiner/aggregators/fedavg.py +++ /dev/null @@ -1,160 +0,0 @@ -import json -import queue -import time - -import fedn.common.net.grpc.fedn_pb2 as fedn -from fedn.network.combiner.aggregators.aggregator import AggregatorBase - - -class FedAvgAggregator(AggregatorBase): - """ Local SGD / Federated Averaging (FedAvg) aggregator. - - :param id: A reference to id of :class: `fedn.combiner.Combiner` - :type id: str - :param storage: Model repository for :class: `fedn.combiner.Combiner` - :type storage: class: `fedn.common.storage.s3.s3repo.S3ModelRepository` - :param server: A handle to the Combiner class :class: `fedn.combiner.Combiner` - :type server: class: `fedn.combiner.Combiner` - :param modelservice: A handle to the model service :class: `fedn.clients.combiner.modelservice.ModelService` - :type modelservice: class: `fedn.clients.combiner.modelservice.ModelService` - :param control: A handle to the :class: `fedn.clients.combiner.roundcontrol.RoundControl` - :type control: class: `fedn.clients.combiner.roundcontrol.RoundControl` - - """ - - def __init__(self, id, storage, server, modelservice, control): - """Constructor method - """ - - super().__init__(id, storage, server, modelservice, control) - - self.name = "FedAvg" - self.validations = {} - self.model_updates = queue.Queue() - - def on_model_update(self, model_id): - """Callback when a new model update is recieved from a client. - Performs (optional) pre-processing and the puts the update id - on the aggregation queue. - - :param model_id: ID of model update - :type model_id: str - """ - try: - self.server.report_status("AGGREGATOR({}): callback received model {}".format(self.name, model_id), - log_level=fedn.Status.INFO) - - # Push the model update to the processing queue - self.model_updates.put(model_id) - except Exception as e: - self.server.report_status("AGGREGATOR({}): Failed to receive candidate model! {}".format(self.name, e), - log_level=fedn.Status.WARNING) - pass - - def on_model_validation(self, validation): - """ Callback when a new model validation is recieved from a client. - - :param validation: Dict containing validation data sent by client. - Must be valid JSON. - :type validation: dict - """ - - # Currently, the validations are actually sent as status messages - # directly in the client, so here we are just storing them in the - # combiner memory. This will need to be refactored later so that this - # callback is responsible for reporting the validation to the db. - - model_id = validation.model_id - data = json.loads(validation.data) - try: - self.validations[model_id].append(data) - except KeyError: - self.validations[model_id] = [data] - - self.server.report_status("AGGREGATOR({}): callback processed validation {}".format(self.name, validation.model_id), - log_level=fedn.Status.INFO) - - def combine_models(self, nr_expected_models=None, nr_required_models=1, helper=None, timeout=180): - """Compute a running average of model updates. - - :param nr_expected_models: The number of updates expected in this round, defaults to None - :type nr_expected_models: int, optional - :param nr_required_models: The number of updates needed to a valid round, defaults to 1 - :type nr_required_models: int, optional - :param helper: An instance of :class: `fedn.utils.helpers.HelperBase`, ML framework specific helper, defaults to None - :type helper: class: `fedn.utils.helpers.HelperBase`, optional - :param timeout: Timeout for model updates, defaults to 180 - :type timeout: int, optional - :return: The global model and metadata - :rtype: tuple - """ - - data = {} - data['time_model_load'] = 0.0 - data['time_model_aggregation'] = 0.0 - - self.server.report_status( - "AGGREGATOR({}): Aggregating model updates...".format(self.name)) - - round_time = 0.0 - polling_interval = 1.0 - nr_processed_models = 0 - while nr_processed_models < nr_expected_models: - try: - model_id = self.model_updates.get(block=False) - self.server.report_status( - "AGGREGATOR({}): Received model update with id {}".format(self.name, model_id)) - - # Load the model update from disk - tic = time.time() - model_str = self.control.load_model_fault_tolerant(model_id) - if model_str: - try: - model_next = helper.load_model_from_BytesIO( - model_str.getbuffer()) - except IOError: - self.server.report_status( - "AGGREGATOR({}): Failed to load model!".format(self.name)) - else: - raise - data['time_model_load'] += time.time() - tic - - # Aggregate / reduce - tic = time.time() - if nr_processed_models == 0: - model = model_next - else: - model = helper.increment_average( - model, model_next, nr_processed_models + 1) - data['time_model_aggregation'] += time.time() - tic - - nr_processed_models += 1 - self.model_updates.task_done() - except queue.Empty: - self.server.report_status("AGGREGATOR({}): waiting for model updates: {} of {} completed.".format(self.name, - nr_processed_models, - nr_expected_models)) - time.sleep(polling_interval) - round_time += polling_interval - except Exception as e: - self.server.report_status( - "AGGERGATOR({}): Error encoutered while reading model update, skipping this update. {}".format(self.name, e)) - nr_expected_models -= 1 - if nr_expected_models <= 0: - return None, data - self.model_updates.task_done() - - if round_time >= timeout: - self.server.report_status("AGGREGATOR({}): training round timed out.".format( - self.name), log_level=fedn.Status.WARNING) - # TODO: Generalize policy for what to do in case of timeout. - if nr_processed_models >= nr_required_models: - break - else: - return None, data - - data['nr_successful_updates'] = nr_processed_models - - self.server.report_status("AGGREGATOR({}): Training round completed, aggregated {} models.".format(self.name, nr_processed_models), - log_level=fedn.Status.INFO) - return model, data diff --git a/fedn/fedn/network/combiner/roundcontrol.py b/fedn/fedn/network/combiner/round.py similarity index 98% rename from fedn/fedn/network/combiner/roundcontrol.py rename to fedn/fedn/network/combiner/round.py index c855c2e45..b6332b5c3 100644 --- a/fedn/fedn/network/combiner/roundcontrol.py +++ b/fedn/fedn/network/combiner/round.py @@ -4,11 +4,11 @@ import time import uuid -from fedn.network.combiner.aggregators.fedavg import FedAvgAggregator +from fedn.network.combiner.aggregators.aggregator import Aggregator from fedn.utils.helpers import get_helper -class RoundControl: +class CombinerRound: """ Combiner level round controller. The controller recieves round configurations from the global controller @@ -35,8 +35,7 @@ def __init__(self, id, storage, server, modelservice): self.config = {} # TODO, make runtime configurable - - self.aggregator = FedAvgAggregator( + self.aggregator = Aggregator( self.id, self.storage, self.server, self.modelservice, self) def push_round_config(self, round_config): diff --git a/fedn/fedn/network/combiner/server.py b/fedn/fedn/network/combiner/server.py index d92f05ec8..25ecf65c4 100644 --- a/fedn/fedn/network/combiner/server.py +++ b/fedn/fedn/network/combiner/server.py @@ -16,7 +16,7 @@ from fedn.common.storage.s3.s3repo import S3ModelRepository from fedn.common.tracer.mongotracer import MongoTracer from fedn.network.combiner.modelservice import ModelService -from fedn.network.combiner.roundcontrol import RoundControl +from fedn.network.combiner.round import CombinerRound VALID_NAME_REGEX = '^[a-zA-Z0-9_-]*$' @@ -111,7 +111,7 @@ def __init__(self, connect_config): self.tracer = MongoTracer( config['statestore']['mongo_config'], config['statestore']['network_id']) - self.control = RoundControl( + self.control = CombinerRound( self.id, self.repository, self, self.modelservice) threading.Thread(target=self.control.run, daemon=True).start() diff --git a/fedn/fedn/network/controller/control.py b/fedn/fedn/network/controller/control.py index f2f81844d..c7c43204d 100644 --- a/fedn/fedn/network/controller/control.py +++ b/fedn/fedn/network/controller/control.py @@ -4,12 +4,12 @@ import uuid from datetime import datetime -import fedn.utils.helpers -from fedn.common.storage.s3.s3repo import S3ModelRepository +#import fedn.utils.helpers +#from fedn.common.storage.s3.s3repo import S3ModelRepository from fedn.common.tracer.mongotracer import MongoTracer from fedn.network.combiner.interfaces import CombinerUnavailableError from fedn.network.controller.controlbase import ControlBase -from fedn.network.network import Network +#from fedn.network.network import Network from fedn.network.state import ReducerState @@ -22,7 +22,7 @@ class MisconfiguredStorageBackend(Exception): class Control(ControlBase): - """ Main conroller for training round. + """ Conroller, implementing the overall global training strategy. """ @@ -31,8 +31,73 @@ def __init__(self, statestore): super().__init__(statestore) self.name = "DefaultControl" - def round(self, config, round_number): - """ Execute one global round. """ + def session(self, config): + """ Main entrypoint for a training session. + + A training session is comprised of one or more rounds. + """ + + if self._state == ReducerState.instructing: + print("Already set in INSTRUCTING state. A session is in progress.", flush=True) + return + + self._state = ReducerState.instructing + + if not self.get_latest_model(): + print("No model in model chain, please seed the alliance!") + + if "session_id" not in config.keys(): + session_id = uuid.uuid4() + config['session_id'] = session_id + + self._state = ReducerState.monitoring + + # TODO: Refactor + # Initialize a tracer for this session + statestore_config = self.statestore.get_config() + self.tracer = MongoTracer( + statestore_config['mongo_config'], statestore_config['network_id']) + last_round = self.tracer.get_latest_round() + + for round in range(1, int(config['rounds'] + 1)): + tic = time.time() + if last_round: + current_round = last_round + round + else: + current_round = round + + start_time = datetime.now() + + self.tracer.start_monitor(round) + model_id = None + round_meta = {'round_id': current_round} + try: + model_id, round_meta = self.round(config, current_round) + except TypeError: + print("Could not unpack data from round...", flush=True) + + end_time = datetime.now() + + if model_id: + print("CONTROL: Round completed, new model: {}".format( + model_id), flush=True) + round_time = end_time - start_time + self.tracer.set_latest_time(current_round, round_time.seconds) + round_meta['status'] = 'Success' + else: + print("CONTROL: Round failed!") + round_meta['status'] = 'Failed' + + # stop round monitor + self.tracer.stop_monitor() + round_meta['time_round'] = time.time() - tic + self.tracer.set_round_meta_reducer(round_meta) + + # TODO: Report completion of session + self._state = ReducerState.idle + + def round(self, session_config, round_number): + """ Defines execution of one global round. """ round_meta = {'round_id': round_number} @@ -40,15 +105,16 @@ def round(self, config, round_number): print("REDUCER: No combiners connected!") return None, round_meta - # 1. Formulate compute plans for this round and determine which combiners should participate in the round. - compute_plan = copy.deepcopy(config) - compute_plan['rounds'] = 1 - compute_plan['round_id'] = round_number - compute_plan['task'] = 'training' - compute_plan['model_id'] = self.get_latest_model() - compute_plan['helper_type'] = self.statestore.get_framework() + # 1. Round config for combiners for this global round, + # and determine which combiners should participate in the round. + combiner_round_config = copy.deepcopy(session_config) + combiner_round_config['rounds'] = 1 + combiner_round_config['round_id'] = round_number + combiner_round_config['task'] = 'training' + combiner_round_config['model_id'] = self.get_latest_model() + combiner_round_config['helper_type'] = self.statestore.get_framework() - round_meta['compute_plan'] = compute_plan + round_meta['combiner_round_config'] = combiner_round_config combiners = [] for combiner in self.network.get_combiners(): @@ -60,16 +126,17 @@ def round(self, config, round_number): combiner_state = None if combiner_state is not None: - is_participating = self.check_round_participation_policy( - compute_plan, combiner_state) + is_participating = self.evaluate_round_participation_policy( + combiner_round_config, combiner_state) if is_participating: - combiners.append((combiner, compute_plan)) + combiners.append((combiner, combiner_round_config)) - round_start = self.check_round_start_policy(combiners) + round_start = self.evaluate_round_start_policy(combiners) - print("CONTROL: round start policy met, participating combiners {}".format( - combiners), flush=True) - if not round_start: + if round_start: + print("CONTROL: round start policy met, participating combiners {}".format( + combiners), flush=True) + else: print("CONTROL: Round start policy not met, skipping round!", flush=True) return None @@ -83,10 +150,10 @@ def round(self, config, round_number): start_time = datetime.now() - for combiner, compute_plan in combiners: + for combiner, combiner_round_config in combiners: try: - self.sync_combiners([combiner], self.get_latest_model()) - _ = combiner.start(compute_plan) + self.set_combiner_model([combiner], self.get_latest_model()) + _ = combiner.start(combiner_round_config) except CombinerUnavailableError: # This is OK, handled by round accept policy self._handle_unavailable_combiner(combiner) @@ -102,10 +169,10 @@ def round(self, config, round_number): cl.append(combiner) wait = 0.0 - while len(self._out_of_sync(cl)) < len(combiners): + while len(self._check_combiners_out_of_sync(cl)) < len(combiners): time.sleep(1.0) wait += 1.0 - if wait >= config['round_timeout']: + if wait >= session_config['round_timeout']: break # TODO refactor @@ -117,7 +184,7 @@ def round(self, config, round_number): # OBS! Here we are checking against all combiners, not just those that computed in this round. # This means we let straggling combiners participate in the update - updated = self._out_of_sync() + updated = self._check_combiners_out_of_sync() print("COMBINERS UPDATED MODELS: {}".format(updated), flush=True) print("Checking round validity policy...", flush=True) @@ -168,10 +235,9 @@ def round(self, config, round_number): for combiner, combiner_config in validating_combiners: try: - self.sync_combiners([combiner], self.get_latest_model()) + self.set_combiner_model([combiner], self.get_latest_model()) combiner.start(combiner_config) except CombinerUnavailableError: - # OK if validation fails for a combiner self._handle_unavailable_combiner(combiner) pass @@ -180,75 +246,6 @@ def round(self, config, round_number): return model_id, round_meta - def sync_combiners(self, combiners, model_id): - """ Spread the current consensus model to all active combiner nodes. """ - if not model_id: - print("GOT NO MODEL TO SET! Have you seeded the FedML model?", flush=True) - return - for combiner in combiners: - _ = combiner.set_model_id(model_id) - - def instruct(self, config): - """ Main entrypoint, executes the compute plan. """ - - if self._state == ReducerState.instructing: - print("Already set in INSTRUCTING state", flush=True) - return - - self._state = ReducerState.instructing - - if not self.get_latest_model(): - print("No model in model chain, please seed the alliance!") - - self._state = ReducerState.monitoring - - # TODO: Validate and set the round config object - # self.set_config(config) - - # TODO: Refactor - - statestore_config = self.statestore.get_config() - self.tracer = MongoTracer( - statestore_config['mongo_config'], statestore_config['network_id']) - last_round = self.tracer.get_latest_round() - - for round in range(1, int(config['rounds'] + 1)): - tic = time.time() - if last_round: - current_round = last_round + round - else: - current_round = round - - start_time = datetime.now() - # start round monitor - self.tracer.start_monitor(round) - # todo add try except bloc for round meta - model_id = None - round_meta = {'round_id': current_round} - try: - model_id, round_meta = self.round(config, current_round) - except TypeError: - print("Could not unpack data from round...", flush=True) - - end_time = datetime.now() - - if model_id: - print("REDUCER: Global round completed, new model: {}".format( - model_id), flush=True) - round_time = end_time - start_time - self.tracer.set_latest_time(current_round, round_time.seconds) - round_meta['status'] = 'Success' - else: - print("REDUCER: Global round failed!") - round_meta['status'] = 'Failed' - - # stop round monitor - self.tracer.stop_monitor() - round_meta['time_round'] = time.time() - tic - self.tracer.set_round_meta_reducer(round_meta) - - self._state = ReducerState.idle - def reduce(self, combiners): """ Combine current models at Combiner nodes into one global model. """ diff --git a/fedn/fedn/network/dashboard/restservice.py b/fedn/fedn/network/dashboard/restservice.py index 7e4876b76..f3e1caf9f 100644 --- a/fedn/fedn/network/dashboard/restservice.py +++ b/fedn/fedn/network/dashboard/restservice.py @@ -521,7 +521,7 @@ def drop_control(): # http://localhost:8090/control?rounds=4&model_id=879fa112-c861-4cb1-a25d-775153e5b548 @app.route('/control', methods=['GET', 'POST']) def control(): - """ Main page for round control. Configure, start and stop global training rounds. """ + """ Main page for round control. Configure, start and stop training sessions. """ # Token auth if self.token_auth_enabled: self.authorize(request, app.config.get('SECRET_KEY')) @@ -529,9 +529,8 @@ def control(): not_configured = self.check_configured() if not_configured: return not_configured - client = self.name + state = ReducerStateToString(self.control.state()) - logs = None refresh = True if self.remote_compute_context: @@ -546,7 +545,8 @@ def control(): url_for('index', state=state, refresh=refresh, message="Reducer is in monitoring state")) if request.method == 'POST': - timeout = float(request.form.get('timeout', 180)) + # Get session configuration + round_timeout = float(request.form.get('timeout', 180)) rounds = int(request.form.get('rounds', 1)) task = (request.form.get('task', '')) clients_required = request.form.get('clients_required', 1) @@ -576,14 +576,14 @@ def control(): latest_model_id = self.control.get_latest_model() - config = {'round_timeout': timeout, 'model_id': latest_model_id, + config = {'round_timeout': round_timeout, 'model_id': latest_model_id, 'rounds': rounds, 'clients_required': clients_required, 'clients_requested': clients_requested, 'task': task, 'validate': validate, 'helper_type': helper_type} - threading.Thread(target=self.control.instruct, + threading.Thread(target=self.control.session, args=(config,)).start() - # self.control.instruct(config) + return redirect(url_for('index', state=state, refresh=refresh, message="Sent execution plan.", message_type='SUCCESS')) @@ -601,13 +601,6 @@ def control(): seed_model_id=seed_model_id, helper=self.control.statestore.get_framework(), validate=True, configured=True) - client = self.name - state = ReducerStateToString(self.control.state()) - logs = None - refresh = False - return render_template('index.html', client=client, state=state, logs=logs, refresh=refresh, - configured=True) - @app.route('/assign') def assign(): """Handle client assignment requests. """ From 1b8c0abc24792456af393e5a29d5a8ef0dbfa103 Mon Sep 17 00:00:00 2001 From: Andreas Hellander Date: Mon, 29 Aug 2022 09:21:38 +0200 Subject: [PATCH 085/185] refactored look-aside loadbalancer --- examples/mnist-pytorch/client/entrypoint | 2 +- examples/mnist-pytorch/requirements.txt | 2 +- fedn/fedn/network/loadbalancer/__init__.py | 0 .../network/loadbalancer/firstavailable.py | 16 ++++ fedn/fedn/network/loadbalancer/leastpacked.py | 31 ++++++++ .../network/loadbalancer/loadbalancerbase.py | 13 ++++ fedn/fedn/network/network.py | 78 ++++++++++--------- fedn/fedn/network/reducer.py | 11 ++- 8 files changed, 115 insertions(+), 38 deletions(-) create mode 100644 fedn/fedn/network/loadbalancer/__init__.py create mode 100644 fedn/fedn/network/loadbalancer/firstavailable.py create mode 100644 fedn/fedn/network/loadbalancer/leastpacked.py create mode 100644 fedn/fedn/network/loadbalancer/loadbalancerbase.py diff --git a/examples/mnist-pytorch/client/entrypoint b/examples/mnist-pytorch/client/entrypoint index 429ca268a..7fa90e99a 100755 --- a/examples/mnist-pytorch/client/entrypoint +++ b/examples/mnist-pytorch/client/entrypoint @@ -159,5 +159,5 @@ if __name__ == '__main__': 'init_seed': init_seed, 'train': train, 'validate': validate, - '_get_data_path': _get_data_path, # for testing + # '_get_data_path': _get_data_path, # for testing }) diff --git a/examples/mnist-pytorch/requirements.txt b/examples/mnist-pytorch/requirements.txt index 305955c06..275c25b01 100644 --- a/examples/mnist-pytorch/requirements.txt +++ b/examples/mnist-pytorch/requirements.txt @@ -1,4 +1,4 @@ torch==1.10.2 torchvision==0.11.3 fire==0.3.1 -docker==5.0.2 \ No newline at end of file +docker==5.0.2 diff --git a/fedn/fedn/network/loadbalancer/__init__.py b/fedn/fedn/network/loadbalancer/__init__.py new file mode 100644 index 000000000..e69de29bb diff --git a/fedn/fedn/network/loadbalancer/firstavailable.py b/fedn/fedn/network/loadbalancer/firstavailable.py new file mode 100644 index 000000000..e5bfc7611 --- /dev/null +++ b/fedn/fedn/network/loadbalancer/firstavailable.py @@ -0,0 +1,16 @@ +from fedn.network.combiner.interfaces import CombinerUnavailableError +from fedn.network.loadbalancer.loadbalancerbase import LoadBalancerBase + + +class LeastPacked(LoadBalancerBase): + + def __init__(self, network): + super().__init__(network) + + def find_combiner(self): + """ Find the first available combiner. """ + + for combiner in self.network.get_combiners(): + if combiner.allowing_clients(): + return combiner + return None diff --git a/fedn/fedn/network/loadbalancer/leastpacked.py b/fedn/fedn/network/loadbalancer/leastpacked.py new file mode 100644 index 000000000..588e6b491 --- /dev/null +++ b/fedn/fedn/network/loadbalancer/leastpacked.py @@ -0,0 +1,31 @@ +from fedn.network.combiner.interfaces import CombinerUnavailableError +from fedn.network.loadbalancer.loadbalancerbase import LoadBalancerBase + + +class LeastPacked(LoadBalancerBase): + + def __init__(self, network): + super().__init__(network) + + def find_combiner(self): + """ + Find the combiner with the least number of attached clients. + + """ + min_clients = None + selected_combiner = None + + for combiner in self.network.get_combiners(): + try: + if combiner.allowing_clients(): + combiner_state = combiner.report() + if not min_clients: + min_clients = combiner_state['nr_active_clients'] + selected_combiner = combiner + elif combiner_state['nr_active_clients'] < min_clients: + min_clients = combiner_state['nr_active_clients'] + selected_combiner = combiner + except CombinerUnavailableError: + pass + + return selected_combiner diff --git a/fedn/fedn/network/loadbalancer/loadbalancerbase.py b/fedn/fedn/network/loadbalancer/loadbalancerbase.py new file mode 100644 index 000000000..aad25c93f --- /dev/null +++ b/fedn/fedn/network/loadbalancer/loadbalancerbase.py @@ -0,0 +1,13 @@ +from abc import ABC, abstractmethod + + +class LoadBalancerBase(ABC): + + def __init__(self, network): + """ """ + self.network = network + + @abstractmethod + def find_combiner(self): + """ """ + pass diff --git a/fedn/fedn/network/network.py b/fedn/fedn/network/network.py index d7a7b8d29..1a9543438 100644 --- a/fedn/fedn/network/network.py +++ b/fedn/fedn/network/network.py @@ -2,20 +2,22 @@ from fedn.network.combiner.interfaces import (CombinerInterface, CombinerUnavailableError) +from fedn.network.loadbalancer.leastpacked import LeastPacked class Network: """ FEDn network. """ - def __init__(self, control, statestore): + def __init__(self, control, statestore, load_balancer=None): """ """ self.statestore = statestore self.control = control self.id = statestore.network_id - @classmethod - def from_statestore(self, network_id): - """ """ + if not load_balancer: + self.load_balancer = LeastPacked() + else: + self.load_balancer = load_balancer def get_combiner(self, name): """ @@ -23,7 +25,11 @@ def get_combiner(self, name): :param name: :return: """ - return self.statestore.get_combiner(name) + combiners = self.get_combiners() + for combiner in combiners: + if name == combiner.name: + return combiner + return None def get_combiners(self): """ @@ -62,20 +68,7 @@ def add_combiner(self, combiner): print("adding combiner {}".format(combiner.name), flush=True) self.statestore.set_combiner(combiner.to_dict()) - def add_client(self, client): - """ Add a new client to the network. - - :param client: - :return: - """ - - if self.find_client(client['name']): - return - - print("adding client {}".format(client['name']), flush=True) - self.statestore.set_client(client) - - def remove(self, combiner): + def remove_combiner(self, combiner): """ :param combiner: @@ -86,19 +79,34 @@ def remove(self, combiner): return self.statestore.delete_combiner(combiner.name) - def find(self, name): + def find_available_combiner(self): """ - :param name: :return: """ - combiners = self.get_combiners() - for combiner in combiners: - if name == combiner.name: - return combiner - return None + combiner = self.load_balancer.find_combiner() + return combiner - def find_client(self, name): + def handle_unavailable_combiner(self, combiner): + """ This callback is triggered if a combiner is found to be unresponsive. """ + # TODO: Implement strategy to handle an unavailable combiner. + print("REDUCER CONTROL: Combiner {} unavailable.".format( + combiner.name), flush=True) + + def add_client(self, client): + """ Add a new client to the network. + + :param client: + :return: + """ + + if self.find_client(client['name']): + return + + print("adding client {}".format(client['name']), flush=True) + self.statestore.set_client(client) + + def get_client(self, name): """ :param name: @@ -107,6 +115,14 @@ def find_client(self, name): ret = self.statestore.get_client(name) return ret + def update_client_data(self, client_data, status, role): + """ Update client status on DB""" + self.statestore.update_client_status(client_data, status, role) + + def get_client_info(self): + """ list available client in DB""" + return self.statestore.list_clients() + def describe(self): """ """ network = [] @@ -121,11 +137,3 @@ def describe(self): def check_health(self): """ """ pass - - def update_client_data(self, client_data, status, role): - """ Update client status on DB""" - self.statestore.update_client_status(client_data, status, role) - - def get_client_info(self): - """ list available client in DB""" - return self.statestore.list_clients() diff --git a/fedn/fedn/network/reducer.py b/fedn/fedn/network/reducer.py index 9c905b1b7..20e332c1c 100644 --- a/fedn/fedn/network/reducer.py +++ b/fedn/fedn/network/reducer.py @@ -50,6 +50,7 @@ def __init__(self, statestore): # The certificate manager is a utility that generates (self-signed) certificates. self.certificate_manager = CertificateManager(os.getcwd() + "/certs/") + # TODO: Make runtime configurable self.control = Control(self.statestore) self.rest = ReducerRestService( @@ -62,6 +63,14 @@ def run(self): self.rest.run() + def monitor(self, config=None): + """ + + :param config: + """ + # status = self.network.check_health() + pass + def control_loop(self): """Manage and report the state of the Reducer.""" @@ -82,6 +91,6 @@ def control_loop(self): t1 = datetime.now() old_state = self.control.state() - self.control.monitor() + self.monitor() except (KeyboardInterrupt, SystemExit): print("Exiting..", flush=True) From 2f639a14a516dd9c11281d5a3cdb6afa9ff742f3 Mon Sep 17 00:00:00 2001 From: Andreas Hellander Date: Tue, 30 Aug 2022 15:42:49 +0200 Subject: [PATCH 086/185] Refactored load-balancer --- examples/mnist-keras/client/entrypoint | 7 +++---- fedn/fedn/network/combiner/interfaces.py | 18 +++++++++++++++++- fedn/fedn/network/controller/control.py | 10 +++++----- fedn/fedn/network/dashboard/restservice.py | 8 ++++---- fedn/fedn/network/network.py | 6 +++--- 5 files changed, 32 insertions(+), 17 deletions(-) diff --git a/examples/mnist-keras/client/entrypoint b/examples/mnist-keras/client/entrypoint index dc0678ffe..361885810 100755 --- a/examples/mnist-keras/client/entrypoint +++ b/examples/mnist-keras/client/entrypoint @@ -15,10 +15,9 @@ NUM_CLASSES = 10 def _get_data_path(): # Figure out FEDn client number from container name - #client = docker.from_env() - #container = client.containers.get(os.environ['HOSTNAME']) - #number = container.name[-1] - number = random.randint(0, 1) + client = docker.from_env() + container = client.containers.get(os.environ['HOSTNAME']) + number = container.name[-1] # Return data path return f"/var/data/clients/{number}/mnist.npz" diff --git a/fedn/fedn/network/combiner/interfaces.py b/fedn/fedn/network/combiner/interfaces.py index 9a694b365..9f6cceb93 100644 --- a/fedn/fedn/network/combiner/interfaces.py +++ b/fedn/fedn/network/combiner/interfaces.py @@ -80,7 +80,7 @@ def to_dict(self): """ data = { - 'parent': self.parent.to_dict(), + # 'parent': self.parent.to_dict(), 'name': self.name, 'address': self.address, 'port': self.port, @@ -109,6 +109,22 @@ def to_json(self): """ return json.dumps(self.to_dict()) + def get_certificate(self): + """ Get combiner certificate. + + : return: + """ + data = self.to_dict() + return data['certificate'] + + def get_key(self): + """ Get combiner key. + + : return: + """ + data = self.to_dict() + return data['key'] + def report(self, config=None): """ diff --git a/fedn/fedn/network/controller/control.py b/fedn/fedn/network/controller/control.py index c7c43204d..1103f6690 100644 --- a/fedn/fedn/network/controller/control.py +++ b/fedn/fedn/network/controller/control.py @@ -48,7 +48,7 @@ def session(self, config): if "session_id" not in config.keys(): session_id = uuid.uuid4() - config['session_id'] = session_id + config['session_id'] = str(session_id) self._state = ReducerState.monitoring @@ -188,7 +188,7 @@ def round(self, session_config, round_number): print("COMBINERS UPDATED MODELS: {}".format(updated), flush=True) print("Checking round validity policy...", flush=True) - round_valid = self.check_round_validity_policy(updated) + round_valid = self.evaluate_round_validity_policy(updated) if not round_valid: # TODO: Should we reset combiner state here? print("REDUCER CONTROL: Round invalid!", flush=True) @@ -223,14 +223,14 @@ def round(self, session_config, round_number): print("DONE", flush=True) # 4. Trigger participating combiner nodes to execute a validation round for the current model - validate = config['validate'] + validate = session_config['validate'] if validate: - combiner_config = copy.deepcopy(config) + combiner_config = copy.deepcopy(session_config) combiner_config['model_id'] = self.get_latest_model() combiner_config['task'] = 'validation' combiner_config['helper_type'] = self.statestore.get_framework() - validating_combiners = self._select_round_combiners( + validating_combiners = self._select_participating_combiners( combiner_config) for combiner, combiner_config in validating_combiners: diff --git a/fedn/fedn/network/dashboard/restservice.py b/fedn/fedn/network/dashboard/restservice.py index f3e1caf9f..e36523a87 100644 --- a/fedn/fedn/network/dashboard/restservice.py +++ b/fedn/fedn/network/dashboard/restservice.py @@ -433,8 +433,8 @@ def add(): 'status': 'added', 'storage': self.control.statestore.get_storage_backend(), 'statestore': self.control.statestore.get_config(), - 'certificate': combiner['certificate'], - 'key': combiner['key'] + 'certificate': combiner.get_certificate(), + 'key': combiner.get_key() } return jsonify(ret) @@ -616,9 +616,9 @@ def assign(): combiner_preferred = request.args.get('combiner', None) if combiner_preferred: - combiner = self.control.find(combiner_preferred) + combiner = self.control.network.get(combiner_preferred) else: - combiner = self.control.find_available_combiner() + combiner = self.control.network.find_available_combiner() if combiner is None: return jsonify({'status': 'retry', diff --git a/fedn/fedn/network/network.py b/fedn/fedn/network/network.py index 1a9543438..e929ddf7b 100644 --- a/fedn/fedn/network/network.py +++ b/fedn/fedn/network/network.py @@ -15,7 +15,7 @@ def __init__(self, control, statestore, load_balancer=None): self.id = statestore.network_id if not load_balancer: - self.load_balancer = LeastPacked() + self.load_balancer = LeastPacked(self) else: self.load_balancer = load_balancer @@ -62,7 +62,7 @@ def add_combiner(self, combiner): print("Reducer is not idle, cannot add additional combiner.") return - if self.find(combiner.name): + if self.get_combiner(combiner.name): return print("adding combiner {}".format(combiner.name), flush=True) @@ -100,7 +100,7 @@ def add_client(self, client): :return: """ - if self.find_client(client['name']): + if self.get_client(client['name']): return print("adding client {}".format(client['name']), flush=True) From fe6175158cdef2302f5ac0378ee99fa53dc51b07 Mon Sep 17 00:00:00 2001 From: Andreas Hellander Date: Wed, 31 Aug 2022 15:16:08 +0200 Subject: [PATCH 087/185] Fixed code checks --- fedn/fedn/network/controller/control.py | 4 ---- 1 file changed, 4 deletions(-) diff --git a/fedn/fedn/network/controller/control.py b/fedn/fedn/network/controller/control.py index 1103f6690..b8c5c6568 100644 --- a/fedn/fedn/network/controller/control.py +++ b/fedn/fedn/network/controller/control.py @@ -1,15 +1,11 @@ import copy -import os import time import uuid from datetime import datetime -#import fedn.utils.helpers -#from fedn.common.storage.s3.s3repo import S3ModelRepository from fedn.common.tracer.mongotracer import MongoTracer from fedn.network.combiner.interfaces import CombinerUnavailableError from fedn.network.controller.controlbase import ControlBase -#from fedn.network.network import Network from fedn.network.state import ReducerState From 63fb1f1636b9023e1892cd7314182d5bd3b2912a Mon Sep 17 00:00:00 2001 From: Andreas Hellander Date: Wed, 31 Aug 2022 21:51:28 +0200 Subject: [PATCH 088/185] latest --- fedn/fedn/network/controller/control.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/fedn/fedn/network/controller/control.py b/fedn/fedn/network/controller/control.py index b8c5c6568..80d5c6d9a 100644 --- a/fedn/fedn/network/controller/control.py +++ b/fedn/fedn/network/controller/control.py @@ -214,7 +214,7 @@ def round(self, session_config, round_number): round_meta['time_commit'] = time.time() - tic else: print("REDUCER: failed to update model in round with config {}".format( - config), flush=True) + session_config), flush=True) return None, round_meta print("DONE", flush=True) From b32cd349cbfc0d220a1ce8d206f35265a46abb0f Mon Sep 17 00:00:00 2001 From: Andreas Hellander Date: Thu, 1 Sep 2022 13:26:03 +0200 Subject: [PATCH 089/185] work in progress --- fedn/fedn/network/controller/control.py | 29 +++++-------------------- 1 file changed, 6 insertions(+), 23 deletions(-) diff --git a/fedn/fedn/network/controller/control.py b/fedn/fedn/network/controller/control.py index 80d5c6d9a..ea0a76a03 100644 --- a/fedn/fedn/network/controller/control.py +++ b/fedn/fedn/network/controller/control.py @@ -98,11 +98,11 @@ def round(self, session_config, round_number): round_meta = {'round_id': round_number} if len(self.network.get_combiners()) < 1: - print("REDUCER: No combiners connected!") + print("REDUCER: No combiners connected!", flush=True) return None, round_meta - # 1. Round config for combiners for this global round, - # and determine which combiners should participate in the round. + # 1. Assemble round config for combiners for this global round, + # and get combiners to participate in the round. combiner_round_config = copy.deepcopy(session_config) combiner_round_config['rounds'] = 1 combiner_round_config['round_id'] = round_number @@ -112,21 +112,7 @@ def round(self, session_config, round_number): round_meta['combiner_round_config'] = combiner_round_config - combiners = [] - for combiner in self.network.get_combiners(): - - try: - combiner_state = combiner.report() - except CombinerUnavailableError: - self._handle_unavailable_combiner(combiner) - combiner_state = None - - if combiner_state is not None: - is_participating = self.evaluate_round_participation_policy( - combiner_round_config, combiner_state) - if is_participating: - combiners.append((combiner, combiner_round_config)) - + combiners = self.get_participating_combiners(combiner_round_config) round_start = self.evaluate_round_start_policy(combiners) if round_start: @@ -139,14 +125,11 @@ def round(self, session_config, round_number): # 2. Sync up and ask participating combiners to coordinate model updates # TODO refactor - statestore_config = self.statestore.get_config() - - self.tracer = MongoTracer( - statestore_config['mongo_config'], statestore_config['network_id']) - start_time = datetime.now() + # Is this really necessary ?? Will combiner not pull for combiner, combiner_round_config in combiners: + # combiner.submit(combiner_round_config) try: self.set_combiner_model([combiner], self.get_latest_model()) _ = combiner.start(combiner_round_config) From a472bab5a1df81bc7cfaa1def9f3c672bc51bc4e Mon Sep 17 00:00:00 2001 From: Andreas Hellander Date: Mon, 5 Sep 2022 19:34:18 +0200 Subject: [PATCH 090/185] Fixed code checks --- fedn/fedn/network/loadbalancer/firstavailable.py | 1 - 1 file changed, 1 deletion(-) diff --git a/fedn/fedn/network/loadbalancer/firstavailable.py b/fedn/fedn/network/loadbalancer/firstavailable.py index e5bfc7611..6ffed0806 100644 --- a/fedn/fedn/network/loadbalancer/firstavailable.py +++ b/fedn/fedn/network/loadbalancer/firstavailable.py @@ -1,4 +1,3 @@ -from fedn.network.combiner.interfaces import CombinerUnavailableError from fedn.network.loadbalancer.loadbalancerbase import LoadBalancerBase From e4be8cb225fc177145161356f15d7db095a3aa25 Mon Sep 17 00:00:00 2001 From: Andreas Hellander Date: Mon, 5 Sep 2022 20:10:06 +0200 Subject: [PATCH 091/185] Update control page --- .../network/dashboard/templates/index.html | 487 +++++++++--------- fedn/fedn/network/reducer.py | 2 +- 2 files changed, 250 insertions(+), 239 deletions(-) diff --git a/fedn/fedn/network/dashboard/templates/index.html b/fedn/fedn/network/dashboard/templates/index.html index a096fa037..da745afa4 100644 --- a/fedn/fedn/network/dashboard/templates/index.html +++ b/fedn/fedn/network/dashboard/templates/index.html @@ -8,12 +8,12 @@ {% if refresh %} - + {% endif %} FEDn Reducer - + @@ -28,14 +28,14 @@ -
-