Skip to content

Commit 4ade501

Browse files
committed
RDBC-935 to_json/from_json
1 parent d8f43a5 commit 4ade501

File tree

9 files changed

+162
-8
lines changed

9 files changed

+162
-8
lines changed

ravendb/documents/operations/ai/ai_connection_string.py

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -60,3 +60,18 @@ def to_json(self) -> Dict[str, Any]:
6060
"ModelType": self.model_type,
6161
"Type": ravendb.serverwide.server_operation_executor.ConnectionStringType.OLAP,
6262
}
63+
64+
@classmethod
65+
def from_json(cls, json_dict: Dict[str, Any]) -> "AiConnectionString":
66+
return cls(
67+
name=json_dict["Name"],
68+
identifier=json_dict["Identifier"],
69+
openai_settings=OpenAiSettings.from_json(json_dict["OpenaiSettings"]),
70+
azure_openai_settings=AzureOpenAiSettings.from_json(json_dict["AzureOpenaiSettings"]),
71+
ollama_settings=OllamaSettings.from_json(json_dict["ollama_settings"]),
72+
embedded_settings=EmbeddedSettings.from_json(json_dict["EmbeddedSettings"]),
73+
google_settings=GoogleSettings.from_json(json_dict["GoogleSettings"]),
74+
huggingface_settings=HuggingFaceSettings.from_json(json_dict["HuggingfaceSettings"]),
75+
mistral_ai_settings=MistralAiSettings.from_json(json_dict["MistralAiSettings"]),
76+
model_type=AiModelType(json_dict["ModelType"]) if json_dict["ModelType"] else None,
77+
)

ravendb/documents/operations/connection_string/get_connection_string_operation.py

Lines changed: 23 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -4,9 +4,13 @@
44
import requests
55

66
from ravendb import RavenCommand, ServerNode
7+
from ravendb.documents.operations.ai.ai_connection_string import AiConnectionString
78
from ravendb.documents.operations.definitions import MaintenanceOperation
89
from ravendb.documents.operations.etl.configuration import RavenConnectionString
10+
from ravendb.documents.operations.etl.elastic_search import ElasticSearchConnectionString
911
from ravendb.documents.operations.etl.olap import OlapConnectionString
12+
from ravendb.documents.operations.etl.queue import QueueConnectionString
13+
from ravendb.documents.operations.etl.snowflake import SnowflakeConnectionString
1014
from ravendb.documents.operations.etl.sql import SqlConnectionString
1115
from ravendb.serverwide.server_operation_executor import ConnectionStringType
1216

@@ -17,16 +21,28 @@ def __init__(
1721
raven_connection_strings: Dict[str, RavenConnectionString] = None,
1822
sql_connection_strings: Dict[str, SqlConnectionString] = None,
1923
olap_connection_strings: Dict[str, OlapConnectionString] = None,
24+
ai_connection_strings: Dict[str, AiConnectionString] = None,
25+
elastic_search_connection_strings: Dict[str, ElasticSearchConnectionString] = None,
26+
queue_connection_strings: Dict[str, QueueConnectionString] = None,
27+
snowflake_connection_strings: Dict[str, SnowflakeConnectionString] = None,
2028
):
2129
self.raven_connection_strings = raven_connection_strings
2230
self.sql_connection_strings = sql_connection_strings
2331
self.olap_connection_strings = olap_connection_strings
32+
self.ai_connection_strings = ai_connection_strings
33+
self.elastic_search_connection_strings = elastic_search_connection_strings
34+
self.queue_connection_strings = queue_connection_strings
35+
self.snowflake_connection_strings = snowflake_connection_strings
2436

2537
def to_json(self) -> Dict:
2638
return {
27-
"RavenConnectionStrings": self._raven_connection_strings,
28-
"SqlConnectionStrings": self._sql_connection_strings,
29-
"OlapConnectionStrings": self._olap_connection_strings,
39+
"RavenConnectionStrings": [x.to_json() for x in self.raven_connection_strings.values()],
40+
"SqlConnectionStrings": [x.to_json() for x in self.sql_connection_strings.values()],
41+
"OlapConnectionStrings": [x.to_json() for x in self.olap_connection_strings.values()],
42+
"AiConnectionStrings": [x.to_json() for x in self.ai_connection_strings.values()],
43+
"ElasticSearchConnectionStrings": [x.to_json() for x in self.elastic_search_connection_strings.values()],
44+
"QueueConnectionStrings": [x.to_json() for x in self.queue_connection_strings.values()],
45+
"SnowflakeConnectionStrings": [x.to_json() for x in self.snowflake_connection_strings.values()],
3046
}
3147

3248
@classmethod
@@ -35,6 +51,10 @@ def from_json(cls, json_dict: Dict) -> "GetConnectionStringsResult":
3551
raven_connection_strings=json_dict["RavenConnectionStrings"],
3652
sql_connection_strings=json_dict["SqlConnectionStrings"],
3753
olap_connection_strings=json_dict["OlapConnectionStrings"],
54+
ai_connection_strings=json_dict["AiConnectionStrings"],
55+
elastic_search_connection_strings=json_dict["ElasticSearchConnectionStrings"],
56+
queue_connection_strings=json_dict["QueueConnectionStrings"],
57+
snowflake_connection_strings=json_dict["SnowflakeConnectionStrings"],
3858
)
3959

4060

ravendb/documents/operations/connection_strings.py

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,3 +13,8 @@ def get_type(self):
1313
@abstractmethod
1414
def to_json(self) -> Dict[str, Any]:
1515
pass
16+
17+
@classmethod
18+
@abstractmethod
19+
def from_json(cls, json_dict: Dict[str, Any]) -> Any:
20+
pass

ravendb/documents/operations/etl/configuration.py

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
from typing import Optional, Generic, TypeVar, List
1+
from typing import Optional, Generic, TypeVar, List, Dict
22

33
from ravendb.documents.operations.connection_strings import ConnectionString
44
import ravendb.serverwide.server_operation_executor
@@ -24,6 +24,13 @@ def to_json(self):
2424
"Type": ravendb.serverwide.server_operation_executor.ConnectionStringType.RAVEN,
2525
}
2626

27+
@classmethod
28+
def from_json(cls, json_dict: Dict) -> "RavenConnectionString":
29+
return cls(
30+
name=json_dict["Name"],
31+
database=json_dict["Database"],
32+
topology_discovery_urls=json_dict["TopologyDiscoveryUrls"],
33+
)
2734

2835
# todo: implement
2936
class EtlConfiguration(ConnectionString, Generic[_T]):

ravendb/documents/operations/etl/elastic_search/__init__.py

Lines changed: 71 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
from typing import List
1+
from typing import List, Dict, Any
22

33
from ravendb.documents.operations.connection_strings import ConnectionString
44
import ravendb.serverwide.server_operation_executor
@@ -10,27 +10,88 @@ def __init__(self, api_key_id: str = None, api_key: str = None, encoded_api_key:
1010
self.api_key = api_key
1111
self.encoded_api_key = encoded_api_key
1212

13+
def to_json(self) -> Dict[str, Any]:
14+
return {
15+
"ApiKeyId": self.api_key_id,
16+
"ApiKey": self.api_key,
17+
"EncodedApiKey": self.encoded_api_key,
18+
}
19+
20+
@classmethod
21+
def from_json(cls, data: Dict[str, Any]) -> "ApiKeyAuthentication":
22+
return cls(
23+
api_key_id=data.get("ApiKeyId") or data.get("api_key_id"),
24+
api_key=data.get("ApiKey") or data.get("api_key"),
25+
encoded_api_key=data.get("EncodedApiKey") or data.get("encoded_api_key"),
26+
)
27+
1328

1429
class BasicAuthentication:
1530
def __init__(self, username: str = None, password: str = None):
1631
self.username = username
1732
self.password = password
1833

34+
def to_json(self) -> Dict[str, Any]:
35+
return {
36+
"Username": self.username,
37+
"Password": self.password,
38+
}
39+
40+
@classmethod
41+
def from_json(cls, data: Dict[str, Any]) -> "BasicAuthentication":
42+
return cls(
43+
username=data.get("Username") or data.get("username"),
44+
password=data.get("Password") or data.get("password"),
45+
)
46+
47+
1948

2049
class CertificateAuthentication:
2150
def __init__(self, certificates_base64: List[str] = None):
2251
self.certificates_base64 = certificates_base64
2352

53+
def to_json(self) -> Dict[str, Any]:
54+
return {
55+
"CertificatesBase64": list(self.certificates_base64) if self.certificates_base64 is not None else None,
56+
}
57+
58+
@classmethod
59+
def from_json(cls, data: Dict[str, Any]) -> "CertificateAuthentication":
60+
certs = data.get("CertificatesBase64") or data.get("certificates_base64")
61+
return cls(certificates_base64=list(certs) if certs is not None else None)
62+
63+
2464

2565
class Authentication:
2666
def __init__(self, api_key: ApiKeyAuthentication = None, basic: BasicAuthentication = None, certificate: CertificateAuthentication = None):
2767
self.api_key = api_key
2868
self.basic = basic
2969
self.certificate = certificate
3070

71+
def to_json(self) -> Dict[str, Any]:
72+
return {
73+
"ApiKey": self.api_key.to_json() if self.api_key is not None else None,
74+
"Basic": self.basic.to_json() if self.basic is not None else None,
75+
"Certificate": self.certificate.to_json() if self.certificate is not None else None,
76+
}
77+
78+
@classmethod
79+
def from_json(cls, data: Dict[str, Any]) -> "Authentication":
80+
api_key_data = data.get("ApiKey")
81+
basic_data = data.get("Basic")
82+
certificate_data = data.get("Certificate")
83+
84+
return cls(
85+
api_key=ApiKeyAuthentication.from_json(api_key_data) if api_key_data else None,
86+
basic=BasicAuthentication.from_json(basic_data) if basic_data else None,
87+
certificate=CertificateAuthentication.from_json(certificate_data) if certificate_data else None,
88+
)
89+
90+
3191

3292
class ElasticSearchConnectionString(ConnectionString):
3393
def __init__(self, name: str, nodes: List[str] = None, authentication: Authentication = None):
94+
super().__init__()
3495
self.name = name
3596
self.nodes = nodes
3697
self.authentication = authentication
@@ -44,4 +105,12 @@ def to_json(self):
44105
"Nodes": self.nodes,
45106
"Authentication": self.authentication,
46107
"Type": ravendb.serverwide.server_operation_executor.ConnectionStringType.ELASTIC_SEARCH,
47-
}
108+
}
109+
110+
@classmethod
111+
def from_json(cls, json_dict: Dict[str, Any]) -> Any:
112+
return cls(
113+
name=json_dict["Name"],
114+
nodes=json_dict["Nodes"],
115+
authentication=Authentication.from_json(json_dict["Authentication"]),
116+
)

ravendb/documents/operations/etl/olap/__init__.py

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -48,6 +48,18 @@ def to_json(self):
4848
"Type": ravendb.serverwide.server_operation_executor.ConnectionStringType.OLAP,
4949
}
5050

51+
@classmethod
52+
def from_json(cls, json_dict: dict) -> "OlapConnectionString":
53+
return cls(
54+
name=json_dict["Name"],
55+
local_settings=LocalSettings.from_json(json_dict["LocalSettings"]),
56+
s3_settings=S3Settings.from_json(json_dict["S3Settings"]),
57+
azure_settings=AzureSettings.from_json(json_dict["AzureSettings"]),
58+
glacier_settings=GlacierSettings.from_json(json_dict["GlacierSettings"]),
59+
google_cloud_settings=GoogleCloudSettings.from_json(json_dict["GoogleCloudSettings"]),
60+
ftp_settings=FtpSettings.from_json(json_dict["FtpSettings"]),
61+
)
62+
5163

5264
# todo: implement
5365
class OlapEtlConfiguration(EtlConfiguration[OlapConnectionString]):

ravendb/documents/operations/etl/queue/__init__.py

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -48,3 +48,14 @@ def to_json(self):
4848
"AmazonSqsConnectionSettings": self.amazon_sqs_settings,
4949
"Type": ravendb.serverwide.server_operation_executor.ConnectionStringType.QUEUE,
5050
}
51+
52+
@classmethod
53+
def from_json(cls, json_dict: dict) -> "QueueConnectionString":
54+
return cls(
55+
name=json_dict["Name"],
56+
broker_type=QueueBrokerType(json_dict["BrokerType"]),
57+
kafka_settings=KafkaConnectionSettings.from_json(json_dict["KafkaConnectionSettings"]),
58+
rabbit_mq_settings=RabbitMqConnectionSettings.from_json(json_dict["RabbitMqConnectionSettings"]),
59+
azure_queue_storage_settings=AzureQueueStorageConnectionSettings.from_json(json_dict["AzureQueueStorageConnectionSettings"]),
60+
amazon_sqs_settings=AmazonSqsConnectionSettings.from_json(json_dict["AmazonSqsConnectionSettings"])
61+
)

ravendb/documents/operations/etl/snowflake/__init__.py

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,4 +18,11 @@ def to_json(self):
1818
"Name": self.name,
1919
"ConnectionString": self.connection_string,
2020
"Type": ravendb.serverwide.server_operation_executor.ConnectionStringType.SNOWFLAKE,
21-
}
21+
}
22+
23+
@classmethod
24+
def from_json(cls, json_dict: dict) -> "SnowflakeConnectionString":
25+
return cls(
26+
name=json_dict["Name"],
27+
connection_string=json_dict["ConnectionString"],
28+
)

ravendb/documents/operations/etl/sql/__init__.py

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
from typing import Optional
1+
from typing import Optional, Dict, Any
22

33
from ravendb.documents.operations.connection_strings import ConnectionString
44
import ravendb.serverwide.server_operation_executor
@@ -23,6 +23,14 @@ def to_json(self):
2323
"Type": ravendb.serverwide.server_operation_executor.ConnectionStringType.SQL,
2424
}
2525

26+
@classmethod
27+
def from_json(cls, json_dict: Dict[str, Any]) -> "SqlConnectionString":
28+
return cls(
29+
name=json_dict["Name"],
30+
connection_string=json_dict["ConnectionString"],
31+
factory_name=json_dict["FactoryName"],
32+
)
33+
2634

2735
# todo: implement
2836
class SqlEtlConfiguration(EtlConfiguration[SqlConnectionString]):

0 commit comments

Comments
 (0)