Skip to content
This repository has been archived by the owner on Jan 29, 2024. It is now read-only.

Commit

Permalink
Fix #5
Browse files Browse the repository at this point in the history
  • Loading branch information
Kevo committed Oct 4, 2022
1 parent 2c4e17a commit 9153489
Show file tree
Hide file tree
Showing 54 changed files with 12,748 additions and 14,416 deletions.
187 changes: 113 additions & 74 deletions documentation/pyflarum.html

Large diffs are not rendered by default.

69 changes: 37 additions & 32 deletions documentation/pyflarum/client.html

Large diffs are not rendered by default.

73 changes: 39 additions & 34 deletions documentation/pyflarum/client/custom_types.html

Large diffs are not rendered by default.

16 changes: 11 additions & 5 deletions documentation/pyflarum/client/extensions.html

Large diffs are not rendered by default.

1,022 changes: 491 additions & 531 deletions documentation/pyflarum/client/extensions/absolutely_all.html

Large diffs are not rendered by default.

1,597 changes: 680 additions & 917 deletions documentation/pyflarum/client/extensions/admin.html

Large diffs are not rendered by default.

255 changes: 114 additions & 141 deletions documentation/pyflarum/client/extensions/advanced_search.html

Large diffs are not rendered by default.

392 changes: 183 additions & 209 deletions documentation/pyflarum/client/extensions/commands.html

Large diffs are not rendered by default.

16 changes: 11 additions & 5 deletions documentation/pyflarum/client/extensions/flarum.html

Large diffs are not rendered by default.

Large diffs are not rendered by default.

Large diffs are not rendered by default.

216 changes: 97 additions & 119 deletions documentation/pyflarum/client/extensions/flarum/Blomstra_Realtime.html

Large diffs are not rendered by default.

477 changes: 228 additions & 249 deletions documentation/pyflarum/client/extensions/flarum/Flarum_Approval.html

Large diffs are not rendered by default.

355 changes: 160 additions & 195 deletions documentation/pyflarum/client/extensions/flarum/Flarum_Flags.html

Large diffs are not rendered by default.

614 changes: 288 additions & 326 deletions documentation/pyflarum/client/extensions/flarum/Flarum_Likes.html

Large diffs are not rendered by default.

482 changes: 230 additions & 252 deletions documentation/pyflarum/client/extensions/flarum/Flarum_Lock.html

Large diffs are not rendered by default.

217 changes: 97 additions & 120 deletions documentation/pyflarum/client/extensions/flarum/Flarum_Markdown.html

Large diffs are not rendered by default.

464 changes: 221 additions & 243 deletions documentation/pyflarum/client/extensions/flarum/Flarum_Sticky.html

Large diffs are not rendered by default.

519 changes: 248 additions & 271 deletions documentation/pyflarum/client/extensions/flarum/Flarum_Subscriptions.html

Large diffs are not rendered by default.

435 changes: 191 additions & 244 deletions documentation/pyflarum/client/extensions/flarum/Flarum_Suspend.html

Large diffs are not rendered by default.

1,344 changes: 510 additions & 834 deletions documentation/pyflarum/client/extensions/flarum/Flarum_Tags.html

Large diffs are not rendered by default.

289 changes: 113 additions & 176 deletions documentation/pyflarum/client/extensions/flarum/FoF_BestAnswer.html

Large diffs are not rendered by default.

331 changes: 121 additions & 210 deletions documentation/pyflarum/client/extensions/flarum/FoF_Byobu.html

Large diffs are not rendered by default.

188 changes: 76 additions & 112 deletions documentation/pyflarum/client/extensions/flarum/FoF_Merge.html

Large diffs are not rendered by default.

Large diffs are not rendered by default.

265 changes: 114 additions & 151 deletions documentation/pyflarum/client/extensions/flarum/FoF_Spamblock.html

Large diffs are not rendered by default.

188 changes: 76 additions & 112 deletions documentation/pyflarum/client/extensions/flarum/FoF_Split.html

Large diffs are not rendered by default.

468 changes: 193 additions & 275 deletions documentation/pyflarum/client/extensions/flarum/FoF_UserBio.html

Large diffs are not rendered by default.

246 changes: 105 additions & 141 deletions documentation/pyflarum/client/extensions/flarum/FoF_UsernameRequest.html

Large diffs are not rendered by default.

962 changes: 391 additions & 571 deletions documentation/pyflarum/client/extensions/flarum/Malago_Achievements.html

Large diffs are not rendered by default.

266 changes: 118 additions & 148 deletions documentation/pyflarum/client/extensions/watch.html

Large diffs are not rendered by default.

16 changes: 11 additions & 5 deletions documentation/pyflarum/client/flarum.html

Large diffs are not rendered by default.

850 changes: 428 additions & 422 deletions documentation/pyflarum/client/flarum/core.html

Large diffs are not rendered by default.

3,000 changes: 1,503 additions & 1,497 deletions documentation/pyflarum/client/flarum/core/discussions.html

Large diffs are not rendered by default.

381 changes: 189 additions & 192 deletions documentation/pyflarum/client/flarum/core/filters.html

Large diffs are not rendered by default.

1,118 changes: 566 additions & 552 deletions documentation/pyflarum/client/flarum/core/forum.html

Large diffs are not rendered by default.

817 changes: 388 additions & 429 deletions documentation/pyflarum/client/flarum/core/groups.html

Large diffs are not rendered by default.

855 changes: 430 additions & 425 deletions documentation/pyflarum/client/flarum/core/notifications.html

Large diffs are not rendered by default.

2,136 changes: 1,066 additions & 1,070 deletions documentation/pyflarum/client/flarum/core/posts.html

Large diffs are not rendered by default.

961 changes: 489 additions & 472 deletions documentation/pyflarum/client/flarum/core/users.html

Large diffs are not rendered by default.

2,931 changes: 1,438 additions & 1,493 deletions documentation/pyflarum/client/session.html

Large diffs are not rendered by default.

193 changes: 98 additions & 95 deletions documentation/pyflarum/datetime_conversions.html

Large diffs are not rendered by default.

443 changes: 216 additions & 227 deletions documentation/pyflarum/error_handler.html

Large diffs are not rendered by default.

583 changes: 261 additions & 322 deletions documentation/pyflarum/extensions.html

Large diffs are not rendered by default.

2 changes: 1 addition & 1 deletion documentation/search.js

Large diffs are not rendered by default.

1 change: 1 addition & 0 deletions pyflarum/client/extensions/flarum/Malago_Achievements.py
Original file line number Diff line number Diff line change
Expand Up @@ -144,6 +144,7 @@ def get_all_achievements(self) -> t.List[Achievement]:
class AchievementsExtension(ExtensionMixin):
AUTHOR = 'malago'
NAME = 'achievements'
ID = f"{AUTHOR}-{NAME}"

SOFT_DEPENDENCIES = [AdminExtension]

Expand Down
2 changes: 1 addition & 1 deletion pyflarum/client/flarum/core/filters.py
Original file line number Diff line number Diff line change
Expand Up @@ -54,7 +54,7 @@ def to_dict(self) -> dict:

if self.query:
__data["filter[q]"] = self.query

if self.ids:
__data["filter[id]"] = ','.join(map(str, self.ids))

Expand Down
39 changes: 16 additions & 23 deletions pyflarum/client/session.py
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,7 @@
from .flarum.core.filters import Filter


from ..error_handler import parse_request
from ..error_handler import parse_request, FlarumError
from ..datetime_conversions import datetime_to_flarum


Expand Down Expand Up @@ -54,6 +54,7 @@ def __init__(self, forum_url: 'str', username_or_email: t.Optional[str]=None, pa
self.api_endpoint = api_endpoint
self.username_or_email = username_or_email
self.session = session_object
self.user_id = None

self.session.headers.update({
"User-Agent": user_agent
Expand Down Expand Up @@ -85,7 +86,13 @@ def authenticate(self, username_or_email: t.Optional[str]=None, password: t.Opti
identification_data = {"identification": username_or_email, "password": password}

raw = self.session.post(url=f'{self.forum_url}/api/token', json=identification_data)
token_data = parse_request(raw)

try:
token_data = parse_request(raw)

except FlarumError as e:
raise FlarumError(f"Failed to login. Are your credentials correct/does your account exist? The status code was: {e.status}") from e


token = token_data.get("token", None)
user_id = token_data.get("userId", None)
Expand All @@ -100,6 +107,8 @@ def authenticate(self, username_or_email: t.Optional[str]=None, password: t.Opti
else:
self.is_authenticated = False

self.user_id = user_id

else:
self.session.headers.update({
"Authorization": None,
Expand Down Expand Up @@ -173,30 +182,14 @@ def _fetch_user_data(self) -> t.Optional[dict]:
Fetches your user's JSON data.
"""

if self.username_or_email:
filter = Filter(limit=1)

if '@' in self.username_or_email:
filter.query = f'email:{self.username_or_email}'

else:
filter.query = self.username_or_email


raw = self.session.get(f"{self.api_urls['users']}", params=filter.to_dict)
json = parse_request(raw)

for possible_user in json.get("data", [{}]):
if '@' in self.username_or_email:
if possible_user.get("attributes", {}).get("email", None) == self.username_or_email:
return possible_user
if self.user_id is None:
return None

else:
if possible_user.get("attributes", {}).get("username", None) == self.username_or_email:
return possible_user

raw = self.session.get(f"{self.api_urls['users']}/{self.user_id}")
json = parse_request(raw)

return None
return json.get('data', {})


def _update_user_data(self, new_data: dict) -> t.Union['FlarumUser', User]:
Expand Down
49 changes: 24 additions & 25 deletions pyflarum/error_handler.py
Original file line number Diff line number Diff line change
Expand Up @@ -35,7 +35,7 @@ def parse_request(response: 'Response') -> t.Union[dict, t.NoReturn]:
Parses the request as JSON, raises `FlarumError` if something went wrong.
"""

if not 200 <= response.status_code <= 204:
if not (200 <= response.status_code <= 204):
return handle_errors(status_code=response.status_code)

try:
Expand All @@ -56,44 +56,43 @@ def parse_request(response: 'Response') -> t.Union[dict, t.NoReturn]:
return json


def handle_errors(errors: t.Optional[t.List[t.Dict[str, str]]]=None, status_code: t.Optional[str]=None) -> t.NoReturn:
def handle_errors(errors: t.Optional[t.List[t.Dict[str, str]]]=[{}], status_code: t.Optional[str]=None):
"""
Handles Flarum & request related errors.
Returns `FlarumError` if an error was found, `True` otherwise.
"""

if errors:
for error in errors:
if status_code:
status = status_code
for error in errors:
if status_code:
status = status_code

else:
s = error.get('status', None)

if s:
status = int(s)
else:
s = error.get('status', None)

else:
status = 'Unknown'
if s:
status = int(s)

code = error.get('code', 0)
details = error.get("detail", "No further details.")
else:
status = 'Unknown'

code = error.get('code', 0)
details = error.get("detail", "No further details.")

if status == 400:
if code == 'invalid_parameter':
raise FlarumError(f'Error {status}: Invalid parameter. This usually happens when you provide an invalid filter when filtering data. {details}', status=status, code=code, details=details)

else:
raise FlarumError(f'Error {status}: {code} - {details}', status=status, code=code, details=details)
if status == 400:
if code == 'invalid_parameter':
raise FlarumError(f'Error {status}: Invalid parameter. This usually happens when you provide an invalid filter when filtering data. {details}', status=status, code=code, details=details)

else:
raise FlarumError(f'Error {status}: {code} - {details}', status=status, code=code, details=details)

if status == 401:
if code == 'not_authenticated':
raise FlarumError(f'Error {status}: Not authenticated. Please, check whether your authentication details (username & password) are correct and try again. {details}', status=status, code=code, details=details)

else:
raise FlarumError(f'Error {status}: {code} - {details}', status=status, code=code, details=details)
if status == 401:
if code == 'not_authenticated':
raise FlarumError(f'Error {status}: Not authenticated. Please, check whether your authentication details (username & password) are correct and try again. {details}', status=status, code=code, details=details)

else:
raise FlarumError(f'Error {status}: {code} - {details}', status=status, code=code, details=details)

else:
raise FlarumError(f'Error {status}: {code} - {details}', status=status, code=code, details=details)
2 changes: 1 addition & 1 deletion setup.py
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,7 @@
__copyright__ = "Copyright (c) 2021, SKevo"
__credits__ = ["SKevo"]
__license__ = "MIT"
__version__ = "v1.0.0"
__version__ = "v1.0.1"
__maintainer__ = "SKevo"
__email__ = "[email protected]"
__status__ = "4 - Beta"
Expand Down
2 changes: 1 addition & 1 deletion tests/client/test_absolutely_all_posts.py
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,7 @@ def test_absolutely_all_posts():
discussion = USER.get_discussion_by_id(7585)

for number, posts in enumerate(USER.get_all_posts_from_discussion(discussion)):
if number > 3: # 3 batches of posts
if number > 3: # only first 3 batches of posts
break

for post in posts:
Expand Down
2 changes: 1 addition & 1 deletion tests/client/test_forum_data.py
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,7 @@ def test_forum_data():

print("Groups:")
for group in USER.get_groups():
print(f" {group.nameSingular}")
print(f"• {group.nameSingular}")


if __name__ == "__main__":
Expand Down
35 changes: 0 additions & 35 deletions tests/client/test_spamblock.py

This file was deleted.

5 changes: 0 additions & 5 deletions tests/client/test_upload.py
Original file line number Diff line number Diff line change
Expand Up @@ -20,11 +20,6 @@ def test_upload():
updated_user = USER.upload_user_avatar(birb_image)
print(updated_user.data.avatarUrl)

# ...or for someone else:
_user = USER.get_user_by_id(3)
USER.upload_user_avatar(birb_image, user=_user)
print(USER.data.id)

# Also, why not upload it as logo?
USER.upload_logo(birb_image)

Expand Down

0 comments on commit 9153489

Please sign in to comment.