1
0
Fork 0
mirror of synced 2024-09-27 23:01:22 +12:00

cache dir size, snapshot icons, tags str, and title in django cache

This commit is contained in:
Nick Sweeting 2021-02-16 15:49:29 -05:00
parent 51440ede3a
commit 8b236b9367
3 changed files with 83 additions and 69 deletions

View file

@ -5,9 +5,11 @@ import uuid
from django.db import models, transaction from django.db import models, transaction
from django.utils.functional import cached_property from django.utils.functional import cached_property
from django.utils.text import slugify from django.utils.text import slugify
from django.core.cache import cache
from django.db.models import Case, When, Value, IntegerField from django.db.models import Case, When, Value, IntegerField
from ..config import ARCHIVE_DIR from ..config import ARCHIVE_DIR, ARCHIVE_DIR_NAME
from ..system import get_dir_size
from ..util import parse_date, base_url, hashurl from ..util import parse_date, base_url, hashurl
from ..index.schema import Link from ..index.schema import Link
from ..extractors import get_default_archive_methods, ARCHIVE_METHODS_INDEXING_PRECEDENCE from ..extractors import get_default_archive_methods, ARCHIVE_METHODS_INDEXING_PRECEDENCE
@ -111,7 +113,9 @@ class Snapshot(models.Model):
return load_link_details(self.as_link()) return load_link_details(self.as_link())
def tags_str(self) -> str: def tags_str(self) -> str:
return ','.join(self.tags.order_by('name').values_list('name', flat=True)) cache_key = f'{self.id}-{(self.updated or self.added).timestamp()}-tags'
calc_tags_str = lambda: ','.join(self.tags.order_by('name').values_list('name', flat=True))
return cache.get_or_set(cache_key, calc_tags_str)
@cached_property @cached_property
def bookmarked(self): def bookmarked(self):
@ -148,11 +152,16 @@ class Snapshot(models.Model):
@cached_property @cached_property
def archive_size(self): def archive_size(self):
cache_key = f'{str(self.id)[:12]}-{(self.updated or self.added).timestamp()}-size'
def calc_dir_size():
try: try:
return get_dir_size(self.link_dir)[0] return get_dir_size(self.link_dir)[0]
except Exception: except Exception:
return 0 return 0
return cache.get_or_set(cache_key, calc_dir_size)
@cached_property @cached_property
def history(self): def history(self):
# TODO: use ArchiveResult for this instead of json # TODO: use ArchiveResult for this instead of json

View file

@ -6,6 +6,7 @@ from collections import defaultdict
from typing import List, Optional, Iterator, Mapping from typing import List, Optional, Iterator, Mapping
from django.utils.html import format_html, mark_safe from django.utils.html import format_html, mark_safe
from django.core.cache import cache
from .schema import Link from .schema import Link
from ..system import atomic_write from ..system import atomic_write
@ -115,6 +116,9 @@ def render_django_template(template: str, context: Mapping[str, str]) -> str:
def snapshot_icons(snapshot) -> str: def snapshot_icons(snapshot) -> str:
cache_key = f'{str(snapshot.id)[:12]}-{(snapshot.updated or snapshot.added).timestamp()}-snapshot-icons'
def calc_snapshot_icons():
from core.models import EXTRACTORS from core.models import EXTRACTORS
# start = datetime.now() # start = datetime.now()
@ -183,6 +187,7 @@ def snapshot_icons(snapshot) -> str:
# print(((end - start).total_seconds()*1000) // 1, 'ms') # print(((end - start).total_seconds()*1000) // 1, 'ms')
return result return result
# return cache.get_or_set(cache_key, calc_snapshot_icons) return cache.get_or_set(cache_key, calc_snapshot_icons)
# return calc_snapshot_icons()

View file

@ -16,6 +16,7 @@ from typing import List, Dict, Any, Optional, Union
from dataclasses import dataclass, asdict, field, fields from dataclasses import dataclass, asdict, field, fields
from django.utils.functional import cached_property
from ..system import get_dir_size from ..system import get_dir_size
@ -133,7 +134,6 @@ class Link:
updated: Optional[datetime] = None updated: Optional[datetime] = None
schema: str = 'Link' schema: str = 'Link'
def __str__(self) -> str: def __str__(self) -> str:
return f'[{self.timestamp}] {self.url} "{self.title}"' return f'[{self.timestamp}] {self.url} "{self.title}"'