Spaces:
Runtime error
Runtime error
| import asyncio | |
| import contextlib | |
| import math | |
| import os | |
| import shlex | |
| import shutil | |
| import time | |
| from git import Repo | |
| from git.exc import GitCommandError, InvalidGitRepositoryError, NoSuchPathError | |
| from pyrogram.types import Message | |
| from Hellbot.core import Config, Symbols | |
| from .formatter import humanbytes, readable_time | |
| async def progress( | |
| current: int, total: int, message: Message, start: float, process: str | |
| ): | |
| now = time.time() | |
| diff = now - start | |
| if round(diff % 10.00) == 0 or current == total: | |
| percentage = current * 100 / total | |
| speed = current / diff | |
| elapsed_time = round(diff) * 1000 | |
| complete_time = round((total - current) / speed) * 1000 | |
| estimated_total_time = elapsed_time + complete_time | |
| progress_str = "**[{0}{1}] : {2}%\n**".format( | |
| "".join(["β" for i in range(math.floor(percentage / 10))]), | |
| "".join(["β" for i in range(10 - math.floor(percentage / 10))]), | |
| round(percentage, 2), | |
| ) | |
| msg = ( | |
| progress_str | |
| + "__{0}__ **ππΏ** __{1}__\n**π²ππΎπΎπ½:** __{2}/s__\n**π€π³π :** __{3}__".format( | |
| humanbytes(current), | |
| humanbytes(total), | |
| humanbytes(speed), | |
| readable_time(estimated_total_time / 1000), | |
| ) | |
| ) | |
| await message.edit_text(f"**{process} ...**\n\n{msg}") | |
| async def get_files_from_directory(directory: str) -> list: | |
| all_files = [] | |
| for path, _, files in os.walk(directory): | |
| for file in files: | |
| all_files.append(os.path.join(path, file)) | |
| return all_files | |
| async def runcmd(cmd: str) -> tuple[str, str, int, int]: | |
| args = shlex.split(cmd) | |
| process = await asyncio.create_subprocess_exec( | |
| *args, stdout=asyncio.subprocess.PIPE, stderr=asyncio.subprocess.PIPE | |
| ) | |
| stdout, stderr = await process.communicate() | |
| return ( | |
| stdout.decode("utf-8", "replace").strip(), | |
| stderr.decode("utf-8", "replace").strip(), | |
| process.returncode, | |
| process.pid, | |
| ) | |
| async def update_dotenv(key: str, value: str) -> None: | |
| with open(".env", "r") as file: | |
| data = file.readlines() | |
| for index, line in enumerate(data): | |
| if line.startswith(f"{key}="): | |
| data[index] = f"{key}={value}\n" | |
| break | |
| with open(".env", "w") as file: | |
| file.writelines(data) | |
| async def restart( | |
| update: bool = False, | |
| clean_up: bool = False, | |
| shutdown: bool = False, | |
| ): | |
| try: | |
| shutil.rmtree(Config.DWL_DIR) | |
| shutil.rmtree(Config.TEMP_DIR) | |
| except BaseException: | |
| pass | |
| if clean_up: | |
| os.system(f"mkdir {Config.DWL_DIR}") | |
| os.system(f"mkdir {Config.TEMP_DIR}") | |
| return | |
| if shutdown: | |
| return os.system(f"kill -9 {os.getpid()}") | |
| cmd = ( | |
| "git pull && pip3 install -U -r requirements.txt && bash start.sh" | |
| if update | |
| else "bash start.sh" | |
| ) | |
| os.system(f"kill -9 {os.getpid()} && {cmd}") | |
| async def gen_changelogs(repo: Repo, branch: str) -> str: | |
| changelogs = "" | |
| commits = list(repo.iter_commits(branch))[:5] | |
| for index, commit in enumerate(commits): | |
| changelogs += f"**{Symbols.triangle_right} {index + 1}.** `{commit.summary}`\n" | |
| return changelogs | |
| async def initialize_git(git_repo: str): | |
| force = False | |
| try: | |
| repo = Repo() | |
| except NoSuchPathError as pathErr: | |
| repo.__del__() | |
| return False, pathErr, force | |
| except GitCommandError as gitErr: | |
| repo.__del__() | |
| return False, gitErr, force | |
| except InvalidGitRepositoryError: | |
| repo = Repo.init() | |
| origin = repo.create_remote("upstream", f"https://github.com/{git_repo}") | |
| origin.fetch() | |
| repo.create_head("master", origin.refs.master) | |
| repo.heads.master.set_tracking_branch(origin.refs.master) | |
| repo.heads.master.checkout(True) | |
| force = True | |
| with contextlib.suppress(BaseException): | |
| repo.create_remote("upstream", f"https://github.com/{git_repo}") | |
| return True, repo, force | |