delete well formed source links videopaths, check youtube videos, change m4v source links
authorbellierp
Thu, 16 Mar 2017 18:25:44 +0100
changeset 327 c3998a528fd9
parent 326 14c651931491
child 328 db7e7dd4899f
delete well formed source links videopaths, check youtube videos, change m4v source links
src/ldtplatform/management/commands/replacedelete.py
--- a/src/ldtplatform/management/commands/replacedelete.py	Thu Mar 09 17:42:33 2017 +0100
+++ b/src/ldtplatform/management/commands/replacedelete.py	Thu Mar 16 18:25:44 2017 +0100
@@ -3,12 +3,14 @@
 '''
 import csv
 import logging
+import re
 from itertools import chain
 
 import requests
 from django.conf import settings
 from django.contrib.sites.models import Site
 from django.core.management.base import BaseCommand
+from django.core import management
 from lxml import etree
 
 from ldt.ldt_utils import models
@@ -24,19 +26,21 @@
         tomp4 = 0
     if tomp4 == 1:
         source = source[0:len(source)-3]+"mp4"
-    if source[0:4] == "http" or source[0:4] == "sftp":
+    if source[0:5] == "https":
+        return source
+    elif source[0:4] == "http" or source[0:4] == "sftp":
         return "https"+source[4:len(source)]
     elif source[0:7] == "/video/":
         return "https://media.iri.centrepompidou.fr"+source
     elif source[0:6] == "video/" or source[0:6] == "audio/":
         return "https://media.iri.centrepompidou.fr/"+source
-    elif source[0:4] == "mp4:":
-        return "hue"
     elif vidpath == 'rtmp://media.iri.centrepompidou.fr/ddc_player/video/regardssignes/' or \
         vidpath == 'rtmp://media.iri.centrepompidou.fr/ddc_player/mp4:video/regardssignes/':
         return "https://media.iri.centrepompidou.fr/video/regardssignes/"+source
-    else:
-        return "https://media.iri.centrepompidou.fr/video/ldtplatform/"+source
+    elif source[0:4] == "mp4:":
+        if vidpath == 'rtmp://media.iri.centrepompidou.fr/ddc_player/':
+            return "https://media.iri.centrepompidou.fr/" + source[4:]
+    return "https://media.iri.centrepompidou.fr/video/ldtplatform/"+source
 
 def numberofcontents(source):    #this counts the number of contents linked to a media
     '''
@@ -51,8 +55,7 @@
     if numberofcontents(source) > 0:
         return len(models.Project.objects.filter\
                 (content=models.Content.objects.filter(media_obj_id=source.id)[0]))
-    else:
-        return 0
+    return 0
 
 class Command(BaseCommand):
     '''
@@ -78,8 +81,13 @@
             "Number of contents",
             "Number of projects"
             ]]
-
-        j=0
+        if options['f']:
+            infos = open('results.txt', 'w')
+        else:
+            infos = open('projectsToChange.txt', 'w')
+        j = 0
+        parser = etree.XMLParser(encoding='utf-8')
+        logger = logging.getLogger(__name__)
         files1 = models.Media.objects.all() #this list contains every media
         for elem1 in files1:
             if numberofcontents(elem1) == 0:
@@ -89,34 +97,92 @@
                     self.stdout.write(" No content found, media has been removed")
                 else:
                     forcsv += [[
-                    elem1.src,
-                    "XXX",
-                    "XXX",
-                    "XXX",
-                    "NO CONTENT : media will be erased",
-                    "0",
-                    "0"
+                        elem1.src,
+                        "XXX",
+                        "XXX",
+                        "XXX",
+                        "NO CONTENT : media will be erased",
+                        "0",
+                        "0"
                     ]]
                 j += 1
+                continue
+            if numberofproject(elem1) == 0:
+                if options['f']:
+                    mycontentid = models.Content.objects.filter(media_obj_id=elem1.id)[0].iri_id
+                    management.call_command('initfrontproject', mycontentid)
+                else:
+                    forcsv += [[
+                        elem1.src,
+                        "XXX",
+                        "XXX",
+                        "XXX",
+                        "No project : will be initialized",
+                        "1",
+                        "0"
+                        ]]
+            ldtproj = models.Project.objects.filter\
+            (content=models.Content.objects.filter(media_obj_id=elem1.id)[0])
+            if elem1.src.lower() == tohttps(elem1.src, elem1.videopath).lower():
+                for numproject in xrange(len(ldtproj)):
+                    root = etree.XML(ldtproj[numproject].ldt.encode('utf-8'), parser)
+                    mediapathlen = len(root.xpath('medias/media'))
+                    if mediapathlen == 0:
+                        self.stdout.write(" .ldt has no media", ending='')
+                        continue
+                    if options['f'] and\
+                    re.match(r"rtmp://media.iri.centrepompidou.fr/ddc_player/.*",elem1.videopath) != None:
+                        root.xpath('medias/media')[0].set("video", '')
+                        ldtproj[numproject].ldt = etree.tostring(root)
+                        ldtproj[numproject].save()
+                        self.stdout.write(" Project videopath modified!")
+                        infos.write(" Project videopath modified ")
+            if re.match(r".*\.youtube\.com.*", elem1.src) != None\
+            or re.match(r".*youtu\.be.+", elem1.src) != None:
+                if re.match(r".*feature=player_embedded.+", elem1.src) != None:
+                    myembed = "http://www.youtube.com/oembed?url=http://youtube.com/watch?v="\
+                    + elem1.src[len(elem1.src)-11:] +"&format=json"
+                else:
+                    myembed = "http://www.youtube.com/oembed?url=" + elem1.src + "&format=json"
+                if requests.get(myembed).status_code == 404:
+                    self.stdout.write("%s : Video doesn't exists"% elem1.src)
+                    if numberofproject(elem1) > 0:
+                        ldtproj = models.Project.objects.get(id=models.Content.objects.filter\
+                        (media_obj_id=elem1.id)[0].front_project_id).ldt
+                        root = etree.XML(ldtproj.encode('utf-8'), parser)
+                        if root.xpath('annotations/content/ensemble/decoupage/elements/element')\
+                        == []:
+                            if options['f']:
+                                elem1.delete()
+                                self.stdout.write("video doesn't exist anymore : media deleted")
+                            else:
+                                forcsv += [[
+                                    elem1.src,
+                                    "XXX",
+                                    "XXX",
+                                    "404",
+                                    "Video doesn't exist anymore + empty projects",
+                                    "1",
+                                    "1"
+                                    ]]
+
         if options['f']:
             self.stdout.write("%s files deleted"%j)
-            infos = open('results.txt', 'w')
-            parser = etree.XMLParser(encoding='utf-8')
         else:
             self.stdout.write("%s files to delete"%j)
-            infos = open('projectsToChange.txt', 'w')
         i = 0
         files = list(chain(
             models.Media.objects.filter(src__iregex=r".*.flv$"),
             models.Media.objects.filter(src__iregex=r".*.f4v$"),
+            models.Media.objects.filter(src__iregex=r".*.m4v$"),
             models.Media.objects.filter(src__iregex=r".*.mp4$").exclude(src__iregex=r"^https://.*")
         ))
-        logger = logging.getLogger(__name__)
+
         for elem in files:
             self.stdout.write(" \n%s/%s files done"%(i+1, len(files)), ending='')
             i += 1
             if numberofcontents(elem) == 0:
-                self.stdout.write(" no content",ending='')
+                self.stdout.write(" no content", ending='')
                 continue
             mysrc = elem.src
             newsource = tohttps(elem.src, elem.videopath)
@@ -309,7 +375,8 @@
             if options['f']:
                 for numproject in xrange(len(ldtproj)):
                     root = etree.XML(ldtproj[numproject].ldt.encode('utf-8'), parser)
-                    if len(root.xpath('medias/media')) == 0:
+                    mediapathlen = len(root.xpath('medias/media'))
+                    if mediapathlen == 0:
                         self.stdout.write(" le .ldt ne contient pas de media", ending='')
                         infos.write("le .ldt ne contient pas de media")
                         continue