When do visibility of artifacts and collections change?

Files and collections in LaminDB have the following 3 levels if visibility:

  • 1: “default”, visible in the UI by default, returned from the query results

  • 0: “hidden”, excluded from the query results, notebook artifacts (generated by lamin save) are default to be hidden

  • -1: “trash”, excluded from the query results, set with .delete()

Setup

!lamin init --storage test-visibility
💡 connected lamindb: testuser1/test-visibility
import lamindb as ln
import pandas as pd
💡 connected lamindb: testuser1/test-visibility
artifact = ln.Artifact.from_df(pd.DataFrame({"a": [1, 2], "b": [3, 4]}), description="mydf")
artifact.save()
❗ no run & transform get linked, consider calling ln.track()
Artifact(uid='CpzF8aSun9EgvhnhaT1l', description='mydf', suffix='.parquet', type='dataset', accessor='DataFrame', size=2240, hash='pCh1QueKcIO78R19tjOUag', hash_type='md5', visibility=1, key_is_virtual=True, created_by_id=1, storage_id=1, updated_at='2024-06-19 23:05:57 UTC')

New artifact has default visibility 1:

assert artifact.visibility == 1

When you delete an artifact, its visibility is set to -1 (“trash”):

artifact.delete()
❗ moved artifact to trash (visibility = -1)
assert artifact.visibility == -1

Files in trash won’t be returned from default queries:

ln.Artifact.filter(description="mydf").all()
<QuerySet []>

Unless you specify visibility=None to see all hidden and trashed artifacts:

ln.Artifact.filter(description="mydf", visibility=None).all()
<QuerySet [Artifact(uid='CpzF8aSun9EgvhnhaT1l', description='mydf', suffix='.parquet', type='dataset', accessor='DataFrame', size=2240, hash='pCh1QueKcIO78R19tjOUag', hash_type='md5', visibility=-1, key_is_virtual=True, created_by_id=1, storage_id=1, updated_at='2024-06-19 23:05:57 UTC')]>

You can restore an artifact from trash:

artifact.restore()
assert artifact.visibility == 1
ln.Artifact.filter(description="mydf").all()
<QuerySet [Artifact(uid='CpzF8aSun9EgvhnhaT1l', description='mydf', suffix='.parquet', type='dataset', accessor='DataFrame', size=2240, hash='pCh1QueKcIO78R19tjOUag', hash_type='md5', visibility=1, key_is_virtual=True, created_by_id=1, storage_id=1, updated_at='2024-06-19 23:05:57 UTC')]>

Delete test artifact and instance:

artifact.delete(permanent=True)
!lamin delete --force test-visibility
💡 deleting instance testuser1/test-visibility