import { routes } from 'src/app/app-routing.module'
import {
PaperlessTask,
+ PaperlessTaskName,
PaperlessTaskStatus,
PaperlessTaskType,
} from 'src/app/data/paperless-task'
task_file_name: 'test.pdf',
date_created: new Date('2023-03-01T10:26:03.093116Z'),
date_done: new Date('2023-03-01T10:26:07.223048Z'),
- type: PaperlessTaskType.File,
+ type: PaperlessTaskType.Auto,
+ task_name: PaperlessTaskName.ConsumeFile,
status: PaperlessTaskStatus.Failed,
result: 'test.pd: Not consuming test.pdf: It is a duplicate of test (#100)',
acknowledged: false,
task_file_name: '191092.pdf',
date_created: new Date('2023-03-01T09:26:03.093116Z'),
date_done: new Date('2023-03-01T09:26:07.223048Z'),
- type: PaperlessTaskType.File,
+ type: PaperlessTaskType.Auto,
+ task_name: PaperlessTaskName.ConsumeFile,
status: PaperlessTaskStatus.Failed,
result:
'191092.pd: Not consuming 191092.pdf: It is a duplicate of 191092 (#311)',
task_file_name: 'Scan Jun 6, 2023 at 3.19 PM.pdf',
date_created: new Date('2023-06-06T15:22:05.722323-07:00'),
date_done: new Date('2023-06-06T15:22:14.564305-07:00'),
- type: PaperlessTaskType.File,
+ type: PaperlessTaskType.Auto,
+ task_name: PaperlessTaskName.ConsumeFile,
status: PaperlessTaskStatus.Pending,
result: null,
acknowledged: false,
task_file_name: 'paperless-mail-l4dkg8ir',
date_created: new Date('2023-06-04T11:24:32.898089-07:00'),
date_done: new Date('2023-06-04T11:24:44.678605-07:00'),
- type: PaperlessTaskType.File,
+ type: PaperlessTaskType.Auto,
+ task_name: PaperlessTaskName.ConsumeFile,
status: PaperlessTaskStatus.Complete,
result: 'Success. New document id 422 created',
acknowledged: false,
task_file_name: 'onlinePaymentSummary.pdf',
date_created: new Date('2023-06-01T13:49:51.631305-07:00'),
date_done: new Date('2023-06-01T13:49:54.190220-07:00'),
- type: PaperlessTaskType.File,
+ type: PaperlessTaskType.Auto,
+ task_name: PaperlessTaskName.ConsumeFile,
status: PaperlessTaskStatus.Complete,
result: 'Success. New document id 421 created',
acknowledged: false,
task_file_name: 'paperless-mail-_rrpmqk6',
date_created: new Date('2023-06-07T02:54:35.694916Z'),
date_done: null,
- type: PaperlessTaskType.File,
+ type: PaperlessTaskType.Auto,
+ task_name: PaperlessTaskName.ConsumeFile,
status: PaperlessTaskStatus.Started,
result: null,
acknowledged: false,
jest.useFakeTimers()
fixture.detectChanges()
httpTestingController
- .expectOne(`${environment.apiBaseUrl}tasks/?type=file`)
+ .expectOne(`${environment.apiBaseUrl}tasks/?task_name=consume_file`)
.flush(tasks)
})
import { ObjectWithId } from './object-with-id'
export enum PaperlessTaskType {
- File = 'file',
+ Auto = 'auto_task',
ScheduledTask = 'scheduled_task',
ManualTask = 'manual_task',
}
+export enum PaperlessTaskName {
+ ConsumeFile = 'consume_file',
+ TrainClassifier = 'train_classifier',
+ SanityCheck = 'check_sanity',
+}
+
export enum PaperlessTaskStatus {
Pending = 'PENDING',
Started = 'STARTED',
task_file_name: string
+ task_name: PaperlessTaskName
+
date_created: Date
date_done?: Date
} from '@angular/common/http/testing'
import { TestBed } from '@angular/core/testing'
import { environment } from 'src/environments/environment'
-import { PaperlessTaskStatus, PaperlessTaskType } from '../data/paperless-task'
+import {
+ PaperlessTaskName,
+ PaperlessTaskStatus,
+ PaperlessTaskType,
+} from '../data/paperless-task'
import { TasksService } from './tasks.service'
describe('TasksService', () => {
it('calls tasks api endpoint on reload', () => {
tasksService.reload()
const req = httpTestingController.expectOne(
- `${environment.apiBaseUrl}tasks/?type=file`
+ `${environment.apiBaseUrl}tasks/?task_name=consume_file`
)
expect(req.request.method).toEqual('GET')
})
tasksService.loading = true
tasksService.reload()
httpTestingController.expectNone(
- `${environment.apiBaseUrl}tasks/?type=file`
+ `${environment.apiBaseUrl}tasks/?task_name=consume_file`
)
})
req.flush([])
// reload is then called
httpTestingController
- .expectOne(`${environment.apiBaseUrl}tasks/?type=file`)
+ .expectOne(`${environment.apiBaseUrl}tasks/?task_name=consume_file`)
.flush([])
})
expect(tasksService.total).toEqual(0)
const mockTasks = [
{
- type: PaperlessTaskType.File,
+ type: PaperlessTaskType.Auto,
+ task_name: PaperlessTaskName.ConsumeFile,
status: PaperlessTaskStatus.Complete,
acknowledged: false,
task_id: '1234',
date_created: new Date(),
},
{
- type: PaperlessTaskType.File,
+ type: PaperlessTaskType.Auto,
+ task_name: PaperlessTaskName.ConsumeFile,
status: PaperlessTaskStatus.Failed,
acknowledged: false,
task_id: '1235',
date_created: new Date(),
},
{
- type: PaperlessTaskType.File,
+ type: PaperlessTaskType.Auto,
+ task_name: PaperlessTaskName.ConsumeFile,
status: PaperlessTaskStatus.Pending,
acknowledged: false,
task_id: '1236',
date_created: new Date(),
},
{
- type: PaperlessTaskType.File,
+ type: PaperlessTaskType.Auto,
+ task_name: PaperlessTaskName.ConsumeFile,
status: PaperlessTaskStatus.Started,
acknowledged: false,
task_id: '1237',
date_created: new Date(),
},
{
- type: PaperlessTaskType.File,
+ type: PaperlessTaskType.Auto,
+ task_name: PaperlessTaskName.ConsumeFile,
status: PaperlessTaskStatus.Complete,
acknowledged: false,
task_id: '1238',
tasksService.reload()
const req = httpTestingController.expectOne(
- `${environment.apiBaseUrl}tasks/?type=file`
+ `${environment.apiBaseUrl}tasks/?task_name=consume_file`
)
req.flush(mockTasks)
this.loading = true
this.http
- .get<PaperlessTask[]>(`${this.baseUrl}tasks/?type=file`)
+ .get<PaperlessTask[]>(`${this.baseUrl}tasks/?task_name=consume_file`)
.pipe(takeUntil(this.unsubscribeNotifer), first())
.subscribe((r) => {
- this.fileTasks = r.filter((t) => t.type == PaperlessTaskType.File) // they're all File tasks, for now
+ this.fileTasks = r.filter((t) => t.type == PaperlessTaskType.Auto)
this.loading = false
})
}
model = PaperlessTask
fields = {
"type": ["exact"],
+ "task_name": ["exact"],
"status": ["exact"],
}
+++ /dev/null
-# Generated by Django 5.1.6 on 2025-02-14 01:11
-
-from django.db import migrations
-from django.db import models
-
-
-class Migration(migrations.Migration):
- dependencies = [
- ("documents", "1062_alter_savedviewfilterrule_rule_type"),
- ]
-
- operations = [
- migrations.AddField(
- model_name="paperlesstask",
- name="type",
- field=models.CharField(
- choices=[
- ("file", "File Task"),
- ("scheduled_task", "Scheduled Task"),
- ("manual_task", "Manual Task"),
- ],
- default="file",
- help_text="The type of task that was run",
- max_length=30,
- verbose_name="Task Type",
- ),
- ),
- ]
--- /dev/null
+# Generated by Django 5.1.6 on 2025-02-14 23:10
+
+from django.db import migrations
+from django.db import models
+
+
+def make_existing_tasks_consume_auto(apps, schema_editor):
+ PaperlessTask = apps.get_model("documents", "PaperlessTask")
+ PaperlessTask.objects.all().update(type="auto_task", task_name="consume_file")
+
+
+class Migration(migrations.Migration):
+ dependencies = [
+ ("documents", "1062_alter_savedviewfilterrule_rule_type"),
+ ]
+
+ operations = [
+ migrations.AddField(
+ model_name="paperlesstask",
+ name="type",
+ field=models.CharField(
+ choices=[
+ ("auto_task", "Auto Task"),
+ ("scheduled_task", "Scheduled Task"),
+ ("manual_task", "Manual Task"),
+ ],
+ default="auto_task",
+ help_text="The type of task that was run",
+ max_length=30,
+ verbose_name="Task Type",
+ ),
+ ),
+ migrations.AlterField(
+ model_name="paperlesstask",
+ name="task_name",
+ field=models.CharField(
+ choices=[
+ ("consume_file", "Consume File"),
+ ("train_classifier", "Train Classifier"),
+ ("check_sanity", "Check Sanity"),
+ ],
+ help_text="Name of the task that was run",
+ max_length=255,
+ null=True,
+ verbose_name="Task Name",
+ ),
+ ),
+ migrations.RunPython(
+ make_existing_tasks_consume_auto,
+ migrations.RunPython.noop,
+ ),
+ ]
TASK_STATE_CHOICES = sorted(zip(ALL_STATES, ALL_STATES))
class TaskType(models.TextChoices):
- FILE = ("file", _("File Task"))
+ AUTO = ("auto_task", _("Auto Task"))
SCHEDULED_TASK = ("scheduled_task", _("Scheduled Task"))
MANUAL_TASK = ("manual_task", _("Manual Task"))
+ class TaskName(models.TextChoices):
+ CONSUME_FILE = ("consume_file", _("Consume File"))
+ TRAIN_CLASSIFIER = ("train_classifier", _("Train Classifier"))
+ CHECK_SANITY = ("check_sanity", _("Check Sanity"))
+
task_id = models.CharField(
max_length=255,
unique=True,
task_name = models.CharField(
null=True,
max_length=255,
+ choices=TaskName.choices,
verbose_name=_("Task Name"),
- help_text=_("Name of the Task which was run"),
+ help_text=_("Name of the task that was run"),
)
status = models.CharField(
type = models.CharField(
max_length=30,
choices=TaskType.choices,
- default=TaskType.FILE,
+ default=TaskType.AUTO,
verbose_name=_("Task Type"),
help_text=_("The type of task that was run"),
)
type=PaperlessTask.TaskType.SCHEDULED_TASK
if scheduled
else PaperlessTask.TaskType.MANUAL_TASK,
- task_name="check_sanity",
+ task_name=PaperlessTask.TaskName.CHECK_SANITY,
status=states.STARTED,
date_created=timezone.now(),
date_started=timezone.now(),
fields = (
"id",
"task_id",
+ "task_name",
"task_file_name",
"date_created",
"date_done",
user_id = overrides.owner_id if overrides else None
PaperlessTask.objects.create(
- type=PaperlessTask.TaskType.FILE,
+ type=PaperlessTask.TaskType.AUTO,
task_id=headers["id"],
status=states.PENDING,
task_file_name=task_file_name,
- task_name=headers["task"],
+ task_name=PaperlessTask.TaskName.CONSUME_FILE,
result=None,
date_created=timezone.now(),
date_started=None,
if scheduled
else PaperlessTask.TaskType.MANUAL_TASK,
task_id=uuid.uuid4(),
- task_name="train_classifier",
+ task_name=PaperlessTask.TaskName.TRAIN_CLASSIFIER,
status=states.STARTED,
date_created=timezone.now(),
date_started=timezone.now(),
PaperlessTask.objects.create(
type=PaperlessTask.TaskType.SCHEDULED_TASK,
status=states.SUCCESS,
- task_name="train_classifier",
+ task_name=PaperlessTask.TaskName.TRAIN_CLASSIFIER,
)
self.client.force_login(self.user)
response = self.client.get(self.ENDPOINT)
PaperlessTask.objects.create(
type=PaperlessTask.TaskType.SCHEDULED_TASK,
status=states.FAILURE,
- task_name="train_classifier",
+ task_name=PaperlessTask.TaskName.TRAIN_CLASSIFIER,
result="Classifier training failed",
)
self.client.force_login(self.user)
PaperlessTask.objects.create(
type=PaperlessTask.TaskType.SCHEDULED_TASK,
status=states.SUCCESS,
- task_name="check_sanity",
+ task_name=PaperlessTask.TaskName.CHECK_SANITY,
)
self.client.force_login(self.user)
response = self.client.get(self.ENDPOINT)
PaperlessTask.objects.create(
type=PaperlessTask.TaskType.SCHEDULED_TASK,
status=states.FAILURE,
- task_name="check_sanity",
+ task_name=PaperlessTask.TaskName.CHECK_SANITY,
result="5 issues found.",
)
self.client.force_login(self.user)
PaperlessTask.objects.create(
task_id=str(uuid.uuid4()),
task_file_name="test.pdf",
- task_name="documents.tasks.some_task",
+ task_name=PaperlessTask.TaskName.CONSUME_FILE,
status=celery.states.SUCCESS,
)
PaperlessTask.objects.create(
task_id=str(uuid.uuid4()),
task_file_name="anothertest.pdf",
- task_name="documents.tasks.some_task",
+ task_name=PaperlessTask.TaskName.CONSUME_FILE,
status=celery.states.SUCCESS,
)
self.assertIsNotNone(task)
self.assertEqual(headers["id"], task.task_id)
self.assertEqual("hello-999.pdf", task.task_file_name)
- self.assertEqual("documents.tasks.consume_file", task.task_name)
+ self.assertEqual(PaperlessTask.TaskName.CONSUME_FILE, task.task_name)
self.assertEqual(1, task.owner_id)
self.assertEqual(celery.states.PENDING, task.status)
last_trained_task = (
PaperlessTask.objects.filter(
- task_name__icontains="train_classifier",
+ task_name=PaperlessTask.TaskName.TRAIN_CLASSIFIER,
)
.order_by("-date_done")
.first()
last_sanity_check = (
PaperlessTask.objects.filter(
- task_name__icontains="check_sanity",
+ task_name=PaperlessTask.TaskName.CHECK_SANITY,
)
.order_by("-date_done")
.first()