Не люблю Mako именно за это. Слишком много свободы в шаблонах, этим часто злоупотребляют. Вплоть до того, что пихают туда половину бизнес-логики, а то и всю. Логика представления должна оставаться таковой.
{% sql 'get_countries_by_conds', note='get countries by date conditions or ids' %}
SELECT *
FROM countries
{% if ids %}
WHERE id IN ({{ ids|join(', ') }})
{% endif %}
{% if date_from %}
{% if ids %} AND {% endif %} WHERE creation_date >= {{ date_from }}
{% endif %}
{% if date_to %}
{% if ids or date_from %} AND {% endif %} WHERE creation_date <= {{ date_to }}
{% endif %}
ORDER BY creation_date ASC
{% endsql %}
Я бы разнёс conditions по своим блокам.
{% sql 'get_countries', note='get countries' %}
SELECT *
FROM countries
{% if conditions %}
{{ conditions|join(' AND ') }}
{% endif %}
ORDER BY creation_date ASC
{% endsql %}
{% sql 'cond_ids_in_countries' %}
WHERE id IN ({{ ids|join(', ') }})
{% endsql %}
{% sql 'get_countries_by_conds', note='get countries by date conditions or ids' %}
SELECT *
FROM countries
{% if ids %}
WHERE id IN ({{ ids|join(', ') }})
{% endif %}
{% if date_from %}
AND WHERE creation_date >= {{ date_from }}
{% endif %}
{% if date_to %}
AND WHERE creation_date <= {{ date_to }}
{% endif %}
ORDER BY creation_date ASC
{% endsql %}
def get_countries(ids=None, date_from=None, date_to=None):
sql_context = {}
if ids:
sql_context['ids'] = ids
if date_from:
sql_context['date_from'] = date_from # + date format 'YYYY-MM-DD'
if date_to:
sql_context['date_to'] = date_to # + date format 'YYYY-MM-DD'
return country_queries.get_countries_by_conds(**sql_context)
Спасибо за интересный цикл, надеюсь на продолжение.
Что вы думаете о Luminus? (http://www.luminusweb.net/docs) По факту это просто рекомендованный набор библиотек и это упрощает поиски для людей, которые плохо знакомы с экосистемой Clojure (как я). С другой стороны, когда делаешь свои первые робкие шаги, на тебя наваливается куча всего нового и в этом случае, может, имеет смысл начать прям с нуля? То есть Ring, Compojure, Buddy по отдельности, Что посоветуете?
Как-то очень сложно. Что реально хочется видеть в питоне, так это простые инструменты вроде github.com/yogthos/migratus для миграций. А получается какой-то трешак, лишь бы к SQL не прикасаться.
Делал сложные фильтры на много тысяч товаров с помощью Elasticsearch, заодно получил возможность полнотекстового поиска по названию, описанию и составу, учитывая опечатки.
Вы очень вовремя, спасибо за библиотеку. Прям сейчас ковыряю и со старта возникло несколько вопросов:
1. Чтоб завести в require.js пришлось немного похачить wsrpc.js (не видел Q и работал в глобальной области видимости)
2. С запросами к серверу всё понятно, а вот наоборот — не очень. В документации примера не нашёл, поэтому на данный момент всё, что я придумал — это делать запрос к серверу, который инициализирует PeriodicCallback, а на клиенте уже слушать ответы через addRoute. Можно как-то более изящно решить этот вопрос?
Реализую свой stock board — ждите pull-реквестов :)
Я бы разнёс conditions по своим блокам.
Ну как-то так. Мысль, думаю, уловили.
Что вы думаете о Luminus? (http://www.luminusweb.net/docs) По факту это просто рекомендованный набор библиотек и это упрощает поиски для людей, которые плохо знакомы с экосистемой Clojure (как я). С другой стороны, когда делаешь свои первые робкие шаги, на тебя наваливается куча всего нового и в этом случае, может, имеет смысл начать прям с нуля? То есть Ring, Compojure, Buddy по отдельности, Что посоветуете?
Ну а Postgres — это стандарт, зря вы так.
1. Чтоб завести в require.js пришлось немного похачить wsrpc.js (не видел Q и работал в глобальной области видимости)
2. С запросами к серверу всё понятно, а вот наоборот — не очень. В документации примера не нашёл, поэтому на данный момент всё, что я придумал — это делать запрос к серверу, который инициализирует PeriodicCallback, а на клиенте уже слушать ответы через addRoute. Можно как-то более изящно решить этот вопрос?
Реализую свой stock board — ждите pull-реквестов :)