def get_article_by_pid_v2(v2, **kwargs): """ Retorna um artigo considerando os parâmetros ``v2``. - ``v2``: string, contendo o PID do artigo versão 2, seja pid ou aop_pid """ if not v2: raise ValueError(__('Obrigatório um pid.')) v2 = v2.upper() articles = Article.objects(pid=v2, is_public=True, **kwargs) if articles: return articles[0] articles = Article.objects(aop_pid=v2, is_public=True, **kwargs) if articles: return articles[0] articles = Article.objects(scielo_pids__other=v2, is_public=True, **kwargs) if articles: return articles[0] return None
def count_elements_by_type_and_visibility(type, public_only=False): """ Retorna a quantidade de registros indicado pelo @type. @params: - ``type``: O tipo de elemento que queremos contabilizar. Deve ser "journal" ou "issue" ou "article"; - ``public_only``: Se for True, filtra na contagem somente os registros públicos, caso contrario contabliza todos (públicos e não publicos); """ if type == 'journal': if public_only: return Journal.objects(is_public=True).count() else: return Journal.objects.count() elif type == 'issue': if public_only: return Issue.objects(is_public=True).count() else: return Issue.objects.count() elif type == 'article': if public_only: return Article.objects(is_public=True).count() else: return Article.objects.count() elif type == 'news': return News.objects.count() elif type == 'sponsor': return Sponsor.objects.count() elif type == 'pressrelease': return PressRelease.objects.count() else: raise ValueError("Parâmetro 'type' errado, tente: 'journal' ou 'issue' ou 'article'.")
def count_elements_by_type_and_visibility(type, public_only=False): """ Retorna a quantidade de registros indicado pelo @type. @params: - ``type``: O tipo de elemento que queremos contabilizar. Deve ser "journal" ou "issue" ou "article"; - ``public_only``: Se for True, filtra na contagem somente os registros públicos, caso contrario contabliza todos (públicos e não publicos); """ if type == 'journal': if public_only: return Journal.objects(is_public=True).count() else: return Journal.objects.count() elif type == 'issue': if public_only: return Issue.objects(is_public=True).count() else: return Issue.objects.count() elif type == 'article': if public_only: return Article.objects(is_public=True).count() else: return Article.objects.count() else: raise ValueError(u"Parâmetro 'type' errado, tente: 'journal' ou 'issue' ou 'article'.")
def filter_articles_by_ids(ids): """ Retorna uma lista de artigos aonde o atributo ``iid`` de cada um deles pertence a lista do parâmetro: ``iids`` - ``iids``: lista de iids de fascículos a serem filtrados. """ return Article.objects(_id__in=ids)
def get_articles_by_iid(iid, is_public=True): """ Retorna uma lista de artigos aonde o atributo ``iid`` de cada um deles é igual ao parâmetro: ``iid``. - ``iid``: chave primaria de fascículo para escolher os artigos. """ return Article.objects(issue=iid, is_public=is_public)
def get_article_by_aid(aid, **kwargs): """ Retorna um artigo considerando os parâmetros ``aid`` e ``kwargs``. - ``aid``: string, chave primaria do artigo (ex.: ``14a278af8d224fa2a09a901123ca78ba``); - ``kwargs``: parâmetros de filtragem. """ return Article.objects(aid=aid, **kwargs).first()
def get_articles_by_iid(iid, **kwargs): """ Retorna uma lista de artigos aonde o atributo ``iid`` de cada um deles é igual ao parâmetro: ``iid``. - ``iid``: chave primaria de fascículo para escolher os artigos. - ``kwargs``: parâmetros de filtragem. """ return Article.objects(issue=iid, **kwargs)
def get_article_by_oap_pid(aop_pid, **kwargs): """ Retorna um artigo considerando os parâmetros ``aop_pid``. - ``aop_pid``: string, contendo o OAP_PID do artigo. """ if not aop_pid: raise ValueError(__('Obrigatório um aop_pid.')) return Article.objects(aop_pid=aop_pid, **kwargs).first()
def get_article_by_aid(aid, **kwargs): """ Retorna um artigo considerando os parâmetros ``aid`` e ``kwargs``. - ``aid``: string, chave primaria do artigo (ex.: ``14a278af8d224fa2a09a901123ca78ba``); - ``kwargs``: parâmetros de filtragem. """ if not aid: raise ValueError(__('Obrigatório um aid.')) return Article.objects(aid=aid, **kwargs).first()
def get_article_by_url_seg(url_seg_article, **kwargs): """ Retorna um artigo considerando os parâmetros ``url_seg_article`` e ``kwargs``. - ``url_seg_article``: string, segmento do url do artigo; - ``kwargs``: parâmetros de filtragem. """ if not url_seg_article: raise ValueError(__(u'Obrigatório um url_seg_article.')) return Article.objects(url_segment=url_seg_article, **kwargs).first()
def get_article_by_url_seg(url_seg_article, **kwargs): """ Retorna um artigo considerando os parâmetros ``url_seg_article`` e ``kwargs``. - ``url_seg_article``: string, segmento do url do artigo; - ``kwargs``: parâmetros de filtragem. """ if not url_seg_article: raise ValueError(__('Obrigatório um url_seg_article.')) return Article.objects(url_segment=url_seg_article, **kwargs).first()
def get_article_by_aid(aid, **kwargs): """ Retorna um artigo considerando os parâmetros ``aid`` e ``kwargs``. - ``aid``: string, chave primaria do artigo (ex.: ``14a278af8d224fa2a09a901123ca78ba``); - ``kwargs``: parâmetros de filtragem. """ if not aid: raise ValueError(__(u'Obrigatório um aid.')) return Article.objects(aid=aid, **kwargs).first()
def get_article_by_aid(aid, journal_url_seg, lang=None, gs_abstract=False, **kwargs): """ Retorna um artigo considerando os parâmetros ``aid`` e ``kwargs``. - ``aid``: string, chave primaria do artigo (ex.: ``14a278af8d224fa2a09a901123ca78ba``); - ``kwargs``: parâmetros de filtragem. """ if not aid: raise ValueError(__('Obrigatório um aid.')) articles = Article.objects(pk=aid, is_public=True, **kwargs) if not articles: articles = Article.objects( scielo_pids__other=aid, is_public=True, **kwargs) if articles: article = articles[0] else: raise ArticleNotFoundError(aid) if not article.issue.is_public: raise IssueIsNotPublishedError(article.issue.unpublish_reason) if not article.journal.is_public: raise JournalIsNotPublishedError(article.journal.unpublish_reason) if article.journal.url_segment != journal_url_seg: raise ArticleJournalNotFoundError(article.journal.url_segment) if gs_abstract: abstract_languages = _abstract_languages(article.abstracts) if not abstract_languages or (lang not in abstract_languages): raise ArticleAbstractNotFoundError(lang) else: lang = lang or article.original_language valid_langs = [article.original_language] + article.languages if lang not in valid_langs: raise ArticleLangNotFoundError(str(valid_langs)) return article
def get_article_by_scielo_pid(scielo_pid, **kwargs): """ Retorna um artigo considerando os parâmetros ``scielo_pid``. - ``scielo_pid``: string, contendo o PID do artigo versão 1, 2 ou 3 """ if not scielo_pid: raise ValueError(__('Obrigatório um pid.')) return Article.objects( (Q(scielo_pids__v1=scielo_pid) | Q(scielo_pids__v2=scielo_pid) | Q(scielo_pids__v3=scielo_pid)), **kwargs).first()
def get_article_by_issue_article_seg(iid, url_seg_article, **kwargs): """ Retorna um artigo considerando os parâmetros ``iid``, ``url_seg_article`` e ``kwargs``. - ``iid``: string, id do número; - ``url_seg_article``: string, segmento do url do artigo; - ``kwargs``: parâmetros de filtragem. """ if not iid and url_seg_article: raise ValueError(__('Obrigatório um iid and url_seg_article.')) return Article.objects(issue=iid, url_segment=url_seg_article, **kwargs).first()
def get_article_by_issue_article_seg(iid, url_seg_article, **kwargs): """ Retorna um artigo considerando os parâmetros ``iid``, ``url_seg_article`` e ``kwargs``. - ``iid``: string, id do fascículo; - ``url_seg_article``: string, segmento do url do artigo; - ``kwargs``: parâmetros de filtragem. """ if not iid and url_seg_article: raise ValueError(__(u'Obrigatório um iid and url_seg_article.')) return Article.objects(issue=iid, url_segment=url_seg_article, **kwargs).first()
def get_articles_by_iid(iid, **kwargs): """ Retorna uma lista de artigos aonde o atributo ``iid`` de cada um deles é igual ao parâmetro: ``iid``. - ``iid``: chave primaria de fascículo para escolher os artigos. - ``kwargs``: parâmetros de filtragem. Em caso de não existir itens retorna {}. """ if not iid: raise ValueError(__(u'Obrigatório uma lista de iid.')) return Article.objects(issue=iid, **kwargs)
def get_article_by_pid_v1(v1, **kwargs): """ Retorna um artigo considerando os parâmetros ``v1``. - ``v1``: string, contendo o PID do artigo versão 1, 2 ou 3 """ if not v1: raise ValueError(__('Obrigatório um pid.')) return Article.objects( scielo_pids__v1=v1, is_public=True, **kwargs ).first()
def get_article_by_aid(aid, is_public=True): """ Retorna um artigo considerando os parâmetros ``aid`` e ``is_public``. - ``aid``: string, chave primaria do artigo (ex.: ``14a278af8d224fa2a09a901123ca78ba``); - ``is_public``: boolean, filtra por público e não público. """ article = Article.objects(aid=aid).first() if article: article_public = article.is_public journal_public = article.journal.is_public issue_public = article.issue.is_public if all([article_public, journal_public, issue_public]): return article
def get_article_by_aop_url_segs(jid, url_seg_issue, url_seg_article, **kwargs): """ Retorna um artigo considerando os parâmetros ``jid``, ``url_seg_issue``, ``url_seg_article`` e ``kwargs``. - ``jid``: string, id do journal; - ``url_seg_issue``: string, segmento do url do fascículo; - ``url_seg_article``: string, segmento do url do artigo; - ``kwargs``: parâmetros de filtragem. """ if not (jid and url_seg_issue and url_seg_article): raise ValueError(__('Obrigatório um jid, url_seg_issue and url_seg_article.')) aop_url_segs = { "url_seg_article": url_seg_article, "url_seg_issue": url_seg_issue } return Article.objects(journal=jid, aop_url_segs=aop_url_segs, **kwargs).first()
def get_articles_by_iid(iid, **kwargs): """ Retorna uma lista de artigos aonde o atributo ``iid`` de cada um deles é igual ao parâmetro: ``iid`` ordenado pelo atributo order. - ``iid``: chave primaria de número para escolher os artigos. - ``kwargs``: parâmetros de filtragem. Em caso de não existir itens retorna {}. """ if not iid: raise ValueError(__('Obrigatório um iid.')) articles = Article.objects(issue=iid, **kwargs).order_by('order') if is_aop_issue(iid) or is_open_publication(articles): return articles.order_by('-publication_date') return articles
def get_articles_by_iid(iid, **kwargs): """ Retorna uma lista de artigos aonde o atributo ``iid`` de cada um deles é igual ao parâmetro: ``iid`` ordenado pelo atributo order. - ``iid``: chave primaria de número para escolher os artigos. - ``kwargs``: parâmetros de filtragem. Em caso de não existir itens retorna {}. """ if not iid: raise ValueError(__('Obrigatório um iid.')) # FIXME - Melhorar esta consulta # Em um fascículo em que não é aop nem publicação contínua # todas as datas são iguais, então, `order_by`, # poderia ser chamado uma única vez # No entanto, há um issue relacionado: #1435 articles = Article.objects(issue=iid, **kwargs).order_by('order') if is_aop_issue(articles) or is_open_issue(articles): return articles.order_by('-publication_date') return articles
def get_articles_by_date_range(begin_date, end_date, page=1, per_page=100): """ Retorna artigos criados ou atualizados durante o período entre start_date e end_date. """ articles = Article.objects(Q(updated__gte=begin_date) & Q(updated__lte=end_date)).order_by('pid') return Pagination(articles, page, per_page)