from site import Site from tools import mirror import string, re, xmlrpclib, os, time class Reviewer(Site): def mirror(self, location='', attr='id'): return mirror.config.get('zmath', attr).strip() def matrix_authenticate_reviewer(self, reviewer='', document=''): reviewer = str(reviewer).upper().strip() if re.search('\D', reviewer): return '' document = str(document).upper().strip() if document.startswith('DE'): document = document[2:-1] if re.search('\D', document): return '' if not reviewer or not document: return '' server = xmlrpclib.Server('http://matrix:8080/math/xml/') return server.authenticate_reviewer({'reviewer_':int(reviewer), 'document_':int(document),}) def matrix_get_reviewer(self, id=0): if not id: return server = xmlrpclib.Server('http://matrix:8080/math/xml/') try: reviewer = server.get_reviewer({'id_':id,}) except Exception: reviewer = None return reviewer def matrix_get_document(self, id=0): if not id: return server = xmlrpclib.Server('http://matrix:8080/math/xml/') try: document = server.get_document({'id_':id,}) except Exception: document = None return document def matrix_get_mathilde(self, reviewer=0, document=0): return def matrix_set_mathilde(self, reviewer=0, document=0, state=''): if not reviewer or not document: return server = xmlrpclib.Server('http://matrix:8080/math/xml/') return server.set_mathilde({'reviewer_':reviewer, 'document_':document, 'state_':state,}) def matrix_list_mathilde(self, reviewer=0, state=None): if not reviewer: return server = xmlrpclib.Server('http://matrix:8080/math/xml/') return server.list_mathilde({'reviewer_':reviewer, 'state_':state,}) def _checkdigit(self, number): sum = 0 weight = 8 try: number = int(number) except: return None for digit in '%08d' % (number): if not digit.isdigit(): return 0 sum = sum + int(digit) * weight weight -= 1 check = 11 - (sum % 11) if check == 10: return 'X' elif check == 11: return '0' else: return str(check) return None def checkid(self, id): if len(id) == 11: id = id[2:] if len(id) == 9: if self._checkdigit(id[:-1]) == id[-1]: return 1 return 0 def number2id(self, number, prefix='DE'): return '%s%08d%s' % (prefix, number, self._checkdigit(number)) def id2number(self, id): if len(id) == 11: return int(id[2:-1]) if len(id) == 9: return int(id[:-1]) return None def cleantex(self, code, email=None): code = code.replace('\\input', ' \\\\ input') code = code.replace('\\immediate', ' \\\\ immediate') code = code.replace('\\openout', ' \\\\ openout') code = code.replace('\\closeout', ' \\\\ closeout') code = code.replace('\\write', ' \\\\ write') code = code.replace('\\special', ' \\\\ special') code = code.replace('\\read', ' \\\\ read') code = code.replace('\\newwrite', ' \\\\ newwrite') if email: code = code.replace('@', '\\@') return code def preview(self, id, data, type='pdf'): name = 'preview-%08d' % (id) if type == 'pdf': if not os.path.exists('/tmp/zb-basic.tex'): os.symlink('%s/../tex/zb-basic.tex' % (self.location), '/tmp/zb-basic.tex') if not os.path.exists('/tmp/zb-preview.tex'): os.symlink('%s/../tex/zb-preview.tex' % (self.location), '/tmp/zb-preview.tex') list = [] list.append('\\batchmode\\input zb-basic.tex') list.append('\\batchmode\\input zb-preview.tex') list.append('\\previewhead') list.append('\\previewreviewer{%s}{%s}{%s}' % ( self.cleantex(data.get('reviewerid', '')), self.cleantex(data.get('reviewername', '')), self.cleantex(data.get('revieweremail', ''), email=True) )) list.append('\\previewdocument{%s}{%s}{%s}{%s}' % ( self.cleantex(self.number2id(id)), self.cleantex(data.get('author', '')), self.cleantex(data.get('title', '')), self.cleantex(data.get('source', '')), )) classifications = [] for i in range(11): classifications.append(data.get('classification%d' % (i))) list.append('\\previewclass{%s}' % (self.cleantex(string.join(classifications, ' ')))) list.append('\\previewkeyword{%s}' % ( self.cleantex(data.get('keyword', '')), )) list.append('\\previewtext %s' % ( self.cleantex(data.get('text', '')), )) list.append('\\previewend') list.append('\\bye') tex = string.join(list, '\n') file = open('/tmp/%s.tex' % (name), 'w') file.write(tex) file.close() os.system('%s/../tex/preview.sh /tmp/%s' % (self.location, name)) elif type == 'txt': list = [] list.append('Zentralblatt-MATH Review - %s - %s\r\n\r\n' % (self.number2id(id), time.strftime('%Y-%m-%d %H:%M:%S'))) list.append('%s\r\n\r\n' % ('-'*78)) list.append('Document Number:\r\n%s\r\n\r\n' % (self.number2id(id))) list.append('Author:\r\n%s\r\n\r\n' % (data.get('author', ''))) list.append('Title:\r\n%s\r\n\r\n' % (data.get('title', ''))) list.append('Source:\r\n%s\r\n\r\n' % (data.get('source', ''))) list.append('%s\r\n\r\n' % ('-'*78)) list.append('Primary Classification:\r\n') list.append('%s\r\n\r\n' % (data.get('classification0', ''))) list.append('Secondary Classifications:\r\n') for i in range(1, 11, 1): list.append('%s ' % (data.get('classification%d' % (i), ''))) list.append('\r\n\r\n') list.append('Keywords:\r\n%s\r\n\r\n' % (data.get('keyword', ''))) list.append('Review Text:\r\n%s\r\n\r\n' % (data.get('text', ''))) list.append('%s\r\n\r\n' % ('-'*78)) list.append('Remarks:\r\n%s\r\n' % (data.get('remark', ''))) text = string.join(list, '') file = open('/tmp/%s.txt' % (name), 'w') file.write(text) file.close() return name