Beispiel #1
0
def download(url, out_put_path, chunk_size=1024, user=None, password=None):
    '''
        out_put_path 可以是一个目录
        也可以是文件路径
    '''
    u = urlopen(url)
    meta = u.info()

    dest_file = out_put_path
    if os.path.isdir(out_put_path):
        name = meta.get_filename()
        if name is None:
            name = url.split('/')[-1]

        dest_file = os.path.join(out_put_path, name)

    tmp_path = dest_file + '.tmp'

    file_name = os.path.basename(dest_file)

    size_str = meta['Content-Length']
    file_size = -1
    if size_str:
        file_size = int(size_str)

    if file_size > 0:
        human_file_size = '{:.03Hc}'.format(FileSize(file_size))
    content_type = meta['Content-Type']

    print("url is %s" % u.geturl())
    if file_size > 0:
        print("Length is %d (%s) [%s]" % (file_size, human_file_size, content_type))
    else:
        print("Length unspecified [%s]" % (content_type))

    print("Saveing to: %s" % dest_file)

    download_size = 0
    with open(tmp_path, 'wb') as f:
        pbar = tqdm(
            total=file_size, unit='B',
            unit_scale=True, unit_divisor=1024,
            miniters=1)
        pbar.set_description('%s ' % file_name)
        while True:
            chunk = u.read(chunk_size)
            if not chunk:
                break
            download_size += len(chunk)
            pbar.update(len(chunk))
            f.write(chunk)

        pbar.close()

    if file_size > 0 and download_size != file_size:
        raise DownloadFileException()

    os.rename(tmp_path, dest_file)
    return dest_file
Beispiel #2
0
 def test_str_format(self):
     self.assertEqual('{:d}'.format(FileSize(1024)), '1024')
     self.assertEqual('{:.02fH}'.format(FileSize(1024)), '1 KB')
     self.assertEqual('{:.02fhs}'.format(FileSize(1000)), '1 KB')
     self.assertEqual('{:.02fhs^0}'.format(FileSize(1000)), '1000 B')
     self.assertEqual('{:.02fHcv}'.format(FileSize(1024)), '1 kilobyte')
     self.assertEqual('{: >10.02fH}'.format(FileSize(1024)),
                      '1 KB'.rjust(10))
    def negated_message(self, attribute):
        messages = []
        if self.file_check:
            messages.append("The {} is a valid file.".format(attribute))
        if self.size_check:
            from hfilesize import FileSize

            messages.append(
                "The {} file size is less or equal than {:.02fH}.".format(
                    attribute, FileSize(self.size)))
        if self.mimes_check:
            messages.append("The {} mime type is in {}.".format(
                attribute, ",".join(self.allowed_extensions)))
        return messages
    def negated_message(self, attribute):
        messages = []
        if self.file_check:
            messages.append("The {} is a valid file.".format(attribute))
        if self.size_check:
            from hfilesize import FileSize

            messages.append(
                "The {} file size is less or equal than {:.02fH}.".format(
                    attribute, FileSize(self.size)))

        if self.mimes_check:
            messages.append("The {} file is a valid image.".format(attribute))

        return messages
    def message(self, attribute):
        messages = []
        if not self.file_check:
            messages.append("The {} is not a valid file.".format(attribute))

        if not self.size_check:
            from hfilesize import FileSize

            messages.append("The {} file size exceeds {:.02fH}.".format(
                attribute, FileSize(self.size)))
        if not self.mimes_check:
            messages.append(
                "The {} mime type is not valid. Allowed formats are {}.".
                format(attribute, ",".join(self.allowed_extensions)))

        return messages
Beispiel #6
0
    def test_format(self):
        # base guessing
        self.assertEqual(FileSize(1024).format(size_fmt=Format.casing), '1 KB')
        with self.assertRaises(ValueError):
            self.assertEqual(FileSize(1024).format(size_fmt=Format.si), '1 KB')

        # plural
        self.assertEqual(
            FileSize(0).format(base=1024, size_fmt=Format.casing), '0 bytes')
        self.assertEqual(
            FileSize(1).format(base=1024, size_fmt=Format.casing), '1 byte')
        self.assertEqual(
            FileSize(2).format(base=1024, size_fmt=Format.casing), '2 bytes')
        self.assertEqual(
            FileSize(1024).format(base=1024, size_fmt=Format.casing_verbose),
            '1 kilobyte')
        self.assertEqual(
            FileSize(1025).format(base=1024, size_fmt=Format.casing_verbose),
            '1.00 kilobytes')
        self.assertEqual(
            FileSize(2048).format(base=1024, size_fmt=Format.casing_verbose),
            '2 kilobytes')

        # float formatting
        self.assertEqual(
            FileSize(1024).format(base=1024, size_fmt=Format.casing), '1 KB')
        self.assertEqual(
            FileSize(1025).format(base=1024, size_fmt=Format.casing),
            '1.00 KB')
        self.assertEqual(
            FileSize(2048).format(base=1024, size_fmt=Format.casing), '2 KB')

        # exponent
        self.assertEqual(
            FileSize(1024).format(base=1024,
                                  size_fmt=Format.casing,
                                  exponent=0), '1024 bytes')

        # exponent bounds check
        with self.assertRaises(ValueError):
            FileSize(1024).format(base=1024,
                                  size_fmt=Format.casing,
                                  exponent=100)
        with self.assertRaises(ValueError):
            FileSize(1024).format(base=1024,
                                  size_fmt=Format.casing,
                                  exponent=-1)
Beispiel #7
0
    def test_parse(self):
        # basic tests on integers with no units
        self.assertEqual(FileSize(), 0)
        self.assertEqual(FileSize(1), 1)
        self.assertEqual(FileSize('1'), 1)
        self.assertEqual(FileSize('-1'), -1)

        # int base
        self.assertEqual(FileSize('0x12', 16), 0x12)

        # case sensitive
        self.assertEqual(FileSize('1k'), 1000)
        self.assertEqual(FileSize('1K'), 1024)
        self.assertEqual(FileSize('1kib'), 1024)
        self.assertEqual(FileSize('1kIB'), 1024)
        self.assertEqual(FileSize('1kb'), 1000)
        self.assertEqual(FileSize('1kB'), 1000)
        self.assertEqual(FileSize('1Kb'), 1024)
        self.assertEqual(FileSize('1KB'), 1024)

        self.assertEqual(FileSize('1k'), 1000**1)
        self.assertEqual(FileSize('1m'), 1000**2)
        self.assertEqual(FileSize('1g'), 1000**3)
        self.assertEqual(FileSize('1t'), 1000**4)
        self.assertEqual(FileSize('1p'), 1000**5)
        self.assertEqual(FileSize('1e'), 1000**6)
        self.assertEqual(FileSize('1z'), 1000**7)
        self.assertEqual(FileSize('1y'), 1000**8)

        self.assertEqual(FileSize('1K'), 1024**1)
        self.assertEqual(FileSize('1M'), 1024**2)
        self.assertEqual(FileSize('1G'), 1024**3)
        self.assertEqual(FileSize('1T'), 1024**4)
        self.assertEqual(FileSize('1P'), 1024**5)
        self.assertEqual(FileSize('1E'), 1024**6)
        self.assertEqual(FileSize('1Z'), 1024**7)
        self.assertEqual(FileSize('1Y'), 1024**8)

        # case insensitive
        self.assertEqual(
            FileSize('1K', default_binary=False, case_sensitive=False),
            1000**1)
        self.assertEqual(
            FileSize('1K', default_binary=True, case_sensitive=False), 1024**1)

        # spacing
        self.assertEqual(FileSize('1 k'), 1000)

        # invalid values
        with self.assertRaises(ValueError):
            FileSize(1.1)
        with self.assertRaises(ValueError):
            FileSize('1.1')
        with self.assertRaises(ValueError):
            FileSize('1kibb')
def parse_size(size):
    """Parse humanized size into bytes"""
    from hfilesize import FileSize

    return FileSize(size, case_sensitive=False)
Beispiel #9
0
 def phpDownLoaderProgress(self, name, done, bps):
     speed = 'Speed: ' + '{:.02fH}'.format(FileSize(bps)) + '/S'
     self.statusbar.showMessage('{} | {}'.format(name, speed), 20000)
     self.progressBar.setValue(done)