Use cachalot to invalidate caches

This commit is contained in:
Mark Veidemanis 2023-02-11 17:22:25 +00:00
parent dea1cfe889
commit 33d8e26c9b
Signed by: m
GPG Key ID: 5ACFCEED46C0904F
19 changed files with 51 additions and 35 deletions

View File

@ -53,6 +53,7 @@ INSTALLED_APPS = [
# "two_factor.plugins.yubikey",
# "otp_yubikey",
"mixins",
"cachalot",
]
@ -202,6 +203,7 @@ DEBUG_TOOLBAR_PANELS = [
"debug_toolbar.panels.logging.LoggingPanel",
"debug_toolbar.panels.redirects.RedirectsPanel",
"debug_toolbar.panels.profiling.ProfilingPanel",
"cachalot.panels.CachalotPanel",
]
from app.local_settings import * # noqa

View File

@ -418,23 +418,7 @@ class AssetGroup(models.Model):
allowed = models.JSONField(null=True, blank=True, default=dict)
def __str__(self):
return f"{self.name} ({self.restrictions})"
@property
def matches(self):
"""
Get the total number of matches for this group.
"""
if isinstance(self.allowed, dict):
truthy_values = [x for x in self.allowed.values() if x is True]
return f"{len(truthy_values)}/{len(self.allowed)}"
@property
def restrictions(self):
"""
Get the total number of restrictions for this group.
"""
return self.assetrestriction_set.count()
return f"{self.name}"
class AssetRestriction(models.Model):

View File

@ -1,6 +1,8 @@
{% load cache %}
{% load cachalot cache %}
{% get_last_invalidation 'core.Account' as last %}
{% include 'mixins/partials/notify.html' %}
{% cache 600 objects_accounts request.user.id object_list %}
{% cache 600 objects_accounts request.user.id object_list last %}
<table
class="table is-fullwidth is-hoverable"
hx-target="#{{ context_object_name }}-table"

View File

@ -1,6 +1,8 @@
{% load cache %}
{% load cachalot cache %}
{% get_last_invalidation 'core.AssetGroup' as last %}
{% include 'mixins/partials/notify.html' %}
{% cache 600 objects_assetgroups request.user.id object_list %}
{% cache 600 objects_assetgroups request.user.id object_list last %}
<table
class="table is-fullwidth is-hoverable"
hx-target="#{{ context_object_name }}-table"
@ -14,8 +16,6 @@
<th>name</th>
<th>description</th>
<th>account</th>
<th>status</th>
<th>restrictions</th>
<th>actions</th>
</thead>
{% for item in object_list %}
@ -25,8 +25,6 @@
<td>{{ item.name }}</td>
<td>{{ item.description }}</td>
<td>{{ item.account }}</td>
<td>{{ item.matches }}</td>
<td>{{ item.restrictions }}</td>
<td>
<div class="buttons">
<button

View File

@ -1,6 +1,8 @@
{% load cache %}
{% load cachalot cache %}
{% get_last_invalidation 'core.AssetRestriction' as last %}
{% include 'mixins/partials/notify.html' %}
{% cache 600 objects_assetrestrictions request.user.id object_list %}
{% cache 600 objects_assetrestrictions request.user.id object_list last %}
<table
class="table is-fullwidth is-hoverable"
hx-target="#{{ context_object_name }}-table"

View File

@ -1,6 +1,8 @@
{% load cache %}
{% load cachalot cache %}
{% get_last_invalidation 'core.Callback' as last %}
{% include 'mixins/partials/notify.html' %}
{% cache 600 objects_callbacks request.user.id object_list %}
{% cache 600 objects_callbacks request.user.id object_list last %}
<table class="table is-fullwidth is-hoverable" id="callbacks-table">
<thead>
<th>id</th>

View File

@ -1,6 +1,8 @@
{% load cache %}
{% load cachalot cache %}
{% get_last_invalidation 'core.Hook' as last %}
{% include 'mixins/partials/notify.html' %}
{% cache 600 objects_hooks request.user.id object_list %}
{% cache 600 objects_hooks request.user.id object_list last %}
<table
class="table is-fullwidth is-hoverable"
hx-target="#{{ context_object_name }}-table"

View File

@ -1,7 +1,8 @@
{% load static %}
{% load cache %}
{% cache 600 objects_plans request.user.id plans %}
{% load cachalot cache %}
{% get_last_invalidation 'core.Plan' as last %}
{% cache 600 objects_plans request.user.id plans last %}
{% for plan in plans %}
<div class="box">

View File

@ -1,6 +1,8 @@
{% load cache %}
{% load cachalot cache %}
{% get_last_invalidation 'core.RiskModel' as last %}
{% include 'mixins/partials/notify.html' %}
{% cache 600 objects_risk request.user.id object_list %}
{% cache 600 objects_risk request.user.id object_list last %}
<table
class="table is-fullwidth is-hoverable"
hx-target="#{{ context_object_name }}-table"

View File

@ -1,6 +1,8 @@
{% load cache %}
{% load cachalot cache %}
{% get_last_invalidation 'core.Signal' as last %}
{% include 'mixins/partials/notify.html' %}
{% cache 600 objects_signals request.user.id object_list %}
{% cache 600 objects_signals request.user.id object_list last %}
<table
class="table is-fullwidth is-hoverable"
hx-target="#{{ context_object_name }}-table"

View File

@ -1,6 +1,8 @@
{% load cache %}
{% load cachalot cache %}
{% get_last_invalidation 'core.Strategy' as last %}
{% include 'mixins/partials/notify.html' %}
{% cache 600 objects_strategies request.user.id object_list %}
{% cache 600 objects_strategies request.user.id object_list last %}
<table
class="table is-fullwidth is-hoverable"
hx-target="#{{ context_object_name }}-table"

View File

@ -1,6 +1,8 @@
{% load cache %}
{% load cachalot cache %}
{% get_last_invalidation 'core.Trade' as last %}
{% include 'mixins/partials/notify.html' %}
{% cache 600 objects_trades request.user.id object_list %}
{% cache 600 objects_trades request.user.id object_list last %}
<table
class="table is-fullwidth is-hoverable"
hx-target="#{{ context_object_name }}-table"

View File

@ -1,6 +1,8 @@
{% load cache %}
{% load cachalot cache %}
{% get_last_invalidation 'core.TradingTime' as last %}
{% include 'mixins/partials/notify.html' %}
{% cache 600 objects_tradingtimes request.user.id object_list %}
{% cache 600 objects_tradingtimes request.user.id object_list last %}
<table
class="table is-fullwidth is-hoverable"
hx-target="#{{ context_object_name }}-table"

View File

@ -1,6 +1,8 @@
{% load cache %}
{% load cachalot cache %}
{% get_last_invalidation 'core.Strategy' as last %}
{% include 'mixins/partials/notify.html' %}
{% cache 600 objects_trenddirections request.user.id object_list %}
{% cache 600 objects_trenddirections request.user.id object_list last %}
<table
class="table is-fullwidth is-hoverable"
hx-target="#{{ context_object_name }}-table"

View File

@ -3,7 +3,7 @@ from django.test import TestCase
from core.trading.crossfilter import check_conflicting_position, check_existing_position
class MarketTestCase(TestCase):
class CrossfilterTestCase(TestCase):
def test_conflict_position(self):
position = {
"symbol": "EUR_USD",

View File

@ -0,0 +1,7 @@
def get_allowed(strategy, symbol, direction):
"""
Determine whether the trade is allowed according to the Asset Groups
linked to the strategy.
"""
#asset_group = strategy.

View File

@ -5,6 +5,7 @@ from core.exchanges import common
from core.exchanges.convert import get_price, side_to_direction
from core.lib.notify import sendmsg
from core.models import Account, Strategy, Trade
from core.trading import assetfilter
from core.trading.crossfilter import crossfilter
from core.trading.risk import check_risk
from core.util import logs
@ -325,6 +326,8 @@ def execute_strategy(callback, strategy, func):
price_bound = round(price_bound, display_precision)
# Callback now verified
if func == "entry":
allowed = assetfilter.get_allowed(strategy, symbol, direction)
if func == "exit":
check_exit = crossfilter(account, symbol, direction, func)
if check_exit is None:

View File

@ -26,3 +26,4 @@ git+https://git.zm.is/XF/django-crud-mixins
# For caching
redis
hiredis
django-cachalot