# HG changeset patch # User bellierp # Date 1489685144 -3600 # Node ID c3998a528fd9464f83dff1b4d2620846bbf6be50 # Parent 14c6519314910c537d67ce5c9430ddf9c4fa68d8 delete well formed source links videopaths, check youtube videos, change m4v source links diff -r 14c651931491 -r c3998a528fd9 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