Skip to content

parsedmarc.source.base 🔗

BaseConfig 🔗

Bases: BaseModel

Base Config for all sources.

New in 9.0.

Job 🔗

Container for a report and the source it came from.

This allows for callbacks / tracking the report as it is processed

ATTRIBUTE DESCRIPTION
source

Source that produced this job

TYPE: Source

report

TYPE: Report

identifier

identifier for this job, it should be unique for all jobs generated by the source.

TYPE: str

data

extra data specific to the source.

TYPE: dict[str, Any]

New in 9.0.

JobStatus 🔗

Bases: Enum

Job Status

New in 9.0.

Source 🔗

Source(
    name: str = "default",
    parser: ReportParser | None = None,
    config: dict[str, Any] | None = None,
)

Bases: LoggingMixin

Base class for all Sources. Sources generate reports to be consumed by other classes.

New in 9.0.

PARAMETER DESCRIPTION
name

profile name for this instance, ideally should be unqiue to easily idenfity this instance and any log messages it produces

TYPE: str DEFAULT: 'default'

parser

parser to use when generating reports

TYPE: ReportParser | None DEFAULT: None

config

config for this instance

TYPE: dict[str, Any] | None DEFAULT: None

outstanding_jobs property 🔗

outstanding_jobs: MappingProxyType[str, Job]

Read only view of outstanding jobs

state property 🔗

state: AppState

Read only Source state

ack_job 🔗

ack_job(job: Job, status: JobStatus) -> None

Acknowledge a completed job

Child classes should override this method to implement their own logic.

Child classes MUST still call super().ack_job(job, status).

PARAMETER DESCRIPTION
job

the job to acknowledge

TYPE: Job

status

indicates how the job was processed

TYPE: JobStatus

cleanup 🔗

cleanup() -> None

Perform cleanup on this source.

This method is called as a part of self.shutdown.

Child classes can override this method to implement their own logic. It is still recomended to call super().cleanup().

get_job 🔗

get_job() -> Job | None

Get the next job for this Source

Child classes MUST implement this method.

Child classes must call self.register_job(job) before returning.

If no Job is available, child classes should return None rather than blocking indefinintely.

RETURNS DESCRIPTION
Job | None

The job if one is available, else None.

register_job 🔗

register_job(job: Job) -> None

Register a job to this source so we can keep track of it

PARAMETER DESCRIPTION
job

the job to register

TYPE: Job

setup 🔗

setup() -> None

Perform setup actions to ensure this Source is ready to produce.

Child classes can override this method to implement their own logic.

Child classes should
  • check that self._state == AppState.SHUTDOWN
  • set self._state = AppState.SETTING_UP
  • do their setup actions
  • if an error occurs set self._state = AppState.SETUP_ERROR
  • otherwise set self._state = AppState.RUNNING

shutdown 🔗

shutdown(
    timeout: int | float = 120, force: bool = False
) -> None

Attempt to gracefully shutdown this source.

PARAMETER DESCRIPTION
timeout

Giveup after this many seonds (TODO)

TYPE: int | float DEFAULT: 120

force

If a timeout would occur, instead force shutdown.

TYPE: bool DEFAULT: False

validate_config 🔗

validate_config() -> None

Validate the config of this instance

Child classes can override this method to implement their own logic. It is still recomended to call super().validate_config().