Add project status command
This commit is contained in:
parent
af45867376
commit
ef5ce9f442
4 changed files with 41 additions and 1 deletions
|
@ -4,6 +4,7 @@ from dataclasses import dataclass, field
|
|||
from pathlib import Path
|
||||
from typing import Dict, List
|
||||
|
||||
from click.termui import _ansi_colors as ansi_colors # type: ignore
|
||||
from dotenv import dotenv_values
|
||||
|
||||
from catfish.utils.processes import get_running_process_for
|
||||
|
@ -100,3 +101,20 @@ class Process:
|
|||
@property
|
||||
def is_running(self):
|
||||
return self.get_running_process() is not None
|
||||
|
||||
@property
|
||||
def pid(self):
|
||||
proc = self.get_running_process()
|
||||
if proc:
|
||||
return proc.pid
|
||||
|
||||
@property
|
||||
def port(self):
|
||||
proc = self.get_running_process()
|
||||
if proc:
|
||||
return proc.pid
|
||||
|
||||
@property
|
||||
def color(self):
|
||||
proc_index = self.project.processes.index(self)
|
||||
return list(ansi_colors.keys())[1:][proc_index % len(ansi_colors)]
|
||||
|
|
|
@ -3,6 +3,7 @@ import shlex
|
|||
import subprocess
|
||||
|
||||
import click
|
||||
from prettytable import PrettyTable
|
||||
|
||||
from catfish.utils.sockets import socket_has_data
|
||||
|
||||
|
@ -32,3 +33,23 @@ def run(ctx, command):
|
|||
break
|
||||
click.echo(line, nl=False)
|
||||
return ctx.exit(proc.returncode)
|
||||
|
||||
|
||||
@project.command()
|
||||
@click.option("--running-only", is_flag=True, default=False)
|
||||
def status(running_only):
|
||||
project = Project(os.getcwd())
|
||||
table = PrettyTable(["ident", "pid", "port"])
|
||||
for process in project.processes:
|
||||
if running_only and not process.is_running:
|
||||
continue
|
||||
port = process.port
|
||||
pid = process.pid
|
||||
table.add_row(
|
||||
[
|
||||
click.style(process.ident, fg=process.color),
|
||||
pid if pid else "",
|
||||
port if port else "",
|
||||
]
|
||||
)
|
||||
click.echo(table.get_string(sortby="ident"))
|
||||
|
|
|
@ -11,7 +11,7 @@ def bool_to_str(i: bool) -> str:
|
|||
|
||||
def escape_value(value: str):
|
||||
value = value.replace('"', '\\"')
|
||||
if any([char in value for char in CHARS_TO_ESCAPE]):
|
||||
if any(char in value for char in CHARS_TO_ESCAPE):
|
||||
value = '"{}"'.format(value)
|
||||
return value
|
||||
|
||||
|
|
1
setup.py
1
setup.py
|
@ -20,6 +20,7 @@ setup(
|
|||
"pyzmq",
|
||||
"aiofiles",
|
||||
"python-dotenv",
|
||||
"prettytable",
|
||||
],
|
||||
entry_points="""
|
||||
[console_scripts]
|
||||
|
|
Reference in a new issue