aboutsummaryrefslogtreecommitdiffstats
path: root/youtube/proto.py
diff options
context:
space:
mode:
authorJames Taylor <28744867+user234683@users.noreply.github.com>2020-10-21 09:57:49 -0700
committerGitHub <noreply@github.com>2020-10-21 09:57:49 -0700
commitf01ef36a37c9112eca3f85d49622c41d68000a69 (patch)
treef62f99169397b3779a5a9c2db4dca9beb0a86b56 /youtube/proto.py
parentc696db3e84d91092182adbeb7eef6126fad6be5d (diff)
parenta27b575380378f1b490dcabb8cc67f05adee5daa (diff)
downloadyt-local-f01ef36a37c9112eca3f85d49622c41d68000a69.tar.lz
yt-local-f01ef36a37c9112eca3f85d49622c41d68000a69.tar.xz
yt-local-f01ef36a37c9112eca3f85d49622c41d68000a69.zip
Merge pull request #34 from zrose584/rm_whitespaces
remove trailing whitespaces
Diffstat (limited to 'youtube/proto.py')
-rw-r--r--youtube/proto.py28
1 files changed, 14 insertions, 14 deletions
diff --git a/youtube/proto.py b/youtube/proto.py
index d966455..5fd16d5 100644
--- a/youtube/proto.py
+++ b/youtube/proto.py
@@ -5,13 +5,13 @@ import io
def byte(n):
return bytes((n,))
-
+
def varint_encode(offset):
'''In this encoding system, for each 8-bit byte, the first bit is 1 if there are more bytes, and 0 is this is the last one.
The next 7 bits are data. These 7-bit sections represent the data in Little endian order. For example, suppose the data is
aaaaaaabbbbbbbccccccc (each of these sections is 7 bits). It will be encoded as:
1ccccccc 1bbbbbbb 0aaaaaaa
-
+
This encoding is used in youtube parameters to encode offsets and to encode the length for length-prefixed data.
See https://developers.google.com/protocol-buffers/docs/encoding#varints for more info.'''
needed_bytes = ceil(offset.bit_length()/7) or 1 # (0).bit_length() returns 0, but we need 1 in that case.
@@ -20,20 +20,20 @@ def varint_encode(offset):
encoded_bytes[i] = (offset & 127) | 128 # 7 least significant bits
offset = offset >> 7
encoded_bytes[-1] = offset & 127 # leave first bit as zero for last byte
-
+
return bytes(encoded_bytes)
-
+
def varint_decode(encoded):
decoded = 0
for i, byte in enumerate(encoded):
decoded |= (byte & 127) << 7*i
-
+
if not (byte & 128):
break
return decoded
-
+
def string(field_number, data):
data = as_bytes(data)
return _proto_field(2, field_number, varint_encode(len(data)) + data)
@@ -41,20 +41,20 @@ nested = string
def uint(field_number, value):
return _proto_field(0, field_number, varint_encode(value))
-
-
-
+
+
+
def _proto_field(wire_type, field_number, data):
''' See https://developers.google.com/protocol-buffers/docs/encoding#structure '''
return varint_encode( (field_number << 3) | wire_type) + data
-
+
def percent_b64encode(data):
return base64.urlsafe_b64encode(data).replace(b'=', b'%3D')
-
-
+
+
def unpadded_b64encode(data):
return base64.urlsafe_b64encode(data).replace(b'=', b'')
@@ -81,7 +81,7 @@ def read_varint(data):
i += 1
return result
-
+
def read_group(data, end_sequence):
start = data.tell()
index = data.original.find(end_sequence, start)
@@ -101,7 +101,7 @@ def read_protobuf(data):
break
wire_type = tag & 7
field_number = tag >> 3
-
+
if wire_type == 0:
value = read_varint(data)
elif wire_type == 1: