src/ldt/ldt/management/commands/createmediacontent.py
author ymh <ymh.work@gmail.com>
Wed, 22 Apr 2020 17:19:13 +0200
changeset 1497 c42847c334a0
parent 1402 b248462918e0
child 1499 06ad9be0454f
permissions -rw-r--r--
add option media creation date in createmediacontent
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
dd3b4c9d5035 add command to create media and content
ymh <ymh.work@gmail.com>
parents:
diff changeset
    11
import time
dd3b4c9d5035 add command to create media and content
ymh <ymh.work@gmail.com>
parents:
diff changeset
    12
import urlparse
dd3b4c9d5035 add command to create media and content
ymh <ymh.work@gmail.com>
parents:
diff changeset
    13
dd3b4c9d5035 add command to create media and content
ymh <ymh.work@gmail.com>
parents:
diff changeset
    14
from django.conf import settings
dd3b4c9d5035 add command to create media and content
ymh <ymh.work@gmail.com>
parents:
diff changeset
    15
from django.contrib.auth import get_user_model
dd3b4c9d5035 add command to create media and content
ymh <ymh.work@gmail.com>
parents:
diff changeset
    16
from django.contrib.auth.models import Group
dd3b4c9d5035 add command to create media and content
ymh <ymh.work@gmail.com>
parents:
diff changeset
    17
from django.core.management.base import BaseCommand, CommandError
dd3b4c9d5035 add command to create media and content
ymh <ymh.work@gmail.com>
parents:
diff changeset
    18
from guardian.shortcuts import remove_perm
dd3b4c9d5035 add command to create media and content
ymh <ymh.work@gmail.com>
parents:
diff changeset
    19
dd3b4c9d5035 add command to create media and content
ymh <ymh.work@gmail.com>
parents:
diff changeset
    20
from ldt.ldt_utils.models import Content, Media
dd3b4c9d5035 add command to create media and content
ymh <ymh.work@gmail.com>
parents:
diff changeset
    21
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
    22
from ldt.ldt_utils.utils import generate_uuid
dd3b4c9d5035 add command to create media and content
ymh <ymh.work@gmail.com>
parents:
diff changeset
    23
from ldt.security.cache import cached_assign
dd3b4c9d5035 add command to create media and content
ymh <ymh.work@gmail.com>
parents:
diff changeset
    24
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
    25
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
logger = logging.getLogger(__name__)
dd3b4c9d5035 add command to create media and content
ymh <ymh.work@gmail.com>
parents:
diff changeset
    28
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
class Command(BaseCommand):
1497
c42847c334a0 add option media creation date in createmediacontent
ymh <ymh.work@gmail.com>
parents: 1402
diff changeset
    31
1357
dd3b4c9d5035 add command to create media and content
ymh <ymh.work@gmail.com>
parents:
diff changeset
    32
    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
    33
1357
dd3b4c9d5035 add command to create media and content
ymh <ymh.work@gmail.com>
parents:
diff changeset
    34
    def get_duration(self, value):
dd3b4c9d5035 add command to create media and content
ymh <ymh.work@gmail.com>
parents:
diff changeset
    35
        dur = None
dd3b4c9d5035 add command to create media and content
ymh <ymh.work@gmail.com>
parents:
diff changeset
    36
        for f in self.formats:
dd3b4c9d5035 add command to create media and content
ymh <ymh.work@gmail.com>
parents:
diff changeset
    37
            try:
dd3b4c9d5035 add command to create media and content
ymh <ymh.work@gmail.com>
parents:
diff changeset
    38
                dur = time.strptime(value, f)
dd3b4c9d5035 add command to create media and content
ymh <ymh.work@gmail.com>
parents:
diff changeset
    39
                dur = (dur.tm_hour*3600 + dur.tm_min*60 + dur.tm_sec) * 1000
dd3b4c9d5035 add command to create media and content
ymh <ymh.work@gmail.com>
parents:
diff changeset
    40
                break
dd3b4c9d5035 add command to create media and content
ymh <ymh.work@gmail.com>
parents:
diff changeset
    41
            except:
dd3b4c9d5035 add command to create media and content
ymh <ymh.work@gmail.com>
parents:
diff changeset
    42
                pass
dd3b4c9d5035 add command to create media and content
ymh <ymh.work@gmail.com>
parents:
diff changeset
    43
        return dur
dd3b4c9d5035 add command to create media and content
ymh <ymh.work@gmail.com>
parents:
diff changeset
    44
1497
c42847c334a0 add option media creation date in createmediacontent
ymh <ymh.work@gmail.com>
parents: 1402
diff changeset
    45
1357
dd3b4c9d5035 add command to create media and content
ymh <ymh.work@gmail.com>
parents:
diff changeset
    46
    help = 'Create a content (and Media)'
dd3b4c9d5035 add command to create media and content
ymh <ymh.work@gmail.com>
parents:
diff changeset
    47
    option_list = BaseCommand.option_list + (
dd3b4c9d5035 add command to create media and content
ymh <ymh.work@gmail.com>
parents:
diff changeset
    48
dd3b4c9d5035 add command to create media and content
ymh <ymh.work@gmail.com>
parents:
diff changeset
    49
        #TODO: source is compulsory
dd3b4c9d5035 add command to create media and content
ymh <ymh.work@gmail.com>
parents:
diff changeset
    50
        make_option("-s", "--source",
dd3b4c9d5035 add command to create media and content
ymh <ymh.work@gmail.com>
parents:
diff changeset
    51
                  dest="source",
dd3b4c9d5035 add command to create media and content
ymh <ymh.work@gmail.com>
parents:
diff changeset
    52
                  action="store",
dd3b4c9d5035 add command to create media and content
ymh <ymh.work@gmail.com>
parents:
diff changeset
    53
                  type="string",
dd3b4c9d5035 add command to create media and content
ymh <ymh.work@gmail.com>
parents:
diff changeset
    54
                  help="The media source"),
dd3b4c9d5035 add command to create media and content
ymh <ymh.work@gmail.com>
parents:
diff changeset
    55
        #TODO: title is compulsory
dd3b4c9d5035 add command to create media and content
ymh <ymh.work@gmail.com>
parents:
diff changeset
    56
        make_option("-t", "--title",
dd3b4c9d5035 add command to create media and content
ymh <ymh.work@gmail.com>
parents:
diff changeset
    57
                  dest="title",
dd3b4c9d5035 add command to create media and content
ymh <ymh.work@gmail.com>
parents:
diff changeset
    58
                  action="store",
dd3b4c9d5035 add command to create media and content
ymh <ymh.work@gmail.com>
parents:
diff changeset
    59
                  type="string",
dd3b4c9d5035 add command to create media and content
ymh <ymh.work@gmail.com>
parents:
diff changeset
    60
                  help="The content title"),
dd3b4c9d5035 add command to create media and content
ymh <ymh.work@gmail.com>
parents:
diff changeset
    61
        #TODO: optional
dd3b4c9d5035 add command to create media and content
ymh <ymh.work@gmail.com>
parents:
diff changeset
    62
        make_option("-V", "--videopath",
dd3b4c9d5035 add command to create media and content
ymh <ymh.work@gmail.com>
parents:
diff changeset
    63
                  dest="videopath",
dd3b4c9d5035 add command to create media and content
ymh <ymh.work@gmail.com>
parents:
diff changeset
    64
                  action="store",
dd3b4c9d5035 add command to create media and content
ymh <ymh.work@gmail.com>
parents:
diff changeset
    65
                  type="string",
dd3b4c9d5035 add command to create media and content
ymh <ymh.work@gmail.com>
parents:
diff changeset
    66
                  default=settings.STREAM_URL,
dd3b4c9d5035 add command to create media and content
ymh <ymh.work@gmail.com>
parents:
diff changeset
    67
                  help="The media videopath"),
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("--media-title",
dd3b4c9d5035 add command to create media and content
ymh <ymh.work@gmail.com>
parents:
diff changeset
    70
                  dest="media_title",
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
                  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
    74
dd3b4c9d5035 add command to create media and content
ymh <ymh.work@gmail.com>
parents:
diff changeset
    75
        make_option("--description",
dd3b4c9d5035 add command to create media and content
ymh <ymh.work@gmail.com>
parents:
diff changeset
    76
                  dest="description",
dd3b4c9d5035 add command to create media and content
ymh <ymh.work@gmail.com>
parents:
diff changeset
    77
                  action="store",
dd3b4c9d5035 add command to create media and content
ymh <ymh.work@gmail.com>
parents:
diff changeset
    78
                  type="string",
dd3b4c9d5035 add command to create media and content
ymh <ymh.work@gmail.com>
parents:
diff changeset
    79
                  default='',
dd3b4c9d5035 add command to create media and content
ymh <ymh.work@gmail.com>
parents:
diff changeset
    80
                  help="The description. 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("--media-description",
dd3b4c9d5035 add command to create media and content
ymh <ymh.work@gmail.com>
parents:
diff changeset
    83
                  dest="media_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
                  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
    87
dd3b4c9d5035 add command to create media and content
ymh <ymh.work@gmail.com>
parents:
diff changeset
    88
        #TODO: optional
dd3b4c9d5035 add command to create media and content
ymh <ymh.work@gmail.com>
parents:
diff changeset
    89
        make_option("-d", "--duration",
dd3b4c9d5035 add command to create media and content
ymh <ymh.work@gmail.com>
parents:
diff changeset
    90
                  dest="duration",
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="Media duration"),
1497
c42847c334a0 add option media creation date in createmediacontent
ymh <ymh.work@gmail.com>
parents: 1402
diff changeset
    94
1357
dd3b4c9d5035 add command to create media and content
ymh <ymh.work@gmail.com>
parents:
diff changeset
    95
        make_option("-p", "--public",
dd3b4c9d5035 add command to create media and content
ymh <ymh.work@gmail.com>
parents:
diff changeset
    96
                    dest="public",
dd3b4c9d5035 add command to create media and content
ymh <ymh.work@gmail.com>
parents:
diff changeset
    97
                    action="store_true",
dd3b4c9d5035 add command to create media and content
ymh <ymh.work@gmail.com>
parents:
diff changeset
    98
                    default=False,
dd3b4c9d5035 add command to create media and content
ymh <ymh.work@gmail.com>
parents:
diff changeset
    99
                    help="Is the media/content public ?"
dd3b4c9d5035 add command to create media and content
ymh <ymh.work@gmail.com>
parents:
diff changeset
   100
                    ),
dd3b4c9d5035 add command to create media and content
ymh <ymh.work@gmail.com>
parents:
diff changeset
   101
dd3b4c9d5035 add command to create media and content
ymh <ymh.work@gmail.com>
parents:
diff changeset
   102
        make_option("-r", "--read",
dd3b4c9d5035 add command to create media and content
ymh <ymh.work@gmail.com>
parents:
diff changeset
   103
                    dest="readers",
dd3b4c9d5035 add command to create media and content
ymh <ymh.work@gmail.com>
parents:
diff changeset
   104
                    action="store",
dd3b4c9d5035 add command to create media and content
ymh <ymh.work@gmail.com>
parents:
diff changeset
   105
                    type="string",
dd3b4c9d5035 add command to create media and content
ymh <ymh.work@gmail.com>
parents:
diff changeset
   106
                    default=None,
dd3b4c9d5035 add command to create media and content
ymh <ymh.work@gmail.com>
parents:
diff changeset
   107
                    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
   108
                    ),
dd3b4c9d5035 add command to create media and content
ymh <ymh.work@gmail.com>
parents:
diff changeset
   109
        make_option("-w", "--write",
dd3b4c9d5035 add command to create media and content
ymh <ymh.work@gmail.com>
parents:
diff changeset
   110
                    dest="writers",
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 write 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
dd3b4c9d5035 add command to create media and content
ymh <ymh.work@gmail.com>
parents:
diff changeset
   117
        make_option("-u", "--update",
dd3b4c9d5035 add command to create media and content
ymh <ymh.work@gmail.com>
parents:
diff changeset
   118
                    dest='update',
dd3b4c9d5035 add command to create media and content
ymh <ymh.work@gmail.com>
parents:
diff changeset
   119
                    action="store_true",
dd3b4c9d5035 add command to create media and content
ymh <ymh.work@gmail.com>
parents:
diff changeset
   120
                    default=False,
dd3b4c9d5035 add command to create media and content
ymh <ymh.work@gmail.com>
parents:
diff changeset
   121
                    help="update objects when not created"
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("-T", "--tags",
dd3b4c9d5035 add command to create media and content
ymh <ymh.work@gmail.com>
parents:
diff changeset
   125
                    dest='tags',
dd3b4c9d5035 add command to create media and content
ymh <ymh.work@gmail.com>
parents:
diff changeset
   126
                    action="store",
dd3b4c9d5035 add command to create media and content
ymh <ymh.work@gmail.com>
parents:
diff changeset
   127
                    type="string",
dd3b4c9d5035 add command to create media and content
ymh <ymh.work@gmail.com>
parents:
diff changeset
   128
                    default='',
dd3b4c9d5035 add command to create media and content
ymh <ymh.work@gmail.com>
parents:
diff changeset
   129
                    help="comma separated list of tags"
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("-c", "--creator",
dd3b4c9d5035 add command to create media and content
ymh <ymh.work@gmail.com>
parents:
diff changeset
   132
                    dest='creator',
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=None,
dd3b4c9d5035 add command to create media and content
ymh <ymh.work@gmail.com>
parents:
diff changeset
   136
                    help="The handle for object creator."
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
dd3b4c9d5035 add command to create media and content
ymh <ymh.work@gmail.com>
parents:
diff changeset
   139
        make_option("--external-id",
dd3b4c9d5035 add command to create media and content
ymh <ymh.work@gmail.com>
parents:
diff changeset
   140
                    dest='external_id',
dd3b4c9d5035 add command to create media and content
ymh <ymh.work@gmail.com>
parents:
diff changeset
   141
                    action="store",
dd3b4c9d5035 add command to create media and content
ymh <ymh.work@gmail.com>
parents:
diff changeset
   142
                    type="string",
dd3b4c9d5035 add command to create media and content
ymh <ymh.work@gmail.com>
parents:
diff changeset
   143
                    default = None,
dd3b4c9d5035 add command to create media and content
ymh <ymh.work@gmail.com>
parents:
diff changeset
   144
                    help="The media external id"
dd3b4c9d5035 add command to create media and content
ymh <ymh.work@gmail.com>
parents:
diff changeset
   145
                    ),
1497
c42847c334a0 add option media creation date in createmediacontent
ymh <ymh.work@gmail.com>
parents: 1402
diff changeset
   146
c42847c334a0 add option media creation date in createmediacontent
ymh <ymh.work@gmail.com>
parents: 1402
diff changeset
   147
        make_option("-C", "--creation-date",
c42847c334a0 add option media creation date in createmediacontent
ymh <ymh.work@gmail.com>
parents: 1402
diff changeset
   148
                    dest='creation_date',
c42847c334a0 add option media creation date in createmediacontent
ymh <ymh.work@gmail.com>
parents: 1402
diff changeset
   149
                    action="store",
c42847c334a0 add option media creation date in createmediacontent
ymh <ymh.work@gmail.com>
parents: 1402
diff changeset
   150
                    type="string",
c42847c334a0 add option media creation date in createmediacontent
ymh <ymh.work@gmail.com>
parents: 1402
diff changeset
   151
                    default = None,
c42847c334a0 add option media creation date in createmediacontent
ymh <ymh.work@gmail.com>
parents: 1402
diff changeset
   152
                    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
   153
                    ),
c42847c334a0 add option media creation date in createmediacontent
ymh <ymh.work@gmail.com>
parents: 1402
diff changeset
   154
c42847c334a0 add option media creation date in createmediacontent
ymh <ymh.work@gmail.com>
parents: 1402
diff changeset
   155
1357
dd3b4c9d5035 add command to create media and content
ymh <ymh.work@gmail.com>
parents:
diff changeset
   156
       )
1497
c42847c334a0 add option media creation date in createmediacontent
ymh <ymh.work@gmail.com>
parents: 1402
diff changeset
   157
c42847c334a0 add option media creation date in createmediacontent
ymh <ymh.work@gmail.com>
parents: 1402
diff changeset
   158
1357
dd3b4c9d5035 add command to create media and content
ymh <ymh.work@gmail.com>
parents:
diff changeset
   159
    def handle(self, *args, **options):
dd3b4c9d5035 add command to create media and content
ymh <ymh.work@gmail.com>
parents:
diff changeset
   160
        #BaseCommand.handle(self, *args, **options)
1497
c42847c334a0 add option media creation date in createmediacontent
ymh <ymh.work@gmail.com>
parents: 1402
diff changeset
   161
1357
dd3b4c9d5035 add command to create media and content
ymh <ymh.work@gmail.com>
parents:
diff changeset
   162
        title = options.get('title', '')
dd3b4c9d5035 add command to create media and content
ymh <ymh.work@gmail.com>
parents:
diff changeset
   163
        if not title:
dd3b4c9d5035 add command to create media and content
ymh <ymh.work@gmail.com>
parents:
diff changeset
   164
            raise CommandError("Title s compulsory")
dd3b4c9d5035 add command to create media and content
ymh <ymh.work@gmail.com>
parents:
diff changeset
   165
        title = title.decode("utf-8")
dd3b4c9d5035 add command to create media and content
ymh <ymh.work@gmail.com>
parents:
diff changeset
   166
dd3b4c9d5035 add command to create media and content
ymh <ymh.work@gmail.com>
parents:
diff changeset
   167
        media_title = options.get('media_title', '')
dd3b4c9d5035 add command to create media and content
ymh <ymh.work@gmail.com>
parents:
diff changeset
   168
        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
   169
dd3b4c9d5035 add command to create media and content
ymh <ymh.work@gmail.com>
parents:
diff changeset
   170
        src = options.get('source', None)
dd3b4c9d5035 add command to create media and content
ymh <ymh.work@gmail.com>
parents:
diff changeset
   171
        if src:
dd3b4c9d5035 add command to create media and content
ymh <ymh.work@gmail.com>
parents:
diff changeset
   172
            src = src.decode("utf-8")
1497
c42847c334a0 add option media creation date in createmediacontent
ymh <ymh.work@gmail.com>
parents: 1402
diff changeset
   173
1357
dd3b4c9d5035 add command to create media and content
ymh <ymh.work@gmail.com>
parents:
diff changeset
   174
        if not src:
dd3b4c9d5035 add command to create media and content
ymh <ymh.work@gmail.com>
parents:
diff changeset
   175
            raise CommandError("Source option is compulsory")
dd3b4c9d5035 add command to create media and content
ymh <ymh.work@gmail.com>
parents:
diff changeset
   176
        videopath = options.get('videopath', settings.STREAM_URL)
dd3b4c9d5035 add command to create media and content
ymh <ymh.work@gmail.com>
parents:
diff changeset
   177
        url_parts = urlparse.urlparse(src)
1402
b248462918e0 Add https to absolute source path
ymh <ymh.work@gmail.com>
parents: 1357
diff changeset
   178
        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
   179
            videopath = ''
dd3b4c9d5035 add command to create media and content
ymh <ymh.work@gmail.com>
parents:
diff changeset
   180
        #TODO : test url is relative path
dd3b4c9d5035 add command to create media and content
ymh <ymh.work@gmail.com>
parents:
diff changeset
   181
        duration_str = options.get('duration', '')
dd3b4c9d5035 add command to create media and content
ymh <ymh.work@gmail.com>
parents:
diff changeset
   182
        duration = self.get_duration(duration_str)
dd3b4c9d5035 add command to create media and content
ymh <ymh.work@gmail.com>
parents:
diff changeset
   183
        if duration is None:
dd3b4c9d5035 add command to create media and content
ymh <ymh.work@gmail.com>
parents:
diff changeset
   184
            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
   185
1357
dd3b4c9d5035 add command to create media and content
ymh <ymh.work@gmail.com>
parents:
diff changeset
   186
        description = options.get('description', '')
dd3b4c9d5035 add command to create media and content
ymh <ymh.work@gmail.com>
parents:
diff changeset
   187
        if description:
dd3b4c9d5035 add command to create media and content
ymh <ymh.work@gmail.com>
parents:
diff changeset
   188
            description  = description.decode("utf-8")
dd3b4c9d5035 add command to create media and content
ymh <ymh.work@gmail.com>
parents:
diff changeset
   189
dd3b4c9d5035 add command to create media and content
ymh <ymh.work@gmail.com>
parents:
diff changeset
   190
        media_description = options.get('media_description', '')
1497
c42847c334a0 add option media creation date in createmediacontent
ymh <ymh.work@gmail.com>
parents: 1402
diff changeset
   191
1357
dd3b4c9d5035 add command to create media and content
ymh <ymh.work@gmail.com>
parents:
diff changeset
   192
        if not media_description:
dd3b4c9d5035 add command to create media and content
ymh <ymh.work@gmail.com>
parents:
diff changeset
   193
            media_description = description
dd3b4c9d5035 add command to create media and content
ymh <ymh.work@gmail.com>
parents:
diff changeset
   194
        else:
dd3b4c9d5035 add command to create media and content
ymh <ymh.work@gmail.com>
parents:
diff changeset
   195
            media_description.decode("utf-8")
1497
c42847c334a0 add option media creation date in createmediacontent
ymh <ymh.work@gmail.com>
parents: 1402
diff changeset
   196
1357
dd3b4c9d5035 add command to create media and content
ymh <ymh.work@gmail.com>
parents:
diff changeset
   197
        public = options.get('public', False)
dd3b4c9d5035 add command to create media and content
ymh <ymh.work@gmail.com>
parents:
diff changeset
   198
dd3b4c9d5035 add command to create media and content
ymh <ymh.work@gmail.com>
parents:
diff changeset
   199
        tags_str = options.get('tags', '')
dd3b4c9d5035 add command to create media and content
ymh <ymh.work@gmail.com>
parents:
diff changeset
   200
        if tags_str:
dd3b4c9d5035 add command to create media and content
ymh <ymh.work@gmail.com>
parents:
diff changeset
   201
            tags_str = tags_str.decode("utf-8")
dd3b4c9d5035 add command to create media and content
ymh <ymh.work@gmail.com>
parents:
diff changeset
   202
dd3b4c9d5035 add command to create media and content
ymh <ymh.work@gmail.com>
parents:
diff changeset
   203
        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
   204
dd3b4c9d5035 add command to create media and content
ymh <ymh.work@gmail.com>
parents:
diff changeset
   205
        creator_str = options.get("creator", None)
dd3b4c9d5035 add command to create media and content
ymh <ymh.work@gmail.com>
parents:
diff changeset
   206
        User = get_user_model()
dd3b4c9d5035 add command to create media and content
ymh <ymh.work@gmail.com>
parents:
diff changeset
   207
dd3b4c9d5035 add command to create media and content
ymh <ymh.work@gmail.com>
parents:
diff changeset
   208
        creator = None
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
        if creator_str:
dd3b4c9d5035 add command to create media and content
ymh <ymh.work@gmail.com>
parents:
diff changeset
   211
            try:
dd3b4c9d5035 add command to create media and content
ymh <ymh.work@gmail.com>
parents:
diff changeset
   212
                creator = User.objects.get(username=creator_str)
dd3b4c9d5035 add command to create media and content
ymh <ymh.work@gmail.com>
parents:
diff changeset
   213
            except User.DoesNotExist:
dd3b4c9d5035 add command to create media and content
ymh <ymh.work@gmail.com>
parents:
diff changeset
   214
                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
   215
        else:
dd3b4c9d5035 add command to create media and content
ymh <ymh.work@gmail.com>
parents:
diff changeset
   216
            #TODO: replace by first()
dd3b4c9d5035 add command to create media and content
ymh <ymh.work@gmail.com>
parents:
diff changeset
   217
            try:
dd3b4c9d5035 add command to create media and content
ymh <ymh.work@gmail.com>
parents:
diff changeset
   218
                creator = User.objects.filter(is_superuser=True)[0]
dd3b4c9d5035 add command to create media and content
ymh <ymh.work@gmail.com>
parents:
diff changeset
   219
            except IndexError:
dd3b4c9d5035 add command to create media and content
ymh <ymh.work@gmail.com>
parents:
diff changeset
   220
                creator = None
1497
c42847c334a0 add option media creation date in createmediacontent
ymh <ymh.work@gmail.com>
parents: 1402
diff changeset
   221
1357
dd3b4c9d5035 add command to create media and content
ymh <ymh.work@gmail.com>
parents:
diff changeset
   222
        if creator is None:
dd3b4c9d5035 add command to create media and content
ymh <ymh.work@gmail.com>
parents:
diff changeset
   223
            raise CommandError("Creator not found")
dd3b4c9d5035 add command to create media and content
ymh <ymh.work@gmail.com>
parents:
diff changeset
   224
dd3b4c9d5035 add command to create media and content
ymh <ymh.work@gmail.com>
parents:
diff changeset
   225
        readers_str = options.get("readers", "")
dd3b4c9d5035 add command to create media and content
ymh <ymh.work@gmail.com>
parents:
diff changeset
   226
        writers_str = options.get("writers", "")
1497
c42847c334a0 add option media creation date in createmediacontent
ymh <ymh.work@gmail.com>
parents: 1402
diff changeset
   227
1357
dd3b4c9d5035 add command to create media and content
ymh <ymh.work@gmail.com>
parents:
diff changeset
   228
        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
   229
        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
   230
1357
dd3b4c9d5035 add command to create media and content
ymh <ymh.work@gmail.com>
parents:
diff changeset
   231
        readers_list = set(readers+writers)
1497
c42847c334a0 add option media creation date in createmediacontent
ymh <ymh.work@gmail.com>
parents: 1402
diff changeset
   232
c42847c334a0 add option media creation date in createmediacontent
ymh <ymh.work@gmail.com>
parents: 1402
diff changeset
   233
1357
dd3b4c9d5035 add command to create media and content
ymh <ymh.work@gmail.com>
parents:
diff changeset
   234
        if readers_list:
dd3b4c9d5035 add command to create media and content
ymh <ymh.work@gmail.com>
parents:
diff changeset
   235
            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
   236
        else:
dd3b4c9d5035 add command to create media and content
ymh <ymh.work@gmail.com>
parents:
diff changeset
   237
            read_list = []
1497
c42847c334a0 add option media creation date in createmediacontent
ymh <ymh.work@gmail.com>
parents: 1402
diff changeset
   238
1357
dd3b4c9d5035 add command to create media and content
ymh <ymh.work@gmail.com>
parents:
diff changeset
   239
        if writers:
dd3b4c9d5035 add command to create media and content
ymh <ymh.work@gmail.com>
parents:
diff changeset
   240
            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
   241
        else:
dd3b4c9d5035 add command to create media and content
ymh <ymh.work@gmail.com>
parents:
diff changeset
   242
            write_list = []
dd3b4c9d5035 add command to create media and content
ymh <ymh.work@gmail.com>
parents:
diff changeset
   243
dd3b4c9d5035 add command to create media and content
ymh <ymh.work@gmail.com>
parents:
diff changeset
   244
        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
   245
1357
dd3b4c9d5035 add command to create media and content
ymh <ymh.work@gmail.com>
parents:
diff changeset
   246
        update_objects = options.get('update', False)
1497
c42847c334a0 add option media creation date in createmediacontent
ymh <ymh.work@gmail.com>
parents: 1402
diff changeset
   247
c42847c334a0 add option media creation date in createmediacontent
ymh <ymh.work@gmail.com>
parents: 1402
diff changeset
   248
        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
   249
c42847c334a0 add option media creation date in createmediacontent
ymh <ymh.work@gmail.com>
parents: 1402
diff changeset
   250
        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
   251
1357
dd3b4c9d5035 add command to create media and content
ymh <ymh.work@gmail.com>
parents:
diff changeset
   252
        #TODO: wrap everything in transaction
dd3b4c9d5035 add command to create media and content
ymh <ymh.work@gmail.com>
parents:
diff changeset
   253
        defaults_values = {
dd3b4c9d5035 add command to create media and content
ymh <ymh.work@gmail.com>
parents:
diff changeset
   254
            'videopath': videopath,
dd3b4c9d5035 add command to create media and content
ymh <ymh.work@gmail.com>
parents:
diff changeset
   255
            'title': media_title,
dd3b4c9d5035 add command to create media and content
ymh <ymh.work@gmail.com>
parents:
diff changeset
   256
            'duration': duration,
dd3b4c9d5035 add command to create media and content
ymh <ymh.work@gmail.com>
parents:
diff changeset
   257
            'description': media_description,
dd3b4c9d5035 add command to create media and content
ymh <ymh.work@gmail.com>
parents:
diff changeset
   258
            'creator': creator,
1497
c42847c334a0 add option media creation date in createmediacontent
ymh <ymh.work@gmail.com>
parents: 1402
diff changeset
   259
            'external_id': external_id,
c42847c334a0 add option media creation date in createmediacontent
ymh <ymh.work@gmail.com>
parents: 1402
diff changeset
   260
            'media_creation_date': creation_date
1357
dd3b4c9d5035 add command to create media and content
ymh <ymh.work@gmail.com>
parents:
diff changeset
   261
        }
dd3b4c9d5035 add command to create media and content
ymh <ymh.work@gmail.com>
parents:
diff changeset
   262
dd3b4c9d5035 add command to create media and content
ymh <ymh.work@gmail.com>
parents:
diff changeset
   263
        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
   264
1357
dd3b4c9d5035 add command to create media and content
ymh <ymh.work@gmail.com>
parents:
diff changeset
   265
        if not created and update_objects:
dd3b4c9d5035 add command to create media and content
ymh <ymh.work@gmail.com>
parents:
diff changeset
   266
            for k,v in defaults_values.items():
dd3b4c9d5035 add command to create media and content
ymh <ymh.work@gmail.com>
parents:
diff changeset
   267
                setattr(media, k, v)
dd3b4c9d5035 add command to create media and content
ymh <ymh.work@gmail.com>
parents:
diff changeset
   268
            media.save()
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
        if created or update_objects:
dd3b4c9d5035 add command to create media and content
ymh <ymh.work@gmail.com>
parents:
diff changeset
   271
            media.is_public = public
dd3b4c9d5035 add command to create media and content
ymh <ymh.work@gmail.com>
parents:
diff changeset
   272
            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
   273
dd3b4c9d5035 add command to create media and content
ymh <ymh.work@gmail.com>
parents:
diff changeset
   274
        content_uuid = generate_uuid()
dd3b4c9d5035 add command to create media and content
ymh <ymh.work@gmail.com>
parents:
diff changeset
   275
        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
   276
        content = Content.objects.create(
dd3b4c9d5035 add command to create media and content
ymh <ymh.work@gmail.com>
parents:
diff changeset
   277
            iri_id = content_uuid,
dd3b4c9d5035 add command to create media and content
ymh <ymh.work@gmail.com>
parents:
diff changeset
   278
            iriurl = content_iriurl,
dd3b4c9d5035 add command to create media and content
ymh <ymh.work@gmail.com>
parents:
diff changeset
   279
            media_obj=media,
dd3b4c9d5035 add command to create media and content
ymh <ymh.work@gmail.com>
parents:
diff changeset
   280
            title=title,
1497
c42847c334a0 add option media creation date in createmediacontent
ymh <ymh.work@gmail.com>
parents: 1402
diff changeset
   281
            description=description,
1357
dd3b4c9d5035 add command to create media and content
ymh <ymh.work@gmail.com>
parents:
diff changeset
   282
            duration=duration
dd3b4c9d5035 add command to create media and content
ymh <ymh.work@gmail.com>
parents:
diff changeset
   283
        )
1497
c42847c334a0 add option media creation date in createmediacontent
ymh <ymh.work@gmail.com>
parents: 1402
diff changeset
   284
1357
dd3b4c9d5035 add command to create media and content
ymh <ymh.work@gmail.com>
parents:
diff changeset
   285
        content.tags.add(*tags)
1497
c42847c334a0 add option media creation date in createmediacontent
ymh <ymh.work@gmail.com>
parents: 1402
diff changeset
   286
1357
dd3b4c9d5035 add command to create media and content
ymh <ymh.work@gmail.com>
parents:
diff changeset
   287
        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
   288
        if public:
dd3b4c9d5035 add command to create media and content
ymh <ymh.work@gmail.com>
parents:
diff changeset
   289
            cached_assign('view_content', everyone, content)
dd3b4c9d5035 add command to create media and content
ymh <ymh.work@gmail.com>
parents:
diff changeset
   290
            cached_assign('view_media', everyone, media)
dd3b4c9d5035 add command to create media and content
ymh <ymh.work@gmail.com>
parents:
diff changeset
   291
        else:
dd3b4c9d5035 add command to create media and content
ymh <ymh.work@gmail.com>
parents:
diff changeset
   292
            remove_perm('ldt_utils.view_media', everyone, media)
dd3b4c9d5035 add command to create media and content
ymh <ymh.work@gmail.com>
parents:
diff changeset
   293
            remove_perm('ldt_utils.view_content', everyone, content)
dd3b4c9d5035 add command to create media and content
ymh <ymh.work@gmail.com>
parents:
diff changeset
   294
            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
   295
            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
   296
dd3b4c9d5035 add command to create media and content
ymh <ymh.work@gmail.com>
parents:
diff changeset
   297
        content.is_public = public
dd3b4c9d5035 add command to create media and content
ymh <ymh.work@gmail.com>
parents:
diff changeset
   298
        content.save()
1497
c42847c334a0 add option media creation date in createmediacontent
ymh <ymh.work@gmail.com>
parents: 1402
diff changeset
   299
1357
dd3b4c9d5035 add command to create media and content
ymh <ymh.work@gmail.com>
parents:
diff changeset
   300
        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
   301
        update_stat_content(content)
1497
c42847c334a0 add option media creation date in createmediacontent
ymh <ymh.work@gmail.com>
parents: 1402
diff changeset
   302
1357
dd3b4c9d5035 add command to create media and content
ymh <ymh.work@gmail.com>
parents:
diff changeset
   303
        return content.iri_id