lamindb 0.77.2__py3-none-any.whl → 1.0rc1__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 (89) hide show
  1. lamindb/__init__.py +39 -32
  2. lamindb/_artifact.py +95 -64
  3. lamindb/_can_curate.py +19 -10
  4. lamindb/_collection.py +51 -49
  5. lamindb/_feature.py +9 -9
  6. lamindb/_finish.py +99 -86
  7. lamindb/_from_values.py +20 -17
  8. lamindb/_is_versioned.py +2 -1
  9. lamindb/_parents.py +23 -16
  10. lamindb/_query_manager.py +3 -3
  11. lamindb/_query_set.py +85 -18
  12. lamindb/_record.py +121 -46
  13. lamindb/_run.py +3 -3
  14. lamindb/_save.py +14 -8
  15. lamindb/{_feature_set.py → _schema.py} +34 -31
  16. lamindb/_storage.py +2 -1
  17. lamindb/_transform.py +51 -23
  18. lamindb/_ulabel.py +17 -8
  19. lamindb/_view.py +15 -14
  20. lamindb/base/__init__.py +24 -0
  21. lamindb/base/fields.py +281 -0
  22. lamindb/base/ids.py +103 -0
  23. lamindb/base/types.py +51 -0
  24. lamindb/base/users.py +30 -0
  25. lamindb/base/validation.py +67 -0
  26. lamindb/core/__init__.py +19 -14
  27. lamindb/core/_context.py +297 -228
  28. lamindb/core/_data.py +44 -49
  29. lamindb/core/_describe.py +41 -31
  30. lamindb/core/_django.py +59 -44
  31. lamindb/core/_feature_manager.py +192 -168
  32. lamindb/core/_label_manager.py +22 -22
  33. lamindb/core/_mapped_collection.py +17 -14
  34. lamindb/core/_settings.py +1 -12
  35. lamindb/core/_sync_git.py +56 -9
  36. lamindb/core/_track_environment.py +1 -1
  37. lamindb/core/datasets/_core.py +5 -6
  38. lamindb/core/exceptions.py +0 -7
  39. lamindb/core/fields.py +1 -1
  40. lamindb/core/loaders.py +18 -2
  41. lamindb/core/{schema.py → relations.py} +22 -19
  42. lamindb/core/storage/_anndata_accessor.py +1 -2
  43. lamindb/core/storage/_backed_access.py +2 -1
  44. lamindb/core/storage/_tiledbsoma.py +40 -13
  45. lamindb/core/storage/objects.py +1 -1
  46. lamindb/core/storage/paths.py +13 -8
  47. lamindb/core/subsettings/__init__.py +0 -2
  48. lamindb/core/types.py +2 -23
  49. lamindb/core/versioning.py +11 -7
  50. lamindb/{_curate.py → curators/__init__.py} +700 -57
  51. lamindb/curators/_spatial.py +528 -0
  52. lamindb/integrations/_vitessce.py +1 -3
  53. lamindb/migrations/0052_squashed.py +1261 -0
  54. lamindb/migrations/0053_alter_featureset_hash_alter_paramvalue_created_by_and_more.py +57 -0
  55. lamindb/migrations/0054_alter_feature_previous_runs_and_more.py +35 -0
  56. lamindb/migrations/0055_artifact_type_artifactparamvalue_and_more.py +61 -0
  57. lamindb/migrations/0056_rename_ulabel_ref_is_name_artifactulabel_label_ref_is_name_and_more.py +22 -0
  58. lamindb/migrations/0057_link_models_latest_report_and_others.py +356 -0
  59. lamindb/migrations/0058_artifact__actions_collection__actions.py +22 -0
  60. lamindb/migrations/0059_alter_artifact__accessor_alter_artifact__hash_type_and_more.py +31 -0
  61. lamindb/migrations/0060_alter_artifact__actions.py +22 -0
  62. lamindb/migrations/0061_alter_collection_meta_artifact_alter_run_environment_and_more.py +45 -0
  63. lamindb/migrations/0062_add_is_latest_field.py +32 -0
  64. lamindb/migrations/0063_populate_latest_field.py +45 -0
  65. lamindb/migrations/0064_alter_artifact_version_alter_collection_version_and_more.py +33 -0
  66. lamindb/migrations/0065_remove_collection_feature_sets_and_more.py +22 -0
  67. lamindb/migrations/0066_alter_artifact__feature_values_and_more.py +352 -0
  68. lamindb/migrations/0067_alter_featurevalue_unique_together_and_more.py +20 -0
  69. lamindb/migrations/0068_alter_artifactulabel_unique_together_and_more.py +20 -0
  70. lamindb/migrations/0069_alter_artifact__accessor_alter_artifact__hash_type_and_more.py +1294 -0
  71. lamindb/migrations/0069_squashed.py +1770 -0
  72. lamindb/migrations/0070_lamindbv1_migrate_data.py +78 -0
  73. lamindb/migrations/0071_lamindbv1_migrate_schema.py +741 -0
  74. lamindb/migrations/0072_remove_user__branch_code_remove_user_aux_and_more.py +148 -0
  75. lamindb/migrations/0073_merge_ourprojects.py +945 -0
  76. lamindb/migrations/0074_lamindbv1_part4.py +374 -0
  77. lamindb/migrations/0075_lamindbv1_part5.py +276 -0
  78. lamindb/migrations/0076_lamindbv1_part6.py +621 -0
  79. lamindb/migrations/0077_lamindbv1_part6b.py +228 -0
  80. lamindb/migrations/0078_lamindbv1_part6c.py +468 -0
  81. lamindb/migrations/0079_alter_rundata_value_json_and_more.py +36 -0
  82. lamindb/migrations/__init__.py +0 -0
  83. lamindb/models.py +4064 -0
  84. {lamindb-0.77.2.dist-info → lamindb-1.0rc1.dist-info}/METADATA +15 -20
  85. lamindb-1.0rc1.dist-info/RECORD +100 -0
  86. {lamindb-0.77.2.dist-info → lamindb-1.0rc1.dist-info}/WHEEL +1 -1
  87. lamindb/core/subsettings/_transform_settings.py +0 -21
  88. lamindb-0.77.2.dist-info/RECORD +0 -63
  89. {lamindb-0.77.2.dist-info → lamindb-1.0rc1.dist-info}/LICENSE +0 -0
@@ -0,0 +1,945 @@
1
+ # Generated by Django 5.2 on 2025-01-13 05:55
2
+
3
+ import django.core.validators
4
+ import django.db.models.deletion
5
+ from django.db import migrations, models
6
+
7
+ import lamindb.base.fields
8
+ import lamindb.base.ids
9
+ import lamindb.base.users
10
+ import lamindb.models
11
+
12
+
13
+ def migrate_data(apps, schema_editor):
14
+ """Check if source table exists and run migration if it does."""
15
+ db = schema_editor.connection
16
+ cursor = db.cursor()
17
+
18
+ # Check if table exists - works in both SQLite and PostgreSQL
19
+ if db.vendor == "sqlite":
20
+ cursor.execute("""
21
+ SELECT count(*)
22
+ FROM sqlite_master
23
+ WHERE type='table' AND name='ourprojects_reference';
24
+ """)
25
+ else: # postgresql
26
+ cursor.execute("""
27
+ SELECT count(*)
28
+ FROM information_schema.tables
29
+ WHERE table_schema = 'public'
30
+ AND table_name = 'ourprojects_reference';
31
+ """)
32
+
33
+ table_exists = cursor.fetchone()[0] > 0
34
+ if not table_exists:
35
+ return
36
+
37
+ # Get initial counts
38
+ cursor.execute("SELECT COUNT(*) FROM ourprojects_reference")
39
+ old_count = cursor.fetchone()[0]
40
+ cursor.execute("SELECT COUNT(*) FROM lamindb_reference")
41
+ initial_target_count = cursor.fetchone()[0]
42
+
43
+ # Begin transaction
44
+ cursor.execute("BEGIN")
45
+ try:
46
+ # Copy core tables, adding empty JSON for aux field
47
+ cursor.execute("""
48
+ INSERT INTO lamindb_reference(
49
+ id, created_at, updated_at, created_by_id, uid, name, abbr, url,
50
+ pubmed_id, doi, preprint, public, journal, description, text,
51
+ published_at
52
+ )
53
+ SELECT
54
+ id, created_at, updated_at, created_by_id, uid, name, abbr, url,
55
+ pubmed_id, doi, preprint, public, journal, description, text,
56
+ published_at
57
+ FROM ourprojects_reference
58
+ """)
59
+
60
+ cursor.execute("""
61
+ INSERT INTO lamindb_person(
62
+ id, created_at, updated_at, created_by_id, uid, name, email,
63
+ external
64
+ )
65
+ SELECT
66
+ id, created_at, updated_at, created_by_id, uid, name, email,
67
+ external
68
+ FROM ourprojects_person
69
+ """)
70
+
71
+ cursor.execute("""
72
+ INSERT INTO lamindb_project(
73
+ id, created_at, updated_at, created_by_id, uid, name, abbr,
74
+ url
75
+ )
76
+ SELECT
77
+ id, created_at, updated_at, created_by_id, uid, name, abbr,
78
+ url
79
+ FROM ourprojects_project
80
+ """)
81
+
82
+ # Copy many-to-many relationships with aux field
83
+ cursor.execute("""
84
+ INSERT INTO lamindb_artifactreference(
85
+ id, created_at, created_by_id, artifact_id, reference_id,
86
+ feature_id, label_ref_is_name, feature_ref_is_name
87
+ )
88
+ SELECT
89
+ id, created_at, created_by_id, artifact_id, reference_id,
90
+ feature_id, label_ref_is_name, feature_ref_is_name
91
+ FROM ourprojects_artifactreference
92
+ """)
93
+
94
+ cursor.execute("""
95
+ INSERT INTO lamindb_transformreference(
96
+ id, created_at, created_by_id, transform_id, reference_id
97
+ )
98
+ SELECT
99
+ id, created_at, created_by_id, transform_id, reference_id
100
+ FROM ourprojects_transformreference
101
+ """)
102
+
103
+ cursor.execute("""
104
+ INSERT INTO lamindb_collectionreference(
105
+ id, created_at, created_by_id, collection_id, reference_id
106
+ )
107
+ SELECT
108
+ id, created_at, created_by_id, collection_id, reference_id
109
+ FROM ourprojects_collectionreference
110
+ """)
111
+
112
+ cursor.execute("""
113
+ INSERT INTO lamindb_artifactproject(
114
+ id, created_at, created_by_id, artifact_id, project_id,
115
+ feature_id, label_ref_is_name, feature_ref_is_name
116
+ )
117
+ SELECT
118
+ id, created_at, created_by_id, artifact_id, project_id,
119
+ feature_id, label_ref_is_name, feature_ref_is_name
120
+ FROM ourprojects_artifactproject
121
+ """)
122
+
123
+ cursor.execute("""
124
+ INSERT INTO lamindb_transformproject(
125
+ id, created_at, created_by_id, transform_id, project_id
126
+ )
127
+ SELECT
128
+ id, created_at, created_by_id, transform_id, project_id
129
+ FROM ourprojects_transformproject
130
+ """)
131
+
132
+ cursor.execute("""
133
+ INSERT INTO lamindb_collectionproject(
134
+ id, created_at, created_by_id, collection_id, project_id
135
+ )
136
+ SELECT
137
+ id, created_at, created_by_id, collection_id, project_id
138
+ FROM ourprojects_collectionproject
139
+ """)
140
+
141
+ # Verify migration
142
+ cursor.execute("SELECT COUNT(*) FROM lamindb_reference")
143
+ final_count = cursor.fetchone()[0]
144
+ expected_count = initial_target_count + old_count
145
+
146
+ if final_count == expected_count:
147
+ # Clean up ourprojects content
148
+ cursor.execute("DELETE FROM django_migrations WHERE app = 'ourprojects'")
149
+
150
+ # Drop tables - using standard SQL
151
+ tables = [
152
+ "ourprojects_reference",
153
+ "ourprojects_person",
154
+ "ourprojects_project",
155
+ "ourprojects_artifactreference",
156
+ "ourprojects_transformreference",
157
+ "ourprojects_collectionreference",
158
+ "ourprojects_artifactproject",
159
+ "ourprojects_transformproject",
160
+ "ourprojects_collectionproject",
161
+ ]
162
+
163
+ for table in tables:
164
+ if db.vendor == "sqlite":
165
+ cursor.execute(f"DROP TABLE IF EXISTS {table}")
166
+ else: # postgresql
167
+ cursor.execute(f"DROP TABLE IF EXISTS {table} CASCADE")
168
+
169
+ cursor.execute("COMMIT")
170
+ print(
171
+ "Data migration from ourprojects to lamindb successful, you can now access ourprojects data through lamindb"
172
+ )
173
+ else:
174
+ cursor.execute("ROLLBACK")
175
+ raise Exception("Migration failed: Record count mismatch")
176
+
177
+ except Exception as e:
178
+ cursor.execute("ROLLBACK")
179
+ raise e
180
+
181
+
182
+ class Migration(migrations.Migration):
183
+ dependencies = [
184
+ ("lamindb", "0072_remove_user__branch_code_remove_user_aux_and_more"),
185
+ ]
186
+
187
+ operations = [
188
+ migrations.CreateModel(
189
+ name="ArtifactProject",
190
+ fields=[
191
+ (
192
+ "created_at",
193
+ lamindb.base.fields.DateTimeField(auto_now_add=True, db_index=True),
194
+ ),
195
+ ("id", models.BigAutoField(primary_key=True, serialize=False)),
196
+ (
197
+ "label_ref_is_name",
198
+ lamindb.base.fields.BooleanField(
199
+ blank=True, default=None, null=True
200
+ ),
201
+ ),
202
+ (
203
+ "feature_ref_is_name",
204
+ lamindb.base.fields.BooleanField(
205
+ blank=True, default=None, null=True
206
+ ),
207
+ ),
208
+ (
209
+ "artifact",
210
+ lamindb.base.fields.ForeignKey(
211
+ blank=True,
212
+ on_delete=django.db.models.deletion.CASCADE,
213
+ related_name="links_project",
214
+ to="lamindb.artifact",
215
+ ),
216
+ ),
217
+ (
218
+ "created_by",
219
+ lamindb.base.fields.ForeignKey(
220
+ blank=True,
221
+ default=lamindb.base.users.current_user_id,
222
+ on_delete=django.db.models.deletion.PROTECT,
223
+ related_name="+",
224
+ to="lamindb.user",
225
+ ),
226
+ ),
227
+ (
228
+ "feature",
229
+ lamindb.base.fields.ForeignKey(
230
+ blank=True,
231
+ default=None,
232
+ null=True,
233
+ on_delete=django.db.models.deletion.PROTECT,
234
+ related_name="links_artifactproject",
235
+ to="lamindb.feature",
236
+ ),
237
+ ),
238
+ (
239
+ "run",
240
+ lamindb.base.fields.ForeignKey(
241
+ blank=True,
242
+ default=lamindb.models.current_run,
243
+ null=True,
244
+ on_delete=django.db.models.deletion.PROTECT,
245
+ related_name="+",
246
+ to="lamindb.run",
247
+ ),
248
+ ),
249
+ ],
250
+ bases=(lamindb.models.LinkORM, models.Model),
251
+ ),
252
+ migrations.CreateModel(
253
+ name="ArtifactReference",
254
+ fields=[
255
+ (
256
+ "created_at",
257
+ lamindb.base.fields.DateTimeField(auto_now_add=True, db_index=True),
258
+ ),
259
+ ("id", models.BigAutoField(primary_key=True, serialize=False)),
260
+ (
261
+ "label_ref_is_name",
262
+ lamindb.base.fields.BooleanField(
263
+ blank=True, default=None, null=True
264
+ ),
265
+ ),
266
+ (
267
+ "feature_ref_is_name",
268
+ lamindb.base.fields.BooleanField(
269
+ blank=True, default=None, null=True
270
+ ),
271
+ ),
272
+ (
273
+ "artifact",
274
+ lamindb.base.fields.ForeignKey(
275
+ blank=True,
276
+ on_delete=django.db.models.deletion.CASCADE,
277
+ related_name="links_reference",
278
+ to="lamindb.artifact",
279
+ ),
280
+ ),
281
+ (
282
+ "created_by",
283
+ lamindb.base.fields.ForeignKey(
284
+ blank=True,
285
+ default=lamindb.base.users.current_user_id,
286
+ on_delete=django.db.models.deletion.PROTECT,
287
+ related_name="+",
288
+ to="lamindb.user",
289
+ ),
290
+ ),
291
+ (
292
+ "feature",
293
+ lamindb.base.fields.ForeignKey(
294
+ blank=True,
295
+ default=None,
296
+ null=True,
297
+ on_delete=django.db.models.deletion.PROTECT,
298
+ related_name="links_artifactreference",
299
+ to="lamindb.feature",
300
+ ),
301
+ ),
302
+ (
303
+ "run",
304
+ lamindb.base.fields.ForeignKey(
305
+ blank=True,
306
+ default=lamindb.models.current_run,
307
+ null=True,
308
+ on_delete=django.db.models.deletion.PROTECT,
309
+ related_name="+",
310
+ to="lamindb.run",
311
+ ),
312
+ ),
313
+ ],
314
+ bases=(lamindb.models.LinkORM, models.Model),
315
+ ),
316
+ migrations.CreateModel(
317
+ name="CollectionProject",
318
+ fields=[
319
+ (
320
+ "created_at",
321
+ lamindb.base.fields.DateTimeField(auto_now_add=True, db_index=True),
322
+ ),
323
+ ("id", models.BigAutoField(primary_key=True, serialize=False)),
324
+ (
325
+ "collection",
326
+ lamindb.base.fields.ForeignKey(
327
+ blank=True,
328
+ on_delete=django.db.models.deletion.CASCADE,
329
+ related_name="links_project",
330
+ to="lamindb.collection",
331
+ ),
332
+ ),
333
+ (
334
+ "created_by",
335
+ lamindb.base.fields.ForeignKey(
336
+ blank=True,
337
+ default=lamindb.base.users.current_user_id,
338
+ on_delete=django.db.models.deletion.PROTECT,
339
+ related_name="+",
340
+ to="lamindb.user",
341
+ ),
342
+ ),
343
+ (
344
+ "run",
345
+ lamindb.base.fields.ForeignKey(
346
+ blank=True,
347
+ default=lamindb.models.current_run,
348
+ null=True,
349
+ on_delete=django.db.models.deletion.PROTECT,
350
+ related_name="+",
351
+ to="lamindb.run",
352
+ ),
353
+ ),
354
+ ],
355
+ bases=(lamindb.models.LinkORM, models.Model),
356
+ ),
357
+ migrations.CreateModel(
358
+ name="CollectionReference",
359
+ fields=[
360
+ (
361
+ "created_at",
362
+ lamindb.base.fields.DateTimeField(auto_now_add=True, db_index=True),
363
+ ),
364
+ ("id", models.BigAutoField(primary_key=True, serialize=False)),
365
+ (
366
+ "collection",
367
+ lamindb.base.fields.ForeignKey(
368
+ blank=True,
369
+ on_delete=django.db.models.deletion.CASCADE,
370
+ related_name="links_reference",
371
+ to="lamindb.collection",
372
+ ),
373
+ ),
374
+ (
375
+ "created_by",
376
+ lamindb.base.fields.ForeignKey(
377
+ blank=True,
378
+ default=lamindb.base.users.current_user_id,
379
+ on_delete=django.db.models.deletion.PROTECT,
380
+ related_name="+",
381
+ to="lamindb.user",
382
+ ),
383
+ ),
384
+ (
385
+ "run",
386
+ lamindb.base.fields.ForeignKey(
387
+ blank=True,
388
+ default=lamindb.models.current_run,
389
+ null=True,
390
+ on_delete=django.db.models.deletion.PROTECT,
391
+ related_name="+",
392
+ to="lamindb.run",
393
+ ),
394
+ ),
395
+ ],
396
+ bases=(lamindb.models.LinkORM, models.Model),
397
+ ),
398
+ migrations.CreateModel(
399
+ name="Person",
400
+ fields=[
401
+ (
402
+ "created_at",
403
+ lamindb.base.fields.DateTimeField(auto_now_add=True, db_index=True),
404
+ ),
405
+ (
406
+ "updated_at",
407
+ lamindb.base.fields.DateTimeField(auto_now=True, db_index=True),
408
+ ),
409
+ (
410
+ "_branch_code",
411
+ models.SmallIntegerField(db_default=1, db_index=True, default=1),
412
+ ),
413
+ ("aux", models.JSONField(db_default=None, default=None, null=True)),
414
+ ("id", models.AutoField(primary_key=True, serialize=False)),
415
+ (
416
+ "uid",
417
+ lamindb.base.fields.CharField(
418
+ blank=True,
419
+ db_index=True,
420
+ default=lamindb.base.ids.base62_8,
421
+ max_length=8,
422
+ unique=True,
423
+ ),
424
+ ),
425
+ (
426
+ "name",
427
+ lamindb.base.fields.CharField(
428
+ blank=True, db_index=True, default=None, max_length=255
429
+ ),
430
+ ),
431
+ (
432
+ "email",
433
+ lamindb.base.fields.EmailField(
434
+ blank=True, default=None, max_length=254, null=True
435
+ ),
436
+ ),
437
+ (
438
+ "external",
439
+ lamindb.base.fields.BooleanField(
440
+ blank=True, db_index=True, default=True
441
+ ),
442
+ ),
443
+ (
444
+ "created_by",
445
+ lamindb.base.fields.ForeignKey(
446
+ blank=True,
447
+ default=lamindb.base.users.current_user_id,
448
+ on_delete=django.db.models.deletion.PROTECT,
449
+ related_name="+",
450
+ to="lamindb.user",
451
+ ),
452
+ ),
453
+ (
454
+ "run",
455
+ lamindb.base.fields.ForeignKey(
456
+ blank=True,
457
+ default=lamindb.models.current_run,
458
+ null=True,
459
+ on_delete=django.db.models.deletion.PROTECT,
460
+ related_name="+",
461
+ to="lamindb.run",
462
+ ),
463
+ ),
464
+ (
465
+ "space",
466
+ lamindb.base.fields.ForeignKey(
467
+ blank=True,
468
+ db_default=1,
469
+ default=1,
470
+ on_delete=django.db.models.deletion.PROTECT,
471
+ to="lamindb.space",
472
+ ),
473
+ ),
474
+ ],
475
+ options={
476
+ "abstract": False,
477
+ },
478
+ bases=(
479
+ lamindb.models.CanCurate,
480
+ models.Model,
481
+ lamindb.models.ValidateFields,
482
+ ),
483
+ ),
484
+ migrations.CreateModel(
485
+ name="Project",
486
+ fields=[
487
+ (
488
+ "created_at",
489
+ lamindb.base.fields.DateTimeField(auto_now_add=True, db_index=True),
490
+ ),
491
+ (
492
+ "updated_at",
493
+ lamindb.base.fields.DateTimeField(auto_now=True, db_index=True),
494
+ ),
495
+ (
496
+ "_branch_code",
497
+ models.SmallIntegerField(db_default=1, db_index=True, default=1),
498
+ ),
499
+ ("aux", models.JSONField(db_default=None, default=None, null=True)),
500
+ ("id", models.AutoField(primary_key=True, serialize=False)),
501
+ (
502
+ "uid",
503
+ lamindb.base.fields.CharField(
504
+ blank=True,
505
+ db_index=True,
506
+ default=lamindb.base.ids.base62_12,
507
+ max_length=12,
508
+ unique=True,
509
+ ),
510
+ ),
511
+ (
512
+ "name",
513
+ lamindb.base.fields.CharField(
514
+ blank=True, db_index=True, default=None, max_length=255
515
+ ),
516
+ ),
517
+ (
518
+ "abbr",
519
+ lamindb.base.fields.CharField(
520
+ blank=True,
521
+ db_index=True,
522
+ default=None,
523
+ max_length=32,
524
+ null=True,
525
+ unique=True,
526
+ ),
527
+ ),
528
+ (
529
+ "url",
530
+ lamindb.base.fields.URLField(
531
+ blank=True, default=None, max_length=255, null=True
532
+ ),
533
+ ),
534
+ (
535
+ "artifacts",
536
+ models.ManyToManyField(
537
+ related_name="projects",
538
+ through="lamindb.ArtifactProject",
539
+ to="lamindb.artifact",
540
+ ),
541
+ ),
542
+ (
543
+ "collections",
544
+ models.ManyToManyField(
545
+ related_name="projects",
546
+ through="lamindb.CollectionProject",
547
+ to="lamindb.collection",
548
+ ),
549
+ ),
550
+ (
551
+ "contributors",
552
+ models.ManyToManyField(
553
+ related_name="projects", to="lamindb.person"
554
+ ),
555
+ ),
556
+ (
557
+ "created_by",
558
+ lamindb.base.fields.ForeignKey(
559
+ blank=True,
560
+ default=lamindb.base.users.current_user_id,
561
+ on_delete=django.db.models.deletion.PROTECT,
562
+ related_name="+",
563
+ to="lamindb.user",
564
+ ),
565
+ ),
566
+ (
567
+ "run",
568
+ lamindb.base.fields.ForeignKey(
569
+ blank=True,
570
+ default=lamindb.models.current_run,
571
+ null=True,
572
+ on_delete=django.db.models.deletion.PROTECT,
573
+ related_name="+",
574
+ to="lamindb.run",
575
+ ),
576
+ ),
577
+ (
578
+ "space",
579
+ lamindb.base.fields.ForeignKey(
580
+ blank=True,
581
+ db_default=1,
582
+ default=1,
583
+ on_delete=django.db.models.deletion.PROTECT,
584
+ to="lamindb.space",
585
+ ),
586
+ ),
587
+ ],
588
+ options={
589
+ "abstract": False,
590
+ },
591
+ bases=(
592
+ lamindb.models.CanCurate,
593
+ models.Model,
594
+ lamindb.models.ValidateFields,
595
+ ),
596
+ ),
597
+ migrations.AddField(
598
+ model_name="collectionproject",
599
+ name="project",
600
+ field=lamindb.base.fields.ForeignKey(
601
+ blank=True,
602
+ on_delete=django.db.models.deletion.PROTECT,
603
+ related_name="links_collection",
604
+ to="lamindb.project",
605
+ ),
606
+ ),
607
+ migrations.AddField(
608
+ model_name="artifactproject",
609
+ name="project",
610
+ field=lamindb.base.fields.ForeignKey(
611
+ blank=True,
612
+ on_delete=django.db.models.deletion.PROTECT,
613
+ related_name="links_artifact",
614
+ to="lamindb.project",
615
+ ),
616
+ ),
617
+ migrations.CreateModel(
618
+ name="Reference",
619
+ fields=[
620
+ (
621
+ "created_at",
622
+ lamindb.base.fields.DateTimeField(auto_now_add=True, db_index=True),
623
+ ),
624
+ (
625
+ "updated_at",
626
+ lamindb.base.fields.DateTimeField(auto_now=True, db_index=True),
627
+ ),
628
+ (
629
+ "_branch_code",
630
+ models.SmallIntegerField(db_default=1, db_index=True, default=1),
631
+ ),
632
+ ("aux", models.JSONField(db_default=None, default=None, null=True)),
633
+ ("id", models.AutoField(primary_key=True, serialize=False)),
634
+ (
635
+ "uid",
636
+ lamindb.base.fields.CharField(
637
+ blank=True,
638
+ db_index=True,
639
+ default=lamindb.base.ids.base62_12,
640
+ max_length=12,
641
+ unique=True,
642
+ ),
643
+ ),
644
+ (
645
+ "name",
646
+ lamindb.base.fields.CharField(
647
+ blank=True, db_index=True, default=None, max_length=255
648
+ ),
649
+ ),
650
+ (
651
+ "abbr",
652
+ lamindb.base.fields.CharField(
653
+ blank=True,
654
+ db_index=True,
655
+ default=None,
656
+ max_length=32,
657
+ null=True,
658
+ unique=True,
659
+ ),
660
+ ),
661
+ ("url", lamindb.base.fields.URLField(blank=True, null=True)),
662
+ (
663
+ "pubmed_id",
664
+ lamindb.base.fields.BigIntegerField(
665
+ blank=True, db_index=True, default=None, null=True
666
+ ),
667
+ ),
668
+ (
669
+ "doi",
670
+ lamindb.base.fields.CharField(
671
+ blank=True,
672
+ db_index=True,
673
+ default=None,
674
+ max_length=255,
675
+ null=True,
676
+ validators=[
677
+ django.core.validators.RegexValidator(
678
+ message="Must be a DOI (e.g., 10.1000/xyz123 or https://doi.org/10.1000/xyz123)",
679
+ regex="^(?:https?://(?:dx\\.)?doi\\.org/|doi:|DOI:)?10\\.\\d+/.*$",
680
+ )
681
+ ],
682
+ ),
683
+ ),
684
+ (
685
+ "preprint",
686
+ lamindb.base.fields.BooleanField(
687
+ blank=True, db_index=True, default=False
688
+ ),
689
+ ),
690
+ (
691
+ "public",
692
+ lamindb.base.fields.BooleanField(
693
+ blank=True, db_index=True, default=True
694
+ ),
695
+ ),
696
+ (
697
+ "journal",
698
+ lamindb.base.fields.TextField(blank=True, default=None, null=True),
699
+ ),
700
+ (
701
+ "description",
702
+ lamindb.base.fields.TextField(blank=True, default=None, null=True),
703
+ ),
704
+ (
705
+ "text",
706
+ lamindb.base.fields.TextField(blank=True, default=None, null=True),
707
+ ),
708
+ (
709
+ "published_at",
710
+ lamindb.base.fields.DateField(blank=True, default=None, null=True),
711
+ ),
712
+ (
713
+ "artifacts",
714
+ models.ManyToManyField(
715
+ related_name="references",
716
+ through="lamindb.ArtifactReference",
717
+ to="lamindb.artifact",
718
+ ),
719
+ ),
720
+ (
721
+ "authors",
722
+ models.ManyToManyField(
723
+ related_name="references", to="lamindb.person"
724
+ ),
725
+ ),
726
+ (
727
+ "collections",
728
+ models.ManyToManyField(
729
+ related_name="references",
730
+ through="lamindb.CollectionReference",
731
+ to="lamindb.collection",
732
+ ),
733
+ ),
734
+ (
735
+ "created_by",
736
+ lamindb.base.fields.ForeignKey(
737
+ blank=True,
738
+ default=lamindb.base.users.current_user_id,
739
+ on_delete=django.db.models.deletion.PROTECT,
740
+ related_name="+",
741
+ to="lamindb.user",
742
+ ),
743
+ ),
744
+ (
745
+ "run",
746
+ lamindb.base.fields.ForeignKey(
747
+ blank=True,
748
+ default=lamindb.models.current_run,
749
+ null=True,
750
+ on_delete=django.db.models.deletion.PROTECT,
751
+ related_name="+",
752
+ to="lamindb.run",
753
+ ),
754
+ ),
755
+ (
756
+ "space",
757
+ lamindb.base.fields.ForeignKey(
758
+ blank=True,
759
+ db_default=1,
760
+ default=1,
761
+ on_delete=django.db.models.deletion.PROTECT,
762
+ to="lamindb.space",
763
+ ),
764
+ ),
765
+ ],
766
+ options={
767
+ "abstract": False,
768
+ },
769
+ bases=(
770
+ lamindb.models.CanCurate,
771
+ models.Model,
772
+ lamindb.models.ValidateFields,
773
+ ),
774
+ ),
775
+ migrations.AddField(
776
+ model_name="project",
777
+ name="references",
778
+ field=models.ManyToManyField(
779
+ related_name="projects", to="lamindb.reference"
780
+ ),
781
+ ),
782
+ migrations.AddField(
783
+ model_name="collectionreference",
784
+ name="reference",
785
+ field=lamindb.base.fields.ForeignKey(
786
+ blank=True,
787
+ on_delete=django.db.models.deletion.PROTECT,
788
+ related_name="links_collection",
789
+ to="lamindb.reference",
790
+ ),
791
+ ),
792
+ migrations.AddField(
793
+ model_name="artifactreference",
794
+ name="reference",
795
+ field=lamindb.base.fields.ForeignKey(
796
+ blank=True,
797
+ on_delete=django.db.models.deletion.PROTECT,
798
+ related_name="links_artifact",
799
+ to="lamindb.reference",
800
+ ),
801
+ ),
802
+ migrations.CreateModel(
803
+ name="TransformProject",
804
+ fields=[
805
+ (
806
+ "created_at",
807
+ lamindb.base.fields.DateTimeField(auto_now_add=True, db_index=True),
808
+ ),
809
+ ("id", models.BigAutoField(primary_key=True, serialize=False)),
810
+ (
811
+ "created_by",
812
+ lamindb.base.fields.ForeignKey(
813
+ blank=True,
814
+ default=lamindb.base.users.current_user_id,
815
+ on_delete=django.db.models.deletion.PROTECT,
816
+ related_name="+",
817
+ to="lamindb.user",
818
+ ),
819
+ ),
820
+ (
821
+ "project",
822
+ lamindb.base.fields.ForeignKey(
823
+ blank=True,
824
+ on_delete=django.db.models.deletion.PROTECT,
825
+ related_name="links_transform",
826
+ to="lamindb.project",
827
+ ),
828
+ ),
829
+ (
830
+ "run",
831
+ lamindb.base.fields.ForeignKey(
832
+ blank=True,
833
+ default=lamindb.models.current_run,
834
+ null=True,
835
+ on_delete=django.db.models.deletion.PROTECT,
836
+ related_name="+",
837
+ to="lamindb.run",
838
+ ),
839
+ ),
840
+ (
841
+ "transform",
842
+ lamindb.base.fields.ForeignKey(
843
+ blank=True,
844
+ on_delete=django.db.models.deletion.CASCADE,
845
+ related_name="links_project",
846
+ to="lamindb.transform",
847
+ ),
848
+ ),
849
+ ],
850
+ options={
851
+ "unique_together": {("transform", "project")},
852
+ },
853
+ bases=(lamindb.models.LinkORM, models.Model),
854
+ ),
855
+ migrations.AddField(
856
+ model_name="project",
857
+ name="transforms",
858
+ field=models.ManyToManyField(
859
+ related_name="projects",
860
+ through="lamindb.TransformProject",
861
+ to="lamindb.transform",
862
+ ),
863
+ ),
864
+ migrations.CreateModel(
865
+ name="TransformReference",
866
+ fields=[
867
+ (
868
+ "created_at",
869
+ lamindb.base.fields.DateTimeField(auto_now_add=True, db_index=True),
870
+ ),
871
+ ("id", models.BigAutoField(primary_key=True, serialize=False)),
872
+ (
873
+ "created_by",
874
+ lamindb.base.fields.ForeignKey(
875
+ blank=True,
876
+ default=lamindb.base.users.current_user_id,
877
+ on_delete=django.db.models.deletion.PROTECT,
878
+ related_name="+",
879
+ to="lamindb.user",
880
+ ),
881
+ ),
882
+ (
883
+ "reference",
884
+ lamindb.base.fields.ForeignKey(
885
+ blank=True,
886
+ on_delete=django.db.models.deletion.PROTECT,
887
+ related_name="links_transform",
888
+ to="lamindb.reference",
889
+ ),
890
+ ),
891
+ (
892
+ "run",
893
+ lamindb.base.fields.ForeignKey(
894
+ blank=True,
895
+ default=lamindb.models.current_run,
896
+ null=True,
897
+ on_delete=django.db.models.deletion.PROTECT,
898
+ related_name="+",
899
+ to="lamindb.run",
900
+ ),
901
+ ),
902
+ (
903
+ "transform",
904
+ lamindb.base.fields.ForeignKey(
905
+ blank=True,
906
+ on_delete=django.db.models.deletion.CASCADE,
907
+ related_name="links_reference",
908
+ to="lamindb.transform",
909
+ ),
910
+ ),
911
+ ],
912
+ options={
913
+ "unique_together": {("transform", "reference")},
914
+ },
915
+ bases=(lamindb.models.LinkORM, models.Model),
916
+ ),
917
+ migrations.AddField(
918
+ model_name="reference",
919
+ name="transforms",
920
+ field=models.ManyToManyField(
921
+ related_name="references",
922
+ through="lamindb.TransformReference",
923
+ to="lamindb.transform",
924
+ ),
925
+ ),
926
+ migrations.AlterUniqueTogether(
927
+ name="collectionproject",
928
+ unique_together={("collection", "project")},
929
+ ),
930
+ migrations.AlterUniqueTogether(
931
+ name="artifactproject",
932
+ unique_together={("artifact", "project", "feature")},
933
+ ),
934
+ migrations.AlterUniqueTogether(
935
+ name="collectionreference",
936
+ unique_together={("collection", "reference")},
937
+ ),
938
+ migrations.AlterUniqueTogether(
939
+ name="artifactreference",
940
+ unique_together={("artifact", "reference", "feature")},
941
+ ),
942
+ migrations.RunPython(
943
+ migrate_data,
944
+ ),
945
+ ]