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 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 get_aop_issues(url_seg, is_public=True): try: journal = get_journal_by_url_seg(url_seg, is_public=is_public) except ValueError: raise ValueError(__('Obrigatório url_seg para get_aop_issues')) else: order_by = ["-year"] return Issue.objects(journal=journal, type='ahead', is_public=is_public).order_by(*order_by)
def get_issues_by_jid(jid, is_public=True, order_by=None): """ Retorna uma lista de fascículos considerando os parâmetros ``jid`` e ``is_public``, e ordenado por parâmetro ``order_by``. - ``jid``: string, chave primaria do periódico (ex.: ``f8c87833e0594d41a89fe60455eaa5a5``); - ``is_public``: boolean, filtra por público e não público. - ``order_by``: string ou lista, campo ou lista de campos para fazer a ordenação. """ if not order_by: order_by = ["-year", "-volume", "-number"] if get_journal_by_jid(jid): return Issue.objects(journal=jid, is_public=True).order_by(*order_by)
def get_issues_by_jid(jid, **kwargs): """ Retorna uma lista de números considerando os parâmetros ``jid`` e ``kwargs``, e ordenado por parâmetro ``order_by``. - ``jid``: string, chave primaria do periódico (ex.: ``f8c87833e0594d41a89fe60455eaa5a5``); - ``kwargs``: parâmetros de filtragem, utilize a chave ``order_by` para indicar uma lista de ordenação. """ try: order_by = kwargs['order_by'] del kwargs['order_by'] except KeyError: order_by = ["-year", "-volume", "-order"] return Issue.objects(journal=jid, **kwargs).order_by(*order_by)
def get_issues_by_jid(jid, **kwargs): """ Retorna uma lista de fascículos considerando os parâmetros ``jid`` e ``kwargs``, e ordenado por parâmetro ``order_by``. - ``jid``: string, chave primaria do periódico (ex.: ``f8c87833e0594d41a89fe60455eaa5a5``); - ``kwargs``: parâmetros de filtragem, utilize a chave ``order_by` para indicar uma lista de ordenação. """ order_by = kwargs.get('order_by', None) if order_by: del kwargs['order_by'] else: order_by = ["-year", "-volume", "-number"] if get_journal_by_jid(jid): return Issue.objects(journal=jid, **kwargs).order_by(*order_by)
def get_issues_for_grid_by_jid(jid, **kwargs): """ Retorna uma lista de números considerando os parâmetros ``jid`` e ``kwargs``, e ordenado por parâmetro ``order_by``. - ``jid``: string, chave primaria do periódico (ex.: ``f8c87833e0594d41a89fe60455eaa5a5``); - ``kwargs``: parâmetros de filtragem, utilize a chave ``order_by` para indicar uma lista de ordenação. """ order_by = kwargs.get('order_by', None) if order_by: del kwargs['order_by'] else: order_by = ["-year", "-volume", "-order"] issues = [] issues_without_ahead = [] if get_journal_by_jid(jid): issues = Issue.objects( journal=jid, type__in=['ahead', 'regular', 'special', 'supplement', 'volume_issue'], **kwargs).order_by(*order_by) issue_ahead = issues.filter(type='ahead').first() issues_without_ahead = issues.filter(type__ne='ahead') volume_issue = {} result_dict = OrderedDict() for issue in issues_without_ahead: key_year = str(issue.year) # Verificando se é um volume de número e criando um dicionário auxiliar if issue.type == 'volume_issue': volume_issue.setdefault(issue.volume, {}) volume_issue[issue.volume]['issue'] = issue volume_issue[issue.volume]['art_count'] = len(get_articles_by_iid(issue.iid)) key_volume = issue.volume result_dict.setdefault(key_year, OrderedDict()) result_dict[key_year].setdefault(key_volume, []).append(issue) # 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 # 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 return { 'ahead': issue_ahead, # ahead of print 'ordered_for_grid': result_dict, # lista de números odenadas para a grade 'volume_issue': volume_issue, # lista de volumes que são números 'previous_issue': previous_issue, 'last_issue': last_issue }
def get_issues_for_grid_by_jid(jid, **kwargs): """ Retorna uma lista de fascículos considerando os parâmetros ``jid`` e ``kwargs``, e ordenado por parâmetro ``order_by``. - ``jid``: string, chave primaria do periódico (ex.: ``f8c87833e0594d41a89fe60455eaa5a5``); - ``kwargs``: parâmetros de filtragem, utilize a chave ``order_by` para indicar uma lista de ordenação. """ order_by = kwargs.get('order_by', None) if order_by: del kwargs['order_by'] else: order_by = ["-year", "-volume", "-order"] issues = [] issues_without_ahead = [] if get_journal_by_jid(jid): issues = Issue.objects( journal=jid, type__in=['ahead', 'regular', 'special', 'supplement', 'volume_issue'], **kwargs).order_by(*order_by) issue_ahead = issues.filter(type='ahead').first() issues_without_ahead = issues.filter(type__ne='ahead') volume_issue = {} result_dict = OrderedDict() for issue in issues_without_ahead: key_year = str(issue.year) # Verificando se é um volume de fascículo e criando um dicionário auxiliar if issue.type == 'volume_issue': volume_issue.setdefault(issue.volume, {}) volume_issue[issue.volume]['issue'] = issue volume_issue[issue.volume]['art_count'] = len(get_articles_by_iid(issue.iid)) key_volume = issue.volume result_dict.setdefault(key_year, OrderedDict()) result_dict[key_year].setdefault(key_volume, []).append(issue) # 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 # 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 return { 'ahead': issue_ahead, # ahead of print 'ordered_for_grid': result_dict, # lista de fascículos odenadas para a grade 'volume_issue': volume_issue, # lista de volumes que são fascículos 'previous_issue': previous_issue, 'last_issue': last_issue }