Skip to content

Commit 66590ae

Browse files
Migrate poetry to uv:
Update BaseModels
1 parent 04dc3b9 commit 66590ae

17 files changed

Lines changed: 403 additions & 909 deletions

examples/sms/sms.py

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1,11 @@
1-
print("test")
1+
2+
from solapi.message_service import SolapiMessageService
3+
from solapi.model.message import Message
4+
5+
test = SolapiMessageService(api_key="", api_secret="")
6+
test2 = Message(
7+
from_="029302266",
8+
to="01012345678",
9+
text="test"
10+
)
11+
test.send(test2)

poetry.lock

Lines changed: 0 additions & 471 deletions
This file was deleted.

pyproject.toml

Lines changed: 6 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,6 @@ authors = [
66
{ name = "SOLAPI Team", email = "contact@solapi.com" }
77
]
88
classifiers = [
9-
'Development Status :: 5 - Production/Stable',
109
'Programming Language :: Python',
1110
'Programming Language :: Python :: Implementation :: CPython',
1211
'Programming Language :: Python :: Implementation :: PyPy',
@@ -27,17 +26,15 @@ classifiers = [
2726
readme = "README.md"
2827
requires-python = ">=3.9"
2928
dependencies = [
30-
"requests (>=2.32.3,<3.0.0)",
3129
"httpx (>=0.28.1,<0.29.0)",
3230
"pydantic (>=2.10.6,<3.0.0)"
3331
]
3432

35-
[tool.poetry]
36-
packages = [{ include = "solapi", from = "src" }]
37-
38-
[tool.poetry.group.dev.dependencies]
39-
ruff = "^0.9.10"
33+
[project.optional-dependencies]
34+
dev = [
35+
"ruff>=0.11.0"
36+
]
4037

4138
[build-system]
42-
requires = ["poetry-core>=2.0.0,<3.0.0"]
43-
build-backend = "poetry.core.masonry.api"
39+
requires = ["hatchling"]
40+
build-backend = "hatchling.build"

.ruff.toml renamed to ruff.toml

Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,35 @@ ignore = []
2020
# 언더스코어로 시작하는 변수는 미사용 변수로 간주하지 않음
2121
dummy-variable-rgx = "^(_+|(_+[a-zA-Z0-9_]*[a-zA-Z0-9]+?))$"
2222

23+
exclude = [
24+
".bzr",
25+
".direnv",
26+
".eggs",
27+
".git",
28+
".git-rewrite",
29+
".hg",
30+
".ipynb_checkpoints",
31+
".mypy_cache",
32+
".nox",
33+
".pants.d",
34+
".pyenv",
35+
".pytest_cache",
36+
".pytype",
37+
".ruff_cache",
38+
".svn",
39+
".tox",
40+
".venv",
41+
".vscode",
42+
"__pypackages__",
43+
"_build",
44+
"buck-out",
45+
"build",
46+
"dist",
47+
"node_modules",
48+
"site-packages",
49+
"venv",
50+
]
51+
2352
[format]
2453
# 문자열에 큰따옴표 사용
2554
quote-style = "double"

solapi/lib/fetcher.py

Lines changed: 8 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
from enum import Enum
2-
from typing import Any, TypedDict, TypeVar
2+
from typing import Any, Optional, TypedDict
33

44
import httpx
55
from httpx import Response
@@ -14,22 +14,17 @@ class RequestMethod(str, Enum):
1414
DELETE = "DELETE"
1515

1616

17-
class RequestType(TypedDict):
17+
class RequestParameterType(TypedDict):
1818
method: RequestMethod
1919
url: str
2020

2121

22-
T = TypeVar("T")
23-
R = TypeVar("R")
24-
25-
26-
async def default_fetcher(
22+
def default_fetcher(
2723
auth_parameter: AuthenticationParameter,
28-
request: RequestType,
29-
data: T | None = None,
30-
) -> R:
24+
request: RequestParameterType,
25+
data: Optional[Any] = None,
26+
):
3127
"""
32-
3328
Args:
3429
auth_parameter: API Key, Api Secret Key Dictionary. 반드시 활성화된 유효한 API Key, API Secret Key를 입력하셔야 합니다.
3530
request: HTTP Request를 위한 파라미터, 정확한 API URL, HTTP Method를 입력해주세요!
@@ -46,8 +41,8 @@ async def default_fetcher(
4641
"Content-Type": "application/json",
4742
}
4843

49-
async with httpx.AsyncClient() as client:
50-
response: Response = await client.request(
44+
with httpx.Client() as client:
45+
response: Response = client.request(
5146
method=request["method"], url=request["url"], headers=headers, json=data
5247
)
5348

solapi/lib/string_date_transfer.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -60,7 +60,7 @@ def parse_iso(date_string: str) -> datetime:
6060
raise InvalidDateError("Invalid Date") from e
6161

6262

63-
def string_date_transfer(value: str | datetime) -> datetime:
63+
def string_date_transfer(value: str | datetime):
6464
"""
6565
일반 문자열 날짜가 있을 경우 datetime 타입으로 변환해주는 함수
6666
@@ -82,7 +82,7 @@ def string_date_transfer(value: str | datetime) -> datetime:
8282
return value
8383

8484

85-
def format_with_transfer(value: str | datetime) -> str:
85+
def format_with_transfer(value: str) -> str:
8686
"""
8787
string_date_transfer와 format_iso를 한번에 실행하는 함수
8888

solapi/message_service.py

Lines changed: 24 additions & 42 deletions
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,13 @@
1-
from typing import Optional
1+
from typing import Optional, Union
22

33
from solapi.lib.authenticator import AuthenticationParameter
44
from solapi.lib.fetcher import RequestMethod, default_fetcher
55
from solapi.lib.string_date_transfer import format_with_transfer
66
from solapi.model.message import Message
7-
from solapi.requests.request_confiog import SendRequestConfig
8-
from solapi.requests.send.send_request import (
9-
MultipleDetailMessageSendingRequest,
7+
from solapi.model.request.send_message_request import (
8+
SendMessageRequest,
9+
SendRequestConfig,
1010
)
11-
from solapi.responses.send.send_repsonse import DetailGroupMessageResponse
1211

1312

1413
class SolapiMessageService:
@@ -19,48 +18,31 @@ def __init__(self, api_key: str, api_secret: str):
1918
"api_secret": api_secret,
2019
}
2120

22-
# TODO: Request도 pydantic 모델로 진행
23-
async def send(
21+
def send(
2422
self,
25-
messages: list[Message] | Message,
26-
request_config: Optional[SendRequestConfig] = None,
23+
messages: Union[list[Message], Message],
24+
request_config: Optional[SendRequestConfig] = None
2725
):
2826
payload = []
29-
if isinstance(messages, list):
30-
for value in messages:
31-
payload.append(value)
32-
else:
27+
if isinstance(messages, Message):
3328
payload.append(messages)
34-
pass
29+
elif isinstance(messages, list):
30+
payload.extend(messages)
3531

3632
if len(payload) == 0:
37-
raise Exception("데이터가 반드시 1건 이상 기입되어 있어야 합니다.")
33+
raise ValueError("데이터가 반드시 1건 이상 기입되어 있어야 합니다.")
3834

39-
parameter: MultipleDetailMessageSendingRequest = {"messages": payload}
40-
if request_config["appId"] is not None:
41-
parameter.appId = request_config["appId"]
42-
if request_config["showMessageList"] is not None:
43-
parameter.showMessageList = request_config["showMessageList"]
44-
if request_config["scheduledDate"] is not None:
45-
parameter.scheduledDate = format_with_transfer(
46-
request_config["scheduledDate"]
47-
)
48-
49-
response = await default_fetcher(
50-
self._auth_info,
51-
{
52-
"method": RequestMethod("POST"),
53-
"url": f"${self.baseUrl}/messages/v4/send-many/detail",
54-
},
55-
parameter,
35+
request = SendMessageRequest(
36+
messages=payload,
37+
app_id=request_config.app_id,
38+
allow_duplicates=request_config.allow_duplicates,
39+
show_message_list=request_config.show_message_list,
5640
)
57-
validated_response = DetailGroupMessageResponse.model_validate(response)
58-
count = validated_response.group_info.count
59-
if (
60-
len(validated_response.failed_message_list) > 0
61-
and count.total == count.registeredFailed
62-
):
63-
raise Exception("")
64-
65-
return validated_response
66-
41+
# TODO: 일어나면 여기부터 시작!
42+
if request_config.scheduled_date != "":
43+
request.scheduled_date = format_with_transfer(request_config.scheduled_date)
44+
45+
return default_fetcher(self._auth_info, request={
46+
"method": RequestMethod.POST,
47+
"url": f"{self.baseUrl}/messages/v4/send-many/detail"
48+
}, data=request.model_dump())

solapi/model/fax.py

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
from pydantic import BaseModel
2+
3+
4+
class FileIdsType(BaseModel):
5+
file_ids: list[str]

0 commit comments

Comments
 (0)