| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667 |
- import sys
- import traceback
- from pathlib import Path
- from dataclasses import asdict
- from job_search.read_write import ReadWriter
- from job_search.job_storage import JobStorage
- from job_search.messages import (
- VisitedLinkedInJobPageMessage,
- AddJobMessage,
- InitialConfigurationMessage,
- StorageReadyMessage,
- ListJobsRequestMessage,
- JobOfferListMessage,
- LogMessage,
- Message,
- JobAddedMessage,
- JobAlreadyExistsMessage,
- )
- class Application:
- def __init__(self, stdin, stdout):
- self.read_writer = ReadWriter(stdin, stdout)
- self.job_storage = None
- def handle_message(self, message: Message):
- match message:
- case VisitedLinkedInJobPageMessage():
- offer = message.extract_job_offer()
- try:
- self.job_storage.add_job(offer)
- self.read_writer.send_message(JobAddedMessage(offer))
- except FileExistsError as e:
- self.read_writer.send_message(JobAlreadyExistsMessage(offer.id))
- case AddJobMessage():
- try:
- self.job_storage.insert_record("job_offer", asdict(message))
- except FileExistsError as e:
- self.read_writer.send_message(JobAlreadyExistsMessage(message.id))
- case ListJobsRequestMessage():
- offers = list(self.job_storage.read_all().values())
- self.read_writer.send_message(JobOfferListMessage(offers))
- case InitialConfigurationMessage(jobs_path):
- self.job_storage = JobStorage(base_dir=Path(jobs_path))
- self.read_writer.send_message(StorageReadyMessage())
- def loop(self):
- while True:
- try:
- received_message = self.read_writer.get_message()
- self.handle_message(received_message)
- self.read_writer.send_message(LogMessage.info(content=str(received_message)))
- except Exception as e:
- exc_info = sys.exc_info()
- tb = "".join(traceback.format_exception(*exc_info))
- self.read_writer.send_message(LogMessage.error(content=tb))
- if __name__ == "__main__":
- app = Application(sys.stdin, sys.stdout)
- app.loop()
|