def testGDynamicMethods(self): log.setLevel(llG) _log.info("------- Dynamic methods test --------") rmm = RichMetadataGenerator.getInstance() meta = rmm.getRichMetadata() meta.setProductionLocation("SI").setLanguage("Slovenian").setOriginator("JSI") meta.setCaptionLanguage("SI").setGenre("Code").setPublisher("p2p-next") meta.setMinimumAge("3").setProductionDate("2010-8-16").setCaptionLanguage("EN") meta.setReleaseDate("2010-8-17").setTitleSeriesTitle("P2P-Next code") meta.setTitleMain("Rich Metadata implementation") meta.setTitleEpisodeTitle("Rich Metadata v" + __revision__) meta.setDuration("0.75MM").setHorizontalSize("2").setVerticalSize("cca. 1300") meta.setVideoCoding("Generated").setAudioCoding("Manual").setFrameRate("1") meta.setNumOfChannels("2").setFileSize("cca. 56k").setBitRate("75") meta.setAspectRatio("Substantial") meta.setSynopsis("Initial study of RichMetadata API according to the P2P-Next project design") xml_tva = rmm.build(meta) _log.debug(rmm.prettyPrint(xml_tva)) xml_mpeg7 = rmm.build(meta, metadata.TAG_MPEG7) _log.debug(rmm.prettyPrint(xml_mpeg7)) self.crossBuildsCompareXML(xml_tva, xml_mpeg7) for m in metadata.METADATA_SETS: meta = rmm.getRichMetadata(None, m) out = "" apimethods = meta.getAPIMethods() apimethods.sort() for method in apimethods: out += method + ", " out = out.strip().rstrip(",") _log.debug(m.capitalize() + " metadata set current API methods: " + out)
def testIOptionalMetadata(self): log.setLevel(llI) _log.info("------- Optional metadata test --------") rmg = RichMetadataGenerator.getInstance() rm_tva_xml = dict() rm_mpeg7_xml = dict() mmap = self.metaMap() _log.debug("+ get RichMetadata instance") for k, v in mmap.items(): _log.debug("\n" + v.toString()) _log.debug("+ RichMetadata instance to XML") for k, v in mmap.items(): xml = rmg.build(v) rm_tva_xml["tva_" + k] = xml _log.debug(rmg.prettyPrint(xml)) xml = rmg.build(v, metadata.TAG_MPEG7) rm_mpeg7_xml["mpeg7_" + k] = xml _log.debug(rmg.prettyPrint(xml)) _log.debug("+ XML back to RichMetadata instance") for k, v in rm_tva_xml.items(): _log.debug("++ " + k + " to meta") m = rmg.getRichMetadata(v) orig = k.split("_")[1] self.metadataCrossCompare(mmap[orig], m) for k, v in rm_mpeg7_xml.items(): _log.debug("++ " + k + " to meta") m = rmg.getRichMetadata(v) orig = k.split("_")[1] self.metadataCrossCompare(mmap[orig], m) _log.debug("+ RichMetadata instance TVA cross to MPEG7 XML") for k, v in mmap.items(): xml_tva = rmg.build(v) xml_mpeg7 = rmg.build(v, metadata.TAG_MPEG7) self.crossBuildsCompareXML(xml_tva, xml_mpeg7)
def testCHelper(self): log.setLevel(llC) _log.info("------- Helper test --------") a = "{kuku}lala" helper = metadata.HELPER[metadata.GET_TAG] self.assertEqual(helper(a), "lala") helper = metadata.HELPER[metadata.SPLIT_TAG] self.assertEqual(helper(a), ["kuku", "lala"]) e = Element('test', {'{a}b':'c','{d12}d':'{e}[]','{d?"?E#}f':'{}g'}) helper = metadata.HELPER[metadata.SPLIT_ATTRIBS] res = helper(e) for k, v in e.attrib.items(): t = k.split("}")[1] self.assertEqual(v,res[t]) e.text = " test\nlala " helper = metadata.HELPER[metadata.GET_TEXT] self.assertEqual(helper(e), " test\nlala ") e.text = " \n " self.assertEqual(helper(e), "") e.text = "" c = SubElement(e, metadata.TAG_NAME) c.text = "This text describes the parent" helper = metadata.HELPER[metadata.TAG_SUPPRESS] self.assertEqual(helper(c, e), ('test', 'This text describes the parent')) inputData = StringIO("<root><Welookfor><Name>data</Name></Welookfor></root>") events = ("start", "end") iterator = iterparse(inputData, events=events) for event, elem in iterator: if event == "end": if elem.tag == "Name": self.assertEqual(helper(elem, iterator.next()[1]), ('Welookfor', 'data'))
def testALearn(self): log.setLevel(llA) _log.info("------- Learn test --------") rmm = RichMetadataGenerator.getInstance() for m in rmm.knownMasters(): master = rmm.getMaster(m) _log.debug("Learned from master: %s, %s", master.formatType, master.metadataType) _log.debug("\n" + master.root.toString())
def testECrossBuilds(self, tva_in=None, mpeg7_in=None): log.setLevel(llE) _log.info("------- Cross build --------") rmg = RichMetadataGenerator.getInstance() tva_xml = rmg.build(self.getMetaCore()) mpeg7_xml = rmg.build(self.getMetaCore(), metadata.TAG_MPEG7) _log.debug(rmg.prettyPrint(tva_xml)) _log.debug(rmg.prettyPrint(mpeg7_xml)) self.crossBuildsCompareXML(tva_xml, mpeg7_xml)
def testDBuild(self): log.setLevel(llD) _log.info("------- Build test --------") rmm = RichMetadataGenerator.getInstance() tva = rmm.getRichMetadata(metadata.LEARN_BASE_CORE[metadata.TAG_TVA_MAIN]) xml_tva = rmm.build(tva) _log.debug(rmm.prettyPrint(xml_tva)) mpeg7 = rmm.getRichMetadata(metadata.LEARN_BASE_CORE[metadata.TAG_MPEG7]) xml_mpeg7 = rmm.build(mpeg7, metadata.TAG_MPEG7) _log.debug(rmm.prettyPrint(xml_mpeg7))
def testBGetMetadata(self): log.setLevel(llB) _log.info("------- Get metadata --------") rmm = RichMetadataGenerator.getInstance() tva = rmm.getRichMetadata(metadata.LEARN_BASE_CORE[metadata.TAG_TVA_MAIN]) _log.debug("\n" + tva.toString()) mpeg7 = rmm.getRichMetadata(metadata.LEARN_BASE_CORE[metadata.TAG_MPEG7], metadata.TAG_MPEG7) _log.debug("\n" + mpeg7.toString()) for k in tva.core: self.assertTrue(mpeg7.core.has_key(k)) for k in tva.core: _tvaExists = False _mpeg7Exists = False if getattr(tva, k): _tvaExists = True if getattr(mpeg7, k): _mpeg7Exists = True if _tvaExists != _mpeg7Exists: _log.warn("Offending core key %s, TVA = %s, MPEG7 = %s", k, _tvaExists, _mpeg7Exists)
def testHSparseMetadata(self): log.setLevel(llH) _log.info("------- Sparse metadata test --------") rmm = RichMetadataGenerator.getInstance() meta = rmm.getRichMetadata() meta.setProductionLocation("SI").setLanguage("Slovenian").setOriginator("JSI") xml_tva = rmm.build(meta) xml_mpeg7 = rmm.build(meta, metadata.TAG_MPEG7) _log.debug(rmm.prettyPrint(xml_tva)) _log.debug(rmm.prettyPrint(xml_mpeg7)) self.crossBuildsCompareXML(xml_tva, xml_mpeg7) meta2 = rmm.getRichMetadata() meta2.setTitleMain("Rich Metadata implementation") meta2.setNumOfChannels("2").setFileSize("cca. 56k").setBitRate("75") meta2.setHorizontalSize("2").setVerticalSize("cca. 1300") xml_tva2 = rmm.build(meta2) _log.debug(rmm.prettyPrint(xml_tva2)) xml_mpeg7_2 = rmm.build(meta2, metadata.TAG_MPEG7) _log.debug(rmm.prettyPrint(xml_mpeg7_2)) self.crossBuildsCompareXML(xml_tva2, xml_mpeg7_2)
def testJDIDMetadata(self): log.setLevel(llJ) _log.info("------- DID metadata test --------") rmg = RichMetadataGenerator.getInstance() _rm = dict() _log.debug("+ Get DID RichMetadata instances") for k, v in self.didMap().items(): _rm[k] = v _log.debug("\n" + v.toString()) richm = list() richm.append(_rm["base"]) richm.append(_rm["additional"]) _log.debug("+ RichMetadata instance DID to XML") didxml = list() for m in richm: xml = rmg.build(m) didxml.append(xml) _log.debug(rmg.prettyPrint(xml)) _log.debug("+ DID XML back to RichMetadata instance ") i = 0 for v in didxml: m = rmg.getRichMetadata(v) self.metadataCrossCompare(richm[i], m) i += 1
import os import sys from optparse import OptionParser, OptionGroup from JSI.RichMetadata.RichMetadata import RichMetadataGenerator, __revision__ from JSI.RichMetadata.conf import metadata from JSI.RichMetadata.utils import log _log = log.getLog('metagen') log.setLevel(log.ERROR) class MetaGen(object): def __init__(self): self.rmm = RichMetadataGenerator.getInstance() self.parser = None self.options = None self.metadataType = None self.meta = None self.setValue = False def run(self): """ Runs the metagen tool and returns generated rich metadata on std out """ if options.payments: self.metadataType = metadata.METADATA_PAYMENT if options.advertising: self.metadataType = metadata.METADATA_ADVERTISING if options.scalability: self.metadataType = metadata.METADATA_SCALABILITY
def setUp(self): log.setLevel(loglevel)
from xml.etree.ElementTree import Element, SubElement, iterparse import unittest from StringIO import StringIO from JSI.RichMetadata.RichMetadata import RichMetadataGenerator, __revision__ from JSI.RichMetadata.conf import metadata from JSI.RichMetadata.utils import log from JSI.RichMetadata.utils.TimeSeries import StatisticTimeSeries loglevel = log.INFO runspeed = True _log = log.getLog('RichMetadataTest') log.setLevel(loglevel) # For development purposes llA = loglevel llB = loglevel llC = loglevel llD = loglevel llE = loglevel llF = loglevel llG = loglevel llH = loglevel llI = loglevel llJ = loglevel class RichMetadataTest(unittest.TestCase): """ RichMetadata testing framework """
from xml.etree.cElementTree import Element, SubElement, iterparse, tostring #from xml.etree.ElementTree import Element, SubElement, iterparse, tostring from os import path from threading import RLock from cStringIO import StringIO from JSI.RichMetadata.conf import metadata from JSI.RichMetadata.utils import log __author__ = 'D. Gabrijelcic ([email protected])' __revision__ = '0.35' __all__ = ['RichMetadataGenerator', '__revision__'] _log = log.getLog('RichMetadata') log.setLevel(log.INFO, "RichMetadata") class RichMetadataGenerator(object): __single = None __lock = RLock() def __init__(self): if RichMetadataGenerator.__single: raise RuntimeError, "RichMetadataGenerator is Singleton" RichMetadataGenerator.__single = self self.knownTypes = metadata.BASE_FORMAT_TYPES # Learn bases self.learnBase = metadata.LEARN_BASE_CORE self.learnBaseOptional = metadata.LEARN_BASE_OPTIONAL self.master = dict() # Tag sets