diff --git a/ckanext/odsh/helpers.py b/ckanext/odsh/helpers.py index 60fccc73dcecfd44049a3db1f37c1421ac51c5b3..9927ec0cb5a6cc01e71388c81cc69d89061e32d9 100644 --- a/ckanext/odsh/helpers.py +++ b/ckanext/odsh/helpers.py @@ -14,6 +14,7 @@ import hashlib import re from ckan.common import request from urlparse import urlsplit, urlunsplit +import subprocess get_action = logic.get_action @@ -225,3 +226,9 @@ def odsh_public_resource_url(res): return urlunsplit((0, 0, f[2], f[3], f[4])) else: return res['url'] + +def odsh_get_version_id(): + try: + return subprocess.check_output(["git", "rev-parse", "HEAD"]).strip() + except: + return 'unknown' diff --git a/ckanext/odsh/plugin.py b/ckanext/odsh/plugin.py index d798c61729731a1dd458912f6948ba47c1394830..be9f8f7fa5fd21e37d7e0ad2cb4996db465a51a4 100644 --- a/ckanext/odsh/plugin.py +++ b/ckanext/odsh/plugin.py @@ -290,7 +290,8 @@ class OdshPlugin(plugins.SingletonPlugin, DefaultTranslation, DefaultDatasetForm 'odsh_tracking_url': odsh_helpers.odsh_tracking_url, 'odsh_has_more_facets': odsh_helpers.odsh_has_more_facets, 'odsh_public_url': odsh_helpers.odsh_public_url, - 'odsh_public_resource_url': odsh_helpers.odsh_public_resource_url + 'odsh_public_resource_url': odsh_helpers.odsh_public_resource_url, + 'odsh_get_version_id': odsh_helpers.odsh_get_version_id } def after_map(self, map): diff --git a/ckanext/odsh/templates/qv4yAI2rgotamXGk98gJ.html b/ckanext/odsh/templates/qv4yAI2rgotamXGk98gJ.html new file mode 100644 index 0000000000000000000000000000000000000000..2ba851cb4e2ed79b62c69633d4e945a3d5b0bce5 --- /dev/null +++ b/ckanext/odsh/templates/qv4yAI2rgotamXGk98gJ.html @@ -0,0 +1 @@ +{{ h.odsh_get_version_id()}} \ No newline at end of file diff --git a/ckanext/odsh/tests/test_env.py b/ckanext/odsh/tests/test_env.py index bc4025eb872699f339ae7de12711f52bc3fcd097..47d797c2e58e61d98b74ca30e10c5eeb91da2ffc 100644 --- a/ckanext/odsh/tests/test_env.py +++ b/ckanext/odsh/tests/test_env.py @@ -9,6 +9,8 @@ import sys import ConfigParser from collections import OrderedDict +expected_commit = '5298c6f4b86b1a03fbf177974e3ab4eefb1b1192' + # run with nosetests --ckan --nologcapture --with-pylons=<config to test> ckanext/odsh/tests/test_env.py @@ -23,12 +25,16 @@ def checkConfig(key, expected=None, minLength=None): return value -def checkConfigUrl(key, expectedKey=None, responseContains=None): - value = checkConfig(key, expected=expectedKey) - +def readUrl(value): req = urllib2.Request(value) response = urllib2.urlopen(req) data = response.read() + return data + + +def checkConfigUrl(key, expectedKey=None, responseContains=None): + value = checkConfig(key, expected=expectedKey) + data = readUrl(value) if responseContains: assert responseContains in data @@ -45,7 +51,7 @@ def checkConfigFile(key, expectedKey=None, responseContains=None): def checkConfigDir(key, expectedKey=None): value = checkConfig(key, expected=expectedKey) assert os.access(value.replace('file://', ''), - os.W_OK), "expected '{key}={val}' to be writeable (user was '{user}')".format(key=key,val=value, user=os.getlogin()) + os.W_OK), "expected '{key}={val}' to be writeable (user was '{user}')".format(key=key, val=value, user=os.getlogin()) def checkJsonFile(key, expectedKey=None, expectedLength=None): @@ -156,3 +162,10 @@ class TestEnv: checkConfig('ckanext.odsh.matomo_id', expected='3') checkConfigUrl('ckanext.odsh.matomo_url', responseContains='This resource is part of Matomo') + + def test_version(self): + url = checkConfig('ckan.site_url') + if url[-1] == '/': + url = url[:-1] + version = readUrl(url+'/qv4yAI2rgotamXGk98gJ').strip() + assert version == expected_commit, "wrong version: {was}!={exp}".format(version, expected_commit)