from enum import Enum from mongoengine import StringField, DateTimeField, IntField, EnumField from apiserver.database import Database, strict from apiserver.database.model import AttributedDocument class StorageType(str, Enum): fileserver = "fileserver" s3 = "s3" azure = "azure" gs = "gs" unknown = "unknown" class FileType(str, Enum): file = "file" folder = "folder" class DeletionStatus(str, Enum): created = "created" retrying = "retrying" failed = "failed" class UrlToDelete(AttributedDocument): _field_collation_overrides = { "url": AttributedDocument._numeric_locale, } meta = { "db_alias": Database.backend, "strict": strict, "indexes": [ ("company", "user", "task"), ("company", "storage_type", "url"), ("status", "retry_count", "storage_type"), ], } id = StringField(primary_key=True) url = StringField(required=True, unique_with="company") task = StringField(required=True) created = DateTimeField(required=True) storage_type = EnumField(StorageType, default=StorageType.unknown) type = EnumField(FileType, default=FileType.file) retry_count = IntField(default=0) last_failure_time = DateTimeField() last_failure_reason = StringField() status = EnumField(DeletionStatus, default=DeletionStatus.created)