lamindb 1.11.3__py3-none-any.whl → 1.12.0__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.0.dist-info}/METADATA +18 -21
  52. {lamindb-1.11.3.dist-info → lamindb-1.12.0.dist-info}/RECORD +54 -38
  53. {lamindb-1.11.3.dist-info → lamindb-1.12.0.dist-info}/LICENSE +0 -0
  54. {lamindb-1.11.3.dist-info → lamindb-1.12.0.dist-info}/WHEEL +0 -0
@@ -1,4 +1,4 @@
1
- # Generated by Django 5.2 on 2025-08-09 13:33
1
+ # Generated by Django 5.1.12 on 2025-10-06 06:11
2
2
 
3
3
  import django.core.validators
4
4
  import django.db.models.deletion
@@ -14,6 +14,55 @@ import lamindb.models.has_parents
14
14
  import lamindb.models.run
15
15
  import lamindb.models.sqlrecord
16
16
 
17
+ CREATE_FUNCTION_SQL = """
18
+ CREATE OR REPLACE FUNCTION is_valid_record_type(record_type_id INTEGER, record_is_type BOOLEAN)
19
+ RETURNS BOOLEAN AS $$
20
+ BEGIN
21
+ -- Record with no type is valid
22
+ IF record_type_id IS NULL THEN
23
+ RETURN TRUE;
24
+ END IF;
25
+
26
+ -- If current record is a type, it can only reference schema-less types
27
+ IF record_is_type THEN
28
+ RETURN EXISTS (
29
+ SELECT 1 FROM lamindb_record r
30
+ WHERE r.id = record_type_id AND r.is_type AND r.schema_id IS NULL
31
+ );
32
+ END IF;
33
+
34
+ -- Regular records can reference any type
35
+ RETURN EXISTS (
36
+ SELECT 1 FROM lamindb_record r
37
+ WHERE r.id = record_type_id AND r.is_type
38
+ );
39
+ END;
40
+ $$ LANGUAGE plpgsql;
41
+ """
42
+
43
+ ADD_CONSTRAINT_SQL = """
44
+ ALTER TABLE lamindb_record
45
+ ADD CONSTRAINT record_type_is_valid_fk
46
+ CHECK (is_valid_record_type(type_id, is_type));
47
+ """
48
+
49
+ DROP_CONSTRAINT_SQL = (
50
+ "ALTER TABLE lamindb_record DROP CONSTRAINT IF EXISTS record_type_is_valid_fk;"
51
+ )
52
+ DROP_FUNCTION_SQL = "DROP FUNCTION IF EXISTS is_valid_record_type(INTEGER, BOOLEAN);"
53
+
54
+
55
+ def apply_postgres_constraint(apps, schema_editor):
56
+ if schema_editor.connection.vendor == "postgresql":
57
+ schema_editor.execute(CREATE_FUNCTION_SQL)
58
+ schema_editor.execute(ADD_CONSTRAINT_SQL)
59
+
60
+
61
+ def revert_postgres_constraint(apps, schema_editor):
62
+ if schema_editor.connection.vendor == "postgresql":
63
+ schema_editor.execute(DROP_CONSTRAINT_SQL)
64
+ schema_editor.execute(DROP_FUNCTION_SQL)
65
+
17
66
 
18
67
  class Migration(migrations.Migration):
19
68
  replaces = [
@@ -141,6 +190,26 @@ class Migration(migrations.Migration):
141
190
  ("lamindb", "0117_fix_artifact_storage_hash_unique_constraints"),
142
191
  ("lamindb", "0118_alter_recordproject_value_projectrecord"),
143
192
  ("lamindb", "0119_rename_records_project_linked_in_records"),
193
+ ("lamindb", "0120_add_record_fk_constraint"),
194
+ ("lamindb", "0121_recorduser"),
195
+ ("lamindb", "0122_remove_personproject_person_and_more"),
196
+ (
197
+ "lamindb",
198
+ "0123_alter_artifact_description_alter_branch_description_and_more",
199
+ ),
200
+ ("lamindb", "0124_page_artifact_page_collection_page_feature_page_and_more"),
201
+ ("lamindb", "0125_artifact_is_locked_collection_is_locked_and_more"),
202
+ (
203
+ "lamindb",
204
+ "0126_alter_artifact_is_locked_alter_collection_is_locked_and_more",
205
+ ),
206
+ ("lamindb", "0127_alter_run_status_code_feature_dtype"),
207
+ ("lamindb", "0128_artifact__real_key"),
208
+ ("lamindb", "0129_remove_feature_page_remove_project_page_and_more"),
209
+ ("lamindb", "0130_branch_space_alter_artifactblock_artifact_and_more"),
210
+ ("lamindb", "0131_record_unique_name_type_space"),
211
+ ("lamindb", "0132_record_parents_record_reference_and_more"),
212
+ ("lamindb", "0133_artifactuser_artifact_users"),
144
213
  ]
145
214
 
146
215
  dependencies = [] # type: ignore
@@ -195,9 +264,7 @@ class Migration(migrations.Migration):
195
264
  ),
196
265
  (
197
266
  "description",
198
- lamindb.base.fields.CharField(
199
- blank=True, default=None, max_length=255, null=True
200
- ),
267
+ lamindb.base.fields.TextField(blank=True, default=None, null=True),
201
268
  ),
202
269
  (
203
270
  "created_at",
@@ -228,9 +295,7 @@ class Migration(migrations.Migration):
228
295
  ),
229
296
  (
230
297
  "description",
231
- lamindb.base.fields.CharField(
232
- blank=True, default=None, max_length=255, null=True
233
- ),
298
+ lamindb.base.fields.TextField(blank=True, default=None, null=True),
234
299
  ),
235
300
  (
236
301
  "created_at",
@@ -297,10 +362,6 @@ class Migration(migrations.Migration):
297
362
  ),
298
363
  ),
299
364
  ],
300
- options={
301
- "abstract": False,
302
- "base_manager_name": "objects",
303
- },
304
365
  bases=(models.Model, lamindb.models.can_curate.CanCurate),
305
366
  ),
306
367
  migrations.CreateModel(
@@ -322,6 +383,12 @@ class Migration(migrations.Migration):
322
383
  blank=True, db_index=True, default=True
323
384
  ),
324
385
  ),
386
+ (
387
+ "is_locked",
388
+ lamindb.base.fields.BooleanField(
389
+ blank=True, db_default=False, default=False
390
+ ),
391
+ ),
325
392
  (
326
393
  "_aux",
327
394
  lamindb.base.fields.JSONField(
@@ -364,20 +431,26 @@ class Migration(migrations.Migration):
364
431
  blank=True,
365
432
  db_index=True,
366
433
  default=None,
367
- max_length=255,
434
+ max_length=1024,
368
435
  null=True,
369
436
  ),
370
437
  ),
371
438
  (
372
- "description",
439
+ "_real_key",
373
440
  lamindb.base.fields.CharField(
374
441
  blank=True,
375
442
  db_index=True,
376
443
  default=None,
377
- max_length=255,
444
+ max_length=1024,
378
445
  null=True,
379
446
  ),
380
447
  ),
448
+ (
449
+ "description",
450
+ lamindb.base.fields.TextField(
451
+ blank=True, db_index=True, default=None, null=True
452
+ ),
453
+ ),
381
454
  (
382
455
  "suffix",
383
456
  lamindb.base.fields.CharField(
@@ -511,6 +584,12 @@ class Migration(migrations.Migration):
511
584
  blank=True, db_index=True, default=True
512
585
  ),
513
586
  ),
587
+ (
588
+ "is_locked",
589
+ lamindb.base.fields.BooleanField(
590
+ blank=True, db_default=False, default=False
591
+ ),
592
+ ),
514
593
  (
515
594
  "_aux",
516
595
  lamindb.base.fields.JSONField(
@@ -555,9 +634,7 @@ class Migration(migrations.Migration):
555
634
  ),
556
635
  (
557
636
  "description",
558
- lamindb.base.fields.TextField(
559
- blank=True, db_index=True, default=None, null=True
560
- ),
637
+ lamindb.base.fields.TextField(blank=True, default=None, null=True),
561
638
  ),
562
639
  (
563
640
  "hash",
@@ -717,6 +794,12 @@ class Migration(migrations.Migration):
717
794
  migrations.CreateModel(
718
795
  name="Feature",
719
796
  fields=[
797
+ (
798
+ "is_locked",
799
+ lamindb.base.fields.BooleanField(
800
+ blank=True, db_default=False, default=False
801
+ ),
802
+ ),
720
803
  (
721
804
  "_aux",
722
805
  lamindb.base.fields.JSONField(
@@ -787,13 +870,7 @@ class Migration(migrations.Migration):
787
870
  ),
788
871
  (
789
872
  "description",
790
- lamindb.base.fields.CharField(
791
- blank=True,
792
- db_index=True,
793
- default=None,
794
- max_length=255,
795
- null=True,
796
- ),
873
+ lamindb.base.fields.TextField(blank=True, default=None, null=True),
797
874
  ),
798
875
  ("array_rank", models.SmallIntegerField(db_index=True, default=0)),
799
876
  ("array_size", models.IntegerField(db_index=True, default=0)),
@@ -1022,6 +1099,12 @@ class Migration(migrations.Migration):
1022
1099
  verbose_name="ID",
1023
1100
  ),
1024
1101
  ),
1102
+ (
1103
+ "is_locked",
1104
+ lamindb.base.fields.BooleanField(
1105
+ blank=True, db_default=False, default=False
1106
+ ),
1107
+ ),
1025
1108
  (
1026
1109
  "_aux",
1027
1110
  lamindb.base.fields.JSONField(
@@ -1121,118 +1204,14 @@ class Migration(migrations.Migration):
1121
1204
  ),
1122
1205
  ),
1123
1206
  migrations.CreateModel(
1124
- name="Person",
1207
+ name="Project",
1125
1208
  fields=[
1126
1209
  (
1127
- "_aux",
1128
- lamindb.base.fields.JSONField(
1129
- blank=True, db_default=None, default=None, null=True
1130
- ),
1131
- ),
1132
- (
1133
- "created_at",
1134
- lamindb.base.fields.DateTimeField(
1135
- blank=True,
1136
- db_default=django.db.models.functions.datetime.Now(),
1137
- db_index=True,
1138
- editable=False,
1139
- ),
1140
- ),
1141
- (
1142
- "updated_at",
1143
- lamindb.base.fields.DateTimeField(
1144
- blank=True,
1145
- db_default=django.db.models.functions.datetime.Now(),
1146
- db_index=True,
1147
- editable=False,
1148
- ),
1149
- ),
1150
- ("id", models.AutoField(primary_key=True, serialize=False)),
1151
- (
1152
- "uid",
1153
- lamindb.base.fields.CharField(
1154
- blank=True,
1155
- db_index=True,
1156
- default=lamindb.base.uids.base62_8,
1157
- editable=False,
1158
- max_length=8,
1159
- unique=True,
1160
- ),
1161
- ),
1162
- (
1163
- "name",
1164
- lamindb.base.fields.CharField(
1165
- blank=True, db_index=True, default=None, max_length=255
1166
- ),
1167
- ),
1168
- (
1169
- "email",
1170
- lamindb.base.fields.EmailField(
1171
- blank=True, default=None, max_length=254, null=True
1172
- ),
1173
- ),
1174
- (
1175
- "external",
1210
+ "is_locked",
1176
1211
  lamindb.base.fields.BooleanField(
1177
- blank=True, db_index=True, default=True
1178
- ),
1179
- ),
1180
- (
1181
- "branch",
1182
- lamindb.base.fields.ForeignKey(
1183
- blank=True,
1184
- db_column="_branch_code",
1185
- db_default=1,
1186
- default=1,
1187
- on_delete=django.db.models.deletion.PROTECT,
1188
- related_name="+",
1189
- to="lamindb.branch",
1190
- ),
1191
- ),
1192
- ],
1193
- options={
1194
- "abstract": False,
1195
- },
1196
- bases=(
1197
- lamindb.models.can_curate.CanCurate,
1198
- models.Model,
1199
- lamindb.models.sqlrecord.ValidateFields,
1200
- ),
1201
- ),
1202
- migrations.CreateModel(
1203
- name="PersonProject",
1204
- fields=[
1205
- (
1206
- "created_at",
1207
- lamindb.base.fields.DateTimeField(
1208
- blank=True,
1209
- db_default=django.db.models.functions.datetime.Now(),
1210
- db_index=True,
1211
- editable=False,
1212
- ),
1213
- ),
1214
- ("id", models.BigAutoField(primary_key=True, serialize=False)),
1215
- (
1216
- "role",
1217
- lamindb.base.fields.CharField(
1218
- blank=True, default=None, max_length=255, null=True
1219
- ),
1220
- ),
1221
- (
1222
- "person",
1223
- lamindb.base.fields.ForeignKey(
1224
- blank=True,
1225
- on_delete=django.db.models.deletion.CASCADE,
1226
- related_name="links_project",
1227
- to="lamindb.person",
1212
+ blank=True, db_default=False, default=False
1228
1213
  ),
1229
1214
  ),
1230
- ],
1231
- bases=(lamindb.models.sqlrecord.IsLink, models.Model),
1232
- ),
1233
- migrations.CreateModel(
1234
- name="Project",
1235
- fields=[
1236
1215
  (
1237
1216
  "_aux",
1238
1217
  lamindb.base.fields.JSONField(
@@ -1275,6 +1254,10 @@ class Migration(migrations.Migration):
1275
1254
  blank=True, db_index=True, default=None, max_length=255
1276
1255
  ),
1277
1256
  ),
1257
+ (
1258
+ "description",
1259
+ lamindb.base.fields.TextField(blank=True, default=None, null=True),
1260
+ ),
1278
1261
  (
1279
1262
  "is_type",
1280
1263
  lamindb.base.fields.BooleanField(
@@ -1348,14 +1331,6 @@ class Migration(migrations.Migration):
1348
1331
  related_name="children", to="lamindb.project"
1349
1332
  ),
1350
1333
  ),
1351
- (
1352
- "people",
1353
- models.ManyToManyField(
1354
- related_name="projects",
1355
- through="lamindb.PersonProject",
1356
- to="lamindb.person",
1357
- ),
1358
- ),
1359
1334
  (
1360
1335
  "predecessors",
1361
1336
  models.ManyToManyField(
@@ -1382,16 +1357,6 @@ class Migration(migrations.Migration):
1382
1357
  lamindb.models.sqlrecord.ValidateFields,
1383
1358
  ),
1384
1359
  ),
1385
- migrations.AddField(
1386
- model_name="personproject",
1387
- name="project",
1388
- field=lamindb.base.fields.ForeignKey(
1389
- blank=True,
1390
- on_delete=django.db.models.deletion.PROTECT,
1391
- related_name="links_person",
1392
- to="lamindb.project",
1393
- ),
1394
- ),
1395
1360
  migrations.AddField(
1396
1361
  model_name="featureproject",
1397
1362
  name="project",
@@ -1425,6 +1390,12 @@ class Migration(migrations.Migration):
1425
1390
  migrations.CreateModel(
1426
1391
  name="Record",
1427
1392
  fields=[
1393
+ (
1394
+ "is_locked",
1395
+ lamindb.base.fields.BooleanField(
1396
+ blank=True, db_default=False, default=False
1397
+ ),
1398
+ ),
1428
1399
  (
1429
1400
  "_aux",
1430
1401
  lamindb.base.fields.JSONField(
@@ -1479,6 +1450,10 @@ class Migration(migrations.Migration):
1479
1450
  ),
1480
1451
  (
1481
1452
  "description",
1453
+ lamindb.base.fields.TextField(blank=True, default=None, null=True),
1454
+ ),
1455
+ (
1456
+ "reference",
1482
1457
  lamindb.base.fields.CharField(
1483
1458
  blank=True,
1484
1459
  db_index=True,
@@ -1487,6 +1462,16 @@ class Migration(migrations.Migration):
1487
1462
  null=True,
1488
1463
  ),
1489
1464
  ),
1465
+ (
1466
+ "reference_type",
1467
+ lamindb.base.fields.CharField(
1468
+ blank=True,
1469
+ db_index=True,
1470
+ default=None,
1471
+ max_length=25,
1472
+ null=True,
1473
+ ),
1474
+ ),
1490
1475
  (
1491
1476
  "artifacts",
1492
1477
  models.ManyToManyField(
@@ -1507,6 +1492,12 @@ class Migration(migrations.Migration):
1507
1492
  to="lamindb.branch",
1508
1493
  ),
1509
1494
  ),
1495
+ (
1496
+ "parents",
1497
+ models.ManyToManyField(
1498
+ related_name="children", to="lamindb.record"
1499
+ ),
1500
+ ),
1510
1501
  (
1511
1502
  "type",
1512
1503
  lamindb.base.fields.ForeignKey(
@@ -1521,7 +1512,11 @@ class Migration(migrations.Migration):
1521
1512
  options={
1522
1513
  "abstract": False,
1523
1514
  },
1524
- bases=(lamindb.models.can_curate.CanCurate, models.Model),
1515
+ bases=(
1516
+ lamindb.models.can_curate.CanCurate,
1517
+ models.Model,
1518
+ lamindb.models.has_parents.HasParents,
1519
+ ),
1525
1520
  ),
1526
1521
  migrations.CreateModel(
1527
1522
  name="ProjectRecord",
@@ -1633,52 +1628,6 @@ class Migration(migrations.Migration):
1633
1628
  to="lamindb.artifact",
1634
1629
  ),
1635
1630
  ),
1636
- migrations.CreateModel(
1637
- name="RecordPerson",
1638
- fields=[
1639
- ("id", models.BigAutoField(primary_key=True, serialize=False)),
1640
- (
1641
- "feature",
1642
- lamindb.base.fields.ForeignKey(
1643
- blank=True,
1644
- on_delete=django.db.models.deletion.PROTECT,
1645
- related_name="links_recordperson",
1646
- to="lamindb.feature",
1647
- ),
1648
- ),
1649
- (
1650
- "record",
1651
- lamindb.base.fields.ForeignKey(
1652
- blank=True,
1653
- on_delete=django.db.models.deletion.CASCADE,
1654
- related_name="values_person",
1655
- to="lamindb.record",
1656
- ),
1657
- ),
1658
- (
1659
- "value",
1660
- lamindb.base.fields.ForeignKey(
1661
- blank=True,
1662
- on_delete=django.db.models.deletion.PROTECT,
1663
- related_name="links_record",
1664
- to="lamindb.person",
1665
- ),
1666
- ),
1667
- ],
1668
- options={
1669
- "unique_together": {("record", "feature", "value")},
1670
- },
1671
- bases=(models.Model, lamindb.models.sqlrecord.IsLink),
1672
- ),
1673
- migrations.AddField(
1674
- model_name="person",
1675
- name="records",
1676
- field=models.ManyToManyField(
1677
- related_name="linked_people",
1678
- through="lamindb.RecordPerson",
1679
- to="lamindb.record",
1680
- ),
1681
- ),
1682
1631
  migrations.CreateModel(
1683
1632
  name="RecordProject",
1684
1633
  fields=[
@@ -1728,6 +1677,12 @@ class Migration(migrations.Migration):
1728
1677
  migrations.CreateModel(
1729
1678
  name="RecordRecord",
1730
1679
  fields=[
1680
+ (
1681
+ "is_locked",
1682
+ lamindb.base.fields.BooleanField(
1683
+ blank=True, db_default=False, default=False
1684
+ ),
1685
+ ),
1731
1686
  (
1732
1687
  "_aux",
1733
1688
  lamindb.base.fields.JSONField(
@@ -1828,6 +1783,12 @@ class Migration(migrations.Migration):
1828
1783
  migrations.CreateModel(
1829
1784
  name="Reference",
1830
1785
  fields=[
1786
+ (
1787
+ "is_locked",
1788
+ lamindb.base.fields.BooleanField(
1789
+ blank=True, db_default=False, default=False
1790
+ ),
1791
+ ),
1831
1792
  (
1832
1793
  "_aux",
1833
1794
  lamindb.base.fields.JSONField(
@@ -1871,7 +1832,11 @@ class Migration(migrations.Migration):
1871
1832
  ),
1872
1833
  ),
1873
1834
  (
1874
- "is_type",
1835
+ "description",
1836
+ lamindb.base.fields.TextField(blank=True, default=None, null=True),
1837
+ ),
1838
+ (
1839
+ "is_type",
1875
1840
  lamindb.base.fields.BooleanField(
1876
1841
  blank=True, db_index=True, default=False, null=True
1877
1842
  ),
@@ -1912,16 +1877,6 @@ class Migration(migrations.Migration):
1912
1877
  ],
1913
1878
  ),
1914
1879
  ),
1915
- (
1916
- "description",
1917
- lamindb.base.fields.CharField(
1918
- blank=True,
1919
- db_index=True,
1920
- default=None,
1921
- max_length=255,
1922
- null=True,
1923
- ),
1924
- ),
1925
1880
  (
1926
1881
  "text",
1927
1882
  lamindb.base.fields.TextField(
@@ -1940,12 +1895,6 @@ class Migration(migrations.Migration):
1940
1895
  to="lamindb.artifact",
1941
1896
  ),
1942
1897
  ),
1943
- (
1944
- "authors",
1945
- models.ManyToManyField(
1946
- related_name="references", to="lamindb.person"
1947
- ),
1948
- ),
1949
1898
  (
1950
1899
  "branch",
1951
1900
  lamindb.base.fields.ForeignKey(
@@ -1967,7 +1916,7 @@ class Migration(migrations.Migration):
1967
1916
  ),
1968
1917
  ),
1969
1918
  (
1970
- "records",
1919
+ "linked_in_records",
1971
1920
  models.ManyToManyField(
1972
1921
  related_name="linked_references",
1973
1922
  through="lamindb.RecordReference",
@@ -2000,7 +1949,7 @@ class Migration(migrations.Migration):
2000
1949
  field=lamindb.base.fields.ForeignKey(
2001
1950
  blank=True,
2002
1951
  on_delete=django.db.models.deletion.PROTECT,
2003
- related_name="links_record",
1952
+ related_name="links_in_record",
2004
1953
  to="lamindb.reference",
2005
1954
  ),
2006
1955
  ),
@@ -2031,9 +1980,69 @@ class Migration(migrations.Migration):
2031
1980
  to="lamindb.reference",
2032
1981
  ),
2033
1982
  ),
1983
+ migrations.CreateModel(
1984
+ name="ReferenceRecord",
1985
+ fields=[
1986
+ (
1987
+ "created_at",
1988
+ lamindb.base.fields.DateTimeField(
1989
+ blank=True,
1990
+ db_default=django.db.models.functions.datetime.Now(),
1991
+ db_index=True,
1992
+ editable=False,
1993
+ ),
1994
+ ),
1995
+ ("id", models.BigAutoField(primary_key=True, serialize=False)),
1996
+ (
1997
+ "feature",
1998
+ lamindb.base.fields.ForeignKey(
1999
+ blank=True,
2000
+ default=None,
2001
+ null=True,
2002
+ on_delete=django.db.models.deletion.PROTECT,
2003
+ related_name="links_referencerecord",
2004
+ to="lamindb.feature",
2005
+ ),
2006
+ ),
2007
+ (
2008
+ "record",
2009
+ lamindb.base.fields.ForeignKey(
2010
+ blank=True,
2011
+ on_delete=django.db.models.deletion.CASCADE,
2012
+ related_name="links_reference",
2013
+ to="lamindb.record",
2014
+ ),
2015
+ ),
2016
+ (
2017
+ "reference",
2018
+ lamindb.base.fields.ForeignKey(
2019
+ blank=True,
2020
+ on_delete=django.db.models.deletion.PROTECT,
2021
+ related_name="links_record",
2022
+ to="lamindb.reference",
2023
+ ),
2024
+ ),
2025
+ ],
2026
+ bases=(lamindb.models.sqlrecord.IsLink, models.Model),
2027
+ ),
2028
+ migrations.AddField(
2029
+ model_name="reference",
2030
+ name="records",
2031
+ field=models.ManyToManyField(
2032
+ related_name="references",
2033
+ through="lamindb.ReferenceRecord",
2034
+ to="lamindb.record",
2035
+ ),
2036
+ ),
2034
2037
  migrations.CreateModel(
2035
2038
  name="Run",
2036
2039
  fields=[
2040
+ (
2041
+ "is_locked",
2042
+ lamindb.base.fields.BooleanField(
2043
+ blank=True, db_default=False, default=False
2044
+ ),
2045
+ ),
2037
2046
  (
2038
2047
  "_aux",
2039
2048
  lamindb.base.fields.JSONField(
@@ -2114,7 +2123,9 @@ class Migration(migrations.Migration):
2114
2123
  ),
2115
2124
  (
2116
2125
  "_status_code",
2117
- models.SmallIntegerField(db_index=True, default=None, null=True),
2126
+ models.SmallIntegerField(
2127
+ db_default=-3, db_index=True, default=-3, null=True
2128
+ ),
2118
2129
  ),
2119
2130
  (
2120
2131
  "_logfile",
@@ -2173,9 +2184,18 @@ class Migration(migrations.Migration):
2173
2184
  ),
2174
2185
  ),
2175
2186
  ],
2176
- options={
2177
- "abstract": False,
2178
- },
2187
+ ),
2188
+ migrations.AddField(
2189
+ model_name="referencerecord",
2190
+ name="run",
2191
+ field=lamindb.base.fields.ForeignKey(
2192
+ blank=True,
2193
+ default=lamindb.models.run.current_run,
2194
+ null=True,
2195
+ on_delete=django.db.models.deletion.PROTECT,
2196
+ related_name="+",
2197
+ to="lamindb.run",
2198
+ ),
2179
2199
  ),
2180
2200
  migrations.AddField(
2181
2201
  model_name="reference",
@@ -2245,7 +2265,7 @@ class Migration(migrations.Migration):
2245
2265
  name="run",
2246
2266
  field=lamindb.base.fields.ForeignKey(
2247
2267
  blank=True,
2248
- default=None,
2268
+ default=lamindb.models.run.current_run,
2249
2269
  editable=False,
2250
2270
  null=True,
2251
2271
  on_delete=django.db.models.deletion.PROTECT,
@@ -2277,30 +2297,6 @@ class Migration(migrations.Migration):
2277
2297
  to="lamindb.run",
2278
2298
  ),
2279
2299
  ),
2280
- migrations.AddField(
2281
- model_name="personproject",
2282
- name="run",
2283
- field=lamindb.base.fields.ForeignKey(
2284
- blank=True,
2285
- default=lamindb.models.run.current_run,
2286
- null=True,
2287
- on_delete=django.db.models.deletion.PROTECT,
2288
- related_name="+",
2289
- to="lamindb.run",
2290
- ),
2291
- ),
2292
- migrations.AddField(
2293
- model_name="person",
2294
- name="run",
2295
- field=lamindb.base.fields.ForeignKey(
2296
- blank=True,
2297
- default=lamindb.models.run.current_run,
2298
- null=True,
2299
- on_delete=django.db.models.deletion.PROTECT,
2300
- related_name="+",
2301
- to="lamindb.run",
2302
- ),
2303
- ),
2304
2300
  migrations.AddField(
2305
2301
  model_name="featurevalue",
2306
2302
  name="run",
@@ -2574,6 +2570,12 @@ class Migration(migrations.Migration):
2574
2570
  migrations.CreateModel(
2575
2571
  name="Schema",
2576
2572
  fields=[
2573
+ (
2574
+ "is_locked",
2575
+ lamindb.base.fields.BooleanField(
2576
+ blank=True, db_default=False, default=False
2577
+ ),
2578
+ ),
2577
2579
  (
2578
2580
  "_aux",
2579
2581
  lamindb.base.fields.JSONField(
@@ -2613,13 +2615,7 @@ class Migration(migrations.Migration):
2613
2615
  ),
2614
2616
  (
2615
2617
  "description",
2616
- lamindb.base.fields.CharField(
2617
- blank=True,
2618
- db_index=True,
2619
- default=None,
2620
- max_length=255,
2621
- null=True,
2622
- ),
2618
+ lamindb.base.fields.TextField(blank=True, default=None, null=True),
2623
2619
  ),
2624
2620
  ("n", lamindb.base.fields.IntegerField(blank=True)),
2625
2621
  (
@@ -3099,7 +3095,7 @@ class Migration(migrations.Migration):
3099
3095
  ),
3100
3096
  ),
3101
3097
  migrations.AddField(
3102
- model_name="person",
3098
+ model_name="featurevalue",
3103
3099
  name="space",
3104
3100
  field=lamindb.base.fields.ForeignKey(
3105
3101
  blank=True,
@@ -3111,7 +3107,7 @@ class Migration(migrations.Migration):
3111
3107
  ),
3112
3108
  ),
3113
3109
  migrations.AddField(
3114
- model_name="featurevalue",
3110
+ model_name="feature",
3115
3111
  name="space",
3116
3112
  field=lamindb.base.fields.ForeignKey(
3117
3113
  blank=True,
@@ -3123,7 +3119,7 @@ class Migration(migrations.Migration):
3123
3119
  ),
3124
3120
  ),
3125
3121
  migrations.AddField(
3126
- model_name="feature",
3122
+ model_name="collection",
3127
3123
  name="space",
3128
3124
  field=lamindb.base.fields.ForeignKey(
3129
3125
  blank=True,
@@ -3135,7 +3131,7 @@ class Migration(migrations.Migration):
3135
3131
  ),
3136
3132
  ),
3137
3133
  migrations.AddField(
3138
- model_name="collection",
3134
+ model_name="branch",
3139
3135
  name="space",
3140
3136
  field=lamindb.base.fields.ForeignKey(
3141
3137
  blank=True,
@@ -3161,6 +3157,12 @@ class Migration(migrations.Migration):
3161
3157
  migrations.CreateModel(
3162
3158
  name="Storage",
3163
3159
  fields=[
3160
+ (
3161
+ "is_locked",
3162
+ lamindb.base.fields.BooleanField(
3163
+ blank=True, db_default=False, default=False
3164
+ ),
3165
+ ),
3164
3166
  (
3165
3167
  "_aux",
3166
3168
  lamindb.base.fields.JSONField(
@@ -3209,13 +3211,7 @@ class Migration(migrations.Migration):
3209
3211
  ),
3210
3212
  (
3211
3213
  "description",
3212
- lamindb.base.fields.CharField(
3213
- blank=True,
3214
- db_index=True,
3215
- default=None,
3216
- max_length=255,
3217
- null=True,
3218
- ),
3214
+ lamindb.base.fields.TextField(blank=True, default=None, null=True),
3219
3215
  ),
3220
3216
  (
3221
3217
  "type",
@@ -3323,6 +3319,12 @@ class Migration(migrations.Migration):
3323
3319
  blank=True, db_index=True, default=True
3324
3320
  ),
3325
3321
  ),
3322
+ (
3323
+ "is_locked",
3324
+ lamindb.base.fields.BooleanField(
3325
+ blank=True, db_default=False, default=False
3326
+ ),
3327
+ ),
3326
3328
  (
3327
3329
  "_aux",
3328
3330
  lamindb.base.fields.JSONField(
@@ -3347,18 +3349,14 @@ class Migration(migrations.Migration):
3347
3349
  blank=True,
3348
3350
  db_index=True,
3349
3351
  default=None,
3350
- max_length=255,
3352
+ max_length=1024,
3351
3353
  null=True,
3352
3354
  ),
3353
3355
  ),
3354
3356
  (
3355
3357
  "description",
3356
- lamindb.base.fields.CharField(
3357
- blank=True,
3358
- db_index=True,
3359
- default=None,
3360
- max_length=255,
3361
- null=True,
3358
+ lamindb.base.fields.TextField(
3359
+ blank=True, db_index=True, default=None, null=True
3362
3360
  ),
3363
3361
  ),
3364
3362
  (
@@ -3613,6 +3611,12 @@ class Migration(migrations.Migration):
3613
3611
  migrations.CreateModel(
3614
3612
  name="ULabel",
3615
3613
  fields=[
3614
+ (
3615
+ "is_locked",
3616
+ lamindb.base.fields.BooleanField(
3617
+ blank=True, db_default=False, default=False
3618
+ ),
3619
+ ),
3616
3620
  (
3617
3621
  "_aux",
3618
3622
  lamindb.base.fields.JSONField(
@@ -3663,13 +3667,7 @@ class Migration(migrations.Migration):
3663
3667
  ),
3664
3668
  (
3665
3669
  "description",
3666
- lamindb.base.fields.CharField(
3667
- blank=True,
3668
- db_index=True,
3669
- default=None,
3670
- max_length=255,
3671
- null=True,
3672
- ),
3670
+ lamindb.base.fields.TextField(blank=True, default=None, null=True),
3673
3671
  ),
3674
3672
  (
3675
3673
  "reference",
@@ -3920,9 +3918,9 @@ class Migration(migrations.Migration):
3920
3918
  ),
3921
3919
  migrations.AddField(
3922
3920
  model_name="record",
3923
- name="ulabels",
3921
+ name="linked_ulabels",
3924
3922
  field=models.ManyToManyField(
3925
- related_name="_records",
3923
+ related_name="linked_in_records",
3926
3924
  through="lamindb.RecordULabel",
3927
3925
  to="lamindb.ulabel",
3928
3926
  ),
@@ -4171,6 +4169,77 @@ class Migration(migrations.Migration):
4171
4169
  to="lamindb.ulabel",
4172
4170
  ),
4173
4171
  ),
4172
+ migrations.CreateModel(
4173
+ name="TransformBlock",
4174
+ fields=[
4175
+ (
4176
+ "version",
4177
+ lamindb.base.fields.CharField(
4178
+ blank=True,
4179
+ db_index=True,
4180
+ default=None,
4181
+ max_length=30,
4182
+ null=True,
4183
+ ),
4184
+ ),
4185
+ (
4186
+ "is_latest",
4187
+ lamindb.base.fields.BooleanField(
4188
+ blank=True, db_index=True, default=True
4189
+ ),
4190
+ ),
4191
+ ("id", models.BigAutoField(primary_key=True, serialize=False)),
4192
+ (
4193
+ "uid",
4194
+ models.CharField(
4195
+ db_index=True, editable=False, max_length=20, unique=True
4196
+ ),
4197
+ ),
4198
+ ("content", models.TextField()),
4199
+ ("hash", models.CharField(db_index=True, max_length=22, null=True)),
4200
+ (
4201
+ "type",
4202
+ models.CharField(
4203
+ db_default="mdpage",
4204
+ db_index=True,
4205
+ default="mdpage",
4206
+ max_length=22,
4207
+ ),
4208
+ ),
4209
+ (
4210
+ "vertical_pos",
4211
+ models.FloatField(db_default=0, db_index=True, default=0),
4212
+ ),
4213
+ (
4214
+ "created_at",
4215
+ models.DateTimeField(
4216
+ db_default=django.db.models.functions.datetime.Now(),
4217
+ db_index=True,
4218
+ editable=False,
4219
+ ),
4220
+ ),
4221
+ ("line_number", models.IntegerField(null=True)),
4222
+ (
4223
+ "transform",
4224
+ models.ForeignKey(
4225
+ null=True,
4226
+ on_delete=django.db.models.deletion.CASCADE,
4227
+ related_name="blocks",
4228
+ to="lamindb.transform",
4229
+ ),
4230
+ ),
4231
+ (
4232
+ "created_by",
4233
+ models.ForeignKey(
4234
+ default=None,
4235
+ null=True,
4236
+ on_delete=django.db.models.deletion.CASCADE,
4237
+ related_name="+",
4238
+ to="lamindb.user",
4239
+ ),
4240
+ ),
4241
+ ],
4242
+ ),
4174
4243
  migrations.AddField(
4175
4244
  model_name="transform",
4176
4245
  name="created_by",
@@ -4182,43 +4251,158 @@ class Migration(migrations.Migration):
4182
4251
  to="lamindb.user",
4183
4252
  ),
4184
4253
  ),
4185
- migrations.AddField(
4186
- model_name="space",
4187
- name="created_by",
4188
- field=lamindb.base.fields.ForeignKey(
4189
- blank=True,
4190
- default=None,
4191
- null=True,
4192
- on_delete=django.db.models.deletion.CASCADE,
4193
- related_name="+",
4194
- to="lamindb.user",
4195
- ),
4196
- ),
4197
- migrations.AddField(
4198
- model_name="schema",
4199
- name="created_by",
4200
- field=lamindb.base.fields.ForeignKey(
4201
- blank=True,
4202
- default=lamindb.base.users.current_user_id,
4203
- editable=False,
4204
- on_delete=django.db.models.deletion.PROTECT,
4205
- related_name="+",
4206
- to="lamindb.user",
4207
- ),
4208
- ),
4209
- migrations.AddField(
4210
- model_name="run",
4211
- name="created_by",
4212
- field=lamindb.base.fields.ForeignKey(
4213
- blank=True,
4214
- default=lamindb.base.users.current_user_id,
4254
+ migrations.CreateModel(
4255
+ name="SpaceBlock",
4256
+ fields=[
4257
+ (
4258
+ "version",
4259
+ lamindb.base.fields.CharField(
4260
+ blank=True,
4261
+ db_index=True,
4262
+ default=None,
4263
+ max_length=30,
4264
+ null=True,
4265
+ ),
4266
+ ),
4267
+ (
4268
+ "is_latest",
4269
+ lamindb.base.fields.BooleanField(
4270
+ blank=True, db_index=True, default=True
4271
+ ),
4272
+ ),
4273
+ ("id", models.BigAutoField(primary_key=True, serialize=False)),
4274
+ (
4275
+ "uid",
4276
+ models.CharField(
4277
+ db_index=True, editable=False, max_length=20, unique=True
4278
+ ),
4279
+ ),
4280
+ ("content", models.TextField()),
4281
+ ("hash", models.CharField(db_index=True, max_length=22, null=True)),
4282
+ (
4283
+ "type",
4284
+ models.CharField(
4285
+ db_default="mdpage",
4286
+ db_index=True,
4287
+ default="mdpage",
4288
+ max_length=22,
4289
+ ),
4290
+ ),
4291
+ (
4292
+ "vertical_pos",
4293
+ models.FloatField(db_default=0, db_index=True, default=0),
4294
+ ),
4295
+ (
4296
+ "created_at",
4297
+ models.DateTimeField(
4298
+ db_default=django.db.models.functions.datetime.Now(),
4299
+ db_index=True,
4300
+ editable=False,
4301
+ ),
4302
+ ),
4303
+ (
4304
+ "space",
4305
+ models.ForeignKey(
4306
+ on_delete=django.db.models.deletion.CASCADE,
4307
+ related_name="blocks",
4308
+ to="lamindb.space",
4309
+ ),
4310
+ ),
4311
+ (
4312
+ "created_by",
4313
+ models.ForeignKey(
4314
+ default=None,
4315
+ null=True,
4316
+ on_delete=django.db.models.deletion.CASCADE,
4317
+ related_name="+",
4318
+ to="lamindb.user",
4319
+ ),
4320
+ ),
4321
+ ],
4322
+ ),
4323
+ migrations.AddField(
4324
+ model_name="space",
4325
+ name="created_by",
4326
+ field=lamindb.base.fields.ForeignKey(
4327
+ blank=True,
4328
+ default=None,
4329
+ null=True,
4215
4330
  on_delete=django.db.models.deletion.CASCADE,
4216
- related_name="created_runs",
4331
+ related_name="+",
4217
4332
  to="lamindb.user",
4218
4333
  ),
4219
4334
  ),
4335
+ migrations.CreateModel(
4336
+ name="SchemaBlock",
4337
+ fields=[
4338
+ (
4339
+ "version",
4340
+ lamindb.base.fields.CharField(
4341
+ blank=True,
4342
+ db_index=True,
4343
+ default=None,
4344
+ max_length=30,
4345
+ null=True,
4346
+ ),
4347
+ ),
4348
+ (
4349
+ "is_latest",
4350
+ lamindb.base.fields.BooleanField(
4351
+ blank=True, db_index=True, default=True
4352
+ ),
4353
+ ),
4354
+ ("id", models.BigAutoField(primary_key=True, serialize=False)),
4355
+ (
4356
+ "uid",
4357
+ models.CharField(
4358
+ db_index=True, editable=False, max_length=20, unique=True
4359
+ ),
4360
+ ),
4361
+ ("content", models.TextField()),
4362
+ ("hash", models.CharField(db_index=True, max_length=22, null=True)),
4363
+ (
4364
+ "type",
4365
+ models.CharField(
4366
+ db_default="mdpage",
4367
+ db_index=True,
4368
+ default="mdpage",
4369
+ max_length=22,
4370
+ ),
4371
+ ),
4372
+ (
4373
+ "vertical_pos",
4374
+ models.FloatField(db_default=0, db_index=True, default=0),
4375
+ ),
4376
+ (
4377
+ "created_at",
4378
+ models.DateTimeField(
4379
+ db_default=django.db.models.functions.datetime.Now(),
4380
+ db_index=True,
4381
+ editable=False,
4382
+ ),
4383
+ ),
4384
+ (
4385
+ "schema",
4386
+ models.ForeignKey(
4387
+ on_delete=django.db.models.deletion.CASCADE,
4388
+ related_name="blocks",
4389
+ to="lamindb.schema",
4390
+ ),
4391
+ ),
4392
+ (
4393
+ "created_by",
4394
+ models.ForeignKey(
4395
+ default=None,
4396
+ null=True,
4397
+ on_delete=django.db.models.deletion.CASCADE,
4398
+ related_name="+",
4399
+ to="lamindb.user",
4400
+ ),
4401
+ ),
4402
+ ],
4403
+ ),
4220
4404
  migrations.AddField(
4221
- model_name="reference",
4405
+ model_name="schema",
4222
4406
  name="created_by",
4223
4407
  field=lamindb.base.fields.ForeignKey(
4224
4408
  blank=True,
@@ -4229,8 +4413,150 @@ class Migration(migrations.Migration):
4229
4413
  to="lamindb.user",
4230
4414
  ),
4231
4415
  ),
4416
+ migrations.CreateModel(
4417
+ name="RunBlock",
4418
+ fields=[
4419
+ (
4420
+ "version",
4421
+ lamindb.base.fields.CharField(
4422
+ blank=True,
4423
+ db_index=True,
4424
+ default=None,
4425
+ max_length=30,
4426
+ null=True,
4427
+ ),
4428
+ ),
4429
+ (
4430
+ "is_latest",
4431
+ lamindb.base.fields.BooleanField(
4432
+ blank=True, db_index=True, default=True
4433
+ ),
4434
+ ),
4435
+ ("id", models.BigAutoField(primary_key=True, serialize=False)),
4436
+ (
4437
+ "uid",
4438
+ models.CharField(
4439
+ db_index=True, editable=False, max_length=20, unique=True
4440
+ ),
4441
+ ),
4442
+ ("content", models.TextField()),
4443
+ ("hash", models.CharField(db_index=True, max_length=22, null=True)),
4444
+ (
4445
+ "type",
4446
+ models.CharField(
4447
+ db_default="mdpage",
4448
+ db_index=True,
4449
+ default="mdpage",
4450
+ max_length=22,
4451
+ ),
4452
+ ),
4453
+ (
4454
+ "vertical_pos",
4455
+ models.FloatField(db_default=0, db_index=True, default=0),
4456
+ ),
4457
+ (
4458
+ "created_at",
4459
+ models.DateTimeField(
4460
+ db_default=django.db.models.functions.datetime.Now(),
4461
+ db_index=True,
4462
+ editable=False,
4463
+ ),
4464
+ ),
4465
+ (
4466
+ "run",
4467
+ models.ForeignKey(
4468
+ on_delete=django.db.models.deletion.CASCADE,
4469
+ related_name="blocks",
4470
+ to="lamindb.run",
4471
+ ),
4472
+ ),
4473
+ (
4474
+ "created_by",
4475
+ models.ForeignKey(
4476
+ default=None,
4477
+ null=True,
4478
+ on_delete=django.db.models.deletion.CASCADE,
4479
+ related_name="+",
4480
+ to="lamindb.user",
4481
+ ),
4482
+ ),
4483
+ ],
4484
+ ),
4232
4485
  migrations.AddField(
4233
- model_name="record",
4486
+ model_name="run",
4487
+ name="created_by",
4488
+ field=lamindb.base.fields.ForeignKey(
4489
+ blank=True,
4490
+ default=lamindb.base.users.current_user_id,
4491
+ on_delete=django.db.models.deletion.CASCADE,
4492
+ related_name="created_runs",
4493
+ to="lamindb.user",
4494
+ ),
4495
+ ),
4496
+ migrations.CreateModel(
4497
+ name="RootBlock",
4498
+ fields=[
4499
+ (
4500
+ "version",
4501
+ lamindb.base.fields.CharField(
4502
+ blank=True,
4503
+ db_index=True,
4504
+ default=None,
4505
+ max_length=30,
4506
+ null=True,
4507
+ ),
4508
+ ),
4509
+ (
4510
+ "is_latest",
4511
+ lamindb.base.fields.BooleanField(
4512
+ blank=True, db_index=True, default=True
4513
+ ),
4514
+ ),
4515
+ ("id", models.BigAutoField(primary_key=True, serialize=False)),
4516
+ (
4517
+ "uid",
4518
+ models.CharField(
4519
+ db_index=True, editable=False, max_length=20, unique=True
4520
+ ),
4521
+ ),
4522
+ ("content", models.TextField()),
4523
+ ("hash", models.CharField(db_index=True, max_length=22, null=True)),
4524
+ (
4525
+ "type",
4526
+ models.CharField(
4527
+ db_default="mdpage",
4528
+ db_index=True,
4529
+ default="mdpage",
4530
+ max_length=22,
4531
+ ),
4532
+ ),
4533
+ (
4534
+ "vertical_pos",
4535
+ models.FloatField(db_default=0, db_index=True, default=0),
4536
+ ),
4537
+ (
4538
+ "created_at",
4539
+ models.DateTimeField(
4540
+ db_default=django.db.models.functions.datetime.Now(),
4541
+ db_index=True,
4542
+ editable=False,
4543
+ ),
4544
+ ),
4545
+ ("name", models.CharField(db_index=True, max_length=255)),
4546
+ (
4547
+ "created_by",
4548
+ models.ForeignKey(
4549
+ default=None,
4550
+ null=True,
4551
+ on_delete=django.db.models.deletion.CASCADE,
4552
+ related_name="+",
4553
+ to="lamindb.user",
4554
+ ),
4555
+ ),
4556
+ ],
4557
+ ),
4558
+ migrations.AddField(
4559
+ model_name="referencerecord",
4234
4560
  name="created_by",
4235
4561
  field=lamindb.base.fields.ForeignKey(
4236
4562
  blank=True,
@@ -4242,7 +4568,7 @@ class Migration(migrations.Migration):
4242
4568
  ),
4243
4569
  ),
4244
4570
  migrations.AddField(
4245
- model_name="projectrecord",
4571
+ model_name="reference",
4246
4572
  name="created_by",
4247
4573
  field=lamindb.base.fields.ForeignKey(
4248
4574
  blank=True,
@@ -4253,8 +4579,111 @@ class Migration(migrations.Migration):
4253
4579
  to="lamindb.user",
4254
4580
  ),
4255
4581
  ),
4582
+ migrations.CreateModel(
4583
+ name="RecordUser",
4584
+ fields=[
4585
+ ("id", models.BigAutoField(primary_key=True, serialize=False)),
4586
+ (
4587
+ "feature",
4588
+ lamindb.base.fields.ForeignKey(
4589
+ blank=True,
4590
+ on_delete=django.db.models.deletion.PROTECT,
4591
+ related_name="links_recorduser",
4592
+ to="lamindb.feature",
4593
+ ),
4594
+ ),
4595
+ (
4596
+ "record",
4597
+ lamindb.base.fields.ForeignKey(
4598
+ blank=True,
4599
+ on_delete=django.db.models.deletion.CASCADE,
4600
+ related_name="values_user",
4601
+ to="lamindb.record",
4602
+ ),
4603
+ ),
4604
+ (
4605
+ "value",
4606
+ lamindb.base.fields.ForeignKey(
4607
+ blank=True,
4608
+ on_delete=django.db.models.deletion.PROTECT,
4609
+ related_name="links_record",
4610
+ to="lamindb.user",
4611
+ ),
4612
+ ),
4613
+ ],
4614
+ bases=(models.Model, lamindb.models.sqlrecord.IsLink),
4615
+ ),
4616
+ migrations.CreateModel(
4617
+ name="RecordBlock",
4618
+ fields=[
4619
+ (
4620
+ "version",
4621
+ lamindb.base.fields.CharField(
4622
+ blank=True,
4623
+ db_index=True,
4624
+ default=None,
4625
+ max_length=30,
4626
+ null=True,
4627
+ ),
4628
+ ),
4629
+ (
4630
+ "is_latest",
4631
+ lamindb.base.fields.BooleanField(
4632
+ blank=True, db_index=True, default=True
4633
+ ),
4634
+ ),
4635
+ ("id", models.BigAutoField(primary_key=True, serialize=False)),
4636
+ (
4637
+ "uid",
4638
+ models.CharField(
4639
+ db_index=True, editable=False, max_length=20, unique=True
4640
+ ),
4641
+ ),
4642
+ ("content", models.TextField()),
4643
+ ("hash", models.CharField(db_index=True, max_length=22, null=True)),
4644
+ (
4645
+ "type",
4646
+ models.CharField(
4647
+ db_default="mdpage",
4648
+ db_index=True,
4649
+ default="mdpage",
4650
+ max_length=22,
4651
+ ),
4652
+ ),
4653
+ (
4654
+ "vertical_pos",
4655
+ models.FloatField(db_default=0, db_index=True, default=0),
4656
+ ),
4657
+ (
4658
+ "created_at",
4659
+ models.DateTimeField(
4660
+ db_default=django.db.models.functions.datetime.Now(),
4661
+ db_index=True,
4662
+ editable=False,
4663
+ ),
4664
+ ),
4665
+ (
4666
+ "record",
4667
+ models.ForeignKey(
4668
+ on_delete=django.db.models.deletion.CASCADE,
4669
+ related_name="blocks",
4670
+ to="lamindb.record",
4671
+ ),
4672
+ ),
4673
+ (
4674
+ "created_by",
4675
+ models.ForeignKey(
4676
+ default=None,
4677
+ null=True,
4678
+ on_delete=django.db.models.deletion.CASCADE,
4679
+ related_name="+",
4680
+ to="lamindb.user",
4681
+ ),
4682
+ ),
4683
+ ],
4684
+ ),
4256
4685
  migrations.AddField(
4257
- model_name="project",
4686
+ model_name="record",
4258
4687
  name="created_by",
4259
4688
  field=lamindb.base.fields.ForeignKey(
4260
4689
  blank=True,
@@ -4266,7 +4695,14 @@ class Migration(migrations.Migration):
4266
4695
  ),
4267
4696
  ),
4268
4697
  migrations.AddField(
4269
- model_name="personproject",
4698
+ model_name="record",
4699
+ name="linked_users",
4700
+ field=models.ManyToManyField(
4701
+ related_name="records", through="lamindb.RecordUser", to="lamindb.user"
4702
+ ),
4703
+ ),
4704
+ migrations.AddField(
4705
+ model_name="projectrecord",
4270
4706
  name="created_by",
4271
4707
  field=lamindb.base.fields.ForeignKey(
4272
4708
  blank=True,
@@ -4277,8 +4713,77 @@ class Migration(migrations.Migration):
4277
4713
  to="lamindb.user",
4278
4714
  ),
4279
4715
  ),
4716
+ migrations.CreateModel(
4717
+ name="ProjectBlock",
4718
+ fields=[
4719
+ (
4720
+ "version",
4721
+ lamindb.base.fields.CharField(
4722
+ blank=True,
4723
+ db_index=True,
4724
+ default=None,
4725
+ max_length=30,
4726
+ null=True,
4727
+ ),
4728
+ ),
4729
+ (
4730
+ "is_latest",
4731
+ lamindb.base.fields.BooleanField(
4732
+ blank=True, db_index=True, default=True
4733
+ ),
4734
+ ),
4735
+ ("id", models.BigAutoField(primary_key=True, serialize=False)),
4736
+ (
4737
+ "uid",
4738
+ models.CharField(
4739
+ db_index=True, editable=False, max_length=20, unique=True
4740
+ ),
4741
+ ),
4742
+ ("content", models.TextField()),
4743
+ ("hash", models.CharField(db_index=True, max_length=22, null=True)),
4744
+ (
4745
+ "type",
4746
+ models.CharField(
4747
+ db_default="mdpage",
4748
+ db_index=True,
4749
+ default="mdpage",
4750
+ max_length=22,
4751
+ ),
4752
+ ),
4753
+ (
4754
+ "vertical_pos",
4755
+ models.FloatField(db_default=0, db_index=True, default=0),
4756
+ ),
4757
+ (
4758
+ "created_at",
4759
+ models.DateTimeField(
4760
+ db_default=django.db.models.functions.datetime.Now(),
4761
+ db_index=True,
4762
+ editable=False,
4763
+ ),
4764
+ ),
4765
+ (
4766
+ "project",
4767
+ models.ForeignKey(
4768
+ on_delete=django.db.models.deletion.CASCADE,
4769
+ related_name="blocks",
4770
+ to="lamindb.project",
4771
+ ),
4772
+ ),
4773
+ (
4774
+ "created_by",
4775
+ models.ForeignKey(
4776
+ default=None,
4777
+ null=True,
4778
+ on_delete=django.db.models.deletion.CASCADE,
4779
+ related_name="+",
4780
+ to="lamindb.user",
4781
+ ),
4782
+ ),
4783
+ ],
4784
+ ),
4280
4785
  migrations.AddField(
4281
- model_name="person",
4786
+ model_name="project",
4282
4787
  name="created_by",
4283
4788
  field=lamindb.base.fields.ForeignKey(
4284
4789
  blank=True,
@@ -4313,6 +4818,75 @@ class Migration(migrations.Migration):
4313
4818
  to="lamindb.user",
4314
4819
  ),
4315
4820
  ),
4821
+ migrations.CreateModel(
4822
+ name="FeatureBlock",
4823
+ fields=[
4824
+ (
4825
+ "version",
4826
+ lamindb.base.fields.CharField(
4827
+ blank=True,
4828
+ db_index=True,
4829
+ default=None,
4830
+ max_length=30,
4831
+ null=True,
4832
+ ),
4833
+ ),
4834
+ (
4835
+ "is_latest",
4836
+ lamindb.base.fields.BooleanField(
4837
+ blank=True, db_index=True, default=True
4838
+ ),
4839
+ ),
4840
+ ("id", models.BigAutoField(primary_key=True, serialize=False)),
4841
+ (
4842
+ "uid",
4843
+ models.CharField(
4844
+ db_index=True, editable=False, max_length=20, unique=True
4845
+ ),
4846
+ ),
4847
+ ("content", models.TextField()),
4848
+ ("hash", models.CharField(db_index=True, max_length=22, null=True)),
4849
+ (
4850
+ "type",
4851
+ models.CharField(
4852
+ db_default="mdpage",
4853
+ db_index=True,
4854
+ default="mdpage",
4855
+ max_length=22,
4856
+ ),
4857
+ ),
4858
+ (
4859
+ "vertical_pos",
4860
+ models.FloatField(db_default=0, db_index=True, default=0),
4861
+ ),
4862
+ (
4863
+ "created_at",
4864
+ models.DateTimeField(
4865
+ db_default=django.db.models.functions.datetime.Now(),
4866
+ db_index=True,
4867
+ editable=False,
4868
+ ),
4869
+ ),
4870
+ (
4871
+ "feature",
4872
+ models.ForeignKey(
4873
+ on_delete=django.db.models.deletion.CASCADE,
4874
+ related_name="blocks",
4875
+ to="lamindb.feature",
4876
+ ),
4877
+ ),
4878
+ (
4879
+ "created_by",
4880
+ models.ForeignKey(
4881
+ default=None,
4882
+ null=True,
4883
+ on_delete=django.db.models.deletion.CASCADE,
4884
+ related_name="+",
4885
+ to="lamindb.user",
4886
+ ),
4887
+ ),
4888
+ ],
4889
+ ),
4316
4890
  migrations.AddField(
4317
4891
  model_name="feature",
4318
4892
  name="created_by",
@@ -4349,6 +4923,76 @@ class Migration(migrations.Migration):
4349
4923
  to="lamindb.user",
4350
4924
  ),
4351
4925
  ),
4926
+ migrations.CreateModel(
4927
+ name="CollectionBlock",
4928
+ fields=[
4929
+ (
4930
+ "version",
4931
+ lamindb.base.fields.CharField(
4932
+ blank=True,
4933
+ db_index=True,
4934
+ default=None,
4935
+ max_length=30,
4936
+ null=True,
4937
+ ),
4938
+ ),
4939
+ (
4940
+ "is_latest",
4941
+ lamindb.base.fields.BooleanField(
4942
+ blank=True, db_index=True, default=True
4943
+ ),
4944
+ ),
4945
+ ("id", models.BigAutoField(primary_key=True, serialize=False)),
4946
+ (
4947
+ "uid",
4948
+ models.CharField(
4949
+ db_index=True, editable=False, max_length=20, unique=True
4950
+ ),
4951
+ ),
4952
+ ("content", models.TextField()),
4953
+ ("hash", models.CharField(db_index=True, max_length=22, null=True)),
4954
+ (
4955
+ "type",
4956
+ models.CharField(
4957
+ db_default="mdpage",
4958
+ db_index=True,
4959
+ default="mdpage",
4960
+ max_length=22,
4961
+ ),
4962
+ ),
4963
+ (
4964
+ "vertical_pos",
4965
+ models.FloatField(db_default=0, db_index=True, default=0),
4966
+ ),
4967
+ (
4968
+ "created_at",
4969
+ models.DateTimeField(
4970
+ db_default=django.db.models.functions.datetime.Now(),
4971
+ db_index=True,
4972
+ editable=False,
4973
+ ),
4974
+ ),
4975
+ (
4976
+ "collection",
4977
+ models.ForeignKey(
4978
+ null=True,
4979
+ on_delete=django.db.models.deletion.CASCADE,
4980
+ related_name="blocks",
4981
+ to="lamindb.collection",
4982
+ ),
4983
+ ),
4984
+ (
4985
+ "created_by",
4986
+ models.ForeignKey(
4987
+ default=None,
4988
+ null=True,
4989
+ on_delete=django.db.models.deletion.CASCADE,
4990
+ related_name="+",
4991
+ to="lamindb.user",
4992
+ ),
4993
+ ),
4994
+ ],
4995
+ ),
4352
4996
  migrations.AddField(
4353
4997
  model_name="collectionartifact",
4354
4998
  name="created_by",
@@ -4373,6 +5017,75 @@ class Migration(migrations.Migration):
4373
5017
  to="lamindb.user",
4374
5018
  ),
4375
5019
  ),
5020
+ migrations.CreateModel(
5021
+ name="BranchBlock",
5022
+ fields=[
5023
+ (
5024
+ "version",
5025
+ lamindb.base.fields.CharField(
5026
+ blank=True,
5027
+ db_index=True,
5028
+ default=None,
5029
+ max_length=30,
5030
+ null=True,
5031
+ ),
5032
+ ),
5033
+ (
5034
+ "is_latest",
5035
+ lamindb.base.fields.BooleanField(
5036
+ blank=True, db_index=True, default=True
5037
+ ),
5038
+ ),
5039
+ ("id", models.BigAutoField(primary_key=True, serialize=False)),
5040
+ (
5041
+ "uid",
5042
+ models.CharField(
5043
+ db_index=True, editable=False, max_length=20, unique=True
5044
+ ),
5045
+ ),
5046
+ ("content", models.TextField()),
5047
+ ("hash", models.CharField(db_index=True, max_length=22, null=True)),
5048
+ (
5049
+ "type",
5050
+ models.CharField(
5051
+ db_default="mdpage",
5052
+ db_index=True,
5053
+ default="mdpage",
5054
+ max_length=22,
5055
+ ),
5056
+ ),
5057
+ (
5058
+ "vertical_pos",
5059
+ models.FloatField(db_default=0, db_index=True, default=0),
5060
+ ),
5061
+ (
5062
+ "created_at",
5063
+ models.DateTimeField(
5064
+ db_default=django.db.models.functions.datetime.Now(),
5065
+ db_index=True,
5066
+ editable=False,
5067
+ ),
5068
+ ),
5069
+ (
5070
+ "branch",
5071
+ models.ForeignKey(
5072
+ on_delete=django.db.models.deletion.CASCADE,
5073
+ related_name="blocks",
5074
+ to="lamindb.branch",
5075
+ ),
5076
+ ),
5077
+ (
5078
+ "created_by",
5079
+ models.ForeignKey(
5080
+ default=None,
5081
+ null=True,
5082
+ on_delete=django.db.models.deletion.CASCADE,
5083
+ related_name="+",
5084
+ to="lamindb.user",
5085
+ ),
5086
+ ),
5087
+ ],
5088
+ ),
4376
5089
  migrations.AddField(
4377
5090
  model_name="branch",
4378
5091
  name="created_by",
@@ -4421,6 +5134,75 @@ class Migration(migrations.Migration):
4421
5134
  to="lamindb.user",
4422
5135
  ),
4423
5136
  ),
5137
+ migrations.CreateModel(
5138
+ name="ArtifactBlock",
5139
+ fields=[
5140
+ (
5141
+ "version",
5142
+ lamindb.base.fields.CharField(
5143
+ blank=True,
5144
+ db_index=True,
5145
+ default=None,
5146
+ max_length=30,
5147
+ null=True,
5148
+ ),
5149
+ ),
5150
+ (
5151
+ "is_latest",
5152
+ lamindb.base.fields.BooleanField(
5153
+ blank=True, db_index=True, default=True
5154
+ ),
5155
+ ),
5156
+ ("id", models.BigAutoField(primary_key=True, serialize=False)),
5157
+ (
5158
+ "uid",
5159
+ models.CharField(
5160
+ db_index=True, editable=False, max_length=20, unique=True
5161
+ ),
5162
+ ),
5163
+ ("content", models.TextField()),
5164
+ ("hash", models.CharField(db_index=True, max_length=22, null=True)),
5165
+ (
5166
+ "type",
5167
+ models.CharField(
5168
+ db_default="mdpage",
5169
+ db_index=True,
5170
+ default="mdpage",
5171
+ max_length=22,
5172
+ ),
5173
+ ),
5174
+ (
5175
+ "vertical_pos",
5176
+ models.FloatField(db_default=0, db_index=True, default=0),
5177
+ ),
5178
+ (
5179
+ "created_at",
5180
+ models.DateTimeField(
5181
+ db_default=django.db.models.functions.datetime.Now(),
5182
+ db_index=True,
5183
+ editable=False,
5184
+ ),
5185
+ ),
5186
+ (
5187
+ "artifact",
5188
+ models.ForeignKey(
5189
+ on_delete=django.db.models.deletion.CASCADE,
5190
+ related_name="blocks",
5191
+ to="lamindb.artifact",
5192
+ ),
5193
+ ),
5194
+ (
5195
+ "created_by",
5196
+ models.ForeignKey(
5197
+ default=None,
5198
+ null=True,
5199
+ on_delete=django.db.models.deletion.CASCADE,
5200
+ related_name="+",
5201
+ to="lamindb.user",
5202
+ ),
5203
+ ),
5204
+ ],
5205
+ ),
4424
5206
  migrations.AddField(
4425
5207
  model_name="artifact",
4426
5208
  name="created_by",
@@ -4507,12 +5289,22 @@ class Migration(migrations.Migration):
4507
5289
  unique_together={("run", "featurevalue")},
4508
5290
  ),
4509
5291
  migrations.AlterUniqueTogether(
4510
- name="projectrecord",
4511
- unique_together={("record", "project", "feature")},
5292
+ name="referencerecord",
5293
+ unique_together={("reference", "feature", "record")},
4512
5294
  ),
4513
5295
  migrations.AlterUniqueTogether(
4514
- name="personproject",
4515
- unique_together={("person", "project")},
5296
+ name="recorduser",
5297
+ unique_together={("record", "feature", "value")},
5298
+ ),
5299
+ migrations.AddConstraint(
5300
+ model_name="record",
5301
+ constraint=models.UniqueConstraint(
5302
+ fields=("name", "type", "space"), name="unique_name_type_space"
5303
+ ),
5304
+ ),
5305
+ migrations.AlterUniqueTogether(
5306
+ name="projectrecord",
5307
+ unique_together={("project", "feature", "record")},
4516
5308
  ),
4517
5309
  migrations.AlterUniqueTogether(
4518
5310
  name="featurevalue",
@@ -4522,6 +5314,15 @@ class Migration(migrations.Migration):
4522
5314
  name="featureproject",
4523
5315
  unique_together={("feature", "project")},
4524
5316
  ),
5317
+ migrations.AddConstraint(
5318
+ model_name="feature",
5319
+ constraint=models.CheckConstraint(
5320
+ condition=models.Q(
5321
+ ("is_type", True), ("dtype__isnull", False), _connector="OR"
5322
+ ),
5323
+ name="dtype_not_null_when_is_type_false",
5324
+ ),
5325
+ ),
4525
5326
  migrations.AlterUniqueTogether(
4526
5327
  name="collectionulabel",
4527
5328
  unique_together={("collection", "ulabel")},
@@ -4581,8 +5382,96 @@ class Migration(migrations.Migration):
4581
5382
  name="unique_artifact_storage_hash_null_key",
4582
5383
  ),
4583
5384
  ),
4584
- migrations.AlterModelOptions(
4585
- name="user",
4586
- options={},
5385
+ migrations.CreateModel(
5386
+ name="ArtifactUser",
5387
+ fields=[
5388
+ (
5389
+ "created_at",
5390
+ lamindb.base.fields.DateTimeField(
5391
+ blank=True,
5392
+ db_default=django.db.models.functions.datetime.Now(),
5393
+ db_index=True,
5394
+ editable=False,
5395
+ ),
5396
+ ),
5397
+ ("id", models.BigAutoField(primary_key=True, serialize=False)),
5398
+ (
5399
+ "label_ref_is_name",
5400
+ lamindb.base.fields.BooleanField(
5401
+ blank=True, default=None, null=True
5402
+ ),
5403
+ ),
5404
+ (
5405
+ "feature_ref_is_name",
5406
+ lamindb.base.fields.BooleanField(
5407
+ blank=True, default=None, null=True
5408
+ ),
5409
+ ),
5410
+ (
5411
+ "artifact",
5412
+ lamindb.base.fields.ForeignKey(
5413
+ blank=True,
5414
+ on_delete=django.db.models.deletion.CASCADE,
5415
+ related_name="links_user",
5416
+ to="lamindb.artifact",
5417
+ ),
5418
+ ),
5419
+ (
5420
+ "created_by",
5421
+ lamindb.base.fields.ForeignKey(
5422
+ blank=True,
5423
+ default=lamindb.base.users.current_user_id,
5424
+ editable=False,
5425
+ on_delete=django.db.models.deletion.PROTECT,
5426
+ related_name="+",
5427
+ to="lamindb.user",
5428
+ ),
5429
+ ),
5430
+ (
5431
+ "feature",
5432
+ lamindb.base.fields.ForeignKey(
5433
+ blank=True,
5434
+ default=None,
5435
+ null=True,
5436
+ on_delete=django.db.models.deletion.PROTECT,
5437
+ related_name="links_artifactuser",
5438
+ to="lamindb.feature",
5439
+ ),
5440
+ ),
5441
+ (
5442
+ "run",
5443
+ lamindb.base.fields.ForeignKey(
5444
+ blank=True,
5445
+ default=lamindb.models.run.current_run,
5446
+ null=True,
5447
+ on_delete=django.db.models.deletion.PROTECT,
5448
+ related_name="+",
5449
+ to="lamindb.run",
5450
+ ),
5451
+ ),
5452
+ (
5453
+ "user",
5454
+ lamindb.base.fields.ForeignKey(
5455
+ blank=True,
5456
+ on_delete=django.db.models.deletion.PROTECT,
5457
+ related_name="links_artifact",
5458
+ to="lamindb.user",
5459
+ ),
5460
+ ),
5461
+ ],
5462
+ options={
5463
+ "unique_together": {("artifact", "user", "feature")},
5464
+ },
5465
+ bases=(lamindb.models.sqlrecord.IsLink, models.Model),
5466
+ ),
5467
+ migrations.AddField(
5468
+ model_name="artifact",
5469
+ name="users",
5470
+ field=models.ManyToManyField(
5471
+ related_name="+", through="lamindb.ArtifactUser", to="lamindb.user"
5472
+ ),
5473
+ ),
5474
+ migrations.RunPython(
5475
+ apply_postgres_constraint, reverse_code=revert_postgres_constraint
4587
5476
  ),
4588
5477
  ]