Skip to content

Commit

Permalink
File 관련 모델추가 (#5)
Browse files Browse the repository at this point in the history
* FileRegistInfo

* added: test code

* added: test code

* enums.ServiceTypeEnum.CHAT

* rcs chat
  • Loading branch information
xncbf authored Jul 8, 2022
1 parent 7849052 commit 235d3e4
Show file tree
Hide file tree
Showing 8 changed files with 147 additions and 96 deletions.
132 changes: 45 additions & 87 deletions poetry.lock

Large diffs are not rendered by default.

2 changes: 1 addition & 1 deletion pyproject.toml
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
[tool.poetry]
name = "rcs-pydantic"
version = "0.3.1"
version = "0.4.0"
description = ""
authors = ["xncbf <[email protected]>"]
keywords = ["pydantic", "rcs", "fastapi"]
Expand Down
14 changes: 14 additions & 0 deletions rcs_pydantic/enums.py
Original file line number Diff line number Diff line change
Expand Up @@ -101,3 +101,17 @@ class MessageEnum(Enum):
CAROUSEL_SMALL_4: str = "CMwShS0400" # 슬라이드형(Small, 4장)
CAROUSEL_SMALL_5: str = "CMwShS0500" # 슬라이드형(Small, 5장)
CAROUSEL_SMALL_6: str = "CMwShS0600" # 슬라이드형(Small, 6장)


class FileUsageTypeEnum(Enum):
SEND: str = "send"


class FileUsageServiceEnum(Enum):
RCS: str = "RCS"
MMS: str = "MMS"


class FileStatusEnum(Enum):
READY: str = "ready"
EXPIRED: str = "expired"
4 changes: 2 additions & 2 deletions rcs_pydantic/main.py
Original file line number Diff line number Diff line change
Expand Up @@ -47,15 +47,15 @@ def __init__(
rcs=scheme.RcsInfo(**self.make_rcs_info(message_info)),
)

def make_common_info(self, message_info: scheme.MessageInfo) -> scheme.CommonInfo:
def make_common_info(self, message_info: scheme.MessageInfo) -> dict:
return scheme.CommonInfo(
msgId=str(uuid.uuid4()),
userContact=message_info.userContact,
scheduleType=0,
msgServiceType=enums.MessageServiceTypeEnum.RCS,
).dict(exclude_unset=True)

def make_rcs_info(self, message_info: scheme.MessageInfo) -> scheme.RcsInfo:
def make_rcs_info(self, message_info: scheme.MessageInfo) -> dict:
rcs_info = scheme.RcsInfo(
chatbotId=message_info.chatbotId,
messagebaseId=self.message_base_id,
Expand Down
34 changes: 28 additions & 6 deletions rcs_pydantic/scheme.py
Original file line number Diff line number Diff line change
Expand Up @@ -476,9 +476,10 @@ class TextMessageInfo(BaseModel):


class FileMessage(BaseModel):
downloadField: str
mimeType: str
size: str
fileName: str
fileUrl: str
fileMIMEType: str
fileSize: int


class FileMessageInfo(BaseModel):
Expand Down Expand Up @@ -523,9 +524,10 @@ class MessageInfo(BaseModel):
```
{
"fileMessage": {
"downloadFileId":"20211020120413sasgfasdgsdgs",
"mimeType": "image/png",
"size": "15,012"
"fileName": "3686492106936898.jpeg",
"fileUrl": "https://bd-media- hub.hermes.kt.com/data/chat/message/file/3686492106936898.jpeg",
"fileMIMEType": "image/jpeg",
"fileSize": 326130
}
}
```
Expand Down Expand Up @@ -565,3 +567,23 @@ class TokenInfo(BaseModel):
rcsId: str
rcsSecret: str
grantType: str


class FileRegistInfo(BaseModel):
fileId: Optional[str]
usageType: enums.FileUsageTypeEnum
usageService: enums.FileUsageServiceEnum
mimeType: str
file: bytes
description: str


class FileInfo(BaseModel):
fileId: Optional[str]
usageType: enums.FileUsageTypeEnum
usageService: enums.FileUsageServiceEnum
mimeType: str
status: enums.FileStatusEnum
size: Optional[int]
expiryDate: str = Field(regex=r"^\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}\.\d{3}\+\d{2}$")
url: str
32 changes: 32 additions & 0 deletions tests/factory.py
Original file line number Diff line number Diff line change
Expand Up @@ -303,3 +303,35 @@ class Meta:

common: scheme.CommonInfo = factory.SubFactory(CommonInfoFactory)
rcs: scheme.RcsInfo = factory.SubFactory(RcsInfoFactory)


class FileRegistInfoFactory(factory.Factory):
usageType: str = factory.LazyAttribute(lambda n: fake.random_element(elements=enums.FileUsageTypeEnum))
usageService: str = factory.LazyAttribute(lambda n: fake.random_element(elements=enums.FileUsageServiceEnum))
mimeType: str = fake.mime_type(category="image")
file: bytes = b"""\x89PNG\r\n\x1a\n\x00\x00\x00\rIHDR\x00\x00\x00\x02\x00\x00\x00\x02\x08\x02\x00\x00\x00\xfd\xd4 \
\x9as\x00\x00\x00\x16IDATx\x9cc\x9ccy\x97\x81\x81\x81i\xe5\x8d\x0b\x0c\x0c\x0c\x00\x1f\xaf\x04 \
\x07\xa1\xbdi\xdd\x00\x00\x00\x00IEND\xaeB`\x82"""
description: str = factory.LazyAttribute(lambda n: fake.sentence(nb_words=10)[:20])

class Meta:
model = scheme.FileRegistInfo


class FileInfoFactory(factory.Factory):
usageType: str = factory.LazyAttribute(lambda n: fake.random_element(elements=enums.FileUsageTypeEnum))
usageService: str = factory.LazyAttribute(lambda n: fake.random_element(elements=enums.FileUsageServiceEnum))
mimeType: str = fake.mime_type(category="image")
status: str = factory.LazyAttribute(lambda n: fake.random_element(elements=enums.FileStatusEnum))

@factory.lazy_attribute
def expiryDate(self) -> str:
t = datetime.now()
s: str = t.strftime("%Y-%m-%dT%H:%M:%S.%f")
s = s[:-3]
return s + "+09"

url: str = factory.Faker("url")

class Meta:
model = scheme.FileInfo
8 changes: 8 additions & 0 deletions tests/test_factory.py
Original file line number Diff line number Diff line change
Expand Up @@ -147,3 +147,11 @@ def test_message_info_factory():

def test_send_info_factory():
factory.SendInfoFactory()


def test_file_info_factory():
factory.FileInfoFactory()


def test_file_regist_info_factory():
factory.FileRegistInfoFactory()
17 changes: 17 additions & 0 deletions tests/test_rcs_pydantic.py
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@
from faker import Faker
from pydantic import BaseModel

from rcs_pydantic import enums
from rcs_pydantic.errors import ErrorCodeEnum, KTErrorCodeEnum, MaaPErrorCodeEnum, RcsBizCenterErrorCodeEnum
from rcs_pydantic.exceptions import MessageException
from rcs_pydantic.main import RcsMessage
Expand All @@ -27,6 +28,22 @@ def test_rcs_message():
rcs_message.send()


def test_rcs_chat_message():
rcs_message = RcsMessage(
factory.MessageInfoFactory(),
body=factory.RcsCHATBodyFactory(),
buttons=[factory.ButtonInfoFactory()],
agency_id="abc",
expiry_option=2,
header="1",
footer="010-0000-0000",
cdr_id="abc",
copy_allowed=True,
service_type=enums.ServiceTypeEnum.CHAT,
)
rcs_message.send()


def test_rcs_message_with_empty_button():
rcs_message = RcsMessage(
factory.MessageInfoFactory(),
Expand Down

0 comments on commit 235d3e4

Please sign in to comment.