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 test_create_only_required_fields_success_and_year(self): # given _id = self.generate_uuid_32_string() iid = self.generate_uuid_32_string() issue_data = { '_id': _id, 'iid': iid, 'is_public': True, 'year': datetime.today().year, # Year or Volume or Year must exists to form URL Issue Segment } # when issue_doc = Issue(**issue_data) issue_doc.save() # then self.assertEqual(_id, issue_doc._id) self.assertEqual(iid, issue_doc.iid) self.assertEqual(1, Issue.objects.all().count())
def test_create_only_required_fields_success_and_volume(self): # given _id = self.generate_uuid_32_string() iid = self.generate_uuid_32_string() issue_data = { '_id': _id, 'iid': iid, 'is_public': True, 'volume': '123' } # when issue_doc = Issue(**issue_data) issue_doc.save() # then self.assertEqual(_id, issue_doc._id) self.assertEqual(iid, issue_doc.iid) self.assertEqual(1, Issue.objects.all().count())
def test_create_issue_without_year_volume_and_number(self): # given _id = self.generate_uuid_32_string() iid = self.generate_uuid_32_string() issue_data = { '_id': _id, 'iid': iid, 'is_public': True } # when issue_doc = Issue(**issue_data) with self.assertRaises(ValueError) as save_model_exc: issue_doc.save() # then the_exception = save_model_exc.exception expected_error_msg = u'Year or Volume or Number or Supplement must exist to form URL Issue Segment' self.assertEqual(expected_error_msg, str(the_exception)) self.assertEqual(0, Issue.objects.all().count())
def test_create_only_required_fields_fail_when_volume_has_no_numbers(self): # given _id = self.generate_uuid_32_string() iid = self.generate_uuid_32_string() issue_data = { '_id': _id, 'iid': iid, 'is_public': True, 'volume': 'xyz' } # when issue_doc = Issue(**issue_data) with self.assertRaises(ValueError) as save_model_exc: issue_doc.save() # then the_exception = save_model_exc.exception expected_error_msg = u'Year or Volume or Year must exists to form URL Issue Segment' self.assertEqual(expected_error_msg, str(the_exception)) self.assertEqual(0, Issue.objects.all().count())
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 _create_dummy_issue(self, journal=None): if journal is None: journal = self._create_dummy_journal() issue_id = self.generate_uuid_32_string() issue_iid = self.generate_uuid_32_string() issue_data = { '_id': issue_id, 'iid': issue_iid, 'is_public': True, 'volume': '123', 'number': '9999', 'year': 2018, 'journal': journal } issue_doc = Issue(**issue_data) return issue_doc
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 }