Esempio n. 1
0
    def test_get_next_and_past_mediapackages(self):
        repo = repository.Repository(self.tmppath)
        now = datetime.datetime.utcnow()

        mp = mediapackage.Mediapackage(identifier="1",
                                       title='MP#1',
                                       date=(now - datetime.timedelta(days=1)))
        repo.add(mp)
        mp = mediapackage.Mediapackage(identifier="2",
                                       title='MP#2',
                                       date=(now -
                                             datetime.timedelta(days=30)))
        repo.add(mp)
        mp = mediapackage.Mediapackage(identifier="3",
                                       title='MP#3',
                                       date=(now -
                                             datetime.timedelta(days=60)))
        repo.add(mp)
        mp_next = mediapackage.Mediapackage(identifier="4",
                                            title='MP#4',
                                            date=(now +
                                                  datetime.timedelta(days=1)))
        repo.add(mp_next)
        mp = mediapackage.Mediapackage(identifier="5",
                                       title='MP#5',
                                       date=(now +
                                             datetime.timedelta(days=30)))
        repo.add(mp)

        self.assertEqual(repo.get_next_mediapackage(), mp_next)
        self.assertEqual(len(repo.get_next_mediapackages()), 2)
        self.assertEqual(len(repo.get_past_mediapackages()), 3)
        self.assertEqual(len(repo.get_past_mediapackages(40)), 1)
Esempio n. 2
0
    def test_mediapackage_get_oc_capture_agent_property(self):
        mp = mediapackage.Mediapackage()
        mp.add(self.path_capture_agent_properties,
               mediapackage.TYPE_ATTACHMENT,
               identifier='org.opencastproject.capture.agent.properties')

        self.assertEqual(mp.getOCCaptureAgentProperty('capture.device.names'),
                         'camera,screen,audio')
        self.assertNotEqual(
            mp.getOCCaptureAgentProperty('capture.device.names.error'),
            'camera,screen,audio')

        mp2 = mediapackage.Mediapackage()
        self.assertNotEqual(
            mp2.getOCCaptureAgentProperty('capture.device.names'),
            'camera,screen,audio')

        self.assertEqual(
            mp.getOCCaptureAgentProperties(), {
                u'org.opencastproject.workflow.config.trimHold': 'false',
                u'capture.device.names': 'camera,screen,audio',
                u'org.opencastproject.workflow.definition': 'full',
                u'event.series': 'f16b43df-d1d4-4a85-8989-c060b85cea8d',
                u'event.title': 'Clase 2',
                u'event.location': 'GC-Etna',
                u'org.opencastproject.workflow.config.captionHold': 'false'
            })
Esempio n. 3
0
    def test_cleanstale_plugin(self):
        dispatcher = context.get_dispatcher()
        repo = context.get_repository()
        conf = context.get_conf()
        now = datetime.datetime.utcnow()

        mp = mediapackage.Mediapackage(identifier="1", title='MP#1', date=(now - datetime.timedelta(days=1)))
        repo.add(mp)
        mp = mediapackage.Mediapackage(identifier="2", title='MP#2', date=(now - datetime.timedelta(days=30)))
        repo.add(mp)
        mp = mediapackage.Mediapackage(identifier="3", title='MP#3', date=(now - datetime.timedelta(days=60)))
        repo.add(mp)
        mp = mediapackage.Mediapackage(identifier="4", title='MP#4', date=(now + datetime.timedelta(days=1)))
        repo.add(mp)
        mp = mediapackage.Mediapackage(identifier="5", title='MP#5', date=(now + datetime.timedelta(days=30)))
        repo.add(mp)

        
        cleanstale.init()
        
        self.assertEqual(len(repo), 5)
        conf.set('cleanstale','maxarchivaldays', '50')
        dispatcher.emit('galicaster-notify-nightly')
        self.assertEqual(len(repo), 4)
        conf.set('cleanstale','maxarchivaldays', '20')
        dispatcher.emit('galicaster-notify-nightly')
        self.assertEqual(len(repo), 3)
Esempio n. 4
0
    def test_folder_name_template_unique(self):
        repo = repository.Repository(self.tmppath, 'test', 'test')

        mp1 = mediapackage.Mediapackage()
        mp2 = mediapackage.Mediapackage()
        mp3 = mediapackage.Mediapackage()

        repo.add(mp1)
        self.assertEqual(mp1.getURI(), os.path.join(repo.root, 'test'))
        repo.add(mp2)
        self.assertEqual(mp2.getURI(), os.path.join(repo.root, 'test_2'))
        repo.add(mp3)
        self.assertEqual(mp3.getURI(), os.path.join(repo.root, 'test_3'))
Esempio n. 5
0
    def select_devices(self):
        """Loads the bins and creates the preview areas for the active profile, creating a new mediapacakge."""
        logger.info("Setting Devices the new way")
        self.mediapackage = mediapackage.Mediapackage()
        self.mediapackage.setTitle("Recording started at " +
                                   datetime.datetime.now().replace(
                                       microsecond=0).isoformat())
        current_profile = self.conf.get_current_profile()
        bins = current_profile.tracks

        for objectbin in bins:
            objectbin['path'] = self.repo.get_attach_path()
        devices = current_profile.get_video_areas()
        areas = self.create_drawing_areas(devices)

        self.error_text = None
        self.error_dialog = None
        if self.error_id:
            logger.info("Error in select devices " + str(self.error_id))
            self.dispatcher.disconnect(self.error_id)
        self.error_id = self.dispatcher.connect("recorder-error",
                                                self.handle_pipeline_error)
        self.audiobar.ClearVumeter()
        self.record = Recorder(bins, areas)
        self.record.mute_preview(not self.focus_is_active)
        return True
Esempio n. 6
0
 def test_duration_add_track(self):
     mp = mediapackage.Mediapackage()
     mp.add(self.path_track1, mediapackage.TYPE_TRACK,
            "presentation/source", None, 532)
     mp.add(self.path_track2, mediapackage.TYPE_TRACK, "presenter/source",
            None, 1532)
     self.assertEqual(mp.getDuration(), 1532)
Esempio n. 7
0
    def test_folder_name_template_no_alphanumeric(self):
        repo = repository.Repository(self.tmppath, 'test', 'Foo-Bar[!!??]-{hostname}_m{second}')

        mp = mediapackage.Mediapackage()
        repo.add(mp)
        self.assertEqual(mp.getURI(), os.path.join(repo.root, 
          'FooBar{hostname}_m{second}'.format(hostname="test", second=mp.getDate().strftime('%S'))))
Esempio n. 8
0
    def select_devices(self):
        """Loads the bins and creates the preview areas for the active profile, creating a new mediapacakge."""
        self.configure_profile()
        logger.info("Setting Devices the new way")
        now = datetime.datetime.now().replace(microsecond=0)
        self.mediapackage = mediapackage.Mediapackage(
            title="Recording started at " + now.isoformat())

        context.get_state().mp = self.mediapackage.identifier

        current_profile = self.conf.get_current_profile()
        bins = current_profile.tracks

        for objectbin in bins:
            objectbin['path'] = self.repo.get_rectemp_path()
        devices = current_profile.get_video_areas()
        areas = self.create_drawing_areas(devices)

        self.bins = bins
        self.areas = areas

        if self.error_dialog:
            if self.error_id:
                self.dispatcher.disconnect(self.error_id)
                self.error_id = None
            self.error_dialog.dialog_destroy()
            self.error_dialog = None
            self.error_text = None

        self.error_id = self.dispatcher.connect("recorder-error",
                                                self.handle_pipeline_error)
        self.audiobar.ClearVumeter()
        if self.ok_to_show:
            self.init_recorder()
        return True
Esempio n. 9
0
    def test_add_after_rec_manual(self):
        duration = 134
        repo = repository.Repository(self.tmppath)
        mp = mediapackage.Mediapackage()
        #TODO file extension to mimetype???
        bins = [
            self.__get_tmp_bin(
                't.avi', {
                    'device': 'test',
                    'name': 'name1',
                    'dev': 'dev1',
                    'flavor': 'presenter'
                }),
            self.__get_tmp_bin(
                't.mp4', {
                    'device': 'test',
                    'name': 'name2',
                    'dev': 'dev2',
                    'flavor': 'presentation'
                })
        ]

        self.assertTrue(mp.manual)
        repo.add_after_rec(mp, bins, duration)

        self.assertEqual(mp.getDuration(), duration)
        self.assertEqual(len(repo), 1)
        self.assertEqual(len(mp.getTracks()), len(bins))
Esempio n. 10
0
    def test_add_after_rec_no_manual(self):
        duration = 134
        repo = repository.Repository(self.tmppath)
        mp = mediapackage.Mediapackage()
        repo.add(mp)
        mp.addAttachmentAsString(
            'capture.device.names=name1,name3',
            name='org.opencastproject.capture.agent.properties',
            identifier='org.opencastproject.capture.agent.properties')

        mp.manual = False
        #TODO file extension to mimetype???
        bins = [
            self.__get_tmp_bin(
                't.avi', {
                    'device': 'test',
                    'name': 'name1',
                    'dev': 'dev1',
                    'flavor': 'presenter'
                }),
            self.__get_tmp_bin(
                't.mp4', {
                    'device': 'test',
                    'name': 'name2',
                    'dev': 'dev2',
                    'flavor': 'presentation'
                })
        ]

        self.assertFalse(mp.manual)
        repo.add_after_rec(mp, bins, duration)

        self.assertEqual(mp.getDuration(), duration)
        self.assertEqual(len(repo), 1)
        self.assertEqual(len(mp.getTracks()), 1)
Esempio n. 11
0
    def test_ingest_nightly_with_params(self):
        workflow_name = 'GC-fast_workflow'
        workflow_parameters = 'trimHold:true;'
        repo = Repository('/tmp/repo_night')
        dispatcher = Dispatcher()
        logger = Logger(None)
        w = worker.Worker(dispatcher, repo, logger, self.client)

        mp = mediapackage.Mediapackage()
        repo.add(mp)
        w.enqueue_nightly_job_by_name(
            worker.INGEST_CODE, mp, {
                'workflow': workflow_name,
                'workflow_parameters': workflow_parameters
            })

        dispatcher.emit('timer-nightly')
        time.sleep(1)  # Need time to create zip
        self.assertEqual(len(self.client.calls), 1)
        self.assertEqual(self.client.calls[0]['workflow'], workflow_name)
        self.assertEqual(self.client.calls[0]['workflow_parameters'],
                         workflow_parameters)
        self.assertEqual(mp.getOpStatus(worker.INGEST_CODE),
                         mediapackage.OP_DONE)
        rmtree('/tmp/repo_night')
Esempio n. 12
0
def create_mp(repo, event):
    if repo.has_key(event['UID']):
        mp = repo.get(event['UID'])
        if mp.status != mediapackage.SCHEDULED:
            return False
        rewrite = True
    else:
        mp = mediapackage.Mediapackage()
        mp.status = mediapackage.SCHEDULED
        mp.manual = False
        mp.properties['workflow_id'] = event['UID']
        repo.add(mp)
        rewrite = False

    mp.setTitle(event['SUMMARY'])
    mp.setDate(event['DTSTART'].dt.replace(tzinfo=None))
    
    ca_properties_name = 'org.opencastproject.capture.agent.properties'
    for attach_enc in event['ATTACH']:
        attach =  base64.b64decode(attach_enc)
        if attach_enc.params['X-APPLE-FILENAME'] == 'episode.xml':
            mp.addDublincoreAsString(attach, 'episode.xml', rewrite)
        elif attach_enc.params['X-APPLE-FILENAME'] == 'series.xml':
            mp.addSeriesDublincoreAsString(attach, 'series.xml', rewrite)
        elif attach_enc.params['X-APPLE-FILENAME'] == ca_properties_name:
            mp.addAttachmentAsString(attach, ca_properties_name, rewrite, ca_properties_name)
        else:
            logger.error('call error parse ical attachs %s', attach_enc.params['X-APPLE-FILENAME']) 
                         
    mp.marshalDublincore()
    repo.update(mp)
Esempio n. 13
0
def fromXML(xml):
    # FIXME: xml podria ser un file, o un string con un path.
    # Ojo si no existe.
    """
    Obter os datos do manifest, e despois do episode e o series
    """
    mp_uri = path.dirname(path.abspath(xml))
    mp = mediapackage.Mediapackage(uri=mp_uri)
    manifest = minidom.parse(xml)
    principal = manifest.getElementsByTagName("mediapackage")
    mp.setDuration(
        principal[0].getAttribute("duration")
    )  # FIXME check if empty and take out patch in listing.populatetreeview
    mp.setIdentifier(principal[0].getAttribute("id"))

    if principal[0].hasAttribute("start"):
        mp.setDate(
            datetime.strptime(principal[0].getAttribute("start"),
                              '%Y-%m-%dT%H:%M:%S'))

    without_galicaster = False

    try:
        galicaster = minidom.parse(path.join(mp.getURI(), 'galicaster.xml'))
        mp.status = int(_checknget(galicaster, "status"))
        for i in galicaster.getElementsByTagName("operation"):
            op = unicode(i.getAttribute("key"))
            status = _checknget(i, "status")
            mp.setOpStatus(op, int(status))
        for i in galicaster.getElementsByTagName("property"):
            op = unicode(i.getAttribute("name"))
            value = _checkget(i)
            mp.properties[op] = unicode(value)

    except IOError:
        print "WHITOUT galicaster.xml"
        without_galicaster = True

    for etype, tag in mediapackage.MANIFEST_TAGS.items():
        for i in manifest.getElementsByTagName(tag):
            if i.hasAttribute("id"):
                identifier = unicode(i.getAttribute("id"))
            else:
                identifier = None
            uri = _checknget(i, "url")
            flavor = unicode(i.getAttribute("type"))
            mime = _checknget(i, "mimetype")
            duration = _checknget(i, "duration")
            mp.add(_getElementAbsPath(uri, mp.getURI()), etype, flavor, mime,
                   duration, identifier)

            if uri == 'org.opencastproject.capture.agent.properties' and etype == mediapackage.TYPE_ATTACHMENT:
                mp.manual = False

            if etype == mediapackage.TYPE_TRACK and mp.status == mediapackage.NEW and without_galicaster:
                mp.status = mediapackage.RECORDED

    mp.marshalDublincore()
    return mp
Esempio n. 14
0
    def test_ingest_manual(self):
        mp = mediapackage.Mediapackage(uri='/tmp')
        mp.manual = True

        self.worker._ingest(mp)
        self.assertEqual(self.client.calls[0]['workflow'], None)
        self.assertEqual(self.client.calls[0]['workflow_instance'], None)
        self.assertEqual(self.client.calls[0]['workflow_parameters'], None)
Esempio n. 15
0
 def test_add_tracks(self):
     mp = mediapackage.Mediapackage()
     file_path = path.join(self.baseDir, 'SCREEN.mpeg')
     mp.add(file_path, mediapackage.TYPE_TRACK, 'presenter/source')
     file_path = path.join(self.baseDir, 'CAMERA.mpeg')
     mp.add(file_path, mediapackage.TYPE_TRACK, 'presentation/source')
     file_path = path.join(self.baseDir, 'episode.xml')
     mp.add(file_path, mediapackage.TYPE_CATALOG, 'dublincore/episode')
     self.assertEqual(len(mp.getElements()), 3)
Esempio n. 16
0
    def default_mediapackage(self):
        global config

        now = datetime.now().replace(microsecond=0)
        title = "Recording started at " + now.isoformat()
        mp = mediapackage.Mediapackage(title=title)
        if (context):
            mp.setSeries(
                {'identifier': context.get_conf().get('series', 'default')})
        return mp
Esempio n. 17
0
    def test_bad_delete(self):
        repo = repository.Repository(self.tmppath)

        mp = mediapackage.Mediapackage()
        mp.add(self.track1)
        mp.add(self.track2)
        mp.add(self.catalog)
        mp.metadata_episode["title"] = "Title"

        self.assertRaises(KeyError, repo.delete, mp)
Esempio n. 18
0
    def test_add(self):
        repo = repository.Repository(self.tmppath)

        mp = mediapackage.Mediapackage()
        mp.add(self.track1)
        mp.add(self.track2)
        mp.add(self.catalog)

        repo.add(mp)
        self.assertRaises(KeyError, repo.add, mp)
        self.assertEqual(repo.size(), 1)
Esempio n. 19
0
    def test_ingest_no_manual_only_workflow(self):
        mp = mediapackage.Mediapackage(identifier='1', uri='/tmp')
        mp.addAttachmentAsString(
            'org.opencastproject.workflow.definition=mini-full',
            name='org.opencastproject.capture.agent.properties',
            identifier='org.opencastproject.capture.agent.properties')
        mp.manual = False

        self.worker._ingest(mp)
        self.assertEqual(self.client.calls[0]['workflow'], 'mini-full')
        self.assertEqual(self.client.calls[0]['workflow_instance'], '1')
        self.assertEqual(self.client.calls[0]['workflow_parameters'], {})
Esempio n. 20
0
    def setUp(self):
        self.logger_filename = '/tmp/galicaster_test.log'
        self.repo = self.RepoMock()
        self.client = self.OCHTTPClientMock()
        self.dispatcher = self.DispatcherMock()
        self.logger = Logger(self.logger_filename)
        self.worker = worker.Worker(self.dispatcher, self.repo, self.logger,
                                    self.client)

        self.repo1 = Repository()
        self.mp = mediapackage.Mediapackage()
        self.repo1.add(self.mp)
Esempio n. 21
0
 def test_operation_status(self):
     mp = mediapackage.Mediapackage()
     mp.add(self.track1)
     mp.operation["ingest"] = 4
     mp.marshalDublincore()
     da = minidom.parseString(serializer.set_properties(mp))
     name = "key:ingest"
     try:
         self.assertEqual(da.getElementsByTagName(name)[0].firstChild.wholeText.strip().strip("\n"), 
                          da.getElementsByTagName(name)[0].firstChild.wholeText.strip().strip("\n"))
     except IndexError:
         pass
Esempio n. 22
0
def start_rapidrec_recording():

    logger.info("Start rapidrec recording")

    now = datetime.datetime.now().replace(microsecond=0)
    title = "RapidRec started at {0}".format(now.isoformat())

    # Create mediapackage
    mp = mediapackage.Mediapackage(title=title, date=now)
   
    # Start recording
    recorder.record(mp)
Esempio n. 23
0
    def select_devices(self):
        """Loads the bins and creates the preview areas for the active profile, creating a new mediapacakge."""
        self.configure_profile()
        logger.info("Setting Devices the new way")
        now = datetime.datetime.now().replace(microsecond=0)
        self.mediapackage = mediapackage.Mediapackage(title=_("Recording started at {0}").format(now.isoformat()))

        context.get_state().mp = self.mediapackage.identifier

        if self.ok_to_show:
            self.init_recorder()
        self.error_handle_id = None
        return False
Esempio n. 24
0
    def test_manual(self):
        repo = self.RepoMock()
        client = self.MHHTTPClientMock()
        dispatcher = self.DispatcherMock()
        w = worker.Worker(dispatcher, repo, client)

        mp = mediapackage.Mediapackage(uri='/tmp')
        mp.manual = True
        
        w._ingest(mp)
        self.assertEqual(client.calls[0]['workflow'], None)
        self.assertEqual(client.calls[0]['workflow_instance'], None)
        self.assertEqual(client.calls[0]['workflow_parameters'], None)
Esempio n. 25
0
    def test_repo_lifecycle(self):
        repo = repository.Repository(self.tmppath)

        mp = mediapackage.Mediapackage()
        mp.title = 'lifecycle test MP'
        self.assertEqual(len(repo), 0)

        repo.add_after_rec(mp, [], 30)
        self.assertEqual(len(repo), 1)
        
        for catalog in mp.getCatalogs():
            self.assertEqual(mp.getURI(), os.path.dirname(catalog.getURI()))
            self.assertTrue(os.path.isfile(catalog.getURI()), 
                            'The catalog path {0} not exists'.format(catalog.getURI()))
Esempio n. 26
0
    def test_ingest_no_manual(self):
        mp = mediapackage.Mediapackage(identifier='1', uri='/tmp')
        mp.add(self.path_capture_agent_properties,
               mediapackage.TYPE_ATTACHMENT,
               identifier='org.opencastproject.capture.agent.properties')
        mp.manual = False

        self.worker._ingest(mp)
        self.assertEqual(self.client.calls[0]['workflow'], 'full')
        self.assertEqual(self.client.calls[0]['workflow_instance'], '1')
        self.assertEqual(self.client.calls[0]['workflow_parameters'], {
            'trimHold': 'false',
            'captionHold': 'false'
        })
Esempio n. 27
0
    def test_no_manual(self):
        repo = self.RepoMock()
        client = self.MHHTTPClientMock()
        dispatcher = self.DispatcherMock()
        w = worker.Worker(dispatcher, repo, client)

        mp = mediapackage.Mediapackage(uri='/tmp')
        mp.properties['workflow_id'] = "1"
        mp.add(self.path_capture_agent_properties, mediapackage.TYPE_ATTACHMENT, identifier='org.opencastproject.capture.agent.properties')
        mp.manual = False
        
        w._ingest(mp)
        self.assertEqual(client.calls[0]['workflow'], 'full')
        self.assertEqual(client.calls[0]['workflow_instance'], '1')
        self.assertEqual(client.calls[0]['workflow_parameters'], {'trimHold': 'false', 'captionHold': 'false'})
Esempio n. 28
0
    def test_delete(self):
        repo = repository.Repository(self.tmppath)

        mp = mediapackage.Mediapackage()
        mp.add(self.track1)
        mp.add(self.track2)
        mp.add(self.catalog)
        mp.metadata_episode["title"] = "Title"

        repo.add(mp)
        self.assertEqual(repo.size(), 1)

        repo.delete(mp)
        self.assertEqual(repo.size(), 0)
        self.assertEqual(len(os.listdir(self.tmppath)), 1)  #attach
Esempio n. 29
0
    def test_save_in_zip(self):
        mp = mediapackage.Mediapackage()
        mp.add(self.track1)
        mp.add(self.track2)
        mp.add(self.catalog)
        mp.marshalDublincore()

        da = minidom.parseString(serializer.set_episode(mp))
        db = minidom.parse(self.path_catalog)

        for name in ["dcterms:title", "dcterms:identifier", "dcterms:created"]:
            try:
                self.assertEqual(da.getElementsByTagName(name)[0].firstChild.wholeText.strip().strip("\n"), 
                                 db.getElementsByTagName(name)[0].firstChild.wholeText.strip().strip("\n"))
            except IndexError:
                continue
Esempio n. 30
0
    def test_ingest_nightly(self):
        repo = Repository('/tmp/repo_night')
        dispatcher = Dispatcher()
        logger = Logger(None)
        w = worker.Worker(dispatcher, repo, logger, self.client)

        mp = mediapackage.Mediapackage()
        mp.setOpStatus(worker.INGEST_CODE, mediapackage.OP_NIGHTLY)
        repo.add(mp)

        dispatcher.emit('timer-nightly')
        time.sleep(1)  # Need time to create zip
        self.assertEqual(len(self.client.calls), 1)
        self.assertEqual(mp.getOpStatus(worker.INGEST_CODE),
                         mediapackage.OP_DONE)
        rmtree('/tmp/repo_night')