Skip to content

Commit

Permalink
Add new composite dataset
Browse files Browse the repository at this point in the history
  • Loading branch information
JohnVinyard committed Aug 18, 2018
1 parent 4df276a commit d05dc19
Show file tree
Hide file tree
Showing 5 changed files with 63 additions and 2 deletions.
3 changes: 2 additions & 1 deletion docs/source/datasets.rst
Original file line number Diff line number Diff line change
Expand Up @@ -5,4 +5,5 @@ Datasets

.. autoclass:: FreeSoundSearch
.. autoclass:: InternetArchive
.. autoclass:: PhatDrumLoops
.. autoclass:: PhatDrumLoops
.. autoclass:: CompositeDataset
2 changes: 1 addition & 1 deletion zounds/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -70,4 +70,4 @@

from datasets import \
PhatDrumLoops, InternetArchive, FreeSoundSearch, DataSetCache, Directory, \
ingest, MusicNet, NSynth
ingest, MusicNet, NSynth, CompositeDataset
1 change: 1 addition & 0 deletions zounds/datasets/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -14,3 +14,4 @@
from ingest import ingest
from predownload import PreDownload
from nsynth import NSynth
from composite import CompositeDataset
25 changes: 25 additions & 0 deletions zounds/datasets/composite.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@


class CompositeDataset(object):
"""
A dataset composed of two or more others
Args:
datasets (list of datasets): One or more other datasets
Examples:
>>> from zounds import InternetArchive, CompositeDataset, ingest
>>> dataset1 = InternetArchive('beethoven_ingigong_850')
>>> dataset2 = InternetArchive('The_Four_Seasons_Vivaldi-10361')
>>> composite = CompositeDataset(dataset1, dataset2)
>>> ingest(composite, Sound) # ingest data from both datasets
"""

def __init__(self, *datasets):
super(CompositeDataset, self).__init__()
self.datasets = datasets

def __iter__(self):
for dataset in self.datasets:
for meta in dataset:
yield meta
34 changes: 34 additions & 0 deletions zounds/datasets/test_composite.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,34 @@
import unittest2
from predownload import PreDownload
from composite import CompositeDataset
from zounds.soundfile import AudioMetaData


class DatasetA(object):
def __init__(self):
super(DatasetA, self).__init__()

def __iter__(self):
yield AudioMetaData(uri=PreDownload('', 'http://example.com/1'))
yield AudioMetaData(uri=PreDownload('', 'http://example.com/2'))


class DatasetB(object):
def __init__(self):
super(DatasetB, self).__init__()

def __iter__(self):
yield AudioMetaData(uri=PreDownload('', 'http://example.com/3'))
yield AudioMetaData(uri=PreDownload('', 'http://example.com/4'))


class CompositeDatasetTests(unittest2.TestCase):

def test_composite_iterates_over_multiple_datasets(self):
composite = CompositeDataset(DatasetA(), DatasetB())
items = [x.uri.url for x in composite]
self.assertEqual(4, len(items))
self.assertIn('http://example.com/1', items)
self.assertIn('http://example.com/2', items)
self.assertIn('http://example.com/3', items)
self.assertIn('http://example.com/4', items)

0 comments on commit d05dc19

Please sign in to comment.