From 51483690bfe92615a2c40c1c708688b2295a2eda Mon Sep 17 00:00:00 2001 From: jpic Date: Wed, 4 May 2016 22:41:29 +0200 Subject: [PATCH 1/5] Fix Dossier list API queryset --- representatives_votes/api.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/representatives_votes/api.py b/representatives_votes/api.py index 2a7d2b2..23a3eb7 100644 --- a/representatives_votes/api.py +++ b/representatives_votes/api.py @@ -26,7 +26,7 @@ class DossierViewSet(viewsets.ReadOnlyModelViewSet): """ pagination_class = DefaultWebPagination - queryset = Dossier.objects.all() + queryset = Dossier.objects.prefetch_related('proposals__votes__representative') serializer_class = DossierSerializer filter_backends = ( From 9f14f66a4524979842a4232ed88cfb5767b9b397 Mon Sep 17 00:00:00 2001 From: jpic Date: Wed, 4 May 2016 22:42:26 +0200 Subject: [PATCH 2/5] Use HyperlinkedModelSerializer --- representatives_votes/serializers.py | 11 ++++------- 1 file changed, 4 insertions(+), 7 deletions(-) diff --git a/representatives_votes/serializers.py b/representatives_votes/serializers.py index 66814ab..98a91d1 100644 --- a/representatives_votes/serializers.py +++ b/representatives_votes/serializers.py @@ -23,6 +23,7 @@ class ProposalSerializer(serializers.HyperlinkedModelSerializer): class Meta: model = models.Proposal fields = ( + 'id', 'dossier', 'title', 'description', @@ -39,24 +40,21 @@ class Meta: class ProposalDetailSerializer(ProposalSerializer): """ Proposal serializer that includes votes """ - votes = VoteSerializer(many=True) - - class Meta: - model = models.Proposal - fields = ProposalSerializer.Meta.fields + ('votes',) - class DossierSerializer(serializers.HyperlinkedModelSerializer): """ Base dossier serializer """ + proposals = ProposalSerializer(many=True) class Meta: model = models.Dossier fields = ( + 'id', 'title', 'reference', 'text', 'link', 'url', + 'proposals', ) @@ -64,7 +62,6 @@ class DossierDetailSerializer(DossierSerializer): """ Dossier serializer that includes proposals and votes. """ - proposals = ProposalSerializer(many=True) class Meta: From d5f27ab3bad88cfbf57f4f0bed6a2cf667a40a20 Mon Sep 17 00:00:00 2001 From: jpic Date: Wed, 4 May 2016 22:42:47 +0200 Subject: [PATCH 3/5] Update debug logs --- representatives_votes/contrib/parltrack/import_votes.py | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/representatives_votes/contrib/parltrack/import_votes.py b/representatives_votes/contrib/parltrack/import_votes.py index 068830d..270a0e5 100644 --- a/representatives_votes/contrib/parltrack/import_votes.py +++ b/representatives_votes/contrib/parltrack/import_votes.py @@ -97,6 +97,8 @@ def parse_proposal_data(self, proposal_data, dossier_pk): changed = True if changed: + logger.debug('Saving proposal %s' % + proposal_data.get('epref', proposal_data['title'])) proposal.save() responses = vote_pre_import.send(sender=self, vote_data=proposal_data) @@ -104,8 +106,9 @@ def parse_proposal_data(self, proposal_data, dossier_pk): for receiver, response in responses: if response is False: logger.debug( - 'Skipping dossier %s', proposal_data.get( - 'epref', proposal_data['title'])) + 'Skipping votes for dossier %s because of %s', + proposal_data.get( 'epref', proposal_data['title']), + receiver) return positions = ['For', 'Abstain', 'Against'] From 4f7a0e252f9578b685d93ca003f43f6a24e4969c Mon Sep 17 00:00:00 2001 From: jpic Date: Wed, 4 May 2016 22:43:26 +0200 Subject: [PATCH 4/5] WIP data retriever --- representatives_votes/tests.py | 11 +++++++++++ 1 file changed, 11 insertions(+) create mode 100644 representatives_votes/tests.py diff --git a/representatives_votes/tests.py b/representatives_votes/tests.py new file mode 100644 index 0000000..dab05f0 --- /dev/null +++ b/representatives_votes/tests.py @@ -0,0 +1,11 @@ +from django import test + + +class RetrieverSpec(test.TestCase): + # Should: + # - sync any dossier where title='', dossiers are inserted by a custom + # admin feature + # - sync any proposal without vote, proposals should be added on + # dossier-sync, so any dossier in our db should have votes for every + # proposal at some point. + From ec543b6e39bc89a5a6aa11944aeb64c4eb57c1ae Mon Sep 17 00:00:00 2001 From: jpic Date: Thu, 5 May 2016 11:47:18 +0200 Subject: [PATCH 5/5] Fixed the API It wasn't clear which URL would be what resource, ie. the proposal list view displayed votes and not the proposal detail view. Also changed the tests so that they requested indented responses which will be easier to diff. --- representatives_votes/api.py | 2 +- representatives_votes/serializers.py | 11 ++++++----- representatives_votes/tests/test_views.py | 3 +++ 3 files changed, 10 insertions(+), 6 deletions(-) diff --git a/representatives_votes/api.py b/representatives_votes/api.py index 23a3eb7..2a7d2b2 100644 --- a/representatives_votes/api.py +++ b/representatives_votes/api.py @@ -26,7 +26,7 @@ class DossierViewSet(viewsets.ReadOnlyModelViewSet): """ pagination_class = DefaultWebPagination - queryset = Dossier.objects.prefetch_related('proposals__votes__representative') + queryset = Dossier.objects.all() serializer_class = DossierSerializer filter_backends = ( diff --git a/representatives_votes/serializers.py b/representatives_votes/serializers.py index 98a91d1..efcb421 100644 --- a/representatives_votes/serializers.py +++ b/representatives_votes/serializers.py @@ -23,7 +23,6 @@ class ProposalSerializer(serializers.HyperlinkedModelSerializer): class Meta: model = models.Proposal fields = ( - 'id', 'dossier', 'title', 'description', @@ -40,21 +39,23 @@ class Meta: class ProposalDetailSerializer(ProposalSerializer): """ Proposal serializer that includes votes """ + votes = VoteSerializer(many=True) + + class Meta: + model = models.Proposal + class DossierSerializer(serializers.HyperlinkedModelSerializer): """ Base dossier serializer """ - proposals = ProposalSerializer(many=True) class Meta: model = models.Dossier fields = ( - 'id', 'title', 'reference', 'text', 'link', 'url', - 'proposals', ) @@ -62,7 +63,7 @@ class DossierDetailSerializer(DossierSerializer): """ Dossier serializer that includes proposals and votes. """ - proposals = ProposalSerializer(many=True) + proposals = ProposalDetailSerializer(many=True) class Meta: model = models.Dossier diff --git a/representatives_votes/tests/test_views.py b/representatives_votes/tests/test_views.py index 5b631de..4abac83 100644 --- a/representatives_votes/tests/test_views.py +++ b/representatives_votes/tests/test_views.py @@ -31,5 +31,8 @@ def test_proposals(self): def test_vote(self): self.functional_test(1, '/api/votes/1/') + def test_proposals(self): + self.functional_test(1, '/api/proposals/') + def test_votes(self): self.functional_test(1, '/api/votes/')