commit received implementation

This commit is contained in:
Gergő Jedlicska 2021-10-27 14:13:49 +02:00
Родитель 0709cd99b5
Коммит 15ae68f5d7
4 изменённых файлов: 152 добавлений и 0 удалений

2
.gitignore поставляемый
Просмотреть файл

@ -1,3 +1,5 @@
.tool-versions
# Byte-compiled / optimized / DLL files
__pycache__/
*.py[cod]

56
example/stream_copy.py Normal file
Просмотреть файл

@ -0,0 +1,56 @@
from gql.transport import transport
from specklepy.api.client import SpeckleClient
from specklepy.api.credentials import (
StreamWrapper,
get_default_account,
get_local_accounts,
)
from specklepy.api import operations
if __name__ == "__main__":
# initialise the client
xyz_client = SpeckleClient(host="speckle.xyz") # or whatever your host is
# client = SpeckleClient(host="localhost:3000", use_ssl=False) or use local server
# authenticate the client with a token
xyz_client.authenticate(
token=[acc for acc in get_local_accounts() if acc.userInfo.id != "4d722975bc"][
0
].token
)
stream = xyz_client.stream.get(id="81d2f2c135")
print(stream)
local_client = SpeckleClient(host="localhost:3000", use_ssl=False)
local_client.authenticate(
token=[acc for acc in get_local_accounts() if acc.userInfo.id == "4d722975bc"][
0
].token
)
local_stream_id = local_client.stream.create(stream.name)
print(local_stream_id)
remote_commits = xyz_client.commit.list(stream.id)
local_wrapper = StreamWrapper(f"http://localhost:3000/streams/{local_stream_id}")
for remote_commit in remote_commits:
xyz_wrapper = StreamWrapper(
f"https://speckle.xyz/streams/{stream.id}/commits/{remote_commit.id}"
)
received_object = operations.receive(
remote_commit.referencedObject, xyz_wrapper.get_transport()
)
sent_object_id = operations.send(
received_object, [local_wrapper.get_transport()]
)
commit_id = local_client.commit.create(local_stream_id, sent_object_id)
# xyz_client.object.get()
print(commit_id)

Просмотреть файл

@ -185,3 +185,40 @@ class Resource(ResourceBase):
return self.make_request(
query=query, params=params, return_type="commitDelete", parse_response=False
)
def received(
self,
stream_id: str,
commit_id: str,
source_application: str = "python",
message: Optional[str] = None,
) -> bool:
"""
Mark a commit object a received by the source application.
"""
query = gql(
"""
mutation CommitReceive($receivedInput:CommitReceivedInput!){
commitReceive(input:$receivedInput)
}
"""
)
params = {
"receivedInput": {
"sourceApplication": source_application,
"streamId": stream_id,
"commitId": commit_id,
"message": "message",
}
}
try:
return self.make_request(
query=query,
params=params,
return_type="commitReceive",
parse_response=False,
)
except Exception as ex:
print(ex.with_traceback)
return False

Просмотреть файл

@ -1,7 +1,9 @@
from typing import Dict, List
import pytest
from specklepy.api import operations
from specklepy.api.models import Commit, Stream
from specklepy.transports.server.server import ServerTransport
from gql import gql
@pytest.mark.run(order=4)
@ -68,3 +70,58 @@ class TestCommit:
deleted = client.commit.delete(stream_id=stream.id, commit_id=commit_id)
assert deleted is True
def _get_commit_activity(self, client, stream_id, commit_id) -> List[Dict]:
return client.httpclient.execute(
gql(
"""
query Commit($stream_id: String!, $commit_id: String!) {
stream(id: $stream_id) {
commit(id: $commit_id) {
id
referencedObject
message
authorId
authorName
authorAvatar
branchName
createdAt
sourceApplication
totalChildrenCount
parents
activity {
items {
userId
actionType
info
}
}
}
}
}
"""
),
variable_values={"stream_id": stream_id, "commit_id": commit_id},
)["stream"]["commit"]["activity"]
def test_commit_marked_as_received(self, client, stream, mesh) -> None:
commit = Commit(message="this commit should be received")
commit.id = client.commit.create(
stream_id=stream.id,
object_id=mesh.id,
message=commit.message,
)
activity = self._get_commit_activity(client, stream.id, commit.id)
assert len(activity) == 1
assert (
client.commit.received(
stream.id,
commit.id,
source_application="pytest",
message="testing received",
)
== True
)
assert len(activity) == 2