change method names + new option (path)
authorbellierp
Thu, 30 Mar 2017 16:17:24 +0200
changeset 333 77b56a7aaa7e
parent 332 324717f075f9
child 334 0ddcaaf893e9
change method names + new option (path)
src/ldtplatform/management/commands/replacedelete.py
--- a/src/ldtplatform/management/commands/replacedelete.py	Fri Mar 24 15:03:50 2017 +0100
+++ b/src/ldtplatform/management/commands/replacedelete.py	Thu Mar 30 16:17:24 2017 +0200
@@ -18,7 +18,7 @@
 
 #this function replace bad suffixs and prefixs of some media URL
 #by a new one, beginning with "http" and ending with ".mp4"
-def tohttps(source, vidpath, tomp4=1):
+def to_https(source, vidpath, tomp4=1):
     '''
     to https
     '''
@@ -46,22 +46,22 @@
     return "https://media.iri.centrepompidou.fr/video/ldtplatform/"+source
 
 
-def numberofcontents(source):    #this counts the number of contents linked to a media
+def number_of_contents(source):    #this counts the number of contents linked to a media
     '''
-    numberofcontents
+    number_of_contents
     '''
     return len(models.Content.objects.filter(media_obj_id=source.id))
 
-def numberofproject(source):
+def number_of_projects(source):
     '''
-    numberofproject
+    number_of_projects
     '''
-    if numberofcontents(source) > 0:
+    if number_of_contents(source) > 0:
         return len(models.Project.objects.filter\
                 (content=models.Content.objects.filter(media_obj_id=source.id)[0]))
     return 0
 
-def constructytembed(source):
+def construct_youtube_embed(source):
     '''
     construct youtube video oembed link
     '''
@@ -75,22 +75,33 @@
     Command class
     '''
     help = 'delete medias without contents, replace media\'s source by a new URL'
-    base_url = Site.objects.get_current().domain + settings.BASE_URL
-    parser = etree.XMLParser(encoding='utf-8')
-    logger = logging.getLogger(__name__)
-    csvfile = open('mediaInformations.csv', 'wb')
-    mycsvfile = csv.writer(csvfile)
 
-    def constructldtembed(self, ldtid):
+    def add_arguments(self, parser):
+        '''
+        add arguments
+        '''
+        parser.add_argument('-f',
+                            '--force',
+                            dest='force',
+                            action='store_true'
+                            )
+        parser.add_argument('-p',
+                            '--path',
+                            dest='path',
+                            default=None
+                            )
+
+
+    def construct_ldt_embed(self, ldtid):
         '''
         construct ldt embed
         '''
         return "http://{base_url}ldtplatform/ldt/embed/v3/config?json_url=" \
                    "http://{base_url}ldtplatform/ldt/cljson/id/{ldt_id}&" \
                    "player_id=player_project_{ldt_id}&" \
-                   "ldt_id={ldt_id}".format(base_url=Command.base_url, ldt_id=ldtid)
+                   "ldt_id={ldt_id}".format(base_url=self.base_url, ldt_id=ldtid)
 
-    def cleanmediaproject(self, element, force, newsrc=None):
+    def clean_media_project(self, element, force, newsrc=None):
         '''
         change media objects' videopath and source if necessary
         change project .ldt
@@ -103,15 +114,15 @@
             if force:
                 element.src = newsrc
                 element.save()
-            Command.mycsvfile.writerow([
+            self.mycsvfile.writerow([
                 "Media",
                 basesrc,
                 "Yes",
                 "changing source/videopath",
                 newsrc, "\'\'"
                 ])
-        if numberofproject(element) == 0:
-            Command.mycsvfile.writerow([
+        if number_of_projects(element) == 0:
+            self.mycsvfile.writerow([
                 "Project",
                 element.src,
                 "Yes",
@@ -122,12 +133,12 @@
                 try:
                     management.call_command('initfrontproject', mycontentid)
                 except Exception:
-                    Command.mycsvfile.writerow([
-                    "Project",
-                    element.src,
-                    "No",
-                    "socket error"
-                    ])
+                    self.mycsvfile.writerow([
+                        "Project",
+                        element.src,
+                        "No",
+                        "socket error"
+                        ])
                     return
                 self.stdout.write(" Initializing project", ending='')
             else:
@@ -136,16 +147,16 @@
         ldtproj = models.Project.objects.filter\
         (content=models.Content.objects.filter(media_obj_id=element.id)[0])
         for singleproject in ldtproj:
-            root = etree.XML(singleproject.ldt.encode('utf-8'), Command.parser)
+            root = etree.XML(singleproject.ldt.encode('utf-8'), self.parser)
             if root.xpath('medias/media') == []:
                 self.stdout.write(" le .ldt ne contient pas de media", ending='')
                 continue
             if root.xpath('medias/media')[0].get("video") != '':
-                embedurl = self.constructldtembed(singleproject.ldt_id)
+                embedurl = self.construct_ldt_embed(singleproject.ldt_id)
                 if force:
                     root.xpath('medias/media')[0].set("video", '')
-                self.stdout.write(" changing videopath arg in .ldt ")
-                Command.mycsvfile.writerow([
+                self.stdout.write(" changing videopath arg in .ldt ", ending='')
+                self.mycsvfile.writerow([
                     "Project",
                     embedurl,
                     "Yes",
@@ -154,39 +165,47 @@
                     ])
                 singleproject.ldt = etree.tostring(root)
                 singleproject.save()
-                Command.logger.info("%s DONE\n", embedurl)
+                self.logger.info("%s DONE\n", embedurl)
         element.save()
 
-    def add_arguments(self, parser):
-        '''
-        add arguments
-        '''
-        parser.add_argument('-f', action='store_true')
+
 
     def handle(self, *args, **options):
         '''
         handle
         '''
-        Command.mycsvfile.writerow([
+        self.base_url = Site.objects.get_current().domain + settings.BASE_URL
+        self.parser = etree.XMLParser(encoding='utf-8')
+        self.logger = logging.getLogger(__name__)
+        path = options['path']
+        force = options['force']
+        if not path:
+            path = 'mediaInformations.csv'
+        try:
+            csvfile = open(path, 'wb')
+        except IOError:
+            self.stdout.write('file can\'t be opened')
+            self.logger.error('cant open file')
+            return
+        self.mycsvfile = csv.writer(csvfile)
+        self.mycsvfile.writerow([
             "Object type",
             "which object",
             "Change ?",
             "What(if Y)/Why (if N)",
             "How"
             ])
-
-        force = bool(options['f'])
         j = 0
         files1 = models.Media.objects.all() #this list contains every media
         for elem1 in files1:
-            if numberofcontents(elem1) == 0:
+            if number_of_contents(elem1) == 0:
                 if force:
                     elem1.delete()  #if there is no content
                     #linked to the media, the media is removed for the database
                     self.stdout.write(" No content found, media has been removed")
                 else:
                     self.stdout.write(" No content found, media will be removed")
-                Command.mycsvfile.writerow([
+                self.mycsvfile.writerow([
                     "Media",
                     elem1.src,
                     "Yes",
@@ -194,23 +213,23 @@
                     ])
                 j += 1
                 continue
-            if elem1.src.lower() == tohttps(elem1.src, elem1.videopath).lower():
-                self.cleanmediaproject(elem1, force)
+            if elem1.src.lower() == to_https(elem1.src, elem1.videopath).lower():
+                self.clean_media_project(elem1, force)
             if re.match(r".*\.youtube\.com.*", elem1.src) != None\
             or re.match(r".*youtu\.be.+", elem1.src) != None:
-                myembed = constructytembed(elem1.src)
+                myembed = construct_youtube_embed(elem1.src)
                 if requests.get(myembed).status_code == 404:
                     self.stdout.write("%s : Video doesn't exists"% elem1.src)
-                    if numberofproject(elem1) > 0:
+                    if number_of_projects(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'), Command.parser)
+                        root = etree.XML(ldtproj.encode('utf-8'), self.parser)
                         if root.xpath('annotations/content/ensemble/decoupage/elements/element')\
                         == []:
                             if force:
                                 elem1.delete()
                                 self.stdout.write("video doesn't exist anymore : media deleted")
-                            Command.mycsvfile.writerow([
+                            self.mycsvfile.writerow([
                                 "Media/Content/Project",
                                 elem1.src,
                                 "Yes",
@@ -218,7 +237,7 @@
                                 ])
                             j += 1
                 else:
-                    self.cleanmediaproject(elem1,force)
+                    self.clean_media_project(elem1, force)
         if force:
             self.stdout.write("%s files deleted"%j)
         else:
@@ -235,19 +254,19 @@
         for elem in files:
             self.stdout.write(" \n%s/%s files done"%(i+1, len(files)), ending='')
             i += 1
-            if numberofcontents(elem) == 0:
+            if number_of_contents(elem) == 0:
                 continue
             mysrc = elem.src
-            newsource = tohttps(elem.src, elem.videopath)
+            newsource = to_https(elem.src, elem.videopath)
             try:
                 res = requests.head(newsource, timeout=10).status_code
             except requests.ConnectionError:
                 self.stdout.write(" connection error", ending='')
-                Command.logger.error("CONNECTION ERROR FOR %s", elem.title)
+                self.logger.error("CONNECTION ERROR FOR %s", elem.title)
                 try:
                     res = requests.head(elem, timeout=10).status_code
                 except requests.ConnectionError:
-                    Command.mycsvfile.writerow([
+                    self.mycsvfile.writerow([
                         "Media",
                         mysrc,
                         "No",
@@ -256,7 +275,7 @@
                         ])
                     continue
                 except (requests.exceptions.MissingSchema, requests.exceptions.InvalidSchema):
-                    Command.mycsvfile.writerow([
+                    self.mycsvfile.writerow([
                         "Media",
                         mysrc,
                         "No",
@@ -265,7 +284,7 @@
                         ])
                     continue
                 except requests.exceptions.Timeout:
-                    Command.mycsvfile.writerow([
+                    self.mycsvfile.writerow([
                         "Media",
                         mysrc,
                         "No",
@@ -274,7 +293,7 @@
                         ])
                     continue
                 else:
-                    Command.mycsvfile.writerow([
+                    self.mycsvfile.writerow([
                         "Media",
                         mysrc,
                         "No",
@@ -284,8 +303,8 @@
                     continue
             except (requests.exceptions.MissingSchema, requests.exceptions.InvalidSchema):
                 self.stdout.write(" Missing schema !", ending='')
-                Command.logger.warning("MISSING SCHEMA FOR %s", elem.title)
-                Command.mycsvfile.writerow([
+                self.logger.warning("MISSING SCHEMA FOR %s", elem.title)
+                self.mycsvfile.writerow([
                     "Media",
                     mysrc,
                     "No",
@@ -295,8 +314,8 @@
                 continue
             except requests.exceptions.Timeout:
                 self.stdout.write(" Timeout !", ending='')
-                Command.logger.warning("Timeout FOR %s", elem.title)
-                Command.mycsvfile.writerow([
+                self.logger.warning("Timeout FOR %s", elem.title)
+                self.mycsvfile.writerow([
                     "Media",
                     mysrc,
                     "No",
@@ -306,13 +325,13 @@
                 continue
             if res > 400:
                 try:
-                    ressrc = requests.head(tohttps(elem.src, elem.videopath, 0),\
+                    ressrc = requests.head(to_https(elem.src, elem.videopath, 0),\
                     timeout=10).status_code
                 except (requests.exceptions.Timeout, requests.ConnectionError):
                     self.stdout.write(" can't access source/new files", ending='')
-                    Command.logger.warning("can't access %s", elem.title)
+                    self.logger.warning("can't access %s", elem.title)
                     res = "connection error"
-                    Command.mycsvfile.writerow([
+                    self.mycsvfile.writerow([
                         "Media",
                         mysrc,
                         "No",
@@ -322,8 +341,8 @@
                     continue
                 if ressrc == 404:
                     self.stdout.write(" can't access source/new files", ending='')
-                    Command.logger.warning("can't access %s", elem.title)
-                    Command.mycsvfile.writerow([
+                    self.logger.warning("can't access %s", elem.title)
+                    self.mycsvfile.writerow([
                         "Media",
                         mysrc,
                         "No",
@@ -333,10 +352,10 @@
                 elif ressrc == 200:
                     self.stdout.write(
                         " file not transcoded yet :"
-                        "keep source extension or wait transcoding to be done",
+                        "keep source extension or wait transcoding to be done",\
                         ending='')
-                    Command.logger.warning("%s not transcoded yet", elem.title)
-                    Command.mycsvfile.writerow([
+                    self.logger.warning("%s not transcoded yet", elem.title)
+                    self.mycsvfile.writerow([
                         "Media",
                         mysrc,
                         "No",
@@ -352,13 +371,13 @@
                     break
             if alreadyin:
                 self.stdout.write(" element already in table", ending='')
-                Command.logger.warning("%s already in table", elem.title)
-                Command.mycsvfile.writerow([
+                self.logger.warning("%s already in table", elem.title)
+                self.mycsvfile.writerow([
                     "Media",
                     newsource,
                     "No",
                     "new source already in table"
                     ])
                 continue
-            self.cleanmediaproject(elem, force, newsource)
-        Command.csvfile.close()
+            self.clean_media_project(elem, force, newsource)
+        csvfile.close()