Skip to content

Commit 2ce4450

Browse files
committed
Code refactoring: function cleaning
1 parent b6eca48 commit 2ce4450

40 files changed

Lines changed: 2111 additions & 1718 deletions

app.py

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -32,10 +32,13 @@
3232

3333
# Import helper functions
3434
from app_helper import (
35-
init_db, get_db, close_db,
35+
get_db, close_db,
3636
redis_conn,
3737
get_task_info_from_db,
3838
cancel_job_and_children_recursive,
39+
)
40+
from database import init_db
41+
from config import (
3942
TASK_STATUS_PENDING, TASK_STATUS_STARTED, TASK_STATUS_PROGRESS,
4043
TASK_STATUS_SUCCESS, TASK_STATUS_FAILURE, TASK_STATUS_REVOKED
4144
)
@@ -703,7 +706,7 @@ def listen_for_index_reloads():
703706
load_voyager_index_for_querying(force_reload=True)
704707
from tasks.artist_gmm_manager import load_artist_index_for_querying
705708
load_artist_index_for_querying(force_reload=True)
706-
from app_helper import load_map_projection, load_artist_projection
709+
from database import load_map_projection, load_artist_projection
707710
load_map_projection('main_map', force_reload=True)
708711
load_artist_projection('artist_map', force_reload=True)
709712
# Rebuild the map JSON cache used by the /api/map endpoint
@@ -835,7 +838,7 @@ def _register_blueprints(flask_app):
835838
logger.debug(f"No precomputed map projection to load at startup or load failed: {e}")
836839
# Also try to load artist component projection into memory
837840
try:
838-
from app_helper import load_artist_projection
841+
from database import load_artist_projection
839842
load_artist_projection('artist_map')
840843
logger.info("In-memory artist component projection loaded at startup.")
841844
except Exception as e:

app_alchemy.py

Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -185,7 +185,7 @@ def list_anchors():
185185
500:
186186
description: Database error.
187187
"""
188-
from app_helper import get_alchemy_anchors
188+
from database import get_alchemy_anchors
189189
try:
190190
anchors = get_alchemy_anchors()
191191
# no centroid returned here (name-only list)
@@ -227,7 +227,7 @@ def create_anchor():
227227
500:
228228
description: Database failure.
229229
"""
230-
from app_helper import save_alchemy_anchor
230+
from database import save_alchemy_anchor
231231
payload = request.get_json() or {}
232232
name = (payload.get('name') or '').strip()
233233
centroid = payload.get('centroid')
@@ -260,7 +260,7 @@ def remove_anchor(anchor_id):
260260
404:
261261
description: Anchor not found.
262262
"""
263-
from app_helper import delete_alchemy_anchor
263+
from database import delete_alchemy_anchor
264264
ok = delete_alchemy_anchor(anchor_id)
265265
if not ok:
266266
return jsonify({'error': 'Anchor not found'}), 404
@@ -298,7 +298,7 @@ def rename_anchor(anchor_id):
298298
404:
299299
description: Anchor not found.
300300
"""
301-
from app_helper import update_alchemy_anchor_name
301+
from database import update_alchemy_anchor_name
302302
payload = request.get_json() or {}
303303
name = (payload.get('name') or '').strip()
304304
if not name:
@@ -371,7 +371,7 @@ def list_radios():
371371
500:
372372
description: Database error.
373373
"""
374-
from app_helper import get_alchemy_radios
374+
from database import get_alchemy_radios
375375
try:
376376
radios = get_alchemy_radios()
377377
return jsonify({'radios': [{
@@ -418,7 +418,7 @@ def create_radio():
418418
500:
419419
description: Database failure.
420420
"""
421-
from app_helper import create_alchemy_radio
421+
from database import create_alchemy_radio
422422
payload = request.get_json() or {}
423423
anchor_id = payload.get('anchor_id')
424424
try:
@@ -471,7 +471,7 @@ def update_radio(radio_id):
471471
404:
472472
description: Radio not found.
473473
"""
474-
from app_helper import update_alchemy_radio
474+
from database import update_alchemy_radio
475475
payload = request.get_json() or {}
476476
temperature, n_results, error = _parse_radio_settings(payload)
477477
if error:
@@ -502,7 +502,7 @@ def remove_radio(radio_id):
502502
404:
503503
description: Radio not found.
504504
"""
505-
from app_helper import delete_alchemy_radio
505+
from database import delete_alchemy_radio
506506
ok = delete_alchemy_radio(radio_id)
507507
if not ok:
508508
return jsonify({'error': 'Radio not found'}), 404
@@ -588,7 +588,7 @@ def artist_projections_api():
588588
500:
589589
description: Failure to read cache.
590590
"""
591-
from app_helper import ARTIST_PROJECTION_CACHE
591+
from database import ARTIST_PROJECTION_CACHE
592592

593593
try:
594594
if not ARTIST_PROJECTION_CACHE:

app_analysis.py

Lines changed: 6 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,18 @@
11
# app_analysis.py
2-
from flask import Blueprint, jsonify, request
2+
from flask import Blueprint, jsonify, request, render_template
33
import uuid
44
import logging
55

66
# Import configuration from the main config.py
7-
from config import NUM_RECENT_ALBUMS, TOP_N_MOODS
7+
from config import NUM_RECENT_ALBUMS, TOP_N_MOODS, TASK_STATUS_PENDING
88

99
# RQ import
1010
from rq import Retry
1111

12+
# App helper functions
13+
from app_helper import rq_queue_high, save_task_status
14+
from database import clean_up_previous_main_tasks, get_active_main_task
15+
1216
logger = logging.getLogger(__name__)
1317

1418
# Create a Blueprint for analysis-related routes
@@ -80,9 +84,6 @@ def start_analysis_endpoint():
8084
500:
8185
description: Server error during task enqueue.
8286
"""
83-
# Local imports to prevent circular dependency at startup
84-
from app_helper import rq_queue_high, clean_up_previous_main_tasks, save_task_status, TASK_STATUS_PENDING, get_active_main_task
85-
8687
# Check for any existing active main task to prevent parallel batch runs.
8788
active_task = get_active_main_task()
8889
if active_task:
@@ -146,9 +147,6 @@ def start_cleaning_endpoint():
146147
500:
147148
description: Server error during task enqueue.
148149
"""
149-
# Local imports to prevent circular dependency at startup
150-
from app_helper import rq_queue_high, clean_up_previous_main_tasks, save_task_status, TASK_STATUS_PENDING, get_active_main_task
151-
152150
active_task = get_active_main_task()
153151
if active_task:
154152
return jsonify({

app_clustering.py

Lines changed: 20 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -5,14 +5,33 @@
55
import traceback
66

77
# Import all necessary configuration variables
8-
from config import MAX_SONGS_PER_CLUSTER, SCORE_WEIGHT_DIVERSITY, SCORE_WEIGHT_SILHOUETTE, SCORE_WEIGHT_DAVIES_BOULDIN, SCORE_WEIGHT_CALINSKI_HARABASZ, SCORE_WEIGHT_PURITY, SCORE_WEIGHT_OTHER_FEATURE_DIVERSITY, SCORE_WEIGHT_OTHER_FEATURE_PURITY, MIN_SONGS_PER_GENRE_FOR_STRATIFICATION, STRATIFIED_SAMPLING_TARGET_PERCENTILE, CLUSTER_ALGORITHM, NUM_CLUSTERS_MIN, NUM_CLUSTERS_MAX, DBSCAN_EPS_MIN, DBSCAN_EPS_MAX, DBSCAN_MIN_SAMPLES_MIN, DBSCAN_MIN_SAMPLES_MAX, GMM_N_COMPONENTS_MIN, GMM_N_COMPONENTS_MAX, SPECTRAL_N_CLUSTERS_MIN, SPECTRAL_N_CLUSTERS_MAX, ENABLE_CLUSTERING_EMBEDDINGS, PCA_COMPONENTS_MIN, PCA_COMPONENTS_MAX, CLUSTERING_RUNS, TOP_N_MOODS, AI_MODEL_PROVIDER, OLLAMA_SERVER_URL, OLLAMA_MODEL_NAME, OPENAI_SERVER_URL, OPENAI_MODEL_NAME, OPENAI_API_KEY, GEMINI_API_KEY, GEMINI_MODEL_NAME, TOP_N_PLAYLISTS, MISTRAL_API_KEY, MISTRAL_MODEL_NAME
8+
from config import (
9+
MAX_SONGS_PER_CLUSTER, SCORE_WEIGHT_DIVERSITY, SCORE_WEIGHT_SILHOUETTE,
10+
SCORE_WEIGHT_DAVIES_BOULDIN, SCORE_WEIGHT_CALINSKI_HARABASZ,
11+
SCORE_WEIGHT_PURITY, SCORE_WEIGHT_OTHER_FEATURE_DIVERSITY,
12+
SCORE_WEIGHT_OTHER_FEATURE_PURITY, MIN_SONGS_PER_GENRE_FOR_STRATIFICATION,
13+
STRATIFIED_SAMPLING_TARGET_PERCENTILE, CLUSTER_ALGORITHM, NUM_CLUSTERS_MIN,
14+
NUM_CLUSTERS_MAX, DBSCAN_EPS_MIN, DBSCAN_EPS_MAX, DBSCAN_MIN_SAMPLES_MIN,
15+
DBSCAN_MIN_SAMPLES_MAX, GMM_N_COMPONENTS_MIN, GMM_N_COMPONENTS_MAX,
16+
SPECTRAL_N_CLUSTERS_MIN, SPECTRAL_N_CLUSTERS_MAX, ENABLE_CLUSTERING_EMBEDDINGS,
17+
PCA_COMPONENTS_MIN, PCA_COMPONENTS_MAX, CLUSTERING_RUNS, TOP_N_MOODS,
18+
AI_MODEL_PROVIDER, OLLAMA_SERVER_URL, OLLAMA_MODEL_NAME, OPENAI_SERVER_URL,
19+
OPENAI_MODEL_NAME, OPENAI_API_KEY, GEMINI_API_KEY, GEMINI_MODEL_NAME,
20+
TOP_N_PLAYLISTS, MISTRAL_API_KEY, MISTRAL_MODEL_NAME,
21+
TASK_STATUS_PENDING, TASK_STATUS_FAILURE, TASK_STATUS_SUCCESS,
22+
TASK_STATUS_STARTED, TASK_STATUS_PROGRESS, TASK_STATUS_REVOKED,
23+
)
924

1025
# RQ import
1126
from rq import Retry
1227

1328
from error import error_manager
1429
from error.error_dictionary import ERR_CLUSTERING_FAILED
1530

31+
# App helper functions
32+
from app_helper import rq_queue_high, save_task_status
33+
from database import clean_up_previous_main_tasks, get_active_main_task
34+
1635

1736
logger = logging.getLogger(__name__)
1837

@@ -22,7 +41,6 @@
2241
def clustering_task_failure_handler(job, connection, type, value, tb):
2342
"""A failure handler for the main clustering task, executed by the worker."""
2443
from flask_app import app
25-
from app_helper import save_task_status, TASK_STATUS_FAILURE
2644
with app.app_context():
2745
task_id = getattr(job, 'id', None) or getattr(job, 'get_id', lambda: None)()
2846

@@ -245,10 +263,6 @@ def start_clustering_endpoint():
245263
status:
246264
type: string
247265
"""
248-
# Local imports to prevent circular dependency at startup
249-
from app_helper import rq_queue_high, get_active_main_task
250-
from app_helper import clean_up_previous_main_tasks, save_task_status, TASK_STATUS_PENDING
251-
252266
# Check for any existing active main task to prevent parallel batch runs
253267
active_task = get_active_main_task()
254268
if active_task:

app_cron.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,8 @@
11
from flask import Blueprint, render_template, jsonify, request
22
from psycopg2.extras import DictCursor
3-
from database import get_db
3+
from database import get_db, save_task_status
44
from taskqueue import rq_queue_high
5-
from app_helper import save_task_status, TASK_STATUS_PENDING
5+
from config import TASK_STATUS_PENDING
66
import uuid, time, logging
77
from config import (
88
TOP_N_MOODS,

0 commit comments

Comments
 (0)