diff options
author | pukkandan <pukkandan.ytdlp@gmail.com> | 2021-12-24 03:02:50 +0530 |
---|---|---|
committer | pukkandan <pukkandan.ytdlp@gmail.com> | 2021-12-25 04:07:19 +0530 |
commit | 352d5da81219e2675ef8cac9383ab0dfbd161a19 (patch) | |
tree | 89909e6840010d4f2d737930a64aa8586a0a2ac2 | |
parent | d43de6821cdc30524d866578a5af86ce4ff76fb7 (diff) | |
download | hypervideo-pre-352d5da81219e2675ef8cac9383ab0dfbd161a19.tar.lz hypervideo-pre-352d5da81219e2675ef8cac9383ab0dfbd161a19.tar.xz hypervideo-pre-352d5da81219e2675ef8cac9383ab0dfbd161a19.zip |
[utils] Improve `parse_count`
-rw-r--r-- | test/test_utils.py | 7 | ||||
-rw-r--r-- | yt_dlp/utils.py | 12 |
2 files changed, 17 insertions, 2 deletions
diff --git a/test/test_utils.py b/test/test_utils.py index 22dda4f37..4edf4e1b1 100644 --- a/test/test_utils.py +++ b/test/test_utils.py @@ -1156,9 +1156,16 @@ class TestUtil(unittest.TestCase): self.assertEqual(parse_count('1000'), 1000) self.assertEqual(parse_count('1.000'), 1000) self.assertEqual(parse_count('1.1k'), 1100) + self.assertEqual(parse_count('1.1 k'), 1100) + self.assertEqual(parse_count('1,1 k'), 1100) self.assertEqual(parse_count('1.1kk'), 1100000) self.assertEqual(parse_count('1.1kk '), 1100000) + self.assertEqual(parse_count('1,1kk'), 1100000) + self.assertEqual(parse_count('100 views'), 100) + self.assertEqual(parse_count('1,100 views'), 1100) self.assertEqual(parse_count('1.1kk views'), 1100000) + self.assertEqual(parse_count('10M views'), 10000000) + self.assertEqual(parse_count('has 10M views'), 10000000) def test_parse_resolution(self): self.assertEqual(parse_resolution(None), {}) diff --git a/yt_dlp/utils.py b/yt_dlp/utils.py index 2c5e6560a..cdc9a0ecf 100644 --- a/yt_dlp/utils.py +++ b/yt_dlp/utils.py @@ -2211,7 +2211,7 @@ def parse_count(s): if s is None: return None - s = s.strip() + s = re.sub(r'^[^\d]+\s', '', s).strip() if re.match(r'^[\d,.]+$', s): return str_to_int(s) @@ -2223,9 +2223,17 @@ def parse_count(s): 'M': 1000 ** 2, 'kk': 1000 ** 2, 'KK': 1000 ** 2, + 'b': 1000 ** 3, + 'B': 1000 ** 3, } - return lookup_unit_table(_UNIT_TABLE, s) + ret = lookup_unit_table(_UNIT_TABLE, s) + if ret is not None: + return ret + + mobj = re.match(r'([\d,.]+)(?:$|\s)', s) + if mobj: + return str_to_int(mobj.group(1)) def parse_resolution(s): |