Skip to content

Defer MITRE data loading in tag validators to first use#465

Merged
thomaspatzke merged 1 commit intomainfrom
copilot/fix-data-loading-timing
Apr 14, 2026
Merged

Defer MITRE data loading in tag validators to first use#465
thomaspatzke merged 1 commit intomainfrom
copilot/fix-data-loading-timing

Conversation

Copy link
Copy Markdown
Contributor

Copilot AI commented Apr 14, 2026

ATTACKTagValidator and D3FENDTagValidator eagerly load MITRE data in __init__(), triggering network requests during plugin discovery — before set_url() can redirect to a local source. This causes timeouts in offline environments when using sigma-cli with --url.

Changes

  • sigma/validators/core/tags.py: Replace eager data loading in __init__() with lazy initialization via a None sentinel. Data is now fetched on first validate_tag() call through a _load_allowed_tags() method.
# Before: loads data at instantiation
class ATTACKTagValidator(SigmaTagValidator):
    def __init__(self) -> None:
        self.allowed_tags = {tactic.lower() for tactic in mitre_attack.mitre_attack_tactics.values()} ...

# After: defers loading to first validation call
class ATTACKTagValidator(SigmaTagValidator):
    def __init__(self) -> None:
        self.allowed_tags: set[str] | None = None

    def validate_tag(self, tag: SigmaRuleTag) -> list[SigmaValidationIssue]:
        if self.allowed_tags is None:
            self.allowed_tags = self._load_allowed_tags()
        ...

The sigma.data modules themselves already use lazy loading via __getattr__ — the problem was solely in the consumer side.

ATTACKTagValidator and D3FENDTagValidator previously loaded MITRE data
eagerly in __init__(), triggering network requests during plugin discovery
before set_url() could be called. Now data loading is deferred to the first
validate_tag() call using a None sentinel pattern.

Agent-Logs-Url: https://github.com/SigmaHQ/pySigma/sessions/cf64b814-14a4-4562-a117-8c43a2c14914

Co-authored-by: thomaspatzke <1845601+thomaspatzke@users.noreply.github.com>
@thomaspatzke thomaspatzke marked this pull request as ready for review April 14, 2026 13:27
@thomaspatzke thomaspatzke merged commit 9934507 into main Apr 14, 2026
20 checks passed
@thomaspatzke thomaspatzke deleted the copilot/fix-data-loading-timing branch April 14, 2026 13:30
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants