Skip to content

Commit

Permalink
--wip-- [skip ci]
Browse files Browse the repository at this point in the history
  • Loading branch information
tdstein committed Aug 8, 2024
1 parent 0f6841f commit 0fe47a3
Show file tree
Hide file tree
Showing 3 changed files with 85 additions and 2 deletions.
24 changes: 24 additions & 0 deletions integration/tests/posit/connect/test_tags.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@
from posit import connect


class TestTags:
def setup_class(cls):
cls.client = connect.Client()
cls.tag = cls.client.tags.create(name="example")

def teardown_class(cls):
cls.tag.delete()

def test_get(self):
assert self.client.tags.get(self.tag.id)

def test_find(self):
assert self.client.tags.find() == [self.tag]

def test_find_one(self):
assert self.client.tags.find_one() == self.tag

def test_update(self):
self.tag.update(name="updated")
assert self.tag["name"] == "updated"
self.tag.update(name="example")
14 changes: 12 additions & 2 deletions src/posit/connect/client.py
Original file line number Diff line number Diff line change
Expand Up @@ -6,15 +6,15 @@

from requests import Response, Session

from posit.connect.resources import ResourceParameters

from . import hooks, me
from .auth import Auth
from .config import Config
from .content import Content
from .groups import Groups
from .metrics import Metrics
from .oauth import OAuthIntegration
from .resources import ResourceParameters
from .tags import Tags
from .tasks import Tasks
from .users import User, Users

Expand Down Expand Up @@ -212,6 +212,16 @@ def groups(self) -> Groups:
"""
return Groups(self.resource_params)

@property
def tags(self) -> Tags:
"""The tags resource interface.
Returns
-------
Tags
"""
return Tags(self.resource_params)

@property
def tasks(self) -> Tasks:
"""
Expand Down
49 changes: 49 additions & 0 deletions src/posit/connect/tags.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,49 @@
from typing import List, overload

from .resources import Resource, Resources


class Tag(Resource):
@property
def id(self):
return self['id']

def delete(self) -> None:
url = self.url + f"/v1/tags/{self.id}"
self.session.delete(url)

def update(self, *args, **kwargs) -> None:
url = self.url + f"/v1/tags/{self.id}"
response = self.session.patch(url, json=kwargs)
super().update(**response.json())


class Tags(Resources):
@overload
def create(self, *, name: str, parent_id: str = ...) -> Tag: ...

@overload
def create(self, **kwargs) -> Tag: ...

def create(self, **kwargs) -> Tag:
dict().update()
url = self.url + "/v1/tags"
response = self.session.post(url, json=kwargs)
return Tag(self.params, **response.json())

def find(self, **kwargs) -> List[Tag]:
url = self.url + "/v1/tags"
response = self.session.get(url, params=kwargs)
return [Tag(self.params, **result) for result in response.json()]

def find_one(self, **kwargs) -> Tag | None:
url = self.url + "/v1/tags"
response = self.session.get(url, params=kwargs)
return next(
(Tag(self.params, **result) for result in response.json()), None
)

def get(self, uid: str) -> Tag:
url = self.url + f"/v1/tags/{uid}"
response = self.session.get(url)
return Tag(self.params, **response.json())

0 comments on commit 0fe47a3

Please sign in to comment.