From 4451b8aa706bc386153ff7aa65f618b71d9b9360 Mon Sep 17 00:00:00 2001 From: Gracjan Sadowicz Date: Tue, 9 Jul 2024 16:07:05 +0200 Subject: [PATCH 1/2] Handle Single-File-App Raven.Server files (for 6.1) --- ravendb_embedded/provide.py | 12 ++++++++++ ravendb_embedded/raven_server_runner.py | 31 ++++++++++++++----------- 2 files changed, 30 insertions(+), 13 deletions(-) diff --git a/ravendb_embedded/provide.py b/ravendb_embedded/provide.py index a635627..5f603da 100644 --- a/ravendb_embedded/provide.py +++ b/ravendb_embedded/provide.py @@ -76,9 +76,11 @@ def provide(self, target_directory): class ExternalServerProvider(ProvideRavenDBServer): SERVER_DLL_FILENAME = "Raven.Server.dll" + SERVER_SFA_FILENAME = "Raven.Server" def __init__(self, server_location: str): self.server_location = server_location + self.is_single_file_app = False file_server_location = os.path.abspath(server_location) @@ -97,6 +99,16 @@ def __init__(self, server_location: str): self.inner_provider = CopyServerProvider(server_location) return + # Also look for Single File App file - Raven.Server + if os.path.isdir(file_server_location) and os.path.exists( + os.path.join(file_server_location, self.SERVER_SFA_FILENAME) + ): + self.is_single_file_app = True + self.inner_provider = CopyServerProvider(server_location) + return + + + raise ValueError( f"Unable to find RavenDB server (expected directory with {self.SERVER_DLL_FILENAME}) or zip file. " f"Used directory = {server_location}" diff --git a/ravendb_embedded/raven_server_runner.py b/ravendb_embedded/raven_server_runner.py index 2af72dc..bcd6e4c 100644 --- a/ravendb_embedded/raven_server_runner.py +++ b/ravendb_embedded/raven_server_runner.py @@ -6,6 +6,7 @@ from cryptography.hazmat.primitives import hashes from ravendb.exceptions.raven_exceptions import RavenException +from ravendb_embedded.provide import ExternalServerProvider from ravendb_embedded.options import ServerOptions from ravendb_embedded.runtime_framework_version_matcher import ( RuntimeFrameworkVersionMatcher, @@ -30,21 +31,24 @@ def run(options: ServerOptions) -> subprocess.Popen: if not options.logs_path.strip(): raise ValueError("logs_path cannot be None or whitespace") + is_sfa = isinstance(options.provider, ExternalServerProvider) and options.provider.is_single_file_app + file_name = "Raven.Server" if is_sfa else "Raven.Server.dll" + server_paths = [ - "Raven.Server.dll", - "Server/Raven.Server.dll", - "contentFiles/any/any/RavenDBServer/Raven.Server.dll", + f"{file_name}", + f"Server/{file_name}", + f"contentFiles/any/any/RavenDBServer/{file_name}", ] - server_dll_path = None + server_file_path = None for path in server_paths: full_path = os.path.join(options.target_server_location, path) if os.path.exists(full_path): - server_dll_path = full_path + server_file_path = full_path break - if server_dll_path is None: + if server_file_path is None: raise RavenException("Server file was not found in any of the expected locations.") if not options.dot_net_path.strip(): @@ -106,13 +110,14 @@ def run(options: ServerOptions) -> subprocess.Popen: command_line_args.extend([f"--ServerUrl={options.server_url}"]) command_line_args[:0] = options.command_line_args - command_line_args.insert(0, server_dll_path) - command_line_args.insert(0, options.dot_net_path) - - if options.framework_version: - framework_version = RuntimeFrameworkVersionMatcher.match(options) - command_line_args.insert(1, framework_version) - command_line_args.insert(1, "--fx-version") + command_line_args.insert(0, server_file_path) + if not is_sfa: + command_line_args.insert(0, options.dot_net_path) + + if options.framework_version: + framework_version = RuntimeFrameworkVersionMatcher.match(options) + command_line_args.insert(1, framework_version) + command_line_args.insert(1, "--fx-version") process_builder = subprocess.Popen(command_line_args, stdout=subprocess.PIPE, stderr=subprocess.PIPE) process = process_builder From d8b0022ca1676839da0efb2dff7f165bb3d36d13 Mon Sep 17 00:00:00 2001 From: Gracjan Sadowicz Date: Tue, 9 Jul 2024 16:10:16 +0200 Subject: [PATCH 2/2] Bump version to 5.2.6.post1 --- setup.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/setup.py b/setup.py index f3711ed..fa729d2 100644 --- a/setup.py +++ b/setup.py @@ -5,7 +5,7 @@ import urllib.request from setuptools.command.sdist import sdist -RAVENDB_VERSION = "5.4.116" +RAVENDB_VERSION = "5.4.200" ZIP_FILE_NAME = "server.zip" RAVENDB_DOWNLOAD_URL = f"https://www.nuget.org/api/v2/package/RavenDB.Embedded/{RAVENDB_VERSION}" @@ -45,7 +45,7 @@ def run(self): package_dir={"ravendb_embedded": "ravendb_embedded"}, include_package_data=True, long_description=open("README.rst").read(), - version="5.2.6", + version="5.2.6.post1", description="RavenDB Embedded library to run RavenDB in an embedded way", author="RavenDB", author_email="support@ravendb.net",