1
- from dataclasses import dataclass , asdict
2
1
from datetime import datetime
3
2
from dateutil import parser
4
- from pythorhead .utils import json_serializer
5
-
6
- import json
3
+ from pythorhead .classes .base import LemmyBaseClass
4
+ from dataclasses import dataclass
7
5
8
6
@dataclass
9
- class LemmyUser :
7
+ class LemmyUser ( LemmyBaseClass ) :
10
8
id : int
11
9
name : str
12
10
banned : bool
@@ -16,28 +14,29 @@ class LemmyUser:
16
14
deleted : bool
17
15
bot_account : bool
18
16
instance_id : int
19
- is_admin : bool
17
+ is_admin : bool = False
20
18
display_name : str | None = None
21
19
bio : str | None = None
22
20
avatar : str | None = None
23
21
banner : str | None = None
24
22
matrix_user_id : str | None = None
25
23
ban_expires : datetime | None = None
26
24
updated : datetime | None = None
25
+ #TODO Convert to classes
27
26
comments : list [dict ] = None
28
27
posts : list [dict ] = None
29
- # The owning lemmy instance. We use it to reach the API classes
30
- lemmy = None
31
28
32
29
@classmethod
33
- def from_dict (cls , person_dict : dict , lemmy ) -> 'LemmyUser' :
30
+ def from_dict (cls , data_dict : dict , lemmy ) -> 'LemmyUser' :
34
31
# Convert string to datetime for ban_expires if it exists
32
+
35
33
for key in {'ban_expires' , 'updates' , 'published' }:
36
- if key in person_dict and person_dict [key ]:
37
- person_dict [key ] = parser .isoparse (person_dict [key ])
38
- new_user = cls (** person_dict )
39
- new_user .lemmy = lemmy
40
- return new_user
34
+ if key in data_dict and data_dict [key ]:
35
+ data_dict [key ] = parser .isoparse (data_dict [key ])
36
+ new_class = cls (** data_dict )
37
+ new_class ._lemmy = lemmy
38
+ new_class ._origin = data_dict
39
+ return new_class
41
40
42
41
def refresh (self ) -> None :
43
42
"""
@@ -46,7 +45,7 @@ def refresh(self) -> None:
46
45
Args:
47
46
new_data: Dictionary containing updated user data
48
47
"""
49
- fresh_data = self .lemmy .user .get (person_id = self .id )
48
+ fresh_data = self ._lemmy .user .get (person_id = self .id )
50
49
user_dict = fresh_data ['person_view' ]['person' ]
51
50
user_dict ['is_admin' ] = fresh_data ['person_view' ]['is_admin' ]
52
51
user_dict ['comments' ] = fresh_data ['comments' ]
@@ -60,15 +59,15 @@ def refresh(self) -> None:
60
59
61
60
62
61
def purge (self ) -> None :
63
- self .lemmy .user .purge (person_id = self .person_id )
62
+ self ._lemmy .user .purge (person_id = self .person_id )
64
63
65
64
def ban (self ,
66
65
ban : bool = True ,
67
66
expires : datetime | int | None = None ,
68
67
reason : str | None = None ,
69
68
remove_data : bool | None = None
70
69
) -> None :
71
- self .lemmy .user .ban (
70
+ self ._lemmy .user .ban (
72
71
person_id = self .person_id ,
73
72
ban = ban ,
74
73
expires = expires ,
@@ -78,9 +77,9 @@ def ban(self,
78
77
self .refresh ()
79
78
80
79
def update (self ):
81
- if self .lemmy .user ._requestor .logged_in_username != self .name :
80
+ if self ._lemmy .user ._requestor .logged_in_username != self .name :
82
81
raise Exception ("Cannot update user details for anyone but the currently logged-in user." )
83
- self .lemmy .user .save_user_settings (
82
+ self ._lemmy .user .save_user_settings (
84
83
avatar = self .avatar ,
85
84
banner = self .banner ,
86
85
display_name = self .display_name ,
@@ -91,20 +90,13 @@ def update(self):
91
90
self .refresh ()
92
91
93
92
def set_settings (self , ** kwargs ):
94
- if self .lemmy .user ._requestor .logged_in_username != self .name :
93
+ if self ._lemmy .user ._requestor .logged_in_username != self .name :
95
94
raise Exception ("Cannot update user settings for anyone but the currently logged-in user." )
96
- self .lemmy .user .save_user_settings (** kwargs )
95
+ self ._lemmy .user .save_user_settings (** kwargs )
97
96
self .refresh ()
98
-
99
- def asdict (self ):
100
- return asdict (self )
101
-
102
- def asjson (self , indent = 4 ):
103
- selfdict = self .asdict ()
104
- return json .dumps (selfdict , indent = indent , default = json_serializer )
105
97
106
98
def pm (self , content ):
107
- self .lemmy .private_message (
99
+ self ._lemmy .private_message (
108
100
content = content ,
109
101
recipient_id = self .id ,
110
102
)
0 commit comments