Exemple #1
0
    def peek(self, full=True) -> CaseResult:
        if full:
            return CaseResult(
                uuid=self.uuid,
                id=self.id,
                status=self.status.str,
                cmd=self.cmd,
                duration=self.duration,
                returncode=self.returncode,
                console=ensure_iterable(self.console)[:100],
                message=self.message,
                message_details=ensure_iterable(self.message_details)[:100],
                attachments=ensure_iterable(self.attachments),
                score=self.score,
                scores=self.scores,
            )

        return CaseResult(
            id=self.id,
            status=self.status.str,
            cmd=' '.join(ensure_iterable(self.cmd)),
            duration=self.duration,
            returncode=self.returncode,
            message=self.message,
            message_details=ensure_iterable(self.message_details),
            score=self.score,
            scores=self.scores,
        )
Exemple #2
0
 def __init__(self, item: dict):
     super().__init__()
     self.id = item['id']
     self.name = item.get('name')
     self.extension = item.get('extension')
     self.version = item.get('version')
     self.compile = strings.ensure_iterable(item.get('compile', list()))
     self.run = strings.ensure_iterable(item.get('run', list()))
     self.scale = item.get('scale', 1.0)
     self.image = item.get('image')
     self.disabled = item.get('disabled', False)
     self.style = item.get('style')
Exemple #3
0
    def peek(self, full=True):
        if full:
            return dict(
                uuid=self.uuid,
                id=self.id,
                status=self.status.str,
                cmd=self.cmd,
                duration=self.duration,
                returncode=self.returncode,
                stdin=ensure_iterable(self.stdinn)[:100],
                stdout=ensure_iterable(self.stdout)[:100],
                stderr=ensure_iterable(self.stderr)[:100],
                console=ensure_iterable(self.console)[:100],
                message=self.message,
                message_details=ensure_iterable(self.message_details)[:100],
                attachments=ensure_iterable(self.attachments),
            )

        doc = dict(
            id=self.id,
            status=self.status.str,
            cmd=' '.join(ensure_iterable(self.cmd)),
            duration=self.duration,
            returncode=self.returncode,
            message=self.message,
            message_details=ensure_iterable(self.message_details),
        )
        for p in ('cmd', 'message', 'message_details'):
            if p in doc and not doc[p]:
                doc.pop(p)
        return doc
Exemple #4
0
    def last_n_results(self, n=10, user_id=None, course_id=None, problem_id=None, statuses=None, status_op='$in'):
        filters = self._fix_dict(dict(user=user_id, course=course_id, problem=problem_id))

        statuses = ensure_iterable(statuses)
        if statuses:
            filters['result.status'] = {status_op: statuses}

        logger.info('Fetching db documents using filter {}', filters)
        cursor = self.data.find(filters).sort('_id', -1).limit(n)

        return cursor
Exemple #5
0
    def peek_last_n_results(self, n=10, user_id=None, course_id=None, problem_id=None, statuses=None, status_op='$in'):
        from entities.crates import TestResult
        filters = self._fix_dict(dict(user=user_id, course=course_id, problem=problem_id))
        filters['action'] = 'solve'

        statuses = ensure_iterable(statuses)
        if statuses:
            filters['result.status'] = {status_op: statuses}

        logger.info('Fetching db documents using filter {}', filters)
        cursor = self.data.find(
            filters, {x: 1 for x in self.base_properties}
        ).sort('_id', -1).limit(n)

        return [TestResult(**x) for x in cursor]
Exemple #6
0
 def __init__(self, message, details=None):
     self.message = message
     self.details = ensure_iterable(details)
     super().__init__(self.message)
Exemple #7
0
 def __init__(self, message, details=None):
     self.message = '[visible to admin only] {}'.format(message)
     self.details = ensure_iterable(details)
     super().__init__(self.message)
Exemple #8
0
 def try_read(stream: pathlib.Path) -> typing.List[str]:
     try:
         return ensure_iterable(stream.read_text().splitlines())
     except:
         return []