Skip to content

Commit

Permalink
Wrapping up tests
Browse files Browse the repository at this point in the history
  • Loading branch information
JR-Morgan committed Oct 30, 2024
1 parent 3bd849c commit 3642731
Show file tree
Hide file tree
Showing 26 changed files with 1,283 additions and 210 deletions.
26 changes: 22 additions & 4 deletions poetry.lock

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

1 change: 1 addition & 0 deletions pyproject.toml
Original file line number Diff line number Diff line change
Expand Up @@ -29,6 +29,7 @@ httpx = "^0.25.0"
black = "23.11.0"
isort = "^5.7.0"
pytest = "^7.1.3"
pytest-asyncio = "^0.23.0"
pytest-ordering = "^0.6"
pytest-cov = "^3.0.0"
devtools = "^0.8.0"
Expand Down
36 changes: 15 additions & 21 deletions src/specklepy/api/client.py
Original file line number Diff line number Diff line change
@@ -1,24 +1,17 @@
from deprecated import deprecated

from specklepy.api.credentials import Account
from specklepy.api.resources import (
branch,
commit,
object,
server,
stream,
subscriptions,
user,
)
from specklepy.core.api.client import SpeckleClient as CoreSpeckleClient
from specklepy.api.resources import branch, commit, object, server, stream, user

# TODO: re-reference core.api resources
from specklepy.core.api.resources.active_user_resource import ActiveUserResource
from specklepy.core.api.resources.model_resource import ModelResource
from specklepy.core.api.resources.other_user_resource import OtherUserResource
from specklepy.core.api.resources.project_invite_resource import ProjectInviteResource
from specklepy.core.api.resources.project_resource import ProjectResource
from specklepy.core.api.resources.version_resource import VersionResource
from specklepy.api.resources.active_user_resource import ActiveUserResource
from specklepy.api.resources.model_resource import ModelResource
from specklepy.api.resources.other_user_resource import OtherUserResource
from specklepy.api.resources.project_invite_resource import ProjectInviteResource
from specklepy.api.resources.project_resource import ProjectResource
from specklepy.api.resources.subscription_resource import SubscriptionResource
from specklepy.api.resources.version_resource import VersionResource
from specklepy.core.api.client import SpeckleClient as CoreSpeckleClient
from specklepy.logging import metrics


Expand Down Expand Up @@ -116,6 +109,11 @@ def _init_resources(self) -> None:
client=self.httpclient,
server_version=server_version,
)
self.subscription = SubscriptionResource(
account=self.account,
basepath=self.ws_url,
client=self.wsclient,
)
# Deprecated Resources
self.user = user.Resource(
account=self.account,
Expand All @@ -138,11 +136,7 @@ def _init_resources(self) -> None:
self.object = object.Resource(
account=self.account, basepath=self.url, client=self.httpclient
)
self.subscribe = subscriptions.Resource(
account=self.account,
basepath=self.ws_url,
client=self.wsclient,
)
self.subscribe = self.subscription

@deprecated(
version="2.6.0",
Expand Down
138 changes: 138 additions & 0 deletions src/specklepy/api/resources/active_user_resource.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,138 @@
from datetime import datetime
from typing import List, Optional, overload

from deprecated import deprecated

from specklepy.core.api.inputs.project_inputs import UserProjectsFilter
from specklepy.core.api.inputs.user_inputs import UserUpdateInput
from specklepy.core.api.models import (
FE1_DEPRECATION_REASON,
FE1_DEPRECATION_VERSION,
PendingStreamCollaborator,
ResourceCollection,
User,
)
from specklepy.core.api.new_models import Project
from specklepy.core.api.resources.active_user_resource import (
ActiveUserResource as CoreResource,
)
from specklepy.logging import metrics


class ActiveUserResource(CoreResource):
def __init__(self, account, basepath, client, server_version) -> None:
super().__init__(
account=account,
basepath=basepath,
client=client,
server_version=server_version,
)
self.schema = User

def get(self) -> Optional[User]:
return super().get()

@deprecated("Use UserUpdateInput overload", version=FE1_DEPRECATION_VERSION)
@overload
def update(
self,
name: Optional[str] = None,
company: Optional[str] = None,
bio: Optional[str] = None,
avatar: Optional[str] = None,
) -> User:
...

@overload
def update(self, *, input: UserUpdateInput) -> User:
...

def update(
self,
name: Optional[str] = None,
company: Optional[str] = None,
bio: Optional[str] = None,
avatar: Optional[str] = None,
*,
input: Optional[UserUpdateInput] = None,
) -> User:
if isinstance(input, UserUpdateInput):
return super()._update(input=input)
else:
return super()._update(
input=UserUpdateInput(
name=name,
company=company,
bio=bio,
avatar=avatar,
)
)

def get_projects(
self,
*,
limit: int = 25,
cursor: Optional[str] = None,
filter: Optional[UserProjectsFilter] = None,
) -> ResourceCollection[Project]:
return super().get_projects(limit=limit, cursor=cursor, filter=filter)

def get_project_invites(self) -> List[PendingStreamCollaborator]:
return super().get_project_invites()

@deprecated(reason=FE1_DEPRECATION_REASON, version=FE1_DEPRECATION_VERSION)
def activity(
self,
limit: int = 20,
action_type: Optional[str] = None,
before: Optional[datetime] = None,
after: Optional[datetime] = None,
cursor: Optional[datetime] = None,
):
"""
Fetches collection the current authenticated user's activity
as filtered by given parameters
Note: all timestamps arguments should be `datetime` of any tz as they will be
converted to UTC ISO format strings
Args:
limit (int): The maximum number of activity items to return.
action_type (Optional[str]): Filter results to a single action type.
before (Optional[datetime]): Latest cutoff for activity to include.
after (Optional[datetime]): Oldest cutoff for an activity to include.
cursor (Optional[datetime]): Timestamp cursor for pagination.
Returns:
Activity collection, filtered according to the provided parameters.
"""
metrics.track(metrics.SDK, self.account, {"name": "User Active Activity"})
return super().activity(limit, action_type, before, after, cursor)

@deprecated(reason=FE1_DEPRECATION_REASON, version=FE1_DEPRECATION_VERSION)
def get_all_pending_invites(self) -> List[PendingStreamCollaborator]:
"""Fetches all of the current user's pending stream invitations.
Returns:
List[PendingStreamCollaborator]: A list of pending stream invitations.
"""
metrics.track(
metrics.SDK, self.account, {"name": "User Active Invites All Get"}
)
return super().get_all_pending_invites()

@deprecated(reason=FE1_DEPRECATION_REASON, version=FE1_DEPRECATION_VERSION)
def get_pending_invite(
self, stream_id: str, token: Optional[str] = None
) -> Optional[PendingStreamCollaborator]:
"""Fetches a specific pending invite for the current user on a given stream.
Args:
stream_id (str): The ID of the stream to look for invites on.
token (Optional[str]): The token of the invite to look for (optional).
Returns:
Optional[PendingStreamCollaborator]: The invite for the given stream, or None if not found.
"""
metrics.track(metrics.SDK, self.account, {"name": "User Active Invite Get"})
return super().get_pending_invite(stream_id, token)
Empty file.
65 changes: 65 additions & 0 deletions src/specklepy/api/resources/model_resource.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,65 @@
from typing import Optional

from specklepy.core.api.inputs.model_inputs import (
CreateModelInput,
DeleteModelInput,
ModelVersionsFilter,
UpdateModelInput,
)
from specklepy.core.api.inputs.project_inputs import ProjectModelsFilter
from specklepy.core.api.new_models import Model, ModelWithVersions, ResourceCollection
from specklepy.core.api.resources.model_resource import ModelResource as CoreResource


class ModelResource(CoreResource):
def __init__(self, account, basepath, client, server_version) -> None:
super().__init__(
account=account,
basepath=basepath,
client=client,
server_version=server_version,
)

def get(self, model_id: str, project_id: str) -> Model:
return super().get(model_id, project_id)

def get_with_versions(
self,
model_id: str,
project_id: str,
*,
versions_limit: int = 25,
versions_cursor: Optional[str] = None,
versions_filter: Optional[ModelVersionsFilter] = None,
) -> ModelWithVersions:
return super().get_with_versions(
model_id,
project_id,
versions_limit=versions_limit,
versions_cursor=versions_cursor,
versions_filter=versions_filter,
)

def get_models(
self,
project_id: str,
*,
models_limit: int = 25,
models_cursor: Optional[str] = None,
models_filter: Optional[ProjectModelsFilter] = None,
) -> ResourceCollection[Model]:
return super().get_models(
project_id,
models_limit=models_limit,
models_cursor=models_cursor,
models_filter=models_filter,
)

def create(self, input: CreateModelInput) -> Model:
return super().create(input)

def delete(self, input: DeleteModelInput) -> bool:
return super().delete(input)

def update(self, input: UpdateModelInput) -> Model:
return super().update(input)
Loading

0 comments on commit 3642731

Please sign in to comment.