Skip to content
GitLab
Menu
Projects
Groups
Snippets
Loading...
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
Menu
Open sidebar
chenpangpang
open-webui
Commits
a84070c6
Commit
a84070c6
authored
Feb 23, 2024
by
Timothy J. Baek
Browse files
refac: changelog api
parent
ea025382
Changes
2
Hide whitespace changes
Inline
Side-by-side
Showing
2 changed files
with
65 additions
and
66 deletions
+65
-66
backend/config.py
backend/config.py
+63
-0
backend/main.py
backend/main.py
+2
-66
No files found.
backend/config.py
View file @
a84070c6
...
@@ -6,6 +6,8 @@ from base64 import b64encode
...
@@ -6,6 +6,8 @@ from base64 import b64encode
from
constants
import
ERROR_MESSAGES
from
constants
import
ERROR_MESSAGES
from
pathlib
import
Path
from
pathlib
import
Path
import
json
import
json
import
markdown
from
bs4
import
BeautifulSoup
try
:
try
:
...
@@ -31,6 +33,67 @@ except:
...
@@ -31,6 +33,67 @@ except:
VERSION
=
PACKAGE_DATA
[
"version"
]
VERSION
=
PACKAGE_DATA
[
"version"
]
# Function to parse each section
def
parse_section
(
section
):
items
=
[]
for
li
in
section
.
find_all
(
"li"
):
# Extract raw HTML string
raw_html
=
str
(
li
)
# Extract text without HTML tags
text
=
li
.
get_text
(
separator
=
" "
,
strip
=
True
)
# Split into title and content
parts
=
text
.
split
(
": "
,
1
)
title
=
parts
[
0
].
strip
()
if
len
(
parts
)
>
1
else
""
content
=
parts
[
1
].
strip
()
if
len
(
parts
)
>
1
else
text
items
.
append
({
"title"
:
title
,
"content"
:
content
,
"raw"
:
raw_html
})
return
items
try
:
with
open
(
"../CHANGELOG.md"
,
"r"
)
as
file
:
changelog_content
=
file
.
read
()
except
:
changelog_content
=
""
# Convert markdown content to HTML
html_content
=
markdown
.
markdown
(
changelog_content
)
# Parse the HTML content
soup
=
BeautifulSoup
(
html_content
,
"html.parser"
)
# Initialize JSON structure
changelog_json
=
{}
# Iterate over each version
for
version
in
soup
.
find_all
(
"h2"
):
version_number
=
version
.
get_text
().
strip
().
split
(
" - "
)[
0
][
1
:
-
1
]
# Remove brackets
date
=
version
.
get_text
().
strip
().
split
(
" - "
)[
1
]
version_data
=
{
"date"
:
date
}
# Find the next sibling that is a h3 tag (section title)
current
=
version
.
find_next_sibling
()
print
(
current
)
while
current
and
current
.
name
!=
"h2"
:
if
current
.
name
==
"h3"
:
section_title
=
current
.
get_text
().
lower
()
# e.g., "added", "fixed"
section_items
=
parse_section
(
current
.
find_next_sibling
(
"ul"
))
version_data
[
section_title
]
=
section_items
# Move to the next element
current
=
current
.
find_next_sibling
()
changelog_json
[
version_number
]
=
version_data
CHANGELOG
=
changelog_json
####################################
####################################
# DATA/FRONTEND BUILD DIR
# DATA/FRONTEND BUILD DIR
####################################
####################################
...
...
backend/main.py
View file @
a84070c6
...
@@ -20,7 +20,7 @@ from apps.rag.main import app as rag_app
...
@@ -20,7 +20,7 @@ from apps.rag.main import app as rag_app
from
apps.web.main
import
app
as
webui_app
from
apps.web.main
import
app
as
webui_app
from
config
import
ENV
,
VERSION
,
FRONTEND_BUILD_DIR
from
config
import
ENV
,
VERSION
,
CHANGELOG
,
FRONTEND_BUILD_DIR
class
SPAStaticFiles
(
StaticFiles
):
class
SPAStaticFiles
(
StaticFiles
):
...
@@ -79,73 +79,9 @@ async def get_app_config():
...
@@ -79,73 +79,9 @@ async def get_app_config():
}
}
# Function to parse each section
def
parse_section
(
section
):
items
=
[]
for
li
in
section
.
find_all
(
"li"
):
# Extract raw HTML string
raw_html
=
str
(
li
)
# Extract text without HTML tags
text
=
li
.
get_text
(
separator
=
" "
,
strip
=
True
)
# Split into title and content
parts
=
text
.
split
(
": "
,
1
)
title
=
parts
[
0
].
strip
()
if
len
(
parts
)
>
1
else
""
content
=
parts
[
1
].
strip
()
if
len
(
parts
)
>
1
else
text
items
.
append
({
"title"
:
title
,
"content"
:
content
,
"raw"
:
raw_html
})
return
items
@
app
.
get
(
"/api/changelog"
)
@
app
.
get
(
"/api/changelog"
)
async
def
get_app_changelog
():
async
def
get_app_changelog
():
try
:
return
CHANGELOG
with
open
(
"../CHANGELOG.md"
,
"r"
)
as
file
:
changelog_content
=
file
.
read
()
# Convert markdown content to HTML
html_content
=
markdown
.
markdown
(
changelog_content
)
# Parse the HTML content
soup
=
BeautifulSoup
(
html_content
,
"html.parser"
)
print
(
soup
)
# Initialize JSON structure
changelog_json
=
{}
# Iterate over each version
for
version
in
soup
.
find_all
(
"h2"
):
version_number
=
(
version
.
get_text
().
strip
().
split
(
" - "
)[
0
][
1
:
-
1
]
)
# Remove brackets
date
=
version
.
get_text
().
strip
().
split
(
" - "
)[
1
]
version_data
=
{
"date"
:
date
}
# Find the next sibling that is a h3 tag (section title)
current
=
version
.
find_next_sibling
()
print
(
current
)
while
current
and
current
.
name
!=
"h2"
:
if
current
.
name
==
"h3"
:
section_title
=
current
.
get_text
().
lower
()
# e.g., "added", "fixed"
section_items
=
parse_section
(
current
.
find_next_sibling
(
"ul"
))
version_data
[
section_title
]
=
section_items
# Move to the next element
current
=
current
.
find_next_sibling
()
changelog_json
[
version_number
]
=
version_data
# print(changelog_json)
# Return content as JSON string
return
changelog_json
except
FileNotFoundError
:
return
{
"error"
:
"readme.md not found"
}
except
Exception
as
e
:
return
{
"error"
:
f
"An error occurred:
{
e
}
"
}
app
.
mount
(
app
.
mount
(
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
.
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment