# HG changeset patch # User grandjoncl # Date 1356012771 -3600 # Node ID 34af1cdcf746f0fb8b4497c55b67b993f3197f5c # Parent 7fa1389a1d1da6f78f1509733874baf13647e960 Starting 'modifications_relative_ldtxml' branch diff -r 7fa1389a1d1d -r 34af1cdcf746 .settings/org.eclipse.core.resources.prefs --- a/.settings/org.eclipse.core.resources.prefs Mon Dec 10 15:19:57 2012 +0100 +++ b/.settings/org.eclipse.core.resources.prefs Thu Dec 20 15:12:51 2012 +0100 @@ -32,6 +32,7 @@ encoding//src/ldt/ldt/ldt_utils/migrations/0023_auto__add_field_segment_audio_src__add_field_segment_audio_href.py=utf-8 encoding//src/ldt/ldt/ldt_utils/migrations/0024_auto__chg_field_tag_name.py=utf-8 encoding//src/ldt/ldt/ldt_utils/migrations/0025_chg_site_domain.py=utf-8 +encoding//src/ldt/ldt/ldt_utils/migrations/0026_set_relative_ldtproject.py=utf-8 encoding//src/ldt/ldt/ldt_utils/views/json.py=utf-8 encoding//src/ldt/ldt/management/utils.py=utf-8 encoding//src/ldt/ldt/test/test_runner.py=utf-8 diff -r 7fa1389a1d1d -r 34af1cdcf746 src/ldt/ldt/ldt_utils/models.py --- a/src/ldt/ldt/ldt_utils/models.py Mon Dec 10 15:19:57 2012 +0100 +++ b/src/ldt/ldt/ldt_utils/models.py Thu Dec 20 15:12:51 2012 +0100 @@ -311,6 +311,10 @@ if not url_utils.is_absolute(res_url): res_url = unicode(web_url) + res_url return res_url + + def relative_iri_url(self): #this function is called when we create a project + res_url = u"ldt/" + unicode(self.iriurl) + return res_url def iri_file_path(self): return os.path.join(os.path.join(os.path.join(settings.MEDIA_ROOT, "ldt"), self.iri_id), os.path.basename(self.iriurl)) diff -r 7fa1389a1d1d -r 34af1cdcf746 src/ldt/ldt/ldt_utils/tests/ldt_tests.py --- a/src/ldt/ldt/ldt_utils/tests/ldt_tests.py Mon Dec 10 15:19:57 2012 +0100 +++ b/src/ldt/ldt/ldt_utils/tests/ldt_tests.py Thu Dec 20 15:12:51 2012 +0100 @@ -16,6 +16,7 @@ import unittest import uuid import logging +import base64 class UtilsTest(TestCase): @@ -77,8 +78,12 @@ self.cont4.iri_id = "id4" self.cont4.save() + search='' + field='all' + query = base64.urlsafe_b64encode(search.encode('utf8')) + self.project.contents.add(self.cont3, self.cont4) - ldoc = self.LU.generate_init([], 'ldt.ldt_utils.views.search_ldt') + ldoc = self.LU.generate_init([field, query], 'ldt.ldt_utils.views.lignesdetemps.search_ldt', 'ldt.ldt_utils.views.lignesdetemps.search_segments') self.assertEqual(ldoc.xpath("/iri/files/init")[0].tag, "init") self.assertEqual(ldoc.xpath("/iri/files/library")[0].tag, "library") @@ -97,7 +102,7 @@ ldt = lxml.etree.fromstring(self.project.ldt_encoded) self.assertEqual(ldt.xpath("/iri")[0].tag, "iri") self.assertEqual(ldt.xpath("/iri/project")[0].get("title"), self.project.title) - self.assertEqual(ldt.xpath("/iri/medias/media")[0].get("src"), self.cont5.iri_url()) + self.assertEqual(ldt.xpath("/iri/medias/media")[0].get("src"), self.cont5.relative_iri_url()) self.assertEqual(ldt.xpath("/iri/medias/media")[1].get("id"), self.cont6.iri_id) def test_copy_ldt(self): @@ -160,4 +165,7 @@ self.assertEqual(ann.get("author"), "jdoe") self.assertEqual(title, "title") self.assertEqual(abstract, "text") + +""" def test_save_fake_project(self): + projecttest = Project.objects.get()""" \ No newline at end of file diff -r 7fa1389a1d1d -r 34af1cdcf746 src/ldt/ldt/ldt_utils/tests/project_tests.py --- a/src/ldt/ldt/ldt_utils/tests/project_tests.py Mon Dec 10 15:19:57 2012 +0100 +++ b/src/ldt/ldt/ldt_utils/tests/project_tests.py Thu Dec 20 15:12:51 2012 +0100 @@ -11,12 +11,14 @@ from ldt.ldt_utils.models import User, Project, Content, Media from ldt.ldt_utils.utils import LdtUtils, LdtAnnotation, create_ldt, create_empty_iri, copy_ldt from ldt.test.client import Client +from django.core.management import call_command import lxml.etree import tempfile import unittest import uuid import logging + class ProjectTest(TestCase): fixtures = ['base_data.json', 'user_data.json'] @@ -26,13 +28,28 @@ User.objects.create_superuser('blop', 'blop@blop.com', 'blop') client = self.client.login(username='blop', password='blop') - self.user = User() self.user.username = 'blop' + self.LU = LdtUtils() + self.project = Project(title="titleproj1", owner=self.user) + self.project.ldt = ' CA: prof et admin <abstract/> <audio source=""/> <tags/> </element> <element id="s_0050F043-3AD2-0A7C-6699-D2A03A1EBA02" begin="5052858" dur="124407" author="" date="2010/09/02" color="10053375" src=""> <title>conseil de classe Reprise de la figure precedente TC: prof et admin Conseil de classe conseil de classe Reprise de la figure precedente Bout a bout 1 ' + self.project.id = "11321" + self.project.ldt_id = str(uuid.uuid1()) + self.project.description = "proj1description" + self.project.save() - def test_create_project(self): + def test_create_project(self): + self.cont1 = Content(iriurl="cont1_id/iriurl1", duration=123) + self.cont1.iri_id = "cont1_id" + self.cont1.save() + + self.cont2 = Content(iriurl="cont2_id/iriurl2", duration=100) + self.cont2.iri_id = "cont2_id" + self.cont2.save() + self.project2 = Project(title="titleproj2", owner=self.user) - self.project2.ldt = ' CA: prof et admin <abstract/> <audio source=""/> <tags/> </element> <element id="s_0050F043-3AD2-0A7C-6699-D2A03A1EBA02" begin="5052858" dur="124407" author="" date="2010/09/02" color="10053375" src=""> <title>conseil de classe Reprise de la figure precedente TC: prof et admin Conseil de classe conseil de classe Reprise de la figure precedente Bout a bout 1 ' + + self.project2.ldt = self.LU.generate_ldt(Content.objects.all()) self.project2.ldt_id = str(uuid.uuid1()) self.project2.description = "proj2description" self.project2.save() @@ -41,8 +58,12 @@ #test deletion of project without annotation def test_del_project_v1(self): + self.cont3 = Content(iriurl="cont3_id/iriurl3", duration=100) + self.cont3.iri_id = "cont3_id" + self.cont3.save() + self.project3 = Project(title="titleproj3", owner=self.user) - self.project3.ldt = ' CA: prof et admin <abstract/> <audio source=""/> <tags/> </element> <element id="s_0050F043-3AD2-0A7C-6699-D2A03A1EBA02" begin="5052858" dur="124407" author="" date="2010/09/02" color="10053375" src=""> <title>conseil de classe Reprise de la figure precedente TC: prof et admin Conseil de classe conseil de classe Reprise de la figure precedente Bout a bout 1 ' + self.project3.ldt = self.LU.generate_ldt(Content.objects.all()) self.project3.id = "333" self.project3.ldt_id = str(uuid.uuid1()) self.project3.description = "proj3description" @@ -55,9 +76,12 @@ #test deletion of project with annotations def test_del_project_v2(self): + self.cont4 = Content(iriurl="cont4_id/iriurl4", duration=100) + self.cont4.iri_id = "cont4_id" + self.cont4.save() - self.project4 = Project(title="titleproj3", owner=self.user) - self.project4.ldt = ' CA: prof et admin <abstract/> <audio source=""/> <tags/> </element> <element id="s_0050F043-3AD2-0A7C-6699-D2A03A1EBA02" begin="5052858" dur="124407" author="" date="2010/09/02" color="10053375" src=""> <title>conseil de classe Reprise de la figure precedente TC: prof et admin Conseil de classe conseil de classe Reprise de la figure precedente Bout a bout 1 ' + self.project4 = Project(title="titleproj4", owner=self.user) + self.project4.ldt=self.LU.generate_ldt(Content.objects.all()) self.project4.id = "444" self.project4.ldt_id = str(uuid.uuid1()) self.project4.description = "proj4description" @@ -74,4 +98,77 @@ self.project4.delete() with self.assertRaises(Project.DoesNotExist): - Project.objects.get(ldt_id=self.project4.ldt_id) \ No newline at end of file + Project.objects.get(ldt_id=self.project4.ldt_id) + + def test_clean_database_project(self) : + self.cont5 = Content(iriurl="cont5_id/iriurl5", duration=123) + self.cont5.iri_id = "cont5_id" + self.cont5.save() + + self.cont6 = Content(iriurl="cont6_id/iriurl6", duration=100) + self.cont6.iri_id = "cont6_id" + self.cont6.save() + + self.cont7 = Content(iriurl="cont7_id/iriurl7", duration=100) + self.cont7.iri_id = "cont7_id" + self.cont7.save() + + self.project.contents.add(self.cont5, self.cont6) + + doc = self.LU.generate_ldt(Content.objects.all()) + + #project5 : valid project + self.project5 = Project(title="titleproj5", owner=self.user) + ldt = lxml.etree.tostring(doc, pretty_print = False) + self.project5.ldt = ldt + self.project5.id = "555" + self.project5.ldt_id = str(uuid.uuid1()) + self.project5.description = "proj5description" + self.project5.save() + + #project6 : project with empty ldt + self.project6 = Project(title="titleproj5", owner=self.user) + self.project6.id = "666" + self.project6.ldt_id = str(uuid.uuid1()) + self.project6.description = "proj6description" + self.project6.save() + + #project7 : project with a non-existing media + + self.project7 = Project(title="titleproj7", owner=self.user) + self.project7.id = "777" + self.project7.ldt_id = str(uuid.uuid1()) + self.project7.ldt = '' + self.project7.description = "proj7description" + self.project7.save() + + #project8 : project with multiple medias some valid and some that don't exist + self.project8 = Project(title="titleproj8", owner=self.user) + self.project8.id = "888" + self.project8.ldt_id = str(uuid.uuid1()) + self.project8.ldt = '' + self.project8.description = "proj8description" + self.project8.save() + + #project9 : project without any media + self.project9 = Project(title="titleproj9", owner=self.user) + self.project9.id = "999" + self.project9.ldt_id = str(uuid.uuid1()) + self.project9.ldt = '' + self.project9.description = "proj9description" + self.project9.save() + + call_command('set_projectldtiri') + + with self.assertRaises(Project.DoesNotExist): + Project.objects.get(ldt_id=self.project6.ldt_id) + + with self.assertRaises(Project.DoesNotExist): + Project.objects.get(ldt_id=self.project7.ldt_id) + + with self.assertRaises(Project.DoesNotExist): + Project.objects.get(ldt_id=self.project9.ldt_id) + + self.assertEqual(ldt, self.project5.ldt) + + \ No newline at end of file diff -r 7fa1389a1d1d -r 34af1cdcf746 src/ldt/ldt/ldt_utils/utils.py --- a/src/ldt/ldt/ldt_utils/utils.py Mon Dec 10 15:19:57 2012 +0100 +++ b/src/ldt/ldt/ldt_utils/utils.py Thu Dec 20 15:12:51 2012 +0100 @@ -8,7 +8,6 @@ import uuid from ldt.utils.url import request_with_auth from ldt.utils.url import absurl_norequest -import logging __BOOLEAN_DICT = { 'false':False, @@ -58,7 +57,7 @@ videopath = unicode(content.videopath) media = lxml.etree.SubElement(medias, "media") media.set(u"id", content.iri_id) - media.set(u"src", content.iri_url(web_url)) + media.set(u"src", content.relative_iri_url()) media.set(u"video", videopath) media.set(u"pict", u"") media.set(u"extra", u"") @@ -322,7 +321,7 @@ idsel = content.iri_id elementMedia = lxml.etree.SubElement(elementMedias, 'media') elementMedia.set('id', content.iri_id) - elementMedia.set('src', content.iri_url()) + elementMedia.set('src', content.relative_iri_url()) if content.videopath != None : elementMedia.set('video', content.videopath) diff -r 7fa1389a1d1d -r 34af1cdcf746 src/ldt/ldt/ldt_utils/views/lignesdetemps.py --- a/src/ldt/ldt/ldt_utils/views/lignesdetemps.py Mon Dec 10 15:19:57 2012 +0100 +++ b/src/ldt/ldt/ldt_utils/views/lignesdetemps.py Thu Dec 20 15:12:51 2012 +0100 @@ -12,12 +12,13 @@ from ldt.ldt_utils.searchutils import search_generate_ldt from ldt.utils.url import absstatic, absurl from ldt.utils.web_url_management import get_web_url +from ldt.utils.projectldt_parser import absolute_src_xml, relative_src_xml import base64 import django.core.urlresolvers import lxml.etree from django.contrib.sites.models import Site from django.template import Context, Template - + def search_index_get(request, field, query): language_code = request.LANGUAGE_CODE[:2] @@ -43,6 +44,7 @@ resp = HttpResponse(mimetype="text/xml") doc, _ = search_generate_ldt(request, field, query) + doc = absolute_src_xml(doc) doc.write(resp, pretty_print=True) return resp @@ -100,7 +102,6 @@ ldtgen = LdtUtils() doc = ldtgen.generate_init([project_id, content_id, ensemble_id, cutting_id, segment_id], 'ldt.ldt_utils.views.lignesdetemps.ldt_segment', 'ldt.ldt_utils.views.lignesdetemps.highlight_segment') - return HttpResponse(lxml.etree.tostring(lxml.etree.ElementTree(doc), pretty_print=True), mimetype="text/xml;charset=utf-8") def highlight_segment(request, project_id, content_id, ensemble_id, cutting_id, segment_id): @@ -130,6 +131,7 @@ if project_id and project_id != "_" : project = Project.safe_objects.get(ldt_id=project_id) #@UndefinedVariable ldtdoc = lxml.etree.fromstring(project.ldt_encoded) + ldtdoc = absolute_src_xml(ldtdoc) ldtdoc = set_forbidden_stream(ldtdoc, request.user) displays_node = ldtdoc.find("displays") if not displays_node: @@ -175,6 +177,7 @@ } doc = ldtgen.generate_ldt(content_list, "segment : ", author=username, startSegment=start_segment) + doc = absolute_src_xml(doc) doc = set_forbidden_stream(doc, request.user) doc.write(resp, pretty_print=('DEBUG' in dir(settings) and settings.DEBUG)) @@ -243,6 +246,7 @@ doc = lxml.etree.fromstring(project.ldt_encoded) doc = set_forbidden_stream(doc, request.user) + doc = absolute_src_xml(doc) resp.write(lxml.etree.tostring(doc, pretty_print=True, xml_declaration=True, encoding="utf-8")) return resp @@ -254,8 +258,10 @@ ldt = request.POST['ldt'] id = request.POST['id'] ldtproject = Project.safe_objects.select_related().get(ldt_id=id) #@UndefinedVariable - + ldtxml=lxml.etree.fromstring(ldt) #save xml ldt + ldt, modif, no_more_media = relative_src_xml(ldtxml) + ldt = lxml.etree.tostring(ldt, pretty_print=True) ldtproject.ldt = ldt doc = lxml.etree.fromstring(ldtproject.ldt_encoded) @@ -340,6 +346,7 @@ ldtgen = LdtUtils() doc = ldtgen.generate_ldt(contentList, title=contentList[0].title, startSegment=startSegment) doc = set_forbidden_stream(doc, request.user) + doc = absolute_src_xml(doc) doc.write(resp, pretty_print=True) return resp diff -r 7fa1389a1d1d -r 34af1cdcf746 src/ldt/ldt/static/ldt/css/ldtform.css --- a/src/ldt/ldt/static/ldt/css/ldtform.css Mon Dec 10 15:19:57 2012 +0100 +++ b/src/ldt/ldt/static/ldt/css/ldtform.css Thu Dec 20 15:12:51 2012 +0100 @@ -4,7 +4,7 @@ min-width: 0; } -#add_content, #add_contribution, #add_group { +#add_contribution, #add_group { padding: 10px; } diff -r 7fa1389a1d1d -r 34af1cdcf746 src/ldt/ldt/utils/url.py --- a/src/ldt/ldt/utils/url.py Mon Dec 10 15:19:57 2012 +0100 +++ b/src/ldt/ldt/utils/url.py Thu Dec 20 15:12:51 2012 +0100 @@ -2,15 +2,22 @@ from django.core.urlresolvers import reverse from ldt.utils.web_url_management import get_web_url from ldt import settings +from django.conf import settings as djangosettings import httplib2 import re import urlparse +import logging def absstatic(request, path): domain=get_web_url(request) new_path = staticfiles_storage.url(path) return urlparse.urljoin(domain, new_path) +def absolute_media_url(): + domain=get_web_url() + + return urlparse.urljoin(domain, djangosettings.MEDIA_URL) + def absurl(request, viewname, urlconf=None, args=None, kwargs=None, prefix=None, current_app=None): domain=get_web_url(request) path=reverse(viewname, urlconf, args, kwargs, prefix, current_app)