# 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 conseil de classe Reprise de la figure precedente TC: prof et admin Conseil de classe Argumentation 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 conseil de classe Reprise de la figure precedente TC: prof et admin Conseil de classe Argumentation 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 conseil de classe Reprise de la figure precedente TC: prof et admin Conseil de classe Argumentation 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 conseil de classe Reprise de la figure precedente TC: prof et admin Conseil de classe Argumentation 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)