Show edited and created datasets on user profile/dashboard
Show edited and created datasets on user profile/dashboard

file:b/.gitignore (new)
  *.egg-info
  *.pyc
  *.swp
  *.swo
  *~
  #*
  .#*
  build/
  dist/
  distribute-*
file:a/.hgignore (deleted)
syntax: glob  
*.egg-info  
*.pyc  
*.swp  
*.swo  
*~  
#*  
.#*  
build/  
dist/  
 
file:b/.idea/.name (new)
  ckanext-datagovau
  <?xml version="1.0" encoding="UTF-8"?>
  <project version="4">
  <component name="CompilerConfiguration">
  <option name="DEFAULT_COMPILER" value="Javac" />
  <resourceExtensions />
  <wildcardResourcePatterns>
  <entry name="!?*.java" />
  <entry name="!?*.form" />
  <entry name="!?*.class" />
  <entry name="!?*.groovy" />
  <entry name="!?*.scala" />
  <entry name="!?*.flex" />
  <entry name="!?*.kt" />
  <entry name="!?*.clj" />
  </wildcardResourcePatterns>
  <annotationProcessing>
  <profile default="true" name="Default" enabled="false">
  <processorPath useClasspath="true" />
  </profile>
  </annotationProcessing>
  </component>
  </project>
 
 
  <?xml version="1.0" encoding="UTF-8"?>
  <project version="4">
  <component name="Encoding" useUTFGuessing="true" native2AsciiForPropertiesFiles="false" />
  </project>
 
 
file:b/.idea/misc.xml (new)
  <?xml version="1.0" encoding="UTF-8"?>
  <project version="4">
  <component name="ProjectRootManager" version="2" languageLevel="JDK_1_6" assert-keyword="true" jdk-15="true">
  <output url="file://$PROJECT_DIR$/out" />
  </component>
  <component name="masterDetails">
  <states>
  <state key="ProjectJDKs.UI">
  <settings>
  <splitter-proportions>
  <option name="proportions">
  <list>
  <option value="0.2" />
  </list>
  </option>
  </splitter-proportions>
  </settings>
  </state>
  </states>
  </component>
  </project>
 
 
file:b/.idea/modules.xml (new)
  <?xml version="1.0" encoding="UTF-8"?>
  <project version="4">
  <component name="ProjectModuleManager">
  <modules>
  <module fileurl="file://$PROJECT_DIR$/ckanext-datagovau.iml" filepath="$PROJECT_DIR$/ckanext-datagovau.iml" />
  </modules>
  </component>
  </project>
 
 
file:b/.idea/other.xml (new)
  <?xml version="1.0" encoding="UTF-8"?>
  <project version="4">
  <component name="PyDocumentationSettings">
  <option name="myDocStringFormat" value="Plain" />
  </component>
  </project>
 
 
  <component name="DependencyValidationManager">
  <state>
  <option name="SKIP_IMPORT_STATEMENTS" value="false" />
  </state>
  </component>
  <?xml version="1.0" encoding="UTF-8"?>
  <project version="4">
  <component name="TestRunnerService">
  <option name="projectConfiguration" value="Unittests" />
  <option name="PROJECT_TEST_RUNNER" value="Unittests" />
  </component>
  </project>
 
 
file:b/.idea/vcs.xml (new)
  <?xml version="1.0" encoding="UTF-8"?>
  <project version="4">
  <component name="VcsDirectoryMappings">
  <mapping directory="" vcs="Git" />
  </component>
  </project>
 
 
  <?xml version="1.0" encoding="UTF-8"?>
  <project version="4">
  <component name="BookmarkManager">
  <bookmark url="file://$PROJECT_DIR$/ckanext/datagovau/templates/package/read.rdf" line="71" />
  </component>
  <component name="ChangeListManager">
  <list default="true" id="89ace156-8d75-43de-ba53-6e829c197435" name="Default" comment="">
  <change type="NEW" beforePath="" afterPath="$PROJECT_DIR$/ckanext/datagovau/templates/package/resource_read.html" />
  <change type="MODIFICATION" beforePath="$PROJECT_DIR$/ckanext/datagovau/templates/package/read.rdf" afterPath="$PROJECT_DIR$/ckanext/datagovau/templates/package/read.rdf" />
  <change type="MODIFICATION" beforePath="$PROJECT_DIR$/ckanext/datagovau/templates/package/read_base.html" afterPath="$PROJECT_DIR$/ckanext/datagovau/templates/package/read_base.html" />
  <change type="MODIFICATION" beforePath="$PROJECT_DIR$/.idea/workspace.xml" afterPath="$PROJECT_DIR$/.idea/workspace.xml" />
  </list>
  <ignored path="ckanext-datagovau.iws" />
  <ignored path=".idea/workspace.xml" />
  <file path="/Dummy.txt" changelist="89ace156-8d75-43de-ba53-6e829c197435" time="1378773145747" ignored="false" />
  <file path="/plugin.py" changelist="89ace156-8d75-43de-ba53-6e829c197435" time="1378731005672" ignored="false" />
  <file path="/setup.py" changelist="89ace156-8d75-43de-ba53-6e829c197435" time="1378168657134" ignored="false" />
  <file path="/package_basic_fields.html" changelist="89ace156-8d75-43de-ba53-6e829c197435" time="1378727992485" ignored="false" />
  <file path="/package_metadata_fields.html" changelist="89ace156-8d75-43de-ba53-6e829c197435" time="1378729194397" ignored="false" />
  <file path="/read_base.html" changelist="89ace156-8d75-43de-ba53-6e829c197435" time="1378774943838" ignored="false" />
  <file path="/read.rdf" changelist="89ace156-8d75-43de-ba53-6e829c197435" time="1378775057466" ignored="false" />
  <file path="/README.rst" changelist="89ace156-8d75-43de-ba53-6e829c197435" time="1378703724236" ignored="false" />
  <file path="/a.dummy" changelist="89ace156-8d75-43de-ba53-6e829c197435" time="1378689054922" ignored="false" />
  <file path="/read.html" changelist="89ace156-8d75-43de-ba53-6e829c197435" time="1378721657045" ignored="false" />
  <file path="/create.py" changelist="89ace156-8d75-43de-ba53-6e829c197435" time="1378705719051" ignored="false" />
  <file path="/additional_info.html" changelist="89ace156-8d75-43de-ba53-6e829c197435" time="1378717234941" ignored="false" />
  <file path="/resource_read.html" changelist="89ace156-8d75-43de-ba53-6e829c197435" time="1378775248415" ignored="false" />
  <option name="TRACKING_ENABLED" value="true" />
  <option name="SHOW_DIALOG" value="false" />
  <option name="HIGHLIGHT_CONFLICTS" value="true" />
  <option name="HIGHLIGHT_NON_ACTIVE_CHANGELIST" value="false" />
  <option name="LAST_RESOLUTION" value="IGNORE" />
  </component>
  <component name="ChangesViewManager" flattened_view="true" show_ignored="false" />
  <component name="CreatePatchCommitExecutor">
  <option name="PATCH_PATH" value="" />
  </component>
  <component name="DaemonCodeAnalyzer">
  <disable_hints />
  </component>
  <component name="DebuggerManager">
  <ui_properties default_suspend_policy="SuspendAll" default_condition_enabled="true" />
  <breakpoint_any default_suspend_policy="SuspendAll" default_condition_enabled="true">
  <breakpoint>
  <option name="NOTIFY_CAUGHT" value="true" />
  <option name="NOTIFY_UNCAUGHT" value="true" />
  <option name="ENABLED" value="false" />
  <option name="LOG_ENABLED" value="false" />
  <option name="LOG_EXPRESSION_ENABLED" value="false" />
  <option name="REMOVE_AFTER_HIT" value="false" />
  <option name="SUSPEND_POLICY" value="SuspendAll" />
  <option name="SUSPEND" value="true" />
  <option name="COUNT_FILTER_ENABLED" value="false" />
  <option name="COUNT_FILTER" value="0" />
  <option name="CONDITION_ENABLED" value="true" />
  <option name="CLASS_FILTERS_ENABLED" value="false" />
  <option name="INSTANCE_FILTERS_ENABLED" value="false" />
  <option name="CONDITION" value="" />
  <option name="LOG_MESSAGE" value="" />
  </breakpoint>
  <breakpoint>
  <option name="NOTIFY_CAUGHT" value="true" />
  <option name="NOTIFY_UNCAUGHT" value="true" />
  <option name="ENABLED" value="false" />
  <option name="LOG_ENABLED" value="false" />
  <option name="LOG_EXPRESSION_ENABLED" value="false" />
  <option name="REMOVE_AFTER_HIT" value="false" />
  <option name="SUSPEND_POLICY" value="SuspendAll" />
  <option name="SUSPEND" value="true" />
  <option name="COUNT_FILTER_ENABLED" value="false" />
  <option name="COUNT_FILTER" value="0" />
  <option name="CONDITION_ENABLED" value="true" />
  <option name="CLASS_FILTERS_ENABLED" value="false" />
  <option name="INSTANCE_FILTERS_ENABLED" value="false" />
  <option name="CONDITION" value="" />
  <option name="LOG_MESSAGE" value="" />
  </breakpoint>
  </breakpoint_any>
  <breakpoint_rules />
  <ui_properties />
  </component>
  <component name="ExecutionTargetManager" SELECTED_TARGET="default_target" />
  <component name="FavoritesManager">
  <favorites_list name="ckanext-datagovau" />
  </component>
  <component name="FileEditorManager">
  <leaf>
  <file leaf-file-name="package_metadata_fields.html" pinned="false" current="false" current-in-tab="false">
  <entry file="file://$PROJECT_DIR$/ckanext/datagovau/templates/package/snippets/package_metadata_fields.html">
  <provider selected="true" editor-type-id="text-editor">
  <state line="35" column="74" selection-start="1081" selection-end="1081" vertical-scroll-proportion="-20.875">
  <folding />
  </state>
  </provider>
  </entry>
  </file>
  <file leaf-file-name="read_base.html" pinned="false" current="false" current-in-tab="false">
  <entry file="file://$PROJECT_DIR$/ckanext/datagovau/templates/package/read_base.html">
  <provider selected="true" editor-type-id="text-editor">
  <state line="11" column="0" selection-start="247" selection-end="1668" vertical-scroll-proportion="-6.875">
  <folding />
  </state>
  </provider>
  </entry>
  </file>
  <file leaf-file-name="resource_read.html" pinned="false" current="true" current-in-tab="true">
  <entry file="file://$PROJECT_DIR$/ckanext/datagovau/templates/package/resource_read.html">
  <provider selected="true" editor-type-id="text-editor">
  <state line="14" column="89" selection-start="580" selection-end="580" vertical-scroll-proportion="0.30837005">
  <folding />
  </state>
  </provider>
  </entry>
  </file>
  <file leaf-file-name="read.rdf" pinned="false" current="false" current-in-tab="false">
  <entry file="file://$PROJECT_DIR$/ckanext/datagovau/templates/package/read.rdf">
  <provider selected="true" editor-type-id="text-editor">
  <state line="47" column="50" selection-start="2578" selection-end="2596" vertical-scroll-proportion="0.0">
  <folding />
  </state>
  </provider>
  </entry>
  </file>
  </leaf>
  </component>
  <component name="FindManager">
  <FindUsagesManager>
  <setting name="OPEN_NEW_TAB" value="false" />
  </FindUsagesManager>
  </component>
  <component name="Git.Settings">
  <option name="RECENT_GIT_ROOT_PATH" value="$PROJECT_DIR$" />
  </component>
  <component name="GitLogSettings">
  <option name="myDateState">
  <MyDateState />
  </option>
  </component>
  <component name="IdeDocumentHistory">
  <option name="changedFiles">
  <list>
  <option value="$PROJECT_DIR$/ckanext/datagovau/theme/templates/layout.html" />
  <option value="$PROJECT_DIR$/ckanext/datagovau/forms.py" />
  <option value="$PROJECT_DIR$/setup.py" />
  <option value="$PROJECT_DIR$/README.rst" />
  <option value="$PROJECT_DIR$/ckanext/datagovau/theme/public/licenses.json" />
  <option value="$PROJECT_DIR$/../ckan/ckan/logic/action/create.py" />
  <option value="$PROJECT_DIR$/../ckan/ckan/templates/package/snippets/additional_info.html" />
  <option value="$PROJECT_DIR$/../ckan/ckan/templates/package/read_base.html" />
  <option value="$PROJECT_DIR$/ckanext/datagovau/templates/package/read.html" />
  <option value="$PROJECT_DIR$/ckanext/datagovau/templates/package/snippets/package_basic_fields.html" />
  <option value="$PROJECT_DIR$/ckanext/datagovau/templates/package/snippets/package_metadata_fields.html" />
  <option value="$PROJECT_DIR$/ckanext/datagovau/plugin.py" />
  <option value="$PROJECT_DIR$/ckanext/datagovau/templates/package/read_base.html" />
  <option value="$PROJECT_DIR$/ckanext/datagovau/templates/package/read.rdf" />
  <option value="$PROJECT_DIR$/ckanext/datagovau/templates/package/resource_read.html" />
  </list>
  </option>
  </component>
  <component name="ProjectFrameBounds">
  <option name="x" value="1280" />
  <option name="width" value="1920" />
  <option name="height" value="1080" />
  </component>
  <component name="ProjectLevelVcsManager" settingsEditedManually="false">
  <OptionsSetting value="true" id="Add" />
  <OptionsSetting value="true" id="Remove" />
  <OptionsSetting value="true" id="Checkout" />
  <OptionsSetting value="true" id="Update" />
  <OptionsSetting value="true" id="Status" />
  <OptionsSetting value="true" id="Edit" />
  <ConfirmationsSetting value="0" id="Add" />
  <ConfirmationsSetting value="0" id="Remove" />
  </component>
  <component name="ProjectReloadState">
  <option name="STATE" value="0" />
  </component>
  <component name="ProjectView">
  <navigator currentView="ProjectPane" proportions="" version="1" splitterProportion="0.5">
  <flattenPackages />
  <showMembers />
  <showModules />
  <showLibraryContents />
  <hideEmptyPackages />
  <abbreviatePackageNames />
  <autoscrollToSource />
  <autoscrollFromSource />
  <sortByType />
  </navigator>
  <panes>
  <pane id="Scope" />
  <pane id="ProjectPane">
  <subPane>
  <PATH>
  <PATH_ELEMENT>
  <option name="myItemId" value="ckanext-datagovau" />
  <option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.ProjectViewProjectNode" />
  </PATH_ELEMENT>
  </PATH>
  <PATH>
  <PATH_ELEMENT>
  <option name="myItemId" value="ckanext-datagovau" />
  <option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.ProjectViewProjectNode" />
  </PATH_ELEMENT>
  <PATH_ELEMENT>
  <option name="myItemId" value="ckanext-datagovau" />
  <option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode" />
  </PATH_ELEMENT>
  </PATH>
  <PATH>
  <PATH_ELEMENT>
  <option name="myItemId" value="ckanext-datagovau" />
  <option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.ProjectViewProjectNode" />
  </PATH_ELEMENT>
  <PATH_ELEMENT>
  <option name="myItemId" value="ckanext-datagovau" />
  <option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode" />
  </PATH_ELEMENT>
  <PATH_ELEMENT>
  <option name="myItemId" value=".idea" />
  <option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode" />
  </PATH_ELEMENT>
  </PATH>
  <PATH>
  <PATH_ELEMENT>
  <option name="myItemId" value="ckanext-datagovau" />
  <option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.ProjectViewProjectNode" />
  </PATH_ELEMENT>
  <PATH_ELEMENT>
  <option name="myItemId" value="ckanext-datagovau" />
  <option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode" />
  </PATH_ELEMENT>
  <PATH_ELEMENT>
  <option name="myItemId" value="ckanext_datagovau.egg-info" />
  <option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode" />
  </PATH_ELEMENT>
  </PATH>
  <PATH>
  <PATH_ELEMENT>
  <option name="myItemId" value="ckanext-datagovau" />
  <option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.ProjectViewProjectNode" />
  </PATH_ELEMENT>
  <PATH_ELEMENT>
  <option name="myItemId" value="ckanext-datagovau" />
  <option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode" />
  </PATH_ELEMENT>
  <PATH_ELEMENT>
  <option name="myItemId" value="ckanext" />
  <option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode" />
  </PATH_ELEMENT>
  </PATH>
  <PATH>
  <PATH_ELEMENT>
  <option name="myItemId" value="ckanext-datagovau" />
  <option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.ProjectViewProjectNode" />
  </PATH_ELEMENT>
  <PATH_ELEMENT>
  <option name="myItemId" value="ckanext-datagovau" />
  <option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode" />
  </PATH_ELEMENT>
  <PATH_ELEMENT>
  <option name="myItemId" value="ckanext" />
  <option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode" />
  </PATH_ELEMENT>
  <PATH_ELEMENT>
  <option name="myItemId" value="datagovau" />
  <option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode" />
  </PATH_ELEMENT>
  </PATH>
  <PATH>
  <PATH_ELEMENT>
  <option name="myItemId" value="ckanext-datagovau" />
  <option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.ProjectViewProjectNode" />
  </PATH_ELEMENT>
  <PATH_ELEMENT>
  <option name="myItemId" value="ckanext-datagovau" />
  <option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode" />
  </PATH_ELEMENT>
  <PATH_ELEMENT>
  <option name="myItemId" value="ckanext" />
  <option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode" />
  </PATH_ELEMENT>
  <PATH_ELEMENT>
  <option name="myItemId" value="datagovau" />
  <option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode" />
  </PATH_ELEMENT>
  <PATH_ELEMENT>
  <option name="myItemId" value="public" />
  <option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode" />
  </PATH_ELEMENT>
  </PATH>
  <PATH>
  <PATH_ELEMENT>
  <option name="myItemId" value="ckanext-datagovau" />
  <option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.ProjectViewProjectNode" />
  </PATH_ELEMENT>
  <PATH_ELEMENT>
  <option name="myItemId" value="ckanext-datagovau" />
  <option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode" />
  </PATH_ELEMENT>
  <PATH_ELEMENT>
  <option name="myItemId" value="ckanext" />
  <option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode" />
  </PATH_ELEMENT>
  <PATH_ELEMENT>
  <option name="myItemId" value="datagovau" />
  <option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode" />
  </PATH_ELEMENT>
  <PATH_ELEMENT>
  <option name="myItemId" value="package" />
  <option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode" />
  </PATH_ELEMENT>
  </PATH>
  <PATH>
  <PATH_ELEMENT>
  <option name="myItemId" value="ckanext-datagovau" />
  <option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.ProjectViewProjectNode" />
  </PATH_ELEMENT>
  <PATH_ELEMENT>
  <option name="myItemId" value="ckanext-datagovau" />
  <option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode" />
  </PATH_ELEMENT>
  <PATH_ELEMENT>
  <option name="myItemId" value="ckanext" />
  <option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode" />
  </PATH_ELEMENT>
  <PATH_ELEMENT>
  <option name="myItemId" value="datagovau" />
  <option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode" />
  </PATH_ELEMENT>
  <PATH_ELEMENT>
  <option name="myItemId" value="package" />
  <option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode" />
  </PATH_ELEMENT>
  <PATH_ELEMENT>
  <option name="myItemId" value="snippets" />
  <option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode" />
  </PATH_ELEMENT>
  </PATH>
  </subPane>
  </pane>
  <pane id="PackagesPane" />
  </panes>
  </component>
  <component name="PropertiesComponent">
  <property name="GoToFile.includeJavaFiles" value="false" />
  <property name="GoToClass.toSaveIncludeLibraries" value="false" />
  <property name="WebServerToolWindowFactoryState" value="false" />
  <property name="MemberChooser.sorted" value="false" />
  <property name="last_opened_file_path" value="$PROJECT_DIR$/../ckan/ckan/templates/package/resource_read.html" />
  <property name="MemberChooser.showClasses" value="true" />
  <property name="DefaultHtmlFileTemplate" value="Html5" />
  <property name="GoToClass.includeLibraries" value="false" />
  <property name="MemberChooser.copyJavadoc" value="false" />
  </component>
  <component name="PyConsoleOptionsProvider">
  <option name="myPythonConsoleState">
  <PyConsoleSettings />
  </option>
  <option name="myDjangoConsoleState">
  <PyConsoleSettings />
  </option>
  </component>
  <component name="RecentsManager">
  <key name="CopyFile.RECENT_KEYS">
  <recent name="$PROJECT_DIR$/ckanext/datagovau/templates/package" />
  </key>
  </component>
  <component name="RunManager">
  <configuration default="true" type="Remote" factoryName="Remote">
  <option name="USE_SOCKET_TRANSPORT" value="true" />
  <option name="SERVER_MODE" value="false" />
  <option name="SHMEM_ADDRESS" value="javadebug" />
  <option name="HOST" value="localhost" />
  <option name="PORT" value="5005" />
  <method />
  </configuration>
  <configuration default="true" type="PythonConfigurationType" factoryName="Python">
  <option name="INTERPRETER_OPTIONS" value="" />
  <option name="PARENT_ENVS" value="true" />
  <envs>
  <env name="PYTHONUNBUFFERED" value="1" />
  </envs>
  <option name="SDK_HOME" value="" />
  <option name="WORKING_DIRECTORY" value="" />
  <option name="IS_MODULE_SDK" value="false" />
  <module name="ckanext-datagovau" />
  <EXTENSION ID="PythonCoverageRunConfigurationExtension" enabled="false" sample_coverage="true" runner="coverage.py" />
  <option name="SCRIPT_NAME" value="" />
  <option name="PARAMETERS" value="" />
  <method />
  </configuration>
  <configuration default="true" type="tests" factoryName="Unittests">
  <option name="INTERPRETER_OPTIONS" value="" />
  <option name="PARENT_ENVS" value="true" />
  <envs />
  <option name="SDK_HOME" value="" />
  <option name="WORKING_DIRECTORY" value="" />
  <option name="IS_MODULE_SDK" value="false" />
  <module name="" />
  <EXTENSION ID="PythonCoverageRunConfigurationExtension" enabled="false" sample_coverage="true" runner="coverage.py" />
  <option name="SCRIPT_NAME" value="" />
  <option name="CLASS_NAME" value="" />
  <option name="METHOD_NAME" value="" />
  <option name="FOLDER_NAME" value="" />
  <option name="TEST_TYPE" value="TEST_SCRIPT" />
  <option name="PATTERN" value="" />
  <option name="USE_PATTERN" value="false" />
  <option name="PUREUNITTEST" value="true" />
  <option name="PARAMS" value="" />
  <option name="USE_PARAM" value="false" />
  <method />
  </configuration>
  <configuration default="true" type="Applet" factoryName="Applet">
  <module name="" />
  <option name="MAIN_CLASS_NAME" />
  <option name="HTML_FILE_NAME" />
  <option name="HTML_USED" value="false" />
  <option name="WIDTH" value="400" />
  <option name="HEIGHT" value="300" />
  <option name="POLICY_FILE" value="$APPLICATION_HOME_DIR$/bin/appletviewer.policy" />
  <option name="VM_PARAMETERS" />
  <option name="ALTERNATIVE_JRE_PATH_ENABLED" value="false" />
  <option name="ALTERNATIVE_JRE_PATH" />
  <method />
  </configuration>
  <configuration default="true" type="Application" factoryName="Application">
  <extension name="coverage" enabled="false" merge="false" sample_coverage="true" runner="idea" />
  <option name="MAIN_CLASS_NAME" />
  <option name="VM_PARAMETERS" />
  <option name="PROGRAM_PARAMETERS" />
  <option name="WORKING_DIRECTORY" value="$PROJECT_DIR$" />
  <option name="ALTERNATIVE_JRE_PATH_ENABLED" value="false" />
  <option name="ALTERNATIVE_JRE_PATH" />
  <option name="ENABLE_SWING_INSPECTOR" value="false" />
  <option name="ENV_VARIABLES" />
  <option name="PASS_PARENT_ENVS" value="true" />
  <module name="" />
  <envs />
  <method />
  </configuration>
  <configuration default="true" type="tests" factoryName="Doctests">
  <option name="INTERPRETER_OPTIONS" value="" />
  <option name="PARENT_ENVS" value="true" />
  <envs />
  <option name="SDK_HOME" value="" />
  <option name="WORKING_DIRECTORY" value="" />
  <option name="IS_MODULE_SDK" value="false" />
  <module name="ckanext-datagovau" />
  <EXTENSION ID="PythonCoverageRunConfigurationExtension" enabled="false" sample_coverage="true" runner="coverage.py" />
  <option name="SCRIPT_NAME" value="" />
  <option name="CLASS_NAME" value="" />
  <option name="METHOD_NAME" value="" />
  <option name="FOLDER_NAME" value="" />
  <option name="TEST_TYPE" value="TEST_SCRIPT" />
  <option name="PATTERN" value="" />
  <option name="USE_PATTERN" value="false" />
  <method />
  </configuration>
  <configuration default="true" type="JavascriptDebugSession" factoryName="Local" singleton="true">
  <JSDebuggerConfigurationSettings>
  <option name="engineId" value="embedded" />
  <option name="fileUrl" />
  </JSDebuggerConfigurationSettings>
  <method />
  </configuration>
  <list size="0" />
  <configuration name="&lt;template&gt;" type="JUnit" default="true" selected="false">
  <option name="MAIN_CLASS_NAME" />
  <option name="VM_PARAMETERS" value="-ea" />
  <option name="PARAMETERS" />
  <option name="WORKING_DIRECTORY" value="$PROJECT_DIR$" />
  </configuration>
  <configuration name="&lt;template&gt;" type="TestNG" default="true" selected="false">
  <option name="MAIN_CLASS_NAME" />
  <option name="VM_PARAMETERS" value="-ea" />
  <option name="PARAMETERS" />
  <option name="WORKING_DIRECTORY" value="$PROJECT_DIR$" />
  </configuration>
  <configuration name="&lt;template&gt;" type="#org.jetbrains.idea.devkit.run.PluginConfigurationType" default="true" selected="false">
  <option name="VM_PARAMETERS" value="-Xmx512m -Xms256m -XX:MaxPermSize=250m" />
  </configuration>
  <configuration name="&lt;template&gt;" type="WebApp" default="true" selected="false">
  <Host>localhost</Host>
  <Port>5050</Port>
  </configuration>
  </component>
  <component name="ShelveChangesManager" show_recycled="false" />
  <component name="TodoView" selected-index="0">
  <todo-panel id="selected-file">
  <are-packages-shown value="false" />
  <are-modules-shown value="false" />
  <flatten-packages value="false" />
  <is-autoscroll-to-source value="true" />
  </todo-panel>
  <todo-panel id="all">
  <are-packages-shown value="true" />
  <are-modules-shown value="false" />
  <flatten-packages value="false" />
  <is-autoscroll-to-source value="true" />
  </todo-panel>
  <todo-panel id="default-changelist">
  <are-packages-shown value="false" />
  <are-modules-shown value="false" />
  <flatten-packages value="false" />
  <is-autoscroll-to-source value="false" />
  </todo-panel>
  </component>
  <component name="ToolWindowManager">
  <frame x="1280" y="0" width="1920" height="1080" extended-state="6" />
  <editor active="true" />
  <layout>
  <window_info id="Changes" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" weight="0.3290735" sideWeight="0.5" order="7" side_tool="false" content_ui="tabs" />
  <window_info id="Palette" active="false" anchor="right" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" weight="0.33" sideWeight="0.5" order="3" side_tool="false" content_ui="tabs" />
  <window_info id="TODO" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" weight="0.3290735" sideWeight="0.5" order="6" side_tool="false" content_ui="tabs" />
  <window_info id="Structure" active="false" anchor="left" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" weight="0.25" sideWeight="0.5" order="1" side_tool="false" content_ui="tabs" />
  <window_info id="Project" active="false" anchor="left" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="true" weight="0.16183448" sideWeight="0.7795527" order="0" side_tool="false" content_ui="combo" />
  <window_info id="Debug" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" weight="0.4" sideWeight="0.5" order="3" side_tool="false" content_ui="tabs" />
  <window_info id="Favorites" active="false" anchor="left" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" weight="0.33" sideWeight="0.5" order="2" side_tool="true" content_ui="tabs" />
  <window_info id="Event Log" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="true" weight="0.22044729" sideWeight="0.5" order="7" side_tool="true" content_ui="tabs" />
  <window_info id="Run" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" weight="0.33" sideWeight="0.5" order="2" side_tool="false" content_ui="tabs" />
  <window_info id="Version Control" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" weight="0.33" sideWeight="0.5" order="7" side_tool="false" content_ui="tabs" />
  <window_info id="Cvs" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" weight="0.25" sideWeight="0.5" order="4" side_tool="false" content_ui="tabs" />
  <window_info id="Message" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" weight="0.33" sideWeight="0.5" order="0" side_tool="false" content_ui="tabs" />
  <window_info id="Ant Build" active="false" anchor="right" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" weight="0.25" sideWeight="0.5" order="1" side_tool="false" content_ui="tabs" />
  <window_info id="Find" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" weight="0.22091782" sideWeight="0.5" order="1" side_tool="false" content_ui="tabs" />
  <window_info id="Messages" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" weight="0.33" sideWeight="0.5" order="7" side_tool="false" content_ui="tabs" />
  <window_info id="Commander" active="false" anchor="right" auto_hide="false" internal_type="SLIDING" type="SLIDING" visible="false" weight="0.4" sideWeight="0.5" order="0" side_tool="false" content_ui="tabs" />
  <window_info id="Hierarchy" active="false" anchor="right" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" weight="0.25" sideWeight="0.5" order="2" side_tool="false" content_ui="combo" />
  <window_info id="Inspection" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" weight="0.4" sideWeight="0.5" order="5" side_tool="false" content_ui="tabs" />
  </layout>
  </component>
  <component name="VcsContentAnnotationSettings">
  <option name="myLimit" value="2678400000" />
  </component>
  <component name="VcsManagerConfiguration">
  <option name="OFFER_MOVE_TO_ANOTHER_CHANGELIST_ON_PARTIAL_COMMIT" value="true" />
  <option name="CHECK_CODE_SMELLS_BEFORE_PROJECT_COMMIT" value="true" />
  <option name="CHECK_NEW_TODO" value="true" />
  <option name="myTodoPanelSettings">
  <value>
  <are-packages-shown value="false" />
  <are-modules-shown value="false" />
  <flatten-packages value="false" />
  <is-autoscroll-to-source value="false" />
  </value>
  </option>
  <option name="PERFORM_UPDATE_IN_BACKGROUND" value="true" />
  <option name="PERFORM_COMMIT_IN_BACKGROUND" value="true" />
  <option name="PERFORM_EDIT_IN_BACKGROUND" value="true" />
  <option name="PERFORM_CHECKOUT_IN_BACKGROUND" value="true" />
  <option name="PERFORM_ADD_REMOVE_IN_BACKGROUND" value="true" />
  <option name="PERFORM_ROLLBACK_IN_BACKGROUND" value="false" />
  <option name="CHECK_LOCALLY_CHANGED_CONFLICTS_IN_BACKGROUND" value="false" />
  <option name="CHANGED_ON_SERVER_INTERVAL" value="60" />
  <option name="SHOW_ONLY_CHANGED_IN_SELECTION_DIFF" value="true" />
  <option name="CHECK_COMMIT_MESSAGE_SPELLING" value="true" />
  <option name="DEFAULT_PATCH_EXTENSION" value="patch" />
  <option name="SHORT_DIFF_HORIZONTALLY" value="true" />
  <option name="SHORT_DIFF_EXTRA_LINES" value="2" />
  <option name="SOFT_WRAPS_IN_SHORT_DIFF" value="true" />
  <option name="INCLUDE_TEXT_INTO_PATCH" value="false" />
  <option name="INCLUDE_TEXT_INTO_SHELF" value="false" />
  <option name="SHOW_FILE_HISTORY_DETAILS" value="true" />
  <option name="SHOW_VCS_ERROR_NOTIFICATIONS" value="true" />
  <option name="SHOW_DIRTY_RECURSIVELY" value="false" />
  <option name="LIMIT_HISTORY" value="true" />
  <option name="MAXIMUM_HISTORY_ROWS" value="1000" />
  <option name="UPDATE_FILTER_SCOPE_NAME" />
  <option name="USE_COMMIT_MESSAGE_MARGIN" value="false" />
  <option name="COMMIT_MESSAGE_MARGIN_SIZE" value="72" />
  <option name="WRAP_WHEN_TYPING_REACHES_RIGHT_MARGIN" value="false" />
  <option name="FORCE_NON_EMPTY_COMMENT" value="false" />
  <option name="CLEAR_INITIAL_COMMIT_MESSAGE" value="false" />
  <option name="LAST_COMMIT_MESSAGE" value="Update HTML package output to interim metadata standard" />
  <option name="MAKE_NEW_CHANGELIST_ACTIVE" value="false" />
  <option name="OPTIMIZE_IMPORTS_BEFORE_PROJECT_COMMIT" value="false" />
  <option name="CHECK_FILES_UP_TO_DATE_BEFORE_COMMIT" value="false" />
  <option name="REFORMAT_BEFORE_PROJECT_COMMIT" value="false" />
  <option name="REFORMAT_BEFORE_FILE_COMMIT" value="false" />
  <option name="FILE_HISTORY_DIALOG_COMMENTS_SPLITTER_PROPORTION" value="0.8" />
  <option name="FILE_HISTORY_DIALOG_SPLITTER_PROPORTION" value="0.5" />
  <option name="ACTIVE_VCS_NAME" />
  <option name="UPDATE_GROUP_BY_PACKAGES" value="false" />
  <option name="UPDATE_GROUP_BY_CHANGELIST" value="false" />
  <option name="UPDATE_FILTER_BY_SCOPE" value="false" />
  <option name="SHOW_FILE_HISTORY_AS_TREE" value="false" />
  <option name="FILE_HISTORY_SPLITTER_PROPORTION" value="0.6" />
  <MESSAGE value="Update HTML package output to interim metadata standard" />
  </component>
  <component name="XDebuggerManager">
  <breakpoint-manager />
  </component>
  <component name="editorHistoryManager">
  <entry file="file://$PROJECT_DIR$/../ckan/ckan/templates/base.html">
  <provider selected="true" editor-type-id="text-editor">
  <state line="0" column="0" selection-start="0" selection-end="0" vertical-scroll-proportion="0.0" />
  </provider>
  </entry>
  <entry file="file://$PROJECT_DIR$/../ckan/ckan/templates/macros/form.html">
  <provider selected="true" editor-type-id="text-editor">
  <state line="94" column="0" selection-start="4027" selection-end="4027" vertical-scroll-proportion="-21.333334" />
  </provider>
  </entry>
  <entry file="file://$PROJECT_DIR$/ckanext/datagovau/templates/package/read.html">
  <provider selected="true" editor-type-id="text-editor">
  <state line="0" column="0" selection-start="0" selection-end="0" vertical-scroll-proportion="0.0">
  <folding />
  </state>
  </provider>
  </entry>
  <entry file="file://$PROJECT_DIR$/ckanext/datagovau/templates/package/snippets/package_basic_fields.html">
  <provider selected="true" editor-type-id="text-editor">
  <state line="0" column="0" selection-start="0" selection-end="0" vertical-scroll-proportion="-0.0">
  <folding />
  </state>
  </provider>
  </entry>
  <entry file="file://$PROJECT_DIR$/../ckan/ckan/templates/package/snippets/package_metadata_fields.html">
  <provider selected="true" editor-type-id="text-editor">
  <state line="21" column="0" selection-start="1147" selection-end="1147" vertical-scroll-proportion="-0.625" />
  </provider>
  </entry>
  <entry file="file://$PROJECT_DIR$/../ckan/ckan/model/package.py">
  <provider selected="true" editor-type-id="text-editor">
  <state line="209" column="0" selection-start="7434" selection-end="7434" vertical-scroll-proportion="0.0" />
  </provider>
  </entry>
  <entry file="file://$PROJECT_DIR$/../ckan/ckan/logic/action/get.py">
  <provider selected="true" editor-type-id="text-editor">
  <state line="758" column="37" selection-start="24462" selection-end="24462" vertical-scroll-proportion="-6.6" />
  </provider>
  </entry>
  <entry file="file://$PROJECT_DIR$/../ckan/ckan/logic/schema.py">
  <provider selected="true" editor-type-id="text-editor">
  <state line="172" column="0" selection-start="7641" selection-end="7641" vertical-scroll-proportion="0.0" />
  </provider>
  </entry>
  <entry file="file://$PROJECT_DIR$/../ckan/ckan/lib/navl/validators.py">
  <provider selected="true" editor-type-id="text-editor">
  <state line="0" column="0" selection-start="0" selection-end="0" vertical-scroll-proportion="0.0" />
  </provider>
  </entry>
  <entry file="file://$PROJECT_DIR$/../ckan/ckan/logic/converters.py">
  <provider selected="true" editor-type-id="text-editor">
  <state line="33" column="0" selection-start="391" selection-end="1056" vertical-scroll-proportion="0.0" />
  </provider>
  </entry>
  <entry file="file://$PROJECT_DIR$/ckanext/datagovau/plugin.py">
  <provider selected="true" editor-type-id="text-editor">
  <state line="106" column="0" selection-start="4140" selection-end="4271" vertical-scroll-proportion="0.0" />
  </provider>
  </entry>
  <entry file="file://$PROJECT_DIR$/ckanext/datagovau/templates/package/snippets/package_metadata_fields.html">
  <provider selected="true" editor-type-id="text-editor">
  <state line="35" column="74" selection-start="1081" selection-end="1081" vertical-scroll-proportion="-20.875">
  <folding />
  </state>
  </provider>
  </entry>
  <entry file="file://$PROJECT_DIR$/ckanext/datagovau/templates/package/read_base.html">
  <provider selected="true" editor-type-id="text-editor">
  <state line="11" column="0" selection-start="247" selection-end="1668" vertical-scroll-proportion="-6.875">
  <folding />
  </state>
  </provider>
  </entry>
  <entry file="file://$PROJECT_DIR$/../ckan/ckan/templates/package/resource_read.html">
  <provider selected="true" editor-type-id="text-editor">
  <state line="24" column="105" selection-start="970" selection-end="970" vertical-scroll-proportion="0.48018292">
  <folding />
  </state>
  </provider>
  </entry>
  <entry file="file://$PROJECT_DIR$/ckanext/datagovau/templates/package/read.rdf">
  <provider selected="true" editor-type-id="text-editor">
  <state line="47" column="50" selection-start="2578" selection-end="2596" vertical-scroll-proportion="0.0">
  <folding />
  </state>
  </provider>
  </entry>
  <entry file="file://$PROJECT_DIR$/ckanext/datagovau/templates/package/resource_read.html">
  <provider selected="true" editor-type-id="text-editor">
  <state line="14" column="89" selection-start="580" selection-end="580" vertical-scroll-proportion="0.30837005">
  <folding />
  </state>
  </provider>
  </entry>
  </component>
  </project>
 
 
file:b/README.rst (new)
  This CKAN Extension customises a CKAN instance for the hosting of data.gov.au.
 
  It comprises:
 
  * A CKAN Extension "plugin" at ``ckanext/datagovau/plugin.py`` which, when
  loaded, overrides various settings in the core ``ini``-file to provide:
  * A path to local customisations of the core templates
  * A custom Package edit form that defaults to cc-by licence
  * A custom n3/rdf output format
 
  * A cut down licenses.json file
 
  Installation
  ============
 
  To install this package, from your CKAN virtualenv, run the following from your CKAN base folder (e.g. ``pyenv/``)::
 
  pip install -e git+https://github.com/okfn/ckanext-datagovau#egg=ckanext-datagovau
 
  Then activate it by setting ``ckan.plugins = datagovau`` in your main ``ini``-file.
 
  To add the cut down licenses.json set ``licenses_group_url = http://%(ckan.site_url)/licenses.json``
  or copy ``ckanext/datagovau/theme/public/licenses.json`` to the same folder as your CKAN config ini file
  and set ``licenses_group_url = file://%(here)s/licenses.json``
 
 
 
file:a/README.txt (deleted)
This CKAN Extension demonstrates some common patterns for customising a CKAN instance.  
 
It comprises:  
 
* A CKAN Extension "plugin" at ``ckanext/exampletheme/__init__.py``  
which, when loaded, overrides various settings in the core  
``ini``-file to provide:  
 
* A path to local customisations of the core templates and stylesheets  
* A "stream filter" that replaces arbitrary strings in rendered templates  
* A "route" to override and extend the default behaviour of a core CKAN page  
 
* A custom Pylons controller for overriding some core CKAN behaviour  
 
* A custom Package edit form  
 
* Some simple template customisations  
 
Installation  
============  
 
To install this package, from your CKAN virtualenv, run the following from your CKAN base folder (e.g. ``pyenv/``)::  
 
pip install -e hg+https://bitbucket.org/okfn/ckanext-exampletheme#egg=ckanext-exampletheme  
 
Then activate it by setting ``ckan.plugins = exampletheme`` in your main ``ini``-file.  
 
 
Orientation  
===========  
 
* Examine the source code, starting with ``ckanext/exampletheme/__init__.py``  
 
* To understand the nuts and bolts of this file, which is a CKAN  
*Extension*, read in conjunction with the "Extension  
documentation":http://packages.python.org/ckan/plugins.html  
 
* One thing the extension does is set the values of  
``extra_public_paths`` and ``extra_template_paths`` in the CKAN  
config, which are "documented  
here":http://packages.python.org/ckan/configuration.html#extra-template-paths  
 
* These are set to point at directories within  
`ckanext/exampletheme/theme/`` (in this package). Here, we override  
the home page, provide some extra style with an ``extra.css``, and  
customise the navigation and header of the main template in the file ``layout.html``.  
 
The latter file is a great place to make global theme alterations.  
It uses the _layout template_ pattern "described in the Genshi  
documentation":http://genshi.edgewall.org/wiki/GenshiTutorial#AddingaLayoutTemplate.  
This allows you to use Xpath selectors to override snippets of HTML  
globally.  
 
* The custom package edit form at ``package_form.py`` follows the  
conventions in the "main CKAN  
documentation":http://packages.python.org/ckan/forms.html  
 
  <?xml version="1.0" encoding="UTF-8"?>
  <module type="PYTHON_MODULE" version="4">
  <component name="NewModuleRootManager" inherit-compiler-output="true">
  <exclude-output />
  <content url="file://$MODULE_DIR$">
  <sourceFolder url="file://$MODULE_DIR$" isTestSource="false" />
  </content>
  <orderEntry type="inheritedJdk" />
  <orderEntry type="sourceFolder" forTests="false" />
  </component>
  </module>
 
 
  import logging
 
  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.model as model
 
  #parse the activity feed for last active non-system user
  def get_last_active_user(id):
  system_user = "de0ba262-83fe-45e2-adda-41bb9f0c86d8"
  user_list = [x for x in lib.helpers.get_action('package_activity_list',{'id':id}) if x['user_id'] != system_user]
  user = user_list[0]['user_id']
  if user is None:
  return lib.helpers.get_action('user_show',{'id':system_user})
  else:
  return lib.helpers.get_action('user_show',{'id':user})
 
  # get user created datasets and those they have edited
  def get_user_datasets(user_dict):
  created_datasets_list = user_dict['datasets']
  active_datasets_id_list = [x['data']['package'] for x in
  lib.helpers.get_action('user_activity_list',{'id':user_dict['id']}) if x['data'].get('package')]
  active_datasets_list = active_datasets_id_list #if you need more detail, fetch each dataset here
  print active_datasets_list
  return created_datasets_list + active_datasets_list
 
 
  class ExampleIDatasetFormPlugin(plugins.SingletonPlugin,
  tk.DefaultDatasetForm):
  '''An example IDatasetForm CKAN plugin.
 
  Uses a tag vocabulary to add a custom metadata field to datasets.
 
  '''
  plugins.implements(plugins.IConfigurer, inherit=False)
  plugins.implements(plugins.IDatasetForm, inherit=False)
  plugins.implements(plugins.ITemplateHelpers, inherit=False)
 
  # These record how many times methods that this plugin's methods are
  # called, for testing purposes.
  num_times_new_template_called = 0
  num_times_read_template_called = 0
  num_times_edit_template_called = 0
  num_times_search_template_called = 0
  num_times_history_template_called = 0
  num_times_package_form_called = 0
  num_times_check_data_dict_called = 0
  num_times_setup_template_variables_called = 0
 
 
  def update_config(self, config):
  # Add this plugin's templates dir to CKAN's extra_template_paths, so
  # that CKAN will use this plugin's custom templates.
  # here = os.path.dirname(__file__)
  # rootdir = os.path.dirname(os.path.dirname(here))
 
  tk.add_template_directory(config, 'templates')
  tk.add_public_directory(config, 'theme/public')
  tk.add_resource('theme/public', 'ckanext-datagovau')
  # config['licenses_group_url'] = 'http://%(ckan.site_url)/licenses.json'
 
  def get_helpers(self):
  return {'get_last_active_user': get_last_active_user, 'get_user_datasets': get_user_datasets}
 
  def is_fallback(self):
  # Return True to register this plugin as the default handler for
  # package types not handled by any other IDatasetForm plugin.
  return True
 
  def package_types(self):
  # This plugin doesn't handle any special package types, it just
  # registers itself as the default (above).
  return []
 
 
  def create_package_schema(self):
  schema = super(ExampleIDatasetFormPlugin, self).create_package_schema()
  schema = self._modify_package_schema(schema)
  return schema
 
  def update_package_schema(self):
  schema = super(ExampleIDatasetFormPlugin, self).update_package_schema()
  schema = self._modify_package_schema(schema)
  return schema
 
  def show_package_schema(self):
  schema = super(ExampleIDatasetFormPlugin, self).show_package_schema()
 
  # Don't show vocab tags mixed in with normal 'free' tags
  # (e.g. on dataset pages, or on the search page)
  schema['tags']['__extras'].append(tk.get_converter('free_tags_only'))
 
  # Add our custom_text field to the dataset schema.
  # ignore_missing == optional
  # ignore_empty == mandatory but not for viewing
  # !!! always convert_from_extras first
  schema.update({
  'agency_program': [tk.get_converter('convert_from_extras'),
  tk.get_validator('ignore_missing')],
  'contact_point': [tk.get_converter('convert_from_extras'),
  tk.get_validator('ignore_empty')],
  'spatial_coverage': [tk.get_converter('convert_from_extras'),
  tk.get_validator('ignore_empty')],
  'granularity': [tk.get_converter('convert_from_extras'),
  tk.get_validator('ignore_empty')],
  'jurisdiction': [tk.get_converter('convert_from_extras'),
  tk.get_validator('ignore_empty')],
  'temporal_coverage': [tk.get_converter('convert_from_extras'),
  tk.get_validator('ignore_empty')],
  'data_state': [tk.get_converter('convert_from_extras'),
  tk.get_validator('ignore_empty')],
  'update_freq': [tk.get_converter('convert_from_extras'),
  tk.get_validator('ignore_empty')]
  })
  return schema
 
  def _modify_package_schema(self, schema):
  # Add our custom_test metadata field to the schema, this one will use
  # convert_to_extras instead of convert_to_tags.
  # ignore_missing == optional
  # not_empty == mandatory, enforced here while modifying
 
  schema.update({
  'agency_program': [tk.get_validator('ignore_missing'),
  tk.get_converter('convert_to_extras')],
  'contact_point': [tk.get_converter('convert_to_extras'),
  tk.get_validator('not_empty')],
  'spatial_coverage': [tk.get_converter('convert_to_extras'),
  tk.get_validator('not_empty')],
  'granularity': [tk.get_converter('convert_to_extras'),
  tk.get_validator('not_empty')],
  'jurisdiction': [tk.get_converter('convert_to_extras'),
  tk.get_validator('not_empty')],
  'temporal_coverage': [tk.get_converter('convert_to_extras'),
  tk.get_validator('not_empty')],
  'data_state': [tk.get_converter('convert_to_extras'),
  tk.get_validator('not_empty')],
  'update_freq': [tk.get_converter('convert_to_extras'),
  tk.get_validator('not_empty')]
  })
  return schema
 
  # These methods just record how many times they're called, for testing
  # purposes.
  # TODO: It might be better to test that custom templates returned by
  # these methods are actually used, not just that the methods get
  # called.
 
  def setup_template_variables(self, context, data_dict):
  return super(ExampleIDatasetFormPlugin, self).setup_template_variables(
  context, data_dict)
 
  def new_template(self):
  return super(ExampleIDatasetFormPlugin, self).new_template()
 
  def read_template(self):
  return super(ExampleIDatasetFormPlugin, self).read_template()
 
  def edit_template(self):
  return super(ExampleIDatasetFormPlugin, self).edit_template()
 
  def search_template(self):
  return super(ExampleIDatasetFormPlugin, self).search_template()
 
  def history_template(self):
  return super(ExampleIDatasetFormPlugin, self).history_template()
 
  def package_form(self):
  return super(ExampleIDatasetFormPlugin, self).package_form()
 
 
  {% ckan_extends %}
 
  {% block package_additional_info %}
  <section class="additional-info" xmlns:dcat="http://www.w3.org/ns/dcat#"
  xmlns:dcam="http://purl.org/dc/dcam/"
  xmlns:aglsterms="http://www.agls.gov.au/agls/terms/"
  xmlns:agentterms="http://www.agls.gov.au/agls/agentterms/"
  xmlns:availterms="http://www.agls.gov.au/agls/availterms/"
  xmlns:adminterms="http://www.agls.gov.au/agls/adminterms/"
  xmlns:dct="http://purl.org/dc/terms/">
  <h3>{{ _('Additional Info') }}</h3>
  <table class="table table-striped table-bordered table-condensed">
  <thead>
  <tr>
  <th scope="col">{{ _('Field') }}</th>
  <th scope="col">{{ _('Value') }}</th>
  </tr>
  </thead>
  <tbody>
 
 
  {# Add our custom field to the dataset read page. #}
  {% if pkg.get('metadata_created') %}
  <tr>
  <th scope="row" class="dataset-label">Date Published</th>
  <td class="dataset-details" property="dct:issued">{{ pkg.metadata_created.split("T")[0] }}</td>
  </tr>
  {% endif %}
  {% if pkg.get('metadata_updated') %}
  <tr>
  <th scope="row" class="dataset-label">Date Updated</th>
  <td class="dataset-details" property="dct:updated">{{ pkg.metadata_updated.split("T")[0] }}</td>
  </tr>
  {% endif %}
  {% if pkg.get('agency_program') %}
  <tr>
  <th scope="row" class="dataset-label">Agency Program</th>
  <td class="dataset-details"> {{ pkg.agency_program }}</td>
  </tr>
  {% endif %}
  {% if pkg.get('Agency Program') %}
  <tr>
  <th scope="row" class="dataset-label">Agency Program</th>
  <td class="dataset-details"> {{ pkg.get('Agency Program') }}</td>
  </tr>
  {% endif %}
  {% if h.get_pkg_dict_extra(pkg,'DCTERMS.Source.URI') %}
  <tr>
  <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'),
  h.get_pkg_dict_extra(pkg,'DCTERMS.Source.URI'), rel='dct:source', target='_blank') }}
  </td>
  </tr>
  {% endif %}
 
  {% if pkg.get('contact_point') %}
  <tr>
  <th scope="row" class="dataset-label">Contact Point</th>
  <td class="dataset-details" property="dcat:contactPoint"> {{ h.mail_to(email_address=pkg.contact_point,
  name=pkg.contact_point) }}</td>
  </tr>
  {% endif %}
  {% if pkg.get('spatial_coverage') %}
 
  <tr>
  <th scope="row" class="dataset-label">Geospatial Coverage</th>
  <td class="dataset-details" property="dct:spatial"> {{ pkg.spatial_coverage }}</td>
  </tr>
  {% endif %}
  {% if h.get_pkg_dict_extra(pkg,'Geospatial Coverage') %}
 
  <tr>
  <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>
  </tr>
  {% endif %}
  {% if pkg.get('granularity') %}
 
  <tr>
  <th scope="row" class="dataset-label">Data Granularity</th>
  <td class="dataset-details"> {{ pkg.granularity }}</td>
  </tr>
  {% endif %}
  {% if h.get_pkg_dict_extra(pkg,'Granularity') %}
 
  <tr>
  <th scope="row" class="dataset-label">Data Granularity</th>
  <td class="dataset-details"> {{ h.get_pkg_dict_extra(pkg,'Granularity') }}</td>
  </tr>
  {% endif %}
  {% if pkg.get('jurisdiction') %}
 
  <tr>
  <th scope="row" class="dataset-label">Government Jurisdiction</th>
  <td class="dataset-details" property="aglsterms:AglsJuri"> {{ pkg.jurisdiction }}</td>
  </tr>
  {% endif %}
  {% if h.get_pkg_dict_extra(pkg,'AGLSTERMS.Jurisdiction') %}
 
  <tr>
  <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>
  </tr>
  {% endif %}
  {% if pkg.get('temporal_coverage') %}
 
  <tr>
  <th scope="row" class="dataset-label">Temporal Coverage</th>
  <td class="dataset-details" property="dct:temporal"> {{ pkg.temporal_coverage }}</td>
  </tr>
  {% endif %}
  {% if h.get_pkg_dict_extra(pkg,'Temporal Coverage') %}
 
  <tr>
  <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>
  </tr>
  {% endif %}
  {% if pkg.get('data_state') %}
 
  <tr>
  <th scope="row" class="dataset-label">Data State</th>
  <td class="dataset-details"> {{ pkg.data_state }}</td>
  </tr>
  {% endif %}
  {% if pkg.get('update_freq') %}
 
  <tr>
  <th scope="row" class="dataset-label">Update Frequency</th>
  <td class="dataset-details"> {{ pkg.update_freq }}</td>
  </tr>
  {% endif %}
  {% if h.get_pkg_dict_extra(pkg,'Update Frequency') %}
  <tr>
  <th scope="row" class="dataset-label">Update Frequency</th>
  <td class="dataset-details"> {{ h.get_pkg_dict_extra(pkg,'Update Frequency') }}</td>
  </tr>
  {% endif %}
 
  {% set email =h.get_last_active_user(c.pkg_dict['id']).get('email','') %}
  <tr>
  <th scope="row" class="dataset-label">{{ _('Maintainer') }}</th>
  <td class="dataset-details" property="dc:contributor">{{
  h.mail_to(email_address=(email or ' '), name=h.get_last_active_user(c.pkg_dict['id']).get("display_name",'')) }}
  </td>
  </tr>
  <tr>
  <th scope="row" class="dataset-label">Publisher/Agency</th>
  <td class="dataset-details" property="dc:publisher">{{ c.pkg_dict['organization']['title']}}
  </td>
  </tr>
  <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>
  </table>
  </section>
 
 
  {% endblock %}
 
  @prefix : <http://www.w3.org/2000/01/rdf-schema#> .
  @prefix dcat: <http://www.w3.org/ns/dcat#> .
  @prefix dct: <http://purl.org/dc/terms/> .
  @prefix foaf: <http://xmlns.com/foaf/0.1/> .
  @prefix owl: <http://www.w3.org/2002/07/owl#> .
  @prefix rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> .
 
  <${ h.url_for(controller='package',action='read',id=c.pkg_dict['name'], qualified=True)}>
  a dcat:Dataset;
  dct:description "${c.pkg_dict['notes']}";
  dct:identifier "${c.pkg_dict['name']}";
  dct:relation [
  rdf:value "";
  :label "change_note" ],
  [
  rdf:value "";
  :label "definition_note" ],
  [
  rdf:value "";
  :label "editorial_note" ],
  [
  rdf:value "";
  :label "example_note" ],
  [
  rdf:value "";
  :label "history_note" ],
  [
  rdf:value "";
  :label "scope_note" ],
  [
  rdf:value "";
  :label "skos_note" ],
  [
  rdf:value "";
  :label "temporal_granularity" ],
  [
  rdf:value "";
  :label "type_of_dataset" ],
  [
  rdf:value "";
  :label "update_frequency" ];
  dct:title "${c.pkg_dict['title']}";
  :label "${c.pkg_dict['name']}";
  = <urn:uuid:${c.pkg_dict['id']}>;
  foaf:homepage <http://127.0.0.1:5000/dataset/testt> .
  <?xml version="1.0" encoding="utf-8"?>
  <rdf:RDF
  xmlns:py="http://genshi.edgewall.org/"
  xmlns:foaf="http://xmlns.com/foaf/0.1/"
  xmlns:owl="http://www.w3.org/2002/07/owl#"
  xmlns:rdfs="http://www.w3.org/2000/01/rdf-schema#"
  xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
  xmlns:dcat="http://www.w3.org/ns/dcat#"
  xmlns:dcam="http://purl.org/dc/dcam/"
  xmlns:aglsterms="http://www.agls.gov.au/agls/terms/"
  xmlns:agentterms="http://www.agls.gov.au/agls/agentterms/"
  xmlns:availterms="http://www.agls.gov.au/agls/availterms/"
  xmlns:adminterms="http://www.agls.gov.au/agls/adminterms/"
  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)}">
  <dct:identifier>${c.pkg_dict['name']}</dct:identifier>
  <dct:title>${c.pkg_dict['title']}</dct:title>
  <dct:landingPage
  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']}"/>
  <dct:type>Dataset</dct:type>
  <dct:description>${c.pkg_dict['notes']}</dct:description>
  <dct:issued>${c.pkg_dict['metadata_created']}</dct:issued>
  <dct:modified>${c.pkg_dict['metadata_modified']}</dct:modified>
  <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: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',[])">
  <dcat:keyword>${ tag_dict["name"] }</dcat:keyword>
  </py:for>
  <py:for each="group_dict in c.pkg_dict.get('groups',[])">
  <dcat:theme>${ group_dict["title"] }</dcat:theme>
  </py:for>
 
  <foaf:homepage
  rdf:resource="${ h.url_for(controller='package',action='read',id=c.pkg_dict['name'], qualified=True)}"/>
  <rdfs:label>${c.pkg_dict['name']}</rdfs:label>
 
 
  <py:for each="rsc_dict in c.pkg_dict['resources']">
  <dcat:distribution>
  <dcat:Distribution>
  <dct:title>${rsc_dict.get('name')}</dct:title>
  <owl:sameAs rdf:resource="urn:uuid:${rsc_dict.get('id')}"/>
  <dct:description>${rsc_dict.get('description')}</dct:description>
  <dcat:accessURL rdf:resource="${ rsc_dict.get('url') }"/>
  <dct:created>${rsc_dict.get('created')}</dct:created>
  <dct:modified>${rsc_dict.get('revision_timestamp')}</dct:modified>
  <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>
  <dct:extent py:if="rsc_dict.get('size')">${rsc_dict.get('size')} bytes</dct:extent>
  <dct:format py:if="rsc_dict.get('format')">
  <dct:IMT>
  <rdf:value>${rsc_dict.get('format')}</rdf:value>
  <rdfs:label>${rsc_dict.get('format')}</rdfs:label>
  </dct:IMT>
  </dct:format>
  <dct:title py:if="rsc_dict.get('name')">${rsc_dict.get('name')}</dct:title>
  </dcat:Distribution>
  </dcat:distribution>
  </py:for>
  <dct:publisher py:if="c.pkg_dict.get('organization', None)">
  <rdf:Description>
  <foaf:name>${ c.pkg_dict['organization']['title'] }</foaf:name>
  </rdf:Description>
  </dct:publisher>
  <dct:creator py:if="c.pkg_dict.get('organization', None)">
  <rdf:Description>
  <foaf:name>${ c.pkg_dict['organization']['title'] }</foaf:name>
  </rdf:Description>
  </dct:creator>
  <dct:contributor>
  <rdf:Description>
  <foaf:name>${h.get_last_active_user(c.pkg_dict['id'])["display_name"]}</foaf:name>
  <foaf:mbox py:if="h.get_last_active_user(c.pkg_dict['id']).get('email', None)"
  rdf:resource="mailto:${h.get_last_active_user(c.pkg_dict['id'])['email']}"/>
  </rdf:Description>
  </dct:contributor>
 
 
  <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>
 
  <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="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="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="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')">
  <rdf:Description>
  <rdfs:label>Data State</rdfs:label>
  <rdf:value>${ c.pkg_dict.get('data_state') }</rdf:value>
  </rdf:Description>
  </dct:relation>
 
  <dct:relation py:if="c.pkg_dict.get('update_freq')">
  <rdf:Description>
  <rdfs:label>Update Frequency</rdfs:label>
  <rdf:value>${ c.pkg_dict.get('update_freq') }</rdf:value>
  </rdf:Description>
  </dct:relation>
  <dct:relation py:if="h.get_pkg_dict_extra(c.pkg_dict,'Update Frequency')">
  <rdf:Description>
  <rdfs:label>Update Frequency</rdfs:label>
  <rdf:value>${ h.get_pkg_dict_extra(c.pkg_dict,'Update Frequency') }</rdf:value>
  </rdf:Description>
  </dct:relation>
 
  <dct:relation py:if="h.get_pkg_dict_extra(c.pkg_dict,'Agency Program')">
  <rdf:Description>
  <rdfs:label>Agency Program</rdfs:label>
  <rdf:value>${ h.get_pkg_dict_extra(c.pkg_dict,'Agency Program') }</rdf:value>
  </rdf:Description>
  </dct:relation>
  <dct:relation py:if="c.pkg_dict.get('agency_program')">
  <rdf:Description>
  <rdfs:label>Agency Program</rdfs:label>
  <rdf:value>${ c.pkg_dict.get('agency_program') }</rdf:value>
  </rdf:Description>
  </dct:relation>
 
  <dct:relation py:if="h.get_pkg_dict_extra(c.pkg_dict,'Granularity')">
  <rdf:Description>
  <rdfs:label>Data Granularity</rdfs:label>
  <rdf:value>${ h.get_pkg_dict_extra(c.pkg_dict,'Granularity') }</rdf:value>
  </rdf:Description>
  </dct:relation>
  <dct:relation py:if="c.pkg_dict.get('granularity')">
  <rdf:Description>
  <rdfs:label>Data Granularity</rdfs:label>
  <rdf:value>${ c.pkg_dict.get('granularity') }</rdf:value>
  </rdf:Description>
  </dct:relation>
 
  <py:for each="extra_dict in c.pkg_dict.get('extras',[])">
  <dct:relation>
  <rdf:Description>
  <rdfs:label>${extra_dict.get('key','')}</rdfs:label>
  <rdf:value>${extra_dict.get('value','')}</rdf:value>
  </rdf:Description>
  </dct:relation>
  </py:for>
  </dcat:Dataset>
  </rdf:RDF>
 
  {% ckan_extends %}
 
  {% block links -%}
  {{ super() }}
  <link rel="schema.DCTERMS" href="http://purl.org/dc/terms/" />
  <link rel="schema.AGLSTERMS" href="http://www.agls.gov.au/agls/terms/" />
 
  {% endblock -%}
 
  {% block head_extras -%}
  {{ super() }}
  <meta name="DCTERMS.Language" scheme="RFC3066" content="en" />
  <meta name="DCTERMS.Type" scheme="AGLSTERMS.Document" content="dataset" />
  <meta name="DCTERMS.Creator" scheme="AGLSTERMS.AglsAgent" content="{{ pkg['organization']['title'] }}" />
  <meta name="DCTERMS.Modified" scheme="DCTERMS.ISO8601" content="{{pkg['metadata_modified']}}" />
  <meta name="DCTERMS.Published" scheme="DCTERMS.ISO8601" content="{{pkg['metadata_created']}}" />
  {% if h.get_pkg_dict_extra(pkg,'DCTERMS.Source.URI') %}<meta name="DCTERMS.Source.URI" content="{{h.get_pkg_dict_extra(pkg,'DCTERMS.Source.URI')}}" />{% endif %}
  <meta name="DCTERMS.License" content="{{pkg['license_url']}}" />
  <meta name="DCTERMS.Coverage.Temporal" content="{{pkg.temporal_coverage or h.get_pkg_dict_extra(pkg,'Temporal Coverage')}}" />
  <meta name="DCTERMS.Coverage.Spatial" content="{{pkg.spatial_coverage or h.get_pkg_dict_extra(pkg,'Geospatial Coverage')}}" />
  <meta name="AGLSTERMS.Jurisdiction" scheme="AGLSTERMS.AglsJuri" content="{{pkg.jurisdiction or h.get_pkg_dict_extra(pkg,'AGLSTERMS.Jurisdiction')}}" />
  <meta name="DCAT.Theme" scheme="VO" content="{% for x in pkg.groups %}{{x['title']}},{% endfor %}" />
  <meta name="DCTERMS.Identifier" content="{{h.url_for(controller='package',action='read',id=c.pkg_dict['name'], qualified=True)}}" />
  <meta name="DCTERMS.Title" content="{{pkg['title']}}" />
  <meta name="DCTERMS.Description" scheme="" content="{{pkg['notes']}}" />
  <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
 
  {% endblock -%}
 
  {% block package_info %}
  <div class="module context-info">
  <div class="module-content">
  <h1 class="heading" property="dct:title">{{ pkg.title or pkg.name }}</h1>
  <div class="nums">
  <dl>
  <dt>{{ _('Followers') }}</dt>
  <dd>{{ h.SI_number_span(h.get_action('dataset_follower_count', {'id': pkg.id})) }}</dd>
  </dl>
  </div>
  <div class="follow_button">
  {{ h.follow_button('dataset', pkg.name) }}
  </div>
  </div>
  </div>
  {% endblock %}
 
 
  {% ckan_extends %}
 
  {% block links -%}
  {{ super() }}
  <link rel="schema.DCTERMS" href="http://purl.org/dc/terms/" />
  <link rel="schema.AGLSTERMS" href="http://www.agls.gov.au/agls/terms/" />
 
  {% endblock -%}
 
  {% block head_extras -%}
  {{ super() }}
  <meta name="DCTERMS.Language" scheme="RFC3066" content="en" />
  <meta name="DCTERMS.Type" scheme="AGLSTERMS.Document" content="dataset" />
  <meta name="DCTERMS.Creator" scheme="AGLSTERMS.AglsAgent" content="{{ pkg['organization']['title'] }}" />
  <meta name="DCTERMS.Modified" scheme="DCTERMS.ISO8601" content="{{res['revision_timestamp']}}" />
  <meta name="DCTERMS.Published" scheme="DCTERMS.ISO8601" content="{{res['created']}}" />
  {% if h.get_pkg_dict_extra(pkg,'DCTERMS.Source.URI') %}<meta name="DCTERMS.Source.URI" content="{{h.get_pkg_dict_extra(pkg,'DCTERMS.Source.URI')}}" />{% endif %}
  <meta name="DCTERMS.License" content="{{pkg['license_url']}}" />
  <meta name="DCTERMS.Coverage.Temporal" content="{{pkg.temporal_coverage or h.get_pkg_dict_extra(pkg,'Temporal Coverage')}}" />
  <meta name="DCTERMS.Coverage.Spatial" content="{{pkg.spatial_coverage or h.get_pkg_dict_extra(pkg,'Geospatial Coverage')}}" />
  <meta name="AGLSTERMS.Jurisdiction" scheme="AGLSTERMS.AglsJuri" content="{{pkg.jurisdiction or h.get_pkg_dict_extra(pkg,'AGLSTERMS.Jurisdiction')}}" />
  <meta name="DCAT.Theme" scheme="VO" content="{% for x in pkg.groups %}{{x['title']}},{% endfor %}" />
  <meta name="DCAT.byteSize" content="{{res.get('size')}}" />
  <meta name="DCAT.mediaType" content="{{res.get('mimetype')}}" />
  <meta name="DCTERMS.Identifier" content="{{res.get('url')}}" />
  <meta name="DCTERMS.Title" content="{{res['name']}}" />
  <meta name="DCTERMS.Description" scheme="" content="{{res['description']}}" />
  <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
 
  <meta name="DCTERMS.Format" content="{{res.format}}" />
  <meta name="DCTERMS.File.Size" content="{{res.size}}" />
 
  {% endblock -%}
 
 
 
  {% ckan_extends %}
 
  {% block package_basic_fields_org %}
 
  {{ super() }}
 
  {{ form.input('agency_program', label=_('Agency Program'), id='field-agency_program',
  placeholder=_('Name of the Agency Program that generated the data if relevant'),
  value=data.agency_program, error=errors.agency_program, classes=['control-medium']) }}
 
  {{ form.input('contact_point', label=_('Contact Point'), id='field-contact_point',
  placeholder=_('Email address for questions about content of dataset'),
  value=data.contact_point, error=errors.contact_point, classes=['control-medium']) }}
 
  {{ form.input('spatial_coverage', label=_('Geospatial Coverage'), id='field-spatial_coverage',
  placeholder=_('The geographical area covered by the data. Eg: Whole of Australia, New South Wales, Canberra'),
  value=data.spatial_coverage, error=errors.spatial_coverage, classes=['control-medium']) }}
 
  {{ form.input('granularity', label=_('Data Granularity'), id='field-granularity',
  placeholder=_('Granularity in time, place etc. Eg: incidents reports on daily basis by location.'),
  value=data.granularity, error=errors.granularity, classes=['control-medium']) }}
 
  {{ form.input('jurisdiction', label=_('Government Jurisdiction'), id='field-jurisdiction',
  placeholder=_('New South Wales, Glenorchy City Council, Federal'),
  value=data.jurisdiction, error=errors.jurisdiction, classes=['control-medium']) }}
 
  {{ form.input('temporal_coverage', label=_('Temporal Coverage'), id='field-temporal_coverage',
  placeholder=_('The timespan the dataset relates to: Current, 2008, 2008-2012, Jan 2012'),
  value=data.temporal_coverage, error=errors.temporal_coverage, classes=['control-medium']) }}
 
  {{ form.select('data_state', label=_('Data State'), options= [{'value': 'active', 'text': 'Active'}, {'value': 'inactive', 'text': 'Inactive'}],
  selected='Active', error=errors.data_state) }}
 
  {{ form.input('update_freq', label=_('Update Frequency'), id='field-update_freq',
  placeholder=_('How often the dataset is updated. Eg: Daily, Weekly, Never'),
  value=data.update_freq, error=errors.update_freq, classes=['control-medium']) }}
 
  {% endblock %}
 
 
  {% block package_basic_fields_license %}
  <div class="control-group">
  {% set error = errors.license_id %}
  <label class="control-label" for="field-license">{{ _("License") }}</label>
  <div class="controls">
  <select id="field-license" name="license_id" data-module="autocomplete">
  {% for license_desc, license_id in licenses|sort if license_desc %}
  {# Make cc-by the default value for data.gov.au #}
  <option value="{{ license_id }}" {% if data.get('license_id', 'cc-by') == license_id %}selected="selected"{% endif %}>{{ license_desc }}</option>
  {% endfor %}
  </select>
  {% if error %}<span class="error-block">{{ error }}</span>{% endif %}
  <span class="info-block info-inline">
  <i class="icon-info-sign"></i>
  {% trans %}
  License definitions and additional information can be found
  at <a href="http://opendefinition.org/licenses/">opendefinition.org</a>
  {% endtrans %}
  </span>
  </div>
  </div>
  {% endblock %}
  {% ckan_extends %}
 
  {# Remove 'free extras' from the package form. If you're using
  convert_to/from_extras() as we are with our 'custom_text' field below then
  you need to remove free extras from the form, or editing your custom field
  won't work. #}
  {% block custom_fields %}
  {% endblock %}
 
  {# https://github.com/okfn/ckan/blob/master/ckan/templates/macros/form.html documents the macros for fields #}
 
  {% block package_metadata_fields %}
 
 
  {{ super() }}
 
  {% endblock %}
 
  {% block package_metadata_author %}
  {% endblock %}
 
  {% block package_metadata_fields_maintainer %}
  {% endblock %}
 
  {% block dataset_fields %}
  {% if data.groups %}
  <div class="control-group">
  <label class="control-label">Groups/Themes</label>
  <div class="controls">
  {% for group in data.groups %}
  <label class="checkbox" for="field-group-{{ loop.index0 }}">
  <input id="field-group-{{ loop.index0 }}" type="checkbox" name="groups__{{ loop.index0 }}__id" value="{{ group.id }}" checked="checked" />
  {{ group.title }}
  </label>
  {% endfor %}
  </div>
  </div>
  {% endif %}
  {% set group_name = 'groups__%s__id' % data.groups|length %}
  {% set group_attrs = {'data-module': 'autocomplete', 'data-module-source': '/api/2/util/group/autocomplete?q=?', 'data-module-key': 'id', 'data-module-label': 'title'} %}
  {{ form.input(group_name, label=_('Add Group/Theme'), id="field-group", value=data[group_name], classes=['control-medium'], attrs=group_attrs) }}
  {% endblock %}
  {% ckan_extends %}
 
  {% block primary_content_inner %}
  <h2 class="page-heading">{{ _('My Datasets') }}</h2>
  {% if h.get_user_datasets(c.user_dict) %}
  {% snippet 'snippets/package_list.html', packages=h.get_user_datasets(c.user_dict) %}
  {% else %}
  <p class="empty">
  You haven\'t created/edited any datasets.
  {% if h.check_access('package_create') %}
  {% link_for _('Create one now?'), controller='package', action='new' %}
  {% endif %}
  </p>
  {% endif %}
  {% endblock %}
 
  {% ckan_extends %}
 
 
  {% block primary_content_inner %}
  <h2 class="hide-heading">
  {% block page_heading %}{{ _('Datasets') }}{% endblock %}
  </h2>
  {% block package_list %}
  {% if h.get_user_datasets(c.user_dict) %}
  {% snippet 'snippets/package_list.html', packages=h.get_user_datasets(c.user_dict) %}
  {% else %}
 
  {% if c.is_myself %}
  <p class="empty">
  {{ _('You haven\'t created any datasets.') }}
  {% if h.check_access('package_create') %}
  {% link_for _('Create one now?'), controller='package', action='new' %}
  {% endif %}
  </p>
  {% else %}
  <p class="empty">
  {{ _('User hasn\'t created any datasets.') }}
  </p>
  {% endif %}
  {% endif %}
  {% endblock %}
  {% endblock %}
 
 
  [
  {
  "domain_content": true,
  "domain_data": false,
  "domain_software": false,
  "family": "",
  "id": "other-open",
  "is_generic": true,
  "is_okd_compliant": true,
  "is_osi_compliant": false,
  "maintainer": "",
  "status": "active",
  "title": "Other (Open)",
  "url": ""
  },
  {
  "domain_content": true,
  "domain_data": false,
  "domain_software": false,
  "family": "",
  "id": "cc-by",
  "is_okd_compliant": true,
  "is_osi_compliant": false,
  "maintainer": "",
  "status": "active",
  "title": "Creative Commons Attribution 3.0 Australia",
  "url": "http://creativecommons.org/licenses/by/3.0/au/"
  }
 
  ]
import os  
from logging import getLogger  
 
from genshi.filters.transform import Transformer  
 
from ckan.plugins import implements, SingletonPlugin  
from ckan.plugins import IConfigurer  
from ckan.plugins import IGenshiStreamFilter  
from ckan.plugins import IRoutes  
 
log = getLogger(__name__)  
 
 
class ExampleThemePlugin(SingletonPlugin):  
"""This plugin demonstrates how a theme packaged as a CKAN  
extension might extend CKAN behaviour.  
 
In this case, we implement three extension interfaces:  
 
- ``IConfigurer`` allows us to override configuration normally  
found in the ``ini``-file. Here we use it to specify the site  
title, and to tell CKAN to look in this package for templates  
and resources that customise the core look and feel.  
- ``IGenshiStreamFilter`` allows us to filter and transform the  
HTML stream just before it is rendered. In this case we use  
it to rename "frob" to "foobar"  
- ``IRoutes`` allows us to add new URLs, or override existing  
URLs. In this example we use it to override the default  
``/register`` behaviour with a custom controller  
"""  
implements(IConfigurer, inherit=True)  
implements(IGenshiStreamFilter, inherit=True)  
implements(IRoutes, inherit=True)  
 
def update_config(self, config):  
"""This IConfigurer implementation causes CKAN to look in the  
```public``` and ```templates``` directories present in this  
package for any customisations.  
 
It also shows how to set the site title here (rather than in  
the main site .ini file), and causes CKAN to use the  
customised package form defined in ``package_form.py`` in this  
directory.  
"""  
here = os.path.dirname(__file__)  
rootdir = os.path.dirname(os.path.dirname(here))  
our_public_dir = os.path.join(rootdir, 'ckanext',  
'exampletheme', 'theme', 'public')  
template_dir = os.path.join(rootdir, 'ckanext',  
'exampletheme', 'theme',  
'templates')  
# set our local template and resource overrides  
config['extra_public_paths'] = ','.join([our_public_dir,  
config.get('extra_public_paths', '')])  
config['extra_template_paths'] = ','.join([template_dir,  
config.get('extra_template_paths', '')])  
# set the title  
config['ckan.site_title'] = "An example CKAN theme"  
# set the customised package form (see ``setup.py`` for entry point)  
config['package_form'] = "example_form"  
 
def filter(self, stream):  
"""Conform to IGenshiStreamFilter interface.  
 
This example filter renames 'frob' to 'foobar' (this string is  
found in the custom ``home/index.html`` template provided as  
part of the package).  
"""  
stream = stream | Transformer('p[@id="examplething"]')\  
.substitute(r'frob', r'foobar')  
return stream  
 
def before_map(self, map):  
"""This IRoutes implementation overrides the standard  
``/user/register`` behaviour with a custom controller. You  
might instead use it to provide a completely new page, for  
example.  
 
Note that we have also provided a custom register form  
template at ``theme/templates/user/register.html``.  
"""  
map.connect('/user/register',  
controller='ckanext.exampletheme.controller:CustomUserController',  
action='custom_register')  
return map  
 
import sys  
from ckan.lib.base import request  
from ckan.lib.base import c, g, h  
from ckan.lib.base import model  
from ckan.lib.base import render  
from ckan.lib.base import _  
 
from ckan.controllers.user import UserController  
 
 
class CustomUserController(UserController):  
"""This controller is an example to show how you might extend or  
override core CKAN behaviour from an extension package.  
 
It duplicates functionality in the core CKAN UserController's  
register function, but extends it to make an email address  
mandatory.  
"""  
def custom_register(self):  
if request.method == 'POST':  
# custom validation that requires an email address  
error = False  
c.email = request.params.getone('email')  
c.login = request.params.getone('login')  
if not model.User.check_name_available(c.login):  
error = True  
h.flash_error(_("That username is not available."))  
if not c.email:  
error = True  
h.flash_error(_("You must supply an email address."))  
try:  
self._get_form_password()  
except ValueError, ve:  
h.flash_error(ve)  
error = True  
if error:  
return render('user/register.html')  
# now delegate to core CKAN register method  
return self.register()  
 
from sqlalchemy.util import OrderedDict  
from pylons.i18n import _  
 
from ckan.forms import common  
from ckan.forms import package  
 
 
# Setup the fieldset  
def build_example_form(is_admin=False,  
user_editable_groups=None,  
**kwargs):  
"""Customise the core CKAN dataset editing form by adding a new  
field "temporal coverage", and changing the layout of the core  
fields.  
"""  
# Restrict fields  
builder = package.build_package_form(  
user_editable_groups=user_editable_groups)  
 
# Extra fields  
builder.add_field(common.DateRangeExtraField('temporal_coverage'))  
 
# Layout  
field_groups = OrderedDict([  
(_('Basic information'), ['title', 'name', 'url',  
'notes', 'tags']),  
(_('Details'), ['author', 'author_email', 'groups',  
'maintainer', 'maintainer_email',  
'license_id', 'temporal_coverage' ]),  
(_('Resources'), ['resources']),  
])  
builder.set_displayed_fields(field_groups)  
return builder  
 
 
def get_example_fieldset(is_admin=False, user_editable_groups=None, **kwargs):  
return build_example_form(is_admin=is_admin,  
user_editable_groups=user_editable_groups,  
**kwargs).get_fieldset()  
 
body {  
background-color: pink;  
}  
 
 
<html xmlns:py="http://genshi.edgewall.org/"  
xmlns:i18n="http://genshi.edgewall.org/i18n"  
xmlns:xi="http://www.w3.org/2001/XInclude"  
py:strip="">  
 
<py:def function="page_title">Home</py:def>  
 
<py:def function="optional_head">  
<style type="text/css">  
#examplething {  
background-color: yellow;  
padding: 10px;  
}  
</style>  
</py:def>  
 
<div py:match="content">  
<h2>Welcome to Example Theme!</h2>  
<p id="examplething">  
This page left intentionally ugly  
</p>  
</div>  
 
<xi:include href="layout.html" />  
</html>  
 
<html xmlns="http://www.w3.org/1999/xhtml"  
xmlns:py="http://genshi.edgewall.org/"  
xmlns:xi="http://www.w3.org/2001/XInclude"  
xmlns:doap="http://usefulinc.com/ns/doap"  
xmlns:foaf="http://xmlns.com/foaf/0.1/"  
py:strip=""  
>  
 
<!-- ! a custom primary nav -->  
<py:match path="//div[@class='menu']">  
<div class="menu">  
<ul>  
<li>${h.nav_link(c, _('Home'), controller='home', action='index', id=None)}  
</li>  
<li>${h.nav_link(c, _('Data'), controller='package', action='index', id=None)}  
</li>  
</ul>  
</div>  
</py:match>  
 
<!-- make a really big search box in the top bar -->  
<py:match path="//div[@id='top-bar']/div[@class='search-form']">  
<div class="search-form">  
<form action="${url(controller='package', action='search')}" method="GET">  
<input type="search" class="search" name="q" value="" autocomplete="off" results="5" placeholder="What are you looking for?" id="bigsearch" />  
<input type="submit" class="searchbutton" value="search" />  
</form>  
</div>  
</py:match>  
 
<xi:include href="layout_base.html" />  
</html>  
 
<html xmlns:py="http://genshi.edgewall.org/"  
xmlns:i18n="http://genshi.edgewall.org/i18n"  
xmlns:xi="http://www.w3.org/2001/XInclude"  
py:strip="">  
 
<py:match path="primarysidebar">  
<li class="widget-container widget_text">  
<h2>Have an OpenID?</h2>  
<p>  
If you have an account with Google, Yahoo or one of many other  
OpenID providers, you can log in without signing up.  
</p>  
<ul>  
<li>${h.link_to(_('Log in now'), h.url_for(conroller='user', action='login'))}</li>  
</ul>  
</li>  
</py:match>  
 
<py:def function="page_title">Register - User</py:def>  
 
<div py:match="content">  
<h2>Join the community</h2>  
 
<form action="/user/register" method="post" class="simple-form" id="register_form">  
<fieldset>  
<legend i18n:msg="site_title">Register with CKAN</legend>  
 
<label for="login">Login:</label>  
<input name="login" value="${c.login}" />  
<br/>  
<label for="fullname">Full name (optional):</label>  
<input name="fullname" value="${c.fullname}" />  
<br/>  
<label for="email">E-Mail:</label>  
<input name="email" value="${c.email}" />  
<br/>  
<label for="password1">Password:</label>  
<input type="password" name="password1" value="" />  
<br/>  
<label for="password2">Password (repeat):</label>  
<input type="password" name="password2" value="" />  
<br/>  
</fieldset>  
${h.submit('s', _('Sign up'))}  
</form>  
</div>  
<xi:include href="layout.html" />  
</html>  
 
file:a/setup.py -> file:b/setup.py
from setuptools import setup, find_packages from setuptools import setup, find_packages
import sys, os  
   
version = '0.1' version = '0.1'
   
setup( setup(
name='ckanext-exampletheme', name='ckanext-datagovau',
version=version, version=version,
description="Example themeb for customising CKAN", description='Extension for customising CKAN for data.gov.au',
long_description="""\ long_description='',
""",  
classifiers=[], # Get strings from http://pypi.python.org/pypi?%3Aaction=list_classifiers classifiers=[], # Get strings from http://pypi.python.org/pypi?%3Aaction=list_classifiers
keywords='', keywords='',
author='Seb Bacon', author='Alex Sadleir',
author_email='seb.bacon@gmail.com', author_email='alex.sadleir@linkdigital.com.au',
url='', url='',
license='', license='',
packages=find_packages(exclude=['ez_setup', 'examples', 'tests']), packages=find_packages(exclude=['ez_setup', 'examples', 'tests']),
namespace_packages=['ckanext', 'ckanext.exampletheme'], namespace_packages=['ckanext', 'ckanext.datagovau'],
include_package_data=True, include_package_data=True,
zip_safe=False, zip_safe=False,
install_requires=[ install_requires=[],
# -*- Extra requirements: -*-  
],  
entry_points=\ entry_points=\
""" """
[ckan.plugins] [ckan.plugins]
datagm=ckanext.exampletheme:ExampleThemePlugin datagovau=ckanext.datagovau.plugin:ExampleIDatasetFormPlugin
   
[ckan.forms]  
example_form = ckanext.exampletheme.package_form:get_example_fieldset  
""", """,
) )