Skip to content

Commit f709cc1

Browse files
tdsteinschloerke
andauthored
refactor: use static duck typing for jobs and packages (#357)
Co-authored-by: Barret Schloerke <[email protected]>
1 parent 7efac29 commit f709cc1

File tree

10 files changed

+174
-554
lines changed

10 files changed

+174
-554
lines changed

integration/tests/posit/connect/test_environments.py

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,9 @@ class TestEnvironments:
1515
def setup_class(cls):
1616
cls.client = connect.Client()
1717
cls.environment = cls.client.environments.create(
18-
title="title", name="name", cluster_name="Kubernetes"
18+
title="title",
19+
name="name",
20+
cluster_name="Kubernetes",
1921
)
2022

2123
@classmethod

integration/tests/posit/connect/test_jobs.py

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -51,3 +51,7 @@ def test_find_by(self):
5151

5252
jobs = content.jobs
5353
assert len(jobs) != 0
54+
55+
job = jobs[0]
56+
key = job["key"]
57+
assert content.jobs.find_by(key=key) == job

src/posit/connect/client.py

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -14,15 +14,15 @@
1414
from .groups import Groups
1515
from .metrics import Metrics
1616
from .oauth import OAuth
17-
from .packages import Packages
18-
from .resources import ResourceParameters, _ResourceSequence
17+
from .resources import ResourceParameters, _PaginatedResourceSequence, _ResourceSequence
1918
from .tags import Tags
2019
from .tasks import Tasks
2120
from .users import User, Users
2221
from .vanities import Vanities
2322

2423
if TYPE_CHECKING:
2524
from .environments import Environments
25+
from .packages import _Packages
2626

2727

2828
class Client(ContextManager):
@@ -297,9 +297,9 @@ def oauth(self) -> OAuth:
297297
return OAuth(self.resource_params, self.cfg.api_key)
298298

299299
@property
300-
@requires(version="2024.10.0-dev")
301-
def packages(self) -> Packages:
302-
return Packages(self._ctx, "v1/packages")
300+
@requires(version="2024.11.0")
301+
def packages(self) -> _Packages:
302+
return _PaginatedResourceSequence(self._ctx, "v1/packages", uid="name")
303303

304304
@property
305305
def vanities(self) -> Vanities:

src/posit/connect/content.py

Lines changed: 16 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -20,19 +20,20 @@
2020
from . import tasks
2121
from ._api import ApiDictEndpoint, JsonifiableDict
2222
from .bundles import Bundles
23+
from .context import requires
2324
from .env import EnvVars
2425
from .errors import ClientError
25-
from .jobs import JobsMixin
2626
from .oauth.associations import ContentItemAssociations
27-
from .packages import ContentPackagesMixin as PackagesMixin
2827
from .permissions import Permissions
29-
from .resources import Resource, ResourceParameters, Resources
28+
from .resources import Active, Resource, ResourceParameters, Resources, _ResourceSequence
3029
from .tags import ContentItemTags
3130
from .vanities import VanityMixin
3231
from .variants import Variants
3332

3433
if TYPE_CHECKING:
3534
from .context import Context
35+
from .jobs import Jobs
36+
from .packages import _ContentPackages
3637
from .tasks import Task
3738

3839

@@ -174,7 +175,7 @@ class ContentItemOwner(Resource):
174175
pass
175176

176177

177-
class ContentItem(JobsMixin, PackagesMixin, VanityMixin, Resource):
178+
class ContentItem(Active, VanityMixin, Resource):
178179
class _AttrsBase(TypedDict, total=False):
179180
# # `name` will be set by other _Attrs classes
180181
# name: str
@@ -511,6 +512,17 @@ def tags(self) -> ContentItemTags:
511512
content_guid=self["guid"],
512513
)
513514

515+
@property
516+
def jobs(self) -> Jobs:
517+
path = posixpath.join(self._path, "jobs")
518+
return _ResourceSequence(self._ctx, path, uid="key")
519+
520+
@property
521+
@requires(version="2024.11.0")
522+
def packages(self) -> _ContentPackages:
523+
path = posixpath.join(self._path, "packages")
524+
return _ResourceSequence(self._ctx, path, uid="name")
525+
514526

515527
class Content(Resources):
516528
"""Content resource.

src/posit/connect/environments.py

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,12 +2,15 @@
22

33
from abc import abstractmethod
44
from collections.abc import Mapping, Sized
5-
from typing import (
5+
6+
from typing_extensions import (
67
Any,
78
List,
89
Literal,
910
Protocol,
11+
SupportsIndex,
1012
TypedDict,
13+
overload,
1114
runtime_checkable,
1215
)
1316

@@ -93,6 +96,12 @@ def update(
9396

9497
@runtime_checkable
9598
class Environments(Sized, Protocol):
99+
@overload
100+
def __getitem__(self, index: SupportsIndex) -> Environment: ...
101+
102+
@overload
103+
def __getitem__(self, index: slice) -> List[Environment]: ...
104+
96105
def create(
97106
self,
98107
*,

0 commit comments

Comments
 (0)