def testQuerySchema_noDescriptor(self):
     provider = MetadataSourceAggregator(sources, map)
     schema = provider.QuerySchema([])
     self.assertEquals(
         "<?xml version='1.0' encoding='UTF-8'?>\n" +
         "<DescriptionScheme>\n" + "  <Attributes/>\n" +
         "</DescriptionScheme>\n" + "", self.dumpXml(schema))
 def testAggregatorScriptBuilding_partialSecondSource(self):
     provider = MetadataSourceAggregator(sources, map)
     (script, sourceIds) = provider._AggregatorScriptFor(
         ["Song::DynamicComplexity"])
     self.assertEquals(
         "copy 1 WaveFile::Complexity Song::DynamicComplexity\n" + "",
         script)
     self.assertEquals(["source2"], sourceIds)
 def testQueryDescriptors_singleDescriptor(self):
     provider = MetadataSourceAggregator(sources, map)
     descriptors = provider.QueryDescriptors('id1', ["Song::Artist"])
     self.assertEquals(
         "<?xml version='1.0' encoding='UTF-8'?>\n" +
         "<DescriptorsPool>\n" + "  <ScopePool name='Song' size='1'>\n" +
         "    <AttributePool name='Artist'>Artist 1</AttributePool>\n" +
         "  </ScopePool>\n" + "</DescriptorsPool>\n" + "",
         self.dumpXml(descriptors))
    def testUpdateDescriptors_noDescriptor(self):
        provider = MetadataSourceAggregator(sources, map)
        descriptors = provider.QueryDescriptors('id1', [])
        provider.UpdateDescriptors('newId', descriptors)

        descriptors = provider.QueryDescriptors('newId', [])
        self.assertEquals(
            "<?xml version='1.0' encoding='UTF-8'?>\n" +
            "<DescriptorsPool/>\n" + "", self.dumpXml(descriptors))
 def testQuerySchema_singleSource(self):
     provider = MetadataSourceAggregator(sources, map)
     schema = provider.QuerySchema(["Song::Artist"])
     self.assertEquals(
         "<?xml version='1.0' encoding='UTF-8'?>\n" +
         "<DescriptionScheme>\n" + "  <Attributes>\n" +
         "    <Attribute scope='Song' name='Artist' type='String'/>\n" +
         "  </Attributes>\n" + "</DescriptionScheme>\n" + "",
         self.dumpXml(schema))
 def testAvailableDescriptors(self):
     provider = MetadataSourceAggregator(sources, map)
     attributeIds = provider.AvailableDescriptors()
     expectedAttributeIds = [
         "Song::Artist",
         "Song::Title",
         "Song::Genre",
         "Song::DynamicComplexity",
         "Frame::Energy",
     ]
     self.assertEquals(expectedAttributeIds, attributeIds)
 def testDisgregatorScriptsBuilding_severalSources(self):
     provider = MetadataSourceAggregator(sources, map)
     script = provider._DisgregatorScripts(["Song::Artist", "Song::Title", "Song::DynamicComplexity"])
     self.assertEquals(
         {
             "source1": "copy 1 Song::Artist File::Singer\n" + "copy 1 Song::Title File::Name\n",
             "source2": "copy 1 Song::DynamicComplexity WaveFile::Complexity\n",
             "source3": "",
         },
         script,
     )
 def testAggregatorScriptBuilding_severalSources(self):
     provider = MetadataSourceAggregator(sources, map)
     (script, sourceIds) = provider._AggregatorScriptFor(["Song::Artist", "Song::Title", "Song::DynamicComplexity"])
     self.assertEquals(
         "copy 1 File::Singer Song::Artist\n"
         + "copy 1 File::Name Song::Title\n"
         + "copy 2 WaveFile::Complexity Song::DynamicComplexity\n"
         + "",
         script,
     )
     self.assertEquals(["source1", "source2"], sourceIds)
 def testQuerySchema_otherSource(self):
     provider = MetadataSourceAggregator(sources, map)
     schema = provider.QuerySchema([
         "Song::DynamicComplexity",
     ])
     self.assertEquals(
         "<?xml version='1.0' encoding='UTF-8'?>\n" +
         "<DescriptionScheme>\n" + "  <Attributes>\n" +
         "    <Attribute scope='Song' name='DynamicComplexity' type='Float'>\n"
         + "      <fRange>\n" + "        <Min>0</Min>\n" +
         "        <Max>10</Max>\n" + "      </fRange>\n" +
         "    </Attribute>\n" + "  </Attributes>\n" +
         "</DescriptionScheme>\n" + "", self.dumpXml(schema))
 def testAggregatorScriptBuilding_severalSources(self):
     provider = MetadataSourceAggregator(sources, map)
     (script, sourceIds) = provider._AggregatorScriptFor([
         "Song::Artist",
         "Song::Title",
         "Song::DynamicComplexity",
     ])
     self.assertEquals(
         "copy 1 File::Singer Song::Artist\n" +
         "copy 1 File::Name Song::Title\n" +
         "copy 2 WaveFile::Complexity Song::DynamicComplexity\n" + "",
         script)
     self.assertEquals(["source1", "source2"], sourceIds)
 def testQueryDescriptors_multipleDescriptors(self):
     provider = MetadataSourceAggregator(sources, map)
     descriptors = provider.QueryDescriptors('id1', [
         "Song::Artist",
         "Song::Title",
         "Song::DynamicComplexity",
     ])
     self.assertEquals(
         "<?xml version='1.0' encoding='UTF-8'?>\n" +
         "<DescriptorsPool>\n" + "  <ScopePool name='Song' size='1'>\n" +
         "    <AttributePool name='Artist'>Artist 1</AttributePool>\n" +
         "    <AttributePool name='Title'>Title 1</AttributePool>\n" +
         "    <AttributePool name='DynamicComplexity'>8.1</AttributePool>\n"
         + "  </ScopePool>\n" + "</DescriptorsPool>\n" + "",
         self.dumpXml(descriptors))
 def testDisgregatorScriptsBuilding_severalSources(self):
     provider = MetadataSourceAggregator(sources, map)
     script = provider._DisgregatorScripts([
         "Song::Artist",
         "Song::Title",
         "Song::DynamicComplexity",
     ])
     self.assertEquals(
         {
             "source1": "copy 1 Song::Artist File::Singer\n" +
             "copy 1 Song::Title File::Name\n",
             "source2":
             "copy 1 Song::DynamicComplexity WaveFile::Complexity\n",
             "source3": ""
         }, script)
    def testUpdateDescriptors_partialPool(self):
        provider = MetadataSourceAggregator(sources, map)

        # Init newId just with some attributes of id1
        attributeIds = [
            "Song::Artist",
            "Song::Title",
        ]
        poolToCopy = provider.QueryDescriptors('id1', attributeIds)
        provider.UpdateDescriptors('newId', poolToCopy)
        # Merge them with some others from id2
        poolToCopy = provider.QueryDescriptors('id2', attributeIds)
        attributeIds = [
            "Song::Artist",
        ]
        provider.UpdateDescriptors('newId', poolToCopy, attributeIds)

        attributeIds = [
            "Song::Artist",
            "Song::Title",
        ]
        descriptors = provider.QueryDescriptors('newId', attributeIds)
        self.assertEquals(
            "<?xml version='1.0' encoding='UTF-8'?>\n" +
            "<DescriptorsPool>\n" + "  <ScopePool name='Song' size='1'>\n" +
            "    <AttributePool name='Artist'>Artist 2</AttributePool>\n" +
            "    <AttributePool name='Title'>Title 1</AttributePool>\n" +
            "  </ScopePool>\n" + "</DescriptorsPool>\n" + "",
            self.dumpXml(descriptors))
 def testAggregatorScriptBuilding_partialThirdSource(self):
     provider = MetadataSourceAggregator(sources, map)
     (script, sourceIds) = provider._AggregatorScriptFor(["Frame::Energy"])
     self.assertEquals("copy 1 Frame::SpectralEnergy Frame::Energy\n" + "", script)
     self.assertEquals(["source3"], sourceIds)
 def testAggregatorScriptBuilding_partialSecondSource(self):
     provider = MetadataSourceAggregator(sources, map)
     (script, sourceIds) = provider._AggregatorScriptFor(["Song::DynamicComplexity"])
     self.assertEquals("copy 1 WaveFile::Complexity Song::DynamicComplexity\n" + "", script)
     self.assertEquals(["source2"], sourceIds)
 def testAggregatorScriptBuilding_partialFirstSource(self):
     provider = MetadataSourceAggregator(sources, map)
     (script, sourceIds) = provider._AggregatorScriptFor(["Song::Artist"])
     self.assertEquals("copy 1 File::Singer Song::Artist\n" + "", script)
     self.assertEquals(["source1"], sourceIds)
 def testAggregatorScriptBuilding_partialFirstSource(self):
     provider = MetadataSourceAggregator(sources, map)
     (script, sourceIds) = provider._AggregatorScriptFor(["Song::Artist"])
     self.assertEquals("copy 1 File::Singer Song::Artist\n" + "", script)
     self.assertEquals(["source1"], sourceIds)
        ("ExtractedChord::ChordRoot", "chord", "ExtractedChord::Root"),
        ("ExtractedChord::ChordMode", "chord", "ExtractedChord::Mode"),
    ]

    #Here we load new values from configuration file, if it exists
    if options.ConfigurationFile is not None:

        if not os.access(options.ConfigurationFile, os.R_OK):
            print >> sys.stderr, "Bad Configuration File!"
            sys.exit(-1)

        execfile(options.ConfigurationFile)


provider = MetadataSourceAggregator(config.sources,
                                    config.map,
                                    verbose=config.verbose)

if options.printSchema is not None:
    target = sys.stdout if options.printSchema == "-" else open(
        options.printSchema, 'w')
    provider.QuerySchema(provider.AvailableDescriptors()).Dump(target)
    sys.exit()

if not args:
    parser.print_help()
    sys.exit()

#if options.writeback: sys.exit()

for audiofile in args:
 def testAggregatorScriptBuilding_partialThirdSource(self):
     provider = MetadataSourceAggregator(sources, map)
     (script, sourceIds) = provider._AggregatorScriptFor(["Frame::Energy"])
     self.assertEquals("copy 1 Frame::SpectralEnergy Frame::Energy\n" + "",
                       script)
     self.assertEquals(["source3"], sourceIds)