Beispiel #1
0
    def post(self):
        enforce_login(self)
        if self.request.get(
                'license') is not None and not users.is_current_user_admin():
            self.redirect("/")
        epub = db.get(self.request.get('epub_key'))
        if not users.is_current_user_admin() and epub.entry_count() > 1:
            self.redirect("/")
        epub.language = self.request.get('language')
        epub.title = self.request.get('title')
        epub.creator = self.request.get('creator')
        epub.publisher = self.request.get('publisher')
        epub.rights = self.request.get('rights')
        epub.contributor = self.request.get('contributor')
        epub.identifier = self.request.get('identifier')
        epub.description = self.request.get('description')
        epub.date = self.request.get('date')

        license = self.request.get('license')
        if epub.license != license:
            if license == "Public Domain" or license == "Creative Commons":
                unpacker = unpack.Unpacker()
                unpacker.index_epub(epub, "public")
            else:
                index = search.Index("public")
                opts = search.QueryOptions(limit=1000, ids_only=True)
                query = search.Query(query_string="book:%s" % epub.key(),
                                     options=opts)
                docs = index.search(query)
                for doc in docs:
                    index.remove(doc.doc_id)

        epub.license = self.request.get('license')
        epub.put()
        self.redirect("/book/" + str(epub.key().id()))
Beispiel #2
0
    def post(self):
        enforce_login(self)
        upload_files = self.get_uploads(
            'file')  # 'file' is file upload field in the form
        blob_info = upload_files[0]

        epub = model.ePubFile(blob=blob_info, blob_key=blob_info.key())
        epub.put()
        entry = model.LibraryEntry(epub=epub,
                                   user=get_current_session().get("account"))
        entry.put()

        unpacker = unpack.Unpacker()
        existing, error = unpacker.unpack(epub)

        if error is None:
            epub_key = epub.key() if existing is None else existing.key()
            logging.info("Indexing epub with key %s" % epub_key)
            taskqueue.add(queue_name='index',
                          url='/index',
                          countdown=2,
                          params={
                              'key': epub_key,
                              'user': get_current_session().get("account")
                          })
            epub.get_cover()
            self.redirect("/book/" + str(epub.key().id()))
        else:
            db.delete(entry)
            blobstore.delete(epub.blob.key())
            db.delete(epub)
            error = "Invalid EPUB file" if error.find(
                "File is not a zip") > 0 else error
            respondWithMessage(self, "Upload error: " + error)
Beispiel #3
0
 def post(self):
     quote = model.Quote(epub=model.ePubFile.get_by_id(
         long(self.request.get('epub'))),
                         file=db.get(self.request.get('file')),
                         html=db.Text(self.request.get('html')),
                         user=get_current_session().get("account"))
     quote.put()
     unpacker = unpack.Unpacker()
     unpacker.index_quote(quote)
     self.response.headers['Content-Type'] = 'application/json'
     self.response.out.write('{"result":"ok","url":"/quote/%s"}' %
                             quote.key().id())
Beispiel #4
0
 def post(self):
     user = get_current_session().get("account")
     user = self.request.get('user') if user is None else str(user)
     key = self.request.get('key')
     epub = db.get(key)
     if epub is None:
         logging.info("Unable to find epub with key %s" % key)
         return
     unpacker = unpack.Unpacker()
     unpacker.index_epub(epub, "private", user)
     if epub.license == "Public Domain" or epub.license == "Creative Commons":
         unpacker.index_epub(epub, "public")
Beispiel #5
0
 def get(self):
     components = self.request.path.split("/")
     if len(components) > 1:
         id = components[2]
     epub = model.ePubFile.get_by_id(long(id))
     enforce_rights(self, epub)
     if len(components) < 4:
         self.redirect("/book/" + id)
         return
     path = urllib.unquote_plus("/".join(components[3:]))
     internal = epub.internals().filter("path = ", path).get()
     renderer = unpack.Unpacker()
     self.response.headers['Content-Type'] = renderer.contentHeader(
         internal)
     self.response.out.write(renderer.content(internal))
Beispiel #6
0
 def get(self):
     key = self.request.get('key')
     epub = db.get(key)
     unpacker = unpack.Unpacker()
     unpacker.unpack_internal(epub)