Esempio n. 1
0
    def render(self, context, instance, placeholder):
        context.update({
            'instance': instance,
            'bibliographical_data': {
                'version': util.version()
            },
            'chicago_authors': self.chicago_authors,
            'mla_authors': self.mla_authors,
            'year': '2014-' + str(datetime.date.today().year),
        })

        return context
Esempio n. 2
0
    def render(self, context, instance, placeholder):
        context.update({
            'instance': instance,
            'bibliographical_data': {
                'version': util.version()
            },
            'chicago_authors': self.chicago_authors,
            'mla_authors': self.mla_authors,
            'year': '2014-' + str(datetime.date.today().year),
        })

        return context
Esempio n. 3
0
def mods(request):
    access_date = request.GET.get('access-date', None)
    if access_date is None:
        return HttpResponseBadRequest(
            "access-date is a required parameter")

    return render(request,
                  "core/mods.xml",
                  {
                      'version': util.version(),
                      'year': '2012-' + str(datetime.date.today().year),
                      'access_date': access_date,
                  },
                  content_type="application/xml+mods")
Esempio n. 4
0
def mods(request):
    access_date = request.GET.get('access-date', None)
    if access_date is None:
        return HttpResponseBadRequest(
            "access-date is a required parameter")

    return render(request,
                  "core/mods.xml",
                  {
                      'version': util.version(),
                      'year': '2012-' + str(datetime.date.today().year),
                      'access_date': access_date,
                  },
                  content_type="application/xml+mods")
Esempio n. 5
0
    def test_basic(self):
        """
        Tests that generating a MODS works.
        """
        response = self.app.get(self.mods_url,
                                params={"access-date": "2015-01-02"})

        xml_params = {
            'version': util.version(),
            'year': '2012-' + str(datetime.date.today().year),
            'url': "http://testserver/"
        }

        self.assertEqual(
            response.text,
            self.mods_template.format(**xml_params))
        self.assertValid(response.body)
Esempio n. 6
0
    def test_basic(self):
        """
        Tests that generating a MODS works.
        """
        response = self.app.get(self.mods_url,
                                params={"access-date": "2015-01-02"})

        xml_params = {
            'version': util.version(),
            'year': '2012-' + str(datetime.date.today().year),
            'url': "http://testserver/"
        }

        self.assertEqual(
            response.body,
            self.mods_template.format(**xml_params))
        self.assertValid(response.body)
Esempio n. 7
0
def _show_changerecord(request, cr):
    get_token(request)

    can_author = usermod.can_author(request.user)

    show_published = not can_author

    prepared = cr.c_hash.get_display_data()

    if prepared is None:
        data = None
        bibl_data = '{}'
    else:
        data = article.hyperlink_prepared_data(prepared, show_published)
        bibl_data = json.dumps(prepared["bibl_data"])

    # We want an edit option only if this record is the latest and if
    # the user can edit it.
    edit_url = (reverse("lexicography_entry_update", args=(cr.entry.id, )) if
                (cr.entry.latest == cr
                 and cr.entry.is_editable_by(request.user)) else '')
    fetch_url = '' if data is not None else \
                reverse('lexicography_changerecord_details',
                        args=(cr.pk, ))

    # We want to warn the user of any version that has been published
    # and is not this version. We pass cr.entry so that we can get the
    # non-version specific URL of to view the entry.
    latest_published = cr.entry \
        if (cr.entry.latest_published is not None and
            cr != cr.entry.latest_published) else None

    # If the user is able to see unpublished articles, then we want to
    # warn the user if there exist a later version which is
    # unpublished.
    latest_unpublished = cr.entry.latest if can_author and \
        (cr != cr.entry.latest) and \
        (cr.entry.latest != cr.entry.latest_published) else None

    # Provide a history for the article
    history = []
    for version in cr.entry.changerecord_set.filter(published=True) \
            .order_by("-datetime"):
        history.append({
            'url': version.get_absolute_url(),
            'date': version.datetime
        })

    return render(request,
                  'lexicography/details.html',
                  context={
                      'bibliographical_data': {
                          'version': util.version()
                      },
                      'page_title':
                      cr.lemma,
                      'fetch_url':
                      fetch_url,
                      'semantic_field_fetch_url':
                      reverse("semantic_fields_semanticfield-list"),
                      'data':
                      data,
                      'bibl_data':
                      bibl_data,
                      'edit_url':
                      edit_url,
                      'is_published':
                      cr.published,
                      'latest_unpublished':
                      latest_unpublished,
                      'latest_published':
                      latest_published,
                      'permalink':
                      cr.entry.get_absolute_url(),
                      'version_permalink':
                      cr.get_absolute_url(),
                      'can_author':
                      can_author,
                      'history':
                      history
                  })
Esempio n. 8
0
def mods(request, entry_id, changerecord_id=None):
    access_date = request.GET.get('access-date', None)
    version_specific = request.GET.get('version-specific', None)

    if access_date is None:
        return HttpResponseBadRequest("access-date is a required parameter")

    entry = Entry.objects.get(id=entry_id)
    if changerecord_id is not None:
        cr = ChangeRecord.objects.get(id=changerecord_id)
    else:
        cr = entry.latest_published
        if cr is None:
            return HttpResponseBadRequest("this entry has never been "
                                          "published: you must request a "
                                          "specific change record")

    data = cr.c_hash.data

    xml = XMLTree(data)

    def names_to_objects(names):
        objs = []
        for name in names:
            forename = ''.join(
                name.xpath("./tei:forename",
                           namespaces=default_namespace_mapping)[0].itertext())
            surname = ''.join(
                name.xpath("./tei:surname",
                           namespaces=default_namespace_mapping)[0].itertext())
            # pylint: disable=invalid-name
            genName = ''.join(
                name.xpath("./tei:genName",
                           namespaces=default_namespace_mapping)[0].itertext())
            objs.append({
                'forename': forename,
                'surname': surname,
                'genName': genName
            })
        return objs

    authors = names_to_objects(
        xml.tree.xpath("//btw:credit//tei:persName",
                       namespaces=default_namespace_mapping))

    editors = names_to_objects(
        xml.tree.xpath("//tei:editor/tei:persName",
                       namespaces=default_namespace_mapping))

    url = cr.get_absolute_url() if version_specific \
        else entry.get_absolute_url()

    return render(request,
                  "lexicography/mods.xml", {
                      'title': cr.lemma,
                      'version': util.version(),
                      'year': datetime.date.today().year,
                      'authors': authors,
                      'editors': editors,
                      'url': request.build_absolute_uri(url),
                      'access_date': access_date
                  },
                  content_type="application/xml+mods")
Esempio n. 9
0
def _show_changerecord(request, cr):
    get_token(request)

    can_author = usermod.can_author(request.user)

    show_published = not can_author

    prepared = cr.c_hash.get_display_data()

    if prepared is None:
        data = None
        bibl_data = '{}'
    else:
        data = article.hyperlink_prepared_data(prepared, show_published)
        bibl_data = json.dumps(prepared["bibl_data"])

    # We want an edit option only if this record is the latest and if
    # the user can edit it.
    edit_url = (reverse("lexicography_entry_update", args=(cr.entry.id, ))
                if (cr.entry.latest == cr and
                    cr.entry.is_editable_by(request.user)) else '')
    fetch_url = '' if data is not None else \
                reverse('lexicography_changerecord_details',
                        args=(cr.pk, ))

    # We want to warn the user of any version that has been published
    # and is not this version. We pass cr.entry so that we can get the
    # non-version specific URL of to view the entry.
    latest_published = cr.entry \
        if (cr.entry.latest_published is not None and
            cr != cr.entry.latest_published) else None

    # If the user is able to see unpublished articles, then we want to
    # warn the user if there exist a later version which is
    # unpublished.
    latest_unpublished = cr.entry.latest if can_author and \
        (cr != cr.entry.latest) and \
        (cr.entry.latest != cr.entry.latest_published) else None

    # Provide a history for the article
    history = []
    for version in cr.entry.changerecord_set.filter(published=True) \
            .order_by("-datetime"):
        history.append({
            'url': version.get_absolute_url(),
            'date': version.datetime
        })

    return render(
        request,
        'lexicography/details.html',
        context={
            'bibliographical_data': {
                'version': util.version()
            },
            'page_title': cr.lemma,
            'fetch_url': fetch_url,
            'semantic_field_fetch_url':
            reverse("semantic_fields_semanticfield-list"),
            'data': data,
            'bibl_data': bibl_data,
            'edit_url': edit_url,
            'is_published': cr.published,
            'latest_unpublished': latest_unpublished,
            'latest_published': latest_published,
            'permalink': cr.entry.get_absolute_url(),
            'version_permalink': cr.get_absolute_url(),
            'can_author': can_author,
            'history': history
        })
Esempio n. 10
0
def mods(request, entry_id, changerecord_id=None):
    access_date = request.GET.get('access-date', None)
    version_specific = request.GET.get('version-specific', None)

    if access_date is None:
        return HttpResponseBadRequest(
            "access-date is a required parameter")

    entry = Entry.objects.get(id=entry_id)
    if changerecord_id is not None:
        cr = ChangeRecord.objects.get(id=changerecord_id)
    else:
        cr = entry.latest_published
        if cr is None:
            return HttpResponseBadRequest("this entry has never been "
                                          "published: you must request a "
                                          "specific change record")

    data = cr.c_hash.data

    xml = XMLTree(data)

    def names_to_objects(names):
        objs = []
        for name in names:
            forename = ''.join(
                name.xpath("./tei:forename",
                           namespaces=default_namespace_mapping)[0].itertext())
            surname = ''.join(
                name.xpath("./tei:surname",
                           namespaces=default_namespace_mapping)[0].itertext())
            # pylint: disable=invalid-name
            genName = ''.join(
                name.xpath("./tei:genName",
                           namespaces=default_namespace_mapping)[0].itertext())
            objs.append({
                'forename': forename,
                'surname': surname,
                'genName': genName
            })
        return objs

    authors = names_to_objects(
        xml.tree.xpath("//btw:credit//tei:persName",
                       namespaces=default_namespace_mapping))

    editors = names_to_objects(
        xml.tree.xpath("//tei:editor/tei:persName",
                       namespaces=default_namespace_mapping))

    url = cr.get_absolute_url() if version_specific \
        else entry.get_absolute_url()

    return render(request,
                  "lexicography/mods.xml",
                  {
                      'title': cr.lemma,
                      'version': util.version(),
                      'year': datetime.date.today().year,
                      'authors': authors,
                      'editors': editors,
                      'url': request.build_absolute_uri(url),
                      'access_date': access_date
                  },
                  content_type="application/xml+mods")
Esempio n. 11
0
def version(parser, token):
    return TextNode(util.version())