sl-shared-assets 3.0.1__py3-none-any.whl → 3.1.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.

Potentially problematic release.


This version of sl-shared-assets might be problematic. Click here for more details.

@@ -8,6 +8,7 @@ Authors: Ivan Kondratyev (Inkaros), Kushaan Gupta, Natalie Yeung
8
8
  from ataraxis_base_utilities import console
9
9
 
10
10
  from .tools import (
11
+ ProjectManifest,
11
12
  resolve_p53_marker,
12
13
  transfer_directory,
13
14
  calculate_directory_checksum,
@@ -86,6 +87,7 @@ __all__ = [
86
87
  "AcquisitionSystems",
87
88
  "WindowCheckingDescriptor",
88
89
  # Tools package
90
+ "ProjectManifest",
89
91
  "resolve_p53_marker",
90
92
  "transfer_directory",
91
93
  "calculate_directory_checksum",
@@ -1,4 +1,5 @@
1
1
  from .tools import (
2
+ ProjectManifest as ProjectManifest,
2
3
  resolve_p53_marker as resolve_p53_marker,
3
4
  transfer_directory as transfer_directory,
4
5
  calculate_directory_checksum as calculate_directory_checksum,
@@ -75,6 +76,7 @@ __all__ = [
75
76
  "SessionTypes",
76
77
  "AcquisitionSystems",
77
78
  "WindowCheckingDescriptor",
79
+ "ProjectManifest",
78
80
  "resolve_p53_marker",
79
81
  "transfer_directory",
80
82
  "calculate_directory_checksum",
sl_shared_assets/cli.py CHANGED
@@ -43,8 +43,18 @@ from .data_classes import SessionData, ProcessingTracker
43
43
  "used if 'create_processed_directories' flag is True."
44
44
  ),
45
45
  )
46
+ @click.option(
47
+ "-um",
48
+ "--update_manifest",
49
+ is_flag=True,
50
+ help=(
51
+ "Determines whether to (re)generate the manifest file for the processed session's project. This flag "
52
+ "should always be enabled when this CLI is executed on the remote compute server(s) to ensure that the "
53
+ "manifest file always reflects the most actual state of each project."
54
+ ),
55
+ )
46
56
  def verify_session_integrity(
47
- session_path: Path, create_processed_directories: bool, processed_data_root: Path | None
57
+ session_path: Path, create_processed_directories: bool, processed_data_root: Path | None, update_manifest: bool
48
58
  ) -> None:
49
59
  """Checks the integrity of the target session's raw data (contents of the raw_data directory).
50
60
 
@@ -63,7 +73,10 @@ def verify_session_integrity(
63
73
 
64
74
  # Runs the verification process
65
75
  verify_session_checksum(
66
- session, create_processed_data_directory=create_processed_directories, processed_data_root=processed_data_root
76
+ session,
77
+ create_processed_data_directory=create_processed_directories,
78
+ processed_data_root=processed_data_root,
79
+ update_manifest=update_manifest,
67
80
  )
68
81
 
69
82
  # Checks the outcome of the verification process
@@ -437,8 +450,22 @@ def start_jupyter_server(
437
450
  "being integrated into any datasets."
438
451
  ),
439
452
  )
453
+ @click.option(
454
+ "-um",
455
+ "--update_manifest",
456
+ is_flag=True,
457
+ help=(
458
+ "Determines whether to (re)generate the manifest file for the processed session's project. This flag "
459
+ "should always be enabled when this CLI is executed on the remote compute server(s) to ensure that the "
460
+ "manifest file always reflects the most actual state of each project."
461
+ ),
462
+ )
440
463
  def resolve_dataset_marker(
441
- session_path: Path, create_processed_directories: bool, project_processed_path: Path | None, remove: bool
464
+ session_path: Path,
465
+ create_processed_directories: bool,
466
+ project_processed_path: Path | None,
467
+ remove: bool,
468
+ update_manifest: bool,
442
469
  ) -> None:
443
470
  """Depending on configuration, either creates or removes the p53.bin marker from the target session.
444
471
 
@@ -452,4 +479,5 @@ def resolve_dataset_marker(
452
479
  create_processed_data_directory=create_processed_directories,
453
480
  processed_data_root=project_processed_path,
454
481
  remove=remove,
482
+ update_manifest=update_manifest,
455
483
  )
sl_shared_assets/cli.pyi CHANGED
@@ -17,7 +17,7 @@ from .data_classes import (
17
17
  )
18
18
 
19
19
  def verify_session_integrity(
20
- session_path: Path, create_processed_directories: bool, processed_data_root: Path | None
20
+ session_path: Path, create_processed_directories: bool, processed_data_root: Path | None, update_manifest: bool
21
21
  ) -> None:
22
22
  """Checks the integrity of the target session's raw data (contents of the raw_data directory).
23
23
 
@@ -86,7 +86,11 @@ def start_jupyter_server(
86
86
  """
87
87
 
88
88
  def resolve_dataset_marker(
89
- session_path: Path, create_processed_directories: bool, project_processed_path: Path | None, remove: bool
89
+ session_path: Path,
90
+ create_processed_directories: bool,
91
+ project_processed_path: Path | None,
92
+ remove: bool,
93
+ update_manifest: bool,
90
94
  ) -> None:
91
95
  """Depending on configuration, either creates or removes the p53.bin marker from the target session.
92
96
 
@@ -249,7 +249,7 @@ class ProcessingTracker(YamlConfig):
249
249
  def __post_init__(self) -> None: ...
250
250
  def __del__(self) -> None:
251
251
  """If the instance as used to start a runtime, ensures that the instance properly marks the runtime as completed
252
- or erred before beign garbage-collected.
252
+ or erred before being garbage-collected.
253
253
 
254
254
  This is a security mechanism to prevent deadlocking the processed session and pipeline for future runtimes.
255
255
  """
@@ -4,9 +4,15 @@ integrity of the data. The tools from this package are used by most other data p
4
4
  from .transfer_tools import transfer_directory
5
5
  from .ascension_tools import ascend_tyche_data
6
6
  from .packaging_tools import calculate_directory_checksum
7
- from .project_management_tools import resolve_p53_marker, verify_session_checksum, generate_project_manifest
7
+ from .project_management_tools import (
8
+ ProjectManifest,
9
+ resolve_p53_marker,
10
+ verify_session_checksum,
11
+ generate_project_manifest,
12
+ )
8
13
 
9
14
  __all__ = [
15
+ "ProjectManifest",
10
16
  "transfer_directory",
11
17
  "calculate_directory_checksum",
12
18
  "ascend_tyche_data",
@@ -2,12 +2,14 @@ from .transfer_tools import transfer_directory as transfer_directory
2
2
  from .ascension_tools import ascend_tyche_data as ascend_tyche_data
3
3
  from .packaging_tools import calculate_directory_checksum as calculate_directory_checksum
4
4
  from .project_management_tools import (
5
+ ProjectManifest as ProjectManifest,
5
6
  resolve_p53_marker as resolve_p53_marker,
6
7
  verify_session_checksum as verify_session_checksum,
7
8
  generate_project_manifest as generate_project_manifest,
8
9
  )
9
10
 
10
11
  __all__ = [
12
+ "ProjectManifest",
11
13
  "transfer_directory",
12
14
  "calculate_directory_checksum",
13
15
  "ascend_tyche_data",
@@ -424,7 +424,10 @@ def generate_project_manifest(
424
424
 
425
425
 
426
426
  def verify_session_checksum(
427
- session_path: Path, create_processed_data_directory: bool = True, processed_data_root: None | Path = None
427
+ session_path: Path,
428
+ create_processed_data_directory: bool = True,
429
+ processed_data_root: None | Path = None,
430
+ update_manifest: bool = False,
428
431
  ) -> None:
429
432
  """Verifies the integrity of the session's raw data by generating the checksum of the raw_data directory and
430
433
  comparing it against the checksum stored in the ax_checksum.txt file.
@@ -440,6 +443,9 @@ def verify_session_checksum(
440
443
  This function is also used to create the processed data hierarchy on the BioHPC server, when it is called as
441
444
  part of the data preprocessing runtime performed by a data acquisition system.
442
445
 
446
+ Since version 3.1.0, this functon also supports (re) generating the processed session's project manifest file,
447
+ which is used to support further Sun lab data processing pipelines.
448
+
443
449
  Args:
444
450
  session_path: The path to the session directory to be verified. Note, the input session directory must contain
445
451
  the 'raw_data' subdirectory.
@@ -447,6 +453,9 @@ def verify_session_checksum(
447
453
  processed_data_root: The root directory where to store the processed data hierarchy. This path has to point to
448
454
  the root directory where to store the processed data from all projects, and it will be automatically
449
455
  modified to include the project name, the animal name, and the session ID.
456
+ update_manifest: Determines whether to update (regenerate) the project manifest file for the processed session's
457
+ project. This should always be enabled when working with remote compute server(s) to ensure that the
458
+ project manifest file contains the most actual snapshot of the project's state.
450
459
  """
451
460
 
452
461
  # Loads session data layout. If configured to do so, also creates the processed data hierarchy
@@ -492,12 +501,33 @@ def verify_session_checksum(
492
501
  if tracker.is_running:
493
502
  tracker.error()
494
503
 
504
+ # If the runtime is configured to generate the project manifest file, attempts to generate and overwrite the
505
+ # existing manifest file for the target project.
506
+ if update_manifest:
507
+ # All sessions are stored under root/project/animal/session. Therefore, the grandparent of the session is
508
+ # the raw project directory.
509
+ raw_directory = session_path.parents[1]
510
+
511
+ # Depending on the processed_data_root configuration, determines the path for the project's processed
512
+ # data directory.
513
+ processed_directory: Path | None = None
514
+ if processed_data_root is not None:
515
+ processed_directory = processed_data_root.joinpath(session_data.project_name)
516
+
517
+ # Generates the manifest file inside the root raw data project directory
518
+ generate_project_manifest(
519
+ raw_project_directory=session_path.parents[1],
520
+ processed_project_directory=processed_directory,
521
+ output_directory=raw_directory,
522
+ )
523
+
495
524
 
496
525
  def resolve_p53_marker(
497
526
  session_path: Path,
498
527
  create_processed_data_directory: bool = True,
499
528
  processed_data_root: None | Path = None,
500
529
  remove: bool = False,
530
+ update_manifest: bool = False,
501
531
  ) -> None:
502
532
  """Depending on configuration, either creates or removes the p53.bin marker file for the target session.
503
533
 
@@ -511,7 +541,10 @@ def resolve_p53_marker(
511
541
 
512
542
  For the p53.bin marker to be created, the session must currently not undergo any processing. Removing the
513
543
  p53.bin marker does not have any dependencies and will be executed even if the session is currently undergoing
514
- dataset integration. This is due to data access hierarchy limitations of the Sun lab BioHPC server.
544
+ dataset integration. This is due to data access hierarchy limitations of the Sun lab compute server.
545
+
546
+ Since version 3.1.0, this functon also supports (re)generating the processed session's project manifest file,
547
+ which is used to support further Sun lab data processing pipelines.
515
548
 
516
549
  Args:
517
550
  session_path: The path to the session directory for which the p53.bin marker needs to be resolved. Note, the
@@ -521,6 +554,9 @@ def resolve_p53_marker(
521
554
  the root directory where to store the processed data from all projects, and it will be automatically
522
555
  modified to include the project name, the animal name, and the session ID.
523
556
  remove: Determines whether this function is called to create or remove the p53.bin marker.
557
+ update_manifest: Determines whether to update (regenerate) the project manifest file for the processed session's
558
+ project. This should always be enabled when working with remote compute server(s) to ensure that the
559
+ project manifest file contains the most actual snapshot of the project's state.
524
560
  """
525
561
 
526
562
  # Loads session data layout. If configured to do so, also creates the processed data hierarchy
@@ -574,3 +610,23 @@ def resolve_p53_marker(
574
610
  # If the runtime reached this point, the session is eligible for dataset integration. Creates the p53.bin marker
575
611
  # file, preventing the session from being processed again as long as the marker exists.
576
612
  session_data.processed_data.p53_path.touch()
613
+
614
+ # If the runtime is configured to generate the project manifest file, attempts to generate and overwrite the
615
+ # existing manifest file for the target project.
616
+ if update_manifest:
617
+ # All sessions are stored under root/project/animal/session. Therefore, the grandparent of the session is
618
+ # the raw project directory.
619
+ raw_directory = session_path.parents[1]
620
+
621
+ # Depending on the processed_data_root configuration, determines the path for the project's processed
622
+ # data directory.
623
+ processed_directory: Path | None = None
624
+ if processed_data_root is not None:
625
+ processed_directory = processed_data_root.joinpath(session_data.project_name)
626
+
627
+ # Generates the manifest file inside the root raw data project directory
628
+ generate_project_manifest(
629
+ raw_project_directory=session_path.parents[1],
630
+ processed_project_directory=processed_directory,
631
+ output_directory=raw_directory,
632
+ )
@@ -131,7 +131,10 @@ def generate_project_manifest(
131
131
  """
132
132
 
133
133
  def verify_session_checksum(
134
- session_path: Path, create_processed_data_directory: bool = True, processed_data_root: None | Path = None
134
+ session_path: Path,
135
+ create_processed_data_directory: bool = True,
136
+ processed_data_root: None | Path = None,
137
+ update_manifest: bool = False,
135
138
  ) -> None:
136
139
  """Verifies the integrity of the session's raw data by generating the checksum of the raw_data directory and
137
140
  comparing it against the checksum stored in the ax_checksum.txt file.
@@ -147,6 +150,9 @@ def verify_session_checksum(
147
150
  This function is also used to create the processed data hierarchy on the BioHPC server, when it is called as
148
151
  part of the data preprocessing runtime performed by a data acquisition system.
149
152
 
153
+ Since version 3.1.0, this functon also supports (re) generating the processed session's project manifest file,
154
+ which is used to support further Sun lab data processing pipelines.
155
+
150
156
  Args:
151
157
  session_path: The path to the session directory to be verified. Note, the input session directory must contain
152
158
  the 'raw_data' subdirectory.
@@ -154,6 +160,9 @@ def verify_session_checksum(
154
160
  processed_data_root: The root directory where to store the processed data hierarchy. This path has to point to
155
161
  the root directory where to store the processed data from all projects, and it will be automatically
156
162
  modified to include the project name, the animal name, and the session ID.
163
+ update_manifest: Determines whether to update (regenerate) the project manifest file for the processed session's
164
+ project. This should always be enabled when working with remote compute server(s) to ensure that the
165
+ project manifest file contains the most actual snapshot of the project's state.
157
166
  """
158
167
 
159
168
  def resolve_p53_marker(
@@ -161,6 +170,7 @@ def resolve_p53_marker(
161
170
  create_processed_data_directory: bool = True,
162
171
  processed_data_root: None | Path = None,
163
172
  remove: bool = False,
173
+ update_manifest: bool = False,
164
174
  ) -> None:
165
175
  """Depending on configuration, either creates or removes the p53.bin marker file for the target session.
166
176
 
@@ -174,7 +184,10 @@ def resolve_p53_marker(
174
184
 
175
185
  For the p53.bin marker to be created, the session must currently not undergo any processing. Removing the
176
186
  p53.bin marker does not have any dependencies and will be executed even if the session is currently undergoing
177
- dataset integration. This is due to data access hierarchy limitations of the Sun lab BioHPC server.
187
+ dataset integration. This is due to data access hierarchy limitations of the Sun lab compute server.
188
+
189
+ Since version 3.1.0, this functon also supports (re)generating the processed session's project manifest file,
190
+ which is used to support further Sun lab data processing pipelines.
178
191
 
179
192
  Args:
180
193
  session_path: The path to the session directory for which the p53.bin marker needs to be resolved. Note, the
@@ -184,4 +197,7 @@ def resolve_p53_marker(
184
197
  the root directory where to store the processed data from all projects, and it will be automatically
185
198
  modified to include the project name, the animal name, and the session ID.
186
199
  remove: Determines whether this function is called to create or remove the p53.bin marker.
200
+ update_manifest: Determines whether to update (regenerate) the project manifest file for the processed session's
201
+ project. This should always be enabled when working with remote compute server(s) to ensure that the
202
+ project manifest file contains the most actual snapshot of the project's state.
187
203
  """
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: sl-shared-assets
3
- Version: 3.0.1
3
+ Version: 3.1.0
4
4
  Summary: Provides data acquisition and processing assets shared between Sun (NeuroAI) lab libraries.
5
5
  Project-URL: Homepage, https://github.com/Sun-Lab-NBB/sl-shared-assets
6
6
  Project-URL: Documentation, https://sl-shared-assets-api-docs.netlify.app/
@@ -1,7 +1,7 @@
1
- sl_shared_assets/__init__.py,sha256=rCu1VYs2Lc1l0jqHO3UtfuymU0uY2ccxEn4UyscIut8,2347
2
- sl_shared_assets/__init__.pyi,sha256=WCWIS-I3ToP4XybNZAi3fA7j2CZ48dl9D-fmd7oZKCo,2615
3
- sl_shared_assets/cli.py,sha256=Af2yRujqZ01IzmXBqsMQmuz2yvRm4raKZ-y58j49fUI,18141
4
- sl_shared_assets/cli.pyi,sha256=hVxU1YlhWDz41GHaaH7rkbZz2slTMBmG83-7rg_geYk,5265
1
+ sl_shared_assets/__init__.py,sha256=ybThh0XDtijjwahKkSEnnQ44rxrN2SVyjB5dHaXts0E,2391
2
+ sl_shared_assets/__init__.pyi,sha256=Cb-umRqvnynk2udbgqAJ6h5_tiJyvVtWmx0kLKrL2Yg,2678
3
+ sl_shared_assets/cli.py,sha256=OIwXf6pNPnzqzUPL7mSmEw17KIa3yAOpP0Mpo1Zpf88,19087
4
+ sl_shared_assets/cli.pyi,sha256=5hEbOnYaH4q5qdqJ-zhM9-ElzgcaBeMAX34tuHaUDos,5328
5
5
  sl_shared_assets/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
6
6
  sl_shared_assets/data_classes/__init__.py,sha256=mP__bBIIjMf0EETM4PgQzKy1ZKsjp6paRPNDWWbPRV4,1962
7
7
  sl_shared_assets/data_classes/__init__.pyi,sha256=J7ZCH9qQ4qz-3Wq9ILdihlmK9zFR3iU1cpLcSaN45Y8,2238
@@ -10,7 +10,7 @@ sl_shared_assets/data_classes/configuration_data.pyi,sha256=1_kmBDPGkHmVwXEGYR_3
10
10
  sl_shared_assets/data_classes/runtime_data.py,sha256=kmXTUk5rDAJBN3XrYLYgusJRfVJ5WiBBk0RPNiSk2pE,16725
11
11
  sl_shared_assets/data_classes/runtime_data.pyi,sha256=Hyc-dBePM0xIGgkSIoKmwwUUmdOokm1LUwy1OHHalyU,6771
12
12
  sl_shared_assets/data_classes/session_data.py,sha256=YKXako1sNB87LDkGEXx9WZFs6lG3aD619lga5g4L4Ks,49172
13
- sl_shared_assets/data_classes/session_data.pyi,sha256=F_6UAzEiPJjxfHQaOt_pttjSUvSggq1FT48GAHmmcbA,15959
13
+ sl_shared_assets/data_classes/session_data.pyi,sha256=CgB4nIDBl4bY1JvcIILfFTlos3ukl3WK4AOaku4CL3Y,15959
14
14
  sl_shared_assets/data_classes/surgery_data.py,sha256=5B1OPKFq4bnzbAoe-_c5dFV3kbSD5YFzXbX2zXmfGs8,7485
15
15
  sl_shared_assets/data_classes/surgery_data.pyi,sha256=rf59lJ3tGSYKHQlEGXg75MnjajBwl0DYhL4TClAO4SM,2605
16
16
  sl_shared_assets/server/__init__.py,sha256=GOQ7wWjiS5Xg_WgTqeEqCTRF9ms9GXx0nffCr-BmKsA,453
@@ -19,18 +19,18 @@ sl_shared_assets/server/job.py,sha256=wZbppMrv6fqch79bKLjOGQ9AYfjiDKDnTyUe7xgAT4
19
19
  sl_shared_assets/server/job.pyi,sha256=wop4ulVY2u6eb3twajeA9MS0EAtNb89aA56pPoGF1Xc,11673
20
20
  sl_shared_assets/server/server.py,sha256=oEwdXisyel72Hdk7ZpEwTPq3Lu64UbQWfGHArV8Y6nI,32978
21
21
  sl_shared_assets/server/server.pyi,sha256=84XFtqU9fYbxu6Ldf-OMB2nFe6wdGneZM1MFtR9rz4s,15133
22
- sl_shared_assets/tools/__init__.py,sha256=NktXk62E_HHOrO_93z_MVmSd6-Oir3mE4xE9Yr8Qa7U,682
23
- sl_shared_assets/tools/__init__.pyi,sha256=0UXorfCXXmHQOP5z7hODpsqEX0DAkOta5VZqN6FSS-w,623
22
+ sl_shared_assets/tools/__init__.py,sha256=i-oUVw_un3lzyyII4Sc75s4BnUfZh_aUbQe6dP2Vrbc,743
23
+ sl_shared_assets/tools/__init__.pyi,sha256=pi-5AJyQYeuqIFGWpJ_HhUpXLq6P_nItIqDhsdaIJFU,686
24
24
  sl_shared_assets/tools/ascension_tools.py,sha256=xI-hrkR9NIgb7lyhj-ntc8tCYQvDEv6YgYJXl1yvxCs,14639
25
25
  sl_shared_assets/tools/ascension_tools.pyi,sha256=fs5j7nbnZ4WpgK8D75A7WJcvFMwK_MUO9ULIYo1YkGo,3739
26
26
  sl_shared_assets/tools/packaging_tools.py,sha256=VxQoluGPDUWjPj1ftEt2dvUcdmj0g7T1frGZhZPM8NE,7541
27
27
  sl_shared_assets/tools/packaging_tools.pyi,sha256=vgGbAQCExwg-0A5F72MzEhzHxu97Nqg1yuz-5P89ycU,3118
28
- sl_shared_assets/tools/project_management_tools.py,sha256=_AQFLKqK22pqzMDPqNY5Wde0bRVvZLcTO2gYrhKD89M,28744
29
- sl_shared_assets/tools/project_management_tools.pyi,sha256=AeBG-8XUygiJndfsBCKACKIZdnvk0avQRibWO24ahtM,10238
28
+ sl_shared_assets/tools/project_management_tools.py,sha256=vutKi0pdQn5dxBk1OcxPB4XspzQyJwzerNhGi4Vg4iw,31935
29
+ sl_shared_assets/tools/project_management_tools.pyi,sha256=hdn0U9e3_j9McJH75Dzoas-FxcB9nVCTHEFHPofdLtg,11361
30
30
  sl_shared_assets/tools/transfer_tools.py,sha256=vqYO4sERZV0W1DFNFnTpJA6QBZ4QJA94a2TyUhZW2Qk,6605
31
31
  sl_shared_assets/tools/transfer_tools.pyi,sha256=WtUGfaKV9FP_CnhBg_UvclpuDvOlEESOSMlEDtWpOLg,3293
32
- sl_shared_assets-3.0.1.dist-info/METADATA,sha256=78zdy2sXUtOmroilVGfI7k2LmVnFKjkyYpVXP0LesMA,56944
33
- sl_shared_assets-3.0.1.dist-info/WHEEL,sha256=qtCwoSJWgHk21S1Kb4ihdzI2rlJ1ZKaIurTj_ngOhyQ,87
34
- sl_shared_assets-3.0.1.dist-info/entry_points.txt,sha256=UmO1rl7ly9N7HWPwWyP9E0b5KBUStpBo4TRoqNtizDY,430
35
- sl_shared_assets-3.0.1.dist-info/licenses/LICENSE,sha256=OXLcl0T2SZ8Pmy2_dmlvKuetivmyPd5m1q-Gyd-zaYY,35149
36
- sl_shared_assets-3.0.1.dist-info/RECORD,,
32
+ sl_shared_assets-3.1.0.dist-info/METADATA,sha256=SbnWSGHffTfwIaQGGP04zsSZ-T2yFga1jL79eLLoib8,56944
33
+ sl_shared_assets-3.1.0.dist-info/WHEEL,sha256=qtCwoSJWgHk21S1Kb4ihdzI2rlJ1ZKaIurTj_ngOhyQ,87
34
+ sl_shared_assets-3.1.0.dist-info/entry_points.txt,sha256=UmO1rl7ly9N7HWPwWyP9E0b5KBUStpBo4TRoqNtizDY,430
35
+ sl_shared_assets-3.1.0.dist-info/licenses/LICENSE,sha256=OXLcl0T2SZ8Pmy2_dmlvKuetivmyPd5m1q-Gyd-zaYY,35149
36
+ sl_shared_assets-3.1.0.dist-info/RECORD,,