1
0
forked from HPR/hpr_generator

Merge pull request 'Issue - Remove MySQL specific code from site generation code' () from paulj/hpr_generator:remove_mysql_code into main

Reviewed-on: 
Reviewed-by: Roan Horning <rho_n@josh@dao-mail.com>
This commit is contained in:
Roan Horning 2025-04-07 16:47:15 +00:00
commit 013beca3c0
40 changed files with 28 additions and 286 deletions

@ -7,13 +7,6 @@
# Configuration settings for SQLite # Configuration settings for SQLite
database: sqlite database: sqlite
driver: dbi:SQLite:hpr.db driver: dbi:SQLite:hpr.db
#user: (not used - leave blank)
#password: (not used - leave blank)
# Configuration settings for MySQL
#database: mysql
#driver: dbi:mysql:database=hpr_hpr:hostname=localhost
#user: hpr-generator (Suggested user with read-only privileges)
#password: ********* (Password for user)
# Configure the location of the templates and the generated HTML # Configure the location of the templates and the generated HTML
[app_paths] [app_paths]

@ -1,8 +1,9 @@
<!--% PROCESS 'shared-episode-summary.tpl.html' %--> <!--% PROCESS 'shared-episode-summary.tpl.html' %-->
<!--% PROCESS 'shared-utils.tpl.html' %--> <!--% PROCESS 'shared-utils.tpl.html' %-->
<!--% PROCESS 'shared-listen-now.tpl.html' %--> <!--% PROCESS 'shared-listen-now.tpl.html' %-->
<!--% PROCESS "queries-episode-${constants.database}.tpl.html" %--> <!--% PROCESS "queries-episode.tpl.html" %-->
<!--% USE DBI(constants.driver, constants.user, constants.password) %--> <!--% USE DBI(constants.driver) %-->
<h2>Comment Viewer</h2> <h2>Comment Viewer</h2>
<p>Because of the spammers we have had to turn on comment moderation. Sorry about the delay this will cause.</p> <p>Because of the spammers we have had to turn on comment moderation. Sorry about the delay this will cause.</p>
<p><a href="<!--% absolute_path(baseurl) %-->comments.rss">Subscribe</a> to the comment feed.</p> <p><a href="<!--% absolute_path(baseurl) %-->comments.rss">Subscribe</a> to the comment feed.</p>

@ -1,8 +1,8 @@
<!--% PROCESS 'shared-episode-summary.tpl.html' %--> <!--% PROCESS 'shared-episode-summary.tpl.html' %-->
<!--% PROCESS 'shared-avatar.tpl.html' %--> <!--% PROCESS 'shared-avatar.tpl.html' %-->
<!--% PROCESS 'shared-utils.tpl.html' %--> <!--% PROCESS 'shared-utils.tpl.html' %-->
<!--% PROCESS "queries-correspondent-${constants.database}.tpl.html" %--> <!--% PROCESS "queries-correspondent.tpl.html" %-->
<!--% USE DBI(constants.driver, constants.user, constants.password) %--> <!--% USE DBI(constants.driver) %-->
<!--% results_hpr_shows = DBI.prepare(query_hpr_shows) <!--% results_hpr_shows = DBI.prepare(query_hpr_shows)
%--> %-->
<!--% results_hpr_show_count = DBI.prepare(query_hpr_show_count) %--> <!--% results_hpr_show_count = DBI.prepare(query_hpr_show_count) %-->

@ -3,7 +3,7 @@
<article> <article>
<h2 class="title">Correspondents</h2> <h2 class="title">Correspondents</h2>
<p>For more information on how to become a Correspondent see our <a href="<!--% absolute_url(baseurl) %-->about.html#so_you_want_to_record_a_podcast">contribute</a></center> page. To add a logo here, either email one to admin at hpr or setup your email on <a href="https://en.gravatar.com/">Gravatar</a>. To protect your browsing privacy we gather the images every hour and serve them directly from HPR.<p /> <p>For more information on how to become a Correspondent see our <a href="<!--% absolute_url(baseurl) %-->about.html#so_you_want_to_record_a_podcast">contribute</a></center> page. To add a logo here, either email one to admin at hpr or setup your email on <a href="https://en.gravatar.com/">Gravatar</a>. To protect your browsing privacy we gather the images every hour and serve them directly from HPR.<p />
<!--% USE DBI(constants.driver, constants.user, constants.password) %--> <!--% USE DBI(constants.driver) %-->
<!--% host_cnt = 0 %--> <!--% host_cnt = 0 %-->
<table class="hosts"> <table class="hosts">
<th >Avatar</th> <th >Avatar</th>

@ -3,7 +3,7 @@
<!--% PROCESS 'shared-utils.tpl.html' %--> <!--% PROCESS 'shared-utils.tpl.html' %-->
<!--% PROCESS 'shared-listen-now.tpl.html' %--> <!--% PROCESS 'shared-listen-now.tpl.html' %-->
<!--% PROCESS 'shared-show-transcript.tpl.html' %--> <!--% PROCESS 'shared-show-transcript.tpl.html' %-->
<!--% PROCESS "queries-episode-${constants.database}.tpl.html" %--> <!--% PROCESS "queries-episode.tpl.html" %-->
<!--% USE DBI(constants.driver, constants.user, constants.password) %--> <!--% USE DBI(constants.driver, constants.user, constants.password) %-->
<!--% query_episodes = DBI.prepare(query_episode_maxmin) %--> <!--% query_episodes = DBI.prepare(query_episode_maxmin) %-->
<!--% episode_result = query_episodes.execute(id, id, id, id, id) %--> <!--% episode_result = query_episodes.execute(id, id, id, id, id) %-->

@ -1,5 +1,5 @@
<!--% PROCESS 'shared-episode-summary.tpl.html' %--> <!--% PROCESS 'shared-episode-summary.tpl.html' %-->
<!--% PROCESS "queries-episodes-${constants.database}.tpl.html" %--> <!--% PROCESS "queries-episodes.tpl.html" %-->
<article> <article>
<header> <header>
<h1>Complete Archive of Shows.</h1> <h1>Complete Archive of Shows.</h1>
@ -7,7 +7,7 @@
All this information is available to the public. Scrape if you wish but if we can format the data for you then we're happy to help. All this information is available to the public. Scrape if you wish but if we can format the data for you then we're happy to help.
</p> </p>
</header> </header>
<!--% USE DBI(constants.driver, constants.user, constants.password) %--> <!--% USE DBI(constants.driver) %-->
<!--% FOREACH episodes IN DBI.query(query_episodes) <!--% FOREACH episodes IN DBI.query(query_episodes)
%--> %-->
<!--% show_summary(episodes) %--> <!--% show_summary(episodes) %-->

@ -4,7 +4,7 @@
<!--% PROCESS 'shared-show-transcript.tpl.html' %--> <!--% PROCESS 'shared-show-transcript.tpl.html' %-->
<!--% PROCESS 'shared-call_for_shows.tpl.html' %--> <!--% PROCESS 'shared-call_for_shows.tpl.html' %-->
<!--% INCLUDE 'content-index-announcement.tpl.html' %--> <!--% INCLUDE 'content-index-announcement.tpl.html' %-->
<!--% PROCESS "queries-index-${constants.database}.tpl.html" %--> <!--% PROCESS "queries-index.tpl.html" %-->
<!--% MACRO tidy_notes(all_lines) BLOCK %--> <!--% MACRO tidy_notes(all_lines) BLOCK %-->
<!--% lines = all_lines %--> <!--% lines = all_lines %-->
<!--% after_html = all_lines %--> <!--% after_html = all_lines %-->
@ -29,7 +29,7 @@
<h3>Welcome to HPR, the Community Podcast</h3> <h3>Welcome to HPR, the Community Podcast</h3>
</header> </header>
<!--% days_till_next_episode = 0 %--> <!--% days_till_next_episode = 0 %-->
<!--% USE DBI(constants.driver, constants.user, constants.password) %--> <!--% USE DBI(constants.driver) %-->
<!--% USE date %--> <!--% USE date %-->
<!--% calc = date.calc %--> <!--% calc = date.calc %-->
<!--% episodes = DBI.query(query_next_available_episode).get_all() %--> <!--% episodes = DBI.query(query_next_available_episode).get_all() %-->

@ -1,7 +1,7 @@
<!--% PROCESS 'shared-utils.tpl.html' %--> <!--% PROCESS 'shared-utils.tpl.html' %-->
<!--% PROCESS "queries-series-${constants.database}.tpl.html" %--> <!--% PROCESS "queries-series.tpl.html" %-->
<article> <article>
<!--% USE DBI(constants.driver, constants.user, constants.password) %--> <!--% USE DBI(constants.driver) %-->
<h1 class="title">In-Depth Series</h1> <h1 class="title">In-Depth Series</h1>
<!--% FOREACH series IN DBI.query(query_episodes) %--> <!--% FOREACH series IN DBI.query(query_episodes) %-->
<h2><a href="<!--% absolute_path(baseurl) %-->series/<!--% zero_pad_left(series.id) %-->.html"><!--% series.name %--></a></h2> <h2><a href="<!--% absolute_path(baseurl) %-->series/<!--% zero_pad_left(series.id) %-->.html"><!--% series.name %--></a></h2>

@ -1,7 +1,7 @@
<!--% PROCESS 'shared-episode-summary.tpl.html' %--> <!--% PROCESS 'shared-episode-summary.tpl.html' %-->
<!--% PROCESS 'shared-avatar.tpl.html' %--> <!--% PROCESS 'shared-avatar.tpl.html' %-->
<!--% PROCESS "queries-series_episodes-${constants.database}.tpl.html" %--> <!--% PROCESS "queries-series_episodes.tpl.html" %-->
<!--% USE DBI(constants.driver, constants.user, constants.password) %--> <!--% USE DBI(constants.driver) %-->
<!--% query_series = DBI.prepare(query_series_sql) <!--% query_series = DBI.prepare(query_series_sql)
%--> %-->
<!--% series_result = query_series.execute(id) %--> <!--% series_result = query_series.execute(id) %-->

@ -1,6 +1,6 @@
<!--% PROCESS 'shared-utils.tpl.html' %--> <!--% PROCESS 'shared-utils.tpl.html' %-->
<!--% PROCESS "queries-tags-${constants.database}.tpl.html" %--> <!--% PROCESS "queries-tags.tpl.html" %-->
<!--% USE DBI(constants.driver, constants.user, constants.password) %--> <!--% USE DBI(constants.driver) %-->
<!--% PERL %--> <!--% PERL %-->
$Template::Stash::PRIVATE = undef; # Allow . in tag $Template::Stash::PRIVATE = undef; # Allow . in tag
<!--% END %--> <!--% END %-->

@ -2,7 +2,7 @@
<!--% PROCESS 'shared-avatar.tpl.html' %--> <!--% PROCESS 'shared-avatar.tpl.html' %-->
<!--% PROCESS 'shared-utils.tpl.html' %--> <!--% PROCESS 'shared-utils.tpl.html' %-->
<!--% PROCESS 'shared-listen-now.tpl.html' %--> <!--% PROCESS 'shared-listen-now.tpl.html' %-->
<!--% USE DBI(constants.driver, constants.user, constants.password) %--> <!--% USE DBI(constants.driver) %-->
<!--% query_episodes = DBI.prepare(' <!--% query_episodes = DBI.prepare('
WITH episode_maxmin AS ( WITH episode_maxmin AS (
SELECT MAX(id) AS \'latest\', MIN(id) AS \'earliest\', ? AS \'id\' SELECT MAX(id) AS \'latest\', MIN(id) AS \'earliest\', ? AS \'id\'

@ -1,4 +1,4 @@
<!--% USE DBI(constants.driver, constants.user, constants.password) %--> <!--% USE DBI(constants.driver) %-->
<!--% FOREACH host IN DBI.query( <!--% FOREACH host IN DBI.query(
'select h.hostid from hosts as h' 'select h.hostid from hosts as h'
) %--> ) %-->

@ -1,5 +1,5 @@
<!--% PROCESS "queries-ids-episode-${constants.database}.tpl.html" %--> <!--% PROCESS "queries-ids-episode.tpl.html" %-->
<!--% USE DBI(constants.driver, constants.user, constants.password) %--> <!--% USE DBI(constants.driver) %-->
<!--% FOREACH episode IN DBI.query(query_ids_episode) %--> <!--% FOREACH episode IN DBI.query(query_ids_episode) %-->
,<!--% episode.id %--> ,<!--% episode.id %-->
<!--% END %--> <!--% END %-->

@ -1,4 +1,4 @@
<!--% USE DBI(constants.driver, constants.user, constants.password) %--> <!--% USE DBI(constants.driver) %-->
<!--% FOREACH episode IN DBI.query( <!--% FOREACH episode IN DBI.query(
'select eps.id from twat_eps AS eps' 'select eps.id from twat_eps AS eps'
) %--> ) %-->

@ -1,6 +0,0 @@
<!--% query_call_for_shows = '
SELECT CASE WHEN COUNT(id) < 6 THEN True ELSE False END AS `request_for_shows`
FROM eps
WHERE eps.date > NOW() AND eps.date <= DATE_ADD(NOW(), INTERVAL 10 DAY)
'
%-->

@ -1,24 +0,0 @@
<!--% query_hpr_shows = '
SELECT
eps.id,
eps.explicit,
eps.date, eps.license, eps.duration,
eps.title, eps.summary, eps.tags,
eps.notes,
hosts.local_image,
hosts.hostid,
hosts.host, hosts.email, hosts.profile,
miniseries.name AS series, miniseries.id AS seriesid
FROM eps
INNER JOIN hosts ON eps.hostid = hosts.hostid
INNER JOIN miniseries ON eps.series = miniseries.id
WHERE hosts.hostid = ? AND eps.date < DATE_ADD(NOW(), INTERVAL 1 DAY)
ORDER BY eps.id DESC
'
%-->
<!--% query_hpr_show_count = '
SELECT id
FROM eps
WHERE eps.hostid = ? AND eps.date < DATE_ADD(NOW(), INTERVAL 1 DAY)
'
%-->

@ -1,51 +0,0 @@
<!--% query_episode_maxmin = '
WITH episode_maxmin AS (
SELECT MAX(id) AS \'latest\', MIN(id) AS \'earliest\', ? AS \'id\'
FROM eps
WHERE eps.date <= UTC_DATE()
),
episode_date AS (
SELECT eps.date
FROM eps
WHERE eps.id = ?
),
episode_previous AS (
SELECT MAX(id) AS \'previous\', ? AS \'id\'
FROM eps
INNER JOIN episode_date
ON eps.date < episode_date.date
WHERE eps.id > 1
),
episode_next AS (
SELECT MIN(id) AS \'next\', ? AS \'id\'
FROM eps
INNER JOIN episode_date
ON eps.date > episode_date.date
WHERE eps.date <= NOW()
),
comment_tallies AS (
SELECT
eps_id,
COUNT(eps_id) AS eps_tally
FROM comments
GROUP BY eps_id
)
SELECT eps.id, eps.date, eps.title, eps.duration,
eps.summary, eps.notes, eps.explicit, eps.license,
eps.tags, eps.version, eps.downloads, eps.valid,
episode_maxmin.latest, episode_maxmin.earliest,
episode_previous.previous, episode_next.next,
hosts.hostid, hosts.host,
miniseries.name AS \'series\', miniseries.id AS \'seriesid\',
miniseries.description AS \'series_description\',
COALESCE (comment_tallies.eps_tally, 0) AS eps_tally
FROM eps
INNER JOIN hosts ON eps.hostid = hosts.hostid
INNER JOIN miniseries ON eps.series = miniseries.id
INNER JOIN episode_maxmin ON eps.id = episode_maxmin.id
INNER JOIN episode_previous ON eps.id = episode_previous.id
INNER JOIN episode_next ON eps.id = episode_next.id
LEFT JOIN comment_tallies ON eps.id = comment_tallies.eps_id
WHERE eps.id = ?
'
%-->

@ -1,15 +0,0 @@
<!--% query_episodes = 'SELECT
eps.id,
eps.explicit,
eps.date, eps.license, eps.title, eps.summary,
eps.duration, eps.notes, eps.tags,
hosts.hostid,
hosts.host, hosts.email, hosts.local_image,
miniseries.name AS series, miniseries.id AS seriesid
FROM eps
INNER JOIN hosts ON eps.hostid = hosts.hostid
INNER JOIN miniseries ON eps.series = miniseries.id
WHERE eps.date <= UTC_DATE()
ORDER BY eps.id DESC'
%-->

@ -1,2 +0,0 @@
<!--% query_ids_episode = 'select eps.id from eps order by eps.id' %-->

@ -1,58 +0,0 @@
<!--% query_next_available_episode = '
SELECT id, date FROM eps e WHERE id = (
SELECT id + 1 FROM eps mo
WHERE NOT EXISTS (
SELECT NULL
FROM eps mi
WHERE mi.id = mo.id + 1
)
ORDER BY id
LIMIT 1) - 1
'
%-->
<!--% query_latest_episodes = '
WITH comment_tallies AS (
SELECT
eps_id,
COUNT(eps_id) AS eps_tally
FROM comments
GROUP BY eps_id
)
SELECT
eps.id,
eps.explicit,
eps.date, eps.license, eps.duration,
eps.title, eps.summary, eps.tags,
eps.notes,
hosts.local_image,
hosts.hostid,
hosts.host, hosts.email,
miniseries.name AS series, miniseries.id AS seriesid,
COALESCE (comment_tallies.eps_tally, 0) AS eps_tally
FROM eps
INNER JOIN hosts ON eps.hostid = hosts.hostid
INNER JOIN miniseries ON eps.series = miniseries.id
LEFT JOIN comment_tallies ON eps.id = comment_tallies.eps_id
WHERE eps.date <= UTC_DATE()
ORDER BY eps.id DESC
LIMIT 10
'
%-->
<!--% query_last_5_weeks_episodes = '
SELECT
eps.id,
eps.explicit,
eps.date, eps.license, eps.title, eps.summary,
eps.duration, eps.notes, eps.tags,
hosts.hostid,
hosts.host, hosts.email, hosts.local_image,
miniseries.name AS series, miniseries.id AS seriesid
FROM eps
INNER JOIN hosts ON eps.hostid = hosts.hostid
INNER JOIN miniseries ON eps.series = miniseries.id
WHERE eps.date <= UTC_DATE()
ORDER BY eps.id DESC
LIMIT 30 OFFSET 10
'
%-->

@ -1,15 +0,0 @@
<!--% query_episodes = 'SELECT miniseries.id, miniseries.name, miniseries.description,
miniseries.private, miniseries.image, miniseries.valid,
ep.number_of_episodes, ep.latest_show, ep.earliest_show
FROM miniseries
INNER JOIN
(SELECT series,
COUNT(eps.id) AS number_of_episodes,
MAX(eps.date) AS latest_show,
MIN(eps.date) AS earliest_show
FROM eps
WHERE eps.date < DATE_ADD(NOW(), INTERVAL 1 DAY)
GROUP BY series) AS ep ON ep.series = miniseries.id
ORDER BY name'
%-->

@ -1,29 +0,0 @@
<!--% query_series_sql = 'SELECT miniseries.id, miniseries.name,
miniseries.description,
miniseries.private, miniseries.image, miniseries.valid,
ep.number_of_episodes, ep.latest_show, ep.earliest_show
FROM miniseries
INNER JOIN
(SELECT series,
COUNT(eps.id) AS number_of_episodes,
MAX(eps.date) AS latest_show,
MIN(eps.date) AS earliest_show
FROM eps
WHERE eps.date < DATE_ADD(NOW(), INTERVAL 1 DAY)
GROUP BY series) AS ep ON ep.series = miniseries.id
WHERE miniseries.id = ?
ORDER BY name'
%-->
<!--% query_shows_sql = 'SELECT
id, date, title,
duration, summary, notes,
explicit, eps.license, tags,
hosts.host, hosts.hostid
FROM eps
INNER JOIN hosts
ON eps.hostid = hosts.hostid
WHERE series = ? AND eps.date < DATE_ADD(NOW(), INTERVAL 1 DAY)
ORDER BY eps.id DESC
'
%-->

@ -1 +0,0 @@
<!--% query_tags = 'SELECT id, tags FROM eps' %-->

@ -24,7 +24,7 @@
<width>144</width> <width>144</width>
</image> </image>
<atom:link href="<!--% absolute_url(http_baseurl) %-->comments.rss" rel="self" type="application/rss+xml" /> <atom:link href="<!--% absolute_url(http_baseurl) %-->comments.rss" rel="self" type="application/rss+xml" />
<!--% USE DBI(constants.driver, constants.user, constants.password) %--> <!--% USE DBI(constants.driver) %-->
<!--% FOREACH response IN DBI.query('SELECT max( comment_timestamp) AS latest_update FROM comments') %--> <!--% FOREACH response IN DBI.query('SELECT max( comment_timestamp) AS latest_update FROM comments') %-->
<pubDate><!--% format_feed_date(response.latest_update) %--></pubDate> <pubDate><!--% format_feed_date(response.latest_update) %--></pubDate>

@ -1,5 +1,5 @@
<!--% PROCESS 'shared-item.tpl.xml' %--> <!--% PROCESS 'shared-item.tpl.xml' %-->
<!--% PROCESS "rss-query-hpr-${constants.database}.tpl.xml" %--> <!--% PROCESS "rss-query-hpr.tpl.xml" %-->
<!--% FOREACH episode IN feed_result %--> <!--% FOREACH episode IN feed_result %-->
<!--% display_item(episode, media_file_extension, audio_mime_type) %--> <!--% display_item(episode, media_file_extension, audio_mime_type) %-->
<!--% END %--> <!--% END %-->

@ -1,5 +1,5 @@
<!--% PROCESS 'shared-item.tpl.xml' %--> <!--% PROCESS 'shared-item.tpl.xml' %-->
<!--% PROCESS "rss-query-hpr_total-${constants.database}.tpl.xml" %--> <!--% PROCESS "rss-query-hpr_total.tpl.xml" %-->
<!--% FOREACH episode IN feed_result %--> <!--% FOREACH episode IN feed_result %-->
<!--% display_item(episode, media_file_extension, audio_mime_type) %--> <!--% display_item(episode, media_file_extension, audio_mime_type) %-->
<!--% END %--> <!--% END %-->

@ -1,26 +0,0 @@
<!--% USE DBI(constants.driver, constants.user, constants.password) %-->
<!--% query_hpr_feed = DBI.prepare('
SELECT
eps.id,
eps.explicit,
DATE_FORMAT(eps.date, \'%H:%i:%S %d:%m:%Y\') AS \'date\',
eps.license, eps.duration,
eps.title, eps.summary, eps.tags,
eps.notes,
hosts.local_image,
hosts.hostid,
hosts.host, hosts.email,
miniseries.name AS series, miniseries.id AS seriesid,
assets.size AS length
FROM eps
INNER JOIN hosts ON eps.hostid = hosts.hostid
INNER JOIN miniseries ON eps.series = miniseries.id
INNER JOIN assets ON eps.id = assets.episode_id
WHERE eps.date <= UTC_DATE()
AND assets.extension = ?
ORDER BY eps.date DESC
LIMIT 10
')
%-->
<!--% feed_result = query_hpr_feed.execute(media_file_extension) %-->

@ -1,4 +1,4 @@
<!--% USE DBI(constants.driver, constants.user, constants.password) %--> <!--% USE DBI(constants.driver) %-->
<!--% query_hpr_feed = DBI.prepare(' <!--% query_hpr_feed = DBI.prepare('
SELECT SELECT
eps.id, eps.id,

@ -1,25 +0,0 @@
<!--% USE DBI(constants.driver, constants.user, constants.password) %-->
<!--% query_hpr_feed = DBI.prepare('
SELECT
eps.id,
eps.explicit,
DATE_FORMAT(eps.date, \'%H:%i:%S %d:%m:%Y\') AS \'date\',
eps.license, eps.duration,
eps.title, eps.summary, eps.tags,
eps.notes,
hosts.local_image,
hosts.hostid,
hosts.host, hosts.email,
miniseries.name AS series, miniseries.id AS seriesid,
assets.size AS length
FROM eps
INNER JOIN hosts ON eps.hostid = hosts.hostid
INNER JOIN miniseries ON eps.series = miniseries.id
INNER JOIN assets ON eps.id = assets.episode_id
WHERE eps.date < UTC_DATE()
AND assets.extension = ?
ORDER BY eps.date DESC
')
%-->
<!--% feed_result = query_hpr_feed.execute(media_file_extension) %-->

@ -1,4 +1,4 @@
<!--% USE DBI(constants.driver, constants.user, constants.password) %--> <!--% USE DBI(constants.driver) %-->
<!--% query_hpr_feed = DBI.prepare(' <!--% query_hpr_feed = DBI.prepare('
SELECT SELECT
eps.id, eps.id,

@ -1,5 +1,5 @@
<!--% PROCESS 'shared-utils.tpl.html' %--> <!--% PROCESS 'shared-utils.tpl.html' %-->
<!--% PROCESS "queries-call_for_shows-${constants.database}.tpl.html" %--> <!--% PROCESS "queries-call_for_shows.tpl.html" %-->
<!--% MACRO display_call_for_shows BLOCK %--> <!--% MACRO display_call_for_shows BLOCK %-->
<!--% result_call_for_shows = DBI.prepare(query_call_for_shows) %--> <!--% result_call_for_shows = DBI.prepare(query_call_for_shows) %-->
<!--% results_call_for_shows = result_call_for_shows.execute().get_all() %--> <!--% results_call_for_shows = result_call_for_shows.execute().get_all() %-->