Remove Python 2 support

This commit is contained in:
Simeon Vincent
2024-07-17 12:28:41 -07:00
parent b5260e150a
commit 55c434810e

View File

@@ -4,70 +4,33 @@ import sys
import json import json
import struct import struct
try: # Read a message from stdin and decode it.
# Python 3.x version def getMessage():
# Read a message from stdin and decode it. rawLength = sys.stdin.buffer.read(4)
def getMessage(): if len(rawLength) == 0:
rawLength = sys.stdin.buffer.read(4) sys.exit(0)
if len(rawLength) == 0: messageLength = struct.unpack('@I', rawLength)[0]
sys.exit(0) message = sys.stdin.buffer.read(messageLength).decode('utf-8')
messageLength = struct.unpack('@I', rawLength)[0] return json.loads(message)
message = sys.stdin.buffer.read(messageLength).decode('utf-8')
return json.loads(message)
# Encode a message for transmission, # Encode a message for transmission, given its content.
# given its content. def encodeMessage(messageContent):
def encodeMessage(messageContent): # https://docs.python.org/3/library/json.html#basic-usage
# https://docs.python.org/3/library/json.html#basic-usage # To get the most compact JSON representation, you should specify
# To get the most compact JSON representation, you should specify # (',', ':') to eliminate whitespace.
# (',', ':') to eliminate whitespace. # We want the most compact representation because the browser rejects
# We want the most compact representation because the browser rejects # messages that exceed 1 MB.
# messages that exceed 1 MB. encodedContent = json.dumps(messageContent, separators=(',', ':')).encode('utf-8')
encodedContent = json.dumps(messageContent, separators=(',', ':')).encode('utf-8') encodedLength = struct.pack('@I', len(encodedContent))
encodedLength = struct.pack('@I', len(encodedContent)) return {'length': encodedLength, 'content': encodedContent}
return {'length': encodedLength, 'content': encodedContent}
# Send an encoded message to stdout # Send an encoded message to stdout
def sendMessage(encodedMessage): def sendMessage(encodedMessage):
sys.stdout.buffer.write(encodedMessage['length']) sys.stdout.buffer.write(encodedMessage['length'])
sys.stdout.buffer.write(encodedMessage['content']) sys.stdout.buffer.write(encodedMessage['content'])
sys.stdout.buffer.flush() sys.stdout.buffer.flush()
while True: while True:
receivedMessage = getMessage() receivedMessage = getMessage()
if receivedMessage == "ping": if receivedMessage == "ping":
sendMessage(encodeMessage("pong3")) sendMessage(encodeMessage("pong"))
except AttributeError:
# Python 2.x version (if sys.stdin.buffer is not defined)
# Read a message from stdin and decode it.
def getMessage():
rawLength = sys.stdin.read(4)
if len(rawLength) == 0:
sys.exit(0)
messageLength = struct.unpack('@I', rawLength)[0]
message = sys.stdin.read(messageLength)
return json.loads(message)
# Encode a message for transmission,
# given its content.
def encodeMessage(messageContent):
# https://docs.python.org/3/library/json.html#basic-usage
# To get the most compact JSON representation, you should specify
# (',', ':') to eliminate whitespace.
# We want the most compact representation because the browser rejects
# messages that exceed 1 MB.
encodedContent = json.dumps(messageContent, separators=(',', ':'))
encodedLength = struct.pack('@I', len(encodedContent))
return {'length': encodedLength, 'content': encodedContent}
# Send an encoded message to stdout
def sendMessage(encodedMessage):
sys.stdout.write(encodedMessage['length'])
sys.stdout.write(encodedMessage['content'])
sys.stdout.flush()
while True:
receivedMessage = getMessage()
if receivedMessage == "ping":
sendMessage(encodeMessage("pong2"))