Exemplo n.º 1
0
    def __init__(self) -> None:
        self.console = Console(highlight=False)

        self._crawl_progress = Progress(
            TextColumn("{task.description}", table_column=Column(ratio=1)),
            BarColumn(),
            TimeRemainingColumn(),
            expand=True,
        )
        self._download_progress = Progress(
            TextColumn("{task.description}", table_column=Column(ratio=1)),
            TransferSpeedColumn(),
            DownloadColumn(),
            BarColumn(),
            TimeRemainingColumn(),
            expand=True,
        )

        self._live = Live(console=self.console, transient=True)
        self._update_live()

        self._showing_progress = False
        self._progress_suspended = False
        self._lock = asyncio.Lock()
        self._lines: List[str] = []

        # Whether different parts of the output are enabled or disabled
        self.output_explain = False
        self.output_status = True
        self.output_report = True
Exemplo n.º 2
0
    def __init__(self):
        """Init Rich Console and Table"""
        super().__init__()
        # init ELF table
        self.table_elf = Table(title="Checksec Results: ELF", expand=True)
        self.table_elf.add_column("File", justify="left", header_style="")
        self.table_elf.add_column("NX", justify="center")
        self.table_elf.add_column("PIE", justify="center")
        self.table_elf.add_column("Canary", justify="center")
        self.table_elf.add_column("Relro", justify="center")
        self.table_elf.add_column("RPATH", justify="center")
        self.table_elf.add_column("RUNPATH", justify="center")
        self.table_elf.add_column("Symbols", justify="center")
        self.table_elf.add_column("FORTIFY", justify="center")
        self.table_elf.add_column("Fortified", justify="center")
        self.table_elf.add_column("Fortifiable", justify="center")
        self.table_elf.add_column("Fortify Score", justify="center")

        # init PE table
        self.table_pe = Table(title="Checksec Results: PE", expand=True)
        self.table_pe.add_column("File", justify="left", header_style="")
        self.table_pe.add_column("NX", justify="center")
        self.table_pe.add_column("Canary", justify="center")
        self.table_pe.add_column("ASLR", justify="center")
        self.table_pe.add_column("Dynamic Base", justify="center")
        self.table_pe.add_column("High Entropy VA", justify="center")
        self.table_pe.add_column("SEH", justify="center")
        self.table_pe.add_column("SafeSEH", justify="center")
        self.table_pe.add_column("Force Integrity", justify="center")
        self.table_pe.add_column("Control Flow Guard", justify="center")
        self.table_pe.add_column("Isolation", justify="center")

        # init console
        self.console = Console()

        # build progress bar
        self.process_bar = Progress(
            TextColumn("[bold blue]Processing...", justify="left"),
            BarColumn(bar_width=None),
            "{task.completed}/{task.total}",
            "•",
            "[progress.percentage]{task.percentage:>3.1f}%",
            console=self.console,
        )
        self.display_res_bar = Progress(
            BarColumn(bar_width=None),
            TextColumn("[bold blue]{task.description}", justify="center"),
            BarColumn(bar_width=None),
            console=self.console,
            transient=True,
        )
        self.enumerate_bar = Progress(
            TextColumn("[bold blue]Enumerating...", justify="center"),
            BarColumn(bar_width=None),
            console=self.console,
            transient=True,
        )

        self.process_task_id = None
Exemplo n.º 3
0
def do_speed_test(
    server: Optional[str] = None,
    disable: Optional[str] = None,
    up_threads: Optional[int] = None,
    dl_threads: Optional[int] = None,
) -> SpeedResult:
    """
    进行 SpeedTest 测试

    服务器列表 ID 可以从这儿获取: https://williamyaps.github.io/wlmjavascript/servercli.html

    每次仅允许测试一个服务器

    :param server: 期望的服务器ID (ID 来自于 SpeedTest 官网)
    :param disable: up|down 禁止测试 上传/下载
    :param up_threads: 上传线程数量
    :param dl_threads: 下载线程数量
    """
    st = Speedtest()

    st.get_servers(servers=None if server is None else [server])

    server = st.best

    if disable != "up":
        with Progress(
                "[progress.description]{task.description}",
                BarColumn(),
                "{task.completed} / {task.total}",
                TimeElapsedColumn(),
        ) as progress:
            task_id = progress.add_task(f"上传: {server['host']}")

            def up_cb(idx, total, **kwargs):
                speed_test_cb(progress, task_id, idx, total, **kwargs)

            st.upload(threads=up_threads, callback=up_cb)
    if disable != "dl":
        with Progress(
                "[progress.description]{task.description}",
                BarColumn(),
                "{task.completed} / {task.total}",
                TimeElapsedColumn(),
        ) as progress:
            task_id = progress.add_task(f"下载: {server['host']}")

            def dl_cb(idx, total, **kwargs):
                speed_test_cb(progress, task_id, idx, total, **kwargs)

            st.download(threads=dl_threads, callback=dl_cb)

    return SpeedResult(**st.results.dict())
Exemplo n.º 4
0
 def remove_unused_cms(self):
     if len(self.unused_cms) == 0:
         print("There is no unused CMS")
     else:
         choice = Prompt.ask("Do you want to clean up {} unused CMS".format(len(self.unused_cms)), choices=["Y", "N"])
         if choice == 'Y':
             failed_cms = []
             t = timer()
             with MyProgress("[progress.description]{task.description}", BarColumn(), TextColumn(text_format="[progress.percentage]{task.percentage:>3.0f}% [green]{task.completed} of {task.total} [bold green] | Success: [bold white]{task.fields[success]} | [bold red]Faied: [bold white]{task.fields[failed]} "), "Took [bold blue]{task.fields[time_elapsed]}s") as progress:
                 task = progress.add_task(total=len(self.unused_cms), description='Deleting unused CMS', success=0, failed=0, time_elapsed=0)
                 for cms_item in self.unused_cms:
                     delete_cmd = 'rm -rf {}'.format(cms_item.get_dir())
                     out = subprocess.Popen(delete_cmd,shell=True,stdin=subprocess.PIPE,stdout=subprocess.PIPE,stderr=subprocess.PIPE)
                     out.communicate()
                     status_code = out.poll()
                     self.success += 1 if status_code == 0 else 0
                     if status_code != 0:
                         failed_cms.append(cms_item)
                         self.failed += 1
                     progress.advance(task)
                     progress.update(task, success=self.success, failed=self.failed, time_elapsed=int(timer() - t))
             
             if len(failed_cms) > 0:
                 console.print("[bold red]These CMS are failed to delete:")
                 for cms_item in failed_cms:
                     console.print('[bold purple]' + str(cms_item))
Exemplo n.º 5
0
def dump_mem(vm_name: Optional[str], kvm_unix_socket: Optional[str], output_file: Optional[str]):
    # prepare drivers init params
    init_params = DriverInitParamsPy()
    common = CommonInitParamsPy()
    common.vm_name = vm_name
    init_params.common = common
    if kvm_unix_socket:
        kvm = KVMInitParamsPy()
        kvm.unix_socket = kvm_unix_socket
        init_params.kvm = kvm
    # init libmicrovmi
    micro = Microvmi(None, init_params)
    destination = output_file.format(vm_name=vm_name)
    with pause_ctxt(micro):
        max_addr = micro.max_addr
        print(f"Dumping physical memory on {vm_name} until 0x{max_addr:X} to {destination}")
        with open(destination, "wb") as f:
            with Progress(
                "[progress.description]{task.description}",
                TextColumn("[bold yellow]0x{task.completed:X}"),
                BarColumn(bar_width=None),
                "[progress.percentage]{task.percentage:>3.0f}%",
                transient=True,
            ) as progress:
                dump_task = progress.add_task("Dumping ", total=max_addr)
                mem = micro.padded_memory
                for addr in range(0, max_addr, READ_SIZE):
                    logging.debug("dumping at 0x%x", addr)
                    current_chunk_size = min(READ_SIZE, max_addr - addr)
                    buffer = mem.read(current_chunk_size)
                    f.write(buffer)
                    progress.update(dump_task, advance=READ_SIZE)
Exemplo n.º 6
0
    def _create_rich_progress(self):

        desc_column = TextColumn("{task.description}", table_column=Column(ratio=1))
        bar_column = BarColumn(bar_width=None, table_column=Column(ratio=2))
        progress = Progress(desc_column, bar_column, "[progress.percentage]{task.percentage}%", expand=True)

        return progress
Exemplo n.º 7
0
def run():
    client = vision.ImageAnnotatorClient()

    # Locate valid files
    files = os.listdir(INPUT_PATH)
    select = list(filter(lambda file: valid_extension(get_extension(file)), files))

    if len(select) == 0:
        logger.fatal("No valid files located.")
        return
    else:
        logger.info(f"Found {len(select)} valid files")

    # Create the 'temp' directory
    if not os.path.exists(TEMP_PATH):
        logger.info("Creating temporary processing directory")
        os.makedirs(TEMP_PATH)

    try:
        with Progress("[progress.description]{task.description}", BarColumn(bar_width=None),
                      "[progress.percentage]{task.percentage:>3.0f}%") as progress:
            mp = MasterFileProcessor(select, 10, convert_to_bytes("1780 KB"), True, client=client, progress=progress)
            logger.info('MasterFileProcessor created.')
            mp.load()
            logger.info('Finished loading/starting initial threads.')
            mp.join()
            logger.info('Finished joining threads, now quitting.')

    except Exception as error:
        logger.error(str(error))
        raise
    finally:
        os.rmdir(TEMP_PATH)
        logger.info("Temporary directory removed.")
Exemplo n.º 8
0
def predict(trainData, trainLabel, testData, K=27):
    '''
    测试模型正确率
    ===========
    Arguments
    ---------
    - `trainData` 训练集数据集
    - `trainLabel` 训练集标记
    - `testData` 测试集数据集
    - `K` 选择近邻数

    Returns
    -------
    - `predictLabel` 预测标签
    '''
    predictLabel = []

    progress = Progress(
        "[progress.description]{task.description}",
        BarColumn(bar_width=None),
        "[progress.percentage]{task.completed}/{task.total}",
        "•",
        TimeRemainingColumn(),
    )  # rich 进度条
    progress.start()

    testTask = progress.add_task("[cyan]predicting...", total=len(testData))

    for x in testData:
        predictLabel.append(NearestNeighbor(trainData, trainLabel, x,
                                            K))  # 预测标签分类
        progress.update(testTask, advance=1)

    progress.stop()
    return predictLabel
Exemplo n.º 9
0
def upload_osf(params_str, build, title, detach, force, update):
    params = {e.split('=')[0]: e.split('=')[1] for e in params_str.split()}
    dst = params['folder']
    with Progress(
            TAB +
            "> Retrieving list of files in the project... [IN PROGRESS]\n",
            transient=True,
    ) as progress:
        _ = progress.add_task("Retrieving...")
        osf_files = osf('-p',
                        params['project'],
                        '-u',
                        params['user'],
                        'ls',
                        _env={'OSF_PASSWORD': get_password()})
    print(TAB + "> Retrieving list of files in the project... [green][DONE]\n")

    osf_files = [f.replace('osfstorage/', '').strip() for f in osf_files]
    files = get_list_of_files(build)
    with Progress(
            TAB + "> Uploading... [IN PROGRESS]\n",
            BarColumn(30),
            TimeRemainingColumn(),
            "| ({task.completed}/{task.total}) Uploading [blue]{task.fields[file]} [white]"
            "{task.fields[error]}",
            transient=True,
    ) as progress:
        task = progress.add_task("Uploading...",
                                 total=len(files),
                                 error="",
                                 file=files[0])
        for file in files:
            error = ""
            dst_file = file.replace(build, dst + '/')
            if not update or dst_file not in osf_files:
                for j in range(MAX_RETRY):
                    try:
                        osf('-p',
                            params['project'],
                            '-u',
                            params['user'],
                            'upload',
                            '-f',
                            file,
                            dst_file,
                            _env={'OSF_PASSWORD': get_password()})
                        break
                    except Exception as e:
                        log.debug(e)
                        error = '\n| ({}/{}) Failed to upload document {}'.format(
                            j + 1, MAX_RETRY, file)
                        error += '\n| {}'.format(str(e))
                        progress.update(task,
                                        advance=0,
                                        error=error,
                                        file=file)
            else:
                error = "\n| Skip as document exists already"
            progress.update(task, advance=1, error=error, file=file)
    print(TAB + "> Upload... [green][DONE]\n")
Exemplo n.º 10
0
 def backup_wtf(self, console):
     zipf = zipfile.ZipFile(
         Path('WTF-Backup',
              f'{datetime.datetime.now().strftime("%d%m%y")}.zip'), 'w',
         zipfile.ZIP_DEFLATED)
     filecount = 0
     for root, dirs, files in os.walk('WTF/', topdown=True):
         files = [f for f in files if not f[0] == '.']
         dirs[:] = [d for d in dirs if not d[0] == '.']
         filecount += len(files)
     with Progress('{task.completed}/{task.total}',
                   '|',
                   BarColumn(bar_width=None),
                   '|',
                   auto_refresh=False,
                   console=console) as progress:
         task = progress.add_task('', total=filecount)
         while not progress.finished:
             for root, dirs, files in os.walk('WTF/', topdown=True):
                 files = [f for f in files if not f[0] == '.']
                 dirs[:] = [d for d in dirs if not d[0] == '.']
                 for f in files:
                     zipf.write(Path(root, f))
                     progress.update(task, advance=1, refresh=True)
     zipf.close()
Exemplo n.º 11
0
 def backup_wtf(self, console):
     archive = Path('WTF-Backup', f'{datetime.datetime.now().strftime("%d%m%y")}.zip')
     if os.path.isfile(archive):
         suffix = 1
         while True:
             archive = Path('WTF-Backup', f'{datetime.datetime.now().strftime("%d%m%y")}-{suffix}.zip')
             if not os.path.isfile(archive):
                 break
             suffix += 1
     zipf = zipfile.ZipFile(archive, 'w', zipfile.ZIP_DEFLATED)
     filecount = 0
     for _, _, files in os.walk('WTF/', topdown=True, followlinks=True):
         files = [f for f in files if not f[0] == '.']
         filecount += len(files)
     if filecount > 0:
         with Progress('{task.completed}/{task.total}', '|', BarColumn(bar_width=None), '|', auto_refresh=False,
                       console=console) as progress:
             task = progress.add_task('', total=filecount)
             while not progress.finished:
                 for root, _, files in os.walk('WTF/', topdown=True, followlinks=True):
                     files = [f for f in files if not f[0] == '.']
                     for f in files:
                         zipf.write(Path(root, f))
                         progress.update(task, advance=1, refresh=True)
     zipf.close()
Exemplo n.º 12
0
    def get_bolumler(self, isim):
        """ Animenin bölümlerini {bölüm,title} formatında döndürür. """
        with Progress(SpinnerColumn(),
                      '[progress.description]{task.description}',
                      BarColumn(bar_width=40)) as progress:
            task = progress.add_task("[cyan]Bölümler getiriliyor..",
                                     start=False)
            anime_slug = self.tamliste[isim]
            raw = self.driver.execute_script(
                f"return $.get('/anime/{anime_slug}')")
            soup = bs4(raw, "html.parser")
            self.anime_ismi = soup.title.text
            anime_code = soup.find('meta', {
                'name': 'twitter:image'
            }).get('content').split('lerb/')[1][:-4]

            raw = self.driver.execute_script(
                f"return $.get('https://www.turkanime.net/ajax/bolumler&animeId={anime_code}')"
            )
            soup = bs4(raw, "html.parser")

            bolumler = []
            for bolum in soup.findAll("span", {"class": "bolumAdi"}):
                bolumler.append({
                    'name':
                    bolum.text,
                    'value':
                    bolum.findParent().get("href").split("video/")[1]
                })
            progress.update(task, visible=False)
            return bolumler
Exemplo n.º 13
0
    def put(
        self, path: str, key: str, acl: str = "public-read", metadata: dict = {}
    ) -> dict:
        with Progress(
            SpinnerColumn(spinner_name="earth"),
            TextColumn("[progress.description]{task.description}"),
            BarColumn(bar_width=30),
            TextColumn("[progress.percentage]{task.percentage:>3.0f}%"),
            TimeRemainingColumn(),
            transient=True,
        ) as progress:
            size = os.stat(path).st_size
            task = progress.add_task(
                f"[green]Uploading [bold]{os.path.basename(path)}[/bold]", total=size
            )

            def update_progress(complete):
                progress.update(task, completed=complete)

            try:
                response = self.client.upload_file(
                    path,
                    self.bucket,
                    key,
                    ExtraArgs={"ACL": acl, "Metadata": metadata},
                    Callback=update_progress,
                )
            except ClientError as e:
                logging.error(e)
                return {}
        return response
Exemplo n.º 14
0
def test_expand_bar() -> None:
    console = Console(file=io.StringIO(), force_terminal=True, width=10)
    progress = Progress(BarColumn(bar_width=None), console=console)
    progress.add_task("foo")
    progress.refresh()
    expected = "\x1b[38;5;237m━━━━━━━━━\x1b[0m \r\x1b[2K\x1b[38;5;237m━━━━━━━━━\x1b[0m "
    assert console.file.getvalue() == expected
Exemplo n.º 15
0
def do_multi_ping(
    hosts: dict, count: int = 8, interval: float = 0.01, timeout: int = 2
) -> List[PingResult]:
    pool = ThreadPoolExecutor(thread_name_prefix="ping")

    with Progress(
        "[progress.description]{task.description}",
        BarColumn(),
        "{task.completed} / {task.total}",
        TimeRemainingColumn(),
        transient=True,
    ) as progress:
        jobs = []
        offset = 0
        for host, cc in hosts.items():
            offset += 1
            job = pool.submit(
                do_one_ping_wrapper,
                seq_offset=offset * len(hosts) * count,
                host=host,
                cc=cc,
                count=count,
                interval=interval,
                timeout=timeout,
                progress=progress,
            )
            jobs.append(job)
            sleep(0.5)  # fixme there is a deadlock in rich, need more inspect

        results: List[Optional[PingResult]] = list(map(lambda x: x.result(), jobs))
        results: List[PingResult] = list(filter(lambda x: x is not None, results))

    return results
Exemplo n.º 16
0
    def __init__(self, host: str, port: int, user: str, password: str, **kwargs):
        super().__init__(host, port, user, password)

        if not host:
            raise ChannelError("no host address provided")

        if port is None:
            raise ChannelError("no port provided")

        with Progress(
            f"connecting to [blue]{host}[/blue]:[cyan]{port}[/cyan]",
            BarColumn(bar_width=None),
            transient=True,
        ) as progress:
            task_id = progress.add_task("connecting", total=1, start=False)
            # Connect to the remote host
            client = socket.create_connection((host, port))

            progress.update(task_id, visible=False)
            progress.log(
                f"connection to "
                f"[blue]{host}[/blue]:[cyan]{port}[/cyan] [green]established[/green]"
            )

        self.client = client
        self.address = (host, port)
Exemplo n.º 17
0
def UploadFile(socket, address, key, size_uncompressed, size_compressed, buffer=2048):
    with open("temp.tar.gz", "rb") as f:
        file_hash_uc = SHA512.new();
        file_hash_c = SHA512.new();
        for address_singular in address:
            with open(address_singular, "rb") as filehandle:
                while True:
                    block = filehandle.read(buffer);
                    if not block:
                        break;
                    file_hash_uc.update(block);
        with Progress(TextColumn("[bold blue]{task.description}", justify="right"),
                    BarColumn(bar_width=None),
                    "[progress.percentage]{task.percentage:>3.1f}%",
                    "•",
                    DownloadColumn(),
                    "•",
                    TransferSpeedColumn(),
                    "•",
                    TimeRemainingColumn(),) as progress:
            task = progress.add_task("Uploading file(s)", total=size_compressed);
            while not progress.finished:
                l = f.read(buffer);
                if not l:
                    break;
                select.select([], [socket], []);
                sendEncryptedMessage(socket, l, key);
                progress.update(task, advance=len(l));
                file_hash_c.update(l);
    return (file_hash_uc, file_hash_c);
Exemplo n.º 18
0
 def download(self, batch, articles, folder):
     """
         Download a pdf batch
     """
     log_file = os.path.join(folder, 'missing.log')
     logger.remove()
     logger.add(log_file,
                format="{time} {level} {message}",
                mode='w',
                level="INFO")
     assert len(articles) > 0, 'no article.'
     progress = Progress(TextColumn(
         "[progress.description]{task.description}",
         table_column=Column(ratio=1)),
                         TimeElapsedColumn(table_column=Column(ratio=1)),
                         BarColumn(table_column=Column(ratio=2)),
                         "| {task.completed} of {task.total:>2.0f}",
                         expand=False)
     missing = 0
     with progress:
         task = progress.add_task(f" {batch} |", total=len(articles))
         for article in articles:
             done = self.get_article(
                 article['article_url'],
                 os.path.join(folder, article['file_name']))
             if done:
                 progress.update(task, advance=1)
             else:
                 missing += 1
                 logger.info("NOT_FOUND_IN_SCI-HUB | " +
                             article['warning_str'])
     return missing, log_file
Exemplo n.º 19
0
 def c_uninstall(self, args):
     if args:
         addons = [
             addon.strip()
             for addon in list(reader([args], skipinitialspace=True))[0]
         ]
         with Progress('{task.completed}/{task.total}',
                       '|',
                       BarColumn(bar_width=None),
                       '|',
                       auto_refresh=False,
                       console=self.console) as progress:
             task = progress.add_task('', total=len(addons))
             while not progress.finished:
                 for addon in addons:
                     name, version = self.core.del_addon(addon)
                     if name:
                         self.table.add_row(
                             f'[bold red]Uninstalled[/bold red]', name,
                             version)
                     else:
                         self.table.add_row(
                             f'[bold black]Not installed[/bold black]',
                             addon, '')
                     progress.update(task, advance=1, refresh=True)
         self.console.print(self.table)
     else:
         self.console.print(
             '[green]Usage:[/green]\n\tThis command accepts a comma-separated list of addon names or '
             'full links as an argument.\n[bold green]Supported URL:[/bold green]\n\thttps://www.curs'
             'eforge.com/wow/addons/[[addon_name]]\n\thttps://www.wowinterface.com/downloads/[[addon_'
             'name]]\n\thttps://www.tukui.org/addons.php?id=[[addon_id]]\n\thttps://www.tukui.org/cla'
             'ssic-addons.php?id=[[addon_id]]\n\thttps://github.com/[[username]]/[[repository_name]]',
             highlight=False)
Exemplo n.º 20
0
    async def load_packages(self):
        if packages:
            with Progress("Launching Tuxbot",
                          BarColumn(bar_width=None),
                          transient=True) as progress:
                task = progress.add_task("Loading packages...",
                                         total=len(packages))

                for package in packages:
                    try:
                        self.load_extension(package)
                        progress.log(
                            f"[u]{package}[/u]'s [cyan]package[/cyan] [green]loaded[/green]"
                        )
                        log.info("Package %s loaded", package)
                    except Exception as e:
                        log.exception("Failed to load package %s",
                                      package,
                                      exc_info=e)
                        progress.log(
                            f"[red]Failed to load package {package} "
                            f"[i](see "
                            f"{str((self.logs / 'tuxbot.log').resolve())} "
                            f"for more details)[/i]")

                    progress.advance(task)
Exemplo n.º 21
0
    def __init__(self, host: str, port: int, user: str, password: str,
                 **kwargs):
        super().__init__(host, port, user, password)

        if not host or host == "":
            host = "0.0.0.0"

        if port is None:
            raise ChannelError(f"no port specified")

        with Progress(
                f"bound to [blue]{host}[/blue]:[cyan]{port}[/cyan]",
                BarColumn(bar_width=None),
                transient=True,
        ) as progress:
            task_id = progress.add_task("listening", total=1, start=False)
            # Create the socket server
            server = socket.create_server((host, port), reuse_port=True)

            try:
                # Wait for a connection
                (client, address) = server.accept()
            except KeyboardInterrupt:
                raise ChannelError("listener aborted")

            progress.update(task_id, visible=False)
            progress.log(
                f"[green]received[/green] connection from [blue]{address[0]}[/blue]:[cyan]{address[1]}[/cyan]"
            )

        self.client = client
        self.address = address
Exemplo n.º 22
0
def check_remote_servers(logger, servers):
    check_result = dict()
    progress = Progress(
        "{task.description}",
        SpinnerColumn(),
        BarColumn(),
        TextColumn("[progress.percentage]{task.percentage:>3.0f}%"),
    )
    with progress:
        with ThreadPoolExecutor() as pool:
            for server in servers:
                if server["check"] == "False":
                    continue

                reader = DriverReader(progress)
                tinfo = pool.submit(
                    reader.get_remote_drivers,
                    server["ip"],
                    server["user"],
                    server["password"],
                    server["ssh_port"],
                    server["query"],
                )
                check_result[server["ip"]] = tinfo

        for ip in check_result:
            drivers, wu_drivers, noinfo_drivers = check_result[ip].result()
            check_result[ip] = {
                "drivers": drivers,
                "weak-update-drivers": wu_drivers,
                "noinfo-drivers": noinfo_drivers,
            }
        progress.console.print("[green]Check completed![/]")

    return check_result
Exemplo n.º 23
0
def default_transient_progress():
    return Progress(
        "[progress.dexcription]{task.description}",
        BarColumn(),
        console=console,
        transient=True,
    )
Exemplo n.º 24
0
 def c_uninstall(self, args):
     if args:
         optkeep = False
         pargs = split(args)
         if '-k' in pargs:
             optkeep = True
             args = args.replace('-k', '', 1)
         addons = self.parse_args(args)
         with Progress('{task.completed}/{task.total}', '|', BarColumn(bar_width=None), '|',
                       auto_refresh=False, console=self.console) as progress:
             task = progress.add_task('', total=len(addons))
             while not progress.finished:
                 for addon in addons:
                     name, version = self.core.del_addon(addon, optkeep)
                     if name:
                         self.table.add_row(f'[bold red]Uninstalled[/bold red]',
                                            Text(name, no_wrap=True), Text(version, no_wrap=True))
                     else:
                         self.table.add_row(f'[bold black]Not installed[/bold black]',
                                            Text(addon, no_wrap=True), Text('', no_wrap=True))
                     progress.update(task, advance=1, refresh=True)
         self.console.print(self.table)
     else:
         self.console.print('[green]Usage:[/green]\n\tThis command accepts a space-separated list of addon names or '
                            'full links as an argument.\n\t[bold white]Flags:[/bold white]\n\t\t[bold white]-k[/bold'
                            ' white] - Keep the addon files after uninstalling.', highlight=False)
Exemplo n.º 25
0
def create_progress_bar():
    """
    Create progress bar to display overall progress.

    Returns rich.progress.Progress instance if the Rich Python package is available,
    or a shim DummyProgress instance otherwise.
    """
    if use_rich() and build_option('show_progress_bar'):

        # pick random spinner, from a selected subset of available spinner (see 'python3 -m rich.spinner')
        spinner = random.choice(('aesthetic', 'arc', 'bounce', 'dots', 'line',
                                 'monkey', 'point', 'simpleDots'))

        progress_bar = Progress(
            SpinnerColumn(spinner),
            "[progress.percentage]{task.percentage:>3.1f}%",
            TextColumn(
                "[bold blue]Installing {task.description} ({task.completed:.0f}/{task.total} done)"
            ),
            BarColumn(bar_width=None),
            TimeElapsedColumn(),
            transient=True,
            expand=True,
        )
    else:
        progress_bar = DummyProgress()

    return progress_bar
Exemplo n.º 26
0
    def start(self, *, total: Optional[float], at: float,
              description: str) -> None:
        from rich.progress import (
            Progress,
            BarColumn,
            DownloadColumn,
            TimeRemainingColumn,
            TransferSpeedColumn,
        )

        assert total is not None
        self.console.print(f'[progress.description]{description}')
        self.progress_bar = Progress(
            '[',
            BarColumn(),
            ']',
            '[progress.percentage]{task.percentage:>3.0f}%',
            '(',
            DownloadColumn(),
            ')',
            TimeRemainingColumn(),
            TransferSpeedColumn(),
            console=self.console,
            transient=True)
        self.progress_bar.start()
        self.transfer_task = self.progress_bar.add_task(description,
                                                        completed=at,
                                                        total=total)
Exemplo n.º 27
0
 def c_install(self, args):
     if args:
         if args.startswith('-i '):
             args = args[3:]
             optignore = True
         else:
             optignore = False
         addons = [addon.strip() for addon in list(reader([args], skipinitialspace=True))[0]]
         with Progress('{task.completed}/{task.total}', '|', BarColumn(bar_width=None), '|',
                       auto_refresh=False, console=self.console) as progress:
             task = progress.add_task('', total=len(addons))
             while not progress.finished:
                 for addon in addons:
                     installed, name, version = self.core.add_addon(addon, optignore)
                     if installed:
                         self.table.add_row('[green]Installed[/green]', name, version)
                     else:
                         self.table.add_row('[bold black]Already installed[/bold black]', name, version)
                     progress.update(task, advance=1, refresh=True)
         self.console.print(self.table)
     else:
         self.console.print('[green]Usage:[/green]\n\tThis command accepts a comma-separated list of links as an arg'
                            'ument.\n\tOption [bold white]-i[/bold white] will disable the client version check.\n[b'
                            'old green]Supported URL:[/bold green]\n\thttps://www.curseforge.com/wow/addons/[[addon_'
                            'name]] [bold white]|[/bold white] cf:[[addon_name]]\n\thttps://www.wowinterface.com/dow'
                            'nloads/[[addon_name]] [bold white]|[/bold white] wowi:[[addon_id]]\n\thttps://www.tukui'
                            '.org/addons.php?id=[[addon_id]] [bold white]|[/bold white] tu:[[addon_id]]\n\thttps://w'
                            'ww.tukui.org/classic-addons.php?id=[[addon_id]] [bold white]|[/bold white] tuc:[[addon_'
                            'id]]\n\tElvUI [bold white]|[/bold white] ElvUI:Dev\n\tTukui\n\tSLE:Dev',
                            highlight=False)
Exemplo n.º 28
0
class ProgressBar:
    OPTIONS = [
        "[progress.description]{task.description}",
        BarColumn(),
        "[progress.percentage]{task.completed:>6}/{task.total}",
        TimeElapsedColumn(),
    ]

    def __init__(self, description, total):
        self.description = description
        self.total = total

    def __enter__(self):
        self.progress = Progress(*self.OPTIONS)
        self.progress.start()
        self.task = self.progress.add_task(self.description, total=self.total)
        return self

    def __exit__(self, exc_type, exc_val, exc_tb):
        self.progress.stop()

    def print(self, message):
        self.progress.console.print(message)

    def advance(self, advance=1):
        self.progress.update(self.task, advance=advance)
Exemplo n.º 29
0
def check_cdn(original_targets, checkcdn):
    targets = []  # 有效的目标,加上解析出的ip
    valid_targets = []  # 有效的目标

    # 创建一个事件循环
    loop = asyncio.new_event_loop()
    asyncio.set_event_loop(loop)
    # 创建一个线程池,开启100个线程
    threads = ThreadPoolExecutor(100)
    # 这一步很重要, 使用线程池访问,使用loop.run_in_executor()函数:内部接受的是阻塞的线程池,执行的函数,传入的参数
    tasks = []

    # 进度条设置
    from rich.progress import (
        BarColumn,
        TimeRemainingColumn,
        TransferSpeedColumn,
        Progress,
    )
    progress = Progress(
        "[progress.description]{task.description}",
        BarColumn(),
        "[progress.percentage]{task.percentage:>3.1f}%",
        "•",
        "[bold green]{task.completed}/{task.total}",
        "•",
        TransferSpeedColumn(),
        "•",
        TimeRemainingColumn(),
        transient=True,  # 100%后隐藏进度条
    )

    with progress:
        progress_bar = progress.add_task("[cyan]DNS, CDN detection...",
                                         total=len(original_targets))
        for target in original_targets:
            target = target.replace('\n', '').replace('\r', '').strip()
            tasks.append(
                loop.run_in_executor(threads, run, target, checkcdn,
                                     progress_bar, progress))

        if len(tasks) > 0:
            # 使用uvloop加速asyncio, 目前不支持Windows
            import platform
            if platform.system() != "Windows":
                import uvloop
                asyncio.set_event_loop_policy(uvloop.EventLoopPolicy())

            # 等待所有的任务完成
            tasks_result = asyncio.wait(tasks)
            loop.run_until_complete(tasks_result)

            for i in tasks:
                url_ip_list, valid_domain = i.result()
                targets.extend(url_ip_list)
                if valid_domain:
                    valid_targets.append(valid_domain)

    return list(set(targets)), valid_targets
Exemplo n.º 30
0
def test_bar_columns():
    bar_column = BarColumn(100)
    assert bar_column.bar_width == 100
    task = Task(1, "test", 100, 20, _get_time=lambda: 1.0)
    bar = bar_column(task)
    assert isinstance(bar, Bar)
    assert bar.completed == 20
    assert bar.total == 100