django-spire 0.22.1__py3-none-any.whl → 0.22.3__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.
django_spire/consts.py CHANGED
@@ -1,4 +1,4 @@
1
- __VERSION__ = '0.22.1'
1
+ __VERSION__ = '0.22.3'
2
2
 
3
3
  MAINTENANCE_MODE_SETTINGS_NAME = 'MAINTENANCE_MODE'
4
4
 
@@ -24,24 +24,21 @@ class CollectionQuerySet(HistoryQuerySet, OrderingQuerySetMixin):
24
24
  def by_parent_id(self, parent_id: int) -> QuerySet[Collection]:
25
25
  return self.filter(parent_id=parent_id)
26
26
 
27
+ def by_parent_ids(self, parent_ids: list[int]) -> QuerySet[Collection]:
28
+ return self.filter(parent_id__in=parent_ids)
29
+
27
30
  def childless(self) -> QuerySet[Collection]:
28
31
  return self.annotate(child_count=Count('child')).filter(child_count=0)
29
32
 
30
- def exclude_children(self, collection: Collection) -> QuerySet[Collection]:
31
- descendant_ids = set()
32
- current_level_ids = [collection.id]
33
-
34
- while current_level_ids:
35
- children = self.filter(parent_id__in=current_level_ids)
36
- child_ids = list(children.values_list('id', flat=True))
37
-
38
- if not child_ids:
39
- break
40
-
41
- descendant_ids.update(child_ids)
42
- current_level_ids = child_ids
33
+ def children(self, collection_id: int) -> QuerySet[Collection]:
34
+ return self.filter(
35
+ id__in=self.model.services.tool.get_children_ids(parent_id=collection_id)
36
+ )
43
37
 
44
- return self.exclude(id__in=descendant_ids)
38
+ def exclude_children(self, collection_id: int) -> QuerySet[Collection]:
39
+ return self.exclude(
40
+ id__in=self.model.services.tool.get_children_ids(parent_id=collection_id)
41
+ )
45
42
 
46
43
  def parentless(self) -> QuerySet[Collection]:
47
44
  return self.filter(parent_id__isnull=True)
@@ -11,6 +11,8 @@ from django_spire.knowledge.collection.services.ordering_service import \
11
11
  from django_spire.knowledge.collection.services.processor_service import \
12
12
  CollectionProcessorService
13
13
  from django_spire.knowledge.collection.services.tag_service import CollectionTagService
14
+ from django_spire.knowledge.collection.services.tool_services import \
15
+ CollectionToolService
14
16
  from django_spire.knowledge.collection.services.transformation_service import \
15
17
  CollectionTransformationService
16
18
 
@@ -24,6 +26,7 @@ class CollectionService(BaseDjangoModelService['Collection']):
24
26
  ordering = CollectionOrderingService()
25
27
  processor = CollectionProcessorService()
26
28
  tag = CollectionTagService()
29
+ tool = CollectionToolService()
27
30
  transformation = CollectionTransformationService()
28
31
 
29
32
  def save_model_obj(self, **field_data) -> tuple[Collection, bool]:
@@ -0,0 +1,37 @@
1
+ from __future__ import annotations
2
+
3
+ from django_spire.contrib.service import BaseDjangoModelService
4
+
5
+ from typing import TYPE_CHECKING
6
+
7
+ if TYPE_CHECKING:
8
+ from django_spire.knowledge.collection.models import Collection
9
+
10
+
11
+ class CollectionToolService(BaseDjangoModelService['Collection']):
12
+ obj: Collection
13
+
14
+ def get_children_ids(self, parent_id: int) -> set[int]:
15
+ descendant_ids = set()
16
+ current_level_ids = [parent_id]
17
+
18
+ while current_level_ids:
19
+ child_ids = self.obj_class.objects.by_parent_ids(
20
+ parent_ids=current_level_ids
21
+ ).values_list('id', flat=True)
22
+
23
+ if not child_ids:
24
+ break
25
+
26
+ descendant_ids.update(child_ids)
27
+ current_level_ids = child_ids
28
+
29
+ return descendant_ids
30
+
31
+ def get_root_collection_pk(self) -> int:
32
+ collection = self.obj
33
+
34
+ while collection.parent_id:
35
+ collection = collection.parent
36
+
37
+ return collection.id
@@ -19,11 +19,11 @@ if TYPE_CHECKING:
19
19
  class CollectionTransformationService(BaseDjangoModelService['Collection']):
20
20
  obj: Collection
21
21
 
22
- def to_hierarchy_json(self, request: WSGIRequest, parent_id: int | None = None) -> str:
22
+ def to_hierarchy_json(self, request: WSGIRequest, parent_id: int) -> str:
23
23
  collections = (
24
24
  self.obj_class.objects
25
25
  .active()
26
- .by_parent_id(parent_id=parent_id)
26
+ .children(collection_id=parent_id)
27
27
  .request_user_has_access(request)
28
28
  .select_related('parent')
29
29
  )
@@ -38,7 +38,7 @@ def form_view(
38
38
  .active()
39
39
  .request_user_has_access(request)
40
40
  .exclude(pk=collection.pk)
41
- .exclude_children(collection=collection)
41
+ .exclude_children(collection_id=pk)
42
42
  ),
43
43
  fields=['name']
44
44
  )
@@ -66,7 +66,7 @@ def form_view(
66
66
  if collection.parent_id:
67
67
  return_url = reverse(
68
68
  'django_spire:knowledge:collection:page:top_level',
69
- kwargs={'pk': collection.parent_id}
69
+ kwargs={'pk': collection.services.tool.get_root_collection_pk()}
70
70
  )
71
71
  else:
72
72
  return_url = reverse('django_spire:knowledge:page:home')
@@ -62,10 +62,10 @@ class MarkdownConverter(BaseConverter):
62
62
  return [
63
63
  models.EntryVersionBlock.services.factory.create_validated_block(
64
64
  entry_version=self.entry_version,
65
- block_type=MARKO_BLOCK_TYPE_TO_BLOCK_CHOICES[marko_block.__class__],
66
- block_data=self._marko_block_to_editor_block_data_dict(marko_block),
67
- block_order=order,
68
- block_tunes={}
65
+ type=MARKO_BLOCK_TYPE_TO_BLOCK_CHOICES[marko_block.__class__],
66
+ data=self._marko_block_to_editor_block_data_dict(marko_block),
67
+ order=order,
68
+ tunes={}
69
69
  )
70
70
  for order, marko_block in enumerate(marko_blocks)
71
71
  ]
@@ -75,7 +75,6 @@ function create_editorjs_instance({holder_id, update_url, initial_editor_blocks}
75
75
  if (block_id) {
76
76
  setTimeout(() => {
77
77
  const element = document.querySelector(`[data-id="${block_id}"]`)
78
- console.log('element', element)
79
78
  if (element) {
80
79
  element.scrollIntoView({behavior: 'smooth', block: 'center'})
81
80
  element.style.transition = 'background-color 1s ease'
@@ -18,4 +18,3 @@
18
18
  No Items Found
19
19
  {% endfor %}
20
20
  {% endblock %}
21
-
@@ -16,13 +16,6 @@
16
16
  :class="{'ms-4': collection.parent.id !== -1}"
17
17
  class="mb-1 collection"
18
18
  >
19
- <div x-data="{
20
- init() {
21
- console.log(collection)
22
- }
23
- }">
24
-
25
- </div>
26
19
  {% include 'django_spire/knowledge/sub_navigation/item/collection_sub_navigation_item.html' %}
27
20
 
28
21
  <div x-show="is_expanded(collection.id)" class="my-1">
@@ -11,7 +11,6 @@
11
11
  await this.collection.get()
12
12
  this.collection.glue_fields.parent.choices = await this.collection_query_set.to_choices()
13
13
  this.collection.glue_fields.parent.label = 'Parent Collection'
14
- console.log(this.collection.parent)
15
14
 
16
15
  if (!this.collection.parent) {
17
16
  this.collection.parent = {{ collection_parent_pk|default:'null' }}
@@ -64,15 +64,11 @@
64
64
  x-data="{
65
65
  editor_element_id: 'knowledge-entry-version-editor',
66
66
  init() {
67
- console.log('Editor blocks:', {{ version_blocks }})
68
67
  KNOWLEDGE_ENTRY_VERSION_EDITOR = create_editorjs_instance({
69
68
  holder_id: this.editor_element_id,
70
69
  initial_editor_blocks: {{ version_blocks }},
71
70
  update_url: '{% url "django_spire:knowledge:entry:version:json:update_blocks" pk=entry.id %}'
72
71
  })
73
- console.log('Editor initialized:', KNOWLEDGE_ENTRY_VERSION_EDITOR)
74
- console.log(KNOWLEDGE_ENTRY_VERSION_EDITOR)
75
-
76
72
  }
77
73
 
78
74
  }"
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: django-spire
3
- Version: 0.22.1
3
+ Version: 0.22.3
4
4
  Summary: A project for Django Spire
5
5
  Author-email: Brayden Carlson <braydenc@stratusadv.com>, Nathan Johnson <nathanj@stratusadv.com>
6
6
  License: Copyright (c) 2024 Stratus Advanced Technologies and Contributors.
@@ -1,6 +1,6 @@
1
1
  django_spire/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
2
2
  django_spire/conf.py,sha256=c5Hs-7lk9T15254tOasiQ2ZTFLQIVJof9_QJDfm1PAI,933
3
- django_spire/consts.py,sha256=GkvgHyxBBoMVG-DwMxZMs702frH-HZ0L5xU4_r338PQ,171
3
+ django_spire/consts.py,sha256=eJ7iYe078p7JYe0fEg6B3xuHt-HWjI4-tq6KzQLfKg8,171
4
4
  django_spire/exceptions.py,sha256=L5ndRO5ftMmh0pHkO2z_NG3LSGZviJ-dDHNT73SzTNw,48
5
5
  django_spire/settings.py,sha256=B4GPqBGt_dmkt0Ay0j-IP-SZ6mY44m2Ap5kVSON5YLA,1005
6
6
  django_spire/urls.py,sha256=mKeZszb5U4iIGqddMb5Tt5fRC72U2wABEOi6mvOfEBU,656
@@ -833,7 +833,7 @@ django_spire/knowledge/collection/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeR
833
833
  django_spire/knowledge/collection/admin.py,sha256=9OKEgiSDiSHX6ZwB11l6mCx-jdF4VKfOe-SwFBdjKK4,1370
834
834
  django_spire/knowledge/collection/forms.py,sha256=7JovVxNzE67hSydDa-1JGK4U4zPyzOj605QyEl0JkP8,238
835
835
  django_spire/knowledge/collection/models.py,sha256=69ol2B-ytH6mJ48afFywPhENQNnM37gAsX-Grjim-g4,2387
836
- django_spire/knowledge/collection/querysets.py,sha256=8DWTGvo4WovXQ9n7XRLoxtyDdBUka2N-kcPUnJVOhOo,2479
836
+ django_spire/knowledge/collection/querysets.py,sha256=JzrCudpAzO45cVt-sqdXva8LMJB5wiwSL1zS2eki47E,2485
837
837
  django_spire/knowledge/collection/seeding/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
838
838
  django_spire/knowledge/collection/seeding/seed.py,sha256=i4VEvScJvZ1SUV9ukKZp0qdh_owyLyVSHGgl8vIzhwQ,303
839
839
  django_spire/knowledge/collection/seeding/seeder.py,sha256=Zgrl-S0iAwK6LU2pMmRIdr87kAvrPtQ7GLJlONUSBlM,1523
@@ -841,9 +841,10 @@ django_spire/knowledge/collection/services/__init__.py,sha256=47DEQpj8HBSa-_TImW
841
841
  django_spire/knowledge/collection/services/factory_service.py,sha256=92DLZODSRPF-iA9r3Jgys2GzbC39KssGEk9eOJ5wZjs,1298
842
842
  django_spire/knowledge/collection/services/ordering_service.py,sha256=vTkSdt1lVT4VxSK3GhZibj8FPDDy5butwPkVzqmm07g,1243
843
843
  django_spire/knowledge/collection/services/processor_service.py,sha256=3ArKBndoL3HEvH_1EBqfiw7AnbFYZ0WmBgcPV8BHdLQ,911
844
- django_spire/knowledge/collection/services/service.py,sha256=sEamdqRcKdNcL6yz18hok0jww3Z4VRCPWrMF2QLvKGE,1830
844
+ django_spire/knowledge/collection/services/service.py,sha256=g2agKPcnoccjjAw0P5Sj9CVYOA6qU4vNZwn0g4hFvE4,1962
845
845
  django_spire/knowledge/collection/services/tag_service.py,sha256=o1HnL0-du0XCGIl_8nMGMgW9AzEQE-AWbGOoBN_cQb0,1774
846
- django_spire/knowledge/collection/services/transformation_service.py,sha256=ME_jYURSG7at4oujTbcRzIVXyKnb75Xi6M4Nclbw6Yo,3464
846
+ django_spire/knowledge/collection/services/tool_services.py,sha256=tnOL23zJ_x7vKBH4PtR7a0AzYnmfLxHcEpYHIWzu9Kc,984
847
+ django_spire/knowledge/collection/services/transformation_service.py,sha256=KDCLBSdT9sszjtwtDO2yWdT-iwGpxmCwhIRN6MvEvTU,3450
847
848
  django_spire/knowledge/collection/tests/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
848
849
  django_spire/knowledge/collection/tests/factories.py,sha256=NUu4OliEZIQL9c05RPIPdzYP3Dtn1szLZxP4Wl-kX2w,429
849
850
  django_spire/knowledge/collection/tests/test_services/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
@@ -857,7 +858,7 @@ django_spire/knowledge/collection/urls/form_urls.py,sha256=yHU3sbaA3w-m9rVvon6nX
857
858
  django_spire/knowledge/collection/urls/json_urls.py,sha256=XZp5wt8m9x38Uuy1dhegqZ4qlJLZK2EgJsLltx97o0Q,195
858
859
  django_spire/knowledge/collection/urls/page_urls.py,sha256=M8zZJJzVmMx7QUc3uGIrjyb8-Kz00fz7u0mHYqFZf3M,280
859
860
  django_spire/knowledge/collection/views/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
860
- django_spire/knowledge/collection/views/form_views.py,sha256=ziQhlrLEJ62VzYiIAApd0ZThM2jc-who-qw0_BlO-VI,3014
861
+ django_spire/knowledge/collection/views/form_views.py,sha256=jh9pV6SBF7gqflvFooKVU4EFS34eTqRK-Nt22iqAlRg,3038
861
862
  django_spire/knowledge/collection/views/json_views.py,sha256=uzSD83O7p-L5Oh8jo_Ejh-4lbo5zXjLkZGe0cn6SXSw,1030
862
863
  django_spire/knowledge/collection/views/page_views.py,sha256=jiKsIqi9pvSY5KbLLGDdTHSPHXmnd-7oyYXckF2ONh4,2045
863
864
  django_spire/knowledge/entry/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
@@ -920,7 +921,7 @@ django_spire/knowledge/entry/version/block/tests/factories.py,sha256=T2_3E6n9JBF
920
921
  django_spire/knowledge/entry/version/converters/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
921
922
  django_spire/knowledge/entry/version/converters/converter.py,sha256=0zbM7FTCpXe_O8gfsVc4V0Pg4cks7HMZi4SXJQ_HIEw,584
922
923
  django_spire/knowledge/entry/version/converters/docx_converter.py,sha256=lVpgUHium1JzStvx1em1TkpvXPvGgvF_eEK53V_7V6A,2570
923
- django_spire/knowledge/entry/version/converters/markdown_converter.py,sha256=uJisGt1nXg78XdA2jSCftN0fmFn9BLZuuLvBGi7c_Vg,8423
924
+ django_spire/knowledge/entry/version/converters/markdown_converter.py,sha256=Y2xSbb3KknIkBakJEp2H66k0_zgkA4jBoeKu_7X9-DE,8399
924
925
  django_spire/knowledge/entry/version/intelligence/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
925
926
  django_spire/knowledge/entry/version/intelligence/bots/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
926
927
  django_spire/knowledge/entry/version/intelligence/bots/markdown_format_llm_bot.py,sha256=6oM0G8uKGgT21fmTqUkDp4Y8Q5ZTLlabZaBHe-kuy3w,858
@@ -974,15 +975,15 @@ django_spire/knowledge/seeding/seed.py,sha256=LRhVfPHiFluSLLtjSY44YM9Oo1Hvfs_U-k
974
975
  django_spire/knowledge/static/django_spire/knowledge/collection/js/managers.js,sha256=1b0pRPYJvYjKKZB2wshdoseAUR3_Al-2qxFUWE5q-oo,4319
975
976
  django_spire/knowledge/static/django_spire/knowledge/collection/js/x_component.js,sha256=avczuHac3i58k06wA-LPpgupedCYbuDVTjTYVjEho18,898
976
977
  django_spire/knowledge/static/django_spire/knowledge/css/navigation_items.css,sha256=jhjW4fiQI13PUAkSupLrLn-Fu9nzAVqMezK8EkJnGZ8,178
977
- django_spire/knowledge/static/django_spire/knowledge/entry/version/js/editor.js,sha256=FjcLWrZRRNyDIRE43hqbtlo3Thypzk2GD3uBPzl1SNI,3858
978
+ django_spire/knowledge/static/django_spire/knowledge/entry/version/js/editor.js,sha256=zDK9PNO7XR0j95I17uBmfguSF8LzYijx3irM2my3IqA,3798
978
979
  django_spire/knowledge/static/django_spire/knowledge/entry/version/js/managers.js,sha256=q-HiSnOnMMomxU0EAWSbQO55HMVvb8wPxA0KCP3VyP4,2772
979
980
  django_spire/knowledge/static/django_spire/knowledge/entry/version/js/null_paragraph.js,sha256=Bc0oslLdlLcncbcUklhU1RF4PGiByC-mH-ENq1S1Niw,211
980
981
  django_spire/knowledge/templates/django_spire/knowledge/collection/card/form_card.html,sha256=Fm1PFgMJO0B1ji86pjeL_KbGkKq-ho7n6v9gtCODlzU,154
981
- django_spire/knowledge/templates/django_spire/knowledge/collection/card/top_level_list_card.html,sha256=LeE67fpcF8OfOXnjOp1199RWunX4pAFbqgVV_wdK9gY,696
982
- django_spire/knowledge/templates/django_spire/knowledge/collection/component/x_collection_navigation.html,sha256=ozztAZ_dfBHDh13thPkmZK1w1neHKht_cnbypUB1e8U,2590
982
+ django_spire/knowledge/templates/django_spire/knowledge/collection/card/top_level_list_card.html,sha256=RFcSfk37OpuyRTdb3UjQc6ntyE5Rt3_2BgLEoD1mI3Y,695
983
+ django_spire/knowledge/templates/django_spire/knowledge/collection/component/x_collection_navigation.html,sha256=3lHzZ1pD-SWVGnzquczsVaAswli8FM7PSQNiLmg0Pn4,2415
983
984
  django_spire/knowledge/templates/django_spire/knowledge/collection/container/detail_container.html,sha256=0T1L7mRyAH-I04_8rmyL6ZbsT1TWcIGzZ-NnGPllRco,321
984
985
  django_spire/knowledge/templates/django_spire/knowledge/collection/element/ellipsis_dropdown.html,sha256=o9cceexfwUSDtac4uhlUm4LimnBQrgTP6QPkpJF6DD0,1376
985
- django_spire/knowledge/templates/django_spire/knowledge/collection/form/form.html,sha256=gDjvFBpNQHGn4PNJBi4pBw89-IakpyrC23D9dr0xQ-c,1902
986
+ django_spire/knowledge/templates/django_spire/knowledge/collection/form/form.html,sha256=o015wNWZCsdqafvdjzsdOS3xUo2UtkyHaXn9-2N2s4s,1854
986
987
  django_spire/knowledge/templates/django_spire/knowledge/collection/item/collection_item.html,sha256=gaOqh1wxf5IcWdxWWiYyz6HWjoPyn6FohaTMIssJ67k,517
987
988
  django_spire/knowledge/templates/django_spire/knowledge/collection/page/display_page.html,sha256=AzYod7og_yU_lfxWIRFC2R_ga_jwH_Cr4VE07sRlGT8,2400
988
989
  django_spire/knowledge/templates/django_spire/knowledge/collection/page/form_page.html,sha256=eD190iYnmx-6u8Y0EAExDdilPtxTlS_ic6-WBfTtj2s,274
@@ -1000,7 +1001,7 @@ django_spire/knowledge/templates/django_spire/knowledge/entry/item/list_item.htm
1000
1001
  django_spire/knowledge/templates/django_spire/knowledge/entry/modal/publish_confirm_modal.html,sha256=7SsTjvk_iOdBgnYy83pMBPIdbuvJadd4h5XI5mPos5o,724
1001
1002
  django_spire/knowledge/templates/django_spire/knowledge/entry/page/form_page.html,sha256=EBfDjDBvo7IR6f5joTtZjzK5LtZb4rt0U1FO1HQNt88,291
1002
1003
  django_spire/knowledge/templates/django_spire/knowledge/entry/page/import_form_page.html,sha256=TK8Bc7mUZwsmV1Xm9FPyWz7Hws68Ijy4c55orvNoOC4,308
1003
- django_spire/knowledge/templates/django_spire/knowledge/entry/version/container/editor_container.html,sha256=NAtXEq8UJOV9_vp3l5HIIdQp-lZhNVW4luF0Nvv8Sl8,3389
1004
+ django_spire/knowledge/templates/django_spire/knowledge/entry/version/container/editor_container.html,sha256=-fPVVnCdDUMA0AoKjQ3bA7gRrbnggPRlRlPqYvgIoKA,3153
1004
1005
  django_spire/knowledge/templates/django_spire/knowledge/entry/version/page/editor_page.html,sha256=Gc5uYGjYJR8nwaLa0hm-5GHO3ezI9CLO0H_OLp8EvdE,3092
1005
1006
  django_spire/knowledge/templates/django_spire/knowledge/message/knowledge_message_intel.html,sha256=kOSsRJHkh8hFYp1k1Y0wc-wh75VVjdXldEKErkfANGY,855
1006
1007
  django_spire/knowledge/templates/django_spire/knowledge/page/full_page.html,sha256=vz3WQ6SAL43QALRf0haaLfNkUfIQQemR0FAZQ2tznV4,1331
@@ -1161,8 +1162,8 @@ django_spire/theme/urls/page_urls.py,sha256=S8nkKkgbhG3XHI3uMUL-piOjXIrRkuY2UlM_
1161
1162
  django_spire/theme/views/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
1162
1163
  django_spire/theme/views/json_views.py,sha256=W1khC2K_EMbEzAFmMxC_P76_MFnkRH4-eVdodrRfAhw,1904
1163
1164
  django_spire/theme/views/page_views.py,sha256=pHr8iekjtR99xs7w1taj35HEo133Svq1dvDD0y0VL1c,3933
1164
- django_spire-0.22.1.dist-info/licenses/LICENSE.md,sha256=tlTbOtgKoy-xAQpUk9gPeh9O4oRXCOzoWdW3jJz0wnA,1091
1165
- django_spire-0.22.1.dist-info/METADATA,sha256=NoSKljzmaON1i2bUleBV34oumpw460s_7RyY1lYeHeQ,4967
1166
- django_spire-0.22.1.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
1167
- django_spire-0.22.1.dist-info/top_level.txt,sha256=xf3QV1e--ONkVpgMDQE9iqjQ1Vg4--_6C8wmO-KxPHQ,13
1168
- django_spire-0.22.1.dist-info/RECORD,,
1165
+ django_spire-0.22.3.dist-info/licenses/LICENSE.md,sha256=tlTbOtgKoy-xAQpUk9gPeh9O4oRXCOzoWdW3jJz0wnA,1091
1166
+ django_spire-0.22.3.dist-info/METADATA,sha256=Aa-oMM1yPLilHIiDXaOaoYe6FgpenWFtSxixuTcbQao,4967
1167
+ django_spire-0.22.3.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
1168
+ django_spire-0.22.3.dist-info/top_level.txt,sha256=xf3QV1e--ONkVpgMDQE9iqjQ1Vg4--_6C8wmO-KxPHQ,13
1169
+ django_spire-0.22.3.dist-info/RECORD,,