plain.models 0.49.2__py3-none-any.whl → 0.51.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 (108) hide show
  1. plain/models/CHANGELOG.md +27 -0
  2. plain/models/README.md +26 -42
  3. plain/models/__init__.py +2 -0
  4. plain/models/aggregates.py +42 -19
  5. plain/models/backends/base/base.py +125 -105
  6. plain/models/backends/base/client.py +11 -3
  7. plain/models/backends/base/creation.py +24 -14
  8. plain/models/backends/base/features.py +10 -4
  9. plain/models/backends/base/introspection.py +37 -20
  10. plain/models/backends/base/operations.py +187 -91
  11. plain/models/backends/base/schema.py +338 -218
  12. plain/models/backends/base/validation.py +13 -4
  13. plain/models/backends/ddl_references.py +85 -43
  14. plain/models/backends/mysql/base.py +29 -26
  15. plain/models/backends/mysql/client.py +7 -2
  16. plain/models/backends/mysql/compiler.py +13 -4
  17. plain/models/backends/mysql/creation.py +5 -2
  18. plain/models/backends/mysql/features.py +24 -22
  19. plain/models/backends/mysql/introspection.py +22 -13
  20. plain/models/backends/mysql/operations.py +107 -40
  21. plain/models/backends/mysql/schema.py +52 -28
  22. plain/models/backends/mysql/validation.py +13 -6
  23. plain/models/backends/postgresql/base.py +41 -34
  24. plain/models/backends/postgresql/client.py +7 -2
  25. plain/models/backends/postgresql/creation.py +10 -5
  26. plain/models/backends/postgresql/introspection.py +15 -8
  27. plain/models/backends/postgresql/operations.py +110 -43
  28. plain/models/backends/postgresql/schema.py +88 -49
  29. plain/models/backends/sqlite3/_functions.py +151 -115
  30. plain/models/backends/sqlite3/base.py +37 -23
  31. plain/models/backends/sqlite3/client.py +7 -1
  32. plain/models/backends/sqlite3/creation.py +9 -5
  33. plain/models/backends/sqlite3/features.py +5 -3
  34. plain/models/backends/sqlite3/introspection.py +32 -16
  35. plain/models/backends/sqlite3/operations.py +126 -43
  36. plain/models/backends/sqlite3/schema.py +127 -92
  37. plain/models/backends/utils.py +52 -29
  38. plain/models/backups/cli.py +8 -6
  39. plain/models/backups/clients.py +16 -7
  40. plain/models/backups/core.py +24 -13
  41. plain/models/base.py +221 -229
  42. plain/models/cli.py +98 -67
  43. plain/models/config.py +1 -1
  44. plain/models/connections.py +23 -7
  45. plain/models/constraints.py +79 -56
  46. plain/models/database_url.py +1 -1
  47. plain/models/db.py +6 -2
  48. plain/models/deletion.py +80 -56
  49. plain/models/entrypoints.py +1 -1
  50. plain/models/enums.py +22 -11
  51. plain/models/exceptions.py +23 -8
  52. plain/models/expressions.py +441 -258
  53. plain/models/fields/__init__.py +272 -217
  54. plain/models/fields/json.py +123 -57
  55. plain/models/fields/mixins.py +12 -8
  56. plain/models/fields/related.py +324 -290
  57. plain/models/fields/related_descriptors.py +33 -24
  58. plain/models/fields/related_lookups.py +24 -12
  59. plain/models/fields/related_managers.py +102 -79
  60. plain/models/fields/reverse_related.py +66 -63
  61. plain/models/forms.py +101 -75
  62. plain/models/functions/comparison.py +71 -18
  63. plain/models/functions/datetime.py +79 -29
  64. plain/models/functions/math.py +43 -10
  65. plain/models/functions/mixins.py +24 -7
  66. plain/models/functions/text.py +104 -25
  67. plain/models/functions/window.py +12 -6
  68. plain/models/indexes.py +57 -32
  69. plain/models/lookups.py +228 -153
  70. plain/models/meta.py +505 -0
  71. plain/models/migrations/autodetector.py +86 -43
  72. plain/models/migrations/exceptions.py +7 -3
  73. plain/models/migrations/executor.py +33 -7
  74. plain/models/migrations/graph.py +79 -50
  75. plain/models/migrations/loader.py +45 -22
  76. plain/models/migrations/migration.py +23 -18
  77. plain/models/migrations/operations/base.py +38 -20
  78. plain/models/migrations/operations/fields.py +95 -48
  79. plain/models/migrations/operations/models.py +246 -142
  80. plain/models/migrations/operations/special.py +82 -25
  81. plain/models/migrations/optimizer.py +7 -2
  82. plain/models/migrations/questioner.py +58 -31
  83. plain/models/migrations/recorder.py +27 -16
  84. plain/models/migrations/serializer.py +50 -39
  85. plain/models/migrations/state.py +232 -156
  86. plain/models/migrations/utils.py +30 -14
  87. plain/models/migrations/writer.py +17 -14
  88. plain/models/options.py +189 -518
  89. plain/models/otel.py +16 -6
  90. plain/models/preflight.py +42 -17
  91. plain/models/query.py +400 -251
  92. plain/models/query_utils.py +109 -69
  93. plain/models/registry.py +40 -21
  94. plain/models/sql/compiler.py +190 -127
  95. plain/models/sql/datastructures.py +38 -25
  96. plain/models/sql/query.py +320 -225
  97. plain/models/sql/subqueries.py +36 -25
  98. plain/models/sql/where.py +54 -29
  99. plain/models/test/pytest.py +15 -11
  100. plain/models/test/utils.py +4 -2
  101. plain/models/transaction.py +20 -7
  102. plain/models/utils.py +17 -6
  103. {plain_models-0.49.2.dist-info → plain_models-0.51.0.dist-info}/METADATA +27 -43
  104. plain_models-0.51.0.dist-info/RECORD +123 -0
  105. plain_models-0.49.2.dist-info/RECORD +0 -122
  106. {plain_models-0.49.2.dist-info → plain_models-0.51.0.dist-info}/WHEEL +0 -0
  107. {plain_models-0.49.2.dist-info → plain_models-0.51.0.dist-info}/entry_points.txt +0 -0
  108. {plain_models-0.49.2.dist-info → plain_models-0.51.0.dist-info}/licenses/LICENSE +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: plain.models
3
- Version: 0.49.2
3
+ Version: 0.51.0
4
4
  Summary: Model your data and store it in a database.
5
5
  Author-email: Dave Gaeddert <dave.gaeddert@dropseed.dev>
6
6
  License-File: LICENSE
@@ -211,31 +211,32 @@ class User(models.Model):
211
211
  username = models.CharField(max_length=150)
212
212
  age = models.IntegerField()
213
213
 
214
- class Meta:
215
- indexes = [
214
+ model_options = models.Options(
215
+ indexes=[
216
216
  models.Index(fields=["email"]),
217
217
  models.Index(fields=["-created_at"], name="user_created_idx"),
218
- ]
219
- constraints = [
218
+ ],
219
+ constraints=[
220
220
  models.UniqueConstraint(fields=["email", "username"], name="unique_user"),
221
221
  models.CheckConstraint(check=models.Q(age__gte=0), name="age_positive"),
222
- ]
222
+ ],
223
+ )
223
224
  ```
224
225
 
225
226
  ## Custom QuerySets
226
227
 
227
- With the Manager functionality now merged into QuerySet, you can customize [`QuerySet`](./query.py#QuerySet) classes to provide specialized query methods. There are several ways to use custom QuerySets:
228
-
229
- ### Setting a default QuerySet for a model
228
+ With the Manager functionality now merged into QuerySet, you can customize [`QuerySet`](./query.py#QuerySet) classes to provide specialized query methods.
230
229
 
231
- Use `Meta.queryset_class` to set a custom QuerySet that will be used by `Model.query`:
230
+ Define a custom QuerySet and assign it to your model's `query` attribute:
232
231
 
233
232
  ```python
234
- class PublishedQuerySet(models.QuerySet):
235
- def published_only(self):
233
+ from typing import Self
234
+
235
+ class PublishedQuerySet(models.QuerySet["Article"]):
236
+ def published_only(self) -> Self:
236
237
  return self.filter(status="published")
237
238
 
238
- def draft_only(self):
239
+ def draft_only(self) -> Self:
239
240
  return self.filter(status="draft")
240
241
 
241
242
  @models.register_model
@@ -243,50 +244,33 @@ class Article(models.Model):
243
244
  title = models.CharField(max_length=200)
244
245
  status = models.CharField(max_length=20)
245
246
 
246
- class Meta:
247
- queryset_class = PublishedQuerySet
247
+ query = PublishedQuerySet()
248
248
 
249
- # Usage - all methods available on Article.objects
249
+ # Usage - all methods available on Article.query
250
250
  all_articles = Article.query.all()
251
251
  published_articles = Article.query.published_only()
252
252
  draft_articles = Article.query.draft_only()
253
253
  ```
254
254
 
255
- ### Using custom QuerySets without formal attachment
256
-
257
- You can also use custom QuerySets manually without setting them as the default:
255
+ Custom methods can be chained with built-in QuerySet methods:
258
256
 
259
257
  ```python
260
- class SpecialQuerySet(models.QuerySet):
261
- def special_filter(self):
262
- return self.filter(special=True)
263
-
264
- # Create and use the QuerySet manually
265
- special_qs = SpecialQuerySet(model=Article)
266
- special_articles = special_qs.special_filter()
258
+ # Chaining works naturally
259
+ recent_published = Article.query.published_only().order_by("-created_at")[:10]
267
260
  ```
268
261
 
269
- ### Using classmethods for convenience
262
+ ### Programmatic QuerySet usage
270
263
 
271
- For even cleaner API, add classmethods to your model:
264
+ For internal code that needs to create QuerySet instances programmatically, use `from_model()`:
272
265
 
273
266
  ```python
274
- @models.register_model
275
- class Article(models.Model):
276
- title = models.CharField(max_length=200)
277
- status = models.CharField(max_length=20)
278
-
279
- @classmethod
280
- def published(cls):
281
- return PublishedQuerySet(model=cls).published_only()
282
-
283
- @classmethod
284
- def drafts(cls):
285
- return PublishedQuerySet(model=cls).draft_only()
267
+ class SpecialQuerySet(models.QuerySet["Article"]):
268
+ def special_filter(self) -> Self:
269
+ return self.filter(special=True)
286
270
 
287
- # Usage
288
- published_articles = Article.published()
289
- draft_articles = Article.drafts()
271
+ # Create and use the QuerySet programmatically
272
+ special_qs = SpecialQuerySet.from_model(Article)
273
+ special_articles = special_qs.special_filter()
290
274
  ```
291
275
 
292
276
  ## Forms
@@ -0,0 +1,123 @@
1
+ plain/models/AGENTS.md,sha256=xQQW-z-DehnCUyjiGSBfLqUjoSUdo_W1b0JmwYmWieA,209
2
+ plain/models/CHANGELOG.md,sha256=tRbJFhy_HIM9hVZm8zrVzAah7-rr-K5ZdjJ2Zj38bQk,22767
3
+ plain/models/README.md,sha256=BW4a56bKkf2r-fkfK4SIU92th8h1geBNZ6j-XCv9yE4,8190
4
+ plain/models/__init__.py,sha256=S0HNxIS4PQ0mSNpo3PNOXExVnHXFmODQvdPhTCVrW-E,2903
5
+ plain/models/aggregates.py,sha256=z6AjlPlMI-henws9DYPwylL91sfrBPPHR7f9MNb2cjw,8043
6
+ plain/models/base.py,sha256=uB1OHfyd9hDDqEHck481MCUeXsiwuYmyM7lkS2uQ7ts,64448
7
+ plain/models/cli.py,sha256=cI323H4xEKLl1Q62zZQtl_UZBfuE6JMXsq5kSr7Ai0c,41031
8
+ plain/models/config.py,sha256=vrrGZnmT0TCR_B-YF0VWZgG3iQ5syijaab2BW7Xfr7A,390
9
+ plain/models/connections.py,sha256=8DVH6Rl47wbfY_4wO6bGSoTuyJKoKz3tMB8fpe1cpqE,2937
10
+ plain/models/constants.py,sha256=ndnj9TOTKW0p4YcIPLOLEbsH6mOgFi6B1-rIzr_iwwU,210
11
+ plain/models/constraints.py,sha256=0MIeA5pL7wutLpSxKM1Nq1GZjK6-WQf0lHcyA4tt-0A,17997
12
+ plain/models/database_url.py,sha256=frDkiFi2eba8bGiI4J6rNQqu_YJgk58rjGCBCfrsWBE,6424
13
+ plain/models/db.py,sha256=TzjE3AwEHda53s133h4WE4DCm08LUxseGEniP3lnrXc,1434
14
+ plain/models/default_settings.py,sha256=cDym1o_DtHySWgDRIdjgEM0YxjgYU51ZqzWVA3vpzTk,569
15
+ plain/models/deletion.py,sha256=xQ1X_2W45h0L16R-8HAYceb0q4XhEidY6lCRPi8vvJ0,19083
16
+ plain/models/entrypoints.py,sha256=8IyQlCia0c9ZZaWHOA9FrqmN0iG_z9EeFoqEZifsdH4,199
17
+ plain/models/enums.py,sha256=IOqdywY_TNNJIDp-reaRlbTL-1uVw3jwQ4NpVT8yjDs,3049
18
+ plain/models/exceptions.py,sha256=DOnRGvbEHEUDr3ioafhK1rSBnMeJ_Q4VW7gZXEIj7SU,5492
19
+ plain/models/expressions.py,sha256=2loVMU0u3xyq_yFKR8po53rLopFmfAa01bmaVosLj0I,70765
20
+ plain/models/forms.py,sha256=dkX3or5TROgKAzkLayek63pngYrcIYdijZQS0LcYhhI,27428
21
+ plain/models/indexes.py,sha256=fiQ1F-zDVJPSSGb_zaH4Kj1H_dBkMpXM2znHWA2KLjk,12761
22
+ plain/models/lookups.py,sha256=A-3rs3a2Obb-gQPs5RsQiCq-Shj21tznk2LwOeD4RXs,29447
23
+ plain/models/meta.py,sha256=alEKxzgwxmCRddq9Wonl1bjglDk1-x3CtEwWL3cGy6A,19942
24
+ plain/models/options.py,sha256=gTso-rRXxV6qbuAprsA1qflkQfsRqmcoETEQJmP0dGk,8593
25
+ plain/models/otel.py,sha256=6xsu5BhNhGXWRPNQVj0yzhsn1SryOhtCq_qzP8XL-qo,8010
26
+ plain/models/preflight.py,sha256=VIiNdWady7uHAEB_XT4_Vkt4M--vGVYL7QEdNMW8Tko,9818
27
+ plain/models/query.py,sha256=-ZDJlt7aM5d3Sms_1Eu53h1UGnQvtKinFIhhLBgnfkY,98481
28
+ plain/models/query_utils.py,sha256=m_3FCbFZJjqkN6tcDuLrgA2n63RxUHOaXb_bJyQsS9k,16171
29
+ plain/models/registry.py,sha256=dIsgZolh7senbPil6xW_qLFIeIXkCtzysPcrpWdGAAY,8903
30
+ plain/models/transaction.py,sha256=beJtENs6l8Djrrap59k8K-O5qWhX1Y6WL5X9Ung5tDk,9791
31
+ plain/models/utils.py,sha256=VA5N2Ao1dWDkgfPIPtgriSUM-aBArYfvtQm-c-Y3AHg,2030
32
+ plain/models/backends/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
33
+ plain/models/backends/ddl_references.py,sha256=tW_4SFxKH1d_1UQiHL4OsZB11puFUJsMhRgG3XeWiQE,9401
34
+ plain/models/backends/utils.py,sha256=wn4U_qrzGQxecJtcXS5VFds2Tg6VoJrs1TB_l8LN9AE,11102
35
+ plain/models/backends/base/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
36
+ plain/models/backends/base/base.py,sha256=465KAc8J2R8eIy3NmJSnrgMPK0K2DwDsylGKEzUkpsI,29099
37
+ plain/models/backends/base/client.py,sha256=xuMk4iXQjDju5cUspmOSpv6w2JnsB-gJa3RDvoP5I9I,1230
38
+ plain/models/backends/base/creation.py,sha256=A3cBPzxjmzEUIrsiuxoI4M3mi-Y9sGcVHoCa-TpQRtM,9857
39
+ plain/models/backends/base/features.py,sha256=iRfB346Z9Ng3LIMvJAwr-8KxQthlSuvcdo9zBklE1-8,8067
40
+ plain/models/backends/base/introspection.py,sha256=3yeluBm6UHOlKikgVzGlKnDqBhyaqP-1FoSO4y_c-Hc,7613
41
+ plain/models/backends/base/operations.py,sha256=8m5XDZ5LtALaXbUX10QPSGDFKce17V5UeJDMkbSZdCs,29324
42
+ plain/models/backends/base/schema.py,sha256=t5U45noXOGxQkadh-EBz7BLIdPDg-uai3qUxXYHAkiU,70546
43
+ plain/models/backends/base/validation.py,sha256=Ok-TbVVi84zdPprKI--tUxYgoDl2PaxfNDiuYqZQBLM,1341
44
+ plain/models/backends/mysql/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
45
+ plain/models/backends/mysql/base.py,sha256=6yNw8m4LpnNOOBVGzGZDPZGDAZKDnDbAWBO62Xg4yJY,14786
46
+ plain/models/backends/mysql/client.py,sha256=FLp8Ub-fh4mto9nI1ULkGe4LnphGqAig2D_YrUk7Ums,3135
47
+ plain/models/backends/mysql/compiler.py,sha256=Hw3Uu9GPoKEn09cJaZgWAVSisltsLMKtKXbSC-8aWJM,3609
48
+ plain/models/backends/mysql/creation.py,sha256=W-YOIbvxcEgrcpDJBOF1fHW_ZxDX-MbwGlahOi8d9tI,1047
49
+ plain/models/backends/mysql/features.py,sha256=76lBs9-unIKYEpH7fLdhihg9lPWrehQR26GW4zPKy1U,6101
50
+ plain/models/backends/mysql/introspection.py,sha256=ZbJRlx-XHMVl3Mml53_kSnWekGIqA7PIB_1ZTOJuNHs,14405
51
+ plain/models/backends/mysql/operations.py,sha256=pe2Q2fVUNNXYCx4RM85ztpCUI5XNuhDtoc7tngMxgO4,18830
52
+ plain/models/backends/mysql/schema.py,sha256=tHbtQ9ttBo36IsWpolBmiQKoFLIEBfQdRBIw66Hyr_8,10912
53
+ plain/models/backends/mysql/validation.py,sha256=g9nifha-LPtK_cpBscgLGt7eaMNdcI90Bqy5cyJbbhc,2210
54
+ plain/models/backends/postgresql/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
55
+ plain/models/backends/postgresql/base.py,sha256=DOFq3I4azbO2X62FSwKqrpSnavfFtSMHPf3Lmgpgq2c,16784
56
+ plain/models/backends/postgresql/client.py,sha256=eVEUdM8Gt8YQQzSBtsi8RpzruDfndkdWk9WMVXPd_K8,2217
57
+ plain/models/backends/postgresql/creation.py,sha256=sdEK7IjlEbBCjtsGr1s2i4MeZibBuc7eb0OMeL305u8,1743
58
+ plain/models/backends/postgresql/features.py,sha256=O8iWfAjqyOX7DhjZaGJvyO-vmWcrkDopFnG2bHEQK44,1322
59
+ plain/models/backends/postgresql/introspection.py,sha256=iRmVhVKZ2-fGvM-w2ZGsXRYq44Vd29-tsd949uAoOwQ,11490
60
+ plain/models/backends/postgresql/operations.py,sha256=bP_H4aNAGzWYn3Ezjm8g_FaA9m6zPtJ2OM8ePCMN658,13547
61
+ plain/models/backends/postgresql/schema.py,sha256=sb_gGwgL4d7G4Gi72ty2kwgzg4CXE8SXse7mrsq1HEA,15134
62
+ plain/models/backends/sqlite3/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
63
+ plain/models/backends/sqlite3/_functions.py,sha256=yrCAOhWPs7WB5I1kTU8EmaFdXlHGBbHYVhClCKt4Iyo,17950
64
+ plain/models/backends/sqlite3/base.py,sha256=MMQkUV3qEI9b_-yuYxZTvXDEB8Sfie9pMC_b8mNWYx8,13976
65
+ plain/models/backends/sqlite3/client.py,sha256=IjHu8dTEoYCfDmFNjM7-EKzH4yLm3OO5zxhl9nVi1uc,451
66
+ plain/models/backends/sqlite3/creation.py,sha256=w2ojwbwn4u0f2EDCIsOcH3giJh9bIvJvV-vh98PQk28,2939
67
+ plain/models/backends/sqlite3/features.py,sha256=WNN4DM_SP18cI4dw1aTiT0owSLzsXp3s4hj5Em46G6E,2426
68
+ plain/models/backends/sqlite3/introspection.py,sha256=pFGYcamhB2_aaYMMR441gK8pt2spmycD_IBeIq4kGvw,17820
69
+ plain/models/backends/sqlite3/operations.py,sha256=CY8LzKP23ZR8UxNQPJL3cScE_52l4ZxbmslKbcfk4BU,18013
70
+ plain/models/backends/sqlite3/schema.py,sha256=MEajKYZ-l6aLCJRffwj-2FcCZpnBEy6SBQoa1r8YRoU,24493
71
+ plain/models/backups/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
72
+ plain/models/backups/cli.py,sha256=nXM_u6W0GBFmiVmlommLDKY9ig0-y6a2lheJVq3Ugg0,3075
73
+ plain/models/backups/clients.py,sha256=YOafOXgekihIG7fOZjYBEjm7QwOMWeh_sCNOxv3M9FQ,5092
74
+ plain/models/backups/core.py,sha256=5J7kNnlVUX_Fo0SZYheIjfRG4L9Q-EjGRKsv7HXUwrs,3830
75
+ plain/models/fields/__init__.py,sha256=g3XHXvMBnYEpXdQhrh2aPs6hE-tA921At7bC9cI77SQ,78326
76
+ plain/models/fields/json.py,sha256=8Iaj9akacZaEoPr8QlDz3-zZb3YOoCEzcyyUr0B-uOA,21171
77
+ plain/models/fields/mixins.py,sha256=bCpWNliBntAl6W9Vxhpu-JyCBM8XIRQBiSJKIyaQM4Q,2141
78
+ plain/models/fields/related.py,sha256=neXQaxP-TvT90BAL6Iyw-7KvIcXps2oUI4XxSqDONGs,57513
79
+ plain/models/fields/related_descriptors.py,sha256=OM31k33zCE5eZzHbSPbUFKHa4HWFPaYJukqiAsJw_sc,15763
80
+ plain/models/fields/related_lookups.py,sha256=U3FP9dXTnUZz-Sb8yRf0m923Teebg6PbUkYk7sB-NFs,8417
81
+ plain/models/fields/related_managers.py,sha256=gQO9FbwArVMS2ulM24Lpf2pP4vxeRlS73DlgTz-nJ6A,25970
82
+ plain/models/fields/reverse_related.py,sha256=sP9cYp6hBNcxLZyZdtcuPtVMBEWYD2GgkHdCnn87zOQ,11093
83
+ plain/models/functions/__init__.py,sha256=aglCm_JtzDYk2KmxubDN_78CGG3JCfRWnfJ74Oj5YJ4,2658
84
+ plain/models/functions/comparison.py,sha256=4W_mtlqy5LO2-rbikiQw64-kfL_6dwqck1Mze4b5srM,7900
85
+ plain/models/functions/datetime.py,sha256=SxGkBExwfH98f7D5Tcj23nmPRtKT_z2oyZ3WbXYtqhQ,14624
86
+ plain/models/functions/math.py,sha256=5cbLgWpxlXxxD6WL2esJ3C9iWmCHMFoYlPbeclv4wDE,5699
87
+ plain/models/functions/mixins.py,sha256=ZhpDlR1LnxV_4HbryzTj7NAxi09vKe-I4qhWEkooebA,2149
88
+ plain/models/functions/text.py,sha256=n2RBKrBULNOTogJ5UHMZaYgmrvkoUuUhvCY_t3mm8hg,10846
89
+ plain/models/functions/window.py,sha256=7rzVWpRMZ-1FptAWN_xPt-onh-tErL5sGfss63ILFQU,2985
90
+ plain/models/migrations/__init__.py,sha256=ZAQUGrfr_OxYMIO7vUBIHLs_M3oZ4iQSjDzCHRFUdtI,96
91
+ plain/models/migrations/autodetector.py,sha256=Aack1d0nGPx8UPRea0ZcSouMwE9hsXltOK6LIdlPAVs,62565
92
+ plain/models/migrations/exceptions.py,sha256=yfimKFZJpyw4IpH2LqZR7hL3J41PBSmXd1HbuWWayWY,1143
93
+ plain/models/migrations/executor.py,sha256=zfqQ0cNtoo-UEBAmenuO1_Mfyinj3fSELfKJsduC35Y,7611
94
+ plain/models/migrations/graph.py,sha256=SFSk2QxG8ni9LxtnfuMHeN2qQeI3lv4jD-R-y_i2VL0,14101
95
+ plain/models/migrations/loader.py,sha256=PzbEL_9XxU3XcQAb5O9mH22nuBjvJhr_bkOkYJfglbA,17515
96
+ plain/models/migrations/migration.py,sha256=2lLS9XFPPktpwhCUWcWx6eFkPHZQE_KYnIMRSm0CvWo,6896
97
+ plain/models/migrations/optimizer.py,sha256=Kk8-KBB51mYiR96hp8F7ZhFvdVg7DYyujpKmp8b9T6A,3385
98
+ plain/models/migrations/questioner.py,sha256=1uhQqPooxAaJuXe_W_B9X5df8MOoO_G7IFcubQxd6lE,12980
99
+ plain/models/migrations/recorder.py,sha256=4rxOUmwJRkyKt5WVTQtnfsXnesV5Ue--1MpXYFltbto,4175
100
+ plain/models/migrations/serializer.py,sha256=QWz5PvDSWKgHjae1McEIPwahQTm17ZES2Kf6aVebrr0,13410
101
+ plain/models/migrations/state.py,sha256=3wmARJZ8XgCnkW-xvg2r2VWrhl1GoLRQmBFIh2EFa3w,35795
102
+ plain/models/migrations/utils.py,sha256=MkrO_ZHCLQVlhgJPVxIlkZ7tqpQ_BDa6i07T-OCORnE,4796
103
+ plain/models/migrations/writer.py,sha256=poEW487rmFJIarJB03jImxtd1Yfcy4JvkMwYCVBrUTs,11227
104
+ plain/models/migrations/operations/__init__.py,sha256=YKZsQsJ4G5iw9F4o6dOSgSCuLiiKuApvneoV4jqjZaA,752
105
+ plain/models/migrations/operations/base.py,sha256=jtHhl0CWC2-yMwwVTBSf4rvLbwdJ-SBXmqX9mCUvsmI,5219
106
+ plain/models/migrations/operations/fields.py,sha256=zMLWnDPNmeXNZ1P1X6bqu3NIaSk9AffrenLJxcI3UCo,12994
107
+ plain/models/migrations/operations/models.py,sha256=mmk1Kjp1JcgyVJ1kcqtxig_OFsd-VvahwrJP-iQ_5DY,29665
108
+ plain/models/migrations/operations/special.py,sha256=9Gu0PLRALDVcc-4erJxnkT5saO8FH6Emm1W5X7hfNnQ,6612
109
+ plain/models/sql/__init__.py,sha256=FoRCcab-kh_XY8C4eldgLy9-zuk-M63Nyi9cFsYjclU,225
110
+ plain/models/sql/compiler.py,sha256=UVXqw7ztoCF16s2r-Uh-Syc20JDg3oBl9tQslS7lCaA,88204
111
+ plain/models/sql/constants.py,sha256=usb1LSh9WNGPsurWAGppDkV0wYJJg5GEegKibQdS718,533
112
+ plain/models/sql/datastructures.py,sha256=xYLGQgLIgDxo7xNlMFuTQJ5l40MvSRY4zvZuWpFf0L8,7840
113
+ plain/models/sql/query.py,sha256=USDXTUHIRt3pUEn7m1RsUGuyTambRoOuqaW3RgP26Xo,114440
114
+ plain/models/sql/subqueries.py,sha256=p8XQkWLct31HUu4scLt0LrEo2MLYr1mTW5KiugKbVac,6522
115
+ plain/models/sql/where.py,sha256=GeTopzVmvZTqm2NTS32ok0rHbNgoEREUVtsD7usrlCA,13802
116
+ plain/models/test/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
117
+ plain/models/test/pytest.py,sha256=sZtHzmNoqIFb7csZ8fqbRwljQ0vWrcMcDm6Wk_0g-uk,3924
118
+ plain/models/test/utils.py,sha256=eduH039cMVixWORfsUr7qkk0YDkTHPXFZklm9lzY474,540
119
+ plain_models-0.51.0.dist-info/METADATA,sha256=VMrUDpaJcQqjHDb-BrnbcVTJg6mPytoxxE6CsgEy4Ec,8502
120
+ plain_models-0.51.0.dist-info/WHEEL,sha256=qtCwoSJWgHk21S1Kb4ihdzI2rlJ1ZKaIurTj_ngOhyQ,87
121
+ plain_models-0.51.0.dist-info/entry_points.txt,sha256=IYJAW9MpL3PXyXFWmKmALagAGXC_5rzBn2eEGJlcV04,112
122
+ plain_models-0.51.0.dist-info/licenses/LICENSE,sha256=m0D5O7QoH9l5Vz_rrX_9r-C8d9UNr_ciK6Qwac7o6yo,3175
123
+ plain_models-0.51.0.dist-info/RECORD,,
@@ -1,122 +0,0 @@
1
- plain/models/AGENTS.md,sha256=xQQW-z-DehnCUyjiGSBfLqUjoSUdo_W1b0JmwYmWieA,209
2
- plain/models/CHANGELOG.md,sha256=TxKNsII2edA_7a6zQdmZV7ZrnU6dSJ5rLYwJ3ckQeJs,20413
3
- plain/models/README.md,sha256=lqzWJrEIxBCHC1P8X1YoRjbsMFlu0-kG4ujP76B_ZO4,8572
4
- plain/models/__init__.py,sha256=t6scDQ-bGQD3k-U_DE9K5JJ3pnmkC7ZHchFnWA-BcW8,2845
5
- plain/models/aggregates.py,sha256=P1nAyp1XORdlx1D-__Nx9AehUeuKmcjeS6heqjB7A7k,7247
6
- plain/models/base.py,sha256=-eaUUAnLTPMckmO2PrIfWsqXSQAhOIZFwD_i7DrcI1I,63952
7
- plain/models/cli.py,sha256=rqrgG__OyqtaDaKLB6XZnS6Zv7esU9K9EAyKCO35McA,39548
8
- plain/models/config.py,sha256=-m15VY1ZJKWdPGt-5i9fnMvz9LBzPfSRgWmWeEV8Dao,382
9
- plain/models/connections.py,sha256=RBNa2FZ0x3C9un6PaYL-IYzH_OesRSpdHNGKvYHGiOM,2276
10
- plain/models/constants.py,sha256=ndnj9TOTKW0p4YcIPLOLEbsH6mOgFi6B1-rIzr_iwwU,210
11
- plain/models/constraints.py,sha256=DC6BW6tB4WcChakyRsi6qiiWolC3v5oG1IAFvQe3ESk,16784
12
- plain/models/database_url.py,sha256=iidKVhOylf5N6t1EMPRySRQiv6LiuRjYRECB_UJ3MI8,6419
13
- plain/models/db.py,sha256=FpdfLYrRX2THUzDy4QdJ_OpSo9IFKLerZIEQ-T2x8zA,1348
14
- plain/models/default_settings.py,sha256=cDym1o_DtHySWgDRIdjgEM0YxjgYU51ZqzWVA3vpzTk,569
15
- plain/models/deletion.py,sha256=7EdE_ZtKI3-Plb4QIlWYqQJa1l8gC9-KHH6GazoWjT4,17505
16
- plain/models/entrypoints.py,sha256=EC14mW19tK9dCumaNHnv4_9jQV8jomQ8jXy8Ib89VBw,191
17
- plain/models/enums.py,sha256=Zr-JKt2aeYsSADtAm69fDRfajS7jYwop2vWQVLJ9YYI,2726
18
- plain/models/exceptions.py,sha256=xxwsr2rhV4J4RNJoGu5yaKWQUTiREFx6ARnKGRcxl7k,4995
19
- plain/models/expressions.py,sha256=1bWyeSzlTbBawZa-aaDEMSiTSnroMA2DRswsAu-5mtw,62770
20
- plain/models/forms.py,sha256=nqA5_bByjNxKoc51O48Gycp6z2oMmozqyyzfwnc5V2o,25836
21
- plain/models/indexes.py,sha256=fazIZPJgCX5_Bhwk7MQy3YbWOxpHvaCe1dDLGGldTuY,11540
22
- plain/models/lookups.py,sha256=77F4AE0ukDRqAj-uLQ5oWgmK1dZcuVujspefyEO7gOE,24783
23
- plain/models/options.py,sha256=_UWTLyQo4D2sx4AmIRgXQBo3HqBHWujY3XutLu_O8LQ,20999
24
- plain/models/otel.py,sha256=36QSJS6UXv1YPJTqeSmEvdMVHRkXa_zgqqItJaXc59g,7619
25
- plain/models/preflight.py,sha256=_cBX7AnfQDNtZfoW0ydxH8WQM3ftCqcH0-tPhqS5q8c,8973
26
- plain/models/query.py,sha256=p-qpwN-eR7Dvk68QA6W7QgVD5ejoYwYYsv4rbXxB7WA,90652
27
- plain/models/query_utils.py,sha256=x_n2lKsSjx-5ULbZsGx0AhGpMNVYizdbl_BxDlUK8lQ,14151
28
- plain/models/registry.py,sha256=5yxVgT_W8GlyL2bsGT2HvMQB5sKolXucP2qrhr7Wlnk,8126
29
- plain/models/transaction.py,sha256=KqkRDT6aqMgbPA_ch7qO8a9NyDvwY_2FaxM7FkBkcgY,9357
30
- plain/models/utils.py,sha256=rD47CAMH4SsznTe-kUnRUdnaZeZHVv1fwLUiU3KOFW0,1630
31
- plain/models/backends/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
32
- plain/models/backends/ddl_references.py,sha256=rPgGp1mjcZyIo6aA8OjNvPRv42yCBbvVgk9IEHAcAGc,8096
33
- plain/models/backends/utils.py,sha256=VN9b_hnGeLqndVAcCx00X7KhFC6jY2Tn6J3E62HqDEE,10005
34
- plain/models/backends/base/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
35
- plain/models/backends/base/base.py,sha256=I5040pUAe7-yNTb9wfMNOYjeiFQLZ5dcRI4rtmVKJ04,26457
36
- plain/models/backends/base/client.py,sha256=90Ffs6zZYCli3tJjwsPH8TItZ8tz1Pp-zhQa-EpsNqc,937
37
- plain/models/backends/base/creation.py,sha256=JlLnboF5reo-s6RM35EpdWBqsRv63wcJSxX5igIPPUM,9420
38
- plain/models/backends/base/features.py,sha256=1AehdhpeC7VobhggwpeXIt7HJNY2EWY700j4gYX8Xjs,7856
39
- plain/models/backends/base/introspection.py,sha256=8icKf9h8y4kobmyrbo8JWTDcpQIAt4oS_4FtCnY7FqQ,6815
40
- plain/models/backends/base/operations.py,sha256=tzuw7AgVb3aZn2RHamReGNco7wIt4UBkAHx8HebDZ_s,25652
41
- plain/models/backends/base/schema.py,sha256=GjASTEydinLbHg1f1-_l_eCu2CD3YV0vtT3Q7v8qTxY,64863
42
- plain/models/backends/base/validation.py,sha256=ATkhZ36RgKHrXhdiOzIK5kRHW56eSggLhzrcviSJPQ8,1061
43
- plain/models/backends/mysql/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
44
- plain/models/backends/mysql/base.py,sha256=FCANhKAs2013oLPdC9y4PQCRb9NYsp1Zca_wha6TDT4,14286
45
- plain/models/backends/mysql/client.py,sha256=YGjk4f5VOuIKcj5SOOJeBqiSDF0Ft9m1aUPOmLzdD6c,2973
46
- plain/models/backends/mysql/compiler.py,sha256=DorAoufST7QYQUwkXRZFl4xyp2rykrGBhkHZlW1vCr4,3296
47
- plain/models/backends/mysql/creation.py,sha256=ozuc3mz65bjFz6sn5BFLRRGQsUYaxwIGjQyKod31c1Y,952
48
- plain/models/backends/mysql/features.py,sha256=OPHaiqPmAFAUZqnZdLOqbCmxmuGMnIqa62fJqAkYQ0o,5875
49
- plain/models/backends/mysql/introspection.py,sha256=R3U912qnWwJDmTiX7QzGAXTc2LAShIhp4C6xHTABM68,13960
50
- plain/models/backends/mysql/operations.py,sha256=PieuZMwRtdAGRUR-TAIsOxR7qS-70h1B6LbyA3VR0YM,16591
51
- plain/models/backends/mysql/schema.py,sha256=LmP62COVuhpbH4gYulcSQNJgGuolc3RTFGsudoohJOQ,9942
52
- plain/models/backends/mysql/validation.py,sha256=DYnuPvIXGeLi66_uCZISKsS9xFTgj5CIWfaO8iarzu4,1996
53
- plain/models/backends/postgresql/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
54
- plain/models/backends/postgresql/base.py,sha256=5GPl5lc5wld9sL0oL-kAmstm-c6E5JGN3fxijiQp7o8,15836
55
- plain/models/backends/postgresql/client.py,sha256=EcqNtyQ9Kt5mA6sOmrO_5PGZBGo7fjMc9VQ-hcxJs1s,2055
56
- plain/models/backends/postgresql/creation.py,sha256=HSGzWzsx3-IayEVZvgqcYqIE_HCtAEBK0uIPh5duPKg,1555
57
- plain/models/backends/postgresql/features.py,sha256=O8iWfAjqyOX7DhjZaGJvyO-vmWcrkDopFnG2bHEQK44,1322
58
- plain/models/backends/postgresql/introspection.py,sha256=n_H2FIMzF5MI1D7kW7u5J1-ny2bM3_ARvSx4zuXpfQ4,11163
59
- plain/models/backends/postgresql/operations.py,sha256=kEP_Eoi2v-fUd902e7pYHrJtwjSg6069_ShwWOxB3qk,11192
60
- plain/models/backends/postgresql/schema.py,sha256=6nruXkfuVesoqeCK5xDzGuZQRJLWj6n8G1VkPPzw8b0,13543
61
- plain/models/backends/sqlite3/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
62
- plain/models/backends/sqlite3/_functions.py,sha256=XsohPZN-xFEEmC28stQzAiSMvE0nHJ1cMHfL2Ze72vI,14317
63
- plain/models/backends/sqlite3/base.py,sha256=tvAt7ptT284wCLwMr-y68WEeojG95S_6PKzlImGkW38,13220
64
- plain/models/backends/sqlite3/client.py,sha256=dvxY10LFJHKY6ykOuCE6e45Wo4fAH4IPDtNCH3Wvd34,324
65
- plain/models/backends/sqlite3/creation.py,sha256=dH4rqZj79TCMHmaBash4I_io15QCxnam92fuWrRK_R8,2788
66
- plain/models/backends/sqlite3/features.py,sha256=V7ueGfbUSzBNGgMRtCptXSH_0b51lyVfzi-98BX4afo,2366
67
- plain/models/backends/sqlite3/introspection.py,sha256=6nD5sbjxlJ1ocmwBxmyZqg7KT7fHKbjmmGZqAzmVpZc,17063
68
- plain/models/backends/sqlite3/operations.py,sha256=jgVfxFKP3fnIo9PzfxZtm5BYTo3XgHUncvtTtI6WRKY,15309
69
- plain/models/backends/sqlite3/schema.py,sha256=sbtI0PBGe0fK0IOFWh0bkpVntCMMVsfzPb9dpL7o4r8,22566
70
- plain/models/backups/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
71
- plain/models/backups/cli.py,sha256=AKVh_Go0LxnxFi2jQjmpPEbbJvYCurjJsGCWESm1X8A,2960
72
- plain/models/backups/clients.py,sha256=gHYQkukqamR_uksMr9wy3tBpMxK6DyUyj7nndNIlbo8,4744
73
- plain/models/backups/core.py,sha256=09IZUhBEe1Yej3PC8AidtkaI0c8tt7VnqGBCWK-WrFg,3318
74
- plain/models/fields/__init__.py,sha256=Pxso0fIHOhf9Czrw-W5x0B7u_mBbhf9KgNzW9QBoJrk,73096
75
- plain/models/fields/json.py,sha256=4WHZX5MI-GZapcaaHltPgc6f9pHAezjfaTYNh_PX8rQ,18041
76
- plain/models/fields/mixins.py,sha256=wmu3JJEOimijgepjMEFPN8u74mHpefgnsB4u5ZzVCUY,1890
77
- plain/models/fields/related.py,sha256=C69F4umO_oNTbpE5XhI5PBV_tLttBA-jV4lPcsqq6kA,50669
78
- plain/models/fields/related_descriptors.py,sha256=-sO0b6Cbi2Nmjk7uojEwu7DlCTSiQnP7yFh--Sgurgw,15091
79
- plain/models/fields/related_lookups.py,sha256=9y6AfEcg8xRRZne2LXFP6jym9mecFlB_toYih7lD8Uw,7781
80
- plain/models/fields/related_managers.py,sha256=MxxOY5iMmHgpZR7qt9ZPbdvw8pN_B39siBJgdDXgS2A,25060
81
- plain/models/fields/reverse_related.py,sha256=uAePNDx6h-7duDeJyMPBPm0DpUM39YZKxrO6G8Lgm_A,10389
82
- plain/models/functions/__init__.py,sha256=aglCm_JtzDYk2KmxubDN_78CGG3JCfRWnfJ74Oj5YJ4,2658
83
- plain/models/functions/comparison.py,sha256=9uAiEuNXZiGFzJKBvktsHwx58Qpa2cPQkr6pUWsGcKo,6554
84
- plain/models/functions/datetime.py,sha256=ov1H0Oq9qHSeu8L5CZsln0_SMU2C5M_P5HvKxppA24o,13089
85
- plain/models/functions/math.py,sha256=07ljw86LjgmgUNS75MQk98Vw-c70LSOQYazTjP1bupg,4854
86
- plain/models/functions/mixins.py,sha256=s6H0Ejugo8707EnxN6zS4givmTbPrFuk3Q_mqCGQq1I,1583
87
- plain/models/functions/text.py,sha256=Vn4Rh-cVJCL4NUaBcj72cwHa6yHap5ql0XPwn0-K_tc,8908
88
- plain/models/functions/window.py,sha256=3S0QIZc_pIVcWpE5Qq-OxixmtATLb8rZrWkvCfVtJ7Q,2809
89
- plain/models/migrations/__init__.py,sha256=ZAQUGrfr_OxYMIO7vUBIHLs_M3oZ4iQSjDzCHRFUdtI,96
90
- plain/models/migrations/autodetector.py,sha256=MuJEVaU9IZ8c6HfcDsEANNujUrSGMN-iDd5WDPM7ht8,60957
91
- plain/models/migrations/exceptions.py,sha256=_bGjIMaBP2Py9ePUxUhiH0p1zXrQM4JhJO4lWfyF8-g,1044
92
- plain/models/migrations/executor.py,sha256=4Hsqs6UV5I_Z4PesNi86YPvJyzPcJUTyrxHxGJu2zf0,6907
93
- plain/models/migrations/graph.py,sha256=nrztu_8dU0wAUSxKUqqFWpvZcSQxGEqE6dXWkPytmCU,12570
94
- plain/models/migrations/loader.py,sha256=qUTmaEYI1_mV6goQPQYZKjSz8rMbE6G1wqvrAsmuGwA,16464
95
- plain/models/migrations/migration.py,sha256=22YwRHnaRnCkBpW5p7K89tAU6h4QSsG5yiq-o7W-cSI,6505
96
- plain/models/migrations/optimizer.py,sha256=HH-uz-jnWw_Ni6F2_rRW1nax1Dxmf1s_F_8s8N2OlVc,3266
97
- plain/models/migrations/questioner.py,sha256=qAsePI5JHiSJrlY_kmpgMuK9Dom22q17edov7RtBeGw,11967
98
- plain/models/migrations/recorder.py,sha256=_ncIVLJ4ns6AaO0vVmCoXfABlOFXDKu8NTPsutqKjK4,3653
99
- plain/models/migrations/serializer.py,sha256=yBP9TyUZlSh_8qdw1I4VotbsZqoomz3mBs7ASQLsDH8,12459
100
- plain/models/migrations/state.py,sha256=yX04Y5M87RylEqIpy6pbzWdTw_9Fv2bhtT0ODbPAiZg,32127
101
- plain/models/migrations/utils.py,sha256=Ih_mu6UbdUSt-ZtHaB0xIXHDrBANuFZyftTQ56BFJYs,4174
102
- plain/models/migrations/writer.py,sha256=N8Rnjv5ccsA_CTcS7zZyppzyHFOUQVJy0l6RZYjwF-0,10981
103
- plain/models/migrations/operations/__init__.py,sha256=YKZsQsJ4G5iw9F4o6dOSgSCuLiiKuApvneoV4jqjZaA,752
104
- plain/models/migrations/operations/base.py,sha256=JsKGjM6ouvEbFHzV14km7YjkpOUC4PoUR1M2yGZ82bE,4323
105
- plain/models/migrations/operations/fields.py,sha256=ARL945rbztAnMsbd0lvQRsQJEmxYA3gDof0-4aOTeC4,11255
106
- plain/models/migrations/operations/models.py,sha256=jwhck8ygfi8cW8baVeGUB6coVVv4HnGVSFVb2IW_aTU,24947
107
- plain/models/migrations/operations/special.py,sha256=cKieE9AQcFrpvEw5_TJCum56uu6cfN1p-azY7sKdB7E,4944
108
- plain/models/sql/__init__.py,sha256=FoRCcab-kh_XY8C4eldgLy9-zuk-M63Nyi9cFsYjclU,225
109
- plain/models/sql/compiler.py,sha256=MumFROrMBIRhWpxlq85sj25YeZ1UZMTA7UQfRzzJLwQ,84632
110
- plain/models/sql/constants.py,sha256=usb1LSh9WNGPsurWAGppDkV0wYJJg5GEegKibQdS718,533
111
- plain/models/sql/datastructures.py,sha256=OvMfckKGQOb0pb1UAXhlV-P0FAvvV9oSR0R82i0u0JU,7091
112
- plain/models/sql/query.py,sha256=DkLdkDzQuJWzdtyzCTQldQIHyoJu8JGoTuiLolCA16w,108689
113
- plain/models/sql/subqueries.py,sha256=DGWpBO4wYVT0lSSDoNYcy_VyCLuSueZvoDfrgQu7V1g,5837
114
- plain/models/sql/where.py,sha256=P_2EFg-BMIu9jTZFiiPwz1E74jlSitiP-taShCp5OhU,12642
115
- plain/models/test/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
116
- plain/models/test/pytest.py,sha256=KD5-mxonBxOYIhUh9Ql5uJOIiC9R4t-LYfb6sjA0UdE,3486
117
- plain/models/test/utils.py,sha256=S3d6zf3OFWDxB_kBJr0tDvwn51bjwDVWKPumv37N-p8,467
118
- plain_models-0.49.2.dist-info/METADATA,sha256=glyTbshvz-ZsHIZFWquxv8ycxOddg78GgOZCtdRMyys,8884
119
- plain_models-0.49.2.dist-info/WHEEL,sha256=qtCwoSJWgHk21S1Kb4ihdzI2rlJ1ZKaIurTj_ngOhyQ,87
120
- plain_models-0.49.2.dist-info/entry_points.txt,sha256=IYJAW9MpL3PXyXFWmKmALagAGXC_5rzBn2eEGJlcV04,112
121
- plain_models-0.49.2.dist-info/licenses/LICENSE,sha256=m0D5O7QoH9l5Vz_rrX_9r-C8d9UNr_ciK6Qwac7o6yo,3175
122
- plain_models-0.49.2.dist-info/RECORD,,