Skip to content
Merged
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
14 changes: 8 additions & 6 deletions src/codemodder/codetf/v2/codetf.py
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,7 @@
from enum import Enum
from typing import TYPE_CHECKING, Optional

from pydantic import BaseModel, model_validator
from pydantic import BaseModel, ConfigDict, model_validator

from codemodder import __version__

Expand All @@ -21,9 +21,6 @@
from ..common import Change as CommonChange
from ..common import (
CodeTFWriter,
)
from ..common import Finding as CommonFinding
from ..common import (
Rule,
)

Expand Down Expand Up @@ -153,7 +150,12 @@ def validate_description(self):
return self


class Finding(CommonFinding):
class Finding(BaseModel):
id: Optional[str] = None
rule: Rule

model_config = ConfigDict(frozen=True)

def to_unfixed_finding(
self,
*,
Expand All @@ -172,7 +174,7 @@ def to_unfixed_finding(
def with_rule(self, name: str, url: Optional[str]) -> Finding:
return Finding(
id=self.id,
rule=Rule(id=self.rule.id, name=name, url=url) if self.rule else None,
rule=Rule(id=self.rule.id, name=name, url=url),
)


Expand Down
21 changes: 20 additions & 1 deletion tests/test_codetf.py
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,17 @@
import requests
from pydantic import ValidationError

from codemodder.codetf import Change, ChangeSet, CodeTF, DiffSide, Reference, Result
from codemodder.codetf import (
Change,
ChangeSet,
CodeTF,
DiffSide,
Finding,
Reference,
Result,
Rule,
)
from codemodder.codetf.v3.codetf import Finding as FindingV3


@pytest.fixture(autouse=True)
Expand Down Expand Up @@ -167,3 +177,12 @@ def test_still_invalidates_bad_value(bad_value):

with pytest.raises(ValidationError):
Change.model_validate(json)


def test_v2_finding_id_optional():
Finding(id=None, rule=Rule(id="foo", name="whatever"))


def test_v3_finding_id_not_optional():
with pytest.raises(ValidationError):
FindingV3(id=None, rule=Rule(id="foo", name="whatever")) # type: ignore[arg-type]
Loading