Source code for mgnipy.emgapi_v2_client.models.m_gnify_analysis

from __future__ import annotations

from collections.abc import Mapping
from typing import (
    TYPE_CHECKING,
    Any,
    TypeVar,
    cast,
)

from attrs import define as _attrs_define
from attrs import field as _attrs_field

from ..models.pipeline_versions import PipelineVersions

if TYPE_CHECKING:
    from ..models.analysed_run import AnalysedRun
    from ..models.assembly import Assembly
    from ..models.m_gnify_sample import MGnifySample


T = TypeVar("T", bound="MGnifyAnalysis")


[docs] @_attrs_define class MGnifyAnalysis: """ Attributes: experiment_type (str): Experiment type refers to the type of sequencing data that was analysed, e.g. amplicon reads or a metagenome assembly study_accession (str): accession (str): run (AnalysedRun | None): sample (MGnifySample | None): assembly (Assembly | None): pipeline_version (None | PipelineVersions): """ experiment_type: str study_accession: str accession: str run: AnalysedRun | None sample: MGnifySample | None assembly: Assembly | None pipeline_version: None | PipelineVersions additional_properties: dict[str, Any] = _attrs_field(init=False, factory=dict)
[docs] def to_dict(self) -> dict[str, Any]: from ..models.analysed_run import AnalysedRun from ..models.assembly import Assembly from ..models.m_gnify_sample import MGnifySample experiment_type = self.experiment_type study_accession = self.study_accession accession = self.accession run: dict[str, Any] | None if isinstance(self.run, AnalysedRun): run = self.run.to_dict() else: run = self.run sample: dict[str, Any] | None if isinstance(self.sample, MGnifySample): sample = self.sample.to_dict() else: sample = self.sample assembly: dict[str, Any] | None if isinstance(self.assembly, Assembly): assembly = self.assembly.to_dict() else: assembly = self.assembly pipeline_version: None | str if isinstance(self.pipeline_version, PipelineVersions): pipeline_version = self.pipeline_version.value else: pipeline_version = self.pipeline_version field_dict: dict[str, Any] = {} field_dict.update(self.additional_properties) field_dict.update( { "experiment_type": experiment_type, "study_accession": study_accession, "accession": accession, "run": run, "sample": sample, "assembly": assembly, "pipeline_version": pipeline_version, } ) return field_dict
[docs] @classmethod def from_dict(cls: type[T], src_dict: Mapping[str, Any]) -> T: from ..models.analysed_run import AnalysedRun from ..models.assembly import Assembly from ..models.m_gnify_sample import MGnifySample d = dict(src_dict) experiment_type = d.pop("experiment_type") study_accession = d.pop("study_accession") accession = d.pop("accession") def _parse_run(data: object) -> AnalysedRun | None: if data is None: return data try: if not isinstance(data, dict): raise TypeError() run_type_0 = AnalysedRun.from_dict(data) return run_type_0 except (TypeError, ValueError, AttributeError, KeyError): pass return cast(AnalysedRun | None, data) run = _parse_run(d.pop("run")) def _parse_sample(data: object) -> MGnifySample | None: if data is None: return data try: if not isinstance(data, dict): raise TypeError() sample_type_0 = MGnifySample.from_dict(data) return sample_type_0 except (TypeError, ValueError, AttributeError, KeyError): pass return cast(MGnifySample | None, data) sample = _parse_sample(d.pop("sample")) def _parse_assembly(data: object) -> Assembly | None: if data is None: return data try: if not isinstance(data, dict): raise TypeError() assembly_type_0 = Assembly.from_dict(data) return assembly_type_0 except (TypeError, ValueError, AttributeError, KeyError): pass return cast(Assembly | None, data) assembly = _parse_assembly(d.pop("assembly")) def _parse_pipeline_version(data: object) -> None | PipelineVersions: if data is None: return data try: if not isinstance(data, str): raise TypeError() pipeline_version_type_0 = PipelineVersions(data) return pipeline_version_type_0 except (TypeError, ValueError, AttributeError, KeyError): pass return cast(None | PipelineVersions, data) pipeline_version = _parse_pipeline_version(d.pop("pipeline_version")) m_gnify_analysis = cls( experiment_type=experiment_type, study_accession=study_accession, accession=accession, run=run, sample=sample, assembly=assembly, pipeline_version=pipeline_version, ) m_gnify_analysis.additional_properties = d return m_gnify_analysis
@property def additional_keys(self) -> list[str]: return list(self.additional_properties.keys()) def __getitem__(self, key: str) -> Any: return self.additional_properties[key] def __setitem__(self, key: str, value: Any) -> None: self.additional_properties[key] = value def __delitem__(self, key: str) -> None: del self.additional_properties[key] def __contains__(self, key: str) -> bool: return key in self.additional_properties