def get(self, tenant, akte_id, doc_id): user = self.login_required() dfile = DokumentFile.get_by_key_name("%s-%s" % (tenant, doc_id)) if not dfile: logging.error('DocumentFile(%s-%s) not found' % (tenant, doc_id)) raise RuntimeError('404') if user.tenant != tenant: logging.error('DocumentFile(%s-%s) wrong tenant for user' % (tenant, doc_id)) raise RuntimeError('404') if dfile.tenant != tenant: logging.error('DocumentFile(%s-%s) wrong tenant found' % (tenant, doc_id)) raise RuntimeError('404') if dfile.akte and dfile.akte.key().name() != ("%s-%s" % (tenant, akte_id)): logging.error('DocumentFile(%s-%s) wrong akte: %s %s', tenant, doc_id, akte_id, dfile.akte.key().name()) raise RuntimeError('404') self.response.headers['Content-Type'] = 'application/pdf' self.response.out.write(dfile.data)
def post(self, tenant): user = self.login_required() tenant = user.tenant if not hasattr(self.request.POST['pdfdata'], 'file'): logging.debug(dir(self.request)) logging.debug(vars(self.request)) HTTP400_BadRequest('pdfdata not a file') pdfdata = self.request.POST['pdfdata'].file.read() if len(pdfdata) > 900000: raise HTTP413_TooLarge('PDF bigger than 900k') ref = self.request.POST['ref'] typ = self.request.POST['type'] refs = ref.split() if refs: akte_designator = refs[0] else: handmade_key = db.Key.from_path('Akte', 1) akte_designator = "ablage%s" % (db.allocate_ids(handmade_key, 1)[0]) pdf_id = str( base64.b32encode(hashlib.sha1(pdfdata).digest()).rstrip('=')) key_name = "%s-%s" % (tenant, pdf_id) # do we already have that document - ignore designator given by uploader doc = Dokument.get_by_key_name(key_name) if doc and doc.akte.designator != akte_designator: ref = ' '.join(list(set([akte_designator] + ref.split()))) akte_designator = doc.akte.designator akte_key = "%s-%s" % (tenant, akte_designator) akteargs = dict(type=typ, designator=akte_designator, datum=convert_to_date(self.request.POST.get('datum'))) for key in ('name1', 'name2', 'name3', 'strasse', 'land', 'plz', 'ort', 'email', 'ref_url', 'datum'): if self.request.POST.get(key): akteargs[key] = self.request.POST.get(key) if self.request.POST.get('akte_%s' % key): akteargs[key] = self.request.POST.get('akte_%s' % key) if key == 'datum' and 'datum' in akteargs: akteargs[key] = convert_to_date(akteargs[key]) akte = Akte.get_or_insert(akte_key, tenant=tenant, **akteargs) oldref = akte.ref newref = list(set(oldref + self.request.POST.get('ref', '').split())) newseit = oldseit = akte.seit if self.request.POST.get('datum'): postseit = convert_to_date(self.request.POST.get('datum')) if postseit and postseit and (postseit < postseit): newseit = postseit if (newref != oldref) or (newseit != oldseit): akte.seit = newseit akte.ref = newref akte.put() docargs = dict(type=typ, datum=datetime.date.today(), file_length=len(pdfdata)) for key in ('name1', 'name2', 'name3', 'strasse', 'land', 'plz', 'ort', 'email', 'ref_url', 'datum' 'quelle'): if self.request.POST.get(key): docargs[key] = self.request.POST.get(key) if 'datum' in docargs: docargs['datum'] = convert_to_date(docargs['datum']) dokument = Dokument.get_or_insert(key_name, designator=pdf_id, akte=akte, tenant=tenant, **docargs) # resave if it existed but something had changed for key in docargs.keys(): if getattr(dokument, key) != docargs[key]: logging.debug('%s: key %s has changed', pdf_id, key) dokument.put() break DokumentFile.get_or_insert( key_name, dokument=dokument, akte=akte, data=pdfdata, tenant=tenant, mimetype='application/pdf', filename=self.request.POST['pdfdata'].filename) oldref = dokument.ref newref = list(set(oldref + self.request.POST.get('ref', '').split())) if newref != oldref: dokument.ref = newref dokument.put() self.redirect(dokument.get_url()) self.response.set_status(201) self.response.headers["Content-Type"] = 'text/plain' self.response.out.write('ok:%s\n' % dokument.designator)
def post(self, tenant): user = self.login_required() tenant = user.tenant if not hasattr(self.request.POST['pdfdata'], 'file'): logging.debug(dir(self.request)) logging.debug(vars(self.request)) HTTP400_BadRequest('pdfdata not a file') pdfdata = self.request.POST['pdfdata'].file.read() if len(pdfdata) > 900000: raise HTTP413_TooLarge('PDF bigger than 900k') ref = self.request.POST['ref'] typ = self.request.POST['type'] refs = ref.split() if refs: akte_designator = refs[0] else: handmade_key = db.Key.from_path('Akte', 1) akte_designator = "ablage%s" % (db.allocate_ids(handmade_key, 1)[0]) pdf_id = str(base64.b32encode(hashlib.sha1(pdfdata).digest()).rstrip('=')) key_name = "%s-%s" % (tenant, pdf_id) # do we already have that document - ignore designator given by uploader doc = Dokument.get_by_key_name(key_name) if doc and doc.akte.designator != akte_designator: ref = ' '.join(list(set([akte_designator] + ref.split()))) akte_designator = doc.akte.designator akte_key = "%s-%s" % (tenant, akte_designator) akteargs = dict(type=typ, designator=akte_designator, datum=convert_to_date(self.request.POST.get('datum'))) for key in ('name1', 'name2', 'name3', 'strasse', 'land', 'plz', 'ort', 'email', 'ref_url', 'datum'): if self.request.POST.get(key): akteargs[key] = self.request.POST.get(key) if self.request.POST.get('akte_%s' % key): akteargs[key] = self.request.POST.get('akte_%s' % key) if key == 'datum' and 'datum' in akteargs: akteargs[key] = convert_to_date(akteargs[key]) akte = Akte.get_or_insert(akte_key, tenant=tenant, **akteargs) oldref = akte.ref newref = list(set(oldref + self.request.POST.get('ref', '').split())) newseit = oldseit = akte.seit if self.request.POST.get('datum'): postseit = convert_to_date(self.request.POST.get('datum')) if postseit and postseit and (postseit < postseit): newseit = postseit if (newref != oldref) or (newseit != oldseit): akte.seit = newseit akte.ref = newref akte.put() docargs = dict(type=typ, datum=datetime.date.today(), file_length=len(pdfdata)) for key in ('name1', 'name2', 'name3', 'strasse', 'land', 'plz', 'ort', 'email', 'ref_url', 'datum' 'quelle'): if self.request.POST.get(key): docargs[key] = self.request.POST.get(key) if 'datum' in docargs: docargs['datum'] = convert_to_date(docargs['datum']) dokument = Dokument.get_or_insert(key_name, designator=pdf_id, akte=akte, tenant=tenant, **docargs) # resave if it existed but something had changed for key in docargs.keys(): if getattr(dokument, key) != docargs[key]: logging.debug('%s: key %s has changed', pdf_id, key) dokument.put() break DokumentFile.get_or_insert(key_name, dokument=dokument, akte=akte, data=pdfdata, tenant=tenant, mimetype='application/pdf', filename=self.request.POST['pdfdata'].filename) oldref = dokument.ref newref = list(set(oldref + self.request.POST.get('ref', '').split())) if newref != oldref: dokument.ref = newref dokument.put() self.redirect(dokument.get_url()) self.response.set_status(201) self.response.headers["Content-Type"] = 'text/plain' self.response.out.write('ok:%s\n' % dokument.designator)