mirror of
https://github.com/Dvorinka/swingmusic-extended.git
synced 2026-06-03 20:13:02 +00:00
modularize src
+ merge main.py and manage.py + move start logic to swingmusic/__main__.py + add a run.py on the project root
This commit is contained in:
@@ -0,0 +1,133 @@
|
||||
"""
|
||||
Handles arguments passed to the program.
|
||||
"""
|
||||
|
||||
import sys
|
||||
from getpass import getpass
|
||||
|
||||
import click
|
||||
import PyInstaller.__main__ as bundler
|
||||
|
||||
from swingmusic import settings
|
||||
from swingmusic.db.userdata import UserTable
|
||||
from swingmusic.logger import log
|
||||
from swingmusic.setup.sqlite import setup_sqlite
|
||||
from swingmusic.utils.auth import hash_password
|
||||
from swingmusic.utils.paths import getFlaskOpenApiPath
|
||||
from swingmusic.utils.wintools import is_windows
|
||||
|
||||
ALLARGS = settings.ALLARGS
|
||||
ARGS = sys.argv[1:]
|
||||
|
||||
|
||||
def handle_build(*args, **kwargs):
|
||||
"""
|
||||
Handles the --build argument. Builds the project into a single executable.
|
||||
"""
|
||||
if not args[2]:
|
||||
return
|
||||
|
||||
if settings.IS_BUILD:
|
||||
click.echo("Can't build the project. Exiting ...")
|
||||
sys.exit(0)
|
||||
|
||||
info_keys = [
|
||||
"SWINGMUSIC_APP_VERSION",
|
||||
"GIT_LATEST_COMMIT_HASH",
|
||||
"GIT_CURRENT_BRANCH",
|
||||
]
|
||||
|
||||
lines = []
|
||||
|
||||
for key in info_keys:
|
||||
value = settings.Info.get(key)
|
||||
|
||||
if not value:
|
||||
log.error(
|
||||
f"WARNING: {key} not resolved. Can't build the project. Exiting ..."
|
||||
)
|
||||
sys.exit(0)
|
||||
|
||||
lines.append(f'{key} = "{value}"\n')
|
||||
|
||||
try:
|
||||
# write the info to the config file
|
||||
with open("./swingmusic/configs.py", "w", encoding="utf-8") as file:
|
||||
# copy the api keys to the config file
|
||||
file.writelines(lines)
|
||||
|
||||
_s = ";" if is_windows() else ":"
|
||||
|
||||
flask_openapi_path = getFlaskOpenApiPath()
|
||||
server_module = "waitress" if is_windows() else "bjoern"
|
||||
|
||||
bundler.run(
|
||||
[
|
||||
"run.py",
|
||||
"--onefile",
|
||||
"--name",
|
||||
"swingmusic",
|
||||
"--clean",
|
||||
f"--add-data=assets{_s}assets",
|
||||
f"--add-data=client{_s}client",
|
||||
f"--add-data=version.txt{_s}.",
|
||||
f"--add-data={flask_openapi_path}/templates/static{_s}flask_openapi3/templates/static",
|
||||
f"--hidden-import={server_module}",
|
||||
"--collect-submodules=swingmusic",
|
||||
"--icon=assets/logo-fill.light.ico",
|
||||
"-y",
|
||||
]
|
||||
)
|
||||
except Exception as e:
|
||||
print(f"Error building the project: {e}")
|
||||
sys.exit(0)
|
||||
finally:
|
||||
# revert and remove the api keys for dev mode
|
||||
with open("./swingmusic/configs.py", "w", encoding="utf-8") as file:
|
||||
lines = [f'{key} = ""\n' for key in info_keys]
|
||||
file.writelines(lines)
|
||||
|
||||
sys.exit(0)
|
||||
|
||||
|
||||
def handle_password_reset(*args, **kwargs):
|
||||
"""
|
||||
Handles the --password-reset argument. Resets the password.
|
||||
"""
|
||||
if not args[2]:
|
||||
return
|
||||
|
||||
setup_sqlite()
|
||||
|
||||
username: str = ""
|
||||
password: str = ""
|
||||
|
||||
# collect username
|
||||
try:
|
||||
username = input("Enter username: ")
|
||||
except KeyboardInterrupt:
|
||||
click.echo("\nOperation cancelled! Exiting ...")
|
||||
sys.exit(0)
|
||||
|
||||
username = username.strip()
|
||||
user = UserTable.get_by_username(username)
|
||||
|
||||
if not user:
|
||||
click.echo(f"User {username} not found")
|
||||
sys.exit(0)
|
||||
|
||||
# collect password
|
||||
try:
|
||||
password = getpass("Enter new password: ")
|
||||
except KeyboardInterrupt:
|
||||
click.echo("\nOperation cancelled! Exiting ...")
|
||||
sys.exit(0)
|
||||
|
||||
try:
|
||||
UserTable.update_one({"id": user.id, "password": hash_password(password)})
|
||||
click.echo("Password reset successfully!")
|
||||
except Exception as e:
|
||||
click.echo(f"Error resetting password: {e}")
|
||||
sys.exit(0)
|
||||
|
||||
sys.exit(0)
|
||||
Reference in New Issue
Block a user