Skip to content

Commit

Permalink
Add mock response and factories
Browse files Browse the repository at this point in the history
  • Loading branch information
susilnem authored and thenav56 committed Oct 17, 2024
1 parent 5b029a9 commit 31a387b
Show file tree
Hide file tree
Showing 5 changed files with 182 additions and 41 deletions.
41 changes: 41 additions & 0 deletions per/factories.py
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@
import factory
from factory import fuzzy

from deployments.factories.project import SectorTagFactory
from per.models import (
AssessmentType,
Form,
Expand All @@ -12,6 +13,10 @@
FormData,
FormPrioritization,
FormQuestion,
OpsLearning,
OpsLearningCacheResponse,
OpsLearningComponentCacheResponse,
OpsLearningSectorCacheResponse,
Overview,
PerWorkPlan,
PerWorkPlanComponent,
Expand Down Expand Up @@ -59,6 +64,7 @@ class Meta:

class FormComponentFactory(factory.django.DjangoModelFactory):
area = factory.SubFactory(FormAreaFactory)
title = fuzzy.FuzzyText(length=50, prefix="component-")

class Meta:
model = FormComponent
Expand Down Expand Up @@ -97,3 +103,38 @@ class FormPrioritizationFactory(factory.django.DjangoModelFactory):

class Meta:
model = FormPrioritization


class OpsLearningFactory(factory.django.DjangoModelFactory):
learning = fuzzy.FuzzyText(length=50)

class Meta:
model = OpsLearning


class OpsLearningCacheResponseFactory(factory.django.DjangoModelFactory):
used_filters_hash = fuzzy.FuzzyText(length=20)
insights_1 = fuzzy.FuzzyText(length=50, prefix="insight-")
insights_2 = fuzzy.FuzzyText(length=50, prefix="insight-")
insights_3 = fuzzy.FuzzyText(length=50, prefix="insight-")

class Meta:
model = OpsLearningCacheResponse


class OpsLearningSectorCacheResponseFactory(factory.django.DjangoModelFactory):
filter_response = factory.SubFactory(OpsLearningCacheResponseFactory)
summary = fuzzy.FuzzyText(length=50)
sector = factory.SubFactory(SectorTagFactory)

class Meta:
model = OpsLearningSectorCacheResponse


class OpsLearningComponentCacheResponseFactory(factory.django.DjangoModelFactory):
filter_response = factory.SubFactory(OpsLearningCacheResponseFactory)
summary = fuzzy.FuzzyText(length=50)
component = factory.SubFactory(FormComponentFactory)

class Meta:
model = OpsLearningComponentCacheResponse
64 changes: 64 additions & 0 deletions per/management/commands/create_dummy_opslearningsummary.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,64 @@
from django.core.management.base import BaseCommand
from django.conf import settings
from django.db import transaction

from per.factories import (
OpsLearningCacheResponseFactory,
OpsLearningComponentCacheResponseFactory,
OpsLearningFactory,
OpsLearningSectorCacheResponseFactory,
)


class Command(BaseCommand):
help = "Create dummy OpsLearningSummary"

def generate_sector_response(self, ops_learnings: list, ops_learning_cache_response):
"""
Generate dummy OpsLearningSectorCacheResponse
"""
dummy_ops_learning_sector_cache_response = OpsLearningSectorCacheResponseFactory.create_batch(
5,
filter_response=ops_learning_cache_response
)
for ops_learning_sector_cache in dummy_ops_learning_sector_cache_response:
ops_learning_sector_cache.used_ops_learning.add(
*ops_learnings
)

def generate_component_response(self, ops_learnings: list, ops_learning_cache_response: list):
"""
Generate dummy OpsLearningComponentCacheResponse
"""
dummy_ops_learning_component_cache_response = OpsLearningComponentCacheResponseFactory.create_batch(
5,
filter_response=ops_learning_cache_response
)
for ops_learning_component_cache in dummy_ops_learning_component_cache_response:
ops_learning_component_cache.used_ops_learning.add(
*ops_learnings
)

def generate_ops_learning_summary(self):
selected_ops_learning = OpsLearningFactory.create_batch(50, is_validated=True)

# Generating dummy OpsLearningCacheResponse
dummy_ops_learning_cache_responses = OpsLearningCacheResponseFactory.create_batch(5)
for ops_learning_cache in dummy_ops_learning_cache_responses:
ops_learning_cache.used_ops_learning.add(
*selected_ops_learning[:10]
)
self.generate_sector_response(selected_ops_learning[11:20], ops_learning_cache)
self.generate_component_response(selected_ops_learning[21:50], ops_learning_cache)

self.stdout.write(self.style.SUCCESS('Successfully created dummy OpsLearningSummary'))

@transaction.atomic
def handle(self, *args, **options):
if not settings.DEBUG and not settings.GO_ENVIRONMENT == 'development':
self.stderr.write(
'Dummy data generation is not allowed for this instance.'
' Use environment variable DEBUG set to True and GO_ENVIRONMENT to development'
)
return
self.generate_ops_learning_summary()
96 changes: 64 additions & 32 deletions per/migrations/0121_opslearningcacheresponse_and_more.py
Original file line number Diff line number Diff line change
@@ -1,55 +1,87 @@
# Generated by Django 4.2.13 on 2024-07-05 08:42
# Generated by Django 4.2.13 on 2024-07-09 09:35

from django.db import migrations, models
import django.db.models.deletion
from django.db import migrations, models


class Migration(migrations.Migration):

dependencies = [
('deployments', '0089_alter_emergencyproject_districts'),
('per', '0120_alter_formcomponent_status'),
("deployments", "0089_alter_emergencyproject_districts"),
("per", "0120_alter_formcomponent_status"),
]

operations = [
migrations.CreateModel(
name='OpsLearningCacheResponse',
name="OpsLearningCacheResponse",
fields=[
('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
('used_filters_hash', models.CharField(max_length=32, verbose_name='used filters hash')),
('used_filters', models.JSONField(default=dict, verbose_name='used filters')),
('used_prompt_hash', models.CharField(max_length=32, verbose_name='used prompt hash')),
('used_prompt', models.TextField(blank=True, null=True, verbose_name='used prompt')),
('insights_1', models.TextField(blank=True, null=True, verbose_name='insights 1')),
('insights_2', models.TextField(blank=True, null=True, verbose_name='insights 2')),
('insights_3', models.TextField(blank=True, null=True, verbose_name='insights 3')),
('modified_at', models.DateTimeField(auto_now=True, verbose_name='modified_at')),
('created_at', models.DateTimeField(auto_now_add=True, verbose_name='created at')),
('used_ops_learning', models.ManyToManyField(related_name='+', to='per.opslearning')),
("id", models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name="ID")),
("used_filters_hash", models.CharField(max_length=32, verbose_name="used filters hash")),
("used_filters", models.JSONField(default=dict, verbose_name="used filters")),
("used_prompt_hash", models.CharField(max_length=32, verbose_name="used prompt hash")),
("used_prompt", models.TextField(blank=True, null=True, verbose_name="used prompt")),
("insights_1", models.TextField(blank=True, null=True, verbose_name="insights 1")),
("insights_2", models.TextField(blank=True, null=True, verbose_name="insights 2")),
("insights_3", models.TextField(blank=True, null=True, verbose_name="insights 3")),
("modified_at", models.DateTimeField(auto_now=True, verbose_name="modified_at")),
("created_at", models.DateTimeField(auto_now_add=True, verbose_name="created at")),
("used_ops_learning", models.ManyToManyField(related_name="+", to="per.opslearning")),
],
),
migrations.CreateModel(
name='OpsLearningSectorCacheResponse',
name="OpsLearningSectorCacheResponse",
fields=[
('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
('summary', models.TextField(verbose_name='summary')),
('modified_at', models.DateTimeField(auto_now=True, verbose_name='modified_at')),
('created_at', models.DateTimeField(auto_now_add=True, verbose_name='created at')),
('filter_response', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='+', to='per.opslearningcacheresponse', verbose_name='filter response')),
('sector', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='+', to='deployments.sectortag', verbose_name='sector')),
('used_ops_learning', models.ManyToManyField(related_name='+', to='per.opslearning')),
("id", models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name="ID")),
("summary", models.TextField(verbose_name="summary")),
("modified_at", models.DateTimeField(auto_now=True, verbose_name="modified_at")),
("created_at", models.DateTimeField(auto_now_add=True, verbose_name="created at")),
(
"filter_response",
models.ForeignKey(
on_delete=django.db.models.deletion.CASCADE,
related_name="ops_learning_sector",
to="per.opslearningcacheresponse",
verbose_name="filter response",
),
),
(
"sector",
models.ForeignKey(
on_delete=django.db.models.deletion.CASCADE,
related_name="+",
to="deployments.sectortag",
verbose_name="sector",
),
),
("used_ops_learning", models.ManyToManyField(related_name="+", to="per.opslearning")),
],
),
migrations.CreateModel(
name='OpsLearningComponentCacheResponse',
name="OpsLearningComponentCacheResponse",
fields=[
('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
('summary', models.TextField(verbose_name='summary')),
('modified_at', models.DateTimeField(auto_now=True, verbose_name='modified_at')),
('created_at', models.DateTimeField(auto_now_add=True, verbose_name='created at')),
('component', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='+', to='per.formcomponent', verbose_name='component')),
('filter_response', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='+', to='per.opslearningcacheresponse', verbose_name='filter response')),
('used_ops_learning', models.ManyToManyField(related_name='+', to='per.opslearning')),
("id", models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name="ID")),
("summary", models.TextField(verbose_name="summary")),
("modified_at", models.DateTimeField(auto_now=True, verbose_name="modified_at")),
("created_at", models.DateTimeField(auto_now_add=True, verbose_name="created at")),
(
"component",
models.ForeignKey(
on_delete=django.db.models.deletion.CASCADE,
related_name="+",
to="per.formcomponent",
verbose_name="component",
),
),
(
"filter_response",
models.ForeignKey(
on_delete=django.db.models.deletion.CASCADE,
related_name="ops_learning_component",
to="per.opslearningcacheresponse",
verbose_name="filter response",
),
),
("used_ops_learning", models.ManyToManyField(related_name="+", to="per.opslearning")),
],
),
]
6 changes: 3 additions & 3 deletions per/models.py
Original file line number Diff line number Diff line change
Expand Up @@ -772,15 +772,15 @@ class OpsLearningCacheResponse(models.Model):
created_at = models.DateTimeField(verbose_name=_("created at"), auto_now_add=True)

def __str__(self) -> str:
return self.filter_hash
return self.used_filters_hash


class OpsLearningSectorCacheResponse(models.Model):
filter_response = models.ForeignKey(
OpsLearningCacheResponse,
verbose_name=_("filter response"),
on_delete=models.CASCADE,
related_name="+",
related_name="ops_learning_sector",
)
sector = models.ForeignKey(
SectorTag,
Expand All @@ -805,7 +805,7 @@ class OpsLearningComponentCacheResponse(models.Model):
OpsLearningCacheResponse,
verbose_name=_("filter response"),
on_delete=models.CASCADE,
related_name="+",
related_name="ops_learning_component",
)
component = models.ForeignKey(
FormComponent,
Expand Down
16 changes: 10 additions & 6 deletions per/serializers.py
Original file line number Diff line number Diff line change
Expand Up @@ -1136,20 +1136,24 @@ class Meta:


class OpsLearningSectorCacheResponseSerializer(serializers.ModelSerializer):
title = serializers.CharField(source="sector.title", read_only=True)

class Meta:
model = OpsLearningSectorCacheResponse
fields = ["summary"]
fields = ["summary", "title"]


class OpsLearningComponentCacheResponseSerializer(serializers.ModelSerializer):
title = serializers.CharField(source="component.title", read_only=True)

class Meta:
model = OpsLearningComponentCacheResponse
fields = ["summary"]
fields = ["summary", "title",]


class OpsLearningSummarySerializer(serializers.ModelSerializer):
by_sectors = OpsLearningSectorCacheResponseSerializer(many=True)
by_components = OpsLearningComponentCacheResponseSerializer(many=True)
sectors = OpsLearningSectorCacheResponseSerializer(source="ops_learning_sector", many=True)
components = OpsLearningComponentCacheResponseSerializer(source="ops_learning_component", many=True)

class Meta:
model = OpsLearningCacheResponse
Expand All @@ -1158,6 +1162,6 @@ class Meta:
"insights_1",
"insights_2",
"insights_3",
"by_sectors",
"by_components",
"sectors",
"components",
]

0 comments on commit 31a387b

Please sign in to comment.