def tx(): db.delete(doc) scans = MediaObject.get(doc.pages) for scan in scans: scan.lacks_document = True scan.document = None db.put(scan)
def tx(): db.delete(doc) scans = MediaObject.get(doc.pages) for scan in scans: user.media_objects -= 1 db.delete(scan) db.put(user)
def get(self, docid): user_info = get_user_info() if user_info is None: self.redirect("/?error_message=%s" % "login required to view docs") docid = long(docid) doc = Document.get_by_id(docid, parent=user_info) if doc is None: self.response.out.write("Docid %d not found." % (docid)) return pages = MediaObject.get(doc.pages) size = self.request.get("size") if not size: size = 1200 show_single_list = long(size) > 600 self.response.out.write( template.render( "doc.html", { "doc": doc, "pages": pages, "user_info": user_info, "size": size, "show_single_list": show_single_list, }, debug=True, ) )
def get(self, media_id, unused_filename): def get_param(name, error_message=None): """Convenience function to get a parameter from request. Returns: String value of field if it exists, else ''. If the key does not exist at all, it will return None. """ try: value = self.request.params[name] if isinstance(value, cgi.FieldStorage): value = value.value return value or '' except KeyError: #error_messages.append(error_message) return None user_info = get_user_info() #if user_info is None and get_param("password") == "xx": # user_info = UserInfo.get_by_key_name('user:[email protected]') if user_info is None: self.redirect('/?error_message=%s' % 'log-in required') media_object = MediaObject.get_by_id(long(media_id), parent=user_info) if media_object is None: self.redirect('/?error_message=Unidentified+object') return last_modified_string = media_object.creation.strftime("%a, %d %b %Y %H:%M:%S GMT") self.response.headers['Cache-Control'] = "private" self.response.headers['Content-Type'] = str(media_object.guessed_type) self.response.headers['Last-Modified'] = last_modified_string expires = media_object.creation + datetime.timedelta(days=30) self.response.headers['Expires'] = expires.strftime("%a, %d %b %Y %H:%M:%S GMT") # Caching if self.request.headers.has_key("If-Modified-Since"): ims = self.request.headers.get("If-Modified-Since") if ims == last_modified_string: self.error(304) return modsince = datetime.datetime.strptime(ims, "%a, %d %b %Y %H:%M:%S %Z") if modsince >= media_object.creation: self.error(304) return blob_key = media_object.blob.key() resize = self.request.get('resize') if resize: image = images.Image(blob_key=str(blob_key)) image.resize(width=int(resize), height=int(resize)) self.response.out.write(image.execute_transforms()) return if 'Range' in self.request.headers: self.response.headers['Range'] = self.request.headers['Range'] self.send_blob(blob_key, str(media_object.guessed_type))
def store_media(): """Store media object info in datastore. Also updates the user-info record to keep count of media objects. This function is run as a transaction. """ user_info = UserInfo.get_by_key_name("user:%s" % user_email) if user_info is None: error_messages.append("User record has been deleted. " "Try uploading again") return media = MediaObject( parent=user_info, owner=user_info, blob=blob_info.key(), creation=blob_info.creation, content_type=blob_info.content_type, filename=blob_info.filename, size=int(blob_info.size), lacks_document=True, ) user_info.media_objects += 1 db.put(user_info) db.put(media) if bool(is_doc) and is_doc != "0": tag_list = [] if tags is not None: tag_list = [x for x in re.split("\s*,\s*", tags) if x] doc = Document( parent=user_info, owner=user_info, pages=[media.key()], title=title, description=description, no_tags=(len(tag_list) == 0), tags=tag_list, ) db.put(doc) media.document = doc.key() media.lacks_document = False db.put(media)
def get(self): # Provide login/logout URLs. user_info = get_user_info() if user_info is None: login_url = users.create_login_url('/') else: login_url = users.create_logout_url('/') # Collect list of error messages which gets shown to the user. error_messages = self.request.params.getall('error_message') view_user = user_info # for now did_search = False # Fetch media for view user. media = MediaObject.all().filter('owner', user_info) media = media.filter('lacks_document', True) media = media.order('creation') limit = 50 if self.request.get("limit"): limit = long(self.request.get("limit")) media = media.fetch(limit) docs = Document.all().filter('owner', user_info) tags = self.request.get("tags") if tags: did_search = True for tag in re.split('\s*,\s*', tags): docs = docs.filter("tags", tag) docs = docs.fetch(limit) untagged_docs = Document.all().filter('owner', user_info).filter( "no_tags", True).fetch(limit) upcoming_due = Document.all().filter('owner', user_info) upcoming_due = upcoming_due.filter("due_date !=", None) upcoming_due = upcoming_due.order("due_date") upcoming_due = upcoming_due.fetch(30) top_message = "" if self.request.get("saved_doc"): docid = long(self.request.get("saved_doc")) top_message = "Saved <a href='/doc/%d'>doc %d</a>" % (docid, docid) # Render view. self.response.out.write( template.render('main.html', { "did_search": did_search, "media": media, "docs": docs, "untagged_docs": untagged_docs, "upcoming_due_docs": upcoming_due, "view_user": view_user, "login_url": login_url, "user_info": user_info, "top_message": top_message, }, debug=True))
def store_media(): """Store media object info in datastore. Also updates the user-info record to keep count of media objects. This function is run as a transaction. """ user_info = UserInfo.get_by_key_name('user:%s' % user_email) if user_info is None: error_messages.append('User record has been deleted. ' 'Try uploading again') return media = MediaObject( parent=user_info, owner=user_info, blob=blob_info.key(), creation=blob_info.creation, content_type=blob_info.content_type, filename=blob_info.filename, size=int(blob_info.size), lacks_document=True) user_info.media_objects += 1 db.put(user_info) db.put(media) if bool(is_doc) and is_doc != "0": tag_list = [] if tags is not None: tag_list = [x for x in re.split('\s*,\s*', tags) if x] doc = Document( parent=user_info, owner=user_info, pages=[media.key()], title=title, description=description, no_tags=(len(tag_list)==0), tags=tag_list) db.put(doc) media.document = doc.key() media.lacks_document = False db.put(media)
def get(self): # Provide login/logout URLs. user_info = get_user_info() if user_info is None: login_url = users.create_login_url('/') else: login_url = users.create_logout_url('/') # Collect list of error messages which gets shown to the user. error_messages = self.request.params.getall('error_message') view_user = user_info # for now did_search = False # Fetch media for view user. media = MediaObject.all().filter('owner', user_info) media = media.filter('lacks_document', True) media = media.order('creation') limit = 50 if self.request.get("limit"): limit = long(self.request.get("limit")) media = media.fetch(limit) docs = Document.all().filter('owner', user_info) tags = self.request.get("tags") if tags: did_search = True for tag in re.split('\s*,\s*', tags): docs = docs.filter("tags", tag) docs = docs.fetch(limit) untagged_docs = Document.all().filter('owner', user_info).filter("no_tags", True).fetch(limit) upcoming_due = Document.all().filter('owner', user_info) upcoming_due = upcoming_due.filter("due_date !=", None) upcoming_due = upcoming_due.order("due_date") upcoming_due = upcoming_due.fetch(30) top_message = "" if self.request.get("saved_doc"): docid = long(self.request.get("saved_doc")) top_message = "Saved <a href='/doc/%d'>doc %d</a>" % (docid, docid) # Render view. self.response.out.write(template.render('main.html', { "did_search": did_search, "media": media, "docs": docs, "untagged_docs": untagged_docs, "upcoming_due_docs": upcoming_due, "view_user": view_user, "login_url": login_url, "user_info": user_info, "top_message": top_message, }, debug=True))
def get(self): if not users.is_current_user_admin(): self.redirect('/?error_message=%s' % 'log-in required') used = set() for i in MediaObject.all(): used.add(i.blob.key()) for b in blobstore.BlobInfo.all(): if b.key() not in used: b.delete() self.redirect('/')
def delete_doc_and_images(user, doc): """Deletes the document and its images.""" scans = MediaObject.get(doc.pages) for scan in scans: blobstore.delete(scan.blob.key()) def tx(): db.delete(doc) scans = MediaObject.get(doc.pages) for scan in scans: user.media_objects -= 1 db.delete(scan) db.put(user) db.run_in_transaction(tx) return True
def get(self): if not users.is_current_user_admin(): self.redirect('/?error_message=%s' % 'log-in required') used = set() for d in Document.all(): used |= set(d.pages) dead = dict() for i in MediaObject.all(): if i.key() not in used: dead[i.key()] = i for k in dead: dead[k].delete() self.redirect('/')
def get(self): self.response.headers['Cache-Control'] = "private" self.response.headers['Content-Type'] = "text/plain; charset=utf-8" user = UserInfo.get_by_key_name('user:[email protected]') docs = Document.all().filter('owner', user) docs = docs.fetch(10000) self.response.out.write("# got %d docs\n" % len(docs)) for doc in docs: self.response.out.write("%s tags[%s] date[%s] title[%s] \n" % (doc.display_url, doc.tag_comma_separated, doc.date_yyyy_mm_dd, doc.title_or_empty_string)) for page in doc.pages: self.response.out.write(" has_page: %d\n" % (page.id_or_name())) meds = MediaObject.all().filter('owner', user) meds = meds.fetch(10000) self.response.out.write("# got %d mediaobjects\n" % len(meds)) for mo in meds: self.response.out.write("%s creation[%s] size[%d]\n" % (mo.url_path, str(mo.creation), mo.size))
def get(self, media_id, unused_filename): user_info = get_user_info() if user_info is None: self.redirect('/?error_message=%s' % 'log-in required') media_object = MediaObject.get_by_id(long(media_id), parent=user_info) if media_object is None: self.redirect('/?error_message=Unidentified+object') return last_modified_string = media_object.creation.strftime( "%a, %d %b %Y %H:%M:%S GMT") self.response.headers['Cache-Control'] = "public, max-age=31536000" self.response.headers['Content-Type'] = str(media_object.guessed_type) self.response.headers['Last-Modified'] = last_modified_string expires = media_object.creation + datetime.timedelta(days=30) self.response.headers['Expires'] = expires.strftime( "%a, %d %b %Y %H:%M:%S GMT") # Caching if self.request.headers.has_key("If-Modified-Since"): ims = self.request.headers.get("If-Modified-Since") if ims == last_modified_string: self.error(304) return modsince = datetime.datetime.strptime(ims, "%a, %d %b %Y %H:%M:%S %Z") if modsince >= media_object.creation: self.error(304) return blob_key = media_object.blob.key() resize = self.request.get('resize') if resize: image = images.Image(blob_key=str(blob_key)) image.resize(width=int(resize), height=int(resize)) self.response.out.write(image.execute_transforms()) return if 'Range' in self.request.headers: self.response.headers['Range'] = self.request.headers['Range'] self.send_blob(blob_key, str(media_object.guessed_type))
def post(self): user_info = get_user_info() if user_info is None: self.redirect("/?error_message=%s" % "log-in required") scan_ids = self.request.get_all("media_id") scans = MediaObject.get(scan_ids) doc = Document( parent=user_info, owner=user_info, pages=[scan.key() for scan in scans], title=None, description=None ) def make_doc(): db.put(doc) for scan in scans: scan.lacks_document = False scan.document = doc.key() db.put(scan) db.run_in_transaction(make_doc) self.redirect(doc.display_url + "?size=1200")
def post(self): user_info = get_user_info() if user_info is None: self.redirect('/?error_message=%s' % 'log-in required') scan_ids = self.request.get_all("media_id") scans = MediaObject.get(scan_ids) doc = Document( parent=user_info, owner=user_info, pages=[scan.key() for scan in scans], title=None, description=None) def make_doc(): db.put(doc) for scan in scans: scan.lacks_document = False scan.document = doc.key() db.put(scan) db.run_in_transaction(make_doc) self.redirect(doc.display_url + "?size=1200")
def get(self, docid): user_info = get_user_info() if user_info is None: self.redirect('/?error_message=%s' % 'login required to view docs') docid = long(docid) doc = Document.get_by_id(docid, parent=user_info) if doc is None: self.response.out.write("Docid %d not found." % (docid)) return pages = MediaObject.get(doc.pages) size = self.request.get("size") if not size: size = 1200 show_single_list = long(size) > 600 self.response.out.write(template.render('doc.html', {"doc": doc, "pages": pages, "user_info": user_info, "size": size, "show_single_list": show_single_list}, debug=True))
def get(self, media_id, unused_filename): user_info = get_user_info() if user_info is None: self.redirect('/?error_message=%s' % 'log-in required') media_object = MediaObject.get_by_id(long(media_id), parent=user_info) if media_object is None: self.redirect('/?error_message=Unidentified+object') return last_modified_string = media_object.creation.strftime("%a, %d %b %Y %H:%M:%S GMT") self.response.headers['Cache-Control'] = "public, max-age=31536000" self.response.headers['Content-Type'] = str(media_object.guessed_type) self.response.headers['Last-Modified'] = last_modified_string expires = media_object.creation + datetime.timedelta(days=30) self.response.headers['Expires'] = expires.strftime("%a, %d %b %Y %H:%M:%S GMT") # Caching if self.request.headers.has_key("If-Modified-Since"): ims = self.request.headers.get("If-Modified-Since") if ims == last_modified_string: self.error(304) return modsince = datetime.datetime.strptime(ims, "%a, %d %b %Y %H:%M:%S %Z") if modsince >= media_object.creation: self.error(304) return blob_key = media_object.blob.key() resize = self.request.get('resize') if resize: image = images.Image(blob_key=str(blob_key)) image.resize(width=int(resize), height=int(resize)) self.response.out.write(image.execute_transforms()) return if 'Range' in self.request.headers: self.response.headers['Range'] = self.request.headers['Range'] self.send_blob(blob_key, str(media_object.guessed_type))
def get(self): self.response.headers['Cache-Control'] = "private" self.response.headers['Content-Type'] = "text/plain; charset=utf-8" user = UserInfo.get_by_key_name('user:[email protected]') docs = Document.all().filter('owner', user) docs = docs.fetch(10000) self.response.out.write("# got %d docs\n" % len(docs)) for doc in docs: self.response.out.write( "%s tags[%s] date[%s] title[%s] \n" % (doc.display_url, doc.tag_comma_separated, doc.date_yyyy_mm_dd, doc.title_or_empty_string)) for page in doc.pages: self.response.out.write(" has_page: %d\n" % (page.id_or_name())) meds = MediaObject.all().filter('owner', user) meds = meds.fetch(10000) self.response.out.write("# got %d mediaobjects\n" % len(meds)) for mo in meds: self.response.out.write("%s creation[%s] size[%d]\n" % (mo.url_path, str(mo.creation), mo.size))
def get(self, media_id, unused_filename): def get_param(name, error_message=None): """Convenience function to get a parameter from request. Returns: String value of field if it exists, else ''. If the key does not exist at all, it will return None. """ try: value = self.request.params[name] if isinstance(value, cgi.FieldStorage): value = value.value return value or '' except KeyError: #error_messages.append(error_message) return None user_info = get_user_info() #if user_info is None and get_param("password") == "xx": # user_info = UserInfo.get_by_key_name('user:[email protected]') if user_info is None: self.redirect('/?error_message=%s' % 'log-in required') media_object = MediaObject.get_by_id(long(media_id), parent=user_info) if media_object is None: self.redirect('/?error_message=Unidentified+object') return last_modified_string = media_object.creation.strftime( "%a, %d %b %Y %H:%M:%S GMT") self.response.headers['Cache-Control'] = "private" self.response.headers['Content-Type'] = str(media_object.guessed_type) self.response.headers['Last-Modified'] = last_modified_string expires = media_object.creation + datetime.timedelta(days=30) self.response.headers['Expires'] = expires.strftime( "%a, %d %b %Y %H:%M:%S GMT") # Caching if self.request.headers.has_key("If-Modified-Since"): ims = self.request.headers.get("If-Modified-Since") if ims == last_modified_string: self.error(304) return modsince = datetime.datetime.strptime(ims, "%a, %d %b %Y %H:%M:%S %Z") if modsince >= media_object.creation: self.error(304) return blob_key = media_object.blob.key() resize = self.request.get('resize') if resize: image = images.Image(blob_key=str(blob_key)) image.resize(width=int(resize), height=int(resize)) self.response.out.write(image.execute_transforms()) return if 'Range' in self.request.headers: self.response.headers['Range'] = self.request.headers['Range'] self.send_blob(blob_key, str(media_object.guessed_type))