diff --git a/archivebox/api/v1_core.py b/archivebox/api/v1_core.py index fd944901..56e9d22a 100644 --- a/archivebox/api/v1_core.py +++ b/archivebox/api/v1_core.py @@ -21,9 +21,9 @@ router = Router(tags=['Core Models']) ### ArchiveResult ######################################################################### class ArchiveResultSchema(Schema): - abid: str id: UUID - # old_id: int + old_id: int + abid: str modified: datetime created: datetime @@ -105,7 +105,7 @@ def get_archiveresults(request, filters: ArchiveResultFilterSchema = Query(...)) @router.get("/archiveresult/{archiveresult_id}", response=ArchiveResultSchema, url_name="get_archiveresult") def get_archiveresult(request, archiveresult_id: str): """Get a specific ArchiveResult by pk, abid, or old_id.""" - return ArchiveResult.objects.get(Q(pk__icontains=archiveresult_id) | Q(abid__icontains=archiveresult_id) | Q(old_id__icontains=archiveresult_id)) + return ArchiveResult.objects.get(Q(id__icontains=archiveresult_id) | Q(abid__icontains=archiveresult_id) | Q(old_id__icontains=archiveresult_id)) # @router.post("/archiveresult", response=ArchiveResultSchema) @@ -137,9 +137,10 @@ def get_archiveresult(request, archiveresult_id: str): class SnapshotSchema(Schema): + id: UUID + old_id: UUID abid: str - uuid: UUID - pk: str + modified: datetime created: datetime created_by_id: str @@ -189,10 +190,12 @@ class SnapshotSchema(Schema): class SnapshotFilterSchema(FilterSchema): + id: Optional[str] = Field(None, q='id__icontains') + old_id: Optional[str] = Field(None, q='old_id__icontains') abid: Optional[str] = Field(None, q='abid__icontains') - uuid: Optional[str] = Field(None, q='uuid__icontains') - pk: Optional[str] = Field(None, q='pk__icontains') + created_by_id: str = Field(None, q='created_by_id__icontains') + created__gte: datetime = Field(None, q='created__gte') created__lt: datetime = Field(None, q='created__lt') created: datetime = Field(None, q='created') @@ -200,7 +203,7 @@ class SnapshotFilterSchema(FilterSchema): modified__gte: datetime = Field(None, q='modified__gte') modified__lt: datetime = Field(None, q='modified__lt') - search: Optional[str] = Field(None, q=['url__icontains', 'title__icontains', 'tags__name__icontains', 'abid__icontains', 'uuid__icontains']) + search: Optional[str] = Field(None, q=['url__icontains', 'title__icontains', 'tags__name__icontains', 'id__icontains', 'abid__icontains', 'old_id__icontains']) url: Optional[str] = Field(None, q='url') tag: Optional[str] = Field(None, q='tags__name') title: Optional[str] = Field(None, q='title__icontains') @@ -227,7 +230,7 @@ def get_snapshot(request, snapshot_id: str, with_archiveresults: bool=True): request.with_archiveresults = with_archiveresults snapshot = None try: - snapshot = Snapshot.objects.get(Q(abid__startswith=snapshot_id)| Q(pk__startswith=snapshot_id)) + snapshot = Snapshot.objects.get(Q(abid__startswith=snapshot_id) | Q(id__startswith=snapshot_id) | Q(old_id__startswith=snapshot_id)) except Snapshot.DoesNotExist: pass @@ -237,7 +240,7 @@ def get_snapshot(request, snapshot_id: str, with_archiveresults: bool=True): pass try: - snapshot = snapshot or Snapshot.objects.get(Q(pk__icontains=snapshot_id) | Q(abid__icontains=snapshot_id)) + snapshot = snapshot or Snapshot.objects.get(Q(abid__icontains=snapshot_id) | Q(id__icontains=snapshot_id) | Q(old_id__icontains=snapshot_id)) except Snapshot.DoesNotExist: pass diff --git a/archivebox/core/admin.py b/archivebox/core/admin.py index 8b9c126c..ad10ef18 100644 --- a/archivebox/core/admin.py +++ b/archivebox/core/admin.py @@ -178,11 +178,6 @@ def get_abid_info(self, obj): return format_html( # URL Hash: {}
''' -     DB PK:              {}
-        .old_id:            {}    
-        .id:                    {}    
-        .uuid:                {}    
-
    ABID:         {}_{}                            /api/v1 GET JSON     API DOCS
        TS:                  {}        ({})
@@ -191,22 +186,18 @@ def get_abid_info(self, obj):   RAND:   {} ({})       SALT:   {}

-         .ulid:                    {}
-         .uuid:                   {}

+         .uuid:                   {}
+         .old_id:                {}
''', - obj.pk, - getattr(obj, 'old_id', ''), - getattr(obj, 'id', ''), - getattr(obj, 'uuid', ''), - *obj.abid.split('_', 1), obj.api_url, obj.api_docs_url, + *str(obj.abid or obj.get_abid()).split('_', 1), obj.api_url, obj.api_docs_url, obj.ABID.ts, obj.abid_values['ts'].isoformat() if isinstance(obj.abid_values['ts'], datetime) else obj.abid_values['ts'], obj.ABID.uri, str(obj.abid_values['uri']), obj.ABID.subtype, str(obj.abid_values['subtype']), obj.ABID.rand, str(obj.abid_values['rand'])[-7:], obj.ABID.uri_salt, - obj.ABID.ulid, obj.ABID.uuid, + getattr(obj, 'old_id', ''), ) @@ -495,7 +486,10 @@ class TagAdmin(admin.ModelAdmin): ordering = ['-id'] def identifiers(self, obj): - return get_abid_info(self, obj) + try: + return get_abid_info(self, obj) + except Exception as e: + return str(e) def num_snapshots(self, tag): return format_html( diff --git a/archivebox/core/models.py b/archivebox/core/models.py index 61a62714..183697a2 100644 --- a/archivebox/core/models.py +++ b/archivebox/core/models.py @@ -163,6 +163,10 @@ class Snapshot(ABIDModel): title = self.title or '-' return f'[{self.timestamp}] {self.url[:64]} ({title[:64]})' + def save(self, *args, **kwargs): + super().save(*args, **kwargs) + assert str(self.id) == str(self.abid.uuid) == str(self.uuid) + @classmethod def from_json(cls, info: dict): info = {k: v for k, v in info.items() if k in cls.keys} @@ -391,7 +395,7 @@ class ArchiveResult(ABIDModel): def save(self, *args, **kwargs): super().save(*args, **kwargs) - assert str(self.id) == str(self.abid.uuid) + assert str(self.id) == str(self.abid.uuid) == str(self.uuid) @property def uuid(self):