src/ldt/ldt/management/commands/createmediacontent.py
author ymh <ymh.work@gmail.com>
Thu, 23 Apr 2020 16:02:21 +0200
changeset 1499 06ad9be0454f
parent 1497 c42847c334a0
child 1501 f7599fdc8810
permissions -rw-r--r--
Correct duration parsing on createmediacontent command.
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
1357
dd3b4c9d5035 add command to create media and content
ymh <ymh.work@gmail.com>
parents:
diff changeset
     1
# -*- coding: utf-8 -*-
dd3b4c9d5035 add command to create media and content
ymh <ymh.work@gmail.com>
parents:
diff changeset
     2
'''
dd3b4c9d5035 add command to create media and content
ymh <ymh.work@gmail.com>
parents:
diff changeset
     3
Created on Apr 10, 2015
dd3b4c9d5035 add command to create media and content
ymh <ymh.work@gmail.com>
parents:
diff changeset
     4
dd3b4c9d5035 add command to create media and content
ymh <ymh.work@gmail.com>
parents:
diff changeset
     5
@author: ymh
dd3b4c9d5035 add command to create media and content
ymh <ymh.work@gmail.com>
parents:
diff changeset
     6
'''
dd3b4c9d5035 add command to create media and content
ymh <ymh.work@gmail.com>
parents:
diff changeset
     7
1497
c42847c334a0 add option media creation date in createmediacontent
ymh <ymh.work@gmail.com>
parents: 1402
diff changeset
     8
import dateutil.parser
1357
dd3b4c9d5035 add command to create media and content
ymh <ymh.work@gmail.com>
parents:
diff changeset
     9
import logging
dd3b4c9d5035 add command to create media and content
ymh <ymh.work@gmail.com>
parents:
diff changeset
    10
from optparse import make_option
1499
06ad9be0454f Correct duration parsing on createmediacontent command.
ymh <ymh.work@gmail.com>
parents: 1497
diff changeset
    11
import re
1357
dd3b4c9d5035 add command to create media and content
ymh <ymh.work@gmail.com>
parents:
diff changeset
    12
import time
dd3b4c9d5035 add command to create media and content
ymh <ymh.work@gmail.com>
parents:
diff changeset
    13
import urlparse
dd3b4c9d5035 add command to create media and content
ymh <ymh.work@gmail.com>
parents:
diff changeset
    14
dd3b4c9d5035 add command to create media and content
ymh <ymh.work@gmail.com>
parents:
diff changeset
    15
from django.conf import settings
dd3b4c9d5035 add command to create media and content
ymh <ymh.work@gmail.com>
parents:
diff changeset
    16
from django.contrib.auth import get_user_model
dd3b4c9d5035 add command to create media and content
ymh <ymh.work@gmail.com>
parents:
diff changeset
    17
from django.contrib.auth.models import Group
dd3b4c9d5035 add command to create media and content
ymh <ymh.work@gmail.com>
parents:
diff changeset
    18
from django.core.management.base import BaseCommand, CommandError
dd3b4c9d5035 add command to create media and content
ymh <ymh.work@gmail.com>
parents:
diff changeset
    19
from guardian.shortcuts import remove_perm
dd3b4c9d5035 add command to create media and content
ymh <ymh.work@gmail.com>
parents:
diff changeset
    20
dd3b4c9d5035 add command to create media and content
ymh <ymh.work@gmail.com>
parents:
diff changeset
    21
from ldt.ldt_utils.models import Content, Media
dd3b4c9d5035 add command to create media and content
ymh <ymh.work@gmail.com>
parents:
diff changeset
    22
from ldt.ldt_utils.stat import update_stat_content
dd3b4c9d5035 add command to create media and content
ymh <ymh.work@gmail.com>
parents:
diff changeset
    23
from ldt.ldt_utils.utils import generate_uuid
dd3b4c9d5035 add command to create media and content
ymh <ymh.work@gmail.com>
parents:
diff changeset
    24
from ldt.security.cache import cached_assign
dd3b4c9d5035 add command to create media and content
ymh <ymh.work@gmail.com>
parents:
diff changeset
    25
from ldt.security.utils import assign_perm_to_obj
dd3b4c9d5035 add command to create media and content
ymh <ymh.work@gmail.com>
parents:
diff changeset
    26
dd3b4c9d5035 add command to create media and content
ymh <ymh.work@gmail.com>
parents:
diff changeset
    27
dd3b4c9d5035 add command to create media and content
ymh <ymh.work@gmail.com>
parents:
diff changeset
    28
logger = logging.getLogger(__name__)
dd3b4c9d5035 add command to create media and content
ymh <ymh.work@gmail.com>
parents:
diff changeset
    29
dd3b4c9d5035 add command to create media and content
ymh <ymh.work@gmail.com>
parents:
diff changeset
    30
dd3b4c9d5035 add command to create media and content
ymh <ymh.work@gmail.com>
parents:
diff changeset
    31
class Command(BaseCommand):
1497
c42847c334a0 add option media creation date in createmediacontent
ymh <ymh.work@gmail.com>
parents: 1402
diff changeset
    32
1357
dd3b4c9d5035 add command to create media and content
ymh <ymh.work@gmail.com>
parents:
diff changeset
    33
    formats = ["%M:%S", "%H:%M:%S", "%Hh%M", "%Ss", "%Ssec", "%Mmn %Ss"]
1497
c42847c334a0 add option media creation date in createmediacontent
ymh <ymh.work@gmail.com>
parents: 1402
diff changeset
    34
1357
dd3b4c9d5035 add command to create media and content
ymh <ymh.work@gmail.com>
parents:
diff changeset
    35
    def get_duration(self, value):
dd3b4c9d5035 add command to create media and content
ymh <ymh.work@gmail.com>
parents:
diff changeset
    36
        dur = None
dd3b4c9d5035 add command to create media and content
ymh <ymh.work@gmail.com>
parents:
diff changeset
    37
        for f in self.formats:
1499
06ad9be0454f Correct duration parsing on createmediacontent command.
ymh <ymh.work@gmail.com>
parents: 1497
diff changeset
    38
            if f.startswith("%Ss"):
06ad9be0454f Correct duration parsing on createmediacontent command.
ymh <ymh.work@gmail.com>
parents: 1497
diff changeset
    39
                m = re.search("(\d+)s(?:ec)?", value)
06ad9be0454f Correct duration parsing on createmediacontent command.
ymh <ymh.work@gmail.com>
parents: 1497
diff changeset
    40
                if m:
06ad9be0454f Correct duration parsing on createmediacontent command.
ymh <ymh.work@gmail.com>
parents: 1497
diff changeset
    41
                    dur = int(m.group(1))*1000
06ad9be0454f Correct duration parsing on createmediacontent command.
ymh <ymh.work@gmail.com>
parents: 1497
diff changeset
    42
                    break
06ad9be0454f Correct duration parsing on createmediacontent command.
ymh <ymh.work@gmail.com>
parents: 1497
diff changeset
    43
            else:
06ad9be0454f Correct duration parsing on createmediacontent command.
ymh <ymh.work@gmail.com>
parents: 1497
diff changeset
    44
                try:
06ad9be0454f Correct duration parsing on createmediacontent command.
ymh <ymh.work@gmail.com>
parents: 1497
diff changeset
    45
                    dur = time.strptime(value, f)
06ad9be0454f Correct duration parsing on createmediacontent command.
ymh <ymh.work@gmail.com>
parents: 1497
diff changeset
    46
                    dur = (dur.tm_hour*3600 + dur.tm_min*60 + dur.tm_sec) * 1000
06ad9be0454f Correct duration parsing on createmediacontent command.
ymh <ymh.work@gmail.com>
parents: 1497
diff changeset
    47
                    break
06ad9be0454f Correct duration parsing on createmediacontent command.
ymh <ymh.work@gmail.com>
parents: 1497
diff changeset
    48
                except:
06ad9be0454f Correct duration parsing on createmediacontent command.
ymh <ymh.work@gmail.com>
parents: 1497
diff changeset
    49
                    pass
1357
dd3b4c9d5035 add command to create media and content
ymh <ymh.work@gmail.com>
parents:
diff changeset
    50
        return dur
dd3b4c9d5035 add command to create media and content
ymh <ymh.work@gmail.com>
parents:
diff changeset
    51
1497
c42847c334a0 add option media creation date in createmediacontent
ymh <ymh.work@gmail.com>
parents: 1402
diff changeset
    52
1357
dd3b4c9d5035 add command to create media and content
ymh <ymh.work@gmail.com>
parents:
diff changeset
    53
    help = 'Create a content (and Media)'
dd3b4c9d5035 add command to create media and content
ymh <ymh.work@gmail.com>
parents:
diff changeset
    54
    option_list = BaseCommand.option_list + (
dd3b4c9d5035 add command to create media and content
ymh <ymh.work@gmail.com>
parents:
diff changeset
    55
dd3b4c9d5035 add command to create media and content
ymh <ymh.work@gmail.com>
parents:
diff changeset
    56
        #TODO: source is compulsory
dd3b4c9d5035 add command to create media and content
ymh <ymh.work@gmail.com>
parents:
diff changeset
    57
        make_option("-s", "--source",
dd3b4c9d5035 add command to create media and content
ymh <ymh.work@gmail.com>
parents:
diff changeset
    58
                  dest="source",
dd3b4c9d5035 add command to create media and content
ymh <ymh.work@gmail.com>
parents:
diff changeset
    59
                  action="store",
dd3b4c9d5035 add command to create media and content
ymh <ymh.work@gmail.com>
parents:
diff changeset
    60
                  type="string",
dd3b4c9d5035 add command to create media and content
ymh <ymh.work@gmail.com>
parents:
diff changeset
    61
                  help="The media source"),
dd3b4c9d5035 add command to create media and content
ymh <ymh.work@gmail.com>
parents:
diff changeset
    62
        #TODO: title is compulsory
dd3b4c9d5035 add command to create media and content
ymh <ymh.work@gmail.com>
parents:
diff changeset
    63
        make_option("-t", "--title",
dd3b4c9d5035 add command to create media and content
ymh <ymh.work@gmail.com>
parents:
diff changeset
    64
                  dest="title",
dd3b4c9d5035 add command to create media and content
ymh <ymh.work@gmail.com>
parents:
diff changeset
    65
                  action="store",
dd3b4c9d5035 add command to create media and content
ymh <ymh.work@gmail.com>
parents:
diff changeset
    66
                  type="string",
dd3b4c9d5035 add command to create media and content
ymh <ymh.work@gmail.com>
parents:
diff changeset
    67
                  help="The content title"),
dd3b4c9d5035 add command to create media and content
ymh <ymh.work@gmail.com>
parents:
diff changeset
    68
        #TODO: optional
dd3b4c9d5035 add command to create media and content
ymh <ymh.work@gmail.com>
parents:
diff changeset
    69
        make_option("-V", "--videopath",
dd3b4c9d5035 add command to create media and content
ymh <ymh.work@gmail.com>
parents:
diff changeset
    70
                  dest="videopath",
dd3b4c9d5035 add command to create media and content
ymh <ymh.work@gmail.com>
parents:
diff changeset
    71
                  action="store",
dd3b4c9d5035 add command to create media and content
ymh <ymh.work@gmail.com>
parents:
diff changeset
    72
                  type="string",
dd3b4c9d5035 add command to create media and content
ymh <ymh.work@gmail.com>
parents:
diff changeset
    73
                  default=settings.STREAM_URL,
dd3b4c9d5035 add command to create media and content
ymh <ymh.work@gmail.com>
parents:
diff changeset
    74
                  help="The media videopath"),
dd3b4c9d5035 add command to create media and content
ymh <ymh.work@gmail.com>
parents:
diff changeset
    75
        #TODO: optional
dd3b4c9d5035 add command to create media and content
ymh <ymh.work@gmail.com>
parents:
diff changeset
    76
        make_option("--media-title",
dd3b4c9d5035 add command to create media and content
ymh <ymh.work@gmail.com>
parents:
diff changeset
    77
                  dest="media_title",
dd3b4c9d5035 add command to create media and content
ymh <ymh.work@gmail.com>
parents:
diff changeset
    78
                  action="store",
dd3b4c9d5035 add command to create media and content
ymh <ymh.work@gmail.com>
parents:
diff changeset
    79
                  type="string",
dd3b4c9d5035 add command to create media and content
ymh <ymh.work@gmail.com>
parents:
diff changeset
    80
                  help="The media title. Optional, same as content title"),
dd3b4c9d5035 add command to create media and content
ymh <ymh.work@gmail.com>
parents:
diff changeset
    81
dd3b4c9d5035 add command to create media and content
ymh <ymh.work@gmail.com>
parents:
diff changeset
    82
        make_option("--description",
dd3b4c9d5035 add command to create media and content
ymh <ymh.work@gmail.com>
parents:
diff changeset
    83
                  dest="description",
dd3b4c9d5035 add command to create media and content
ymh <ymh.work@gmail.com>
parents:
diff changeset
    84
                  action="store",
dd3b4c9d5035 add command to create media and content
ymh <ymh.work@gmail.com>
parents:
diff changeset
    85
                  type="string",
dd3b4c9d5035 add command to create media and content
ymh <ymh.work@gmail.com>
parents:
diff changeset
    86
                  default='',
dd3b4c9d5035 add command to create media and content
ymh <ymh.work@gmail.com>
parents:
diff changeset
    87
                  help="The description. Optional, same as content title"),
dd3b4c9d5035 add command to create media and content
ymh <ymh.work@gmail.com>
parents:
diff changeset
    88
dd3b4c9d5035 add command to create media and content
ymh <ymh.work@gmail.com>
parents:
diff changeset
    89
        make_option("--media-description",
dd3b4c9d5035 add command to create media and content
ymh <ymh.work@gmail.com>
parents:
diff changeset
    90
                  dest="media_description",
dd3b4c9d5035 add command to create media and content
ymh <ymh.work@gmail.com>
parents:
diff changeset
    91
                  action="store",
dd3b4c9d5035 add command to create media and content
ymh <ymh.work@gmail.com>
parents:
diff changeset
    92
                  type="string",
dd3b4c9d5035 add command to create media and content
ymh <ymh.work@gmail.com>
parents:
diff changeset
    93
                  help="The media description. Optional, same as content description"),
dd3b4c9d5035 add command to create media and content
ymh <ymh.work@gmail.com>
parents:
diff changeset
    94
dd3b4c9d5035 add command to create media and content
ymh <ymh.work@gmail.com>
parents:
diff changeset
    95
        #TODO: optional
dd3b4c9d5035 add command to create media and content
ymh <ymh.work@gmail.com>
parents:
diff changeset
    96
        make_option("-d", "--duration",
dd3b4c9d5035 add command to create media and content
ymh <ymh.work@gmail.com>
parents:
diff changeset
    97
                  dest="duration",
dd3b4c9d5035 add command to create media and content
ymh <ymh.work@gmail.com>
parents:
diff changeset
    98
                  action="store",
dd3b4c9d5035 add command to create media and content
ymh <ymh.work@gmail.com>
parents:
diff changeset
    99
                  type="string",
dd3b4c9d5035 add command to create media and content
ymh <ymh.work@gmail.com>
parents:
diff changeset
   100
                  help="Media duration"),
1497
c42847c334a0 add option media creation date in createmediacontent
ymh <ymh.work@gmail.com>
parents: 1402
diff changeset
   101
1357
dd3b4c9d5035 add command to create media and content
ymh <ymh.work@gmail.com>
parents:
diff changeset
   102
        make_option("-p", "--public",
dd3b4c9d5035 add command to create media and content
ymh <ymh.work@gmail.com>
parents:
diff changeset
   103
                    dest="public",
dd3b4c9d5035 add command to create media and content
ymh <ymh.work@gmail.com>
parents:
diff changeset
   104
                    action="store_true",
dd3b4c9d5035 add command to create media and content
ymh <ymh.work@gmail.com>
parents:
diff changeset
   105
                    default=False,
dd3b4c9d5035 add command to create media and content
ymh <ymh.work@gmail.com>
parents:
diff changeset
   106
                    help="Is the media/content public ?"
dd3b4c9d5035 add command to create media and content
ymh <ymh.work@gmail.com>
parents:
diff changeset
   107
                    ),
dd3b4c9d5035 add command to create media and content
ymh <ymh.work@gmail.com>
parents:
diff changeset
   108
dd3b4c9d5035 add command to create media and content
ymh <ymh.work@gmail.com>
parents:
diff changeset
   109
        make_option("-r", "--read",
dd3b4c9d5035 add command to create media and content
ymh <ymh.work@gmail.com>
parents:
diff changeset
   110
                    dest="readers",
dd3b4c9d5035 add command to create media and content
ymh <ymh.work@gmail.com>
parents:
diff changeset
   111
                    action="store",
dd3b4c9d5035 add command to create media and content
ymh <ymh.work@gmail.com>
parents:
diff changeset
   112
                    type="string",
dd3b4c9d5035 add command to create media and content
ymh <ymh.work@gmail.com>
parents:
diff changeset
   113
                    default=None,
dd3b4c9d5035 add command to create media and content
ymh <ymh.work@gmail.com>
parents:
diff changeset
   114
                    help="comma separated list of user/group with read access"
dd3b4c9d5035 add command to create media and content
ymh <ymh.work@gmail.com>
parents:
diff changeset
   115
                    ),
dd3b4c9d5035 add command to create media and content
ymh <ymh.work@gmail.com>
parents:
diff changeset
   116
        make_option("-w", "--write",
dd3b4c9d5035 add command to create media and content
ymh <ymh.work@gmail.com>
parents:
diff changeset
   117
                    dest="writers",
dd3b4c9d5035 add command to create media and content
ymh <ymh.work@gmail.com>
parents:
diff changeset
   118
                    action="store",
dd3b4c9d5035 add command to create media and content
ymh <ymh.work@gmail.com>
parents:
diff changeset
   119
                    type="string",
dd3b4c9d5035 add command to create media and content
ymh <ymh.work@gmail.com>
parents:
diff changeset
   120
                    default=None,
dd3b4c9d5035 add command to create media and content
ymh <ymh.work@gmail.com>
parents:
diff changeset
   121
                    help="comma separated list of user/group with write access"
dd3b4c9d5035 add command to create media and content
ymh <ymh.work@gmail.com>
parents:
diff changeset
   122
                    ),
dd3b4c9d5035 add command to create media and content
ymh <ymh.work@gmail.com>
parents:
diff changeset
   123
dd3b4c9d5035 add command to create media and content
ymh <ymh.work@gmail.com>
parents:
diff changeset
   124
        make_option("-u", "--update",
dd3b4c9d5035 add command to create media and content
ymh <ymh.work@gmail.com>
parents:
diff changeset
   125
                    dest='update',
dd3b4c9d5035 add command to create media and content
ymh <ymh.work@gmail.com>
parents:
diff changeset
   126
                    action="store_true",
dd3b4c9d5035 add command to create media and content
ymh <ymh.work@gmail.com>
parents:
diff changeset
   127
                    default=False,
dd3b4c9d5035 add command to create media and content
ymh <ymh.work@gmail.com>
parents:
diff changeset
   128
                    help="update objects when not created"
dd3b4c9d5035 add command to create media and content
ymh <ymh.work@gmail.com>
parents:
diff changeset
   129
                    ),
dd3b4c9d5035 add command to create media and content
ymh <ymh.work@gmail.com>
parents:
diff changeset
   130
dd3b4c9d5035 add command to create media and content
ymh <ymh.work@gmail.com>
parents:
diff changeset
   131
        make_option("-T", "--tags",
dd3b4c9d5035 add command to create media and content
ymh <ymh.work@gmail.com>
parents:
diff changeset
   132
                    dest='tags',
dd3b4c9d5035 add command to create media and content
ymh <ymh.work@gmail.com>
parents:
diff changeset
   133
                    action="store",
dd3b4c9d5035 add command to create media and content
ymh <ymh.work@gmail.com>
parents:
diff changeset
   134
                    type="string",
dd3b4c9d5035 add command to create media and content
ymh <ymh.work@gmail.com>
parents:
diff changeset
   135
                    default='',
dd3b4c9d5035 add command to create media and content
ymh <ymh.work@gmail.com>
parents:
diff changeset
   136
                    help="comma separated list of tags"
dd3b4c9d5035 add command to create media and content
ymh <ymh.work@gmail.com>
parents:
diff changeset
   137
                    ),
dd3b4c9d5035 add command to create media and content
ymh <ymh.work@gmail.com>
parents:
diff changeset
   138
        make_option("-c", "--creator",
dd3b4c9d5035 add command to create media and content
ymh <ymh.work@gmail.com>
parents:
diff changeset
   139
                    dest='creator',
dd3b4c9d5035 add command to create media and content
ymh <ymh.work@gmail.com>
parents:
diff changeset
   140
                    action="store",
dd3b4c9d5035 add command to create media and content
ymh <ymh.work@gmail.com>
parents:
diff changeset
   141
                    type="string",
dd3b4c9d5035 add command to create media and content
ymh <ymh.work@gmail.com>
parents:
diff changeset
   142
                    default=None,
dd3b4c9d5035 add command to create media and content
ymh <ymh.work@gmail.com>
parents:
diff changeset
   143
                    help="The handle for object creator."
dd3b4c9d5035 add command to create media and content
ymh <ymh.work@gmail.com>
parents:
diff changeset
   144
                    ),
dd3b4c9d5035 add command to create media and content
ymh <ymh.work@gmail.com>
parents:
diff changeset
   145
dd3b4c9d5035 add command to create media and content
ymh <ymh.work@gmail.com>
parents:
diff changeset
   146
        make_option("--external-id",
dd3b4c9d5035 add command to create media and content
ymh <ymh.work@gmail.com>
parents:
diff changeset
   147
                    dest='external_id',
dd3b4c9d5035 add command to create media and content
ymh <ymh.work@gmail.com>
parents:
diff changeset
   148
                    action="store",
dd3b4c9d5035 add command to create media and content
ymh <ymh.work@gmail.com>
parents:
diff changeset
   149
                    type="string",
dd3b4c9d5035 add command to create media and content
ymh <ymh.work@gmail.com>
parents:
diff changeset
   150
                    default = None,
dd3b4c9d5035 add command to create media and content
ymh <ymh.work@gmail.com>
parents:
diff changeset
   151
                    help="The media external id"
dd3b4c9d5035 add command to create media and content
ymh <ymh.work@gmail.com>
parents:
diff changeset
   152
                    ),
1497
c42847c334a0 add option media creation date in createmediacontent
ymh <ymh.work@gmail.com>
parents: 1402
diff changeset
   153
c42847c334a0 add option media creation date in createmediacontent
ymh <ymh.work@gmail.com>
parents: 1402
diff changeset
   154
        make_option("-C", "--creation-date",
c42847c334a0 add option media creation date in createmediacontent
ymh <ymh.work@gmail.com>
parents: 1402
diff changeset
   155
                    dest='creation_date',
c42847c334a0 add option media creation date in createmediacontent
ymh <ymh.work@gmail.com>
parents: 1402
diff changeset
   156
                    action="store",
c42847c334a0 add option media creation date in createmediacontent
ymh <ymh.work@gmail.com>
parents: 1402
diff changeset
   157
                    type="string",
c42847c334a0 add option media creation date in createmediacontent
ymh <ymh.work@gmail.com>
parents: 1402
diff changeset
   158
                    default = None,
c42847c334a0 add option media creation date in createmediacontent
ymh <ymh.work@gmail.com>
parents: 1402
diff changeset
   159
                    help="The creation date in ISO 8601 format (2008-09-03T20:56:35.450686)"
c42847c334a0 add option media creation date in createmediacontent
ymh <ymh.work@gmail.com>
parents: 1402
diff changeset
   160
                    ),
c42847c334a0 add option media creation date in createmediacontent
ymh <ymh.work@gmail.com>
parents: 1402
diff changeset
   161
c42847c334a0 add option media creation date in createmediacontent
ymh <ymh.work@gmail.com>
parents: 1402
diff changeset
   162
1357
dd3b4c9d5035 add command to create media and content
ymh <ymh.work@gmail.com>
parents:
diff changeset
   163
       )
1497
c42847c334a0 add option media creation date in createmediacontent
ymh <ymh.work@gmail.com>
parents: 1402
diff changeset
   164
c42847c334a0 add option media creation date in createmediacontent
ymh <ymh.work@gmail.com>
parents: 1402
diff changeset
   165
1357
dd3b4c9d5035 add command to create media and content
ymh <ymh.work@gmail.com>
parents:
diff changeset
   166
    def handle(self, *args, **options):
dd3b4c9d5035 add command to create media and content
ymh <ymh.work@gmail.com>
parents:
diff changeset
   167
        #BaseCommand.handle(self, *args, **options)
1497
c42847c334a0 add option media creation date in createmediacontent
ymh <ymh.work@gmail.com>
parents: 1402
diff changeset
   168
1357
dd3b4c9d5035 add command to create media and content
ymh <ymh.work@gmail.com>
parents:
diff changeset
   169
        title = options.get('title', '')
dd3b4c9d5035 add command to create media and content
ymh <ymh.work@gmail.com>
parents:
diff changeset
   170
        if not title:
dd3b4c9d5035 add command to create media and content
ymh <ymh.work@gmail.com>
parents:
diff changeset
   171
            raise CommandError("Title s compulsory")
dd3b4c9d5035 add command to create media and content
ymh <ymh.work@gmail.com>
parents:
diff changeset
   172
        title = title.decode("utf-8")
dd3b4c9d5035 add command to create media and content
ymh <ymh.work@gmail.com>
parents:
diff changeset
   173
dd3b4c9d5035 add command to create media and content
ymh <ymh.work@gmail.com>
parents:
diff changeset
   174
        media_title = options.get('media_title', '')
dd3b4c9d5035 add command to create media and content
ymh <ymh.work@gmail.com>
parents:
diff changeset
   175
        media_title = title if not media_title else media_title.decode("utf-8")
dd3b4c9d5035 add command to create media and content
ymh <ymh.work@gmail.com>
parents:
diff changeset
   176
dd3b4c9d5035 add command to create media and content
ymh <ymh.work@gmail.com>
parents:
diff changeset
   177
        src = options.get('source', None)
dd3b4c9d5035 add command to create media and content
ymh <ymh.work@gmail.com>
parents:
diff changeset
   178
        if src:
dd3b4c9d5035 add command to create media and content
ymh <ymh.work@gmail.com>
parents:
diff changeset
   179
            src = src.decode("utf-8")
1497
c42847c334a0 add option media creation date in createmediacontent
ymh <ymh.work@gmail.com>
parents: 1402
diff changeset
   180
1357
dd3b4c9d5035 add command to create media and content
ymh <ymh.work@gmail.com>
parents:
diff changeset
   181
        if not src:
dd3b4c9d5035 add command to create media and content
ymh <ymh.work@gmail.com>
parents:
diff changeset
   182
            raise CommandError("Source option is compulsory")
dd3b4c9d5035 add command to create media and content
ymh <ymh.work@gmail.com>
parents:
diff changeset
   183
        videopath = options.get('videopath', settings.STREAM_URL)
dd3b4c9d5035 add command to create media and content
ymh <ymh.work@gmail.com>
parents:
diff changeset
   184
        url_parts = urlparse.urlparse(src)
1402
b248462918e0 Add https to absolute source path
ymh <ymh.work@gmail.com>
parents: 1357
diff changeset
   185
        if url_parts.scheme in ['http','rtmp', 'https']:
1357
dd3b4c9d5035 add command to create media and content
ymh <ymh.work@gmail.com>
parents:
diff changeset
   186
            videopath = ''
dd3b4c9d5035 add command to create media and content
ymh <ymh.work@gmail.com>
parents:
diff changeset
   187
        #TODO : test url is relative path
dd3b4c9d5035 add command to create media and content
ymh <ymh.work@gmail.com>
parents:
diff changeset
   188
        duration_str = options.get('duration', '')
dd3b4c9d5035 add command to create media and content
ymh <ymh.work@gmail.com>
parents:
diff changeset
   189
        duration = self.get_duration(duration_str)
dd3b4c9d5035 add command to create media and content
ymh <ymh.work@gmail.com>
parents:
diff changeset
   190
        if duration is None:
dd3b4c9d5035 add command to create media and content
ymh <ymh.work@gmail.com>
parents:
diff changeset
   191
            raise CommandError("Duration %r not recognized" % duration_str)
1497
c42847c334a0 add option media creation date in createmediacontent
ymh <ymh.work@gmail.com>
parents: 1402
diff changeset
   192
1357
dd3b4c9d5035 add command to create media and content
ymh <ymh.work@gmail.com>
parents:
diff changeset
   193
        description = options.get('description', '')
dd3b4c9d5035 add command to create media and content
ymh <ymh.work@gmail.com>
parents:
diff changeset
   194
        if description:
dd3b4c9d5035 add command to create media and content
ymh <ymh.work@gmail.com>
parents:
diff changeset
   195
            description  = description.decode("utf-8")
dd3b4c9d5035 add command to create media and content
ymh <ymh.work@gmail.com>
parents:
diff changeset
   196
dd3b4c9d5035 add command to create media and content
ymh <ymh.work@gmail.com>
parents:
diff changeset
   197
        media_description = options.get('media_description', '')
1497
c42847c334a0 add option media creation date in createmediacontent
ymh <ymh.work@gmail.com>
parents: 1402
diff changeset
   198
1357
dd3b4c9d5035 add command to create media and content
ymh <ymh.work@gmail.com>
parents:
diff changeset
   199
        if not media_description:
dd3b4c9d5035 add command to create media and content
ymh <ymh.work@gmail.com>
parents:
diff changeset
   200
            media_description = description
dd3b4c9d5035 add command to create media and content
ymh <ymh.work@gmail.com>
parents:
diff changeset
   201
        else:
dd3b4c9d5035 add command to create media and content
ymh <ymh.work@gmail.com>
parents:
diff changeset
   202
            media_description.decode("utf-8")
1497
c42847c334a0 add option media creation date in createmediacontent
ymh <ymh.work@gmail.com>
parents: 1402
diff changeset
   203
1357
dd3b4c9d5035 add command to create media and content
ymh <ymh.work@gmail.com>
parents:
diff changeset
   204
        public = options.get('public', False)
dd3b4c9d5035 add command to create media and content
ymh <ymh.work@gmail.com>
parents:
diff changeset
   205
dd3b4c9d5035 add command to create media and content
ymh <ymh.work@gmail.com>
parents:
diff changeset
   206
        tags_str = options.get('tags', '')
dd3b4c9d5035 add command to create media and content
ymh <ymh.work@gmail.com>
parents:
diff changeset
   207
        if tags_str:
dd3b4c9d5035 add command to create media and content
ymh <ymh.work@gmail.com>
parents:
diff changeset
   208
            tags_str = tags_str.decode("utf-8")
dd3b4c9d5035 add command to create media and content
ymh <ymh.work@gmail.com>
parents:
diff changeset
   209
dd3b4c9d5035 add command to create media and content
ymh <ymh.work@gmail.com>
parents:
diff changeset
   210
        tags = filter(lambda t: t, [t.strip() for t in tags_str.split(",")]) if tags_str else []
dd3b4c9d5035 add command to create media and content
ymh <ymh.work@gmail.com>
parents:
diff changeset
   211
dd3b4c9d5035 add command to create media and content
ymh <ymh.work@gmail.com>
parents:
diff changeset
   212
        creator_str = options.get("creator", None)
dd3b4c9d5035 add command to create media and content
ymh <ymh.work@gmail.com>
parents:
diff changeset
   213
        User = get_user_model()
dd3b4c9d5035 add command to create media and content
ymh <ymh.work@gmail.com>
parents:
diff changeset
   214
dd3b4c9d5035 add command to create media and content
ymh <ymh.work@gmail.com>
parents:
diff changeset
   215
        creator = None
dd3b4c9d5035 add command to create media and content
ymh <ymh.work@gmail.com>
parents:
diff changeset
   216
dd3b4c9d5035 add command to create media and content
ymh <ymh.work@gmail.com>
parents:
diff changeset
   217
        if creator_str:
dd3b4c9d5035 add command to create media and content
ymh <ymh.work@gmail.com>
parents:
diff changeset
   218
            try:
dd3b4c9d5035 add command to create media and content
ymh <ymh.work@gmail.com>
parents:
diff changeset
   219
                creator = User.objects.get(username=creator_str)
dd3b4c9d5035 add command to create media and content
ymh <ymh.work@gmail.com>
parents:
diff changeset
   220
            except User.DoesNotExist:
dd3b4c9d5035 add command to create media and content
ymh <ymh.work@gmail.com>
parents:
diff changeset
   221
                raise CommandError("Creator user %s not found" % creator_str)
dd3b4c9d5035 add command to create media and content
ymh <ymh.work@gmail.com>
parents:
diff changeset
   222
        else:
dd3b4c9d5035 add command to create media and content
ymh <ymh.work@gmail.com>
parents:
diff changeset
   223
            #TODO: replace by first()
dd3b4c9d5035 add command to create media and content
ymh <ymh.work@gmail.com>
parents:
diff changeset
   224
            try:
dd3b4c9d5035 add command to create media and content
ymh <ymh.work@gmail.com>
parents:
diff changeset
   225
                creator = User.objects.filter(is_superuser=True)[0]
dd3b4c9d5035 add command to create media and content
ymh <ymh.work@gmail.com>
parents:
diff changeset
   226
            except IndexError:
dd3b4c9d5035 add command to create media and content
ymh <ymh.work@gmail.com>
parents:
diff changeset
   227
                creator = None
1497
c42847c334a0 add option media creation date in createmediacontent
ymh <ymh.work@gmail.com>
parents: 1402
diff changeset
   228
1357
dd3b4c9d5035 add command to create media and content
ymh <ymh.work@gmail.com>
parents:
diff changeset
   229
        if creator is None:
dd3b4c9d5035 add command to create media and content
ymh <ymh.work@gmail.com>
parents:
diff changeset
   230
            raise CommandError("Creator not found")
dd3b4c9d5035 add command to create media and content
ymh <ymh.work@gmail.com>
parents:
diff changeset
   231
dd3b4c9d5035 add command to create media and content
ymh <ymh.work@gmail.com>
parents:
diff changeset
   232
        readers_str = options.get("readers", "")
dd3b4c9d5035 add command to create media and content
ymh <ymh.work@gmail.com>
parents:
diff changeset
   233
        writers_str = options.get("writers", "")
1497
c42847c334a0 add option media creation date in createmediacontent
ymh <ymh.work@gmail.com>
parents: 1402
diff changeset
   234
1357
dd3b4c9d5035 add command to create media and content
ymh <ymh.work@gmail.com>
parents:
diff changeset
   235
        readers = filter(lambda s: s, [r.strip() for r in  readers_str.split(',')]) if readers_str else []
dd3b4c9d5035 add command to create media and content
ymh <ymh.work@gmail.com>
parents:
diff changeset
   236
        writers = filter(lambda s: s, [r.strip() for r in  writers_str.split(',')]) if writers_str else []
1497
c42847c334a0 add option media creation date in createmediacontent
ymh <ymh.work@gmail.com>
parents: 1402
diff changeset
   237
1357
dd3b4c9d5035 add command to create media and content
ymh <ymh.work@gmail.com>
parents:
diff changeset
   238
        readers_list = set(readers+writers)
1497
c42847c334a0 add option media creation date in createmediacontent
ymh <ymh.work@gmail.com>
parents: 1402
diff changeset
   239
c42847c334a0 add option media creation date in createmediacontent
ymh <ymh.work@gmail.com>
parents: 1402
diff changeset
   240
1357
dd3b4c9d5035 add command to create media and content
ymh <ymh.work@gmail.com>
parents:
diff changeset
   241
        if readers_list:
dd3b4c9d5035 add command to create media and content
ymh <ymh.work@gmail.com>
parents:
diff changeset
   242
            read_list = list(User.objects.filter(username__in=readers_list)) + list(Group.objects.filter(name__in=readers_list))
dd3b4c9d5035 add command to create media and content
ymh <ymh.work@gmail.com>
parents:
diff changeset
   243
        else:
dd3b4c9d5035 add command to create media and content
ymh <ymh.work@gmail.com>
parents:
diff changeset
   244
            read_list = []
1497
c42847c334a0 add option media creation date in createmediacontent
ymh <ymh.work@gmail.com>
parents: 1402
diff changeset
   245
1357
dd3b4c9d5035 add command to create media and content
ymh <ymh.work@gmail.com>
parents:
diff changeset
   246
        if writers:
dd3b4c9d5035 add command to create media and content
ymh <ymh.work@gmail.com>
parents:
diff changeset
   247
            write_list = list(User.objects.filter(username__in = writers)) + list(Group.objects.filter(name__in = writers))
dd3b4c9d5035 add command to create media and content
ymh <ymh.work@gmail.com>
parents:
diff changeset
   248
        else:
dd3b4c9d5035 add command to create media and content
ymh <ymh.work@gmail.com>
parents:
diff changeset
   249
            write_list = []
dd3b4c9d5035 add command to create media and content
ymh <ymh.work@gmail.com>
parents:
diff changeset
   250
dd3b4c9d5035 add command to create media and content
ymh <ymh.work@gmail.com>
parents:
diff changeset
   251
        external_id = options.get("external_id", None)
1497
c42847c334a0 add option media creation date in createmediacontent
ymh <ymh.work@gmail.com>
parents: 1402
diff changeset
   252
1357
dd3b4c9d5035 add command to create media and content
ymh <ymh.work@gmail.com>
parents:
diff changeset
   253
        update_objects = options.get('update', False)
1497
c42847c334a0 add option media creation date in createmediacontent
ymh <ymh.work@gmail.com>
parents: 1402
diff changeset
   254
c42847c334a0 add option media creation date in createmediacontent
ymh <ymh.work@gmail.com>
parents: 1402
diff changeset
   255
        creation_date_str = options.get('creation_date', None)
c42847c334a0 add option media creation date in createmediacontent
ymh <ymh.work@gmail.com>
parents: 1402
diff changeset
   256
c42847c334a0 add option media creation date in createmediacontent
ymh <ymh.work@gmail.com>
parents: 1402
diff changeset
   257
        creation_date = dateutil.parser.parse(creation_date_str) if creation_date_str else None
c42847c334a0 add option media creation date in createmediacontent
ymh <ymh.work@gmail.com>
parents: 1402
diff changeset
   258
1357
dd3b4c9d5035 add command to create media and content
ymh <ymh.work@gmail.com>
parents:
diff changeset
   259
        #TODO: wrap everything in transaction
dd3b4c9d5035 add command to create media and content
ymh <ymh.work@gmail.com>
parents:
diff changeset
   260
        defaults_values = {
dd3b4c9d5035 add command to create media and content
ymh <ymh.work@gmail.com>
parents:
diff changeset
   261
            'videopath': videopath,
dd3b4c9d5035 add command to create media and content
ymh <ymh.work@gmail.com>
parents:
diff changeset
   262
            'title': media_title,
dd3b4c9d5035 add command to create media and content
ymh <ymh.work@gmail.com>
parents:
diff changeset
   263
            'duration': duration,
dd3b4c9d5035 add command to create media and content
ymh <ymh.work@gmail.com>
parents:
diff changeset
   264
            'description': media_description,
dd3b4c9d5035 add command to create media and content
ymh <ymh.work@gmail.com>
parents:
diff changeset
   265
            'creator': creator,
1497
c42847c334a0 add option media creation date in createmediacontent
ymh <ymh.work@gmail.com>
parents: 1402
diff changeset
   266
            'external_id': external_id,
c42847c334a0 add option media creation date in createmediacontent
ymh <ymh.work@gmail.com>
parents: 1402
diff changeset
   267
            'media_creation_date': creation_date
1357
dd3b4c9d5035 add command to create media and content
ymh <ymh.work@gmail.com>
parents:
diff changeset
   268
        }
dd3b4c9d5035 add command to create media and content
ymh <ymh.work@gmail.com>
parents:
diff changeset
   269
dd3b4c9d5035 add command to create media and content
ymh <ymh.work@gmail.com>
parents:
diff changeset
   270
        media, created = Media.objects.get_or_create(src=src, defaults= defaults_values)
1497
c42847c334a0 add option media creation date in createmediacontent
ymh <ymh.work@gmail.com>
parents: 1402
diff changeset
   271
1357
dd3b4c9d5035 add command to create media and content
ymh <ymh.work@gmail.com>
parents:
diff changeset
   272
        if not created and update_objects:
dd3b4c9d5035 add command to create media and content
ymh <ymh.work@gmail.com>
parents:
diff changeset
   273
            for k,v in defaults_values.items():
dd3b4c9d5035 add command to create media and content
ymh <ymh.work@gmail.com>
parents:
diff changeset
   274
                setattr(media, k, v)
dd3b4c9d5035 add command to create media and content
ymh <ymh.work@gmail.com>
parents:
diff changeset
   275
            media.save()
dd3b4c9d5035 add command to create media and content
ymh <ymh.work@gmail.com>
parents:
diff changeset
   276
dd3b4c9d5035 add command to create media and content
ymh <ymh.work@gmail.com>
parents:
diff changeset
   277
        if created or update_objects:
dd3b4c9d5035 add command to create media and content
ymh <ymh.work@gmail.com>
parents:
diff changeset
   278
            media.is_public = public
dd3b4c9d5035 add command to create media and content
ymh <ymh.work@gmail.com>
parents:
diff changeset
   279
            assign_perm_to_obj(media, read_list, write_list, creator)
dd3b4c9d5035 add command to create media and content
ymh <ymh.work@gmail.com>
parents:
diff changeset
   280
dd3b4c9d5035 add command to create media and content
ymh <ymh.work@gmail.com>
parents:
diff changeset
   281
        content_uuid = generate_uuid()
dd3b4c9d5035 add command to create media and content
ymh <ymh.work@gmail.com>
parents:
diff changeset
   282
        content_iriurl = "%s/%s.iri" % (content_uuid, content_uuid);
dd3b4c9d5035 add command to create media and content
ymh <ymh.work@gmail.com>
parents:
diff changeset
   283
        content = Content.objects.create(
dd3b4c9d5035 add command to create media and content
ymh <ymh.work@gmail.com>
parents:
diff changeset
   284
            iri_id = content_uuid,
dd3b4c9d5035 add command to create media and content
ymh <ymh.work@gmail.com>
parents:
diff changeset
   285
            iriurl = content_iriurl,
dd3b4c9d5035 add command to create media and content
ymh <ymh.work@gmail.com>
parents:
diff changeset
   286
            media_obj=media,
dd3b4c9d5035 add command to create media and content
ymh <ymh.work@gmail.com>
parents:
diff changeset
   287
            title=title,
1497
c42847c334a0 add option media creation date in createmediacontent
ymh <ymh.work@gmail.com>
parents: 1402
diff changeset
   288
            description=description,
1357
dd3b4c9d5035 add command to create media and content
ymh <ymh.work@gmail.com>
parents:
diff changeset
   289
            duration=duration
dd3b4c9d5035 add command to create media and content
ymh <ymh.work@gmail.com>
parents:
diff changeset
   290
        )
1497
c42847c334a0 add option media creation date in createmediacontent
ymh <ymh.work@gmail.com>
parents: 1402
diff changeset
   291
1357
dd3b4c9d5035 add command to create media and content
ymh <ymh.work@gmail.com>
parents:
diff changeset
   292
        content.tags.add(*tags)
1497
c42847c334a0 add option media creation date in createmediacontent
ymh <ymh.work@gmail.com>
parents: 1402
diff changeset
   293
1357
dd3b4c9d5035 add command to create media and content
ymh <ymh.work@gmail.com>
parents:
diff changeset
   294
        everyone = Group.objects.get(name=settings.PUBLIC_GROUP_NAME)
dd3b4c9d5035 add command to create media and content
ymh <ymh.work@gmail.com>
parents:
diff changeset
   295
        if public:
dd3b4c9d5035 add command to create media and content
ymh <ymh.work@gmail.com>
parents:
diff changeset
   296
            cached_assign('view_content', everyone, content)
dd3b4c9d5035 add command to create media and content
ymh <ymh.work@gmail.com>
parents:
diff changeset
   297
            cached_assign('view_media', everyone, media)
dd3b4c9d5035 add command to create media and content
ymh <ymh.work@gmail.com>
parents:
diff changeset
   298
        else:
dd3b4c9d5035 add command to create media and content
ymh <ymh.work@gmail.com>
parents:
diff changeset
   299
            remove_perm('ldt_utils.view_media', everyone, media)
dd3b4c9d5035 add command to create media and content
ymh <ymh.work@gmail.com>
parents:
diff changeset
   300
            remove_perm('ldt_utils.view_content', everyone, content)
dd3b4c9d5035 add command to create media and content
ymh <ymh.work@gmail.com>
parents:
diff changeset
   301
            assign_perm_to_obj(content, read_list, write_list, creator)
dd3b4c9d5035 add command to create media and content
ymh <ymh.work@gmail.com>
parents:
diff changeset
   302
            assign_perm_to_obj(media, read_list, write_list, creator)
dd3b4c9d5035 add command to create media and content
ymh <ymh.work@gmail.com>
parents:
diff changeset
   303
dd3b4c9d5035 add command to create media and content
ymh <ymh.work@gmail.com>
parents:
diff changeset
   304
        content.is_public = public
dd3b4c9d5035 add command to create media and content
ymh <ymh.work@gmail.com>
parents:
diff changeset
   305
        content.save()
1497
c42847c334a0 add option media creation date in createmediacontent
ymh <ymh.work@gmail.com>
parents: 1402
diff changeset
   306
1357
dd3b4c9d5035 add command to create media and content
ymh <ymh.work@gmail.com>
parents:
diff changeset
   307
        assign_perm_to_obj(content, read_list, write_list, creator)
dd3b4c9d5035 add command to create media and content
ymh <ymh.work@gmail.com>
parents:
diff changeset
   308
        update_stat_content(content)
1497
c42847c334a0 add option media creation date in createmediacontent
ymh <ymh.work@gmail.com>
parents: 1402
diff changeset
   309
1357
dd3b4c9d5035 add command to create media and content
ymh <ymh.work@gmail.com>
parents:
diff changeset
   310
        return content.iri_id