mainframe.models.orm ==================== .. py:module:: mainframe.models.orm Attributes ---------- .. autoapisummary:: mainframe.models.orm.package_rules Classes ------- .. autoapisummary:: mainframe.models.orm.Base mainframe.models.orm.Status mainframe.models.orm.IngestionRetry mainframe.models.orm.Scan mainframe.models.orm.OpenGrepScan mainframe.models.orm.DownloadURL mainframe.models.orm.Rule mainframe.models.orm.AlertingConfiguration mainframe.models.orm.Suppression mainframe.models.orm.ScanCacheNamespace mainframe.models.orm.ScanCacheEntry Module Contents --------------- .. py:class:: Base Bases: :py:obj:`sqlalchemy.orm.MappedAsDataclass`, :py:obj:`sqlalchemy.orm.DeclarativeBase` Mixin class to indicate when mapping this class, also convert it to be a dataclass. .. seealso:: :ref:`orm_declarative_native_dataclasses` - complete background on SQLAlchemy native dataclass mapping .. versionadded:: 2.0 .. py:class:: Status(*args, **kwds) Bases: :py:obj:`enum.Enum` Package status. QUEUED - Waiting to be sent to a worker PENDING - Waiting for a response from a worker FINISHED - Verdict received from worker FAILED - Something went wrong with the client when scanning this package .. py:attribute:: QUEUED :value: 'queued' .. py:attribute:: PENDING :value: 'pending' .. py:attribute:: FINISHED :value: 'finished' .. py:attribute:: FAILED :value: 'failed' .. py:data:: package_rules .. py:class:: IngestionRetry Bases: :py:obj:`Base` Packages accepted for ingestion whose upstream metadata is unavailable. .. py:attribute:: __tablename__ :type: str :value: 'ingestion_retries' .. py:attribute:: name :type: sqlalchemy.orm.Mapped[str] .. py:attribute:: version :type: sqlalchemy.orm.Mapped[str] .. py:attribute:: queued_by :type: sqlalchemy.orm.Mapped[str] .. py:attribute:: retry_at :type: sqlalchemy.orm.Mapped[datetime.datetime] .. py:attribute:: attempts :type: sqlalchemy.orm.Mapped[int] .. py:class:: Scan Bases: :py:obj:`Base` The scans. .. py:attribute:: __tablename__ :type: str :value: 'scans' .. py:attribute:: __table_args__ .. py:attribute:: scan_id :type: sqlalchemy.orm.Mapped[uuid.UUID] .. py:attribute:: name :type: sqlalchemy.orm.Mapped[str] .. py:attribute:: version :type: sqlalchemy.orm.Mapped[str] .. py:attribute:: status :type: sqlalchemy.orm.Mapped[Status] .. py:attribute:: score :type: sqlalchemy.orm.Mapped[int | None] .. py:attribute:: inspector_url :type: sqlalchemy.orm.Mapped[str | None] .. py:attribute:: rules :type: sqlalchemy.orm.Mapped[list[Rule]] .. py:attribute:: download_urls :type: sqlalchemy.orm.Mapped[list[DownloadURL]] .. py:attribute:: queued_at :type: sqlalchemy.orm.Mapped[datetime.datetime | None] .. py:attribute:: queued_by :type: sqlalchemy.orm.Mapped[str] .. py:attribute:: pending_at :type: sqlalchemy.orm.Mapped[datetime.datetime | None] .. py:attribute:: pending_by :type: sqlalchemy.orm.Mapped[str | None] .. py:attribute:: attempt_count :type: sqlalchemy.orm.Mapped[int] .. py:attribute:: assignment_id :type: sqlalchemy.orm.Mapped[uuid.UUID | None] .. py:attribute:: dead_lettered_at :type: sqlalchemy.orm.Mapped[datetime.datetime | None] .. py:attribute:: finished_at :type: sqlalchemy.orm.Mapped[datetime.datetime | None] .. py:attribute:: finished_by :type: sqlalchemy.orm.Mapped[str | None] .. py:attribute:: reported_at :type: sqlalchemy.orm.Mapped[datetime.datetime | None] .. py:attribute:: reported_by :type: sqlalchemy.orm.Mapped[str | None] .. py:attribute:: report_summary :type: sqlalchemy.orm.Mapped[str | None] .. py:attribute:: fail_reason :type: sqlalchemy.orm.Mapped[str | None] .. py:attribute:: commit_hash :type: sqlalchemy.orm.Mapped[str | None] .. py:class:: OpenGrepScan Bases: :py:obj:`Base` An isolated OpenGrep shadow scan for one canonical package scan. .. py:attribute:: __tablename__ :type: str :value: 'opengrep_scans' .. py:attribute:: __table_args__ .. py:attribute:: scan_id :type: sqlalchemy.orm.Mapped[uuid.UUID] .. py:attribute:: status :type: sqlalchemy.orm.Mapped[Status] .. py:attribute:: alerted_at :type: sqlalchemy.orm.Mapped[datetime.datetime | None] .. py:attribute:: queued_at :type: sqlalchemy.orm.Mapped[datetime.datetime] .. py:attribute:: queued_by :type: sqlalchemy.orm.Mapped[str] .. py:attribute:: pending_at :type: sqlalchemy.orm.Mapped[datetime.datetime | None] .. py:attribute:: pending_by :type: sqlalchemy.orm.Mapped[str | None] .. py:attribute:: attempt_count :type: sqlalchemy.orm.Mapped[int] .. py:attribute:: assignment_id :type: sqlalchemy.orm.Mapped[uuid.UUID | None] .. py:attribute:: dead_lettered_at :type: sqlalchemy.orm.Mapped[datetime.datetime | None] .. py:attribute:: finished_at :type: sqlalchemy.orm.Mapped[datetime.datetime | None] .. py:attribute:: finished_by :type: sqlalchemy.orm.Mapped[str | None] .. py:attribute:: fail_reason :type: sqlalchemy.orm.Mapped[str | None] .. py:attribute:: commit_hash :type: sqlalchemy.orm.Mapped[str | None] .. py:attribute:: duration_ms :type: sqlalchemy.orm.Mapped[int | None] .. py:attribute:: findings :type: sqlalchemy.orm.Mapped[list[dict[str, Any]]] .. py:attribute:: publication_id :type: sqlalchemy.orm.Mapped[uuid.UUID | None] .. py:attribute:: publication_claimed_at :type: sqlalchemy.orm.Mapped[datetime.datetime | None] .. py:attribute:: discord_alert_message_id :type: sqlalchemy.orm.Mapped[int | None] .. py:attribute:: discord_message_id :type: sqlalchemy.orm.Mapped[int | None] .. py:attribute:: discord_thread_id :type: sqlalchemy.orm.Mapped[int | None] .. py:attribute:: published_chunks :type: sqlalchemy.orm.Mapped[int] .. py:attribute:: published_at :type: sqlalchemy.orm.Mapped[datetime.datetime | None] .. py:class:: DownloadURL Bases: :py:obj:`Base` Download URLs. .. py:attribute:: __tablename__ :type: str :value: 'download_urls' .. py:attribute:: id :type: sqlalchemy.orm.Mapped[uuid.UUID] .. py:attribute:: scan_id :type: sqlalchemy.orm.Mapped[str] .. py:attribute:: url :type: sqlalchemy.orm.Mapped[str] .. py:class:: Rule Bases: :py:obj:`Base` YARA rules. .. py:attribute:: __tablename__ :type: str :value: 'rules' .. py:attribute:: id :type: sqlalchemy.orm.Mapped[uuid.UUID] .. py:attribute:: name :type: sqlalchemy.orm.Mapped[str] .. py:class:: AlertingConfiguration Bases: :py:obj:`Base` Durable alerting configuration shared by Mainframe clients. .. py:attribute:: __tablename__ :type: str :value: 'alerting_configuration' .. py:attribute:: __table_args__ .. py:attribute:: id :type: sqlalchemy.orm.Mapped[int] .. py:attribute:: production_score_threshold :type: sqlalchemy.orm.Mapped[int] .. py:attribute:: updated_at :type: sqlalchemy.orm.Mapped[datetime.datetime] .. py:attribute:: updated_by :type: sqlalchemy.orm.Mapped[str] .. py:class:: Suppression Bases: :py:obj:`Base` A durable package-version alert suppression. .. py:attribute:: __tablename__ :type: str :value: 'suppressions' .. py:attribute:: __table_args__ .. py:attribute:: suppression_id :type: sqlalchemy.orm.Mapped[uuid.UUID] .. py:attribute:: package_name :type: sqlalchemy.orm.Mapped[str] .. py:attribute:: package_version :type: sqlalchemy.orm.Mapped[str] .. py:attribute:: created_by :type: sqlalchemy.orm.Mapped[str] .. py:attribute:: updated_by :type: sqlalchemy.orm.Mapped[str] .. py:attribute:: rules :type: sqlalchemy.orm.Mapped[list[str] | None] .. py:attribute:: created_at :type: sqlalchemy.orm.Mapped[datetime.datetime] .. py:attribute:: updated_at :type: sqlalchemy.orm.Mapped[datetime.datetime] .. py:class:: ScanCacheNamespace Bases: :py:obj:`Base` A revocable rules/engine generation; counters change only with batch writes. .. py:attribute:: __tablename__ :value: 'scan_cache_namespaces' .. py:attribute:: __table_args__ .. py:attribute:: namespace :type: sqlalchemy.orm.Mapped[bytes] .. py:attribute:: scanner :type: sqlalchemy.orm.Mapped[str] .. py:attribute:: rules_commit :type: sqlalchemy.orm.Mapped[str] .. py:attribute:: rules_digest :type: sqlalchemy.orm.Mapped[bytes] .. py:attribute:: engine_digest :type: sqlalchemy.orm.Mapped[bytes] .. py:attribute:: revoked :type: sqlalchemy.orm.Mapped[bool] .. py:attribute:: entry_count :type: sqlalchemy.orm.Mapped[int] .. py:attribute:: payload_bytes :type: sqlalchemy.orm.Mapped[int] .. py:class:: ScanCacheEntry Bases: :py:obj:`Base` Immutable completed file results with bounded expiry renewal on hits. .. py:attribute:: __tablename__ :value: 'scan_cache_entries' .. py:attribute:: __table_args__ .. py:attribute:: namespace :type: sqlalchemy.orm.Mapped[bytes] .. py:attribute:: file_digest :type: sqlalchemy.orm.Mapped[bytes] .. py:attribute:: language :type: sqlalchemy.orm.Mapped[str] .. py:attribute:: result :type: sqlalchemy.orm.Mapped[str] .. py:attribute:: expires_at :type: sqlalchemy.orm.Mapped[datetime.datetime] .. py:attribute:: quarantined :type: sqlalchemy.orm.Mapped[bool]