Merge branch 'main' into patch-4
This commit is contained in:
3 files changed
+33
-34
No files matched your search
@@ -384,7 +384,6 @@ def media_pre_delete(sender, instance, **kwargs):
|
||||
log.info(f'Deleting tasks for media: {instance.name}')
|
||||
delete_task_by_media('sync.tasks.download_media', (str(instance.pk),))
|
||||
delete_task_by_media('sync.tasks.download_media_metadata', (str(instance.pk),))
|
||||
delete_task_by_media('sync.tasks.wait_for_media_premiere', (str(instance.pk),))
|
||||
thumbnail_url = instance.thumbnail
|
||||
if thumbnail_url:
|
||||
delete_task_by_media(
|
||||
|
||||
+29
-31
@@ -166,8 +166,8 @@ def get_media_metadata_task(media_id):
|
||||
def get_media_thumbnail_task(media_id):
|
||||
return get_first_task('sync.tasks.download_media_thumbnail', media_id)
|
||||
|
||||
def get_media_premiere_task(media_id):
|
||||
return get_first_task('sync.tasks.wait_for_media_premiere', media_id)
|
||||
def get_source_check_task(source_id):
|
||||
return get_first_task('sync.tasks.save_all_media_for_source', source_id)
|
||||
|
||||
def get_source_index_task(source_id):
|
||||
return get_first_task('sync.tasks.index_source_task', source_id)
|
||||
@@ -231,28 +231,32 @@ def save_model(instance):
|
||||
queue=Val(TaskQueue.DB),
|
||||
)
|
||||
def upcoming_media():
|
||||
now = timezone.now()
|
||||
next_hour = now + timezone.timedelta(hours=1, minutes=3)
|
||||
previous_hour = now - timezone.timedelta(hours=1, minutes=1)
|
||||
qs = Media.objects.filter(
|
||||
manual_skip=True,
|
||||
metadata__isnull=False,
|
||||
published__isnull=False,
|
||||
published__gte=previous_hour,
|
||||
published__gte=(
|
||||
# previous hour
|
||||
timezone.now() - timezone.timedelta(hours=1, minutes=1),
|
||||
),
|
||||
)
|
||||
for media in qs_gen(qs):
|
||||
media_id = str(media.pk)
|
||||
valid, hours = media.wait_for_premiere()
|
||||
if valid:
|
||||
save_model(media)
|
||||
vn_fmt = _('Waiting for the premiere of "{}" at: {}')
|
||||
wait_for_media_premiere(
|
||||
str(media.pk),
|
||||
run_at=next_hour,
|
||||
verbose_name=vn_fmt.format(
|
||||
task = get_first_task('sync.tasks.wait_for_media_premiere', media_id)
|
||||
if not task:
|
||||
# create a task to update
|
||||
when = media.published + timezone.timedelta(minutes=1)
|
||||
vn_fmt = _('Waiting for the premiere of "{}" at: {}')
|
||||
vn = vn_fmt.format(
|
||||
media.key,
|
||||
media.published.isoformat(' ', 'seconds'),
|
||||
),
|
||||
)
|
||||
)
|
||||
wait_for_media_premiere(media_id, run_at=when, verbose_name=vn)
|
||||
task = get_first_task('sync.tasks.wait_for_media_premiere', media_id)
|
||||
if hours:
|
||||
update_task_status(task, f'available in {hours} hours')
|
||||
log.debug(f'upcoming_media: wait_for_premiere: {media.key}: {valid=} {hours=}')
|
||||
|
||||
|
||||
@@ -1113,6 +1117,17 @@ from background_task.exceptions import InvalidTaskError # noqa: E402
|
||||
from background_task.models import Task, CompletedTask # noqa: E402
|
||||
|
||||
|
||||
@background(schedule=dict(priority=0, run_at=60), queue=Val(TaskQueue.NET), remove_existing_tasks=True)
|
||||
def wait_for_media_premiere(media_id):
|
||||
try:
|
||||
media = Media.objects.get(pk=media_id)
|
||||
except Media.DoesNotExist as e:
|
||||
raise InvalidTaskError(_('no such media')) from e
|
||||
else:
|
||||
t = media.wait_for_premiere()
|
||||
if t[0]:
|
||||
save_model(media)
|
||||
|
||||
@background(schedule=dict(priority=0, run_at=0), queue=Val(TaskQueue.NET), remove_existing_tasks=False)
|
||||
def wait_for_database_queue():
|
||||
from common.huey import h_q_tuple
|
||||
@@ -1175,23 +1190,6 @@ def download_media(media_id, override=False):
|
||||
raise InvalidTaskError(str(e)) from e
|
||||
|
||||
|
||||
@background(schedule=dict(priority=0, run_at=60), queue=Val(TaskQueue.NET), remove_existing_tasks=True)
|
||||
def wait_for_media_premiere(media_id):
|
||||
try:
|
||||
media = Media.objects.get(pk=media_id)
|
||||
except Media.DoesNotExist as e:
|
||||
raise InvalidTaskError(_('no such media')) from e
|
||||
else:
|
||||
valid, hours = media.wait_for_premiere()
|
||||
if not valid:
|
||||
return
|
||||
|
||||
if hours:
|
||||
task = get_media_premiere_task(media_id)
|
||||
update_task_status(task, f'available in {hours} hours')
|
||||
save_model(media)
|
||||
|
||||
|
||||
@background(schedule=dict(priority=1, run_at=90), queue=Val(TaskQueue.FS), remove_existing_tasks=False)
|
||||
def delete_all_media_for_source(source_id, source_name, source_directory):
|
||||
source = None
|
||||
|
||||
@@ -50,14 +50,16 @@
|
||||
<div class="collection">
|
||||
{% for task in errors %}
|
||||
<div class="collection-item error-text">
|
||||
<a href="{% url task.url pk=task.instance.pk %}" class="error-text">
|
||||
<a href="{%if task.instance.pk %}{% url task.url pk=task.instance.pk %}{% else %}#{{ task.task_id }}{% endif %}" class="error-text">
|
||||
<i class="fas fa-exclamation-triangle"></i> <strong>{{ task }}</strong>, attempted {{ task.attempts }} time{{ task.attempts|pluralize }}<br>
|
||||
Error: "{{ task.error_message }}"<br>
|
||||
</a>
|
||||
<i class="fas fa-history"></i> Task will be retried at <strong>{{ task.scheduled_at|date:'Y-m-d H:i:s' }}</strong>
|
||||
{% if '-' not in task.task_id %}
|
||||
<a href="{% url 'sync:run-task' pk=task.task_id %}" class="error-text">
|
||||
<i class="fas fa-undo"></i>
|
||||
</a>
|
||||
{% endif %}
|
||||
</div>
|
||||
{% empty %}
|
||||
<span class="collection-item no-items"><i class="fas fa-info-circle"></i> There are no tasks with errors on this page.</span>
|
||||
@@ -78,7 +80,7 @@
|
||||
<div class="collection">
|
||||
{% for task in scheduled %}
|
||||
<div class="collection-item">
|
||||
<a href="{% url task.url pk=task.instance.pk %}">
|
||||
<a href="{%if task.instance.pk %}{% url task.url pk=task.instance.pk %}{% else %}#{{ task.task_id }}{% endif %}">
|
||||
<i class="fas fa-hourglass-start"></i> <strong>{{ task }}</strong><br>
|
||||
{% if task.instance.is_active and 'once' not in task.verbose_name %}Scheduled to run {{ task.instance.get_index_schedule_display|lower }}.<br>{% endif %}
|
||||
<i class="far fa-clock"></i> Task will run {% if task.run_now %}<strong>immediately</strong>{% else %}at <strong>{{ task.scheduled_at|date:'Y-m-d H:i:s' }}</strong>
|
||||
|
||||
Reference in new issue
Block a user