-
Notifications
You must be signed in to change notification settings - Fork 2
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Merge pull request #25 from nalbam/main
chore: Refactor split_message function to improve code readability and maintainability
- Loading branch information
Showing
2 changed files
with
204 additions
and
30 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,124 @@ | ||
def split_message(message, max_len): | ||
split_parts = [] | ||
|
||
# 먼저 ``` 기준으로 분리 | ||
parts = message.split("```") | ||
|
||
for i, part in enumerate(parts): | ||
if i % 2 == 1: # 코드 블록인 경우 | ||
# 코드 블록도 "\n\n" 기준으로 자름 | ||
split_parts.extend(split_code_block(part, max_len)) | ||
else: # 일반 텍스트 부분 | ||
split_parts.extend(split_by_newline(part, max_len)) | ||
|
||
# 전체 블록을 합친 후 max_len을 넘지 않도록 추가로 자름 | ||
return finalize_split(split_parts, max_len) | ||
|
||
|
||
def split_code_block(code, max_len): | ||
# 코드 블록을 "\n\n" 기준으로 분리 후, 다시 ```로 감쌈 | ||
code_parts = code.split("\n\n") | ||
result = [] | ||
current_part = "```\n" | ||
|
||
for part in code_parts: | ||
if len(current_part) + len(part) + 2 < max_len - 6: # 6은 ``` 앞뒤 길이 | ||
if current_part != "```\n": | ||
current_part += "\n\n" + part | ||
else: | ||
current_part += part | ||
else: | ||
result.append(current_part + "\n```") # ```로 감쌈 | ||
current_part = "```\n" + part | ||
|
||
if current_part != "```\n": | ||
result.append(current_part + "\n```") | ||
|
||
return result | ||
|
||
|
||
def split_by_newline(text, max_len): | ||
# "\n\n" 기준으로 분리 | ||
parts = text.split("\n\n") | ||
result = [] | ||
current_part = "" | ||
|
||
for part in parts: | ||
if len(current_part) + len(part) + 2 < max_len: # 2는 "\n\n"의 길이 | ||
if current_part != "": | ||
current_part += "\n\n" + part | ||
else: | ||
current_part = part | ||
else: | ||
result.append(current_part) | ||
current_part = part | ||
if current_part != "": | ||
result.append(current_part) | ||
|
||
return result | ||
|
||
|
||
def finalize_split(parts, max_len): | ||
# 각 파트를 max_len에 맞춰 추가로 자름 | ||
result = [] | ||
current_message = "" | ||
|
||
for part in parts: | ||
if len(current_message) + len(part) < max_len: | ||
current_message += "\n\n" + part | ||
else: | ||
result.append(current_message) | ||
current_message = part | ||
if current_message != "": | ||
result.append(current_message) | ||
|
||
return result | ||
|
||
|
||
# 테스트 | ||
message = """ | ||
JSON 데이터를 정렬하는 방법은 사용하는 프로그래밍 언어나 도구에 따라 다를 수 있습니다. 여기서는 Python을 사용한 예시를 보여드리겠습니다. Python의 json 모듈을 사용하면 쉽게 JSON 데이터를 정렬할 수 있습니다. | ||
```python | ||
import json | ||
# 정렬되지 않은 JSON 데이터 | ||
data = { | ||
"name": "Alice", | ||
"age": 30, | ||
"city": "New York", | ||
"hobbies": ["reading", "hiking", "coding"] | ||
} | ||
# JSON 데이터를 정렬하여 문자열로 변환 | ||
sorted_json_str = json.dumps(data, indent=4, sort_keys=True) | ||
# 정렬되지 않은 JSON 데이터 | ||
data = { | ||
"name": "Alice", | ||
"age": 30, | ||
"city": "New York", | ||
"hobbies": ["reading", "hiking", "coding"] | ||
} | ||
# JSON 데이터를 정렬하여 문자열로 변환 | ||
sorted_json_str = json.dumps(data, indent=4, sort_keys=True) | ||
``` | ||
```python | ||
# 정렬된 JSON 출력 | ||
print(sorted_json_str) | ||
``` | ||
이와 같은 방법으로 JSON 데이터를 정렬할 수 있습니다. 다른 프로그래밍 언어에서도 유사한 방법으로 JSON 데이터를 정렬할 수 있으니, 사용하는 언어의 JSON 라이브러리를 참고하세요. | ||
""" | ||
|
||
MAX_LEN_SLACK = 400 # 슬랙 최대 메시지 길이 설정 | ||
|
||
split_messages = split_message(message, MAX_LEN_SLACK) | ||
|
||
# 나누어진 메시지 출력 | ||
for i, part in enumerate(split_messages, 1): | ||
print(f"Part {i}:") | ||
print(part) | ||
print("-" * 40) |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters