From f2667f5afa3f65434d49eccfa7b162334ac48fa9 Mon Sep 17 00:00:00 2001 From: shamoon <4887959+shamoon@users.noreply.github.com> Date: Thu, 6 Mar 2025 14:43:29 -0800 Subject: [PATCH 01/18] Update backend translation strings --- src/locale/en_US/LC_MESSAGES/django.po | 711 ++++++++++++------------- 1 file changed, 329 insertions(+), 382 deletions(-) diff --git a/src/locale/en_US/LC_MESSAGES/django.po b/src/locale/en_US/LC_MESSAGES/django.po index 88cfdc59d..dfd8b00a8 100644 --- a/src/locale/en_US/LC_MESSAGES/django.po +++ b/src/locale/en_US/LC_MESSAGES/django.po @@ -2,7 +2,7 @@ msgid "" msgstr "" "Project-Id-Version: paperless-ngx\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-03-01 21:03-0800\n" +"POT-Creation-Date: 2025-03-06 14:43-0800\n" "PO-Revision-Date: 2022-02-17 04:17\n" "Last-Translator: \n" "Language-Team: English\n" @@ -21,1198 +21,1158 @@ msgstr "" msgid "Documents" msgstr "" -#: documents/filters.py:375 +#: documents/filters.py:374 msgid "Value must be valid JSON." msgstr "" -#: documents/filters.py:394 +#: documents/filters.py:393 msgid "Invalid custom field query expression" msgstr "" -#: documents/filters.py:404 +#: documents/filters.py:403 msgid "Invalid expression list. Must be nonempty." msgstr "" -#: documents/filters.py:425 +#: documents/filters.py:424 msgid "Invalid logical operator {op!r}" msgstr "" -#: documents/filters.py:439 +#: documents/filters.py:438 msgid "Maximum number of query conditions exceeded." msgstr "" -#: documents/filters.py:504 +#: documents/filters.py:503 msgid "{name!r} is not a valid custom field." msgstr "" -#: documents/filters.py:541 +#: documents/filters.py:540 msgid "{data_type} does not support query expr {expr!r}." msgstr "" -#: documents/filters.py:649 +#: documents/filters.py:648 msgid "Maximum nesting depth exceeded." msgstr "" -#: documents/filters.py:834 +#: documents/filters.py:827 msgid "Custom field not found" msgstr "" -#: documents/models.py:41 documents/models.py:830 +#: documents/models.py:36 documents/models.py:710 msgid "owner" msgstr "" -#: documents/models.py:58 documents/models.py:1041 +#: documents/models.py:53 documents/models.py:921 msgid "None" msgstr "" -#: documents/models.py:59 documents/models.py:1042 +#: documents/models.py:54 documents/models.py:922 msgid "Any word" msgstr "" -#: documents/models.py:60 documents/models.py:1043 +#: documents/models.py:55 documents/models.py:923 msgid "All words" msgstr "" -#: documents/models.py:61 documents/models.py:1044 +#: documents/models.py:56 documents/models.py:924 msgid "Exact match" msgstr "" -#: documents/models.py:62 documents/models.py:1045 +#: documents/models.py:57 documents/models.py:925 msgid "Regular expression" msgstr "" -#: documents/models.py:63 documents/models.py:1046 +#: documents/models.py:58 documents/models.py:926 msgid "Fuzzy word" msgstr "" -#: documents/models.py:64 +#: documents/models.py:59 msgid "Automatic" msgstr "" -#: documents/models.py:67 documents/models.py:433 documents/models.py:1536 +#: documents/models.py:62 documents/models.py:398 documents/models.py:1416 #: paperless_mail/models.py:23 paperless_mail/models.py:143 msgid "name" msgstr "" -#: documents/models.py:69 documents/models.py:1110 +#: documents/models.py:64 documents/models.py:990 msgid "match" msgstr "" -#: documents/models.py:72 documents/models.py:1113 +#: documents/models.py:67 documents/models.py:993 msgid "matching algorithm" msgstr "" -#: documents/models.py:77 documents/models.py:1118 +#: documents/models.py:72 documents/models.py:998 msgid "is insensitive" msgstr "" -#: documents/models.py:100 documents/models.py:151 +#: documents/models.py:95 documents/models.py:146 msgid "correspondent" msgstr "" -#: documents/models.py:101 +#: documents/models.py:96 msgid "correspondents" msgstr "" -#: documents/models.py:105 +#: documents/models.py:100 msgid "color" msgstr "" -#: documents/models.py:108 +#: documents/models.py:103 msgid "is inbox tag" msgstr "" -#: documents/models.py:111 +#: documents/models.py:106 msgid "" "Marks this tag as an inbox tag: All newly consumed documents will be tagged " "with inbox tags." msgstr "" -#: documents/models.py:117 +#: documents/models.py:112 msgid "tag" msgstr "" -#: documents/models.py:118 documents/models.py:189 +#: documents/models.py:113 documents/models.py:184 msgid "tags" msgstr "" -#: documents/models.py:123 documents/models.py:171 +#: documents/models.py:118 documents/models.py:166 msgid "document type" msgstr "" -#: documents/models.py:124 +#: documents/models.py:119 msgid "document types" msgstr "" -#: documents/models.py:129 +#: documents/models.py:124 msgid "path" msgstr "" -#: documents/models.py:133 documents/models.py:160 +#: documents/models.py:128 documents/models.py:155 msgid "storage path" msgstr "" -#: documents/models.py:134 +#: documents/models.py:129 msgid "storage paths" msgstr "" -#: documents/models.py:141 +#: documents/models.py:136 msgid "Unencrypted" msgstr "" -#: documents/models.py:142 +#: documents/models.py:137 msgid "Encrypted with GNU Privacy Guard" msgstr "" -#: documents/models.py:163 +#: documents/models.py:158 msgid "title" msgstr "" -#: documents/models.py:175 documents/models.py:744 +#: documents/models.py:170 documents/models.py:624 msgid "content" msgstr "" -#: documents/models.py:178 +#: documents/models.py:173 msgid "" "The raw, text-only data of the document. This field is primarily used for " "searching." msgstr "" -#: documents/models.py:183 +#: documents/models.py:178 msgid "mime type" msgstr "" -#: documents/models.py:193 +#: documents/models.py:188 msgid "checksum" msgstr "" -#: documents/models.py:197 +#: documents/models.py:192 msgid "The checksum of the original document." msgstr "" -#: documents/models.py:201 +#: documents/models.py:196 msgid "archive checksum" msgstr "" -#: documents/models.py:206 +#: documents/models.py:201 msgid "The checksum of the archived document." msgstr "" -#: documents/models.py:210 +#: documents/models.py:205 msgid "page count" msgstr "" -#: documents/models.py:217 +#: documents/models.py:212 msgid "The number of pages of the document." msgstr "" -#: documents/models.py:221 documents/models.py:401 documents/models.py:750 -#: documents/models.py:788 documents/models.py:859 documents/models.py:917 +#: documents/models.py:216 documents/models.py:630 documents/models.py:668 +#: documents/models.py:739 documents/models.py:797 msgid "created" msgstr "" -#: documents/models.py:224 +#: documents/models.py:219 msgid "modified" msgstr "" -#: documents/models.py:231 +#: documents/models.py:226 msgid "storage type" msgstr "" -#: documents/models.py:239 +#: documents/models.py:234 msgid "added" msgstr "" -#: documents/models.py:246 +#: documents/models.py:241 msgid "filename" msgstr "" -#: documents/models.py:252 +#: documents/models.py:247 msgid "Current filename in storage" msgstr "" -#: documents/models.py:256 +#: documents/models.py:251 msgid "archive filename" msgstr "" -#: documents/models.py:262 +#: documents/models.py:257 msgid "Current archive filename in storage" msgstr "" -#: documents/models.py:266 +#: documents/models.py:261 msgid "original filename" msgstr "" -#: documents/models.py:272 +#: documents/models.py:267 msgid "The original name of the file when it was uploaded" msgstr "" -#: documents/models.py:279 +#: documents/models.py:274 msgid "archive serial number" msgstr "" -#: documents/models.py:289 +#: documents/models.py:284 msgid "The position of this document in your physical document archive." msgstr "" -#: documents/models.py:295 documents/models.py:761 documents/models.py:815 -#: documents/models.py:1579 +#: documents/models.py:290 documents/models.py:641 documents/models.py:695 +#: documents/models.py:1459 msgid "document" msgstr "" -#: documents/models.py:296 +#: documents/models.py:291 msgid "documents" msgstr "" -#: documents/models.py:384 -msgid "debug" -msgstr "" - -#: documents/models.py:385 -msgid "information" -msgstr "" - -#: documents/models.py:386 -msgid "warning" -msgstr "" - -#: documents/models.py:387 paperless_mail/models.py:363 -msgid "error" -msgstr "" - -#: documents/models.py:388 -msgid "critical" -msgstr "" - -#: documents/models.py:391 -msgid "group" -msgstr "" - -#: documents/models.py:393 -msgid "message" -msgstr "" - -#: documents/models.py:396 -msgid "level" -msgstr "" - -#: documents/models.py:405 -msgid "log" -msgstr "" - -#: documents/models.py:406 -msgid "logs" -msgstr "" - -#: documents/models.py:414 +#: documents/models.py:379 msgid "Table" msgstr "" -#: documents/models.py:415 +#: documents/models.py:380 msgid "Small Cards" msgstr "" -#: documents/models.py:416 +#: documents/models.py:381 msgid "Large Cards" msgstr "" -#: documents/models.py:419 +#: documents/models.py:384 msgid "Title" msgstr "" -#: documents/models.py:420 documents/models.py:1062 +#: documents/models.py:385 documents/models.py:942 msgid "Created" msgstr "" -#: documents/models.py:421 documents/models.py:1061 +#: documents/models.py:386 documents/models.py:941 msgid "Added" msgstr "" -#: documents/models.py:422 +#: documents/models.py:387 msgid "Tags" msgstr "" -#: documents/models.py:423 +#: documents/models.py:388 msgid "Correspondent" msgstr "" -#: documents/models.py:424 +#: documents/models.py:389 msgid "Document Type" msgstr "" -#: documents/models.py:425 +#: documents/models.py:390 msgid "Storage Path" msgstr "" -#: documents/models.py:426 +#: documents/models.py:391 msgid "Note" msgstr "" -#: documents/models.py:427 +#: documents/models.py:392 msgid "Owner" msgstr "" -#: documents/models.py:428 +#: documents/models.py:393 msgid "Shared" msgstr "" -#: documents/models.py:429 +#: documents/models.py:394 msgid "ASN" msgstr "" -#: documents/models.py:430 +#: documents/models.py:395 msgid "Pages" msgstr "" -#: documents/models.py:436 +#: documents/models.py:401 msgid "show on dashboard" msgstr "" -#: documents/models.py:439 +#: documents/models.py:404 msgid "show in sidebar" msgstr "" -#: documents/models.py:443 +#: documents/models.py:408 msgid "sort field" msgstr "" -#: documents/models.py:448 +#: documents/models.py:413 msgid "sort reverse" msgstr "" -#: documents/models.py:451 +#: documents/models.py:416 msgid "View page size" msgstr "" -#: documents/models.py:459 +#: documents/models.py:424 msgid "View display mode" msgstr "" -#: documents/models.py:466 +#: documents/models.py:431 msgid "Document display fields" msgstr "" -#: documents/models.py:473 documents/models.py:536 +#: documents/models.py:438 documents/models.py:501 msgid "saved view" msgstr "" -#: documents/models.py:474 +#: documents/models.py:439 msgid "saved views" msgstr "" -#: documents/models.py:482 +#: documents/models.py:447 msgid "title contains" msgstr "" -#: documents/models.py:483 +#: documents/models.py:448 msgid "content contains" msgstr "" -#: documents/models.py:484 +#: documents/models.py:449 msgid "ASN is" msgstr "" -#: documents/models.py:485 +#: documents/models.py:450 msgid "correspondent is" msgstr "" -#: documents/models.py:486 +#: documents/models.py:451 msgid "document type is" msgstr "" -#: documents/models.py:487 +#: documents/models.py:452 msgid "is in inbox" msgstr "" -#: documents/models.py:488 +#: documents/models.py:453 msgid "has tag" msgstr "" -#: documents/models.py:489 +#: documents/models.py:454 msgid "has any tag" msgstr "" -#: documents/models.py:490 +#: documents/models.py:455 msgid "created before" msgstr "" -#: documents/models.py:491 +#: documents/models.py:456 msgid "created after" msgstr "" -#: documents/models.py:492 +#: documents/models.py:457 msgid "created year is" msgstr "" -#: documents/models.py:493 +#: documents/models.py:458 msgid "created month is" msgstr "" -#: documents/models.py:494 +#: documents/models.py:459 msgid "created day is" msgstr "" -#: documents/models.py:495 +#: documents/models.py:460 msgid "added before" msgstr "" -#: documents/models.py:496 +#: documents/models.py:461 msgid "added after" msgstr "" -#: documents/models.py:497 +#: documents/models.py:462 msgid "modified before" msgstr "" -#: documents/models.py:498 +#: documents/models.py:463 msgid "modified after" msgstr "" -#: documents/models.py:499 +#: documents/models.py:464 msgid "does not have tag" msgstr "" -#: documents/models.py:500 +#: documents/models.py:465 msgid "does not have ASN" msgstr "" -#: documents/models.py:501 +#: documents/models.py:466 msgid "title or content contains" msgstr "" -#: documents/models.py:502 +#: documents/models.py:467 msgid "fulltext query" msgstr "" -#: documents/models.py:503 +#: documents/models.py:468 msgid "more like this" msgstr "" -#: documents/models.py:504 +#: documents/models.py:469 msgid "has tags in" msgstr "" -#: documents/models.py:505 +#: documents/models.py:470 msgid "ASN greater than" msgstr "" -#: documents/models.py:506 +#: documents/models.py:471 msgid "ASN less than" msgstr "" -#: documents/models.py:507 +#: documents/models.py:472 msgid "storage path is" msgstr "" -#: documents/models.py:508 +#: documents/models.py:473 msgid "has correspondent in" msgstr "" -#: documents/models.py:509 +#: documents/models.py:474 msgid "does not have correspondent in" msgstr "" -#: documents/models.py:510 +#: documents/models.py:475 msgid "has document type in" msgstr "" -#: documents/models.py:511 +#: documents/models.py:476 msgid "does not have document type in" msgstr "" -#: documents/models.py:512 +#: documents/models.py:477 msgid "has storage path in" msgstr "" -#: documents/models.py:513 +#: documents/models.py:478 msgid "does not have storage path in" msgstr "" -#: documents/models.py:514 +#: documents/models.py:479 msgid "owner is" msgstr "" -#: documents/models.py:515 +#: documents/models.py:480 msgid "has owner in" msgstr "" -#: documents/models.py:516 +#: documents/models.py:481 msgid "does not have owner" msgstr "" -#: documents/models.py:517 +#: documents/models.py:482 msgid "does not have owner in" msgstr "" -#: documents/models.py:518 +#: documents/models.py:483 msgid "has custom field value" msgstr "" -#: documents/models.py:519 +#: documents/models.py:484 msgid "is shared by me" msgstr "" -#: documents/models.py:520 +#: documents/models.py:485 msgid "has custom fields" msgstr "" -#: documents/models.py:521 +#: documents/models.py:486 msgid "has custom field in" msgstr "" -#: documents/models.py:522 +#: documents/models.py:487 msgid "does not have custom field in" msgstr "" -#: documents/models.py:523 +#: documents/models.py:488 msgid "does not have custom field" msgstr "" -#: documents/models.py:524 +#: documents/models.py:489 msgid "custom fields query" msgstr "" -#: documents/models.py:525 +#: documents/models.py:490 msgid "created to" msgstr "" -#: documents/models.py:526 +#: documents/models.py:491 msgid "created from" msgstr "" -#: documents/models.py:527 +#: documents/models.py:492 msgid "added to" msgstr "" -#: documents/models.py:528 +#: documents/models.py:493 msgid "added from" msgstr "" -#: documents/models.py:529 +#: documents/models.py:494 msgid "mime type is" msgstr "" -#: documents/models.py:539 +#: documents/models.py:504 msgid "rule type" msgstr "" -#: documents/models.py:541 +#: documents/models.py:506 msgid "value" msgstr "" -#: documents/models.py:544 +#: documents/models.py:509 msgid "filter rule" msgstr "" -#: documents/models.py:545 +#: documents/models.py:510 msgid "filter rules" msgstr "" -#: documents/models.py:654 +#: documents/models.py:534 msgid "Auto Task" msgstr "" -#: documents/models.py:655 +#: documents/models.py:535 msgid "Scheduled Task" msgstr "" -#: documents/models.py:656 +#: documents/models.py:536 msgid "Manual Task" msgstr "" -#: documents/models.py:659 +#: documents/models.py:539 msgid "Consume File" msgstr "" -#: documents/models.py:660 +#: documents/models.py:540 msgid "Train Classifier" msgstr "" -#: documents/models.py:661 +#: documents/models.py:541 msgid "Check Sanity" msgstr "" -#: documents/models.py:662 +#: documents/models.py:542 msgid "Index Optimize" msgstr "" -#: documents/models.py:667 +#: documents/models.py:547 msgid "Task ID" msgstr "" -#: documents/models.py:668 +#: documents/models.py:548 msgid "Celery ID for the Task that was run" msgstr "" -#: documents/models.py:673 +#: documents/models.py:553 msgid "Acknowledged" msgstr "" -#: documents/models.py:674 +#: documents/models.py:554 msgid "If the task is acknowledged via the frontend or API" msgstr "" -#: documents/models.py:680 +#: documents/models.py:560 msgid "Task Filename" msgstr "" -#: documents/models.py:681 +#: documents/models.py:561 msgid "Name of the file which the Task was run for" msgstr "" -#: documents/models.py:688 +#: documents/models.py:568 msgid "Task Name" msgstr "" -#: documents/models.py:689 +#: documents/models.py:569 msgid "Name of the task that was run" msgstr "" -#: documents/models.py:696 +#: documents/models.py:576 msgid "Task State" msgstr "" -#: documents/models.py:697 +#: documents/models.py:577 msgid "Current state of the task being run" msgstr "" -#: documents/models.py:703 +#: documents/models.py:583 msgid "Created DateTime" msgstr "" -#: documents/models.py:704 +#: documents/models.py:584 msgid "Datetime field when the task result was created in UTC" msgstr "" -#: documents/models.py:710 +#: documents/models.py:590 msgid "Started DateTime" msgstr "" -#: documents/models.py:711 +#: documents/models.py:591 msgid "Datetime field when the task was started in UTC" msgstr "" -#: documents/models.py:717 +#: documents/models.py:597 msgid "Completed DateTime" msgstr "" -#: documents/models.py:718 +#: documents/models.py:598 msgid "Datetime field when the task was completed in UTC" msgstr "" -#: documents/models.py:724 +#: documents/models.py:604 msgid "Result Data" msgstr "" -#: documents/models.py:726 +#: documents/models.py:606 msgid "The data returned by the task" msgstr "" -#: documents/models.py:734 +#: documents/models.py:614 msgid "Task Type" msgstr "" -#: documents/models.py:735 +#: documents/models.py:615 msgid "The type of task that was run" msgstr "" -#: documents/models.py:746 +#: documents/models.py:626 msgid "Note for the document" msgstr "" -#: documents/models.py:770 +#: documents/models.py:650 msgid "user" msgstr "" -#: documents/models.py:775 +#: documents/models.py:655 msgid "note" msgstr "" -#: documents/models.py:776 +#: documents/models.py:656 msgid "notes" msgstr "" -#: documents/models.py:784 +#: documents/models.py:664 msgid "Archive" msgstr "" -#: documents/models.py:785 +#: documents/models.py:665 msgid "Original" msgstr "" -#: documents/models.py:796 paperless_mail/models.py:75 +#: documents/models.py:676 paperless_mail/models.py:75 msgid "expiration" msgstr "" -#: documents/models.py:803 +#: documents/models.py:683 msgid "slug" msgstr "" -#: documents/models.py:835 +#: documents/models.py:715 msgid "share link" msgstr "" -#: documents/models.py:836 +#: documents/models.py:716 msgid "share links" msgstr "" -#: documents/models.py:848 +#: documents/models.py:728 msgid "String" msgstr "" -#: documents/models.py:849 +#: documents/models.py:729 msgid "URL" msgstr "" -#: documents/models.py:850 +#: documents/models.py:730 msgid "Date" msgstr "" -#: documents/models.py:851 +#: documents/models.py:731 msgid "Boolean" msgstr "" -#: documents/models.py:852 +#: documents/models.py:732 msgid "Integer" msgstr "" -#: documents/models.py:853 +#: documents/models.py:733 msgid "Float" msgstr "" -#: documents/models.py:854 +#: documents/models.py:734 msgid "Monetary" msgstr "" -#: documents/models.py:855 +#: documents/models.py:735 msgid "Document Link" msgstr "" -#: documents/models.py:856 +#: documents/models.py:736 msgid "Select" msgstr "" -#: documents/models.py:868 +#: documents/models.py:748 msgid "data type" msgstr "" -#: documents/models.py:875 +#: documents/models.py:755 msgid "extra data" msgstr "" -#: documents/models.py:879 +#: documents/models.py:759 msgid "Extra data for the custom field, such as select options" msgstr "" -#: documents/models.py:885 +#: documents/models.py:765 msgid "custom field" msgstr "" -#: documents/models.py:886 +#: documents/models.py:766 msgid "custom fields" msgstr "" -#: documents/models.py:983 +#: documents/models.py:863 msgid "custom field instance" msgstr "" -#: documents/models.py:984 +#: documents/models.py:864 msgid "custom field instances" msgstr "" -#: documents/models.py:1049 +#: documents/models.py:929 msgid "Consumption Started" msgstr "" -#: documents/models.py:1050 +#: documents/models.py:930 msgid "Document Added" msgstr "" -#: documents/models.py:1051 +#: documents/models.py:931 msgid "Document Updated" msgstr "" -#: documents/models.py:1052 +#: documents/models.py:932 msgid "Scheduled" msgstr "" -#: documents/models.py:1055 +#: documents/models.py:935 msgid "Consume Folder" msgstr "" -#: documents/models.py:1056 +#: documents/models.py:936 msgid "Api Upload" msgstr "" -#: documents/models.py:1057 +#: documents/models.py:937 msgid "Mail Fetch" msgstr "" -#: documents/models.py:1058 +#: documents/models.py:938 msgid "Web UI" msgstr "" -#: documents/models.py:1063 +#: documents/models.py:943 msgid "Modified" msgstr "" -#: documents/models.py:1064 +#: documents/models.py:944 msgid "Custom Field" msgstr "" -#: documents/models.py:1067 +#: documents/models.py:947 msgid "Workflow Trigger Type" msgstr "" -#: documents/models.py:1079 +#: documents/models.py:959 msgid "filter path" msgstr "" -#: documents/models.py:1084 +#: documents/models.py:964 msgid "" "Only consume documents with a path that matches this if specified. Wildcards " "specified as * are allowed. Case insensitive." msgstr "" -#: documents/models.py:1091 +#: documents/models.py:971 msgid "filter filename" msgstr "" -#: documents/models.py:1096 paperless_mail/models.py:200 +#: documents/models.py:976 paperless_mail/models.py:200 msgid "" "Only consume documents which entirely match this filename if specified. " "Wildcards such as *.pdf or *invoice* are allowed. Case insensitive." msgstr "" -#: documents/models.py:1107 +#: documents/models.py:987 msgid "filter documents from this mail rule" msgstr "" -#: documents/models.py:1123 +#: documents/models.py:1003 msgid "has these tag(s)" msgstr "" -#: documents/models.py:1131 +#: documents/models.py:1011 msgid "has this document type" msgstr "" -#: documents/models.py:1139 +#: documents/models.py:1019 msgid "has this correspondent" msgstr "" -#: documents/models.py:1143 +#: documents/models.py:1023 msgid "schedule offset days" msgstr "" -#: documents/models.py:1146 +#: documents/models.py:1026 msgid "The number of days to offset the schedule trigger by." msgstr "" -#: documents/models.py:1151 +#: documents/models.py:1031 msgid "schedule is recurring" msgstr "" -#: documents/models.py:1154 +#: documents/models.py:1034 msgid "If the schedule should be recurring." msgstr "" -#: documents/models.py:1159 +#: documents/models.py:1039 msgid "schedule recurring delay in days" msgstr "" -#: documents/models.py:1163 +#: documents/models.py:1043 msgid "The number of days between recurring schedule triggers." msgstr "" -#: documents/models.py:1168 +#: documents/models.py:1048 msgid "schedule date field" msgstr "" -#: documents/models.py:1173 +#: documents/models.py:1053 msgid "The field to check for a schedule trigger." msgstr "" -#: documents/models.py:1182 +#: documents/models.py:1062 msgid "schedule date custom field" msgstr "" -#: documents/models.py:1186 +#: documents/models.py:1066 msgid "workflow trigger" msgstr "" -#: documents/models.py:1187 +#: documents/models.py:1067 msgid "workflow triggers" msgstr "" -#: documents/models.py:1195 +#: documents/models.py:1075 msgid "email subject" msgstr "" -#: documents/models.py:1199 +#: documents/models.py:1079 msgid "" "The subject of the email, can include some placeholders, see documentation." msgstr "" -#: documents/models.py:1205 +#: documents/models.py:1085 msgid "email body" msgstr "" -#: documents/models.py:1208 +#: documents/models.py:1088 msgid "" "The body (message) of the email, can include some placeholders, see " "documentation." msgstr "" -#: documents/models.py:1214 +#: documents/models.py:1094 msgid "emails to" msgstr "" -#: documents/models.py:1217 +#: documents/models.py:1097 msgid "The destination email addresses, comma separated." msgstr "" -#: documents/models.py:1223 +#: documents/models.py:1103 msgid "include document in email" msgstr "" -#: documents/models.py:1234 +#: documents/models.py:1114 msgid "webhook url" msgstr "" -#: documents/models.py:1237 +#: documents/models.py:1117 msgid "The destination URL for the notification." msgstr "" -#: documents/models.py:1242 +#: documents/models.py:1122 msgid "use parameters" msgstr "" -#: documents/models.py:1247 +#: documents/models.py:1127 msgid "send as JSON" msgstr "" -#: documents/models.py:1251 +#: documents/models.py:1131 msgid "webhook parameters" msgstr "" -#: documents/models.py:1254 +#: documents/models.py:1134 msgid "The parameters to send with the webhook URL if body not used." msgstr "" -#: documents/models.py:1258 +#: documents/models.py:1138 msgid "webhook body" msgstr "" -#: documents/models.py:1261 +#: documents/models.py:1141 msgid "The body to send with the webhook URL if parameters not used." msgstr "" -#: documents/models.py:1265 +#: documents/models.py:1145 msgid "webhook headers" msgstr "" -#: documents/models.py:1268 +#: documents/models.py:1148 msgid "The headers to send with the webhook URL." msgstr "" -#: documents/models.py:1273 +#: documents/models.py:1153 msgid "include document in webhook" msgstr "" -#: documents/models.py:1284 +#: documents/models.py:1164 msgid "Assignment" msgstr "" -#: documents/models.py:1288 +#: documents/models.py:1168 msgid "Removal" msgstr "" -#: documents/models.py:1292 documents/templates/account/password_reset.html:15 +#: documents/models.py:1172 documents/templates/account/password_reset.html:15 msgid "Email" msgstr "" -#: documents/models.py:1296 +#: documents/models.py:1176 msgid "Webhook" msgstr "" -#: documents/models.py:1300 +#: documents/models.py:1180 msgid "Workflow Action Type" msgstr "" -#: documents/models.py:1306 +#: documents/models.py:1186 msgid "assign title" msgstr "" -#: documents/models.py:1311 +#: documents/models.py:1191 msgid "" "Assign a document title, can include some placeholders, see documentation." msgstr "" -#: documents/models.py:1320 paperless_mail/models.py:274 +#: documents/models.py:1200 paperless_mail/models.py:274 msgid "assign this tag" msgstr "" -#: documents/models.py:1329 paperless_mail/models.py:282 +#: documents/models.py:1209 paperless_mail/models.py:282 msgid "assign this document type" msgstr "" -#: documents/models.py:1338 paperless_mail/models.py:296 +#: documents/models.py:1218 paperless_mail/models.py:296 msgid "assign this correspondent" msgstr "" -#: documents/models.py:1347 +#: documents/models.py:1227 msgid "assign this storage path" msgstr "" -#: documents/models.py:1356 +#: documents/models.py:1236 msgid "assign this owner" msgstr "" -#: documents/models.py:1363 +#: documents/models.py:1243 msgid "grant view permissions to these users" msgstr "" -#: documents/models.py:1370 +#: documents/models.py:1250 msgid "grant view permissions to these groups" msgstr "" -#: documents/models.py:1377 +#: documents/models.py:1257 msgid "grant change permissions to these users" msgstr "" -#: documents/models.py:1384 +#: documents/models.py:1264 msgid "grant change permissions to these groups" msgstr "" -#: documents/models.py:1391 +#: documents/models.py:1271 msgid "assign these custom fields" msgstr "" -#: documents/models.py:1395 +#: documents/models.py:1275 msgid "custom field values" msgstr "" -#: documents/models.py:1399 +#: documents/models.py:1279 msgid "Optional values to assign to the custom fields." msgstr "" -#: documents/models.py:1408 +#: documents/models.py:1288 msgid "remove these tag(s)" msgstr "" -#: documents/models.py:1413 +#: documents/models.py:1293 msgid "remove all tags" msgstr "" -#: documents/models.py:1420 +#: documents/models.py:1300 msgid "remove these document type(s)" msgstr "" -#: documents/models.py:1425 +#: documents/models.py:1305 msgid "remove all document types" msgstr "" -#: documents/models.py:1432 +#: documents/models.py:1312 msgid "remove these correspondent(s)" msgstr "" -#: documents/models.py:1437 +#: documents/models.py:1317 msgid "remove all correspondents" msgstr "" -#: documents/models.py:1444 +#: documents/models.py:1324 msgid "remove these storage path(s)" msgstr "" -#: documents/models.py:1449 +#: documents/models.py:1329 msgid "remove all storage paths" msgstr "" -#: documents/models.py:1456 +#: documents/models.py:1336 msgid "remove these owner(s)" msgstr "" -#: documents/models.py:1461 +#: documents/models.py:1341 msgid "remove all owners" msgstr "" -#: documents/models.py:1468 +#: documents/models.py:1348 msgid "remove view permissions for these users" msgstr "" -#: documents/models.py:1475 +#: documents/models.py:1355 msgid "remove view permissions for these groups" msgstr "" -#: documents/models.py:1482 +#: documents/models.py:1362 msgid "remove change permissions for these users" msgstr "" -#: documents/models.py:1489 +#: documents/models.py:1369 msgid "remove change permissions for these groups" msgstr "" -#: documents/models.py:1494 +#: documents/models.py:1374 msgid "remove all permissions" msgstr "" -#: documents/models.py:1501 +#: documents/models.py:1381 msgid "remove these custom fields" msgstr "" -#: documents/models.py:1506 +#: documents/models.py:1386 msgid "remove all custom fields" msgstr "" -#: documents/models.py:1515 +#: documents/models.py:1395 msgid "email" msgstr "" -#: documents/models.py:1524 +#: documents/models.py:1404 msgid "webhook" msgstr "" -#: documents/models.py:1528 +#: documents/models.py:1408 msgid "workflow action" msgstr "" -#: documents/models.py:1529 +#: documents/models.py:1409 msgid "workflow actions" msgstr "" -#: documents/models.py:1538 paperless_mail/models.py:145 +#: documents/models.py:1418 paperless_mail/models.py:145 msgid "order" msgstr "" -#: documents/models.py:1544 +#: documents/models.py:1424 msgid "triggers" msgstr "" -#: documents/models.py:1551 +#: documents/models.py:1431 msgid "actions" msgstr "" -#: documents/models.py:1554 paperless_mail/models.py:154 +#: documents/models.py:1434 paperless_mail/models.py:154 msgid "enabled" msgstr "" -#: documents/models.py:1565 +#: documents/models.py:1445 msgid "workflow" msgstr "" -#: documents/models.py:1569 +#: documents/models.py:1449 msgid "workflow trigger type" msgstr "" -#: documents/models.py:1583 +#: documents/models.py:1463 msgid "date run" msgstr "" -#: documents/models.py:1589 +#: documents/models.py:1469 msgid "workflow run" msgstr "" -#: documents/models.py:1590 +#: documents/models.py:1470 msgid "workflow runs" msgstr "" @@ -1225,12 +1185,12 @@ msgstr "" msgid "Invalid color." msgstr "" -#: documents/serialisers.py:1576 +#: documents/serialisers.py:1581 #, python-format msgid "File type %(type)s not supported" msgstr "" -#: documents/serialisers.py:1665 +#: documents/serialisers.py:1670 msgid "Invalid variable detected." msgstr "" @@ -1450,25 +1410,8 @@ msgstr "" msgid "As a final step, please complete the following form:" msgstr "" -#: documents/validators.py:24 -#, python-brace-format -msgid "Unable to parse URI {value}, missing scheme" -msgstr "" - -#: documents/validators.py:29 -#, python-brace-format -msgid "Unable to parse URI {value}, missing net location or path" -msgstr "" - #: documents/validators.py:36 -msgid "" -"URI scheme '{parts.scheme}' is not allowed. Allowed schemes: {', '." -"join(allowed_schemes)}" -msgstr "" - -#: documents/validators.py:45 -#, python-brace-format -msgid "Unable to parse URI {value}" +msgid ", " msgstr "" #: paperless/apps.py:11 @@ -1619,139 +1562,139 @@ msgstr "" msgid "paperless application settings" msgstr "" -#: paperless/settings.py:724 +#: paperless/settings.py:723 msgid "English (US)" msgstr "" -#: paperless/settings.py:725 +#: paperless/settings.py:724 msgid "Arabic" msgstr "" -#: paperless/settings.py:726 +#: paperless/settings.py:725 msgid "Afrikaans" msgstr "" -#: paperless/settings.py:727 +#: paperless/settings.py:726 msgid "Belarusian" msgstr "" -#: paperless/settings.py:728 +#: paperless/settings.py:727 msgid "Bulgarian" msgstr "" -#: paperless/settings.py:729 +#: paperless/settings.py:728 msgid "Catalan" msgstr "" -#: paperless/settings.py:730 +#: paperless/settings.py:729 msgid "Czech" msgstr "" -#: paperless/settings.py:731 +#: paperless/settings.py:730 msgid "Danish" msgstr "" -#: paperless/settings.py:732 +#: paperless/settings.py:731 msgid "German" msgstr "" -#: paperless/settings.py:733 +#: paperless/settings.py:732 msgid "Greek" msgstr "" -#: paperless/settings.py:734 +#: paperless/settings.py:733 msgid "English (GB)" msgstr "" -#: paperless/settings.py:735 +#: paperless/settings.py:734 msgid "Spanish" msgstr "" -#: paperless/settings.py:736 +#: paperless/settings.py:735 msgid "Finnish" msgstr "" -#: paperless/settings.py:737 +#: paperless/settings.py:736 msgid "French" msgstr "" -#: paperless/settings.py:738 +#: paperless/settings.py:737 msgid "Hungarian" msgstr "" -#: paperless/settings.py:739 +#: paperless/settings.py:738 msgid "Italian" msgstr "" -#: paperless/settings.py:740 +#: paperless/settings.py:739 msgid "Japanese" msgstr "" -#: paperless/settings.py:741 +#: paperless/settings.py:740 msgid "Korean" msgstr "" -#: paperless/settings.py:742 +#: paperless/settings.py:741 msgid "Luxembourgish" msgstr "" -#: paperless/settings.py:743 +#: paperless/settings.py:742 msgid "Norwegian" msgstr "" -#: paperless/settings.py:744 +#: paperless/settings.py:743 msgid "Dutch" msgstr "" -#: paperless/settings.py:745 +#: paperless/settings.py:744 msgid "Polish" msgstr "" -#: paperless/settings.py:746 +#: paperless/settings.py:745 msgid "Portuguese (Brazil)" msgstr "" -#: paperless/settings.py:747 +#: paperless/settings.py:746 msgid "Portuguese" msgstr "" -#: paperless/settings.py:748 +#: paperless/settings.py:747 msgid "Romanian" msgstr "" -#: paperless/settings.py:749 +#: paperless/settings.py:748 msgid "Russian" msgstr "" -#: paperless/settings.py:750 +#: paperless/settings.py:749 msgid "Slovak" msgstr "" -#: paperless/settings.py:751 +#: paperless/settings.py:750 msgid "Slovenian" msgstr "" -#: paperless/settings.py:752 +#: paperless/settings.py:751 msgid "Serbian" msgstr "" -#: paperless/settings.py:753 +#: paperless/settings.py:752 msgid "Swedish" msgstr "" -#: paperless/settings.py:754 +#: paperless/settings.py:753 msgid "Turkish" msgstr "" -#: paperless/settings.py:755 +#: paperless/settings.py:754 msgid "Ukrainian" msgstr "" -#: paperless/settings.py:756 +#: paperless/settings.py:755 msgid "Chinese Simplified" msgstr "" -#: paperless/settings.py:757 +#: paperless/settings.py:756 msgid "Chinese Traditional" msgstr "" @@ -2098,3 +2041,7 @@ msgstr "" #: paperless_mail/models.py:355 msgid "status" msgstr "" + +#: paperless_mail/models.py:363 +msgid "error" +msgstr "" From cf48f47a8c547961fb6a8c5d6b60dbc3a3aad348 Mon Sep 17 00:00:00 2001 From: shamoon <4887959+shamoon@users.noreply.github.com> Date: Thu, 6 Mar 2025 14:55:04 -0800 Subject: [PATCH 02/18] Fix: add account_inactive template / url (#9322) --- .../templates/account/account_inactive.html | 18 +++++++++++++++++ src/locale/en_US/LC_MESSAGES/django.po | 20 +++++++++++++++++-- src/paperless/urls.py | 7 ++++++- 3 files changed, 42 insertions(+), 3 deletions(-) create mode 100644 src/documents/templates/account/account_inactive.html diff --git a/src/documents/templates/account/account_inactive.html b/src/documents/templates/account/account_inactive.html new file mode 100644 index 000000000..4b7bd8922 --- /dev/null +++ b/src/documents/templates/account/account_inactive.html @@ -0,0 +1,18 @@ +{% extends "paperless-ngx/base.html" %} +{% load i18n %} + +{% block head_title %} + {% trans "Paperless-ngx account inactive" %} +{% endblock head_title %} + +{% block form_top_content %} +

{% translate "Account inactve." %}

+{% endblock form_top_content %} + +{% block form_content %} + {% url 'account_login' as login_url %} +

{% translate "This account is inactive." %}

+
+ {% translate "Return to login" %} +
+{% endblock form_content %} diff --git a/src/locale/en_US/LC_MESSAGES/django.po b/src/locale/en_US/LC_MESSAGES/django.po index dfd8b00a8..ed1da7376 100644 --- a/src/locale/en_US/LC_MESSAGES/django.po +++ b/src/locale/en_US/LC_MESSAGES/django.po @@ -2,7 +2,7 @@ msgid "" msgstr "" "Project-Id-Version: paperless-ngx\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-03-06 14:43-0800\n" +"POT-Creation-Date: 2025-03-06 14:46-0800\n" "PO-Revision-Date: 2022-02-17 04:17\n" "Last-Translator: \n" "Language-Team: English\n" @@ -1194,6 +1194,22 @@ msgstr "" msgid "Invalid variable detected." msgstr "" +#: documents/templates/account/account_inactive.html:5 +msgid "Paperless-ngx account inactive" +msgstr "" + +#: documents/templates/account/account_inactive.html:9 +msgid "Account inactve." +msgstr "" + +#: documents/templates/account/account_inactive.html:14 +msgid "This account is inactive." +msgstr "" + +#: documents/templates/account/account_inactive.html:16 +msgid "Return to login" +msgstr "" + #: documents/templates/account/email/base_message.txt:1 #, python-format msgid "Hello from %(site_name)s!" @@ -1698,7 +1714,7 @@ msgstr "" msgid "Chinese Traditional" msgstr "" -#: paperless/urls.py:369 +#: paperless/urls.py:374 msgid "Paperless-ngx administration" msgstr "" diff --git a/src/paperless/urls.py b/src/paperless/urls.py index 4c81a4e48..39819fd3d 100644 --- a/src/paperless/urls.py +++ b/src/paperless/urls.py @@ -278,10 +278,15 @@ urlpatterns = [ include( [ # see allauth/account/urls.py - # login, logout, signup + # login, logout, signup, account_inactive path("login/", allauth_account_views.login, name="account_login"), path("logout/", allauth_account_views.logout, name="account_logout"), path("signup/", allauth_account_views.signup, name="account_signup"), + path( + "account_inactive/", + allauth_account_views.account_inactive, + name="account_inactive", + ), # password reset path( "password/", From 485dad01b70823f2e562ee0da14274785c53d2ea Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Sebastian=20Steinbei=C3=9Fer?= <33968289+gothicVI@users.noreply.github.com> Date: Fri, 7 Mar 2025 04:32:54 +0100 Subject: [PATCH 03/18] Bug fix: typo in migration file (#9321) --- src/documents/migrations/0012_auto_20160305_0040.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/documents/migrations/0012_auto_20160305_0040.py b/src/documents/migrations/0012_auto_20160305_0040.py index d7b2ab52b..bcd67f1be 100644 --- a/src/documents/migrations/0012_auto_20160305_0040.py +++ b/src/documents/migrations/0012_auto_20160305_0040.py @@ -61,7 +61,7 @@ def move_documents_and_create_thumbnails(apps, schema_editor): ), ) - Path(settings.SCRATCH_DIR).mkdir(parents=True, exists_ok=True) + Path(settings.SCRATCH_DIR).mkdir(parents=True, exist_ok=True) for f in sorted(documents): if not f.endswith("gpg"): From 8db04398c70d1a55bae41fc3002ba9f674b3cd09 Mon Sep 17 00:00:00 2001 From: shamoon <4887959+shamoon@users.noreply.github.com> Date: Fri, 7 Mar 2025 09:29:55 -0800 Subject: [PATCH 04/18] Chore: ensure codecov upload gets attempted (#9308) --------- Co-authored-by: Trenton H <797416+stumpylog@users.noreply.github.com> --- .codecov.yml | 16 ++--- .github/workflows/ci.yml | 132 +++++++++------------------------------ 2 files changed, 37 insertions(+), 111 deletions(-) diff --git a/.codecov.yml b/.codecov.yml index 5fa8e1639..d9a12a773 100644 --- a/.codecov.yml +++ b/.codecov.yml @@ -1,18 +1,18 @@ codecov: require_ci_to_pass: true -# https://docs.codecov.com/docs/flags#recommended-automatic-flag-management -# Require each flag to have 1 upload before notification -flag_management: - individual_flags: - - name: backend + # https://docs.codecov.com/docs/components +component_management: + individual_components: + - component_id: backend paths: - - src/ - - name: frontend + - src/** + - component_id: frontend paths: - - src-ui/ + - src-ui/** # https://docs.codecov.com/docs/pull-request-comments # codecov will only comment if coverage changes comment: + layout: "header, diff, components, flags, files" require_changes: true # https://docs.codecov.com/docs/javascript-bundle-analysis require_bundle_changes: true diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index c85961eaf..d7a89f14c 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -162,16 +162,20 @@ jobs: --frozen \ pytest - - name: Upload coverage - if: ${{ matrix.python-version == env.DEFAULT_PYTHON_VERSION }} - uses: actions/upload-artifact@v4 + name: Upload backend test results to Codecov + if: always() + uses: codecov/test-results-action@v1 with: - name: backend-coverage-report - path: | - coverage.xml - junit.xml - retention-days: 7 - if-no-files-found: error + token: ${{ secrets.CODECOV_TOKEN }} + flags: python-${{ matrix.python-version }} + files: junit.xml + - + name: Upload backend coverage to Codecov + uses: codecov/codecov-action@v5 + with: + token: ${{ secrets.CODECOV_TOKEN }} + flags: python-${{ matrix.python-version }} + files: coverage.xml - name: Stop containers if: always() @@ -179,7 +183,7 @@ jobs: docker compose --file ${{ github.workspace }}/docker/compose/docker-compose.ci-test.yml logs docker compose --file ${{ github.workspace }}/docker/compose/docker-compose.ci-test.yml down - install-frontend-depedendencies: + install-frontend-dependencies: name: "Install Frontend Dependencies" runs-on: ubuntu-24.04 needs: @@ -214,7 +218,7 @@ jobs: name: "Frontend Tests (Node ${{ matrix.node-version }} - ${{ matrix.shard-index }}/${{ matrix.shard-count }})" runs-on: ubuntu-24.04 needs: - - install-frontend-depedendencies + - install-frontend-dependencies strategy: fail-fast: false matrix: @@ -245,111 +249,33 @@ jobs: run: cd src-ui && npm run lint - name: Run Jest unit tests - env: - JEST_JUNIT_OUTPUT_FILE: junit-report-${{ matrix.shard-index }}.xml run: cd src-ui && npm run test -- --max-workers=2 --shard=${{ matrix.shard-index }}/${{ matrix.shard-count }} - - - name: Upload Jest coverage - if: always() - uses: actions/upload-artifact@v4 - with: - name: jest-coverage-report-${{ matrix.shard-index }} - path: | - src-ui/coverage/coverage-final.json - src-ui/coverage/lcov.info - src-ui/coverage/clover.xml - retention-days: 7 - if-no-files-found: error - name: Run Playwright e2e tests run: cd src-ui && npx playwright test --shard ${{ matrix.shard-index }}/${{ matrix.shard-count }} - - name: Upload Playwright test results + name: Upload frontend test results to Codecov + uses: codecov/test-results-action@v1 if: always() - uses: actions/upload-artifact@v4 with: - name: playwright-report-${{ matrix.shard-index }} - path: src-ui/playwright-report - retention-days: 7 - - - name: Upload frontend test results - if: always() - uses: actions/upload-artifact@v4 - with: - name: junit-report-${{ matrix.shard-index }} - path: src-ui/junit-report-${{ matrix.shard-index }}.xml - retention-days: 7 - - tests-coverage-upload: - name: "Upload to Codecov" - runs-on: ubuntu-24.04 - needs: - - tests-backend - - tests-frontend - steps: - - - uses: actions/checkout@v4 - - - name: Download frontend jest coverage - uses: actions/download-artifact@v4 - with: - path: src-ui/coverage/ - pattern: jest-coverage-report-* - - - name: Download frontend playwright coverage - uses: actions/download-artifact@v4 - with: - path: src-ui/coverage/ - pattern: playwright-report-* - merge-multiple: true - - - name: Download frontend test results - uses: actions/download-artifact@v4 - with: - path: src-ui/junit/ - pattern: junit-report-* - merge-multiple: true + token: ${{ secrets.CODECOV_TOKEN }} + flags: node-${{ matrix.node-version }} + directory: src-ui/ - name: Upload frontend coverage to Codecov uses: codecov/codecov-action@v5 with: - # not required for public repos, but intermittently fails otherwise token: ${{ secrets.CODECOV_TOKEN }} - flags: frontend + flags: node-${{ matrix.node-version }} directory: src-ui/coverage/ - # dont include backend coverage files here - files: '!coverage.xml' - - - name: Upload frontend test results to Codecov - if: ${{ !cancelled() }} - uses: codecov/test-results-action@v1 - with: - token: ${{ secrets.CODECOV_TOKEN }} - flags: frontend - directory: src-ui/junit/ - - - name: Download backend coverage - uses: actions/download-artifact@v4 - with: - name: backend-coverage-report - path: src/ - - - name: Upload coverage to Codecov - uses: codecov/codecov-action@v5 - with: - # not required for public repos, but intermittently fails otherwise - token: ${{ secrets.CODECOV_TOKEN }} - # future expansion - flags: backend - directory: src/ - - - name: Upload backend test results to Codecov - if: ${{ !cancelled() }} - uses: codecov/test-results-action@v1 - with: - token: ${{ secrets.CODECOV_TOKEN }} - flags: backend - directory: src/ + + frontend-bundle-analysis: + name: "Frontend Bundle Analysis" + runs-on: ubuntu-24.04 + needs: + - tests-frontend + steps: + - uses: actions/checkout@v4 - name: Use Node.js 20 uses: actions/setup-node@v4 From 5f16d5f5f149d6fe303d201b8c0dce56fc842849 Mon Sep 17 00:00:00 2001 From: Trenton H <797416+stumpylog@users.noreply.github.com> Date: Fri, 7 Mar 2025 09:39:23 -0800 Subject: [PATCH 05/18] Chore: Adds an option for funding through GitHub sponsors (#9328) --- .github/FUNDING.yml | 1 + 1 file changed, 1 insertion(+) create mode 100644 .github/FUNDING.yml diff --git a/.github/FUNDING.yml b/.github/FUNDING.yml new file mode 100644 index 000000000..79e3a774d --- /dev/null +++ b/.github/FUNDING.yml @@ -0,0 +1 @@ +github: [shamoon, stumpylog] From b4b0f802e15353b587b15e19ee66ef4899c66171 Mon Sep 17 00:00:00 2001 From: shamoon <4887959+shamoon@users.noreply.github.com> Date: Fri, 7 Mar 2025 13:31:23 -0800 Subject: [PATCH 06/18] Fix: correct all results with whoosh queries (#9331) --- src/paperless/views.py | 23 ++++++++++++----------- 1 file changed, 12 insertions(+), 11 deletions(-) diff --git a/src/paperless/views.py b/src/paperless/views.py index fdd7c21a4..050bb3f61 100644 --- a/src/paperless/views.py +++ b/src/paperless/views.py @@ -32,6 +32,7 @@ from rest_framework.permissions import IsAuthenticated from rest_framework.response import Response from rest_framework.viewsets import ModelViewSet +from documents.index import DelayedQuery from documents.permissions import PaperlessObjectPermissions from paperless.filters import GroupFilterSet from paperless.filters import UserFilterSet @@ -66,17 +67,17 @@ class StandardPagination(PageNumberPagination): ) def get_all_result_ids(self): - ids = [] - if hasattr(self.page.paginator.object_list, "saved_results"): - results_page = self.page.paginator.object_list.saved_results[0] - if results_page is not None: - for i in range(len(results_page.results.docs())): - try: - fields = results_page.results.fields(i) - if "id" in fields: - ids.append(fields["id"]) - except Exception: - pass + query = self.page.paginator.object_list + if isinstance(query, DelayedQuery): + try: + ids = [ + query.searcher.ixreader.stored_fields( + doc_num, + )["id"] + for doc_num in query.saved_results.get(0).results.docs() + ] + except Exception: + pass else: ids = self.page.paginator.object_list.values_list("pk", flat=True) return ids From b746b6f2d63787f5c04070bfaae381de9b5b5430 Mon Sep 17 00:00:00 2001 From: shamoon <4887959+shamoon@users.noreply.github.com> Date: Fri, 7 Mar 2025 17:08:36 -0800 Subject: [PATCH 07/18] Chore: prefix codecov flags --- .github/workflows/ci.yml | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index d7a89f14c..b65543ae7 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -167,14 +167,14 @@ jobs: uses: codecov/test-results-action@v1 with: token: ${{ secrets.CODECOV_TOKEN }} - flags: python-${{ matrix.python-version }} + flags: backend-python-${{ matrix.python-version }} files: junit.xml - name: Upload backend coverage to Codecov uses: codecov/codecov-action@v5 with: token: ${{ secrets.CODECOV_TOKEN }} - flags: python-${{ matrix.python-version }} + flags: backend-python-${{ matrix.python-version }} files: coverage.xml - name: Stop containers @@ -259,14 +259,14 @@ jobs: if: always() with: token: ${{ secrets.CODECOV_TOKEN }} - flags: node-${{ matrix.node-version }} + flags: frontend-node-${{ matrix.node-version }} directory: src-ui/ - name: Upload frontend coverage to Codecov uses: codecov/codecov-action@v5 with: token: ${{ secrets.CODECOV_TOKEN }} - flags: node-${{ matrix.node-version }} + flags: frontend-node-${{ matrix.node-version }} directory: src-ui/coverage/ frontend-bundle-analysis: From 955ff32dcd677dd57bfabdd04a99af29d94bd216 Mon Sep 17 00:00:00 2001 From: shamoon <4887959+shamoon@users.noreply.github.com> Date: Sat, 8 Mar 2025 19:17:08 -0800 Subject: [PATCH 08/18] Fix: fix improved close behavior with production minified javascript --- src-ui/src/app/app-routing.module.ts | 28 ++++++++++++++++++- .../services/component-router.service.spec.ts | 16 +++++------ .../app/services/component-router.service.ts | 6 ++-- 3 files changed, 38 insertions(+), 12 deletions(-) diff --git a/src-ui/src/app/app-routing.module.ts b/src-ui/src/app/app-routing.module.ts index cdd225497..f65514f74 100644 --- a/src-ui/src/app/app-routing.module.ts +++ b/src-ui/src/app/app-routing.module.ts @@ -36,7 +36,13 @@ export const routes: Routes = [ component: AppFrameComponent, canDeactivate: [DirtyDocGuard], children: [ - { path: 'dashboard', component: DashboardComponent }, + { + path: 'dashboard', + component: DashboardComponent, + data: { + componentName: 'AppFrameComponent', + }, + }, { path: 'documents', component: DocumentListComponent, @@ -47,6 +53,7 @@ export const routes: Routes = [ action: PermissionAction.View, type: PermissionType.Document, }, + componentName: 'DocumentListComponent', }, }, { @@ -59,6 +66,7 @@ export const routes: Routes = [ action: PermissionAction.View, type: PermissionType.SavedView, }, + componentName: 'DocumentListComponent', }, }, { @@ -70,6 +78,7 @@ export const routes: Routes = [ action: PermissionAction.View, type: PermissionType.Document, }, + componentName: 'DocumentDetailComponent', }, }, { @@ -81,6 +90,7 @@ export const routes: Routes = [ action: PermissionAction.View, type: PermissionType.Document, }, + componentName: 'DocumentDetailComponent', }, }, { @@ -92,6 +102,7 @@ export const routes: Routes = [ action: PermissionAction.View, type: PermissionType.Document, }, + componentName: 'DocumentAsnComponent', }, }, { @@ -103,6 +114,7 @@ export const routes: Routes = [ action: PermissionAction.View, type: PermissionType.Tag, }, + componentName: 'TagListComponent', }, }, { @@ -114,6 +126,7 @@ export const routes: Routes = [ action: PermissionAction.View, type: PermissionType.DocumentType, }, + componentName: 'DocumentTypeListComponent', }, }, { @@ -125,6 +138,7 @@ export const routes: Routes = [ action: PermissionAction.View, type: PermissionType.Correspondent, }, + componentName: 'CorrespondentListComponent', }, }, { @@ -136,6 +150,7 @@ export const routes: Routes = [ action: PermissionAction.View, type: PermissionType.StoragePath, }, + componentName: 'StoragePathListComponent', }, }, { @@ -144,6 +159,7 @@ export const routes: Routes = [ canActivate: [PermissionsGuard], data: { requireAdmin: true, + componentName: 'LogsComponent', }, }, { @@ -155,6 +171,7 @@ export const routes: Routes = [ action: PermissionAction.Delete, type: PermissionType.Document, }, + componentName: 'TrashComponent', }, }, // redirect old paths @@ -180,6 +197,7 @@ export const routes: Routes = [ action: PermissionAction.Change, type: PermissionType.UISettings, }, + componentName: 'SettingsComponent', }, }, { @@ -192,6 +210,7 @@ export const routes: Routes = [ action: PermissionAction.View, type: PermissionType.UISettings, }, + componentName: 'SettingsComponent', }, }, { @@ -203,6 +222,7 @@ export const routes: Routes = [ action: PermissionAction.Change, type: PermissionType.AppConfig, }, + componentName: 'ConfigComponent', }, }, { @@ -214,6 +234,7 @@ export const routes: Routes = [ action: PermissionAction.View, type: PermissionType.PaperlessTask, }, + componentName: 'TasksComponent', }, }, { @@ -225,6 +246,7 @@ export const routes: Routes = [ action: PermissionAction.View, type: PermissionType.CustomField, }, + componentName: 'CustomFieldsComponent', }, }, { @@ -236,6 +258,7 @@ export const routes: Routes = [ action: PermissionAction.View, type: PermissionType.Workflow, }, + componentName: 'WorkflowsComponent', }, }, { @@ -247,6 +270,7 @@ export const routes: Routes = [ action: PermissionAction.View, type: PermissionType.MailAccount, }, + componentName: 'MailComponent', }, }, { @@ -258,6 +282,7 @@ export const routes: Routes = [ action: PermissionAction.View, type: PermissionType.User, }, + componentName: 'UsersAndGroupsComponent', }, }, { @@ -269,6 +294,7 @@ export const routes: Routes = [ action: PermissionAction.View, type: PermissionType.SavedView, }, + componentName: 'SavedViewsComponent', }, }, ], diff --git a/src-ui/src/app/services/component-router.service.spec.ts b/src-ui/src/app/services/component-router.service.spec.ts index b11fc8197..760493a33 100644 --- a/src-ui/src/app/services/component-router.service.spec.ts +++ b/src-ui/src/app/services/component-router.service.spec.ts @@ -29,7 +29,7 @@ describe('ComponentRouterService', () => { eventsSubject.next( new ActivationStart({ url: 'test-url', - component: { name: 'TestComponent' }, + data: { componentName: 'TestComponent' }, } as any) ) @@ -41,13 +41,13 @@ describe('ComponentRouterService', () => { eventsSubject.next( new ActivationStart({ url: 'test-url-1', - component: { name: 'TestComponent' }, + data: { componentName: 'TestComponent' }, } as any) ) eventsSubject.next( new ActivationStart({ url: 'test-url-2', - component: { name: 'TestComponent' }, + data: { componentName: 'TestComponent' }, } as any) ) @@ -59,13 +59,13 @@ describe('ComponentRouterService', () => { eventsSubject.next( new ActivationStart({ url: 'test-url-1', - component: { name: 'TestComponent1' }, + data: { componentName: 'TestComponent1' }, } as any) ) eventsSubject.next( new ActivationStart({ url: 'test-url-2', - component: { name: 'TestComponent2' }, + data: { componentName: 'TestComponent2' }, } as any) ) @@ -76,13 +76,13 @@ describe('ComponentRouterService', () => { eventsSubject.next( new ActivationStart({ url: 'test-url-1', - component: { name: 'TestComponent' }, + data: { componentName: 'TestComponent' }, } as any) ) eventsSubject.next( new ActivationStart({ url: 'test-url-2', - component: { name: 'TestComponent' }, + data: { componentName: 'TestComponent' }, } as any) ) @@ -93,7 +93,7 @@ describe('ComponentRouterService', () => { eventsSubject.next( new ActivationStart({ url: 'test-url', - component: { name: 'TestComponent' }, + data: { componentName: 'TestComponent' }, } as any) ) diff --git a/src-ui/src/app/services/component-router.service.ts b/src-ui/src/app/services/component-router.service.ts index 0589ef61f..d520c36f2 100644 --- a/src-ui/src/app/services/component-router.service.ts +++ b/src-ui/src/app/services/component-router.service.ts @@ -17,11 +17,11 @@ export class ComponentRouterService { .subscribe((event: ActivationStart) => { if ( this.componentHistory[this.componentHistory.length - 1] !== - event.snapshot.component.name && - !EXCLUDE_COMPONENTS.includes(event.snapshot.component.name) + event.snapshot.data.componentName && + !EXCLUDE_COMPONENTS.includes(event.snapshot.data.componentName) ) { this.history.push(event.snapshot.url.toString()) - this.componentHistory.push(event.snapshot.component.name) + this.componentHistory.push(event.snapshot.data.componentName) } else { // Update the URL of the current component in case the same component was loaded via a different URL this.history[this.history.length - 1] = event.snapshot.url.toString() From 4d15544a3e39e55830a42a022a22861bec478abd Mon Sep 17 00:00:00 2001 From: shamoon <4887959+shamoon@users.noreply.github.com> Date: Sun, 9 Mar 2025 16:04:05 -0700 Subject: [PATCH 09/18] Fix: fix notes serializing in API document response (#9336) --- src/documents/serialisers.py | 19 ++++++++++++ src/documents/tests/test_api_documents.py | 14 +++++++++ src/documents/views.py | 37 +++++------------------ 3 files changed, 40 insertions(+), 30 deletions(-) diff --git a/src/documents/serialisers.py b/src/documents/serialisers.py index a67673efc..c8a4a12c3 100644 --- a/src/documents/serialisers.py +++ b/src/documents/serialisers.py @@ -43,6 +43,7 @@ from documents.models import CustomFieldInstance from documents.models import Document from documents.models import DocumentType from documents.models import MatchingModel +from documents.models import Note from documents.models import PaperlessTask from documents.models import SavedView from documents.models import SavedViewFilterRule @@ -861,6 +862,22 @@ class CustomFieldInstanceSerializer(serializers.ModelSerializer): ] +class BasicUserSerializer(serializers.ModelSerializer): + # Different than paperless.serializers.UserSerializer + class Meta: + model = User + fields = ["id", "username", "first_name", "last_name"] + + +class NotesSerializer(serializers.ModelSerializer): + user = BasicUserSerializer() + + class Meta: + model = Note + fields = ["id", "note", "created", "user"] + ordering = ["-created"] + + class DocumentSerializer( OwnedObjectSerializer, NestedUpdateMixin, @@ -876,6 +893,8 @@ class DocumentSerializer( created_date = serializers.DateField(required=False) page_count = SerializerMethodField() + notes = NotesSerializer(many=True, required=False) + custom_fields = CustomFieldInstanceSerializer( many=True, allow_null=False, diff --git a/src/documents/tests/test_api_documents.py b/src/documents/tests/test_api_documents.py index 7258b33d3..a0a380e41 100644 --- a/src/documents/tests/test_api_documents.py +++ b/src/documents/tests/test_api_documents.py @@ -2170,8 +2170,10 @@ class TestDocumentApi(DirectoriesMixin, DocumentConsumeDelayMixin, APITestCase): GIVEN: - A document with a single note WHEN: + - API request for document - API request for document notes is made THEN: + - Note is included in the document response - The associated note is returned """ doc = Document.objects.create( @@ -2185,6 +2187,18 @@ class TestDocumentApi(DirectoriesMixin, DocumentConsumeDelayMixin, APITestCase): user=self.user, ) + response = self.client.get( + f"/api/documents/{doc.pk}/", + format="json", + ) + + self.assertEqual(response.status_code, status.HTTP_200_OK) + + resp_data = response.json() + self.assertEqual(len(resp_data["notes"]), 1) + self.assertEqual(resp_data["notes"][0]["note"], note.note) + self.assertEqual(resp_data["notes"][0]["user"]["username"], self.user.username) + response = self.client.get( f"/api/documents/{doc.pk}/notes/", format="json", diff --git a/src/documents/views.py b/src/documents/views.py index 1d4cb52dd..7298391f2 100644 --- a/src/documents/views.py +++ b/src/documents/views.py @@ -803,33 +803,6 @@ class DocumentViewSet( except (FileNotFoundError, Document.DoesNotExist): raise Http404 - def getNotes(self, doc): - return [ - { - "id": c.pk, - "note": c.note, - "created": c.created, - "user": { - "id": c.user.id, - "username": c.user.username, - "first_name": c.user.first_name, - "last_name": c.user.last_name, - }, - } - for c in Note.objects.select_related("user") - .only( - "pk", - "note", - "created", - "user__id", - "user__username", - "user__first_name", - "user__last_name", - ) - .filter(document=doc) - .order_by("-created") - ] - @action( methods=["get", "post", "delete"], detail=True, @@ -854,9 +827,11 @@ class DocumentViewSet( except Document.DoesNotExist: raise Http404 + serializer = self.get_serializer(doc) + if request.method == "GET": try: - notes = self.getNotes(doc) + notes = serializer.to_representation(doc).get("notes") return Response(notes) except Exception as e: logger.warning(f"An error occurred retrieving notes: {e!s}") @@ -897,7 +872,7 @@ class DocumentViewSet( index.add_or_update_document(doc) - notes = self.getNotes(doc) + notes = serializer.to_representation(doc).get("notes") return Response(notes) except Exception as e: @@ -934,7 +909,9 @@ class DocumentViewSet( index.add_or_update_document(doc) - return Response(self.getNotes(doc)) + notes = serializer.to_representation(doc).get("notes") + + return Response(notes) return Response( { From ba2cb1dec8b7abd9e2a21888ecf001882bd5b130 Mon Sep 17 00:00:00 2001 From: Trenton H <797416+stumpylog@users.noreply.github.com> Date: Sun, 9 Mar 2025 19:43:07 -0700 Subject: [PATCH 10/18] Chore: Enables dependabot for Dockerfile and our Compose files (#9342) --- .github/dependabot.yml | 47 ++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 47 insertions(+) diff --git a/.github/dependabot.yml b/.github/dependabot.yml index 4a436f56f..08563f84a 100644 --- a/.github/dependabot.yml +++ b/.github/dependabot.yml @@ -89,3 +89,50 @@ updates: - "major" - "minor" - "patch" + + # Update Dockerfile in root directory + - package-ecosystem: "docker" + directory: "/" + schedule: + interval: "weekly" + open-pull-requests-limit: 5 + reviewers: + - "paperless-ngx/ci-cd" + labels: + - "ci-cd" + - "dependencies" + commit-message: + prefix: "docker" + include: "scope" + + # Update Docker Compose files in docker/compose directory + - package-ecosystem: "docker" + directory: "/docker/compose/" + schedule: + interval: "weekly" + open-pull-requests-limit: 5 + reviewers: + - "paperless-ngx/ci-cd" + labels: + - "ci-cd" + - "dependencies" + commit-message: + prefix: "docker-compose" + include: "scope" + groups: + # Individual groups for each image + gotenberg: + patterns: + - "docker.io/gotenberg/gotenberg*" + tika: + patterns: + - "docker.io/apache/tika*" + redis: + patterns: + - "docker.io/library/redis*" + mariadb: + patterns: + - "docker.io/library/mariadb*" + postgres: + patterns: + - "docker.io/library/postgres*" From 5570d206256b5ba75a08ccda94b1874668249936 Mon Sep 17 00:00:00 2001 From: Trenton Holmes <797416+stumpylog@users.noreply.github.com> Date: Sun, 9 Mar 2025 19:46:34 -0700 Subject: [PATCH 11/18] Fixes the package ecosystem --- .github/dependabot.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/dependabot.yml b/.github/dependabot.yml index 08563f84a..9c7be60f1 100644 --- a/.github/dependabot.yml +++ b/.github/dependabot.yml @@ -106,7 +106,7 @@ updates: include: "scope" # Update Docker Compose files in docker/compose directory - - package-ecosystem: "docker" + - package-ecosystem: "docker-compose" directory: "/docker/compose/" schedule: interval: "weekly" From 79328b1cec4d69994b7043e6ad0e85d4c4b0030f Mon Sep 17 00:00:00 2001 From: Dominik Schilling Date: Mon, 10 Mar 2025 14:38:00 +0100 Subject: [PATCH 12/18] Fix typo in inactive account template (#9356) --- src/documents/templates/account/account_inactive.html | 2 +- src/locale/en_US/LC_MESSAGES/django.po | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/documents/templates/account/account_inactive.html b/src/documents/templates/account/account_inactive.html index 4b7bd8922..ab6597451 100644 --- a/src/documents/templates/account/account_inactive.html +++ b/src/documents/templates/account/account_inactive.html @@ -6,7 +6,7 @@ {% endblock head_title %} {% block form_top_content %} -

{% translate "Account inactve." %}

+

{% translate "Account inactive." %}

{% endblock form_top_content %} {% block form_content %} diff --git a/src/locale/en_US/LC_MESSAGES/django.po b/src/locale/en_US/LC_MESSAGES/django.po index ed1da7376..4a1a4d261 100644 --- a/src/locale/en_US/LC_MESSAGES/django.po +++ b/src/locale/en_US/LC_MESSAGES/django.po @@ -1199,7 +1199,7 @@ msgid "Paperless-ngx account inactive" msgstr "" #: documents/templates/account/account_inactive.html:9 -msgid "Account inactve." +msgid "Account inactive." msgstr "" #: documents/templates/account/account_inactive.html:14 From 309fb199f2556262e11f873ed4afa7a7e6777f24 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 10 Mar 2025 08:39:49 -0700 Subject: [PATCH 13/18] docker(deps): Bump astral-sh/uv (#9344) Bumps [astral-sh/uv](https://github.com/astral-sh/uv) from 0.6.3-python3.12-bookworm-slim to 0.6.5-python3.12-bookworm-slim. - [Release notes](https://github.com/astral-sh/uv/releases) - [Changelog](https://github.com/astral-sh/uv/blob/main/CHANGELOG.md) - [Commits](https://github.com/astral-sh/uv/compare/0.6.3...0.6.5) --- updated-dependencies: - dependency-name: astral-sh/uv dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- Dockerfile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Dockerfile b/Dockerfile index e64f1708c..d088fcf5b 100644 --- a/Dockerfile +++ b/Dockerfile @@ -30,7 +30,7 @@ RUN set -eux \ # Purpose: Installs s6-overlay and rootfs # Comments: # - Don't leave anything extra in here either -FROM ghcr.io/astral-sh/uv:0.6.3-python3.12-bookworm-slim AS s6-overlay-base +FROM ghcr.io/astral-sh/uv:0.6.5-python3.12-bookworm-slim AS s6-overlay-base WORKDIR /usr/src/s6 From 670ee6c5b023eca1d2b6b009c211a6e8e226fac9 Mon Sep 17 00:00:00 2001 From: Trenton H <797416+stumpylog@users.noreply.github.com> Date: Mon, 10 Mar 2025 08:49:35 -0700 Subject: [PATCH 14/18] Chore: Ensure the directories have been overridden and created for this test (#9354) --- src/documents/tests/test_migration_document_pages_count.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/documents/tests/test_migration_document_pages_count.py b/src/documents/tests/test_migration_document_pages_count.py index e656bf1b8..902896b8c 100644 --- a/src/documents/tests/test_migration_document_pages_count.py +++ b/src/documents/tests/test_migration_document_pages_count.py @@ -4,6 +4,7 @@ from pathlib import Path from django.conf import settings +from documents.tests.utils import DirectoriesMixin from documents.tests.utils import TestMigrations @@ -14,7 +15,7 @@ def source_path_before(self): return os.path.join(settings.ORIGINALS_DIR, fname) -class TestMigrateDocumentPageCount(TestMigrations): +class TestMigrateDocumentPageCount(DirectoriesMixin, TestMigrations): migrate_from = "1052_document_transaction_id" migrate_to = "1053_document_page_count" From 032bada2214eef5cc01101baaa15b1b36cfd3be1 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 10 Mar 2025 09:37:53 -0700 Subject: [PATCH 15/18] docker-compose(deps): Bump library/postgres in /docker/compose (#9353) Bumps library/postgres from 16 to 17. --- updated-dependencies: - dependency-name: library/postgres dependency-type: direct:production update-type: version-update:semver-major ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- docker/compose/docker-compose.portainer.yml | 2 +- docker/compose/docker-compose.postgres-tika.yml | 2 +- docker/compose/docker-compose.postgres.yml | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/docker/compose/docker-compose.portainer.yml b/docker/compose/docker-compose.portainer.yml index 588a93c84..2132c67a6 100644 --- a/docker/compose/docker-compose.portainer.yml +++ b/docker/compose/docker-compose.portainer.yml @@ -38,7 +38,7 @@ services: - redisdata:/data db: - image: docker.io/library/postgres:16 + image: docker.io/library/postgres:17 restart: unless-stopped volumes: - pgdata:/var/lib/postgresql/data diff --git a/docker/compose/docker-compose.postgres-tika.yml b/docker/compose/docker-compose.postgres-tika.yml index 28acd55b0..60bfada5f 100644 --- a/docker/compose/docker-compose.postgres-tika.yml +++ b/docker/compose/docker-compose.postgres-tika.yml @@ -38,7 +38,7 @@ services: - redisdata:/data db: - image: docker.io/library/postgres:16 + image: docker.io/library/postgres:17 restart: unless-stopped volumes: - pgdata:/var/lib/postgresql/data diff --git a/docker/compose/docker-compose.postgres.yml b/docker/compose/docker-compose.postgres.yml index f0af4e8da..da2953b7b 100644 --- a/docker/compose/docker-compose.postgres.yml +++ b/docker/compose/docker-compose.postgres.yml @@ -34,7 +34,7 @@ services: - redisdata:/data db: - image: docker.io/library/postgres:16 + image: docker.io/library/postgres:17 restart: unless-stopped volumes: - pgdata:/var/lib/postgresql/data From 5421e54cb0644bcdcaf77d9c778129137375fc97 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 10 Mar 2025 17:01:18 +0000 Subject: [PATCH 16/18] Chore(deps): Bump the small-changes group with 2 updates (#9345) * Chore(deps): Bump the small-changes group with 2 updates Bumps the small-changes group with 2 updates: [psycopg[c]](https://github.com/psycopg/psycopg) and [psycopg-c](https://github.com/psycopg/psycopg). Updates `psycopg[c]` from 3.2.4 to 3.2.5 - [Changelog](https://github.com/psycopg/psycopg/blob/master/docs/news.rst) - [Commits](https://github.com/psycopg/psycopg/compare/3.2.4...3.2.5) Updates `psycopg-c` from 3.2.4 to 3.2.5 - [Changelog](https://github.com/psycopg/psycopg/blob/master/docs/news.rst) - [Commits](https://github.com/psycopg/psycopg/compare/3.2.4...3.2.5) --- updated-dependencies: - dependency-name: psycopg[c] dependency-type: direct:production update-type: version-update:semver-patch dependency-group: small-changes - dependency-name: psycopg-c dependency-type: direct:production update-type: version-update:semver-patch dependency-group: small-changes ... Signed-off-by: dependabot[bot] * Builds the latest psycopg --------- Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> Co-authored-by: Trenton H <797416+stumpylog@users.noreply.github.com> --- pyproject.toml | 8 ++++---- uv.lock | 42 +++++++++++++++++++++--------------------- 2 files changed, 25 insertions(+), 25 deletions(-) diff --git a/pyproject.toml b/pyproject.toml index a583cd1a4..36ab46eb2 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -73,9 +73,9 @@ optional-dependencies.mariadb = [ "mysqlclient~=2.2.7", ] optional-dependencies.postgres = [ - "psycopg[c]==3.2.4", + "psycopg[c]==3.2.5", # Direct dependency for proper resolution of the pre-built wheels - "psycopg-c==3.2.4", + "psycopg-c==3.2.5", ] optional-dependencies.webserver = [ "granian~=1.7.6", @@ -343,8 +343,8 @@ environments = [ [tool.uv.sources] # Markers are chosen to select these almost exclusively when building the Docker image psycopg-c = [ - { url = "https://github.com/paperless-ngx/builder/releases/download/psycopg-3.2.4/psycopg_c-3.2.4-cp312-cp312-linux_x86_64.whl", marker = "sys_platform == 'linux' and platform_machine == 'x86_64' and python_version == '3.12'" }, - { url = "https://github.com/paperless-ngx/builder/releases/download/psycopg-3.2.4/psycopg_c-3.2.4-cp312-cp312-linux_aarch64.whl", marker = "sys_platform == 'linux' and platform_machine == 'aarch64' and python_version == '3.12'" }, + { url = "https://github.com/paperless-ngx/builder/releases/download/psycopg-3.2.5/psycopg_c-3.2.5-cp312-cp312-linux_x86_64.whl", marker = "sys_platform == 'linux' and platform_machine == 'x86_64' and python_version == '3.12'" }, + { url = "https://github.com/paperless-ngx/builder/releases/download/psycopg-3.2.5/psycopg_c-3.2.5-cp312-cp312-linux_aarch64.whl", marker = "sys_platform == 'linux' and platform_machine == 'aarch64' and python_version == '3.12'" }, ] zxing-cpp = [ { url = "https://github.com/paperless-ngx/builder/releases/download/zxing-2.3.0/zxing_cpp-2.3.0-cp312-cp312-linux_x86_64.whl", marker = "sys_platform == 'linux' and platform_machine == 'x86_64' and python_version == '3.12'" }, diff --git a/uv.lock b/uv.lock index d4b0a45d4..6a6cf3388 100644 --- a/uv.lock +++ b/uv.lock @@ -1904,9 +1904,9 @@ mariadb = [ ] postgres = [ { name = "psycopg", extra = ["c"], marker = "sys_platform == 'darwin' or sys_platform == 'linux'" }, - { name = "psycopg-c", version = "3.2.4", source = { registry = "https://pypi.org/simple" }, marker = "(python_full_version != '3.12.*' and platform_machine == 'aarch64' and sys_platform == 'linux') or (python_full_version != '3.12.*' and platform_machine == 'x86_64' and sys_platform == 'linux') or (platform_machine != 'aarch64' and platform_machine != 'x86_64' and sys_platform == 'linux') or sys_platform == 'darwin'" }, - { name = "psycopg-c", version = "3.2.4", source = { url = "https://github.com/paperless-ngx/builder/releases/download/psycopg-3.2.4/psycopg_c-3.2.4-cp312-cp312-linux_aarch64.whl" }, marker = "python_full_version == '3.12.*' and platform_machine == 'aarch64' and sys_platform == 'linux'" }, - { name = "psycopg-c", version = "3.2.4", source = { url = "https://github.com/paperless-ngx/builder/releases/download/psycopg-3.2.4/psycopg_c-3.2.4-cp312-cp312-linux_x86_64.whl" }, marker = "python_full_version == '3.12.*' and platform_machine == 'x86_64' and sys_platform == 'linux'" }, + { name = "psycopg-c", version = "3.2.5", source = { registry = "https://pypi.org/simple" }, marker = "(python_full_version != '3.12.*' and platform_machine == 'aarch64' and sys_platform == 'linux') or (python_full_version != '3.12.*' and platform_machine == 'x86_64' and sys_platform == 'linux') or (platform_machine != 'aarch64' and platform_machine != 'x86_64' and sys_platform == 'linux') or sys_platform == 'darwin'" }, + { name = "psycopg-c", version = "3.2.5", source = { url = "https://github.com/paperless-ngx/builder/releases/download/psycopg-3.2.5/psycopg_c-3.2.5-cp312-cp312-linux_aarch64.whl" }, marker = "python_full_version == '3.12.*' and platform_machine == 'aarch64' and sys_platform == 'linux'" }, + { name = "psycopg-c", version = "3.2.5", source = { url = "https://github.com/paperless-ngx/builder/releases/download/psycopg-3.2.5/psycopg_c-3.2.5-cp312-cp312-linux_x86_64.whl" }, marker = "python_full_version == '3.12.*' and platform_machine == 'x86_64' and sys_platform == 'linux'" }, ] webserver = [ { name = "granian", marker = "sys_platform == 'darwin' or sys_platform == 'linux'" }, @@ -2010,10 +2010,10 @@ requires-dist = [ { name = "ocrmypdf", specifier = "~=16.9.0" }, { name = "pathvalidate", specifier = "~=3.2.3" }, { name = "pdf2image", specifier = "~=1.17.0" }, - { name = "psycopg", extras = ["c"], marker = "extra == 'postgres'", specifier = "==3.2.4" }, - { name = "psycopg-c", marker = "python_full_version == '3.12.*' and platform_machine == 'aarch64' and sys_platform == 'linux' and extra == 'postgres'", url = "https://github.com/paperless-ngx/builder/releases/download/psycopg-3.2.4/psycopg_c-3.2.4-cp312-cp312-linux_aarch64.whl" }, - { name = "psycopg-c", marker = "python_full_version == '3.12.*' and platform_machine == 'x86_64' and sys_platform == 'linux' and extra == 'postgres'", url = "https://github.com/paperless-ngx/builder/releases/download/psycopg-3.2.4/psycopg_c-3.2.4-cp312-cp312-linux_x86_64.whl" }, - { name = "psycopg-c", marker = "(python_full_version != '3.12.*' and platform_machine == 'aarch64' and extra == 'postgres') or (python_full_version != '3.12.*' and platform_machine == 'x86_64' and extra == 'postgres') or (platform_machine != 'aarch64' and platform_machine != 'x86_64' and extra == 'postgres') or (sys_platform != 'linux' and extra == 'postgres')", specifier = "==3.2.4" }, + { name = "psycopg", extras = ["c"], marker = "extra == 'postgres'", specifier = "==3.2.5" }, + { name = "psycopg-c", marker = "python_full_version == '3.12.*' and platform_machine == 'aarch64' and sys_platform == 'linux' and extra == 'postgres'", url = "https://github.com/paperless-ngx/builder/releases/download/psycopg-3.2.5/psycopg_c-3.2.5-cp312-cp312-linux_aarch64.whl" }, + { name = "psycopg-c", marker = "python_full_version == '3.12.*' and platform_machine == 'x86_64' and sys_platform == 'linux' and extra == 'postgres'", url = "https://github.com/paperless-ngx/builder/releases/download/psycopg-3.2.5/psycopg_c-3.2.5-cp312-cp312-linux_x86_64.whl" }, + { name = "psycopg-c", marker = "(python_full_version != '3.12.*' and platform_machine == 'aarch64' and extra == 'postgres') or (python_full_version != '3.12.*' and platform_machine == 'x86_64' and extra == 'postgres') or (platform_machine != 'aarch64' and platform_machine != 'x86_64' and extra == 'postgres') or (sys_platform != 'linux' and extra == 'postgres')", specifier = "==3.2.5" }, { name = "python-dateutil", specifier = "~=2.9.0" }, { name = "python-dotenv", specifier = "~=1.0.1" }, { name = "python-gnupg", specifier = "~=0.5.4" }, @@ -2348,53 +2348,53 @@ wheels = [ [[package]] name = "psycopg" -version = "3.2.4" +version = "3.2.5" source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "typing-extensions", marker = "(python_full_version < '3.13' and sys_platform == 'darwin') or (python_full_version < '3.13' and sys_platform == 'linux')" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/e0/f2/954b1467b3e2ca5945b83b5e320268be1f4df486c3e8ffc90f4e4b707979/psycopg-3.2.4.tar.gz", hash = "sha256:f26f1346d6bf1ef5f5ef1714dd405c67fb365cfd1c6cea07de1792747b167b92", size = 156109 } +sdist = { url = "https://files.pythonhosted.org/packages/0e/cf/dc1a4d45e3c6222fe272a245c5cea9a969a7157639da606ac7f2ab5de3a1/psycopg-3.2.5.tar.gz", hash = "sha256:f5f750611c67cb200e85b408882f29265c66d1de7f813add4f8125978bfd70e8", size = 156158 } wheels = [ - { url = "https://files.pythonhosted.org/packages/40/49/15114d5f7ee68983f4e1a24d47e75334568960352a07c6f0e796e912685d/psycopg-3.2.4-py3-none-any.whl", hash = "sha256:43665368ccd48180744cab26b74332f46b63b7e06e8ce0775547a3533883d381", size = 198716 }, + { url = "https://files.pythonhosted.org/packages/18/f3/14a1370b1449ca875d5e353ef02cb9db6b70bd46ec361c236176837c0be1/psycopg-3.2.5-py3-none-any.whl", hash = "sha256:b782130983e5b3de30b4c529623d3687033b4dafa05bb661fc6bf45837ca5879", size = 198749 }, ] [package.optional-dependencies] c = [ - { name = "psycopg-c", version = "3.2.4", source = { registry = "https://pypi.org/simple" }, marker = "(python_full_version != '3.12.*' and implementation_name != 'pypy' and platform_machine == 'aarch64' and sys_platform == 'linux') or (python_full_version != '3.12.*' and implementation_name != 'pypy' and platform_machine == 'x86_64' and sys_platform == 'linux') or (implementation_name != 'pypy' and platform_machine != 'aarch64' and platform_machine != 'x86_64' and sys_platform == 'linux') or (implementation_name != 'pypy' and sys_platform == 'darwin')" }, - { name = "psycopg-c", version = "3.2.4", source = { url = "https://github.com/paperless-ngx/builder/releases/download/psycopg-3.2.4/psycopg_c-3.2.4-cp312-cp312-linux_aarch64.whl" }, marker = "python_full_version == '3.12.*' and implementation_name != 'pypy' and platform_machine == 'aarch64' and sys_platform == 'linux'" }, - { name = "psycopg-c", version = "3.2.4", source = { url = "https://github.com/paperless-ngx/builder/releases/download/psycopg-3.2.4/psycopg_c-3.2.4-cp312-cp312-linux_x86_64.whl" }, marker = "python_full_version == '3.12.*' and implementation_name != 'pypy' and platform_machine == 'x86_64' and sys_platform == 'linux'" }, + { name = "psycopg-c", version = "3.2.5", source = { registry = "https://pypi.org/simple" }, marker = "(python_full_version != '3.12.*' and implementation_name != 'pypy' and platform_machine == 'aarch64' and sys_platform == 'linux') or (python_full_version != '3.12.*' and implementation_name != 'pypy' and platform_machine == 'x86_64' and sys_platform == 'linux') or (implementation_name != 'pypy' and platform_machine != 'aarch64' and platform_machine != 'x86_64' and sys_platform == 'linux') or (implementation_name != 'pypy' and sys_platform == 'darwin')" }, + { name = "psycopg-c", version = "3.2.5", source = { url = "https://github.com/paperless-ngx/builder/releases/download/psycopg-3.2.5/psycopg_c-3.2.5-cp312-cp312-linux_aarch64.whl" }, marker = "python_full_version == '3.12.*' and implementation_name != 'pypy' and platform_machine == 'aarch64' and sys_platform == 'linux'" }, + { name = "psycopg-c", version = "3.2.5", source = { url = "https://github.com/paperless-ngx/builder/releases/download/psycopg-3.2.5/psycopg_c-3.2.5-cp312-cp312-linux_x86_64.whl" }, marker = "python_full_version == '3.12.*' and implementation_name != 'pypy' and platform_machine == 'x86_64' and sys_platform == 'linux'" }, ] [[package]] name = "psycopg-c" -version = "3.2.4" +version = "3.2.5" source = { registry = "https://pypi.org/simple" } resolution-markers = [ "sys_platform == 'darwin'", "(python_full_version != '3.12.*' and platform_machine == 'aarch64' and sys_platform == 'linux') or (python_full_version != '3.12.*' and platform_machine == 'x86_64' and sys_platform == 'linux') or (platform_machine != 'aarch64' and platform_machine != 'x86_64' and sys_platform == 'linux')", ] -sdist = { url = "https://files.pythonhosted.org/packages/17/76/dbdadd9b93b8ad38cff31402c73a6bb9a23c88a4466fa09655d3c6db4d11/psycopg_c-3.2.4.tar.gz", hash = "sha256:22097a04263efb2efd2cc8b00a51fa90e23f9cd4a2e09903fe4d9c6923dac17a", size = 601853 } +sdist = { url = "https://files.pythonhosted.org/packages/cf/cb/468dcca82f08b47af59af4681ef39473cf5c0ef2e09775c701ccdf7284d6/psycopg_c-3.2.5.tar.gz", hash = "sha256:57ad4cfd28de278c424aaceb1f2ad5c7910466e315dfe84e403f3c7a0a2ce81b", size = 609318 } [[package]] name = "psycopg-c" -version = "3.2.4" -source = { url = "https://github.com/paperless-ngx/builder/releases/download/psycopg-3.2.4/psycopg_c-3.2.4-cp312-cp312-linux_aarch64.whl" } +version = "3.2.5" +source = { url = "https://github.com/paperless-ngx/builder/releases/download/psycopg-3.2.5/psycopg_c-3.2.5-cp312-cp312-linux_aarch64.whl" } resolution-markers = [ "python_full_version == '3.12.*' and platform_machine == 'aarch64' and sys_platform == 'linux'", ] wheels = [ - { url = "https://github.com/paperless-ngx/builder/releases/download/psycopg-3.2.4/psycopg_c-3.2.4-cp312-cp312-linux_aarch64.whl", hash = "sha256:7a3b1152b676afe4a9113f784257221cf85147812116de86970272553a846f40" }, + { url = "https://github.com/paperless-ngx/builder/releases/download/psycopg-3.2.5/psycopg_c-3.2.5-cp312-cp312-linux_aarch64.whl", hash = "sha256:39012b8df2ef34e172d43ab5976017d054f2c2fc549854927a62e73f5253eacc" }, ] [[package]] name = "psycopg-c" -version = "3.2.4" -source = { url = "https://github.com/paperless-ngx/builder/releases/download/psycopg-3.2.4/psycopg_c-3.2.4-cp312-cp312-linux_x86_64.whl" } +version = "3.2.5" +source = { url = "https://github.com/paperless-ngx/builder/releases/download/psycopg-3.2.5/psycopg_c-3.2.5-cp312-cp312-linux_x86_64.whl" } resolution-markers = [ "python_full_version == '3.12.*' and platform_machine == 'x86_64' and sys_platform == 'linux'", ] wheels = [ - { url = "https://github.com/paperless-ngx/builder/releases/download/psycopg-3.2.4/psycopg_c-3.2.4-cp312-cp312-linux_x86_64.whl", hash = "sha256:d0c0c87699846bd7f8c9259db0d17f0c9d062f3281d07b32be00ca28cdcbd5f3" }, + { url = "https://github.com/paperless-ngx/builder/releases/download/psycopg-3.2.5/psycopg_c-3.2.5-cp312-cp312-linux_x86_64.whl", hash = "sha256:a0667a62595e355c2d3b6ac05336403c998fbfb31cf6922d73e19018016df1bc" }, ] [[package]] From 54bcbfa54634624c72e40155a86fe0dee1f5daeb Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 10 Mar 2025 17:17:59 +0000 Subject: [PATCH 17/18] Chore(deps): Update drf-spectacular-sidecar requirement from ~=2025.2.1 to ~=2025.3.1 (#9347) * Chore(deps): Update drf-spectacular-sidecar requirement Updates the requirements on [drf-spectacular-sidecar](https://github.com/tfranzel/drf-spectacular-sidecar) to permit the latest version. - [Commits](https://github.com/tfranzel/drf-spectacular-sidecar/compare/2025.2.1...2025.3.1) --- updated-dependencies: - dependency-name: drf-spectacular-sidecar dependency-type: direct:production ... Signed-off-by: dependabot[bot] * Updates uv.lock --------- Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> Co-authored-by: Trenton H <797416+stumpylog@users.noreply.github.com> --- pyproject.toml | 2 +- uv.lock | 8 ++++---- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/pyproject.toml b/pyproject.toml index 36ab46eb2..ac6266684 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -37,7 +37,7 @@ dependencies = [ "djangorestframework~=3.15", "djangorestframework-guardian~=0.3.0", "drf-spectacular~=0.28", - "drf-spectacular-sidecar~=2025.2.1", + "drf-spectacular-sidecar~=2025.3.1", "drf-writable-nested~=0.7.1", "filelock~=3.17.0", "flower~=2.0.1", diff --git a/uv.lock b/uv.lock index 6a6cf3388..1221c0a6d 100644 --- a/uv.lock +++ b/uv.lock @@ -880,14 +880,14 @@ wheels = [ [[package]] name = "drf-spectacular-sidecar" -version = "2025.2.1" +version = "2025.3.1" source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "django", marker = "sys_platform == 'darwin' or sys_platform == 'linux'" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/7e/4c/6c945509d578f04d19eee2ffeb25bc37e6aeb9713688a87fc4f3b02bc32b/drf_spectacular_sidecar-2025.2.1.tar.gz", hash = "sha256:ca9507c5fe708680d6b8eda96928f3cf3ffc07e8d67678778bcd2e80f9f2baae", size = 2390256 } +sdist = { url = "https://files.pythonhosted.org/packages/80/5c/85671ba50957e0ab45e2828ca713cd7b5d0d237c398936c1b45bd0286b72/drf_spectacular_sidecar-2025.3.1.tar.gz", hash = "sha256:7425940a409fb68a46c9b024eb504098fab5b4d73d12573efcaef048445d678f", size = 2401986 } wheels = [ - { url = "https://files.pythonhosted.org/packages/eb/8a/b66f58e92c5752bbc241bb04ce76d2bf92c676af4cb8b94edac3a0e0c701/drf_spectacular_sidecar-2025.2.1-py3-none-any.whl", hash = "sha256:674e1336810c7cf117442300b5c213c4fee1e984ba48689502c947a6ecd25d0c", size = 2409274 }, + { url = "https://files.pythonhosted.org/packages/5e/09/7382eb93a09f33fac72a8af1fc986f43681d15dd5fda750b238a8aace0e8/drf_spectacular_sidecar-2025.3.1-py3-none-any.whl", hash = "sha256:6b9c96204c8e45a06c39928dad704b18536d3253b61591c478540b63db6bdcea", size = 2422301 }, ] [[package]] @@ -1994,7 +1994,7 @@ requires-dist = [ { name = "djangorestframework", specifier = "~=3.15" }, { name = "djangorestframework-guardian", specifier = "~=0.3.0" }, { name = "drf-spectacular", specifier = "~=0.28" }, - { name = "drf-spectacular-sidecar", specifier = "~=2025.2.1" }, + { name = "drf-spectacular-sidecar", specifier = "~=2025.3.1" }, { name = "drf-writable-nested", specifier = "~=0.7.1" }, { name = "filelock", specifier = "~=3.17.0" }, { name = "flower", specifier = "~=2.0.1" }, From 376823598e05223123620f9617825c9897afeecd Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 10 Mar 2025 17:37:33 +0000 Subject: [PATCH 18/18] Chore(deps): Update ocrmypdf requirement from ~=16.9.0 to ~=16.10.0 (#9348) * Chore(deps): Update ocrmypdf requirement from ~=16.9.0 to ~=16.10.0 Updates the requirements on [ocrmypdf](https://github.com/ocrmypdf/OCRmyPDF) to permit the latest version. - [Release notes](https://github.com/ocrmypdf/OCRmyPDF/releases) - [Changelog](https://github.com/ocrmypdf/OCRmyPDF/blob/main/docs/release_notes.rst) - [Commits](https://github.com/ocrmypdf/OCRmyPDF/compare/v16.9.0...v16.10.0) --- updated-dependencies: - dependency-name: ocrmypdf dependency-type: direct:production ... Signed-off-by: dependabot[bot] --------- Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> Co-authored-by: Trenton H <797416+stumpylog@users.noreply.github.com> --- pyproject.toml | 2 +- uv.lock | 8 ++++---- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/pyproject.toml b/pyproject.toml index ac6266684..b9e417bdf 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -48,7 +48,7 @@ dependencies = [ "jinja2~=3.1.5", "langdetect~=1.0.9", "nltk~=3.9.1", - "ocrmypdf~=16.9.0", + "ocrmypdf~=16.10.0", "pathvalidate~=3.2.3", "pdf2image~=1.17.0", "python-dateutil~=2.9.0", diff --git a/uv.lock b/uv.lock index 1221c0a6d..301c14f20 100644 --- a/uv.lock +++ b/uv.lock @@ -1803,7 +1803,7 @@ wheels = [ [[package]] name = "ocrmypdf" -version = "16.9.0" +version = "16.10.0" source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "deprecation", marker = "sys_platform == 'darwin' or sys_platform == 'linux'" }, @@ -1816,9 +1816,9 @@ dependencies = [ { name = "pluggy", marker = "sys_platform == 'darwin' or sys_platform == 'linux'" }, { name = "rich", marker = "sys_platform == 'darwin' or sys_platform == 'linux'" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/a8/07/d8810415b98718a39b1161720acd925b6ef15743227012809f6da9d3b7bc/ocrmypdf-16.9.0.tar.gz", hash = "sha256:d000a2294cd1478d4bbfe15df5172327f77f4139bb5307404bc53be9bd81f039", size = 6804849 } +sdist = { url = "https://files.pythonhosted.org/packages/07/cf/d207aea8442a8e5a63b16faae89af2b9e3474d8d5925a5ea8c4f10f73fa9/ocrmypdf-16.10.0.tar.gz", hash = "sha256:d5b907a7b92951f1f3617f0f5ca002d866143d94fd168546a70e51756bf6412e", size = 6809110 } wheels = [ - { url = "https://files.pythonhosted.org/packages/12/69/e40431c5410eaf0c55588d0d256e27ee32af7622cb7116ac99a2e868bd2f/ocrmypdf-16.9.0-py3-none-any.whl", hash = "sha256:33fec95450727b0d9482ee3851e45dd0219ff8d52a14fd45a8d3d0c71875584e", size = 161863 }, + { url = "https://files.pythonhosted.org/packages/33/47/10058f54f593f5e618a6796fc3e8dc3e19536128f832e2d3d6e4943e9834/ocrmypdf-16.10.0-py3-none-any.whl", hash = "sha256:5093b9b058e7278b17c0b0978eb5175063b7a5511e3b9068257ece063d91ce8f", size = 162336 }, ] [[package]] @@ -2007,7 +2007,7 @@ requires-dist = [ { name = "langdetect", specifier = "~=1.0.9" }, { name = "mysqlclient", marker = "extra == 'mariadb'", specifier = "~=2.2.7" }, { name = "nltk", specifier = "~=3.9.1" }, - { name = "ocrmypdf", specifier = "~=16.9.0" }, + { name = "ocrmypdf", specifier = "~=16.10.0" }, { name = "pathvalidate", specifier = "~=3.2.3" }, { name = "pdf2image", specifier = "~=1.17.0" }, { name = "psycopg", extras = ["c"], marker = "extra == 'postgres'", specifier = "==3.2.5" },