Take into account package's "system" when checking for duplicates

This commit is contained in:
Ivan Kravets
2021-07-12 15:06:06 +03:00
parent 7dc8463da9
commit ac84431361

View File

@@ -47,8 +47,9 @@ def load_manifest_from_archive(path):
def check_package_duplicates( def check_package_duplicates(
owner, type, name, version owner, type, name, version, system
): # pylint: disable=redefined-builtin ): # pylint: disable=redefined-builtin
found = False
items = ( items = (
RegistryClient() RegistryClient()
.list_packages(filters=dict(types=[type], names=[name])) .list_packages(filters=dict(types=[type], names=[name]))
@@ -56,11 +57,19 @@ def check_package_duplicates(
) )
if not items: if not items:
return True return True
# duplicated version by owner # duplicated version by owner / system
if any( found = False
item["owner"]["username"] == owner and item["version"]["name"] == version for item in items:
for item in items if item["owner"]["username"] != owner or item["version"]["name"] != version:
): continue
if not system:
found = True
break
published_systems = []
for f in item["version"]["files"]:
published_systems.extend(f.get("system", []))
found = set(system).issubset(set(published_systems))
if found:
raise UserSideException( raise UserSideException(
"The package `%s/%s@%s` is already published in the registry" "The package `%s/%s@%s` is already published in the registry"
% (owner, name, version) % (owner, name, version)
@@ -167,7 +176,7 @@ def package_publish( # pylint: disable=too-many-arguments, too-many-locals
click.echo(tabulate(data, tablefmt="plain")) click.echo(tabulate(data, tablefmt="plain"))
# look for duplicates # look for duplicates
check_package_duplicates(owner, type_, name, version) check_package_duplicates(owner, type_, name, version, manifest.get("system"))
if not non_interactive: if not non_interactive:
click.confirm( click.confirm(