Move last active user logic to helper function
Move last active user logic to helper function

import logging import logging
   
import ckan.plugins as plugins import ckan.plugins as plugins
  import ckan.lib as lib
  import ckan.lib.dictization.model_dictize as model_dictize
import ckan.plugins.toolkit as tk import ckan.plugins.toolkit as tk
  import ckan.model as model
   
  #parse the activity feed for last active non-system user
# get_action will be deprecated soon, this is the replacement def get_last_active_user(id):
def get_user(user): system_user = "de0ba262-83fe-45e2-adda-41bb9f0c86d8"
user_name = unicode(user) user_list = [x for x in lib.helpers.get_action('package_activity_list',{'id':id}) if x['user_id'] != system_user]
if user_name: user = user_list[0]['user_id']
user_obj = model.User.get(id) if user is None:
context['user_obj'] = user_obj return lib.helpers.get_action('user_show',{'id':system_user})
if user_obj is None:  
raise NotFound  
else: else:
raise NotFound return lib.helpers.get_action('user_show',{'id':user})
   
return model_dictize.user_dictize(user_obj,context)  
   
   
class ExampleIDatasetFormPlugin(plugins.SingletonPlugin, class ExampleIDatasetFormPlugin(plugins.SingletonPlugin,
tk.DefaultDatasetForm): tk.DefaultDatasetForm):
'''An example IDatasetForm CKAN plugin. '''An example IDatasetForm CKAN plugin.
   
Uses a tag vocabulary to add a custom metadata field to datasets. Uses a tag vocabulary to add a custom metadata field to datasets.
   
''' '''
plugins.implements(plugins.IConfigurer, inherit=False) plugins.implements(plugins.IConfigurer, inherit=False)
plugins.implements(plugins.IDatasetForm, inherit=False) plugins.implements(plugins.IDatasetForm, inherit=False)
plugins.implements(plugins.ITemplateHelpers, inherit=False) plugins.implements(plugins.ITemplateHelpers, inherit=False)
   
# These record how many times methods that this plugin's methods are # These record how many times methods that this plugin's methods are
# called, for testing purposes. # called, for testing purposes.
num_times_new_template_called = 0 num_times_new_template_called = 0
num_times_read_template_called = 0 num_times_read_template_called = 0
num_times_edit_template_called = 0 num_times_edit_template_called = 0
num_times_search_template_called = 0 num_times_search_template_called = 0
num_times_history_template_called = 0 num_times_history_template_called = 0
num_times_package_form_called = 0 num_times_package_form_called = 0
num_times_check_data_dict_called = 0 num_times_check_data_dict_called = 0
num_times_setup_template_variables_called = 0 num_times_setup_template_variables_called = 0
   
   
def update_config(self, config): def update_config(self, config):
# Add this plugin's templates dir to CKAN's extra_template_paths, so # Add this plugin's templates dir to CKAN's extra_template_paths, so
# that CKAN will use this plugin's custom templates. # that CKAN will use this plugin's custom templates.
# here = os.path.dirname(__file__) # here = os.path.dirname(__file__)
# rootdir = os.path.dirname(os.path.dirname(here)) # rootdir = os.path.dirname(os.path.dirname(here))
   
tk.add_template_directory(config, 'templates') tk.add_template_directory(config, 'templates')
tk.add_public_directory(config, 'theme/public') tk.add_public_directory(config, 'theme/public')
tk.add_resource('theme/public', 'ckanext-datagovau') tk.add_resource('theme/public', 'ckanext-datagovau')
# config['licenses_group_url'] = 'http://%(ckan.site_url)/licenses.json' # config['licenses_group_url'] = 'http://%(ckan.site_url)/licenses.json'
   
def get_helpers(self): def get_helpers(self):
return {'getuser': get_user} return {'get_last_active_user': get_last_active_user}
   
def is_fallback(self): def is_fallback(self):
# Return True to register this plugin as the default handler for # Return True to register this plugin as the default handler for
# package types not handled by any other IDatasetForm plugin. # package types not handled by any other IDatasetForm plugin.
return True return True
   
def package_types(self): def package_types(self):
# This plugin doesn't handle any special package types, it just # This plugin doesn't handle any special package types, it just
# registers itself as the default (above). # registers itself as the default (above).
return [] return []
   
   
def create_package_schema(self): def create_package_schema(self):
schema = super(ExampleIDatasetFormPlugin, self).create_package_schema() schema = super(ExampleIDatasetFormPlugin, self).create_package_schema()
schema = self._modify_package_schema(schema) schema = self._modify_package_schema(schema)
return schema return schema
   
def update_package_schema(self): def update_package_schema(self):
schema = super(ExampleIDatasetFormPlugin, self).update_package_schema() schema = super(ExampleIDatasetFormPlugin, self).update_package_schema()
schema = self._modify_package_schema(schema) schema = self._modify_package_schema(schema)
return schema return schema
   
def show_package_schema(self): def show_package_schema(self):
schema = super(ExampleIDatasetFormPlugin, self).show_package_schema() schema = super(ExampleIDatasetFormPlugin, self).show_package_schema()
   
# Don't show vocab tags mixed in with normal 'free' tags # Don't show vocab tags mixed in with normal 'free' tags
# (e.g. on dataset pages, or on the search page) # (e.g. on dataset pages, or on the search page)
schema['tags']['__extras'].append(tk.get_converter('free_tags_only')) schema['tags']['__extras'].append(tk.get_converter('free_tags_only'))
   
# Add our custom_text field to the dataset schema. # Add our custom_text field to the dataset schema.
# ignore_missing == optional # ignore_missing == optional
# ignore_empty == mandatory but not for viewing # ignore_empty == mandatory but not for viewing
# !!! always convert_from_extras first # !!! always convert_from_extras first
schema.update({ schema.update({
'agency_program': [tk.get_converter('convert_from_extras'), 'agency_program': [tk.get_converter('convert_from_extras'),
tk.get_validator('ignore_missing')], tk.get_validator('ignore_missing')],
'contact_point': [tk.get_converter('convert_from_extras'), 'contact_point': [tk.get_converter('convert_from_extras'),
tk.get_validator('ignore_empty')], tk.get_validator('ignore_empty')],
'spatial_coverage': [tk.get_converter('convert_from_extras'), 'spatial_coverage': [tk.get_converter('convert_from_extras'),
tk.get_validator('ignore_empty')], tk.get_validator('ignore_empty')],
'granularity': [tk.get_converter('convert_from_extras'), 'granularity': [tk.get_converter('convert_from_extras'),
tk.get_validator('ignore_empty')], tk.get_validator('ignore_empty')],
'jurisdiction': [tk.get_converter('convert_from_extras'), 'jurisdiction': [tk.get_converter('convert_from_extras'),
tk.get_validator('ignore_empty')], tk.get_validator('ignore_empty')],
'temporal_coverage': [tk.get_converter('convert_from_extras'), 'temporal_coverage': [tk.get_converter('convert_from_extras'),
tk.get_validator('ignore_empty')], tk.get_validator('ignore_empty')],
'data_state': [tk.get_converter('convert_from_extras'), 'data_state': [tk.get_converter('convert_from_extras'),
tk.get_validator('ignore_empty')], tk.get_validator('ignore_empty')],
'update_freq': [tk.get_converter('convert_from_extras'), 'update_freq': [tk.get_converter('convert_from_extras'),
tk.get_validator('ignore_empty')] tk.get_validator('ignore_empty')]
}) })
return schema return schema
   
def _modify_package_schema(self, schema): def _modify_package_schema(self, schema):
# Add our custom_test metadata field to the schema, this one will use # Add our custom_test metadata field to the schema, this one will use
# convert_to_extras instead of convert_to_tags. # convert_to_extras instead of convert_to_tags.
# ignore_missing == optional # ignore_missing == optional
# not_empty == mandatory, enforced here while modifying # not_empty == mandatory, enforced here while modifying
   
schema.update({ schema.update({
'agency_program': [tk.get_validator('ignore_missing'), 'agency_program': [tk.get_validator('ignore_missing'),
tk.get_converter('convert_to_extras')], tk.get_converter('convert_to_extras')],
'contact_point': [tk.get_converter('convert_to_extras'), 'contact_point': [tk.get_converter('convert_to_extras'),
tk.get_validator('not_empty')], tk.get_validator('not_empty')],
'spatial_coverage': [tk.get_converter('convert_to_extras'), 'spatial_coverage': [tk.get_converter('convert_to_extras'),
tk.get_validator('not_empty')], tk.get_validator('not_empty')],
'granularity': [tk.get_converter('convert_to_extras'), 'granularity': [tk.get_converter('convert_to_extras'),
tk.get_validator('not_empty')], tk.get_validator('not_empty')],
'jurisdiction': [tk.get_converter('convert_to_extras'), 'jurisdiction': [tk.get_converter('convert_to_extras'),
tk.get_validator('not_empty')], tk.get_validator('not_empty')],
'temporal_coverage': [tk.get_converter('convert_to_extras'), 'temporal_coverage': [tk.get_converter('convert_to_extras'),
tk.get_validator('not_empty')], tk.get_validator('not_empty')],
'data_state': [tk.get_converter('convert_to_extras'), 'data_state': [tk.get_converter('convert_to_extras'),
tk.get_validator('not_empty')], tk.get_validator('not_empty')],
'update_freq': [tk.get_converter('convert_to_extras'), 'update_freq': [tk.get_converter('convert_to_extras'),
tk.get_validator('not_empty')] tk.get_validator('not_empty')]
}) })
return schema return schema
   
# These methods just record how many times they're called, for testing # These methods just record how many times they're called, for testing
# purposes. # purposes.
# TODO: It might be better to test that custom templates returned by # TODO: It might be better to test that custom templates returned by
# these methods are actually used, not just that the methods get # these methods are actually used, not just that the methods get
# called. # called.
   
def setup_template_variables(self, context, data_dict): def setup_template_variables(self, context, data_dict):
return super(ExampleIDatasetFormPlugin, self).setup_template_variables( return super(ExampleIDatasetFormPlugin, self).setup_template_variables(
context, data_dict) context, data_dict)
   
def new_template(self): def new_template(self):
return super(ExampleIDatasetFormPlugin, self).new_template() return super(ExampleIDatasetFormPlugin, self).new_template()
   
def read_template(self): def read_template(self):
return super(ExampleIDatasetFormPlugin, self).read_template() return super(ExampleIDatasetFormPlugin, self).read_template()
   
def edit_template(self): def edit_template(self):
return super(ExampleIDatasetFormPlugin, self).edit_template() return super(ExampleIDatasetFormPlugin, self).edit_template()
   
def search_template(self): def search_template(self):
return super(ExampleIDatasetFormPlugin, self).search_template() return super(ExampleIDatasetFormPlugin, self).search_template()
   
def history_template(self): def history_template(self):
return super(ExampleIDatasetFormPlugin, self).history_template() return super(ExampleIDatasetFormPlugin, self).history_template()
   
def package_form(self): def package_form(self):
return super(ExampleIDatasetFormPlugin, self).package_form() return super(ExampleIDatasetFormPlugin, self).package_form()
   
   
{% ckan_extends %} {% ckan_extends %}
   
{% block package_additional_info %} {% block package_additional_info %}
<section class="additional-info" xmlns:dcat="http://www.w3.org/ns/dcat#" <section class="additional-info" xmlns:dcat="http://www.w3.org/ns/dcat#"
xmlns:dcam="http://purl.org/dc/dcam/" xmlns:dcam="http://purl.org/dc/dcam/"
xmlns:aglsterms="http://www.agls.gov.au/agls/terms/" xmlns:aglsterms="http://www.agls.gov.au/agls/terms/"
xmlns:agentterms="http://www.agls.gov.au/agls/agentterms/" xmlns:agentterms="http://www.agls.gov.au/agls/agentterms/"
xmlns:availterms="http://www.agls.gov.au/agls/availterms/" xmlns:availterms="http://www.agls.gov.au/agls/availterms/"
xmlns:adminterms="http://www.agls.gov.au/agls/adminterms/" xmlns:adminterms="http://www.agls.gov.au/agls/adminterms/"
xmlns:dct="http://purl.org/dc/terms/"> xmlns:dct="http://purl.org/dc/terms/">
<h3>{{ _('Additional Info') }}</h3> <h3>{{ _('Additional Info') }}</h3>
<table class="table table-striped table-bordered table-condensed"> <table class="table table-striped table-bordered table-condensed">
<thead> <thead>
<tr> <tr>
<th scope="col">{{ _('Field') }}</th> <th scope="col">{{ _('Field') }}</th>
<th scope="col">{{ _('Value') }}</th> <th scope="col">{{ _('Value') }}</th>
</tr> </tr>
</thead> </thead>
<tbody> <tbody>
   
   
{# Add our custom field to the dataset read page. #} {# Add our custom field to the dataset read page. #}
{% if pkg.get('metadata_created') %} {% if pkg.get('metadata_created') %}
<tr> <tr>
<th scope="row" class="dataset-label">Date Published</th> <th scope="row" class="dataset-label">Date Published</th>
<td class="dataset-details" property="dct:issued">{{ pkg.metadata_created.split("T")[0] }}</td> <td class="dataset-details" property="dct:issued">{{ pkg.metadata_created.split("T")[0] }}</td>
</tr> </tr>
{% endif %} {% endif %}
{% if pkg.get('metadata_updated') %} {% if pkg.get('metadata_updated') %}
<tr> <tr>
<th scope="row" class="dataset-label">Date Updated</th> <th scope="row" class="dataset-label">Date Updated</th>
<td class="dataset-details" property="dct:updated">{{ pkg.metadata_updated.split("T")[0] }}</td> <td class="dataset-details" property="dct:updated">{{ pkg.metadata_updated.split("T")[0] }}</td>
</tr> </tr>
{% endif %} {% endif %}
{% if pkg.get('agency_program') %} {% if pkg.get('agency_program') %}
<tr> <tr>
<th scope="row" class="dataset-label">Agency Program</th> <th scope="row" class="dataset-label">Agency Program</th>
<td class="dataset-details"> {{ pkg.agency_program }}</td> <td class="dataset-details"> {{ pkg.agency_program }}</td>
</tr> </tr>
{% endif %} {% endif %}
{% if pkg.get('Agency Program') %} {% if pkg.get('Agency Program') %}
<tr> <tr>
<th scope="row" class="dataset-label">Agency Program</th> <th scope="row" class="dataset-label">Agency Program</th>
<td class="dataset-details"> {{ pkg.get('Agency Program') }}</td> <td class="dataset-details"> {{ pkg.get('Agency Program') }}</td>
</tr> </tr>
{% endif %} {% endif %}
{% if h.get_pkg_dict_extra(pkg,'DCTERMS.Source.URI') %} {% if h.get_pkg_dict_extra(pkg,'DCTERMS.Source.URI') %}
<tr> <tr>
<th scope="row" class="dataset-label">{{ _('Source') }}</th> <th scope="row" class="dataset-label">{{ _('Source') }}</th>
<td class="dataset-details" property="dct:source">{{ h.link_to(h.get_pkg_dict_extra(pkg,'DCTERMS.Source.URI'), <td class="dataset-details" property="dct:source">{{ h.link_to(h.get_pkg_dict_extra(pkg,'DCTERMS.Source.URI'),
h.get_pkg_dict_extra(pkg,'DCTERMS.Source.URI'), rel='dct:source', target='_blank') }} h.get_pkg_dict_extra(pkg,'DCTERMS.Source.URI'), rel='dct:source', target='_blank') }}
</td> </td>
</tr> </tr>
{% endif %} {% endif %}
   
{% if pkg.get('contact_point') %} {% if pkg.get('contact_point') %}
<tr> <tr>
<th scope="row" class="dataset-label">Contact Point</th> <th scope="row" class="dataset-label">Contact Point</th>
<td class="dataset-details" property="dcat:contactPoint"> {{ h.mail_to(email_address=pkg.contact_point, <td class="dataset-details" property="dcat:contactPoint"> {{ h.mail_to(email_address=pkg.contact_point,
name=pkg.contact_point) }}</td> name=pkg.contact_point) }}</td>
</tr> </tr>
{% endif %} {% endif %}
{% if pkg.get('spatial_coverage') %} {% if pkg.get('spatial_coverage') %}
   
<tr> <tr>
<th scope="row" class="dataset-label">Geospatial Coverage</th> <th scope="row" class="dataset-label">Geospatial Coverage</th>
<td class="dataset-details" property="dct:spatial"> {{ pkg.spatial_coverage }}</td> <td class="dataset-details" property="dct:spatial"> {{ pkg.spatial_coverage }}</td>
</tr> </tr>
{% endif %} {% endif %}
{% if h.get_pkg_dict_extra(pkg,'Geospatial Coverage') %} {% if h.get_pkg_dict_extra(pkg,'Geospatial Coverage') %}
   
<tr> <tr>
<th scope="row" class="dataset-label">Geospatial Coverage</th> <th scope="row" class="dataset-label">Geospatial Coverage</th>
<td class="dataset-details" property="dct:spatial"> {{ h.get_pkg_dict_extra(pkg,'Geospatial Coverage') }}</td> <td class="dataset-details" property="dct:spatial"> {{ h.get_pkg_dict_extra(pkg,'Geospatial Coverage') }}</td>
</tr> </tr>
{% endif %} {% endif %}
{% if pkg.get('granularity') %} {% if pkg.get('granularity') %}
   
<tr> <tr>
<th scope="row" class="dataset-label">Data Granularity</th> <th scope="row" class="dataset-label">Data Granularity</th>
<td class="dataset-details"> {{ pkg.granularity }}</td> <td class="dataset-details"> {{ pkg.granularity }}</td>
</tr> </tr>
{% endif %} {% endif %}
{% if h.get_pkg_dict_extra(pkg,'Granularity') %} {% if h.get_pkg_dict_extra(pkg,'Granularity') %}
   
<tr> <tr>
<th scope="row" class="dataset-label">Data Granularity</th> <th scope="row" class="dataset-label">Data Granularity</th>
<td class="dataset-details"> {{ h.get_pkg_dict_extra(pkg,'Granularity') }}</td> <td class="dataset-details"> {{ h.get_pkg_dict_extra(pkg,'Granularity') }}</td>
</tr> </tr>
{% endif %} {% endif %}
{% if pkg.get('jurisdiction') %} {% if pkg.get('jurisdiction') %}
   
<tr> <tr>
<th scope="row" class="dataset-label">Government Jurisdiction</th> <th scope="row" class="dataset-label">Government Jurisdiction</th>
<td class="dataset-details" property="aglsterms:AglsJuri"> {{ pkg.jurisdiction }}</td> <td class="dataset-details" property="aglsterms:AglsJuri"> {{ pkg.jurisdiction }}</td>
</tr> </tr>
{% endif %} {% endif %}
{% if h.get_pkg_dict_extra(pkg,'AGLSTERMS.Jurisdiction') %} {% if h.get_pkg_dict_extra(pkg,'AGLSTERMS.Jurisdiction') %}
   
<tr> <tr>
<th scope="row" class="dataset-label">Government Jurisdiction</th> <th scope="row" class="dataset-label">Government Jurisdiction</th>
<td class="dataset-details" property="aglsterms:AglsJuri"> {{ h.get_pkg_dict_extra(pkg,'AGLSTERMS.Jurisdiction') }}</td> <td class="dataset-details" property="aglsterms:AglsJuri"> {{ h.get_pkg_dict_extra(pkg,'AGLSTERMS.Jurisdiction') }}</td>
</tr> </tr>
{% endif %} {% endif %}
{% if pkg.get('temporal_coverage') %} {% if pkg.get('temporal_coverage') %}
   
<tr> <tr>
<th scope="row" class="dataset-label">Temporal Coverage</th> <th scope="row" class="dataset-label">Temporal Coverage</th>
<td class="dataset-details" property="dct:temporal"> {{ pkg.temporal_coverage }}</td> <td class="dataset-details" property="dct:temporal"> {{ pkg.temporal_coverage }}</td>
</tr> </tr>
{% endif %} {% endif %}
{% if h.get_pkg_dict_extra(pkg,'Temporal Coverage') %} {% if h.get_pkg_dict_extra(pkg,'Temporal Coverage') %}
   
<tr> <tr>
<th scope="row" class="dataset-label">Temporal Coverage</th> <th scope="row" class="dataset-label">Temporal Coverage</th>
<td class="dataset-details" property="dct:temporal"> {{ h.get_pkg_dict_extra(pkg,'Temporal Coverage') }}</td> <td class="dataset-details" property="dct:temporal"> {{ h.get_pkg_dict_extra(pkg,'Temporal Coverage') }}</td>
</tr> </tr>
{% endif %} {% endif %}
{% if pkg.get('data_state') %} {% if pkg.get('data_state') %}
   
<tr> <tr>
<th scope="row" class="dataset-label">Data State</th> <th scope="row" class="dataset-label">Data State</th>
<td class="dataset-details"> {{ pkg.data_state }}</td> <td class="dataset-details"> {{ pkg.data_state }}</td>
</tr> </tr>
{% endif %} {% endif %}
{% if pkg.get('update_freq') %} {% if pkg.get('update_freq') %}
   
<tr> <tr>
<th scope="row" class="dataset-label">Update Frequency</th> <th scope="row" class="dataset-label">Update Frequency</th>
<td class="dataset-details"> {{ pkg.update_freq }}</td> <td class="dataset-details"> {{ pkg.update_freq }}</td>
</tr> </tr>
{% endif %} {% endif %}
{% if h.get_pkg_dict_extra(pkg,'Update Frequency') %} {% if h.get_pkg_dict_extra(pkg,'Update Frequency') %}
<tr> <tr>
<th scope="row" class="dataset-label">Update Frequency</th> <th scope="row" class="dataset-label">Update Frequency</th>
<td class="dataset-details"> {{ h.get_pkg_dict_extra(pkg,'Update Frequency') }}</td> <td class="dataset-details"> {{ h.get_pkg_dict_extra(pkg,'Update Frequency') }}</td>
</tr> </tr>
{% endif %} {% endif %}
   
{% if pkg.maintainer_email %} {% set email =h.get_last_active_user(c.pkg_dict['id']).get('email','') %}
<tr> <tr>
<th scope="row" class="dataset-label">{{ _('Maintainer') }}</th> <th scope="row" class="dataset-label">{{ _('Maintainer') }}</th>
<td class="dataset-details" property="dc:contributor">{{ <td class="dataset-details" property="dc:contributor">{{
h.mail_to(email_address=pkg.maintainer_email, name=pkg.maintainer) }} h.mail_to(email_address=(email or ' '), name=h.get_last_active_user(c.pkg_dict['id']).get("display_name",'')) }}
</td> </td>
</tr> </tr>
{% elif pkg.maintainer %}  
<tr> <tr>
<th scope="row" class="dataset-label">{{ _('Maintainer') }}</th> <th scope="row" class="dataset-label">Publisher/Agency</th>
<td class="dataset-details" property="dc:contributor">{{ pkg.maintainer }}</td> <td class="dataset-details" property="dc:publisher">{{ c.pkg_dict['organization']['title']}}
  </td>
</tr> </tr>
{% endif %} <tr>
  <th scope="row" class="dataset-label">Type</th>
  <td class="dataset-details" property="dc:type">Dataset</td>
  </tr>
  <tr>
  <th scope="row" class="dataset-label">Language</th>
  <td class="dataset-details" property="dc:language">English</td>
  </tr>
   
</tbody> </tbody>
</table> </table>
</section> </section>
   
   
{% endblock %} {% endblock %}
   
<?xml version="1.0" encoding="utf-8"?> <?xml version="1.0" encoding="utf-8"?>
<rdf:RDF <rdf:RDF
xmlns:py="http://genshi.edgewall.org/" xmlns:py="http://genshi.edgewall.org/"
xmlns:foaf="http://xmlns.com/foaf/0.1/" xmlns:foaf="http://xmlns.com/foaf/0.1/"
xmlns:owl="http://www.w3.org/2002/07/owl#" xmlns:owl="http://www.w3.org/2002/07/owl#"
xmlns:rdfs="http://www.w3.org/2000/01/rdf-schema#" xmlns:rdfs="http://www.w3.org/2000/01/rdf-schema#"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:dcat="http://www.w3.org/ns/dcat#" xmlns:dcat="http://www.w3.org/ns/dcat#"
xmlns:dcam="http://purl.org/dc/dcam/" xmlns:dcam="http://purl.org/dc/dcam/"
xmlns:aglsterms="http://www.agls.gov.au/agls/terms/" xmlns:aglsterms="http://www.agls.gov.au/agls/terms/"
xmlns:agentterms="http://www.agls.gov.au/agls/agentterms/" xmlns:agentterms="http://www.agls.gov.au/agls/agentterms/"
xmlns:availterms="http://www.agls.gov.au/agls/availterms/" xmlns:availterms="http://www.agls.gov.au/agls/availterms/"
xmlns:adminterms="http://www.agls.gov.au/agls/adminterms/" xmlns:adminterms="http://www.agls.gov.au/agls/adminterms/"
xmlns:dct="http://purl.org/dc/terms/" xmlns:dct="http://purl.org/dc/terms/"
> >
<dcat:Dataset rdf:about="${ h.url_for(controller='package',action='read',id=c.pkg_dict['name'], qualified=True)}"> <dcat:Dataset rdf:about="${ h.url_for(controller='package',action='read',id=c.pkg_dict['name'], qualified=True)}">
<dct:identifier>${c.pkg_dict['name']}</dct:identifier> <dct:identifier>${c.pkg_dict['name']}</dct:identifier>
<dct:title>${c.pkg_dict['title']}</dct:title> <dct:title>${c.pkg_dict['title']}</dct:title>
<dct:landingPage <dct:landingPage
rdf:resource="${ h.url_for(controller='package',action='read',id=c.pkg_dict['name'], qualified=True) }"/> rdf:resource="${ h.url_for(controller='package',action='read',id=c.pkg_dict['name'], qualified=True) }"/>
<owl:sameAs rdf:resource="urn:uuid:${c.pkg_dict['id']}"/> <owl:sameAs rdf:resource="urn:uuid:${c.pkg_dict['id']}"/>
<dct:type>Dataset</dct:type> <dct:type>Dataset</dct:type>
<dct:description>${c.pkg_dict['notes']}</dct:description> <dct:description>${c.pkg_dict['notes']}</dct:description>
<dct:issued>${c.pkg_dict['metadata_created']}</dct:issued> <dct:issued>${c.pkg_dict['metadata_created']}</dct:issued>
<dct:modified>${c.pkg_dict['metadata_modified']}</dct:modified> <dct:modified>${c.pkg_dict['metadata_modified']}</dct:modified>
<dct:language>en</dct:language> <dct:language>en</dct:language>
   
  <py:choose>
  <py:when test="c.pkg_dict.get('license_url',None)">
<dct:license>${c.pkg_dict['license_url']}</dct:license> <dct:license>${c.pkg_dict['license_url']}</dct:license>
  <dct:rights rdf:resource="${c.pkg_dict['license_url']}"/>
  </py:when>
  <py:otherwise>
  <dct:license>${c.pkg_dict['license_id']}</dct:license>
  <dct:rights rdf:resource="${c.pkg_dict['license_id']}"/>
  </py:otherwise>
  </py:choose>
<py:for each="tag_dict in c.pkg_dict.get('tags',[])"> <py:for each="tag_dict in c.pkg_dict.get('tags',[])">
<dcat:keyword>${ tag_dict["name"] }</dcat:keyword> <dcat:keyword>${ tag_dict["name"] }</dcat:keyword>
</py:for> </py:for>
<py:for each="group_dict in c.pkg_dict.get('groups',[])"> <py:for each="group_dict in c.pkg_dict.get('groups',[])">
<dcat:theme>${ group_dict["title"] }</dcat:theme> <dcat:theme>${ group_dict["title"] }</dcat:theme>
</py:for> </py:for>
   
<foaf:homepage <foaf:homepage
rdf:resource="${ h.url_for(controller='package',action='read',id=c.pkg_dict['name'], qualified=True)}"/> rdf:resource="${ h.url_for(controller='package',action='read',id=c.pkg_dict['name'], qualified=True)}"/>
<rdfs:label>${c.pkg_dict['name']}</rdfs:label> <rdfs:label>${c.pkg_dict['name']}</rdfs:label>
   
   
<py:for each="rsc_dict in c.pkg_dict['resources']"> <py:for each="rsc_dict in c.pkg_dict['resources']">
<dcat:distribution> <dcat:distribution>
<dcat:Distribution> <dcat:Distribution>
<dct:title>${rsc_dict.get('name')}</dct:title> <dct:title>${rsc_dict.get('name')}</dct:title>
<owl:sameAs rdf:resource="urn:uuid:${rsc_dict.get('id')}"/> <owl:sameAs rdf:resource="urn:uuid:${rsc_dict.get('id')}"/>
<dct:description>${rsc_dict.get('description')}</dct:description> <dct:description>${rsc_dict.get('description')}</dct:description>
<dcat:accessURL rdf:resource="${ rsc_dict.get('url') }"/> <dcat:accessURL rdf:resource="${ rsc_dict.get('url') }"/>
<dct:created>${rsc_dict.get('created')}</dct:created> <dct:created>${rsc_dict.get('created')}</dct:created>
<dct:modified>${rsc_dict.get('revision_timestamp')}</dct:modified> <dct:modified>${rsc_dict.get('revision_timestamp')}</dct:modified>
<dcat:byteSize py:if="rsc_dict.get('size')">${rsc_dict.get('size')}</dcat:byteSize> <dcat:byteSize py:if="rsc_dict.get('size')">${rsc_dict.get('size')}</dcat:byteSize>
<dcat:mediaType py:if="rsc_dict.get('mimetype')">${rsc_dict.get('mimetype')}</dcat:mediaType> <dcat:mediaType py:if="rsc_dict.get('mimetype')">${rsc_dict.get('mimetype')}</dcat:mediaType>
<dct:extent py:if="rsc_dict.get('size')">${rsc_dict.get('size')} bytes</dct:extent> <dct:extent py:if="rsc_dict.get('size')">${rsc_dict.get('size')} bytes</dct:extent>
<dct:format py:if="rsc_dict.get('format')"> <dct:format py:if="rsc_dict.get('format')">
<dct:IMT> <dct:IMT>
<rdf:value>${rsc_dict.get('format')}</rdf:value> <rdf:value>${rsc_dict.get('format')}</rdf:value>
<rdfs:label>${rsc_dict.get('format')}</rdfs:label> <rdfs:label>${rsc_dict.get('format')}</rdfs:label>
</dct:IMT> </dct:IMT>
</dct:format> </dct:format>
<dct:title py:if="rsc_dict.get('name')">${rsc_dict.get('name')}</dct:title> <dct:title py:if="rsc_dict.get('name')">${rsc_dict.get('name')}</dct:title>
</dcat:Distribution> </dcat:Distribution>
</dcat:distribution> </dcat:distribution>
</py:for> </py:for>
<dct:publisher py:if="c.pkg_dict.get('organization', None)"> <dct:publisher py:if="c.pkg_dict.get('organization', None)">
<rdf:Description> <rdf:Description>
<foaf:name>${ c.pkg_dict['organization']['title'] }</foaf:name> <foaf:name>${ c.pkg_dict['organization']['title'] }</foaf:name>
</rdf:Description> </rdf:Description>
</dct:publisher> </dct:publisher>
<dct:creator py:if="c.pkg_dict.get('organization', None)"> <dct:creator py:if="c.pkg_dict.get('organization', None)">
<rdf:Description> <rdf:Description>
<foaf:name>${ c.pkg_dict['organization']['title'] }</foaf:name> <foaf:name>${ c.pkg_dict['organization']['title'] }</foaf:name>
</rdf:Description> </rdf:Description>
</dct:creator> </dct:creator>
<dct:contributor <dct:contributor>
py:with="username = h.get_action('package_activity_list',{'id':c.pkg_dict['id']})[0]['user_id']">  
<rdf:Description> <rdf:Description>
<foaf:name>${h.get_action("user_show",{"id":username})["display_name"]}</foaf:name> <foaf:name>${h.get_last_active_user(c.pkg_dict['id'])["display_name"]}</foaf:name>
<foaf:mbox py:if="h.get_action('user_show',{'id':username}).get('email', None)" <foaf:mbox py:if="h.get_last_active_user(c.pkg_dict['id']).get('email', None)"
rdf:resource="mailto:${h.get_action('user_show',{'id':username})['email']}"/> rdf:resource="mailto:${h.get_last_active_user(c.pkg_dict['id'])['email']}"/>
</rdf:Description> </rdf:Description>
</dct:contributor> </dct:contributor>
   
<dct:rights py:if="c.pkg_dict.get('license_url', None)" rdf:resource="${c.pkg_dict['license_url']}"/>  
   
<foaf:homepage py:if="h.get_pkg_dict_extra(c.pkg_dict,'DCTERMS.Source.URI')">${h.get_pkg_dict_extra(c.pkg_dict,'DCTERMS.Source.URI') } <foaf:homepage py:if="h.get_pkg_dict_extra(c.pkg_dict,'DCTERMS.Source.URI')">${h.get_pkg_dict_extra(c.pkg_dict,'DCTERMS.Source.URI') }
</foaf:homepage> </foaf:homepage>
   
<dcat:contactPoint py:if="c.pkg_dict.get('contact_point')">${c.pkg_dict.contact_point }</dcat:contactPoint> <dcat:contactPoint py:if="c.pkg_dict.get('contact_point')">${c.pkg_dict.contact_point }</dcat:contactPoint>
<dct:spatial py:if="c.pkg_dict.get('spatial_coverage')">${ c.pkg_dict.spatial_coverage }</dct:spatial> <dct:spatial py:if="c.pkg_dict.get('spatial_coverage')">${ c.pkg_dict.spatial_coverage }</dct:spatial>
<dct:spatial py:if="h.get_pkg_dict_extra(c.pkg_dict,'Geospatial Coverage')">${ h.get_pkg_dict_extra(c.pkg_dict,'Geospatial Coverage') }</dct:spatial> <dct:spatial py:if="h.get_pkg_dict_extra(c.pkg_dict,'Geospatial Coverage')">${ h.get_pkg_dict_extra(c.pkg_dict,'Geospatial Coverage') }</dct:spatial>
<aglsterms:AglsJuri py:if="c.pkg_dict.get('jurisdiction')">${ c.pkg_dict.jurisdiction }</aglsterms:AglsJuri> <aglsterms:AglsJuri py:if="c.pkg_dict.get('jurisdiction')">${ c.pkg_dict.jurisdiction }</aglsterms:AglsJuri>
<aglsterms:AglsJuri py:if="h.get_pkg_dict_extra(c.pkg_dict,'AGLSTERMS.Jurisdiction')">${ h.get_pkg_dict_extra(c.pkg_dict,'AGLSTERMS.Jurisdiction') }</aglsterms:AglsJuri> <aglsterms:AglsJuri py:if="h.get_pkg_dict_extra(c.pkg_dict,'AGLSTERMS.Jurisdiction')">${ h.get_pkg_dict_extra(c.pkg_dict,'AGLSTERMS.Jurisdiction') }</aglsterms:AglsJuri>
<dct:temporal py:if="c.pkg_dict.get('temporal_coverage')">${ c.pkg_dict.get('temporal_coverage') }</dct:temporal> <dct:temporal py:if="c.pkg_dict.get('temporal_coverage')">${ c.pkg_dict.get('temporal_coverage') }</dct:temporal>
<dct:temporal py:if="h.get_pkg_dict_extra(c.pkg_dict,'Temporal Coverage')">${ h.get_pkg_dict_extra(c.pkg_dict,'Temporal Coverage') }</dct:temporal> <dct:temporal py:if="h.get_pkg_dict_extra(c.pkg_dict,'Temporal Coverage')">${ h.get_pkg_dict_extra(c.pkg_dict,'Temporal Coverage') }</dct:temporal>
<dct:relation py:if="c.pkg_dict.get('data_state')"> <dct:relation py:if="c.pkg_dict.get('data_state')">
<rdf:Description> <rdf:Description>
<rdfs:label>Data State</rdfs:label> <rdfs:label>Data State</rdfs:label>
<rdf:value>${ c.pkg_dict.get('data_state') }</rdf:value> <rdf:value>${ c.pkg_dict.get('data_state') }</rdf:value>
</rdf:Description> </rdf:Description>
</dct:relation> </dct:relation>
   
<dct:relation py:if="c.pkg_dict.get('update_freq')"> <dct:relation py:if="c.pkg_dict.get('update_freq')">
<rdf:Description> <rdf:Description>
<rdfs:label>Update Frequency</rdfs:label> <rdfs:label>Update Frequency</rdfs:label>
<rdf:value>${ c.pkg_dict.get('update_freq') }</rdf:value> <rdf:value>${ c.pkg_dict.get('update_freq') }</rdf:value>
</rdf:Description> </rdf:Description>
</dct:relation> </dct:relation>
<dct:relation py:if="h.get_pkg_dict_extra(c.pkg_dict,'Update Frequency')"> <dct:relation py:if="h.get_pkg_dict_extra(c.pkg_dict,'Update Frequency')">
<rdf:Description> <rdf:Description>
<rdfs:label>Update Frequency</rdfs:label> <rdfs:label>Update Frequency</rdfs:label>
<rdf:value>${ h.get_pkg_dict_extra(c.pkg_dict,'Update Frequency') }</rdf:value> <rdf:value>${ h.get_pkg_dict_extra(c.pkg_dict,'Update Frequency') }</rdf:value>
</rdf:Description> </rdf:Description>
</dct:relation> </dct:relation>
   
<dct:relation py:if="h.get_pkg_dict_extra(c.pkg_dict,'Agency Program')"> <dct:relation py:if="h.get_pkg_dict_extra(c.pkg_dict,'Agency Program')">
<rdf:Description> <rdf:Description>
<rdfs:label>Agency Program</rdfs:label> <rdfs:label>Agency Program</rdfs:label>
<rdf:value>${ h.get_pkg_dict_extra(c.pkg_dict,'Agency Program') }</rdf:value> <rdf:value>${ h.get_pkg_dict_extra(c.pkg_dict,'Agency Program') }</rdf:value>
</rdf:Description> </rdf:Description>
</dct:relation> </dct:relation>
<dct:relation py:if="c.pkg_dict.get('agency_program')"> <dct:relation py:if="c.pkg_dict.get('agency_program')">
<rdf:Description> <rdf:Description>
<rdfs:label>Agency Program</rdfs:label> <rdfs:label>Agency Program</rdfs:label>
<rdf:value>${ c.pkg_dict.get('agency_program') }</rdf:value> <rdf:value>${ c.pkg_dict.get('agency_program') }</rdf:value>
</rdf:Description> </rdf:Description>
</dct:relation> </dct:relation>
   
<dct:relation py:if="h.get_pkg_dict_extra(c.pkg_dict,'Granularity')"> <dct:relation py:if="h.get_pkg_dict_extra(c.pkg_dict,'Granularity')">
<rdf:Description> <rdf:Description>
<rdfs:label>Data Granularity</rdfs:label> <rdfs:label>Data Granularity</rdfs:label>
<rdf:value>${ h.get_pkg_dict_extra(c.pkg_dict,'Granularity') }</rdf:value> <rdf:value>${ h.get_pkg_dict_extra(c.pkg_dict,'Granularity') }</rdf:value>
</rdf:Description> </rdf:Description>
</dct:relation> </dct:relation>
<dct:relation py:if="c.pkg_dict.get('granularity')"> <dct:relation py:if="c.pkg_dict.get('granularity')">
<rdf:Description> <rdf:Description>
<rdfs:label>Data Granularity</rdfs:label> <rdfs:label>Data Granularity</rdfs:label>
<rdf:value>${ c.pkg_dict.get('granularity') }</rdf:value> <rdf:value>${ c.pkg_dict.get('granularity') }</rdf:value>
</rdf:Description> </rdf:Description>
</dct:relation> </dct:relation>
   
<py:for each="extra_dict in c.pkg_dict.get('extras',[])"> <py:for each="extra_dict in c.pkg_dict.get('extras',[])">
<dct:relation> <dct:relation>
<rdf:Description> <rdf:Description>
<rdfs:label>${extra_dict.get('key','')}</rdfs:label> <rdfs:label>${extra_dict.get('key','')}</rdfs:label>
<rdf:value>${extra_dict.get('value','')}</rdf:value> <rdf:value>${extra_dict.get('value','')}</rdf:value>
</rdf:Description> </rdf:Description>
</dct:relation> </dct:relation>
</py:for> </py:for>
</dcat:Dataset> </dcat:Dataset>
</rdf:RDF> </rdf:RDF>