async def get(self, *, rid: objectid.ObjectId): rdoc = await record.get(rid) if not rdoc or rdoc['type'] != constant.record.TYPE_PRETEST: raise error.RecordNotFoundError(rid) if not self.own(rdoc, builtin.PRIV_READ_PRETEST_DATA_SELF, 'uid'): self.check_priv(builtin.PRIV_READ_PRETEST_DATA) ddoc = await document.get(rdoc['domain_id'], document.TYPE_PRETEST_DATA, rdoc['data_id']) if not ddoc: raise error.RecordDataNotFoundError(rdoc['_id']) output_buffer = io.BytesIO() zip_file = zipfile.ZipFile(output_buffer, 'a', zipfile.ZIP_DEFLATED) config_content = str(len(ddoc['content'])) + '\n' for i, (data_input, data_output) in enumerate(ddoc['content']): input_file = 'input{0}.txt'.format(i) output_file = 'output{0}.txt'.format(i) config_content += '{0}|{1}|1|10|262144\n'.format( input_file, output_file) zip_file.writestr('Input/{0}'.format(input_file), data_input) zip_file.writestr('Output/{0}'.format(output_file), data_output) zip_file.writestr('Config.ini', config_content) # mark all files as created in Windows :p for zfile in zip_file.filelist: zfile.create_system = 0 zip_file.close() await self.binary(output_buffer.getvalue(), 'application/zip')
async def get(self, *, rid: objectid.ObjectId): rdoc = await record.get(rid) if not rdoc: raise error.RecordNotFoundError(rid) rdoc['udoc'], rdoc['pdoc'] = await asyncio.gather( user.get_by_uid(rdoc['uid']), problem.get(rdoc['domain_id'], rdoc['pid'])) self.render('record_detail.html', rdoc=rdoc)
async def get(self, *, rid: objectid.ObjectId): rdoc = await record.get(rid) if not rdoc: raise error.RecordNotFoundError(rid) ddoc = await document.get(rdoc['domain_id'], document.TYPE_PRETEST_DATA, rdoc['data_id']) if not ddoc: raise error.ProblemDataNotFoundError(rdoc['pid']) output_buffer = io.BytesIO() zip_file = zipfile.ZipFile(output_buffer, 'a', zipfile.ZIP_DEFLATED) config_content = str(len(ddoc['data_input'])) + "\n" for i, (data_input, data_output) in enumerate( zip(ddoc['data_input'], ddoc['data_output'])): input_file = 'input{0}.txt'.format(i) output_file = 'output{0}.txt'.format(i) config_content += '{0}|{1}|1|10|1024\n'.format( input_file, output_file) zip_file.writestr('Input/{0}'.format(input_file), data_input) zip_file.writestr('Output/{0}'.format(output_file), data_output) zip_file.writestr('Config.ini', config_content) # mark all files as created in Windows for zfile in zip_file.filelist: zfile.create_system = 0 zip_file.close() await self.binary(output_buffer.getvalue())
async def get(self, *, rid: objectid.ObjectId): rdoc = await record.get(rid) if not rdoc: raise error.RecordNotFoundError(rid) # TODO(iceboy): Check domain permission, permission for visibility in place. if rdoc['domain_id'] != self.domain_id: self.redirect( self.reverse_url('record_detail', rid=rid, domain_id=rdoc['domain_id'])) return # check permission for visibility: contest show_status = True if rdoc['tid']: now = datetime.datetime.utcnow() try: tdoc = await contest.get(rdoc['domain_id'], rdoc['tid']) show_status = contest.RULES[tdoc['rule']].show_func(tdoc, now) \ or self.has_perm(builtin.PERM_VIEW_CONTEST_HIDDEN_STATUS) except error.DocumentNotFoundError: tdoc = None else: tdoc = None # TODO(twd2): futher check permission for visibility. if (not self.own(rdoc, field='uid') and not self.has_perm(builtin.PERM_READ_RECORD_CODE) and not self.has_priv(builtin.PRIV_READ_RECORD_CODE)): del rdoc['code'] if not show_status and 'code' not in rdoc: raise error.PermissionError( builtin.PERM_VIEW_CONTEST_HIDDEN_STATUS) udoc, dudoc = await asyncio.gather( user.get_by_uid(rdoc['uid']), domain.get_user(self.domain_id, rdoc['uid'])) try: pdoc = await problem.get(rdoc['domain_id'], rdoc['pid']) except error.ProblemNotFoundError: pdoc = {} if show_status and 'judge_uid' in rdoc: judge_udoc = await user.get_by_uid(rdoc['judge_uid']) else: judge_udoc = None # check permission for visibility: hidden problem if pdoc.get( 'hidden', False) and not self.has_perm(builtin.PERM_VIEW_PROBLEM_HIDDEN): pdoc = None self.render('record_detail.html', rdoc=rdoc, udoc=udoc, dudoc=dudoc, pdoc=pdoc, tdoc=tdoc, judge_udoc=judge_udoc, show_status=show_status)
async def get(self, *, rid: objectid.ObjectId): rdoc = await record.get(rid) if not rdoc: raise error.RecordNotFoundError(rid) # TODO(iceboy): Check domain permission, permission for visibility in place. if rdoc['domain_id'] != self.domain_id: self.redirect( self.reverse_url('record_detail', rid=rid, domain_id=rdoc['domain_id'])) return if rdoc['tid']: show_status, tdoc = await self.rdoc_contest_visible(rdoc) else: show_status, tdoc = True, None # TODO(twd2): futher check permission for visibility. if (not self.own(rdoc, field='uid') and not self.has_perm(builtin.PERM_READ_RECORD_CODE) and not self.has_priv(builtin.PRIV_READ_RECORD_CODE)): del rdoc['code'] if not show_status and 'code' not in rdoc: if tdoc['doc_type'] == document.TYPE_CONTEST: raise error.PermissionError( builtin.PERM_VIEW_CONTEST_HIDDEN_SCOREBOARD) else: # TYPE_HOMEWORK raise error.PermissionError( builtin.PERM_VIEW_HOMEWORK_HIDDEN_SCOREBOARD) udoc, dudoc = await asyncio.gather( user.get_by_uid(rdoc['uid']), domain.get_user(self.domain_id, rdoc['uid'])) try: pdoc = await problem.get(rdoc['domain_id'], rdoc['pid']) except error.ProblemNotFoundError: pdoc = {} if show_status and 'judge_uid' in rdoc: judge_udoc = await user.get_by_uid(rdoc['judge_uid']) else: judge_udoc = None # check permission for visibility: hidden problem if pdoc.get( 'hidden', False) and not self.has_perm(builtin.PERM_VIEW_PROBLEM_HIDDEN): pdoc = None url_prefix = '/d/{}'.format(urllib.parse.quote(self.domain_id)) self.render('record_detail.html', rdoc=rdoc, udoc=udoc, dudoc=dudoc, pdoc=pdoc, tdoc=tdoc, judge_udoc=judge_udoc, show_status=show_status, socket_url=url_prefix + '/records/{}/conn'.format(rid)) # FIXME(twd2): magic
async def get(self, *, rid: objectid.ObjectId): rdoc = await record.get(rid) if not rdoc or rdoc['type'] != constant.record.TYPE_PRETEST: raise error.RecordNotFoundError(rid) if not self.own(rdoc, builtin.PRIV_READ_PRETEST_DATA_SELF, 'uid'): self.check_priv(builtin.PRIV_READ_PRETEST_DATA) if not rdoc.get('data_id'): raise error.RecordDataNotFoundError(rdoc['_id']) secret = await fs.get_secret(rdoc['data_id']) if not secret: raise error.RecordDataNotFoundError(rdoc['_id']) self.redirect(options.cdn_prefix.rstrip('/') + \ self.reverse_url('fs_get', domain_id=builtin.DOMAIN_ID_SYSTEM, secret=secret))
async def get(self, *, rid: objectid.ObjectId): rdoc = await record.get(rid) if not rdoc or rdoc['type'] != constant.record.TYPE_SUBMISSION: raise error.RecordNotFoundError(rid) if not self.own(rdoc, field='uid') and not self.has_priv(builtin.PRIV_READ_RECORD_CODE): self.check_perm(builtin.PERM_READ_RECORD_CODE) if not rdoc.get('code') or rdoc['code_type'] == constant.record.FILE_TYPE_TEXT: raise error.RecordDataNotFoundError(rdoc['_id']) secret = await fs.get_secret(rdoc['code']) if not secret: raise error.RecordDataNotFoundError(rdoc['_id']) self.redirect(options.cdn_prefix.rstrip('/') + \ self.reverse_url('fs_get', domain_id=builtin.DOMAIN_ID_SYSTEM, secret=secret))
async def get(self, *, rid: objectid.ObjectId, cid: int): rdoc = await record.get(rid) if not rdoc: raise error.RecordNotFoundError(rid) # TODO(iceboy): Check domain permission, permission for visibility in place. if rdoc['domain_id'] != self.domain_id: self.redirect(self.reverse_url('record_detail_case', rid=rid, cid=cid, domain_id=rdoc['domain_id'])) return if 'cases' not in rdoc or cid > len(rdoc['cases']): raise error.RecordCaseNotFoundError(rdoc['_id'], cid) rcdoc = rdoc['cases'][cid - 1] show_detail = self.case_detail_visible(rdoc) if not show_detail: raise error.RecordCaseNotAvailableError(rdoc['_id']) self.render('record_detail_case.html', rdoc=rdoc, rcdoc=rcdoc, show_detail=show_detail)