From dc9ccc06502727223dfb971fb3bab84eac907204 Mon Sep 17 00:00:00 2001 From: Sushil Tiwari Date: Mon, 24 Feb 2025 15:39:20 +0545 Subject: [PATCH] Generate emergency title and add skip title generation flag --- api/admin.py | 4 +- api/factories/event.py | 1 + api/management/commands/create_events.py | 3 +- api/management/commands/ingest_gdacs.py | 3 +- api/management/commands/ingest_who.py | 3 +- ...auto_generate_name_event_title_and_more.py | 69 +++++ api/models.py | 38 +++ api/receivers.py | 9 + api/serializers.py | 5 +- api/test_models.py | 14 +- api/test_views.py | 4 +- api/translation.py | 3 +- api/utils.py | 4 +- deployments/snapshots/snap_tests.py | 262 +++++++++--------- deployments/tests.py | 20 +- 15 files changed, 288 insertions(+), 154 deletions(-) create mode 100644 api/migrations/0219_event_skip_auto_generate_name_event_title_and_more.py diff --git a/api/admin.py b/api/admin.py index 02bd8bcac..0318aaadf 100644 --- a/api/admin.py +++ b/api/admin.py @@ -248,12 +248,14 @@ def changeform_view(self, request, *args, **kwargs): "field_reports", "auto_generated_source", "parent_event", + "name", ) else: self.readonly_fields = ( "appeals", "field_reports", "auto_generated_source", + "name", ) return super(EventAdmin, self).changeform_view(request, *args, **kwargs) @@ -337,7 +339,7 @@ class FieldReportAdmin(CompareVersionAdmin, RegionRestrictedAdmin, TranslationAd def create_events(self, request, queryset): for report in queryset: event = models.Event.objects.create( - name=report.summary, + title=report.title, dtype=getattr(report, "dtype"), disaster_start_date=getattr(report, "created_at"), auto_generated=True, diff --git a/api/factories/event.py b/api/factories/event.py index f3656a2e6..71bf55b62 100644 --- a/api/factories/event.py +++ b/api/factories/event.py @@ -23,6 +23,7 @@ class Meta: model = Event name = fuzzy.FuzzyText(length=50) + title = fuzzy.FuzzyText(length=10) slug = fuzzy.FuzzyText(length=50) dtype = factory.SubFactory(DisasterTypeFactory) diff --git a/api/management/commands/create_events.py b/api/management/commands/create_events.py index 7078b772f..519bc8c5f 100644 --- a/api/management/commands/create_events.py +++ b/api/management/commands/create_events.py @@ -14,11 +14,12 @@ def handle(self, *args, **options): print("Creating %s events" % len(appeals_without_events)) for appeal in appeals_without_events: fields = { - "name": appeal.name, + "title": appeal.name, "dtype": appeal.dtype, "disaster_start_date": appeal.start_date, "auto_generated": True, "auto_generated_source": SOURCES["appeal_admin"], + "skip_auto_generate_name": True, } event = Event.objects.create(**fields) if appeal.country is not None: diff --git a/api/management/commands/ingest_gdacs.py b/api/management/commands/ingest_gdacs.py index c356d1cfc..c896eb100 100644 --- a/api/management/commands/ingest_gdacs.py +++ b/api/management/commands/ingest_gdacs.py @@ -100,11 +100,12 @@ def handle(self, *args, **options): title = "%s..." % title[:97] fields = { - "name": title, + "title": title, "summary": data["description"], "disaster_start_date": data["publication_date"], "auto_generated": True, "auto_generated_source": SOURCES["gdacs"], + "skip_auto_generate_name": True, "ifrc_severity_level": data["alert_level"], } event = Event.objects.create(**fields) diff --git a/api/management/commands/ingest_who.py b/api/management/commands/ingest_who.py index bdc0704c8..26b575241 100644 --- a/api/management/commands/ingest_who.py +++ b/api/management/commands/ingest_who.py @@ -127,11 +127,12 @@ def handle(self, *args, **options): summary = data["description"] + " (" + data["category"] + ")" fields = { - "name": title, + "title": title, "summary": summary, "disaster_start_date": date, "auto_generated": True, "auto_generated_source": data["guid"], + "skip_auto_generate_name": True, "ifrc_severity_level": alert_level, } # TODO: fields['name'] sometimes exceeds 100 maxlength, so will need some altering if this will be used diff --git a/api/migrations/0219_event_skip_auto_generate_name_event_title_and_more.py b/api/migrations/0219_event_skip_auto_generate_name_event_title_and_more.py new file mode 100644 index 000000000..63a88e2b9 --- /dev/null +++ b/api/migrations/0219_event_skip_auto_generate_name_event_title_and_more.py @@ -0,0 +1,69 @@ +# Generated by Django 4.2.17 on 2025-02-24 06:59 + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ("api", "0218_remove_event_title_remove_event_title_ar_and_more"), + ] + + operations = [ + migrations.AddField( + model_name="event", + name="skip_auto_generate_name", + field=models.BooleanField( + default=False, help_text="If checked, the name of the Emergency will not be auto-generated. " + ), + ), + migrations.AddField( + model_name="event", + name="title", + field=models.CharField( + blank=True, + help_text="Title is used to generate the name of the Emergency.
The name is constructed as: Country IS03 or Name: Disaster Type - Start Date - Title", + max_length=256, + ), + ), + migrations.AddField( + model_name="event", + name="title_ar", + field=models.CharField( + blank=True, + help_text="Title is used to generate the name of the Emergency.
The name is constructed as: Country IS03 or Name: Disaster Type - Start Date - Title", + max_length=256, + null=True, + ), + ), + migrations.AddField( + model_name="event", + name="title_en", + field=models.CharField( + blank=True, + help_text="Title is used to generate the name of the Emergency.
The name is constructed as: Country IS03 or Name: Disaster Type - Start Date - Title", + max_length=256, + null=True, + ), + ), + migrations.AddField( + model_name="event", + name="title_es", + field=models.CharField( + blank=True, + help_text="Title is used to generate the name of the Emergency.
The name is constructed as: Country IS03 or Name: Disaster Type - Start Date - Title", + max_length=256, + null=True, + ), + ), + migrations.AddField( + model_name="event", + name="title_fr", + field=models.CharField( + blank=True, + help_text="Title is used to generate the name of the Emergency.
The name is constructed as: Country IS03 or Name: Disaster Type - Start Date - Title", + max_length=256, + null=True, + ), + ), + ] diff --git a/api/models.py b/api/models.py index d174f7fb0..26ba2306d 100644 --- a/api/models.py +++ b/api/models.py @@ -741,6 +741,19 @@ def snippet_image_path(instance, filename): class Event(models.Model): """A disaster, which could cover multiple countries""" + title = models.CharField( + max_length=256, + blank=True, + help_text=_( + "Title is used to generate the name of the Emergency.
" + "The name is constructed as: " + "Country IS03 or Name: Disaster Type - Start Date - Title" + ), + ) + skip_auto_generate_name = models.BooleanField( + default=False, + help_text=_("If checked, the name of the Emergency will not be auto-generated. "), + ) name = models.CharField(verbose_name=_("name"), max_length=256) dtype = models.ForeignKey(DisasterType, verbose_name=_("disaster type"), null=True, on_delete=models.SET_NULL) disaster_start_date = models.DateTimeField(verbose_name=_("disaster start date")) @@ -872,6 +885,22 @@ def record_type(self): def to_dict(self): return to_dict(self) + def generate_formatted_name(self): + disaster_start_date = self.disaster_start_date.strftime("%m-%Y") + # NOTE: using the country name if the iso3 is not available eg: Africa Region + country_iso3_or_name = ( + self.countries.first().iso3 or self.countries.first().name if self.id and self.countries.first() else "N/A" + ) + for lang in AVAILABLE_LANGUAGES: + with translation_override(lang): + dtype = self.dtype.name if self.dtype else "N/A" + # NOTE: Skip Auto generating name if the skip_auto_generate_name is True + if self.skip_auto_generate_name: + self.name = self.title + else: + self.name = f"{country_iso3_or_name}: {dtype} - {disaster_start_date} - {self.title}" + yield build_localized_fieldname("name", lang) + def save(self, *args, **kwargs): # Make the slug lowercase @@ -882,6 +911,15 @@ def save(self, *args, **kwargs): if not self.id and not self.disaster_start_date: self.disaster_start_date = timezone.now() + updated_name_fields = list(self.generate_formatted_name()) + + # Updating the updated_fields with the fields that are updated + if kwargs.get("update_fields"): + kwargs["update_fields"] = ( + *kwargs["update_fields"], + *updated_name_fields, + ) + return super(Event, self).save(*args, **kwargs) def __str__(self): diff --git a/api/receivers.py b/api/receivers.py index dfa57a304..b8f182e3f 100644 --- a/api/receivers.py +++ b/api/receivers.py @@ -288,6 +288,15 @@ def remove_appeal_filter(sender, instance, using, **kwargs): appealFilter.save() +@receiver(m2m_changed, sender=Event.countries.through) +def update_event_name(sender, instance, action, **kwargs): + """ + Update the event name when the countries are changed. + """ + if action in ["post_add", "post_remove"]: + instance.save() + + @receiver(m2m_changed, sender=FieldReport.countries.through) def update_fieldreport_summary(sender, instance, action, **kwargs): """ diff --git a/api/serializers.py b/api/serializers.py index 70d28e7be..bcb9f54ae 100644 --- a/api/serializers.py +++ b/api/serializers.py @@ -1164,6 +1164,7 @@ class Meta: "dtype", "countries", "summary", + "title", "num_affected", "ifrc_severity_level", "ifrc_severity_level_display", @@ -1215,6 +1216,7 @@ class Meta: "dtype_name", "countries", "summary", + "title", "num_affected", "ifrc_severity_level", "glide", @@ -1299,6 +1301,7 @@ class Meta: "countries", "districts", "summary", + "title", "num_affected", "tab_two_title", "tab_three_title", @@ -2056,7 +2059,7 @@ class Meta: def create_event(self, report): event = Event.objects.create( - name=report.summary, + title=report.title, dtype=report.dtype, summary=report.description or "", disaster_start_date=report.start_date, diff --git a/api/test_models.py b/api/test_models.py index f63d3355c..1038f3505 100644 --- a/api/test_models.py +++ b/api/test_models.py @@ -26,14 +26,14 @@ class EventTest(TestCase): def setUp(self): dtype = models.DisasterType.objects.get(pk=1) - models.Event.objects.create(name="disaster1", summary="test disaster", dtype=dtype) - event = models.Event.objects.create(name="disaster2", summary="another test disaster", dtype=dtype) + models.Event.objects.create(title="disaster1", summary="test disaster", dtype=dtype) + event = models.Event.objects.create(title="disaster2", summary="another test disaster", dtype=dtype) models.KeyFigure.objects.create(event=event, number=7, deck="things", source="website") models.Snippet.objects.create(event=event, snippet="this is a snippet") def test_disaster_create(self): - obj1 = models.Event.objects.get(name="disaster1") - obj2 = models.Event.objects.get(name="disaster2") + obj1 = models.Event.objects.get(title="disaster1") + obj2 = models.Event.objects.get(title="disaster2") self.assertEqual(obj1.summary, "test disaster") self.assertEqual(obj2.summary, "another test disaster") keyfig = obj2.key_figures.all() @@ -68,7 +68,7 @@ def test_profile_create(self): class AppealTest(APITestCase): def setUp(self): # An appeal with needs_confirmation=True should not return the event in the API response. - event = models.Event.objects.create(name="associated event", summary="foo") + event = models.Event.objects.create(title="associated event", summary="foo") country = models.Country.objects.create(name="country") models.Appeal.objects.create( aid="test1", name="appeal", atype=1, code="abc", needs_confirmation=True, event=event, country=country @@ -87,13 +87,13 @@ class FieldReportTest(TestCase): def setUp(self): dtype = models.DisasterType.objects.get(pk=1) - event = models.Event.objects.create(name="disaster1", summary="test disaster", dtype=dtype) + event = models.Event.objects.create(title="disaster1", summary="test disaster", dtype=dtype) country = models.Country.objects.create(name="country") report = models.FieldReport.objects.create(rid="test1", event=event, dtype=dtype) report.countries.add(country) def test_field_report_create(self): - event = models.Event.objects.get(name="disaster1") + event = models.Event.objects.get(title="disaster1") country = models.Country.objects.get(name="country") self.assertEqual(event.field_reports.all()[0].countries.all()[0], country) obj = models.FieldReport.objects.get(rid="test1") diff --git a/api/test_views.py b/api/test_views.py index f4f67b945..4b9cff70c 100644 --- a/api/test_views.py +++ b/api/test_views.py @@ -308,7 +308,7 @@ def test_sit_rep_types(self): type1 = models.SituationReportType.objects.create(type="Lyric") type2 = models.SituationReportType.objects.create(type="Epic") dtype1 = models.DisasterType.objects.get(pk=1) - event1 = models.Event.objects.create(name="disaster1", summary="test disaster1", dtype=dtype1) + event1 = models.Event.objects.create(title="disaster1", summary="test disaster1", dtype=dtype1) models.SituationReport.objects.create(name="test1", event=event1, type=type1, visibility=3) models.SituationReport.objects.create(name="test2", event=event1, type=type2, visibility=3) @@ -386,7 +386,7 @@ def test_create_and_update(self): self.assertEqual(created.title_en, "test") # created an emergency automatically - self.assertEqual(created.event.name, response["summary"]) + self.assertEqual(created.event.title, "test") # event_pk = created.event.id # body['countries'] = [country2.id] diff --git a/api/translation.py b/api/translation.py index c801b355b..a68847800 100644 --- a/api/translation.py +++ b/api/translation.py @@ -78,7 +78,8 @@ class DisasterTypeTO(TranslationOptions): @register(Event) class EventTO(TranslationOptions): - fields = ("name", "summary") + fields = ("name", "summary", "title") + skip_fields = ("name",) # XXX: CUSTOM field Not used by TranslationOptions, but used in lang/tasks.py @register(ExternalPartner) diff --git a/api/utils.py b/api/utils.py index 925a5b8ed..2781cdb28 100644 --- a/api/utils.py +++ b/api/utils.py @@ -135,8 +135,8 @@ def generate_field_report_title( # NOTE: Checking if event or country is changed while Updating if id: fr = get_object_or_404(FieldReport, id=id) - if fr.event == event and fr.countries.first() == country: - fr_num = current_fr_number + if fr.fr_num and fr.event == event and fr.countries.first() == country: + fr_num = fr.fr_num suffix = "" if fr_num > 1 and event: diff --git a/deployments/snapshots/snap_tests.py b/deployments/snapshots/snap_tests.py index efb4e9f1b..78cda6642 100644 --- a/deployments/snapshots/snap_tests.py +++ b/deployments/snapshots/snap_tests.py @@ -91,16 +91,16 @@ snapshots[ "TestProjectAPI::test_project_csv_api 1" ] = """actual_expenditure,budget_amount,description,document,dtype,dtype_detail.id,dtype_detail.name,dtype_detail.summary,dtype_detail.translation_module_original_language,end_date,event,event_detail.dtype,event_detail.emergency_response_contact_email,event_detail.id,event_detail.name,event_detail.parent_event,event_detail.slug,event_detail.start_date,event_detail.translation_module_original_language,id,modified_at,modified_by,modified_by_detail,name,operation_type,operation_type_display,primary_sector,primary_sector_display,programme_type,programme_type_display,project_country,project_country_detail.id,project_country_detail.iso,project_country_detail.iso3,project_country_detail.name,project_country_detail.society_name,project_districts_detail.code,project_districts_detail.id,project_districts_detail.is_deprecated,project_districts_detail.is_enclave,project_districts_detail.name,reached_female,reached_male,reached_other,reached_total,regional_project,regional_project_detail.created_at,regional_project_detail.id,regional_project_detail.modified_at,regional_project_detail.name,regional_project_detail.translation_module_original_language,regional_project_detail.translation_module_skip_auto_translation,reporting_ns,reporting_ns_contact_email,reporting_ns_contact_name,reporting_ns_contact_role,reporting_ns_detail.id,reporting_ns_detail.iso,reporting_ns_detail.iso3,reporting_ns_detail.name,reporting_ns_detail.society_name,secondary_sectors,secondary_sectors_display,start_date,status,status_display,target_female,target_male,target_other,target_total,translation_module_original_language,translation_module_skip_auto_translation,user,visibility,visibility_display\r -0,100000,,,1,1,disaster-type-1,summary,en,2008-01-01,2,1,,2,event-1,1,event-slug,,en,1,2008-01-01T00:00:00.123456Z,,,project-1,1,Emergency Operation,1,sect-1,0,Bilateral,1,1,bV,rpo,country-1,society-name-1,"dct1, dct2","1, 2","True, False","False, True","district-1, district-2",0,0,0,0,1,2008-01-01T00:00:00.123456Z,1,2008-01-01T00:00:00.123456Z,regional-project-1,en,False,1,,,,1,bV,rpo,country-1,society-name-1,"1, 2","sec-tag-1, sec-tag-2",2008-01-01,1,Ongoing,0,0,0,0,en,False,5,public,Public\r -0,100000,,,1,1,disaster-type-1,summary,en,2008-01-01,2,1,,2,event-1,1,event-slug,,en,2,2008-01-01T00:00:00.123456Z,,,project-1,1,Emergency Operation,1,sect-1,0,Bilateral,1,1,bV,rpo,country-1,society-name-1,"dct1, dct2","1, 2","True, False","False, True","district-1, district-2",0,0,0,0,1,2008-01-01T00:00:00.123456Z,1,2008-01-01T00:00:00.123456Z,regional-project-1,en,False,1,,,,1,bV,rpo,country-1,society-name-1,"1, 2","sec-tag-1, sec-tag-2",2008-01-01,1,Ongoing,0,0,0,0,en,False,6,public,Public\r -0,100000,,,1,1,disaster-type-1,summary,en,2008-01-01,2,1,,2,event-1,1,event-slug,,en,3,2008-01-01T00:00:00.123456Z,,,project-1,1,Emergency Operation,1,sect-1,0,Bilateral,1,1,bV,rpo,country-1,society-name-1,"dct1, dct2","1, 2","True, False","False, True","district-1, district-2",0,0,0,0,1,2008-01-01T00:00:00.123456Z,1,2008-01-01T00:00:00.123456Z,regional-project-1,en,False,1,,,,1,bV,rpo,country-1,society-name-1,"1, 2","sec-tag-1, sec-tag-2",2008-01-01,1,Ongoing,0,0,0,0,en,False,7,public,Public\r -0,100000,,,1,1,disaster-type-1,summary,en,2008-01-01,2,1,,2,event-1,1,event-slug,,en,4,2008-01-01T00:00:00.123456Z,,,project-1,1,Emergency Operation,1,sect-1,0,Bilateral,1,1,bV,rpo,country-1,society-name-1,"dct1, dct2","1, 2","True, False","False, True","district-1, district-2",0,0,0,0,1,2008-01-01T00:00:00.123456Z,1,2008-01-01T00:00:00.123456Z,regional-project-1,en,False,1,,,,1,bV,rpo,country-1,society-name-1,"1, 2","sec-tag-1, sec-tag-2",2008-01-01,1,Ongoing,0,0,0,0,en,False,8,public,Public\r -0,100000,,,1,1,disaster-type-1,summary,en,2008-01-01,2,1,,2,event-1,1,event-slug,,en,5,2008-01-01T00:00:00.123456Z,,,project-1,1,Emergency Operation,1,sect-1,0,Bilateral,1,1,bV,rpo,country-1,society-name-1,"dct1, dct2","1, 2","True, False","False, True","district-1, district-2",0,0,0,0,1,2008-01-01T00:00:00.123456Z,1,2008-01-01T00:00:00.123456Z,regional-project-1,en,False,1,,,,1,bV,rpo,country-1,society-name-1,"1, 2","sec-tag-1, sec-tag-2",2008-01-01,1,Ongoing,0,0,0,0,en,False,9,public,Public\r -0,100000,,,1,1,disaster-type-1,summary,en,2008-01-01,2,1,,2,event-1,1,event-slug,,en,6,2008-01-01T00:00:00.123456Z,,,project-1,1,Emergency Operation,1,sect-1,0,Bilateral,1,1,bV,rpo,country-1,society-name-1,"dct1, dct2","1, 2","True, False","False, True","district-1, district-2",0,0,0,0,1,2008-01-01T00:00:00.123456Z,1,2008-01-01T00:00:00.123456Z,regional-project-1,en,False,1,,,,1,bV,rpo,country-1,society-name-1,"1, 2","sec-tag-1, sec-tag-2",2008-01-01,1,Ongoing,0,0,0,0,en,False,10,public,Public\r -0,100000,,,1,1,disaster-type-1,summary,en,2008-01-01,2,1,,2,event-1,1,event-slug,,en,7,2008-01-01T00:00:00.123456Z,,,project-1,1,Emergency Operation,1,sect-1,0,Bilateral,1,1,bV,rpo,country-1,society-name-1,"dct1, dct2","1, 2","True, False","False, True","district-1, district-2",0,0,0,0,1,2008-01-01T00:00:00.123456Z,1,2008-01-01T00:00:00.123456Z,regional-project-1,en,False,1,,,,1,bV,rpo,country-1,society-name-1,"1, 2","sec-tag-1, sec-tag-2",2008-01-01,1,Ongoing,0,0,0,0,en,False,11,public,Public\r -0,100000,,,1,1,disaster-type-1,summary,en,2008-01-01,2,1,,2,event-1,1,event-slug,,en,8,2008-01-01T00:00:00.123456Z,,,project-1,1,Emergency Operation,1,sect-1,0,Bilateral,1,1,bV,rpo,country-1,society-name-1,"dct1, dct2","1, 2","True, False","False, True","district-1, district-2",0,0,0,0,1,2008-01-01T00:00:00.123456Z,1,2008-01-01T00:00:00.123456Z,regional-project-1,en,False,1,,,,1,bV,rpo,country-1,society-name-1,"1, 2","sec-tag-1, sec-tag-2",2008-01-01,1,Ongoing,0,0,0,0,en,False,12,public,Public\r -0,100000,,,1,1,disaster-type-1,summary,en,2008-01-01,2,1,,2,event-1,1,event-slug,,en,9,2008-01-01T00:00:00.123456Z,,,project-1,1,Emergency Operation,1,sect-1,0,Bilateral,1,1,bV,rpo,country-1,society-name-1,"dct1, dct2","1, 2","True, False","False, True","district-1, district-2",0,0,0,0,1,2008-01-01T00:00:00.123456Z,1,2008-01-01T00:00:00.123456Z,regional-project-1,en,False,1,,,,1,bV,rpo,country-1,society-name-1,"1, 2","sec-tag-1, sec-tag-2",2008-01-01,1,Ongoing,0,0,0,0,en,False,13,public,Public\r -0,100000,,,1,1,disaster-type-1,summary,en,2008-01-01,2,1,,2,event-1,1,event-slug,,en,10,2008-01-01T00:00:00.123456Z,,,project-1,1,Emergency Operation,1,sect-1,0,Bilateral,1,1,bV,rpo,country-1,society-name-1,"dct1, dct2","1, 2","True, False","False, True","district-1, district-2",0,0,0,0,1,2008-01-01T00:00:00.123456Z,1,2008-01-01T00:00:00.123456Z,regional-project-1,en,False,1,,,,1,bV,rpo,country-1,society-name-1,"1, 2","sec-tag-1, sec-tag-2",2008-01-01,1,Ongoing,0,0,0,0,en,False,14,public,Public\r +0,100000,,,1,1,disaster-type-1,summary,en,2008-01-01,2,1,,2,NPL: disaster-type-1 - 08-2022 - event-1,1,event-slug,,en,1,2008-01-01T00:00:00.123456Z,,,project-1,1,Emergency Operation,1,sect-1,0,Bilateral,1,1,bV,NPL,country-1,society-name-1,"dct1, dct2","1, 2","False, True","True, False","district-1, district-2",0,0,0,0,1,2008-01-01T00:00:00.123456Z,1,2008-01-01T00:00:00.123456Z,regional-project-1,en,False,1,,,,1,bV,NPL,country-1,society-name-1,"1, 2","sec-tag-1, sec-tag-2",2008-01-01,1,Ongoing,0,0,0,0,en,False,5,public,Public\r +0,100000,,,1,1,disaster-type-1,summary,en,2008-01-01,2,1,,2,NPL: disaster-type-1 - 08-2022 - event-1,1,event-slug,,en,2,2008-01-01T00:00:00.123456Z,,,project-1,1,Emergency Operation,1,sect-1,0,Bilateral,1,1,bV,NPL,country-1,society-name-1,"dct1, dct2","1, 2","False, True","True, False","district-1, district-2",0,0,0,0,1,2008-01-01T00:00:00.123456Z,1,2008-01-01T00:00:00.123456Z,regional-project-1,en,False,1,,,,1,bV,NPL,country-1,society-name-1,"1, 2","sec-tag-1, sec-tag-2",2008-01-01,1,Ongoing,0,0,0,0,en,False,6,public,Public\r +0,100000,,,1,1,disaster-type-1,summary,en,2008-01-01,2,1,,2,NPL: disaster-type-1 - 08-2022 - event-1,1,event-slug,,en,3,2008-01-01T00:00:00.123456Z,,,project-1,1,Emergency Operation,1,sect-1,0,Bilateral,1,1,bV,NPL,country-1,society-name-1,"dct1, dct2","1, 2","False, True","True, False","district-1, district-2",0,0,0,0,1,2008-01-01T00:00:00.123456Z,1,2008-01-01T00:00:00.123456Z,regional-project-1,en,False,1,,,,1,bV,NPL,country-1,society-name-1,"1, 2","sec-tag-1, sec-tag-2",2008-01-01,1,Ongoing,0,0,0,0,en,False,7,public,Public\r +0,100000,,,1,1,disaster-type-1,summary,en,2008-01-01,2,1,,2,NPL: disaster-type-1 - 08-2022 - event-1,1,event-slug,,en,4,2008-01-01T00:00:00.123456Z,,,project-1,1,Emergency Operation,1,sect-1,0,Bilateral,1,1,bV,NPL,country-1,society-name-1,"dct1, dct2","1, 2","False, True","True, False","district-1, district-2",0,0,0,0,1,2008-01-01T00:00:00.123456Z,1,2008-01-01T00:00:00.123456Z,regional-project-1,en,False,1,,,,1,bV,NPL,country-1,society-name-1,"1, 2","sec-tag-1, sec-tag-2",2008-01-01,1,Ongoing,0,0,0,0,en,False,8,public,Public\r +0,100000,,,1,1,disaster-type-1,summary,en,2008-01-01,2,1,,2,NPL: disaster-type-1 - 08-2022 - event-1,1,event-slug,,en,5,2008-01-01T00:00:00.123456Z,,,project-1,1,Emergency Operation,1,sect-1,0,Bilateral,1,1,bV,NPL,country-1,society-name-1,"dct1, dct2","1, 2","False, True","True, False","district-1, district-2",0,0,0,0,1,2008-01-01T00:00:00.123456Z,1,2008-01-01T00:00:00.123456Z,regional-project-1,en,False,1,,,,1,bV,NPL,country-1,society-name-1,"1, 2","sec-tag-1, sec-tag-2",2008-01-01,1,Ongoing,0,0,0,0,en,False,9,public,Public\r +0,100000,,,1,1,disaster-type-1,summary,en,2008-01-01,2,1,,2,NPL: disaster-type-1 - 08-2022 - event-1,1,event-slug,,en,6,2008-01-01T00:00:00.123456Z,,,project-1,1,Emergency Operation,1,sect-1,0,Bilateral,1,1,bV,NPL,country-1,society-name-1,"dct1, dct2","1, 2","False, True","True, False","district-1, district-2",0,0,0,0,1,2008-01-01T00:00:00.123456Z,1,2008-01-01T00:00:00.123456Z,regional-project-1,en,False,1,,,,1,bV,NPL,country-1,society-name-1,"1, 2","sec-tag-1, sec-tag-2",2008-01-01,1,Ongoing,0,0,0,0,en,False,10,public,Public\r +0,100000,,,1,1,disaster-type-1,summary,en,2008-01-01,2,1,,2,NPL: disaster-type-1 - 08-2022 - event-1,1,event-slug,,en,7,2008-01-01T00:00:00.123456Z,,,project-1,1,Emergency Operation,1,sect-1,0,Bilateral,1,1,bV,NPL,country-1,society-name-1,"dct1, dct2","1, 2","False, True","True, False","district-1, district-2",0,0,0,0,1,2008-01-01T00:00:00.123456Z,1,2008-01-01T00:00:00.123456Z,regional-project-1,en,False,1,,,,1,bV,NPL,country-1,society-name-1,"1, 2","sec-tag-1, sec-tag-2",2008-01-01,1,Ongoing,0,0,0,0,en,False,11,public,Public\r +0,100000,,,1,1,disaster-type-1,summary,en,2008-01-01,2,1,,2,NPL: disaster-type-1 - 08-2022 - event-1,1,event-slug,,en,8,2008-01-01T00:00:00.123456Z,,,project-1,1,Emergency Operation,1,sect-1,0,Bilateral,1,1,bV,NPL,country-1,society-name-1,"dct1, dct2","1, 2","False, True","True, False","district-1, district-2",0,0,0,0,1,2008-01-01T00:00:00.123456Z,1,2008-01-01T00:00:00.123456Z,regional-project-1,en,False,1,,,,1,bV,NPL,country-1,society-name-1,"1, 2","sec-tag-1, sec-tag-2",2008-01-01,1,Ongoing,0,0,0,0,en,False,12,public,Public\r +0,100000,,,1,1,disaster-type-1,summary,en,2008-01-01,2,1,,2,NPL: disaster-type-1 - 08-2022 - event-1,1,event-slug,,en,9,2008-01-01T00:00:00.123456Z,,,project-1,1,Emergency Operation,1,sect-1,0,Bilateral,1,1,bV,NPL,country-1,society-name-1,"dct1, dct2","1, 2","False, True","True, False","district-1, district-2",0,0,0,0,1,2008-01-01T00:00:00.123456Z,1,2008-01-01T00:00:00.123456Z,regional-project-1,en,False,1,,,,1,bV,NPL,country-1,society-name-1,"1, 2","sec-tag-1, sec-tag-2",2008-01-01,1,Ongoing,0,0,0,0,en,False,13,public,Public\r +0,100000,,,1,1,disaster-type-1,summary,en,2008-01-01,2,1,,2,NPL: disaster-type-1 - 08-2022 - event-1,1,event-slug,,en,10,2008-01-01T00:00:00.123456Z,,,project-1,1,Emergency Operation,1,sect-1,0,Bilateral,1,1,bV,NPL,country-1,society-name-1,"dct1, dct2","1, 2","False, True","True, False","district-1, district-2",0,0,0,0,1,2008-01-01T00:00:00.123456Z,1,2008-01-01T00:00:00.123456Z,regional-project-1,en,False,1,,,,1,bV,NPL,country-1,society-name-1,"1, 2","sec-tag-1, sec-tag-2",2008-01-01,1,Ongoing,0,0,0,0,en,False,14,public,Public\r """ snapshots["TestProjectAPI::test_project_delete 1"] = b"" @@ -113,14 +113,14 @@ { "actual_expenditure": 0, "annual_splits": [], - "budget_amount": 6440000, + "budget_amount": 6200000, "description": "", "document": None, "dtype": 3, "dtype_detail": { "id": 3, - "name": "disaster-type-MSVGtSJuTVJOnmnNTsRwRiTPlGISOuThWwJELKQTARVIsBZaHg", - "summary": "byjdQdmrWYksRqjdSYsnWIcwCgNRVJoVPJypGYYZSsSQdyyAYRuJdaVqmNXCoOTTPxWLIVMmXUmsClRellVGhycBrJqikLqavDTjcjuMdXONQtFYKJweYTuHolHeYGkAIIzfwonQvvxsnWNHEJWPahQwCpPNNpcRuyYhyqIUsbHXxGZGCFcsPmuGfgkXIIaOenQOXnRBgnISVXBPeVRjbDTvcfedlYqJeKoqAyCOzBubyRhIaPUNeWVLcSewGgsYRtMfsWCyzQbEkIoiVzYZIsOjtRYUPxaJJjhcaKMzIJftnVVUwnAPGjkloNqmhlQZKdWJDPJesQeqgmULFvwiQPpgsNemuFCvNQtSLjKKxZuBkaupYoTVPBrxiRUvEDCwXtFJglPMfriImqUOeUebGObLLzXLncJqIIEPXjxzoXLUsiDGGfzxGaQpZNRkWGiCklKKQjVUEwcoWFoeqxocQnHYxyEDccPugTHOrVqLIKlyPyxLPeHq", + "name": "disaster-type-SESMjxXfpkFfRNvWOddwPjSIYgiFouJYPWwZCUmbSywUiqcFTC", + "summary": "JsISFmKlIwuUDrMJkeHjCsqIxDaXOGyUlbNxXNpuUeQIymHRFXJjNsuAPuhgHQecilcmgFmgcKPyQFHNSLqdxoMTeanPFfDZOdxJVAxYTdNrHcUetenHggUoIymmHQpKOlJVJAVgXOKwRDSQBgkYlJzGvQkIMCwuJuxAWOBUuMpKInyXJVqxCCzaUcsMbHitatonubXSrJGJKKjgcDwjiqxLpoqZtfKzKnUeUuYElFSSKgMPtcUZKyfXdXvwBAhXoVPMaOXOydtHcuIKjuGSojdRUzCWMKGfoBsYzjivfEKVdJzqfzGBXSiWiEJmFzPKmJNVHpperXBuRKfhQABxwmuwMPbXtkwNZCNjCcomRxjWUfhVdpNjsavSZhtCEbvnVInnIHWqJENUjSSQbyLQHcqkdsmYSNrdDPaeyQrQQxgbsPyoyGTguFMIflmGDJTbcpHtvFzVkbwRwwOtpGrZdOqybJrojvzQifUyHRNORoApKjBtMvCI", "translation_module_original_language": "en", }, "end_date": "2008-01-01", @@ -130,9 +130,9 @@ "dtype": 1, "emergency_response_contact_email": None, "id": 2, - "name": "xNooiEjDVMxASJEWIZQnWpRWMYfHCHTxeKhdJGmKIjkuHChRnT", + "name": "NPL: disaster-type-LyOxgRoEbNJuNoPeODStPAhicctFhgpIiyDxQVSIALVUjAPgFN - 03-2012 - event-1", "parent_event": 1, - "slug": "lffgczddigadkdjdrztubzqavnlecbwseideecsalxixpupaxy", + "slug": "uifsuvalmiyixhgrkqezsvvzhdejworurzzjxfyzaqihdxrvrq", "start_date": None, "translation_module_original_language": "en", }, @@ -140,22 +140,22 @@ "modified_at": "2008-01-01T00:00:00.123456Z", "modified_by": None, "modified_by_detail": None, - "name": "project-yoHzwwFYEMaGiCkoeGPrnjlkxMThQoAZvUhEREEnLkPAbpciKL", - "operation_type": 0, - "operation_type_display": "Programme", + "name": "project-inPiLIRZmitSTHiBXjPKkueJIUhlujUbWuAAtCVOVrjXmgilbW", + "operation_type": 1, + "operation_type_display": "Emergency Operation", "primary_sector": 1, "primary_sector_display": "sect-OhbVrpoiVgRVIfLBcbfnoGMbJmTPSIAoCLrZaWZkSBvrjnWvgf", - "programme_type": 0, - "programme_type_display": "Bilateral", + "programme_type": 2, + "programme_type_display": "Domestic", "project_admin2": [], "project_admin2_detail": [], - "project_country": 2, + "project_country": 3, "project_country_detail": { - "id": 2, - "iso": "Cp", - "iso3": "xgR", - "name": "country-oEbNJuNoPeODStPAhicctFhgpIiyDxQVSIALVUjAPgFNArcSxn", - "society_name": "society-name-xIPwdzrmhDfQnPOMbdYvpiYKneWJnLnovXjYMarjiIqZlhQbia", + "id": 3, + "iso": "GX", + "iso3": "lSL", + "name": "country-sJHxSgckFiTVUAgqNmmhznDYmTvgWAcORLhXCDQLGiFaHVdJBL", + "society_name": "society-name-lUigyQMMuGyAMSWprzvsCZiiAMSVGtSJuTVJOnmnNTsRwRiTPl", }, "project_districts": [], "project_districts_detail": [], @@ -168,20 +168,20 @@ "created_at": "2008-01-01T00:00:00.123456Z", "id": 1, "modified_at": "2008-01-01T00:00:00.123456Z", - "name": "regional-project-fnCMEEkoAMjYLXlNQGqkURvDMLeoyyigbmHGRAjMglENMcYIGW", + "name": "regional-project-TPxlyFEikmocAWarAoVQmWnelCNFSuDpBzXcMVyUuzNVKMIHPT", "translation_module_original_language": "en", "translation_module_skip_auto_translation": False, }, - "reporting_ns": 1, + "reporting_ns": 2, "reporting_ns_contact_email": None, "reporting_ns_contact_name": None, "reporting_ns_contact_role": None, "reporting_ns_detail": { - "id": 1, - "iso": "yr", - "iso3": "OSJ", - "name": "country-wMqZcUDIhyfJsONxKmTecQoXsfogyrDOxkxwnQrSRPeMOkIUpk", - "society_name": "society-name-oRuXXdocZuzrenKTunPFzPDjqipVJIqVLBLzxoiGFfWdhjOkYR", + "id": 2, + "iso": "Xe", + "iso3": "bLe", + "name": "country-prPfpJMMUMsXSbQtnHMGmVzsPdYYpFyhpFOMeHaxuiyKAxIRlW", + "society_name": "society-name-aqncdYzGsOTGXABSzfOIINjrftfGnZjIuzLOWPRPetSBUpdpfB", }, "secondary_sectors": [], "secondary_sectors_display": [], @@ -209,14 +209,14 @@ { "actual_expenditure": 0, "annual_splits": [], - "budget_amount": 6440000, + "budget_amount": 6200000, "description": "", "document": None, "dtype": 3, "dtype_detail": { "id": 3, - "name": "disaster-type-MSVGtSJuTVJOnmnNTsRwRiTPlGISOuThWwJELKQTARVIsBZaHg", - "summary": "byjdQdmrWYksRqjdSYsnWIcwCgNRVJoVPJypGYYZSsSQdyyAYRuJdaVqmNXCoOTTPxWLIVMmXUmsClRellVGhycBrJqikLqavDTjcjuMdXONQtFYKJweYTuHolHeYGkAIIzfwonQvvxsnWNHEJWPahQwCpPNNpcRuyYhyqIUsbHXxGZGCFcsPmuGfgkXIIaOenQOXnRBgnISVXBPeVRjbDTvcfedlYqJeKoqAyCOzBubyRhIaPUNeWVLcSewGgsYRtMfsWCyzQbEkIoiVzYZIsOjtRYUPxaJJjhcaKMzIJftnVVUwnAPGjkloNqmhlQZKdWJDPJesQeqgmULFvwiQPpgsNemuFCvNQtSLjKKxZuBkaupYoTVPBrxiRUvEDCwXtFJglPMfriImqUOeUebGObLLzXLncJqIIEPXjxzoXLUsiDGGfzxGaQpZNRkWGiCklKKQjVUEwcoWFoeqxocQnHYxyEDccPugTHOrVqLIKlyPyxLPeHq", + "name": "disaster-type-SESMjxXfpkFfRNvWOddwPjSIYgiFouJYPWwZCUmbSywUiqcFTC", + "summary": "JsISFmKlIwuUDrMJkeHjCsqIxDaXOGyUlbNxXNpuUeQIymHRFXJjNsuAPuhgHQecilcmgFmgcKPyQFHNSLqdxoMTeanPFfDZOdxJVAxYTdNrHcUetenHggUoIymmHQpKOlJVJAVgXOKwRDSQBgkYlJzGvQkIMCwuJuxAWOBUuMpKInyXJVqxCCzaUcsMbHitatonubXSrJGJKKjgcDwjiqxLpoqZtfKzKnUeUuYElFSSKgMPtcUZKyfXdXvwBAhXoVPMaOXOydtHcuIKjuGSojdRUzCWMKGfoBsYzjivfEKVdJzqfzGBXSiWiEJmFzPKmJNVHpperXBuRKfhQABxwmuwMPbXtkwNZCNjCcomRxjWUfhVdpNjsavSZhtCEbvnVInnIHWqJENUjSSQbyLQHcqkdsmYSNrdDPaeyQrQQxgbsPyoyGTguFMIflmGDJTbcpHtvFzVkbwRwwOtpGrZdOqybJrojvzQifUyHRNORoApKjBtMvCI", "translation_module_original_language": "en", }, "end_date": "2008-01-01", @@ -226,9 +226,9 @@ "dtype": 1, "emergency_response_contact_email": None, "id": 2, - "name": "xNooiEjDVMxASJEWIZQnWpRWMYfHCHTxeKhdJGmKIjkuHChRnT", + "name": "NPL: disaster-type-LyOxgRoEbNJuNoPeODStPAhicctFhgpIiyDxQVSIALVUjAPgFN - 03-2012 - event-1", "parent_event": 1, - "slug": "lffgczddigadkdjdrztubzqavnlecbwseideecsalxixpupaxy", + "slug": "uifsuvalmiyixhgrkqezsvvzhdejworurzzjxfyzaqihdxrvrq", "start_date": None, "translation_module_original_language": "en", }, @@ -236,22 +236,22 @@ "modified_at": "2008-01-01T00:00:00.123456Z", "modified_by": None, "modified_by_detail": None, - "name": "project-yoHzwwFYEMaGiCkoeGPrnjlkxMThQoAZvUhEREEnLkPAbpciKL", - "operation_type": 0, - "operation_type_display": "Programme", + "name": "project-inPiLIRZmitSTHiBXjPKkueJIUhlujUbWuAAtCVOVrjXmgilbW", + "operation_type": 1, + "operation_type_display": "Emergency Operation", "primary_sector": 1, "primary_sector_display": "sect-OhbVrpoiVgRVIfLBcbfnoGMbJmTPSIAoCLrZaWZkSBvrjnWvgf", - "programme_type": 0, - "programme_type_display": "Bilateral", + "programme_type": 2, + "programme_type_display": "Domestic", "project_admin2": [], "project_admin2_detail": [], - "project_country": 2, + "project_country": 3, "project_country_detail": { - "id": 2, - "iso": "Cp", - "iso3": "xgR", - "name": "country-oEbNJuNoPeODStPAhicctFhgpIiyDxQVSIALVUjAPgFNArcSxn", - "society_name": "society-name-xIPwdzrmhDfQnPOMbdYvpiYKneWJnLnovXjYMarjiIqZlhQbia", + "id": 3, + "iso": "GX", + "iso3": "lSL", + "name": "country-sJHxSgckFiTVUAgqNmmhznDYmTvgWAcORLhXCDQLGiFaHVdJBL", + "society_name": "society-name-lUigyQMMuGyAMSWprzvsCZiiAMSVGtSJuTVJOnmnNTsRwRiTPl", }, "project_districts": [], "project_districts_detail": [], @@ -264,20 +264,20 @@ "created_at": "2008-01-01T00:00:00.123456Z", "id": 1, "modified_at": "2008-01-01T00:00:00.123456Z", - "name": "regional-project-fnCMEEkoAMjYLXlNQGqkURvDMLeoyyigbmHGRAjMglENMcYIGW", + "name": "regional-project-TPxlyFEikmocAWarAoVQmWnelCNFSuDpBzXcMVyUuzNVKMIHPT", "translation_module_original_language": "en", "translation_module_skip_auto_translation": False, }, - "reporting_ns": 1, + "reporting_ns": 2, "reporting_ns_contact_email": None, "reporting_ns_contact_name": None, "reporting_ns_contact_role": None, "reporting_ns_detail": { - "id": 1, - "iso": "yr", - "iso3": "OSJ", - "name": "country-wMqZcUDIhyfJsONxKmTecQoXsfogyrDOxkxwnQrSRPeMOkIUpk", - "society_name": "society-name-oRuXXdocZuzrenKTunPFzPDjqipVJIqVLBLzxoiGFfWdhjOkYR", + "id": 2, + "iso": "Xe", + "iso3": "bLe", + "name": "country-prPfpJMMUMsXSbQtnHMGmVzsPdYYpFyhpFOMeHaxuiyKAxIRlW", + "society_name": "society-name-aqncdYzGsOTGXABSzfOIINjrftfGnZjIuzLOWPRPetSBUpdpfB", }, "secondary_sectors": [], "secondary_sectors_display": [], @@ -297,26 +297,26 @@ { "actual_expenditure": 0, "annual_splits": [], - "budget_amount": 6090000, + "budget_amount": 8190000, "description": "", "document": None, - "dtype": 6, + "dtype": 4, "dtype_detail": { - "id": 6, - "name": "disaster-type-blCoqPewfsGGIPfYroghexcImvmRvqtVXRrmTMiWTVIqaXtswY", - "summary": "zzLWPaEPGWjzooUVnEoHLYJWDUDvYfumBXSAnCCJbxiKitVaFZQwvoABRWzWXSItuLbKYcijvKOZMMKzynzeIymEgvKCOtfkgRJlcSMFblmeysnosQHeDdxHakuAzkhiIAEVeynintBTQEkMKtLmGTRDrmajCezMZpHvKFDDKcVfsPDwSTYtzNZlAplNUBDyQlSKgzScpkrOIsQeSUUnFAWJhxeWgGXXuACkqnGcDbeOSRVDyvVzmzcaqhTiuQVDFDefJQpTCiErkkbMglshIVzkeQWaRrjCwlnTcRInCSdOZHPQTQgyStCdMadXyXmpxpmfbAbavmRQeogZQkUkcAGguuJOmNnIzBhongwulazPuaynDoeQrPNxcenAtXMFgTIYKkqgMuOSyRXSivlOWSuQEevbMLCyGOVoGLTaobNWhtpVBWpNfdixFsmjynPcpUMCVviruPYWcHYAPsWboUvvpnIdQpZRSUoMyHulCOaeFemdOjni", + "id": 4, + "name": "disaster-type-qwqLfXGbhVQDlYlzcfATtuLUDWQCNZqvZlnlfVMqRgBIbazhak", + "summary": "PEDSzQVMUFtNNxSRSRzZtfiiamhbSmbnEPjPpBOYImftXDjEBbhkjVSCFEbCLpmsKzdvagOTBAFVLMUJscFzFGLUNRFoTdHbBKuJerPAEhFNPwCSBbksUmEwCoGoLRvMTQDisUTyARPVxYEZkNnsSVfQEilmkMFgYAFtpnJdbwqwRklGcZevBhNohJoFqvYwXcXJrjSGMQgTdCZDWhgYNNYgJcGgkOhnxkUsTCWGFUgjPxvihmCAXXapZEvsGkfrxTWAxOQpjWWHAYoiZBAADHYRxbCjXaTZHefvuzXkBdzWcQPjKdOTZQHsAzRSJtUVuwarHNjSzCPnINYNPCSwZYPzXmtfcIvyUUViHIsnfGJtHvWOkbbYILqpXtUBGhUdxqOGwhdWPhCtKVaDvpZVLKTOQIMowtsQYTKRiTyHVpguHLmXxDgjTBAffdBiEnCexRHzLJHXzqLFOBCSFUAkjGiFTDiTGHhSnDEcVkJxhMAhhxKscHjh", "translation_module_original_language": "en", }, "end_date": "2008-01-01", - "event": 4, + "event": 2, "event_detail": { "countries_for_preview": [], - "dtype": 4, + "dtype": 1, "emergency_response_contact_email": None, - "id": 4, - "name": "ZoHPvALvPPYuFLQSHJCDtKiYtkYqoExsXdjwsDkNkTIsllTSQY", - "parent_event": 3, - "slug": "jkphcukicqxlnjtcquwjxcikithbzfxjdujavigvptseswkqjz", + "id": 2, + "name": "NPL: disaster-type-LyOxgRoEbNJuNoPeODStPAhicctFhgpIiyDxQVSIALVUjAPgFN - 03-2012 - event-1", + "parent_event": 1, + "slug": "uifsuvalmiyixhgrkqezsvvzhdejworurzzjxfyzaqihdxrvrq", "start_date": None, "translation_module_original_language": "en", }, @@ -324,22 +324,22 @@ "modified_at": "2008-01-01T00:00:00.123456Z", "modified_by": None, "modified_by_detail": None, - "name": "project-flLJYnpGfBUDtkUmpBlMptsKCOmrYEfxzykECBGNVBWjYEbWyB", - "operation_type": 1, - "operation_type_display": "Emergency Operation", + "name": "project-xtxtsFbYjjYLAdtsnlVFahJwecAEKtKCvYyEUMiWiGODWCQCjU", + "operation_type": 0, + "operation_type_display": "Programme", "primary_sector": 1, "primary_sector_display": "sect-OhbVrpoiVgRVIfLBcbfnoGMbJmTPSIAoCLrZaWZkSBvrjnWvgf", - "programme_type": 0, - "programme_type_display": "Bilateral", + "programme_type": 1, + "programme_type_display": "Multilateral", "project_admin2": [], "project_admin2_detail": [], - "project_country": 4, + "project_country": 5, "project_country_detail": { - "id": 4, - "iso": "rN", - "iso3": "OJn", - "name": "country-XkvKQjkjlXTdAttUXCsOlhimaNWqaDFFIZaMFpnLQEDACfMMap", - "society_name": "society-name-dljdPwcjcQKMtvfdgAlkRsNQSSMKYJlDVLxcfXtuxyeWBJesEi", + "id": 5, + "iso": "ls", + "iso3": "egk", + "name": "country-ivpIhPEVWLSnWVWouwrGRBrdexwCFGHhETIRIsCNxZRSZemDff", + "society_name": "society-name-rhSjFjnHObsARIiEwACVPbsmebZoHPvALvPPYuFLQSHJCDtKiY", }, "project_districts": [], "project_districts_detail": [], @@ -352,20 +352,20 @@ "created_at": "2008-01-01T00:00:00.123456Z", "id": 2, "modified_at": "2008-01-01T00:00:00.123456Z", - "name": "regional-project-JMEeviTEmjmaaGUUxFzAzVxyFtPLeAchyKkmWBqXWUwGTFOSxS", + "name": "regional-project-TbKOYXTtJPhPJfmNIKWdKHmWEGbhQIlbrYnpTLCfZIMuzLcFbv", "translation_module_original_language": "en", "translation_module_skip_auto_translation": False, }, - "reporting_ns": 3, + "reporting_ns": 4, "reporting_ns_contact_email": None, "reporting_ns_contact_name": None, "reporting_ns_contact_role": None, "reporting_ns_detail": { - "id": 3, - "iso": "yP", - "iso3": "nSZ", - "name": "country-MIaXRPBHAxcSHBoZEYXywLZVWSKgBiqEXofsMIAqmaTVYaKHhH", - "society_name": "society-name-uAxgjBPLqqIBKxNrRzWnAJYJElxJJEqtKwXTzViQhVoCYSkgnG", + "id": 4, + "iso": "Df", + "iso3": "quS", + "name": "country-cpHIzVcJyHWOdmsCztXsDkBsNdSHjDPCfUGhlXLSIizAuCblDL", + "society_name": "society-name-PTYkTUhfhTCOxfHTyUYGNkyJycXkvKQjkjlXTdAttUXCsOlhim", }, "secondary_sectors": [], "secondary_sectors_display": [], @@ -390,14 +390,14 @@ snapshots["TestProjectAPI::test_project_read 1"] = { "actual_expenditure": 0, "annual_splits": [], - "budget_amount": 6440000, + "budget_amount": 6200000, "description": "", "document": None, "dtype": 3, "dtype_detail": { "id": 3, - "name": "disaster-type-MSVGtSJuTVJOnmnNTsRwRiTPlGISOuThWwJELKQTARVIsBZaHg", - "summary": "byjdQdmrWYksRqjdSYsnWIcwCgNRVJoVPJypGYYZSsSQdyyAYRuJdaVqmNXCoOTTPxWLIVMmXUmsClRellVGhycBrJqikLqavDTjcjuMdXONQtFYKJweYTuHolHeYGkAIIzfwonQvvxsnWNHEJWPahQwCpPNNpcRuyYhyqIUsbHXxGZGCFcsPmuGfgkXIIaOenQOXnRBgnISVXBPeVRjbDTvcfedlYqJeKoqAyCOzBubyRhIaPUNeWVLcSewGgsYRtMfsWCyzQbEkIoiVzYZIsOjtRYUPxaJJjhcaKMzIJftnVVUwnAPGjkloNqmhlQZKdWJDPJesQeqgmULFvwiQPpgsNemuFCvNQtSLjKKxZuBkaupYoTVPBrxiRUvEDCwXtFJglPMfriImqUOeUebGObLLzXLncJqIIEPXjxzoXLUsiDGGfzxGaQpZNRkWGiCklKKQjVUEwcoWFoeqxocQnHYxyEDccPugTHOrVqLIKlyPyxLPeHq", + "name": "disaster-type-SESMjxXfpkFfRNvWOddwPjSIYgiFouJYPWwZCUmbSywUiqcFTC", + "summary": "JsISFmKlIwuUDrMJkeHjCsqIxDaXOGyUlbNxXNpuUeQIymHRFXJjNsuAPuhgHQecilcmgFmgcKPyQFHNSLqdxoMTeanPFfDZOdxJVAxYTdNrHcUetenHggUoIymmHQpKOlJVJAVgXOKwRDSQBgkYlJzGvQkIMCwuJuxAWOBUuMpKInyXJVqxCCzaUcsMbHitatonubXSrJGJKKjgcDwjiqxLpoqZtfKzKnUeUuYElFSSKgMPtcUZKyfXdXvwBAhXoVPMaOXOydtHcuIKjuGSojdRUzCWMKGfoBsYzjivfEKVdJzqfzGBXSiWiEJmFzPKmJNVHpperXBuRKfhQABxwmuwMPbXtkwNZCNjCcomRxjWUfhVdpNjsavSZhtCEbvnVInnIHWqJENUjSSQbyLQHcqkdsmYSNrdDPaeyQrQQxgbsPyoyGTguFMIflmGDJTbcpHtvFzVkbwRwwOtpGrZdOqybJrojvzQifUyHRNORoApKjBtMvCI", "translation_module_original_language": "en", }, "end_date": "2008-01-01", @@ -407,9 +407,9 @@ "dtype": 1, "emergency_response_contact_email": None, "id": 2, - "name": "xNooiEjDVMxASJEWIZQnWpRWMYfHCHTxeKhdJGmKIjkuHChRnT", + "name": "NPL: disaster-type-LyOxgRoEbNJuNoPeODStPAhicctFhgpIiyDxQVSIALVUjAPgFN - 03-2012 - event-1", "parent_event": 1, - "slug": "lffgczddigadkdjdrztubzqavnlecbwseideecsalxixpupaxy", + "slug": "uifsuvalmiyixhgrkqezsvvzhdejworurzzjxfyzaqihdxrvrq", "start_date": None, "translation_module_original_language": "en", }, @@ -417,22 +417,22 @@ "modified_at": "2008-01-01T00:00:00.123456Z", "modified_by": None, "modified_by_detail": None, - "name": "project-yoHzwwFYEMaGiCkoeGPrnjlkxMThQoAZvUhEREEnLkPAbpciKL", - "operation_type": 0, - "operation_type_display": "Programme", + "name": "project-inPiLIRZmitSTHiBXjPKkueJIUhlujUbWuAAtCVOVrjXmgilbW", + "operation_type": 1, + "operation_type_display": "Emergency Operation", "primary_sector": 1, "primary_sector_display": "sect-OhbVrpoiVgRVIfLBcbfnoGMbJmTPSIAoCLrZaWZkSBvrjnWvgf", - "programme_type": 0, - "programme_type_display": "Bilateral", + "programme_type": 2, + "programme_type_display": "Domestic", "project_admin2": [], "project_admin2_detail": [], - "project_country": 2, + "project_country": 3, "project_country_detail": { - "id": 2, - "iso": "Cp", - "iso3": "xgR", - "name": "country-oEbNJuNoPeODStPAhicctFhgpIiyDxQVSIALVUjAPgFNArcSxn", - "society_name": "society-name-xIPwdzrmhDfQnPOMbdYvpiYKneWJnLnovXjYMarjiIqZlhQbia", + "id": 3, + "iso": "GX", + "iso3": "lSL", + "name": "country-sJHxSgckFiTVUAgqNmmhznDYmTvgWAcORLhXCDQLGiFaHVdJBL", + "society_name": "society-name-lUigyQMMuGyAMSWprzvsCZiiAMSVGtSJuTVJOnmnNTsRwRiTPl", }, "project_districts": [], "project_districts_detail": [], @@ -445,20 +445,20 @@ "created_at": "2008-01-01T00:00:00.123456Z", "id": 1, "modified_at": "2008-01-01T00:00:00.123456Z", - "name": "regional-project-fnCMEEkoAMjYLXlNQGqkURvDMLeoyyigbmHGRAjMglENMcYIGW", + "name": "regional-project-TPxlyFEikmocAWarAoVQmWnelCNFSuDpBzXcMVyUuzNVKMIHPT", "translation_module_original_language": "en", "translation_module_skip_auto_translation": False, }, - "reporting_ns": 1, + "reporting_ns": 2, "reporting_ns_contact_email": None, "reporting_ns_contact_name": None, "reporting_ns_contact_role": None, "reporting_ns_detail": { - "id": 1, - "iso": "yr", - "iso3": "OSJ", - "name": "country-wMqZcUDIhyfJsONxKmTecQoXsfogyrDOxkxwnQrSRPeMOkIUpk", - "society_name": "society-name-oRuXXdocZuzrenKTunPFzPDjqipVJIqVLBLzxoiGFfWdhjOkYR", + "id": 2, + "iso": "Xe", + "iso3": "bLe", + "name": "country-prPfpJMMUMsXSbQtnHMGmVzsPdYYpFyhpFOMeHaxuiyKAxIRlW", + "society_name": "society-name-aqncdYzGsOTGXABSzfOIINjrftfGnZjIuzLOWPRPetSBUpdpfB", }, "secondary_sectors": [], "secondary_sectors_display": [], @@ -479,14 +479,14 @@ snapshots["TestProjectAPI::test_project_update 1"] = { "actual_expenditure": 0, "annual_splits": [], - "budget_amount": 6440000, + "budget_amount": 6200000, "description": "", "document": None, "dtype": 3, "dtype_detail": { "id": 3, - "name": "disaster-type-MSVGtSJuTVJOnmnNTsRwRiTPlGISOuThWwJELKQTARVIsBZaHg", - "summary": "byjdQdmrWYksRqjdSYsnWIcwCgNRVJoVPJypGYYZSsSQdyyAYRuJdaVqmNXCoOTTPxWLIVMmXUmsClRellVGhycBrJqikLqavDTjcjuMdXONQtFYKJweYTuHolHeYGkAIIzfwonQvvxsnWNHEJWPahQwCpPNNpcRuyYhyqIUsbHXxGZGCFcsPmuGfgkXIIaOenQOXnRBgnISVXBPeVRjbDTvcfedlYqJeKoqAyCOzBubyRhIaPUNeWVLcSewGgsYRtMfsWCyzQbEkIoiVzYZIsOjtRYUPxaJJjhcaKMzIJftnVVUwnAPGjkloNqmhlQZKdWJDPJesQeqgmULFvwiQPpgsNemuFCvNQtSLjKKxZuBkaupYoTVPBrxiRUvEDCwXtFJglPMfriImqUOeUebGObLLzXLncJqIIEPXjxzoXLUsiDGGfzxGaQpZNRkWGiCklKKQjVUEwcoWFoeqxocQnHYxyEDccPugTHOrVqLIKlyPyxLPeHq", + "name": "disaster-type-SESMjxXfpkFfRNvWOddwPjSIYgiFouJYPWwZCUmbSywUiqcFTC", + "summary": "JsISFmKlIwuUDrMJkeHjCsqIxDaXOGyUlbNxXNpuUeQIymHRFXJjNsuAPuhgHQecilcmgFmgcKPyQFHNSLqdxoMTeanPFfDZOdxJVAxYTdNrHcUetenHggUoIymmHQpKOlJVJAVgXOKwRDSQBgkYlJzGvQkIMCwuJuxAWOBUuMpKInyXJVqxCCzaUcsMbHitatonubXSrJGJKKjgcDwjiqxLpoqZtfKzKnUeUuYElFSSKgMPtcUZKyfXdXvwBAhXoVPMaOXOydtHcuIKjuGSojdRUzCWMKGfoBsYzjivfEKVdJzqfzGBXSiWiEJmFzPKmJNVHpperXBuRKfhQABxwmuwMPbXtkwNZCNjCcomRxjWUfhVdpNjsavSZhtCEbvnVInnIHWqJENUjSSQbyLQHcqkdsmYSNrdDPaeyQrQQxgbsPyoyGTguFMIflmGDJTbcpHtvFzVkbwRwwOtpGrZdOqybJrojvzQifUyHRNORoApKjBtMvCI", "translation_module_original_language": "en", }, "end_date": "2008-01-01", @@ -496,9 +496,9 @@ "dtype": 1, "emergency_response_contact_email": None, "id": 2, - "name": "xNooiEjDVMxASJEWIZQnWpRWMYfHCHTxeKhdJGmKIjkuHChRnT", + "name": "NPL: disaster-type-LyOxgRoEbNJuNoPeODStPAhicctFhgpIiyDxQVSIALVUjAPgFN - 03-2012 - event-1", "parent_event": 1, - "slug": "lffgczddigadkdjdrztubzqavnlecbwseideecsalxixpupaxy", + "slug": "uifsuvalmiyixhgrkqezsvvzhdejworurzzjxfyzaqihdxrvrq", "start_date": None, "translation_module_original_language": "en", }, @@ -507,24 +507,24 @@ "modified_by": 3, "modified_by_detail": {"email": "jon@dave.com", "first_name": "Jon", "id": 3, "last_name": "Mon", "username": "jon@dave.com"}, "name": "Mock Project for Update API Test", - "operation_type": 0, - "operation_type_display": "Programme", + "operation_type": 1, + "operation_type_display": "Emergency Operation", "primary_sector": 1, "primary_sector_display": "sect-OhbVrpoiVgRVIfLBcbfnoGMbJmTPSIAoCLrZaWZkSBvrjnWvgf", - "programme_type": 0, - "programme_type_display": "Bilateral", + "programme_type": 2, + "programme_type_display": "Domestic", "project_admin2": [], "project_admin2_detail": [], - "project_country": 3, + "project_country": 4, "project_country_detail": { - "id": 3, - "iso": "ay", - "iso3": "PnS", - "name": "country-iMIaXRPBHAxcSHBoZEYXywLZVWSKgBiqEXofsMIAqmaTVYaKHh", - "society_name": "society-name-ZuAxgjBPLqqIBKxNrRzWnAJYJElxJJEqtKwXTzViQhVoCYSkgn", + "id": 4, + "iso": "LT", + "iso3": "mDf", + "name": "country-CDcpHIzVcJyHWOdmsCztXsDkBsNdSHjDPCfUGhlXLSIizAuCbl", + "society_name": "society-name-quSPTYkTUhfhTCOxfHTyUYGNkyJycXkvKQjkjlXTdAttUXCsOl", }, "project_districts": [1], - "project_districts_detail": [{"id": 1, "name": "district-kyJycXkvKQjkjlXTdAttUXCsOlhimaNWqaDFFIZaMFpnLQEDAC"}], + "project_districts_detail": [{"id": 1, "name": "district-JTXnivpIhPEVWLSnWVWouwrGRBrdexwCFGHhETIRIsCNxZRSZe"}], "reached_female": 0, "reached_male": 0, "reached_other": 0, @@ -534,20 +534,20 @@ "created_at": "2008-01-01T00:00:00.123456Z", "id": 1, "modified_at": "2008-01-01T00:00:00.123456Z", - "name": "regional-project-fnCMEEkoAMjYLXlNQGqkURvDMLeoyyigbmHGRAjMglENMcYIGW", + "name": "regional-project-TPxlyFEikmocAWarAoVQmWnelCNFSuDpBzXcMVyUuzNVKMIHPT", "translation_module_original_language": "en", "translation_module_skip_auto_translation": False, }, - "reporting_ns": 3, + "reporting_ns": 4, "reporting_ns_contact_email": None, "reporting_ns_contact_name": None, "reporting_ns_contact_role": None, "reporting_ns_detail": { - "id": 3, - "iso": "ay", - "iso3": "PnS", - "name": "country-iMIaXRPBHAxcSHBoZEYXywLZVWSKgBiqEXofsMIAqmaTVYaKHh", - "society_name": "society-name-ZuAxgjBPLqqIBKxNrRzWnAJYJElxJJEqtKwXTzViQhVoCYSkgn", + "id": 4, + "iso": "LT", + "iso3": "mDf", + "name": "country-CDcpHIzVcJyHWOdmsCztXsDkBsNdSHjDPCfUGhlXLSIizAuCbl", + "society_name": "society-name-quSPTYkTUhfhTCOxfHTyUYGNkyJycXkvKQjkjlXTdAttUXCsOl", }, "secondary_sectors": [], "secondary_sectors_display": [], diff --git a/deployments/tests.py b/deployments/tests.py index 853ea418e..be8aef3b4 100644 --- a/deployments/tests.py +++ b/deployments/tests.py @@ -44,7 +44,9 @@ def test_project_list_zero(self): def test_project_list_one(self): # create instance sct = SectorFactory() - ProjectFactory.create(visibility=VisibilityCharChoices.PUBLIC, primary_sector=sct) + _country = country.CountryFactory(name="country-1", society_name="society-name-1", iso3="NPL") + event = EventFactory(title="event-1", countries=[_country.id]) + ProjectFactory.create(visibility=VisibilityCharChoices.PUBLIC, primary_sector=sct, event=event) # submit list request response = self.client.get("/api/v2/project/") @@ -56,7 +58,9 @@ def test_project_list_one(self): def test_project_list_two(self): # create instances sct = SectorFactory() - ProjectFactory.create_batch(2, visibility=VisibilityCharChoices.PUBLIC, primary_sector=sct) + _country = country.CountryFactory(name="country-1", society_name="society-name-1", iso3="NPL") + event = EventFactory(title="event-1", countries=[_country.id]) + ProjectFactory.create_batch(2, event=event, visibility=VisibilityCharChoices.PUBLIC, primary_sector=sct) # submit list request response = self.client.get("/api/v2/project/") @@ -109,7 +113,9 @@ def test_project_create(self): def test_project_read(self): # create instance sct = SectorFactory() - new_project = ProjectFactory.create(visibility=VisibilityCharChoices.PUBLIC, primary_sector=sct) + _country = country.CountryFactory(name="country-1", society_name="society-name-1", iso3="NPL") + event = EventFactory(title="event-1", countries=[_country.id]) + new_project = ProjectFactory.create(event=event, visibility=VisibilityCharChoices.PUBLIC, primary_sector=sct) # submit read request response = self.client.get(f"/api/v2/project/{new_project.pk}/") @@ -121,7 +127,9 @@ def test_project_read(self): def test_project_update(self): # create instance sct = SectorFactory() - new_project = ProjectFactory.create(visibility=VisibilityCharChoices.PUBLIC, primary_sector=sct) + _country = country.CountryFactory(name="country-1", society_name="society-name-1", iso3="NPL") + event = EventFactory(title="event-1", countries=[_country.id]) + new_project = ProjectFactory.create(event=event, visibility=VisibilityCharChoices.PUBLIC, primary_sector=sct) # authenticate self.authenticate() @@ -191,7 +199,7 @@ def test_personnel_csv_api(self): self.assertMatchSnapshot(resp.content.decode("utf-8")) def test_project_csv_api(self): - _country = country.CountryFactory(name="country-1", society_name="society-name-1") + _country = country.CountryFactory(name="country-1", society_name="society-name-1", iso3="NPL") sct = SectorFactory(title="sect-1", order=1) sct_1 = SectorTagFactory(title="sec-tag-1", order=2) sct_2 = SectorTagFactory(title="sec-tag-2", order=3) @@ -204,7 +212,7 @@ def test_project_csv_api(self): slug="event-slug", districts=[district1.id, district2.id], dtype=dtype, - name="event-1", + title="event-1", ) ProjectFactory.create_batch( 10,