src/ldtplatform/management/commands/importamateur.py
author bellierp
Thu, 06 Apr 2017 12:52:56 +0200
changeset 335 c7a01f03c19c
child 336 ff3b847c14a2
permissions -rw-r--r--
add importamateur command
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
335
c7a01f03c19c add importamateur command
bellierp
parents:
diff changeset
     1
'''
c7a01f03c19c add importamateur command
bellierp
parents:
diff changeset
     2
Imports amateur.iri.centrepompidou.fr/nouveaumonde files to ldt.iri
c7a01f03c19c add importamateur command
bellierp
parents:
diff changeset
     3
'''
c7a01f03c19c add importamateur command
bellierp
parents:
diff changeset
     4
import csv
c7a01f03c19c add importamateur command
bellierp
parents:
diff changeset
     5
import sys
c7a01f03c19c add importamateur command
bellierp
parents:
diff changeset
     6
c7a01f03c19c add importamateur command
bellierp
parents:
diff changeset
     7
import requests
c7a01f03c19c add importamateur command
bellierp
parents:
diff changeset
     8
from django.core.management.base import BaseCommand
c7a01f03c19c add importamateur command
bellierp
parents:
diff changeset
     9
from django.core import management
c7a01f03c19c add importamateur command
bellierp
parents:
diff changeset
    10
from lxml import etree
c7a01f03c19c add importamateur command
bellierp
parents:
diff changeset
    11
from django.db import connections
c7a01f03c19c add importamateur command
bellierp
parents:
diff changeset
    12
from ldt.ldt_utils import models
c7a01f03c19c add importamateur command
bellierp
parents:
diff changeset
    13
c7a01f03c19c add importamateur command
bellierp
parents:
diff changeset
    14
c7a01f03c19c add importamateur command
bellierp
parents:
diff changeset
    15
def create_source(iri_id):
c7a01f03c19c add importamateur command
bellierp
parents:
diff changeset
    16
    '''
c7a01f03c19c add importamateur command
bellierp
parents:
diff changeset
    17
    create .iri source
c7a01f03c19c add importamateur command
bellierp
parents:
diff changeset
    18
    '''
c7a01f03c19c add importamateur command
bellierp
parents:
diff changeset
    19
    return "https://media.iri.centrepompidou.fr/video/enmi/" + iri_id + ".mp4"
c7a01f03c19c add importamateur command
bellierp
parents:
diff changeset
    20
def create_iri_url(iri_url):
c7a01f03c19c add importamateur command
bellierp
parents:
diff changeset
    21
    '''
c7a01f03c19c add importamateur command
bellierp
parents:
diff changeset
    22
    create iri url
c7a01f03c19c add importamateur command
bellierp
parents:
diff changeset
    23
    '''
c7a01f03c19c add importamateur command
bellierp
parents:
diff changeset
    24
    return "http://amateur.iri.centrepompidou.fr" + iri_url
c7a01f03c19c add importamateur command
bellierp
parents:
diff changeset
    25
c7a01f03c19c add importamateur command
bellierp
parents:
diff changeset
    26
c7a01f03c19c add importamateur command
bellierp
parents:
diff changeset
    27
class Command(BaseCommand):
c7a01f03c19c add importamateur command
bellierp
parents:
diff changeset
    28
    '''
c7a01f03c19c add importamateur command
bellierp
parents:
diff changeset
    29
    command
c7a01f03c19c add importamateur command
bellierp
parents:
diff changeset
    30
    '''
c7a01f03c19c add importamateur command
bellierp
parents:
diff changeset
    31
    def add_arguments(self, parser):
c7a01f03c19c add importamateur command
bellierp
parents:
diff changeset
    32
        '''
c7a01f03c19c add importamateur command
bellierp
parents:
diff changeset
    33
        add arguments
c7a01f03c19c add importamateur command
bellierp
parents:
diff changeset
    34
        '''
c7a01f03c19c add importamateur command
bellierp
parents:
diff changeset
    35
c7a01f03c19c add importamateur command
bellierp
parents:
diff changeset
    36
        parser.add_argument('-i',
c7a01f03c19c add importamateur command
bellierp
parents:
diff changeset
    37
                            '--pathin',
c7a01f03c19c add importamateur command
bellierp
parents:
diff changeset
    38
                            dest='pathin',
c7a01f03c19c add importamateur command
bellierp
parents:
diff changeset
    39
                            default=None
c7a01f03c19c add importamateur command
bellierp
parents:
diff changeset
    40
                           )
c7a01f03c19c add importamateur command
bellierp
parents:
diff changeset
    41
        parser.add_argument('-o',
c7a01f03c19c add importamateur command
bellierp
parents:
diff changeset
    42
                            '--pathout',
c7a01f03c19c add importamateur command
bellierp
parents:
diff changeset
    43
                            dest='pathout',
c7a01f03c19c add importamateur command
bellierp
parents:
diff changeset
    44
                            default=None
c7a01f03c19c add importamateur command
bellierp
parents:
diff changeset
    45
                           )
c7a01f03c19c add importamateur command
bellierp
parents:
diff changeset
    46
c7a01f03c19c add importamateur command
bellierp
parents:
diff changeset
    47
    def get_duration(self, elem):
c7a01f03c19c add importamateur command
bellierp
parents:
diff changeset
    48
        '''
c7a01f03c19c add importamateur command
bellierp
parents:
diff changeset
    49
        get duration
c7a01f03c19c add importamateur command
bellierp
parents:
diff changeset
    50
        '''
c7a01f03c19c add importamateur command
bellierp
parents:
diff changeset
    51
        for element in self.mylist:
c7a01f03c19c add importamateur command
bellierp
parents:
diff changeset
    52
            element[0] = element[0][:len(element[0])-1]
c7a01f03c19c add importamateur command
bellierp
parents:
diff changeset
    53
            if elem == element[0]:
c7a01f03c19c add importamateur command
bellierp
parents:
diff changeset
    54
                element[1] = element[1][1:]
c7a01f03c19c add importamateur command
bellierp
parents:
diff changeset
    55
                root = etree.XML(element[1].encode('utf-8'), self.parser)
c7a01f03c19c add importamateur command
bellierp
parents:
diff changeset
    56
                duration = root.xpath('format')[0].get('duration')
c7a01f03c19c add importamateur command
bellierp
parents:
diff changeset
    57
                duration = duration[:7]
c7a01f03c19c add importamateur command
bellierp
parents:
diff changeset
    58
                return duration
c7a01f03c19c add importamateur command
bellierp
parents:
diff changeset
    59
c7a01f03c19c add importamateur command
bellierp
parents:
diff changeset
    60
    def change_annotations(self, iriin, ldtout):
c7a01f03c19c add importamateur command
bellierp
parents:
diff changeset
    61
        '''
c7a01f03c19c add importamateur command
bellierp
parents:
diff changeset
    62
        change annotations
c7a01f03c19c add importamateur command
bellierp
parents:
diff changeset
    63
        '''
c7a01f03c19c add importamateur command
bellierp
parents:
diff changeset
    64
        rootout = etree.XML(ldtout.encode('utf-8'), self.parser)
c7a01f03c19c add importamateur command
bellierp
parents:
diff changeset
    65
        rootin = etree.XML(iriin.encode('utf-8'), self.parser)
c7a01f03c19c add importamateur command
bellierp
parents:
diff changeset
    66
        ensembles = rootin.xpath('body/ensembles/ensemble')
c7a01f03c19c add importamateur command
bellierp
parents:
diff changeset
    67
        for ensemble in ensembles:
c7a01f03c19c add importamateur command
bellierp
parents:
diff changeset
    68
            idens = ensemble.get("id")
c7a01f03c19c add importamateur command
bellierp
parents:
diff changeset
    69
            decoups = ensemble.xpath('decoupage')
c7a01f03c19c add importamateur command
bellierp
parents:
diff changeset
    70
            rootout.xpath('annotations/content')[0].append(ensemble)
c7a01f03c19c add importamateur command
bellierp
parents:
diff changeset
    71
            for decoup in decoups:
c7a01f03c19c add importamateur command
bellierp
parents:
diff changeset
    72
                iddec = decoup.get("id")
c7a01f03c19c add importamateur command
bellierp
parents:
diff changeset
    73
                nouveaudecoup = '<decoupage idens=\"' + idens +'\" id=\"' + iddec +'\" tagsSelect=\"\"/>'
c7a01f03c19c add importamateur command
bellierp
parents:
diff changeset
    74
                nouveaudecxml = etree.fromstring(nouveaudecoup)
c7a01f03c19c add importamateur command
bellierp
parents:
diff changeset
    75
                rootout.xpath('displays/display/content')[0].append(nouveaudecxml)
c7a01f03c19c add importamateur command
bellierp
parents:
diff changeset
    76
        return etree.tostring(rootout)
c7a01f03c19c add importamateur command
bellierp
parents:
diff changeset
    77
    def handle(self, *args, **options):
c7a01f03c19c add importamateur command
bellierp
parents:
diff changeset
    78
        '''
c7a01f03c19c add importamateur command
bellierp
parents:
diff changeset
    79
        handle command
c7a01f03c19c add importamateur command
bellierp
parents:
diff changeset
    80
        '''
c7a01f03c19c add importamateur command
bellierp
parents:
diff changeset
    81
        pathin = options['pathin']
c7a01f03c19c add importamateur command
bellierp
parents:
diff changeset
    82
        pathout = options['pathout']
c7a01f03c19c add importamateur command
bellierp
parents:
diff changeset
    83
        if not pathin or not pathout:
c7a01f03c19c add importamateur command
bellierp
parents:
diff changeset
    84
            return "Error : specify path in and path out"
c7a01f03c19c add importamateur command
bellierp
parents:
diff changeset
    85
        try:
c7a01f03c19c add importamateur command
bellierp
parents:
diff changeset
    86
            csvfile = open(pathin, 'r')
c7a01f03c19c add importamateur command
bellierp
parents:
diff changeset
    87
            csvfile2 = open(pathout, 'wb')
c7a01f03c19c add importamateur command
bellierp
parents:
diff changeset
    88
        except IOError:
c7a01f03c19c add importamateur command
bellierp
parents:
diff changeset
    89
            self.stdout.write('file can\'t be opened')
c7a01f03c19c add importamateur command
bellierp
parents:
diff changeset
    90
            return
c7a01f03c19c add importamateur command
bellierp
parents:
diff changeset
    91
c7a01f03c19c add importamateur command
bellierp
parents:
diff changeset
    92
        cursor = connections['default2'].cursor()
c7a01f03c19c add importamateur command
bellierp
parents:
diff changeset
    93
        cursor.execute('SELECT ct.iri_id, ct.iriurl, ct.creation_date, ct.title, ct.description,\
c7a01f03c19c add importamateur command
bellierp
parents:
diff changeset
    94
                        pj.ldt_id, pj.ldt\
c7a01f03c19c add importamateur command
bellierp
parents:
diff changeset
    95
                        FROM ldt_content AS ct INNER JOIN ldt_ldtproject_contents\
c7a01f03c19c add importamateur command
bellierp
parents:
diff changeset
    96
                        AS ctpj ON ct.id = ctpj.content_id\
c7a01f03c19c add importamateur command
bellierp
parents:
diff changeset
    97
                        INNER JOIN ldt_ldtproject AS pj ON ctpj.ldtproject_id = pj.id;'
c7a01f03c19c add importamateur command
bellierp
parents:
diff changeset
    98
                      )
c7a01f03c19c add importamateur command
bellierp
parents:
diff changeset
    99
        amateurdata = cursor.fetchall()
c7a01f03c19c add importamateur command
bellierp
parents:
diff changeset
   100
        reload(sys)
c7a01f03c19c add importamateur command
bellierp
parents:
diff changeset
   101
        sys.setdefaultencoding('utf8')
c7a01f03c19c add importamateur command
bellierp
parents:
diff changeset
   102
        self.parser = etree.XMLParser(encoding='utf-8')
c7a01f03c19c add importamateur command
bellierp
parents:
diff changeset
   103
        self.myfile = csv.reader(csvfile)
c7a01f03c19c add importamateur command
bellierp
parents:
diff changeset
   104
        self.writefile = csv.writer(csvfile2)
c7a01f03c19c add importamateur command
bellierp
parents:
diff changeset
   105
        self.mylist = list(self.myfile)
c7a01f03c19c add importamateur command
bellierp
parents:
diff changeset
   106
        for mediaproj in amateurdata:
c7a01f03c19c add importamateur command
bellierp
parents:
diff changeset
   107
            iri_id = mediaproj[0]
c7a01f03c19c add importamateur command
bellierp
parents:
diff changeset
   108
            try:
c7a01f03c19c add importamateur command
bellierp
parents:
diff changeset
   109
                models.Project.objects.get(title='front project : %s' % iri_id)
c7a01f03c19c add importamateur command
bellierp
parents:
diff changeset
   110
                continue
c7a01f03c19c add importamateur command
bellierp
parents:
diff changeset
   111
            except models.Project.MultipleObjectsReturned:
c7a01f03c19c add importamateur command
bellierp
parents:
diff changeset
   112
                continue
c7a01f03c19c add importamateur command
bellierp
parents:
diff changeset
   113
            except models.Project.DoesNotExist:
c7a01f03c19c add importamateur command
bellierp
parents:
diff changeset
   114
                self.stdout.write('Media %s will be created'%iri_id)
c7a01f03c19c add importamateur command
bellierp
parents:
diff changeset
   115
            iriurl = mediaproj[1]
c7a01f03c19c add importamateur command
bellierp
parents:
diff changeset
   116
            #TODO set creationdate, title...
c7a01f03c19c add importamateur command
bellierp
parents:
diff changeset
   117
            # creationdate = mediaproj[2]
c7a01f03c19c add importamateur command
bellierp
parents:
diff changeset
   118
            # title = mediaproj[3]
c7a01f03c19c add importamateur command
bellierp
parents:
diff changeset
   119
            description = mediaproj[4]
c7a01f03c19c add importamateur command
bellierp
parents:
diff changeset
   120
            # ldt_id = mediaproj[5]
c7a01f03c19c add importamateur command
bellierp
parents:
diff changeset
   121
            # ldt = mediaproj[6]
c7a01f03c19c add importamateur command
bellierp
parents:
diff changeset
   122
            mysource = create_source(iri_id)
c7a01f03c19c add importamateur command
bellierp
parents:
diff changeset
   123
            myiriurl = create_iri_url(iriurl)
c7a01f03c19c add importamateur command
bellierp
parents:
diff changeset
   124
            myiri = requests.get(myiriurl)._content
c7a01f03c19c add importamateur command
bellierp
parents:
diff changeset
   125
            duration = self.get_duration(mysource)
c7a01f03c19c add importamateur command
bellierp
parents:
diff changeset
   126
            if requests.head(mysource).status_code == 200:
c7a01f03c19c add importamateur command
bellierp
parents:
diff changeset
   127
                management.call_command(
c7a01f03c19c add importamateur command
bellierp
parents:
diff changeset
   128
                    'createmediacontent',
c7a01f03c19c add importamateur command
bellierp
parents:
diff changeset
   129
                    source=mysource,
c7a01f03c19c add importamateur command
bellierp
parents:
diff changeset
   130
                    title=iri_id,
c7a01f03c19c add importamateur command
bellierp
parents:
diff changeset
   131
                    videopath='',
c7a01f03c19c add importamateur command
bellierp
parents:
diff changeset
   132
                    description=description,
c7a01f03c19c add importamateur command
bellierp
parents:
diff changeset
   133
                    duration=duration,
c7a01f03c19c add importamateur command
bellierp
parents:
diff changeset
   134
                    public=True,
c7a01f03c19c add importamateur command
bellierp
parents:
diff changeset
   135
                    creator='admin',
c7a01f03c19c add importamateur command
bellierp
parents:
diff changeset
   136
                    update=True
c7a01f03c19c add importamateur command
bellierp
parents:
diff changeset
   137
                    )
c7a01f03c19c add importamateur command
bellierp
parents:
diff changeset
   138
                myfrontproj = models.Project.objects.get(title='front project : %s' % iri_id)
c7a01f03c19c add importamateur command
bellierp
parents:
diff changeset
   139
                myfrontproj.ldt = self.change_annotations(myiri, myfrontproj.ldt)
c7a01f03c19c add importamateur command
bellierp
parents:
diff changeset
   140
                self.writefile.writerow([mysource,
c7a01f03c19c add importamateur command
bellierp
parents:
diff changeset
   141
                                         iri_id,
c7a01f03c19c add importamateur command
bellierp
parents:
diff changeset
   142
                                         models.Content.objects.get(title=iri_id).iri_id,
c7a01f03c19c add importamateur command
bellierp
parents:
diff changeset
   143
                                         myfrontproj.ldt_id
c7a01f03c19c add importamateur command
bellierp
parents:
diff changeset
   144
                                        ])
c7a01f03c19c add importamateur command
bellierp
parents:
diff changeset
   145
                self.stdout.write("Project changed")
c7a01f03c19c add importamateur command
bellierp
parents:
diff changeset
   146
                myfrontproj.save()
c7a01f03c19c add importamateur command
bellierp
parents:
diff changeset
   147
        csvfile.close()
c7a01f03c19c add importamateur command
bellierp
parents:
diff changeset
   148
        csvfile2.close()