Beispiel #1
0
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'.")
Beispiel #2
0
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'.")
Beispiel #3
0
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)
Beispiel #4
0
    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())
Beispiel #5
0
    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())
Beispiel #6
0
    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())
Beispiel #7
0
    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())
Beispiel #8
0
    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())
Beispiel #9
0
    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())
Beispiel #10
0
    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())
Beispiel #11
0
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)
Beispiel #12
0
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)
Beispiel #13
0
    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
Beispiel #14
0
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)
Beispiel #15
0
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
    }
Beispiel #16
0
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
    }