Skip to content

Commit

Permalink
[#2262] Updated the ?depth=X project resources for /v1/api/
Browse files Browse the repository at this point in the history
  • Loading branch information
KasperBrandt committed Jul 11, 2016
1 parent e4afeff commit 644b7d9
Show file tree
Hide file tree
Showing 15 changed files with 209 additions and 17 deletions.
1 change: 1 addition & 0 deletions akvo/rest/renderers.py
Original file line number Diff line number Diff line change
Expand Up @@ -25,6 +25,7 @@ def _rename_fields(results):
'primary_location': '/api/v1/project_location/{0}/',
'primary_organisation': '/api/v1/organisation/{0}/',
'partners': '/api/v1/organisation/{0}/',
'sync_owner': '/api/v1/organisation/{0}/',
'keywords': '/api/v1/keyword/{0}/',
'categories': '/api/v1/category/{0}/',
}
Expand Down
29 changes: 22 additions & 7 deletions akvo/rest/serializers/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -54,19 +54,27 @@
from .organisation_location import (OrganisationLocationSerializer,
MapOrganisationLocationSerializer)
from .partner_site import PartnerSiteSerializer
from .partnership import PartnershipSerializer, PartnershipBasicSerializer, PartnershipRawSerializer
from .planned_disbursement import PlannedDisbursementSerializer, PlannedDisbursementRawSerializer
from .partnership import (PartnershipSerializer,
PartnershipBasicSerializer,
PartnershipRawSerializer,
PartnershipRawDeepSerializer)
from .planned_disbursement import (PlannedDisbursementSerializer,
PlannedDisbursementRawDeepSerializer,
PlannedDisbursementRawSerializer)
from .policy_marker import PolicyMarkerSerializer, PolicyMarkerRawSerializer
from .project import (ProjectSerializer, ProjectExtraSerializer, ProjectIatiExportSerializer,
ProjectUpSerializer)
from .project import (ProjectSerializer, ProjectExtraSerializer, ProjectExtraDeepSerializer,
ProjectIatiExportSerializer, ProjectUpSerializer)
from .project_comment import ProjectCommentSerializer
from .project_condition import ProjectConditionSerializer, ProjectConditionRawSerializer
from .project_contact import ProjectContactSerializer, ProjectContactRawSerializer
from .project_contact import (ProjectContactSerializer,
ProjectContactRawSerializer,
ProjectContactRawDeepSerializer)
from .project_document import (ProjectDocumentSerializer, ProjectDocumentCategorySerializer,
ProjectDocumentRawSerializer)
from .project_location import (ProjectLocationSerializer, AdministrativeLocationSerializer,
MapProjectLocationSerializer, ProjectLocationRawSerializer)
from .project_update import (ProjectUpdateSerializer,
ProjectUpdateDeepSerializer,
ProjectUpdateExtraSerializer)
from .project_update_location import (ProjectUpdateLocationSerializer,
ProjectUpdateLocationNestedSerializer,
Expand All @@ -78,12 +86,12 @@
from .result import ResultSerializer, ResultsFrameworkSerializer, ResultRawSerializer
from .sector import SectorSerializer, SectorRawSerializer
from .transaction import (TransactionSerializer, TransactionSectorSerializer,
TransactionRawSerializer)
TransactionRawSerializer, TransactionRawDeepSerializer)
from .typeahead import (TypeaheadCountrySerializer,
TypeaheadOrganisationSerializer,
TypeaheadProjectSerializer,
TypeaheadProjectUpdateSerializer)
from .user import UserSerializer, UserDetailsSerializer, UserPasswordSerializer
from .user import UserSerializer, UserDetailsSerializer, UserPasswordSerializer, UserRawSerializer

__all__ = [
'AdministrativeLocationSerializer',
Expand Down Expand Up @@ -146,21 +154,25 @@
'PartnershipSerializer',
'PartnershipRawSerializer',
'PartnershipBasicSerializer',
'PartnershipRawDeepSerializer',
'PartnerSiteSerializer',
'PlannedDisbursementSerializer',
'PlannedDisbursementRawSerializer',
'PlannedDisbursementRawDeepSerializer',
'PolicyMarkerSerializer',
'PolicyMarkerRawSerializer',
'ProjectCommentSerializer',
'ProjectConditionSerializer',
'ProjectConditionRawSerializer',
'ProjectContactSerializer',
'ProjectContactRawSerializer',
'ProjectContactRawDeepSerializer',
'ProjectCustomFieldSerializer',
'ProjectDocumentSerializer',
'ProjectDocumentRawSerializer',
'ProjectDocumentCategorySerializer',
'ProjectExtraSerializer',
'ProjectExtraDeepSerializer',
'ProjectIatiExportSerializer',
'ProjectLocationSerializer',
'ProjectLocationRawSerializer',
Expand All @@ -169,6 +181,7 @@
'ProjectUpdateLocationSerializer',
'ProjectUpdateLocationNestedSerializer',
'ProjectUpdateSerializer',
'ProjectUpdateDeepSerializer',
'ProjectUpSerializer',
'PublishingStatusSerializer',
'RecipientCountrySerializer',
Expand All @@ -185,11 +198,13 @@
'TransactionSerializer',
'TransactionRawSerializer',
'TransactionSectorSerializer',
'TransactionRawDeepSerializer',
'TypeaheadCountrySerializer',
'TypeaheadOrganisationSerializer',
'TypeaheadProjectSerializer',
'TypeaheadProjectUpdateSerializer',
'UserDetailsSerializer',
'UserPasswordSerializer',
'UserSerializer',
'UserRawSerializer',
]
6 changes: 6 additions & 0 deletions akvo/rest/serializers/budget_item.py
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@
# For additional details on the GNU license please see < http://www.gnu.org/licenses/agpl.html >.


from .budget_item_label import BudgetItemLabelSerializer
from akvo.rsr.models import BudgetItem, CountryBudgetItem

from .rsr_serializer import BaseRSRSerializer
Expand All @@ -18,6 +19,11 @@ class Meta:
model = BudgetItem


class BudgetItemRawDeepSerializer(BudgetItemRawSerializer):

label = BudgetItemLabelSerializer(source='label')


class BudgetItemSerializer(BudgetItemRawSerializer):

label_label = serializers.Field(source='get_label')
Expand Down
4 changes: 4 additions & 0 deletions akvo/rest/serializers/partnership.py
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,10 @@ class Meta:
model = Partnership


class PartnershipRawDeepSerializer(PartnershipRawSerializer):
organisation = OrganisationBasicSerializer(source='organisation')


class PartnershipSerializer(PartnershipRawSerializer):

organisation_show_link = serializers.Field(source='organisation_show_link')
Expand Down
7 changes: 7 additions & 0 deletions akvo/rest/serializers/planned_disbursement.py
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,7 @@
from akvo.rsr.models import PlannedDisbursement

from .rsr_serializer import BaseRSRSerializer
from .organisation import OrganisationBasicSerializer

from rest_framework import serializers

Expand All @@ -18,6 +19,12 @@ class Meta:
model = PlannedDisbursement


class PlannedDisbursementRawDeepSerializer(PlannedDisbursementRawSerializer):

provider_organisation = OrganisationBasicSerializer(source='provider_organisation')
receiver_organisation = OrganisationBasicSerializer(source='receiver_organisation')


class PlannedDisbursementSerializer(PlannedDisbursementRawSerializer):

provider_organisation_show_link = serializers.Field(source='provider_organisation_show_link')
Expand Down
55 changes: 49 additions & 6 deletions akvo/rest/serializers/project.py
Original file line number Diff line number Diff line change
Expand Up @@ -10,24 +10,25 @@

from ..fields import Base64ImageField

from .budget_item import BudgetItemRawSerializer
from .budget_item import BudgetItemRawSerializer, BudgetItemRawDeepSerializer
from .legacy_data import LegacyDataSerializer
from .link import LinkSerializer
from .partnership import PartnershipRawSerializer
from .planned_disbursement import PlannedDisbursementRawSerializer
from .partnership import PartnershipRawSerializer, PartnershipRawDeepSerializer
from .planned_disbursement import (PlannedDisbursementRawSerializer,
PlannedDisbursementRawDeepSerializer)
from .policy_marker import PolicyMarkerRawSerializer
from .project_comment import ProjectCommentSerializer
from .project_document import ProjectDocumentRawSerializer
from .project_location import ProjectLocationExtraSerializer, ProjectLocationSerializer
from .project_condition import ProjectConditionRawSerializer
from .project_contact import ProjectContactRawSerializer
from .project_update import ProjectUpdateSerializer
from .project_contact import ProjectContactRawSerializer, ProjectContactRawDeepSerializer
from .project_update import ProjectUpdateSerializer, ProjectUpdateDeepSerializer
from .recipient_country import RecipientCountryRawSerializer
from .region import RecipientRegionRawSerializer
from .related_project import RelatedProjectRawSerializer
from .result import ResultRawSerializer
from .sector import SectorRawSerializer
from .transaction import TransactionRawSerializer
from .transaction import TransactionRawSerializer, TransactionRawDeepSerializer
from .rsr_serializer import BaseRSRSerializer


Expand Down Expand Up @@ -105,6 +106,48 @@ class Meta(ProjectSerializer.Meta):
pass


class ProjectExtraDeepSerializer(ProjectSerializer):

budget_items = BudgetItemRawDeepSerializer(source='budget_items', many=True, required=False,
allow_add_remove=True)
legacy_data = LegacyDataSerializer(source='legacy_data', many=True, required=False,
allow_add_remove=True)
links = LinkSerializer(source='links', many=True, required=False, allow_add_remove=True)
locations = ProjectLocationExtraSerializer(source='locations', many=True, required=False,
allow_add_remove=True)
planned_disbursements = PlannedDisbursementRawDeepSerializer(
source='planned_disbursements', many=True, required=False, allow_add_remove=True
)
policy_markers = PolicyMarkerRawSerializer(source='policy_markers', many=True, required=False,
allow_add_remove=True)
documents = ProjectDocumentRawSerializer(source='documents', many=True, required=False,
allow_add_remove=True)
comments = ProjectCommentSerializer(source='comments', many=True, required=False,
allow_add_remove=True)
conditions = ProjectConditionRawSerializer(source='conditions', many=True, required=False,
allow_add_remove=True)
contacts = ProjectContactRawDeepSerializer(source='contacts', many=True, required=False,
allow_add_remove=True)
project_updates = ProjectUpdateDeepSerializer(source='project_updates', many=True,
required=False, allow_add_remove=True)
recipient_countries = RecipientCountryRawSerializer(source='recipient_countries', many=True,
required=False, allow_add_remove=True)
recipient_regions = RecipientRegionRawSerializer(source='recipient_regions', many=True,
required=False, allow_add_remove=True)
related_projects = RelatedProjectRawSerializer(source='related_projects', many=True,
required=False, allow_add_remove=True)
results = ResultRawSerializer(source='results', many=True, required=False,
allow_add_remove=True)
sectors = SectorRawSerializer(source='sectors', many=True, required=False,
allow_add_remove=True)
transactions = TransactionRawDeepSerializer(source='transactions', many=True, required=False,
allow_add_remove=True)
partnerships = PartnershipRawDeepSerializer(source='partnerships', many=True)

class Meta(ProjectSerializer.Meta):
pass


class ProjectUpSerializer(ProjectSerializer):
""" Custom endpoint for RSR Up
"""
Expand Down
6 changes: 6 additions & 0 deletions akvo/rest/serializers/project_contact.py
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@

from akvo.rsr.models import ProjectContact

from .country import CountrySerializer
from .rsr_serializer import BaseRSRSerializer

from rest_framework import serializers
Expand All @@ -18,6 +19,11 @@ class Meta:
model = ProjectContact


class ProjectContactRawDeepSerializer(ProjectContactRawSerializer):

country = CountrySerializer(source='country')


class ProjectContactSerializer(ProjectContactRawSerializer):

type_label = serializers.Field(source='iati_type')
8 changes: 7 additions & 1 deletion akvo/rest/serializers/project_update.py
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,7 @@
from .project_update_location import (ProjectUpdateLocationNestedSerializer,
ProjectUpdateLocationExtraSerializer)
from .rsr_serializer import BaseRSRSerializer
from .user import UserSerializer
from .user import UserSerializer, UserRawSerializer


class ProjectUpdateSerializer(BaseRSRSerializer):
Expand All @@ -26,6 +26,12 @@ class Meta:
model = ProjectUpdate


class ProjectUpdateDeepSerializer(ProjectUpdateSerializer):
"""Deep serializer for project updates."""

user = UserRawSerializer(source='user')


class ProjectUpdateExtraSerializer(BaseRSRSerializer):

"""This serializer includes data about user and connected organisation."""
Expand Down
10 changes: 10 additions & 0 deletions akvo/rest/serializers/transaction.py
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,7 @@
from akvo.rsr.models import Transaction, TransactionSector

from .rsr_serializer import BaseRSRSerializer
from .organisation import OrganisationBasicSerializer

from rest_framework import serializers

Expand All @@ -18,6 +19,15 @@ class Meta:
model = Transaction


class TransactionRawDeepSerializer(TransactionRawSerializer):

provider_organisation = OrganisationBasicSerializer(source='provider_organisation')
receiver_organisation = OrganisationBasicSerializer(source='receiver_organisation')

class Meta:
model = Transaction


class TransactionSerializer(TransactionRawSerializer):

provider_organisation_show_link = serializers.Field(source='provider_organisation_show_link')
Expand Down
20 changes: 20 additions & 0 deletions akvo/rest/serializers/user.py
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,26 @@
from .rsr_serializer import BaseRSRSerializer


class UserRawSerializer(BaseRSRSerializer):
"""
Raw user serializer.
"""

class Meta:
model = get_user_model()
fields = (
'id',
'first_name',
'last_name',
'email',
'is_active',
'is_staff',
'is_admin',
'is_support',
'is_superuser',
)


class UserSerializer(BaseRSRSerializer):
# Needed to show only the first organisation of the user
organisation = OrganisationExtraSerializer(source='first_organisation', required=False)
Expand Down
2 changes: 2 additions & 0 deletions akvo/rest/urls.py
Original file line number Diff line number Diff line change
Expand Up @@ -71,6 +71,8 @@
base_name='project_iati_export')
router.register(r'project_extra', views.ProjectExtraViewSet,
base_name='project_extra')
router.register(r'project_extra_deep', views.ProjectExtraDeepViewSet,
base_name='project_extra_deep')
router.register(r'project_up', views.ProjectUpViewSet,
base_name='project_up')
router.register(r'project_comment', views.ProjectCommentViewSet)
Expand Down
4 changes: 3 additions & 1 deletion akvo/rest/views/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -52,7 +52,8 @@
from .partnership import PartnershipViewSet, PartnershipMoreLinkViewSet
from .planned_disbursement import PlannedDisbursementViewSet
from .policy_marker import PolicyMarkerViewSet
from .project import ProjectViewSet, ProjectExtraViewSet, ProjectIatiExportViewSet, ProjectUpViewSet
from .project import (ProjectViewSet, ProjectExtraViewSet, ProjectExtraDeepViewSet,
ProjectIatiExportViewSet, ProjectUpViewSet)
from .project_editor import (project_editor,
log_project_addition,
project_editor_reorder_items,
Expand Down Expand Up @@ -164,6 +165,7 @@
'ProjectDocumentViewSet',
'ProjectDocumentCategoryViewSet',
'ProjectExtraViewSet',
'ProjectExtraDeepViewSet',
'ProjectIatiCheckView',
'ProjectIatiExportViewSet',
'ProjectLocationViewSet',
Expand Down
Loading

0 comments on commit 644b7d9

Please sign in to comment.