This is an automated email from the ASF dual-hosted git repository.

villebro pushed a commit to branch asf-site
in repository https://gitbox.apache.org/repos/asf/incubator-superset-site.git


The following commit(s) were added to refs/heads/asf-site by this push:
     new 23eb7fb  0.34.1 doc version
23eb7fb is described below

commit 23eb7fb7f4a16a65352c989e472682ac23862b3a
Author: Ville Brofeldt <[email protected]>
AuthorDate: Sun Oct 13 17:37:46 2019 +0300

    0.34.1 doc version
---
 .buildinfo                           |   2 +-
 _modules/superset/jinja_context.html |  78 ++++++++++++++++++++++++---
 _sources/installation.rst.txt        |  90 ++++++++++++++++++++++++++++++-
 _sources/sqllab.rst.txt              |   4 +-
 genindex.html                        |  21 +++++++-
 index.html                           |   3 ++
 installation.html                    |  86 +++++++++++++++++++++++++++++-
 objects.inv                          | Bin 583 -> 634 bytes
 searchindex.js                       |   2 +-
 sqllab.html                          | 100 +++++++++++++++++++++++++++++++++--
 10 files changed, 369 insertions(+), 17 deletions(-)

diff --git a/.buildinfo b/.buildinfo
index c0f5130..79eea93 100644
--- a/.buildinfo
+++ b/.buildinfo
@@ -1,4 +1,4 @@
 # Sphinx build info version 1
 # This file hashes the configuration used when building these files. When it 
is not found, a full rebuild will be done.
-config: aef1dd98ccac6c00170d15d9ca65cf37
+config: 57f4258c8ecbc6bcd73251593f94511a
 tags: 645f666f9bcd5a90fca523b33c5a78b7
diff --git a/_modules/superset/jinja_context.html 
b/_modules/superset/jinja_context.html
index 8d57aa9..ec78ef9 100644
--- a/_modules/superset/jinja_context.html
+++ b/_modules/superset/jinja_context.html
@@ -281,7 +281,43 @@
         <span class="k">return</span> <span class="p">[]</span></div>
 
 
-<span class="k">class</span> <span 
class="nc">BaseTemplateProcessor</span><span class="p">(</span><span 
class="nb">object</span><span class="p">):</span>
+<span class="k">class</span> <span class="nc">CacheKeyWrapper</span><span 
class="p">:</span>
+    <span class="sd">&quot;&quot;&quot; Dummy class that exposes a method used 
to store additional values used in</span>
+<span class="sd">     calculation of query object cache 
keys&quot;&quot;&quot;</span>
+
+    <span class="k">def</span> <span class="nf">__init__</span><span 
class="p">(</span><span class="bp">self</span><span class="p">,</span> <span 
class="n">extra_cache_keys</span><span class="p">:</span> <span 
class="n">Optional</span><span class="p">[</span><span 
class="n">List</span><span class="p">[</span><span class="n">Any</span><span 
class="p">]]</span> <span class="o">=</span> <span class="kc">None</span><span 
class="p">):</span>
+        <span class="bp">self</span><span class="o">.</span><span 
class="n">extra_cache_keys</span> <span class="o">=</span> <span 
class="n">extra_cache_keys</span>
+
+    <span class="k">def</span> <span class="nf">cache_key_wrapper</span><span 
class="p">(</span><span class="bp">self</span><span class="p">,</span> <span 
class="n">key</span><span class="p">:</span> <span class="n">Any</span><span 
class="p">)</span> <span class="o">-&gt;</span> <span class="n">Any</span><span 
class="p">:</span>
+        <span class="sd">&quot;&quot;&quot; Adds values to a list that is 
added to the query object used for calculating</span>
+<span class="sd">        a cache key.</span>
+
+<span class="sd">        This is needed if the following applies:</span>
+<span class="sd">            - Caching is enabled</span>
+<span class="sd">            - The query is dynamically generated using a 
jinja template</span>
+<span class="sd">            - A username or similar is used as a filter in 
the query</span>
+
+<span class="sd">        Example when using a SQL query as a data source 
::</span>
+
+<span class="sd">            SELECT action, count(*) as times</span>
+<span class="sd">            FROM logs</span>
+<span class="sd">            WHERE logged_in_user = &#39;{{ 
cache_key_wrapper(current_username()) }}&#39;</span>
+<span class="sd">            GROUP BY action</span>
+
+<span class="sd">        This will ensure that the query results that were 
cached by `user_1` will</span>
+<span class="sd">        **not** be seen by `user_2`, as the `cache_key` for 
the query will be</span>
+<span class="sd">        different. ``cache_key_wrapper`` can be used 
similarly for regular table data</span>
+<span class="sd">        sources by adding a `Custom SQL` filter.</span>
+
+<span class="sd">        :param key: Any value that should be considered when 
calculating the cache key</span>
+<span class="sd">        :return: the original value ``key`` passed to the 
function</span>
+<span class="sd">        &quot;&quot;&quot;</span>
+        <span class="k">if</span> <span class="bp">self</span><span 
class="o">.</span><span class="n">extra_cache_keys</span> <span 
class="ow">is</span> <span class="ow">not</span> <span 
class="kc">None</span><span class="p">:</span>
+            <span class="bp">self</span><span class="o">.</span><span 
class="n">extra_cache_keys</span><span class="o">.</span><span 
class="n">append</span><span class="p">(</span><span class="n">key</span><span 
class="p">)</span>
+        <span class="k">return</span> <span class="n">key</span>
+
+
+<span class="k">class</span> <span 
class="nc">BaseTemplateProcessor</span><span class="p">:</span>
     <span class="sd">&quot;&quot;&quot;Base class for database-specific jinja 
context</span>
 
 <span class="sd">    There&#39;s this bit of magic in ``process_template`` 
that instantiates only</span>
@@ -298,7 +334,14 @@
 
     <span class="n">engine</span><span class="p">:</span> <span 
class="n">Optional</span><span class="p">[</span><span 
class="nb">str</span><span class="p">]</span> <span class="o">=</span> <span 
class="kc">None</span>
 
-    <span class="k">def</span> <span class="nf">__init__</span><span 
class="p">(</span><span class="bp">self</span><span class="p">,</span> <span 
class="n">database</span><span class="o">=</span><span 
class="kc">None</span><span class="p">,</span> <span 
class="n">query</span><span class="o">=</span><span class="kc">None</span><span 
class="p">,</span> <span class="n">table</span><span class="o">=</span><span 
class="kc">None</span><span class="p">,</span> <span class="o">**</span><span 
cla [...]
+    <span class="k">def</span> <span class="nf">__init__</span><span 
class="p">(</span>
+        <span class="bp">self</span><span class="p">,</span>
+        <span class="n">database</span><span class="o">=</span><span 
class="kc">None</span><span class="p">,</span>
+        <span class="n">query</span><span class="o">=</span><span 
class="kc">None</span><span class="p">,</span>
+        <span class="n">table</span><span class="o">=</span><span 
class="kc">None</span><span class="p">,</span>
+        <span class="n">extra_cache_keys</span><span class="p">:</span> <span 
class="n">Optional</span><span class="p">[</span><span 
class="n">List</span><span class="p">[</span><span class="n">Any</span><span 
class="p">]]</span> <span class="o">=</span> <span class="kc">None</span><span 
class="p">,</span>
+        <span class="o">**</span><span class="n">kwargs</span>
+    <span class="p">):</span>
         <span class="bp">self</span><span class="o">.</span><span 
class="n">database</span> <span class="o">=</span> <span 
class="n">database</span>
         <span class="bp">self</span><span class="o">.</span><span 
class="n">query</span> <span class="o">=</span> <span class="n">query</span>
         <span class="bp">self</span><span class="o">.</span><span 
class="n">schema</span> <span class="o">=</span> <span class="kc">None</span>
@@ -310,6 +353,7 @@
             <span class="s2">&quot;url_param&quot;</span><span 
class="p">:</span> <span class="n">url_param</span><span class="p">,</span>
             <span class="s2">&quot;current_user_id&quot;</span><span 
class="p">:</span> <span class="n">current_user_id</span><span 
class="p">,</span>
             <span class="s2">&quot;current_username&quot;</span><span 
class="p">:</span> <span class="n">current_username</span><span 
class="p">,</span>
+            <span class="s2">&quot;cache_key_wrapper&quot;</span><span 
class="p">:</span> <span class="n">CacheKeyWrapper</span><span 
class="p">(</span><span class="n">extra_cache_keys</span><span 
class="p">)</span><span class="o">.</span><span 
class="n">cache_key_wrapper</span><span class="p">,</span>
             <span class="s2">&quot;filter_values&quot;</span><span 
class="p">:</span> <span class="n">filter_values</span><span class="p">,</span>
             <span class="s2">&quot;form_data&quot;</span><span 
class="p">:</span> <span class="p">{},</span>
         <span class="p">}</span>
@@ -341,22 +385,44 @@
     <span class="n">engine</span> <span class="o">=</span> <span 
class="s2">&quot;presto&quot;</span>
 
     <span class="nd">@staticmethod</span>
-    <span class="k">def</span> <span class="nf">_schema_table</span><span 
class="p">(</span><span class="n">table_name</span><span class="p">:</span> 
<span class="nb">str</span><span class="p">,</span> <span 
class="n">schema</span><span class="p">:</span> <span 
class="nb">str</span><span class="p">)</span> <span class="o">-&gt;</span> 
<span class="n">Tuple</span><span class="p">[</span><span 
class="nb">str</span><span class="p">,</span> <span class="nb">str</span><span 
class="p">]:</span>
+    <span class="k">def</span> <span class="nf">_schema_table</span><span 
class="p">(</span>
+        <span class="n">table_name</span><span class="p">:</span> <span 
class="nb">str</span><span class="p">,</span> <span 
class="n">schema</span><span class="p">:</span> <span 
class="n">Optional</span><span class="p">[</span><span 
class="nb">str</span><span class="p">]</span>
+    <span class="p">)</span> <span class="o">-&gt;</span> <span 
class="n">Tuple</span><span class="p">[</span><span class="nb">str</span><span 
class="p">,</span> <span class="n">Optional</span><span class="p">[</span><span 
class="nb">str</span><span class="p">]]:</span>
         <span class="k">if</span> <span class="s2">&quot;.&quot;</span> <span 
class="ow">in</span> <span class="n">table_name</span><span class="p">:</span>
             <span class="n">schema</span><span class="p">,</span> <span 
class="n">table_name</span> <span class="o">=</span> <span 
class="n">table_name</span><span class="o">.</span><span 
class="n">split</span><span class="p">(</span><span 
class="s2">&quot;.&quot;</span><span class="p">)</span>
         <span class="k">return</span> <span class="n">table_name</span><span 
class="p">,</span> <span class="n">schema</span>
 
-    <span class="k">def</span> <span class="nf">latest_partition</span><span 
class="p">(</span><span class="bp">self</span><span class="p">,</span> <span 
class="n">table_name</span><span class="p">:</span> <span 
class="nb">str</span><span class="p">):</span>
+<div class="viewcode-block" 
id="PrestoTemplateProcessor.first_latest_partition"><a class="viewcode-back" 
href="../../sqllab.html#superset.jinja_context.PrestoTemplateProcessor.first_latest_partition">[docs]</a>
    <span class="k">def</span> <span 
class="nf">first_latest_partition</span><span class="p">(</span><span 
class="bp">self</span><span class="p">,</span> <span 
class="n">table_name</span><span class="p">:</span> <span 
class="nb">str</span><span class="p">)</span> <span class="o">-& [...]
+        <span class="sd">&quot;&quot;&quot;</span>
+<span class="sd">        Gets the first value in the array of all latest 
partitions</span>
+
+<span class="sd">        :param table_name: table name in the format 
`schema.table`</span>
+<span class="sd">        :return: the first (or only) value in the latest 
partition array</span>
+<span class="sd">        :raises IndexError: If no partition exists</span>
+<span class="sd">        &quot;&quot;&quot;</span>
+
+        <span class="k">return</span> <span class="bp">self</span><span 
class="o">.</span><span class="n">latest_partitions</span><span 
class="p">(</span><span class="n">table_name</span><span 
class="p">)[</span><span class="mi">0</span><span class="p">]</span></div>
+
+<div class="viewcode-block" id="PrestoTemplateProcessor.latest_partitions"><a 
class="viewcode-back" 
href="../../sqllab.html#superset.jinja_context.PrestoTemplateProcessor.latest_partitions">[docs]</a>
    <span class="k">def</span> <span class="nf">latest_partitions</span><span 
class="p">(</span><span class="bp">self</span><span class="p">,</span> <span 
class="n">table_name</span><span class="p">:</span> <span 
class="nb">str</span><span class="p">)</span> <span class="o">-&gt;</span> <spa 
[...]
+        <span class="sd">&quot;&quot;&quot;</span>
+<span class="sd">        Gets the array of all latest partitions</span>
+
+<span class="sd">        :param table_name: table name in the format 
`schema.table`</span>
+<span class="sd">        :return: the latest partition array</span>
+<span class="sd">        &quot;&quot;&quot;</span>
+
         <span class="n">table_name</span><span class="p">,</span> <span 
class="n">schema</span> <span class="o">=</span> <span 
class="bp">self</span><span class="o">.</span><span 
class="n">_schema_table</span><span class="p">(</span><span 
class="n">table_name</span><span class="p">,</span> <span 
class="bp">self</span><span class="o">.</span><span 
class="n">schema</span><span class="p">)</span>
         <span class="k">return</span> <span class="bp">self</span><span 
class="o">.</span><span class="n">database</span><span class="o">.</span><span 
class="n">db_engine_spec</span><span class="o">.</span><span 
class="n">latest_partition</span><span class="p">(</span>
             <span class="n">table_name</span><span class="p">,</span> <span 
class="n">schema</span><span class="p">,</span> <span 
class="bp">self</span><span class="o">.</span><span class="n">database</span>
-        <span class="p">)[</span><span class="mi">1</span><span 
class="p">]</span>
+        <span class="p">)[</span><span class="mi">1</span><span 
class="p">]</span></div>
 
     <span class="k">def</span> <span 
class="nf">latest_sub_partition</span><span class="p">(</span><span 
class="bp">self</span><span class="p">,</span> <span 
class="n">table_name</span><span class="p">,</span> <span 
class="o">**</span><span class="n">kwargs</span><span class="p">):</span>
         <span class="n">table_name</span><span class="p">,</span> <span 
class="n">schema</span> <span class="o">=</span> <span 
class="bp">self</span><span class="o">.</span><span 
class="n">_schema_table</span><span class="p">(</span><span 
class="n">table_name</span><span class="p">,</span> <span 
class="bp">self</span><span class="o">.</span><span 
class="n">schema</span><span class="p">)</span>
         <span class="k">return</span> <span class="bp">self</span><span 
class="o">.</span><span class="n">database</span><span class="o">.</span><span 
class="n">db_engine_spec</span><span class="o">.</span><span 
class="n">latest_sub_partition</span><span class="p">(</span>
             <span class="n">table_name</span><span class="o">=</span><span 
class="n">table_name</span><span class="p">,</span> <span 
class="n">schema</span><span class="o">=</span><span 
class="n">schema</span><span class="p">,</span> <span 
class="n">database</span><span class="o">=</span><span 
class="bp">self</span><span class="o">.</span><span 
class="n">database</span><span class="p">,</span> <span 
class="o">**</span><span class="n">kwargs</span>
-        <span class="p">)</span></div>
+        <span class="p">)</span>
+
+    <span class="n">latest_partition</span> <span class="o">=</span> <span 
class="n">first_latest_partition</span></div>
 
 
 <div class="viewcode-block" id="HiveTemplateProcessor"><a 
class="viewcode-back" 
href="../../sqllab.html#superset.jinja_context.HiveTemplateProcessor">[docs]</a><span
 class="k">class</span> <span class="nc">HiveTemplateProcessor</span><span 
class="p">(</span><span class="n">PrestoTemplateProcessor</span><span 
class="p">):</span>
diff --git a/_sources/installation.rst.txt b/_sources/installation.rst.txt
index 37991de..e560657 100644
--- a/_sources/installation.rst.txt
+++ b/_sources/installation.rst.txt
@@ -521,6 +521,24 @@ into your global default defined in ``CACHE_CONFIG``.
         'CACHE_REDIS_URL': 'redis://localhost:6379/0',
     }
 
+It is also possible to pass a custom cache initialization function in the
+config to handle additional caching use cases. The function must return an
+object that is compatible with the `Flask-Cache 
<https://pythonhosted.org/Flask-Cache/>`_ API.
+
+.. code-block:: python
+
+    from custom_caching import CustomCache
+
+    def init_cache(app):
+        """Takes an app instance and returns a custom cache backend"""
+        config = {
+            'CACHE_DEFAULT_TIMEOUT': 60 * 60 * 24, # 1 day default (in secs)
+            'CACHE_KEY_PREFIX': 'superset_results',
+        }
+        return CustomCache(app, config)
+
+    CACHE_CONFIG = init_cache
+
 Superset has a Celery task that will periodically warm up the cache based on
 different strategies. To use it, add the following to the `CELERYBEAT_SCHEDULE`
 section in `config.py`:
@@ -629,6 +647,18 @@ Note that you can run the ``superset refresh_druid`` 
command to refresh the
 metadata from your Druid cluster(s)
 
 
+Presto
+------
+
+By default Superset assumes the most recent version of Presto is being used 
when
+querying the datasource. If you're using an older version of presto, you can 
configure
+it in the ``extra`` parameter::
+
+    {
+        "version": "0.123"
+    }
+
+
 CORS
 ----
 
@@ -649,7 +679,7 @@ DOMAIN SHARDING
 
 Chrome allows up to 6 open connections per domain at a time. When there are 
more
 than 6 slices in dashboard, a lot of time fetch requests are queued up and 
wait for
-next available socket. PR (`#5039 
<https://github.com/apache/incubator-superset/pull/5039>`) adds domain sharding 
to Superset,
+next available socket. `PR 5039 
<https://github.com/apache/incubator-superset/pull/5039>`_ adds domain sharding 
to Superset,
 and this feature will be enabled by configuration only (by default Superset
 doesn't allow cross-domain request).
 
@@ -678,6 +708,40 @@ environment variable: ::
 
 *Adapted from http://flask.pocoo.org/snippets/69/*
 
+Event Logging
+-------------
+
+Superset by default logs special action event on it's database. These log can 
be accessed on the UI navigating to
+"Security" -> "Action Log". You can freely customize these logs by 
implementing your own event log class.
+
+Example of a simple JSON to Stdout class::
+
+    class JSONStdOutEventLogger(AbstractEventLogger):
+
+        def log(self, user_id, action, *args, **kwargs):
+            records = kwargs.get('records', list())
+            dashboard_id = kwargs.get('dashboard_id')
+            slice_id = kwargs.get('slice_id')
+            duration_ms = kwargs.get('duration_ms')
+            referrer = kwargs.get('referrer')
+
+            for record in records:
+                log = dict(
+                    action=action,
+                    json=record,
+                    dashboard_id=dashboard_id,
+                    slice_id=slice_id,
+                    duration_ms=duration_ms,
+                    referrer=referrer,
+                    user_id=user_id
+                )
+                print(json.dumps(log))
+
+
+Then on Superset's config pass an instance of the logger type you want to use.
+
+    EVENT_LOGGER = JSONStdOutEventLogger()
+
 
 Upgrading
 ---------
@@ -990,7 +1054,7 @@ your environment. See 
`CONTRIBUTING.md#setup-local-environment-for-development <
 Blueprints
 ----------
 
-`Blueprints are Flask's reusable apps 
<http://flask.pocoo.org/docs/0.12/blueprints/>`_.
+`Blueprints are Flask's reusable apps 
<https://flask.palletsprojects.com/en/1.0.x/tutorial/views/>`_.
 Superset allows you to specify an array of Blueprints
 in your ``superset_config`` module. Here's
 an example of how this can work with a simple Blueprint. By doing
@@ -1109,3 +1173,25 @@ Then we can add this two lines to ``superset_config.py``:
 
   from custom_sso_security_manager import CustomSsoSecurityManager
   CUSTOM_SECURITY_MANAGER = CustomSsoSecurityManager
+
+Feature Flags
+---------------------------
+
+Because of a wide variety of users, Superset has some features that are not 
enabled by default. For example, some users have stronger security 
restrictions, while some others may not. So Superset allow users to enable or 
disable some features by config. For feature owners, you can add optional 
functionalities in Superset, but will be only affected by a subset of users.
+
+You can enable or disable features with flag from ``superset_config.py``:
+
+.. code-block:: python
+
+     DEFAULT_FEATURE_FLAGS = {
+         'CLIENT_CACHE': False,
+         'ENABLE_EXPLORE_JSON_CSRF_PROTECTION': False
+     }
+
+Here is a list of flags and descriptions:
+
+* ENABLE_EXPLORE_JSON_CSRF_PROTECTION
+
+  * For some security concerns, you may need to enforce CSRF protection on all 
query request to explore_json endpoint. In Superset, we use `flask-csrf 
<https://sjl.bitbucket.io/flask-csrf/>`_ add csrf protection for all POST 
requests, but this protection doesn't apply to GET method.
+
+  * When ENABLE_EXPLORE_JSON_CSRF_PROTECTION is set to true, your users cannot 
make GET request to explore_json. The default value for this feature False 
(current behavior), explore_json accepts both GET and POST request. See `PR 
7935 <https://github.com/apache/incubator-superset/pull/7935>`_ for more 
details.
diff --git a/_sources/sqllab.rst.txt b/_sources/sqllab.rst.txt
index 5fe24ad..c69e584 100644
--- a/_sources/sqllab.rst.txt
+++ b/_sources/sqllab.rst.txt
@@ -56,7 +56,7 @@ Templating with Jinja
 
     SELECT *
     FROM some_table
-    WHERE partition_key = '{{ presto.latest_partition('some_table') }}'
+    WHERE partition_key = '{{ presto.first_latest_partition('some_table') }}'
 
 Templating unleashes the power and capabilities of a
 programming language within your SQL code.
@@ -87,6 +87,8 @@ Superset's Jinja context:
 
 .. autofunction:: superset.jinja_context.filter_values
 
+.. autofunction:: superset.jinja_context.CacheKeyWrapper.cache_key_wrapper
+
 .. autoclass:: superset.jinja_context.PrestoTemplateProcessor
     :members:
 
diff --git a/genindex.html b/genindex.html
index 6c030ff..bf9efde 100644
--- a/genindex.html
+++ b/genindex.html
@@ -157,6 +157,7 @@
  <a href="#C"><strong>C</strong></a>
  | <a href="#F"><strong>F</strong></a>
  | <a href="#H"><strong>H</strong></a>
+ | <a href="#L"><strong>L</strong></a>
  | <a href="#P"><strong>P</strong></a>
  | <a href="#U"><strong>U</strong></a>
  
@@ -164,10 +165,12 @@
 <h2 id="C">C</h2>
 <table style="width: 100%" class="indextable genindextable"><tr>
   <td style="width: 33%; vertical-align: top;"><ul>
-      <li><a 
href="sqllab.html#superset.jinja_context.current_user_id">current_user_id() (in 
module superset.jinja_context)</a>
+      <li><a 
href="sqllab.html#superset.jinja_context.CacheKeyWrapper.cache_key_wrapper">cache_key_wrapper()
 (in module superset.jinja_context.CacheKeyWrapper)</a>
 </li>
   </ul></td>
   <td style="width: 33%; vertical-align: top;"><ul>
+      <li><a 
href="sqllab.html#superset.jinja_context.current_user_id">current_user_id() (in 
module superset.jinja_context)</a>
+</li>
       <li><a 
href="sqllab.html#superset.jinja_context.current_username">current_username() 
(in module superset.jinja_context)</a>
 </li>
   </ul></td>
@@ -179,6 +182,10 @@
       <li><a 
href="sqllab.html#superset.jinja_context.filter_values">filter_values() (in 
module superset.jinja_context)</a>
 </li>
   </ul></td>
+  <td style="width: 33%; vertical-align: top;"><ul>
+      <li><a 
href="sqllab.html#superset.jinja_context.PrestoTemplateProcessor.first_latest_partition">first_latest_partition()
 (superset.jinja_context.PrestoTemplateProcessor method)</a>
+</li>
+  </ul></td>
 </tr></table>
 
 <h2 id="H">H</h2>
@@ -189,6 +196,18 @@
   </ul></td>
 </tr></table>
 
+<h2 id="L">L</h2>
+<table style="width: 100%" class="indextable genindextable"><tr>
+  <td style="width: 33%; vertical-align: top;"><ul>
+      <li><a 
href="sqllab.html#superset.jinja_context.PrestoTemplateProcessor.latest_partition">latest_partition()
 (superset.jinja_context.PrestoTemplateProcessor method)</a>
+</li>
+  </ul></td>
+  <td style="width: 33%; vertical-align: top;"><ul>
+      <li><a 
href="sqllab.html#superset.jinja_context.PrestoTemplateProcessor.latest_partitions">latest_partitions()
 (superset.jinja_context.PrestoTemplateProcessor method)</a>
+</li>
+  </ul></td>
+</tr></table>
+
 <h2 id="P">P</h2>
 <table style="width: 100%" class="indextable genindextable"><tr>
   <td style="width: 33%; vertical-align: top;"><ul>
diff --git a/index.html b/index.html
index 485b8b9..1586fae 100644
--- a/index.html
+++ b/index.html
@@ -291,9 +291,11 @@ be supported as well.</p>
 <li class="toctree-l2"><a class="reference internal" 
href="installation.html#external-password-store-for-sqlalchemy-connections">External
 Password store for SQLAlchemy connections</a></li>
 <li class="toctree-l2"><a class="reference internal" 
href="installation.html#ssl-access-to-databases">SSL Access to 
databases</a></li>
 <li class="toctree-l2"><a class="reference internal" 
href="installation.html#druid">Druid</a></li>
+<li class="toctree-l2"><a class="reference internal" 
href="installation.html#presto">Presto</a></li>
 <li class="toctree-l2"><a class="reference internal" 
href="installation.html#cors">CORS</a></li>
 <li class="toctree-l2"><a class="reference internal" 
href="installation.html#domain-sharding">DOMAIN SHARDING</a></li>
 <li class="toctree-l2"><a class="reference internal" 
href="installation.html#middleware">MIDDLEWARE</a></li>
+<li class="toctree-l2"><a class="reference internal" 
href="installation.html#event-logging">Event Logging</a></li>
 <li class="toctree-l2"><a class="reference internal" 
href="installation.html#upgrading">Upgrading</a></li>
 <li class="toctree-l2"><a class="reference internal" 
href="installation.html#celery-tasks">Celery Tasks</a></li>
 <li class="toctree-l2"><a class="reference internal" 
href="installation.html#email-reports">Email Reports</a></li>
@@ -304,6 +306,7 @@ be supported as well.</p>
 <li class="toctree-l2"><a class="reference internal" 
href="installation.html#statsd-logging">StatsD logging</a></li>
 <li class="toctree-l2"><a class="reference internal" 
href="installation.html#install-superset-with-helm-in-kubernetes">Install 
Superset with helm in Kubernetes</a></li>
 <li class="toctree-l2"><a class="reference internal" 
href="installation.html#custom-oauth2-configuration">Custom OAuth2 
configuration</a></li>
+<li class="toctree-l2"><a class="reference internal" 
href="installation.html#feature-flags">Feature Flags</a></li>
 </ul>
 </li>
 <li class="toctree-l1"><a class="reference internal" 
href="tutorial.html">Tutorial - Creating your first dashboard</a><ul>
diff --git a/installation.html b/installation.html
index a9967bc..2b17546 100644
--- a/installation.html
+++ b/installation.html
@@ -105,9 +105,11 @@
 <li class="toctree-l2"><a class="reference internal" 
href="#external-password-store-for-sqlalchemy-connections">External Password 
store for SQLAlchemy connections</a></li>
 <li class="toctree-l2"><a class="reference internal" 
href="#ssl-access-to-databases">SSL Access to databases</a></li>
 <li class="toctree-l2"><a class="reference internal" 
href="#druid">Druid</a></li>
+<li class="toctree-l2"><a class="reference internal" 
href="#presto">Presto</a></li>
 <li class="toctree-l2"><a class="reference internal" href="#cors">CORS</a></li>
 <li class="toctree-l2"><a class="reference internal" 
href="#domain-sharding">DOMAIN SHARDING</a></li>
 <li class="toctree-l2"><a class="reference internal" 
href="#middleware">MIDDLEWARE</a></li>
+<li class="toctree-l2"><a class="reference internal" 
href="#event-logging">Event Logging</a></li>
 <li class="toctree-l2"><a class="reference internal" 
href="#upgrading">Upgrading</a></li>
 <li class="toctree-l2"><a class="reference internal" 
href="#celery-tasks">Celery Tasks</a></li>
 <li class="toctree-l2"><a class="reference internal" 
href="#email-reports">Email Reports</a></li>
@@ -118,6 +120,7 @@
 <li class="toctree-l2"><a class="reference internal" 
href="#statsd-logging">StatsD logging</a></li>
 <li class="toctree-l2"><a class="reference internal" 
href="#install-superset-with-helm-in-kubernetes">Install Superset with helm in 
Kubernetes</a></li>
 <li class="toctree-l2"><a class="reference internal" 
href="#custom-oauth2-configuration">Custom OAuth2 configuration</a></li>
+<li class="toctree-l2"><a class="reference internal" 
href="#feature-flags">Feature Flags</a></li>
 </ul>
 </li>
 <li class="toctree-l1"><a class="reference internal" 
href="tutorial.html">Tutorial - Creating your first dashboard</a></li>
@@ -710,6 +713,22 @@ into your global default defined in <code class="docutils 
literal notranslate"><
 <span class="p">}</span>
 </pre></div>
 </div>
+<p>It is also possible to pass a custom cache initialization function in the
+config to handle additional caching use cases. The function must return an
+object that is compatible with the <a class="reference external" 
href="https://pythonhosted.org/Flask-Cache/";>Flask-Cache</a> API.</p>
+<div class="highlight-python notranslate"><div 
class="highlight"><pre><span></span><span class="kn">from</span> <span 
class="nn">custom_caching</span> <span class="kn">import</span> <span 
class="n">CustomCache</span>
+
+<span class="k">def</span> <span class="nf">init_cache</span><span 
class="p">(</span><span class="n">app</span><span class="p">):</span>
+    <span class="sd">&quot;&quot;&quot;Takes an app instance and returns a 
custom cache backend&quot;&quot;&quot;</span>
+    <span class="n">config</span> <span class="o">=</span> <span 
class="p">{</span>
+        <span class="s1">&#39;CACHE_DEFAULT_TIMEOUT&#39;</span><span 
class="p">:</span> <span class="mi">60</span> <span class="o">*</span> <span 
class="mi">60</span> <span class="o">*</span> <span class="mi">24</span><span 
class="p">,</span> <span class="c1"># 1 day default (in secs)</span>
+        <span class="s1">&#39;CACHE_KEY_PREFIX&#39;</span><span 
class="p">:</span> <span class="s1">&#39;superset_results&#39;</span><span 
class="p">,</span>
+    <span class="p">}</span>
+    <span class="k">return</span> <span class="n">CustomCache</span><span 
class="p">(</span><span class="n">app</span><span class="p">,</span> <span 
class="n">config</span><span class="p">)</span>
+
+<span class="n">CACHE_CONFIG</span> <span class="o">=</span> <span 
class="n">init_cache</span>
+</pre></div>
+</div>
 <p>Superset has a Celery task that will periodically warm up the cache based on
 different strategies. To use it, add the following to the 
<cite>CELERYBEAT_SCHEDULE</cite>
 section in <cite>config.py</cite>:</p>
@@ -804,6 +823,17 @@ parameter</p>
 <p>Note that you can run the <code class="docutils literal notranslate"><span 
class="pre">superset</span> <span class="pre">refresh_druid</span></code> 
command to refresh the
 metadata from your Druid cluster(s)</p>
 </div>
+<div class="section" id="presto">
+<h2>Presto<a class="headerlink" href="#presto" title="Permalink to this 
headline">¶</a></h2>
+<p>By default Superset assumes the most recent version of Presto is being used 
when
+querying the datasource. If you’re using an older version of presto, you can 
configure
+it in the <code class="docutils literal notranslate"><span 
class="pre">extra</span></code> parameter:</p>
+<div class="highlight-default notranslate"><div 
class="highlight"><pre><span></span><span class="p">{</span>
+    <span class="s2">&quot;version&quot;</span><span class="p">:</span> <span 
class="s2">&quot;0.123&quot;</span>
+<span class="p">}</span>
+</pre></div>
+</div>
+</div>
 <div class="section" id="cors">
 <h2>CORS<a class="headerlink" href="#cors" title="Permalink to this 
headline">¶</a></h2>
 <p>The extra CORS Dependency must be installed:</p>
@@ -820,7 +850,7 @@ metadata from your Druid cluster(s)</p>
 <h2>DOMAIN SHARDING<a class="headerlink" href="#domain-sharding" 
title="Permalink to this headline">¶</a></h2>
 <p>Chrome allows up to 6 open connections per domain at a time. When there are 
more
 than 6 slices in dashboard, a lot of time fetch requests are queued up and 
wait for
-next available socket. PR (<cite>#5039 
&lt;https://github.com/apache/incubator-superset/pull/5039&gt;</cite>) adds 
domain sharding to Superset,
+next available socket. <a class="reference external" 
href="https://github.com/apache/incubator-superset/pull/5039";>PR 5039</a> adds 
domain sharding to Superset,
 and this feature will be enabled by configuration only (by default Superset
 doesn’t allow cross-domain request).</p>
 <ul class="simple">
@@ -847,6 +877,38 @@ environment variable:</p>
 </div>
 <p><em>Adapted from http://flask.pocoo.org/snippets/69/</em></p>
 </div>
+<div class="section" id="event-logging">
+<h2>Event Logging<a class="headerlink" href="#event-logging" title="Permalink 
to this headline">¶</a></h2>
+<p>Superset by default logs special action event on it’s database. These log 
can be accessed on the UI navigating to
+“Security” -&gt; “Action Log”. You can freely customize these logs by 
implementing your own event log class.</p>
+<p>Example of a simple JSON to Stdout class:</p>
+<div class="highlight-default notranslate"><div 
class="highlight"><pre><span></span><span class="k">class</span> <span 
class="nc">JSONStdOutEventLogger</span><span class="p">(</span><span 
class="n">AbstractEventLogger</span><span class="p">):</span>
+
+    <span class="k">def</span> <span class="nf">log</span><span 
class="p">(</span><span class="bp">self</span><span class="p">,</span> <span 
class="n">user_id</span><span class="p">,</span> <span 
class="n">action</span><span class="p">,</span> <span class="o">*</span><span 
class="n">args</span><span class="p">,</span> <span class="o">**</span><span 
class="n">kwargs</span><span class="p">):</span>
+        <span class="n">records</span> <span class="o">=</span> <span 
class="n">kwargs</span><span class="o">.</span><span class="n">get</span><span 
class="p">(</span><span class="s1">&#39;records&#39;</span><span 
class="p">,</span> <span class="nb">list</span><span class="p">())</span>
+        <span class="n">dashboard_id</span> <span class="o">=</span> <span 
class="n">kwargs</span><span class="o">.</span><span class="n">get</span><span 
class="p">(</span><span class="s1">&#39;dashboard_id&#39;</span><span 
class="p">)</span>
+        <span class="n">slice_id</span> <span class="o">=</span> <span 
class="n">kwargs</span><span class="o">.</span><span class="n">get</span><span 
class="p">(</span><span class="s1">&#39;slice_id&#39;</span><span 
class="p">)</span>
+        <span class="n">duration_ms</span> <span class="o">=</span> <span 
class="n">kwargs</span><span class="o">.</span><span class="n">get</span><span 
class="p">(</span><span class="s1">&#39;duration_ms&#39;</span><span 
class="p">)</span>
+        <span class="n">referrer</span> <span class="o">=</span> <span 
class="n">kwargs</span><span class="o">.</span><span class="n">get</span><span 
class="p">(</span><span class="s1">&#39;referrer&#39;</span><span 
class="p">)</span>
+
+        <span class="k">for</span> <span class="n">record</span> <span 
class="ow">in</span> <span class="n">records</span><span class="p">:</span>
+            <span class="n">log</span> <span class="o">=</span> <span 
class="nb">dict</span><span class="p">(</span>
+                <span class="n">action</span><span class="o">=</span><span 
class="n">action</span><span class="p">,</span>
+                <span class="n">json</span><span class="o">=</span><span 
class="n">record</span><span class="p">,</span>
+                <span class="n">dashboard_id</span><span 
class="o">=</span><span class="n">dashboard_id</span><span class="p">,</span>
+                <span class="n">slice_id</span><span class="o">=</span><span 
class="n">slice_id</span><span class="p">,</span>
+                <span class="n">duration_ms</span><span 
class="o">=</span><span class="n">duration_ms</span><span class="p">,</span>
+                <span class="n">referrer</span><span class="o">=</span><span 
class="n">referrer</span><span class="p">,</span>
+                <span class="n">user_id</span><span class="o">=</span><span 
class="n">user_id</span>
+            <span class="p">)</span>
+            <span class="nb">print</span><span class="p">(</span><span 
class="n">json</span><span class="o">.</span><span class="n">dumps</span><span 
class="p">(</span><span class="n">log</span><span class="p">))</span>
+</pre></div>
+</div>
+<p>Then on Superset’s config pass an instance of the logger type you want to 
use.</p>
+<blockquote>
+<div><p>EVENT_LOGGER = JSONStdOutEventLogger()</p>
+</div></blockquote>
+</div>
 <div class="section" id="upgrading">
 <h2>Upgrading<a class="headerlink" href="#upgrading" title="Permalink to this 
headline">¶</a></h2>
 <p>Upgrading should be as straightforward as running:</p>
@@ -1147,7 +1209,7 @@ your environment. See <a class="reference external" 
href="https://github.com/apa
 </div>
 <div class="section" id="blueprints">
 <h2>Blueprints<a class="headerlink" href="#blueprints" title="Permalink to 
this headline">¶</a></h2>
-<p><a class="reference external" 
href="http://flask.pocoo.org/docs/0.12/blueprints/";>Blueprints are Flask’s 
reusable apps</a>.
+<p><a class="reference external" 
href="https://flask.palletsprojects.com/en/1.0.x/tutorial/views/";>Blueprints 
are Flask’s reusable apps</a>.
 Superset allows you to specify an array of Blueprints
 in your <code class="docutils literal notranslate"><span 
class="pre">superset_config</span></code> module. Here’s
 an example of how this can work with a simple Blueprint. By doing
@@ -1249,6 +1311,26 @@ located in <code class="docutils literal 
notranslate"><span class="pre">install/
 </pre></div>
 </div>
 </div>
+<div class="section" id="feature-flags">
+<h2>Feature Flags<a class="headerlink" href="#feature-flags" title="Permalink 
to this headline">¶</a></h2>
+<p>Because of a wide variety of users, Superset has some features that are not 
enabled by default. For example, some users have stronger security 
restrictions, while some others may not. So Superset allow users to enable or 
disable some features by config. For feature owners, you can add optional 
functionalities in Superset, but will be only affected by a subset of users.</p>
+<p>You can enable or disable features with flag from <code class="docutils 
literal notranslate"><span class="pre">superset_config.py</span></code>:</p>
+<div class="highlight-python notranslate"><div 
class="highlight"><pre><span></span><span 
class="n">DEFAULT_FEATURE_FLAGS</span> <span class="o">=</span> <span 
class="p">{</span>
+    <span class="s1">&#39;CLIENT_CACHE&#39;</span><span class="p">:</span> 
<span class="bp">False</span><span class="p">,</span>
+    <span class="s1">&#39;ENABLE_EXPLORE_JSON_CSRF_PROTECTION&#39;</span><span 
class="p">:</span> <span class="bp">False</span>
+<span class="p">}</span>
+</pre></div>
+</div>
+<p>Here is a list of flags and descriptions:</p>
+<ul class="simple">
+<li><p>ENABLE_EXPLORE_JSON_CSRF_PROTECTION</p>
+<ul>
+<li><p>For some security concerns, you may need to enforce CSRF protection on 
all query request to explore_json endpoint. In Superset, we use <a 
class="reference external" 
href="https://sjl.bitbucket.io/flask-csrf/";>flask-csrf</a> add csrf protection 
for all POST requests, but this protection doesn’t apply to GET method.</p></li>
+<li><p>When ENABLE_EXPLORE_JSON_CSRF_PROTECTION is set to true, your users 
cannot make GET request to explore_json. The default value for this feature 
False (current behavior), explore_json accepts both GET and POST request. See 
<a class="reference external" 
href="https://github.com/apache/incubator-superset/pull/7935";>PR 7935</a> for 
more details.</p></li>
+</ul>
+</li>
+</ul>
+</div>
 </div>
 
 
diff --git a/objects.inv b/objects.inv
index 62d5b78..55df316 100644
Binary files a/objects.inv and b/objects.inv differ
diff --git a/searchindex.js b/searchindex.js
index 1858724..c8a2caa 100644
--- a/searchindex.js
+++ b/searchindex.js
@@ -1 +1 @@
-Search.setIndex({docnames:["druid","faq","gallery","import_export_datasources","index","installation","misc","security","sqllab","tutorial","videos","visualization"],envversion:{"sphinx.domains.c":1,"sphinx.domains.changeset":1,"sphinx.domains.citation":1,"sphinx.domains.cpp":1,"sphinx.domains.javascript":1,"sphinx.domains.math":2,"sphinx.domains.python":1,"sphinx.domains.rst":1,"sphinx.domains.std":1,"sphinx.ext.viewcode":1,sphinx:56},filenames:["druid.rst","faq.rst","gallery.rst","impo
 [...]
\ No newline at end of file
+Search.setIndex({docnames:["druid","faq","gallery","import_export_datasources","index","installation","misc","security","sqllab","tutorial","videos","visualization"],envversion:{"sphinx.domains.c":1,"sphinx.domains.changeset":1,"sphinx.domains.citation":1,"sphinx.domains.cpp":1,"sphinx.domains.javascript":1,"sphinx.domains.math":2,"sphinx.domains.python":1,"sphinx.domains.rst":1,"sphinx.domains.std":1,"sphinx.ext.viewcode":1,sphinx:56},filenames:["druid.rst","faq.rst","gallery.rst","impo
 [...]
\ No newline at end of file
diff --git a/sqllab.html b/sqllab.html
index 41f123d..1fe9e9f 100644
--- a/sqllab.html
+++ b/sqllab.html
@@ -198,7 +198,7 @@ which allows for using macros in your SQL code</p></li>
 <h2>Templating with Jinja<a class="headerlink" href="#templating-with-jinja" 
title="Permalink to this headline">¶</a></h2>
 <div class="highlight-sql notranslate"><div 
class="highlight"><pre><span></span><span class="k">SELECT</span> <span 
class="o">*</span>
 <span class="k">FROM</span> <span class="n">some_table</span>
-<span class="k">WHERE</span> <span class="n">partition_key</span> <span 
class="o">=</span> <span class="s1">&#39;{{ 
presto.latest_partition(&#39;</span><span class="n">some_table</span><span 
class="s1">&#39;) }}&#39;</span>
+<span class="k">WHERE</span> <span class="n">partition_key</span> <span 
class="o">=</span> <span class="s1">&#39;{{ 
presto.first_latest_partition(&#39;</span><span 
class="n">some_table</span><span class="s1">&#39;) }}&#39;</span>
 </pre></div>
 </div>
 <p>Templating unleashes the power and capabilities of a
@@ -302,17 +302,111 @@ purposes</p></li>
 </dl>
 </dd></dl>
 
+<dl class="function">
+<dt id="superset.jinja_context.CacheKeyWrapper.cache_key_wrapper">
+<code class="sig-prename 
descclassname">superset.jinja_context.CacheKeyWrapper.</code><code 
class="sig-name descname">cache_key_wrapper</code><span 
class="sig-paren">(</span><em class="sig-param">self</em>, <em 
class="sig-param">key</em><span class="sig-paren">)</span><a class="headerlink" 
href="#superset.jinja_context.CacheKeyWrapper.cache_key_wrapper" 
title="Permalink to this definition">¶</a></dt>
+<dd><p>Adds values to a list that is added to the query object used for 
calculating
+a cache key.</p>
+<dl class="simple">
+<dt>This is needed if the following applies:</dt><dd><ul class="simple">
+<li><p>Caching is enabled</p></li>
+<li><p>The query is dynamically generated using a jinja template</p></li>
+<li><p>A username or similar is used as a filter in the query</p></li>
+</ul>
+</dd>
+</dl>
+<p>Example when using a SQL query as a data source</p>
+<div class="highlight-default notranslate"><div 
class="highlight"><pre><span></span><span class="n">SELECT</span> <span 
class="n">action</span><span class="p">,</span> <span 
class="n">count</span><span class="p">(</span><span class="o">*</span><span 
class="p">)</span> <span class="k">as</span> <span class="n">times</span>
+<span class="n">FROM</span> <span class="n">logs</span>
+<span class="n">WHERE</span> <span class="n">logged_in_user</span> <span 
class="o">=</span> <span class="s1">&#39;{{ 
cache_key_wrapper(current_username()) }}&#39;</span>
+<span class="n">GROUP</span> <span class="n">BY</span> <span 
class="n">action</span>
+</pre></div>
+</div>
+<p>This will ensure that the query results that were cached by 
<cite>user_1</cite> will
+<strong>not</strong> be seen by <cite>user_2</cite>, as the 
<cite>cache_key</cite> for the query will be
+different. <code class="docutils literal notranslate"><span 
class="pre">cache_key_wrapper</span></code> can be used similarly for regular 
table data
+sources by adding a <cite>Custom SQL</cite> filter.</p>
+<dl class="field-list simple">
+<dt class="field-odd">Parameters</dt>
+<dd class="field-odd"><p><strong>key</strong> (<code class="xref py py-data 
docutils literal notranslate"><span class="pre">Any</span></code>) – Any value 
that should be considered when calculating the cache key</p>
+</dd>
+<dt class="field-even">Return type</dt>
+<dd class="field-even"><p><code class="xref py py-data docutils literal 
notranslate"><span class="pre">Any</span></code></p>
+</dd>
+<dt class="field-odd">Returns</dt>
+<dd class="field-odd"><p>the original value <code class="docutils literal 
notranslate"><span class="pre">key</span></code> passed to the function</p>
+</dd>
+</dl>
+</dd></dl>
+
 <dl class="class">
 <dt id="superset.jinja_context.PrestoTemplateProcessor">
-<em class="property">class </em><code class="sig-prename 
descclassname">superset.jinja_context.</code><code class="sig-name 
descname">PrestoTemplateProcessor</code><span class="sig-paren">(</span><em 
class="sig-param">database=None</em>, <em class="sig-param">query=None</em>, 
<em class="sig-param">table=None</em>, <em class="sig-param">**kwargs</em><span 
class="sig-paren">)</span><a class="reference internal" 
href="_modules/superset/jinja_context.html#PrestoTemplateProcessor"><span class 
[...]
+<em class="property">class </em><code class="sig-prename 
descclassname">superset.jinja_context.</code><code class="sig-name 
descname">PrestoTemplateProcessor</code><span class="sig-paren">(</span><em 
class="sig-param">database=None</em>, <em class="sig-param">query=None</em>, 
<em class="sig-param">table=None</em>, <em 
class="sig-param">extra_cache_keys=None</em>, <em 
class="sig-param">**kwargs</em><span class="sig-paren">)</span><a 
class="reference internal" href="_modules/superset/jinja [...]
 <dd><p>Presto Jinja context</p>
 <p>The methods described here are namespaced under <code class="docutils 
literal notranslate"><span class="pre">presto</span></code> in the
 jinja context as in <code class="docutils literal notranslate"><span 
class="pre">SELECT</span> <span class="pre">'{{</span> <span 
class="pre">presto.some_macro_call()</span> <span 
class="pre">}}'</span></code></p>
+<dl class="method">
+<dt id="superset.jinja_context.PrestoTemplateProcessor.first_latest_partition">
+<code class="sig-name descname">first_latest_partition</code><span 
class="sig-paren">(</span><em class="sig-param">table_name</em><span 
class="sig-paren">)</span><a class="reference internal" 
href="_modules/superset/jinja_context.html#PrestoTemplateProcessor.first_latest_partition"><span
 class="viewcode-link">[source]</span></a><a class="headerlink" 
href="#superset.jinja_context.PrestoTemplateProcessor.first_latest_partition" 
title="Permalink to this definition">¶</a></dt>
+<dd><p>Gets the first value in the array of all latest partitions</p>
+<dl class="field-list simple">
+<dt class="field-odd">Parameters</dt>
+<dd class="field-odd"><p><strong>table_name</strong> (<code class="xref py 
py-class docutils literal notranslate"><span class="pre">str</span></code>) – 
table name in the format <cite>schema.table</cite></p>
+</dd>
+<dt class="field-even">Return type</dt>
+<dd class="field-even"><p><code class="xref py py-class docutils literal 
notranslate"><span class="pre">str</span></code></p>
+</dd>
+<dt class="field-odd">Returns</dt>
+<dd class="field-odd"><p>the first (or only) value in the latest partition 
array</p>
+</dd>
+<dt class="field-even">Raises</dt>
+<dd class="field-even"><p><strong>IndexError</strong> – If no partition 
exists</p>
+</dd>
+</dl>
+</dd></dl>
+
+<dl class="method">
+<dt id="superset.jinja_context.PrestoTemplateProcessor.latest_partition">
+<code class="sig-name descname">latest_partition</code><span 
class="sig-paren">(</span><em class="sig-param">table_name</em><span 
class="sig-paren">)</span><a class="headerlink" 
href="#superset.jinja_context.PrestoTemplateProcessor.latest_partition" 
title="Permalink to this definition">¶</a></dt>
+<dd><p>Gets the first value in the array of all latest partitions</p>
+<dl class="field-list simple">
+<dt class="field-odd">Parameters</dt>
+<dd class="field-odd"><p><strong>table_name</strong> (<code class="xref py 
py-class docutils literal notranslate"><span class="pre">str</span></code>) – 
table name in the format <cite>schema.table</cite></p>
+</dd>
+<dt class="field-even">Return type</dt>
+<dd class="field-even"><p><code class="xref py py-class docutils literal 
notranslate"><span class="pre">str</span></code></p>
+</dd>
+<dt class="field-odd">Returns</dt>
+<dd class="field-odd"><p>the first (or only) value in the latest partition 
array</p>
+</dd>
+<dt class="field-even">Raises</dt>
+<dd class="field-even"><p><strong>IndexError</strong> – If no partition 
exists</p>
+</dd>
+</dl>
+</dd></dl>
+
+<dl class="method">
+<dt id="superset.jinja_context.PrestoTemplateProcessor.latest_partitions">
+<code class="sig-name descname">latest_partitions</code><span 
class="sig-paren">(</span><em class="sig-param">table_name</em><span 
class="sig-paren">)</span><a class="reference internal" 
href="_modules/superset/jinja_context.html#PrestoTemplateProcessor.latest_partitions"><span
 class="viewcode-link">[source]</span></a><a class="headerlink" 
href="#superset.jinja_context.PrestoTemplateProcessor.latest_partitions" 
title="Permalink to this definition">¶</a></dt>
+<dd><p>Gets the array of all latest partitions</p>
+<dl class="field-list simple">
+<dt class="field-odd">Parameters</dt>
+<dd class="field-odd"><p><strong>table_name</strong> (<code class="xref py 
py-class docutils literal notranslate"><span class="pre">str</span></code>) – 
table name in the format <cite>schema.table</cite></p>
+</dd>
+<dt class="field-even">Return type</dt>
+<dd class="field-even"><p><code class="xref py py-class docutils literal 
notranslate"><span class="pre">List</span></code>[<code class="xref py py-class 
docutils literal notranslate"><span class="pre">str</span></code>]</p>
+</dd>
+<dt class="field-odd">Returns</dt>
+<dd class="field-odd"><p>the latest partition array</p>
+</dd>
+</dl>
+</dd></dl>
+
 </dd></dl>
 
 <dl class="class">
 <dt id="superset.jinja_context.HiveTemplateProcessor">
-<em class="property">class </em><code class="sig-prename 
descclassname">superset.jinja_context.</code><code class="sig-name 
descname">HiveTemplateProcessor</code><span class="sig-paren">(</span><em 
class="sig-param">database=None</em>, <em class="sig-param">query=None</em>, 
<em class="sig-param">table=None</em>, <em class="sig-param">**kwargs</em><span 
class="sig-paren">)</span><a class="reference internal" 
href="_modules/superset/jinja_context.html#HiveTemplateProcessor"><span 
class="vi [...]
+<em class="property">class </em><code class="sig-prename 
descclassname">superset.jinja_context.</code><code class="sig-name 
descname">HiveTemplateProcessor</code><span class="sig-paren">(</span><em 
class="sig-param">database=None</em>, <em class="sig-param">query=None</em>, 
<em class="sig-param">table=None</em>, <em 
class="sig-param">extra_cache_keys=None</em>, <em 
class="sig-param">**kwargs</em><span class="sig-paren">)</span><a 
class="reference internal" href="_modules/superset/jinja_c [...]
 <dd></dd></dl>
 
 </div>

Reply via email to