Skip to content

Commit 7cb0644

Browse files
committed
docs: add resources documentation
1 parent 850e914 commit 7cb0644

16 files changed

Lines changed: 688 additions & 22 deletions

File tree

README.md

Lines changed: 1 addition & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -70,14 +70,4 @@ FiderAPIResponse(
7070
```
7171

7272
## Documentation
73-
TBD
74-
75-
## TODO
76-
- [x] Add Votes
77-
- [x] Add Comments
78-
- [x] Add Users
79-
- [x] Add Tags
80-
- [ ] Add Invitations
81-
- [x] Add base docs site
82-
- [x] Add Codecov
83-
- [x] Add PyPI
73+
See full documentation with examples [here](https://fider-py.readthedocs.io/en/latest/).

docs/source/code_overview/client.rst

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,16 @@
11
Fider Client
22
============
33

4+
.. toctree::
5+
:maxdepth: 1
6+
:caption: Resources
7+
8+
resources/posts
9+
resources/users
10+
resources/tags
11+
resources/votes
12+
resources/comments
13+
414
.. note::
515

616
Although the Fider API client does not require an api token, it is recommended to use one so you don't have to re-initialize another client for authenticated routes.
Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
Comments
2+
========
3+
4+
.. automodule:: fiderpy.v1.resources.comments.service
5+
:members:
Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
Posts
2+
=====
3+
4+
.. automodule:: fiderpy.v1.resources.posts.service
5+
:members:
Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
Tags
2+
====
3+
4+
.. automodule:: fiderpy.v1.resources.tags.service
5+
:members:
Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
Users
2+
=====
3+
4+
.. automodule:: fiderpy.v1.resources.users.service
5+
:members:
Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
Votes
2+
=====
3+
4+
.. automodule:: fiderpy.v1.resources.votes.service
5+
:members:

fiderpy/fider.py

Lines changed: 65 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,13 +5,77 @@
55
from fiderpy.v1.utils.http import RequestsClient
66

77

8-
__version__ = "0.0.1"
8+
__version__ = "0.0.3"
99
logger = logging.getLogger(__name__)
1010

1111

1212
class Fider:
1313
"""API Client for Fider
1414
15+
Example:
16+
17+
.. code-block:: python
18+
19+
>>> from fiderpy import Fider
20+
21+
# Initialize the client
22+
>>> fider = Fider(host="https://demo.fider.io", api_key="1234567890")
23+
24+
# Get all posts
25+
>>> fider.posts.get_posts()
26+
27+
# Get a single post
28+
>>> fider.posts.get_post(request=GetPostRequest(number=1))
29+
30+
# Get all users
31+
>>> fider.users.get_users()
32+
33+
# Create a new user
34+
>>> fider.users.create_user(request=CreateUserRequest(name="John Doe", email="[email protected]", reference="1234567890"))
35+
36+
# Create a new post
37+
>>> fider.posts.create_post(request=CreatePostRequest(title="Test Post", description="This is a test post"))
38+
39+
# Delete a post
40+
>>> fider.posts.delete_post(request=DeletePostRequest(number=1))
41+
42+
# Get all votes
43+
>>> fider.votes.get_votes(request=GetVotesRequest(number=1))
44+
45+
# Create a vote
46+
>>> fider.votes.create_vote(request=CreateVoteRequest(number=1))
47+
48+
# Delete a vote
49+
>>> fider.votes.delete_vote(request=DeleteVoteRequest(number=1))
50+
51+
# Get all comments
52+
>>> fider.comments.get_comments(request=GetCommentsRequest(number=1))
53+
54+
# Get a single comment
55+
>>> fider.comments.get_comment(request=GetCommentRequest(number=1, id=1))
56+
57+
# Create a comment
58+
>>> fider.comments.create_comment(request=CreateCommentRequest(number=1, content="This is a test comment"))
59+
60+
# Edit a comment
61+
>>> fider.comments.edit_comment(request=EditCommentRequest(number=1, id=1, content="This is a test comment"))
62+
63+
# Delete a comment
64+
>>> fider.comments.delete_comment(request=DeleteCommentRequest(number=1, id=1))
65+
66+
# Get all tags
67+
>>> fider.tags.get_tags()
68+
69+
# Create a tag
70+
>>> fider.tags.create_tag(request=CreateTagRequest(name="Test Tag", color="#FF0000", is_public=True))
71+
72+
# Edit a tag
73+
>>> fider.tags.edit_tag(request=EditTagRequest(slug="test-tag", name="Test Tag", color="#FF0000", is_public=True))
74+
75+
# Delete a tag
76+
>>> fider.tags.delete_tag(request=DeleteTagRequest(slug="test-tag"))
77+
78+
1579
:param host: Base URL of the Fider instance (no trailing slash)
1680
:param api_key: API key for Fider. See here https://docs.fider.io/api/authentication
1781
:param api_version: API version to use. Defaults to "v1"

fiderpy/v1/resources/comments/service.py

Lines changed: 139 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,25 +17,120 @@
1717

1818

1919
class CommentsService:
20+
"""Service class for comments
21+
22+
Developers has option to use this service directly or use the ``Fider`` client.
23+
"""
24+
2025
def __init__(self, client: "CommentsClient") -> None:
2126
self.client = client
2227

2328
@as_fider(GetCommentsResponseAdapter)
2429
def get_comments(
2530
self, request: request.GetCommentsRequest
2631
) -> FiderAPIResponse[list[response.Comment]]:
32+
"""Get all comments for a post
33+
34+
Example:
35+
36+
.. code-block:: python
37+
38+
>>> from fiderpy.v1.resources.comments import request
39+
>>> from fiderpy.v1.resources.comments.service import CommentsService
40+
41+
>>> service = CommentsService(client=CommentsClient(http=http))
42+
>>> request = GetCommentsRequest(number=1)
43+
>>> response = service.get_comments(request=request)
44+
>>> response
45+
FiderAPIResponse(
46+
message="Successfully fetched data!",
47+
data=[
48+
Comment(
49+
id=1,
50+
content="This is a comment",
51+
created_at="2021-01-01T00:00:00Z",
52+
user=User(
53+
id=1,
54+
name="John Doe",
55+
role="user"
56+
)
57+
),
58+
],
59+
errors=None
60+
)
61+
62+
:param request: :class:`fiderpy.v1.resources.comments.request.GetCommentsRequest`
63+
:return: :class:`fiderpy.v1.utils.domain.FiderAPIResponse`
64+
"""
2765
return self.client.get_comments(number=request.number)
2866

2967
@as_fider(GetCommentResponseAdapter)
3068
def get_comment(
3169
self, request: request.GetCommentRequest
3270
) -> FiderAPIResponse[response.Comment]:
71+
"""Get a single comment
72+
73+
Example:
74+
75+
.. code-block:: python
76+
77+
>>> from fiderpy.v1.resources.comments import request
78+
>>> from fiderpy.v1.resources.comments.service import CommentsService
79+
80+
>>> service = CommentsService(client=CommentsClient(http=http))
81+
>>> request = GetCommentRequest(number=1, id=1)
82+
>>> response = service.get_comment(request=request)
83+
>>> response
84+
FiderAPIResponse(
85+
message="Successfully fetched data!",
86+
data=Comment(
87+
id=1,
88+
content="This is a comment",
89+
created_at="2021-01-01T00:00:00Z",
90+
user=User(
91+
id=1,
92+
name="John Doe",
93+
role="user"
94+
)
95+
),
96+
errors=None
97+
)
98+
99+
:param request: :class:`fiderpy.v1.resources.comments.request.GetCommentRequest`
100+
:return: :class:`fiderpy.v1.utils.domain.FiderAPIResponse`
101+
"""
33102
return self.client.get_comment(number=request.number, id=request.id)
34103

35104
@as_fider(CreateCommentResponseAdapter)
36105
def create_comment(
37106
self, request: request.CreateCommentRequest
38107
) -> FiderAPIResponse[response.CreateCommentResponse]:
108+
"""Create a new comment
109+
110+
Example:
111+
112+
.. code-block:: python
113+
114+
>>> from fiderpy.v1.resources.comments import request
115+
>>> from fiderpy.v1.resources.comments.service import CommentsService
116+
117+
>>> service = CommentsService(client=CommentsClient(http=http))
118+
>>> request = CreateCommentRequest(number=1, content="This is a comment")
119+
>>> response = service.create_comment(request=request)
120+
>>> response
121+
FiderAPIResponse(
122+
message="Successfully created comment!",
123+
data=CreateCommentResponse(
124+
id=1,
125+
content="This is a comment",
126+
created_at="2021-01-01T00:00:00Z"
127+
),
128+
errors=None
129+
)
130+
131+
:param request: :class:`fiderpy.v1.resources.comments.request.CreateCommentRequest`
132+
:return: :class:`fiderpy.v1.utils.domain.FiderAPIResponse`
133+
"""
39134
request_data: RequestExtra = {
40135
"json": {"content": request.content},
41136
}
@@ -45,6 +140,28 @@ def create_comment(
45140
def edit_comment(
46141
self, request: request.EditCommentRequest
47142
) -> FiderAPIResponse[dict]:
143+
"""Edit an existing comment
144+
145+
Example:
146+
147+
.. code-block:: python
148+
149+
>>> from fiderpy.v1.resources.comments import request
150+
>>> from fiderpy.v1.resources.comments.service import CommentsService
151+
152+
>>> service = CommentsService(client=CommentsClient(http=http))
153+
>>> request = EditCommentRequest(number=1, id=1, content="Updated comment")
154+
>>> response = service.edit_comment(request=request)
155+
>>> response
156+
FiderAPIResponse(
157+
message="Successfully updated comment!",
158+
data={},
159+
errors=None
160+
)
161+
162+
:param request: :class:`fiderpy.v1.resources.comments.request.EditCommentRequest`
163+
:return: :class:`fiderpy.v1.utils.domain.FiderAPIResponse`
164+
"""
48165
request_data: RequestExtra = {
49166
"json": {"content": request.content},
50167
}
@@ -56,4 +173,26 @@ def edit_comment(
56173
def delete_comment(
57174
self, request: request.DeleteCommentRequest
58175
) -> FiderAPIResponse[dict]:
176+
"""Delete a comment
177+
178+
Example:
179+
180+
.. code-block:: python
181+
182+
>>> from fiderpy.v1.resources.comments import request
183+
>>> from fiderpy.v1.resources.comments.service import CommentsService
184+
185+
>>> service = CommentsService(client=CommentsClient(http=http))
186+
>>> request = DeleteCommentRequest(number=1, id=1)
187+
>>> response = service.delete_comment(request=request)
188+
>>> response
189+
FiderAPIResponse(
190+
message="Successfully deleted comment!",
191+
data={},
192+
errors=None
193+
)
194+
195+
:param request: :class:`fiderpy.v1.resources.comments.request.DeleteCommentRequest`
196+
:return: :class:`fiderpy.v1.utils.domain.FiderAPIResponse`
197+
"""
59198
return self.client.delete_comment(number=request.number, id=request.id)

fiderpy/v1/resources/posts/client.py

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,20 +6,40 @@
66

77

88
class PostsClient:
9+
"""API clients for /posts
10+
11+
https://docs.fider.io/api/posts/
12+
"""
13+
914
def __init__(self, http: IHttp) -> None:
1015
self.http = http
1116

1217
def get_posts(self, request: RequestExtra) -> list[FiderAPIResponseType]:
18+
"""Get all posts
19+
20+
:param request: Extra data to send with the request
21+
:return: :class:`fiderpy.v1.utils.types.FiderAPIResponseType`
22+
"""
1323
response = self.http.send(path=FiderApiUrls.POSTS, **request)
1424

1525
return cast(list[FiderAPIResponseType], response.json())
1626

1727
def get_post(self, number: int) -> FiderAPIResponseType:
28+
"""Get a single post
29+
30+
:param number: Post number
31+
:return: :class:`fiderpy.v1.utils.types.FiderAPIResponseType`
32+
"""
1833
response = self.http.send(path=f"{FiderApiUrls.POSTS}/{number}")
1934

2035
return cast(FiderAPIResponseType, response.json())
2136

2237
def create_post(self, request: RequestExtra) -> FiderAPIResponseType:
38+
"""Create a new post
39+
40+
:param request: Extra data to send with the request
41+
:return: :class:`fiderpy.v1.utils.types.FiderAPIResponseType`
42+
"""
2343
response = self.http.send(path=FiderApiUrls.POSTS, method="POST", **request)
2444

2545
return cast(FiderAPIResponseType, response.json())

0 commit comments

Comments
 (0)