Skip to content

Commit b0007ec

Browse files
committed
feat: register celery tasks before calling
1 parent 5489ab6 commit b0007ec

File tree

6 files changed

+37
-159
lines changed

6 files changed

+37
-159
lines changed

charm/cs.yaml

Lines changed: 0 additions & 142 deletions
This file was deleted.

webapp/celery.py

Lines changed: 14 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -17,16 +17,28 @@ class CeleryTask(Task, LocalTask):
1717

1818

1919
def register_celery_task(
20+
fn: Callable | None,
21+
celery_app: Proxy,
22+
) -> CeleryTask:
23+
"""
24+
Register a celery task.
25+
"""
26+
fn = celery_app.task()(fn)
27+
28+
return fn
29+
30+
31+
def run_celery_task(
2032
fn: Callable | None,
2133
delay: int | None,
2234
celery_app: Proxy,
2335
args: tuple,
2436
kwargs: dict,
2537
) -> CeleryTask:
2638
"""
27-
Register a celery task.
39+
Run a celery task.
2840
"""
29-
fn = celery_app.task()(fn)
41+
fn = register_celery_task(fn, celery_app)
3042

3143
def _setup_periodic_tasks(sender: Celery, **snkwargs: dict) -> None:
3244
sender.add_periodic_task(

webapp/github.py

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
import json
22
import logging
33
from pathlib import Path
4+
from time import time
45

56
import flask
67
import requests
@@ -124,6 +125,7 @@ def get_repository_tree(self, repository: str, branch: str = "main"):
124125
path=item["path"],
125126
)
126127
task()
128+
time.sleep(1) # Try to avoid api rate limiting
127129

128130

129131
@register_task()

webapp/scheduled_tasks.py

Lines changed: 10 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -28,14 +28,16 @@ def load_site_trees() -> None:
2828
app.logger.error("GitHub configuration not found")
2929
return
3030

31-
yaml_path = Path(BASE_DIR) / "data/sites.yaml"
32-
with yaml_path.open("r") as f:
33-
data = yaml.safe_load(f)
34-
for site in data["sites"]:
35-
# Enqueue the sites for setup
36-
site_repository = SiteRepository(site, app, db=db)
37-
# build the tree from GH source without using cache
38-
site_repository.get_tree(no_cache=True)
31+
32+
with app.app_context():
33+
yaml_path = Path(BASE_DIR) / "data/sites.yaml"
34+
with yaml_path.open("r") as f:
35+
data = yaml.safe_load(f)
36+
for site in data["sites"]:
37+
# Enqueue the sites for setup
38+
site_repository = SiteRepository(site, app, db=db)
39+
# build the tree from GH source without using cache
40+
site_repository.get_tree(no_cache=True)
3941

4042

4143
@register_task(delay=UPDATE_STATUS_DELAY)

webapp/tasklib.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -124,7 +124,7 @@ def register_local_task(
124124
"""
125125
Register a local task.
126126
"""
127-
print("INFO [Registered task]", func.__name__)
127+
print("INFO [Registered local task]", func.__name__)
128128

129129
return Task(
130130
fn=func,

webapp/tasks.py

Lines changed: 10 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@
44

55
from celery import current_app as celery_app
66

7-
from webapp.celery import register_celery_task
7+
from webapp.celery import register_celery_task, run_celery_task
88
from webapp.tasklib import register_local_task
99

1010
# Default delay between runs for updating the tree
@@ -15,11 +15,15 @@
1515

1616
def register_task(delay: int | None = None) -> Callable:
1717
def outerwrapper(func: Callable) -> Callable:
18+
if os.getenv("REDIS_HOST"):
19+
print("INFO [Registered celery task]", func.__name__)
20+
register_celery_task(func, celery_app=celery_app)
21+
1822
@functools.wraps(func)
1923
def wrapper(*args: tuple, **kwargs: dict) -> Callable:
2024
if os.getenv("REDIS_HOST"):
21-
# Register the task as a Celery task
22-
task = register_celery_task(
25+
# Run the registered task as a Celery task
26+
task = run_celery_task(
2327
func,
2428
delay=delay,
2529
celery_app=celery_app,
@@ -35,9 +39,9 @@ def wrapper(*args: tuple, **kwargs: dict) -> Callable:
3539
kwargs=kwargs,
3640
)
3741

38-
# Start scheduled tasks
39-
if delay:
40-
task.delay(*args, **kwargs)
42+
# Start local scheduled tasks
43+
if delay:
44+
task.delay(*args, **kwargs)
4145

4246
return task.delay
4347

0 commit comments

Comments
 (0)