Skip to content

Commit

Permalink
Merge branch 'fix/compote_upload_without_idf' into 'main'
Browse files Browse the repository at this point in the history
fix: filterwarning "Running in an environment without IDF" while uploading

Closes PACMAN-964

See merge request espressif/idf-component-manager!429
  • Loading branch information
kumekay committed Aug 14, 2024
2 parents 4bbdacd + 8f32948 commit e65fa0a
Show file tree
Hide file tree
Showing 4 changed files with 36 additions and 24 deletions.
5 changes: 3 additions & 2 deletions idf_component_manager/core.py
Original file line number Diff line number Diff line change
Expand Up @@ -48,6 +48,7 @@
)
from idf_component_tools.manager import (
ManifestManager,
UploadMode,
)
from idf_component_tools.manifest import (
WEB_DEPENDENCY_REGEX,
Expand Down Expand Up @@ -404,7 +405,7 @@ def pack_component(
manifest_manager = ManifestManager(
self.path,
name,
upload_mode=True,
upload_mode=UploadMode.component,
version=version,
repository=repository,
commit_sha=commit_sha,
Expand Down Expand Up @@ -561,7 +562,7 @@ def upload_component(
manifest = ManifestManager(
tempdir,
name,
upload_mode=True,
upload_mode=UploadMode.component,
repository=repository,
commit_sha=commit_sha,
repository_path=repository_path,
Expand Down
10 changes: 8 additions & 2 deletions idf_component_tools/manager.py
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
# SPDX-FileCopyrightText: 2022-2024 Espressif Systems (Shanghai) CO LTD
# SPDX-License-Identifier: Apache-2.0

import enum
import os
import typing as t
from pathlib import Path
Expand All @@ -14,6 +14,12 @@
from .manifest.models import Manifest


class UploadMode(str, enum.Enum):
false = 'false'
component = 'component'
example = 'example'


class ManifestManager:
"""
Parser for manifest files in the project.
Expand All @@ -24,7 +30,7 @@ def __init__(
path: str,
name: str,
*,
upload_mode: bool = False,
upload_mode: UploadMode = UploadMode.false,
# override fields
version: t.Optional[str] = None,
repository: t.Optional[str] = None,
Expand Down
31 changes: 18 additions & 13 deletions idf_component_tools/manifest/models.py
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
# SPDX-FileCopyrightText: 2024 Espressif Systems (Shanghai) CO LTD
# SPDX-License-Identifier: Apache-2.0
import typing as t
import warnings
from copy import deepcopy

from pydantic import (
Expand Down Expand Up @@ -50,13 +51,11 @@
validation_error_to_str,
)

from ..manager import UploadMode
from ..semver import Version
from .constants import COMPILED_FULL_SLUG_REGEX, known_targets
from .if_parser import IfClause, parse_if_clause

if t.TYPE_CHECKING:
pass


class OptionalDependency(BaseModel):
# use alias since `if` is a keyword
Expand Down Expand Up @@ -345,15 +344,15 @@ class Manifest(BaseModel):
discussion: UrlField = None # type: ignore
repository_info: RepositoryInfoField = None # type: ignore

_upload_mode: bool = False
_upload_mode: UploadMode = UploadMode.false

def __init__(
self,
**kwargs,
):
super().__init__(**kwargs)

self._upload_mode = kwargs.pop('upload_mode', False)
self._upload_mode = kwargs.pop('upload_mode', UploadMode.false)

self.validate_post_init()

Expand Down Expand Up @@ -382,7 +381,7 @@ def validate_post_init(self) -> None:
if not self.repository and self.repository_info:
raise ValueError('Invalid field "repository". Must set when "repository_info" is set')

if self._upload_mode:
if self._upload_mode != UploadMode.false:
self._validate_while_uploading()

def model_dump(
Expand Down Expand Up @@ -472,7 +471,7 @@ def validate_manifest(
cls,
obj: t.Any,
*,
upload_mode: bool = False,
upload_mode: UploadMode = UploadMode.false,
return_with_object: bool = False,
# pydantic options
strict: t.Optional[bool] = None,
Expand All @@ -487,12 +486,18 @@ def validate_manifest(

obj['upload_mode'] = upload_mode
try:
res = super().model_validate(
obj,
strict=strict,
from_attributes=from_attributes,
context=context,
)
with warnings.catch_warnings():
if upload_mode != UploadMode.false:
warnings.filterwarnings(
'ignore', message='^Running in an environment without IDF.'
)

res = super().model_validate(
obj,
strict=strict,
from_attributes=from_attributes,
context=context,
)
except ValidationError as e:
errors = e.errors(include_url=False)

Expand Down
14 changes: 7 additions & 7 deletions tests/manifest/test_validator.py
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@
import pytest

from idf_component_manager.dependencies import detect_unused_components
from idf_component_tools.manager import ManifestManager
from idf_component_tools.manager import ManifestManager, UploadMode
from idf_component_tools.manifest import SLUG_REGEX, OptionalRequirement, SolvedComponent
from idf_component_tools.manifest.constants import DEFAULT_KNOWN_TARGETS, known_targets
from idf_component_tools.manifest.if_parser import parse_if_clause
Expand Down Expand Up @@ -110,7 +110,7 @@ def test_validate_targets_unknown(self, valid_manifest):

assert not errors

errors = Manifest.validate_manifest(valid_manifest, upload_mode=True)
errors = Manifest.validate_manifest(valid_manifest, upload_mode=UploadMode.component)

assert errors == ['Invalid field "targets". Unknown targets: "asdf,esp123"']

Expand Down Expand Up @@ -153,12 +153,12 @@ def test_validate_version_list(self, valid_manifest):
assert not errors

def test_check_required_keys(self, valid_manifest):
errors = Manifest.validate_manifest(valid_manifest, upload_mode=True)
errors = Manifest.validate_manifest(valid_manifest, upload_mode=UploadMode.component)

assert not errors

def test_check_required_keys_empty_manifest(self):
errors = Manifest.validate_manifest({}, upload_mode=True)
errors = Manifest.validate_manifest({}, upload_mode=UploadMode.component)

assert errors == [
'Invalid field "version". Must set while uploading component to the registry'
Expand Down Expand Up @@ -443,7 +443,7 @@ def test_validate_optional_dependency_success(
self, valid_optional_dependency_manifest_with_idf
):
errors = Manifest.validate_manifest(
valid_optional_dependency_manifest_with_idf, upload_mode=True
valid_optional_dependency_manifest_with_idf, upload_mode=UploadMode.component
)

assert not errors
Expand All @@ -470,7 +470,7 @@ def test_validate_optional_dependency_invalid(
'if'
] = invalid_str
errors = Manifest.validate_manifest(
valid_optional_dependency_manifest_with_idf, upload_mode=True
valid_optional_dependency_manifest_with_idf, upload_mode=UploadMode.component
)

assert errors == expected_errors
Expand Down Expand Up @@ -500,7 +500,7 @@ def test_validate_optional_dependency_invalid_derived(
'if'
] = invalid_str
errors = Manifest.validate_manifest(
valid_optional_dependency_manifest_with_idf, upload_mode=True
valid_optional_dependency_manifest_with_idf, upload_mode=UploadMode.component
)

assert errors == expected_errors
Expand Down

0 comments on commit e65fa0a

Please sign in to comment.