Skip to content
This repository was archived by the owner on Dec 20, 2019. It is now read-only.
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
22 commits
Select commit Hold shift + click to select a range
af05d97
Adding Recording to Placename entity
DenisCalixto Nov 13, 2019
8827f84
Adding audio (Recording fk) to serializer. Placename API tests update
DenisCalixto Nov 13, 2019
645f101
Audio (Recording entity) in CommunityDetailSerializer. API tests update
DenisCalixto Nov 13, 2019
c7e4dad
Audio (Recording entity) in LanguageDetailSerializer. API tests update
DenisCalixto Nov 13, 2019
33a17ce
Recording viewset and url
DenisCalixto Nov 13, 2019
1fe81b8
Bump django from 2.2.4 to 2.2.8 in /web
dependabot[bot] Dec 4, 2019
e005232
New Language API fields
DenisCalixto Dec 14, 2019
039e665
New Community API fields
DenisCalixto Dec 14, 2019
ffa732a
Merge pull request #9 from countable-web/develop
DenisCalixto Dec 14, 2019
5565931
Merge pull request #10 from countable-web/new_api_fields
DenisCalixto Dec 14, 2019
027980e
Fixing Champion test
DenisCalixto Dec 14, 2019
ec50043
Merge pull request #11 from countable-web/api_tests_review
DenisCalixto Dec 14, 2019
b43b9e2
Merge branch 'develop' into recording_entity_fk
DenisCalixto Dec 15, 2019
0b4f855
Merge pull request #7 from countable-web/recording_entity_fk
DenisCalixto Dec 15, 2019
a89123a
Building/Adding links to the old LNA website in Community detail seri…
DenisCalixto Dec 17, 2019
c4fe399
Merge pull request #13 from countable-web/lna_links
DenisCalixto Dec 17, 2019
0cbec4b
Recording API tests
DenisCalixto Dec 18, 2019
e8eb5ed
Adding language audio and greeting audio to Language. Language API te…
DenisCalixto Dec 18, 2019
29ab9e6
Adding audio to Community. Community API tests update
DenisCalixto Dec 18, 2019
7f976b9
Merge branch 'recording_entity_fk' of https://github.com/countable-we…
DenisCalixto Dec 18, 2019
c84e9aa
Merge pull request #14 from countable-web/recording_entity_fk
DenisCalixto Dec 19, 2019
5343747
Merge pull request #8 from countable-web/dependabot/pip/web/django-2.2.8
countable Dec 20, 2019
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
19 changes: 19 additions & 0 deletions web/language/migrations/0095_placename_audio.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
# Generated by Django 2.2.4 on 2019-11-13 20:17

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


class Migration(migrations.Migration):

dependencies = [
('language', '0094_community_nation_id'),
]

operations = [
migrations.AddField(
model_name='placename',
name='audio',
field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, to='language.Recording'),
),
]
7 changes: 6 additions & 1 deletion web/language/models.py
Original file line number Diff line number Diff line change
Expand Up @@ -236,10 +236,15 @@ class Meta:

class PlaceName(CulturalModel):
geom = models.GeometryField(null=True, default=None)


# 3 deprecated. Use Recording.
audio_file = models.FileField(null=True, blank=True)
audio_name = models.CharField(max_length=64, null=True, blank=True)
audio_description = models.TextField(null=True, blank=True, default="")
# 3 deprecated. Use Recording.
audio = models.ForeignKey(
Recording, on_delete=models.SET_NULL, null=True, blank=True
)

kind = models.CharField(max_length=15, default="")

Expand Down
58 changes: 49 additions & 9 deletions web/language/serializers.py
Original file line number Diff line number Diff line change
Expand Up @@ -56,11 +56,7 @@ class Meta:
class RecordingSerializer(serializers.ModelSerializer):
class Meta:
model = Recording
fields = ("audio_file",
"speaker",
"recorder",
"created",
"date_recorded")
fields = ("id", "audio_file", "speaker", "recorder", "created", "date_recorded")

class LNASerializer(serializers.ModelSerializer):
language = serializers.SlugRelatedField(read_only=True, slug_field="name")
Expand Down Expand Up @@ -145,8 +141,7 @@ class LanguageDetailSerializer(serializers.ModelSerializer):
required=False,
)
language_audio = RecordingSerializer(read_only=True)


greeting_audio = RecordingSerializer(read_only=True)

def to_representation(self, value):
rep = super().to_representation(value)
Expand Down Expand Up @@ -189,7 +184,15 @@ class Meta:
"family_id",
"champion_ids",
"languagelink_ids",
"places"
"places",
"total_schools",
"avg_hrs_wk_languages_in_school",
"ece_programs",
"avg_hrs_wk_languages_in_ece",
"language_nests",
"avg_hrs_wk_languages_in_language_nests",
"community_adult_language_classes",
"fv_guid",
)


Expand Down Expand Up @@ -248,6 +251,10 @@ class CommunityDetailSerializer(serializers.ModelSerializer):
languages = LanguageSerializer(read_only=True, many=True)
places = PlaceNameLightSerializer(many=True, read_only=True)
medias = MediaLightSerializer(many=True, read_only=True)
audio = serializers.PrimaryKeyRelatedField(
queryset=Recording.objects.all(), allow_null=True, required=False
)
audio_obj = RecordingSerializer(source="audio", read_only=True)

# Atomic Writable APIs
language_ids = serializers.PrimaryKeyRelatedField(
Expand Down Expand Up @@ -282,18 +289,40 @@ def to_representation(self, value):
if lid in by_lang:
if lnadata.lna.year > by_lang[lid]["lna"]["year"]:
by_lang[lid] = LNADataSerializer(lnadata).data
lna_name = by_lang[lid]["lna"]["name"]
print(lna_name)
by_lang[lid]['lna']['url'] = self.build_lna_external_url(lna_name)
# print(by_lang[lid]['lna'])
else:
by_lang[lid] = LNADataSerializer(lnadata).data
lna_name = by_lang[lid]["lna"]["name"]
print(lna_name)
by_lang[lid]['lna']['url'] = "denis"
# print(by_lang[lid]['lna'])

rep["lna_by_language"] = by_lang
return rep

def build_lna_external_url(self, lna_name):
permalink = "https://maps.fpcc.ca/lna/"
try:
lna_external_id = lna_name.split('-')[0].strip().replace("LNA","")
print(lna_external_id)
lna_link = permalink + lna_external_id
print(lna_link)
except:
lna_link = permalink
return lna_link

class Meta:
model = Community
fields = (
"id",
"name",
"languages",
"regions",
"audio",
"audio_obj",
"audio_file",
"champion_set",
"communitylink_set",
Expand All @@ -307,12 +336,17 @@ class Meta:
"phone",
"alt_phone",
"fax",
"audio_file",
"language_ids",
"champion_ids",
"communitylink_ids",
"places",
"medias",
"notes",
"nation_id",
"population_on_reserve",
"population_off_reserve",
"fv_guid",
"fv_archive_link",
)


Expand Down Expand Up @@ -403,6 +437,10 @@ class PlaceNameDetailSerializer(serializers.ModelSerializer):
)
category_obj = PlaceNameCategorySerializer(source="category", read_only=True)
favourites = FavouritePlaceNameSerializer(many=True, read_only=True)
audio = serializers.PrimaryKeyRelatedField(
queryset=Recording.objects.all(), allow_null=True, required=False
)
audio_obj = RecordingSerializer(source="audio", read_only=True)

class Meta:
model = PlaceName
Expand All @@ -411,6 +449,8 @@ class Meta:
"id",
"geom",
"other_names",
"audio",
"audio_obj",
"audio_file",
"audio_name",
"audio_description",
Expand Down
55 changes: 53 additions & 2 deletions web/language/tests/tests_community.py
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
from django.test import TestCase
from rest_framework.test import APITestCase
from rest_framework import status
from django.utils import timezone

from users.models import User, Administrator
from django.contrib.gis.geos import GEOSGeometry, Point
Expand All @@ -9,6 +10,8 @@
Language,
Community,
CommunityMember,
Champion,
Recording,
)


Expand All @@ -29,6 +32,8 @@ def setUp(self):
class CommunityAPITests(BaseTestCase):
def setUp(self):
super().setUp()
self.now = timezone.now()

self.community1 = Community.objects.create(name="Test Community 01")
self.community2 = Community.objects.create(name="Test Community 02")
self.language = Language.objects.create(name="Test Language")
Expand All @@ -41,6 +46,14 @@ def setUp(self):
54.74840576223716
]
}"""
self.point = GEOSGeometry(self.FAKE_GEOM)

self.recording = Recording.objects.create(
speaker = "Test recording",
recorder = "Test recording",
created = self.now,
date_recorded = self.now,
)

###### ONE TEST TESTS ONLY ONE SCENARIO ######

Expand All @@ -49,9 +62,9 @@ def test_community_detail(self):
Ensure we can retrieve a newly created community object.
"""

point = GEOSGeometry(self.FAKE_GEOM)
test_community = Community(name="Test community 001")
test_community.point = point
test_community.point = self.point
test_community.audio = self.recording
test_community.save()

response = self.client.get(
Expand All @@ -60,6 +73,9 @@ def test_community_detail(self):
self.assertEqual(response.status_code, status.HTTP_200_OK)
self.assertEqual(response.data["id"], test_community.id)
self.assertEqual(response.data["name"], "Test community 001")
self.assertEqual(response.data["audio"], self.recording.id)
self.assertEqual(response.data["audio_obj"]["speaker"], self.recording.speaker)
self.assertEqual(response.data["audio_obj"]["recorder"], self.recording.recorder)

def test_community_list_route_exists(self):
"""
Expand All @@ -68,6 +84,41 @@ def test_community_list_route_exists(self):
response = self.client.get("/api/community/", format="json")
self.assertEqual(response.status_code, status.HTTP_200_OK)

def test_community_add_audio(self):
"""
Ensure we can add a community audio to a community object.
"""
# Must be logged in
self.assertTrue(self.client.login(username="testuser001", password="password"))

# Check we're logged in
response = self.client.get("/api/user/auth/")
self.assertEqual(response.json()["is_authenticated"], True)

test_community = Community(name="Test community audio")
test_community.point = self.point
test_community.save()

response = self.client.patch(
"/api/community/{}/add_audio/".format(test_community.id),
{
"recording_id": self.recording.id
},
format="json"
)

self.assertEqual(response.status_code, status.HTTP_200_OK)

response = self.client.get(
"/api/community/{}/".format(test_community.id), format="json"
)

self.assertEqual(response.status_code, status.HTTP_200_OK)
self.assertEqual(response.data["id"], test_community.id)
self.assertEqual(response.data["name"], "Test community audio")
self.assertEqual(response.data["audio_obj"]["id"], self.recording.id)
self.assertEqual(response.data["audio_obj"]["speaker"], self.recording.speaker)

def test_create_community_member_post(self):
"""
Ensure we can retrieve a newly created community member object.
Expand Down
Loading