Skip to content

Commit 36c7c0e

Browse files
committed
Bug fix & Add pip desc file
1 parent 8668f22 commit 36c7c0e

14 files changed

Lines changed: 110 additions & 68 deletions

File tree

.gitignore

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,2 @@
1-
.venv
2-
.idea
3-
cli.py
1+
StealthIMSDK.egg-info
2+
__pycache__

StealthIM/__init__.py

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
import logging
2+
3+
logger = logging.getLogger(__name__)
4+
5+
from . import apis
6+
7+
from .user import User
8+
from .server import Server
9+
from .group import Group
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
11
from . import common
22
from . import user
3-
from . import util
3+
from . import util
4+
from . import group
Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,8 @@
33

44
import aiohttp
55

6+
from StealthIM import logger
7+
68

79
@dataclasses.dataclass
810
class Result:
@@ -38,17 +40,22 @@ async def request(
3840
Raises:
3941
RuntimeError: If the server returns an internal error too many times.
4042
"""
43+
logger.debug(f"Request url: {url}")
44+
logger.debug(f"Method: {method}, Data: {data}, Body: {body}, Header: {headers}")
4145
current_retry = 0
42-
while True:
46+
while current_retry < retry:
4347
async with aiohttp.ClientSession() as session:
4448
async with session.request(method, url, data=data, headers=headers, json=body) as response:
4549
if response.status != 200:
4650
raise RuntimeError(f"Request failed with status: {response.status}")
4751
response_data = await response.json()
4852

4953
if 900 <= response_data["result"]["code"] <= 999:
54+
logger.error(f"Request failed with code: {response_data['result']['code']}")
55+
logger.error(f"Request failed with data: {response_data}")
5056
current_retry += 1
5157
continue
5258

5359
return response_data
60+
logger.error(f"Request to {url} failed after {retry} retries.")
5461
raise RuntimeError(f"Request failed with code: {response_data['result']['code']}")
Lines changed: 9 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22
import enum
33

44
from .common import request, Result, NoValResult
5-
from .. import logger
5+
from StealthIM import logger
66

77

88
@dataclasses.dataclass
@@ -79,13 +79,15 @@ async def get_group_info(
7979
response_data = await request(api_address, "GET", headers=header)
8080
logger.debug(f"Response data: {response_data}")
8181

82+
members = [
83+
GroupMember(
84+
name=member["name"],
85+
type=GroupMemberType(member.get("type", 0)),
86+
) for member in response_data["members"]
87+
] if response_data["result"]["code"] == 800 else None
88+
8289
return GroupInfoResult(
83-
members=[
84-
GroupMember(
85-
name=member["name"],
86-
type=GroupMemberType(member.get("type", 0)),
87-
) for member in response_data["members"]
88-
],
90+
members=members,
8991
result=Result(
9092
code=response_data["result"]["code"],
9193
msg=response_data["result"]["msg"]
Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -91,7 +91,7 @@ async def get_message(
9191
direction: int
9292
):
9393
# noinspection PyStatementEffect
94-
from_id + direction # currently unused
94+
direction # currently unused
9595

9696
api_address = f'{url}/api/v1/message/{groupid}?msgid={from_id}'
9797
logger.debug(f"Called API get_message with url {api_address}")
Lines changed: 20 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,13 +2,14 @@
22
from typing import Optional
33

44
from .common import Result, request, NoValResult
5-
from .. import logger
5+
from StealthIM import logger
66

77

88
RegisterResult = NoValResult
99

1010
@dataclasses.dataclass
1111
class UserInfo:
12+
result: Result
1213
create_time: str
1314
email: str
1415
nickname: str
@@ -23,6 +24,7 @@ class LoginResult:
2324

2425
@dataclasses.dataclass
2526
class UserPublicInfo:
27+
result: Result
2628
nickname: str
2729

2830
ChangePasswordResult = NoValResult
@@ -102,6 +104,10 @@ async def login(
102104
logger.debug(f"Response data: {response_data}")
103105

104106
info = UserInfo(
107+
result=Result(
108+
code=800,
109+
msg=""
110+
),
105111
create_time=response_data["user_info"]["create_time"],
106112
email=response_data["user_info"]["email"],
107113
nickname=response_data["user_info"]["nickname"],
@@ -141,6 +147,10 @@ async def get_self_info(
141147
logger.debug(f"Response data: {response_data}")
142148

143149
return UserInfo(
150+
result=Result(
151+
code=response_data["result"]["code"],
152+
msg=response_data["result"]["msg"]
153+
),
144154
create_time=response_data["user_info"]["create_time"],
145155
email=response_data["user_info"]["email"],
146156
nickname=response_data["user_info"]["nickname"],
@@ -172,8 +182,16 @@ async def get_user_info(
172182
response_data = await request(api_address, "GET", headers=header)
173183
logger.debug(f"Response data: {response_data}")
174184

185+
nickname = None
186+
if response_data["result"]["code"] == 800:
187+
nickname = response_data["user_info"]["nickname"]
188+
175189
return UserPublicInfo(
176-
nickname=response_data["user_info"]["nickname"]
190+
result=Result(
191+
code=response_data["result"]["code"],
192+
msg=response_data["result"]["msg"]
193+
),
194+
nickname=nickname
177195
)
178196

179197
async def change_password(
Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
import aiohttp
22

3-
from .. import logger
3+
from StealthIM import logger
44

55
async def ping(url: str) -> bool:
66
"""
Lines changed: 21 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
1-
from StealthIM import User, apis
2-
from StealthIM.apis.group import GroupMember, GroupInfoResult, GroupPublicInfoResult, InviteGroupResult, \
1+
import StealthIM
2+
from StealthIM import User
3+
from StealthIM.apis.group import GroupInfoResult, GroupPublicInfoResult, InviteGroupResult, \
34
GroupMemberType, SetMemberRoleResult, KickMemberResult, ChangeGroupNameResult, ChangeGroupPasswordResult
45
from StealthIM.apis.message import SendMessageResult
56

@@ -24,7 +25,7 @@ async def create(cls, user: User, group_name: str) -> "Group":
2425
Raises:
2526
RuntimeError: If the request failed.
2627
"""
27-
res = await apis.group.create_group(user.server.url, user.session, group_name)
28+
res = await StealthIM.apis.group.create_group(user.server.url, user.session, group_name)
2829
if res.result.code != 800:
2930
raise RuntimeError(res.result.msg)
3031
return cls(user, res.groupid)
@@ -45,7 +46,7 @@ async def join(cls, user: User, group_id: int, password: str) -> "Group":
4546
Raises:
4647
RuntimeError: If the request failed.
4748
"""
48-
res = await apis.group.join_group(user.server.url, user.session, group_id, password)
49+
res = await StealthIM.apis.group.join_group(user.server.url, user.session, group_id, password)
4950
if res.result.code != 800:
5051
raise RuntimeError(res.result.msg)
5152
return cls(user, group_id)
@@ -57,7 +58,7 @@ async def get_members(self) -> GroupInfoResult:
5758
Returns:
5859
Members: The members of the group.
5960
"""
60-
return await apis.group.get_group_info(self.user.server.url, self.user.session, self.group_id)
61+
return await StealthIM.apis.group.get_group_info(self.user.server.url, self.user.session, self.group_id)
6162

6263
async def get_info(self) -> GroupPublicInfoResult:
6364
"""
@@ -66,39 +67,42 @@ async def get_info(self) -> GroupPublicInfoResult:
6667
Returns:
6768
Info: The info of the group.
6869
"""
69-
return await apis.group.get_group_public_info(self.user.server.url, self.user.session, self.group_id)
70+
return await StealthIM.apis.group.get_group_public_info(self.user.server.url, self.user.session, self.group_id)
7071

7172
async def invite(self, username: str) -> InviteGroupResult:
72-
return await apis.group.invite_group(self.user.server.url, self.user.session, self.group_id, username)
73+
return await StealthIM.apis.group.invite_group(self.user.server.url, self.user.session, self.group_id, username)
7374

7475
async def set_member_role(self, username: str, role: GroupMemberType) -> SetMemberRoleResult:
75-
return await apis.group.set_user_role(self.user.server.url, self.user.session, self.group_id, username, role)
76+
return await StealthIM.apis.group.set_user_role(self.user.server.url, self.user.session, self.group_id,
77+
username, role)
7678

7779
async def kick(self, username: str) -> KickMemberResult:
78-
return await apis.group.kick_user(self.user.server.url, self.user.session, self.group_id, username)
80+
return await StealthIM.apis.group.kick_user(self.user.server.url, self.user.session, self.group_id, username)
7981

8082
async def change_name(self, new_name: str) -> ChangeGroupNameResult:
81-
return await apis.group.change_group_name(self.user.server.url, self.user.session, self.group_id, new_name)
83+
return await StealthIM.apis.group.change_group_name(self.user.server.url, self.user.session, self.group_id,
84+
new_name)
8285

8386
async def change_password(self, new_password: str) -> ChangeGroupPasswordResult:
84-
return await apis.group.change_group_password(self.user.server.url, self.user.session, self.group_id, new_password)
87+
return await StealthIM.apis.group.change_group_password(self.user.server.url, self.user.session, self.group_id,
88+
new_password)
8589

8690
async def send_text(self, message: str) -> SendMessageResult:
87-
return await apis.message.send_message(
91+
return await StealthIM.apis.message.send_message(
8892
self.user.server.url,
8993
self.user.session,
9094
self.group_id,
9195
message,
92-
apis.message.MessageType.Text
96+
StealthIM.apis.message.MessageType.Text
9397
)
9498

95-
async def receive_text(self):
96-
gen = apis.message.get_message(
99+
async def receive_text(self, from_id: int = 0):
100+
gen = StealthIM.apis.message.get_message(
97101
self.user.server.url,
98102
self.user.session,
99103
self.group_id,
100-
0,
104+
from_id,
101105
0
102106
)
103107
async for data in gen:
104-
yield data
108+
yield data
Lines changed: 6 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,8 @@
1-
import asyncio
21
from typing import Optional
32

4-
from . import apis
5-
from .apis.user import RegisterResult, UserInfo
6-
from .user import User
3+
from StealthIM.apis import user, util
4+
from StealthIM.apis.user import RegisterResult
5+
from StealthIM.user import User
76

87

98
class Server:
@@ -26,7 +25,7 @@ async def ping(self):
2625
Returns:
2726
bool: True if the server is reachable, False otherwise.
2827
"""
29-
return await apis.util.ping(self.url)
28+
return await util.ping(self.url)
3029

3130
async def register(
3231
self,
@@ -52,7 +51,7 @@ async def register(
5251
Raises:
5352
RuntimeError: If the registration fails for any reason.
5453
"""
55-
return await apis.user.register(self.url, username, password, nickname, email, phone_number)
54+
return await user.register(self.url, username, password, nickname, email, phone_number)
5655

5756
async def login(
5857
self,
@@ -72,7 +71,7 @@ async def login(
7271
Raises:
7372
RuntimeError: If the login fails for any other reason.
7473
"""
75-
login_data = await apis.user.login(self.url, username, password)
74+
login_data = await user.login(self.url, username, password)
7675
if login_data.result.code in (1201, 1203):
7776
return None
7877
if login_data.result.code != 800:

0 commit comments

Comments
 (0)