225 lines
7.0 KiB
Python
225 lines
7.0 KiB
Python
from typing import Optional, List
|
|
from gql import gql
|
|
from specklepy.api.resource import ResourceBase
|
|
from specklepy.api.models import Commit
|
|
|
|
|
|
NAME = "commit"
|
|
METHODS = []
|
|
|
|
|
|
class Resource(ResourceBase):
|
|
"""API Access class for commits"""
|
|
|
|
def __init__(self, me, basepath, client) -> None:
|
|
super().__init__(
|
|
me=me, basepath=basepath, client=client, name=NAME, methods=METHODS
|
|
)
|
|
self.schema = Commit
|
|
|
|
def get(self, stream_id: str, commit_id: str) -> Commit:
|
|
"""
|
|
Gets a commit given a stream and the commit id
|
|
|
|
Arguments:
|
|
stream_id {str} -- the stream where we can find the commit
|
|
commit_id {str} -- the id of the commit you want to get
|
|
|
|
Returns:
|
|
Commit -- the retrieved commit object
|
|
"""
|
|
query = 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
|
|
}
|
|
}
|
|
}
|
|
"""
|
|
)
|
|
params = {"stream_id": stream_id, "commit_id": commit_id}
|
|
|
|
return self.make_request(
|
|
query=query, params=params, return_type=["stream", "commit"]
|
|
)
|
|
|
|
def list(self, stream_id: str, limit: int = 10) -> List[Commit]:
|
|
"""
|
|
Get a list of commits on a given stream
|
|
|
|
Arguments:
|
|
stream_id {str} -- the stream where the commits are
|
|
limit {int} -- the maximum number of commits to fetch (default = 10)
|
|
|
|
Returns:
|
|
List[Commit] -- a list of the most recent commit objects
|
|
"""
|
|
query = gql(
|
|
"""
|
|
query Commits($stream_id: String!, $limit: Int!) {
|
|
stream(id: $stream_id) {
|
|
commits(limit: $limit) {
|
|
items {
|
|
id
|
|
message
|
|
referencedObject
|
|
authorName
|
|
authorId
|
|
authorName
|
|
authorAvatar
|
|
createdAt
|
|
sourceApplication
|
|
totalChildrenCount
|
|
parents
|
|
}
|
|
}
|
|
}
|
|
}
|
|
"""
|
|
)
|
|
params = {"stream_id": stream_id, "limit": limit}
|
|
|
|
return self.make_request(
|
|
query=query, params=params, return_type=["stream", "commits", "items"]
|
|
)
|
|
|
|
def create(
|
|
self,
|
|
stream_id: str,
|
|
object_id: str,
|
|
branch_name: str = "main",
|
|
message: str = "",
|
|
source_application: str = "python",
|
|
parents: List[str] = None,
|
|
) -> str:
|
|
"""
|
|
Creates a commit on a branch
|
|
|
|
Arguments:
|
|
stream_id {str} -- the stream you want to commit to
|
|
object_id {str} -- the hash of your commit object
|
|
branch_name {str} -- the name of the branch to commit to (defaults to "main")
|
|
message {str} -- optional: a message to give more information about the commit
|
|
source_application{str} -- optional: the application from which the commit was created (defaults to "python")
|
|
parents {List[str]} -- optional: the id of the parent commits
|
|
|
|
Returns:
|
|
str -- the id of the created commit
|
|
"""
|
|
query = gql(
|
|
"""
|
|
mutation CommitCreate ($commit: CommitCreateInput!){ commitCreate(commit: $commit)}
|
|
"""
|
|
)
|
|
params = {
|
|
"commit": {
|
|
"streamId": stream_id,
|
|
"branchName": branch_name,
|
|
"objectId": object_id,
|
|
"message": message,
|
|
"sourceApplication": source_application,
|
|
}
|
|
}
|
|
if parents:
|
|
params["commit"]["parents"] = parents
|
|
|
|
return self.make_request(
|
|
query=query, params=params, return_type="commitCreate", parse_response=False
|
|
)
|
|
|
|
def update(self, stream_id: str, commit_id: str, message: str) -> bool:
|
|
"""
|
|
Update a commit
|
|
|
|
Arguments:
|
|
stream_id {str} -- the id of the stream that contains the commit you'd like to update
|
|
commit_id {str} -- the id of the commit you'd like to update
|
|
message {str} -- the updated commit message
|
|
|
|
Returns:
|
|
bool -- True if the operation succeeded
|
|
"""
|
|
query = gql(
|
|
"""
|
|
mutation CommitUpdate($commit: CommitUpdateInput!){ commitUpdate(commit: $commit)}
|
|
"""
|
|
)
|
|
params = {
|
|
"commit": {"streamId": stream_id, "id": commit_id, "message": message}
|
|
}
|
|
|
|
return self.make_request(
|
|
query=query, params=params, return_type="commitUpdate", parse_response=False
|
|
)
|
|
|
|
def delete(self, stream_id: str, commit_id: str) -> bool:
|
|
"""
|
|
Delete a commit
|
|
|
|
Arguments:
|
|
stream_id {str} -- the id of the stream that contains the commit you'd like to delete
|
|
commit_id {str} -- the id of the commit you'd like to delete
|
|
|
|
Returns:
|
|
bool -- True if the operation succeeded
|
|
"""
|
|
query = gql(
|
|
"""
|
|
mutation CommitDelete($commit: CommitDeleteInput!){ commitDelete(commit: $commit)}
|
|
"""
|
|
)
|
|
params = {"commit": {"streamId": stream_id, "id": commit_id}}
|
|
|
|
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
|