Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions pyproject.toml
Original file line number Diff line number Diff line change
Expand Up @@ -83,6 +83,7 @@ include = [
"src/dstack/plugins",
"src/dstack/_internal/server",
"src/dstack/_internal/core/services",
"src/dstack/_internal/cli/commands",
"src/dstack/_internal/cli/services/configurators",
]
ignore = [
Expand Down
4 changes: 2 additions & 2 deletions src/dstack/_internal/cli/commands/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -54,15 +54,15 @@ def _command(self, args: argparse.Namespace):


class APIBaseCommand(BaseCommand):
api: Client = None
api: Client

def _register(self):
self._parser.add_argument(
"--project",
help="The name of the project. Defaults to [code]$DSTACK_PROJECT[/]",
metavar="NAME",
default=os.getenv("DSTACK_PROJECT"),
).completer = ProjectNameCompleter()
).completer = ProjectNameCompleter() # type: ignore[attr-defined]

def _command(self, args: argparse.Namespace):
configure_logging()
Expand Down
4 changes: 2 additions & 2 deletions src/dstack/_internal/cli/commands/apply.py
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
import argparse
from pathlib import Path

from argcomplete import FilesCompleter
from argcomplete import FilesCompleter # type: ignore[attr-defined]

from dstack._internal.cli.commands import APIBaseCommand
from dstack._internal.cli.services.configurators import (
Expand Down Expand Up @@ -48,7 +48,7 @@ def _register(self):
" Defaults to [code]$PWD/.dstack.yml[/]"
),
dest="configuration_file",
).completer = FilesCompleter(allowednames=["*.yml", "*.yaml"])
).completer = FilesCompleter(allowednames=["*.yml", "*.yaml"]) # type: ignore[attr-defined]
self._parser.add_argument(
"-y",
"--yes",
Expand Down
2 changes: 1 addition & 1 deletion src/dstack/_internal/cli/commands/attach.py
Original file line number Diff line number Diff line change
Expand Up @@ -61,7 +61,7 @@ def _register(self):
type=int,
default=0,
)
self._parser.add_argument("run_name").completer = RunNameCompleter()
self._parser.add_argument("run_name").completer = RunNameCompleter() # type: ignore[attr-defined]

def _command(self, args: argparse.Namespace):
super()._command(args)
Expand Down
2 changes: 1 addition & 1 deletion src/dstack/_internal/cli/commands/completion.py
Original file line number Diff line number Diff line change
Expand Up @@ -17,4 +17,4 @@ def _register(self):

def _command(self, args):
super()._command(args)
print(argcomplete.shellcode(["dstack"], shell=args.shell))
print(argcomplete.shellcode(["dstack"], shell=args.shell)) # type: ignore[attr-defined]
4 changes: 2 additions & 2 deletions src/dstack/_internal/cli/commands/delete.py
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
import argparse
from pathlib import Path

from argcomplete import FilesCompleter
from argcomplete import FilesCompleter # type: ignore[attr-defined]

from dstack._internal.cli.commands import APIBaseCommand
from dstack._internal.cli.services.configurators import (
Expand All @@ -24,7 +24,7 @@ def _register(self):
metavar="FILE",
help="The path to the configuration file. Defaults to [code]$PWD/.dstack.yml[/]",
dest="configuration_file",
).completer = FilesCompleter(allowednames=["*.yml", "*.yaml"])
).completer = FilesCompleter(allowednames=["*.yml", "*.yaml"]) # type: ignore[attr-defined]
self._parser.add_argument(
"-y",
"--yes",
Expand Down
2 changes: 1 addition & 1 deletion src/dstack/_internal/cli/commands/fleet.py
Original file line number Diff line number Diff line change
Expand Up @@ -48,7 +48,7 @@ def _register(self):
delete_parser.add_argument(
"name",
help="The name of the fleet",
).completer = FleetNameCompleter()
).completer = FleetNameCompleter() # type: ignore[attr-defined]
delete_parser.add_argument(
"-i",
"--instance",
Expand Down
4 changes: 2 additions & 2 deletions src/dstack/_internal/cli/commands/gateway.py
Original file line number Diff line number Diff line change
Expand Up @@ -68,7 +68,7 @@ def _register(self):
delete_parser.set_defaults(subfunc=self._delete)
delete_parser.add_argument(
"name", help="The name of the gateway"
).completer = GatewayNameCompleter()
).completer = GatewayNameCompleter() # type: ignore[attr-defined]
delete_parser.add_argument(
"-y", "--yes", action="store_true", help="Don't ask for confirmation"
)
Expand All @@ -79,7 +79,7 @@ def _register(self):
update_parser.set_defaults(subfunc=self._update)
update_parser.add_argument(
"name", help="The name of the gateway"
).completer = GatewayNameCompleter()
).completer = GatewayNameCompleter() # type: ignore[attr-defined]
update_parser.add_argument(
"--set-default", action="store_true", help="Set it the default gateway for the project"
)
Expand Down
2 changes: 1 addition & 1 deletion src/dstack/_internal/cli/commands/logs.py
Original file line number Diff line number Diff line change
Expand Up @@ -30,7 +30,7 @@ def _register(self):
type=int,
default=0,
)
self._parser.add_argument("run_name").completer = RunNameCompleter(all=True)
self._parser.add_argument("run_name").completer = RunNameCompleter(all=True) # type: ignore[attr-defined]

def _command(self, args: argparse.Namespace):
super()._command(args)
Expand Down
2 changes: 1 addition & 1 deletion src/dstack/_internal/cli/commands/metrics.py
Original file line number Diff line number Diff line change
Expand Up @@ -26,7 +26,7 @@ class MetricsCommand(APIBaseCommand):

def _register(self):
super()._register()
self._parser.add_argument("run_name").completer = RunNameCompleter()
self._parser.add_argument("run_name").completer = RunNameCompleter() # type: ignore[attr-defined]
self._parser.add_argument(
"-w",
"--watch",
Expand Down
4 changes: 2 additions & 2 deletions src/dstack/_internal/cli/commands/project.py
Original file line number Diff line number Diff line change
Expand Up @@ -124,8 +124,8 @@ def _list(self, args: argparse.Namespace):
table.add_column("USER", style="grey58")
table.add_column("DEFAULT", justify="center")

for project_name in config_manager.list_projects():
project_config = config_manager.get_project_config(project_name)
for project_config in config_manager.list_project_configs():
project_name = project_config.name
is_default = project_name == default_project.name if default_project else False

# Get username from API
Expand Down
4 changes: 2 additions & 2 deletions src/dstack/_internal/cli/commands/secrets.py
Original file line number Diff line number Diff line change
Expand Up @@ -29,7 +29,7 @@ def _register(self):
get_parser.add_argument(
"name",
help="The name of the secret",
).completer = SecretNameCompleter()
).completer = SecretNameCompleter() # type: ignore[attr-defined]
get_parser.set_defaults(subfunc=self._get)

set_parser = subparsers.add_parser(
Expand All @@ -53,7 +53,7 @@ def _register(self):
delete_parser.add_argument(
"name",
help="The name of the secret",
).completer = SecretNameCompleter()
).completer = SecretNameCompleter() # type: ignore[attr-defined]
delete_parser.add_argument(
"-y", "--yes", help="Don't ask for confirmation", action="store_true"
)
Expand Down
2 changes: 1 addition & 1 deletion src/dstack/_internal/cli/commands/server.py
Original file line number Diff line number Diff line change
Expand Up @@ -74,7 +74,7 @@ def _command(self, args: Namespace):
uvicorn_log_level = os.getenv("DSTACK_SERVER_UVICORN_LOG_LEVEL", "ERROR").lower()
reload_disabled = os.getenv("DSTACK_SERVER_RELOAD_DISABLED") is not None

uvicorn.run(
uvicorn.run( # type: ignore[unbound-variable]
"dstack._internal.server.main:app",
host=args.host,
port=args.port,
Expand Down
2 changes: 1 addition & 1 deletion src/dstack/_internal/cli/commands/stop.py
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,7 @@ def _register(self):
super()._register()
self._parser.add_argument("-x", "--abort", action="store_true")
self._parser.add_argument("-y", "--yes", action="store_true")
self._parser.add_argument("run_name").completer = RunNameCompleter()
self._parser.add_argument("run_name").completer = RunNameCompleter() # type: ignore[attr-defined]

def _command(self, args: argparse.Namespace):
super()._command(args)
Expand Down
2 changes: 1 addition & 1 deletion src/dstack/_internal/cli/commands/volume.py
Original file line number Diff line number Diff line change
Expand Up @@ -48,7 +48,7 @@ def _register(self):
delete_parser.add_argument(
"name",
help="The name of the volume",
).completer = VolumeNameCompleter()
).completer = VolumeNameCompleter() # type: ignore[attr-defined]
delete_parser.add_argument(
"-y", "--yes", help="Don't ask for confirmation", action="store_true"
)
Expand Down
4 changes: 2 additions & 2 deletions src/dstack/_internal/cli/services/completion.py
Original file line number Diff line number Diff line change
Expand Up @@ -87,5 +87,5 @@ class ProjectNameCompleter(BaseCompleter):

def __call__(self, prefix: str, parsed_args: argparse.Namespace, **kwargs) -> List[str]:
argcomplete.debug(f"{self.__class__.__name__}: Listing projects from ConfigManager")
projects = ConfigManager().list_projects()
return [p for p in projects if p.startswith(prefix)]
projects = ConfigManager().list_project_configs()
return [p.name for p in projects if p.name.startswith(prefix)]
4 changes: 2 additions & 2 deletions src/dstack/_internal/core/services/configs/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -68,8 +68,8 @@ def configure_project(self, name: str, url: str, token: str, default: bool):
if len(self.config.projects) == 1:
self.config.projects[0].default = True

def list_projects(self):
return [project.name for project in self.config.projects]
def list_project_configs(self) -> list[ProjectConfig]:
return self.config.projects

def delete_project(self, name: str):
self.config.projects = [p for p in self.config.projects if p.name != name]
Expand Down
Loading