mirror of
https://github.com/ArchiveBox/ArchiveBox.git
synced 2025-05-13 06:34:25 -04:00
change ABIDModel.created to use AutoTimeField seeded on .save instead of auto_now_add so that ts_src for ABID is available on creation before DB row is created
This commit is contained in:
parent
7a734ce410
commit
1e73a06ba0
3 changed files with 48 additions and 5 deletions
|
@ -61,6 +61,11 @@ def get_or_create_system_user_pk(username='system'):
|
||||||
return user.pk
|
return user.pk
|
||||||
|
|
||||||
|
|
||||||
|
class AutoDateTimeField(models.DateTimeField):
|
||||||
|
def pre_save(self, model_instance, add):
|
||||||
|
return timezone.now()
|
||||||
|
|
||||||
|
|
||||||
class ABIDModel(models.Model):
|
class ABIDModel(models.Model):
|
||||||
"""
|
"""
|
||||||
Abstract Base Model for other models to depend on. Provides ArchiveBox ID (ABID) interface.
|
Abstract Base Model for other models to depend on. Provides ArchiveBox ID (ABID) interface.
|
||||||
|
@ -76,13 +81,16 @@ class ABIDModel(models.Model):
|
||||||
abid = ABIDField(prefix=abid_prefix)
|
abid = ABIDField(prefix=abid_prefix)
|
||||||
|
|
||||||
created_by = models.ForeignKey(settings.AUTH_USER_MODEL, on_delete=models.CASCADE, default=get_or_create_system_user_pk)
|
created_by = models.ForeignKey(settings.AUTH_USER_MODEL, on_delete=models.CASCADE, default=get_or_create_system_user_pk)
|
||||||
created = models.DateTimeField(auto_now_add=True)
|
created = AutoDateTimeField(default=timezone.now, db_index=True)
|
||||||
modified = models.DateTimeField(auto_now=True)
|
modified = models.DateTimeField(auto_now=True)
|
||||||
|
|
||||||
class Meta(TypedModelMeta):
|
class Meta(TypedModelMeta):
|
||||||
abstract = True
|
abstract = True
|
||||||
|
|
||||||
def save(self, *args: Any, **kwargs: Any) -> None:
|
def save(self, *args: Any, **kwargs: Any) -> None:
|
||||||
|
if self._state.adding or not self.created:
|
||||||
|
self.created = timezone.now()
|
||||||
|
|
||||||
# when first creating a row, self.ABID is the source of truth
|
# when first creating a row, self.ABID is the source of truth
|
||||||
# overwrite default prefilled self.id & self.abid with generated self.ABID value
|
# overwrite default prefilled self.id & self.abid with generated self.ABID value
|
||||||
if self._state.adding or not self.id:
|
if self._state.adding or not self.id:
|
||||||
|
|
|
@ -0,0 +1,35 @@
|
||||||
|
# Generated by Django 5.1 on 2024-08-28 09:40
|
||||||
|
|
||||||
|
import abid_utils.models
|
||||||
|
import django.utils.timezone
|
||||||
|
from django.db import migrations
|
||||||
|
|
||||||
|
|
||||||
|
class Migration(migrations.Migration):
|
||||||
|
|
||||||
|
dependencies = [
|
||||||
|
('core', '0068_alter_archiveresult_options'),
|
||||||
|
]
|
||||||
|
|
||||||
|
operations = [
|
||||||
|
migrations.AlterField(
|
||||||
|
model_name='archiveresult',
|
||||||
|
name='created',
|
||||||
|
field=abid_utils.models.AutoDateTimeField(db_index=True, default=django.utils.timezone.now),
|
||||||
|
),
|
||||||
|
migrations.AlterField(
|
||||||
|
model_name='snapshot',
|
||||||
|
name='added',
|
||||||
|
field=abid_utils.models.AutoDateTimeField(db_index=True, default=django.utils.timezone.now),
|
||||||
|
),
|
||||||
|
migrations.AlterField(
|
||||||
|
model_name='snapshot',
|
||||||
|
name='created',
|
||||||
|
field=abid_utils.models.AutoDateTimeField(db_index=True, default=django.utils.timezone.now),
|
||||||
|
),
|
||||||
|
migrations.AlterField(
|
||||||
|
model_name='tag',
|
||||||
|
name='created',
|
||||||
|
field=abid_utils.models.AutoDateTimeField(db_index=True, default=django.utils.timezone.now),
|
||||||
|
),
|
||||||
|
]
|
|
@ -12,6 +12,7 @@ from uuid import uuid4
|
||||||
from pathlib import Path
|
from pathlib import Path
|
||||||
|
|
||||||
from django.db import models
|
from django.db import models
|
||||||
|
from django.utils import timezone
|
||||||
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.core.cache import cache
|
||||||
|
@ -19,7 +20,7 @@ from django.urls import reverse, reverse_lazy
|
||||||
from django.db.models import Case, When, Value, IntegerField
|
from django.db.models import Case, When, Value, IntegerField
|
||||||
from django.conf import settings
|
from django.conf import settings
|
||||||
|
|
||||||
from abid_utils.models import ABIDModel, ABIDField
|
from abid_utils.models import ABIDModel, ABIDField, AutoDateTimeField
|
||||||
|
|
||||||
from ..system import get_dir_size
|
from ..system import get_dir_size
|
||||||
from ..util import parse_date, base_url
|
from ..util import parse_date, base_url
|
||||||
|
@ -50,7 +51,7 @@ class Tag(ABIDModel):
|
||||||
Based on django-taggit model + ABID base.
|
Based on django-taggit model + ABID base.
|
||||||
"""
|
"""
|
||||||
abid_prefix = 'tag_'
|
abid_prefix = 'tag_'
|
||||||
abid_ts_src = 'self.created' # TODO: add created/modified time
|
abid_ts_src = 'self.created'
|
||||||
abid_uri_src = 'self.slug'
|
abid_uri_src = 'self.slug'
|
||||||
abid_subtype_src = '"03"'
|
abid_subtype_src = '"03"'
|
||||||
abid_rand_src = 'self.old_id'
|
abid_rand_src = 'self.old_id'
|
||||||
|
@ -60,7 +61,6 @@ class Tag(ABIDModel):
|
||||||
id = models.UUIDField(primary_key=True, default=uuid.uuid4, editable=False, unique=True)
|
id = models.UUIDField(primary_key=True, default=uuid.uuid4, editable=False, unique=True)
|
||||||
abid = ABIDField(prefix=abid_prefix)
|
abid = ABIDField(prefix=abid_prefix)
|
||||||
|
|
||||||
|
|
||||||
name = models.CharField(unique=True, blank=False, max_length=100)
|
name = models.CharField(unique=True, blank=False, max_length=100)
|
||||||
slug = models.SlugField(unique=True, blank=False, max_length=100, editable=False)
|
slug = models.SlugField(unique=True, blank=False, max_length=100, editable=False)
|
||||||
# slug is autoset on save from name, never set it manually
|
# slug is autoset on save from name, never set it manually
|
||||||
|
@ -149,7 +149,7 @@ class Snapshot(ABIDModel):
|
||||||
|
|
||||||
tags = models.ManyToManyField(Tag, blank=True, through=SnapshotTag, related_name='snapshot_set', through_fields=('snapshot', 'tag'))
|
tags = models.ManyToManyField(Tag, blank=True, through=SnapshotTag, related_name='snapshot_set', through_fields=('snapshot', 'tag'))
|
||||||
|
|
||||||
added = models.DateTimeField(auto_now_add=True, db_index=True)
|
added = AutoDateTimeField(default=timezone.now, db_index=True)
|
||||||
updated = models.DateTimeField(auto_now=True, blank=True, null=True, db_index=True)
|
updated = models.DateTimeField(auto_now=True, blank=True, null=True, db_index=True)
|
||||||
|
|
||||||
keys = ('url', 'timestamp', 'title', 'tags', 'updated')
|
keys = ('url', 'timestamp', 'title', 'tags', 'updated')
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue