From 9e3e71d986dbe2281f0dada646a6cabc63ce39e7 Mon Sep 17 00:00:00 2001 From: thenav56 Date: Thu, 3 Jun 2021 14:42:38 +0545 Subject: [PATCH] Add Custom CSV serialier for Project - Update Factory models - Add prefix for all name attributes - Fix project secondary_sectors post_generation logic - Add visibility_display to Project API - Add test for snapshot test for Project CSV serializer - Add condition to skip opencensus if Instrumentaion key is not defined (For local development) --- .flake8 | 2 +- TESTING.md | 2 +- api/factories/country.py | 4 +- api/factories/disaster_type.py | 2 +- api/factories/district.py | 2 +- api/factories/event.py | 4 +- api/serializers.py | 7 +- deployments/drf_views.py | 8 +- deployments/factories/project.py | 6 +- deployments/factories/regional_project.py | 2 +- deployments/serializers.py | 24 ++ deployments/snapshots/snap_tests.py | 345 ++++++++++++---------- deployments/tests.py | 19 +- main/settings.py | 17 +- 14 files changed, 256 insertions(+), 188 deletions(-) diff --git a/.flake8 b/.flake8 index 39cd710dd..212f18055 100644 --- a/.flake8 +++ b/.flake8 @@ -1,5 +1,5 @@ [flake8] ignore = C901, W504 max-line-length = 130 -exclude = .git,__pycache__,old,build,dist,*migrations* +exclude = .git,__pycache__,old,build,dist,*migrations*,*snapshots* max-complexity = 10 diff --git a/TESTING.md b/TESTING.md index 4b2e175c5..d7743bec7 100644 --- a/TESTING.md +++ b/TESTING.md @@ -53,7 +53,7 @@ generate random values for each instance of `ExampleModel` created by ``` class ExampleFactory(factory.django.DjangoModelFactory): - name = fuzzy.FuzzyText(length=10) + name = fuzzy.FuzzyText(length=10, prefix='example-') age = fuzzy.FuzzyInteger(0) ``` diff --git a/api/factories/country.py b/api/factories/country.py index 1d037ee2a..aadfb87c7 100644 --- a/api/factories/country.py +++ b/api/factories/country.py @@ -10,11 +10,11 @@ class CountryFactory(factory.django.DjangoModelFactory): class Meta: model = models.Country - name = fuzzy.FuzzyText(length=100) + name = fuzzy.FuzzyText(length=50, prefix='country-') record_type = fuzzy.FuzzyChoice(models.CountryType) iso = fuzzy.FuzzyText(length=2) iso3 = fuzzy.FuzzyText(length=3) - society_name = fuzzy.FuzzyText(length=500) + society_name = fuzzy.FuzzyText(length=50, prefix='society-name-') society_url = fuzzy.FuzzyText(length=200) url_ifrc = fuzzy.FuzzyText(length=200) region = factory.SubFactory(region.RegionFactory) diff --git a/api/factories/disaster_type.py b/api/factories/disaster_type.py index ae1e0bfeb..8ba316210 100644 --- a/api/factories/disaster_type.py +++ b/api/factories/disaster_type.py @@ -8,5 +8,5 @@ class DisasterTypeFactory(factory.django.DjangoModelFactory): class Meta: model = models.DisasterType - name = fuzzy.FuzzyText(length=100) + name = fuzzy.FuzzyText(length=50, prefix='disaster-type-') summary = fuzzy.FuzzyText(length=500) diff --git a/api/factories/district.py b/api/factories/district.py index 730fe50f2..58b97efee 100644 --- a/api/factories/district.py +++ b/api/factories/district.py @@ -9,7 +9,7 @@ class DistrictFactory(factory.django.DjangoModelFactory): class Meta: model = models.District - name = fuzzy.FuzzyText(length=100) + name = fuzzy.FuzzyText(length=50, prefix='district-') code = fuzzy.FuzzyText(length=10) country = factory.SubFactory(country.CountryFactory) is_enclave = fuzzy.FuzzyChoice([True, False]) diff --git a/api/factories/event.py b/api/factories/event.py index 44962052d..b48af073d 100644 --- a/api/factories/event.py +++ b/api/factories/event.py @@ -4,14 +4,14 @@ import pytz from .. import models -from . import country, disaster_type +from . import disaster_type class EventFactory(factory.django.DjangoModelFactory): class Meta: model = models.Event - name = fuzzy.FuzzyText(length=100) + name = fuzzy.FuzzyText(length=50, prefix='event-') slug = fuzzy.FuzzyText(length=50) dtype = factory.SubFactory(disaster_type.DisasterTypeFactory) diff --git a/api/serializers.py b/api/serializers.py index 3072f2e8e..24d1abfd8 100644 --- a/api/serializers.py +++ b/api/serializers.py @@ -147,7 +147,7 @@ class Meta: class DistrictSerializer(ModelSerializer): country = MiniCountrySerializer() - + class Meta: model = District fields = ('name', 'code', 'country', 'id', 'is_deprecated',) @@ -180,7 +180,10 @@ def get_centroid(self, district): class Meta: model = District - fields = ('name', 'code', 'country_name','country_iso','country_iso3', 'id', 'is_enclave', 'bbox', 'centroid', 'is_deprecated',) + fields = ( + 'id', 'name', 'code', 'country_name', 'country_iso', 'country_iso3', + 'is_enclave', 'bbox', 'centroid', 'is_deprecated', + ) class RegionKeyFigureSerializer(ModelSerializer): diff --git a/deployments/drf_views.py b/deployments/drf_views.py index 93880d8bf..815278972 100644 --- a/deployments/drf_views.py +++ b/deployments/drf_views.py @@ -50,6 +50,7 @@ PartnerDeploymentTableauSerializer, RegionalProjectSerializer, ProjectSerializer, + ProjectCsvSerializer, ) @@ -183,11 +184,16 @@ class ProjectViewset(RevisionMixin, ReadOnlyVisibilityViewsetMixin, viewsets.Mod queryset = Project.objects.prefetch_related( 'user', 'reporting_ns', 'project_districts', 'event', 'dtype', 'regional_project', ).all() - # TODO: May require different permission for UNSAFE_METHODS (Also Country Level) filter_class = ProjectFilter serializer_class = ProjectSerializer ordering_fields = ('name',) + def get_serializer_class(self): + request_format_type = self.request.GET.get('format', 'json') + if request_format_type == 'csv': + return ProjectCsvSerializer + return super().get_serializer_class() + def get_permissions(self): # Require authentication for unsafe methods only if self.action in ['list', 'retrieve']: diff --git a/deployments/factories/project.py b/deployments/factories/project.py index 0b37b7cf0..d0cd63e81 100644 --- a/deployments/factories/project.py +++ b/deployments/factories/project.py @@ -2,7 +2,6 @@ from factory import fuzzy import datetime import pytz -from random import randrange from .. import models from . import user, regional_project @@ -29,7 +28,7 @@ def project_districts(self, create, extracted, **kwargs): event = factory.SubFactory(event.EventFactory) dtype = factory.SubFactory(disaster_type.DisasterTypeFactory) - name = fuzzy.FuzzyText(length=500) + name = fuzzy.FuzzyText(length=50, prefix='project-') programme_type = fuzzy.FuzzyChoice(models.ProgrammeTypes) primary_sector = fuzzy.FuzzyChoice(models.Sectors) @@ -39,8 +38,7 @@ def secondary_sectors(self, create, extracted, **kwargs): return if extracted: - for secondary_sector in extracted: - self.secondary_sectors.add(secondary_sector) + self.secondary_sectors = extracted operation_type = fuzzy.FuzzyChoice(models.OperationTypes) start_date = factory.LazyFunction( diff --git a/deployments/factories/regional_project.py b/deployments/factories/regional_project.py index 0983e8d19..f23260cb8 100644 --- a/deployments/factories/regional_project.py +++ b/deployments/factories/regional_project.py @@ -10,6 +10,6 @@ class RegionalProjectFactory(factory.django.DjangoModelFactory): class Meta: model = models.RegionalProject - name = fuzzy.FuzzyText(length=100) + name = fuzzy.FuzzyText(length=50, prefix='regional-project-') created_at = fuzzy.FuzzyDateTime(datetime.datetime(2008, 1, 1, tzinfo=pytz.utc)) modified_at = fuzzy.FuzzyDateTime(datetime.datetime(2008, 1, 1, tzinfo=pytz.utc)) diff --git a/deployments/serializers.py b/deployments/serializers.py index 9ec2e54d8..0a1c70ed0 100644 --- a/deployments/serializers.py +++ b/deployments/serializers.py @@ -2,6 +2,7 @@ from rest_framework import serializers from enumfields.drf.serializers import EnumSupportSerializerMixin +from main.utils import get_merged_items_by_fields from lang.serializers import ModelSerializer from api.serializers import ( DisasterTypeSerializer, @@ -164,6 +165,7 @@ class ProjectSerializer(EnumSupportSerializerMixin, ModelSerializer): programme_type_display = serializers.CharField(source='get_programme_type_display', read_only=True) operation_type_display = serializers.CharField(source='get_operation_type_display', read_only=True) status_display = serializers.CharField(source='get_status_display', read_only=True) + visibility_display = serializers.CharField(source='get_visibility_display', read_only=True) secondary_sectors_display = serializers.ListField(source='get_secondary_sectors_display', read_only=True) class Meta: @@ -201,3 +203,25 @@ def create(self, validated_data): project.user = self.context['request'].user project.save() return project + + +class ProjectCsvSerializer(ProjectSerializer): + secondary_sectors = serializers.SerializerMethodField() + secondary_sectors_display = serializers.SerializerMethodField() + project_districts_detail = serializers.SerializerMethodField() + + class Meta: + model = Project + exclude = ['project_districts'] + + def get_secondary_sectors(self, obj): + return ', '.join([str(sector.value) for sector in obj.secondary_sectors]) + + def get_secondary_sectors_display(self, obj): + return ', '.join(obj.get_secondary_sectors_display()) + + def get_project_districts_detail(self, obj): + return get_merged_items_by_fields( + obj.project_districts.all(), + ['name', 'code', 'id', 'is_enclave', 'is_deprecated'] + ) diff --git a/deployments/snapshots/snap_tests.py b/deployments/snapshots/snap_tests.py index 205906766..57d79c249 100644 --- a/deployments/snapshots/snap_tests.py +++ b/deployments/snapshots/snap_tests.py @@ -18,25 +18,25 @@ 'dtype': 3, 'dtype_detail': { 'id': 3, - 'name': 'VLHCAklbiUpQqVSVfnkzggeEJdbXzHWfgqNjfPytopVsCOiiHkbcQwuEDIrJCiSIlLMDOVOKBHOOItwEIoZfCtxAqjtaaHWiwsEI', - 'summary': 'aSFWEtaXBZsMoYaJxmAJBzpkTVPyyoqfBOpHWZNZSRrsPVIZrAmelishODNCrSNFmubjdIblgsriTCUaofjaFnvAtYZFxDSYcvfWjdrXzeIElmqyahXTpyXCpVcmDVXgHQnEyRtukOUcVJHhqEOtmxdQnhpOBuakYrLhzYpacLYSESMjxXfpkFfRNvWOddwPjSIYgiFouJYPWwZCUmbSywUiqcFTCJsISFmKlIwuUDrMJkeHjCsqIxDaXOGyUlbNxXNpuUeQIymHRFXJjNsuAPuhgHQecilcmgFmgcKPyQFHNSLqdxoMTeanPFfDZOdxJVAxYTdNrHcUetenHggUoIymmHQpKOlJVJAVgXOKwRDSQBgkYlJzGvQkIMCwuJuxAWOBUuMpKInyXJVqxCCzaUcsMbHitatonubXSrJGJKKjgcDwjiqxLpoqZtfKzKnUeUuYElFSSKgMPtcUZKyfXdXvwBAhXoVPMaOXOydtHcuIKjuGSojd' + 'name': 'disaster-type-CDQLGiFaHVdJBLEGXlSLlUigyQMMuGyAMSWprzvsCZiiAMSVGt', + 'summary': 'SJuTVJOnmnNTsRwRiTPlGISOuThWwJELKQTARVIsBZaHgbyjdQdmrWYksRqjdSYsnWIcwCgNRVJoVPJypGYYZSsSQdyyAYRuJdaVqmNXCoOTTPxWLIVMmXUmsClRellVGhycBrJqikLqavDTjcjuMdXONQtFYKJweYTuHolHeYGkAIIzfwonQvvxsnWNHEJWPahQwCpPNNpcRuyYhyqIUsbHXxGZGCFcsPmuGfgkXIIaOenQOXnRBgnISVXBPeVRjbDTvcfedlYqJeKoqAyCOzBubyRhIaPUNeWVLcSewGgsYRtMfsWCyzQbEkIoiVzYZIsOjtRYUPxaJJjhcaKMzIJftnVVUwnAPGjkloNqmhlQZKdWJDPJesQeqgmULFvwiQPpgsNemuFCvNQtSLjKKxZuBkaupYoTVPBrxiRUvEDCwXtFJglPMfriImqUOeUebGObLLzXLncJqIIEPXjxzoXLUsiDGGfzxGaQpZNRkWGiCklKKQjV' }, 'end_date': '2008-01-01', 'event': 2, 'event_detail': { 'dtype': 1, 'id': 2, - 'name': 'WptcCqwfChXZpnZVLSwTNOBkNiYnnZdKwIrMIkuTssKrGRgiWYAdrPiSipjTupWRzFjKOrOAyCeOYXfzGVrSxDFuLaXUfUDOQSwe', + 'name': 'event-KRWmlNOzBGufzQgliEupaqypCWrvtLUKaqPxSpdQhDtkzRGTXt', 'parent_event': 1, - 'slug': 'yiznbnfrusvjkikfyvrwdcgoydbhkcdabmsiptkrfpxqfxqpkd' + 'slug': 'shosxnooiejdvmxasjewizqnwprwmyfhchtxekhdjgmkijkuhc' }, 'id': 1, 'modified_at': '2019-03-23T00:00:00.123456Z', - 'name': 'RUzCWMKGfoBsYzjivfEKVdJzqfzGBXSiWiEJmFzPKmJNVHpperXBuRKfhQABxwmuwMPbXtkwNZCNjCcomRxjWUfhVdpNjsavSZhtCEbvnVInnIHWqJENUjSSQbyLQHcqkdsmYSNrdDPaeyQrQQxgbsPyoyGTguFMIflmGDJTbcpHtvFzVkbwRwwOtpGrZdOqybJrojvzQifUyHRNORoApKjBtMvCIinPiLIRZmitSTHiBXjPKkueJIUhlujUbWuAAtCVOVrjXmgilbWNNrMKNoMooRbwfSXEiGMETPxlyFEikmocAWarAoVQmWnelCNFSuDpBzXcMVyUuzNVKMIHPTYcHgCDcpHIzVcJyHWOdmsCztXsDkBsNdSHjDPCfUGhlXLSIizAuCblDLTmDfquSPTYkTUhfhTCOxfHTyUYGNkyJycXkvKQjkjlXTdAttUXCsOlhimaNWqaDFFIZaMFpnLQEDACfMMapJrNOJndljdPwcjcQKMt', - 'operation_type': 0, - 'operation_type_display': 'Programme', - 'primary_sector': 1, - 'primary_sector_display': 'PGI', + 'name': 'project-UEwcoWFoeqxocQnHYxyEDccPugTHOrVqLIKlyPyxLPeHqyoHzw', + 'operation_type': 1, + 'operation_type_display': 'Emergency Operation', + 'primary_sector': 7, + 'primary_sector_display': 'NS Strengthening', 'programme_type': 1, 'programme_type_display': 'Multilateral', 'project_country': 2, @@ -45,13 +45,13 @@ 'id': 2, 'independent': None, 'is_deprecated': False, - 'iso': 'tJ', - 'iso3': 'yPY', - 'name': 'eECOtYrLdwGetDCcdxsePfNMGyDLJYVcCZKPmuMEGjdCgZvTfGPlcpTCCHHNkxxsyAXvRMdYOPvevgJRysqUQMjvfLQjwtPSQziM', - 'record_type': 1, - 'record_type_display': 'Country', + 'iso': 'Eb', + 'iso3': 'NJu', + 'name': 'country-AlmiYIxHGrkqEZsVvZhDejWoRURzZJxfYzaqIhDxRVRqLyOxgR', + 'record_type': 2, + 'record_type_display': 'Cluster', 'region': 2, - 'society_name': 'viQSVRHfPQBGxbxtlnvXFmoijesYgGXIVHcQvXNiMyjklSXNZkUCcAxRUpCNsWVYCoIptZYEmxRKCDXsXyGHAkmZMiqdPExJgTHhsfWkrCGjBfoCwbAdzGxpyfxobugTPvYjicsESiWTECNafbqnjJUMHBhXspthdpAOYNDehFMIbOGKpTjsBaNwpKAlQQfHxeHIGYGJbyEcOyxqVbwYewpUQOgXLVWvicwIvPlXRDSEOlZieTXDcsmcYmcutGzIEqcWPmswXdPvrhZxBzVCyvlFSFxZHrZfUBfBMlIsugfuQstCMTBkSCwCcUwNBrOYdeQOzxGZVRkbjMRYCciepXPxxyKcMjRCxxCWeKiHxzuPrphbVlFHyJhqXqTCnNsSFmhieClTCfZRuQwTeJIstkTTSOlYxGohmYipYFbxJKxDZJiNfetzTUEHAXAKeiuPeCDRHwiXJOLlXiBGdhHjtkkuTowHsfqmOJriOtNIfGPkLLjkQNUM' + 'society_name': 'society-name-NoPeODStPAhicctFhgpIiyDxQVSIALVUjAPgFNArcSxnCCpxgR' }, 'project_districts': [ ], @@ -66,7 +66,7 @@ 'created_at': '2019-03-23T00:00:00.123456Z', 'id': 1, 'modified_at': '2019-03-23T00:00:00.123456Z', - 'name': 'uxyeWBJesEihSrvHAHnSnNdgKUOHfEUSMYTsBMuqHKNwiNKFHUOFFZlNoTsmahbDOYhVnZNAAcvwJZOnaOmSsqYettGJuXahRvvz' + 'name': 'regional-project-xMThQoAZvUhEREEnLkPAbpciKLkiOGcKjdkqlHzMKObUUQsfnC' }, 'reporting_ns': 1, 'reporting_ns_detail': { @@ -74,27 +74,28 @@ 'id': 1, 'independent': None, 'is_deprecated': False, - 'iso': 'Dy', - 'iso3': 'rOS', - 'name': 'bVrpoiVgRVIfLBcbfnoGMbJmTPSIAoCLrZaWZkSBvrjnWvgfygwwMqZcUDIhyfJsONxKmTecQoXsfogyrDOxkxwnQrSRPeMOkIUp', - 'record_type': 2, - 'record_type_display': 'Cluster', + 'iso': 'wM', + 'iso3': 'qZc', + 'name': 'country-bVrpoiVgRVIfLBcbfnoGMbJmTPSIAoCLrZaWZkSBvrjnWvgfyg', + 'record_type': 3, + 'record_type_display': 'Region', 'region': 1, - 'society_name': 'JoRuXXdocZuzrenKTunPFzPDjqipVJIqVLBLzxoiGFfWdhjOkYRBMeyyMDHqJaRUhRIWrXPvhsBkDaUUqGWlGgOtOGMmjxWkIXHaMuFbhxZtpdpKffUFeWIXiiQEJkqHMBnIWUSmTtzQPxCHChpoevbLJoLoaeTOdoecveGprQFnIiUKKEpYEZAmggQBwBADUdRPPgdzUvZgpmmICiBlrDpeCZJgdPIafWpkAFEnzdkyayqYYDsBSUYJQTFjmsndLVIdVuddLEGHkdGfleMeRpzhKpLMcNfAQLKHuqnQTupqziQPtDuWeaDNKgeInGqiwepxskCITtNZPHaQJtQgiqhgVJjrsMnTvnROqGFqdfOBrcavXiOqkVCJTBJaheSjIcxLJjBictxYcwnRpQgwXJANVjpkZZlAblVvYAZQVZprkYSgycEomDwtYoobQmzvreXrwPGzRIvbhqlLqcgMBwUYuBMGhyKmqcTBaHZIRUVVQmxBeQvN' + 'society_name': 'society-name-UDIhyfJsONxKmTecQoXsfogyrDOxkxwnQrSRPeMOkIUpkDyrOS' }, 'secondary_sectors': [ ], 'secondary_sectors_display': [ ], 'start_date': '2008-01-01', - 'status': 0, - 'status_display': 'Planned', + 'status': 1, + 'status_display': 'Ongoing', 'target_female': 0, 'target_male': 0, 'target_other': 0, 'target_total': 0, 'user': 2, - 'visibility': 'public' + 'visibility': 'public', + 'visibility_display': 'Public' } ] } @@ -110,25 +111,25 @@ 'dtype': 3, 'dtype_detail': { 'id': 3, - 'name': 'VLHCAklbiUpQqVSVfnkzggeEJdbXzHWfgqNjfPytopVsCOiiHkbcQwuEDIrJCiSIlLMDOVOKBHOOItwEIoZfCtxAqjtaaHWiwsEI', - 'summary': 'aSFWEtaXBZsMoYaJxmAJBzpkTVPyyoqfBOpHWZNZSRrsPVIZrAmelishODNCrSNFmubjdIblgsriTCUaofjaFnvAtYZFxDSYcvfWjdrXzeIElmqyahXTpyXCpVcmDVXgHQnEyRtukOUcVJHhqEOtmxdQnhpOBuakYrLhzYpacLYSESMjxXfpkFfRNvWOddwPjSIYgiFouJYPWwZCUmbSywUiqcFTCJsISFmKlIwuUDrMJkeHjCsqIxDaXOGyUlbNxXNpuUeQIymHRFXJjNsuAPuhgHQecilcmgFmgcKPyQFHNSLqdxoMTeanPFfDZOdxJVAxYTdNrHcUetenHggUoIymmHQpKOlJVJAVgXOKwRDSQBgkYlJzGvQkIMCwuJuxAWOBUuMpKInyXJVqxCCzaUcsMbHitatonubXSrJGJKKjgcDwjiqxLpoqZtfKzKnUeUuYElFSSKgMPtcUZKyfXdXvwBAhXoVPMaOXOydtHcuIKjuGSojd' + 'name': 'disaster-type-CDQLGiFaHVdJBLEGXlSLlUigyQMMuGyAMSWprzvsCZiiAMSVGt', + 'summary': 'SJuTVJOnmnNTsRwRiTPlGISOuThWwJELKQTARVIsBZaHgbyjdQdmrWYksRqjdSYsnWIcwCgNRVJoVPJypGYYZSsSQdyyAYRuJdaVqmNXCoOTTPxWLIVMmXUmsClRellVGhycBrJqikLqavDTjcjuMdXONQtFYKJweYTuHolHeYGkAIIzfwonQvvxsnWNHEJWPahQwCpPNNpcRuyYhyqIUsbHXxGZGCFcsPmuGfgkXIIaOenQOXnRBgnISVXBPeVRjbDTvcfedlYqJeKoqAyCOzBubyRhIaPUNeWVLcSewGgsYRtMfsWCyzQbEkIoiVzYZIsOjtRYUPxaJJjhcaKMzIJftnVVUwnAPGjkloNqmhlQZKdWJDPJesQeqgmULFvwiQPpgsNemuFCvNQtSLjKKxZuBkaupYoTVPBrxiRUvEDCwXtFJglPMfriImqUOeUebGObLLzXLncJqIIEPXjxzoXLUsiDGGfzxGaQpZNRkWGiCklKKQjV' }, 'end_date': '2008-01-01', 'event': 2, 'event_detail': { 'dtype': 1, 'id': 2, - 'name': 'WptcCqwfChXZpnZVLSwTNOBkNiYnnZdKwIrMIkuTssKrGRgiWYAdrPiSipjTupWRzFjKOrOAyCeOYXfzGVrSxDFuLaXUfUDOQSwe', + 'name': 'event-KRWmlNOzBGufzQgliEupaqypCWrvtLUKaqPxSpdQhDtkzRGTXt', 'parent_event': 1, - 'slug': 'yiznbnfrusvjkikfyvrwdcgoydbhkcdabmsiptkrfpxqfxqpkd' + 'slug': 'shosxnooiejdvmxasjewizqnwprwmyfhchtxekhdjgmkijkuhc' }, 'id': 1, 'modified_at': '2019-03-23T00:00:00.123456Z', - 'name': 'RUzCWMKGfoBsYzjivfEKVdJzqfzGBXSiWiEJmFzPKmJNVHpperXBuRKfhQABxwmuwMPbXtkwNZCNjCcomRxjWUfhVdpNjsavSZhtCEbvnVInnIHWqJENUjSSQbyLQHcqkdsmYSNrdDPaeyQrQQxgbsPyoyGTguFMIflmGDJTbcpHtvFzVkbwRwwOtpGrZdOqybJrojvzQifUyHRNORoApKjBtMvCIinPiLIRZmitSTHiBXjPKkueJIUhlujUbWuAAtCVOVrjXmgilbWNNrMKNoMooRbwfSXEiGMETPxlyFEikmocAWarAoVQmWnelCNFSuDpBzXcMVyUuzNVKMIHPTYcHgCDcpHIzVcJyHWOdmsCztXsDkBsNdSHjDPCfUGhlXLSIizAuCblDLTmDfquSPTYkTUhfhTCOxfHTyUYGNkyJycXkvKQjkjlXTdAttUXCsOlhimaNWqaDFFIZaMFpnLQEDACfMMapJrNOJndljdPwcjcQKMt', - 'operation_type': 0, - 'operation_type_display': 'Programme', - 'primary_sector': 1, - 'primary_sector_display': 'PGI', + 'name': 'project-UEwcoWFoeqxocQnHYxyEDccPugTHOrVqLIKlyPyxLPeHqyoHzw', + 'operation_type': 1, + 'operation_type_display': 'Emergency Operation', + 'primary_sector': 7, + 'primary_sector_display': 'NS Strengthening', 'programme_type': 1, 'programme_type_display': 'Multilateral', 'project_country': 2, @@ -137,13 +138,13 @@ 'id': 2, 'independent': None, 'is_deprecated': False, - 'iso': 'tJ', - 'iso3': 'yPY', - 'name': 'eECOtYrLdwGetDCcdxsePfNMGyDLJYVcCZKPmuMEGjdCgZvTfGPlcpTCCHHNkxxsyAXvRMdYOPvevgJRysqUQMjvfLQjwtPSQziM', - 'record_type': 1, - 'record_type_display': 'Country', + 'iso': 'Eb', + 'iso3': 'NJu', + 'name': 'country-AlmiYIxHGrkqEZsVvZhDejWoRURzZJxfYzaqIhDxRVRqLyOxgR', + 'record_type': 2, + 'record_type_display': 'Cluster', 'region': 2, - 'society_name': 'viQSVRHfPQBGxbxtlnvXFmoijesYgGXIVHcQvXNiMyjklSXNZkUCcAxRUpCNsWVYCoIptZYEmxRKCDXsXyGHAkmZMiqdPExJgTHhsfWkrCGjBfoCwbAdzGxpyfxobugTPvYjicsESiWTECNafbqnjJUMHBhXspthdpAOYNDehFMIbOGKpTjsBaNwpKAlQQfHxeHIGYGJbyEcOyxqVbwYewpUQOgXLVWvicwIvPlXRDSEOlZieTXDcsmcYmcutGzIEqcWPmswXdPvrhZxBzVCyvlFSFxZHrZfUBfBMlIsugfuQstCMTBkSCwCcUwNBrOYdeQOzxGZVRkbjMRYCciepXPxxyKcMjRCxxCWeKiHxzuPrphbVlFHyJhqXqTCnNsSFmhieClTCfZRuQwTeJIstkTTSOlYxGohmYipYFbxJKxDZJiNfetzTUEHAXAKeiuPeCDRHwiXJOLlXiBGdhHjtkkuTowHsfqmOJriOtNIfGPkLLjkQNUM' + 'society_name': 'society-name-NoPeODStPAhicctFhgpIiyDxQVSIALVUjAPgFNArcSxnCCpxgR' }, 'project_districts': [ ], @@ -158,7 +159,7 @@ 'created_at': '2019-03-23T00:00:00.123456Z', 'id': 1, 'modified_at': '2019-03-23T00:00:00.123456Z', - 'name': 'uxyeWBJesEihSrvHAHnSnNdgKUOHfEUSMYTsBMuqHKNwiNKFHUOFFZlNoTsmahbDOYhVnZNAAcvwJZOnaOmSsqYettGJuXahRvvz' + 'name': 'regional-project-xMThQoAZvUhEREEnLkPAbpciKLkiOGcKjdkqlHzMKObUUQsfnC' }, 'reporting_ns': 1, 'reporting_ns_detail': { @@ -166,27 +167,28 @@ 'id': 1, 'independent': None, 'is_deprecated': False, - 'iso': 'Dy', - 'iso3': 'rOS', - 'name': 'bVrpoiVgRVIfLBcbfnoGMbJmTPSIAoCLrZaWZkSBvrjnWvgfygwwMqZcUDIhyfJsONxKmTecQoXsfogyrDOxkxwnQrSRPeMOkIUp', - 'record_type': 2, - 'record_type_display': 'Cluster', + 'iso': 'wM', + 'iso3': 'qZc', + 'name': 'country-bVrpoiVgRVIfLBcbfnoGMbJmTPSIAoCLrZaWZkSBvrjnWvgfyg', + 'record_type': 3, + 'record_type_display': 'Region', 'region': 1, - 'society_name': 'JoRuXXdocZuzrenKTunPFzPDjqipVJIqVLBLzxoiGFfWdhjOkYRBMeyyMDHqJaRUhRIWrXPvhsBkDaUUqGWlGgOtOGMmjxWkIXHaMuFbhxZtpdpKffUFeWIXiiQEJkqHMBnIWUSmTtzQPxCHChpoevbLJoLoaeTOdoecveGprQFnIiUKKEpYEZAmggQBwBADUdRPPgdzUvZgpmmICiBlrDpeCZJgdPIafWpkAFEnzdkyayqYYDsBSUYJQTFjmsndLVIdVuddLEGHkdGfleMeRpzhKpLMcNfAQLKHuqnQTupqziQPtDuWeaDNKgeInGqiwepxskCITtNZPHaQJtQgiqhgVJjrsMnTvnROqGFqdfOBrcavXiOqkVCJTBJaheSjIcxLJjBictxYcwnRpQgwXJANVjpkZZlAblVvYAZQVZprkYSgycEomDwtYoobQmzvreXrwPGzRIvbhqlLqcgMBwUYuBMGhyKmqcTBaHZIRUVVQmxBeQvN' + 'society_name': 'society-name-UDIhyfJsONxKmTecQoXsfogyrDOxkxwnQrSRPeMOkIUpkDyrOS' }, 'secondary_sectors': [ ], 'secondary_sectors_display': [ ], 'start_date': '2008-01-01', - 'status': 0, - 'status_display': 'Planned', + 'status': 1, + 'status_display': 'Ongoing', 'target_female': 0, 'target_male': 0, 'target_other': 0, 'target_total': 0, 'user': 2, - 'visibility': 'public' + 'visibility': 'public', + 'visibility_display': 'Public' }, { 'actual_expenditure': 0, @@ -194,40 +196,40 @@ 'dtype': 6, 'dtype_detail': { 'id': 6, - 'name': 'qhmMbIbHGWjnxhnbuiofUSirrEmfwTJPsDVZFBGzmqlmRTrzgLYXLtkYnUFBCBMVruNgMyBmKwxOeCkcGqLAsMPHwzbhlZuBYlwp', - 'summary': 'enQxxjXuhauSaTvnDKYuoJeysMnHngJrTMZQeKPARWBuummdZFFcrAhhCkMuLypKbsbPYKaDsizcIHcvPbeEgZAUtruWwzfJXuFNdztSDFPhxNgbodaiguSUBokfmUZxIaSdqYchdteqvSNYZyrSkiLDhiujWLAOCQhHHpKEQFruXUEofqXsTfwJpQPVnSeeFdnaQnDymFgvnLWHGuWtTDPjGgioxyCNGmXzmerBkRtKPgjDgVhpbDlrbEQHCwqhJfwBnjzGBGvdCrxgdPyUBmsmzlMrHMFHBgRdPphohdcKrpeIgroNSTzzzgoUSrFnkYnwOsTMsUaglGSNEVtSpkuReklvDjaQEBvblqekRWaMwELaFpEhcbKRsoHGkWjXggtZVvCFVwIqQFqxDawtTvHXQMEhrRHUObjAoQjwFbpKVSBxnVfmyOgrORICHlqRwvzLArtmcLHSvNhBYDKYYwshaFRjDRjHsNJQktFseZsaDcnsLhdF' + 'name': 'disaster-type-YLPcnomCpzntByKkxqJfiWfsCHwoLcDGNvBCDBAxZFuryblCoq', + 'summary': 'PewfsGGIPfYroghexcImvmRvqtVXRrmTMiWTVIqaXtswYzzLWPaEPGWjzooUVnEoHLYJWDUDvYfumBXSAnCCJbxiKitVaFZQwvoABRWzWXSItuLbKYcijvKOZMMKzynzeIymEgvKCOtfkgRJlcSMFblmeysnosQHeDdxHakuAzkhiIAEVeynintBTQEkMKtLmGTRDrmajCezMZpHvKFDDKcVfsPDwSTYtzNZlAplNUBDyQlSKgzScpkrOIsQeSUUnFAWJhxeWgGXXuACkqnGcDbeOSRVDyvVzmzcaqhTiuQVDFDefJQpTCiErkkbMglshIVzkeQWaRrjCwlnTcRInCSdOZHPQTQgyStCdMadXyXmpxpmfbAbavmRQeogZQkUkcAGguuJOmNnIzBhongwulazPuaynDoeQrPNxcenAtXMFgTIYKkqgMuOSyRXSivlOWSuQEevbMLCyGOVoGLTaobNWhtpVBWpNfdixFsmjynPcpUMCVvi' }, 'end_date': '2008-01-01', 'event': 4, 'event_detail': { 'dtype': 4, 'id': 4, - 'name': 'WGxFHDluTxHSETFErLzOYLPcnomCpzntByKkxqJfiWfsCHwoLcDGNvBCDBAxZFuryblCoqPewfsGGIPfYroghexcImvmRvqtVXRr', + 'name': 'event-sCNxZRSZemDffzlsegkrhSjFjnHObsARIiEwACVPbsmebZoHPv', 'parent_event': 3, - 'slug': 'mtmiwtviqaxtswyzzlwpaepgwjzoouvneohlyjwdudvyfumbxs' + 'slug': 'alvppyuflqshjcdtkiytkyqoexsxdjwsdknktislltsqyjkphc' }, 'id': 2, 'modified_at': '2019-03-23T00:00:00.123456Z', - 'name': 'taBwQadqiwsYGQXJjfTrjUmBLfsocEwpZROyBzgqtMtlKBRuZLiRXmqiAJmttftKODIlyYBgiHCSuGRTwDwBDAADbJbXAfWiNtYpLGxiNIKsdWzizQaDZWHDdfdrPgvMgsKESvdhVLRGVTdSnHjJVFioROjtOtUaZFNSmheajMhHgpngEbGCzdhtzElpIqNRCQNhBjObljVQpkGVSImEEssQgLFxQrzySZgDABjbsDhKyaLtcPPQNCcwiDUDrakwGGnwTHyGelPjwPUKvDTYirYWQtzePEyEMQlKTGXQHqiSuLLwLNzecbUkogQgFREuWoXZUYpglUyWAedNqhcVeCWxMOblugSCyiOKJmmqFCRsomVkBHZYmfLbOQgncZiaxXAKIevlRUUPHFmnKEGwwNJiZeCBOyeKfiYHtghFodMIvbosqyTwekseIKpHNGtzNdIShLEqPbcvAqmvWdinJUvWQdpFeZKNSWZcweAMVNfJEirUcgcF', - 'operation_type': 1, - 'operation_type_display': 'Emergency Operation', + 'name': 'project-ruPYWcHYAPsWboUvvpnIdQpZRSUoMyHulCOaeFemdOjniflLJY', + 'operation_type': 0, + 'operation_type_display': 'Programme', 'primary_sector': 3, 'primary_sector_display': 'Migration', - 'programme_type': 2, - 'programme_type_display': 'Domestic', + 'programme_type': 0, + 'programme_type_display': 'Bilateral', 'project_country': 4, 'project_country_detail': { 'fdrs': None, 'id': 4, 'independent': None, 'is_deprecated': False, - 'iso': 'ZN', - 'iso3': 'XBK', - 'name': 'KGArbSELbuyKyuKgZFgSRnvFGZWQvkNtxBmFOYeInsqdtKzZoNVfTLgLvreKZHEBnwYePtGZtBQIumAzqNGDQWJlbOTHlKFnQVDr', - 'record_type': 5, - 'record_type_display': 'Representative Office', + 'iso': 'lX', + 'iso3': 'TdA', + 'name': 'country-IizAuCblDLTmDfquSPTYkTUhfhTCOxfHTyUYGNkyJycXkvKQjk', + 'record_type': 2, + 'record_type_display': 'Cluster', 'region': 4, - 'society_name': 'UOdHmxDjpjVRWtBAueOnArsPkqRMpzphjmbpZtDFJBBPcmkribqYZrQJlPcUFYbdfuMteAxQQfzUiphKVGhHQLXHqFfpMhXZuvLVyZVVpBnjglnrCAqLdFIxShuIBERprYjxETxtbPMcVQZdSYQpqJytOSxZRhIpCyazqtfWptnkCOuZXPAYcrfXFEVAvTBgkSqGewAMUJVuDSbWdPPlOCYPiazmOtuKfhkpHTXPWiMRAYuCEViqlRLuZsmfAxlzyKobbJPNOofDmqSkdzNBMqjfxkKhaTHBXDRFhoTnmYrsVFyiBnMnsURmAlAYjbsqpNCpxLRPDfaEiuSzRnTyTBVMqegJddvpEwMQZMTVZcaqGNytzQxiJcLlqkGFvDifuTHBjqhuciFrVxBsqNWqHuBkuVFWjJQOZCdmjdolcEqkTDBhFcCwTJFDFhUjhwfnslkVGrKQLnLaHXKlAepXFRgvbsRRhzxLgujbfDTQEDOrMQavcPNC' + 'society_name': 'society-name-ttUXCsOlhimaNWqaDFFIZaMFpnLQEDACfMMapJrNOJndljdPwc' }, 'project_districts': [ ], @@ -242,7 +244,7 @@ 'created_at': '2019-03-23T00:00:00.123456Z', 'id': 2, 'modified_at': '2019-03-23T00:00:00.123456Z', - 'name': 'dyXySiBSBJihChNxwmvBdpofLaoAVWZYIKcZaUpdediClscuwMPpsiMzEQhQeeqInFTVwoCTtxXJsPpHruSIGgdwATNFrfniHotV' + 'name': 'regional-project-KCOmrYEfxzykECBGNVBWjYEbWyBfWtMIjJUlqyDtDsyJMEeviT' }, 'reporting_ns': 3, 'reporting_ns_detail': { @@ -250,13 +252,13 @@ 'id': 3, 'independent': None, 'is_deprecated': False, - 'iso': 'ha', - 'iso3': 'tcR', - 'name': 'EZcPiEjODIvDYAVdHtKURuJIbnKRvZYwejrbvyOIkKMylMhYWtTuTcrAfFpxCtnHtlhxYcXmfCGbZEGjmvEUHtXujXgHRinUcDyT', - 'record_type': 5, - 'record_type_display': 'Representative Office', + 'iso': 'SH', + 'iso3': 'BoZ', + 'name': 'country-NQGqkURvDMLeoyyigbmHGRAjMglENMcYIGWhfEQiMIaXRPBHAx', + 'record_type': 1, + 'record_type_display': 'Country', 'region': 3, - 'society_name': 'MfvDcgHXQVtbKWtOnummsrIuXCQhrjkrhaNJGgnIwJurjTZsKpketNvICdibERdgydfBzlTMLOSSCNwtvmTWQZIfWWDKifZSDgDtRPTXDEoojNqxzlSQvYuDFbeEhwEDksXwMKiGgzTYguJPeYtIDzLApNpJkEyevnSLBYBKYvISplQQeVTKFhLMDuJgCltzeMgRMXyuFPQdfniLWOZaWjQjCIsyNKCmnRutKYRtBTwfLaNGzisdxJdaTJwhsbpBSLzOuTyzyBInQlEimJyxAjsQiiaePbjUFQBifiPZADYSMBNlDGBJCywolBMaKFUpTGrAIKxccKETxhLESfjUUHWXrDHfHNfpEOVQQeROIZLtNdvIXaEDGEKUvAwZsskcSMVtUYKqdOELkKdQsZVNbsFfiGeYrqiNrrqaVhMlLVjQCxZlqYSpFlZHcvfjMjFWAXypQCUOknKUwdPqWhdkDzEtEVWIoyRTyEqjHBasZCyRuHRcgIOw' + 'society_name': 'society-name-EYXywLZVWSKgBiqEXofsMIAqmaTVYaKHhHayPnSZuAxgjBPLqq' }, 'secondary_sectors': [ ], @@ -270,7 +272,8 @@ 'target_other': 0, 'target_total': 0, 'user': 3, - 'visibility': 'public' + 'visibility': 'public', + 'visibility_display': 'Public' } ] } @@ -281,25 +284,25 @@ 'dtype': 3, 'dtype_detail': { 'id': 3, - 'name': 'VLHCAklbiUpQqVSVfnkzggeEJdbXzHWfgqNjfPytopVsCOiiHkbcQwuEDIrJCiSIlLMDOVOKBHOOItwEIoZfCtxAqjtaaHWiwsEI', - 'summary': 'aSFWEtaXBZsMoYaJxmAJBzpkTVPyyoqfBOpHWZNZSRrsPVIZrAmelishODNCrSNFmubjdIblgsriTCUaofjaFnvAtYZFxDSYcvfWjdrXzeIElmqyahXTpyXCpVcmDVXgHQnEyRtukOUcVJHhqEOtmxdQnhpOBuakYrLhzYpacLYSESMjxXfpkFfRNvWOddwPjSIYgiFouJYPWwZCUmbSywUiqcFTCJsISFmKlIwuUDrMJkeHjCsqIxDaXOGyUlbNxXNpuUeQIymHRFXJjNsuAPuhgHQecilcmgFmgcKPyQFHNSLqdxoMTeanPFfDZOdxJVAxYTdNrHcUetenHggUoIymmHQpKOlJVJAVgXOKwRDSQBgkYlJzGvQkIMCwuJuxAWOBUuMpKInyXJVqxCCzaUcsMbHitatonubXSrJGJKKjgcDwjiqxLpoqZtfKzKnUeUuYElFSSKgMPtcUZKyfXdXvwBAhXoVPMaOXOydtHcuIKjuGSojd' + 'name': 'disaster-type-CDQLGiFaHVdJBLEGXlSLlUigyQMMuGyAMSWprzvsCZiiAMSVGt', + 'summary': 'SJuTVJOnmnNTsRwRiTPlGISOuThWwJELKQTARVIsBZaHgbyjdQdmrWYksRqjdSYsnWIcwCgNRVJoVPJypGYYZSsSQdyyAYRuJdaVqmNXCoOTTPxWLIVMmXUmsClRellVGhycBrJqikLqavDTjcjuMdXONQtFYKJweYTuHolHeYGkAIIzfwonQvvxsnWNHEJWPahQwCpPNNpcRuyYhyqIUsbHXxGZGCFcsPmuGfgkXIIaOenQOXnRBgnISVXBPeVRjbDTvcfedlYqJeKoqAyCOzBubyRhIaPUNeWVLcSewGgsYRtMfsWCyzQbEkIoiVzYZIsOjtRYUPxaJJjhcaKMzIJftnVVUwnAPGjkloNqmhlQZKdWJDPJesQeqgmULFvwiQPpgsNemuFCvNQtSLjKKxZuBkaupYoTVPBrxiRUvEDCwXtFJglPMfriImqUOeUebGObLLzXLncJqIIEPXjxzoXLUsiDGGfzxGaQpZNRkWGiCklKKQjV' }, 'end_date': '2008-01-01', 'event': 2, 'event_detail': { 'dtype': 1, 'id': 2, - 'name': 'WptcCqwfChXZpnZVLSwTNOBkNiYnnZdKwIrMIkuTssKrGRgiWYAdrPiSipjTupWRzFjKOrOAyCeOYXfzGVrSxDFuLaXUfUDOQSwe', + 'name': 'event-KRWmlNOzBGufzQgliEupaqypCWrvtLUKaqPxSpdQhDtkzRGTXt', 'parent_event': 1, - 'slug': 'yiznbnfrusvjkikfyvrwdcgoydbhkcdabmsiptkrfpxqfxqpkd' + 'slug': 'shosxnooiejdvmxasjewizqnwprwmyfhchtxekhdjgmkijkuhc' }, 'id': 1, 'modified_at': '2019-03-23T00:00:00.123456Z', - 'name': 'RUzCWMKGfoBsYzjivfEKVdJzqfzGBXSiWiEJmFzPKmJNVHpperXBuRKfhQABxwmuwMPbXtkwNZCNjCcomRxjWUfhVdpNjsavSZhtCEbvnVInnIHWqJENUjSSQbyLQHcqkdsmYSNrdDPaeyQrQQxgbsPyoyGTguFMIflmGDJTbcpHtvFzVkbwRwwOtpGrZdOqybJrojvzQifUyHRNORoApKjBtMvCIinPiLIRZmitSTHiBXjPKkueJIUhlujUbWuAAtCVOVrjXmgilbWNNrMKNoMooRbwfSXEiGMETPxlyFEikmocAWarAoVQmWnelCNFSuDpBzXcMVyUuzNVKMIHPTYcHgCDcpHIzVcJyHWOdmsCztXsDkBsNdSHjDPCfUGhlXLSIizAuCblDLTmDfquSPTYkTUhfhTCOxfHTyUYGNkyJycXkvKQjkjlXTdAttUXCsOlhimaNWqaDFFIZaMFpnLQEDACfMMapJrNOJndljdPwcjcQKMt', - 'operation_type': 0, - 'operation_type_display': 'Programme', - 'primary_sector': 1, - 'primary_sector_display': 'PGI', + 'name': 'project-UEwcoWFoeqxocQnHYxyEDccPugTHOrVqLIKlyPyxLPeHqyoHzw', + 'operation_type': 1, + 'operation_type_display': 'Emergency Operation', + 'primary_sector': 7, + 'primary_sector_display': 'NS Strengthening', 'programme_type': 1, 'programme_type_display': 'Multilateral', 'project_country': 2, @@ -308,13 +311,13 @@ 'id': 2, 'independent': None, 'is_deprecated': False, - 'iso': 'tJ', - 'iso3': 'yPY', - 'name': 'eECOtYrLdwGetDCcdxsePfNMGyDLJYVcCZKPmuMEGjdCgZvTfGPlcpTCCHHNkxxsyAXvRMdYOPvevgJRysqUQMjvfLQjwtPSQziM', - 'record_type': 1, - 'record_type_display': 'Country', + 'iso': 'Eb', + 'iso3': 'NJu', + 'name': 'country-AlmiYIxHGrkqEZsVvZhDejWoRURzZJxfYzaqIhDxRVRqLyOxgR', + 'record_type': 2, + 'record_type_display': 'Cluster', 'region': 2, - 'society_name': 'viQSVRHfPQBGxbxtlnvXFmoijesYgGXIVHcQvXNiMyjklSXNZkUCcAxRUpCNsWVYCoIptZYEmxRKCDXsXyGHAkmZMiqdPExJgTHhsfWkrCGjBfoCwbAdzGxpyfxobugTPvYjicsESiWTECNafbqnjJUMHBhXspthdpAOYNDehFMIbOGKpTjsBaNwpKAlQQfHxeHIGYGJbyEcOyxqVbwYewpUQOgXLVWvicwIvPlXRDSEOlZieTXDcsmcYmcutGzIEqcWPmswXdPvrhZxBzVCyvlFSFxZHrZfUBfBMlIsugfuQstCMTBkSCwCcUwNBrOYdeQOzxGZVRkbjMRYCciepXPxxyKcMjRCxxCWeKiHxzuPrphbVlFHyJhqXqTCnNsSFmhieClTCfZRuQwTeJIstkTTSOlYxGohmYipYFbxJKxDZJiNfetzTUEHAXAKeiuPeCDRHwiXJOLlXiBGdhHjtkkuTowHsfqmOJriOtNIfGPkLLjkQNUM' + 'society_name': 'society-name-NoPeODStPAhicctFhgpIiyDxQVSIALVUjAPgFNArcSxnCCpxgR' }, 'project_districts': [ ], @@ -329,7 +332,7 @@ 'created_at': '2019-03-23T00:00:00.123456Z', 'id': 1, 'modified_at': '2019-03-23T00:00:00.123456Z', - 'name': 'uxyeWBJesEihSrvHAHnSnNdgKUOHfEUSMYTsBMuqHKNwiNKFHUOFFZlNoTsmahbDOYhVnZNAAcvwJZOnaOmSsqYettGJuXahRvvz' + 'name': 'regional-project-xMThQoAZvUhEREEnLkPAbpciKLkiOGcKjdkqlHzMKObUUQsfnC' }, 'reporting_ns': 1, 'reporting_ns_detail': { @@ -337,40 +340,41 @@ 'id': 1, 'independent': None, 'is_deprecated': False, - 'iso': 'Dy', - 'iso3': 'rOS', - 'name': 'bVrpoiVgRVIfLBcbfnoGMbJmTPSIAoCLrZaWZkSBvrjnWvgfygwwMqZcUDIhyfJsONxKmTecQoXsfogyrDOxkxwnQrSRPeMOkIUp', - 'record_type': 2, - 'record_type_display': 'Cluster', + 'iso': 'wM', + 'iso3': 'qZc', + 'name': 'country-bVrpoiVgRVIfLBcbfnoGMbJmTPSIAoCLrZaWZkSBvrjnWvgfyg', + 'record_type': 3, + 'record_type_display': 'Region', 'region': 1, - 'society_name': 'JoRuXXdocZuzrenKTunPFzPDjqipVJIqVLBLzxoiGFfWdhjOkYRBMeyyMDHqJaRUhRIWrXPvhsBkDaUUqGWlGgOtOGMmjxWkIXHaMuFbhxZtpdpKffUFeWIXiiQEJkqHMBnIWUSmTtzQPxCHChpoevbLJoLoaeTOdoecveGprQFnIiUKKEpYEZAmggQBwBADUdRPPgdzUvZgpmmICiBlrDpeCZJgdPIafWpkAFEnzdkyayqYYDsBSUYJQTFjmsndLVIdVuddLEGHkdGfleMeRpzhKpLMcNfAQLKHuqnQTupqziQPtDuWeaDNKgeInGqiwepxskCITtNZPHaQJtQgiqhgVJjrsMnTvnROqGFqdfOBrcavXiOqkVCJTBJaheSjIcxLJjBictxYcwnRpQgwXJANVjpkZZlAblVvYAZQVZprkYSgycEomDwtYoobQmzvreXrwPGzRIvbhqlLqcgMBwUYuBMGhyKmqcTBaHZIRUVVQmxBeQvN' + 'society_name': 'society-name-UDIhyfJsONxKmTecQoXsfogyrDOxkxwnQrSRPeMOkIUpkDyrOS' }, 'secondary_sectors': [ ], 'secondary_sectors_display': [ ], 'start_date': '2008-01-01', - 'status': 0, - 'status_display': 'Planned', + 'status': 1, + 'status_display': 'Ongoing', 'target_female': 0, 'target_male': 0, 'target_other': 0, 'target_total': 0, 'user': 2, - 'visibility': 'public' + 'visibility': 'public', + 'visibility_display': 'Public' } snapshots['TestProjectAPI::test_personnel_csv_api 1'] = '''country_from,deployment.comments,deployment.country_deployed_to.id,deployment.country_deployed_to.iso,deployment.country_deployed_to.iso3,deployment.country_deployed_to.name,deployment.country_deployed_to.society_name,deployment.event_deployed_to,deployment.id,end_date,id,is_active,name,role,start_date,type\r -,,10,go,obT,plfIgiUjOFBrwDSNpUHKDceuxcjMUOZgyGUfvOVtBzblVqUPVfBhYmKqtNGIYpSZdxKEnWBrVSXlrGQcMzlRsraAnbYAQirrDMYO,uoeNsUTMDLAOMvIyEJavvuwCjDVFnISkRyqzcQKfOFJwfnVHxtsWuCRDbjNLkNwKBAWbWsJVFpyIiyMhgznnhKslkXXVzJAwWnAMruXxOgQROWOuGIIzozFWDsCklzsaIvWDPlRgyLPAAAmObNoiNNGfMKUAbuNpkKOERfxbVMYPyJGmkDxUplETmuisebnKDDpRMCpYlDGPhZMvkpDUeaVcRRAHEyeYAqTIhTXMPITbCEUdsZzUXcxzTGOPCBYhgjqWLWYhUkxAQvjpYEnqgvPSeDTFWpWqvsSCvYCSqKrMcWijHsboxKxTstTkKOtETCRsjVZSijMsyqOobnLtjLaqxUGVHzENkwPjLGuHxyFPkHElEyaQevotnojrMXUYhPmwFDKOaVYYHoVmxQczOgvGerJIVIfZdCKHppqZVlSPpoSTDlcMrJrfVmUeiHtdnopLWLEDgIYduYOemEhCfEmgILnMFtKaLBhUCXPmLZONWDaqWAMr,,10,,10,True,,,,\r -,,9,lu,gSC,CcwiDUDrakwGGnwTHyGelPjwPUKvDTYirYWQtzePEyEMQlKTGXQHqiSuLLwLNzecbUkogQgFREuWoXZUYpglUyWAedNqhcVeCWxM,yiOKJmmqFCRsomVkBHZYmfLbOQgncZiaxXAKIevlRUUPHFmnKEGwwNJiZeCBOyeKfiYHtghFodMIvbosqyTwekseIKpHNGtzNdIShLEqPbcvAqmvWdinJUvWQdpFeZKNSWZcweAMVNfJEirUcgcFGoPwBEtYobdbXYZmIMyRRVbJEdyXySiBSBJihChNxwmvBdpofLaoAVWZYIKcZaUpdediClscuwMPpsiMzEQhQeeqInFTVwoCTtxXJsPpHruSIGgdwATNFrfniHotVJnhxUYjcpSCPWDhbFcrrLytfdrNyFbyyCconylQBIdQtcIWwbMWvqZWLnWbvUNBBYUVWdZgJyURsIDBKUKXHqkyDVpiarZRrfpXIsvKzcNrxrQqYPZXMahtKQuqlCDbCaDcwEOJnAdLfrNJueClqXYrqFioOljNPdohPclRGCLucJTodTqqbRwITcMpwgeGChGepnuKxRAePBsjbuMYxvAPxEsNbkxcsjLb,,9,,9,True,,,,\r -,,8,JX,yzM,vthgQaRJXivxVZxVXLHMxpPrnLyfgiOVMhcLPmmTCgeINvtUEWmIUjcimAJTqWJwxCOThBeEAHGYbkMrSiscKdYSmVzFRIGekCWG,rnlakKnLSaYGDGTUHqtosTrJhkocIpscOjrirYdPpnIhaPwOMxufTJqUiANsudOawoUrlqbIQXXLgUVSyPqOOMJnCournLOZWzjCoUUBxjEfFlDllmKFUlPsbtklzRMmejeBpDPzgUHiUWZaMgyybhaWPcipXfrjOMaYaYgIVvTfmiEWKCktvEjpdISrOIhbcgIsgGAjaoboByjwPsoRyRThFkhogsweNvhxfcMjlBHvMlRBjQRtNswgrFQxqZTZeYajXPjujyCUYYEehKBUrjfuilXywuFBESAMYOviZPpyAJFIIFIIoyfLTAHKXSZVoSfpxanbxJEihdwxXisDjJApnodVihSTjyUbSBxdSgQLeEMkbjxjfpeaKAjWlEViVHStEAUvCYPSashjdPcMWlGkazBRDJTqKGtToBkrfHyiVnzNdozlVJMeSDEuPPzykdZxPBmrggexMXvbpskIgenMaWtmJmOcprfKKcKYEcduftawWszG,,8,,8,True,,,,\r -,,7,Wx,cbm,lpiZcditLBGPWwtLIXjjEtMvsxaHLQRjdpGJdBwmmOmYevmQESSDMSvLKvNtAvkgDYcFoaOoSoDNnpEVXvZVynzlaxaewbJhjsCm,msloqUlvJplmblqgbRiyPYhvntDpxZxQkHZNBTehjiYmmIySxuMBOpcWNLmIsYjupdOYriGLFnUfYEYQNekGyWPWGxFHDluTxHSETFErLzOYLPcnomCpzntByKkxqJfiWfsCHwoLcDGNvBCDBAxZFuryblCoqPewfsGGIPfYroghexcImvmRvqtVXRrmTMiWTVIqaXtswYzzLWPaEPGWjzooUVnEoHLYJWDUDvYfumBXSAnCCJbxiKitVaFZQwvoABRWzWXSItuLbKYcijvKOZMMKzynzeIymEgvKCOtfkgRJlcSMFblmeysnosQHeDdxHakuAzkhiIAEVeynintBTQEkMKtLmGTRDrmajCezMZpHvKFDDKcVfsPDwSTYtzNZlAplNUBDyQlSKgzScpkrOIsQeSUUnFAWJhxeWgGXXuACkqnGcDbeOSRVDyvVzmzcaqhTiuQVDFDefJQpTCiErkkbMglshIVzkeQWaRrjCwlnTcRInCS,,7,,7,True,,,,\r -,,6,yC,uyC,CHQRfhjzzSLgVkexmvmMzhoBUFrWTXLLrWYZPzwEQMzFGrjXDghqFFoOibgVdeFRblyMRujtNNgWeQWHXFYDmsQFFGqIvZIIbWcB,DcclJQXtTkFBitTyFWhKRFQJRIKEEJkGdzqFLyNRwXsudbLcixwZVLbWOvygBwwAwdQpppPtLfSethvkbIucDQBKGArbSELbuyKyuKgZFgSRnvFGZWQvkNtxBmFOYeInsqdtKzZoNVfTLgLvreKZHEBnwYePtGZtBQIumAzqNGDQWJlbOTHlKFnQVDrOIZNXBKUOdHmxDjpjVRWtBAueOnArsPkqRMpzphjmbpZtDFJBBPcmkribqYZrQJlPcUFYbdfuMteAxQQfzUiphKVGhHQLXHqFfpMhXZuvLVyZVVpBnjglnrCAqLdFIxShuIBERprYjxETxtbPMcVQZdSYQpqJytOSxZRhIpCyazqtfWptnkCOuZXPAYcrfXFEVAvTBgkSqGewAMUJVuDSbWdPPlOCYPiazmOtuKfhkpHTXPWiMRAYuCEViqlRLuZsmfAxlzyKobbJPNOofDmqSkdzNBMqjfxkKhaTHBXDRFhoTnmYrsVFyiBn,,6,,6,True,,,,\r -,,5,nS,nNd,AttUXCsOlhimaNWqaDFFIZaMFpnLQEDACfMMapJrNOJndljdPwcjcQKMtvfdgAlkRsNQSSMKYJlDVLxcfXtuxyeWBJesEihSrvHA,gKUOHfEUSMYTsBMuqHKNwiNKFHUOFFZlNoTsmahbDOYhVnZNAAcvwJZOnaOmSsqYettGJuXahRvvzUKNblmvvREEZcPiEjODIvDYAVdHtKURuJIbnKRvZYwejrbvyOIkKMylMhYWtTuTcrAfFpxCtnHtlhxYcXmfCGbZEGjmvEUHtXujXgHRinUcDyTHhatcRMfvDcgHXQVtbKWtOnummsrIuXCQhrjkrhaNJGgnIwJurjTZsKpketNvICdibERdgydfBzlTMLOSSCNwtvmTWQZIfWWDKifZSDgDtRPTXDEoojNqxzlSQvYuDFbeEhwEDksXwMKiGgzTYguJPeYtIDzLApNpJkEyevnSLBYBKYvISplQQeVTKFhLMDuJgCltzeMgRMXyuFPQdfniLWOZaWjQjCIsyNKCmnRutKYRtBTwfLaNGzisdxJdaTJwhsbpBSLzOuTyzyBInQlEimJyxAjsQiiaePbjUFQBifiPZADYSMBNlDGB,,5,,5,True,,,,\r -,,4,aP,UNe,snWNHEJWPahQwCpPNNpcRuyYhyqIUsbHXxGZGCFcsPmuGfgkXIIaOenQOXnRBgnISVXBPeVRjbDTvcfedlYqJeKoqAyCOzBubyRh,WVLcSewGgsYRtMfsWCyzQbEkIoiVzYZIsOjtRYUPxaJJjhcaKMzIJftnVVUwnAPGjkloNqmhlQZKdWJDPJesQeqgmULFvwiQPpgsNemuFCvNQtSLjKKxZuBkaupYoTVPBrxiRUvEDCwXtFJglPMfriImqUOeUebGObLLzXLncJqIIEPXjxzoXLUsiDGGfzxGaQpZNRkWGiCklKKQjVUEwcoWFoeqxocQnHYxyEDccPugTHOrVqLIKlyPyxLPeHqyoHzwwFYEMaGiCkoeGPrnjlkxMThQoAZvUhEREEnLkPAbpciKLkiOGcKjdkqlHzMKObUUQsfnCMEEkoAMjYLXlNQGqkURvDMLeoyyigbmHGRAjMglENMcYIGWhfEQiMIaXRPBHAxcSHBoZEYXywLZVWSKgBiqEXofsMIAqmaTVYaKHhHayPnSZuAxgjBPLqqIBKxNrRzWnAJYJElxJJEqtKwXTzViQhVoCYSkgnGzYvZJNSRTdkyO,,4,,4,True,,,,\r -,,3,nB,nFr,tcCqwfChXZpnZVLSwTNOBkNiYnnZdKwIrMIkuTssKrGRgiWYAdrPiSipjTupWRzFjKOrOAyCeOYXfzGVrSxDFuLaXUfUDOQSweYI,usvJKiKFYvRWdcgOYDbhkCDaBmSiPtkrfPxqfxQPkdzOtUSWoBPfTganEeiLoHRCaaSvhBSiEeoyfUZgguxtiyXWiPRjeHKaNPkCwUnOVjANRCnfgiWhLUywBuYiprPfpJMMUMsXSbQtnHMGmVzsPdYYpFyhpFOMeHaxuiyKAxIRlWEXebLeaqncdYzGsOTGXABSzfOIINjrftfGnZjIuzLOWPRPetSBUpdpfBhDNMdtQVQVlhaTiSakFwHHYUqkxiVXrUhXbvZBrHeqTKOeFDGxdFKkxkqXgKRUhoVGacapcExyjlcJZTVPAoupAUureKxhGRdloZHczeDsXtufJDaxmsKYtVNpDxLFXXmUIWYpjaAboIwOSavaWQyVUtgnHpAFdjTrfcoHASxDVfLgGiOzeLKdBQipsquZzSVuuCroemiXXLgjgkCDuAhIwXnCtDqhfkZRtTSMcnujfTpwzGdRtqlbzCJVJpgDgZYihadXoimzxROP,,3,,3,True,,,,\r -,,2,tJ,yPY,ECOtYrLdwGetDCcdxsePfNMGyDLJYVcCZKPmuMEGjdCgZvTfGPlcpTCCHHNkxxsyAXvRMdYOPvevgJRysqUQMjvfLQjwtPSQziMT,viQSVRHfPQBGxbxtlnvXFmoijesYgGXIVHcQvXNiMyjklSXNZkUCcAxRUpCNsWVYCoIptZYEmxRKCDXsXyGHAkmZMiqdPExJgTHhsfWkrCGjBfoCwbAdzGxpyfxobugTPvYjicsESiWTECNafbqnjJUMHBhXspthdpAOYNDehFMIbOGKpTjsBaNwpKAlQQfHxeHIGYGJbyEcOyxqVbwYewpUQOgXLVWvicwIvPlXRDSEOlZieTXDcsmcYmcutGzIEqcWPmswXdPvrhZxBzVCyvlFSFxZHrZfUBfBMlIsugfuQstCMTBkSCwCcUwNBrOYdeQOzxGZVRkbjMRYCciepXPxxyKcMjRCxxCWeKiHxzuPrphbVlFHyJhqXqTCnNsSFmhieClTCfZRuQwTeJIstkTTSOlYxGohmYipYFbxJKxDZJiNfetzTUEHAXAKeiuPeCDRHwiXJOLlXiBGdhHjtkkuTowHsfqmOJriOtNIfGPkLLjkQNUM,,2,,2,True,,,,\r -,,1,kD,yrO,OhbVrpoiVgRVIfLBcbfnoGMbJmTPSIAoCLrZaWZkSBvrjnWvgfygwwMqZcUDIhyfJsONxKmTecQoXsfogyrDOxkxwnQrSRPeMOkI,SJoRuXXdocZuzrenKTunPFzPDjqipVJIqVLBLzxoiGFfWdhjOkYRBMeyyMDHqJaRUhRIWrXPvhsBkDaUUqGWlGgOtOGMmjxWkIXHaMuFbhxZtpdpKffUFeWIXiiQEJkqHMBnIWUSmTtzQPxCHChpoevbLJoLoaeTOdoecveGprQFnIiUKKEpYEZAmggQBwBADUdRPPgdzUvZgpmmICiBlrDpeCZJgdPIafWpkAFEnzdkyayqYYDsBSUYJQTFjmsndLVIdVuddLEGHkdGfleMeRpzhKpLMcNfAQLKHuqnQTupqziQPtDuWeaDNKgeInGqiwepxskCITtNZPHaQJtQgiqhgVJjrsMnTvnROqGFqdfOBrcavXiOqkVCJTBJaheSjIcxLJjBictxYcwnRpQgwXJANVjpkZZlAblVvYAZQVZprkYSgycEomDwtYoobQmzvreXrwPGzRIvbhqlLqcgMBwUYuBMGhyKmqcTBaHZIRUVVQmxBeQv,,1,,1,True,,,,\r +,,10,bM,per,country-niMJnLwriUNBeJqqyPkzDfqRBSjIneOUrOSPmTxKQPGMkAjuYB,society-name-hIhRJAevOfxvXrjZoragyoygYhlHUtLZFgHwSKsJrMgdkuWylw,,10,,10,True,,,,\r +,,9,ax,aew,country-BwmmOmYevmQESSDMSvLKvNtAvkgDYcFoaOoSoDNnpEVXvZVynz,society-name-bJhjsCmOLWxcbmmsloqUlvJplmblqgbRiyPYhvntDpxZxQkHZN,,9,,9,True,,,,\r +,,8,TH,BXD,country-MRAYuCEViqlRLuZsmfAxlzyKobbJPNOofDmqSkdzNBMqjfxkKh,society-name-RFhoTnmYrsVFyiBnMnsURmAlAYjbsqpNCpxLRPDfaEiuSzRnTy,,8,,8,True,,,,\r +,,7,Zm,BvZ,country-YUczhnZPQHDRIjVLoecVjFPbENcpSPialOdtYgDNkLeghFMZNo,society-name-VRzuhRKIiuYnWcLlvehrjWAkSxJkCpLcigYONyXkbFfaalfTPL,,7,,7,True,,,,\r +,,6,oB,sYz,country-gMPtcUZKyfXdXvwBAhXoVPMaOXOydtHcuIKjuGSojdRUzCWMKG,society-name-jivfEKVdJzqfzGBXSiWiEJmFzPKmJNVHpperXBuRKfhQABxwmu,,6,,6,True,,,,\r +,,5,Pe,VRj,country-PNNpcRuyYhyqIUsbHXxGZGCFcsPmuGfgkXIIaOenQOXnRBgnIS,society-name-bDTvcfedlYqJeKoqAyCOzBubyRhIaPUNeWVLcSewGgsYRtMfsW,,5,,5,True,,,,\r +,,4,TS,Mcn,country-GiOzeLKdBQipsquZzSVuuCroemiXXLgjgkCDuAhIwXnCtDqhfk,society-name-ujfTpwzGdRtqlbzCJVJpgDgZYihadXoimzxROPfLLqebemPCZi,,4,,4,True,,,,\r +,,3,Os,xNo,country-RWmlNOzBGufzQgliEupaqypCWrvtLUKaqPxSpdQhDtkzRGTXtS,society-name-oiEjDVMxASJEWIZQnWpRWMYfHCHTxeKhdJGmKIjkuHChRnTLFf,,3,,3,True,,,,\r +,,2,Eb,NJu,country-VAlmiYIxHGrkqEZsVvZhDejWoRURzZJxfYzaqIhDxRVRqLyOxg,society-name-NoPeODStPAhicctFhgpIiyDxQVSIALVUjAPgFNArcSxnCCpxgR,,2,,2,True,,,,\r +,,1,gw,wMq,country-OhbVrpoiVgRVIfLBcbfnoGMbJmTPSIAoCLrZaWZkSBvrjnWvgf,society-name-ZcUDIhyfJsONxKmTecQoXsfogyrDOxkxwnQrSRPeMOkIUpkDyr,,1,,1,True,,,,\r ''' snapshots['TestProjectAPI::test_project_create 1'] = { @@ -386,8 +390,8 @@ 'name': 'Mock Project for Create API Test', 'operation_type': 1, 'operation_type_display': 'Emergency Operation', - 'primary_sector': 6, - 'primary_sector_display': 'Shelter', + 'primary_sector': 7, + 'primary_sector_display': 'NS Strengthening', 'programme_type': 2, 'programme_type_display': 'Domestic', 'project_country': 1, @@ -396,24 +400,24 @@ 'id': 1, 'independent': None, 'is_deprecated': False, - 'iso': 'IR', - 'iso3': 'Zmi', - 'name': 'HcqkdsmYSNrdDPaeyQrQQxgbsPyoyGTguFMIflmGDJTbcpHtvFzVkbwRwwOtpGrZdOqybJrojvzQifUyHRNORoApKjBtMvCIinPi', - 'record_type': 5, - 'record_type_display': 'Representative Office', + 'iso': 'oA', + 'iso3': 'MjY', + 'name': 'country-hQoAZvUhEREEnLkPAbpciKLkiOGcKjdkqlHzMKObUUQsfnCMEE', + 'record_type': 2, + 'record_type_display': 'Cluster', 'region': 1, - 'society_name': 'tSTHiBXjPKkueJIUhlujUbWuAAtCVOVrjXmgilbWNNrMKNoMooRbwfSXEiGMETPxlyFEikmocAWarAoVQmWnelCNFSuDpBzXcMVyUuzNVKMIHPTYcHgCDcpHIzVcJyHWOdmsCztXsDkBsNdSHjDPCfUGhlXLSIizAuCblDLTmDfquSPTYkTUhfhTCOxfHTyUYGNkyJycXkvKQjkjlXTdAttUXCsOlhimaNWqaDFFIZaMFpnLQEDACfMMapJrNOJndljdPwcjcQKMtvfdgAlkRsNQSSMKYJlDVLxcfXtuxyeWBJesEihSrvHAHnSnNdgKUOHfEUSMYTsBMuqHKNwiNKFHUOFFZlNoTsmahbDOYhVnZNAAcvwJZOnaOmSsqYettGJuXahRvvzUKNblmvvREEZcPiEjODIvDYAVdHtKURuJIbnKRvZYwejrbvyOIkKMylMhYWtTuTcrAfFpxCtnHtlhxYcXmfCGbZEGjmvEUHtXujXgHRin' + 'society_name': 'society-name-LXlNQGqkURvDMLeoyyigbmHGRAjMglENMcYIGWhfEQiMIaXRPB' }, 'project_districts': [ 1 ], 'project_districts_detail': [ { - 'code': 'gMWkIuuRZt', + 'code': 'DPCfUGhlXL', 'id': 1, 'is_deprecated': False, - 'is_enclave': False, - 'name': 'faAOrAlJDTKWimlysJFctLtFJVDobYajqtOOEhPQsAlFSPpbhWrFeMVxLEKBqOREShxGUKbqkLdjuDSiwkdrxAOwdssHOeGmXOlW' + 'is_enclave': True, + 'name': 'district-cMVyUuzNVKMIHPTYcHgCDcpHIzVcJyHWOdmsCztXsDkBsNdSHj' } ], 'reached_female': 0, @@ -428,13 +432,13 @@ 'id': 1, 'independent': None, 'is_deprecated': False, - 'iso': 'IR', - 'iso3': 'Zmi', - 'name': 'HcqkdsmYSNrdDPaeyQrQQxgbsPyoyGTguFMIflmGDJTbcpHtvFzVkbwRwwOtpGrZdOqybJrojvzQifUyHRNORoApKjBtMvCIinPi', - 'record_type': 5, - 'record_type_display': 'Representative Office', + 'iso': 'oA', + 'iso3': 'MjY', + 'name': 'country-hQoAZvUhEREEnLkPAbpciKLkiOGcKjdkqlHzMKObUUQsfnCMEE', + 'record_type': 2, + 'record_type_display': 'Cluster', 'region': 1, - 'society_name': 'tSTHiBXjPKkueJIUhlujUbWuAAtCVOVrjXmgilbWNNrMKNoMooRbwfSXEiGMETPxlyFEikmocAWarAoVQmWnelCNFSuDpBzXcMVyUuzNVKMIHPTYcHgCDcpHIzVcJyHWOdmsCztXsDkBsNdSHjDPCfUGhlXLSIizAuCblDLTmDfquSPTYkTUhfhTCOxfHTyUYGNkyJycXkvKQjkjlXTdAttUXCsOlhimaNWqaDFFIZaMFpnLQEDACfMMapJrNOJndljdPwcjcQKMtvfdgAlkRsNQSSMKYJlDVLxcfXtuxyeWBJesEihSrvHAHnSnNdgKUOHfEUSMYTsBMuqHKNwiNKFHUOFFZlNoTsmahbDOYhVnZNAAcvwJZOnaOmSsqYettGJuXahRvvzUKNblmvvREEZcPiEjODIvDYAVdHtKURuJIbnKRvZYwejrbvyOIkKMylMhYWtTuTcrAfFpxCtnHtlhxYcXmfCGbZEGjmvEUHtXujXgHRin' + 'society_name': 'society-name-LXlNQGqkURvDMLeoyyigbmHGRAjMglENMcYIGWhfEQiMIaXRPB' }, 'secondary_sectors': [ ], @@ -448,34 +452,58 @@ 'target_other': 0, 'target_total': 0, 'user': 2, - 'visibility': 'public' + 'visibility': 'public', + 'visibility_display': 'Public' +} + +snapshots['TestProjectAPI::test_project_delete 1'] = b'' + +snapshots['TestProjectAPI::test_project_list_zero 1'] = { + 'count': 0, + 'next': None, + 'previous': None, + 'results': [ + ] } +snapshots['TestProjectAPI::test_project_csv_api 1'] = '''actual_expenditure,budget_amount,dtype,dtype_detail.id,dtype_detail.name,dtype_detail.summary,end_date,event,event_detail.dtype,event_detail.id,event_detail.name,event_detail.parent_event,event_detail.slug,id,modified_at,name,operation_type,operation_type_display,primary_sector,primary_sector_display,programme_type,programme_type_display,project_country,project_country_detail.fdrs,project_country_detail.id,project_country_detail.independent,project_country_detail.is_deprecated,project_country_detail.iso,project_country_detail.iso3,project_country_detail.name,project_country_detail.record_type,project_country_detail.record_type_display,project_country_detail.region,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,reporting_ns,reporting_ns_detail.fdrs,reporting_ns_detail.id,reporting_ns_detail.independent,reporting_ns_detail.is_deprecated,reporting_ns_detail.iso,reporting_ns_detail.iso3,reporting_ns_detail.name,reporting_ns_detail.record_type,reporting_ns_detail.record_type_display,reporting_ns_detail.region,reporting_ns_detail.society_name,secondary_sectors,secondary_sectors_display,start_date,status,status_display,target_female,target_male,target_other,target_total,user,visibility,visibility_display\r +0,0,3,3,disaster-type-KOlJVJAVgXOKwRDSQBgkYlJzGvQkIMCwuJuxAWOBUuMpKInyXJ,VqxCCzaUcsMbHitatonubXSrJGJKKjgcDwjiqxLpoqZtfKzKnUeUuYElFSSKgMPtcUZKyfXdXvwBAhXoVPMaOXOydtHcuIKjuGSojdRUzCWMKGfoBsYzjivfEKVdJzqfzGBXSiWiEJmFzPKmJNVHpperXBuRKfhQABxwmuwMPbXtkwNZCNjCcomRxjWUfhVdpNjsavSZhtCEbvnVInnIHWqJENUjSSQbyLQHcqkdsmYSNrdDPaeyQrQQxgbsPyoyGTguFMIflmGDJTbcpHtvFzVkbwRwwOtpGrZdOqybJrojvzQifUyHRNORoApKjBtMvCIinPiLIRZmitSTHiBXjPKkueJIUhlujUbWuAAtCVOVrjXmgilbWNNrMKNoMooRbwfSXEiGMETPxlyFEikmocAWarAoVQmWnelCNFSuDpBzXcMVyUuzNVKMIHPTYcHgCDcpHIzVcJyHWOdmsCztXsDkBsNdSHjDPCfUGhlXLSIizAuCblDL,2008-01-01,2,1,2,event-JEdfryiAmPZHpOZIYbyYTwEIYFwKGuyrlbuMobZXrdZEHwXLok,1,gpqpriyvdwokzywllpluzvswlbtswkkjkmzfitlfcfdomobhea,1,2019-03-23T00:00:00.123456Z,project-TmDfquSPTYkTUhfhTCOxfHTyUYGNkyJycXkvKQjkjlXTdAttUX,0,Programme,4,Health,1,Multilateral,3,,3,,False,ZQ,ANX,country-AlXiXPUPAxyCyyfRQIiPwhlIzHiUoaWbtDRUIBIyopDwjrmUWh,1,Country,3,society-name-bpnegMcCMRTdpVczCoInWXdiGsoUKuKMXRuptjQHoAtrdJLVlO,"gRoEbNJuNo, nPOMbdYvpi","1, 2","False, True","True, True","district-uVAlmiYIxHGrkqEZsVvZhDejWoRURzZJxfYzaqIhDxRVRqLyOx, district-cctFhgpIiyDxQVSIALVUjAPgFNArcSxnCCpxgRxIPwdzrmhDfQ",0,0,0,0,1,2019-03-23T00:00:00.123456Z,1,2019-03-23T00:00:00.123456Z,regional-project-pnLQEDACfMMapJrNOJndljdPwcjcQKMtvfdgAlkRsNQSSMKYJl,2,,2,,False,dE,zBR,country-YMarjiIqZlhQbiawYYpLublqdiVAHhVeECXxGLgCGoNcUYQHtD,1,Country,2,society-name-gFTCefuMjeirNOLJTuyMHsDGMBgYShPPXJUnBCoAvDzAUguBuQ,"0, 1","WASH, PGI",2008-01-01,0,Planned,0,0,0,0,2,public,Public\r +0,0,6,6,disaster-type-hmscizAVvckQmEQrhAFJFZRTiuWWXzGUVyihgYbijwGaXRpdRv,BMVaBEssFfWBpNjUGlprXhqSpQBmETYZgSUGNlmLOOjohizcrmjBbNmfdyAHtSOoovBEdGBPdthrxrwTApudlcadQVunsErMgBlqFxvthgQaRJXivxVZxVXLHMxpPrnLyfgiOVMhcLPmmTCgeINvtUEWmIUjcimAJTqWJwxCOThBeEAHGYbkMrSiscKdYSmVzFRIGekCWGyJXyzMrnlakKnLSaYGDGTUHqtosTrJhkocIpscOjrirYdPpnIhaPwOMxufTJqUiANsudOawoUrlqbIQXXLgUVSyPqOOMJnCournLOZWzjCoUUBxjEfFlDllmKFUlPsbtklzRMmejeBpDPzgUHiUWZaMgyybhaWPcipXfrjOMaYaYgIVvTfmiEWKCktvEjpdISrOIhbcgIsgGAjaoboByjwPsoRyRThFkhogsweNvhxfcMjlBHvMlRBjQRtNswgrFQxqZTZeYajXPjujyCUYYEehKBUrjfuilXywuFBESAM,2008-01-01,4,4,4,event-vMTQDisUTyARPVxYEZkNnsSVfQEilmkMFgYAFtpnJdbwqwRklG,3,czevbhnohjofqvywxcxjrjsgmqgtdczdwhgynnygjcggkohnxk,2,2019-03-23T00:00:00.123456Z,project-YOviZPpyAJFIIFIIoyfLTAHKXSZVoSfpxanbxJEihdwxXisDjJ,0,Programme,3,Migration,1,Multilateral,5,,5,,False,MM,GdQ,country-sWKQjZKUCvShUEciRJhtbzNoCwfudMPmLHoYXrmbfICRQfGzmF,3,Region,5,society-name-xzjTBxyxaswwtCJfnUCVAZCskZUBUAiLMfjntEHveLWyfaAOrA,"gRoEbNJuNo, nPOMbdYvpi","1, 2","False, True","True, True","district-uVAlmiYIxHGrkqEZsVvZhDejWoRURzZJxfYzaqIhDxRVRqLyOx, district-cctFhgpIiyDxQVSIALVUjAPgFNArcSxnCCpxgRxIPwdzrmhDfQ",0,0,0,0,2,2019-03-23T00:00:00.123456Z,2,2019-03-23T00:00:00.123456Z,regional-project-SgQLeEMkbjxjfpeaKAjWlEViVHStEAUvCYPSashjdPcMWlGkaz,4,,4,,False,UO,FFZ,country-XtuxyeWBJesEihSrvHAHnSnNdgKUOHfEUSMYTsBMuqHKNwiNKF,5,Representative Office,4,society-name-lNoTsmahbDOYhVnZNAAcvwJZOnaOmSsqYettGJuXahRvvzUKNb,"0, 1","WASH, PGI",2008-01-01,2,Completed,0,0,0,0,3,public,Public\r +0,0,9,9,disaster-type-vuQziUHnpnTmKmUQYNxDJWYAxPtnzjEgIPCtXNAdmnvJkQyHBl,CbSnyKQlrVRKXjPzKYZmjAuDpViWFuNWNHVOcRgYefbadvfuwmVjntexNuLCEvTlstgZJkjkAhINAkJJOESrSphQjCgWciyEyEkXbLSxCLKlCbFQKwvfxeliNtRzjhYQmOusTYYfwMZFbNLAkxqmGrHbFukdPpStqCBvcrVWQDQfvJciNaVKbtymEyycSRrSyvxZGYBATviwUqJmFsrfCQfZQuGhbZiZWgpelxejKZpXfeaUaVZvNejLODOvYQgNhdTimVflfTfaBYRondTfyuOHmEmTFMTlEsURLdClGaflmqjIKmShSWemluWokzOLsMAGOsnBqwVpHaPRqsWkedeFwUdNWBfRWTCaVRfuLXxSRMReKqUuCwVZExFtWFuIVmoLkcSwADDuYzDDCjjVWyAbiYuyOjzxaBYQljLlngbzEjrvmbFzktJromFMUFBBkFQdwgeuTEMsjpHFZnAFatOkvOtRNBNhMiHsvUxZSixKEebCxApn,2008-01-01,6,7,6,event-ZgcxbNTjTVlifAhdCOTdugIrmPNVbvRuTkLUxHaQzAQQdemWGj,5,urflccrmmsgalovatrjwhvdksfkdfhfluflulobxkyanoxdfup,3,2019-03-23T00:00:00.123456Z,project-uSouOEYrJvKYvSmiuYOKoTLNppFKEbuGgyWjNufHFDMUreCyXm,1,Emergency Operation,2,CEA,1,Multilateral,7,,7,,False,Qg,FRE,country-GelPjwPUKvDTYirYWQtzePEyEMQlKTGXQHqiSuLLwLNzecbUko,1,Country,7,society-name-uWoXZUYpglUyWAedNqhcVeCWxMOblugSCyiOKJmmqFCRsomVkB,"gRoEbNJuNo, nPOMbdYvpi","1, 2","False, True","True, True","district-uVAlmiYIxHGrkqEZsVvZhDejWoRURzZJxfYzaqIhDxRVRqLyOx, district-cctFhgpIiyDxQVSIALVUjAPgFNArcSxnCCpxgRxIPwdzrmhDfQ",0,0,0,0,3,2019-03-23T00:00:00.123456Z,3,2019-03-23T00:00:00.123456Z,regional-project-FuMImZPmMMhsUdVmHZGspYyBSatqnjsbbPPWAfxDXjCOyJkMCW,6,,6,,False,kI,gen,country-qKGtToBkrfHyiVnzNdozlVJMeSDEuPPzykdZxPBmrggexMXvbp,3,Region,6,society-name-MaWtmJmOcprfKKcKYEcduftawWszGmuWzUwiSRgvAVGgGZXjbL,"0, 1","WASH, PGI",2008-01-01,0,Planned,0,0,0,0,4,public,Public\r +0,0,12,12,disaster-type-MYypcqvTOmcyMYouUIGjrNovotacSYOVgGeTzCEGsGeBwlrqqQ,xqqBdInIxSeEMNnCTYJgaPRPWZUQupPMhjIDGGQqIVyZNKLBLHGXjWSMdtuELSiEgrCRiqyocZfUMIVyTqlrinJPoLCkHppKYgjhPQJFbzkKnlHGdTKJnkjhchalolabeSHyDByhcbGOMQJZRETyhaJfsmxyYfsdUpJsuPpPfLGWdYErAYWXJPimutALuRYgcamUXbDWzlaxrvVLyCevbScBBQyBrfeaPzxtfTfTosaZCIugzNLrXNEcHNaxXJWmBAJmsJjyIUKKNzkyMDYaHoIBJJHOKhEHRQPFYNexbxZLBlxDeKDybSMpibfiBSWwDOHKJlyatfJaWKxieYDxvGuhDFDsTfQViFsyMlYegIRZPJjrfMTLziBrlkjMEvGLeCdZTqUUxrigJwRsxFcuBXGiaKjixFaTKbUdeOzoTvArdDknirElGkJNuUYradfFHPHlkSqTCpfiAeyIYXxaEedYwJPSWdfhKxaNlDZgQfulBfVcVxoY,2008-01-01,8,10,8,event-zUoZjZgfgTMDHDUYhIdMmpLfORmFnizPuocAcUefWNWGFWuygD,7,gaxjuhaalnbzblgvxahjimhapsyveosfqusmhuaanrnzxnywid,4,2019-03-23T00:00:00.123456Z,project-CdKimccDeZBLuRaaEqSPfGKYtJTuSsoZPjZKHDALJKnAwiMqrE,0,Programme,6,Shelter,0,Bilateral,9,,9,,False,tp,FFz,country-GtFUzdLtZqgjJoYopDjgSIGxAVzAKvtfpkNEQeXudBzBjAEbvx,1,Country,9,society-name-LnzBpspNZkvkMuLyfgffYVajIBFfYZSPjdaElcisxRRSwQKfck,"gRoEbNJuNo, nPOMbdYvpi","1, 2","False, True","True, True","district-uVAlmiYIxHGrkqEZsVvZhDejWoRURzZJxfYzaqIhDxRVRqLyOx, district-cctFhgpIiyDxQVSIALVUjAPgFNArcSxnCCpxgRxIPwdzrmhDfQ",0,0,0,0,4,2019-03-23T00:00:00.123456Z,4,2019-03-23T00:00:00.123456Z,regional-project-jwXJQNzoRleDsnYYUxCqHWpvjAHdzrIBcVBCmLJoTqtIGmJtlu,8,,8,,False,Hk,Tpf,country-mTMDskLiubhduJExjuUyJbOBPuzluNWcPsuKWKcGdUTTiFeeij,1,Country,8,society-name-WxwvfAvWeFzIdHAPYzSjJfnCkhWqopdPRJbdPSoEccoWojiGuu,"0, 1","WASH, PGI",2008-01-01,0,Planned,0,0,0,0,5,public,Public\r +0,0,15,15,disaster-type-TrePaaMvoGvOuEVrlfzUrpuXLMbZcLXoEIeqRBdtFPOAVgsoDG,HqrnDdzUyfIWCPwAqADiRyWozJZYexQtSfHxHVMKcdjCESkKhaXHtvcSDPJybspxAWBcvcoTpCrBLGpnbzEPCQnbzESYhJilVlAAEKPrXfNbXGCGPGBvnGWvRMZcyEWnKAntRkSGSNGWEzbVuZOubQOtKiihSDdqPJBWSWeIzRUCbAznldWezWkKRaEmZLLlXGNfRKIkFhJjASuXnXZoDfDVaIBtNqkzLskbnTSLIRQpfRXputROMSbhswXKNACbyMleNvICmaxqMHkroJGVXrQYpZdSjYSRVeDUIhAEGayOyPrQoRhvPHLWWdgyPqXLUQjPGfvamCXchEdMjAOtcCdnbGOIcHOeDkzjHkMAJlPXstHuWbQbDjHGQLvKlPPDOrfeAIaBLRhUMyhkZEzziaJcHibpNhDdOWZlAmRqrrnuZMyOPlPqvHRFaflaVVsZQQjtkQxnAMbLfjoDxpalJrKCzTdpNyPWCaiWspyuiWStcwwoSWBq,2008-01-01,10,13,10,event-VECVykLZzLetonziLMKqyOYBqvdNLKLYbSchdIMJvEoKbIoRTv,9,kgtfimaqhsskpsyrvgxhtnwqnudlxckjxxfvotkwwhihvhldlj,5,2019-03-23T00:00:00.123456Z,project-GWfSICYxXrRbpzSrGIjhwTKCFpHxrTzAjmioBcyzZDMXNHAsLe,1,Emergency Operation,5,DRR,0,Bilateral,11,,11,,False,iM,UEU,country-ptvWqsVotTqYeYtNhzKMLpWMpTqrLCsoKrAqbHWRQSJkjodLvG,4,Country Office,11,society-name-nKQIPXHLrgpkgaWKCidSlhEWcEutHwmsOTYAxvEZLiXicpactr,"gRoEbNJuNo, nPOMbdYvpi","1, 2","False, True","True, True","district-uVAlmiYIxHGrkqEZsVvZhDejWoRURzZJxfYzaqIhDxRVRqLyOx, district-cctFhgpIiyDxQVSIALVUjAPgFNArcSxnCCpxgRxIPwdzrmhDfQ",0,0,0,0,5,2019-03-23T00:00:00.123456Z,5,2019-03-23T00:00:00.123456Z,regional-project-ayAzeDKLAlmwyNLMQjLVMYUJpnuWJVEzJGDTFCNlxXBathpqHl,10,,10,,False,gM,Rbj,country-iIdvvdCCrTdzxCNvwfxzknKlUaMcIvXugcFOStUbQMgogfgDXG,4,Country Office,10,society-name-vZsTCRydRSlkObzTNxourSfRlafQilCuYYKwdakAWZSdfuhvnU,"0, 1","WASH, PGI",2008-01-01,0,Planned,0,0,0,0,6,public,Public\r +0,0,18,18,disaster-type-uApgAmgkMDxwClVWAgAMtMAnFJGefKnHSTLPLLdzHkSdhWnPaF,eBFwmYRSkhyoZSmAhZpeENHvrLcWctSMdpERkMwVsxHXvGovSApRMLJWhjErUnMOjjuXvgCZreMSVluJeOVqFAlgTlTmzZchSIzoKMqwqgnUXJquoguynXdMpaXZEMzHQVvXNcPLBSQtxYLIDiOrUcJVNMlSgDEOXmvPWfAzGeennNEmBCbESihEQoTsaTltiPkPkVrgSNHYUoZZdARplUpButagIgPYtsrksWJrjQQbkSrpZWxaSMtCAwSfhQVGBQevAraNZKsgtFwmNINTemDcutOitufRONdGlyeQXebPmuyuNrlVKLlcOlpEyTyBLQBMlXkKwooIyfKqfeOIYWmMRbNYoYYtirPOjsayBRlGVmrAmmZtRHIMopqnExgVHyBNqUcGBXZxZslspUJlyNiJvvbCrnvbKwkWJOHZNxMrEOapKBZMBsunuMgEzvcqDhZJHmacWLZLvriJGDnrsVUNPzQyHBBCLINLqDbASgDSPbBLdfqN,2008-01-01,12,16,12,event-aOAAIMdRrZWgFiIjaEAkmGUhhwYQkiojJjllJjsaIrEujHmwML,11,mtcarfcuwjrcmzhoxygthpwqbxumuxcjkxphliaybshosqxfjc,6,2019-03-23T00:00:00.123456Z,project-CffbWnZHqYTCgvzEwABUuaPveIUGBbRgyFQsqKURlnsSnxNOBK,0,Programme,5,DRR,2,Domestic,13,,13,,False,OO,CdQ,country-ZWfDIGjsXjyxvKtANJLbAjpiDUjoPEhCNGLbjkoERKdcTYWBur,5,Representative Office,13,society-name-JrZDCLuTqeOYCAFuumLHeIINRcCVnDGewLeuFMdJLtxGMWTOyk,"gRoEbNJuNo, nPOMbdYvpi","1, 2","False, True","True, True","district-uVAlmiYIxHGrkqEZsVvZhDejWoRURzZJxfYzaqIhDxRVRqLyOx, district-cctFhgpIiyDxQVSIALVUjAPgFNArcSxnCCpxgRxIPwdzrmhDfQ",0,0,0,0,6,2019-03-23T00:00:00.123456Z,6,2019-03-23T00:00:00.123456Z,regional-project-iTVqlYJBeESILkvZChtcivdRpIuTFBVlWytGYeOAWWpHPsKpWV,12,,12,,False,uj,OIE,country-pgumMHVmWMfjizabaestdPQSDzjNUVeYtVPQocsUKenthbnHZK,4,Country Office,12,society-name-icLNIBPuQytkVYQSisavNTPjdHlovobKFBBMZgNqJNziKXIcPx,"0, 1","WASH, PGI",2008-01-01,0,Planned,0,0,0,0,7,public,Public\r +0,0,21,21,disaster-type-ppdnCRlZPTWFeIAOPkstDwAmeZZgiOenISaFIlJFIWZdzAeuSt,wNGvGzyowBuTsfHbkOJRHlviekQHTIyBLcuNryLTMHWtlIGkSIsCcvjcpfQoRkNIJDfYUWknVkbnByHBsiYCVEIyiBISQXvlEjHDVybUpjaGECJorCfVaAlQIoorOOwWWOTxEpvBlmPiZCFPTXcdqvnvHwTLEndiXDoVOQikJwZCbtTkYqcWUjvvvsAHMUYSRoLYCDPcsggAEJIexYLAOYszPDoHzYvyMatrGQqVQBFVonlTlNeSksIMvwIDSCbaQBkpRNquLLRrkArcFAbOJMundfiTdopKGbShpUGFfWyjIopwBJNduJXecIRbhxnnDrZmuzDbiOPCFkGXDeuyxMBQNxDSLQswFvKvNKxxbvuPpSOyiKTOfChtGxseJoNwkSuiVQxjZdDQXHPGkXWezPugeNOTlftxFsTsujdZncYZQiEOyWNqDmbGUXJjtdmUxRplUfYkVssaVSlLmXBosPYYbKqflZTfJcxTQkwEKuLKdTbsEMqf,2008-01-01,14,19,14,event-iaXaDBeucsjduMJQyGZwQPAMCDetmRnSBbGcVWLcgcfsWWAUgd,13,unmjfghgjgimncrzzqhypjhhagetiuwfhrwamcwocqlyvzwjiw,7,2019-03-23T00:00:00.123456Z,project-iZPpjutAafJMfYhnZtVUoqZGTxEemnMXRNBSlDBIAflFpsihXh,0,Programme,0,WASH,0,Bilateral,15,,15,,False,AC,XeS,country-FpxRYwTHMAcFdDiiIInrXfnoZwgWmNaermdMDtkFOtNoBzRouE,5,Representative Office,15,society-name-rHbmTXQaQdDRUoZxXOBxJjybGlvlQApUEZLqTXZejGWHyBLgfZ,"gRoEbNJuNo, nPOMbdYvpi","1, 2","False, True","True, True","district-uVAlmiYIxHGrkqEZsVvZhDejWoRURzZJxfYzaqIhDxRVRqLyOx, district-cctFhgpIiyDxQVSIALVUjAPgFNArcSxnCCpxgRxIPwdzrmhDfQ",0,0,0,0,7,2019-03-23T00:00:00.123456Z,7,2019-03-23T00:00:00.123456Z,regional-project-NHMdJIPHTeLyRAtZxkmhKgRKLcGjeQnmuzJUSngCjoWBOzFdtT,14,,14,,False,nO,Mqz,country-wobUfbXfWjCJKyMvfZNPnaWsPGxjTFDwHyWEdnyuAjdmVBnqtR,3,Region,14,society-name-GXMyVVTpogIeRjmoxCRAfETVdCohCtrwDDBlRAiypzCIuScGNJ,"0, 1","WASH, PGI",2008-01-01,2,Completed,0,0,0,0,8,public,Public\r +0,0,24,24,disaster-type-REsbYYSvnyiufPQjnhevqgOehLbOibyaFgpVzPLndYcxileRtq,kPBYCPpVWxmJqQiuXBhhAgRuQWNKTNtrVjAYSfIrvunCWXuIjzHiUPNxdIgrNLQtclZmimwJxLowGdSnQVOvPkGHbvbZFucFTQGfLROCZnxqYYsiwlrTSEFFEqsXrKyqYLpctBsZddBayKIGiytIBiVQDxZxZnFDLoYJwPsPZybLgihbqbDkxqZwUmMBcfWBdKNojOVqDbCKjzixQYgTEsmhRzXdnixdPoVRSXLtpROMGHqrjDJKwjRpBfYFLqKAUqvZtMSVwTNwDUGhlCUmUgFTsRUQZjCUgHoijRrbknMnzQiEygDArTbXQrcrUyvQxgfkJyoGfhbwaiTZiITMkcEXPsROvLwkYHTiCXAFEYrlnNnuSqnWoODmUYiTCHnMAXVLlfwhcaiyaFCWkeqmOOqSHyKQYyYvnFexwEphbwlaJKJmeJDobQZKxdENnoDCogiNEmrfVtHvdXkRSDQxMOSbHjAITbaMdEjlbJPOEfkWhHLWrwlp,2008-01-01,16,22,16,event-CJGpYQYyZqpVfBFVHuVNGrqrcJJQKuVLnbmlOcDOxBaTvjBNNX,15,dhvxknpcimmqnzymobmkpwzwqapbcmplhzwrzydzlrdnkbhjom,8,2019-03-23T00:00:00.123456Z,project-MPSuKAXcipneuZNXNHUDwhDxCYNbmkmaJHIdYBaMseDvakYUrh,0,Programme,0,WASH,0,Bilateral,17,,17,,False,nT,kWJ,country-JdyVPZfMsMKXLhmzOYUxcwvhKgQVZLoKAICfGBYQFeEaIaPtNj,5,Representative Office,17,society-name-TYxbFSgMBfjLonieWmrKwkicKXZqcQdnEReEFxHJwyjTCqIayz,"gRoEbNJuNo, nPOMbdYvpi","1, 2","False, True","True, True","district-uVAlmiYIxHGrkqEZsVvZhDejWoRURzZJxfYzaqIhDxRVRqLyOx, district-cctFhgpIiyDxQVSIALVUjAPgFNArcSxnCCpxgRxIPwdzrmhDfQ",0,0,0,0,8,2019-03-23T00:00:00.123456Z,8,2019-03-23T00:00:00.123456Z,regional-project-tvcsNClpzANsRziClGBvgIhsXSictYoPJrWQucRSqzjgFyqQms,16,,16,,False,TP,Djo,country-faPnSJKfNhGYWEscubhpUnYkbWprZqLxBbFeqHEXzwdTFDwWTj,3,Region,16,society-name-eyWVnhzbmQFPGUefPQVXduXSWCbmWKNyXndBzDbawMMrzMzzRM,"0, 1","WASH, PGI",2008-01-01,1,Ongoing,0,0,0,0,9,public,Public\r +0,0,27,27,disaster-type-ElrkQlERPsUSLzBwTQiNtHmcwhDhLDjVvelPnqnWpuoBDxRCRE,FCnqUYiyZXvIEudnQeatTPLCMfqaEEeOROlGbYAfQKMcEqzzTAMWFQrEjYVfDhWksXoxyBGQZpYVdnjwWmyKxTjxuICUVyFnuUaEJWfVdQFlHSoPMtZDyrUAVRelRyfqNSOYMnQzQpgXKzlCvzStqoLWcLueOMvzznbdPzmyjThYdwReyqdCGDVZTPdtGgfnVPxWWmSUEVOQOpMAxkEOkWZMuLVIzCDESdvxtHLLTXcEflSLMyMWMgusTJlEadQiKpnXSgnizGKmEqAbkepBWIIsexFEfSiVMeHrlSOPxeULwYAWfEBQxvJMkjoSxxiSIuJFQbBmaYQjXjJXTlMoZpwjICHNFgxUmwZMPAtFkAHQtVFrArRxucDRjHpgWahJwURdHIdIEuzVtwWbVRvIhPauHagaJPJRAFMFZqqFBfLnCIZXUJBymyYOsyWvpootCCrVKAomEKjjYSBkGhNewalnFsnJOFpsudukhMsauOaqEiWAbNEP,2008-01-01,18,25,18,event-YvAfhJGSWjapIaRBRTULvGQAiQeJvmPQeTggPkGWfDFYMbZnOz,17,byzozpuntelgeppkaulgrvammrfndtlqqmrbofxnwosmqvgqmj,9,2019-03-23T00:00:00.123456Z,project-KBkMerwLFCpAybKIWVuLhMJfCWtFUoyBxnNCPHHwHCZtGVMRRw,1,Emergency Operation,5,DRR,2,Domestic,19,,19,,False,uk,JsA,country-gvmGzqWkBCoXbkkcNKtfERZvnPbsRaxYmeMHrXedQvbCuYuaHq,5,Representative Office,19,society-name-FCdoYFGqBCNFdUaJPUobPCzrQscvGouuTafFkCkDPMCpUiJlKb,"gRoEbNJuNo, nPOMbdYvpi","1, 2","False, True","True, True","district-uVAlmiYIxHGrkqEZsVvZhDejWoRURzZJxfYzaqIhDxRVRqLyOx, district-cctFhgpIiyDxQVSIALVUjAPgFNArcSxnCCpxgRxIPwdzrmhDfQ",0,0,0,0,9,2019-03-23T00:00:00.123456Z,9,2019-03-23T00:00:00.123456Z,regional-project-lvEqEEErpCOkfjoGrGDCxyeYNfJWKHEvxFLQIoiUlMcOXbduLa,18,,18,,False,nh,BVr,country-qcCJRJRSAKGVSxIuCrNeWfdzPZBDPjBsfGCNpPLCINunDEdekr,5,Representative Office,18,society-name-wRQMHjqpCIarCascEOLmyweZGCxzYLlBSLiWdXXoQUkEnvXFhj,"0, 1","WASH, PGI",2008-01-01,0,Planned,0,0,0,0,10,public,Public\r +0,0,30,30,disaster-type-yMvPPWAluOcRLyNteinukJHINLRYaRJGWWHyWbHefaDgsMVlnT,zbpXAGbGPvJQGsqYXrnZFiXhmlBYTTFFAnJYoXeTLeRGdZtoGtSpcXLEKFvXyGTYqlhJhJWceZHVErDkMfTSoghkywNSCtyandiRngieFHhCYWbtlTpiFuHIJffIuNZkbAnbqhywiDkzfJKgaKwogcbeDMQlWueozOkjmIPbenQCclbKPJfMtaeWryNyfTpzcDFjFkcOVsxdSTKJaBVnSRwopnxbhzTlAiuectKryhFpcxQeZUvgnoQibLzCmdLYjsaEtfOmvKORAAvppKdoYyoQHxErmoMgLuGbSabYJtgzjRyFxcfTtBHpPhrzxaYboKqXOxxGTRUTsyVsPkdgGgWPMbinkagywgMHJMazVbMhFXwcDvhVLkyDEOwZbrzgzPkQjROGOsmUMRBwBIVOJWOFYkajaqJFfboyYRvosFyWsfqsYjUTVEhRLCsvnesxLxwaJddjONbBULwtEmuBqiZCSiLqnAOfcYNbKHkqudPHhqTBQtCc,2008-01-01,20,28,20,event-gKeiMXZrpYSpDdlBxCHgsNzoZwubfLnxneQfbhUuGtxzCofoEd,19,scusteqsdrkmfcxabzfoalgtscndnpmezoqcfagqskkakezjnk,10,2019-03-23T00:00:00.123456Z,project-jmAaCshFdYBaklxkvumQQfmqVfCAllIbKwteFxrRcgypCNcwXJ,0,Programme,8,Education,1,Multilateral,21,,21,,False,Xu,Psg,country-BsiVeYfBGqzdoHZMZwgOSvNjprSBzujeWFsBqumWogBWrLYuaB,1,Country,21,society-name-gSnEPgoPRsPBVYpOgWRaFIMRcOEIBKRVuCVydhJZXHoargSRuO,"gRoEbNJuNo, nPOMbdYvpi","1, 2","False, True","True, True","district-uVAlmiYIxHGrkqEZsVvZhDejWoRURzZJxfYzaqIhDxRVRqLyOx, district-cctFhgpIiyDxQVSIALVUjAPgFNArcSxnCCpxgRxIPwdzrmhDfQ",0,0,0,0,10,2019-03-23T00:00:00.123456Z,10,2019-03-23T00:00:00.123456Z,regional-project-BgiZdYysyrUAEyqDJwykvdJqwdVRePtpYKLKjwDaLLkGBhajHw,20,,20,,False,Gl,UTh,country-oyuJxscuUKeKortlsAiQVEgimNopdXWAvpmxYmTxNEuLQIbKzZ,2,Cluster,20,society-name-MzaHFJFWOuOEGPJjXSYEmDBpdLEDoLPGUpByAbKFQKFGZuvaYW,"0, 1","WASH, PGI",2008-01-01,0,Planned,0,0,0,0,11,public,Public\r +''' + snapshots['TestProjectAPI::test_project_update 1'] = { 'actual_expenditure': 0, 'budget_amount': 0, 'dtype': 3, 'dtype_detail': { 'id': 3, - 'name': 'VLHCAklbiUpQqVSVfnkzggeEJdbXzHWfgqNjfPytopVsCOiiHkbcQwuEDIrJCiSIlLMDOVOKBHOOItwEIoZfCtxAqjtaaHWiwsEI', - 'summary': 'aSFWEtaXBZsMoYaJxmAJBzpkTVPyyoqfBOpHWZNZSRrsPVIZrAmelishODNCrSNFmubjdIblgsriTCUaofjaFnvAtYZFxDSYcvfWjdrXzeIElmqyahXTpyXCpVcmDVXgHQnEyRtukOUcVJHhqEOtmxdQnhpOBuakYrLhzYpacLYSESMjxXfpkFfRNvWOddwPjSIYgiFouJYPWwZCUmbSywUiqcFTCJsISFmKlIwuUDrMJkeHjCsqIxDaXOGyUlbNxXNpuUeQIymHRFXJjNsuAPuhgHQecilcmgFmgcKPyQFHNSLqdxoMTeanPFfDZOdxJVAxYTdNrHcUetenHggUoIymmHQpKOlJVJAVgXOKwRDSQBgkYlJzGvQkIMCwuJuxAWOBUuMpKInyXJVqxCCzaUcsMbHitatonubXSrJGJKKjgcDwjiqxLpoqZtfKzKnUeUuYElFSSKgMPtcUZKyfXdXvwBAhXoVPMaOXOydtHcuIKjuGSojd' + 'name': 'disaster-type-CDQLGiFaHVdJBLEGXlSLlUigyQMMuGyAMSWprzvsCZiiAMSVGt', + 'summary': 'SJuTVJOnmnNTsRwRiTPlGISOuThWwJELKQTARVIsBZaHgbyjdQdmrWYksRqjdSYsnWIcwCgNRVJoVPJypGYYZSsSQdyyAYRuJdaVqmNXCoOTTPxWLIVMmXUmsClRellVGhycBrJqikLqavDTjcjuMdXONQtFYKJweYTuHolHeYGkAIIzfwonQvvxsnWNHEJWPahQwCpPNNpcRuyYhyqIUsbHXxGZGCFcsPmuGfgkXIIaOenQOXnRBgnISVXBPeVRjbDTvcfedlYqJeKoqAyCOzBubyRhIaPUNeWVLcSewGgsYRtMfsWCyzQbEkIoiVzYZIsOjtRYUPxaJJjhcaKMzIJftnVVUwnAPGjkloNqmhlQZKdWJDPJesQeqgmULFvwiQPpgsNemuFCvNQtSLjKKxZuBkaupYoTVPBrxiRUvEDCwXtFJglPMfriImqUOeUebGObLLzXLncJqIIEPXjxzoXLUsiDGGfzxGaQpZNRkWGiCklKKQjV' }, 'end_date': '2008-01-01', 'event': 2, 'event_detail': { 'dtype': 1, 'id': 2, - 'name': 'WptcCqwfChXZpnZVLSwTNOBkNiYnnZdKwIrMIkuTssKrGRgiWYAdrPiSipjTupWRzFjKOrOAyCeOYXfzGVrSxDFuLaXUfUDOQSwe', + 'name': 'event-KRWmlNOzBGufzQgliEupaqypCWrvtLUKaqPxSpdQhDtkzRGTXt', 'parent_event': 1, - 'slug': 'yiznbnfrusvjkikfyvrwdcgoydbhkcdabmsiptkrfpxqfxqpkd' + 'slug': 'shosxnooiejdvmxasjewizqnwprwmyfhchtxekhdjgmkijkuhc' }, 'id': 1, 'modified_at': '2019-03-23T00:00:00.123456Z', 'name': 'Mock Project for Update API Test', - 'operation_type': 0, - 'operation_type_display': 'Programme', - 'primary_sector': 1, - 'primary_sector_display': 'PGI', + 'operation_type': 1, + 'operation_type_display': 'Emergency Operation', + 'primary_sector': 7, + 'primary_sector_display': 'NS Strengthening', 'programme_type': 1, 'programme_type_display': 'Multilateral', 'project_country': 3, @@ -484,24 +512,24 @@ 'id': 3, 'independent': None, 'is_deprecated': False, - 'iso': 'Dy', - 'iso3': 'THh', - 'name': 'vvREEZcPiEjODIvDYAVdHtKURuJIbnKRvZYwejrbvyOIkKMylMhYWtTuTcrAfFpxCtnHtlhxYcXmfCGbZEGjmvEUHtXujXgHRinU', - 'record_type': 1, - 'record_type_display': 'Country', + 'iso': 'HA', + 'iso3': 'xcS', + 'name': 'country-jYLXlNQGqkURvDMLeoyyigbmHGRAjMglENMcYIGWhfEQiMIaXR', + 'record_type': 4, + 'record_type_display': 'Country Office', 'region': 3, - 'society_name': 'atcRMfvDcgHXQVtbKWtOnummsrIuXCQhrjkrhaNJGgnIwJurjTZsKpketNvICdibERdgydfBzlTMLOSSCNwtvmTWQZIfWWDKifZSDgDtRPTXDEoojNqxzlSQvYuDFbeEhwEDksXwMKiGgzTYguJPeYtIDzLApNpJkEyevnSLBYBKYvISplQQeVTKFhLMDuJgCltzeMgRMXyuFPQdfniLWOZaWjQjCIsyNKCmnRutKYRtBTwfLaNGzisdxJdaTJwhsbpBSLzOuTyzyBInQlEimJyxAjsQiiaePbjUFQBifiPZADYSMBNlDGBJCywolBMaKFUpTGrAIKxccKETxhLESfjUUHWXrDHfHNfpEOVQQeROIZLtNdvIXaEDGEKUvAwZsskcSMVtUYKqdOELkKdQsZVNbsFfiGeYrqiNrrqaVhMlLVjQCxZlqYSpFlZHcvfjMjFWAXypQCUOknKUwdPqWhdkDzEtEVWIoyRTyEqjHBasZCyRuHRc' + 'society_name': 'society-name-HBoZEYXywLZVWSKgBiqEXofsMIAqmaTVYaKHhHayPnSZuAxgjB' }, 'project_districts': [ 1 ], 'project_districts_detail': [ { - 'code': 'FnQVDrOIZN', + 'code': 'KQjkjlXTdA', 'id': 1, - 'is_deprecated': True, + 'is_deprecated': False, 'is_enclave': False, - 'name': 'IucDQBKGArbSELbuyKyuKgZFgSRnvFGZWQvkNtxBmFOYeInsqdtKzZoNVfTLgLvreKZHEBnwYePtGZtBQIumAzqNGDQWJlbOTHlK' + 'name': 'district-lXLSIizAuCblDLTmDfquSPTYkTUhfhTCOxfHTyUYGNkyJycXkv' } ], 'reached_female': 0, @@ -513,7 +541,7 @@ 'created_at': '2019-03-23T00:00:00.123456Z', 'id': 1, 'modified_at': '2019-03-23T00:00:00.123456Z', - 'name': 'uxyeWBJesEihSrvHAHnSnNdgKUOHfEUSMYTsBMuqHKNwiNKFHUOFFZlNoTsmahbDOYhVnZNAAcvwJZOnaOmSsqYettGJuXahRvvz' + 'name': 'regional-project-xMThQoAZvUhEREEnLkPAbpciKLkiOGcKjdkqlHzMKObUUQsfnC' }, 'reporting_ns': 3, 'reporting_ns_detail': { @@ -521,35 +549,26 @@ 'id': 3, 'independent': None, 'is_deprecated': False, - 'iso': 'Dy', - 'iso3': 'THh', - 'name': 'vvREEZcPiEjODIvDYAVdHtKURuJIbnKRvZYwejrbvyOIkKMylMhYWtTuTcrAfFpxCtnHtlhxYcXmfCGbZEGjmvEUHtXujXgHRinU', - 'record_type': 1, - 'record_type_display': 'Country', + 'iso': 'HA', + 'iso3': 'xcS', + 'name': 'country-jYLXlNQGqkURvDMLeoyyigbmHGRAjMglENMcYIGWhfEQiMIaXR', + 'record_type': 4, + 'record_type_display': 'Country Office', 'region': 3, - 'society_name': 'atcRMfvDcgHXQVtbKWtOnummsrIuXCQhrjkrhaNJGgnIwJurjTZsKpketNvICdibERdgydfBzlTMLOSSCNwtvmTWQZIfWWDKifZSDgDtRPTXDEoojNqxzlSQvYuDFbeEhwEDksXwMKiGgzTYguJPeYtIDzLApNpJkEyevnSLBYBKYvISplQQeVTKFhLMDuJgCltzeMgRMXyuFPQdfniLWOZaWjQjCIsyNKCmnRutKYRtBTwfLaNGzisdxJdaTJwhsbpBSLzOuTyzyBInQlEimJyxAjsQiiaePbjUFQBifiPZADYSMBNlDGBJCywolBMaKFUpTGrAIKxccKETxhLESfjUUHWXrDHfHNfpEOVQQeROIZLtNdvIXaEDGEKUvAwZsskcSMVtUYKqdOELkKdQsZVNbsFfiGeYrqiNrrqaVhMlLVjQCxZlqYSpFlZHcvfjMjFWAXypQCUOknKUwdPqWhdkDzEtEVWIoyRTyEqjHBasZCyRuHRc' + 'society_name': 'society-name-HBoZEYXywLZVWSKgBiqEXofsMIAqmaTVYaKHhHayPnSZuAxgjB' }, 'secondary_sectors': [ ], 'secondary_sectors_display': [ ], 'start_date': '2008-01-01', - 'status': 0, - 'status_display': 'Planned', + 'status': 1, + 'status_display': 'Ongoing', 'target_female': 0, 'target_male': 0, 'target_other': 0, 'target_total': 0, 'user': 2, - 'visibility': 'public' -} - -snapshots['TestProjectAPI::test_project_delete 1'] = b'' - -snapshots['TestProjectAPI::test_project_list_zero 1'] = { - 'count': 0, - 'next': None, - 'previous': None, - 'results': [ - ] + 'visibility': 'public', + 'visibility_display': 'Public' } diff --git a/deployments/tests.py b/deployments/tests.py index 08740a64a..fc3f675ac 100644 --- a/deployments/tests.py +++ b/deployments/tests.py @@ -10,7 +10,7 @@ from deployments.factories.project import ProjectFactory from api.factories import country, district -from deployments.models import Project, VisibilityCharChoices +from deployments.models import Project, VisibilityCharChoices, SectorTags from .factories.personnel import PersonnelFactory @@ -126,6 +126,7 @@ def test_project_update(self): new_project["name"] = new_project_name new_project["reporting_ns"] = new_country.id new_project["project_country"] = new_country.id + new_project["event"] = new_project["event_id"] new_project["project_districts"] = [new_district.id] # submit update request @@ -164,3 +165,19 @@ def test_personnel_csv_api(self): resp = self.client.get(url) self.assert_200(resp) self.assertMatchSnapshot(resp.content.decode('utf-8')) + + def test_project_csv_api(self): + _country = country.CountryFactory() + district1 = district.DistrictFactory(country=_country) + district2 = district.DistrictFactory(country=_country) + ProjectFactory.create_batch( + 10, + project_districts=[district1, district2], + secondary_sectors=[SectorTags.WASH, SectorTags.PGI], + visibility=VisibilityCharChoices.PUBLIC + ) + + url = '/api/v2/project/?format=csv' + resp = self.client.get(url) + self.assert_200(resp) + self.assertMatchSnapshot(resp.content.decode('utf-8')) diff --git a/main/settings.py b/main/settings.py index 08a753f97..526c88119 100644 --- a/main/settings.py +++ b/main/settings.py @@ -147,7 +147,6 @@ 'django.contrib.messages.middleware.MessageMiddleware', 'django.middleware.clickjacking.XFrameOptionsMiddleware', 'middlewares.middlewares.RequestMiddleware', - 'opencensus.ext.django.middleware.OpencensusMiddleware', ] AUTHENTICATION_BACKENDS = ( @@ -291,14 +290,16 @@ APPLICATION_INSIGHTS_INSTRUMENTATION_KEY = os.environ.get('APPLICATION_INSIGHTS_INSTRUMENTATION_KEY') -OPENCENSUS = { - 'TRACE': { - 'SAMPLER': 'opencensus.trace.samplers.ProbabilitySampler(rate=1)', - 'EXPORTER': '''opencensus.ext.azure.trace_exporter.AzureExporter( - connection_string="InstrumentationKey={}" - )'''.format(APPLICATION_INSIGHTS_INSTRUMENTATION_KEY) +if APPLICATION_INSIGHTS_INSTRUMENTATION_KEY: + MIDDLEWARE.append('opencensus.ext.django.middleware.OpencensusMiddleware') + OPENCENSUS = { + 'TRACE': { + 'SAMPLER': 'opencensus.trace.samplers.ProbabilitySampler(rate=1)', + 'EXPORTER': '''opencensus.ext.azure.trace_exporter.AzureExporter( + connection_string="InstrumentationKey={}" + )'''.format(APPLICATION_INSIGHTS_INSTRUMENTATION_KEY) + } } -} LOGGING = { 'version': 1,