Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
33 commits
Select commit Hold shift + click to select a range
af61c7e
RDBC-775 Revisions
poissoncorp Jan 3, 2024
9c1c8c5
RDBC-775 RevisionsTest::revisions
poissoncorp Jan 3, 2024
4818dd9
RDBC-775 Small imports fix
poissoncorp Jan 3, 2024
9faacd6
RDBC-775 ForceRevisionCreationTest::hasRevisionsFlagIsCreatedWhenForc…
poissoncorp Jan 4, 2024
f4bc1ea
RDBC-775 ForceRevisionCreationTest::forceRevisionCreationForTrackedEn…
poissoncorp Jan 4, 2024
f1e4786
RDBC-775 ForceRevisionCreationTest::forceRevisionCreationAcrossMultip…
poissoncorp Jan 4, 2024
e1dc248
RDBC-775 ForceRevisionCreationTestForceRevisionCreationTest::forceRev…
poissoncorp Jan 4, 2024
aa002c8
RDBC-775 ForceRevisionCreationTest::forceRevisionCreationForTrackedEn…
poissoncorp Jan 4, 2024
b093574
RDBC-775 ForceRevisionCreationTest::forceRevisionCreationForSingleUnT…
poissoncorp Jan 4, 2024
1d6081a
RDBC-775 ForceRevisionCreationTest::forceRevisionCreationWhenRevision…
poissoncorp Jan 4, 2024
62c1ac4
RDBC-775 ForceRevisionCreationTest::forceRevisionCreationForNewDocume…
poissoncorp Jan 4, 2024
27bb94e
RDBC-775 ForceRevisionCreationTest::cannotForceRevisionCreationForUnT…
poissoncorp Jan 4, 2024
e3267b1
RDBC-775 ForceRevisionCreationTest::forceRevisionCreationForMultipleU…
poissoncorp Jan 4, 2024
18586ad
RDBC-775 ForceRevisionCreationTest::forceRevisionCreationForTrackedEn…
poissoncorp Jan 4, 2024
333ed50
RDBC-775 ForceRevisionCreationTest::cannotForceRevisionCreationForNew…
poissoncorp Jan 4, 2024
d39da63
RDBC-775 RevisionsTest::canGetRevisionsByChangeVectors
poissoncorp Jan 5, 2024
d524eb7
RDBC-775 RevisionsTest::canGetRevisionsCountFor
poissoncorp Jan 5, 2024
1d401f6
RDBC-775 RevisionsTest::canListRevisionsBin + GetRevisionsBinEntryCom…
poissoncorp Jan 5, 2024
8037e45
RDBC-775 RevisionsTest::collectionCaseSensitiveTest1
poissoncorp Jan 5, 2024
5ebac86
RDBC-775 RevisionsTest::collectionCaseSensitiveTest2
poissoncorp Jan 5, 2024
634ac45
RDBC-775 RevisionsTest::collectionCaseSensitiveTest3
poissoncorp Jan 5, 2024
982d6c2
RDBC-775 RevisionsTest::canGetAllRevisionsForDocument_UsingStoreOpera…
poissoncorp Jan 5, 2024
bbd62d3
RDBC-775 RevisionsTest::canGetRevisionsWithPaging2_UsingStoreOperation
poissoncorp Jan 5, 2024
b9b5f23
RDBC-775 RevisionsTest::canGetRevisionsWithPaging_UsingStoreOperation
poissoncorp Jan 5, 2024
8a40c19
RDBC-775 RevisionsTest::canGetMetadataForLazily
poissoncorp Jan 5, 2024
3114095
RDBC-775 small fix
poissoncorp Jan 5, 2024
995a65c
RDBC-775 RevisionsTest::canGetForLazily
poissoncorp Jan 5, 2024
af7fb73
RDBC-775 RevisionsTest::canGetRevisionsByIdAndTimeLazily
poissoncorp Jan 5, 2024
7f214ab
RDBC-775 RevisionsTest::canGetNonExistingRevisionsByChangeVectorAsync…
poissoncorp Jan 5, 2024
e4fd246
RDBC-775 RevisionsTest::canGetRevisionsByChangeVectorsLazily
poissoncorp Jan 5, 2024
a83d3b7
RDBC-775 RevisionsTest::canGetRevisionsByChangeVectorLazily
poissoncorp Jan 5, 2024
a9e74cd
RDBC-775 fix flaky test - created a ticket https://issues.hibernating…
poissoncorp Jan 5, 2024
5962ab0
RDBC-775 skip flaky test https://issues.hibernatingrhinos.com/issue/R…
poissoncorp Jan 5, 2024
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
4 changes: 2 additions & 2 deletions ravendb/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -103,7 +103,7 @@
GetIndexErrorsOperation,
IndexingStatus,
)
from ravendb.documents.operations.lazy.lazy_operation import LazyOperation
from ravendb.documents.operations.lazy.definition import LazyOperation
from ravendb.documents.operations.misc import DeleteByQueryOperation, GetOperationStateOperation, QueryOperationOptions
from ravendb.documents.operations.patch import (
PatchOperation,
Expand All @@ -120,7 +120,7 @@
ReplicationNode,
ExternalReplicationBase,
)
from ravendb.documents.operations.revisions.configuration import (
from ravendb.documents.operations.revisions import (
RevisionsCollectionConfiguration,
RevisionsConfiguration,
)
Expand Down
144 changes: 144 additions & 0 deletions ravendb/documents/commands/revisions.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,144 @@
from __future__ import annotations

import json
from datetime import datetime
from typing import List, Optional, TYPE_CHECKING

import requests

from ravendb.http.raven_command import RavenCommand
from ravendb.json.result import JsonArrayResult
from ravendb.tools.utils import Utils

if TYPE_CHECKING:
from ravendb.http.server_node import ServerNode


class GetRevisionsCommand(RavenCommand[JsonArrayResult]):
def __init__(
self,
id_: str = None,
start: int = None,
page_size: int = None,
metadata_only: bool = None,
before: datetime = None,
change_vector: str = None,
change_vectors: List[str] = None,
):
super().__init__(JsonArrayResult)
self._id = id_
self._start = start
self._page_size = page_size
self._metadata_only = metadata_only
self._before = before
self._change_vector = change_vector
self._change_vectors = change_vectors

@property
def change_vectors(self) -> Optional[List[str]]:
return self._change_vectors

@property
def change_vector(self) -> Optional[str]:
return self._change_vector

@property
def before(self) -> Optional[datetime]:
return self._before

@property
def id(self) -> Optional[str]:
return self._id

@classmethod
def from_change_vector(cls, change_vector: str, metadata_only: bool = False) -> GetRevisionsCommand:
return GetRevisionsCommand(change_vector=change_vector, metadata_only=metadata_only)

@classmethod
def from_change_vectors(cls, change_vectors: List[str] = None, metadata_only: bool = False) -> GetRevisionsCommand:
return GetRevisionsCommand(change_vectors=change_vectors, metadata_only=metadata_only)

@classmethod
def from_before(cls, id_: str, before: datetime) -> GetRevisionsCommand:
if id_ is None:
raise ValueError("Id cannot be None")
return GetRevisionsCommand(id_=id_, before=before)

@classmethod
def from_start_page(
cls, id_: str = None, start: int = None, page_size: int = None, metadata_only: bool = False
) -> GetRevisionsCommand:
if id_ is None:
raise ValueError("Id cannot be None")

return cls(id_=id_, start=start, page_size=page_size, metadata_only=metadata_only)

def create_request(self, node: ServerNode) -> requests.Request:
path_builder = [node.url, "/databases/", node.database, "/revisions?"]

self.get_request_query_string(path_builder)
return requests.Request("GET", "".join(path_builder))

def get_request_query_string(self, path_builder: List[str]) -> None:
if self._id is not None:
path_builder.append("&id=")
path_builder.append(Utils.escape(self._id))
elif self._change_vector is not None:
path_builder.append("&changeVector=")
path_builder.append(Utils.escape(self._change_vector))
elif self._change_vectors is not None:
for change_vector in self._change_vectors:
path_builder.append("&changeVector=")
path_builder.append(Utils.escape(change_vector))

if self._before is not None:
path_builder.append("&before")
path_builder.append(Utils.datetime_to_string(self._before))

if self._start is not None:
path_builder.append("&start=")
path_builder.append(str(self._start))

if self._page_size is not None:
path_builder.append("&pageSize=")
path_builder.append(str(self._page_size))

if self._metadata_only:
path_builder.append("&metadataOnly=true")

def set_response(self, response: Optional[str], from_cache: bool) -> None:
if response is None:
self.result = None
return

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

def is_read_request(self) -> bool:
return True


class GetRevisionsBinEntryCommand(RavenCommand[JsonArrayResult]):
def __init__(self, etag: int, page_size: int):
super().__init__(JsonArrayResult)
self._etag = etag
self._page_size = page_size

def create_request(self, node: ServerNode) -> requests.Request:
request = requests.Request("GET")
path = [node.url, "/databases/", node.database, "/revisions/bin?start=", str(self._etag)]
if self._page_size is not None:
path.append("&pageSize=")
path.append(str(self._page_size))

request.url = "".join(path)

return request

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

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

def is_read_request(self) -> bool:
return True
Loading