Merge changes from dev to main#198
Conversation
…icle and saves it into the database.
Add database schema for automated scoring mode. - New automated_settings JSON column on contests table for storing eligibility criteria and evaluation point configuration - Alembic migration to add the column
…193) Add frontend support for configuring automated scoring mode. - New "Automated Scoring" option in contest creation form - Eligibility criteria settings (minimum edits, minimum outgoing links) - Evaluation point settings (points per byte, link, reference, image, etc.) - Automated mode is mutually exclusive with simple/multi-parameter modes
Allow importing articles from Wikipedia categories as pending submissions. - Category selector with configurable import limit (up to 5000 articles) - Automatic duplicate detection to skip already-submitted articles - Import summary showing total imported and skipped counts - Available only for automated scoring contests with configured categories - Restricted to jury members and superadmins
Automatically evaluate submissions based on configured scoring criteria. - Eligibility checks (minimum edits, minimum outgoing links) - Point-based scoring across multiple dimensions (bytes, links, references, infoboxes, images) - Clickable status badges and scores to view evaluation details - Score breakdown modal showing points earned per component (for accepted ones) or rejection reason (for rejected ones) - Batch evaluation triggered via "Refresh Metadata" button
…omated scoring (#196) Dashboard and editing improvements for automated scoring contests. - Filter tabs (All | Accepted | Rejected | Pending) with count badges above the submissions table - Hide multi-parameter scoring toggle when in automated scoring mode - Show editable eligibility and evaluation criteria in the edit modal for automated scoring contests - Non-automated contests remain completely unaffected
…con (#200) - Removed filter functionality from leaderboard - Replaced ranking system with alphabetical sorting - Fixed trusted members icon display This improves UI clarity and simplifies user experience.
Updated dashboard UI and improved contest behavior: - Added Pagination to the dashboard - Implemented scrolling on the dashboard - Updated contest section to show participated contests instead of created ones - Removed jury review label from feedback forms
- Fixed z-index issue to ensure alerts/notifications appear above the modal - Improved layout and alignment issues in contest view UI
|
The only inconsistency I found is not in the migrations themselves, but in the code alignment itself: but the frontend doesn't provide input fields for these values. The database schema (via automated_settings JSON column) can store these values, but the UI doesn't expose them. |
| current_app.logger.warning( | ||
| "Failed to fetch infobox count: %s", str(ibx_error) | ||
| ) | ||
| except Exception: # pylint: disable=broad-exception-caught |
| # validation or scoring yet. | ||
| try: | ||
| image_count = get_article_image_count(article_link) | ||
| except Exception as img_error: # pylint: disable=broad-exception-caught |
There was a problem hiding this comment.
disabling pylint is not a good practice.
pylint warings are there for a reason.
and they should be handled properly.
| current_app.logger.warning( | ||
| "Failed to fetch image count: %s", str(img_error) | ||
| ) | ||
| except Exception: # pylint: disable=broad-exception-caught |
|
|
||
| try: | ||
| infobox_count = get_article_infobox_count(article_link) | ||
| except Exception as ibx_error: # pylint: disable=broad-exception-caught |
| from flask import current_app | ||
|
|
||
| current_app.logger.warning("%s: %s", message, str(error)) | ||
| except Exception: # pylint: disable=broad-exception-caught |
| <div v-for="jury in contest.jury_members" :key="jury" class="organizer-chip"> | ||
| <i class="fas fa-gavel me-2"></i> | ||
| <strong>{{ jury }}</strong> | ||
| <div v-if="submissions.length === 0 && !loadingSubmissions" class="alert alert-info"> |
There was a problem hiding this comment.
Duplicate filter tabs code (appears twice in template).
|
|
||
| # Get parameters | ||
| category_url = data.get("category_url") | ||
| limit = data.get("limit", 5000) |
There was a problem hiding this comment.
Category crawler lacks rate limiting - 5000 article import per request
| - article_word_count: Article size in bytes | ||
| - incoming_links: Number of incoming links | ||
| - outgoing_links: Number of outgoing links | ||
| - ref_new_count: Number of new references |
There was a problem hiding this comment.
Eligibility check uses article_word_count but semantics suggest byte count - naming inconsistency
| if not wikitext: | ||
| return {"new": 0, "reused": 0} | ||
|
|
||
| text = re.sub(r"<!--.*?-->", "", wikitext, flags=re.DOTALL) |
There was a problem hiding this comment.
get_detailed_reference_counts regex may fail with nested tags
please fix this
| @require_auth | ||
| @handle_errors | ||
| @validate_json_data(["category_url"]) | ||
| def crawl_category_for_contest(contest_id): |
There was a problem hiding this comment.
this endpoint accepts any Wikipedia category URL without validating it belongs to the contest's configured wiki domain.
a user could import articles from external wikis that don't match the contest's scope.
|
Please attach a The reason why it took so much time to merge this PR, |






This PR contains the commits which were there in dev only, merging them into main to sync both the branches. To make the main branch 'Ready to deploy'.