update to fix  caused 500 internal error
This commit is contained in:
Joshua Hare 2025-04-10 17:06:02 +10:00
parent 86a2718dea
commit 9fba23c83b
2 changed files with 33 additions and 28 deletions

50
app.py
View File

@ -154,23 +154,22 @@ def view_igs():
if os.path.exists(packages_dir): if os.path.exists(packages_dir):
for filename in os.listdir(packages_dir): for filename in os.listdir(packages_dir):
if filename.endswith('.tgz'): if filename.endswith('.tgz'):
# Remove .tgz and split on the last segment that looks like a version
name_version = filename[:-4] # Remove .tgz name_version = filename[:-4] # Remove .tgz
parts = name_version.split('-') parts = name_version.split('-')
# Assume version starts with a digit or common version keywords version_start = -1
version_idx = -1 for i, part in enumerate(parts):
for i, part in enumerate(parts[::-1]):
if part[0].isdigit() or part in ('preview', 'current', 'latest'): if part[0].isdigit() or part in ('preview', 'current', 'latest'):
version_idx = len(parts) - i - 1 version_start = i
break break
if version_idx >= 0: if version_start > 0: # Ensure there's a name before version
name = '-'.join(parts[:version_idx + 1]) name = '.'.join(parts[:version_start])
version = '-'.join(parts[version_idx + 1:]) version = '-'.join(parts[version_start:])
packages.append({'name': name, 'version': version, 'filename': filename}) packages.append({'name': name, 'version': version, 'filename': filename})
else: else:
# Fallback: treat last part as version # Fallback: treat as name only, log warning
name = '-'.join(parts[:-1]) name = name_version
version = parts[-1] version = ''
logger.warning(f"Could not parse version from {filename}, treating as name only")
packages.append({'name': name, 'version': version, 'filename': filename}) packages.append({'name': name, 'version': version, 'filename': filename})
logger.debug(f"Found packages: {packages}") logger.debug(f"Found packages: {packages}")
else: else:
@ -186,11 +185,18 @@ def view_igs():
else: else:
duplicate_names[name] = [pkg] duplicate_names[name] = [pkg]
# Precompute group colors
colors = ['bg-warning', 'bg-info', 'bg-success', 'bg-danger']
group_colors = {}
for i, name in enumerate(duplicate_groups):
if len(duplicate_groups[name]) > 1: # Only color duplicates
group_colors[name] = colors[i % len(colors)]
return render_template('cp_downloaded_igs.html', packages=packages, processed_list=igs, return render_template('cp_downloaded_igs.html', packages=packages, processed_list=igs,
processed_ids=processed_ids, duplicate_names=duplicate_names, processed_ids=processed_ids, duplicate_names=duplicate_names,
duplicate_groups=duplicate_groups) duplicate_groups=duplicate_groups, group_colors=group_colors)
@app.route('/process-ig', methods=['POST']) @app.route('/process-igs', methods=['POST'])
def process_ig(): def process_ig():
filename = request.form.get('filename') filename = request.form.get('filename')
if not filename or not filename.endswith('.tgz'): if not filename or not filename.endswith('.tgz'):
@ -203,14 +209,20 @@ def process_ig():
return redirect(url_for('view_igs')) return redirect(url_for('view_igs'))
try: try:
parts = filename[:-4].split('-') name_version = filename[:-4]
version_idx = -1 parts = name_version.split('-')
for i, part in enumerate(parts[::-1]): version_start = -1
for i, part in enumerate(parts):
if part[0].isdigit() or part in ('preview', 'current', 'latest'): if part[0].isdigit() or part in ('preview', 'current', 'latest'):
version_idx = len(parts) - i - 1 version_start = i
break break
name = '-'.join(parts[:version_idx + 1]) if version_idx >= 0 else '-'.join(parts[:-1]) if version_start > 0:
version = '-'.join(parts[version_idx + 1:]) if version_idx >= 0 else parts[-1] name = '.'.join(parts[:version_start])
version = '-'.join(parts[version_start:])
else:
name = name_version
version = ''
logger.warning(f"Could not parse version from {filename} during processing")
package_info = services.process_package_file(tgz_path) package_info = services.process_package_file(tgz_path)
processed_ig = ProcessedIg( processed_ig = ProcessedIg(
package_name=name, package_name=name,

View File

@ -39,17 +39,10 @@
<tr><th>Package Name</th><th>Version</th><th>Actions</th></tr> <tr><th>Package Name</th><th>Version</th><th>Actions</th></tr>
</thead> </thead>
<tbody> <tbody>
{% set colors = ['bg-warning', 'bg-info', 'bg-success', 'bg-danger'] %}
{% set group_idx = {} %}
{% for name in duplicate_groups %}
{% if duplicate_groups[name]|length > 1 %}
{% set group_idx[name] = loop.index0 % colors|length %}
{% endif %}
{% endfor %}
{% for pkg in packages %} {% for pkg in packages %}
{% set is_processed = (pkg.name, pkg.version) in processed_ids %} {% set is_processed = (pkg.name, pkg.version) in processed_ids %}
{% set is_duplicate = pkg.name in duplicate_names and duplicate_names[pkg.name]|length > 1 %} {% set is_duplicate = pkg.name in duplicate_names and duplicate_names[pkg.name]|length > 1 %}
{% set group_color = colors[group_idx[pkg.name]] if is_duplicate and duplicate_groups|length > 1 else 'bg-warning' %} {% set group_color = group_colors[pkg.name] if is_duplicate else 'bg-warning' %}
<tr {% if is_duplicate %}class="{{ group_color }} text-dark"{% endif %}> <tr {% if is_duplicate %}class="{{ group_color }} text-dark"{% endif %}>
<td> <td>
<code>{{ pkg.name }}</code> <code>{{ pkg.name }}</code>
@ -83,7 +76,7 @@
<p class="mt-2 small text-muted">Duplicates detected: <p class="mt-2 small text-muted">Duplicates detected:
{% for name, versions in duplicate_groups.items() %} {% for name, versions in duplicate_groups.items() %}
{% if versions|length > 1 %} {% if versions|length > 1 %}
<span class="badge {{ colors[group_idx[name] if duplicate_groups|length > 1 else 0] }} text-dark">{{ name }} ({{ versions|join(', ') }})</span> <span class="badge {{ group_colors[name] }} text-dark">{{ name }} ({{ versions|join(', ') }})</span>
{% endif %} {% endif %}
{% endfor %} {% endfor %}
</p> </p>