示例#1
0
def download(args):
    """ Controls actions for downloading

    :param args: Argparse namespace
    """
    shards = []
    for uri in args.uri:
        if args.verbose:
            print("Creating shard.")
        shard = Shard()
        shard.from_uri(uri)
        shards.append(shard)

    if args.verbose:
            print("There are %d shards to download." % len(shards))

    streamer = Streamer(args.server)
    if args.verbose:
        print("Connecting to %s..." % streamer.server)

    path, fname = check_and_get_dest(args.dest)
    savepath = os.path.join(path, fname)
    for i, shard in enumerate(shards):
        if args.verbose:
            print("Downloading file %s..." % shard.uri)
        else:
            print("Downloading file %d..." % (i + 1))
        sys.stdout.flush()
        try:
            r = streamer.download(shard, slicesize=8096)
        except ResponseError as e:
            sys.stderr.write("\nError!\n")
            sys.stderr.write("%s  %s\n" % (e.response.status_code,
                                           e.response.reason))
            sys.stderr.write("%s\n" % e.response.text)
            raise
        with open(savepath, 'ab') as f:
            if args.verbose:
                print("Writing shard.")
            for _bytes in r.iter_content():
                    f.write(_bytes)

    print("\nDownloaded to %s." % savepath)
    return fname
示例#2
0
def download(args):
    """ Controls actions for downloading

    :param args: Argparse namespace
    """
    shards = []
    for uri in args.uri:
        if args.verbose:
            print("Creating shard.")
        shard = Shard()
        shard.from_uri(uri)
        shards.append(shard)

    if args.verbose:
        print("There are %d shards to download." % len(shards))

    streamer = Streamer(args.server)
    if args.verbose:
        print("Connecting to %s..." % streamer.server)

    path, fname = check_and_get_dest(args.dest)
    savepath = os.path.join(path, fname)
    for i, shard in enumerate(shards):
        if args.verbose:
            print("Downloading file %s..." % shard.uri)
        else:
            print("Downloading file %d..." % (i + 1))
        sys.stdout.flush()

        r = streamer.download(shard, slicesize=8096)

        with open(savepath, 'ab') as f:
            if args.verbose:
                print("Writing shard.")
            for _bytes in r.iter_content():
                f.write(_bytes)

    print("\nDownloaded to %s." % savepath)
    return fname
示例#3
0
class TestShard(unittest.TestCase):
    def setUp(self):
        self.cryptkey = ("2b77e64156f9f7eb16d74b98f70417e4"
                         "d665d977d0ef00e793d41767acf13e8c")
        self.filehash = ("5547a152337de9ff6a97f6f099bb024e"
                         "08af419cee613b18da76a33e581d49ac")
        self.raw_uri = (
            "5547a152337de9ff6a97f6f099bb024e08af419cee613b18da76a33e581d49ac"
            "?key=2b77e64156f9f7eb16d74b98f70417e4d665d977d0ef00e793d41767acf"
            "13e8c")

        # Create empty object
        self.empty_shard = Shard()
        # Create half object
        self.half_shard = Shard(self.filehash)
        # Create full object
        self.full_shard = Shard(self.filehash, self.cryptkey)

        # Create new objects
        self.shard1 = Shard()
        self.shard2 = Shard()

        # Load content
        self.json_dict = {
            "key": "2b77e64156f9f7eb16d74b98f70417e4"
                   "d665d977d0ef00e793d41767acf13e8c",
            "filehash": "5547a152337de9ff6a97f6f099bb024e"
                        "08af419cee613b18da76a33e581d49ac"
        }
        self.shard1.from_json(json.dumps(self.json_dict))
        self.shard2.from_uri(self.raw_uri)

    def tearDown(self):
        del self.empty_shard
        del self.half_shard
        del self.full_shard
        del self.shard1
        del self.shard2
        del self.json_dict

    def test_getters_empty_shard(self):
        def _callable(meth):
            meth = getattr(self.empty_shard, meth)
            meth()

        for method in ['uri', 'get_hashes', 'get_json']:
            self.assertRaises(ShardError, _callable, method)

    def test_getters_half_shard(self):
        def _callable(meth):
            meth = getattr(self.half_shard, meth)
            meth()

        for method in ['uri', 'get_hashes', 'get_json']:
            self.assertRaises(ShardError, _callable, method)

    def test_getters_full_shard(self):
        uri = self.full_shard.uri
        self.assertEqual(uri, self.raw_uri)
        hash, key = self.full_shard.get_hashes()
        self.assertEqual(hash, self.filehash)
        self.assertEqual(key, self.cryptkey)
        json_ = self.full_shard.get_json()
        self.assertEqual(json_, json.dumps(self.json_dict))

    def test_shards(self):
        # Fit everything into one test case
        self.assertEqual(self.shard1.get_hashes(), self.shard2.get_hashes())
示例#4
0
class TestShard(unittest.TestCase):
    def setUp(self):
        self.cryptkey = ("2b77e64156f9f7eb16d74b98f70417e4"
                         "d665d977d0ef00e793d41767acf13e8c")
        self.filehash = ("5547a152337de9ff6a97f6f099bb024e"
                         "08af419cee613b18da76a33e581d49ac")
        self.raw_uri = (
            "5547a152337de9ff6a97f6f099bb024e08af419cee613b18da76a33e581d49ac"
            "?key=2b77e64156f9f7eb16d74b98f70417e4d665d977d0ef00e793d41767acf"
            "13e8c")

        # Create empty object
        self.empty_shard = Shard()
        # Create half object
        self.half_shard = Shard(self.filehash)
        # Create full object
        self.full_shard = Shard(self.filehash, self.cryptkey)

        # Create new objects
        self.shard1 = Shard()
        self.shard2 = Shard()

        # Load content
        self.json_dict = {
            "key":
            "2b77e64156f9f7eb16d74b98f70417e4"
            "d665d977d0ef00e793d41767acf13e8c",
            "filehash":
            "5547a152337de9ff6a97f6f099bb024e"
            "08af419cee613b18da76a33e581d49ac"
        }
        self.shard1.from_json(json.dumps(self.json_dict))
        self.shard2.from_uri(self.raw_uri)

    def tearDown(self):
        del self.empty_shard
        del self.half_shard
        del self.full_shard
        del self.shard1
        del self.shard2
        del self.json_dict

    def test_shard_with_malformed_uri(self):
        shard = Shard()
        self.assertRaises(ShardError, shard.from_uri, 'funkymonkey')

    def test_getters_empty_shard(self):
        def _callable(meth):
            meth = getattr(self.empty_shard, meth)
            meth()

        for method in ['uri', 'get_hashes', 'get_json']:
            self.assertRaises(ShardError, _callable, method)

    def test_getters_half_shard(self):
        def _callable(meth):
            meth = getattr(self.half_shard, meth)
            meth()

        for method in ['uri', 'get_hashes', 'get_json']:
            self.assertRaises(ShardError, _callable, method)

    def test_getters_full_shard(self):
        uri = self.full_shard.uri
        self.assertEqual(uri, self.raw_uri)
        hash, key = self.full_shard.get_hashes()
        self.assertEqual(hash, self.filehash)
        self.assertEqual(key, self.cryptkey)
        json_ = self.full_shard.get_json()
        self.assertEqual(json_, json.dumps(self.json_dict))

    def test_shards(self):
        # Fit everything into one test case
        self.assertEqual(self.shard1.get_hashes(), self.shard2.get_hashes())