コード例 #1
0
ファイル: tagger.py プロジェクト: phw/picard
 def cluster(self, objs):
     """Group files with similar metadata to 'clusters'."""
     log.debug("Clustering %r", objs)
     if len(objs) <= 1 or self.unclustered_files in objs:
         files = list(self.unclustered_files.files)
     else:
         files = self.get_files_from_objects(objs)
     for name, artist, files in Cluster.cluster(files, 1.0):
         QtCore.QCoreApplication.processEvents()
         cluster = self.load_cluster(name, artist)
         for file in sorted(files, key=attrgetter('discnumber', 'tracknumber', 'base_filename')):
             file.move(cluster)
コード例 #2
0
 def cluster(self, objs):
     """Group files with similar metadata to 'clusters'."""
     log.debug("Clustering %r", objs)
     if len(objs) <= 1 or self.unclustered_files in objs:
         files = list(self.unclustered_files.files)
     else:
         files = self.get_files_from_objects(objs)
     for name, artist, files in Cluster.cluster(files, 1.0):
         QtCore.QCoreApplication.processEvents()
         cluster = self.load_cluster(name, artist)
         for file in sorted(files,
                            key=attrgetter('discnumber', 'tracknumber',
                                           'base_filename')):
             file.move(cluster)
コード例 #3
0
 def cluster(self, objs):
     """Group files with similar metadata to 'clusters'."""
     self.log.debug("Clustering %r", objs)
     if len(objs) <= 1 or self.unmatched_files in objs:
         files = list(self.unmatched_files.files)
     else:
         files = self.get_files_from_objects(objs)
     fcmp = lambda a, b: (cmp(a.discnumber, b.discnumber) or cmp(
         a.tracknumber, b.tracknumber) or cmp(a.base_filename, b.
                                              base_filename))
     for name, artist, files in Cluster.cluster(files, 1.0):
         QtCore.QCoreApplication.processEvents()
         cluster = self.load_cluster(name, artist)
         for file in sorted(files, fcmp):
             file.move(cluster)
コード例 #4
0
ファイル: tagger.py プロジェクト: SRITANU/picard
 def cluster(self, objs):
     """Group files with similar metadata to 'clusters'."""
     log.debug("Clustering %r", objs)
     if len(objs) <= 1 or self.unmatched_files in objs:
         files = list(self.unmatched_files.files)
     else:
         files = self.get_files_from_objects(objs)
     fcmp = lambda a, b: (
         cmp(a.discnumber, b.discnumber) or
         cmp(a.tracknumber, b.tracknumber) or
         cmp(a.base_filename, b.base_filename))
     for name, artist, files in Cluster.cluster(files, 1.0):
         QtCore.QCoreApplication.processEvents()
         cluster = self.load_cluster(name, artist)
         for file in sorted(files, fcmp):
             file.move(cluster)
コード例 #5
0
    def cluster(self, objs):
        """Group files with similar metadata to 'clusters'."""
        log.debug("Clustering %r", objs)
        if len(objs) <= 1 or self.unclustered_files in objs:
            files = list(self.unclustered_files.files)
        else:
            files = self.get_files_from_objects(objs)

        self.window.set_sorting(False)
        cluster_files = defaultdict(list)
        for name, artist, files in Cluster.cluster(files, 1.0, self):
            cluster = self.load_cluster(name, artist)
            cluster_files[cluster].extend(files)
        for cluster, files in process_events_iter(cluster_files.items()):
            cluster.add_files(files)
        self.window.set_sorting(True)
コード例 #6
0
ファイル: test_clustering.py プロジェクト: ruipin/picard
 def test_cluster_multi(self):
     files = [
         self._create_file('album cluster1', 'artist bar'),
         self._create_file('album cluster2', 'artist foo'),
         self._create_file('album cluster1', 'artist foo'),
         self._create_file('albumcluster2', 'artist bar'),
         self._create_file('album single', 'artist bar'),
     ]
     clusters = list(Cluster.cluster(files))
     self.assertEqual(3, len(clusters))
     self.assertClusterEqual('album cluster1', 'artist bar',
                             {files[0], files[2]}, clusters[0])
     self.assertClusterEqual('album cluster2', 'artist foo',
                             {files[1], files[3]}, clusters[1])
     self.assertClusterEqual('album single', 'artist bar', {files[4]},
                             clusters[2])
コード例 #7
0
ファイル: test_clustering.py プロジェクト: ruipin/picard
 def test_cluster_by_path(self):
     files = [
         self._create_file(None, None, 'artist1/album1/foo1.ogg'),
         self._create_file(None, None, 'album2/foo1.ogg'),
         self._create_file(None, None, 'artist1/album1/foo2.ogg'),
         self._create_file(None, None, 'album2/foo2.ogg'),
         self._create_file(None, None, 'single/foo.ogg'),
         self._create_file(None, None, 'album1/foo3.ogg'),
     ]
     clusters = list(Cluster.cluster(files))
     self.assertEqual(3, len(clusters))
     self.assertClusterEqual('album1', 'artist1',
                             {files[0], files[2], files[5]}, clusters[0])
     self.assertClusterEqual('album2', 'Diverse Interpreten',
                             {files[1], files[3]}, clusters[1])
     self.assertClusterEqual('single', 'Diverse Interpreten', {files[4]},
                             clusters[2])
コード例 #8
0
    def cluster(self, objs):
        """Group files with similar metadata to 'clusters'."""
        log.debug("Clustering %r", objs)
        if len(objs) <= 1 or self.unclustered_files in objs:
            files = list(self.unclustered_files.files)
        else:
            files = self.get_files_from_objects(objs)

        self.window.set_sorting(False)
        cluster_files = defaultdict(list)
        for name, artist, files in Cluster.cluster(files, 1.0, self):
            cluster = self.load_cluster(name, artist)
            cluster_files[cluster].extend(
                sorted(files,
                       key=attrgetter('discnumber', 'tracknumber',
                                      'base_filename')))
        for cluster, files in cluster_files.items():
            cluster.add_files(files)
            QtCore.QCoreApplication.processEvents()
        self.window.set_sorting(True)
コード例 #9
0
ファイル: tagger.py プロジェクト: rdswift/picard
 def _do_clustering(self, files):
     # The clustering algorithm should completely run in the thread,
     # hence do not return the iterator.
     return list(Cluster.cluster(files))
コード例 #10
0
ファイル: test_clustering.py プロジェクト: ruipin/picard
 def test_cluster_single_file(self):
     files = [
         self._create_file('album foo', 'artist foo'),
     ]
     clusters = list(Cluster.cluster(files))
     self.assertEqual(1, len(clusters))
コード例 #11
0
ファイル: test_clustering.py プロジェクト: ruipin/picard
 def test_cluster_none(self):
     clusters = list(Cluster.cluster([]))
     # No cluster is being created
     self.assertEqual(0, len(clusters))