Skip to content

Commit

Permalink
Incorporate matrix tube sample accession into amplicon notebook v2 (#200
Browse files Browse the repository at this point in the history
)

* manual-merged all updates

* changes based on feedback

* reviewed updated version and deleted the old amplicon notebook

* cleaned up the amplicon notebook for sample accession and katharoseq control name generation. Also the iseq_count notebook for generating katharoseq names

* updated based on feedback

* fix CI issue

* bugfix

* tailor coverage report generation

---------

Co-authored-by: cbrenchy <cbrenchy@gmail.com>
  • Loading branch information
charles-cowart and cbrenchy committed May 1, 2024
1 parent ae44a82 commit 0601264
Show file tree
Hide file tree
Showing 28 changed files with 6,609 additions and 3,981 deletions.
2 changes: 2 additions & 0 deletions .coveragerc
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
[report]
ignore_errors = True
4 changes: 3 additions & 1 deletion .github/workflows/main.yml
Original file line number Diff line number Diff line change
Expand Up @@ -137,7 +137,9 @@ jobs:
run: |
conda activate metapool
nosetests --with-coverage --cover-inclusive --cover-package metapool
coverage report
# -i switch introduced to ignore errors when reading source files.
# See: https://stackoverflow.com/questions/2386975/no-source-for-code-message-in-coverage-py
coverage report -i
- name: Python linter
shell: bash -l {0}
Expand Down
1,243 changes: 710 additions & 533 deletions metapool/metapool.py

Large diffs are not rendered by default.

10 changes: 6 additions & 4 deletions metapool/plate.py
Original file line number Diff line number Diff line change
Expand Up @@ -11,11 +11,13 @@


EXPECTED_COLUMNS = {
'Plate Position', 'Primer Plate #', 'Plating', 'Extraction Kit Lot',
'Plate Position', 'Plate map file', 'Plate elution volume',
'Primer Plate #', 'Plating', 'Extraction Kit Lot',
'Extraction Robot', 'TM1000 8 Tool', 'Primer Date', 'MasterMix Lot',
'Water Lot', 'Processing Robot', 'Sample Plate', 'Project_Name',
'Original Name', 'TM300 8 Tool', 'TM50 8 Tool', 'TM10 8 Tool', 'run_date',
'instrument_model', 'center_project_name', 'experiment_design_description'}
'Water Lot', 'Processing Robot', 'Sample Plate', 'Project Name',
'Project Abbreviation', 'Original Name', 'TM300 8 Tool', 'TM50 8 Tool',
'TM10 8 Tool', 'run_date', 'instrument_model', 'center_project_name',
'experiment_design_description'}


class Message(object):
Expand Down
21 changes: 19 additions & 2 deletions metapool/prep.py
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,7 @@
from datetime import datetime
from string import ascii_letters, digits
from metapool.plate import PlateReplication
from collections import Counter


REQUIRED_MF_COLUMNS = {'sample_name', 'barcode', 'primer', 'primer_plate',
Expand Down Expand Up @@ -728,6 +729,7 @@ def generate_qiita_prep_file(platedf, seqtype):
'Golay Barcode': 'barcode',
'515FB Forward Primer (Parada)': 'primer',
'Project Name': 'project_name',
'Project_Name': 'project_name',
'Well': 'well_id_384',
'Primer Plate #': 'primer_plate',
'Plating': 'plating',
Expand All @@ -743,13 +745,16 @@ def generate_qiita_prep_file(platedf, seqtype):
'Processing Robot': 'processing_robot',
'Sample Plate': 'sample_plate',
'Forward Primer Linker': 'linker',
'Date': 'platemap_generation_date',
'Project Abbreviation': 'project_abbreviation'
}
else:
column_renamer = {
'Sample': 'sample_name',
'Golay Barcode': 'barcode',
'Reverse complement of 3prime Illumina Adapter': 'primer',
'Project Name': 'project_name',
'Project_Name': 'project_name',
'Well': 'well_id_384',
'Primer Plate #': 'primer_plate',
'Plating': 'plating',
Expand All @@ -764,7 +769,9 @@ def generate_qiita_prep_file(platedf, seqtype):
'Water Lot': 'water_lot',
'Processing Robot': 'processing_robot',
'Sample Plate': 'sample_plate',
'Reverse Primer Linker': 'linker'
'Reverse Primer Linker': 'linker',
'Date': 'platemap_generation_date',
'Project Abbreviation': 'project_abbreviation'
}

prep = platedf.copy()
Expand Down Expand Up @@ -814,6 +821,14 @@ def generate_qiita_prep_file(platedf, seqtype):
if c not in prep.columns:
prep[c] = ''

if not prep.columns.is_unique:
column_names = Counter(list(prep.columns))
duplicates = [x for x in column_names if column_names[x] > 1]
raise ValueError(
"One or more columns in DataFrame resolve to the same"
" column name(s): %s" % ", ".join(duplicates)
)

# the approved order of columns in the prep-file.
column_order = ['sample_name', 'barcode', 'primer', 'primer_plate',
'well_id_384', 'plating', 'extractionkit_lot',
Expand All @@ -835,7 +850,9 @@ def generate_qiita_prep_file(platedf, seqtype):
remove_these = {'Blank', 'Col', 'Compressed Plate Name', 'Plate Position',
'EMP Primer Plate Well', 'Forward Primer Pad', 'Name',
'Illumina 5prime Adapter', 'Original Name', 'Plate', 'Row',
'Primer For PCR', 'Project Plate', 'index', 'Project_Name'}
'Primer For PCR', 'Project Plate', 'index',
'Plate elution volume', 'Plate map file', 'Time',
'RackID'}

# only remove the columns from the above set that are actually present in
# the prep dataframe to avoid possible errors.
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,97 @@
Date Time LocationCell LocationColumn LocationRow TubeCode RackID
20230627 09:26:10 A1 1 A 0363132553 plate_1
20230627 09:26:10 A2 2 A 0363132554 plate_1
20230627 09:26:10 A3 3 A 0363132555 plate_1
20230627 09:26:10 A4 4 A 0363132556 plate_1
20230627 09:26:10 A5 5 A 0363132557 plate_1
20230627 09:26:10 A6 6 A 0363132558 plate_1
20230627 09:26:10 A7 7 A 0363132559 plate_1
20230627 09:26:10 A8 8 A 0363132560 plate_1
20230627 09:26:10 A9 9 A 0363132561 plate_1
20230627 09:26:10 A10 10 A 0363132562 plate_1
20230627 09:26:10 A11 11 A 0363132563 plate_1
20230627 09:26:10 A12 12 A 0363132564 plate_1
20230627 09:26:10 B1 1 B 0363132565 plate_1
20230627 09:26:10 B2 2 B 0363132566 plate_1
20230627 09:26:10 B3 3 B 0363132567 plate_1
20230627 09:26:10 B4 4 B 0363132568 plate_1
20230627 09:26:10 B5 5 B 0363132569 plate_1
20230627 09:26:10 B6 6 B 0363132570 plate_1
20230627 09:26:10 B7 7 B 0363132571 plate_1
20230627 09:26:10 B8 8 B 0363132572 plate_1
20230627 09:26:10 B9 9 B 0363132573 plate_1
20230627 09:26:10 B10 10 B 0363132574 plate_1
20230627 09:26:10 B11 11 B 0363132575 plate_1
20230627 09:26:10 B12 12 B 0363132576 plate_1
20230627 09:26:10 C1 1 C 0363132697 plate_1
20230627 09:26:10 C2 2 C 0363132698 plate_1
20230627 09:26:10 C3 3 C 0363132699 plate_1
20230627 09:26:10 C4 4 C 0363132700 plate_1
20230627 09:26:10 C5 5 C 0363132701 plate_1
20230627 09:26:10 C6 6 C 0363132702 plate_1
20230627 09:26:10 C7 7 C 0363132703 plate_1
20230627 09:26:10 C8 8 C 0363132704 plate_1
20230627 09:26:10 C9 9 C 0363132705 plate_1
20230627 09:26:10 C10 10 C 0363132706 plate_1
20230627 09:26:10 C11 11 C 0363132707 plate_1
20230627 09:26:10 C12 12 C 0363132708 plate_1
20230627 09:26:10 D1 1 D 0363132709 plate_1
20230627 09:26:10 D2 2 D 0363132710 plate_1
20230627 09:26:10 D3 3 D 0363132711 plate_1
20230627 09:26:10 D4 4 D 0363132712 plate_1
20230627 09:26:10 D5 5 D 0363132713 plate_1
20230627 09:26:10 D6 6 D 0363132714 plate_1
20230627 09:26:10 D7 7 D 0363132715 plate_1
20230627 09:26:10 D8 8 D 0363132716 plate_1
20230627 09:26:10 D9 9 D 0363132717 plate_1
20230627 09:26:10 D10 10 D 0363132718 plate_1
20230627 09:26:10 D11 11 D 0363132719 plate_1
20230627 09:26:10 D12 12 D 0363132720 plate_1
20230627 09:26:10 E1 1 E 0363132769 plate_1
20230627 09:26:10 E2 2 E 0363132770 plate_1
20230627 09:26:10 E3 3 E 0363132771 plate_1
20230627 09:26:10 E4 4 E 0363132772 plate_1
20230627 09:26:10 E5 5 E 0363132773 plate_1
20230627 09:26:10 E6 6 E 0363132774 plate_1
20230627 09:26:10 E7 7 E 0363132775 plate_1
20230627 09:26:10 E8 8 E 0363132776 plate_1
20230627 09:26:10 E9 9 E 0363132777 plate_1
20230627 09:26:10 E10 10 E 0363132778 plate_1
20230627 09:26:10 E11 11 E 0363132779 plate_1
20230627 09:26:10 E12 12 E 0363132780 plate_1
20230627 09:26:10 F1 1 F 0363132781 plate_1
20230627 09:26:10 F2 2 F 0363132782 plate_1
20230627 09:26:10 F3 3 F 0363132783 plate_1
20230627 09:26:10 F4 4 F 0363132784 plate_1
20230627 09:26:10 F5 5 F 0363132785 plate_1
20230627 09:26:10 F6 6 F 0363132786 plate_1
20230627 09:26:10 F7 7 F 0363132787 plate_1
20230627 09:26:10 F8 8 F 0363132788 plate_1
20230627 09:26:10 F9 9 F 0363132789 plate_1
20230627 09:26:10 F10 10 F 0363132790 plate_1
20230627 09:26:10 F11 11 F 0363132791 plate_1
20230627 09:26:10 F12 12 F 0363132792 plate_1
20230627 09:26:10 G1 1 G 0363132889 plate_1
20230627 09:26:10 G2 2 G 0363132890 plate_1
20230627 09:26:10 G3 3 G 0363132891 plate_1
20230627 09:26:10 G4 4 G 0363132892 plate_1
20230627 09:26:10 G5 5 G 0363132893 plate_1
20230627 09:26:10 G6 6 G 0363132894 plate_1
20230627 09:26:10 G7 7 G 0363132895 plate_1
20230627 09:26:10 G8 8 G 0363132896 plate_1
20230627 09:26:10 G9 9 G 0363132897 plate_1
20230627 09:26:10 G10 10 G 0363132898 plate_1
20230627 09:26:10 G11 11 G 0363132899 plate_1
20230627 09:26:10 G12 12 G 0363132900 plate_1
20230627 09:26:10 H1 1 H 0363132901 plate_1
20230627 09:26:10 H2 2 H 0363132902 plate_1
20230627 09:26:10 H3 3 H 0363132903 plate_1
20230627 09:26:10 H4 4 H 0363132904 plate_1
20230627 09:26:10 H5 5 H 0363132905 plate_1
20230627 09:26:10 H6 6 H 0363132906 plate_1
20230627 09:26:10 H7 7 H 0363132907 plate_1
20230627 09:26:10 H8 8 H 0363132908 plate_1
20230627 09:26:10 H9 9 H 0363132909 plate_1
20230627 09:26:10 H10 10 H 0363132910 plate_1
20230627 09:26:10 H11 11 H 0363132911 plate_1
20230627 09:26:10 H12 12 H 0363132912 plate_1
Original file line number Diff line number Diff line change
@@ -0,0 +1,97 @@
Date Time LocationCell LocationColumn LocationRow TubeCode RackID
20230627 09:27:41 A1 1 A 0363133033 plate_2
20230627 09:27:41 A2 2 A 0363133034 plate_2
20230627 09:27:41 A3 3 A 0363133035 plate_2
20230627 09:27:41 A4 4 A 0363133036 plate_2
20230627 09:27:41 A5 5 A 0363133037 plate_2
20230627 09:27:41 A6 6 A 0363133038 plate_2
20230627 09:27:41 A7 7 A 0363133039 plate_2
20230627 09:27:41 A8 8 A 0363133040 plate_2
20230627 09:27:41 A9 9 A 0363133041 plate_2
20230627 09:27:41 A10 10 A 0363133042 plate_2
20230627 09:27:41 A11 11 A 0363133043 plate_2
20230627 09:27:41 A12 12 A 0363133044 plate_2
20230627 09:27:41 B1 1 B 0363133045 plate_2
20230627 09:27:41 B2 2 B 0363133046 plate_2
20230627 09:27:41 B3 3 B 0363133047 plate_2
20230627 09:27:41 B4 4 B 0363133048 plate_2
20230627 09:27:41 B5 5 B 0363133049 plate_2
20230627 09:27:41 B6 6 B 0363133050 plate_2
20230627 09:27:41 B7 7 B 0363133051 plate_2
20230627 09:27:41 B8 8 B 0363133052 plate_2
20230627 09:27:41 B9 9 B 0363133053 plate_2
20230627 09:27:41 B10 10 B 0363133054 plate_2
20230627 09:27:41 B11 11 B 0363133055 plate_2
20230627 09:27:41 B12 12 B 0363133056 plate_2
20230627 09:27:41 C1 1 C 0363133105 plate_2
20230627 09:27:41 C2 2 C 0363133106 plate_2
20230627 09:27:41 C3 3 C 0363133107 plate_2
20230627 09:27:41 C4 4 C 0363133108 plate_2
20230627 09:27:41 C5 5 C 0363133109 plate_2
20230627 09:27:41 C6 6 C 0363133110 plate_2
20230627 09:27:41 C7 7 C 0363133111 plate_2
20230627 09:27:41 C8 8 C 0363133112 plate_2
20230627 09:27:41 C9 9 C 0363133113 plate_2
20230627 09:27:41 C10 10 C 0363133114 plate_2
20230627 09:27:41 C11 11 C 0363133115 plate_2
20230627 09:27:41 C12 12 C 0363133116 plate_2
20230627 09:27:41 D1 1 D 0363133117 plate_2
20230627 09:27:41 D2 2 D 0363133118 plate_2
20230627 09:27:41 D3 3 D 0363133119 plate_2
20230627 09:27:41 D4 4 D 0363133120 plate_2
20230627 09:27:41 D5 5 D 0363133121 plate_2
20230627 09:27:41 D6 6 D 0363133122 plate_2
20230627 09:27:41 D7 7 D 0363133123 plate_2
20230627 09:27:41 D8 8 D 0363133124 plate_2
20230627 09:27:41 D9 9 D 0363133125 plate_2
20230627 09:27:41 D10 10 D 0363133126 plate_2
20230627 09:27:41 D11 11 D 0363133127 plate_2
20230627 09:27:41 D12 12 D 0363133128 plate_2
20230627 09:27:41 E1 1 E 0363133177 plate_2
20230627 09:27:41 E2 2 E 0363133178 plate_2
20230627 09:27:41 E3 3 E 0363133179 plate_2
20230627 09:27:41 E4 4 E 0363133180 plate_2
20230627 09:27:41 E5 5 E 0363133181 plate_2
20230627 09:27:41 E6 6 E 0363133182 plate_2
20230627 09:27:41 E7 7 E 0363133183 plate_2
20230627 09:27:41 E8 8 E 0363133184 plate_2
20230627 09:27:41 E9 9 E 0363133185 plate_2
20230627 09:27:41 E10 10 E 0363133186 plate_2
20230627 09:27:41 E11 11 E 0363133187 plate_2
20230627 09:27:41 E12 12 E 0363133188 plate_2
20230627 09:27:41 F1 1 F 0363133189 plate_2
20230627 09:27:41 F2 2 F 0363133190 plate_2
20230627 09:27:41 F3 3 F 0363133191 plate_2
20230627 09:27:41 F4 4 F 0363133192 plate_2
20230627 09:27:41 F5 5 F 0363133193 plate_2
20230627 09:27:41 F6 6 F 0363133194 plate_2
20230627 09:27:41 F7 7 F 0363133195 plate_2
20230627 09:27:41 F8 8 F 0363133196 plate_2
20230627 09:27:41 F9 9 F 0363133197 plate_2
20230627 09:27:41 F10 10 F 0363133198 plate_2
20230627 09:27:41 F11 11 F 0363133199 plate_2
20230627 09:27:41 F12 12 F 0363133200 plate_2
20230627 09:27:41 G1 1 G 0363133249 plate_2
20230627 09:27:41 G2 2 G 0363133250 plate_2
20230627 09:27:41 G3 3 G 0363133251 plate_2
20230627 09:27:41 G4 4 G 0363133252 plate_2
20230627 09:27:41 G5 5 G 0363133253 plate_2
20230627 09:27:41 G6 6 G 0363133254 plate_2
20230627 09:27:41 G7 7 G 0363133255 plate_2
20230627 09:27:41 G8 8 G 0363133256 plate_2
20230627 09:27:41 G9 9 G 0363133257 plate_2
20230627 09:27:41 G10 10 G 0363133258 plate_2
20230627 09:27:41 G11 11 G 0363133259 plate_2
20230627 09:27:41 G12 12 G 0363133260 plate_2
20230627 09:27:41 H1 1 H 0363133261 plate_2
20230627 09:27:41 H2 2 H 0363133262 plate_2
20230627 09:27:41 H3 3 H 0363133263 plate_2
20230627 09:27:41 H4 4 H 0363133264 plate_2
20230627 09:27:41 H5 5 H 0363133265 plate_2
20230627 09:27:41 H6 6 H 0363133266 plate_2
20230627 09:27:41 H7 7 H 0363133267 plate_2
20230627 09:27:41 H8 8 H 0363133268 plate_2
20230627 09:27:41 H9 9 H 0363133269 plate_2
20230627 09:27:41 H10 10 H 0363133270 plate_2
20230627 09:27:41 H11 11 H 0363133271 plate_2
20230627 09:27:41 H12 12 H 0363133272 plate_2
Original file line number Diff line number Diff line change
@@ -0,0 +1,97 @@
Date Time LocationCell LocationColumn LocationRow TubeCode RackID
20230627 09:29:31 A1 1 A 0363133321 plate_3
20230627 09:29:31 A2 2 A 0363133322 plate_3
20230627 09:29:31 A3 3 A 0363133323 plate_3
20230627 09:29:31 A4 4 A 0363133324 plate_3
20230627 09:29:31 A5 5 A 0363133325 plate_3
20230627 09:29:31 A6 6 A 0363133326 plate_3
20230627 09:29:31 A7 7 A 0363133327 plate_3
20230627 09:29:31 A8 8 A 0363133328 plate_3
20230627 09:29:31 A9 9 A 0363133329 plate_3
20230627 09:29:31 A10 10 A 0363133330 plate_3
20230627 09:29:31 A11 11 A 0363133331 plate_3
20230627 09:29:31 A12 12 A 0363133332 plate_3
20230627 09:29:31 B1 1 B 0363133333 plate_3
20230627 09:29:31 B2 2 B 0363133334 plate_3
20230627 09:29:31 B3 3 B 0363133335 plate_3
20230627 09:29:31 B4 4 B 0363133336 plate_3
20230627 09:29:31 B5 5 B 0363133337 plate_3
20230627 09:29:31 B6 6 B 0363133338 plate_3
20230627 09:29:31 B7 7 B 0363133339 plate_3
20230627 09:29:31 B8 8 B 0363133340 plate_3
20230627 09:29:31 B9 9 B 0363133341 plate_3
20230627 09:29:31 B10 10 B 0363133342 plate_3
20230627 09:29:31 B11 11 B 0363133343 plate_3
20230627 09:29:31 B12 12 B 0363133344 plate_3
20230627 09:29:31 C1 1 C 0363133393 plate_3
20230627 09:29:31 C2 2 C 0363133394 plate_3
20230627 09:29:31 C3 3 C 0363133395 plate_3
20230627 09:29:31 C4 4 C 0363133396 plate_3
20230627 09:29:31 C5 5 C 0363133397 plate_3
20230627 09:29:31 C6 6 C 0363133398 plate_3
20230627 09:29:31 C7 7 C 0363133399 plate_3
20230627 09:29:31 C8 8 C 0363133400 plate_3
20230627 09:29:31 C9 9 C 0363133401 plate_3
20230627 09:29:31 C10 10 C 0363133402 plate_3
20230627 09:29:31 C11 11 C 0363133403 plate_3
20230627 09:29:31 C12 12 C 0363133404 plate_3
20230627 09:29:31 D1 1 D 0363133405 plate_3
20230627 09:29:31 D2 2 D 0363133406 plate_3
20230627 09:29:31 D3 3 D 0363133407 plate_3
20230627 09:29:31 D4 4 D 0363133408 plate_3
20230627 09:29:31 D5 5 D 0363133409 plate_3
20230627 09:29:31 D6 6 D 0363133410 plate_3
20230627 09:29:31 D7 7 D 0363133411 plate_3
20230627 09:29:31 D8 8 D 0363133412 plate_3
20230627 09:29:31 D9 9 D 0363133413 plate_3
20230627 09:29:31 D10 10 D 0363133414 plate_3
20230627 09:29:31 D11 11 D 0363133415 plate_3
20230627 09:29:31 D12 12 D 0363133416 plate_3
20230627 09:29:31 E1 1 E 0363133465 plate_3
20230627 09:29:31 E2 2 E 0363133466 plate_3
20230627 09:29:31 E3 3 E 0363133467 plate_3
20230627 09:29:31 E4 4 E 0363133468 plate_3
20230627 09:29:31 E5 5 E 0363133469 plate_3
20230627 09:29:31 E6 6 E 0363133470 plate_3
20230627 09:29:31 E7 7 E 0363133471 plate_3
20230627 09:29:31 E8 8 E 0363133472 plate_3
20230627 09:29:31 E9 9 E 0363133473 plate_3
20230627 09:29:31 E10 10 E 0363133474 plate_3
20230627 09:29:31 E11 11 E 0363133475 plate_3
20230627 09:29:31 E12 12 E 0363133476 plate_3
20230627 09:29:31 F1 1 F 0363133477 plate_3
20230627 09:29:31 F2 2 F 0363133478 plate_3
20230627 09:29:31 F3 3 F 0363133479 plate_3
20230627 09:29:31 F4 4 F 0363133480 plate_3
20230627 09:29:31 F5 5 F 0363133481 plate_3
20230627 09:29:31 F6 6 F 0363133482 plate_3
20230627 09:29:31 F7 7 F 0363133483 plate_3
20230627 09:29:31 F8 8 F 0363133484 plate_3
20230627 09:29:31 F9 9 F 0363133485 plate_3
20230627 09:29:31 F10 10 F 0363133486 plate_3
20230627 09:29:31 F11 11 F 0363133487 plate_3
20230627 09:29:31 F12 12 F 0363133488 plate_3
20230627 09:29:31 G1 1 G 0363133537 plate_3
20230627 09:29:31 G2 2 G 0363133538 plate_3
20230627 09:29:31 G3 3 G 0363133539 plate_3
20230627 09:29:31 G4 4 G 0363133540 plate_3
20230627 09:29:31 G5 5 G 0363133541 plate_3
20230627 09:29:31 G6 6 G 0363133542 plate_3
20230627 09:29:31 G7 7 G 0363133543 plate_3
20230627 09:29:31 G8 8 G 0363133544 plate_3
20230627 09:29:31 G9 9 G 0363133545 plate_3
20230627 09:29:31 G10 10 G 0363133546 plate_3
20230627 09:29:31 G11 11 G 0363133547 plate_3
20230627 09:29:31 G12 12 G 0363133548 plate_3
20230627 09:29:31 H1 1 H 0363133549 plate_3
20230627 09:29:31 H2 2 H 0363133550 plate_3
20230627 09:29:31 H3 3 H 0363133551 plate_3
20230627 09:29:31 H4 4 H 0363133552 plate_3
20230627 09:29:31 H5 5 H 0363133553 plate_3
20230627 09:29:31 H6 6 H 0363133554 plate_3
20230627 09:29:31 H7 7 H 0363133555 plate_3
20230627 09:29:31 H8 8 H 0363133556 plate_3
20230627 09:29:31 H9 9 H 0363133557 plate_3
20230627 09:29:31 H10 10 H 0363133558 plate_3
20230627 09:29:31 H11 11 H 0363133559 plate_3
20230627 09:29:31 H12 12 H 0363133560 plate_3

0 comments on commit 0601264

Please sign in to comment.