python/rocketmq/v5/util/misc.py (79 lines of code) (raw):

# Licensed to the Apache Software Foundation (ASF) under one or more # contributor license agreements. See the NOTICE file distributed with # this work for additional information regarding copyright ownership. # The ASF licenses this file to You under the Apache License, Version 2.0 # (the "License"); you may not use this file except in compliance with # the License. You may obtain a copy of the License at # # http://www.apache.org/licenses/LICENSE-2.0 # # Unless required by applicable law or agreed to in writing, software # distributed under the License is distributed on an "AS IS" BASIS, # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. # See the License for the specific language governing permissions and # limitations under the License. import gzip import socket import zlib from hashlib import md5, sha1 from platform import system, version from re import compile from rocketmq.grpc_protocol import Language from rocketmq.v5.log import logger class Misc: __LOCAL_IP = None __OS_NAME = None TOPIC_PATTERN = compile(r"^[%a-zA-Z0-9_-]+$") CONSUMER_GROUP_PATTERN = compile(r"^[%a-zA-Z0-9_-]+$") SDK_VERSION = "5.0.5" @staticmethod def sdk_language(): return Language.PYTHON @staticmethod def sdk_version(): return Misc.SDK_VERSION @staticmethod def to_base36(n): chars = "0123456789abcdefghijklmnopqrstuvwxyz" result = [] if n == 0: return "0" while n > 0: n, r = divmod(n, 36) result.append(chars[r]) return "".join(reversed(result)) @staticmethod def get_local_ip(): if Misc.__LOCAL_IP is None: s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM) try: s.connect(("8.8.8.8", 80)) Misc.__LOCAL_IP = s.getsockname()[0] except Exception as e: logger.error(f"get local ip exception: {e}") return "127.0.0.1" finally: s.close() return Misc.__LOCAL_IP @staticmethod def crc32_checksum(array): crc32_value = zlib.crc32(array) & 0xFFFFFFFF return format(crc32_value, "08X") @staticmethod def md5_checksum(array): md5_hash = md5() md5_hash.update(array) return md5_hash.hexdigest().upper() @staticmethod def sha1_checksum(array): sha1_hash = sha1() sha1_hash.update(array) return sha1_hash.hexdigest().upper() @staticmethod def uncompress_bytes_gzip(body): if body and body[:2] == b"\x1f\x8b": body = gzip.decompress(body) # Standard Gzip format else: body = zlib.decompress(body) # deflate zip return body @staticmethod def get_os_description(): if Misc.__OS_NAME is None: os_name = system() # os system name if os_name is None: return None os_version = version() # os system version Misc.__OS_NAME = f"{os_name} {os_version}" if os_version else os_name return Misc.__OS_NAME @staticmethod def is_valid_topic(topic): return bool(Misc.TOPIC_PATTERN.match(topic)) @staticmethod def is_valid_consumer_group(topic): return bool(Misc.CONSUMER_GROUP_PATTERN.match(topic))