lamindb 1.11.3__py3-none-any.whl → 1.12.1__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (54) hide show
  1. lamindb/__init__.py +8 -14
  2. lamindb/_tracked.py +2 -0
  3. lamindb/base/types.py +1 -3
  4. lamindb/core/_context.py +16 -31
  5. lamindb/core/_mapped_collection.py +2 -2
  6. lamindb/core/storage/paths.py +5 -3
  7. lamindb/curators/core.py +15 -4
  8. lamindb/examples/__init__.py +3 -1
  9. lamindb/examples/croissant/__init__.py +3 -1
  10. lamindb/examples/mlflow/__init__.py +38 -0
  11. lamindb/examples/wandb/__init__.py +40 -0
  12. lamindb/integrations/__init__.py +26 -0
  13. lamindb/integrations/_lightning.py +87 -0
  14. lamindb/migrations/0120_add_record_fk_constraint.py +1 -1
  15. lamindb/migrations/0122_remove_personproject_person_and_more.py +219 -0
  16. lamindb/migrations/0123_alter_artifact_description_alter_branch_description_and_more.py +82 -0
  17. lamindb/migrations/0124_page_artifact_page_collection_page_feature_page_and_more.py +15 -0
  18. lamindb/migrations/0125_artifact_is_locked_collection_is_locked_and_more.py +79 -0
  19. lamindb/migrations/0126_alter_artifact_is_locked_alter_collection_is_locked_and_more.py +105 -0
  20. lamindb/migrations/0127_alter_run_status_code_feature_dtype.py +31 -0
  21. lamindb/migrations/0128_artifact__real_key.py +21 -0
  22. lamindb/migrations/0129_remove_feature_page_remove_project_page_and_more.py +779 -0
  23. lamindb/migrations/0130_branch_space_alter_artifactblock_artifact_and_more.py +170 -0
  24. lamindb/migrations/0131_record_unique_name_type_space.py +18 -0
  25. lamindb/migrations/0132_record_parents_record_reference_and_more.py +61 -0
  26. lamindb/migrations/0133_artifactuser_artifact_users.py +108 -0
  27. lamindb/migrations/{0119_squashed.py → 0133_squashed.py} +1211 -322
  28. lamindb/models/__init__.py +14 -4
  29. lamindb/models/_django.py +1 -2
  30. lamindb/models/_feature_manager.py +1 -0
  31. lamindb/models/_is_versioned.py +14 -16
  32. lamindb/models/_relations.py +7 -0
  33. lamindb/models/artifact.py +99 -56
  34. lamindb/models/artifact_set.py +20 -3
  35. lamindb/models/block.py +174 -0
  36. lamindb/models/can_curate.py +7 -9
  37. lamindb/models/collection.py +9 -9
  38. lamindb/models/feature.py +38 -38
  39. lamindb/models/has_parents.py +15 -6
  40. lamindb/models/project.py +44 -99
  41. lamindb/models/query_manager.py +1 -1
  42. lamindb/models/query_set.py +36 -8
  43. lamindb/models/record.py +169 -46
  44. lamindb/models/run.py +44 -10
  45. lamindb/models/save.py +7 -7
  46. lamindb/models/schema.py +9 -2
  47. lamindb/models/sqlrecord.py +87 -35
  48. lamindb/models/storage.py +13 -3
  49. lamindb/models/transform.py +7 -2
  50. lamindb/models/ulabel.py +6 -23
  51. {lamindb-1.11.3.dist-info → lamindb-1.12.1.dist-info}/METADATA +18 -21
  52. {lamindb-1.11.3.dist-info → lamindb-1.12.1.dist-info}/RECORD +54 -38
  53. {lamindb-1.11.3.dist-info → lamindb-1.12.1.dist-info}/LICENSE +0 -0
  54. {lamindb-1.11.3.dist-info → lamindb-1.12.1.dist-info}/WHEEL +0 -0
@@ -0,0 +1,219 @@
1
+ # Generated by Django 5.1.12 on 2025-09-28 20:30
2
+
3
+
4
+ import django.db.models.deletion
5
+ import django.db.models.functions.datetime
6
+ from django.db import migrations, models
7
+
8
+ import lamindb.base.fields
9
+ import lamindb.base.users
10
+ import lamindb.models.run
11
+ import lamindb.models.sqlrecord
12
+
13
+
14
+ def migrate_person_to_record(apps, schema_editor):
15
+ """Migrate Person to Record."""
16
+ Person = apps.get_model("lamindb", "Person")
17
+ if not Person.objects.exists():
18
+ return # No Person records to migrate
19
+
20
+ with schema_editor.connection.cursor() as cursor:
21
+ cursor.execute("""
22
+ INSERT INTO lamindb_record (
23
+ uid, name, created_at, updated_at, created_by_id, run_id, is_type
24
+ )
25
+ SELECT
26
+ CONCAT(uid, uid) as uid,
27
+ name,
28
+ created_at,
29
+ updated_at,
30
+ created_by_id,
31
+ run_id,
32
+ False
33
+ FROM lamindb_person
34
+ """)
35
+
36
+ migrated_count = cursor.rowcount
37
+ print(f"\nMigrated {migrated_count} Person records to Record table")
38
+
39
+ with schema_editor.connection.cursor() as cursor:
40
+ cursor.execute("""
41
+ INSERT INTO lamindb_referencerecord (
42
+ created_at, created_by_id, feature_id, record_id, reference_id, run_id
43
+ )
44
+ SELECT
45
+ NOW() as created_at,
46
+ r.created_by_id,
47
+ NULL as feature_id,
48
+ rec.id as record_id,
49
+ ra.reference_id,
50
+ rec.run_id
51
+ FROM lamindb_reference_authors ra
52
+ JOIN lamindb_reference r ON ra.reference_id = r.id
53
+ JOIN lamindb_person p ON ra.person_id = p.id
54
+ JOIN lamindb_record rec ON rec.name = p.name
55
+ """)
56
+
57
+ created_count = cursor.rowcount
58
+ print(f"\nCreated {created_count} ReferenceRecord links for migrated authors")
59
+
60
+
61
+ class Migration(migrations.Migration):
62
+ dependencies = [
63
+ ("lamindb", "0121_recorduser"),
64
+ ]
65
+
66
+ operations = [
67
+ migrations.CreateModel(
68
+ name="ReferenceRecord",
69
+ fields=[
70
+ (
71
+ "created_at",
72
+ lamindb.base.fields.DateTimeField(
73
+ blank=True,
74
+ db_default=django.db.models.functions.datetime.Now(),
75
+ db_index=True,
76
+ editable=False,
77
+ ),
78
+ ),
79
+ ("id", models.BigAutoField(primary_key=True, serialize=False)),
80
+ (
81
+ "created_by",
82
+ lamindb.base.fields.ForeignKey(
83
+ blank=True,
84
+ default=lamindb.base.users.current_user_id,
85
+ editable=False,
86
+ on_delete=django.db.models.deletion.PROTECT,
87
+ related_name="+",
88
+ to="lamindb.user",
89
+ ),
90
+ ),
91
+ (
92
+ "feature",
93
+ lamindb.base.fields.ForeignKey(
94
+ blank=True,
95
+ default=None,
96
+ null=True,
97
+ on_delete=django.db.models.deletion.PROTECT,
98
+ related_name="links_referencerecord",
99
+ to="lamindb.feature",
100
+ ),
101
+ ),
102
+ (
103
+ "record",
104
+ lamindb.base.fields.ForeignKey(
105
+ blank=True,
106
+ on_delete=django.db.models.deletion.CASCADE,
107
+ related_name="links_reference",
108
+ to="lamindb.record",
109
+ ),
110
+ ),
111
+ (
112
+ "reference",
113
+ lamindb.base.fields.ForeignKey(
114
+ blank=True,
115
+ on_delete=django.db.models.deletion.PROTECT,
116
+ related_name="links_record",
117
+ to="lamindb.reference",
118
+ ),
119
+ ),
120
+ (
121
+ "run",
122
+ lamindb.base.fields.ForeignKey(
123
+ blank=True,
124
+ default=lamindb.models.run.current_run,
125
+ null=True,
126
+ on_delete=django.db.models.deletion.PROTECT,
127
+ related_name="+",
128
+ to="lamindb.run",
129
+ ),
130
+ ),
131
+ ],
132
+ options={
133
+ "unique_together": {("reference", "feature", "record")},
134
+ },
135
+ bases=(lamindb.models.sqlrecord.IsLink, models.Model),
136
+ ),
137
+ migrations.AddField(
138
+ model_name="reference",
139
+ name="records",
140
+ field=models.ManyToManyField(
141
+ related_name="references",
142
+ through="lamindb.ReferenceRecord",
143
+ to="lamindb.record",
144
+ ),
145
+ ),
146
+ migrations.RunPython(migrate_person_to_record),
147
+ migrations.RemoveField(
148
+ model_name="project",
149
+ name="people",
150
+ ),
151
+ migrations.RemoveField(
152
+ model_name="reference",
153
+ name="authors",
154
+ ),
155
+ migrations.AlterUniqueTogether(
156
+ name="personproject",
157
+ unique_together=None,
158
+ ),
159
+ migrations.AlterUniqueTogether(
160
+ name="recordperson",
161
+ unique_together=None,
162
+ ),
163
+ migrations.RenameField(
164
+ model_name="reference",
165
+ old_name="records",
166
+ new_name="linked_in_records",
167
+ ),
168
+ migrations.AddField(
169
+ model_name="project",
170
+ name="description",
171
+ field=lamindb.base.fields.TextField(blank=True, default=None, null=True),
172
+ ),
173
+ migrations.AlterField(
174
+ model_name="reference",
175
+ name="description",
176
+ field=lamindb.base.fields.TextField(blank=True, default=None, null=True),
177
+ ),
178
+ migrations.DeleteModel(
179
+ name="Person",
180
+ ),
181
+ migrations.DeleteModel(
182
+ name="PersonProject",
183
+ ),
184
+ migrations.DeleteModel(
185
+ name="RecordPerson",
186
+ ),
187
+ migrations.AlterField(
188
+ model_name="recordreference",
189
+ name="value",
190
+ field=lamindb.base.fields.ForeignKey(
191
+ blank=True,
192
+ on_delete=django.db.models.deletion.PROTECT,
193
+ related_name="links_in_record",
194
+ to="lamindb.reference",
195
+ ),
196
+ ),
197
+ migrations.AlterUniqueTogether(
198
+ name="projectrecord",
199
+ unique_together={("project", "feature", "record")},
200
+ ),
201
+ migrations.AddField(
202
+ model_name="reference",
203
+ name="records",
204
+ field=models.ManyToManyField(
205
+ related_name="references",
206
+ through="lamindb.ReferenceRecord",
207
+ to="lamindb.record",
208
+ ),
209
+ ),
210
+ migrations.AlterField(
211
+ model_name="reference",
212
+ name="linked_in_records",
213
+ field=models.ManyToManyField(
214
+ related_name="linked_references",
215
+ through="lamindb.RecordReference",
216
+ to="lamindb.record",
217
+ ),
218
+ ),
219
+ ]
@@ -0,0 +1,82 @@
1
+ # Generated by Django 5.1.12 on 2025-09-28 21:39
2
+
3
+ from django.db import migrations
4
+
5
+ import lamindb.base.fields
6
+
7
+
8
+ class Migration(migrations.Migration):
9
+ dependencies = [
10
+ ("lamindb", "0122_remove_personproject_person_and_more"),
11
+ ]
12
+
13
+ operations = [
14
+ migrations.AlterField(
15
+ model_name="artifact",
16
+ name="description",
17
+ field=lamindb.base.fields.TextField(
18
+ blank=True, db_index=True, default=None, null=True
19
+ ),
20
+ ),
21
+ migrations.AlterField(
22
+ model_name="branch",
23
+ name="description",
24
+ field=lamindb.base.fields.TextField(blank=True, default=None, null=True),
25
+ ),
26
+ migrations.AlterField(
27
+ model_name="collection",
28
+ name="description",
29
+ field=lamindb.base.fields.TextField(blank=True, default=None, null=True),
30
+ ),
31
+ migrations.AlterField(
32
+ model_name="feature",
33
+ name="description",
34
+ field=lamindb.base.fields.TextField(blank=True, default=None, null=True),
35
+ ),
36
+ migrations.AlterField(
37
+ model_name="record",
38
+ name="description",
39
+ field=lamindb.base.fields.TextField(blank=True, default=None, null=True),
40
+ ),
41
+ migrations.AlterField(
42
+ model_name="schema",
43
+ name="description",
44
+ field=lamindb.base.fields.TextField(blank=True, default=None, null=True),
45
+ ),
46
+ migrations.AlterField(
47
+ model_name="space",
48
+ name="description",
49
+ field=lamindb.base.fields.TextField(blank=True, default=None, null=True),
50
+ ),
51
+ migrations.AlterField(
52
+ model_name="storage",
53
+ name="description",
54
+ field=lamindb.base.fields.TextField(blank=True, default=None, null=True),
55
+ ),
56
+ migrations.AlterField(
57
+ model_name="transform",
58
+ name="description",
59
+ field=lamindb.base.fields.TextField(
60
+ blank=True, db_index=True, default=None, null=True
61
+ ),
62
+ ),
63
+ migrations.AlterField(
64
+ model_name="ulabel",
65
+ name="description",
66
+ field=lamindb.base.fields.TextField(blank=True, default=None, null=True),
67
+ ),
68
+ migrations.AlterField(
69
+ model_name="artifact",
70
+ name="key",
71
+ field=lamindb.base.fields.CharField(
72
+ blank=True, db_index=True, default=None, max_length=1024, null=True
73
+ ),
74
+ ),
75
+ migrations.AlterField(
76
+ model_name="transform",
77
+ name="key",
78
+ field=lamindb.base.fields.CharField(
79
+ blank=True, db_index=True, default=None, max_length=1024, null=True
80
+ ),
81
+ ),
82
+ ]
@@ -0,0 +1,15 @@
1
+ # Generated by Django 5.1.12 on 2025-09-28 23:37
2
+
3
+ from django.db import migrations
4
+
5
+
6
+ class Migration(migrations.Migration):
7
+ dependencies = [
8
+ (
9
+ "lamindb",
10
+ "0123_alter_artifact_description_alter_branch_description_and_more",
11
+ ),
12
+ ]
13
+
14
+ # this migration was later reverted, so we do not need to run it
15
+ operations = [] # type: ignore
@@ -0,0 +1,79 @@
1
+ # Generated by Django 5.1.12 on 2025-09-29 00:46
2
+
3
+ from django.db import migrations
4
+
5
+ import lamindb.base.fields
6
+
7
+
8
+ class Migration(migrations.Migration):
9
+ dependencies = [
10
+ ("lamindb", "0124_page_artifact_page_collection_page_feature_page_and_more"),
11
+ ]
12
+
13
+ operations = [
14
+ migrations.AddField(
15
+ model_name="artifact",
16
+ name="is_locked",
17
+ field=lamindb.base.fields.BooleanField(blank=True, default=False),
18
+ ),
19
+ migrations.AddField(
20
+ model_name="collection",
21
+ name="is_locked",
22
+ field=lamindb.base.fields.BooleanField(blank=True, default=False),
23
+ ),
24
+ migrations.AddField(
25
+ model_name="feature",
26
+ name="is_locked",
27
+ field=lamindb.base.fields.BooleanField(blank=True, default=False),
28
+ ),
29
+ migrations.AddField(
30
+ model_name="featurevalue",
31
+ name="is_locked",
32
+ field=lamindb.base.fields.BooleanField(blank=True, default=False),
33
+ ),
34
+ migrations.AddField(
35
+ model_name="project",
36
+ name="is_locked",
37
+ field=lamindb.base.fields.BooleanField(blank=True, default=False),
38
+ ),
39
+ migrations.AddField(
40
+ model_name="record",
41
+ name="is_locked",
42
+ field=lamindb.base.fields.BooleanField(blank=True, default=False),
43
+ ),
44
+ migrations.AddField(
45
+ model_name="recordrecord",
46
+ name="is_locked",
47
+ field=lamindb.base.fields.BooleanField(blank=True, default=False),
48
+ ),
49
+ migrations.AddField(
50
+ model_name="reference",
51
+ name="is_locked",
52
+ field=lamindb.base.fields.BooleanField(blank=True, default=False),
53
+ ),
54
+ migrations.AddField(
55
+ model_name="run",
56
+ name="is_locked",
57
+ field=lamindb.base.fields.BooleanField(blank=True, default=False),
58
+ ),
59
+ migrations.AddField(
60
+ model_name="schema",
61
+ name="is_locked",
62
+ field=lamindb.base.fields.BooleanField(blank=True, default=False),
63
+ ),
64
+ migrations.AddField(
65
+ model_name="storage",
66
+ name="is_locked",
67
+ field=lamindb.base.fields.BooleanField(blank=True, default=False),
68
+ ),
69
+ migrations.AddField(
70
+ model_name="transform",
71
+ name="is_locked",
72
+ field=lamindb.base.fields.BooleanField(blank=True, default=False),
73
+ ),
74
+ migrations.AddField(
75
+ model_name="ulabel",
76
+ name="is_locked",
77
+ field=lamindb.base.fields.BooleanField(blank=True, default=False),
78
+ ),
79
+ ]
@@ -0,0 +1,105 @@
1
+ # Generated by Django 5.1.12 on 2025-09-29 07:51
2
+
3
+ from django.db import migrations
4
+
5
+ import lamindb.base.fields
6
+
7
+
8
+ class Migration(migrations.Migration):
9
+ dependencies = [
10
+ ("lamindb", "0125_artifact_is_locked_collection_is_locked_and_more"),
11
+ ]
12
+
13
+ operations = [
14
+ migrations.AlterField(
15
+ model_name="artifact",
16
+ name="is_locked",
17
+ field=lamindb.base.fields.BooleanField(
18
+ blank=True, db_default=False, default=False
19
+ ),
20
+ ),
21
+ migrations.AlterField(
22
+ model_name="collection",
23
+ name="is_locked",
24
+ field=lamindb.base.fields.BooleanField(
25
+ blank=True, db_default=False, default=False
26
+ ),
27
+ ),
28
+ migrations.AlterField(
29
+ model_name="feature",
30
+ name="is_locked",
31
+ field=lamindb.base.fields.BooleanField(
32
+ blank=True, db_default=False, default=False
33
+ ),
34
+ ),
35
+ migrations.AlterField(
36
+ model_name="featurevalue",
37
+ name="is_locked",
38
+ field=lamindb.base.fields.BooleanField(
39
+ blank=True, db_default=False, default=False
40
+ ),
41
+ ),
42
+ migrations.AlterField(
43
+ model_name="project",
44
+ name="is_locked",
45
+ field=lamindb.base.fields.BooleanField(
46
+ blank=True, db_default=False, default=False
47
+ ),
48
+ ),
49
+ migrations.AlterField(
50
+ model_name="record",
51
+ name="is_locked",
52
+ field=lamindb.base.fields.BooleanField(
53
+ blank=True, db_default=False, default=False
54
+ ),
55
+ ),
56
+ migrations.AlterField(
57
+ model_name="recordrecord",
58
+ name="is_locked",
59
+ field=lamindb.base.fields.BooleanField(
60
+ blank=True, db_default=False, default=False
61
+ ),
62
+ ),
63
+ migrations.AlterField(
64
+ model_name="reference",
65
+ name="is_locked",
66
+ field=lamindb.base.fields.BooleanField(
67
+ blank=True, db_default=False, default=False
68
+ ),
69
+ ),
70
+ migrations.AlterField(
71
+ model_name="run",
72
+ name="is_locked",
73
+ field=lamindb.base.fields.BooleanField(
74
+ blank=True, db_default=False, default=False
75
+ ),
76
+ ),
77
+ migrations.AlterField(
78
+ model_name="schema",
79
+ name="is_locked",
80
+ field=lamindb.base.fields.BooleanField(
81
+ blank=True, db_default=False, default=False
82
+ ),
83
+ ),
84
+ migrations.AlterField(
85
+ model_name="storage",
86
+ name="is_locked",
87
+ field=lamindb.base.fields.BooleanField(
88
+ blank=True, db_default=False, default=False
89
+ ),
90
+ ),
91
+ migrations.AlterField(
92
+ model_name="transform",
93
+ name="is_locked",
94
+ field=lamindb.base.fields.BooleanField(
95
+ blank=True, db_default=False, default=False
96
+ ),
97
+ ),
98
+ migrations.AlterField(
99
+ model_name="ulabel",
100
+ name="is_locked",
101
+ field=lamindb.base.fields.BooleanField(
102
+ blank=True, db_default=False, default=False
103
+ ),
104
+ ),
105
+ ]
@@ -0,0 +1,31 @@
1
+ # Generated by Django 5.1.12 on 2025-09-30 17:16
2
+
3
+ from django.db import migrations, models
4
+
5
+
6
+ class Migration(migrations.Migration):
7
+ dependencies = [
8
+ (
9
+ "lamindb",
10
+ "0126_alter_artifact_is_locked_alter_collection_is_locked_and_more",
11
+ ),
12
+ ]
13
+
14
+ operations = [
15
+ migrations.AlterField(
16
+ model_name="run",
17
+ name="_status_code",
18
+ field=models.SmallIntegerField(
19
+ db_default=-3, db_index=True, default=-3, null=True
20
+ ),
21
+ ),
22
+ migrations.AddConstraint(
23
+ model_name="feature",
24
+ constraint=models.CheckConstraint(
25
+ condition=models.Q(
26
+ ("is_type", True), ("dtype__isnull", False), _connector="OR"
27
+ ),
28
+ name="dtype_not_null_when_is_type_false",
29
+ ),
30
+ ),
31
+ ]
@@ -0,0 +1,21 @@
1
+ # Generated by Django 5.2 on 2025-10-01 09:07
2
+
3
+ from django.db import migrations
4
+
5
+ import lamindb.base.fields
6
+
7
+
8
+ class Migration(migrations.Migration):
9
+ dependencies = [
10
+ ("lamindb", "0127_alter_run_status_code_feature_dtype"),
11
+ ]
12
+
13
+ operations = [
14
+ migrations.AddField(
15
+ model_name="artifact",
16
+ name="_real_key",
17
+ field=lamindb.base.fields.CharField(
18
+ blank=True, db_index=True, default=None, max_length=1024, null=True
19
+ ),
20
+ ),
21
+ ]