Skip to content

Commit

Permalink
Update Data API button checks and popup content for new datastore
Browse files Browse the repository at this point in the history
  • Loading branch information
amercader committed Oct 5, 2012
1 parent c0cf5b3 commit ef6c02d
Show file tree
Hide file tree
Showing 3 changed files with 119 additions and 119 deletions.
6 changes: 3 additions & 3 deletions ckan/controllers/package.py
Original file line number Diff line number Diff line change
Expand Up @@ -788,10 +788,10 @@ def resource_read(self, id, resource_id):
get_license_register()[license_id].isopen()
except KeyError:
c.package['isopen'] = False
c.datastore_api = h.url_for('datastore_read', id=c.resource.get('id'),
qualified=True)

c.related_count = c.pkg.related_count
#TODO: find a nicer way of doing this
c.datastore_api = '%s/api/action' % config.get('ckan.site_url','').rstrip('/')

return render('package/resource_read.html')

def resource_download(self, id, resource_id):
Expand Down
221 changes: 111 additions & 110 deletions ckan/templates/_snippet/data-api-help.html
Original file line number Diff line number Diff line change
Expand Up @@ -6,134 +6,135 @@
py:strip=""
>




<div class="modal-data-api-help modal fade in" style="display: none;"
py:def="data_api_help(datastore_api)">
<div class="modal-header">
<a class="close" data-dismiss="modal">×</a>
<h3>
CKAN Data API
</h3>
</div>
<div class="modal-body">
<p><strong>Access resource data via a web API with powerful query
support</strong>. Further information in the <a
href="http://docs.ckan.org/en/latest/using-data-api.html" target="_blank">main
CKAN Data API and DataStore documentation</a>.</p>

<div class="accordion-group">
<div class="accordion-heading">
<a class="accordion-toggle" data-toggle="collapse" href=".collapse-endpoints">Endpoints &raquo;</a>
</div>
<div class="collapse-endpoints in accordion-body collapse">
<div class="accordion-inner">
<p>The Data API builds directly on ElasticSearch, with a resource API
endpoint being equivalent to a single index 'type' in ElasticSearch.
This means you can directly re-use <a
href="http://www.elasticsearch.org/guide/appendix/clients.html"
_target="blank">ElasticSearch
client libraries</a> when connecting to the API endpoint.</p>
<table class="table-condensed table-striped table-bordered">
<thead></thead>
<tbody>
<tr>
<th scope="row">Base</th>
<td><code>${datastore_api}</code></td>
</tr>
<tr>
<th scope="row">Query</th>
<td>
<code>${datastore_api}/_search</code>
</td>
</tr>
<tr>
<th scope="row">Query example</th>
<td>
<code><a href="${datastore_api}/_search?size=5&amp;pretty=true" target="_blank">${datastore_api}/_search?size=5&amp;pretty=true</a></code>
</td>
</tr>
<tr>
<th scope="row">Schema (Mapping)</th>
<td>
<code><a href="${datastore_api}/_mapping" target="_blank">${datastore_api}/_mapping?pretty=true</a></code>
</td>
</tr>
</tbody>
</table>
</div>
</div>
py:def="data_api_help(datastore_root_url, resource_id)">


<py:def function="sql_example_url">
${datastore_root_url}/datastore_search_sql?sql=SELECT * from "${resource_id}" WHERE title LIKE 'jones'
</py:def>

<div class="modal-header">
<h3>
CKAN Data API
</h3>
</div>
<div class="modal-body">
<p><strong>Access resource data via a web API with powerful query
support</strong>. Further information in the <a
href="http://docs.ckan.org/en/latest/datastore.html" target="_blank">main
CKAN Data API and DataStore documentation</a>.</p>

<div class="accordion-group">
<div class="accordion-heading">
<a class="accordion-toggle" href=".collapse-querying" data-toggle="collapse">Querying
&raquo;</a>
</div>
<div class="collapse-endpoints in accordion-body">
<div class="accordion-inner">
<strong>Query example (first 5 results)</strong>
<p>
<code><a href="${datastore_api}/_search?size=5&amp;pretty=true" target="_blank">${datastore_api}/_search?size=5&amp;pretty=true</a></code>
</p>

<strong>Query example (results with 'jones' in <code>title</code> field)</strong>
<p>
<code><a href="${datastore_api}/_search?q=title:jones&amp;size=5&amp;pretty=true"
target="_blank">${datastore_api}/_search?q=title:jones&amp;size=5&amp;pretty=true</a></code>
</p>

<strong>Schema (Mapping)</strong>
<p>
<code><a href="${datastore_api}/_mapping" target="_blank">${datastore_api}/_mapping?pretty=true</a></code>
</p>

<strong>Endpoint (for clients)</strong>
<p>
<code>${datastore_api}</code>
</p>
<div class="accordion" id="accordion2">
<div class="accordion-group">
<div class="accordion-heading">

<a class="accordion-toggle" data-toggle="collapse" data-parent="accordion2" href="#collapse-endpoints">Endpoints &raquo;</a>
</div>
</div>
</div>
<div id="collapse-endpoints" class="in accordion-body collapse">
<div class="accordion-inner">
<p>The Data API can be accessed via the following actions of the CKAN action API.</p>
<table class="table-condensed table-striped table-bordered">
<thead></thead>
<tbody>
<tr>
<th>Create</th>
<td><code>${datastore_root_url}/datastore_create</code></td>
</tr>
<tr>
<th>Update / Insert</th>
<td><code>${datastore_root_url}/datastore_upsert</code></td>
</tr>
<tr>
<th>Query</th>
<td><code>${datastore_root_url}/datastore_search</code></td>
</tr>
<tr>
<th>Query (via SQL)</th>
<td><code>${datastore_root_url}/datastore_search_sql</code></td>
</tr>

<div class="accordion-group">
<div class="accordion-heading">
<a class="accordion-toggle" href=".collapse-javascript" data-toggle="collapse">Example: Javascript</a>
</tbody>
</table>
</div>
</div>
</div>
<div class="accordion-body collapse-javascript in">
<div class="accordion-inner">
<p>A simple ajax (JSONP) request to the data API using jQuery.</p>
<pre>
var data = {
size: 5 // get 5 results
q: 'title:jones' // query on the title field for 'jones'
};
$.ajax({
url: '${datastore_api}/_search',
data: data,
dataType: 'jsonp',
success: function(data) {
alert('Total results found: ' + data.hits.total)
}
});</pre>

<div class="accordion-group">
<div class="accordion-heading">
<a class="accordion-toggle" data-toggle="collapse" data-parent="accordion2" href="#collapse-querying">Querying &raquo;</a>
</div>
<div id="collapse-querying" class="collapse accordion-body in">
<div class="accordion-inner">
<strong>Query example (first 5 results)</strong>
<p>
<code><a href="${datastore_root_url}/datastore_search?resource_id=${resource_id}&amp;limit=5" target="_blank">${datastore_root_url}/datastore_search?resource_id=${resource_id}&amp;limit=5</a></code>
</p>

<strong>Query example (results containing 'jones')</strong>
<p>
<code><a href="${datastore_root_url}/datastore_search?resource_id=${resource_id}&amp;q=jones"
target="_blank">${datastore_root_url}/datastore_search?resource_id=${resource_id}&amp;q=jones</a></code>
</p>

<strong>Query example (via SQL statement)</strong>
<p>
<code><a href="${sql_example_url()}"
target="_blank">${sql_example_url()}</a></code>
</p>

</div>
</div>
</div>
</div>

<div class="accordion-group">
<div class="accordion-heading">
<a class="accordion-toggle" href=".collapse-javascript" data-toggle="collapse">Example: Python</a>
<div class="accordion-group">
<div class="accordion-heading">
<a class="accordion-toggle" data-toggle="collapse" data-parent="accordion2" href="#collapse-javascript">Example: Javascript &raquo;</a>
</div>
<div id="collapse-javascript" class="accordion-body collapse">
<div class="accordion-inner">
<p>A simple ajax (JSONP) request to the data API using jQuery.</p>
<pre>
var data = {
resource_id: '${resource_id}', // the resource id
limit: 5, // get 5 results
q: 'jones' // query for 'jones'
};
$.ajax({
url: '${datastore_root_url}/datastore_search',
data: data,
dataType: 'jsonp',
success: function(data) {
alert('Total results found: ' + data.result.total)
}
});</pre>
</div>
</div>
</div>
<div class="accordion-body collapse-javascript in">
<div class="accordion-inner">
<pre>

<div class="accordion-group">
<div class="accordion-heading">
<a class="accordion-toggle" data-toggle="collapse" data-parent="accordion2" href="#collapse-python">Example: Pyhton &raquo;</a>
</div>
<div id="collapse-python" class="accordion-body collapse">
<div class="accordion-inner">
<pre>
import urllib
url = '${datastore_api}/_search?size=5&amp;q=title:jones'
url = '${datastore_root_url}/datastore_search?limit=5&amp;q=title:jones'
fileobj = urllib.urlopen(url)
print fileobj.read()
</pre>
</div>
</div>
</div>
</div>

</div>

</div>


</html>
11 changes: 5 additions & 6 deletions ckan/templates/package/resource_read.html
Original file line number Diff line number Diff line change
Expand Up @@ -79,20 +79,19 @@
</py:otherwise>
</py:choose>
</a>
<py:if test="config.get('ckan.datastore.enabled', False)">
<py:if test="c.resource.get('webstore_url')">
<py:if test="'datastore' in config.get('ckan.plugins')">
<py:if test="c.resource.get('datastore_active')">
<a class="btn btn-success" data-toggle="modal" href=".modal-data-api-help">Data API</a>
</py:if>
<py:if test="not c.resource.get('webstore_url')">
<py:if test="not c.resource.get('datastore_active')">
<a class="btn disabled" rel="tooltip" title="Data API is unavailable for this resource as DataStore is disabled">Data API</a>
</py:if>
</py:if>
</div>

<py:if test="config.get('ckan.datastore.enabled', False)">
${data_api_help(c.datastore_api)}
<py:if test="'datastore' in config.get('ckan.plugins')">
${data_api_help(c.datastore_api, c.resource['id'])}
</py:if>

${data_viewer_embed_dialog()}

<div class="quick-info">
Expand Down

0 comments on commit ef6c02d

Please sign in to comment.