From d943387c7f0d865059315273303a468897f2546a Mon Sep 17 00:00:00 2001 From: Ihsan Ullah Date: Thu, 21 Nov 2024 14:31:29 +0500 Subject: [PATCH 1/3] Featured field added in competition --- src/apps/api/views/competitions.py | 2 +- .../migrations/0049_auto_20241121_0922.py | 40 +++++++++++++++++++ src/apps/competitions/models.py | 3 ++ src/apps/competitions/utils.py | 32 ++++----------- .../migrations/0008_auto_20241121_0922.py | 20 ++++++++++ 5 files changed, 72 insertions(+), 25 deletions(-) create mode 100644 src/apps/competitions/migrations/0049_auto_20241121_0922.py create mode 100644 src/apps/datasets/migrations/0008_auto_20241121_0922.py diff --git a/src/apps/api/views/competitions.py b/src/apps/api/views/competitions.py index 3f032b834..ee3ab2b84 100644 --- a/src/apps/api/views/competitions.py +++ b/src/apps/api/views/competitions.py @@ -507,7 +507,7 @@ def creation_status(self, request, pk): @action(detail=False, methods=('GET',), permission_classes=(AllowAny,)) def front_page(self, request): popular_comps = get_popular_competitions() - featured_comps = get_featured_competitions(excluded_competitions=popular_comps) + featured_comps = get_featured_competitions() popular_comps_serializer = CompetitionSerializerSimple(popular_comps, many=True) featured_comps_serializer = CompetitionSerializerSimple(featured_comps, many=True) return Response(data={ diff --git a/src/apps/competitions/migrations/0049_auto_20241121_0922.py b/src/apps/competitions/migrations/0049_auto_20241121_0922.py new file mode 100644 index 000000000..83a3c99a9 --- /dev/null +++ b/src/apps/competitions/migrations/0049_auto_20241121_0922.py @@ -0,0 +1,40 @@ +# Generated by Django 2.2.17 on 2024-11-21 09:22 + +from django.db import migrations, models +import storages.backends.s3boto3 +import utils.data + + +class Migration(migrations.Migration): + + dependencies = [ + ('competitions', '0048_auto_20240401_1646'), + ] + + operations = [ + migrations.AddField( + model_name='competition', + name='is_featured', + field=models.BooleanField(default=False), + ), + migrations.AlterField( + model_name='submission', + name='detailed_result', + field=models.FileField(blank=True, null=True, storage=storages.backends.s3boto3.S3Boto3Storage(), upload_to=utils.data.PathWrapper('detailed_result')), + ), + migrations.AlterField( + model_name='submission', + name='prediction_result', + field=models.FileField(blank=True, null=True, storage=storages.backends.s3boto3.S3Boto3Storage(), upload_to=utils.data.PathWrapper('prediction_result')), + ), + migrations.AlterField( + model_name='submission', + name='scoring_result', + field=models.FileField(blank=True, null=True, storage=storages.backends.s3boto3.S3Boto3Storage(), upload_to=utils.data.PathWrapper('scoring_result')), + ), + migrations.AlterField( + model_name='submissiondetails', + name='data_file', + field=models.FileField(storage=storages.backends.s3boto3.S3Boto3Storage(), upload_to=utils.data.PathWrapper('submission_details')), + ), + ] diff --git a/src/apps/competitions/models.py b/src/apps/competitions/models.py index 962919de0..1e77c4e92 100644 --- a/src/apps/competitions/models.py +++ b/src/apps/competitions/models.py @@ -78,6 +78,9 @@ class Competition(ChaHubSaveMixin, models.Model): # If true, participants see the make their submissions public can_participants_make_submissions_public = models.BooleanField(default=True) + # If true, competition is featured and may shaow up on the home page + is_featured = models.BooleanField(default=False) + def __str__(self): return f"competition-{self.title}-{self.pk}-{self.competition_type}" diff --git a/src/apps/competitions/utils.py b/src/apps/competitions/utils.py index 1e7f0b285..155141258 100644 --- a/src/apps/competitions/utils.py +++ b/src/apps/competitions/utils.py @@ -1,7 +1,7 @@ ''' This file contains utilities for competitions ''' -# import random +import random # from django.db.models import Count from competitions.models import Competition @@ -37,34 +37,18 @@ def get_popular_competitions(limit=4): return [] -def get_featured_competitions(limit=4, excluded_competitions=None): +def get_featured_competitions(limit=4): ''' - Function to return featured competitions if they are still open. + Function to return featured competitions - :param limit: Amount of competitions to return. Default is 3 - :param excluded_competitions: list of popular competitions to prevent displaying duplicates + :param limit: Amount of competitions to return. Default is 4 :rtype: list :return: list of featured competitions ''' - # TODO: Fix the fetching of the featured competitions - # Uncomment and update the following code when a long term fix is implemented for participants count - - # competitions = Competition.objects.filter(published=True) \ - # .annotate(participant_count=Count('participants')) - - # if excluded_competitions: - # competitions = competitions.exclude(pk__in=[c.pk for c in excluded_competitions]) - - # if len(competitions) <= limit: - # return competitions - # else: - # return random.sample(list(competitions), limit) + competitions = Competition.objects.filter(is_featured=True) - # Temporary solution to show specific featured competitions - try: - featured_competiion_ids = [3523, 2745, 3160, 1567] - competitions = Competition.objects.filter(id__in=featured_competiion_ids) + if len(competitions) <= limit: return competitions - except Exception: - return [] + else: + return random.sample(list(competitions), limit) diff --git a/src/apps/datasets/migrations/0008_auto_20241121_0922.py b/src/apps/datasets/migrations/0008_auto_20241121_0922.py new file mode 100644 index 000000000..e79d81c57 --- /dev/null +++ b/src/apps/datasets/migrations/0008_auto_20241121_0922.py @@ -0,0 +1,20 @@ +# Generated by Django 2.2.17 on 2024-11-21 09:22 + +from django.db import migrations, models +import storages.backends.s3boto3 +import utils.data + + +class Migration(migrations.Migration): + + dependencies = [ + ('datasets', '0007_auto_20230609_1738'), + ] + + operations = [ + migrations.AlterField( + model_name='data', + name='data_file', + field=models.FileField(blank=True, null=True, storage=storages.backends.s3boto3.S3Boto3Storage(), upload_to=utils.data.PathWrapper('dataset')), + ), + ] From d53985a7966a6edc42cdfe88eb414cb957ab4adb Mon Sep 17 00:00:00 2001 From: Ihsan Ullah Date: Thu, 21 Nov 2024 14:37:05 +0500 Subject: [PATCH 2/3] spelling fixed in comment --- src/apps/competitions/models.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/apps/competitions/models.py b/src/apps/competitions/models.py index 1e77c4e92..3ff00d734 100644 --- a/src/apps/competitions/models.py +++ b/src/apps/competitions/models.py @@ -78,7 +78,7 @@ class Competition(ChaHubSaveMixin, models.Model): # If true, participants see the make their submissions public can_participants_make_submissions_public = models.BooleanField(default=True) - # If true, competition is featured and may shaow up on the home page + # If true, competition is featured and may show up on the home page is_featured = models.BooleanField(default=False) def __str__(self): From 8f01b69192c9371918be312b0b86b3f40c977208 Mon Sep 17 00:00:00 2001 From: didayolo Date: Tue, 3 Dec 2024 14:14:20 +0100 Subject: [PATCH 3/3] Merge migrations from PR1 and PR2 --- .../migrations/0051_merge_20241203_1313.py | 14 ++++++++++++++ .../migrations/0009_merge_20241203_1313.py | 14 ++++++++++++++ 2 files changed, 28 insertions(+) create mode 100644 src/apps/competitions/migrations/0051_merge_20241203_1313.py create mode 100644 src/apps/datasets/migrations/0009_merge_20241203_1313.py diff --git a/src/apps/competitions/migrations/0051_merge_20241203_1313.py b/src/apps/competitions/migrations/0051_merge_20241203_1313.py new file mode 100644 index 000000000..52b57e54c --- /dev/null +++ b/src/apps/competitions/migrations/0051_merge_20241203_1313.py @@ -0,0 +1,14 @@ +# Generated by Django 2.2.28 on 2024-12-03 13:13 + +from django.db import migrations + + +class Migration(migrations.Migration): + + dependencies = [ + ('competitions', '0050_auto_20241128_0814'), + ('competitions', '0049_auto_20241121_0922'), + ] + + operations = [ + ] diff --git a/src/apps/datasets/migrations/0009_merge_20241203_1313.py b/src/apps/datasets/migrations/0009_merge_20241203_1313.py new file mode 100644 index 000000000..8094aaba1 --- /dev/null +++ b/src/apps/datasets/migrations/0009_merge_20241203_1313.py @@ -0,0 +1,14 @@ +# Generated by Django 2.2.28 on 2024-12-03 13:13 + +from django.db import migrations + + +class Migration(migrations.Migration): + + dependencies = [ + ('datasets', '0008_auto_20241118_1106'), + ('datasets', '0008_auto_20241121_0922'), + ] + + operations = [ + ]