from typing import Dict, Optional from pydantic.dataclasses import dataclass from typing_extensions import Self from ..report.schemas.v3_0 import main as v3_0 from .base import SafetyBaseModel @dataclass class TelemetryModel(SafetyBaseModel): """ Telemetry object generated per Safety report; this model holds data related to the client application running Safety CLI. """ safety_options: Dict[str, Dict[str, int]] safety_version: str safety_source: str os_type: Optional[str] = None os_release: Optional[str] = None os_description: Optional[str] = None python_version: Optional[str] = None safety_command: Optional[str] = None def as_v30(self) -> v3_0.Telemetry: return v3_0.Telemetry( os_type=self.os_type, os_release=self.os_release, os_description=self.os_description, python_version=self.python_version, safety_command=self.safety_command, safety_options=self.safety_options, safety_version=self.safety_version, safety_source=self.safety_source, ) @classmethod def from_v30(cls, obj: v3_0.SchemaModelV30) -> 'TelemetryModel': if not isinstance(obj, v3_0.Telemetry): raise TypeError('Expected instance of v3_0.Telemetry') return TelemetryModel( os_type=obj.os_type, os_release=obj.os_release, os_description=obj.os_description, python_version=obj.python_version, safety_command=obj.safety_command, safety_options=obj.safety_options, safety_version=obj.safety_version, safety_source=obj.safety_source, )