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']
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)
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)
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)
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)
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
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) == []
def sponsorship_counts(self): return {'sponsorships': len(get_sponsored_editions(self.user))}