Example #1
0
    def test_get_sponsored_editions(self, monkeypatch):
        user = storage(key='/person/mekBot')

        monkeypatch.setattr(sponsorships, 'get_internet_archive_id', lambda user_key: '@username')
        assert sponsorships.get_internet_archive_id(user) == '@username'
        monkeypatch.setattr(sponsorships, 'get_contact_id_by_username', lambda archive_id: None)
        assert sponsorships.get_contact_id_by_username('@username') is None
        assert sponsorships.get_sponsored_editions(user) == []

        monkeypatch.setattr(sponsorships, 'get_contact_id_by_username', lambda archive_id: '123')
        assert sponsorships.get_contact_id_by_username('@username') == '123'
        monkeypatch.setattr(sponsorships, 'get_sponsorships_by_contact_id', lambda contact_id: ['fake_data'])
        assert sponsorships.get_sponsored_editions(user) == ['fake_data']
Example #2
0
 def GET(self, username, key='loans'):
     """check if user's reading log is public"""
     i = web.input(page=1)
     user = web.ctx.site.get('/people/%s' % username)
     if not user:
         return render.notfound("User %s"  % username, create=False)
     is_public = user.preferences().get('public_readlog', 'no') == 'yes'
     logged_in_user = accounts.get_current_user()
     if is_public or logged_in_user and logged_in_user.key.split('/')[-1] == username:
         readlog = ReadingLog(user=user)
         sponsorships = get_sponsored_editions(user)
         if key == 'sponsorships':
             books = (web.ctx.site.get(
                 web.ctx.site.things({
                     'type': '/type/edition',
                     'isbn_%s' % len(s['isbn']): s['isbn']
                 })[0]) for s in sponsorships)
         else:
             books = readlog.get_works(key, page=i.page)
         return render['account/books'](
             books, key, sponsorship_count=len(sponsorships),
             reading_log_counts=readlog.reading_log_counts, lists=readlog.lists,
             user=user, logged_in_user=logged_in_user, public=is_public
         )
     raise web.seeother(user.key)
Example #3
0
    def render(self, page=1, sort='desc', list=None):
        if not self.user:
            return render.notfound("User %s" % self.username, create=False)
        logged_in_user = accounts.get_current_user()
        is_logged_in_user = (logged_in_user
                             and logged_in_user.key.split('/')[-1]
                             == self.username)
        is_public = self.user.preferences().get('public_readlog',
                                                'no') == 'yes'

        data = None

        if is_logged_in_user and self.key in self.ALL_KEYS:
            self.counts.update(PatronBooknotes.get_counts(self.username))
            sponsorships = get_sponsored_editions(self.user)
            self.counts['sponsorships'] = len(sponsorships)

            if self.key == 'sponsorships':
                data = add_availability(
                    web.ctx.site.get_many([
                        '/books/%s' % doc['openlibrary_edition']
                        for doc in sponsorships
                    ])) if sponsorships else None
            elif self.key in self.READING_LOG_KEYS:
                data = add_availability(
                    self.readlog.get_works(self.key,
                                           page=page,
                                           sort='created',
                                           sort_order=sort),
                    mode="openlibrary_work",
                )
            elif self.key == 'list':
                data = list

            else:
                data = self._prepare_data(logged_in_user)
        elif self.key in self.READING_LOG_KEYS and is_public:
            data = add_availability(
                self.readlog.get_works(self.key,
                                       page=page,
                                       sort='created',
                                       sort_order=sort),
                mode="openlibrary_work",
            )

        if data is not None:
            return render['account/books'](
                data,
                self.key,
                self.counts,
                logged_in_user=logged_in_user,
                user=self.user,
                lists=self.lists,
                public=is_public,
                owners_page=is_logged_in_user,
            )

        raise web.seeother(self.user.key)
Example #4
0
 def GET(self, username, key='loans'):
     """check if user's reading log is public"""
     i = web.input(page=1)
     user = web.ctx.site.get('/people/%s' % username)
     if not user:
         return render.notfound("User %s"  % username, create=False)
     if user.preferences().get('public_readlog', 'no') == 'yes':
         readlog = ReadingLog(user=user)
         books = readlog.get_works(key, page=i.page)
         sponsorships = get_sponsored_editions(user)
         page = render['account/books'](
             books, key, sponsorship_count=len(sponsorships),
             reading_log_counts=readlog.reading_log_counts,
             lists=readlog.lists, user=user)
         page.v2 = True
         return page
     raise web.seeother(user.key)
Example #5
0
    def GET(self, username, key='loans'):
        """check if user's reading log is public"""
        i = web.input(page=1, sort='desc')
        user = web.ctx.site.get('/people/%s' % username)
        if not user:
            return render.notfound("User %s" % username, create=False)
        is_public = user.preferences().get('public_readlog', 'no') == 'yes'
        logged_in_user = accounts.get_current_user()
        is_logged_in_user = (logged_in_user
                             and logged_in_user.key.split('/')[-1] == username)
        if is_public or is_logged_in_user:
            readlog = ReadingLog(user=user)
            sponsorships = get_sponsored_editions(user)
            if key == 'sponsorships':
                books = (web.ctx.site.get(
                    web.ctx.site.things({
                        'type': '/type/edition',
                        'isbn_%s' % len(s['isbn']): s['isbn']
                    })[0]) for s in sponsorships)
            elif key == 'notes' and is_logged_in_user:
                books = PatronBooknotes(user).get_notes(page=int(i.page))
            elif key == 'observations' and is_logged_in_user:
                books = PatronBooknotes(user).get_observations(
                    page=int(i.page))
            else:
                books = add_availability(readlog.get_works(key,
                                                           page=i.page,
                                                           sort='created',
                                                           sort_order=i.sort),
                                         mode="openlibrary_work")
            booknotes_counts = PatronBooknotes.get_counts(username)

            return render['account/books'](
                books,
                key,
                sponsorship_count=len(sponsorships),
                reading_log_counts=readlog.reading_log_counts,
                lists=readlog.lists,
                user=user,
                logged_in_user=logged_in_user,
                public=is_public,
                sort_order=str(i.sort),
                booknotes_counts=booknotes_counts)
        raise web.seeother(user.key)
Example #6
0
 def GET(self, key='loans'):
     i = web.input(page=1)
     user = accounts.get_current_user()
     is_public = user.preferences().get('public_readlog', 'no') == 'yes'
     readlog = ReadingLog()
     sponsorships = get_sponsored_editions(user)
     if key == 'sponsorships':
         books = (web.ctx.site.get(
             web.ctx.site.things({
                 'type': '/type/edition',
                 'isbn_%s' % len(s['isbn']): s['isbn']
             })[0]) for s in sponsorships)
     else:
         books = readlog.get_works(key, page=i.page)
     page = render['account/books'](
         books, key, sponsorship_count=len(sponsorships),
         reading_log_counts=readlog.reading_log_counts, lists=readlog.lists,
         user=user, public=is_public
     )
     page.v2 = True
     return page
Example #7
0
    def test_get_sponsored_editions(self, monkeypatch):
        user = storage(key='/person/mekBot')

        monkeypatch.setattr(sponsorships, 'get_internet_archive_id',
                            lambda user_key: '@username')
        assert sponsorships.get_internet_archive_id(user) == '@username'

        class RequestMock(dict):
            def __init__(self, *arg):
                super().__init__(*arg)

            def json(self):
                return self

        monkeypatch.setattr(
            sponsorships.requests, 'get',
            lambda url, **kwargs: RequestMock({'response': {
                'docs': []
            }}))

        assert sponsorships.get_sponsored_editions(user) == []
Example #8
0
 def sponsorship_counts(self):
     return {'sponsorships': len(get_sponsored_editions(self.user))}