Skip to content
Draft
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
7 changes: 4 additions & 3 deletions concoursetools/cli/commands.py
Original file line number Diff line number Diff line change
Expand Up @@ -17,10 +17,11 @@
cli = CLI()

DEFAULT_PYTHON_VERSION = f"{sys.version_info.major}.{sys.version_info.minor}"
DEFAULT_RESOURCE_FILE = "concourse.py"


@cli.register(allow_short={"executable", "class_name", "resource_file"})
def assets(path: str, /, *, executable: str | None = None, resource_file: str = "concourse.py",
def assets(path: str, /, *, executable: str | None = None, resource_file: str = DEFAULT_RESOURCE_FILE,
class_name: str | None = None) -> None:
"""
Create the assets script directory.
Expand Down Expand Up @@ -49,7 +50,7 @@ def assets(path: str, /, *, executable: str | None = None, resource_file: str =

@cli.register(allow_short={"executable", "class_name", "resource_file"})
def dockerfile(path: str, /, *, executable: str | None = None, image: str = "python", tag: str | None = None,
suffix: str | None = None, resource_file: str = "concourse.py", class_name: str | None = None,
suffix: str | None = None, resource_file: str = DEFAULT_RESOURCE_FILE, class_name: str | None = None,
pip_args: str | None = None, include_rsa: bool = False, include_netrc: bool = False,
encoding: str | None = None, no_venv: bool = False, dev: bool = False) -> None:
"""
Expand Down Expand Up @@ -182,7 +183,7 @@ def dockerfile(path: str, /, *, executable: str | None = None, image: str = "pyt


@cli.register(allow_short={"executable", "class_name", "resource_file"})
def legacy(path: str, /, *, executable: str | None = None, resource_file: str = "concourse.py",
def legacy(path: str, /, *, executable: str | None = None, resource_file: str = DEFAULT_RESOURCE_FILE,
class_name: str | None = None, docker: bool = False, include_rsa: bool = False) -> None:
"""
Invoke the legacy CLI.
Expand Down
12 changes: 6 additions & 6 deletions concoursetools/cli/parser.py
Original file line number Diff line number Diff line change
Expand Up @@ -355,7 +355,7 @@ def short_alias(self) -> str:

@property
@abstractmethod
def aliases(self) -> tuple[str, ...]:
def aliases(self) -> list[str]:
"""The aliases for the option."""
...

Expand Down Expand Up @@ -410,9 +410,9 @@ class PositionalArgument(Parameter[T]):
:param description: An optional description of the argument.
"""
@property
def aliases(self) -> tuple[str, ...]:
def aliases(self) -> list[str]:
"""The aliases for the option."""
return (self.name,)
return [self.name]

def add_to_parser(self, parser: ArgumentParser) -> None:
parser.add_argument(*self.aliases, type=self.param_type, help=self.description)
Expand All @@ -433,10 +433,10 @@ class Option(Parameter[T]):
allow_short: bool = False

@property
def aliases(self) -> tuple[str, ...]:
def aliases(self) -> list[str]:
if self.allow_short:
return (self.short_alias, self.long_alias)
return (self.long_alias,)
return [self.short_alias, self.long_alias]
return [self.long_alias]

def add_to_parser(self, parser: ArgumentParser) -> None:
parser.add_argument(*self.aliases, type=self.param_type, default=self.default, help=self.description)
Expand Down
5 changes: 2 additions & 3 deletions examples/build_status.py
Original file line number Diff line number Diff line change
Expand Up @@ -87,9 +87,8 @@ def __init__(self, repository: str | None = None, endpoint: str | None = None,
else:
endpoint = endpoint.rstrip("/")

if self.driver is Driver.CLOUD:
if repository is None:
raise ValueError("Must set repository when using Bitbucket Cloud.")
if self.driver is Driver.CLOUD and repository is None:
raise ValueError("Must set repository when using Bitbucket Cloud.")

def publish_new_version(self, sources_dir: Path, build_metadata: BuildMetadata,
repository: str, build_status: str, key: str | None = None,
Expand Down
7 changes: 4 additions & 3 deletions tests/test_cli_commands.py
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,7 @@
import unittest.mock

from concoursetools.cli import cli
from concoursetools.cli.commands import DEFAULT_RESOURCE_FILE
from concoursetools.colour import Colour, colourise


Expand All @@ -26,7 +27,7 @@ def setUp(self) -> None:

path_to_this_file = Path(__file__)
path_to_test_resource_module = path_to_this_file.parent / "resource.py"
shutil.copyfile(path_to_test_resource_module, self.temp_dir / "concourse.py")
shutil.copyfile(path_to_test_resource_module, self.temp_dir / DEFAULT_RESOURCE_FILE)
os.chdir(self.temp_dir)

def tearDown(self) -> None:
Expand Down Expand Up @@ -60,7 +61,7 @@ def setUp(self) -> None:

path_to_this_file = Path(__file__)
path_to_test_resource_module = path_to_this_file.parent / "resource.py"
shutil.copyfile(path_to_test_resource_module, self.temp_dir / "concourse.py")
shutil.copyfile(path_to_test_resource_module, self.temp_dir / DEFAULT_RESOURCE_FILE)
self.dockerfile_path = self.temp_dir / "Dockerfile"
self.assertFalse(self.dockerfile_path.exists())

Expand Down Expand Up @@ -115,7 +116,7 @@ def setUp(self) -> None:

path_to_this_file = Path(__file__)
path_to_test_resource_module = path_to_this_file.parent / "resource.py"
shutil.copyfile(path_to_test_resource_module, self.temp_dir / "concourse.py")
shutil.copyfile(path_to_test_resource_module, self.temp_dir / DEFAULT_RESOURCE_FILE)
self.dockerfile_path = self.temp_dir / "Dockerfile"
self.assertFalse(self.dockerfile_path.exists())

Expand Down
2 changes: 1 addition & 1 deletion tests/test_cli_parsing.py
Original file line number Diff line number Diff line change
Expand Up @@ -141,7 +141,7 @@ def test_generic_help_no_arguments(self) -> None:

""").lstrip())

def first_command_help(self) -> None:
def test_first_command_help(self) -> None:
with self._mock_terminal_width(120):
width, _ = shutil.get_terminal_size()
self.assertGreaterEqual(width, 120)
Expand Down
2 changes: 1 addition & 1 deletion tests/test_examples.py
Original file line number Diff line number Diff line change
Expand Up @@ -279,7 +279,7 @@ def test_file_downloads(self) -> None:
self.assertDictEqual(self.expected_response, json.loads(folder_state["info.json"]))

image_contents = folder_state["image.png"]
hashed_image_contents = hashlib.sha1(image_contents).hexdigest()
hashed_image_contents = hashlib.sha1(image_contents, usedforsecurity=False).hexdigest()
self.assertEqual(hashed_image_contents, "22f545ac6b50163ce39bac49094c3f64e0858403")

def test_file_downloads_without_files(self) -> None:
Expand Down
2 changes: 1 addition & 1 deletion tests/test_resource.py
Original file line number Diff line number Diff line change
Expand Up @@ -735,7 +735,7 @@ def _build_test_resource_docker_image() -> str:
# '3.14.0b1 (main, May 9 2025, 23:49:24) [GCC 12.2.0]'
# ^^^^^^^^
tag, *_ = sys.version.split()
cli_commands.dockerfile(str(temp_dir), resource_file="concourse.py", class_name=TestResource.__name__,
cli_commands.dockerfile(str(temp_dir), resource_file=temporary_resource_file.name, class_name=TestResource.__name__,
tag=tag, dev=True)

stdout, _ = run_command("docker", ["build", ".", "-q"], cwd=temp_dir)
Expand Down
2 changes: 1 addition & 1 deletion tests/test_version.py
Original file line number Diff line number Diff line change
Expand Up @@ -118,7 +118,7 @@ def test_default_sorting(self) -> None:
version_3 = BasicVersion("image.png")

with self.assertRaises(TypeError):
sorted([version_1, version_2, version_3]) # type: ignore[type-var]
[version_1, version_2, version_3].sort() # type: ignore[call-arg]

def test_complex_sorting(self) -> None:
version_1 = ComplexVersion("file.txt")
Expand Down