Page Menu
Home
Software Heritage
Search
Configure Global Search
Log In
Files
F8394549
D4432.diff
No One
Temporary
Actions
View File
Edit File
Delete File
View Transforms
Subscribe
Mute Notifications
Award Token
Flag For Later
Size
9 KB
Subscribers
None
D4432.diff
View Options
diff --git a/swh/deposit/cli/client.py b/swh/deposit/cli/client.py
--- a/swh/deposit/cli/client.py
+++ b/swh/deposit/cli/client.py
@@ -13,6 +13,7 @@
import os
import sys
from typing import TYPE_CHECKING, Any, Collection, Dict, List, Optional
+import warnings
import click
@@ -129,8 +130,6 @@
archive: Optional[str],
metadata: Optional[str],
collection: Optional[str],
- archive_deposit: bool,
- metadata_deposit: bool,
slug: Optional[str],
partial: bool,
deposit_id: Optional[int],
@@ -171,33 +170,22 @@
Returns:
dict with the following keys:
- 'archive': the software archive to deposit
- 'username': username
- 'metadata': the metadata file to deposit
- 'collection: the user's collection under which to put the deposit
- 'slug': the slug or external id identifying the deposit to make
- 'partial': if the deposit is partial or not
- 'client': instantiated class
- 'url': deposit's server main entry point
- 'deposit_type': deposit's type (binary, multipart, metadata)
- 'deposit_id': optional deposit identifier
- 'swhid': optional deposit swhid
-
+ "archive": the software archive to deposit
+ "username": username
+ "metadata": the metadata file to deposit
+ "collection": the user's collection under which to put the deposit
+ "slug": the slug or external id identifying the deposit to make
+ "in_progress": if the deposit is partial or not
+ "url": deposit's server main entry point
+ "deposit_id": optional deposit identifier
+ "swhid": optional deposit swhid
+ "replace": whether the given deposit is to be replaced or not
"""
- if archive_deposit and metadata_deposit:
- # too many flags use, remove redundant ones (-> multipart deposit)
- archive_deposit = False
- metadata_deposit = False
if not slug: # generate one as this is mandatory
slug = generate_slug()
if not metadata:
- if metadata_deposit:
- raise InputError(
- "Metadata deposit must be provided for metadata "
- "deposit, either a filepath with --metadata or --name and --author"
- )
if name and authors:
metadata_path = os.path.join(temp_dir, "metadata.xml")
logging.debug("Temporary file: %s", metadata_path)
@@ -206,7 +194,7 @@
with open(metadata_path, "w") as f:
f.write(metadata_xml)
metadata = metadata_path
- elif not archive_deposit and not partial and not deposit_id:
+ elif archive is not None and not partial and not deposit_id:
# If we meet all the following conditions:
# * this is not an archive-only deposit request
# * it is not part of a multipart deposit (either create/update
@@ -215,7 +203,6 @@
raise InputError(
"For metadata deposit request, either a metadata file with "
"--metadata or both --author and --name must be provided. "
- "If this is an archive deposit request, none is required."
)
elif name or authors:
# If we are generating metadata, then all mandatory metadata
@@ -234,13 +221,7 @@
"--author and --name (Those are used to generate one metadata file)."
)
- if metadata_deposit:
- archive = None
-
- if archive_deposit:
- metadata = None
-
- if not archive and not metadata and partial:
+ if not archive and not metadata:
raise InputError(
"Please provide an actionable command. See --help for more information"
)
@@ -291,12 +272,12 @@
@click.option(
"--archive-deposit/--no-archive-deposit",
default=False,
- help="(Optional) Software archive only deposit",
+ help="Deprecated (ignored)",
)
@click.option(
"--metadata-deposit/--no-metadata-deposit",
default=False,
- help="(Optional) Metadata only deposit",
+ help="Deprecated (ignored)",
)
@click.option(
"--collection",
@@ -361,21 +342,21 @@
ctx,
username: str,
password: str,
- archive: Optional[str] = None,
- metadata: Optional[str] = None,
- archive_deposit: bool = False,
- metadata_deposit: bool = False,
- collection: Optional[str] = None,
- slug: Optional[str] = None,
- partial: bool = False,
- deposit_id: Optional[int] = None,
- swhid: Optional[str] = None,
- replace: bool = False,
- url: str = "https://deposit.softwareheritage.org",
- verbose: bool = False,
- name: Optional[str] = None,
- author: List[str] = [],
- output_format: Optional[str] = None,
+ archive: Optional[str],
+ metadata: Optional[str],
+ archive_deposit: bool,
+ metadata_deposit: bool,
+ collection: Optional[str],
+ slug: Optional[str],
+ partial: bool,
+ deposit_id: Optional[int],
+ swhid: Optional[str],
+ replace: bool,
+ url: str,
+ verbose: bool,
+ name: Optional[str],
+ author: List[str],
+ output_format: Optional[str],
):
"""Software Heritage Public Deposit Client
@@ -389,6 +370,15 @@
from swh.deposit.client import MaintenanceError, PublicApiDepositClient
+ if archive_deposit or metadata_deposit:
+ warnings.warn(
+ '"archive_deposit" and "metadata_deposit" option arguments are '
+ "deprecated and have no effect; simply do not provide the archive "
+ "for a metadata-only deposit, and do not provide a metadata for a"
+ "archive-only deposit.",
+ DeprecationWarning,
+ )
+
url = _url(url)
client = PublicApiDepositClient(url=url, auth=(username, password))
@@ -401,8 +391,6 @@
archive,
metadata,
collection,
- archive_deposit,
- metadata_deposit,
slug,
partial,
deposit_id,
diff --git a/swh/deposit/tests/cli/test_client.py b/swh/deposit/tests/cli/test_client.py
--- a/swh/deposit/tests/cli/test_client.py
+++ b/swh/deposit/tests/cli/test_client.py
@@ -249,7 +249,6 @@
"Problem during parsing options: "
"For metadata deposit request, either a metadata file with "
"--metadata or both --author and --name must be provided. "
- "If this is an archive deposit request, none is required."
),
)
assert expected_error_log_record in caplog.record_tuples
@@ -365,11 +364,14 @@
assert expected_error_log_record in caplog.record_tuples
-def test_cli_validation_missing_metadata_flag(caplog, cli_runner):
- """--metadata-deposit requires --metadata (or --name and --author) otherwise fails
+def test_cli_validation_replace_with_no_deposit_id_fails(
+ sample_archive, caplog, patched_tmp_path, requests_mock_datadir, datadir, cli_runner
+):
+ """--replace flags require --deposit-id otherwise fails
"""
- # --metadata-deposit without --metadata flag fails
+ metadata_path = os.path.join(datadir, "atom", "entry-data-deposit-binary.xml")
+
result = cli_runner.invoke(
cli,
[
@@ -380,7 +382,11 @@
TEST_USER["username"],
"--password",
TEST_USER["password"],
- "--metadata-deposit", # should fail because missing --metadata flag
+ "--metadata",
+ metadata_path,
+ "--archive",
+ sample_archive["path"],
+ "--replace",
],
)
@@ -391,56 +397,12 @@
logging.ERROR,
(
"Problem during parsing options: "
- "Metadata deposit must be provided for metadata "
- "deposit, either a filepath with --metadata or --name and --author"
+ "To update an existing deposit, you must provide its id"
),
)
assert expected_error_log_record in caplog.record_tuples
-def test_cli_validation_replace_with_no_deposit_id_fails(
- sample_archive, caplog, patched_tmp_path, requests_mock_datadir, datadir, cli_runner
-):
- """--replace flags require --deposit-id otherwise fails
-
- """
- metadata_path = os.path.join(datadir, "atom", "entry-data-deposit-binary.xml")
-
- for flags in [
- ["--replace"],
- ["--replace", "--metadata-deposit", "--archive-deposit"],
- ]:
- result = cli_runner.invoke(
- cli,
- [
- "upload",
- "--url",
- "https://deposit.swh.test/1",
- "--username",
- TEST_USER["username"],
- "--password",
- TEST_USER["password"],
- "--metadata",
- metadata_path,
- "--archive",
- sample_archive["path"],
- ]
- + flags,
- )
-
- assert result.exit_code == 1, result.output
- assert result.output == ""
- expected_error_log_record = (
- "swh.deposit.cli.client",
- logging.ERROR,
- (
- "Problem during parsing options: "
- "To update an existing deposit, you must provide its id"
- ),
- )
- assert expected_error_log_record in caplog.record_tuples
-
-
def test_cli_single_deposit_slug_generation(
sample_archive, patched_tmp_path, requests_mock_datadir, cli_runner
):
File Metadata
Details
Attached
Mime Type
text/plain
Expires
Jun 3 2025, 7:26 PM (9 w, 5 d ago)
Storage Engine
blob
Storage Format
Raw Data
Storage Handle
3225522
Attached To
D4432: Simplify `swh deposit upload` cli options
Event Timeline
Log In to Comment