Example #1
0
    def get(self):
        email = auth.get_email_from_cookies(self.request.cookies)
        user = auth.user.User.get_by_email(email)
        if not user:
            self.redirect('/login')
            return

        template = utils.get_jinja_env().get_template('tags.html')
        context = {'user': user}
        helper = books.TagHelper(user)

        tag_name = self.request.get('t')
        if tag_name:
            # a specific tag to display
            isbns = helper.isbns(tag_name)
            if isbns is None:
                params = {
                    'msg': 'Invalid tag name: "' + codecs.encode(tag_name, 'utf-8') + '"'
                }
                self.redirect('/error?' + urllib.urlencode(params))
                return

            self._render_tag_books(user, tag_name, helper, context)
        else:
            self._render_tags_info(user, helper, context)

        self.response.out.write(template.render(context))
        return
Example #2
0
 def _render_no_such_book(self, douban_id):
     """ Render a NO SUCH BOOK msg onto web page. Including the corresponding douban_id """
     template = utils.get_jinja_env().get_template("random.html")
     context = {
         'douban_id': douban_id,
         'user': self.user
     }
     self.response.out.write(template.render(context))
     return
Example #3
0
    def get(self):
        email = auth.get_email_from_cookies(self.request.cookies)
        user = auth.user.User.get_by_email(email)

        template = utils.get_jinja_env().get_template('404.html')
        context = {
            'user': user
        }
        self.response.out.write(template.render(context))
Example #4
0
    def get(self):
        email = auth.get_email_from_cookies(self.request.cookies)
        user = auth.user.User.get_by_email(email)

        msg = self.request.get("msg")
        template = utils.get_jinja_env().get_template("error.html")
        context = {
            'msg': msg,
            'user': user
        }
        self.response.out.write(template.render(context))
Example #5
0
    def get(self):
        email = auth.get_email_from_cookies(self.request.cookies)
        user = auth.user.User.get_by_email(email)
        if not user:
            self.redirect('/login')
            return

        template = utils.get_jinja_env().get_template('guess.html')
        context = {'user': user}

        self._fill(context, user)
        self.response.out.write(template.render(context))
        return
Example #6
0
    def get(self):
        email = auth.get_email_from_cookies(self.request.cookies)
        user = auth.user.User.get_by_email(email)
        if not user:
            self.redirect('/login')
            return

        isbn = self.request.path.split('/book/')[1]
        try:
            utils.validate_isbn(isbn)
        except Exception:
            msg = "Invalid ISBN: " + isbn
            params = {'msg': msg}
            self.redirect('/error?' + urllib.urlencode(params))
            return

        template = utils.get_jinja_env().get_template('onebook.html')
        context = {
            'user': user
        }

        reload = self.request.get('reload') == 'True'
        if reload:
            # force to reload from douban..
            try:
                full = self._load(user, isbn, reload=True, tjlib=True)
            except Exception as err:
                params = {'msg': err}
                self.redirect('/error?%s' % urllib.urlencode(params))
                return
        else:
            full = self._load(user, isbn, reload=False)
            if full.is_empty():
                # no such data in local datastore, try fetch
                try:
                    full = self._load(user, isbn, reload=True, tjlib=True)
                except Exception as err:
                    params = {'msg': err}
                    self.redirect('/error?%s' % urllib.urlencode(params))
                    return

        context['title'] = full.book.title
        context['book'] = full.book
        context['booklist_name'] = full.booklist_name
        context['rating'] = full.rating
        context['tags'] = full.tags
        context['comment'] = full.comment

        self.response.out.write(template.render(context))
        return
Example #7
0
    def get(self):
        email = auth.get_email_from_cookies(self.request.cookies)
        user = auth.user.User.get_by_email(email)
        if not user:
            self.redirect('/login')
            return

        template = utils.get_jinja_env().get_template('whatsnext.html')
        ctx = {'user': user}

        bl = booklist.BookList.get_or_create(user, booklist.LIST_INTERESTED)
        if bl.size() == 0:
            # no books in interested list
            ctx['no_books'] = True
        else:
            # recommend next
            ctx['no_books'] = False
            self._prepare_next(ctx, user, bl)

        self.response.out.write(template.render(ctx))
        return
Example #8
0
    def get(self):
        action = self.request.get('action')
        if action == 'clear':
            # clear all data in db
            msg = self._clear()
            user = None
        elif action == 'load':
            email = auth.get_email_from_cookies(self.request.cookies)
            user = auth.user.User.get_by_email(email)
            if not user:
                self.redirect('/login')
                return

            # load books from douban
            # these books are for defense only..
            ids = ["20381804", "10555435", "1432683"]
            for douban_id in ids:
                if Book.get_by_douban_id(douban_id) is None:
                    # load it!
                    b = douban.get_book_all_by_id(douban_id, user)
                    b.merge_into_datastore(user)
            msg = "DONE"
        else:
            # default case
            email = auth.get_email_from_cookies(self.request.cookies)
            user = auth.user.User.get_by_email(email)
            if not user:
                self.redirect('/login')
                return
            msg = self._test(user)

        template = utils.get_jinja_env().get_template('test.html')
        context = {
            'user': user,
            'msg': msg
        }
        self.response.out.write(template.render(context))
        return
Example #9
0
if __name__ == "__main__":

    parser = argparse.ArgumentParser(parents=[utils.get_parent_parser()])
    parser.add_argument('--hit_properties_file', type=argparse.FileType('r'))
    parser.add_argument('--html_template')
    parser.add_argument('--input_json_file', type=argparse.FileType('r'))
    args = parser.parse_args()

    # connect to MTurk
    mtc = utils.get_mturk_connection_from_args(args)

    # load hit properties
    hit_properties = json.load(args.hit_properties_file)
    hit_properties['Reward'] = str(hit_properties['Reward'])

    # prepare qualifications
    utils.setup_qualifications(hit_properties, mtc)

    frame_height = hit_properties.pop('FrameHeight')
    env = utils.get_jinja_env(args.config)
    template = env.get_template(args.html_template)

    if args.hit_ids_file is None:
        print('Need to input a hit_ids_file')
        sys.exit()
    if os.path.isfile(args.hit_ids_file):
        print('hit_ids_file already exists')
        sys.exit()

    create(args)
Example #10
0
    def get(self):
        """ Get method: Ask for data for a particular booklist. """
        email = auth.get_email_from_cookies(self.request.cookies)
        user = auth.user.User.get_by_email(email)
        if not user:
            self.redirect('/login')
            return

        template = utils.get_jinja_env().get_template("booklist.html")
        bl = booklist.BookList.get_or_create(user, self.list_type)
        context = {
            'user': user,
            'title': self.title,
            'active_nav': self.active_nav,
            'booklist': bl
        }

        import_started = self.request.get('import_started')
        if import_started:
            # an async Task has just been added to import from douban
            context['import_started'] = True

        start_str = self.request.get('start')
        if start_str:
            try:
                start = int(start_str) - 1
                if start < 0:
                    start = 0
            except Exception:
                start = 0
        else:
            start = 0

        # there are 4 types now:
        # time, rating, voted, pages
        sort_by = self.request.get('sortby')
        if not sort_by:
            sort_by = 'time'
        context['sortby'] = sort_by

        if sort_by == 'time':
            bookbriefs = self._prepare_by_time(user, bl, start)
        elif sort_by == 'public_rating':
            bookbriefs = self._prepare_by_public_rating(user, bl, start)
        elif sort_by == 'user_rating':
            bookbriefs = self._prepare_by_user_rating(user, bl, start)
        elif sort_by == 'rated_amount':
            bookbriefs = self._prepare_by_rated_amount(user, bl, start)
        elif sort_by == 'pages':
            bookbriefs = self._prepare_by_pages(user, bl, start)
        else:
            bookbriefs = None

        if bookbriefs:
            context['bookbriefs'] = bookbriefs
            context['start'] = start + 1
            context['end'] = len(bookbriefs) + start - 1 + 1
            context['prev_url'] = self._prepare_prev_url(start, sort_by)
            context['next_url'] = self._prepare_next_url(start, bl.size(), sort_by)

        self.response.out.write(template.render(context))
        return
Example #11
0
 def _render(self, dic={}):
     """ Render the log-in page with @param dic. """
     jinja_env = utils.get_jinja_env()
     template = jinja_env.get_template('login.html')
     self.response.out.write(template.render(dic))
Example #12
0
 def _render(self, dic={}):
     """ Render the sign-up page with @param dic. """
     jinja_env = utils.get_jinja_env()
     template = jinja_env.get_template("signup.html")
     self.response.out.write(template.render(dic))