- {% if server_trace%}
-
Server Trace:
-
{{server_trace | escape}}
-
-
+ {% if server_trace %}
+
Server Trace:
+
+ {% if dev_mode %}
+ {{ server_trace | make_links | safe }}
+ {% else %}
+ {{ server_trace | escape }}
{% endif %}
- Client Trace:
- {{traceback_str | escape}}
+
+
+
+ {% endif %}
+
Client Trace:
+
+ {% if dev_mode %}
+ {{ traceback_str | make_links | safe }}
+ {% else %}
+ {{ traceback_str | escape }}
+ {% endif %}
+
+ .syft-exception-trace {
+ display: inline;
+ }
+
\ No newline at end of file
diff --git a/packages/syft/src/syft/client/client.py b/packages/syft/src/syft/client/client.py
index 093dee625db..692bd017565 100644
--- a/packages/syft/src/syft/client/client.py
+++ b/packages/syft/src/syft/client/client.py
@@ -615,8 +615,9 @@ def register(self, new_user: UserCreate) -> SyftSigningKey | None:
)
else:
service_context = ServerServiceContext(server=self.server)
- method = self.server.get_service_method(UserService.register)
- response = method(context=service_context, new_user=new_user)
+ response = self.server.services.user.register(
+ context=service_context, new_user=new_user
+ )
response = post_process_result(response, unwrap_on_success=False)
return response
diff --git a/packages/syft/src/syft/orchestra.py b/packages/syft/src/syft/orchestra.py
index 5921b53b434..0d295b81982 100644
--- a/packages/syft/src/syft/orchestra.py
+++ b/packages/syft/src/syft/orchestra.py
@@ -28,6 +28,7 @@
from .server.enclave import Enclave
from .server.gateway import Gateway
from .server.uvicorn import serve_server
+from .service.queue.queue import ConsumerType
from .service.response import SyftInfo
from .types.errors import SyftException
from .util.util import get_random_available_port
@@ -182,6 +183,7 @@ def deploy_to_python(
log_level: str | int | None = None,
debug: bool = False,
migrate: bool = False,
+ consumer_type: ConsumerType | None = None,
) -> ServerHandle:
worker_classes = {
ServerType.DATASITE: Datasite,
@@ -213,6 +215,7 @@ def deploy_to_python(
"debug": debug,
"migrate": migrate,
"deployment_type": deployment_type_enum,
+ "consumer_type": consumer_type,
}
if port:
@@ -325,6 +328,7 @@ def launch(
debug: bool = False,
migrate: bool = False,
from_state_folder: str | Path | None = None,
+ consumer_type: ConsumerType | None = None,
) -> ServerHandle:
if from_state_folder is not None:
with open(f"{from_state_folder}/config.json") as f:
@@ -373,6 +377,7 @@ def launch(
background_tasks=background_tasks,
debug=debug,
migrate=migrate,
+ consumer_type=consumer_type,
)
display(
SyftInfo(
diff --git a/packages/syft/src/syft/protocol/protocol_version.json b/packages/syft/src/syft/protocol/protocol_version.json
index c1eba4bfc63..5f9f6a8fab1 100644
--- a/packages/syft/src/syft/protocol/protocol_version.json
+++ b/packages/syft/src/syft/protocol/protocol_version.json
@@ -1,1178 +1,5 @@
{
- "dev": {
- "object_versions": {
- "SyftObjectVersioned": {
- "1": {
- "version": 1,
- "hash": "7c842dcdbb57e2528ffa690ea18c19fff3c8a591811d40cad2b19be3100e2ff4",
- "action": "add"
- }
- },
- "BaseDateTime": {
- "1": {
- "version": 1,
- "hash": "614db484b1950be729902b1861bd3a7b33899176507c61cef11dc0d44611cfd3",
- "action": "add"
- }
- },
- "SyftObject": {
- "1": {
- "version": 1,
- "hash": "bb70d874355988908d3a92a3941d6613a6995a4850be3b6a0147f4d387724406",
- "action": "add"
- }
- },
- "PartialSyftObject": {
- "1": {
- "version": 1,
- "hash": "19a995fcc2833f4fab24584fd99b71a80c2ef1f13c06f83af79e4482846b1656",
- "action": "add"
- }
- },
- "ServerMetadata": {
- "1": {
- "version": 1,
- "hash": "1691c7667eca86b20c4189e90ce4e643dd41fd3682cdb69c6308878f2a6f135c",
- "action": "add"
- }
- },
- "StoreConfig": {
- "1": {
- "version": 1,
- "hash": "a9997fce6a8a0ed2884c58b8eb9382f8554bdd18fff61f8bf0451945bcff12c7",
- "action": "add"
- }
- },
- "MongoDict": {
- "1": {
- "version": 1,
- "hash": "57e36f57eed75e62b29e2bac1295035a9bf2c0e3c56719dac24cb6cc685be00b",
- "action": "add"
- }
- },
- "MongoStoreConfig": {
- "1": {
- "version": 1,
- "hash": "53342b27d34165b7e2699f8e7ad70d13d125875e6a75e8fa18f5796428f41036",
- "action": "add"
- }
- },
- "LinkedObject": {
- "1": {
- "version": 1,
- "hash": "d80f5ac7f51a9383be1a3cb334d56ae50e49733ed3199f3b6b5d6febd9de410b",
- "action": "add"
- }
- },
- "BaseConfig": {
- "1": {
- "version": 1,
- "hash": "10bd7566041d0f0a3aa295367785fdcc2c5bbf0ded984ac9230754f37496a6a7",
- "action": "add"
- },
- "2": {
- "version": 2,
- "hash": "890d2879ac44611db9b88ba9334a721130d0ac3aa18a303fa9e4081f14b9b8c7",
- "action": "add"
- }
- },
- "ServiceConfig": {
- "1": {
- "version": 1,
- "hash": "28af8a296f5ff63de50438277eaa1f4380682e6aca9f2ca28320d7a444825e88",
- "action": "add"
- },
- "2": {
- "version": 2,
- "hash": "93dfab144e0b0884c602358b3a9ce889bb29ab96e3b4adcfe3cef47a31694a9a",
- "action": "add"
- }
- },
- "LibConfig": {
- "1": {
- "version": 1,
- "hash": "ee8f0e3f6aae81948d72e30226645e8eb5d312a6770411a1edca748168c467c0",
- "action": "add"
- },
- "2": {
- "version": 2,
- "hash": "a8a78a8d726ee9e79f95614f3d0fa5b85edc6fce7be7651715208669be93e0e3",
- "action": "add"
- }
- },
- "APIEndpoint": {
- "1": {
- "version": 1,
- "hash": "faa1cf9336a0d1233868c8c57745ff38c0be60399dc1acd0c0e8dd440e405dbd",
- "action": "add"
- }
- },
- "LibEndpoint": {
- "1": {
- "version": 1,
- "hash": "a585c83a33a019d363ae5a0c6d4197193654307c19a4829dfbf8a8cfd2c1842a",
- "action": "add"
- }
- },
- "SignedSyftAPICall": {
- "1": {
- "version": 1,
- "hash": "2f959455f7130f4e59360b8aa58f19785b76eaa0f8a5a9188a6cbf32b31311ca",
- "action": "add"
- }
- },
- "SyftAPICall": {
- "1": {
- "version": 1,
- "hash": "59e89e7b9ea30deaed64d1ffd9bc0769b999d3082b305428432c1f5be36c6343",
- "action": "add"
- }
- },
- "SyftAPIData": {
- "1": {
- "version": 1,
- "hash": "820b279c581cafd9bb5009702d4e3db22ec3a3156676426304b9038dad260a24",
- "action": "add"
- }
- },
- "SyftAPI": {
- "1": {
- "version": 1,
- "hash": "cc13ab058ee36748c14b0d4bd9b9e894c7566fff09cfa4170b3eece520169f15",
- "action": "add"
- }
- },
- "User": {
- "1": {
- "version": 1,
- "hash": "2df4b68182c558dba5485a8a6867acf2a5c341b249ad67373a504098aa8c4343",
- "action": "add"
- },
- "2": {
- "version": 2,
- "hash": "af6fb5b2e1606e97838f4a60f0536ad95db606d455e94acbd1977df866608a2c",
- "action": "add"
- }
- },
- "UserUpdate": {
- "1": {
- "version": 1,
- "hash": "1bf6707c69b809c804fb939c7c37d787c2f6889508a4bec37d24221af2eb777a",
- "action": "add"
- }
- },
- "UserCreate": {
- "1": {
- "version": 1,
- "hash": "49d6087e2309ba59987f3126e286e74b3a66492a08ad82fa507ea17d52ce78e3",
- "action": "add"
- }
- },
- "UserSearch": {
- "1": {
- "version": 1,
- "hash": "9ac946338cca68d00d1696a57943442f062628ec3daf53077d0bdd3f72cd9fa0",
- "action": "add"
- }
- },
- "UserView": {
- "1": {
- "version": 1,
- "hash": "0b52d758e31d5889c9cd88afb467aae4a74e34a5276924e07012243c34d300fe",
- "action": "add"
- }
- },
- "UserViewPage": {
- "1": {
- "version": 1,
- "hash": "1cd6528d02ec180f080d5c35f0da760d8a59af9da7baaa9c17c1c7cedcc858fa",
- "action": "add"
- }
- },
- "UserPrivateKey": {
- "1": {
- "version": 1,
- "hash": "4817d8147aba94373f320dcd90e65f097cf6e5a2ef353aa8520e23128d522b5d",
- "action": "add"
- }
- },
- "DateTime": {
- "1": {
- "version": 1,
- "hash": "394abb554114ead4d63c36e3fe83ac018dead4b21a8465174009577c46d54c58",
- "action": "add"
- }
- },
- "ReplyNotification": {
- "1": {
- "version": 1,
- "hash": "84102dfc59d711b03c2f3d3a6ecaca000b6835f1bbdd9af801057f7aacb5f1d0",
- "action": "add"
- }
- },
- "Notification": {
- "1": {
- "version": 1,
- "hash": "af4cb232bff390c431e399975f048b34da7e940ace8b23b940a3b398c91c5326",
- "action": "add"
- }
- },
- "CreateNotification": {
- "1": {
- "version": 1,
- "hash": "7e426c946b7d5db6f9427960ec16042f3018091d835ca5966f3568c324a2ab53",
- "action": "add"
- }
- },
- "UserNotificationActivity": {
- "1": {
- "version": 1,
- "hash": "422fd01c6d9af38688a9982abd34e80794a1f6ddd444cca225d77f49189847a9",
- "action": "add"
- }
- },
- "NotificationPreferences": {
- "1": {
- "version": 1,
- "hash": "a42f06b367e7c6cbabcbf3cfcc84d1ca0873e457d972ebd060e87c9d6185f62b",
- "action": "add"
- }
- },
- "NotifierSettings": {
- "1": {
- "version": 1,
- "hash": "65c8ab814d35fac32f68d3000756692592cc59940f30e3af3dcdfa2328755b9d",
- "action": "add"
- },
- "2": {
- "version": 2,
- "hash": "be8b52597fc628d1b7cd22b776ee81416e1adbb04a45188778eb0e32ed1416b4",
- "action": "add"
- }
- },
- "SyftImageRegistry": {
- "1": {
- "version": 1,
- "hash": "67e18903e41cba1afe136adf29d404b63ec04fea6e928abb2533ec4fa52b246b",
- "action": "add"
- }
- },
- "SyftWorkerImage": {
- "1": {
- "version": 1,
- "hash": "44da7badfbe573d5403d3ab78c077f17dbefc560b81fdf927b671815be047441",
- "action": "add"
- }
- },
- "SyftWorker": {
- "1": {
- "version": 1,
- "hash": "9d897f6039eabe48dfa8e8d5c5cdcb283b0375b4c64571b457777eaaf3fb1920",
- "action": "add"
- }
- },
- "WorkerPool": {
- "1": {
- "version": 1,
- "hash": "16efc5dd2596ae744fd611c8f46af9eaec1bd5729eb20e85e9fd2f31df402564",
- "action": "add"
- }
- },
- "MarkdownDescription": {
- "1": {
- "version": 1,
- "hash": "31a73f8824cad1636a55d14b6a1074cdb071d0d4e16e86baaa3d4f63a7e80134",
- "action": "add"
- }
- },
- "HTMLObject": {
- "1": {
- "version": 1,
- "hash": "97f2e93f5ceaa88015047186f66a17ff13df2a6b7925b41331f9e19d5a515a9f",
- "action": "add"
- }
- },
- "PwdTokenResetConfig": {
- "1": {
- "version": 1,
- "hash": "0415a272428f22add4896c64aa9f29c8c1d35619e2433da6564eb5f1faff39ac",
- "action": "add"
- }
- },
- "ServerSettingsUpdate": {
- "1": {
- "version": 1,
- "hash": "1e4260ad879ae80728c3ffae2cd1d48759abd51f9d0960d4b25855cdbb4c506b",
- "action": "add"
- },
- "2": {
- "version": 2,
- "hash": "23b2716e9dceca667e228408e2416c82f11821e322e5bccf1f83406f3d09abdc",
- "action": "add"
- },
- "3": {
- "version": 3,
- "hash": "335c7946f2e52d09c7b26f511120cd340717c74c5cca9107e84f839da993c55c",
- "action": "add"
- },
- "4": {
- "version": 4,
- "hash": "8d7a41992c39c287fcb46383bed429ce75d3c9524ced8c86b88c26dd0232e2fe",
- "action": "add"
- }
- },
- "ServerSettings": {
- "1": {
- "version": 1,
- "hash": "5a1e7470cbeaaae5b80ac9beecb743734f7e4e42d429a09ea8defa569a5ddff1",
- "action": "add"
- },
- "2": {
- "version": 2,
- "hash": "7727ea54e494dc9deaa0d1bd38ac8a6180bc192b74eec5659adbc338a19e21f5",
- "action": "add"
- },
- "3": {
- "version": 3,
- "hash": "997667e1cba22d151857aacc2caba6b1ca73c1648adbd03461dc74a0c0c372b3",
- "action": "add"
- },
- "4": {
- "version": 4,
- "hash": "b8067777967a0e06733433e179e549caaf501419d62f7e8474ee33b839e3890d",
- "action": "add"
- }
- },
- "HTTPConnection": {
- "1": {
- "version": 1,
- "hash": "bf10f81646c71069c76292b1237b4a3de1e507264392c5c591d067636ce6fb46",
- "action": "add"
- }
- },
- "PythonConnection": {
- "1": {
- "version": 1,
- "hash": "28010778b5e3463ff6960a0e2224818de00bc7b5e6f892192e02e399ccbe18b5",
- "action": "add"
- }
- },
- "ActionDataEmpty": {
- "1": {
- "version": 1,
- "hash": "e0e4a5cf18d05b6b747addc048515c6f2a5f35f0766ebaee96d898cb971e1c5b",
- "action": "add"
- }
- },
- "ObjectNotReady": {
- "1": {
- "version": 1,
- "hash": "8cf471e205cd0893d6aae5f0227d14db7df1c9698da08a3ab991f59132d17fe9",
- "action": "add"
- }
- },
- "ActionDataLink": {
- "1": {
- "version": 1,
- "hash": "3469478343439e411b761c270eec63eb3d533e459ad72d0965158c3a6cdf3b9a",
- "action": "add"
- }
- },
- "Action": {
- "1": {
- "version": 1,
- "hash": "021826d7c6f69bd0283d025d40661f3ffbeba8810ca94de01344f6afbdae62cd",
- "action": "add"
- }
- },
- "ActionObject": {
- "1": {
- "version": 1,
- "hash": "0a5f4bc343cb114a251f06686ecdbb59d74bfb3d29a098b176699deb35a1e683",
- "action": "add"
- }
- },
- "AnyActionObject": {
- "1": {
- "version": 1,
- "hash": "b3c44c7788c59c03fa1baeec656c2ca6e633f4cbd4b23ff7ece6ee94c38449f0",
- "action": "add"
- }
- },
- "CustomEndpointActionObject": {
- "1": {
- "version": 1,
- "hash": "c7addbaf2777707f3e91e5c1e092343476cd22efc4ec8617f39ccf76e61a5a14",
- "action": "add"
- },
- "2": {
- "version": 2,
- "hash": "846ba36e8737a1bec16853c9de54c4948450009278e0b76fe7e3355ef9e70089",
- "action": "add"
- }
- },
- "DataSubject": {
- "1": {
- "version": 1,
- "hash": "582cdf9e82b5d6915b7f09f7c0d5f08328b11a2ce9b0198e5083f1672c2e2bf5",
- "action": "add"
- }
- },
- "DataSubjectCreate": {
- "1": {
- "version": 1,
- "hash": "5a8423c2690d55f425bfeecc87cd4a797a75d88ebb5fbda754d4f269b62d2ceb",
- "action": "add"
- }
- },
- "DataSubjectMemberRelationship": {
- "1": {
- "version": 1,
- "hash": "0810483ea76ea10c8f286c6035dc0b2085291f345183be50c179f3a05a577110",
- "action": "add"
- }
- },
- "Contributor": {
- "1": {
- "version": 1,
- "hash": "30c32bd44098f00e0b15496be441763b6e50af8b12d3d2bef33aca6287193876",
- "action": "add"
- }
- },
- "Asset": {
- "1": {
- "version": 1,
- "hash": "000abc78719611c106295cf12b1690b7e5411dc1bb9db9d4afd22956da90d1f4",
- "action": "add"
- }
- },
- "CreateAsset": {
- "1": {
- "version": 1,
- "hash": "357d52576cb12b24fb3980342bb49a562b065c0e4419e87d34176340628c7309",
- "action": "add"
- }
- },
- "Dataset": {
- "1": {
- "version": 1,
- "hash": "0ca6b0b4a3aebb2c8f351668075b44951bb20d1e23a779b82109124f334ce3a4",
- "action": "add"
- }
- },
- "DatasetPageView": {
- "1": {
- "version": 1,
- "hash": "aa0dd69637281b80d5523b4409a2c7e89db114c9fe79c858063c6dadff8977d1",
- "action": "add"
- },
- "2": {
- "version": 2,
- "hash": "be1ca6dcd0b3aa0481ce5dce737e78432d06a78ad0c701aaf136be407c798352",
- "action": "add"
- }
- },
- "CreateDataset": {
- "1": {
- "version": 1,
- "hash": "7e02dfa89540c3dbebacbb13810d95cdc4e36db31d56cffed7ab54abe25716c9",
- "action": "add"
- }
- },
- "SyftLog": {
- "1": {
- "version": 1,
- "hash": "1bcd71e5bf3f0db3bba0996f33b6b2bde3489b9c71f11e6b30c3495c76a8f53f",
- "action": "add"
- }
- },
- "JobItem": {
- "1": {
- "version": 1,
- "hash": "0b32277b7d3b9bdc14a2a51cc9005f8254e7f7b6ec059ddcccbcd681a807afb6",
- "action": "add"
- },
- "2": {
- "version": 2,
- "hash": "b087d0c62b7d304c6ca80e4fb0e8a7f2a444be8f8cba57490dc09aeb98033105",
- "action": "add"
- }
- },
- "ExecutionOutput": {
- "1": {
- "version": 1,
- "hash": "e36c71685edf5276a3427cb6749550486d3a177c1dcf73dd337ab2a73c0ce6b5",
- "action": "add"
- }
- },
- "TwinObject": {
- "1": {
- "version": 1,
- "hash": "4f31243fb348dbb083579afd6f638d75af010cb53d19bfba59b74afff41ccbbb",
- "action": "add"
- }
- },
- "PolicyRule": {
- "1": {
- "version": 1,
- "hash": "44d1ca1db97be46f66558aa1a729ff31bf8e113c6a913b11aedf9d6b6ad5b7b5",
- "action": "add"
- }
- },
- "CreatePolicyRule": {
- "1": {
- "version": 1,
- "hash": "342bb723526d445151a0435f57d251f4c1219f8ae7cca3e8e9fce52e2ee1b8b1",
- "action": "add"
- }
- },
- "CreatePolicyRuleConstant": {
- "1": {
- "version": 1,
- "hash": "78b54832cb0468a87013bc36bc11d4759874ca1b5065a1b711f1e5ef5d94c2df",
- "action": "add"
- }
- },
- "Matches": {
- "1": {
- "version": 1,
- "hash": "dd6d91ddb2ec5eaf60be2b0899ecfdb9a15f7904aa39d2f4d9bb2d7b793040e6",
- "action": "add"
- }
- },
- "PreFill": {
- "1": {
- "version": 1,
- "hash": "c7aefb11dc4c4569dcd1e6988371047a32a8be1b32ad46d12adba419a19769ad",
- "action": "add"
- }
- },
- "UserOwned": {
- "1": {
- "version": 1,
- "hash": "c8738dc3d8c2a5ef461b85a0467c3dff53dab16b54a4d12b44b1477906aef51d",
- "action": "add"
- }
- },
- "MixedInputPolicy": {
- "1": {
- "version": 1,
- "hash": "37bb12d950518d9579c8ec7c4cc22ac731ea82caf8c1370dd0b0a82b46462dde",
- "action": "add"
- }
- },
- "ExactMatch": {
- "1": {
- "version": 1,
- "hash": "5eb37edbf5e451d942e599247f3eaed923c1fe9d91eefdba02bf06503f6cc08d",
- "action": "add"
- }
- },
- "OutputHistory": {
- "1": {
- "version": 1,
- "hash": "9366db79d131f8c65e5a4ff12c90e2aa0c11e302debe06e46eeb93b26e2aaf61",
- "action": "add"
- }
- },
- "OutputPolicyExecuteCount": {
- "1": {
- "version": 1,
- "hash": "2a77e5ed5c7b0391147562651ad4061e20b11745c191fbc34cb549da37ba72dd",
- "action": "add"
- }
- },
- "OutputPolicyExecuteOnce": {
- "1": {
- "version": 1,
- "hash": "5589c00d127d9eb1f5ccf3a16def8219737784d57bb3bf9be5cb6d83325ef436",
- "action": "add"
- }
- },
- "EmptyInputPolicy": {
- "1": {
- "version": 1,
- "hash": "7ef81cfd223be0064600e1503f8b04bafc16385e27730e9319466e68a077c68b",
- "action": "add"
- }
- },
- "UserPolicy": {
- "1": {
- "version": 1,
- "hash": "74373bb71a334f4dcf77623ae10ff5b1c7e5b3006f65f2051ffb1e01f422f982",
- "action": "add"
- }
- },
- "SubmitUserPolicy": {
- "1": {
- "version": 1,
- "hash": "ec4e808eb39613bcdbbbf9ffb3267612084a9d99880a2f3bee3ef32d46329c02",
- "action": "add"
- }
- },
- "UserCodeStatusCollection": {
- "1": {
- "version": 1,
- "hash": "735ecf2d4abb1e7d19b2e751d880f32b01ce267ba10e417ef1b440be3d94d8f1",
- "action": "add"
- }
- },
- "UserCode": {
- "1": {
- "version": 1,
- "hash": "3bcd14413b9c4fbde7c5612c2ed713518340280b5cff89cf2aaaf1c77c4037a8",
- "action": "add"
- }
- },
- "SubmitUserCode": {
- "1": {
- "version": 1,
- "hash": "d2bb8cfe12f070b4adafded78ce01900c5409bd83f055f94b1e285745ef65a76",
- "action": "add"
- }
- },
- "UserCodeExecutionResult": {
- "1": {
- "version": 1,
- "hash": "1f4cbc62caac4dd193f427306405dc7a099ae744bea5830cf57149ce71c1e589",
- "action": "add"
- }
- },
- "UserCodeExecutionOutput": {
- "1": {
- "version": 1,
- "hash": "c1d53300a39dbbb437d7d5a1257bd175a067b1065f4099a0938fac7540035258",
- "action": "add"
- },
- "2": {
- "version": 2,
- "hash": "3e104e39b4ab53c950e61e4f7e92ce935cf96a5100de301de9bf297eb7e5787e",
- "action": "add"
- }
- },
- "CodeHistory": {
- "1": {
- "version": 1,
- "hash": "e3ef5346f108257828f364d22b12d9311812c9cf843200afef5dc4d9302f9b21",
- "action": "add"
- }
- },
- "CodeHistoryView": {
- "1": {
- "version": 1,
- "hash": "8b8b97d334b51d1ce0a9efab722411ff25caa3f12be319105954497e0a306eb2",
- "action": "add"
- }
- },
- "CodeHistoriesDict": {
- "1": {
- "version": 1,
- "hash": "01d7dcd4b21525a06e4484d8699a4a34a5c84f1f6026ec55e32eb30412742601",
- "action": "add"
- }
- },
- "UsersCodeHistoriesDict": {
- "1": {
- "version": 1,
- "hash": "4ed8b83973258ea19a1f91feb2590ff73b801be86f4296cc3db48f6929ff784c",
- "action": "add"
- }
- },
- "BlobFile": {
- "1": {
- "version": 1,
- "hash": "d99239100f1cb0b73c69b2ad7cab01a06909cc3a4976ba2b3b67cf6fe5e2f516",
- "action": "add"
- }
- },
- "BlobFileOBject": {
- "1": {
- "version": 1,
- "hash": "6c40dab2c8d2220d4fff7cc653d76cc026a856db7e2b5713b6341e255adc7ea2",
- "action": "add"
- }
- },
- "SecureFilePathLocation": {
- "1": {
- "version": 1,
- "hash": "ea5978b98d7773d221665b450454c9130c103a5c850669a0acd620607cd614b7",
- "action": "add"
- }
- },
- "SeaweedSecureFilePathLocation": {
- "1": {
- "version": 1,
- "hash": "3fc9bfc8c1b1cf660c9747e8c1fe3eb2220e78d4e3b5d6b5c5f29a07a77ebf3e",
- "action": "add"
- }
- },
- "AzureSecureFilePathLocation": {
- "1": {
- "version": 1,
- "hash": "090a9e962eeb655586ee966c5651d8996363969818a38f9a486fd64d33047e05",
- "action": "add"
- }
- },
- "BlobStorageEntry": {
- "1": {
- "version": 1,
- "hash": "afdc6a1d8a24b1ee1ed9d3e79f5bac64b4f0d9d36800f07f10be0b896470345f",
- "action": "add"
- }
- },
- "BlobStorageMetadata": {
- "1": {
- "version": 1,
- "hash": "9d4b61ac4ea1910c2f7c767a50a6a52544a24663548f069e79bd906f11b538e4",
- "action": "add"
- }
- },
- "CreateBlobStorageEntry": {
- "1": {
- "version": 1,
- "hash": "ffc3cbfeade67d074dc5bf7d655a1eb8c83630076028a72b3cc4548f3b413e14",
- "action": "add"
- }
- },
- "SyftObjectMigrationState": {
- "1": {
- "version": 1,
- "hash": "ee83315828551f18904bab18e0cac48896493620561215b04cc448e6ce5834af",
- "action": "add"
- }
- },
- "StoreMetadata": {
- "1": {
- "version": 1,
- "hash": "8de9a22a2765ef976bc161cb0704347d30350c085da8c8ffa876065cfca3e5fd",
- "action": "add"
- }
- },
- "MigrationData": {
- "1": {
- "version": 1,
- "hash": "cb96b8c8413609e1224341d1b0dd1efb08387c0ff7b0ff65eba36c0b104c9ed1",
- "action": "add"
- },
- "2": {
- "version": 2,
- "hash": "1d1b14c196221ecf6d644d7dcaa32ac9e90361b2687fa83161ff399ebc6df1bd",
- "action": "add"
- }
- },
- "BlobRetrieval": {
- "1": {
- "version": 1,
- "hash": "c422c74b89a9349742acaa848566fe18bfef1a83333458b858c074baed37a859",
- "action": "add"
- }
- },
- "SyftObjectRetrieval": {
- "1": {
- "version": 1,
- "hash": "b2b62447445adc4cd0b77ab59d6fa56624dd316fb50281e570daad07556b6db2",
- "action": "add"
- }
- },
- "BlobRetrievalByURL": {
- "1": {
- "version": 1,
- "hash": "4db0e3b7a6334d3835356d8393866711e243e360af25a95f3cc4066f032404b5",
- "action": "add"
- }
- },
- "BlobDeposit": {
- "1": {
- "version": 1,
- "hash": "6eb5cc57dc763126bfc6ec5a2b79d02e77eadf9d9efb1888a5c366b7799c1c24",
- "action": "add"
- }
- },
- "OnDiskBlobDeposit": {
- "1": {
- "version": 1,
- "hash": "817bf1bee4a35bfa1cd25d6779a10d8d180b1b3f1e837952f81f48b9411d1970",
- "action": "add"
- }
- },
- "RemoteConfig": {
- "1": {
- "version": 1,
- "hash": "179d067099a178d748c6d9a0477e8de7c3b55577439669eca7150258f2409567",
- "action": "add"
- }
- },
- "AzureRemoteConfig": {
- "1": {
- "version": 1,
- "hash": "a143811fec0da5fd881e927643ef667c91c78a2c90519cf88da7da20738bd187",
- "action": "add"
- }
- },
- "SeaweedFSBlobDeposit": {
- "1": {
- "version": 1,
- "hash": "febeb2a2ce81aa2c512e4c6b611b582984042aafa0541403d4584662273a166c",
- "action": "add"
- }
- },
- "DictStoreConfig": {
- "1": {
- "version": 1,
- "hash": "2e1365c5535fa51c22eef79f67dd6444789bc829c27881367e3050e06e2ffbfe",
- "action": "add"
- }
- },
- "NumpyArrayObject": {
- "1": {
- "version": 1,
- "hash": "05dd2917b7692b3daf4e7ad083a46fa7ec7a2be8faac8d4a654809189c986443",
- "action": "add"
- }
- },
- "NumpyScalarObject": {
- "1": {
- "version": 1,
- "hash": "8753e5c78270a5cacbf0439447724772f4765351a4a8b58b0a5c416a6b2c8b6e",
- "action": "add"
- }
- },
- "NumpyBoolObject": {
- "1": {
- "version": 1,
- "hash": "331c44f8fa3d0a077f1aaad7313bae2c43b386d04def7b8bedae9fdf7690134d",
- "action": "add"
- }
- },
- "PandasDataframeObject": {
- "1": {
- "version": 1,
- "hash": "5e8018364cea31d5f185a901da4ab89846b02153ee7d041ee8a6d305ece31f90",
- "action": "add"
- }
- },
- "PandasSeriesObject": {
- "1": {
- "version": 1,
- "hash": "b8bd482bf16fc7177e9778292cd42f8835b6ced2ce8dc88908b4b8e6d7c7528f",
- "action": "add"
- }
- },
- "Change": {
- "1": {
- "version": 1,
- "hash": "75fb9a5cd4e76b189ebe130a421d3921a0c251947a48bbb92a2ef1c315dc3c16",
- "action": "add"
- }
- },
- "ChangeStatus": {
- "1": {
- "version": 1,
- "hash": "c914a6f7637b555a51b71e8e197e591f7a2e28121e29b5dd586f87e0383d179d",
- "action": "add"
- }
- },
- "ActionStoreChange": {
- "1": {
- "version": 1,
- "hash": "1a803bb08924b49f3114fd46e0e132f819d4d56be5e03a27e9fe90947ca26e85",
- "action": "add"
- }
- },
- "CreateCustomImageChange": {
- "1": {
- "version": 1,
- "hash": "c3dbea3f49979fdcc517c0d13cd02739ca2fe86b370c42496a224f142ae31562",
- "action": "add"
- }
- },
- "CreateCustomWorkerPoolChange": {
- "1": {
- "version": 1,
- "hash": "0355793dd58b364dcb84fff29714b6a26446bead3ba95c6d75e3200008e580f4",
- "action": "add"
- }
- },
- "Request": {
- "1": {
- "version": 1,
- "hash": "1d69f5f0074114f99aa29c5ee77cb20b9151e5b50e77b026f11c3632a12efadf",
- "action": "add"
- }
- },
- "RequestInfo": {
- "1": {
- "version": 1,
- "hash": "779562547744ebed64548f8021647292604fdf4256bf79685dfa14a1e56cc27b",
- "action": "add"
- }
- },
- "RequestInfoFilter": {
- "1": {
- "version": 1,
- "hash": "bb881a003032f4676321218d7cd09580f4d64fccaa1cf9e118fdcd5c73c3d3a8",
- "action": "add"
- }
- },
- "SubmitRequest": {
- "1": {
- "version": 1,
- "hash": "6c38b6ffd0a6f7442746e68b9ace7b21cb1dca7d2031929db5f9a302a280403f",
- "action": "add"
- }
- },
- "ObjectMutation": {
- "1": {
- "version": 1,
- "hash": "ce88096760ce9334599c8194ec97b0a1470651ad680d9d21b8826a0df0af2a36",
- "action": "add"
- }
- },
- "EnumMutation": {
- "1": {
- "version": 1,
- "hash": "5173fda73df17a344eb663b7692cca48bd46bf1773455439836b852cd165448c",
- "action": "add"
- }
- },
- "UserCodeStatusChange": {
- "1": {
- "version": 1,
- "hash": "89aaf7f1368c782e3a1b9e79988877f6eaa05ab84365f7d321b757fde7fe86e7",
- "action": "add"
- }
- },
- "SyncedUserCodeStatusChange": {
- "1": {
- "version": 1,
- "hash": "d9ad2d341eb645bd50d06330cd30fd4c266f93e37b9f5391d58b78365fc440e6",
- "action": "add"
- }
- },
- "TwinAPIContextView": {
- "1": {
- "version": 1,
- "hash": "e099eef32cb3a8a806cbdc54cc7fca96bed3d60344bd571163ec049db407938b",
- "action": "add"
- }
- },
- "CustomAPIView": {
- "1": {
- "version": 1,
- "hash": "769e96bebd05736ab860591670fb6da19406239b0104ddc71bd092a134335146",
- "action": "add"
- }
- },
- "CustomApiEndpoint": {
- "1": {
- "version": 1,
- "hash": "ec4a217585336d1b59c93c18570443a63f4fbb24d2c088fbacf80bcf389d23e8",
- "action": "add"
- }
- },
- "PrivateAPIEndpoint": {
- "1": {
- "version": 1,
- "hash": "6d7d143432c2811c520ab6dade005ba40173b590e5c676be04f5921b970ef938",
- "action": "add"
- }
- },
- "PublicAPIEndpoint": {
- "1": {
- "version": 1,
- "hash": "3bf51fc33aa8feb1abc9d0ef792e8889da31a57050430e0bd8e17f2065ff8734",
- "action": "add"
- }
- },
- "UpdateTwinAPIEndpoint": {
- "1": {
- "version": 1,
- "hash": "851e59412716e73c7f70a696619e0b375ce136b43f6fe2ea784747091caba5d8",
- "action": "add"
- }
- },
- "CreateTwinAPIEndpoint": {
- "1": {
- "version": 1,
- "hash": "3d0b84dae95ebcc6647b5aabe54e65b3c6bf957665fde57d8037806a4aac13be",
- "action": "add"
- }
- },
- "TwinAPIEndpoint": {
- "1": {
- "version": 1,
- "hash": "d1947b8f9c80d6c9b443e5a9f0758afa8849a5f12b9a511feefd7e4f82c374f4",
- "action": "add"
- }
- },
- "SyncState": {
- "1": {
- "version": 1,
- "hash": "9a3f0bb973858b55bc766c9770c4d9abcc817898f797d94a89938650c0c67868",
- "action": "add"
- }
- },
- "WorkerSettings": {
- "1": {
- "version": 1,
- "hash": "dca33003904a71688e5b07db65f8833eb4de8135aade7154076b8eafbb94d26b",
- "action": "add"
- }
- },
- "HTTPServerRoute": {
- "1": {
- "version": 1,
- "hash": "938245604a9c7e50001299afff5b669b2548364e356fed22a22780497831bf81",
- "action": "add"
- }
- },
- "PythonServerRoute": {
- "1": {
- "version": 1,
- "hash": "a068d8f942d55ecb6d45af88a27c6ebf208584275bf589cbc308df3f774ab9a9",
- "action": "add"
- }
- },
- "VeilidServerRoute": {
- "1": {
- "version": 1,
- "hash": "e676bc165601d2ede69707a4b6168ed4674f3f98887026d098a2dd4da4dfd097",
- "action": "add"
- }
- },
- "ServerPeer": {
- "1": {
- "version": 1,
- "hash": "0d5f252018e324ea0d2dcb5c2ad8bd15707220565fce4f14de7f63a8f9e4391b",
- "action": "add"
- }
- },
- "ServerPeerUpdate": {
- "1": {
- "version": 1,
- "hash": "0b854b57db7a18118c1fd8f31495b2ba4eeb9fbe4f24c631ff112418a94570d3",
- "action": "add"
- }
- },
- "AssociationRequestChange": {
- "1": {
- "version": 1,
- "hash": "0134ac0002879c85fc9ddb06bed6306a8905c8434b0a40d3a96ce24a7bd4da90",
- "action": "add"
- }
- },
- "QueueItem": {
- "1": {
- "version": 1,
- "hash": "1db212c46b6c56ccc5579cfe2141b693f0cd9286e2ede71210393e8455379bf1",
- "action": "add"
- }
- },
- "ActionQueueItem": {
- "1": {
- "version": 1,
- "hash": "396d579dfc2e2b36b9fbed2f204bffcca1bea7ee2db7175045dd3328ebf08718",
- "action": "add"
- }
- },
- "APIEndpointQueueItem": {
- "1": {
- "version": 1,
- "hash": "f04b3990a8d29c116d301e70df54d58f188895307a411dc13a666ff764ffd8dd",
- "action": "add"
- }
- },
- "ZMQClientConfig": {
- "1": {
- "version": 1,
- "hash": "36ee8f75067d5144f0ed062cdc79466caae16b7a128231d89b6b430174843bde",
- "action": "add"
- }
- },
- "SQLiteStoreConfig": {
- "1": {
- "version": 1,
- "hash": "ad062a5f863ae84683867d2a6a5e1d4420c010a64b88bc7b392106e33d71ac03",
- "action": "add"
- }
- },
- "ProjectEvent": {
- "1": {
- "version": 1,
- "hash": "dc0486c52daebd5e98c2b3b03ffd9a9a14bc3d86d8dc0c23e41ebf6c31fe2ffb",
- "action": "add"
- }
- },
- "ProjectThreadMessage": {
- "1": {
- "version": 1,
- "hash": "99256d7592577d1e37df94a06eabc0a287f2d79e144c51fd719315e278edb46d",
- "action": "add"
- }
- },
- "ProjectMessage": {
- "1": {
- "version": 1,
- "hash": "b5004b6354f71b19c81dd5f4b20bf446e0b959f5608a22707e96b944dd8175b0",
- "action": "add"
- }
- },
- "ProjectRequestResponse": {
- "1": {
- "version": 1,
- "hash": "52162a8a779a4a301d8755691bf4cf994c86b9f650f9e8c8a923b44e635b1bc0",
- "action": "add"
- }
- },
- "ProjectRequest": {
- "1": {
- "version": 1,
- "hash": "dc684135d5a5a48e5fc7988598c1e6e0de76cf1c5995f1c283fcf63d0eb4d24f",
- "action": "add"
- }
- },
- "AnswerProjectPoll": {
- "1": {
- "version": 1,
- "hash": "c83d83a5ba6cc034d5061df200b3f1d029aa770b1e13dbef959bb1790323dc6e",
- "action": "add"
- }
- },
- "ProjectPoll": {
- "1": {
- "version": 1,
- "hash": "ecf69b3b324e0bee9c82295796d44c4e8f796496cdc9db6d4302c2f160566466",
- "action": "add"
- }
- },
- "Project": {
- "1": {
- "version": 1,
- "hash": "de86a1163ddbcd1cc3cc2b1b5dfcb85a8ad9f9d4bbc759c2b1f92a0d0a2ff184",
- "action": "add"
- }
- },
- "ProjectSubmit": {
- "1": {
- "version": 1,
- "hash": "7555ba11ee5a814dcd9c45647300020f7359efc1081559940990cbd745936cac",
- "action": "add"
- }
- },
- "Plan": {
- "1": {
- "version": 1,
- "hash": "ed05cb87aec832098fc464ac36cd6bceaab705463d0d2fa1b2d8e1ccc510018c",
- "action": "add"
- }
- },
- "EnclaveMetadata": {
- "1": {
- "version": 1,
- "hash": "8d2dfafa01ec909c080a790cf15a8fc78e00382d3bfe6207098ceb25a60b9c53",
- "action": "add"
- }
- }
- }
+ "1": {
+ "release_name": "0.9.1.json"
}
}
diff --git a/packages/syft/src/syft/protocol/releases/0.9.1.json b/packages/syft/src/syft/protocol/releases/0.9.1.json
new file mode 100644
index 00000000000..9c33a5d3a88
--- /dev/null
+++ b/packages/syft/src/syft/protocol/releases/0.9.1.json
@@ -0,0 +1,1178 @@
+{
+ "1": {
+ "object_versions": {
+ "SyftObjectVersioned": {
+ "1": {
+ "version": 1,
+ "hash": "7c842dcdbb57e2528ffa690ea18c19fff3c8a591811d40cad2b19be3100e2ff4",
+ "action": "add"
+ }
+ },
+ "BaseDateTime": {
+ "1": {
+ "version": 1,
+ "hash": "614db484b1950be729902b1861bd3a7b33899176507c61cef11dc0d44611cfd3",
+ "action": "add"
+ }
+ },
+ "SyftObject": {
+ "1": {
+ "version": 1,
+ "hash": "bb70d874355988908d3a92a3941d6613a6995a4850be3b6a0147f4d387724406",
+ "action": "add"
+ }
+ },
+ "PartialSyftObject": {
+ "1": {
+ "version": 1,
+ "hash": "19a995fcc2833f4fab24584fd99b71a80c2ef1f13c06f83af79e4482846b1656",
+ "action": "add"
+ }
+ },
+ "ServerMetadata": {
+ "1": {
+ "version": 1,
+ "hash": "1691c7667eca86b20c4189e90ce4e643dd41fd3682cdb69c6308878f2a6f135c",
+ "action": "add"
+ }
+ },
+ "StoreConfig": {
+ "1": {
+ "version": 1,
+ "hash": "a9997fce6a8a0ed2884c58b8eb9382f8554bdd18fff61f8bf0451945bcff12c7",
+ "action": "add"
+ }
+ },
+ "MongoDict": {
+ "1": {
+ "version": 1,
+ "hash": "57e36f57eed75e62b29e2bac1295035a9bf2c0e3c56719dac24cb6cc685be00b",
+ "action": "add"
+ }
+ },
+ "MongoStoreConfig": {
+ "1": {
+ "version": 1,
+ "hash": "53342b27d34165b7e2699f8e7ad70d13d125875e6a75e8fa18f5796428f41036",
+ "action": "add"
+ }
+ },
+ "LinkedObject": {
+ "1": {
+ "version": 1,
+ "hash": "d80f5ac7f51a9383be1a3cb334d56ae50e49733ed3199f3b6b5d6febd9de410b",
+ "action": "add"
+ }
+ },
+ "BaseConfig": {
+ "1": {
+ "version": 1,
+ "hash": "10bd7566041d0f0a3aa295367785fdcc2c5bbf0ded984ac9230754f37496a6a7",
+ "action": "add"
+ },
+ "2": {
+ "version": 2,
+ "hash": "890d2879ac44611db9b88ba9334a721130d0ac3aa18a303fa9e4081f14b9b8c7",
+ "action": "add"
+ }
+ },
+ "ServiceConfig": {
+ "1": {
+ "version": 1,
+ "hash": "28af8a296f5ff63de50438277eaa1f4380682e6aca9f2ca28320d7a444825e88",
+ "action": "add"
+ },
+ "2": {
+ "version": 2,
+ "hash": "93dfab144e0b0884c602358b3a9ce889bb29ab96e3b4adcfe3cef47a31694a9a",
+ "action": "add"
+ }
+ },
+ "LibConfig": {
+ "1": {
+ "version": 1,
+ "hash": "ee8f0e3f6aae81948d72e30226645e8eb5d312a6770411a1edca748168c467c0",
+ "action": "add"
+ },
+ "2": {
+ "version": 2,
+ "hash": "a8a78a8d726ee9e79f95614f3d0fa5b85edc6fce7be7651715208669be93e0e3",
+ "action": "add"
+ }
+ },
+ "APIEndpoint": {
+ "1": {
+ "version": 1,
+ "hash": "faa1cf9336a0d1233868c8c57745ff38c0be60399dc1acd0c0e8dd440e405dbd",
+ "action": "add"
+ }
+ },
+ "LibEndpoint": {
+ "1": {
+ "version": 1,
+ "hash": "a585c83a33a019d363ae5a0c6d4197193654307c19a4829dfbf8a8cfd2c1842a",
+ "action": "add"
+ }
+ },
+ "SignedSyftAPICall": {
+ "1": {
+ "version": 1,
+ "hash": "2f959455f7130f4e59360b8aa58f19785b76eaa0f8a5a9188a6cbf32b31311ca",
+ "action": "add"
+ }
+ },
+ "SyftAPICall": {
+ "1": {
+ "version": 1,
+ "hash": "59e89e7b9ea30deaed64d1ffd9bc0769b999d3082b305428432c1f5be36c6343",
+ "action": "add"
+ }
+ },
+ "SyftAPIData": {
+ "1": {
+ "version": 1,
+ "hash": "820b279c581cafd9bb5009702d4e3db22ec3a3156676426304b9038dad260a24",
+ "action": "add"
+ }
+ },
+ "SyftAPI": {
+ "1": {
+ "version": 1,
+ "hash": "cc13ab058ee36748c14b0d4bd9b9e894c7566fff09cfa4170b3eece520169f15",
+ "action": "add"
+ }
+ },
+ "User": {
+ "1": {
+ "version": 1,
+ "hash": "2df4b68182c558dba5485a8a6867acf2a5c341b249ad67373a504098aa8c4343",
+ "action": "add"
+ },
+ "2": {
+ "version": 2,
+ "hash": "af6fb5b2e1606e97838f4a60f0536ad95db606d455e94acbd1977df866608a2c",
+ "action": "add"
+ }
+ },
+ "UserUpdate": {
+ "1": {
+ "version": 1,
+ "hash": "1bf6707c69b809c804fb939c7c37d787c2f6889508a4bec37d24221af2eb777a",
+ "action": "add"
+ }
+ },
+ "UserCreate": {
+ "1": {
+ "version": 1,
+ "hash": "49d6087e2309ba59987f3126e286e74b3a66492a08ad82fa507ea17d52ce78e3",
+ "action": "add"
+ }
+ },
+ "UserSearch": {
+ "1": {
+ "version": 1,
+ "hash": "9ac946338cca68d00d1696a57943442f062628ec3daf53077d0bdd3f72cd9fa0",
+ "action": "add"
+ }
+ },
+ "UserView": {
+ "1": {
+ "version": 1,
+ "hash": "0b52d758e31d5889c9cd88afb467aae4a74e34a5276924e07012243c34d300fe",
+ "action": "add"
+ }
+ },
+ "UserViewPage": {
+ "1": {
+ "version": 1,
+ "hash": "1cd6528d02ec180f080d5c35f0da760d8a59af9da7baaa9c17c1c7cedcc858fa",
+ "action": "add"
+ }
+ },
+ "UserPrivateKey": {
+ "1": {
+ "version": 1,
+ "hash": "4817d8147aba94373f320dcd90e65f097cf6e5a2ef353aa8520e23128d522b5d",
+ "action": "add"
+ }
+ },
+ "DateTime": {
+ "1": {
+ "version": 1,
+ "hash": "394abb554114ead4d63c36e3fe83ac018dead4b21a8465174009577c46d54c58",
+ "action": "add"
+ }
+ },
+ "ReplyNotification": {
+ "1": {
+ "version": 1,
+ "hash": "84102dfc59d711b03c2f3d3a6ecaca000b6835f1bbdd9af801057f7aacb5f1d0",
+ "action": "add"
+ }
+ },
+ "Notification": {
+ "1": {
+ "version": 1,
+ "hash": "af4cb232bff390c431e399975f048b34da7e940ace8b23b940a3b398c91c5326",
+ "action": "add"
+ }
+ },
+ "CreateNotification": {
+ "1": {
+ "version": 1,
+ "hash": "7e426c946b7d5db6f9427960ec16042f3018091d835ca5966f3568c324a2ab53",
+ "action": "add"
+ }
+ },
+ "UserNotificationActivity": {
+ "1": {
+ "version": 1,
+ "hash": "422fd01c6d9af38688a9982abd34e80794a1f6ddd444cca225d77f49189847a9",
+ "action": "add"
+ }
+ },
+ "NotificationPreferences": {
+ "1": {
+ "version": 1,
+ "hash": "a42f06b367e7c6cbabcbf3cfcc84d1ca0873e457d972ebd060e87c9d6185f62b",
+ "action": "add"
+ }
+ },
+ "NotifierSettings": {
+ "1": {
+ "version": 1,
+ "hash": "65c8ab814d35fac32f68d3000756692592cc59940f30e3af3dcdfa2328755b9d",
+ "action": "add"
+ },
+ "2": {
+ "version": 2,
+ "hash": "be8b52597fc628d1b7cd22b776ee81416e1adbb04a45188778eb0e32ed1416b4",
+ "action": "add"
+ }
+ },
+ "SyftImageRegistry": {
+ "1": {
+ "version": 1,
+ "hash": "67e18903e41cba1afe136adf29d404b63ec04fea6e928abb2533ec4fa52b246b",
+ "action": "add"
+ }
+ },
+ "SyftWorkerImage": {
+ "1": {
+ "version": 1,
+ "hash": "44da7badfbe573d5403d3ab78c077f17dbefc560b81fdf927b671815be047441",
+ "action": "add"
+ }
+ },
+ "SyftWorker": {
+ "1": {
+ "version": 1,
+ "hash": "9d897f6039eabe48dfa8e8d5c5cdcb283b0375b4c64571b457777eaaf3fb1920",
+ "action": "add"
+ }
+ },
+ "WorkerPool": {
+ "1": {
+ "version": 1,
+ "hash": "16efc5dd2596ae744fd611c8f46af9eaec1bd5729eb20e85e9fd2f31df402564",
+ "action": "add"
+ }
+ },
+ "MarkdownDescription": {
+ "1": {
+ "version": 1,
+ "hash": "31a73f8824cad1636a55d14b6a1074cdb071d0d4e16e86baaa3d4f63a7e80134",
+ "action": "add"
+ }
+ },
+ "HTMLObject": {
+ "1": {
+ "version": 1,
+ "hash": "97f2e93f5ceaa88015047186f66a17ff13df2a6b7925b41331f9e19d5a515a9f",
+ "action": "add"
+ }
+ },
+ "PwdTokenResetConfig": {
+ "1": {
+ "version": 1,
+ "hash": "0415a272428f22add4896c64aa9f29c8c1d35619e2433da6564eb5f1faff39ac",
+ "action": "add"
+ }
+ },
+ "ServerSettingsUpdate": {
+ "1": {
+ "version": 1,
+ "hash": "1e4260ad879ae80728c3ffae2cd1d48759abd51f9d0960d4b25855cdbb4c506b",
+ "action": "add"
+ },
+ "2": {
+ "version": 2,
+ "hash": "23b2716e9dceca667e228408e2416c82f11821e322e5bccf1f83406f3d09abdc",
+ "action": "add"
+ },
+ "3": {
+ "version": 3,
+ "hash": "335c7946f2e52d09c7b26f511120cd340717c74c5cca9107e84f839da993c55c",
+ "action": "add"
+ },
+ "4": {
+ "version": 4,
+ "hash": "8d7a41992c39c287fcb46383bed429ce75d3c9524ced8c86b88c26dd0232e2fe",
+ "action": "add"
+ }
+ },
+ "ServerSettings": {
+ "1": {
+ "version": 1,
+ "hash": "5a1e7470cbeaaae5b80ac9beecb743734f7e4e42d429a09ea8defa569a5ddff1",
+ "action": "add"
+ },
+ "2": {
+ "version": 2,
+ "hash": "7727ea54e494dc9deaa0d1bd38ac8a6180bc192b74eec5659adbc338a19e21f5",
+ "action": "add"
+ },
+ "3": {
+ "version": 3,
+ "hash": "997667e1cba22d151857aacc2caba6b1ca73c1648adbd03461dc74a0c0c372b3",
+ "action": "add"
+ },
+ "4": {
+ "version": 4,
+ "hash": "b8067777967a0e06733433e179e549caaf501419d62f7e8474ee33b839e3890d",
+ "action": "add"
+ }
+ },
+ "HTTPConnection": {
+ "1": {
+ "version": 1,
+ "hash": "bf10f81646c71069c76292b1237b4a3de1e507264392c5c591d067636ce6fb46",
+ "action": "add"
+ }
+ },
+ "PythonConnection": {
+ "1": {
+ "version": 1,
+ "hash": "28010778b5e3463ff6960a0e2224818de00bc7b5e6f892192e02e399ccbe18b5",
+ "action": "add"
+ }
+ },
+ "ActionDataEmpty": {
+ "1": {
+ "version": 1,
+ "hash": "e0e4a5cf18d05b6b747addc048515c6f2a5f35f0766ebaee96d898cb971e1c5b",
+ "action": "add"
+ }
+ },
+ "ObjectNotReady": {
+ "1": {
+ "version": 1,
+ "hash": "8cf471e205cd0893d6aae5f0227d14db7df1c9698da08a3ab991f59132d17fe9",
+ "action": "add"
+ }
+ },
+ "ActionDataLink": {
+ "1": {
+ "version": 1,
+ "hash": "3469478343439e411b761c270eec63eb3d533e459ad72d0965158c3a6cdf3b9a",
+ "action": "add"
+ }
+ },
+ "Action": {
+ "1": {
+ "version": 1,
+ "hash": "021826d7c6f69bd0283d025d40661f3ffbeba8810ca94de01344f6afbdae62cd",
+ "action": "add"
+ }
+ },
+ "ActionObject": {
+ "1": {
+ "version": 1,
+ "hash": "0a5f4bc343cb114a251f06686ecdbb59d74bfb3d29a098b176699deb35a1e683",
+ "action": "add"
+ }
+ },
+ "AnyActionObject": {
+ "1": {
+ "version": 1,
+ "hash": "b3c44c7788c59c03fa1baeec656c2ca6e633f4cbd4b23ff7ece6ee94c38449f0",
+ "action": "add"
+ }
+ },
+ "CustomEndpointActionObject": {
+ "1": {
+ "version": 1,
+ "hash": "c7addbaf2777707f3e91e5c1e092343476cd22efc4ec8617f39ccf76e61a5a14",
+ "action": "add"
+ },
+ "2": {
+ "version": 2,
+ "hash": "846ba36e8737a1bec16853c9de54c4948450009278e0b76fe7e3355ef9e70089",
+ "action": "add"
+ }
+ },
+ "DataSubject": {
+ "1": {
+ "version": 1,
+ "hash": "582cdf9e82b5d6915b7f09f7c0d5f08328b11a2ce9b0198e5083f1672c2e2bf5",
+ "action": "add"
+ }
+ },
+ "DataSubjectCreate": {
+ "1": {
+ "version": 1,
+ "hash": "5a8423c2690d55f425bfeecc87cd4a797a75d88ebb5fbda754d4f269b62d2ceb",
+ "action": "add"
+ }
+ },
+ "DataSubjectMemberRelationship": {
+ "1": {
+ "version": 1,
+ "hash": "0810483ea76ea10c8f286c6035dc0b2085291f345183be50c179f3a05a577110",
+ "action": "add"
+ }
+ },
+ "Contributor": {
+ "1": {
+ "version": 1,
+ "hash": "30c32bd44098f00e0b15496be441763b6e50af8b12d3d2bef33aca6287193876",
+ "action": "add"
+ }
+ },
+ "Asset": {
+ "1": {
+ "version": 1,
+ "hash": "000abc78719611c106295cf12b1690b7e5411dc1bb9db9d4afd22956da90d1f4",
+ "action": "add"
+ }
+ },
+ "CreateAsset": {
+ "1": {
+ "version": 1,
+ "hash": "357d52576cb12b24fb3980342bb49a562b065c0e4419e87d34176340628c7309",
+ "action": "add"
+ }
+ },
+ "Dataset": {
+ "1": {
+ "version": 1,
+ "hash": "0ca6b0b4a3aebb2c8f351668075b44951bb20d1e23a779b82109124f334ce3a4",
+ "action": "add"
+ }
+ },
+ "DatasetPageView": {
+ "1": {
+ "version": 1,
+ "hash": "aa0dd69637281b80d5523b4409a2c7e89db114c9fe79c858063c6dadff8977d1",
+ "action": "add"
+ },
+ "2": {
+ "version": 2,
+ "hash": "be1ca6dcd0b3aa0481ce5dce737e78432d06a78ad0c701aaf136be407c798352",
+ "action": "add"
+ }
+ },
+ "CreateDataset": {
+ "1": {
+ "version": 1,
+ "hash": "7e02dfa89540c3dbebacbb13810d95cdc4e36db31d56cffed7ab54abe25716c9",
+ "action": "add"
+ }
+ },
+ "SyftLog": {
+ "1": {
+ "version": 1,
+ "hash": "1bcd71e5bf3f0db3bba0996f33b6b2bde3489b9c71f11e6b30c3495c76a8f53f",
+ "action": "add"
+ }
+ },
+ "JobItem": {
+ "1": {
+ "version": 1,
+ "hash": "0b32277b7d3b9bdc14a2a51cc9005f8254e7f7b6ec059ddcccbcd681a807afb6",
+ "action": "add"
+ },
+ "2": {
+ "version": 2,
+ "hash": "b087d0c62b7d304c6ca80e4fb0e8a7f2a444be8f8cba57490dc09aeb98033105",
+ "action": "add"
+ }
+ },
+ "ExecutionOutput": {
+ "1": {
+ "version": 1,
+ "hash": "e36c71685edf5276a3427cb6749550486d3a177c1dcf73dd337ab2a73c0ce6b5",
+ "action": "add"
+ }
+ },
+ "TwinObject": {
+ "1": {
+ "version": 1,
+ "hash": "4f31243fb348dbb083579afd6f638d75af010cb53d19bfba59b74afff41ccbbb",
+ "action": "add"
+ }
+ },
+ "PolicyRule": {
+ "1": {
+ "version": 1,
+ "hash": "44d1ca1db97be46f66558aa1a729ff31bf8e113c6a913b11aedf9d6b6ad5b7b5",
+ "action": "add"
+ }
+ },
+ "CreatePolicyRule": {
+ "1": {
+ "version": 1,
+ "hash": "342bb723526d445151a0435f57d251f4c1219f8ae7cca3e8e9fce52e2ee1b8b1",
+ "action": "add"
+ }
+ },
+ "CreatePolicyRuleConstant": {
+ "1": {
+ "version": 1,
+ "hash": "78b54832cb0468a87013bc36bc11d4759874ca1b5065a1b711f1e5ef5d94c2df",
+ "action": "add"
+ }
+ },
+ "Matches": {
+ "1": {
+ "version": 1,
+ "hash": "dd6d91ddb2ec5eaf60be2b0899ecfdb9a15f7904aa39d2f4d9bb2d7b793040e6",
+ "action": "add"
+ }
+ },
+ "PreFill": {
+ "1": {
+ "version": 1,
+ "hash": "c7aefb11dc4c4569dcd1e6988371047a32a8be1b32ad46d12adba419a19769ad",
+ "action": "add"
+ }
+ },
+ "UserOwned": {
+ "1": {
+ "version": 1,
+ "hash": "c8738dc3d8c2a5ef461b85a0467c3dff53dab16b54a4d12b44b1477906aef51d",
+ "action": "add"
+ }
+ },
+ "MixedInputPolicy": {
+ "1": {
+ "version": 1,
+ "hash": "37bb12d950518d9579c8ec7c4cc22ac731ea82caf8c1370dd0b0a82b46462dde",
+ "action": "add"
+ }
+ },
+ "ExactMatch": {
+ "1": {
+ "version": 1,
+ "hash": "5eb37edbf5e451d942e599247f3eaed923c1fe9d91eefdba02bf06503f6cc08d",
+ "action": "add"
+ }
+ },
+ "OutputHistory": {
+ "1": {
+ "version": 1,
+ "hash": "9366db79d131f8c65e5a4ff12c90e2aa0c11e302debe06e46eeb93b26e2aaf61",
+ "action": "add"
+ }
+ },
+ "OutputPolicyExecuteCount": {
+ "1": {
+ "version": 1,
+ "hash": "2a77e5ed5c7b0391147562651ad4061e20b11745c191fbc34cb549da37ba72dd",
+ "action": "add"
+ }
+ },
+ "OutputPolicyExecuteOnce": {
+ "1": {
+ "version": 1,
+ "hash": "5589c00d127d9eb1f5ccf3a16def8219737784d57bb3bf9be5cb6d83325ef436",
+ "action": "add"
+ }
+ },
+ "EmptyInputPolicy": {
+ "1": {
+ "version": 1,
+ "hash": "7ef81cfd223be0064600e1503f8b04bafc16385e27730e9319466e68a077c68b",
+ "action": "add"
+ }
+ },
+ "UserPolicy": {
+ "1": {
+ "version": 1,
+ "hash": "74373bb71a334f4dcf77623ae10ff5b1c7e5b3006f65f2051ffb1e01f422f982",
+ "action": "add"
+ }
+ },
+ "SubmitUserPolicy": {
+ "1": {
+ "version": 1,
+ "hash": "ec4e808eb39613bcdbbbf9ffb3267612084a9d99880a2f3bee3ef32d46329c02",
+ "action": "add"
+ }
+ },
+ "UserCodeStatusCollection": {
+ "1": {
+ "version": 1,
+ "hash": "735ecf2d4abb1e7d19b2e751d880f32b01ce267ba10e417ef1b440be3d94d8f1",
+ "action": "add"
+ }
+ },
+ "UserCode": {
+ "1": {
+ "version": 1,
+ "hash": "3bcd14413b9c4fbde7c5612c2ed713518340280b5cff89cf2aaaf1c77c4037a8",
+ "action": "add"
+ }
+ },
+ "SubmitUserCode": {
+ "1": {
+ "version": 1,
+ "hash": "d2bb8cfe12f070b4adafded78ce01900c5409bd83f055f94b1e285745ef65a76",
+ "action": "add"
+ }
+ },
+ "UserCodeExecutionResult": {
+ "1": {
+ "version": 1,
+ "hash": "1f4cbc62caac4dd193f427306405dc7a099ae744bea5830cf57149ce71c1e589",
+ "action": "add"
+ }
+ },
+ "UserCodeExecutionOutput": {
+ "1": {
+ "version": 1,
+ "hash": "c1d53300a39dbbb437d7d5a1257bd175a067b1065f4099a0938fac7540035258",
+ "action": "add"
+ },
+ "2": {
+ "version": 2,
+ "hash": "3e104e39b4ab53c950e61e4f7e92ce935cf96a5100de301de9bf297eb7e5787e",
+ "action": "add"
+ }
+ },
+ "CodeHistory": {
+ "1": {
+ "version": 1,
+ "hash": "e3ef5346f108257828f364d22b12d9311812c9cf843200afef5dc4d9302f9b21",
+ "action": "add"
+ }
+ },
+ "CodeHistoryView": {
+ "1": {
+ "version": 1,
+ "hash": "8b8b97d334b51d1ce0a9efab722411ff25caa3f12be319105954497e0a306eb2",
+ "action": "add"
+ }
+ },
+ "CodeHistoriesDict": {
+ "1": {
+ "version": 1,
+ "hash": "01d7dcd4b21525a06e4484d8699a4a34a5c84f1f6026ec55e32eb30412742601",
+ "action": "add"
+ }
+ },
+ "UsersCodeHistoriesDict": {
+ "1": {
+ "version": 1,
+ "hash": "4ed8b83973258ea19a1f91feb2590ff73b801be86f4296cc3db48f6929ff784c",
+ "action": "add"
+ }
+ },
+ "BlobFile": {
+ "1": {
+ "version": 1,
+ "hash": "d99239100f1cb0b73c69b2ad7cab01a06909cc3a4976ba2b3b67cf6fe5e2f516",
+ "action": "add"
+ }
+ },
+ "BlobFileOBject": {
+ "1": {
+ "version": 1,
+ "hash": "6c40dab2c8d2220d4fff7cc653d76cc026a856db7e2b5713b6341e255adc7ea2",
+ "action": "add"
+ }
+ },
+ "SecureFilePathLocation": {
+ "1": {
+ "version": 1,
+ "hash": "ea5978b98d7773d221665b450454c9130c103a5c850669a0acd620607cd614b7",
+ "action": "add"
+ }
+ },
+ "SeaweedSecureFilePathLocation": {
+ "1": {
+ "version": 1,
+ "hash": "3fc9bfc8c1b1cf660c9747e8c1fe3eb2220e78d4e3b5d6b5c5f29a07a77ebf3e",
+ "action": "add"
+ }
+ },
+ "AzureSecureFilePathLocation": {
+ "1": {
+ "version": 1,
+ "hash": "090a9e962eeb655586ee966c5651d8996363969818a38f9a486fd64d33047e05",
+ "action": "add"
+ }
+ },
+ "BlobStorageEntry": {
+ "1": {
+ "version": 1,
+ "hash": "afdc6a1d8a24b1ee1ed9d3e79f5bac64b4f0d9d36800f07f10be0b896470345f",
+ "action": "add"
+ }
+ },
+ "BlobStorageMetadata": {
+ "1": {
+ "version": 1,
+ "hash": "9d4b61ac4ea1910c2f7c767a50a6a52544a24663548f069e79bd906f11b538e4",
+ "action": "add"
+ }
+ },
+ "CreateBlobStorageEntry": {
+ "1": {
+ "version": 1,
+ "hash": "ffc3cbfeade67d074dc5bf7d655a1eb8c83630076028a72b3cc4548f3b413e14",
+ "action": "add"
+ }
+ },
+ "SyftObjectMigrationState": {
+ "1": {
+ "version": 1,
+ "hash": "ee83315828551f18904bab18e0cac48896493620561215b04cc448e6ce5834af",
+ "action": "add"
+ }
+ },
+ "StoreMetadata": {
+ "1": {
+ "version": 1,
+ "hash": "8de9a22a2765ef976bc161cb0704347d30350c085da8c8ffa876065cfca3e5fd",
+ "action": "add"
+ }
+ },
+ "MigrationData": {
+ "1": {
+ "version": 1,
+ "hash": "cb96b8c8413609e1224341d1b0dd1efb08387c0ff7b0ff65eba36c0b104c9ed1",
+ "action": "add"
+ },
+ "2": {
+ "version": 2,
+ "hash": "1d1b14c196221ecf6d644d7dcaa32ac9e90361b2687fa83161ff399ebc6df1bd",
+ "action": "add"
+ }
+ },
+ "BlobRetrieval": {
+ "1": {
+ "version": 1,
+ "hash": "c422c74b89a9349742acaa848566fe18bfef1a83333458b858c074baed37a859",
+ "action": "add"
+ }
+ },
+ "SyftObjectRetrieval": {
+ "1": {
+ "version": 1,
+ "hash": "b2b62447445adc4cd0b77ab59d6fa56624dd316fb50281e570daad07556b6db2",
+ "action": "add"
+ }
+ },
+ "BlobRetrievalByURL": {
+ "1": {
+ "version": 1,
+ "hash": "4db0e3b7a6334d3835356d8393866711e243e360af25a95f3cc4066f032404b5",
+ "action": "add"
+ }
+ },
+ "BlobDeposit": {
+ "1": {
+ "version": 1,
+ "hash": "6eb5cc57dc763126bfc6ec5a2b79d02e77eadf9d9efb1888a5c366b7799c1c24",
+ "action": "add"
+ }
+ },
+ "OnDiskBlobDeposit": {
+ "1": {
+ "version": 1,
+ "hash": "817bf1bee4a35bfa1cd25d6779a10d8d180b1b3f1e837952f81f48b9411d1970",
+ "action": "add"
+ }
+ },
+ "RemoteConfig": {
+ "1": {
+ "version": 1,
+ "hash": "179d067099a178d748c6d9a0477e8de7c3b55577439669eca7150258f2409567",
+ "action": "add"
+ }
+ },
+ "AzureRemoteConfig": {
+ "1": {
+ "version": 1,
+ "hash": "a143811fec0da5fd881e927643ef667c91c78a2c90519cf88da7da20738bd187",
+ "action": "add"
+ }
+ },
+ "SeaweedFSBlobDeposit": {
+ "1": {
+ "version": 1,
+ "hash": "febeb2a2ce81aa2c512e4c6b611b582984042aafa0541403d4584662273a166c",
+ "action": "add"
+ }
+ },
+ "DictStoreConfig": {
+ "1": {
+ "version": 1,
+ "hash": "2e1365c5535fa51c22eef79f67dd6444789bc829c27881367e3050e06e2ffbfe",
+ "action": "add"
+ }
+ },
+ "NumpyArrayObject": {
+ "1": {
+ "version": 1,
+ "hash": "05dd2917b7692b3daf4e7ad083a46fa7ec7a2be8faac8d4a654809189c986443",
+ "action": "add"
+ }
+ },
+ "NumpyScalarObject": {
+ "1": {
+ "version": 1,
+ "hash": "8753e5c78270a5cacbf0439447724772f4765351a4a8b58b0a5c416a6b2c8b6e",
+ "action": "add"
+ }
+ },
+ "NumpyBoolObject": {
+ "1": {
+ "version": 1,
+ "hash": "331c44f8fa3d0a077f1aaad7313bae2c43b386d04def7b8bedae9fdf7690134d",
+ "action": "add"
+ }
+ },
+ "PandasDataframeObject": {
+ "1": {
+ "version": 1,
+ "hash": "5e8018364cea31d5f185a901da4ab89846b02153ee7d041ee8a6d305ece31f90",
+ "action": "add"
+ }
+ },
+ "PandasSeriesObject": {
+ "1": {
+ "version": 1,
+ "hash": "b8bd482bf16fc7177e9778292cd42f8835b6ced2ce8dc88908b4b8e6d7c7528f",
+ "action": "add"
+ }
+ },
+ "Change": {
+ "1": {
+ "version": 1,
+ "hash": "75fb9a5cd4e76b189ebe130a421d3921a0c251947a48bbb92a2ef1c315dc3c16",
+ "action": "add"
+ }
+ },
+ "ChangeStatus": {
+ "1": {
+ "version": 1,
+ "hash": "c914a6f7637b555a51b71e8e197e591f7a2e28121e29b5dd586f87e0383d179d",
+ "action": "add"
+ }
+ },
+ "ActionStoreChange": {
+ "1": {
+ "version": 1,
+ "hash": "1a803bb08924b49f3114fd46e0e132f819d4d56be5e03a27e9fe90947ca26e85",
+ "action": "add"
+ }
+ },
+ "CreateCustomImageChange": {
+ "1": {
+ "version": 1,
+ "hash": "c3dbea3f49979fdcc517c0d13cd02739ca2fe86b370c42496a224f142ae31562",
+ "action": "add"
+ }
+ },
+ "CreateCustomWorkerPoolChange": {
+ "1": {
+ "version": 1,
+ "hash": "0355793dd58b364dcb84fff29714b6a26446bead3ba95c6d75e3200008e580f4",
+ "action": "add"
+ }
+ },
+ "Request": {
+ "1": {
+ "version": 1,
+ "hash": "1d69f5f0074114f99aa29c5ee77cb20b9151e5b50e77b026f11c3632a12efadf",
+ "action": "add"
+ }
+ },
+ "RequestInfo": {
+ "1": {
+ "version": 1,
+ "hash": "779562547744ebed64548f8021647292604fdf4256bf79685dfa14a1e56cc27b",
+ "action": "add"
+ }
+ },
+ "RequestInfoFilter": {
+ "1": {
+ "version": 1,
+ "hash": "bb881a003032f4676321218d7cd09580f4d64fccaa1cf9e118fdcd5c73c3d3a8",
+ "action": "add"
+ }
+ },
+ "SubmitRequest": {
+ "1": {
+ "version": 1,
+ "hash": "6c38b6ffd0a6f7442746e68b9ace7b21cb1dca7d2031929db5f9a302a280403f",
+ "action": "add"
+ }
+ },
+ "ObjectMutation": {
+ "1": {
+ "version": 1,
+ "hash": "ce88096760ce9334599c8194ec97b0a1470651ad680d9d21b8826a0df0af2a36",
+ "action": "add"
+ }
+ },
+ "EnumMutation": {
+ "1": {
+ "version": 1,
+ "hash": "5173fda73df17a344eb663b7692cca48bd46bf1773455439836b852cd165448c",
+ "action": "add"
+ }
+ },
+ "UserCodeStatusChange": {
+ "1": {
+ "version": 1,
+ "hash": "89aaf7f1368c782e3a1b9e79988877f6eaa05ab84365f7d321b757fde7fe86e7",
+ "action": "add"
+ }
+ },
+ "SyncedUserCodeStatusChange": {
+ "1": {
+ "version": 1,
+ "hash": "d9ad2d341eb645bd50d06330cd30fd4c266f93e37b9f5391d58b78365fc440e6",
+ "action": "add"
+ }
+ },
+ "TwinAPIContextView": {
+ "1": {
+ "version": 1,
+ "hash": "e099eef32cb3a8a806cbdc54cc7fca96bed3d60344bd571163ec049db407938b",
+ "action": "add"
+ }
+ },
+ "CustomAPIView": {
+ "1": {
+ "version": 1,
+ "hash": "769e96bebd05736ab860591670fb6da19406239b0104ddc71bd092a134335146",
+ "action": "add"
+ }
+ },
+ "CustomApiEndpoint": {
+ "1": {
+ "version": 1,
+ "hash": "ec4a217585336d1b59c93c18570443a63f4fbb24d2c088fbacf80bcf389d23e8",
+ "action": "add"
+ }
+ },
+ "PrivateAPIEndpoint": {
+ "1": {
+ "version": 1,
+ "hash": "6d7d143432c2811c520ab6dade005ba40173b590e5c676be04f5921b970ef938",
+ "action": "add"
+ }
+ },
+ "PublicAPIEndpoint": {
+ "1": {
+ "version": 1,
+ "hash": "3bf51fc33aa8feb1abc9d0ef792e8889da31a57050430e0bd8e17f2065ff8734",
+ "action": "add"
+ }
+ },
+ "UpdateTwinAPIEndpoint": {
+ "1": {
+ "version": 1,
+ "hash": "851e59412716e73c7f70a696619e0b375ce136b43f6fe2ea784747091caba5d8",
+ "action": "add"
+ }
+ },
+ "CreateTwinAPIEndpoint": {
+ "1": {
+ "version": 1,
+ "hash": "3d0b84dae95ebcc6647b5aabe54e65b3c6bf957665fde57d8037806a4aac13be",
+ "action": "add"
+ }
+ },
+ "TwinAPIEndpoint": {
+ "1": {
+ "version": 1,
+ "hash": "d1947b8f9c80d6c9b443e5a9f0758afa8849a5f12b9a511feefd7e4f82c374f4",
+ "action": "add"
+ }
+ },
+ "SyncState": {
+ "1": {
+ "version": 1,
+ "hash": "9a3f0bb973858b55bc766c9770c4d9abcc817898f797d94a89938650c0c67868",
+ "action": "add"
+ }
+ },
+ "WorkerSettings": {
+ "1": {
+ "version": 1,
+ "hash": "dca33003904a71688e5b07db65f8833eb4de8135aade7154076b8eafbb94d26b",
+ "action": "add"
+ }
+ },
+ "HTTPServerRoute": {
+ "1": {
+ "version": 1,
+ "hash": "938245604a9c7e50001299afff5b669b2548364e356fed22a22780497831bf81",
+ "action": "add"
+ }
+ },
+ "PythonServerRoute": {
+ "1": {
+ "version": 1,
+ "hash": "a068d8f942d55ecb6d45af88a27c6ebf208584275bf589cbc308df3f774ab9a9",
+ "action": "add"
+ }
+ },
+ "VeilidServerRoute": {
+ "1": {
+ "version": 1,
+ "hash": "e676bc165601d2ede69707a4b6168ed4674f3f98887026d098a2dd4da4dfd097",
+ "action": "add"
+ }
+ },
+ "ServerPeer": {
+ "1": {
+ "version": 1,
+ "hash": "0d5f252018e324ea0d2dcb5c2ad8bd15707220565fce4f14de7f63a8f9e4391b",
+ "action": "add"
+ }
+ },
+ "ServerPeerUpdate": {
+ "1": {
+ "version": 1,
+ "hash": "0b854b57db7a18118c1fd8f31495b2ba4eeb9fbe4f24c631ff112418a94570d3",
+ "action": "add"
+ }
+ },
+ "AssociationRequestChange": {
+ "1": {
+ "version": 1,
+ "hash": "0134ac0002879c85fc9ddb06bed6306a8905c8434b0a40d3a96ce24a7bd4da90",
+ "action": "add"
+ }
+ },
+ "QueueItem": {
+ "1": {
+ "version": 1,
+ "hash": "1db212c46b6c56ccc5579cfe2141b693f0cd9286e2ede71210393e8455379bf1",
+ "action": "add"
+ }
+ },
+ "ActionQueueItem": {
+ "1": {
+ "version": 1,
+ "hash": "396d579dfc2e2b36b9fbed2f204bffcca1bea7ee2db7175045dd3328ebf08718",
+ "action": "add"
+ }
+ },
+ "APIEndpointQueueItem": {
+ "1": {
+ "version": 1,
+ "hash": "f04b3990a8d29c116d301e70df54d58f188895307a411dc13a666ff764ffd8dd",
+ "action": "add"
+ }
+ },
+ "ZMQClientConfig": {
+ "1": {
+ "version": 1,
+ "hash": "36ee8f75067d5144f0ed062cdc79466caae16b7a128231d89b6b430174843bde",
+ "action": "add"
+ }
+ },
+ "SQLiteStoreConfig": {
+ "1": {
+ "version": 1,
+ "hash": "ad062a5f863ae84683867d2a6a5e1d4420c010a64b88bc7b392106e33d71ac03",
+ "action": "add"
+ }
+ },
+ "ProjectEvent": {
+ "1": {
+ "version": 1,
+ "hash": "dc0486c52daebd5e98c2b3b03ffd9a9a14bc3d86d8dc0c23e41ebf6c31fe2ffb",
+ "action": "add"
+ }
+ },
+ "ProjectThreadMessage": {
+ "1": {
+ "version": 1,
+ "hash": "99256d7592577d1e37df94a06eabc0a287f2d79e144c51fd719315e278edb46d",
+ "action": "add"
+ }
+ },
+ "ProjectMessage": {
+ "1": {
+ "version": 1,
+ "hash": "b5004b6354f71b19c81dd5f4b20bf446e0b959f5608a22707e96b944dd8175b0",
+ "action": "add"
+ }
+ },
+ "ProjectRequestResponse": {
+ "1": {
+ "version": 1,
+ "hash": "52162a8a779a4a301d8755691bf4cf994c86b9f650f9e8c8a923b44e635b1bc0",
+ "action": "add"
+ }
+ },
+ "ProjectRequest": {
+ "1": {
+ "version": 1,
+ "hash": "dc684135d5a5a48e5fc7988598c1e6e0de76cf1c5995f1c283fcf63d0eb4d24f",
+ "action": "add"
+ }
+ },
+ "AnswerProjectPoll": {
+ "1": {
+ "version": 1,
+ "hash": "c83d83a5ba6cc034d5061df200b3f1d029aa770b1e13dbef959bb1790323dc6e",
+ "action": "add"
+ }
+ },
+ "ProjectPoll": {
+ "1": {
+ "version": 1,
+ "hash": "ecf69b3b324e0bee9c82295796d44c4e8f796496cdc9db6d4302c2f160566466",
+ "action": "add"
+ }
+ },
+ "Project": {
+ "1": {
+ "version": 1,
+ "hash": "de86a1163ddbcd1cc3cc2b1b5dfcb85a8ad9f9d4bbc759c2b1f92a0d0a2ff184",
+ "action": "add"
+ }
+ },
+ "ProjectSubmit": {
+ "1": {
+ "version": 1,
+ "hash": "7555ba11ee5a814dcd9c45647300020f7359efc1081559940990cbd745936cac",
+ "action": "add"
+ }
+ },
+ "Plan": {
+ "1": {
+ "version": 1,
+ "hash": "ed05cb87aec832098fc464ac36cd6bceaab705463d0d2fa1b2d8e1ccc510018c",
+ "action": "add"
+ }
+ },
+ "EnclaveMetadata": {
+ "1": {
+ "version": 1,
+ "hash": "8d2dfafa01ec909c080a790cf15a8fc78e00382d3bfe6207098ceb25a60b9c53",
+ "action": "add"
+ }
+ }
+ }
+ }
+}
diff --git a/packages/syft/src/syft/server/routes.py b/packages/syft/src/syft/server/routes.py
index ec5bedd6d01..a492e999f8e 100644
--- a/packages/syft/src/syft/server/routes.py
+++ b/packages/syft/src/syft/server/routes.py
@@ -49,8 +49,7 @@ def _get_server_connection(peer_uid: UID) -> ServerConnection:
# relative
from ..service.network.server_peer import route_to_connection
- network_service = worker.get_service("NetworkService")
- peer = network_service.stash.get_by_uid(worker.verify_key, peer_uid).unwrap()
+ peer = worker.network.stash.get_by_uid(worker.verify_key, peer_uid).unwrap()
peer_server_route = peer.pick_highest_priority_route()
connection = route_to_connection(route=peer_server_route)
return connection
@@ -168,9 +167,8 @@ def syft_new_api_call(
def handle_forgot_password(email: str, server: AbstractServer) -> Response:
try:
- method = server.get_service_method(UserService.forgot_password)
context = UnauthedServiceContext(server=server)
- result = method(context=context, email=email)
+ result = server.services.user.forgot_password(context=context, email=email)
except SyftException as e:
result = SyftError.from_public_exception(e)
@@ -186,9 +184,10 @@ def handle_reset_password(
token: str, new_password: str, server: AbstractServer
) -> Response:
try:
- method = server.get_service_method(UserService.reset_password)
context = UnauthedServiceContext(server=server)
- result = method(context=context, token=token, new_password=new_password)
+ result = server.services.user.reset_password(
+ context=context, token=token, new_password=new_password
+ )
except SyftException as e:
result = SyftError.from_public_exception(e)
@@ -206,12 +205,11 @@ def handle_login(email: str, password: str, server: AbstractServer) -> Response:
except ValidationError as e:
return {"Error": e.json()}
- method = server.get_service_method(UserService.exchange_credentials)
context = UnauthedServiceContext(
server=server, login_credentials=login_credentials
)
try:
- result = method(context=context).value
+ result = server.services.user.exchange_credentials(context=context).value
if not isinstance(result, UserPrivateKey):
response = SyftError(message=f"Incorrect return type: {type(result)}")
else:
diff --git a/packages/syft/src/syft/server/server.py b/packages/syft/src/syft/server/server.py
index 102b34ad99a..b9737bd873c 100644
--- a/packages/syft/src/syft/server/server.py
+++ b/packages/syft/src/syft/server/server.py
@@ -42,8 +42,6 @@
from ..service.action.action_store import DictActionStore
from ..service.action.action_store import MongoActionStore
from ..service.action.action_store import SQLiteActionStore
-from ..service.blob_storage.service import BlobStorageService
-from ..service.code.user_code_service import UserCodeService
from ..service.code.user_code_stash import UserCodeStash
from ..service.context import AuthedServiceContext
from ..service.context import ServerServiceContext
@@ -54,13 +52,13 @@
from ..service.job.job_stash import JobStatus
from ..service.job.job_stash import JobType
from ..service.metadata.server_metadata import ServerMetadata
-from ..service.network.network_service import NetworkService
from ..service.network.utils import PeerHealthCheckTask
from ..service.notifier.notifier_service import NotifierService
from ..service.queue.base_queue import AbstractMessageHandler
from ..service.queue.base_queue import QueueConsumer
from ..service.queue.base_queue import QueueProducer
from ..service.queue.queue import APICallMessageHandler
+from ..service.queue.queue import ConsumerType
from ..service.queue.queue import QueueManager
from ..service.queue.queue_stash import APIEndpointQueueItem
from ..service.queue.queue_stash import ActionQueueItem
@@ -81,12 +79,10 @@
from ..service.user.user import UserCreate
from ..service.user.user import UserView
from ..service.user.user_roles import ServiceRole
-from ..service.user.user_service import UserService
from ..service.user.user_stash import UserStash
from ..service.worker.utils import DEFAULT_WORKER_IMAGE_TAG
from ..service.worker.utils import DEFAULT_WORKER_POOL_NAME
from ..service.worker.utils import create_default_image
-from ..service.worker.worker_image_service import SyftWorkerImageService
from ..service.worker.worker_pool import WorkerPool
from ..service.worker.worker_pool_service import SyftWorkerPoolService
from ..service.worker.worker_pool_stash import SyftWorkerPoolStash
@@ -338,6 +334,7 @@ def __init__(
smtp_host: str | None = None,
association_request_auto_approval: bool = False,
background_tasks: bool = False,
+ consumer_type: ConsumerType | None = None,
):
# 🟡 TODO 22: change our ENV variable format and default init args to make this
# less horrible or add some convenience functions
@@ -381,10 +378,15 @@ def __init__(
self.association_request_auto_approval = association_request_auto_approval
+ consumer_type = (
+ consumer_type or ConsumerType.Thread
+ if thread_workers
+ else ConsumerType.Process
+ )
self.queue_config = self.create_queue_config(
n_consumers=n_consumers,
create_producer=create_producer,
- thread_workers=thread_workers,
+ consumer_type=consumer_type,
queue_port=queue_port,
queue_config=queue_config,
)
@@ -528,8 +530,7 @@ def init_blob_storage(self, config: BlobStorageConfig | None = None) -> None:
from ..store.blob_storage.seaweedfs import SeaweedFSConfig
if isinstance(config, SeaweedFSConfig) and self.signing_key:
- blob_storage_service = self.get_service(BlobStorageService)
- remote_profiles = blob_storage_service.remote_profile_stash.get_all(
+ remote_profiles = self.services.blob_storage.remote_profile_stash.get_all(
credentials=self.signing_key.verify_key, has_permission=True
).unwrap()
for remote_profile in remote_profiles:
@@ -578,7 +579,7 @@ def create_queue_config(
self,
n_consumers: int,
create_producer: bool,
- thread_workers: bool,
+ consumer_type: ConsumerType,
queue_port: int | None,
queue_config: QueueConfig | None,
) -> QueueConfig:
@@ -587,13 +588,14 @@ def create_queue_config(
elif queue_port is not None or n_consumers > 0 or create_producer:
if not create_producer and queue_port is None:
logger.warn("No queue port defined to bind consumers.")
+
queue_config_ = ZMQQueueConfig(
client_config=ZMQClientConfig(
create_producer=create_producer,
queue_port=queue_port,
n_consumers=n_consumers,
),
- thread_workers=thread_workers,
+ consumer_type=consumer_type,
)
else:
queue_config_ = ZMQQueueConfig()
@@ -727,6 +729,7 @@ def named(
in_memory_workers: bool = True,
association_request_auto_approval: bool = False,
background_tasks: bool = False,
+ consumer_type: ConsumerType | None = None,
) -> Server:
uid = get_named_server_uid(name)
name_hash = hashlib.sha256(name.encode("utf8")).digest()
@@ -757,6 +760,7 @@ def named(
reset=reset,
association_request_auto_approval=association_request_auto_approval,
background_tasks=background_tasks,
+ consumer_type=consumer_type,
)
def is_root(self, credentials: SyftVerifyKey) -> bool:
@@ -815,8 +819,9 @@ def find_and_migrate_data(
credentials=self.verify_key,
role=ServiceRole.ADMIN,
)
- migration_service = self.get_service("migrationservice")
- return migration_service.migrate_data(context, document_store_object_types)
+ return self.services.migration.migrate_data(
+ context, document_store_object_types
+ )
@property
def guest_client(self) -> SyftClient:
@@ -868,11 +873,10 @@ def post_init(self) -> None:
)
if "usercodeservice" in self.service_path_map:
- user_code_service = self.get_service(UserCodeService)
- user_code_service.load_user_code(context=context)
+ self.services.user_code.load_user_code(context=context)
def reload_user_code() -> None:
- user_code_service.load_user_code(context=context)
+ self.services.user_code.load_user_code(context=context)
ti = thread_ident()
if ti is not None:
@@ -929,11 +933,11 @@ def init_stores(
@property
def job_stash(self) -> JobStash:
- return self.get_service("jobservice").stash
+ return self.services.job.stash
@property
def worker_stash(self) -> WorkerStash:
- return self.get_service("workerservice").stash
+ return self.services.worker.stash
@property
def service_path_map(self) -> dict[str, AbstractService]:
@@ -1116,9 +1120,9 @@ def forward_message(
)
client = None
-
- network_service = self.get_service(NetworkService)
- peer = network_service.stash.get_by_uid(self.verify_key, server_uid).unwrap()
+ peer = self.services.network.stash.get_by_uid(
+ self.verify_key, server_uid
+ ).unwrap()
# Since we have several routes to a peer
# we need to cache the client for a given server_uid along with the route
@@ -1162,11 +1166,9 @@ def forward_message(
raise SyftException(public_message=(f"Server has no route to {server_uid}"))
def get_role_for_credentials(self, credentials: SyftVerifyKey) -> ServiceRole:
- return (
- self.get_service("userservice")
- .get_role_for_credentials(credentials=credentials)
- .unwrap()
- )
+ return self.services.user.get_role_for_credentials(
+ credentials=credentials
+ ).unwrap()
@instrument
def handle_api_call(
@@ -1413,10 +1415,7 @@ def add_action_to_queue(
has_execute_permissions=has_execute_permissions,
worker_pool=worker_pool_ref, # set worker pool reference as part of queue item
)
-
- user_service = self.get_service("UserService")
- user_service = cast(UserService, user_service)
- user_id = user_service.get_user_id_for_credentials(credentials).unwrap()
+ user_id = self.services.user.get_user_id_for_credentials(credentials).unwrap()
return self.add_queueitem_to_queue(
queue_item=queue_item,
@@ -1444,9 +1443,6 @@ def add_queueitem_to_queue(
role = self.get_role_for_credentials(credentials=credentials)
context = AuthedServiceContext(server=self, credentials=credentials, role=role)
- action_service = self.get_service("actionservice")
- log_service = self.get_service("logservice")
-
result_obj = ActionObject.empty()
if action is not None:
result_obj = ActionObject.obj_not_ready(
@@ -1459,10 +1455,8 @@ def add_queueitem_to_queue(
result_obj.syft_server_location = self.id
result_obj.syft_client_verify_key = credentials
- action_service = self.get_service("actionservice")
-
- if not action_service.store.exists(uid=action.result_id):
- action_service.set_result_to_store(
+ if not self.services.action.store.exists(uid=action.result_id):
+ self.services.action.set_result_to_store(
result_action_object=result_obj,
context=context,
).unwrap()
@@ -1485,7 +1479,7 @@ def add_queueitem_to_queue(
self.job_stash.set(credentials, job).unwrap()
self.queue_stash.set_placeholder(credentials, queue_item).unwrap()
- log_service.add(context, log_id, queue_item.job_id)
+ self.services.log.add(context, log_id, queue_item.job_id)
return job
@@ -1509,8 +1503,7 @@ def _sort_jobs(self, jobs: list[Job]) -> list[Job]:
def _get_existing_user_code_jobs(
self, context: AuthedServiceContext, user_code_id: UID
) -> list[Job]:
- job_service = self.get_service("jobservice")
- jobs = job_service.get_by_user_code_id(
+ jobs = self.services.job.get_by_user_code_id(
context=context, user_code_id=user_code_id
)
return self._sort_jobs(jobs)
@@ -1523,8 +1516,7 @@ def _is_usercode_call_on_owned_kwargs(
) -> bool:
if api_call.path != "code.call":
return False
- user_code_service = self.get_service("usercodeservice")
- return user_code_service.is_execution_on_owned_args(
+ return self.services.user_code.is_execution_on_owned_args(
context, user_code_id, api_call.kwargs
)
@@ -1552,7 +1544,7 @@ def add_api_call_to_queue(
action = Action.from_api_call(unsigned_call)
user_code_id = action.user_code_id
- user = self.get_service(UserService).get_current_user(context)
+ user = self.services.user.get_current_user(context)
user = cast(UserView, user)
is_execution_on_owned_kwargs_allowed = (
@@ -1627,11 +1619,11 @@ def add_api_call_to_queue(
@property
def pool_stash(self) -> SyftWorkerPoolStash:
- return self.get_service(SyftWorkerPoolService).stash
+ return self.services.syft_worker_pool.stash
@property
def user_code_stash(self) -> UserCodeStash:
- return self.get_service(UserCodeService).stash
+ return self.services.user_code.stash
@as_result(NotFoundException)
def get_default_worker_pool(self) -> WorkerPool | None:
@@ -1803,7 +1795,7 @@ def get_default_worker_tag_by_env(dev_mode: bool = False) -> str | None:
def create_default_worker_pool(server: Server) -> None:
credentials = server.verify_key
pull_image = not server.dev_mode
- image_stash = server.get_service(SyftWorkerImageService).stash
+ image_stash = server.services.syft_worker_image.stash
default_pool_name = server.settings.default_worker_pool
try:
@@ -1835,9 +1827,8 @@ def create_default_worker_pool(server: Server) -> None:
if not default_image.is_built:
logger.info(f"Building default worker image with tag={default_worker_tag}. ")
- image_build_method = server.get_service_method(SyftWorkerImageService.build)
# Build the Image for given tag
- result = image_build_method(
+ result = server.services.worker_image.build(
context,
image_uid=default_image.id,
tag=DEFAULT_WORKER_IMAGE_TAG,
@@ -1854,8 +1845,7 @@ def create_default_worker_pool(server: Server) -> None:
)
if default_worker_pool is None:
worker_to_add_ = worker_count
- create_pool_method = server.get_service_method(SyftWorkerPoolService.launch)
- result = create_pool_method(
+ result = server.services.syft_worker_pool.launch(
context,
pool_name=default_pool_name,
image_uid=default_image.id,
@@ -1869,10 +1859,7 @@ def create_default_worker_pool(server: Server) -> None:
default_worker_pool.worker_list
)
if worker_to_add_ > 0:
- add_worker_method = server.get_service_method(
- SyftWorkerPoolService.add_workers
- )
- result = add_worker_method(
+ result = server.services.syft_worker_pool.add_workers(
context=context,
number=worker_to_add_,
pool_name=default_pool_name,
diff --git a/packages/syft/src/syft/service/action/action_endpoint.py b/packages/syft/src/syft/service/action/action_endpoint.py
index 32cc2128541..2237b3963a6 100644
--- a/packages/syft/src/syft/service/action/action_endpoint.py
+++ b/packages/syft/src/syft/service/action/action_endpoint.py
@@ -75,18 +75,18 @@ def __call_function(
self, call_mode: EXECUTION_MODE, *args: Any, **kwargs: Any
) -> Any:
self.context = self.__check_context()
- endpoint_service = self.context.server.get_service("apiservice")
-
if call_mode == EXECUTION_MODE.MOCK:
- __endpoint_mode = endpoint_service.execute_server_side_endpoint_mock_by_id
- elif call_mode == EXECUTION_MODE.PRIVATE:
__endpoint_mode = (
- endpoint_service.execute_service_side_endpoint_private_by_id
+ self.context.server.services.api.execute_server_side_endpoint_mock_by_id
)
+ elif call_mode == EXECUTION_MODE.PRIVATE:
+ __endpoint_mode = self.context.server.services.api.execute_service_side_endpoint_private_by_id
else:
- __endpoint_mode = endpoint_service.execute_server_side_endpoint_by_id
+ __endpoint_mode = (
+ self.context.server.services.api.execute_server_side_endpoint_by_id
+ )
- return __endpoint_mode(
+ return __endpoint_mode( # type: ignore[misc]
*args,
context=self.context,
endpoint_uid=self.endpoint_id,
diff --git a/packages/syft/src/syft/service/action/action_object.py b/packages/syft/src/syft/service/action/action_object.py
index 43054d01974..d7e566b733a 100644
--- a/packages/syft/src/syft/service/action/action_object.py
+++ b/packages/syft/src/syft/service/action/action_object.py
@@ -1175,8 +1175,9 @@ def get_sync_dependencies(
# relative
from ..job.job_stash import Job
- job_service = context.server.get_service("jobservice") # type: ignore
- job: Job | None = job_service.get_by_result_id(context, self.id.id) # type: ignore
+ job: Job | None = context.server.services.job.get_by_result_id(
+ context, self.id.id
+ ) # type: ignore
if job is not None:
return [job.id]
else:
diff --git a/packages/syft/src/syft/service/action/action_service.py b/packages/syft/src/syft/service/action/action_service.py
index 843880a1db6..94935631f01 100644
--- a/packages/syft/src/syft/service/action/action_service.py
+++ b/packages/syft/src/syft/service/action/action_service.py
@@ -2,7 +2,6 @@
import importlib
import logging
from typing import Any
-from typing import cast
# third party
import numpy as np
@@ -18,7 +17,6 @@
from ...types.syft_object import SyftObject
from ...types.twin_object import TwinObject
from ...types.uid import UID
-from ..blob_storage.service import BlobStorageService
from ..code.user_code import UserCode
from ..code.user_code import execute_byte_code
from ..context import AuthedServiceContext
@@ -194,9 +192,8 @@ def _set(
if action_object.mock_obj.syft_action_saved_to_blob_store:
blob_id = action_object.mock_obj.syft_blob_storage_entry_id
permission = ActionObjectPermission(blob_id, ActionPermission.ALL_READ)
- blob_storage_service = context.server.get_service(BlobStorageService)
# add_permission is not resultified.
- blob_storage_service.stash.add_permission(permission)
+ context.server.services.blob_storage.stash.add_permission(permission)
if has_result_read_permission:
action_object = action_object.private
@@ -358,9 +355,6 @@ def _user_code_execute(
override_execution_permission = (
context.has_execute_permissions or context.role == ServiceRole.ADMIN
)
- if context.server:
- user_code_service = context.server.get_service("usercodeservice")
-
input_policy = code_item.get_input_policy(context)
output_policy = code_item.get_output_policy(context)
@@ -427,7 +421,7 @@ def _user_code_execute(
update_policy=not override_execution_permission,
)
code_item.output_policy = output_policy # type: ignore
- user_code_service.update_code_state(context, code_item)
+ context.server.services.user_code.update_code_state(context, code_item)
if isinstance(exec_result.result, ActionObject):
result_action_object = ActionObject.link(
result_id=result_id, pointer_id=exec_result.result.id
@@ -454,7 +448,7 @@ def _user_code_execute(
update_policy=not override_execution_permission,
)
code_item.output_policy = output_policy # type: ignore
- user_code_service.update_code_state(context, code_item)
+ context.server.services.user_code.update_code_state(context, code_item)
result_action_object_private = wrap_result(
result_id, private_exec_result.result
)
@@ -552,10 +546,6 @@ def set_result_to_store(
has_result_read_permission=True,
).unwrap()
- blob_storage_service: AbstractService = context.server.get_service(
- BlobStorageService
- )
-
def store_permission(
x: SyftVerifyKey | None = None,
) -> ActionObjectPermission:
@@ -572,7 +562,7 @@ def blob_permission(
if result_blob_id is not None:
blob_permissions = [blob_permission(x) for x in output_readers]
- blob_storage_service.stash.add_permissions(blob_permissions)
+ context.server.blob_storage.stash.add_permissions(blob_permissions)
return set_result
@@ -816,12 +806,11 @@ def execute(self, context: AuthedServiceContext, action: Action) -> ActionObject
if action.action_type == ActionType.CREATEOBJECT:
result_action_object = action.create_object
elif action.action_type == ActionType.SYFTFUNCTION:
- usercode_service = context.server.get_service("usercodeservice")
kwarg_ids = {}
for k, v in action.kwargs.items():
# transform lineage ids into ids
kwarg_ids[k] = v.id
- return usercode_service._call( # type: ignore[union-attr]
+ return context.server.services.user_code._call( # type: ignore[union-attr]
context, action.user_code_id, action.result_id, **kwarg_ids
).unwrap()
elif action.action_type == ActionType.FUNCTION:
@@ -933,25 +922,21 @@ def _delete_blob_storage_entry(
) -> SyftSuccess:
deleted_blob_ids = []
- blob_store_service = cast(
- BlobStorageService, context.server.get_service(BlobStorageService)
- )
-
if isinstance(obj, ActionObject) and obj.syft_blob_storage_entry_id:
- blob_store_service.delete(
+ context.server.services.blob_storage.delete(
context=context, uid=obj.syft_blob_storage_entry_id
)
deleted_blob_ids.append(obj.syft_blob_storage_entry_id)
if isinstance(obj, TwinObject):
if obj.private.syft_blob_storage_entry_id:
- blob_store_service.delete(
+ context.server.services.blob_storage.delete(
context=context, uid=obj.private.syft_blob_storage_entry_id
)
deleted_blob_ids.append(obj.private.syft_blob_storage_entry_id)
if obj.mock.syft_blob_storage_entry_id:
- blob_store_service.delete(
+ context.server.services.blob_storage.delete(
context=context, uid=obj.mock.syft_blob_storage_entry_id
)
deleted_blob_ids.append(obj.mock.syft_blob_storage_entry_id)
diff --git a/packages/syft/src/syft/service/api/api.py b/packages/syft/src/syft/service/api/api.py
index 82881ef99d3..44567e8d8ef 100644
--- a/packages/syft/src/syft/service/api/api.py
+++ b/packages/syft/src/syft/service/api/api.py
@@ -37,7 +37,6 @@
from ..context import AuthedServiceContext
from ..response import SyftError
from ..user.user import UserView
-from ..user.user_service import UserService
from .utils import print as log_print
NOT_ACCESSIBLE_STRING = "N / A"
@@ -224,8 +223,7 @@ def build_internal_context(
helper_function_set = HelperFunctionSet(helper_function_dict)
- user_service = context.server.get_service("userservice")
- user = user_service.get_current_user(context)
+ user = context.server.services.user.get_current_user(context)
return TwinAPIAuthedContext(
credentials=context.credentials,
@@ -506,10 +504,9 @@ def get_user_client_from_server(self, context: AuthedServiceContext) -> SyftClie
# get a user client
guest_client = context.server.get_guest_client()
user_client = guest_client
- signing_key_for_verify_key = context.server.get_service_method(
- UserService.signing_key_for_verify_key
+ private_key = context.server.services.user.signing_key_for_verify_key(
+ context.credentials
)
- private_key = signing_key_for_verify_key(context.credentials)
signing_key = private_key.signing_key
user_client.credentials = signing_key
return user_client
@@ -578,7 +575,7 @@ def exec_code(
api_service = context.server.get_service("apiservice")
api_service.stash.upsert(
- context.server.get_service("userservice").admin_verify_key(), self
+ context.server.services.user.admin_verify_key(), self
).unwrap()
print = original_print # type: ignore
@@ -653,7 +650,7 @@ def code_string(context: TransformContext) -> TransformContext:
)
context.server = cast(AbstractServer, context.server)
- admin_key = context.server.get_service("userservice").admin_verify_key()
+ admin_key = context.server.services.user.admin_verify_key()
# If endpoint exists **AND** (has visible access **OR** the user is admin)
if endpoint_type is not None and (
diff --git a/packages/syft/src/syft/service/api/api_service.py b/packages/syft/src/syft/service/api/api_service.py
index 2f530b207bd..a8c443a6271 100644
--- a/packages/syft/src/syft/service/api/api_service.py
+++ b/packages/syft/src/syft/service/api/api_service.py
@@ -16,7 +16,6 @@
from ...types.errors import SyftException
from ...types.result import as_result
from ...types.uid import UID
-from ..action.action_service import ActionService
from ..context import AuthedServiceContext
from ..response import SyftSuccess
from ..service import AbstractService
@@ -82,8 +81,7 @@ def set(
syft_server_location=context.server.id,
syft_client_verify_key=context.credentials,
)
- action_service = context.server.get_service("actionservice")
- action_service.set_result_to_store(
+ context.server.services.action.set_result_to_store(
context=context,
result_action_object=action_obj,
has_result_read_permission=True,
@@ -265,7 +263,7 @@ def api_endpoints(
context: AuthedServiceContext,
) -> list[TwinAPIEndpointView]:
"""Retrieves a list of available API endpoints view available to the user."""
- admin_key = context.server.get_service("userservice").admin_verify_key()
+ admin_key = context.server.services.user.admin_verify_key()
all_api_endpoints = self.stash.get_all(admin_key).unwrap()
api_endpoint_view = [
@@ -350,7 +348,6 @@ def _call_in_jobs(
from ..job.job_stash import JobStatus
# So result is a Job object
- job_service = context.server.get_service("jobservice")
job_id = job.id
# Question: For a small moment, when job status is updated, it doesn't return the job during the .get() as if
# it's not in the stash. Then afterwards if appears again. Is this a bug?
@@ -363,7 +360,7 @@ def _call_in_jobs(
or job.status == JobStatus.PROCESSING
or job.status == JobStatus.CREATED
):
- job = job_service.get(context, job_id)
+ job = context.server.services.job.get(context, job_id)
time.sleep(0.1)
if (time.time() - custom_endpoint.endpoint_timeout) > start:
raise SyftException(
@@ -447,9 +444,8 @@ def call(
context, *args, log_id=log_id, **kwargs
).unwrap()
action_obj = ActionObject.from_obj(exec_result)
- action_service = cast(ActionService, context.server.get_service(ActionService))
try:
- return action_service.set_result_to_store(
+ return context.server.services.action.set_result_to_store(
context=context,
result_action_object=action_obj,
has_result_read_permission=True,
@@ -481,9 +477,8 @@ def call_public(
).unwrap()
action_obj = ActionObject.from_obj(exec_result)
- action_service = cast(ActionService, context.server.get_service(ActionService))
try:
- return action_service.set_result_to_store(
+ return context.server.services.action.set_result_to_store(
context=context,
result_action_object=action_obj,
has_result_read_permission=True,
@@ -518,10 +513,8 @@ def call_private(
).unwrap()
action_obj = ActionObject.from_obj(exec_result)
-
- action_service = cast(ActionService, context.server.get_service(ActionService))
try:
- return action_service.set_result_to_store(
+ return context.server.services.action.set_result_to_store(
context=context, result_action_object=action_obj
).unwrap()
except Exception as e:
@@ -594,7 +587,7 @@ def execute_server_side_endpoint_mock_by_id(
def get_endpoint_by_uid(
self, context: AuthedServiceContext, uid: UID
) -> TwinAPIEndpoint:
- admin_key = context.server.get_service("userservice").admin_verify_key()
+ admin_key = context.server.services.user.admin_verify_key()
return self.stash.get_by_uid(admin_key, uid).unwrap()
@as_result(StashException)
diff --git a/packages/syft/src/syft/service/api/utils.py b/packages/syft/src/syft/service/api/utils.py
index 5194d7de9cf..8680c4512ee 100644
--- a/packages/syft/src/syft/service/api/utils.py
+++ b/packages/syft/src/syft/service/api/utils.py
@@ -33,8 +33,7 @@ def to_str(arg: Any) -> str:
new_args = [to_str(arg) for arg in args]
new_str = sep.join(new_args) + end
if context.server is not None:
- log_service = context.server.get_service("LogService")
- log_service.append(context=context, uid=log_id, new_str=new_str)
+ context.server.services.log.append(context=context, uid=log_id, new_str=new_str)
time = datetime.datetime.now().strftime("%d/%m/%y %H:%M:%S")
return __builtin__.print(
f"{time} FUNCTION LOG :",
diff --git a/packages/syft/src/syft/service/code/user_code.py b/packages/syft/src/syft/service/code/user_code.py
index 3ba1b20a00f..0921ea9e704 100644
--- a/packages/syft/src/syft/service/code/user_code.py
+++ b/packages/syft/src/syft/service/code/user_code.py
@@ -74,7 +74,6 @@
from ..dataset.dataset import Asset
from ..job.job_stash import Job
from ..output.output_service import ExecutionOutput
-from ..output.output_service import OutputService
from ..policy.policy import Constant
from ..policy.policy import CustomInputPolicy
from ..policy.policy import CustomOutputPolicy
@@ -89,7 +88,6 @@
from ..policy.policy import init_policy
from ..policy.policy import load_policy_code
from ..policy.policy import partition_by_server
-from ..policy.policy_service import PolicyService
from ..response import SyftError
from ..response import SyftInfo
from ..response import SyftSuccess
@@ -415,8 +413,7 @@ def _compute_status_l0(
else:
# Serverside
server_identity = ServerIdentity.from_server(context.server)
- output_service = context.server.get_service("outputservice")
- is_approved = output_service.has_output_read_permissions(
+ is_approved = context.server.services.output.has_output_read_permissions(
context, self.id, self.user_verify_key
)
is_denied = self.l0_deny_reason is not None
@@ -666,10 +663,7 @@ def output_history(self) -> list[ExecutionOutput]:
def get_output_history(
self, context: AuthedServiceContext
) -> list[ExecutionOutput]:
- output_service = cast(
- OutputService, context.server.get_service("outputservice")
- )
- return output_service.get_by_user_code_id(context, self.id)
+ return context.server.services.output.get_by_user_code_id(context, self.id)
@as_result(SyftException)
def store_execution_output(
@@ -689,10 +683,7 @@ def store_execution_output(
)
output_ids = filter_only_uids(outputs)
-
- output_service = context.server.get_service("outputservice")
- output_service = cast(OutputService, output_service)
- return output_service.create(
+ return context.server.services.output.create(
context,
user_code_id=self.id,
output_ids=output_ids,
@@ -1460,9 +1451,10 @@ def locate_launch_jobs(context: TransformContext) -> TransformContext:
v = LaunchJobVisitor()
v.visit(tree)
nested_calls = v.nested_calls
- user_code_service = context.server.get_service("usercodeService")
for call in nested_calls:
- user_codes = user_code_service.get_by_service_name(context, call)
+ user_codes = context.server.services.user_code.get_by_service_name(
+ context, call
+ )
# TODO: Not great
user_code = user_codes[-1]
user_code_link = LinkedObject.from_obj(
@@ -1511,11 +1503,10 @@ def add_credentials(context: TransformContext) -> TransformContext:
def check_policy(policy: Any, context: TransformContext) -> TransformContext:
if context.server is not None:
- policy_service = context.server.get_service(PolicyService)
if isinstance(policy, SubmitUserPolicy):
policy = policy.to(UserPolicy, context=context)
elif isinstance(policy, UID):
- policy = policy_service.get_policy_by_uid(context, policy)
+ policy = context.server.services.policy.get_policy_by_uid(context, policy)
return policy
@@ -1581,7 +1572,7 @@ def create_code_status(context: TransformContext) -> TransformContext:
f"Invalid server type:{context.server.server_type} for code submission"
)
- res = context.server.get_service("usercodestatusservice").create(context, status)
+ res = context.server.services.user_code_status.create(context, status)
# relative
from .status_service import UserCodeStatusService
@@ -1685,43 +1676,20 @@ def __init__(self, context: AuthedServiceContext) -> None:
if server is None:
raise ValueError(f"{context}'s server is None")
- job_service = server.get_service("jobservice")
- action_service = server.get_service("actionservice")
- # user_service = server.get_service("userservice")
-
def job_set_n_iters(n_iters: int) -> None:
job = context.job
job.n_iters = n_iters
- job_service.update(context, job)
+ server.services.job.update(context, job)
def job_set_current_iter(current_iter: int) -> None:
job = context.job
job.current_iter = current_iter
- job_service.update(context, job)
+ server.services.job.update(context, job)
def job_increase_current_iter(current_iter: int) -> None:
job = context.job
job.current_iter += current_iter
- job_service.update(context, job)
-
- # def set_api_registry():
- # user_signing_key = [
- # x.signing_key
- # for x in user_service.stash.partition.data.values()
- # if x.verify_key == context.credentials
- # ][0]
- # data_protcol = get_data_protocol()
- # user_api = server.get_api(context.credentials, data_protcol.latest_version)
- # user_api.signing_key = user_signing_key
- # # We hardcode a python connection here since we have access to the server
- # # TODO: this is not secure
- # user_api.connection = PythonConnection(server=server)
-
- # APIRegistry.set_api_for(
- # server_uid=server.id,
- # user_verify_key=context.credentials,
- # api=user_api,
- # )
+ server.services.job.update(context, job)
def launch_job(func: UserCode, **kwargs: Any) -> Job | None:
# relative
@@ -1729,7 +1697,7 @@ def launch_job(func: UserCode, **kwargs: Any) -> Job | None:
kw2id = {}
for k, v in kwargs.items():
value = ActionObject.from_obj(v)
- ptr = action_service.set_result_to_store(
+ ptr = server.services.action.set_result_to_store(
value, context, has_result_read_permission=False
).unwrap()
kw2id[k] = ptr.id
@@ -1820,8 +1788,9 @@ def to_str(arg: Any) -> str:
new_args = [to_str(arg) for arg in args]
new_str = sep.join(new_args) + end
if context.server is not None:
- log_service = context.server.get_service("LogService")
- log_service.append(context=context, uid=log_id, new_str=new_str)
+ context.server.services.log.append(
+ context=context, uid=log_id, new_str=new_str
+ )
time = datetime.datetime.now().strftime("%d/%m/%y %H:%M:%S")
return __builtin__.print(
f"{time} FUNCTION LOG ({job_id}):",
@@ -1886,8 +1855,9 @@ def to_str(arg: Any) -> str:
and context.job.log_id is not None
):
log_id = context.job.log_id
- log_service = context.server.get_service("LogService")
- log_service.append(context=context, uid=log_id, new_err=error_msg)
+ context.server.services.log.append(
+ context=context, uid=log_id, new_err=error_msg
+ )
result_message = (
f"Exception encountered while running {code_item.service_func_name}"
diff --git a/packages/syft/src/syft/service/code/user_code_service.py b/packages/syft/src/syft/service/code/user_code_service.py
index 696f961932c..32863990a6a 100644
--- a/packages/syft/src/syft/service/code/user_code_service.py
+++ b/packages/syft/src/syft/service/code/user_code_service.py
@@ -26,7 +26,6 @@
from ..request.request import SubmitRequest
from ..request.request import SyncedUserCodeStatusChange
from ..request.request import UserCodeStatusChange
-from ..request.request_service import RequestService
from ..response import SyftSuccess
from ..service import AbstractService
from ..service import SERVICE_TO_TYPES
@@ -129,7 +128,7 @@ def _submit(
)
if code.status_link is not None:
- _ = context.server.get_service("usercodestatusservice").remove(
+ _ = context.server.services.user_code_status.remove(
root_context, code.status_link.object_uid
)
@@ -204,16 +203,15 @@ def _post_user_code_transform_ops(
raise SyftException(
public_message="outputs can only be distributed to input owners"
)
-
- worker_pool_service = context.server.get_service("SyftWorkerPoolService")
- worker_pool_service._get_worker_pool(
+ context.server.services.syft_worker_pool._get_worker_pool(
context,
pool_name=user_code.worker_pool_name,
)
# Create a code history
- code_history_service = context.server.get_service("codehistoryservice")
- code_history_service.submit_version(context=context, code=user_code)
+ context.server.services.code_history.submit_version(
+ context=context, code=user_code
+ )
return user_code
@@ -225,11 +223,10 @@ def _request_code_execution(
reason: str | None = "",
) -> Request:
# Cannot make multiple requests for the same code
- get_by_usercode_id = context.server.get_service_method(
- RequestService.get_by_usercode_id
- )
# FIX: Change requestservice result type
- existing_requests = get_by_usercode_id(context, user_code.id)
+ existing_requests = context.server.services.request.get_by_usercode_id(
+ context, user_code.id
+ )
if len(existing_requests) > 0:
raise SyftException(
@@ -266,8 +263,9 @@ def _request_code_execution(
changes = [status_change]
request = SubmitRequest(changes=changes)
- method = context.server.get_service_method(RequestService.submit)
- result = method(context=context, request=request, reason=reason)
+ result = context.server.services.request.submit(
+ context=context, request=request, reason=reason
+ )
return result
@@ -383,22 +381,19 @@ def is_execution_allowed(
def is_execution_on_owned_args_allowed(self, context: AuthedServiceContext) -> bool:
if context.role == ServiceRole.ADMIN:
return True
- user_service = context.server.get_service("userservice")
- current_user = user_service.get_current_user(context=context)
+ current_user = context.server.services.user.get_current_user(context=context)
return current_user.mock_execution_permission
def keep_owned_kwargs(
self, kwargs: dict[str, Any], context: AuthedServiceContext
) -> dict[str, Any]:
"""Return only the kwargs that are owned by the user"""
- action_service = context.server.get_service("actionservice")
-
mock_kwargs = {}
for k, v in kwargs.items():
if isinstance(v, UID):
# Jobs have UID kwargs instead of ActionObject
try:
- v = action_service.get(context, uid=v)
+ v = context.server.services.action.get(context, uid=v)
except Exception: # nosec: we are skipping when dont find it
pass
if (
@@ -576,14 +571,11 @@ def _call(
"which is currently not supported. Run your function with `blocking=False` to run"
" as a job on your worker pool."
)
-
- action_service = context.server.get_service("actionservice")
-
- action_obj = action_service._user_code_execute(
+ action_obj = context.server.services.action._user_code_execute(
context, code, kwarg2id, result_id
).unwrap()
- result = action_service.set_result_to_store(
+ result = context.server.services.action.set_result_to_store(
action_obj, context, code.get_output_policy(context)
).unwrap()
@@ -681,8 +673,7 @@ def resolve_outputs(
outputs = []
for output_id in output_ids:
if context.server is not None:
- action_service = context.server.get_service("actionservice")
- output = action_service.get(
+ output = context.server.services.action.get(
context, uid=output_id, twin_mode=TwinMode.PRIVATE
)
outputs.append(output)
diff --git a/packages/syft/src/syft/service/code_history/code_history_service.py b/packages/syft/src/syft/service/code_history/code_history_service.py
index 5383e8c9dcb..a3d06bdb4fa 100644
--- a/packages/syft/src/syft/service/code_history/code_history_service.py
+++ b/packages/syft/src/syft/service/code_history/code_history_service.py
@@ -8,7 +8,6 @@
from ...types.uid import UID
from ..code.user_code import SubmitUserCode
from ..code.user_code import UserCode
-from ..code.user_code_service import UserCodeService
from ..context import AuthedServiceContext
from ..response import SyftSuccess
from ..service import AbstractService
@@ -44,9 +43,10 @@ def submit_version(
code: SubmitUserCode | UserCode,
comment: str | None = None,
) -> SyftSuccess:
- user_code_service = context.server.get_service("usercodeservice")
if isinstance(code, SubmitUserCode):
- code = user_code_service._submit(context=context, code=code)
+ code = context.server.services.user_code._submit(
+ context=context, submit_code=code
+ )
try:
code_history = self.stash.get_by_service_func_name_and_verify_key(
@@ -100,12 +100,8 @@ def fetch_histories_for_user(
credentials=context.credentials, user_verify_key=user_verify_key
).unwrap()
- user_code_service: UserCodeService = context.server.get_service(
- "usercodeservice"
- ) # type: ignore
-
def get_code(uid: UID) -> UserCode:
- return user_code_service.stash.get_by_uid(
+ return context.server.services.user_code.stash.get_by_uid(
credentials=context.server.verify_key,
uid=uid,
).unwrap()
@@ -142,8 +138,7 @@ def get_histories_for_current_user(
def get_history_for_user(
self, context: AuthedServiceContext, email: str
) -> CodeHistoriesDict:
- user_service = context.server.get_service("userservice")
- user = user_service.stash.get_by_email(
+ user = context.server.services.user.stash.get_by_email(
credentials=context.credentials, email=email
).unwrap()
return self.fetch_histories_for_user(
@@ -165,8 +160,7 @@ def get_histories_group_by_user(
else:
code_histories = self.stash.get_all(context.credentials).unwrap()
- user_service = context.server.get_service("userservice")
- users = user_service.stash.get_all(context.credentials).unwrap()
+ users = context.server.services.user.stash.get_all(context.credentials).unwrap()
user_code_histories = UsersCodeHistoriesDict(server_uid=context.server.id)
verify_key_2_user_email = {}
@@ -193,8 +187,7 @@ def get_by_func_name_and_user_email(
user_email: str,
user_id: UID,
) -> list[CodeHistory]:
- user_service = context.server.get_service("userservice")
- user_verify_key = user_service.user_verify_key(user_email)
+ user_verify_key = context.server.services.user.user_verify_key(user_email)
kwargs = {
"id": user_id,
diff --git a/packages/syft/src/syft/service/data_subject/data_subject_service.py b/packages/syft/src/syft/service/data_subject/data_subject_service.py
index b386fd1ec8d..b8d5e6b8528 100644
--- a/packages/syft/src/syft/service/data_subject/data_subject_service.py
+++ b/packages/syft/src/syft/service/data_subject/data_subject_service.py
@@ -20,7 +20,6 @@
from .data_subject import DataSubject
from .data_subject import DataSubjectCreate
from .data_subject import NamePartitionKey
-from .data_subject_member_service import DataSubjectMemberService
@serializable(canonical_name="DataSubjectStash", version=1)
@@ -63,11 +62,7 @@ def __init__(self, store: DocumentStore) -> None:
def add(
self, context: AuthedServiceContext, data_subject: DataSubjectCreate
) -> SyftSuccess:
- """Register a data subject."""
-
- member_relationship_add = context.server.get_service_method(
- DataSubjectMemberService.add
- )
+ """Register a data subject.""" #
member_relationships: set[tuple[str, str]] = data_subject.member_relationships
if len(member_relationships) == 0:
@@ -84,7 +79,9 @@ def add(
ds.to(DataSubject, context=context),
ignore_duplicates=True,
).unwrap()
- member_relationship_add(context, parent_ds.name, child_ds.name)
+ context.server.services.data_subject_member.add(
+ context, parent_ds.name, child_ds.name
+ )
return SyftSuccess(
message=f"{len(member_relationships)+1} Data Subjects Registered",
@@ -100,12 +97,10 @@ def get_all(self, context: AuthedServiceContext) -> list[DataSubject]:
def get_members(
self, context: AuthedServiceContext, data_subject_name: str
) -> list[DataSubject]:
- get_relatives = context.server.get_service_method(
- DataSubjectMemberService.get_relatives
+ relatives = context.server.services.data_subject.get_relatives(
+ context, data_subject_name
)
- relatives = get_relatives(context, data_subject_name)
-
members = []
for relative in relatives:
result = self.get_by_name(context=context, name=relative.child)
diff --git a/packages/syft/src/syft/service/dataset/dataset.py b/packages/syft/src/syft/service/dataset/dataset.py
index 22a8b09c462..6c4a91e06c2 100644
--- a/packages/syft/src/syft/service/dataset/dataset.py
+++ b/packages/syft/src/syft/service/dataset/dataset.py
@@ -40,7 +40,6 @@
from ..action.action_object import ActionObject
from ..data_subject.data_subject import DataSubject
from ..data_subject.data_subject import DataSubjectCreate
-from ..data_subject.data_subject_service import DataSubjectService
from ..response import SyftError
from ..response import SyftSuccess
from ..response import SyftWarning
@@ -765,8 +764,7 @@ def create_and_store_twin(context: TransformContext) -> TransformContext:
raise ValueError(
"f{context}'s server is None, please log in. No trasformation happened"
)
- action_service = context.server.get_service("actionservice")
- action_service._set(
+ context.server.services.action._set(
context=context.to_server_context(),
action_object=twin,
).unwrap(public_message="Failed to create and store twin")
@@ -795,10 +793,11 @@ def set_data_subjects(context: TransformContext) -> TransformContext:
public_message="f{context}'s server is None, please log in. No trasformation happened"
)
data_subjects = context.output["data_subjects"]
- get_data_subject = context.server.get_service_method(DataSubjectService.get_by_name)
resultant_data_subjects = []
for data_subject in data_subjects:
- result = get_data_subject(context=context, name=data_subject.name)
+ result = context.server.services.data_subject.get_by_name(
+ context=context, name=data_subject.name
+ )
resultant_data_subjects.append(result)
context.output["data_subjects"] = resultant_data_subjects
return context
diff --git a/packages/syft/src/syft/service/dataset/dataset_service.py b/packages/syft/src/syft/service/dataset/dataset_service.py
index cd347c11b35..43cbfacb117 100644
--- a/packages/syft/src/syft/service/dataset/dataset_service.py
+++ b/packages/syft/src/syft/service/dataset/dataset_service.py
@@ -2,7 +2,6 @@
from collections.abc import Collection
from collections.abc import Sequence
import logging
-from typing import cast
# relative
from ...serde.serializable import serializable
@@ -11,7 +10,6 @@
from ...types.uid import UID
from ..action.action_permissions import ActionObjectPermission
from ..action.action_permissions import ActionPermission
-from ..action.action_service import ActionService
from ..context import AuthedServiceContext
from ..response import SyftSuccess
from ..service import AbstractService
@@ -228,10 +226,7 @@ def delete(
f"in Dataset {uid}"
)
- action_service = cast(
- ActionService, context.server.get_service(ActionService)
- )
- action_service.delete(
+ context.server.services.action.delete(
context=context, uid=asset.action_id, soft_delete=True
)
diff --git a/packages/syft/src/syft/service/job/job_service.py b/packages/syft/src/syft/service/job/job_service.py
index 0ad153e4bda..fbbdfd7d856 100644
--- a/packages/syft/src/syft/service/job/job_service.py
+++ b/packages/syft/src/syft/service/job/job_service.py
@@ -2,7 +2,6 @@
from collections.abc import Callable
import inspect
import time
-from typing import cast
# relative
from ...serde.serializable import serializable
@@ -15,7 +14,6 @@
from ..action.action_permissions import ActionPermission
from ..code.user_code import UserCode
from ..context import AuthedServiceContext
-from ..log.log_service import LogService
from ..queue.queue_stash import ActionQueueItem
from ..response import SyftSuccess
from ..service import AbstractService
@@ -135,9 +133,7 @@ def restart(self, context: AuthedServiceContext, uid: UID) -> SyftSuccess:
).unwrap()
context.server.job_stash.set(context.credentials, job).unwrap()
-
- log_service = context.server.get_service("logservice")
- log_service.restart(context, job.log_id)
+ context.server.services.log.restart(context, job.log_id)
return SyftSuccess(message="Great Success!")
@@ -232,9 +228,7 @@ def add_read_permission_job_for_code_owner(
def add_read_permission_log_for_code_owner(
self, context: AuthedServiceContext, log_id: UID, user_code: UserCode
) -> None:
- log_service = context.server.get_service("logservice")
- log_service = cast(LogService, log_service)
- return log_service.stash.add_permission(
+ return context.server.services.log.stash.add_permission(
ActionObjectPermission(
log_id, ActionPermission.READ, user_code.user_verify_key
)
@@ -268,14 +262,13 @@ def create_job_for_user_code_id(
user_code_id=user_code_id,
resolved=is_resolved,
)
- user_code_service = context.server.get_service("usercodeservice")
- user_code = user_code_service.get_by_uid(context=context, uid=user_code_id)
+ user_code = context.server.services.user_code.get_by_uid(
+ context=context, uid=user_code_id
+ )
# The owner of the code should be able to read the job
self.stash.set(context.credentials, job).unwrap()
-
- log_service = context.server.get_service("logservice")
- log_service.add(
+ context.server.services.log.add(
context,
job.log_id,
job.id,
diff --git a/packages/syft/src/syft/service/job/job_stash.py b/packages/syft/src/syft/service/job/job_stash.py
index 413d36ba753..fc83b675503 100644
--- a/packages/syft/src/syft/service/job/job_stash.py
+++ b/packages/syft/src/syft/service/job/job_stash.py
@@ -313,8 +313,7 @@ def subjobs(self) -> list["Job"]:
return api.services.job.get_subjobs(self.id)
def get_subjobs(self, context: AuthedServiceContext) -> list["Job"]:
- job_service = context.server.get_service("jobservice")
- return job_service.get_subjobs(context, self.id)
+ return context.server.services.job.get_subjobs(context, self.id)
@property
def owner(self) -> UserView:
@@ -647,7 +646,7 @@ def get_sync_dependencies(self, context: AuthedServiceContext) -> list[UID]: #
dependencies.append(self.user_code_id)
try:
- output = context.server.get_service("outputservice").get_by_job_id( # type: ignore
+ output = context.server.services.output.get_by_job_id( # type: ignore
context, self.id
)
if output is not None:
diff --git a/packages/syft/src/syft/service/metadata/metadata_service.py b/packages/syft/src/syft/service/metadata/metadata_service.py
index 4e4e84d1364..70453d9b084 100644
--- a/packages/syft/src/syft/service/metadata/metadata_service.py
+++ b/packages/syft/src/syft/service/metadata/metadata_service.py
@@ -21,12 +21,6 @@ def __init__(self, store: DocumentStore) -> None:
def get_metadata(self, context: AuthedServiceContext) -> ServerMetadata:
return context.server.metadata # type: ignore
- # @service_method(path="metadata.get_admin", name="get_admin", roles=GUEST_ROLE_LEVEL)
- # def get_admin(self, context: AuthedServiceContext):
- # user_service = context.server.get_service("userservice")
- # admin_user = user_service.get_all(context=context)[0]
- # return admin_user
-
@service_method(path="metadata.get_env", name="get_env", roles=GUEST_ROLE_LEVEL)
def get_env(self, context: AuthedServiceContext) -> str:
return context.server.packages
diff --git a/packages/syft/src/syft/service/network/association_request.py b/packages/syft/src/syft/service/network/association_request.py
index a9ed93b1adf..49071512ff1 100644
--- a/packages/syft/src/syft/service/network/association_request.py
+++ b/packages/syft/src/syft/service/network/association_request.py
@@ -1,6 +1,5 @@
# stdlib
import secrets
-from typing import cast
# relative
from ...client.client import SyftClient
@@ -41,9 +40,6 @@ def _run(
tuple[bytes, ServerPeer]: The result of the association request.
Raises on errors.
"""
- # relative
- from .network_service import NetworkService
-
if not apply:
# TODO: implement undo for AssociationRequestChange
raise SyftException(
@@ -52,10 +48,6 @@ def _run(
# Get the network service
service_ctx = context.to_service_ctx()
- network_service = cast(
- NetworkService, service_ctx.server.get_service(NetworkService)
- )
- network_stash = network_service.stash
# Check if remote peer to be added is via reverse tunnel
rtunnel_route = self.remote_peer.get_rtunnel_route()
@@ -66,7 +58,7 @@ def _run(
# If the remote peer is added via reverse tunnel, we skip ping to peer
if add_rtunnel_route:
- network_service.set_reverse_tunnel_config(
+ service_ctx.server.services.network.set_reverse_tunnel_config(
context=context,
remote_server_peer=self.remote_peer,
)
@@ -99,7 +91,7 @@ def _run(
raise SyftException(public_message=str(e))
# Adding the remote peer to the network stash
- network_stash.create_or_update_peer(
+ service_ctx.server.services.network.stash.create_or_update_peer(
service_ctx.server.verify_key, self.remote_peer
)
# this way they can match up who we are with who they think we are
diff --git a/packages/syft/src/syft/service/network/network_service.py b/packages/syft/src/syft/service/network/network_service.py
index 5e4dfdbadf4..428501fb92d 100644
--- a/packages/syft/src/syft/service/network/network_service.py
+++ b/packages/syft/src/syft/service/network/network_service.py
@@ -41,7 +41,6 @@
from ..request.request import Request
from ..request.request import RequestStatus
from ..request.request import SubmitRequest
-from ..request.request_service import RequestService
from ..response import SyftInfo
from ..response import SyftSuccess
from ..service import AbstractService
@@ -347,16 +346,12 @@ def add_peer(
changes=[association_request_change],
requesting_user_verify_key=context.credentials,
)
- request_submit_method = context.server.get_service_method(RequestService.submit)
- request = request_submit_method(context, submit_request)
+ request = context.server.services.request.submit(context, submit_request)
if (
isinstance(request, Request)
and context.server.settings.association_request_auto_approval
):
- request_apply_method = context.server.get_service_method(
- RequestService.apply
- )
- return request_apply_method(context, uid=request.id)
+ return context.server.services.request.apply(context, uid=request.id)
return request
@@ -519,10 +514,7 @@ def delete_peer_by_id(self, context: AuthedServiceContext, uid: UID) -> SyftSucc
context=context, peer_id=uid
)
for request in association_requests:
- request_delete_method = context.server.get_service_method(
- RequestService.delete_by_uid
- )
- request_delete_method(context, request.id)
+ context.server.services.request.delete_by_uid(context, request.id)
# TODO: Notify the peer (either by email or by other form of notifications)
# that it has been deleted from the network
return SyftSuccess(message=f"Server Peer with id {uid} deleted.")
@@ -860,10 +852,7 @@ def _get_association_requests_by_peer_id(
"""
Get all the association requests from a peer. The association requests are sorted by request_time.
"""
- request_get_all_method: Callable = context.server.get_service_method(
- RequestService.get_all
- )
- all_requests: list[Request] = request_get_all_method(context)
+ all_requests: list[Request] = context.server.services.request.get_all(context)
association_requests: list[Request] = [
request
for request in all_requests
diff --git a/packages/syft/src/syft/service/network/utils.py b/packages/syft/src/syft/service/network/utils.py
index 62fff066e35..280e836f17b 100644
--- a/packages/syft/src/syft/service/network/utils.py
+++ b/packages/syft/src/syft/service/network/utils.py
@@ -2,7 +2,6 @@
import logging
import threading
import time
-from typing import cast
# relative
from ...serde.serializable import serializable
@@ -10,7 +9,6 @@
from ...types.errors import SyftException
from ..context import AuthedServiceContext
from ..response import SyftError
-from .network_service import NetworkService
from .network_service import ServerPeerAssociationStatus
from .server_peer import ServerPeer
from .server_peer import ServerPeerConnectionStatus
@@ -40,11 +38,7 @@ def peer_route_heathcheck(self, context: AuthedServiceContext) -> None:
Returns:
None
"""
-
- network_service = cast(
- NetworkService, context.server.get_service(NetworkService)
- )
- network_stash = network_service.stash
+ network_stash = context.server.services.network.stash
try:
all_peers: list[ServerPeer] = network_stash.get_all(
diff --git a/packages/syft/src/syft/service/notification/email_templates.py b/packages/syft/src/syft/service/notification/email_templates.py
index 2a17a662086..2ebc0908a88 100644
--- a/packages/syft/src/syft/service/notification/email_templates.py
+++ b/packages/syft/src/syft/service/notification/email_templates.py
@@ -23,6 +23,107 @@ def email_body(notification: "Notification", context: AuthedServiceContext) -> s
return ""
+@serializable(canonical_name="FailedJobTemplate", version=1)
+class FailedJobTemplate(EmailTemplate):
+ @staticmethod
+ def email_title(notification: "Notification", context: AuthedServiceContext) -> str:
+ return "Job Failed Notification"
+
+ @staticmethod
+ def email_body(notification: "Notification", context: AuthedServiceContext) -> str:
+ notification.linked_obj = cast(LinkedObject, notification.linked_obj)
+ queueitem_obj = notification.linked_obj.resolve_with_context(
+ context=context
+ ).unwrap()
+
+ worker_pool_obj = queueitem_obj.worker_pool.resolve_with_context(
+ context=context
+ ).unwrap()
+ method = queueitem_obj.method
+ if queueitem_obj.service == "apiservice":
+ method = queueitem_obj.kwargs.pop("path", "")
+ queueitem_obj.kwargs.pop("log_id")
+
+ head = """
+
+
+
Job Failed Notification
+
Hello,
+
We regret to inform you that your function job has encountered an
+ unexpected error and could not be completed successfully.
+
+
+
Job Details
+
Job ID: {queueitem_obj.job_id}
+
Worker Pool: {worker_pool_obj.name}
+
Method: {method}
+
Service: {queueitem_obj.service}
+
Arguments (args): {queueitem_obj.args}
+
Keyword Arguments (kwargs): {queueitem_obj.kwargs}
+
+
+
+
+
+ """
+ return f"""{head} {body}"""
+
+
@serializable(canonical_name="PasswordResetTemplate", version=1)
class PasswordResetTemplate(EmailTemplate):
@staticmethod
@@ -31,7 +132,7 @@ def email_title(notification: "Notification", context: AuthedServiceContext) ->
@staticmethod
def email_body(notification: "Notification", context: AuthedServiceContext) -> str:
- user_service = context.server.get_service("userservice")
+ user_service = context.server.services.user
admin_verify_key = user_service.admin_verify_key()
user = user_service.stash.get_by_verify_key(
credentials=admin_verify_key, verify_key=notification.to_user_verify_key
@@ -50,6 +151,10 @@ def email_body(notification: "Notification", context: AuthedServiceContext) -> s
if result.is_err():
raise Exception("Couldn't update the user password")
+ expiry_time = context.server.services.settings.get(
+ context=context
+ ).pwd_token_config.token_exp_min
+
head = """