1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798 |
- import os
- import socket
- from typing import Any, Optional
- import time
- class Timer:
- def __init__(self):
- self.start_time = None
- def start(self):
- if self.start_time is not None:
- print("Timer is already running. Use .elapsed_time() to check the time elapsed.")
- else:
- self.start_time = time.time()
- def elapsed_time(self):
- if self.start_time is None:
- print("Timer has not started yet. Use .start() to start the timer.")
- else:
- return time.time() - self.start_time
- def reset(self):
- self.start_time = None
- class ProgramPublicTools(object):
- def __init__(self, enable_terminal_debug_output: bool = True):
- self.enable_terminal_debug_output = enable_terminal_debug_output
- def debug_output(self, *message: Any) -> None:
- self.__terminal_debug_output(*message)
- def __terminal_debug_output(self, *message: Any) -> None:
- if self.enable_terminal_debug_output is True:
- print(*message)
- @staticmethod
- def path_directory_exist_check(full_path: str) -> None:
- folder_path = os.path.dirname(full_path)
- os.makedirs(folder_path, exist_ok=True)
- @staticmethod
- def get_absolute_path(relative_path: str) -> str:
- script_dir = os.path.dirname(os.path.realpath(__file__))
- return os.path.abspath(os.path.join(script_dir, relative_path))
- @staticmethod
- def create_timer() -> Timer:
- return Timer()
- @staticmethod
- def is_convertible_to_int(num) -> tuple[bool, Optional[int]]:
- try:
- s = num
- s = int(s)
- return True, s
- except ValueError:
- return False, None
- @staticmethod
- def is_convertible_to_float(num) -> tuple[bool, Optional[float]]:
- try:
- s = num
- s = float(s)
- return True, s
- except ValueError:
- return False, None
- @staticmethod
- def find_available_server_port(number: int = 1, not_list: list[int] = None, address: str = "localhost",
- start_port: int = 1024, end_port: int = 65535) -> list[int]:
- get_port = []
- for port in range(start_port, end_port + 1):
- sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
- try:
- sock.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 0)
- sock.bind((address, port))
- if not_list is not None:
- if port in not_list:
- pass
- else:
- get_port.append(port)
- else:
- get_port.append(port)
- if len(get_port) == number:
- break
- except OSError:
- continue
- finally:
- sock.close()
- if len(get_port) < number:
- raise Exception("Error: Do not find enough available port.")
- else:
- return get_port
|