Closed hexdecimal16 closed 4 months ago
I'll need a complete reproducing example.
from sqlalchemy.ext.asyncio import create_async_engine
from apscheduler.eventbrokers.asyncpg import AsyncpgEventBroker
from apscheduler import Scheduler
from apscheduler.datastores.sqlalchemy import SQLAlchemyDataStore
from apscheduler.triggers.interval import IntervalTrigger
from apscheduler.triggers.cron import CronTrigger
self.db_url = f"postgresql+asyncpg://{db_user}:{password}@{db_host}:{db_port}/{db_name}"
engine = create_async_engine(self.db_url)
data_store = SQLAlchemyDataStore(engine)
event_broker = AsyncpgEventBroker.from_async_sqla_engine(engine)
start_time = datetime.strptime("2021-01-01 00:00:00", "%Y-%m-%d %H:%M:%S")
with Scheduler(data_store, event_broker) as scheduler:
self.schedule_jobs(scheduler, start_time)
scheduler.run_until_stopped()
def schedule_jobs(self, scheduler: Scheduler, start_time: datetime) -> None:
scheduler.add_schedule(....)
scheduler.add_schedule(....)
Does that snippet run for you?
you need to actually add some tasks and db variables.
This is the full main.py file for project:
from src.utils.logger import Logger
from src.scripts.news_scrapper import NewsScrapper
from src.scripts.news_sentiment import NewsSentiment
from src.scripts.news_decay import NewsDecay
from src.scripts.stock_fundamental import StockFundamental
from src.scripts.news_sentiment_history import NewsSentimentHistory
from src.scripts.stock_technical import StockTechnical
from sqlalchemy.ext.asyncio import create_async_engine
from apscheduler.eventbrokers.asyncpg import AsyncpgEventBroker
from apscheduler import Scheduler
from apscheduler.datastores.sqlalchemy import SQLAlchemyDataStore
from apscheduler.triggers.interval import IntervalTrigger
from apscheduler.triggers.cron import CronTrigger
import os
from dotenv import load_dotenv
from datetime import datetime
def run_news_scrapper():
ns = NewsScrapper()
ns.run()
def run_news_sentiment():
nss = NewsSentiment()
nss.run()
def run_news_decay():
nd = NewsDecay()
nd.run()
def run_news_sentiment_history():
nsh = NewsSentimentHistory()
nsh.run()
def run_stock_fundamental():
sf = StockFundamental()
sf.run()
def run_stock_technical():
st = StockTechnical()
st.run()
class Main:
def __init__(self) -> None:
# load .env file
load_dotenv()
self.logger = Logger.get_logger('main')
self.scheduler = None
self.db_url = self.get_db_url()
def get_db_url(self) -> str:
db_user = os.getenv("DB_USER", "postgres")
password = os.getenv("DB_PASSWORD", "root")
db_name = os.getenv("DB_DATABASE", "sy")
db_host = os.getenv("DB_HOST", "localhost")
db_port = os.getenv("DB_PORT", "5432")
return f"postgresql+asyncpg://{db_user}:{password}@{db_host}:{db_port}/{db_name}"
def run(self) -> None:
self.logger.info("Starting main.py")
# Initialize scheduler
engine = create_async_engine(self.db_url)
data_store = SQLAlchemyDataStore(engine)
event_broker = AsyncpgEventBroker.from_async_sqla_engine(engine)
start_time = datetime.strptime("2021-01-01 00:00:00", "%Y-%m-%d %H:%M:%S")
with Scheduler(data_store, event_broker) as scheduler:
self.schedule_jobs(scheduler, start_time)
scheduler.run_until_stopped()
def schedule_jobs(self, scheduler: Scheduler, start_time: datetime) -> None:
scheduler.add_schedule(
run_news_scrapper,
IntervalTrigger(hours=2, start_time=start_time),
id="run_news_scrapper",
)
scheduler.add_schedule(
run_news_sentiment,
IntervalTrigger(hours=3, start_time=start_time),
id="run_news_sentiment",
)
scheduler.add_schedule(
run_news_decay,
CronTrigger(hour=22, minute=30, start_time=start_time),
id="run_news_decay",
)
scheduler.add_schedule(
run_news_sentiment_history,
CronTrigger(hour=0, minute=30, start_time=start_time),
id="run_news_sentiment_history",
)
scheduler.add_schedule(
run_stock_fundamental,
CronTrigger(hour=9, minute=30, start_time=start_time),
id="run_stock_fundamental",
)
scheduler.add_schedule(
run_stock_technical,
CronTrigger(hour=18, minute=30, start_time=start_time),
id="run_stock_technical",
)
if __name__ == "__main__":
m = Main()
m.run()
What I need is a minimal working example which:
Can you do that for me?
Closing due to lack of responses.
Things to check first
[X] I have checked that my issue does not already have a solution in the FAQ
[X] I have searched the existing issues and didn't find my bug already reported there
[X] I have checked that my bug is still present in the latest release
Version
v4.0.04a
What happened?
How can we reproduce the bug?