layout / utils /database /tasks.py
hassanshka's picture
Add missing important files: _app_.py, utils/, CVAT_download/, manifest.json, and documentation
989ec3c
from mongoengine import *
import datetime
class TaskModel(DynamicDocument):
id = SequenceField(primary_key=True)
# Type of task: Importer, Exporter, Scanner, etc.
group = StringField(required=True)
name = StringField(required=True)
desciption = StringField()
status = StringField(default="PENDING")
creator = StringField()
#: Start date of the executor
start_date = DateTimeField()
#: End date of the executor
end_date = DateTimeField()
completed = BooleanField(default=False)
failed = BooleanField(default=False)
has_download = BooleanField(default=False)
# If any of the information is relevant to the task
# it should be added
dataset_id = IntField()
image_id = IntField()
category_id = IntField()
progress = FloatField(default=0, min_value=0, max_value=100)
logs = ListField(default=[])
errors = IntField(default=0)
warnings = IntField(default=0)
priority = IntField()
metadata = DictField(default={})
_update_every = 10
_progress_update = 0
def error(self, string):
self._log(string, level="ERROR")
def warning(self, string):
self._log(string, level="WARNING")
def info(self, string):
self._log(string, level="INFO")
def _log(self, string, level):
level = level.upper()
date = datetime.datetime.now().strftime("%d-%m-%Y %H:%M:%S")
message = f"[{date}] [{level}] {string}"
statment = {
'push__logs': message
}
if level == "ERROR":
statment['inc__errors'] = 1
self.errors += 1
if level == "WARNING":
statment['inc__warnings'] = 1
self.warnings += 1
self.update(**statment)
def set_progress(self, percent, socket=None):
self.update(progress=int(percent), completed=(percent >= 100))
# Send socket update every 10%
if self._progress_update < percent or percent >= 100:
if socket is not None:
# logger.debug(f"Emitting {percent} progress update for task {self.id}")
socket.emit('taskProgress', {
'id': self.id,
'progress': percent,
'errors': self.errors,
'warnings': self.warnings
}, broadcast=True)
self._progress_update += self._update_every
def api_json(self):
return {
"id": self.id,
"name": self.name
}
__all__ = ["TaskModel"]