Skip to content

Commit 310e21b

Browse files
Merge pull request #1 from LangChain-OpenTutorial/soo-dev
feat: create new feature
2 parents 9ce9f02 + ac944f5 commit 310e21b

14 files changed

+2593
-31
lines changed

.gitignore

+2-1
Original file line numberDiff line numberDiff line change
@@ -1,2 +1,3 @@
11
__pycache__/
2-
.DS_Store
2+
.DS_Store
3+
.python-version

.pre-commit-config.yaml

+14
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
# See https://pre-commit.com for more information
2+
# See https://pre-commit.com/hooks.html for more hooks
3+
repos:
4+
- repo: https://github.com/pre-commit/pre-commit-hooks
5+
rev: v5.0.0
6+
hooks:
7+
- id: trailing-whitespace
8+
- id: end-of-file-fixer
9+
- id: check-yaml
10+
- id: check-added-large-files
11+
- repo: https://github.com/psf/black
12+
rev: 24.10.0
13+
hooks:
14+
- id: black

README.md

+11
Original file line numberDiff line numberDiff line change
@@ -12,3 +12,14 @@ python mdconverter.py --filename <notebook-file-path>
1212
python mdconverter.py --filename sample/05-GoogleGenerativeAI.ipynb
1313
```
1414

15+
개발 중...
16+
```python
17+
18+
from mdconverter.mdconverter_class import Mdconverter
19+
app = Mdconverter()
20+
app.filename = "sample/05-GoogleGenerativeAI.ipynb"
21+
app.output_filename = 'sample/New-05-GoogleGenerativeAI.md'
22+
app.css_filename = "css/styles.css"
23+
24+
app.run()
25+
```

css/styles.css

+15
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
.custom {
2+
background-color: #008d8d;
3+
color: white;
4+
padding: 0.25em 0.5em 0.25em 0.5em;
5+
white-space: pre-wrap; /* css-3 */
6+
white-space: -moz-pre-wrap; /* Mozilla, since 1999 */
7+
white-space: -pre-wrap; /* Opera 4-6 */
8+
white-space: -o-pre-wrap; /* Opera 7 */
9+
word-wrap: break-word;
10+
}
11+
12+
pre {
13+
background-color: #027c7c;
14+
padding-left: 0.5em;
15+
}

mdconverter/__init__.py

Whitespace-only changes.

mdconverter.py renamed to mdconverter/mdconverter.py

+17-22
Original file line numberDiff line numberDiff line change
@@ -4,25 +4,15 @@
44
from typing import List, Dict, Any, Optional
55

66

7-
def get_default_css() -> str:
7+
def get_default_css(css_filename: str) -> str:
88
"""기본 CSS 스타일을 반환합니다."""
9-
return """<style>
10-
.custom {
11-
background-color: #008d8d;
12-
color: white;
13-
padding: 0.25em 0.5em 0.25em 0.5em;
14-
white-space: pre-wrap; /* css-3 */
15-
white-space: -moz-pre-wrap; /* Mozilla, since 1999 */
16-
white-space: -pre-wrap; /* Opera 4-6 */
17-
white-space: -o-pre-wrap; /* Opera 7 */
18-
word-wrap: break-word;
19-
}
20-
21-
pre {
22-
background-color: #027c7c;
23-
padding-left: 0.5em;
24-
}
25-
</style>"""
9+
try:
10+
with open(css_filename, "r", encoding="utf-8") as f:
11+
css_content = f.read()
12+
return f"<style>\n{css_content}\n</style>"
13+
except FileNotFoundError:
14+
print("Could not find styles.css file.")
15+
return ""
2616

2717

2818
def _read_notebook_file(filename: str) -> Dict[str, Any]:
@@ -92,7 +82,7 @@ def _process_code_cell(cell: Dict[str, Any], cells: List[str]) -> None:
9282
cells.append("```\n\n")
9383

9484

95-
def _convert_markdown_from_notebook(filename: str, output_filename: str) -> str:
85+
def _process_converter(filename: str, output_filename: str, css_filename: str) -> str:
9686
"""노트북을 마크다운으로 변환합니다."""
9787
notebook = _read_notebook_file(filename)
9888
cells: List[str] = []
@@ -103,8 +93,10 @@ def _convert_markdown_from_notebook(filename: str, output_filename: str) -> str:
10393
elif cell["cell_type"] == "markdown":
10494
cells.extend(cell["source"])
10595
cells.append("\n")
96+
else:
97+
print(f"Unknown cell type. Verification Needed. file : {filename}")
10698

107-
final_output = f"{get_default_css()}\n\n{''.join(cells)}"
99+
final_output = f"{get_default_css(css_filename)}\n\n{''.join(cells)}"
108100

109101
with open(output_filename, "w") as f:
110102
f.write(final_output)
@@ -113,13 +105,15 @@ def _convert_markdown_from_notebook(filename: str, output_filename: str) -> str:
113105

114106

115107
def convert_markdown_from_notebook(
116-
filename: str, post_fix: str = "-(NEED-REVIEW)"
108+
filename: str,
109+
css_filename: str = "css/styles.css",
110+
post_fix: str = "-(NEED-REVIEW)",
117111
) -> str:
118112
"""노트북 파일을 마크다운으로 변환하는 메인 함수입니다."""
119113

120114
output_filename = filename.replace(".ipynb", f"{post_fix}.md")
121115

122-
return _convert_markdown_from_notebook(filename, output_filename)
116+
return _process_converter(filename, output_filename, css_filename)
123117

124118

125119
if __name__ == "__main__":
@@ -129,6 +123,7 @@ def convert_markdown_from_notebook(
129123
parser.add_argument(
130124
"--filename", required=True, help="변환할 주피터 노트북 파일 경로"
131125
)
126+
parser.add_argument("--css", default="css/styles.css", help="css file path")
132127
args = parser.parse_args()
133128

134129
convert_markdown_from_notebook(args.filename)

mdconverter/mdconverter_class.py

+50
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,50 @@
1+
from typing import Any
2+
from mdconverter.mdconverter import get_default_css
3+
from nbconvert import MarkdownExporter
4+
import nbformat
5+
6+
7+
class Mdconverter:
8+
def __init__(self) -> None:
9+
self.css_filename = ""
10+
self.filename = ""
11+
self.output_filename = ""
12+
13+
def run(self):
14+
# TODO making mdconverter using mdconvert.py
15+
# self.run_mdconverter()
16+
self.run_ndconverter(
17+
filename=self.filename,
18+
output_filename=self.output_filename,
19+
css_filename=self.css_filename,
20+
)
21+
22+
def run_ndconverter(
23+
self, filename: str, output_filename: str, css_filename: str
24+
) -> None:
25+
notebook_content = self.load_ipynb(filename)
26+
script = self.markdown_exporter(notebook_content)
27+
self.ndconverter_script = self.add_prefix_css(script, css_filename)
28+
self.save_script(self.ndconverter_script, output_filename)
29+
30+
def load_ipynb(self, filename: str) -> Any:
31+
with open(filename, "r", encoding="utf-8") as f:
32+
notebook_content = nbformat.read(f, as_version=4)
33+
return notebook_content
34+
35+
def markdown_exporter(self, notebook_content: Any) -> str:
36+
exporter = MarkdownExporter()
37+
# MarkdownExporter를 사용하여 md로 변환
38+
(script, resources) = exporter.from_notebook_node(notebook_content)
39+
return script
40+
41+
def add_prefix_css(self, script: str, css_filename: str):
42+
return f"{get_default_css(css_filename)}\n\n{''.join(script)}"
43+
44+
def save_script(self, script: str, output_filename: str) -> None:
45+
# 변환된 스크립트 저장
46+
with open(output_filename, "w", encoding="utf-8") as f:
47+
f.write(script)
48+
49+
50+
# TODO Creating Multi loader

0 commit comments

Comments
 (0)