mirror of https://github.com/Bunsly/JobSpy
add strategy that each job title will send message with the details
parent
3c2fed876b
commit
6ff635890a
|
@ -37,7 +37,7 @@ class JobRepository:
|
||||||
The job document if found, otherwise None.
|
The job document if found, otherwise None.
|
||||||
"""
|
"""
|
||||||
result = self.collection.find_one({"id": job_id})
|
result = self.collection.find_one({"id": job_id})
|
||||||
return result
|
return JobPost(**result)
|
||||||
|
|
||||||
def update(self, job_data: dict) -> bool:
|
def update(self, job_data: dict) -> bool:
|
||||||
"""
|
"""
|
||||||
|
|
|
@ -268,7 +268,7 @@ class JobPost(BaseModel):
|
||||||
company_name: str | None
|
company_name: str | None
|
||||||
job_url: str
|
job_url: str
|
||||||
job_url_direct: str | None = None
|
job_url_direct: str | None = None
|
||||||
location: Optional[Location]
|
location: Optional[Location] = None
|
||||||
|
|
||||||
description: str | None = None
|
description: str | None = None
|
||||||
company_url: str | None = None
|
company_url: str | None = None
|
||||||
|
@ -276,7 +276,7 @@ class JobPost(BaseModel):
|
||||||
|
|
||||||
job_type: list[JobType] | None = None
|
job_type: list[JobType] | None = None
|
||||||
compensation: Compensation | None = None
|
compensation: Compensation | None = None
|
||||||
date_posted: date | None
|
date_posted: Optional[date] = None
|
||||||
datetime_posted: datetime | None = None
|
datetime_posted: datetime | None = None
|
||||||
emails: list[str] | None = None
|
emails: list[str] | None = None
|
||||||
is_remote: bool | None = None
|
is_remote: bool | None = None
|
||||||
|
@ -304,8 +304,6 @@ class JobPost(BaseModel):
|
||||||
def model_dump(self, exclude: set = None):
|
def model_dump(self, exclude: set = None):
|
||||||
data = super().model_dump(exclude=exclude)
|
data = super().model_dump(exclude=exclude)
|
||||||
# Use `Location`'s custom serialization logic
|
# Use `Location`'s custom serialization logic
|
||||||
if self.location:
|
|
||||||
data['location'] = self.location.display_location()
|
|
||||||
|
|
||||||
# Serialize `job_type` as a list of strings
|
# Serialize `job_type` as a list of strings
|
||||||
if self.job_type:
|
if self.job_type:
|
||||||
|
|
|
@ -1,4 +1,5 @@
|
||||||
import os
|
import os
|
||||||
|
|
||||||
from dotenv import load_dotenv
|
from dotenv import load_dotenv
|
||||||
from telegram import Bot, InlineKeyboardButton, InlineKeyboardMarkup
|
from telegram import Bot, InlineKeyboardButton, InlineKeyboardMarkup
|
||||||
from telegram.constants import ReactionEmoji
|
from telegram.constants import ReactionEmoji
|
||||||
|
|
|
@ -3,9 +3,10 @@ from __future__ import annotations
|
||||||
from telegram import MaybeInaccessibleMessage
|
from telegram import MaybeInaccessibleMessage
|
||||||
from telegram.constants import ReactionEmoji
|
from telegram.constants import ReactionEmoji
|
||||||
|
|
||||||
|
from db.job_repository import JobRepository
|
||||||
from jobspy import create_logger
|
from jobspy import create_logger
|
||||||
from telegram_bot import TelegramBot
|
|
||||||
from telegram_handler.button_callback.button_fire_strategy import FireStrategy
|
from telegram_handler.button_callback.button_fire_strategy import FireStrategy
|
||||||
|
from telegram_handler.button_callback.button_job_title_strategy import JobTitleStrategy
|
||||||
from telegram_handler.button_callback.button_poo_strategy import PooStrategy
|
from telegram_handler.button_callback.button_poo_strategy import PooStrategy
|
||||||
from telegram_handler.button_callback.button_strategy import ButtonStrategy
|
from telegram_handler.button_callback.button_strategy import ButtonStrategy
|
||||||
|
|
||||||
|
@ -19,8 +20,9 @@ class ButtonCallBackContext:
|
||||||
self._logger = create_logger("Button CallBack Context")
|
self._logger = create_logger("Button CallBack Context")
|
||||||
self._message = message
|
self._message = message
|
||||||
self._data = data
|
self._data = data
|
||||||
self._telegram_bot = TelegramBot()
|
|
||||||
self._job_id = job_id
|
self._job_id = job_id
|
||||||
|
self._strategy = None
|
||||||
|
self._job_repository = JobRepository()
|
||||||
|
|
||||||
@property
|
@property
|
||||||
def strategy(self) -> ButtonStrategy:
|
def strategy(self) -> ButtonStrategy:
|
||||||
|
@ -43,9 +45,13 @@ class ButtonCallBackContext:
|
||||||
async def run(self) -> None:
|
async def run(self) -> None:
|
||||||
self._logger.info("Starting")
|
self._logger.info("Starting")
|
||||||
if ReactionEmoji.FIRE.name == self._data:
|
if ReactionEmoji.FIRE.name == self._data:
|
||||||
self.strategy = FireStrategy(self._message,self._job_id)
|
self._strategy = FireStrategy(self._message, self._job_id)
|
||||||
elif ReactionEmoji.PILE_OF_POO.name == self._data:
|
elif ReactionEmoji.PILE_OF_POO.name == self._data:
|
||||||
self.strategy = PooStrategy(self._message)
|
self._strategy = PooStrategy(self._message)
|
||||||
|
elif self._data:
|
||||||
|
job = self._job_repository.find_by_id(self._data)
|
||||||
|
if job:
|
||||||
|
self._strategy = JobTitleStrategy(job)
|
||||||
else:
|
else:
|
||||||
self._logger.error("Invalid enum value")
|
self._logger.error("Invalid enum value")
|
||||||
return
|
return
|
||||||
|
|
|
@ -0,0 +1,16 @@
|
||||||
|
from jobspy import JobPost
|
||||||
|
from telegram_bot import TelegramBot
|
||||||
|
from telegram_handler.button_callback.button_strategy import ButtonStrategy
|
||||||
|
|
||||||
|
|
||||||
|
class JobTitleStrategy(ButtonStrategy):
|
||||||
|
def __init__(self, job: JobPost) -> None:
|
||||||
|
"""
|
||||||
|
Usually, the Context accepts a strategy through the constructor, but
|
||||||
|
also provides a setter to change it at runtime.
|
||||||
|
"""
|
||||||
|
self._job = job
|
||||||
|
self.telegram_bot = TelegramBot()
|
||||||
|
|
||||||
|
async def execute(self):
|
||||||
|
await self.telegram_bot.send_job(self._job)
|
Loading…
Reference in New Issue