Multi-platform: support multiple files per version #201

Merged
Oleg-Komarov merged 43 commits from multi-os into main 2024-07-09 16:27:46 +02:00
Showing only changes of commit c948ca1e20 - Show all commits

View File

@ -165,9 +165,14 @@ class ExtensionNameManifestValidator:
class ExtensionVersionManifestValidator: class ExtensionVersionManifestValidator:
"""Validates version.""" """Validates version existence in db and available platforms.
def __init__(self, manifest, extension_to_be_updated, allow_existing_version): allow_existing_version is meant to be used from API and UploadVersionFileNew
when a version either may exist or definitely exists.
TODO? create separate flags for these scenarios?
"""
def __init__(self, manifest, extension_to_be_updated, allow_existing_version=False):
# If the extension wasn't created yet, any version is valid # If the extension wasn't created yet, any version is valid
if not extension_to_be_updated: if not extension_to_be_updated:
@ -190,8 +195,9 @@ class ExtensionVersionManifestValidator:
) )
# check for platforms # check for platforms
# TODO test coverage
available_platforms = version.get_available_platforms()
if platforms := manifest.get('platforms', None): if platforms := manifest.get('platforms', None):
available_platforms = version.get_available_platforms()
if diff := set(platforms) - available_platforms: if diff := set(platforms) - available_platforms:
raise ValidationError( raise ValidationError(
{ {
@ -199,6 +205,27 @@ class ExtensionVersionManifestValidator:
}, },
code='invalid', code='invalid',
) )
else:
if available_platforms:
raise ValidationError(
{
'source': [
f'File upload for {version} is allowed only for remaining platforms: '
f'{", ".join(available_platforms)}'
],
},
code='invalid',
)
else:
raise ValidationError(
{
'source': [
f'The version {escape(manifest_version)} was already uploaded for this '
f'extension ({extension_to_be_updated.name})'
],
},
code='invalid',
)
class ManifestFieldValidator: class ManifestFieldValidator: