4 |
--------------------------------------------------------------------------------
/ckanext/pdfview/theme/templates/pdf_form.html:
--------------------------------------------------------------------------------
1 | {% import 'macros/form.html' as form %}
2 |
3 | {{ form.input('pdf_url', id='field-pdf_url', label=_('PDF url'), placeholder=_('eg. http://example.com/document.pdf (if blank uses resource url)'), value=data.pdf_url, error=errors.pdf_url, classes=['control-full', 'control-large']) }}
4 |
--------------------------------------------------------------------------------
/.gitignore:
--------------------------------------------------------------------------------
1 | .ropeproject
2 | node_modules
3 | bower_components
4 |
5 | # Byte-compiled / optimized / DLL files
6 | __pycache__/
7 | *.py[cod]
8 |
9 | # C extensions
10 | *.so
11 |
12 | # Distribution / packaging
13 | .Python
14 | env/
15 | build/
16 | develop-eggs/
17 | dist/
18 | sdist/
19 | *.egg-info/
20 | .installed.cfg
21 | *.egg
22 | .venv/
23 | .venv27/
24 |
25 | # PyInstaller
26 | # Usually these files are written by a python script from a template
27 | # before PyInstaller builds the exe, so as to inject date/other infos into it.
28 | *.manifest
29 | *.spec
30 |
31 | # Installer logs
32 | pip-log.txt
33 | pip-delete-this-directory.txt
34 |
35 | # Unit test / coverage reports
36 | htmlcov/
37 | .tox/
38 | .coverage
39 | .cache
40 | nosetests.xml
41 | coverage.xml
42 |
43 | # Sphinx documentation
44 | docs/_build/
45 |
46 | # IDE
47 | .vscode/
--------------------------------------------------------------------------------
/test.ini:
--------------------------------------------------------------------------------
1 | [DEFAULT]
2 | debug = false
3 | smtp_server = localhost
4 | error_email_from = paste@localhost
5 |
6 | [server:main]
7 | use = egg:Paste#http
8 | host = 0.0.0.0
9 | port = 5000
10 |
11 | [app:main]
12 | use = config:../ckan/test-core.ini
13 |
14 | # Insert any custom config settings to be used when running your extension's
15 | # tests here.
16 | ckan.plugins = pdf_view
17 |
18 | # Logging configuration
19 | [loggers]
20 | keys = root, ckan, sqlalchemy
21 |
22 | [handlers]
23 | keys = console
24 |
25 | [formatters]
26 | keys = generic
27 |
28 | [logger_root]
29 | level = WARN
30 | handlers = console
31 |
32 | [logger_ckan]
33 | qualname = ckan
34 | handlers =
35 | level = INFO
36 |
37 | [logger_sqlalchemy]
38 | handlers =
39 | qualname = sqlalchemy.engine
40 | level = WARN
41 |
42 | [handler_console]
43 | class = StreamHandler
44 | args = (sys.stdout,)
45 | level = NOTSET
46 | formatter = generic
47 |
48 | [formatter_generic]
49 | format = %(asctime)s %(levelname)-5.5s [%(name)s] %(message)s
--------------------------------------------------------------------------------
/ckanext/pdfview/tests/test_view.py:
--------------------------------------------------------------------------------
1 | # encoding: utf-8
2 |
3 | import pytest
4 | from ckan.tests import factories
5 | from ckan.plugins import toolkit
6 |
7 |
8 | @pytest.mark.ckan_config("ckan.views.default_views", "")
9 | @pytest.mark.ckan_config("ckan.plugins", "pdf_view")
10 | @pytest.mark.usefixtures("clean_db", "with_plugins")
11 | def test_view_shown_on_resource_page_with_pdf_url(app):
12 |
13 | dataset = factories.Dataset()
14 | resource = factories.Resource(package_id=dataset["id"], format="pdf")
15 | resource_view = factories.ResourceView(
16 | resource_id=resource["id"],
17 | view_type="pdf_view",
18 | pdf_url="https://example/document.pdf",
19 | )
20 |
21 | if toolkit.check_ckan_version("2.9"):
22 | url = toolkit.url_for(
23 | "{}_resource.read".format(dataset["type"]),
24 | id=dataset["name"],
25 | resource_id=resource["id"],
26 | )
27 | else:
28 | url = toolkit.url_for(
29 | controller="package",
30 | action="resource_read",
31 | id=resource_view["package_id"],
32 | resource_id=resource["id"],
33 | )
34 |
35 | response = app.get(url)
36 |
37 | assert "https://example/document.pdf" in response.body
38 |
--------------------------------------------------------------------------------
/ckanext/pdfview/plugin.py:
--------------------------------------------------------------------------------
1 | # encoding: utf-8
2 |
3 | import logging
4 | import ckan.plugins as p
5 |
6 | log = logging.getLogger(__name__)
7 | ignore_empty = p.toolkit.get_validator("ignore_empty")
8 | url_validator = p.toolkit.get_validator("url_validator")
9 |
10 |
11 | class PDFView(p.SingletonPlugin):
12 | """This plugin makes views of PDF resources, using an