Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion ravendb/documents/operations/ai/ai_connection_string.py
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,7 @@ class AiModelType(enum.Enum):
CHAT = "Chat"


class AiConnectionString(ConnectionString): # todo kuba
class AiConnectionString(ConnectionString):
def __init__(
self,
name: str,
Expand Down
10 changes: 8 additions & 2 deletions ravendb/documents/operations/backups/settings.py
Original file line number Diff line number Diff line change
Expand Up @@ -68,14 +68,20 @@ def __init__(
def from_json(cls, json_dict: Dict[str, Any]) -> LocalSettings:
return cls(
json_dict["Disabled"],
GetBackupConfigurationScript.from_json(json_dict["GetBackupConfigurationScript"]),
(
GetBackupConfigurationScript.from_json(json_dict["GetBackupConfigurationScript"])
if json_dict["GetBackupConfigurationScript"]
else None
),
json_dict["FolderPath"],
)

def to_json(self) -> Dict[str, Any]:
return {
"Disabled": self.disabled,
"GetBackupConfigurationScript": self.get_backup_configuration_script.to_json(),
"GetBackupConfigurationScript": (
self.get_backup_configuration_script.to_json() if self.get_backup_configuration_script else None
),
"FolderPath": self.folder_path,
}

Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,57 @@
import json
import urllib
from typing import Dict

import requests

from ravendb import RavenCommand, RaftCommand, ServerNode
from ravendb.documents.operations.definitions import MaintenanceOperation
from ravendb.util.util import RaftIdGenerator
from ravendb.serverwide.server_operation_executor import ConnectionStringType


class RemoveConnectionStringByNameResult:
def __init__(self, raft_command_index: int = None):
self.raft_command_index = raft_command_index

def to_json(self) -> Dict:
return {"RaftCommandIndex": self.raft_command_index}

@classmethod
def from_json(cls, json_dict: Dict) -> "RemoveConnectionStringResult":
return cls(json_dict["RaftCommandIndex"])


class RemoveConnectionStringByNameOperation(MaintenanceOperation[RemoveConnectionStringByNameResult]):
def __init__(self, connection_string_name: str, connection_string_type: ConnectionStringType):
self._connection_string_name = connection_string_name
self._connection_string_type = connection_string_type

def get_command(self, conventions: "DocumentConventions") -> "RavenCommand[RemoveConnectionStringResult]":
return self.RemoveConnectionStringCommand(self._connection_string_name, self._connection_string_type)

class RemoveConnectionStringCommand(RavenCommand[RemoveConnectionStringByNameResult], RaftCommand):
def __init__(self, connection_string_name: str, connection_string_type: ConnectionStringType):
super().__init__(RemoveConnectionStringByNameResult)
self._connection_string_name = connection_string_name
self._connection_string_type = connection_string_type

def is_read_request(self) -> bool:
return False

def create_request(self, node: ServerNode) -> requests.Request:
url = f"{node.url}/databases/{node.database}/admin/connection-strings?connectionString={urllib.parse.quote(self._connection_string_name)}&type={self._connection_string_type.value}"

request = requests.Request("DELETE")
request.url = url

return request

def set_response(self, response: str, from_cache: bool) -> None:
if response is None:
self._throw_invalid_response()

self.result = RemoveConnectionStringByNameResult.from_json(json.loads(response))

def get_raft_unique_request_id(self) -> str:
return RaftIdGenerator.new_id()
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@
from ravendb import RavenCommand, RaftCommand, ConnectionString, ServerNode
from ravendb.documents.operations.definitions import MaintenanceOperation
from ravendb.util.util import RaftIdGenerator
from ravendb.serverwide.server_operation_executor import ConnectionStringType


class RemoveConnectionStringResult:
Expand All @@ -17,15 +18,15 @@ def to_json(self) -> Dict:
return {"RaftCommandIndex": self.raft_command_index}

@classmethod
def from_json(cls, json_dict: Dict) -> "PutConnectionStringResult":
def from_json(cls, json_dict: Dict) -> "RemoveConnectionStringResult":
return cls(json_dict["RaftCommandIndex"])


class RemoveConnectionStringOperation(MaintenanceOperation[RemoveConnectionStringResult]):
def __init__(self, connection_string: ConnectionString = None):
self._connection_string = connection_string

def get_command(self, conventions: "DocumentConventions") -> "RavenCommand[_T]":
def get_command(self, conventions: "DocumentConventions") -> "RavenCommand[RemoveConnectionStringResult]":
return self.RemoveConnectionStringCommand(self._connection_string)

class RemoveConnectionStringCommand(RavenCommand[RemoveConnectionStringResult], RaftCommand):
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,9 @@
from ravendb.documents.operations.connection_string.put_connection_string_operation import (
PutConnectionStringOperation,
)
from ravendb.documents.operations.connection_string.remove_connection_string_by_name_operation import (
RemoveConnectionStringByNameOperation,
)
from ravendb.documents.operations.connection_string.remove_connection_string_operation import (
RemoveConnectionStringOperation,
)
Expand Down Expand Up @@ -1024,3 +1027,23 @@ def test_all_possible_fields_for_each_connection_string_type(self):
GetConnectionStringsOperation("snowflake_all_fields", ConnectionStringType.SNOWFLAKE)
)
self.assertIsNone(after_delete.snowflake_connection_strings)

def test_remove_connection_string_by_name_operation(self):
raven_connection_string = RavenConnectionString("raven1", self.store.database, self.store.urls)

put_result = self.store.maintenance.send(PutConnectionStringOperation(raven_connection_string))
self.assertGreater(put_result.raft_command_index, 0)

raven_get_result = self.store.maintenance.send(
GetConnectionStringsOperation("raven1", ConnectionStringType.RAVEN)
)
self.assertIn("raven1", raven_get_result.raven_connection_strings)
self.assertEqual(1, len(raven_get_result.raven_connection_strings))

remove_result = self.store.maintenance.send(
RemoveConnectionStringByNameOperation("raven1", ConnectionStringType.RAVEN)
)
self.assertGreater(remove_result.raft_command_index, 0)

after_delete = self.store.maintenance.send(GetConnectionStringsOperation("raven1", ConnectionStringType.RAVEN))
self.assertIsNone(after_delete.raven_connection_strings)