From 872edc136d3d46fc0a2da3d31acde1ac3a58a58f Mon Sep 17 00:00:00 2001 From: 7000pctAUTO Date: Mon, 2 Feb 2026 21:32:27 +0000 Subject: [PATCH] Add CI/CD and parser modules --- depaudit/parsers/__init__.py | 67 ++++++++++++++++++++++++++++++++++++ 1 file changed, 67 insertions(+) create mode 100644 depaudit/parsers/__init__.py diff --git a/depaudit/parsers/__init__.py b/depaudit/parsers/__init__.py new file mode 100644 index 0000000..07dd64e --- /dev/null +++ b/depaudit/parsers/__init__.py @@ -0,0 +1,67 @@ +from __future__ import annotations + +from abc import ABC, abstractmethod +from dataclasses import dataclass, field +from pathlib import Path +from typing import Any + + +@dataclass +class Dependency: + name: str + version: str + language: str + file_path: Path + extras: list[str] = field(default_factory=list) + markers: str = "" + optional: bool = False + dev: bool = False + indirect: bool = False + license: str | None = None + homepage: str | None = None + repository: str | None = None + + +@dataclass +class ParsedManifest: + language: str + file_path: Path + project_name: str | None = None + project_version: str | None = None + dependencies: list[Dependency] = field(default_factory=list) + raw_data: dict[str, Any] = field(default_factory=dict) + + +class Parser(ABC): + language: str = "unknown" + + @abstractmethod + def can_parse(self, file_path: Path) -> bool: + pass + + @abstractmethod + def parse(self, file_path: Path) -> ParsedManifest: + pass + + def _create_dependency( + self, + file_path: Path, + name: str, + version: str, + extras: list[str] | None = None, + markers: str = "", + optional: bool = False, + dev: bool = False, + indirect: bool = False, + ) -> Dependency: + return Dependency( + name=name, + version=version, + language=self.language, + file_path=file_path, + extras=extras or [], + markers=markers, + optional=optional, + dev=dev, + indirect=indirect, + )