Exemplo n.º 1
0
 def setUp(self):
     self.test_downloader = MockDownloader()
     self.test_provider = MockProvider(self.test_downloader)
     self.gigadl = GigaDl()
Exemplo n.º 2
0
#  The Software is provided "as is", without warranty of any kind, express or
#  implied, including but not limited to the warranties of merchantability,
#  fitness for a particular purpose and noninfringement. In no event shall the
#  authors or copyright holders be liable for any claim, damages or other
#  liability, whether in an action of contract, tort or otherwise, arising
#  from, out of or in connection with the software or the use or other dealing
#  in the Software.

from gigadl.GigaDl import GigaDl
from gigadl.provider.MegaDl import MegaDl
from gigadl.downloader.Urllib2Downloader import Urllib2Downloader


if __name__ == '__main__':
    provider = MegaDl(Urllib2Downloader())
    dl = GigaDl(provider)

    while True:
        print('Search:')
        keywords = raw_input()

        print('Searching...')
        results = dl.search(keywords)

        if not results:
            print('Nothing found!')
            continue

        for i, result in enumerate(results):
            print('(%d) %s' % (i, result))
Exemplo n.º 3
0
class TestGigaDl(unittest.TestCase):
    def setUp(self):
        self.test_downloader = MockDownloader()
        self.test_provider = MockProvider(self.test_downloader)
        self.gigadl = GigaDl()

    def test_init_one_provider(self):
        gigadl = GigaDl(self.test_provider)

        self.assertIn(self.test_provider, gigadl,
            'The provider given in the constructor is registered in the '
            'GigaDl instance')

        self.assertIs(gigadl.provider, self.test_provider,
            'The provider given in the constructor is the one currently used')

        self.assertIs(len(gigadl), 1, 'Only one provider is registered')

    def test_register_provider(self):
        bar_provider = MockProvider(self.test_downloader)

        self.gigadl.register_provider(self.test_provider)
        self.gigadl.register_provider(self.test_provider, 'foo')
        self.gigadl.register_provider(bar_provider, 'Bar bar')

        # match the name
        self.assertIn('Mock provider', self.gigadl,
            'The "Mock provider" provider in is registered in the GigaDl instance')

        self.assertIn('foo', self.gigadl,
            'The "foo" provider in is registered in the GigaDl instance')

        self.assertIn('Bar bar', self.gigadl,
            'The "bar" provider in is registered in the GigaDl instance')

        # match the object
        self.assertIn(self.test_provider, self.gigadl,
            'The "foo" provider in is registered in the GigaDl instance')

        self.assertIn(bar_provider, self.gigadl,
            'The "Bar bar" provider in is registered in the GigaDl instance')

        self.assertIs(len(self.gigadl), 3, 'Three providers are registered')

    def test_register_multiple_named_providers(self):
        bar_provider = MockProvider(self.test_downloader)

        self.gigadl.register_providers(foo=self.test_provider,
                                       bar=bar_provider)

        # match the name
        self.assertIn('foo', self.gigadl,
            'The "foo" provider in is registered in the GigaDl instance')

        self.assertIn('bar', self.gigadl,
            'The "bar" provider in is registered in the GigaDl instance')

        # match the object
        self.assertIn(bar_provider, self.gigadl,
            'The "foo" provider in is registered in the GigaDl instance')

        self.assertIn(self.test_provider, self.gigadl,
            'The "bar" provider in is registered in the GigaDl instance')

        self.assertIs(len(self.gigadl), 2, 'Two providers are registered')

    def test_register_multiple_providers(self):
        bar_provider = MockProvider(self.test_downloader, 'Bar bar')

        self.gigadl.register_providers(bar_provider, self.test_provider)

        # match the name
        self.assertIn('Mock provider', self.gigadl,
            'The "Mock provider" provider in is registered in the GigaDl instance')

        self.assertIn('Bar bar', self.gigadl,
            'The "Bar bar" provider in is registered in the GigaDl instance')

        # match the object
        self.assertIn(self.test_provider, self.gigadl,
            'The "Mock provider" provider in is registered in the GigaDl instance')

        self.assertIn(bar_provider, self.gigadl,
            'The "Bar bar" provider in is registered in the GigaDl instance')

        self.assertIs(len(self.gigadl), 2, 'Two providers are registered')

    def test_use(self):
        self.test_provider.search = throw_error

        # use our custom provider
        self.gigadl.register_provider(self.test_provider)
        self.gigadl.use('Mock provider')

        with self.assertRaises(ValueError) as cm:
            self.gigadl.search('foo')

        self.assertIs(str(cm.exception), 'foo', 'The right provider is used '
                      'when giving its name')

        self.gigadl.use(self.test_provider)
        with self.assertRaises(ValueError) as cm:
            self.gigadl.search('bar')

        self.assertIs(str(cm.exception), 'bar', 'The right provider is used '
                      'when giving an already registered object')

        bar_provider = MockProvider(self.test_downloader, 'Bar bar')
        bar_provider.search = throw_error

        self.gigadl.use(bar_provider)
        with self.assertRaises(ValueError) as cm:
            self.gigadl.search('biz')

        self.assertIs(str(cm.exception), 'biz', 'The right provider is used '
                      'when giving a non registered object')

    def test_provider_setter_property(self):
        self.test_provider.search = throw_error

        # use our custom provider
        self.gigadl.register_provider(self.test_provider)
        self.gigadl.provider = 'Mock provider'

        with self.assertRaises(ValueError) as cm:
            self.gigadl.search('foo')

        self.assertIs(str(cm.exception), 'foo', 'The right provider is used '
                      'when giving its name')

        self.gigadl.provider = self.test_provider
        with self.assertRaises(ValueError) as cm:
            self.gigadl.search('bar')

        self.assertIs(str(cm.exception), 'bar', 'The right provider is used '
                      'when giving an already registered object')

        bar_provider = MockProvider(self.test_downloader, 'Bar bar')
        bar_provider.search = throw_error

        self.gigadl.provider = bar_provider
        with self.assertRaises(ValueError) as cm:
            self.gigadl.search('biz')

        self.assertIs(str(cm.exception), 'biz', 'The right provider is used '
                      'when giving a non registered object')


    def test_provider_getter_property(self):
        self.assertIsNone(self.gigadl.provider, 'None if no provider selected')

        # register a provider and use it
        self.gigadl.register_provider(self.test_provider)
        self.gigadl.use(self.test_provider)

        self.assertIs(self.gigadl.provider, self.test_provider, 'When a '
                      'provider is selected, it is returned by the property')

        # register another provider
        bar_provider = MockProvider(self.test_downloader)
        self.gigadl.register_provider(bar_provider)

        self.assertIs(self.gigadl.provider, self.test_provider, 'Registering '
                      'another provider does not impact the selected one')

        # use it
        self.gigadl.use(bar_provider)

        self.assertIs(self.gigadl.provider, bar_provider, 'When another '
                      'provider is selected, it is returned by the property')

    def test_provider_deleter_property(self):
        self.assertIsNone(self.gigadl.provider, 'No provider selected')

        self.gigadl.register_provider(MockProvider(self.test_downloader, 'bar'))

        self.gigadl.use(self.test_provider)
        self.assertIs(self.gigadl.provider, self.test_provider, 'A provider is selected')

        del self.gigadl.provider
        self.assertIsNone(self.gigadl.provider, 'No provider selected')
        self.assertIs(len(self.gigadl), 1, 'Still one provider registered')
        self.assertNotIn('Mock provider', self.gigadl, 'The "Mock provider" is'
                         'not registered anymore')
        self.assertIn('bar', self.gigadl, 'The bar provider is still'
                      'registered')

    def test_search(self):
        with self.assertRaises(ValueError):
            self.gigadl.search('foo')

        self.test_provider.search = throw_error
        self.gigadl.provider = self.test_provider

        self.assertEqual(self.gigadl.search(''), [], 'An empty search returns an '
                      'empty list, withouth calling the provider')

        with self.assertRaises(ValueError) as cm:
            self.gigadl.search('biz')

        self.assertIs(str(cm.exception), 'biz', 'The search call is delegated '
                      'to the provider')

    def test_retrieve_data(self):
        with self.assertRaises(ValueError):
            self.gigadl.retrieve_data('http://www.some-url.com/?v=some_id')

        self.test_provider.retrieve_data = throw_error
        self.gigadl.provider = self.test_provider

        with self.assertRaises(ValueError):
            self.gigadl.retrieve_data('')

        with self.assertRaises(ValueError) as cm:
            self.gigadl.retrieve_data('biz')

        self.assertIs(str(cm.exception), 'biz', 'The retrieve_data call is delegated '
                      'to the provider')