Example #1
0
 def tx():
     db.delete(doc)
     scans = MediaObject.get(doc.pages)
     for scan in scans:
         scan.lacks_document = True
         scan.document = None
         db.put(scan)
Example #2
0
 def tx():
   db.delete(doc)
   scans = MediaObject.get(doc.pages)
   for scan in scans:
     scan.lacks_document = True
     scan.document = None
     db.put(scan)
Example #3
0
 def tx():
     db.delete(doc)
     scans = MediaObject.get(doc.pages)
     for scan in scans:
         user.media_objects -= 1
         db.delete(scan)
     db.put(user)
Example #4
0
 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,
         )
     )
Example #5
0
 def tx():
   db.delete(doc)
   scans = MediaObject.get(doc.pages)
   for scan in scans:
     user.media_objects -= 1
     db.delete(scan)
   db.put(user)
Example #6
0
  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))
Example #7
0
        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)
Example #8
0
    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))
Example #9
0
    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)
Example #10
0
  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))
Example #11
0
  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('/')
Example #12
0
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
Example #13
0
  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('/')
Example #14
0
  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))
Example #15
0
    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))
Example #16
0
    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")
Example #17
0
 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")
Example #18
0
 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))
Example #19
0
  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))