import os, io, sys, platform, psutil, json, secrets, string from typing import Any, Callable, Dict, List, Optional, Sequence, Tuple, Type, Union import urllib.request class SmoothUrl: ''' Get the best smooth url for Git or Download''' def __init__(self): pass def res(self, url_list: Tuple): for item in url_list: try: urllib.request.urlopen(item,timeout=3).read() print("Smooth URL is: " + item) return item except: continue print("Necessary resource URL can not reachable, system exit!") sys.exit(0) class GitOp: '''Git operation''' def __init__(self): pass def gitClone(self, cmd: str): '''git clone''' try: print("Command is: "+cmd) os.system(cmd) except: print("Git clone failed, try again and check your URL can be accessed") sys.exit(0) class FileOp: '''File operation''' def __init__(self, path: str): self.path = path def printFile(self): '''output file content''' with open(self.path,newline='') as file: print(file.read()) def fileToString(self): '''read file content''' with open(self.path,'r') as file: return file.read() def stringToFile(self, content: Optional[str] = ""): '''string content to file''' with open(self.path,'w+') as file: return file.write(content) file.close() def fileToDict(self, remark: Optional[str] = "#", separate: Optional[str] = "="): ''' convert file to Json ''' dict = {} with open(self.path) as fh: for line in fh: if line == "\n": continue if line.find(remark) != 0: item, value = line.strip().split(separate, -1) dict[item] = value else: continue fh.close() return dict class NetOp: '''Network and port manage''' def __init__(self): pass def checkPort(self, port: int): '''check the target port's status''' search_key = "port="+str(port) if str(psutil.net_connections()).find(search_key) != -1: print(str(port)+" is used") return False else: return True class SecurityOp: '''Password and security operation''' def __int__(self): pass def randomPass(self, length: Optional[int] = 16): '''set strong password''' alphabet = string.ascii_letters + string.digits while True: password = ''.join(secrets.choice(alphabet) for i in range(length)) if (any(c.islower() for c in password) and any(c.isupper() for c in password) and sum(c.isdigit() for c in password) >= 3): break return password