def collection_list_feed(): language = session.get('lang', get_locale()) collection = controllers.get_current_collection() title = 'SciELO - %s - %s' % (collection.name, _('Últimos periódicos inseridos na coleção')) subtitle = _('10 últimos periódicos inseridos na coleção %s' % collection.name) feed = AtomFeed(title, subtitle=subtitle, feed_url=request.url, url=request.url_root) journals = controllers.get_journals_paginated(title_query='', page=1, order_by='-created', per_page=10) if not journals.items: feed.add('Nenhum periódico encontrado', url=request.url, updated=datetime.now()) for journal in journals.items: issues = controllers.get_issues_by_jid(journal.jid, is_public=True) last_issue = issues[0] if issues else None articles = [] if last_issue: articles = controllers.get_articles_by_iid(last_issue.iid, is_public=True) result_dict = OrderedDict() for article in articles: section = article.get_section_by_lang(language[:2]) result_dict.setdefault(section, []) result_dict[section].append(article) context = { 'journal': journal, 'articles': result_dict, 'language': language, 'last_issue': last_issue } feed.add(journal.title, render_template("collection/list_feed_content.html", **context), content_type='html', author=journal.publisher_name, url=url_external('main.journal_detail', url_seg=journal.url_segment), updated=journal.updated, published=journal.created) return feed.get_response()
def test_get_issues_by_jid_with_unknow_ids(self): """ Teste da função controllers.get_issue_by_jid() com um jid desconhecido, deve retornar um None. """ issues = controllers.get_issues_by_jid('02i28wjs92u') self.assertIsNone(issues)
def test_get_issues_by_jid(self): """ Teste da função controllers.get_issue_by_jid() para retornar um objeto: ``Issue``. """ issue = self._make_one() self.assertEqual(controllers.get_issues_by_jid(issue.journal.id)[0].id, issue.id)
def test_get_issues_by_jid(self): """ Teste da função controllers.get_issue_by_jid() para retornar um objeto: ``Issue``. """ issue = self._makeOne() self.assertEqual(controllers.get_issues_by_jid(issue.journal.id)[0].id, issue.id)
def issue_toc(url_seg, url_seg_issue): default_lang = current_app.config.get('BABEL_DEFAULT_LOCALE') section_filter = request.args.get('section', '', type=str) if not session.get('lang'): lang = default_lang else: lang = session.get('lang')[:2] issue = controllers.get_issue_by_url_seg(url_seg, url_seg_issue) if not issue: abort(404, _('Fascículo não encontrado')) if not issue.is_public: abort(404, ISSUE_UNPUBLISH + _(issue.unpublish_reason)) if not issue.journal.is_public: abort(404, JOURNAL_UNPUBLISH + _(issue.journal.unpublish_reason)) journal = issue.journal articles = controllers.get_articles_by_iid(issue.iid, is_public=True) if articles: sections = list(articles.item_frequencies('section').keys()) sections = sorted([k for k in sections if k is not None]) else: sections = [] issues = controllers.get_issues_by_jid(journal.id, is_public=True) if section_filter != '': articles = articles.filter(section__iexact=section_filter) issue_list = [_issue for _issue in issues] previous_issue = utils.get_prev_issue(issue_list, issue) next_issue = utils.get_next_issue(issue_list, issue) context = { 'next_issue': next_issue, 'previous_issue': previous_issue, 'journal': journal, 'issue': issue, 'articles': articles, 'sections': sections, 'section_filter': section_filter, # o primiero item da lista é o último fascículo. 'last_issue': issues[0] if issues else None } return render_template("issue/toc.html", **context)
def about_journal(url_seg): language = session.get('lang', get_locale()) journal = controllers.get_journal_by_url_seg(url_seg) if not journal: abort(404, _('Periódico não encontrado')) if not journal.is_public: abort(404, JOURNAL_UNPUBLISH + _(journal.unpublish_reason)) # A ordenação padrão da função ``get_issues_by_jid``: "-year", "-volume", "order" issues = controllers.get_issues_by_jid(journal.id, is_public=True) latest_issue = issues[0] if issues else None if latest_issue: latest_issue_legend = descriptive_short_format( title=latest_issue.journal.title, short_title=latest_issue.journal.short_title, pubdate=str(latest_issue.year), volume=latest_issue.volume, number=latest_issue.number, suppl=latest_issue.suppl_text, language=language[:2].lower()) else: latest_issue_legend = None # A lista de números deve ter mais do que 1 item para que possamos tem # anterior e próximo if len(issues) >= 2: previous_issue = issues[1] else: previous_issue = None page = controllers.get_page_by_journal_acron_lang(journal.acronym, language) context = { 'next_issue': None, 'previous_issue': previous_issue, 'journal': journal, 'latest_issue_legend': latest_issue_legend, 'last_issue': latest_issue, } if page: context['content'] = page.content if page.updated_at: context['page_updated_at'] = page.updated_at return render_template("journal/about.html", **context)
def issue_toc(url_seg, url_seg_issue): default_lang = current_app.config.get("BABEL_DEFAULT_LOCALE") section_filter = request.args.get("section", "", type=unicode) if not session.get("lang"): lang = default_lang else: lang = session.get("lang")[:2] issue = controllers.get_issue_by_url_seg(url_seg, url_seg_issue) if not issue: abort(404, _("Fascículo não encontrado")) if not issue.is_public: abort(404, ISSUE_UNPUBLISH + _(issue.unpublish_reason)) if not issue.journal.is_public: abort(404, JOURNAL_UNPUBLISH + _(issue.journal.unpublish_reason)) journal = issue.journal articles = controllers.get_articles_by_iid(issue.iid, is_public=True) if articles: sections = sorted(articles.item_frequencies("section").keys()) else: sections = [] issues = controllers.get_issues_by_jid(journal.id, is_public=True) if section_filter != "": articles = articles.filter(section__iexact=section_filter) issue_list = [_issue for _issue in issues] previous_issue = utils.get_prev_issue(issue_list, issue) next_issue = utils.get_next_issue(issue_list, issue) context = { "next_issue": next_issue, "previous_issue": previous_issue, "journal": journal, "issue": issue, "articles": articles, "sections": sections, "section_filter": section_filter, # o primiero item da lista é o último fascículo. "last_issue": issues[0] if issues else None, } return render_template("issue/toc.html", **context)
def collection_list_feed(): default_lang = current_app.config.get('BABEL_DEFAULT_LOCALE') language = session.get('lang', default_lang) or default_lang collection = controllers.get_current_collection() title = 'SciELO - %s - %s' % (collection.name, _('Últimos periódicos inseridos na coleção')) subtitle = _('10 últimos periódicos inseridos na coleção %s' % collection.name) feed = AtomFeed(title, subtitle=subtitle, feed_url=request.url, url=request.url_root) journals = controllers.get_journals_paginated( title_query='', page=1, order_by='-created', per_page=10) if not journals.items: feed.add('Nenhum periódico encontrado', url=request.url, updated=datetime.now()) for journal in journals.items: issues = controllers.get_issues_by_jid(journal.jid, is_public=True) last_issue = issues[0] if issues else None articles = [] if last_issue: articles = controllers.get_articles_by_iid(last_issue.iid, is_public=True) result_dict = OrderedDict() for article in articles: section = article.get_section_by_lang(language[:2]) result_dict.setdefault(section, []) result_dict[section].append(article) context = { 'journal': journal, 'articles': result_dict, 'language': language, 'last_issue': last_issue } feed.add(journal.title, render_template("collection/list_feed_content.html", **context), content_type='html', author=journal.publisher_name, url=url_external('main.journal_detail', url_seg=journal.url_segment), updated=journal.updated, published=journal.created) return feed.get_response()
def collection_list_feed(): default_lang = current_app.config.get("BABEL_DEFAULT_LOCALE") language = session.get("lang", default_lang) or default_lang collection = controllers.get_current_collection() title = "SciELO - %s - %s" % (collection.name, _("Últimos periódicos inseridos na coleção")) subtitle = _("10 últimos periódicos inseridos na coleção %s" % collection.name) feed = AtomFeed( title, subtitle=subtitle, logo=utils.get_resources_url(g.collection.logo_resource, "img", language), feed_url=request.url, url=request.url_root, ) journals = controllers.get_journals_paginated(title_query="", page=1, order_by="-created", per_page=10) if not journals.items: feed.add("Nenhum periódico encontrado", url=request.url, updated=datetime.now()) for journal in journals.items: issues = controllers.get_issues_by_jid(journal.jid, is_public=True) last_issue = issues[0] if issues else None articles = [] if last_issue: articles = controllers.get_articles_by_iid(last_issue.iid, is_public=True) result_dict = OrderedDict() for article in articles: section = article.get_section_by_lang(language[:2]) result_dict.setdefault(section, []) result_dict[section].append(article) context = {"journal": journal, "articles": result_dict, "language": language, "last_issue": last_issue} feed.add( journal.title, render_template("collection/list_feed_content.html", **context), content_type="html", author=journal.publisher_name, url=url_external("main.journal_detail", url_seg=journal.url_segment), updated=journal.updated, published=journal.created, ) return feed.get_response()
def journal_detail(url_seg): journal = controllers.get_journal_by_url_seg(url_seg) if not journal: abort(404, _('Periódico não encontrado')) if not journal.is_public: abort(404, JOURNAL_UNPUBLISH + _(journal.unpublish_reason)) # todo: ajustar para que seja só noticias relacionadas ao periódico default_lang = current_app.config.get('BABEL_DEFAULT_LOCALE') language = session.get('lang', default_lang) news = controllers.get_latest_news_by_lang(language) # A ordenação padrão da função ``get_issues_by_jid``: "-year", "-volume", "order" issues = controllers.get_issues_by_jid(journal.id, is_public=True) # A lista de fascículos deve ter mais do que 1 item para que possamos tem # anterior e próximo if len(issues) >= 2: previous_issue = issues[1] else: previous_issue = None # Press releases press_releases = controllers.get_press_releases({'journal': journal, 'language': language}) # Lista de seções # Mantendo sempre o idioma inglês para as seções na página incial do periódico if journal.last_issue: sections = [section for section in journal.last_issue.sections if section.language == 'en'] else: sections = [] context = { 'next_issue': None, 'previous_issue': previous_issue, 'journal': journal, 'press_releases': press_releases, # o primiero item da lista é o último fascículo. # condicional para verificar se issues contém itens 'last_issue': issues[0] if issues else None, 'sections': sections if sections else None, 'news': news } return render_template("journal/detail.html", **context)
def test_get_issues_by_jid_with_many_items(self): """ Teste da função controllers.get_issue_by_jid() com vários itens, deve deve retorna uma lista. """ journal = utils.makeOneJournal() self._make_one({'_id': '1', 'journal': journal.id}) self._make_one({'_id': '2', 'journal': journal.id}) self._make_one({'_id': '3', 'journal': journal.id}) self._make_one({'_id': '4', 'journal': journal.id}) issues = [issue.id for issue in controllers.get_issues_by_jid(journal.id)] self.assertListEqual(sorted(issues), sorted(['1', '2', '3', '4']))
def test_get_issues_by_jid_with_many_items(self): """ Teste da função controllers.get_issue_by_jid() com vários itens, deve deve retorna uma lista. """ journal = utils.makeOneJournal() self._makeOne({'_id': '1', 'journal': journal.id}) self._makeOne({'_id': '2', 'journal': journal.id}) self._makeOne({'_id': '3', 'journal': journal.id}) self._makeOne({'_id': '4', 'journal': journal.id}) issues = [issue.id for issue in controllers.get_issues_by_jid(journal.id)] self.assertListEqual(sorted(issues), sorted(['1', '2', '3', '4']))
def test_get_issues_by_jid_changing_default_order_by(self): """ Teste da função controllers.get_issue_by_jid() com vários itens, deve deve retorna uma lista considerando o valor explicito do atributo ``order_by`` """ journal = utils.makeOneJournal() self._makeOne({'_id': '1', 'journal': journal.id, 'number': '10'}) self._makeOne({'_id': '2', 'journal': journal.id, 'number': '9'}) self._makeOne({'_id': '3', 'journal': journal.id, 'number': '8'}) self._makeOne({'_id': '4', 'journal': journal.id, 'number': '7'}) issues = [issue.id for issue in controllers.get_issues_by_jid(journal.id, order_by=['number'])] self.assertListEqual(sorted(issues), sorted(['4', '3', '2', '1']))
def test_get_issues_by_jid_changing_default_order_by(self): """ Teste da função controllers.get_issue_by_jid() com vários itens, deve deve retorna uma lista considerando o valor explicito do atributo ``order_by`` """ journal = utils.makeOneJournal() self._make_one({'_id': '1', 'journal': journal.id, 'number': '10'}) self._make_one({'_id': '2', 'journal': journal.id, 'number': '9'}) self._make_one({'_id': '3', 'journal': journal.id, 'number': '8'}) self._make_one({'_id': '4', 'journal': journal.id, 'number': '7'}) issues = [issue.id for issue in controllers.get_issues_by_jid(journal.id, order_by=['number'])] self.assertListEqual(sorted(issues), sorted(['4', '3', '2', '1']))
def journal_feed(url_seg): journal = controllers.get_journal_by_url_seg(url_seg) if not journal: abort(404, _('Periódico não encontrado')) if not journal.is_public: abort(404, JOURNAL_UNPUBLISH + _(journal.unpublish_reason)) issues = controllers.get_issues_by_jid(journal.jid, is_public=True) last_issue = issues[0] if issues else None articles = controllers.get_articles_by_iid(last_issue.iid, is_public=True) feed = AtomFeed(journal.title, feed_url=request.url, url=request.url_root, subtitle=utils.get_label_issue(last_issue)) # ######### TODO: Revisar/Melhorar/Consertar ######### try: feed_language = session['lang'][:2].lower() except Exception as e: feed_language = 'pt' for article in articles: # ######### TODO: Revisar ######### article_lang = feed_language if feed_language not in article.languages: article_lang = article.original_language feed.add(article.title or 'NO TITLE', render_template("issue/feed_content.html", article=article), content_type='html', author=article.authors, url=url_external('main.article_detail', url_seg=journal.url_segment, url_seg_issue=last_issue.url_segment, url_seg_article=article.url_segment, lang_code=article_lang), updated=journal.updated, published=journal.created) return feed.get_response()
def journal_feed(url_seg): journal = controllers.get_journal_by_url_seg(url_seg) if not journal: abort(404, _('Periódico não encontrado')) if not journal.is_public: abort(404, JOURNAL_UNPUBLISH + _(journal.unpublish_reason)) issues = controllers.get_issues_by_jid(journal.jid, is_public=True) last_issue = issues[0] if issues else None articles = controllers.get_articles_by_iid(last_issue.iid, is_public=True) feed = AtomFeed(journal.title, feed_url=request.url, url=request.url_root, subtitle=utils.get_label_issue(last_issue)) feed_language = session.get('lang', get_locale()) feed_language = feed_language[:2].lower() for article in articles: # ######### TODO: Revisar ######### article_lang = feed_language if feed_language not in article.languages: article_lang = article.original_language feed.add(article.title or _('Artigo sem título'), render_template("issue/feed_content.html", article=article), content_type='html', id=article.doi or article.pid, author=article.authors, url=url_external('main.article_detail', url_seg=journal.url_segment, url_seg_issue=last_issue.url_segment, url_seg_article=article.url_segment, lang_code=article_lang), updated=journal.updated, published=journal.created) return feed.get_response()
def journal_detail(url_seg): journal = controllers.get_journal_by_url_seg(url_seg) if not journal: abort(404, _("Periódico não encontrado")) if not journal.is_public: abort(404, JOURNAL_UNPUBLISH + _(journal.unpublish_reason)) # todo: ajustar para que seja só noticias relacionadas ao periódico default_lang = current_app.config.get("BABEL_DEFAULT_LOCALE") language = session.get("lang", default_lang) news = controllers.get_latest_news_by_lang(language) # A ordenação padrão da função ``get_issues_by_jid``: "-year", "-volume", "order" issues = controllers.get_issues_by_jid(journal.id, is_public=True) # A lista de fascículos deve ter mais do que 1 item para que possamos tem # anterior e próximo if len(issues) >= 2: previous_issue = issues[1] else: previous_issue = None # Get press releases press_releases = controllers.get_press_releases({"journal": journal, "language": language}) context = { "next_issue": None, "previous_issue": previous_issue, "journal": journal, "press_releases": press_releases, # o primiero item da lista é o último fascículo. # condicional para verificar se issues contém itens "last_issue": issues[0] if issues else None, "news": news, } return render_template("journal/detail.html", **context)
def journal_feed(url_seg): journal = controllers.get_journal_by_url_seg(url_seg) if not journal: abort(404, _("Periódico não encontrado")) if not journal.is_public: abort(404, JOURNAL_UNPUBLISH + _(journal.unpublish_reason)) issues = controllers.get_issues_by_jid(journal.jid, is_public=True) last_issue = issues[0] if issues else None articles = controllers.get_articles_by_iid(last_issue.iid, is_public=True) feed = AtomFeed( journal.title, feed_url=request.url, url=request.url_root, subtitle=utils.get_label_issue(last_issue) ) # ######### TODO: Revisar/Melhorar/Consertar ######### try: feed_language = session["lang"][:2].lower() except Exception, e: feed_language = "pt"
def about_journal(url_seg): language = session.get('lang', get_locale()) journal = controllers.get_journal_by_url_seg(url_seg) if not journal: abort(404, _('Periódico não encontrado')) if not journal.is_public: abort(404, JOURNAL_UNPUBLISH + _(journal.unpublish_reason)) # A ordenação padrão da função ``get_issues_by_jid``: "-year", "-volume", "order" issues = controllers.get_issues_by_jid(journal.id, is_public=True) # A lista de números deve ter mais do que 1 item para que possamos tem # anterior e próximo if len(issues) >= 2: previous_issue = issues[1] else: previous_issue = None page = controllers.get_page_by_journal_acron_lang(journal.acronym, language) context = { 'next_issue': None, 'previous_issue': previous_issue, 'journal': journal, # o primiero item da lista é o último número. # condicional para verificar se issues contém itens 'last_issue': issues[0] if issues else None, } if page: context['content'] = page.content if page.updated_at: context['page_updated_at'] = page.updated_at return render_template("journal/about.html", **context)
def about_journal(url_seg): default_lang = current_app.config.get("BABEL_DEFAULT_LOCALE") language = session.get("lang", default_lang) or default_lang journal = controllers.get_journal_by_url_seg(url_seg) if not journal: abort(404, _("Periódico não encontrado")) if not journal.is_public: abort(404, JOURNAL_UNPUBLISH + _(journal.unpublish_reason)) # A ordenação padrão da função ``get_issues_by_jid``: "-year", "-volume", "order" issues = controllers.get_issues_by_jid(journal.id, is_public=True) # A lista de fascículos deve ter mais do que 1 item para que possamos tem # anterior e próximo if len(issues) >= 2: previous_issue = issues[1] else: previous_issue = None page = controllers.get_page_by_journal_acron_lang(journal.acronym, language) context = { "next_issue": None, "previous_issue": previous_issue, "journal": journal, # o primiero item da lista é o último fascículo. # condicional para verificar se issues contém itens "last_issue": issues[0] if issues else None, } if page: context["content"] = page.content return render_template("journal/about.html", **context)
def issue_toc(url_seg, url_seg_issue): # idioma da sessão language = session.get('lang', get_locale()) section_filter = request.args.get('section', '', type=str) issue = controllers.get_issue_by_url_seg(url_seg, url_seg_issue) if issue and issue.journal: issue_legend = descriptive_short_format( title=issue.journal.title, short_title=issue.journal.short_title, pubdate=str(issue.year), volume=issue.volume, number=issue.number, suppl=issue.suppl_text, language=language[:2].lower()) if not issue: abort(404, _('Número não encontrado')) if not issue.is_public: abort(404, ISSUE_UNPUBLISH + _(issue.unpublish_reason)) if not issue.journal.is_public: abort(404, JOURNAL_UNPUBLISH + _(issue.journal.unpublish_reason)) journal = issue.journal articles = controllers.get_articles_by_iid(issue.iid, is_public=True) if articles: sections = list(articles.item_frequencies('section').keys()) sections = sorted([k for k in sections if k is not None]) else: sections = [] issues = controllers.get_issues_by_jid(journal.id, is_public=True) if section_filter != '': articles = articles.filter(section__iexact=section_filter) issue_list = [_issue for _issue in issues] previous_issue = utils.get_prev_issue(issue_list, issue) next_issue = utils.get_next_issue(issue_list, issue) for article in articles: article_text_languages = [doc['lang'] for doc in article.htmls] article_pdf_languages = [(doc['lang'], doc['url']) for doc in article.pdfs] setattr(article, "article_text_languages", article_text_languages) setattr(article, "article_pdf_languages", article_pdf_languages) context = { 'next_issue': next_issue, 'previous_issue': previous_issue, 'journal': journal, 'issue': issue, 'issue_legend': issue_legend, 'articles': articles, 'sections': sections, 'section_filter': section_filter, # o primiero item da lista é o último número. 'last_issue': issues[0] if issues else None } return render_template("issue/toc.html", **context)
def journal_detail(url_seg): journal = controllers.get_journal_by_url_seg(url_seg) if not journal: abort(404, _('Periódico não encontrado')) if not journal.is_public: abort(404, JOURNAL_UNPUBLISH + _(journal.unpublish_reason)) # todo: ajustar para que seja só noticias relacionadas ao periódico language = session.get('lang', get_locale()) news = controllers.get_latest_news_by_lang(language) # A ordenação padrão da função ``get_issues_by_jid``: "-year", "-volume", "order" issues = controllers.get_issues_by_jid(journal.id, is_public=True) # A lista de números deve ter mais do que 1 item para que possamos tem # anterior e próximo if len(issues) >= 2: previous_issue = issues[1] else: previous_issue = None # Press releases press_releases = controllers.get_press_releases({ 'journal': journal, 'language': language }) # Lista de seções # Mantendo sempre o idioma inglês para as seções na página incial do periódico if journal.last_issue and journal.current_status == "current": sections = [ section for section in journal.last_issue.sections if section.language == 'en' ] recent_articles = controllers.get_recent_articles_of_issue( journal.last_issue.iid, is_public=True) else: sections = [] recent_articles = [] if len(issues) > 0: latest_issue = issues[0] latest_issue_legend = descriptive_short_format( title=latest_issue.journal.title, short_title=latest_issue.journal.short_title, pubdate=str(latest_issue.year), volume=latest_issue.volume, number=latest_issue.number, suppl=latest_issue.suppl_text, language=language[:2].lower()) else: latest_issue = None latest_issue_legend = '' context = { 'next_issue': None, 'previous_issue': previous_issue, 'journal': journal, 'press_releases': press_releases, 'recent_articles': recent_articles, 'journal_study_areas': [ STUDY_AREAS.get(study_area.upper()) for study_area in journal.study_areas ], # o primiero item da lista é o último número. # condicional para verificar se issues contém itens 'last_issue': latest_issue, 'latest_issue_legend': latest_issue_legend, 'sections': sections if sections else None, 'news': news } return render_template("journal/detail.html", **context)