Compare commits

..

1732 Commits

Author SHA1 Message Date
Jonas Winkler
8da85d3609 Update ci.yml 2021-02-22 13:25:21 +01:00
jonaswinkler
127d30918d lets hope this works! 2021-02-22 12:03:07 +01:00
jonaswinkler
3b553f6455 changelog 2021-02-22 11:53:13 +01:00
jonaswinkler
6d934da5dd Revert "associate error messages with documents"
This reverts commit aa3d91a3
2021-02-22 11:52:54 +01:00
jonaswinkler
aa3d91a338 associate error messages with documents 2021-02-22 11:38:16 +01:00
jonaswinkler
d64818b46c fixes #591 2021-02-22 11:11:04 +01:00
jonaswinkler
99a18516b2 tests 2021-02-22 00:17:16 +01:00
jonaswinkler
30b0a30146 dropdown menu shadows 2021-02-22 00:04:44 +01:00
jonaswinkler
cb10617979 enable deskewing and rotation by default 2021-02-21 23:40:26 +01:00
jonaswinkler
265432f2a5 fix up the ocrmypdf parameter construction for clean-final and redo 2021-02-21 23:39:19 +01:00
jonaswinkler
a13e9f23b1 use archived file for thumbnail, if available 2021-02-21 23:30:14 +01:00
jonaswinkler
65b37f61ca update thumbnail in archiver, since page rotation might have changed 2021-02-21 23:29:52 +01:00
jonaswinkler
7751755399 Merge branch 'dev' of github.com:jonaswinkler/paperless-ng into dev 2021-02-21 22:27:58 +01:00
jonaswinkler
14e2ad7bc4 more parameter checking 2021-02-21 22:19:24 +01:00
jonaswinkler
dfc23a2b38 bugfix for tika parser 2021-02-21 21:36:43 +01:00
Jonas Winkler
d2fc840293 Merge pull request #587 from jonaswinkler/translations_src-ui-messages-xlf--dev_fr
Translate '/src-ui/messages.xlf' in 'fr'
2021-02-21 16:01:53 +01:00
Jonas Winkler
37fe6fb9c3 Merge pull request #586 from jonaswinkler/translations_src-locale-en-us-lc-messages-django-po--dev_fr
Translate '/src/locale/en_US/LC_MESSAGES/django.po' in 'fr'
2021-02-21 16:01:41 +01:00
transifex-integration[bot]
a21ec76997 Translate /src-ui/messages.xlf in fr
translation completed for the source file '/src-ui/messages.xlf'
on the 'fr' language.
2021-02-21 14:16:49 +00:00
transifex-integration[bot]
501d8d9683 Apply translations in fr
translation completed for the source file '/src/locale/en_US/LC_MESSAGES/django.po'
on the 'fr' language.
2021-02-21 14:15:43 +00:00
jonaswinkler
8562ca9a77 Merge branch 'dev' of github.com:jonaswinkler/paperless-ng into dev 2021-02-21 13:44:15 +01:00
jonaswinkler
29641e5d66 Merge branch 'master' into dev 2021-02-21 13:44:07 +01:00
jonaswinkler
ee7308be2d documentation on how to build the documentation 2021-02-21 13:43:54 +01:00
jonaswinkler
ef4009e94f documentation 2021-02-21 13:35:47 +01:00
Jonas Winkler
27d2ae6976 Merge pull request #585 from jonaswinkler/translations_src-ui-messages-xlf--dev_en_GB
Translate '/src-ui/messages.xlf' in 'en_GB'
2021-02-21 13:12:31 +01:00
transifex-integration[bot]
0f9675f9d6 Translate /src-ui/messages.xlf in en_GB
translation completed for the source file '/src-ui/messages.xlf'
on the 'en_GB' language.
2021-02-21 12:12:19 +00:00
jonaswinkler
bac4a63cc8 run the polling file change checks on individual threads to speed up queueing of new files 2021-02-21 12:43:55 +01:00
jonaswinkler
0453787d38 increased default delay when waiting for file changes with polling 2021-02-21 12:14:54 +01:00
jonaswinkler
afc3e41f13 changelog 2021-02-21 01:48:14 +01:00
jonaswinkler
86d6316cc9 version bump 2021-02-21 01:30:03 +01:00
jonaswinkler
7b2c1f82f5 documentation 2021-02-21 01:29:55 +01:00
jonaswinkler
e2a932d744 update dependencies 2021-02-21 00:24:33 +01:00
jonaswinkler
b978994525 documentation for the new configuration options 2021-02-21 00:23:01 +01:00
jonaswinkler
6da237dd9e pycodestyle 2021-02-21 00:21:43 +01:00
jonaswinkler
50c1978d36 tests 2021-02-21 00:18:34 +01:00
jonaswinkler
fdb310c497 changelog 2021-02-21 00:17:12 +01:00
jonaswinkler
ce121a261d completely reworked the OCRmyPDF parser. 2021-02-21 00:16:57 +01:00
jonaswinkler
ebdfd4241a Merge branch 'dev' of github.com:jonaswinkler/paperless-ng into dev 2021-02-21 00:13:17 +01:00
jonaswinkler
9cbb1c5726 add some test files 2021-02-21 00:13:08 +01:00
Jonas Winkler
85dabccbe7 Merge pull request #579 from jonaswinkler/translations_src-ui-messages-xlf--dev_nl_NL
Translate '/src-ui/messages.xlf' in 'nl_NL'
2021-02-20 19:01:08 +01:00
transifex-integration[bot]
a9a8189d4b Translate /src-ui/messages.xlf in nl_NL
translation completed for the source file '/src-ui/messages.xlf'
on the 'nl_NL' language.
2021-02-20 17:45:27 +00:00
Jonas Winkler
30579112d2 Merge pull request #578 from jonaswinkler/translations_src-ui-messages-xlf--dev_de
Translate '/src-ui/messages.xlf' in 'de'
2021-02-20 16:45:20 +01:00
transifex-integration[bot]
ccfd009c1a Translate /src-ui/messages.xlf in de
translation completed for the source file '/src-ui/messages.xlf'
on the 'de' language.
2021-02-20 15:44:19 +00:00
jonaswinkler
044a939623 Merge branch 'dev' of github.com:jonaswinkler/paperless-ng into dev 2021-02-20 16:11:25 +01:00
jonaswinkler
203bc162cd front end support for downloading multiple documents 2021-02-20 16:10:50 +01:00
jonaswinkler
31f03ef1d3 API support for downloading compressed archives of multiple documents 2021-02-20 16:09:29 +01:00
Jonas Winkler
4d3552dc64 Merge pull request #570 from jonaswinkler/translations_src-ui-messages-xlf--dev_en_GB
Translate '/src-ui/messages.xlf' in 'en_GB'
2021-02-19 12:18:46 +01:00
Jonas Winkler
ea8a52404f Merge pull request #569 from jonaswinkler/translations_src-ui-messages-xlf--dev_de
Translate '/src-ui/messages.xlf' in 'de'
2021-02-19 12:18:35 +01:00
Jonas Winkler
0ae9aecdef Update README.md 2021-02-19 11:51:59 +01:00
jonaswinkler
4de4789605 this took way too much time 2021-02-19 11:34:51 +01:00
jonaswinkler
950bb46827 version bump 2021-02-19 11:31:14 +01:00
Jonas Winkler
44936dc5f0 Update README.md 2021-02-19 11:24:21 +01:00
Jonas Winkler
1140a878b4 Update README.md 2021-02-19 11:22:43 +01:00
transifex-integration[bot]
efb49af7ac Translate /src-ui/messages.xlf in en_GB
translation completed for the source file '/src-ui/messages.xlf'
on the 'en_GB' language.
2021-02-18 16:44:55 +00:00
transifex-integration[bot]
b5a8106a6a Translate /src-ui/messages.xlf in de
translation completed for the source file '/src-ui/messages.xlf'
on the 'de' language.
2021-02-18 16:43:41 +00:00
jonaswinkler
0f80eee54e refactored most of the list view; fixes #147, much snappier UX when switching between views 2021-02-18 17:29:21 +01:00
jonaswinkler
0e237fa459 messages 2021-02-18 17:11:47 +01:00
Jonas Winkler
702b985ceb Merge pull request #558 from jonaswinkler/translations_src-locale-en-us-lc-messages-django-po--dev_de
Translate '/src/locale/en_US/LC_MESSAGES/django.po' in 'de'
2021-02-17 14:46:25 +01:00
Jonas Winkler
7d87bcbb98 Merge pull request #560 from jonaswinkler/translations_src-locale-en-us-lc-messages-django-po--dev_en_GB
Translate '/src/locale/en_US/LC_MESSAGES/django.po' in 'en_GB'
2021-02-17 14:46:14 +01:00
Jonas Winkler
340521aa0d Merge pull request #559 from jonaswinkler/translations_src-locale-en-us-lc-messages-django-po--dev_nl_NL
Translate '/src/locale/en_US/LC_MESSAGES/django.po' in 'nl_NL'
2021-02-17 14:46:03 +01:00
transifex-integration[bot]
7bc557a999 Apply translations in en_GB
translation completed for the source file '/src/locale/en_US/LC_MESSAGES/django.po'
on the 'en_GB' language.
2021-02-17 13:36:15 +00:00
jonaswinkler
dfa7cdf47e Merge branch 'dev' of github.com:jonaswinkler/paperless-ng into dev 2021-02-17 14:26:26 +01:00
jonaswinkler
0d78e58d77 fixed paperless not properly selecting en-gb 2021-02-17 14:26:06 +01:00
transifex-integration[bot]
58df3d5767 Apply translations in nl_NL
translation completed for the source file '/src/locale/en_US/LC_MESSAGES/django.po'
on the 'nl_NL' language.
2021-02-17 12:57:48 +00:00
Jonas Winkler
4e4d6e806c Update Crowdin configuration file 2021-02-17 13:22:45 +01:00
Jonas Winkler
6ff99945f3 Update Crowdin configuration file 2021-02-17 13:18:19 +01:00
transifex-integration[bot]
b7f1b9f8ad Apply translations in de
translation completed for the source file '/src/locale/en_US/LC_MESSAGES/django.po'
on the 'de' language.
2021-02-17 11:50:01 +00:00
jonaswinkler
08a44cf468 changelog and version 2021-02-17 12:31:19 +01:00
jonaswinkler
a1162d6d5a update requirements 2021-02-17 12:25:34 +01:00
jonaswinkler
1c81d88013 add support for iso 8601 date display 2021-02-17 12:15:22 +01:00
jonaswinkler
1e4ec7e29e added en-GB language 2021-02-16 14:54:18 +01:00
jonaswinkler
2c4e34dd0c changelog 2021-02-15 23:44:48 +01:00
jonaswinkler
cb308fae7b only show inbox statistics if inbox tags are defined 2021-02-15 23:14:54 +01:00
jonaswinkler
3f03d51b24 version bump 2021-02-15 16:52:45 +01:00
jonaswinkler
831db6ab87 note regarding Python 3.6 2021-02-15 16:46:06 +01:00
jonaswinkler
43fdf634f2 added a note regarding python 3.6 2021-02-15 16:37:44 +01:00
jonaswinkler
f07a6b4586 PAPERLESS_WEBSERVER_WORKERS option 2021-02-15 16:27:35 +01:00
jonaswinkler
2fcf484229 bugfix dismissing wrong status messages 2021-02-15 14:52:47 +01:00
jonaswinkler
8bf4241b16 some search index optimizations 2021-02-15 13:26:36 +01:00
jonaswinkler
56bd966c02 local import of ocrmypdf so that the webserver does not load that 2021-02-15 12:18:10 +01:00
jonaswinkler
416101d557 only import dateparser when required 2021-02-15 11:52:46 +01:00
jonaswinkler
c330cca2c9 remove unused imports 2021-02-15 11:26:13 +01:00
jonaswinkler
7e88085377 load sklearn modules only when training data has changed 2021-02-15 11:25:25 +01:00
jonaswinkler
5e669534f2 reorganized test case 2021-02-14 17:24:31 +01:00
jonaswinkler
98b147b622 better sanity checker that logs messages in the log files and does not fail on warnings. 2021-02-14 17:08:29 +01:00
jonaswinkler
df6c59bc4f update dependencies 2021-02-14 15:38:47 +01:00
jonaswinkler
6e48da41e5 changelog 2021-02-14 14:05:42 +01:00
Jonas Winkler
5c8a01a6e8 Merge pull request #538 from jonaswinkler/translations_src-locale-en-us-lc-messages-django-po--dev_cs
Translate '/src/locale/en-us/LC_MESSAGES/django.po' in 'cs'
2021-02-14 13:41:33 +01:00
jonaswinkler
3d0a52c25f only load channels app if DEBUG is enabled; its only purpose is to monkey-patch the runserver command. 2021-02-14 12:50:30 +01:00
jonaswinkler
43c729568b release worker memory after tasks are done. 2021-02-14 12:29:55 +01:00
transifex-integration[bot]
62caeed283 Apply translations in cs
translation completed for the source file '/src/locale/en-us/LC_MESSAGES/django.po'
on the 'cs' language.
2021-02-14 07:05:05 +00:00
jonaswinkler
12836d4c68 revert django-q configuration 2021-02-13 20:25:52 +01:00
jonaswinkler
b48e67d714 revert a faulty change that caused memory usage to explode #537 2021-02-13 19:51:04 +01:00
jonaswinkler
f91f4d71bb Merge branch 'master' into dev 2021-02-13 18:09:14 +01:00
jonaswinkler
0a1f264c71 Gotenberg troubleshooting 2021-02-13 18:09:00 +01:00
jonaswinkler
64d61ae2fa version bump 2021-02-13 18:01:19 +01:00
jonaswinkler
5f0e800f6e metadata tab not showing anything if files are missing #534 2021-02-13 16:41:03 +01:00
jonaswinkler
8b2965d55b added sanity checker management command for manual execution #534 2021-02-13 16:39:29 +01:00
jonaswinkler
ed478a1d73 change thumbnail display for extra wide images #433 2021-02-12 18:20:17 +01:00
jonaswinkler
13e91d8c95 changelog 2021-02-12 18:04:15 +01:00
jonaswinkler
6ac90181cb documentation and changelog 2021-02-12 16:54:00 +01:00
jonaswinkler
d6c3471909 reprganized docker file, less layers, new shortcuts for management commands 2021-02-12 16:53:51 +01:00
jonaswinkler
5b56fad9c7 fix test case 2021-02-12 01:31:50 +01:00
jonaswinkler
ed0b1fe115 better exception logging 2021-02-11 22:16:41 +01:00
jonaswinkler
4211153527 update file renaming logic 2021-02-11 13:47:17 +01:00
jonaswinkler
2f85461109 added some test cases that I still need to address 2021-02-10 23:53:48 +01:00
jonaswinkler
3fa7dcb0cb changes to the admin document list 2021-02-10 21:34:58 +01:00
jonaswinkler
857fe3a55c fix one incorrect use of archive_version 2021-02-10 21:34:39 +01:00
jonaswinkler
dd19ea46fe backup documentation 2021-02-10 20:14:55 +01:00
jonaswinkler
21740a9d87 changelog 2021-02-10 20:05:02 +01:00
jonaswinkler
658fb2f208 remove invalid test cases 2021-02-10 20:01:35 +01:00
jonaswinkler
252d4cb513 update document admin 2021-02-10 18:55:39 +01:00
jonaswinkler
5aed41223b Merge branch 'master' into dev 2021-02-10 18:44:02 +01:00
jonaswinkler
45dfbf3747 downgrades 2021-02-10 18:27:41 +01:00
jonaswinkler
e4fe5bebab requirements 2021-02-10 17:09:22 +01:00
jonaswinkler
04519ee623 more testing of the migration 2021-02-10 16:58:55 +01:00
jonaswinkler
6c8f010f7a retries for archive generation 2021-02-10 14:50:20 +01:00
jonaswinkler
ed84cf26e7 update dependencies 2021-02-10 14:31:17 +01:00
jonaswinkler
1bc961f0c0 update dependencies 2021-02-10 11:50:57 +01:00
jonaswinkler
77d745381f more testing 2021-02-10 01:31:15 +01:00
jonaswinkler
7082cb9c36 document renamer testing 2021-02-10 01:12:45 +01:00
jonaswinkler
34e84cc757 sanity checker testing 2021-02-10 00:52:18 +01:00
jonaswinkler
9246411610 better logging for the migration 2021-02-10 00:52:01 +01:00
jonaswinkler
8330b3598c changelog 2021-02-09 23:23:11 +01:00
jonaswinkler
1d002149dc added ASN to filename format #519 2021-02-09 23:03:07 +01:00
jonaswinkler
8d6071e977 fix a bug with thumbnail generation when TIKA was enabled 2021-02-09 22:12:43 +01:00
jonaswinkler
7d67766508 todo note #520 2021-02-09 21:53:10 +01:00
jonaswinkler
887dd122fe more info in the admin 2021-02-09 21:00:04 +01:00
jonaswinkler
a1293c77b9 fix migration and more tests 2021-02-09 20:54:02 +01:00
jonaswinkler
ee9a73aa95 codestyle 2021-02-09 20:46:41 +01:00
jonaswinkler
9df332b614 test resources 2021-02-09 19:51:25 +01:00
jonaswinkler
d13e86a892 update all test cases to address the archive filename changes 2021-02-09 19:51:16 +01:00
jonaswinkler
69d7f8c180 testing the updated migration 2021-02-09 19:49:29 +01:00
jonaswinkler
1ba89ddd09 refactor migration tests to allow testing for exceptions while migrating 2021-02-09 19:47:50 +01:00
jonaswinkler
0c40a28ad3 more sanity checks regarding archive versions 2021-02-09 19:46:59 +01:00
jonaswinkler
2b7424c42a imports 2021-02-09 19:46:42 +01:00
jonaswinkler
a9f1766d1c todo note 2021-02-09 19:46:32 +01:00
jonaswinkler
fca8576d80 archive filenames are now stored in the database and checked for collisions just as original filenames as well, unified method for archive version checking 2021-02-09 19:46:19 +01:00
jonaswinkler
05f59e7d5e another way to make the test case fail 2021-02-09 02:13:25 +01:00
jonaswinkler
c9511680b3 version push 2021-02-09 01:36:39 +01:00
jonaswinkler
0ed001c56e validate move before migration 2021-02-09 00:13:13 +01:00
jonaswinkler
1e5a418191 more testing #511 2021-02-09 00:01:11 +01:00
jonaswinkler
e05735bc0f fix some test cases 2021-02-09 00:00:46 +01:00
jonaswinkler
7621e10840 only move unaffected files, regenerate affected files 2021-02-08 23:54:07 +01:00
jonaswinkler
d90080f325 only move files if necessary 2021-02-08 22:49:01 +01:00
jonaswinkler
0c676b90f2 migration for #511 2021-02-08 20:59:14 +01:00
jonaswinkler
c2d8bda83c fix for #511 2021-02-08 19:59:14 +01:00
jonaswinkler
302ebf737e refactor migration test case 2021-02-08 13:18:39 +01:00
jonaswinkler
816c95a4ae code style 2021-02-08 13:18:08 +01:00
jonaswinkler
40106f6fcc updated documentation regarding execution of management commands with docker fixes #509 2021-02-08 00:10:52 +01:00
jonaswinkler
61143b3ad1 make the test case fail 2021-02-07 19:53:08 +01:00
jonaswinkler
9b64eebd10 revert commit 2021-02-07 18:26:03 +01:00
jonaswinkler
731418349f added a test case that replicates #511 2021-02-07 18:23:54 +01:00
jonaswinkler
7728920670 Merge branch 'dev' 2021-02-07 01:22:04 +01:00
jonaswinkler
f555bb95ae possible fix for the ansible roles 2021-02-07 00:49:53 +01:00
jonaswinkler
bcee17c3ac github actions: build release tags 2021-02-07 00:14:24 +01:00
jonaswinkler
7bc16edfe2 Merge branch 'master' into dev 2021-02-06 23:28:39 +01:00
Jonas Winkler
40f3e8e45a Update README.md 2021-02-06 23:26:44 +01:00
jonaswinkler
656b4708ac update requirements.txt 2021-02-06 21:16:06 +01:00
jonaswinkler
7702f5012b classifier cache timeout 2021-02-06 21:03:32 +01:00
jonaswinkler
ffe96c8fff classifier caching 2021-02-06 20:54:58 +01:00
jonaswinkler
0024c2aae4 caching 2021-02-06 20:51:04 +01:00
jonaswinkler
ed39e9e15f update copyright #506 2021-02-06 20:48:23 +01:00
jonaswinkler
fd8c40fee7 increase worker timeout 2021-02-06 18:51:53 +01:00
jonaswinkler
0e76441684 fix log viewer for empty logs 2021-02-06 18:51:31 +01:00
jonaswinkler
d2c34fb9c7 update requirements.txt 2021-02-06 17:37:47 +01:00
jonaswinkler
d09ea8408c keep numpy below 1.20, since that breaks python 3.6 2021-02-06 17:36:31 +01:00
jonaswinkler
e8a1fde1c7 documentation 2021-02-06 17:22:05 +01:00
jonaswinkler
5ef6f2697e default settings 2021-02-06 17:21:40 +01:00
jonaswinkler
80b3fa75a5 pycodestyle 2021-02-06 17:21:32 +01:00
jonaswinkler
9993381cda rework of the log viewer 2021-02-06 17:07:25 +01:00
jonaswinkler
9fa3f91e8a update logging config 2021-02-06 17:05:07 +01:00
jonaswinkler
fe435f6653 update API access for logs 2021-02-06 17:02:00 +01:00
jonaswinkler
5696c02ac3 remove log admin 2021-02-06 17:00:06 +01:00
jonaswinkler
019dfeb3ee separate mail logging 2021-02-06 16:59:04 +01:00
jonaswinkler
e35723e7af fix some logging messages 2021-02-06 15:30:47 +01:00
jonaswinkler
1d50d017ac update bare metal instructions 2021-02-06 14:54:00 +01:00
jonaswinkler
9e5d1ad952 Merge branch 'dev' of github.com:jonaswinkler/paperless-ng into dev 2021-02-06 13:44:08 +01:00
Jonas Winkler
9faaf4b1e4 Merge pull request #504 from jonaswinkler/translations_src-ui-messages-xlf--dev_en_GB
Translate '/src-ui/messages.xlf' in 'en_GB'
2021-02-06 13:33:28 +01:00
Jonas Winkler
ac229ce004 Merge pull request #503 from jonaswinkler/translations_src-locale-en-us-lc-messages-django-po--dev_en_GB
Translate '/src/locale/en-us/LC_MESSAGES/django.po' in 'en_GB'
2021-02-06 13:32:59 +01:00
transifex-integration[bot]
968614a289 Translate /src-ui/messages.xlf in en_GB
translation completed for the source file '/src-ui/messages.xlf'
on the 'en_GB' language.
2021-02-06 00:12:00 +00:00
transifex-integration[bot]
2f68f236bb Apply translations in en_GB
translation completed for the source file '/src/locale/en-us/LC_MESSAGES/django.po'
on the 'en_GB' language.
2021-02-06 00:09:49 +00:00
jonaswinkler
00903bd90c update statistics when new documents are added 2021-02-06 00:13:49 +01:00
jonaswinkler
96d7114fa7 lazy load fuzzy only when required 2021-02-05 01:11:03 +01:00
jonaswinkler
431d4fd8e4 rework most of the logging 2021-02-05 01:10:29 +01:00
jonaswinkler
0d3ab3aaf7 remove lots of unused code 2021-02-04 23:40:53 +01:00
jonaswinkler
138f38d1f3 fix lost messages when queuing many files 2021-02-04 23:32:11 +01:00
jonaswinkler
222fb48378 dismiss completed dismisses successful items only 2021-02-04 16:55:48 +01:00
jonaswinkler
5718f50c4f increase worker timeout for Raspberry Pi 2021-02-04 15:46:51 +01:00
jonaswinkler
d8e0ef257e don't load sklearn libraries unless needed 2021-02-04 15:15:11 +01:00
jonaswinkler
866c8fc848 websocket testing 2021-02-04 14:17:18 +01:00
Jonas Winkler
758631c53f Update README.md 2021-02-04 13:31:20 +01:00
jonaswinkler
8711a206a0 fix websocket test cases 2021-02-04 13:26:58 +01:00
jonaswinkler
44ec3a3d9c lazy loading for parsers 2021-02-04 13:17:24 +01:00
jonaswinkler
883a6b26a4 update gunicorn.conf 2021-02-04 00:17:23 +01:00
jonaswinkler
b9e1ed7d7e added test for web socket authentication 2021-02-03 23:18:28 +01:00
jonaswinkler
c51fa60172 close connection when not authenticated anymore. 2021-02-03 21:53:39 +01:00
jonaswinkler
e300ee0c92 Merge branch 'dev' of github.com:jonaswinkler/paperless-ng into dev 2021-02-03 20:44:37 +01:00
jonaswinkler
ba3c8308b3 websocket authentication 2021-02-03 20:44:10 +01:00
Jonas Winkler
63b11514c9 Merge pull request #501 from jonaswinkler/translations_src-ui-messages-xlf--dev_fr
Translate '/src-ui/messages.xlf' in 'fr'
2021-02-03 18:45:25 +01:00
transifex-integration[bot]
49d2084d8a Translate /src-ui/messages.xlf in fr
translation completed for the source file '/src-ui/messages.xlf'
on the 'fr' language.
2021-02-03 17:10:45 +00:00
jonaswinkler
c36fe577de Merge branch 'dev' of github.com:jonaswinkler/paperless-ng into dev 2021-02-03 17:08:07 +01:00
jonaswinkler
28c79f1abb documentation 2021-02-03 17:07:37 +01:00
Jonas Winkler
a1f07417da Merge pull request #500 from jonaswinkler/translations_src-ui-messages-xlf--dev_nl_NL
Translate '/src-ui/messages.xlf' in 'nl_NL'
2021-02-03 16:32:52 +01:00
transifex-integration[bot]
611b4fe31b Translate /src-ui/messages.xlf in nl_NL
translation completed for the source file '/src-ui/messages.xlf'
on the 'nl_NL' language.
2021-02-03 15:25:14 +00:00
Jonas Winkler
697670ef97 Merge pull request #499 from jonaswinkler/translations_src-ui-messages-xlf--dev_de
Translate '/src-ui/messages.xlf' in 'de'
2021-02-03 16:13:43 +01:00
transifex-integration[bot]
ee487529fe Translate /src-ui/messages.xlf in de
translation completed for the source file '/src-ui/messages.xlf'
on the 'de' language.
2021-02-03 15:11:49 +00:00
jonaswinkler
2129cda38d display http errors 2021-02-03 16:01:32 +01:00
jonaswinkler
afb63f763a Merge branch 'master' into dev 2021-02-03 15:24:38 +01:00
jonaswinkler
a186d6fae2 bugfix 2021-02-03 15:22:20 +01:00
jonaswinkler
d17de45791 fix typo 2021-02-03 14:51:04 +01:00
Jonas Winkler
18980bbbe3 Merge pull request #498 from C0nsultant/ansible-varnames
Ansible - apply consistent name structure to vars
2021-02-03 11:49:53 +01:00
Fabian Koller
32c9369ba1 Apply consistent name structure to vars 2021-02-03 08:06:34 +01:00
jonaswinkler
bdc247ce49 code style 2021-02-02 23:58:25 +01:00
jonaswinkler
85f46424a8 fixes layout issues #482 2021-02-02 23:58:11 +01:00
jonaswinkler
d198a89f22 update dependencies 2021-02-02 20:43:07 +01:00
jonaswinkler
82730ab491 update dependencies 2021-02-02 20:31:25 +01:00
jonaswinkler
c78d54e71e update the easy install script and documentation 2021-02-02 19:54:56 +01:00
jonaswinkler
08d96a1b76 configure websocket endpoint for production 2021-02-02 16:22:36 +01:00
jonaswinkler
b2a744e880 version bump 2021-02-02 15:11:29 +01:00
jonaswinkler
3f421a4f64 Merge branch 'dev' of github.com:jonaswinkler/paperless-ng into dev 2021-02-02 14:52:07 +01:00
jonaswinkler
2624aec758 changelog 2021-02-02 14:51:54 +01:00
Jonas Winkler
f3a18c26f4 Merge pull request #494 from jonaswinkler/translations_src-ui-messages-xlf--dev_de
Translate '/src-ui/messages.xlf' in 'de'
2021-02-02 14:08:11 +01:00
jonaswinkler
47ea60372f disable CI for translation branches 2021-02-02 14:07:43 +01:00
transifex-integration[bot]
8efba4c57f Translate /src-ui/messages.xlf in de
translation completed for the source file '/src-ui/messages.xlf'
on the 'de' language.
2021-02-02 13:07:05 +00:00
jonaswinkler
060dcd71cd messages, reorganized settings 2021-02-02 14:06:16 +01:00
Jonas Winkler
fd6e727299 Merge pull request #492 from jonaswinkler/translations_src-ui-messages-xlf--dev_de
Translate '/src-ui/messages.xlf' in 'de'
2021-02-02 13:35:59 +01:00
Jonas Winkler
c4adb20eff Merge pull request #493 from jonaswinkler/translations_src-ui-messages-xlf--dev_fr
Translate '/src-ui/messages.xlf' in 'fr'
2021-02-02 13:35:47 +01:00
transifex-integration[bot]
e70af00321 Translate /src-ui/messages.xlf in fr
translation completed for the source file '/src-ui/messages.xlf'
on the 'fr' language.
2021-02-02 12:34:03 +00:00
transifex-integration[bot]
9ebe16d823 Translate /src-ui/messages.xlf in de
translated for the source file '/src-ui/messages.xlf'
on the 'de' language.
2021-02-02 12:30:13 +00:00
Jonas Winkler
fd05da96d5 Merge pull request #488 from jonaswinkler/translations_src-ui-messages-xlf--dev_de
Translate '/src-ui/messages.xlf' in 'de'
2021-02-02 13:27:55 +01:00
jonaswinkler
5f44ab5abc CI: ignore translation branches 2021-02-02 13:27:08 +01:00
transifex-integration[bot]
ffc82c17ba Translate /src-ui/messages.xlf in de
translation completed for the source file '/src-ui/messages.xlf'
on the 'de' language.
2021-02-02 12:17:25 +00:00
jonaswinkler
b33e25b1f7 Merge branch 'dev' of github.com:jonaswinkler/paperless-ng into dev 2021-02-02 13:14:11 +01:00
jonaswinkler
55c50e3ac2 more message changes 2021-02-02 13:10:51 +01:00
jonaswinkler
211a88129e removed dead files 2021-02-02 12:58:23 +01:00
jonaswinkler
2a629b81ce updates messages 2021-02-02 12:58:11 +01:00
Jonas Winkler
2efb99192a add pull to docker setup 2021-02-01 21:45:45 +01:00
Jonas Winkler
0a28ccf62f adjustments to setup 2021-02-01 21:43:50 +01:00
Jonas Winkler
48b042bfb0 troubleshooting for #216 2021-02-01 20:14:29 +01:00
Jonas Winkler
da08eec91f Merge pull request #482 from shamoon/feature/sidebar-info-2
Updates to sidebar "Misc" section
2021-02-01 12:42:26 +01:00
Jonas Winkler
684f91b2e3 Merge pull request #486 from jonaswinkler/translations_src-ui-messages-xlf--dev_nl_NL
Translate '/src-ui/messages.xlf' in 'nl_NL'
2021-02-01 12:42:05 +01:00
transifex-integration[bot]
689579c7f2 Translate /src-ui/messages.xlf in nl_NL
translation completed for the source file '/src-ui/messages.xlf'
on the 'nl_NL' language.
2021-02-01 09:31:34 +00:00
Michael Shamoon
4a549ccd33 additional link spacing 2021-01-31 19:24:37 -08:00
Michael Shamoon
32f0a2fdbc Yes, 2px margin on the svg icon 2021-01-31 19:20:00 -08:00
Michael Shamoon
abee54ebe3 Fix Safari overflow issue 2021-01-31 19:16:38 -08:00
Michael Shamoon
58ae14c364 space for info heading 2021-01-31 19:11:27 -08:00
Michael Shamoon
34104f0d42 These arent needed on h6s 2021-01-31 19:11:21 -08:00
Michael Shamoon
dabcdbad00 Prevent safari wrap 2021-01-31 19:09:31 -08:00
Michael Shamoon
4c314130f7 Use div containers 2021-01-31 17:16:39 -08:00
Michael Shamoon
53a71384b0 Merge remote-tracking branch 'upstream/dev' into feature/sidebar-info-2 2021-01-31 17:04:35 -08:00
Jonas Winkler
294a5ebec6 Merge pull request #480 from shamoon/feature/github-discussion-ideas
Encourage Discussion Ideas instead of Issues for [Feature Requests]
2021-02-01 01:52:30 +01:00
Michael Shamoon
6a4b31b354 Correct discussions category link 2021-01-31 16:33:39 -08:00
Michael Shamoon
76c9715748 Change "Misc" to "Info"
Also move to bottom of screen, add suggestions link, change GH icon
2021-01-31 16:31:32 -08:00
Michael Shamoon
e657ca7496 Revert "App 'submit an idea icon'"
This reverts commit 406ec17050.
2021-01-31 16:23:08 -08:00
Michael Shamoon
ddf01eef14 Update to use new feature-requests category of discussions 2021-01-31 16:22:41 -08:00
Jonas Winkler
3d093f2c08 Merge pull request #479 from jonaswinkler/translations_src-locale-en-us-lc-messages-django-po--dev_fr
Translate '/src/locale/en-us/LC_MESSAGES/django.po' in 'fr'
2021-02-01 00:09:01 +01:00
transifex-integration[bot]
004e3134fc Apply translations in fr
translation completed for the source file '/src/locale/en-us/LC_MESSAGES/django.po'
on the 'fr' language.
2021-01-31 22:33:04 +00:00
Michael Shamoon
85ee74f2d8 Remove feature request template, update others to point to Discussions 2021-01-31 14:32:09 -08:00
Michael Shamoon
406ec17050 App 'submit an idea icon' 2021-01-31 14:19:25 -08:00
jonaswinkler
7f85180264 Merge branch 'dev' of github.com:jonaswinkler/paperless-ng into dev 2021-01-31 22:28:41 +01:00
jonaswinkler
ad29fc23a6 added an easy install script 2021-01-31 22:28:26 +01:00
Michael Shamoon
b9690de9ab Add GH Ideas info to readme 2021-01-31 13:19:55 -08:00
Jonas Winkler
d4deefc81c Merge pull request #478 from jonaswinkler/translations_src-locale-en-us-lc-messages-django-po--dev_nl_NL
Translate '/src/locale/en-us/LC_MESSAGES/django.po' in 'nl_NL'
2021-01-31 17:00:39 +01:00
transifex-integration[bot]
32780472db Apply translations in nl_NL
translation completed for the source file '/src/locale/en-us/LC_MESSAGES/django.po'
on the 'nl_NL' language.
2021-01-31 15:45:35 +00:00
Jonas Winkler
b1f906461e Merge pull request #476 from jonaswinkler/translations_src-locale-en-us-lc-messages-django-po--dev_de
Translate '/src/locale/en-us/LC_MESSAGES/django.po' in 'de'
2021-01-31 15:50:57 +01:00
Jonas Winkler
7e449d661b Merge pull request #477 from jonaswinkler/translations_src-ui-messages-xlf--dev_de
Translate '/src-ui/messages.xlf' in 'de'
2021-01-31 15:50:48 +01:00
transifex-integration[bot]
24b3a03000 Translate /src-ui/messages.xlf in de
translation completed for the source file '/src-ui/messages.xlf'
on the 'de' language.
2021-01-31 14:45:58 +00:00
transifex-integration[bot]
cd28fbf563 Apply translations in de
translation completed for the source file '/src/locale/en-us/LC_MESSAGES/django.po'
on the 'de' language.
2021-01-31 14:45:43 +00:00
jonaswinkler
d7b2906977 fix typo 2021-01-31 15:37:09 +01:00
jonaswinkler
3180b38797 adjust ansible scripts to use gunicorn.conf.py 2021-01-31 15:36:52 +01:00
jonaswinkler
fd59def1bd Merge branch 'feature-websockets-status' into dev 2021-01-31 14:37:15 +01:00
jonaswinkler
8cd1dd71e8 Merge branch 'master' into dev 2021-01-31 14:03:44 +01:00
Jonas Winkler
48cfb64416 Merge pull request #474 from C0nsultant/ansible-GITHUB_SHA
Ansible - Switch CI target to sha instead of ref
2021-01-31 14:03:04 +01:00
jonaswinkler
adb76eafaf moved gunicorn.conf.py to a more appropriate place and reference that in the configuration scripts. 2021-01-31 13:52:21 +01:00
jonaswinkler
4e2efebaa7 addresses race condition between API and document consumer #472 2021-01-31 13:20:21 +01:00
Fabian Koller
eb6153c5aa Change CI ref from merge to head
At this time in the CI, merge is not accessible from tree
https://github.community/t/github-sha-but-how-to-get-the-latest-commit-reference-on-a-branch/17160
2021-01-31 12:00:41 +01:00
Fabian Koller
9c3b16c879 Switch CI target to sha instead of ref 2021-01-31 11:28:54 +01:00
jonaswinkler
ba637c8582 replace preview icon #471 2021-01-30 21:56:17 +01:00
jonaswinkler
46ea86a6d2 Merge branch 'dev' into feature-websockets-status 2021-01-30 16:08:50 +01:00
jonaswinkler
9d148c08ce Merge branch 'master' into dev 2021-01-30 16:06:42 +01:00
Jonas Winkler
ac459f7b05 Merge pull request #411 from C0nsultant/ansible-fromsource
Ansible - build release archive from source
2021-01-30 16:05:51 +01:00
jonaswinkler
35a4779cc0 fix typo 2021-01-30 15:44:23 +01:00
Jonas Winkler
ffa44f51cd Update README.md 2021-01-30 15:30:39 +01:00
jonaswinkler
682a9d2a09 Merge branch 'dev' of github.com:jonaswinkler/paperless-ng into dev 2021-01-30 15:23:03 +01:00
jonaswinkler
4c6a02aee7 pycodestyle 2021-01-30 15:22:51 +01:00
jonaswinkler
87a18eae2d centralized classifier loading, better error handling, no error messages when auto matching is not used 2021-01-30 14:22:23 +01:00
Fabian Koller
269673ce05 DEBUG - use very long txt file 2021-01-30 14:13:03 +01:00
Fabian Koller
d9e06958dc DEBUG - force flush 2nd try 2021-01-30 12:50:49 +01:00
Fabian Koller
063bfc245c DEBUG - force newline in .txt 2021-01-30 12:20:55 +01:00
Fabian Koller
21c501de28 force flush on temp file during consumption
file.write() does not guarantee that a file handle contains anything
without calling an accompanying file.flush()
For typical files that are larger than the OS-file buffer, this is no
problem
For small files (e.g. 64 characters in a .TXT), this race condition
leads to `inode/x-empty` because the file inode is created, but no
content is written to it
2021-01-30 11:51:43 +01:00
Jonas Winkler
d50d1bd2ea Merge pull request #470 from jonaswinkler/translations_src-ui-messages-xlf--dev_fr
Translate '/src-ui/messages.xlf' in 'fr'
2021-01-29 22:34:17 +01:00
transifex-integration[bot]
e4aa31a62d Translate /src-ui/messages.xlf in fr
translation completed for the source file '/src-ui/messages.xlf'
on the 'fr' language.
2021-01-29 19:57:40 +00:00
Jonas Winkler
fdf58bed6a Merge pull request #469 from jonaswinkler/translations_src-ui-messages-xlf--dev_de
Translate '/src-ui/messages.xlf' in 'de'
2021-01-29 19:59:09 +01:00
transifex-integration[bot]
a54784da11 Translate /src-ui/messages.xlf in de
translation completed for the source file '/src-ui/messages.xlf'
on the 'de' language.
2021-01-29 18:59:00 +00:00
jonaswinkler
a40e4fe3bc update messages 2021-01-29 16:57:00 +01:00
jonaswinkler
ea30fbf14f Merge branch 'dev' of github.com:jonaswinkler/paperless-ng into dev 2021-01-29 16:49:07 +01:00
jonaswinkler
d22d9a023c frontend support for suggestions #264 2021-01-29 16:48:51 +01:00
jonaswinkler
ddcc0883eb add support for suggestions 2021-01-29 16:45:23 +01:00
Jonas Winkler
047a21eb48 Merge pull request #468 from jonaswinkler/translations_src-ui-messages-xlf--dev_fr
Translate '/src-ui/messages.xlf' in 'fr'
2021-01-29 14:01:46 +01:00
transifex-integration[bot]
439f06ccda Translate /src-ui/messages.xlf in fr
translation completed for the source file '/src-ui/messages.xlf'
on the 'fr' language.
2021-01-29 12:42:54 +00:00
jonaswinkler
05866da04b remove dead code 2021-01-29 12:54:54 +01:00
jonaswinkler
dcd350a30c not sure what happened with reportlab 3.5.60, maybe a bad release. 2021-01-29 00:26:17 +01:00
jonaswinkler
107cc2ca20 add missing quotes 2021-01-28 22:38:12 +01:00
jonaswinkler
f872221c49 filesystem permission checks now issue warnings instead of errors, improves NFS compatibility 2021-01-28 22:22:25 +01:00
jonaswinkler
2faa425caf localization for websockets 2021-01-28 22:06:02 +01:00
jonaswinkler
94be8781e9 test cases 2021-01-28 19:28:48 +01:00
jonaswinkler
47189342e4 update dependencies 2021-01-28 12:43:27 +01:00
jonaswinkler
fafe259e53 added a status summary line 2021-01-28 10:54:56 +01:00
jonaswinkler
41fe607157 documentation 2021-01-27 20:45:14 +01:00
jonaswinkler
062008269b prevent updates to scipy, since 1.6 is incompatible with python 3.6 2021-01-27 20:27:40 +01:00
jonaswinkler
29e1b51164 add python 3.9 for tests 2021-01-27 20:27:06 +01:00
jonaswinkler
d2a8bc5c4c fix redis configuration 2021-01-27 20:08:09 +01:00
jonaswinkler
7414b3d23a update configuration 2021-01-27 19:57:04 +01:00
jonaswinkler
a0a781a3d5 i18n 2021-01-27 19:11:50 +01:00
jonaswinkler
d9e6f6e07c add gunicorn again 2021-01-27 19:11:18 +01:00
jonaswinkler
9167357908 update list view when documents are added 2021-01-27 18:47:02 +01:00
jonaswinkler
3b541b22e8 improved the logic of the "dismiss completed" button 2021-01-27 18:34:59 +01:00
jonaswinkler
71d5af233d update messages 2021-01-27 17:57:16 +01:00
jonaswinkler
b0ed06003b better error messages 2021-01-27 17:56:06 +01:00
jonaswinkler
91f7c4e685 settings and localization 2021-01-27 17:28:11 +01:00
jonaswinkler
5a4cb5fe4a proper messages when uploading fails 2021-01-27 16:04:06 +01:00
jonaswinkler
cc74be9ccc better error messages 2021-01-27 15:50:37 +01:00
jonaswinkler
68a9dd7e05 fix an issue with upload status identification 2021-01-27 15:23:29 +01:00
jonaswinkler
682cf33c78 clarification for some steps in the migration guide 2021-01-27 12:05:30 +01:00
Jonas Winkler
763b780aa4 Update issue templates 2021-01-27 11:32:30 +01:00
Jonas Winkler
24313fe001 Merge pull request #452 from shamoon/feature/consumer-alerts
Updates to consumer status alerts
2021-01-27 00:36:33 +01:00
Michael Shamoon
51dc40ae73 Maximum limit of alerts 2021-01-26 14:48:39 -08:00
jonaswinkler
ab04817bea alter defaults for workers and threads to allow more parallel tasks #446 2021-01-26 22:10:43 +01:00
jonaswinkler
8dde7fa043 Merge branch 'master' of github.com:jonaswinkler/paperless-ng 2021-01-26 20:48:43 +01:00
jonaswinkler
edfebe18a2 removed all occurences of pipenv from the documentation 2021-01-26 20:48:32 +01:00
jonaswinkler
0b07c3bd8f more documentation 2021-01-26 20:37:36 +01:00
Jonas Winkler
1483f450ad Update issue templates 2021-01-26 20:32:35 +01:00
jonaswinkler
600c13204e added FAQ for #449 2021-01-26 20:13:29 +01:00
jonaswinkler
2073279473 documentation for #441 2021-01-26 19:53:56 +01:00
jonaswinkler
d126ecfa4d troubleshooting for #346 2021-01-26 19:42:06 +01:00
jonaswinkler
944aaf5438 documentation #444 2021-01-26 19:32:22 +01:00
Michael Shamoon
52f17a9ba6 Fix dark mode primary progress color 2021-01-26 10:17:58 -08:00
Michael Shamoon
44600961d8 Fix initial upload progress > 100% 2021-01-26 10:17:45 -08:00
Michael Shamoon
d60b532b8f Dark mode support 2021-01-26 10:09:13 -08:00
Michael Shamoon
55584a6a87 Fix alert resizing 2021-01-26 09:50:48 -08:00
jonaswinkler
7c02a8b414 requirements 2021-01-26 18:01:24 +01:00
jonaswinkler
18d105b4f8 pinned scikit learn version 2021-01-26 18:00:59 +01:00
jonaswinkler
f0d49a1382 enable docker image builds on feature branches 2021-01-26 15:55:47 +01:00
Jonas Winkler
277bf0eb83 Merge pull request #414 from tido-/documentation_changes
Documentation changes
2021-01-26 15:50:28 +01:00
jonaswinkler
3b5d55c428 pycodestyle 2021-01-26 15:43:07 +01:00
jonaswinkler
313f2886d7 fix test cases 2021-01-26 15:26:25 +01:00
jonaswinkler
868fd4155a bug fixes, test case fixes 2021-01-26 15:19:56 +01:00
jonaswinkler
4eeb5642f5 i18n, better error handling 2021-01-26 15:02:46 +01:00
Michael Shamoon
532a3d955c Dismiss all 2021-01-26 02:52:16 -08:00
Michael Shamoon
53309f017f Lovely file upload alerts 2021-01-26 02:32:45 -08:00
Michael Shamoon
5651a03b14 Drop over background color 2021-01-26 00:17:27 -08:00
jonaswinkler
7dedb99dae fix status reports for consumption directory status messages 2021-01-26 01:15:27 +01:00
jonaswinkler
b581e42216 functions for combined upload progress bars 2021-01-26 01:10:39 +01:00
jonaswinkler
ede3bd1391 rework of the front end components 2021-01-26 00:51:45 +01:00
jonaswinkler
339e96b63c task ids 2021-01-26 00:51:20 +01:00
jonaswinkler
f31073a341 update dependencies 2021-01-26 00:50:29 +01:00
jonaswinkler
2fa78f7820 update Pipfile.lock 2021-01-26 00:35:07 +01:00
jonaswinkler
77b85b9e93 remove status widget 2021-01-26 00:34:36 +01:00
Fabian Koller
29ce2515ee Build source package in paperlessng_directory
Avoids permission problems in /tmp
2021-01-25 21:57:20 +01:00
Reto
d57c237980 fixed merge conflict 2021-01-24 20:12:38 +01:00
Reto
37ade0c6b2 fix my ignorance of idempotent 2021-01-24 20:00:09 +01:00
Reto
28a2479f24 fix my ignorance of idempotent 2021-01-24 19:37:46 +01:00
Fabian Koller
be2013975c Simplify building from source
Do not package app, instead copy directly into expected directory
2021-01-24 09:59:54 +01:00
Jonas Winkler
6e688a5b82 Update README.md 2021-01-24 00:00:46 +01:00
Fabian Koller
bfbdfe857f Simplify molecule tests
"Upgrade" path includes multiple paths anyway:
- installing the latest official release package
- builing the current PR from source
- upgrading between the two versions
2021-01-23 22:55:46 +01:00
Fabian Koller
0d19957d4b Fully prepare release package 2021-01-23 22:45:32 +01:00
jonaswinkler
05d69c0882 Merge branch 'dev' into feature-websockets-status 2021-01-23 22:22:17 +01:00
Reto
2104e65462 minor changes, like numbering 2021-01-23 13:14:31 +01:00
Reto
c0882e74e2 tried to fill the gaps and change wording where it felt necessary for better understanding 2021-01-23 12:55:50 +01:00
Jonas Winkler
ced6a61869 Update README.md 2021-01-22 17:22:02 +01:00
Fabian Koller
6c3b1db4dd Determine installed version by git commit hash 2021-01-22 16:28:13 +01:00
Jonas Winkler
25a0845efd Update README.md 2021-01-22 15:07:52 +01:00
Fabian Koller
8d62493774 Adapt github action to build PR version 2021-01-22 11:10:56 +01:00
Fabian Koller
eca1289ce2 Build release archive when version is not avail
Default ansible installation version to "latest" (pulls the latest
published release archive).
2021-01-22 10:49:59 +01:00
jonaswinkler
f95fd4ced2 Merge branch 'dev' 2021-01-21 22:55:10 +01:00
jonaswinkler
227f7b6946 revert a change 2021-01-21 22:29:47 +01:00
jonaswinkler
1a0b954397 Merge branch 'dev' of github.com:jonaswinkler/paperless-ng into dev 2021-01-21 21:32:21 +01:00
jonaswinkler
87ad2ce1d6 added a note regarding updates after 0.9.13 2021-01-21 21:32:08 +01:00
Jonas Winkler
63cd16e29e Merge pull request #407 from jonaswinkler/translations_src-ui-messages-xlf--dev_fr
Translate '/src-ui/messages.xlf' in 'fr'
2021-01-21 21:16:02 +01:00
Jonas Winkler
66fc9e9111 Merge pull request #408 from jonaswinkler/translations_src-ui-messages-xlf--dev_de
Translate '/src-ui/messages.xlf' in 'de'
2021-01-21 21:15:49 +01:00
Jonas Winkler
43bee38b3c Merge pull request #406 from jonaswinkler/translations_src-ui-messages-xlf--dev_nl_NL
Translate '/src-ui/messages.xlf' in 'nl_NL'
2021-01-21 21:15:32 +01:00
transifex-integration[bot]
18ebb58dc9 Translate /src-ui/messages.xlf in de
translation completed for the source file '/src-ui/messages.xlf'
on the 'de' language.
2021-01-21 20:08:58 +00:00
transifex-integration[bot]
099b84a66d Translate /src-ui/messages.xlf in fr
translation completed for the source file '/src-ui/messages.xlf'
on the 'fr' language.
2021-01-21 20:08:46 +00:00
transifex-integration[bot]
3b22d7131d Translate /src-ui/messages.xlf in nl_NL
translation completed for the source file '/src-ui/messages.xlf'
on the 'nl_NL' language.
2021-01-21 20:08:36 +00:00
jonaswinkler
11f9616411 improve locale selection options 2021-01-21 21:05:16 +01:00
Jonas Winkler
10b53bdfd0 Update README.md 2021-01-21 13:49:12 +01:00
jonaswinkler
aeb10d3407 fixes duplicate documents with tags__id__in 2021-01-21 12:07:50 +01:00
jonaswinkler
ddf386c4d4 add temporary directory during startup and ensure correct permissions 2021-01-21 01:02:41 +01:00
jonaswinkler
9575b0fe32 fixes #397 2021-01-20 20:28:42 +01:00
jonaswinkler
6c7290bd34 Merge branch 'dev' of github.com:jonaswinkler/paperless-ng into dev 2021-01-20 15:25:33 +01:00
Jonas Winkler
19032fe433 Merge pull request #396 from jonaswinkler/translations_src-ui-messages-xlf--dev_de
Translate '/src-ui/messages.xlf' in 'de' [manual sync]
2021-01-20 14:46:46 +01:00
Jonas Winkler
8fce8d4677 Merge pull request #395 from jonaswinkler/translations_src-ui-messages-xlf--dev_fr
Translate '/src-ui/messages.xlf' in 'fr' [manual sync]
2021-01-20 14:45:53 +01:00
Jonas Winkler
2333ea9dc7 Merge pull request #394 from jonaswinkler/translations_src-ui-messages-xlf--dev_nl_NL
Translate '/src-ui/messages.xlf' in 'nl_NL' [manual sync]
2021-01-20 14:45:31 +01:00
transifex-integration[bot]
937cdaccad Translate /src-ui/messages.xlf in de
at least 99% translated for the source file '/src-ui/messages.xlf'
on the 'de' language.

 Manual sync of partially translated files: untranslated content is included with an empty translation or source language content depending on file format
2021-01-20 13:44:37 +00:00
transifex-integration[bot]
54916fec2e Translate /src-ui/messages.xlf in fr
at least 99% translated for the source file '/src-ui/messages.xlf'
on the 'fr' language.

 Manual sync of partially translated files: untranslated content is included with an empty translation or source language content depending on file format
2021-01-20 13:44:31 +00:00
transifex-integration[bot]
03e159f67c Translate /src-ui/messages.xlf in nl_NL
at least 99% translated for the source file '/src-ui/messages.xlf'
on the 'nl_NL' language.

 Manual sync of partially translated files: untranslated content is included with an empty translation or source language content depending on file format
2021-01-20 13:44:24 +00:00
jonaswinkler
482ef6313d changelog 2021-01-20 14:35:38 +01:00
jonaswinkler
43685baff3 fix tag clicking on document table list 2021-01-20 14:29:30 +01:00
jonaswinkler
f6a2cc74e8 clicking on small and large cards changed 2021-01-20 14:25:52 +01:00
jonaswinkler
9f1436a865 more test 2021-01-20 12:34:01 +01:00
jonaswinkler
020df6c8ea Merge branch 'dev' of github.com:jonaswinkler/paperless-ng into dev 2021-01-20 11:56:27 +01:00
jonaswinkler
08046cb83f revert changes for #351 2021-01-20 11:56:09 +01:00
Jonas Winkler
f06edebbd8 Update Crowdin configuration file 2021-01-20 11:39:20 +01:00
Jonas Winkler
c808011b75 Update Crowdin configuration file 2021-01-20 11:37:32 +01:00
jonaswinkler
da60fc8150 Merge branch 'master' into dev 2021-01-19 16:55:18 +01:00
Jonas Winkler
04a0d01b21 Merge pull request #367 from C0nsultant/ansible-verifyupdates
Ansible - Verify that updates between versions work
2021-01-19 16:53:49 +01:00
Jonas Winkler
02a066f8f3 Update README.md 2021-01-19 16:43:12 +01:00
jonaswinkler
7834d369c6 txt preview #338 2021-01-19 16:23:49 +01:00
jonaswinkler
5e841531be more test 2021-01-19 16:14:28 +01:00
jonaswinkler
5355f2b027 fixes #351 2021-01-19 14:43:55 +01:00
jonaswinkler
e1533202fc Merge branch 'dev' of github.com:jonaswinkler/paperless-ng into dev 2021-01-19 14:01:16 +01:00
jonaswinkler
0b949a14c0 add filtering to management pages #356 2021-01-19 14:00:15 +01:00
Jonas Winkler
5175206179 Merge pull request #384 from jonaswinkler/translations_src-ui-messages-xlf--dev_fr
Translate '/src-ui/messages.xlf' in 'fr'
2021-01-19 00:30:04 +01:00
transifex-integration[bot]
0af0dffeda Translate /src-ui/messages.xlf in fr
translation completed for the source file '/src-ui/messages.xlf'
on the 'fr' language.
2021-01-18 23:28:17 +00:00
Fabian Koller
74a1b36005 Update administration docs with ansible update 2021-01-18 23:19:16 +01:00
Fabian Koller
8884a4dfdf molecule scenario to test upgrading from releases
Provide a separate scenario to install the last release, then update to
the current one.
Also includes improved deployment verification (check if uploading a
.txt through the API works).
2021-01-18 22:51:40 +01:00
Fabian Koller
19f73f5782 Make update ansible role paths explicit 2021-01-18 22:51:40 +01:00
Fabian Koller
8e95310602 Fix ENV var name for user args in documentation
Follow-up to #214
2021-01-18 22:51:40 +01:00
Jonas Winkler
fe31b8d160 Merge pull request #382 from jonaswinkler/translations_src-ui-messages-xlf--dev_de
Translate '/src-ui/messages.xlf' in 'de'
2021-01-18 22:32:01 +01:00
Jonas Winkler
6515d1ae85 Merge pull request #383 from jonaswinkler/translations_src-ui-messages-xlf--dev_nl_NL
Translate '/src-ui/messages.xlf' in 'nl_NL'
2021-01-18 22:31:49 +01:00
transifex-integration[bot]
a8ec9f29cd Translate /src-ui/messages.xlf in nl_NL
translation completed for the source file '/src-ui/messages.xlf'
on the 'nl_NL' language.
2021-01-18 21:31:31 +00:00
transifex-integration[bot]
bab53838ec Translate /src-ui/messages.xlf in de
translation completed for the source file '/src-ui/messages.xlf'
on the 'de' language.
2021-01-18 21:30:59 +00:00
jonaswinkler
bf2e98527c updated messages 2021-01-18 22:30:06 +01:00
jonaswinkler
e1e11de2b5 mail tests 2021-01-18 22:23:53 +01:00
jonaswinkler
4fda8f3348 changelog 2021-01-18 22:23:19 +01:00
jonaswinkler
8427d58337 Merge branch 'master' into dev 2021-01-18 15:44:26 +01:00
jonaswinkler
385076cf28 documentation and changelog 2021-01-18 15:43:48 +01:00
jonaswinkler
b9725437d9 delete option for exporter, short options, tests 2021-01-18 15:33:05 +01:00
jonaswinkler
72616def4f locking for the document archiver 2021-01-18 15:18:03 +01:00
jonaswinkler
6c972bd08a more tests 2021-01-18 14:47:19 +01:00
jonaswinkler
a71a991084 fix some test cases due to renamed test files 2021-01-18 14:20:45 +01:00
jonaswinkler
0927f9d477 some bug fixes and tests 2021-01-18 14:16:32 +01:00
jonaswinkler
a68b858733 new exporter that updates the export in place, fixes #376 #343 #166 2021-01-18 01:15:39 +01:00
jonaswinkler
08199f09b6 fixes for #374 2021-01-17 12:14:19 +01:00
Jonas Winkler
5f8151282b Merge pull request #374 from shamoon/fix/issue-325-2
Allow "live" visualizing of date locale in settings
2021-01-17 12:10:28 +01:00
Jonas Winkler
efde4828d6 Merge pull request #375 from jonaswinkler/translations_src-ui-messages-xlf--dev_nl_NL
Translate '/src-ui/messages.xlf' in 'nl_NL'
2021-01-17 11:11:38 +01:00
transifex-integration[bot]
016c168404 Translate /src-ui/messages.xlf in nl_NL
translation completed for the source file '/src-ui/messages.xlf'
on the 'nl_NL' language.
2021-01-17 09:04:39 +00:00
Michael Shamoon
741ccfa280 Fix svg attribute error
Unrelated to the rest of this branch but not worth a separate PR
2021-01-16 21:39:13 -08:00
Michael Shamoon
31b74515b6 Allow "live" changing of date format 2021-01-16 20:49:12 -08:00
Jonas Winkler
b9a2f82ce0 Merge pull request #370 from shamoon/fix/issue-350
Prevent close button in modal dialogs 'stealing' focus
2021-01-17 01:32:21 +01:00
jonaswinkler
3c59d9b787 Merge branch 'dev' of github.com:jonaswinkler/paperless-ng into dev 2021-01-17 00:53:32 +01:00
jonaswinkler
f919ec0d57 version bump 2021-01-17 00:52:54 +01:00
Jonas Winkler
9c380f5aac Merge pull request #371 from jonaswinkler/translations_src-ui-messages-xlf--dev_de
Translate '/src-ui/messages.xlf' in 'de'
2021-01-17 00:30:08 +01:00
transifex-integration[bot]
fc5def157d Translate /src-ui/messages.xlf in de
translation completed for the source file '/src-ui/messages.xlf'
on the 'de' language.
2021-01-16 23:28:01 +00:00
jonaswinkler
d5eff386db update translation messages 2021-01-17 00:25:40 +01:00
jonaswinkler
864e421cd3 add configuration option for changing date display in paperless #325 2021-01-17 00:15:45 +01:00
Michael Shamoon
2c9825193b Comment typo 2021-01-16 14:14:05 -08:00
Michael Shamoon
98f3e99e2e Prevent close button 'stealing' focus from modal input fields 2021-01-16 14:09:23 -08:00
Jonas Winkler
961354aa8a Merge pull request #362 from shamoon/fix/issue-347
Allow shift-select in documents list
2021-01-16 20:58:34 +01:00
Jonas Winkler
fa27c895ed Merge pull request #355 from C0nsultant/ansible-documentation
Ansible - Provide documentation
2021-01-16 14:30:07 +01:00
Michael Shamoon
c31b6e63f5 Prevent text selection on table rows 2021-01-15 16:13:22 -08:00
Michael Shamoon
ef924e896b Fix reverting old selection in all cases by always doing it 2021-01-15 07:57:01 -08:00
Jonas Winkler
5b1619cba3 Merge pull request #364 from jonaswinkler/translations_src-ui-messages-xlf--dev_fr
Translate '/src-ui/messages.xlf' in 'fr'
2021-01-15 13:49:47 +01:00
transifex-integration[bot]
a3a9949ebc Translate /src-ui/messages.xlf in fr
translation completed for the source file '/src-ui/messages.xlf'
on the 'fr' language.
2021-01-15 12:42:26 +00:00
Jonas Winkler
ada8493838 Merge pull request #363 from jonaswinkler/translations_src-ui-messages-xlf--dev_de
Translate '/src-ui/messages.xlf' in 'de'
2021-01-15 12:53:53 +01:00
transifex-integration[bot]
cc06d528cb Translate /src-ui/messages.xlf in de
translation completed for the source file '/src-ui/messages.xlf'
on the 'de' language.
2021-01-15 11:52:06 +00:00
jonaswinkler
0926266663 add a language switcher fixes #352 2021-01-15 12:50:34 +01:00
Michael Shamoon
59008ea765 remove new line =/ 2021-01-15 02:22:10 -08:00
Michael Shamoon
01cd4c7546 Refactor variable names for clarity 2021-01-15 02:15:26 -08:00
Michael Shamoon
8d606b9f34 Handle shift-clicking orignal item 2021-01-15 02:13:21 -08:00
Michael Shamoon
86376c8c5f Fix repeat range selections were clashing 2021-01-15 02:09:13 -08:00
Michael Shamoon
48220ceeb8 Refactor selection functions to two separate ones for clarity 2021-01-15 01:59:29 -08:00
Michael Shamoon
f94da1cf27 Allow reversing selection range 2021-01-15 01:54:33 -08:00
Michael Shamoon
6d786f8987 remove log statement 2021-01-15 01:11:06 -08:00
Fabian Koller
8d433ac0de Update setup docs with ansible instructions 2021-01-15 10:10:36 +01:00
Michael Shamoon
4b42c97d0a Allow select anywhere in tr or card 2021-01-15 01:10:01 -08:00
Jonas Winkler
d8637ff4b1 Merge pull request #349 from C0nsultant/patch-4
Fix ENV var name for user args in documentation
2021-01-14 23:31:16 +01:00
Jonas Winkler
342e9c9734 Merge pull request #353 from C0nsultant/ansible-0.9.14
Ansible - Update to 0.9.14
2021-01-14 23:30:57 +01:00
Jonas Winkler
af1d084391 Merge pull request #354 from C0nsultant/patch-5
Only provide legal cors allowed hosts in example
2021-01-14 23:30:29 +01:00
Michael Shamoon
e6961d5287 Allow range selection with shift 2021-01-14 14:10:23 -08:00
jonaswinkler
7562bdb218 update the CI/CD scripts to not build and push docker images from master, update 'latest' version together with tagged releases. 2021-01-14 22:51:27 +01:00
Fabian Koller
cb94e15ba7 Update ansible README.md 2021-01-14 21:50:07 +01:00
Fabian Koller
c8b0674b93 Update to 0.9.14 2021-01-14 21:23:44 +01:00
Fabian Koller
4fa1779ef3 Only provide legal cors allowed hosts in example
Addresses that do not carry a scheme cause errors on database migration.


SystemCheckError: System check identified some issues:

ERRORS:
?: (corsheaders.E013) Origin 'example.com' in CORS_ALLOWED_ORIGINS is missing scheme or netloc
    HINT: Add a scheme (e.g. https://) or netloc (e.g. example.com).
2021-01-14 21:14:46 +01:00
Fabian Koller
db23a5cf37 Fix ENV var name for user args in documentation
Follow-up to #214
2021-01-14 20:21:34 +01:00
Michael Shamoon
7cc3c73994 Convert selection functions on cards to toggling, let service handle setting selected
Also because we need to capture mouseevents
2021-01-14 10:56:30 -08:00
jonaswinkler
014859185c fix up CI/CD: build docker image on tags, correct docker image version, correct release tag 2021-01-14 17:24:36 +01:00
jonaswinkler
6dae900d74 I hope this works! 2021-01-14 16:09:44 +01:00
jonaswinkler
a4187b2b70 fix a test case 2021-01-14 14:54:04 +01:00
jonaswinkler
556e4f7430 update readme 2021-01-14 14:38:08 +01:00
Jonas Winkler
02c2d388ed Merge pull request #340 from jonaswinkler/translations_src-ui-messages-xlf--dev_de
Translate '/src-ui/messages.xlf' in 'de'
2021-01-14 14:36:19 +01:00
transifex-integration[bot]
c0692f03a3 Translate /src-ui/messages.xlf in de
translation completed for the source file '/src-ui/messages.xlf'
on the 'de' language.
2021-01-14 13:33:42 +00:00
jonaswinkler
a2342d98d3 fix release CI 2021-01-14 14:08:48 +01:00
jonaswinkler
24c20e38ff changelog 2021-01-14 14:04:09 +01:00
jonaswinkler
cd12c1b300 dependencies 2021-01-14 13:36:45 +01:00
jonaswinkler
a008dff368 configuration option for type of PDF viewer fixes #337 2021-01-14 13:35:43 +01:00
jonaswinkler
769356733a update docker compose files and documentation #339 2021-01-14 12:59:39 +01:00
jonaswinkler
f5be2ac4bb a couple changes to the documentation 2021-01-14 02:09:06 +01:00
jonaswinkler
2824fcb497 changelog 2021-01-14 02:08:26 +01:00
jonaswinkler
2f42eab217 move compose files 2021-01-14 01:56:10 +01:00
jonaswinkler
338324d5b6 Merge remote-tracking branch 'origin/master' into dev 2021-01-14 01:05:29 +01:00
jonaswinkler
0628d10076 background color for dark mode logs 2021-01-14 00:47:54 +01:00
jonaswinkler
bc4017d54a inconsistent shadows 2021-01-13 20:09:37 +01:00
jonaswinkler
96dc7583bf add missing dependency back into the Dockerfile. 2021-01-13 19:58:32 +01:00
jonaswinkler
deb9698ff6 added some messages to the docker startup script 2021-01-13 19:58:09 +01:00
jonaswinkler
654c7fd2ac release: updated body 2021-01-13 19:56:23 +01:00
jonaswinkler
24e34e95cd changelog 2021-01-13 17:33:32 +01:00
jonaswinkler
d093c004fb fixes #161 2021-01-13 17:17:23 +01:00
jonaswinkler
ceb9426fd4 changelog 2021-01-13 16:21:54 +01:00
jonaswinkler
e4f2016678 DEBUG logging 2021-01-13 13:35:05 +01:00
jonaswinkler
40842689fd Better deal with non-existing documents when searching 2021-01-13 13:34:52 +01:00
jonaswinkler
59f955e08b adjusted the default configuration so that at least one cpu core remains free (except on single core machines) #332 2021-01-13 00:02:20 +01:00
Jonas Winkler
91e6503503 Update README.md 2021-01-12 22:12:07 +01:00
jonaswinkler
c7c98c623d try building without libatlas 2021-01-12 21:26:39 +01:00
jonaswinkler
80aa847457 always execute all tests even if tests for one python version fail 2021-01-12 20:25:58 +01:00
jonaswinkler
f1c981338c reorganize test CI, only upload coveralls once 2021-01-12 20:23:50 +01:00
jonaswinkler
d4225a459e fix CI for new coveralls version 2021-01-12 20:05:26 +01:00
jonaswinkler
75ae37d90f update dependencies (sklearn 0.24 has aarch64 wheels!) 2021-01-12 19:48:59 +01:00
jonaswinkler
2159115679 scanners 2021-01-12 18:02:29 +01:00
Hannah Swain
0384de9a3c Update scanners list to include mobile options
(cherry picked from commit cb30fb56db445ad196eaf0dbd5ba661605f58930)
2021-01-12 17:36:38 +01:00
jonaswinkler
ae2e1fc381 Merge branch 'dev' of github.com:jonaswinkler/paperless-ng into dev 2021-01-12 17:32:22 +01:00
jonaswinkler
d45993c905 remove unused code 2021-01-12 17:00:53 +01:00
Jonas Winkler
4e6c7b01b6 Update README.md 2021-01-12 14:29:32 +01:00
jonaswinkler
775ce56d2e Merge branch 'master' into dev 2021-01-12 14:14:06 +01:00
Jonas Winkler
d41c466f6e Merge pull request #171 from C0nsultant/ansible-role
Provide an ansible role for deployment and configuration
2021-01-12 14:11:09 +01:00
jonaswinkler
387135ffa5 update dockerfile 2021-01-12 14:01:15 +01:00
jonaswinkler
64b176103e fixes #201 2021-01-12 13:51:44 +01:00
jonaswinkler
7f88c7d70c update docker-compose.env 2021-01-12 13:51:29 +01:00
jonaswinkler
1a89ad95e0 changelog 2021-01-12 13:08:30 +01:00
jonaswinkler
376f991db5 remove travis branch condition 2021-01-12 13:06:21 +01:00
jonaswinkler
623893b528 fixes #331 2021-01-12 13:05:49 +01:00
jonaswinkler
890f6f35b5 fixes #330 2021-01-12 12:27:58 +01:00
jonaswinkler
ab4af350dd changelog 2021-01-12 12:25:50 +01:00
Jonas Winkler
95bfc4be9a Merge pull request #329 from shamoon/fix/mobile-button-group-improvements
Mobile button group improvements
2021-01-12 11:55:12 +01:00
Michael Shamoon
95d9c8fa2b Merge remote-tracking branch 'upstream/dev' into fix/mobile-button-group-improvements 2021-01-11 16:16:12 -08:00
Michael Shamoon
83dd5f51cd Move 'Filter by:' inline with title field, icon stuff 2021-01-11 16:15:55 -08:00
jonaswinkler
5d1dddfac8 unless-stopped in local dockerfiles 2021-01-12 00:40:49 +01:00
jonaswinkler
50ba88231f documentation 2021-01-12 00:29:05 +01:00
jonaswinkler
221cf12184 only restart docker unless stopped 2021-01-12 00:21:05 +01:00
jonaswinkler
681b769a71 copy files into place 2021-01-12 00:15:20 +01:00
Michael Shamoon
27517c15ca Make bulk editor a little more compact 2021-01-11 15:01:40 -08:00
Michael Shamoon
56f566e13a select icon hidden on larger screens 2021-01-11 14:54:48 -08:00
Michael Shamoon
6131a40c31 Fix right menus getting cut off 2021-01-11 14:53:16 -08:00
jonaswinkler
040e652e6a remove obsolete steps from the documentation 2021-01-11 23:07:47 +01:00
jonaswinkler
caf0e1d15b Merge branch 'dev' into travis-multiarch-builds 2021-01-11 22:11:34 +01:00
jonaswinkler
9dd8b7cd88 fix test case 2021-01-11 22:11:01 +01:00
Michael Shamoon
8702a739b0 Change dark mode dropdown menu color for visibility 2021-01-11 12:58:59 -08:00
jonaswinkler
8104851c08 Merge branch 'dev' into travis-multiarch-builds 2021-01-11 21:57:28 +01:00
jonaswinkler
0e03c48beb pin pillow dependency 2021-01-11 21:56:50 +01:00
jonaswinkler
3fbf24a1c2 don't use dependencies from testing 2021-01-11 21:55:06 +01:00
Michael Shamoon
64a966c9a5 Fill document list buttons, show select icon because its not obvious, make some menus right 2021-01-11 12:52:42 -08:00
Michael Shamoon
18a128b917 On second thought lets make filter editor buttons fill 2021-01-11 12:22:35 -08:00
Michael Shamoon
cfd263da90 Hide page count on mobile since document is out of view anyway 2021-01-11 11:49:27 -08:00
Michael Shamoon
0f4a7f0a04 Combine sort & sort order fields to better accomodate mobile, button bar full width 2021-01-11 11:46:40 -08:00
Michael Shamoon
ae5dd62105 Hide button text in favor of icons on mobile like filter editor does 2021-01-11 11:46:07 -08:00
Michael Shamoon
b73ff095e6 Distribute filter editor buttons equally to full width on mobile 2021-01-11 11:45:23 -08:00
jonaswinkler
4503be110a try building this with updated dependencies 2021-01-11 17:13:56 +01:00
jonaswinkler
7fef27e6de fixes #305 2021-01-11 16:16:39 +01:00
jonaswinkler
d8eabd66ea lost some changes in a merge 2021-01-11 16:05:29 +01:00
jonaswinkler
a62e5f32b8 Merge branch 'master' into dev 2021-01-11 16:02:25 +01:00
Jonas Winkler
24fe5bb838 Merge pull request #323 from jonaswinkler/translations_src-locale-en-us-lc-messages-django-po--dev_de
Translate '/src/locale/en-us/LC_MESSAGES/django.po' in 'de'
2021-01-11 16:00:00 +01:00
transifex-integration[bot]
5217acc471 Apply translations in de
translation completed for the source file '/src/locale/en-us/LC_MESSAGES/django.po'
on the 'de' language.
2021-01-11 14:59:29 +00:00
jonaswinkler
f96d97a637 Merge branch 'dev' of github.com:jonaswinkler/paperless-ng into dev 2021-01-11 15:38:57 +01:00
jonaswinkler
de38f46a53 fixes #307 2021-01-11 15:38:45 +01:00
jonaswinkler
8f94607409 a couple fixes to the ci script 2021-01-11 13:19:29 +01:00
Jonas Winkler
88ee3694f7 Merge pull request #320 from jonaswinkler/translations_src-locale-en-us-lc-messages-django-po--dev_fr
Translate '/src/locale/en-us/LC_MESSAGES/django.po' in 'fr'
2021-01-11 12:02:20 +01:00
transifex-integration[bot]
584307dc54 Apply translations in fr
translation completed for the source file '/src/locale/en-us/LC_MESSAGES/django.po'
on the 'fr' language.
2021-01-11 09:12:58 +00:00
Jonas Winkler
62fd32afbc Merge pull request #318 from jonaswinkler/translations_src-locale-en-us-lc-messages-django-po--dev_nl_NL
Translate '/src/locale/en-us/LC_MESSAGES/django.po' in 'nl_NL'
2021-01-11 02:20:51 +01:00
transifex-integration[bot]
bfcfcde71a Apply translations in nl_NL
translation completed for the source file '/src/locale/en-us/LC_MESSAGES/django.po'
on the 'nl_NL' language.
2021-01-10 23:51:27 +00:00
jonaswinkler
6ce0945aeb enable multiarch builds, release only with ng- tags 2021-01-11 00:08:56 +01:00
jonaswinkler
f701479d77 fix upload-release-asset path 2021-01-10 23:57:20 +01:00
jonaswinkler
4e93d92e46 Merge branch 'dev' into travis-multiarch-builds 2021-01-10 23:46:31 +01:00
jonaswinkler
ebcdcc6a1e github.ref instead of GITHUB_REF 2021-01-10 23:46:19 +01:00
jonaswinkler
b5cd713e16 maybe this 2021-01-10 23:43:59 +01:00
jonaswinkler
0adb8cea91 I have no idea what I am doing 2021-01-10 23:17:53 +01:00
jonaswinkler
bce79189e5 maybe this is better? 2021-01-10 23:09:09 +01:00
jonaswinkler
8927e0185b maybe this is better? 2021-01-10 22:57:56 +01:00
jonaswinkler
df95fad9be update release name 2021-01-10 22:56:10 +01:00
jonaswinkler
e96809a08e translation for login/logout pages #212 2021-01-10 22:47:24 +01:00
jonaswinkler
7ebc1351fe updated documentation #316 2021-01-10 22:40:13 +01:00
jonaswinkler
ee31249d65 reorganized the Dockerfile 2021-01-10 22:28:46 +01:00
jonaswinkler
a9d6e7f402 add a publish release step 2021-01-10 22:22:23 +01:00
jonaswinkler
296be9135a Merge branch 'dev' into travis-multiarch-builds 2021-01-10 21:55:05 +01:00
jonaswinkler
f24640dec2 some small fixes 2021-01-10 21:53:18 +01:00
jonaswinkler
64d6e6eded wrong path to release 2021-01-10 21:35:43 +01:00
jonaswinkler
587cd80055 Merge branch 'dev' of github.com:jonaswinkler/paperless-ng into dev 2021-01-10 21:28:54 +01:00
jonaswinkler
527b7bee3f forgot a dependency 2021-01-10 21:27:41 +01:00
jonaswinkler
e1f52d706f fix wrong directory 2021-01-10 21:20:55 +01:00
jonaswinkler
2e2e69f07c more release archive 2021-01-10 21:17:01 +01:00
jonaswinkler
6a3e4f0857 add release archive action 2021-01-10 21:03:50 +01:00
jonaswinkler
ff3bdd7f5a fix script name 2021-01-10 20:00:11 +01:00
jonaswinkler
1e185d1502 don't build front end with docker 2021-01-10 19:59:05 +01:00
jonaswinkler
8f9aab407d Merge branch 'dev' into travis-multiarch-builds 2021-01-10 19:27:10 +01:00
jonaswinkler
4cf0ce1b06 version push 2021-01-10 19:26:38 +01:00
jonaswinkler
8430aa75da enable the other architectures 2021-01-10 17:46:43 +01:00
Jonas Winkler
f5a47de1d6 Merge pull request #315 from shamoon/fix/issue-314
Fix log colors in dark mode
2021-01-10 17:45:13 +01:00
Michael Shamoon
1fe322bbac Fix log colors in dark mode 2021-01-10 08:36:20 -08:00
jonaswinkler
f6da608154 disable tests until this is working 2021-01-10 17:19:00 +01:00
jonaswinkler
22fc16f4a3 revert to python:3.7-slim base image since ubuntu:20.04 is clearly not working for arm 2021-01-10 17:18:35 +01:00
jonaswinkler
def85a3d37 maybe use requirements instead? 2021-01-10 15:51:40 +01:00
Jonas Winkler
f638079361 Merge pull request #306 from shamoon/fix/large-card-mobile-fixes
Fixes for large cards / search results on mobile
2021-01-10 12:21:51 +01:00
Jonas Winkler
e87ab91d0e Merge pull request #310 from jonaswinkler/translations_src-locale-en-us-lc-messages-django-po--dev_de
Translate '/src/locale/en-us/LC_MESSAGES/django.po' in 'de'
2021-01-10 12:21:13 +01:00
Jonas Winkler
fb56602081 Merge pull request #311 from jonaswinkler/translations_src-ui-messages-xlf--dev_nl_NL
Translate '/src-ui/messages.xlf' in 'nl_NL'
2021-01-10 12:20:57 +01:00
Jonas Winkler
2c1d9f2d7b Merge pull request #312 from jonaswinkler/translations_src-ui-messages-xlf--dev_fr
Translate '/src-ui/messages.xlf' in 'fr'
2021-01-10 12:20:43 +01:00
Jonas Winkler
49385959b8 Merge pull request #308 from jonaswinkler/translations_src-locale-en-us-lc-messages-django-po--dev_nl_NL
Translate '/src/locale/en-us/LC_MESSAGES/django.po' in 'nl_NL'
2021-01-10 12:19:32 +01:00
transifex-integration[bot]
3511c86abd Translate /src-ui/messages.xlf in fr
translated for the source file '/src-ui/messages.xlf'
on the 'fr' language.
2021-01-10 11:19:21 +00:00
transifex-integration[bot]
9908580409 Translate /src-ui/messages.xlf in nl_NL
translated for the source file '/src-ui/messages.xlf'
on the 'nl_NL' language.
2021-01-10 11:19:16 +00:00
transifex-integration[bot]
5bad23d7be Apply translations in de
translated for the source file '/src/locale/en-us/LC_MESSAGES/django.po'
on the 'de' language.
2021-01-10 11:19:10 +00:00
transifex-integration[bot]
8cde2cd4b2 Apply translations in nl_NL
translated for the source file '/src/locale/en-us/LC_MESSAGES/django.po'
on the 'nl_NL' language.
2021-01-10 11:19:00 +00:00
jonaswinkler
74db555f78 fix cryphtography for armv7 2021-01-10 11:39:30 +01:00
jonaswinkler
a1a415a5d1 fix up pipfile for arm/v7 2021-01-10 11:26:14 +01:00
Michael Shamoon
49053b6ad2 Prevent long title overflow on mobile 2021-01-09 19:53:18 -08:00
Michael Shamoon
fbfdd95958 Fix large card layout on mobile 2021-01-09 19:52:31 -08:00
jonaswinkler
2c065da987 fixes #292 2021-01-10 01:59:47 +01:00
jonaswinkler
6c7281ae88 add sslmode configuration option fixes #298 2021-01-10 01:35:56 +01:00
jonaswinkler
4bb0da397a dependencies 2021-01-10 00:58:14 +01:00
jonaswinkler
6a355b8dff install pipenv 2021-01-10 00:54:48 +01:00
jonaswinkler
aa1fb63714 documentation action 2021-01-10 00:53:30 +01:00
jonaswinkler
c9ce69c1c1 documentation action 2021-01-10 00:50:06 +01:00
jonaswinkler
06ee41226d no need to run commands in pipenv when using --system 2021-01-10 00:41:11 +01:00
jonaswinkler
bf634eee66 fix python action 2021-01-10 00:32:47 +01:00
jonaswinkler
e606ae5097 try new python setup action 2021-01-10 00:28:33 +01:00
jonaswinkler
ecc40d022d test updated Pipfile 2021-01-10 00:09:10 +01:00
jonaswinkler
262e8ee999 add arm64 2021-01-09 22:53:45 +01:00
jonaswinkler
141315cf42 Revert "try separate build / push"
This reverts commit 6fa0d00b
2021-01-09 22:38:05 +01:00
jonaswinkler
6fa0d00b8f try separate build / push 2021-01-09 22:33:07 +01:00
jonaswinkler
47339c84b3 test include this branch 2021-01-09 22:03:38 +01:00
jonaswinkler
692a5081c7 rename workflow 2021-01-09 21:55:03 +01:00
jonaswinkler
28c3f8d614 fix condition 2021-01-09 21:53:13 +01:00
jonaswinkler
fb5d35e43e fix condition 2021-01-09 21:50:53 +01:00
jonaswinkler
a4bff61e5b move everything into a single file so that the docker image build can depend on the tests being successful 2021-01-09 21:49:43 +01:00
jonaswinkler
2c4bbf8a00 use correct version of cache action 2021-01-09 21:23:04 +01:00
jonaswinkler
d2ec38d5fd use correct version 2021-01-09 21:21:50 +01:00
jonaswinkler
517e037724 always update cache 2021-01-09 20:51:46 +01:00
jonaswinkler
0051d9f76e undo removing a required library 2021-01-09 20:29:29 +01:00
jonaswinkler
c0915a3dee add arm 2021-01-09 20:06:53 +01:00
jonaswinkler
4363d4c9ed simplify some things 2021-01-09 19:50:11 +01:00
jonaswinkler
d7095f7ee1 tags? 2021-01-09 19:31:41 +01:00
Jonas Winkler
ebc5f1a01d Update docker.yml 2021-01-09 19:10:09 +01:00
Jonas Winkler
d6ad41ab3a Update docker.yml 2021-01-09 19:06:00 +01:00
Jonas Winkler
9c2e55407f Update docker.yml 2021-01-09 19:02:07 +01:00
jonaswinkler
7c70659212 disable some steps 2021-01-09 18:49:21 +01:00
jonaswinkler
5822273c8d duplicate platform specification 2021-01-09 18:33:58 +01:00
jonaswinkler
001cd83ef8 new buildx setup action 2021-01-09 18:25:56 +01:00
jonaswinkler
b48c290e9c arm 2021-01-09 18:02:36 +01:00
jonaswinkler
327f00e312 now with cache? 2021-01-09 17:54:56 +01:00
jonaswinkler
b1ae8d1332 enable docker builds on this branch 2021-01-09 15:11:58 +01:00
jonaswinkler
38cb8201a1 Merge branch 'travis-multiarch-builds' of https://github.com/MarkSchmitt/paperless into travis-multiarch-builds 2021-01-09 14:59:41 +01:00
jonaswinkler
e3478edeeb Merge branch 'dev' into travis-multiarch-builds 2021-01-09 14:48:51 +01:00
Fabian Koller
69f1931f4f Update to 0.9.13 2021-01-09 11:52:39 +01:00
Jonas Winkler
6eb8908a16 Merge pull request #303 from C0nsultant/patch-4
Add gettext to  Bare Metal Route dependencies
2021-01-09 11:45:29 +01:00
Fabian Koller
88dcd889fa Add gettext to Bare Metal Route dependencies
In theory, this package is optional since not everybody wants to compile translations.
Without other changes to step 5. (i.e. making it explicit that `python3 manage.py compilemessages` is not mandatory), not installing `gettext` results in an error when blindly copy-pasting the steps.
2021-01-09 11:27:35 +01:00
Fabian Koller
9cd6235947 Disable ansible-galaxy import
Repository structure not compatible (galaxy expects the role to be at
the root of the repository, not in a subfolder).
2021-01-09 10:46:38 +01:00
Jonas Winkler
bcb2853150 Merge pull request #302 from shamoon/fix/large-card-dark-mode-buttons
Fix dark mode button display on large cards in certain browsers
2021-01-09 10:13:21 +01:00
Mark Schmitt
ad241f12a3 Run tests, documentation and frontend build also on pull_request 2021-01-09 08:06:55 +01:00
Michael Shamoon
b29627c92b Fix dark mode button display on large cards in certain browsers 2021-01-08 22:09:15 -08:00
jonaswinkler
8518d583d9 Merge branch 'dev' of github.com:jonaswinkler/paperless-ng into dev 2021-01-09 01:55:05 +01:00
jonaswinkler
81dee38e4a fixes #300 2021-01-09 01:54:51 +01:00
Jonas Winkler
fa6cc9692e Merge pull request #297 from shamoon/fix/issue-293
Fix logo size issues in certain browsers
2021-01-08 21:15:07 +01:00
Jonas Winkler
c3a92d659e Merge pull request #296 from jonaswinkler/revert-295-fix/issue-293
Revert "Fix logo size issues in certain browsers"
2021-01-08 20:59:51 +01:00
Jonas Winkler
ffed65533b Revert "Fix logo size issues in certain browsers" 2021-01-08 20:59:40 +01:00
Jonas Winkler
5a393569f0 Merge pull request #295 from shamoon/fix/issue-293
Fix logo size issues in certain browsers
2021-01-08 20:59:17 +01:00
Michael Shamoon
6cf20a93d0 Set explicit svg height, hide on mobile 2021-01-08 11:55:50 -08:00
Mark Schmitt
a2b5fb8374 Fix name of documentation workflow 2021-01-08 20:42:17 +01:00
Mark Schmitt
f4f9200fba Fix typo in yaml 2021-01-08 20:39:20 +01:00
Mark Schmitt
52640f08d2 github action improved tagging 2021-01-08 20:37:25 +01:00
Jonas Winkler
bbb5783b4f Merge pull request #289 from shamoon/fix/safari-flex-transition
Miscellaneous CSS fixes
2021-01-08 18:56:37 +01:00
Michael Shamoon
cde937a9eb Fix dark theme highlighting of ng-select dropdowns on keyboard navigation 2021-01-08 09:37:25 -08:00
Michael Shamoon
a4ee4e9b17 Prevent dashboard overflow on mobile 2021-01-08 09:33:45 -08:00
jonaswinkler
34a06435cf changelog and version 2021-01-08 13:39:12 +01:00
jonaswinkler
fad6e7284a fixes #290 2021-01-08 13:27:57 +01:00
Mark Schmitt
29f73b2dbb Give the frontend workflow a name 2021-01-08 11:34:04 +01:00
Mark Schmitt
968725f09f Separate github action into separete workflow files 2021-01-08 11:33:08 +01:00
Mark Schmitt
42064df3e0 Testing excluding docker builds if not specific ref is selected 2021-01-08 11:23:17 +01:00
Michael Shamoon
c980a52244 Fix transition for Safari 2021-01-07 19:23:59 -08:00
jonaswinkler
ed5c50db7d Merge branch 'master' into dev 2021-01-08 02:16:59 +01:00
jonaswinkler
b463428a40 tika documentation 2021-01-08 02:15:42 +01:00
jonaswinkler
38f279fd2a update installation instructions 2021-01-07 21:16:16 +01:00
Jonas Winkler
d3ab4d2f11 Update README.md 2021-01-07 19:33:27 +01:00
jonaswinkler
1170827f3d update docker ignore 2021-01-07 18:42:46 +01:00
jonaswinkler
838631b057 Merge branch 'dev' into travis-multiarch-builds 2021-01-07 17:41:44 +01:00
jonaswinkler
0a469cfdd1 test case for localized index view 2021-01-07 16:58:38 +01:00
jonaswinkler
fc82121604 update tests, remove dead code 2021-01-07 15:20:00 +01:00
Jonas Winkler
25444034ab Update README.md 2021-01-07 15:04:15 +01:00
Jonas Winkler
eec1dbe0a0 Merge pull request #286 from jonaswinkler/translations_src-ui-messages-xlf--dev_nl_NL
Translate '/src-ui/messages.xlf' in 'nl_NL'
2021-01-07 10:53:24 +01:00
Jonas Winkler
47e8bdb752 Merge pull request #287 from jonaswinkler/translations_src-locale-en-us-lc-messages-django-po--dev_nl_NL
Translate '/src/locale/en-us/LC_MESSAGES/django.po' in 'nl_NL'
2021-01-07 10:52:48 +01:00
transifex-integration[bot]
75fc373b51 Apply translations in nl_NL
translation completed for the source file '/src/locale/en-us/LC_MESSAGES/django.po'
on the 'nl_NL' language.
2021-01-07 09:32:19 +00:00
transifex-integration[bot]
8a397034fd Translate /src-ui/messages.xlf in nl_NL
translation completed for the source file '/src-ui/messages.xlf'
on the 'nl_NL' language.
2021-01-07 09:04:51 +00:00
Mark Schmitt
89476e4479 Try to use pip cache and install dependnecies like in tests 2021-01-07 09:02:29 +01:00
Mark Schmitt
1b61765df8 Install pip 2021-01-07 08:56:48 +01:00
Mark Schmitt
40da245d8d Try to insall sphinx from pipfile 2021-01-07 08:50:04 +01:00
Mark Schmitt
1238d8b994 Add pip cache
Try to be a good citizen and use caches instead of hitting the repos all the time
2021-01-07 08:44:05 +01:00
Mark Schmitt
460d202eb0 Use pip to install sphinx
Not sure why pipenv install doesn't do the trick .. let's try this way first
2021-01-07 08:37:25 +01:00
Mark Schmitt
248e4e5eb9 Try installing sphinx simply with apt 2021-01-07 07:57:12 +01:00
Mark Schmitt
08299fb808 Simplify node build 2021-01-07 07:48:32 +01:00
Mark Schmitt
c06f6145a1 ALso install python before using pip in the documentation job 2021-01-07 07:47:42 +01:00
Mark Schmitt
6101f42ae3 ADd documentation and frontend to dependency for docker build 2021-01-07 07:45:17 +01:00
Mark Schmitt
9ffd9027fa Add missing runs-on 2021-01-07 07:44:36 +01:00
Mark Schmitt
10995788d1 Fix identation 2021-01-07 07:43:45 +01:00
Mark Schmitt
98bc51a3ec Adding documentation and frontend steps from travis build 2021-01-07 07:42:25 +01:00
Mark Schmitt
cc9f9b6e8b Docker build step depends on tests 2021-01-07 07:32:43 +01:00
jonaswinkler
7f0f48ddac bugfixes 2021-01-07 01:01:01 +01:00
jonaswinkler
e92046a265 bugfix 2021-01-07 00:21:47 +01:00
jonaswinkler
fe00dffb70 version push 2021-01-07 00:10:14 +01:00
jonaswinkler
a02ddeb722 fix release script 2021-01-07 00:08:42 +01:00
jonaswinkler
9b3bc62132 fix broken webmanifest 2021-01-07 00:08:34 +01:00
Mark Schmitt
d7b3e7bd69 Use 3.8.6 2021-01-06 23:11:54 +01:00
Jonas Winkler
d3fda57b6d Merge pull request #284 from jonaswinkler/translations_src-locale-en-us-lc-messages-django-po--dev_fr
Translate '/src/locale/en-us/LC_MESSAGES/django.po' in 'fr'
2021-01-06 23:10:06 +01:00
Mark Schmitt
257ebb88f0 Looks like we need to specify the exact version 2021-01-06 23:10:06 +01:00
Mark Schmitt
9257cdac8f Remove debugging line and specify release versions 2021-01-06 23:06:40 +01:00
transifex-integration[bot]
19fddc8da8 Apply translations in fr
translation completed for the source file '/src/locale/en-us/LC_MESSAGES/django.po'
on the 'fr' language.
2021-01-06 22:04:46 +00:00
Mark Schmitt
44da3fd195 Fix yaml: indentation was wrong 2021-01-06 22:57:34 +01:00
Jonas Winkler
e452c161ba Merge pull request #283 from jonaswinkler/translations_src-ui-messages-xlf--dev_fr
Translate '/src-ui/messages.xlf' in 'fr'
2021-01-06 22:56:28 +01:00
Mark Schmitt
c7c167a058 Update to a possibly working version of pyenv-action
According to https://github.com/gabrielfalcao/pyenv-action/issues/136 this
version should work
2021-01-06 22:55:41 +01:00
Mark Schmitt
6f3cdbc165 Quote command 2021-01-06 22:54:11 +01:00
Mark Schmitt
5b4a3e4288 Remove comment 2021-01-06 22:53:32 +01:00
transifex-integration[bot]
e783494022 Translate /src-ui/messages.xlf in fr
translation completed for the source file '/src-ui/messages.xlf'
on the 'fr' language.
2021-01-06 21:53:12 +00:00
Mark Schmitt
b7ff94900f Specify exact version 2021-01-06 22:52:40 +01:00
Mark Schmitt
e761cc76fa List python versions differently so the pyenv action might light it better 2021-01-06 22:50:11 +01:00
Mark Schmitt
96da61f4e4 Trying to use pyenv action step 2021-01-06 22:48:03 +01:00
jonaswinkler
ca3d62f377 Merge branch 'dev' of github.com:jonaswinkler/paperless-ng into dev 2021-01-06 22:35:23 +01:00
Jonas Winkler
0584ceb157 Merge pull request #280 from jonaswinkler/translations_src-ui-messages-xlf--dev_de
Translate '/src-ui/messages.xlf' in 'de'
2021-01-06 21:11:02 +01:00
Jonas Winkler
633b0dd928 Merge pull request #281 from jonaswinkler/translations_src-locale-en-us-lc-messages-django-po--dev_de
Translate '/src/locale/en-us/LC_MESSAGES/django.po' in 'de'
2021-01-06 21:10:44 +01:00
jonaswinkler
cad2f77490 update dependencies 2021-01-06 21:09:28 +01:00
transifex-integration[bot]
a40448a350 Apply translations in de
translation completed for the source file '/src/locale/en-us/LC_MESSAGES/django.po'
on the 'de' language.
2021-01-06 20:04:15 +00:00
transifex-integration[bot]
01df596dc7 Translate /src-ui/messages.xlf in de
translation completed for the source file '/src-ui/messages.xlf'
on the 'de' language.
2021-01-06 19:58:38 +00:00
jonaswinkler
176b0416cd last translation updates before the next version. 2021-01-06 20:51:56 +01:00
jonaswinkler
b0449d59da changelog 2021-01-06 20:44:06 +01:00
Jonas Winkler
804222d68a Merge pull request #270 from shamoon/fix/issue-267
Allow 'reset' filters on saved views
2021-01-06 20:39:32 +01:00
Michael Shamoon
858bca0f7d More efficient rule equivalency checking 2021-01-06 11:12:43 -08:00
Michael Shamoon
ac459b84c6 Same thing, wait for promise to return =/ 2021-01-06 11:12:13 -08:00
Michael Shamoon
716005fbd2 restore function was lost in merge 2021-01-06 10:57:13 -08:00
Michael Shamoon
086dccc177 Move back list reload for network action 2021-01-06 07:59:46 -08:00
Michael Shamoon
e13dbe4881 Move variable 2021-01-06 07:57:33 -08:00
Michael Shamoon
6a16bdf5fd Merge remote-tracking branch 'upstream/dev' into fix/issue-267 2021-01-06 07:55:19 -08:00
jonaswinkler
f3b46f50bf move settings 2021-01-06 16:53:58 +01:00
Michael Shamoon
14a2ad2b0d Change detection of modified filter rules to wait for filter editor changes only 2021-01-06 07:53:48 -08:00
jonaswinkler
fb539865e0 add ASN in brackets on small cards #268 2021-01-06 16:46:39 +01:00
jonaswinkler
7d92caccf0 dependency update 2021-01-06 16:46:18 +01:00
jonaswinkler
2e71eee7b4 downgrade OCRmyPDF until file handle issues are fixed 2021-01-06 16:46:01 +01:00
Michael Shamoon
507085ee7b Move list reload after network action completes 2021-01-06 07:30:53 -08:00
jonaswinkler
4690b273cc changelog 2021-01-06 14:33:35 +01:00
jonaswinkler
335bdb820f Merge branch 'dev' of github.com:jonaswinkler/paperless-ng into dev 2021-01-06 14:27:59 +01:00
Jonas Winkler
b17d9f850e Merge pull request #260 from shamoon/feature/remote-user
Feature: authentication via HTTP_REMOTE_USER
2021-01-06 14:27:14 +01:00
jonaswinkler
7f8ba75d90 update build scripts 2021-01-06 14:19:46 +01:00
jonaswinkler
842b951549 add settings menu item 2021-01-06 14:13:52 +01:00
jonaswinkler
f373211281 tests for pre and post consume script 2021-01-06 14:08:44 +01:00
jonaswinkler
c5500db9ef changelog 2021-01-06 14:08:05 +01:00
Mark Schmitt
729d2da764 Remove command - should be unnecessary 2021-01-06 10:22:24 +01:00
Mark Schmitt
2587d7fec8 Remove comment from yaml 2021-01-06 10:20:31 +01:00
Mark Schmitt
a6c6f64453 Use another python action instead 2021-01-06 09:10:45 +01:00
Mark Schmitt
b31bfeebd7 Try to make pip and pipenv use the installed python version 2021-01-06 09:05:14 +01:00
jonaswinkler
e107d5df6f fixes #153, adds option for inline attachments and filename filters 2021-01-06 02:40:08 +01:00
jonaswinkler
6e84668884 fix login/logout pages 2021-01-06 01:16:16 +01:00
jonaswinkler
63d2dcc1f7 fix some translations 2021-01-05 23:36:31 +01:00
jonaswinkler
0ee6426eb5 fixes #278 2021-01-05 22:11:42 +01:00
jonaswinkler
ac2cac6edc fix missing translation. 2021-01-05 14:57:56 +01:00
jonaswinkler
73682d22d6 test cases 2021-01-05 13:50:27 +01:00
Jonas Winkler
bef80037da Merge pull request #277 from shamoon/fix/issue-276
Fix more dark mode inconsistencies
2021-01-05 12:33:36 +01:00
Michael Shamoon
056b9638ab Fix some inconsistent elements for dark mode 2021-01-04 19:31:18 -08:00
Jonas Winkler
be94a8e49a Merge pull request #251 from jayme-github/ignore-date
Add option to ignore certain dates in parse_date
2021-01-05 00:19:13 +01:00
jonaswinkler
d153672f0d some changes 2021-01-04 23:05:16 +01:00
jonaswinkler
9f9581e1f8 Merge branch 'dev' into feature-websockets-status 2021-01-04 22:45:56 +01:00
jonaswinkler
7587150f96 gitignore 2021-01-04 18:40:24 +01:00
jonaswinkler
e97b06674c changelog 2021-01-04 18:40:09 +01:00
jonaswinkler
e82700a826 update dependencies 2021-01-04 18:40:02 +01:00
jonaswinkler
05c16e1539 more changes for #118 2021-01-04 17:42:42 +01:00
jonaswinkler
50fa69aca4 clarify polling / inotify #118 2021-01-04 17:36:32 +01:00
jonaswinkler
cb3001ac3b bugfix 2021-01-04 17:31:35 +01:00
jonaswinkler
9bbcb9319c fixes #128 2021-01-04 17:08:52 +01:00
jonaswinkler
32f371fcb6 better sorting directive 2021-01-04 15:58:26 +01:00
jonaswinkler
16559e83f5 bugfix 2021-01-04 15:58:04 +01:00
jonaswinkler
052c8c5372 fix sort field order 2021-01-04 15:57:52 +01:00
Mark Schmitt
b0588321e0 Fix yaml 2021-01-04 15:45:12 +01:00
Mark Schmitt
574ab7d696 Add GITHUB_TOKEN to python tests 2021-01-04 15:44:02 +01:00
Mark Schmitt
336b908e8f Only build for 3.6 2021-01-04 15:28:47 +01:00
Mark Schmitt
b41dd2780e Print the env 2021-01-04 15:19:00 +01:00
Mark Schmitt
7e99d7515f Try manually replacing the python-version 2021-01-04 15:17:13 +01:00
Mark Schmitt
c9de592832 Try to reproduce exactly what's done in the travis build to test 2021-01-04 15:10:16 +01:00
Mark Schmitt
69ac7b9bcf Revert python version in Pipfile to 3.6 2021-01-04 15:00:35 +01:00
jonaswinkler
8268607a56 add french to paperless 2021-01-04 14:15:34 +01:00
jonaswinkler
c33e9245bf Merge branch 'dev' of github.com:jonaswinkler/paperless-ng into dev 2021-01-04 13:59:14 +01:00
Jonas Winkler
4d5166d568 Merge pull request #272 from jonaswinkler/translations_src-ui-messages-xlf--dev_fr
Translate '/src-ui/messages.xlf' in 'fr'
2021-01-04 12:44:00 +01:00
Jonas Winkler
fdc8060071 Merge pull request #273 from jonaswinkler/translations_src-locale-en-us-lc-messages-django-po--dev_fr
Translate '/src/locale/en-us/LC_MESSAGES/django.po' in 'fr'
2021-01-04 12:43:36 +01:00
transifex-integration[bot]
e139ce77ee Apply translations in fr
translation completed for the source file '/src/locale/en-us/LC_MESSAGES/django.po'
on the 'fr' language.
2021-01-04 11:39:33 +00:00
transifex-integration[bot]
ed6f2e40cf Translate /src-ui/messages.xlf in fr
translation completed for the source file '/src-ui/messages.xlf'
on the 'fr' language.
2021-01-04 11:36:18 +00:00
Mark Schmitt
05f57249d6 Only build python 3.7 and say so in the Pipfile too 2021-01-04 12:24:48 +01:00
Mark Schmitt
e91befabc0 Revert job strategy matrix change 2021-01-04 12:22:35 +01:00
Mark Schmitt
2e641b0e30 Explicitly set ubuntu-20.04 as OS and install dev dependencies 2021-01-04 12:18:56 +01:00
Michael Shamoon
7e36986a26 Clearing filters on saved views should reset them to initial rules 2021-01-04 00:20:10 -08:00
Fabian Koller
586db3bc5e Deploy role to ansible galaxy
Happens only when a new tag is pushed
2021-01-04 06:42:34 +01:00
Fabian Koller
51fd19c315 Switch to github actions 2021-01-04 06:42:34 +01:00
Michael Shamoon
426ad30a52 Refactor to extend RemoteUserMiddleware & add authentication for Django 2021-01-03 21:21:39 -08:00
jonaswinkler
111ed38cce fixes #121 2021-01-04 00:38:29 +01:00
jonaswinkler
e07128a145 don't run post-consume script inside transaction #259 2021-01-04 00:03:31 +01:00
jonaswinkler
610fa075f6 fixed missing (filtered) text 2021-01-03 23:56:13 +01:00
jonaswinkler
5e75d84920 add dutch language 2021-01-03 22:25:12 +01:00
Jonas Winkler
4d97a825d9 Merge pull request #261 from jonaswinkler/translations_src-locale-en-us-lc-messages-django-po--dev_nl_NL
Translate '/src/locale/en-us/LC_MESSAGES/django.po' in 'nl_NL'
2021-01-03 21:45:31 +01:00
Jonas Winkler
bac739a6d9 Merge pull request #262 from jonaswinkler/translations_src-ui-messages-xlf--dev_nl_NL
Translate '/src-ui/messages.xlf' in 'nl_NL'
2021-01-03 21:45:22 +01:00
jonaswinkler
d935dcd350 fixes #98 2021-01-03 21:44:53 +01:00
jayme-github
be2061b74d Add PAPERLESS_IGNORE_DATES to docs 2021-01-03 14:47:04 +01:00
jayme-github
2aa2086dfb Add missing config options to example file 2021-01-03 14:35:28 +01:00
transifex-integration[bot]
a89d4ee434 Translate /src-ui/messages.xlf in nl_NL
translation completed for the source file '/src-ui/messages.xlf'
on the 'nl_NL' language.
2021-01-03 12:28:10 +00:00
transifex-integration[bot]
cd5d762cbc Apply translations in nl_NL
translation completed for the source file '/src/locale/en-us/LC_MESSAGES/django.po'
on the 'nl_NL' language.
2021-01-03 12:23:57 +00:00
jonaswinkler
a96ab9a9a4 form field validation (much better error messages) 2021-01-03 13:09:16 +01:00
Michael Shamoon
f0a1aed029 Merge remote-tracking branch 'upstream/dev' into feature/remote-user 2021-01-03 00:38:10 -08:00
Michael Shamoon
7b56ad9dad Allow authentication via HTTP_REMOTE_USER 2021-01-03 00:37:19 -08:00
jonaswinkler
e05f365e6a fix "ng serve" 2021-01-03 01:25:35 +01:00
jonaswinkler
c15e94f759 bugfix 2021-01-03 01:25:26 +01:00
transifex-integration[bot]
d93ec0d5c7 Translate /src-ui/messages.xlf in de
at least 80% translated for the source file '/src-ui/messages.xlf'
on the 'de' language.

 Manual sync of partially translated files: untranslated content is included with an empty translation or source language content depending on file format
2021-01-02 23:58:23 +00:00
transifex-integration[bot]
74cf5373b9 Apply translations in de
at least 80% translated for the source file '/src/locale/en-us/LC_MESSAGES/django.po'
on the 'de' language.

 Manual sync of partially translated files: untranslated content is included with an empty translation or source language content depending on file format
2021-01-02 23:58:17 +00:00
transifex-integration[bot]
4ddc034e9c Apply translations in nl_NL
at least 80% translated for the source file '/src/locale/en-us/LC_MESSAGES/django.po'
on the 'nl_NL' language.

 Manual sync of partially translated files: untranslated content is included with an empty translation or source language content depending on file format
2021-01-02 23:58:13 +00:00
Jonas Winkler
061dc04755 Merge pull request #248 from shamoon/fix/issue-164
Hide matching pattern if algorithm is auto
2021-01-02 16:51:34 +01:00
Michael Shamoon
0e4597131b Also hide case insensitive checkbox for auto matching algorithm 2021-01-02 07:24:48 -08:00
jonaswinkler
57f77c4657 fix test case 2021-01-02 15:52:02 +01:00
jonaswinkler
89d6e422f5 fix bugs and test cases 2021-01-02 15:37:27 +01:00
jonaswinkler
520f92503f Merge branch 'dev' of github.com:jonaswinkler/paperless-ng into dev 2021-01-02 15:31:08 +01:00
jonaswinkler
4cef4adc7e config file 2021-01-02 15:30:52 +01:00
jonaswinkler
e97ff3d671 code style 2021-01-02 15:26:09 +01:00
jonaswinkler
97e96d02f2 test cases 2021-01-02 15:25:13 +01:00
jayme-github
654ee4e62e Add option to ignore certain dates in parse_date
PAPERLESS_IGNORE_DATES allows to specify a comma separated list of dates
to ignore during date parsing (from filename and content). This can be
used so specify dates that do appear often in documents but are usually
not the documents creation date (like your date of birth).
2021-01-02 15:20:49 +01:00
Jonas Winkler
87fe1be1ed Merge pull request #250 from jonaswinkler/translations_src-ui-messages-xlf--dev_de
Translate '/src-ui/messages.xlf' in 'de'
2021-01-02 14:45:43 +01:00
transifex-integration[bot]
4d7d3afc7d Translate /src-ui/messages.xlf in de
translation completed for the source file '/src-ui/messages.xlf'
on the 'de' language.
2021-01-02 13:19:36 +00:00
jonaswinkler
7bca5bf40e Merge branch 'dev' of github.com:jonaswinkler/paperless-ng into dev 2021-01-02 14:19:02 +01:00
jonaswinkler
158e83c425 fixed quotes 2021-01-02 14:18:20 +01:00
Jonas Winkler
fa0ccff5b2 Merge pull request #249 from jonaswinkler/translations_src-ui-messages-xlf--dev_de
Translate '/src-ui/messages.xlf' in 'de'
2021-01-02 12:57:59 +01:00
transifex-integration[bot]
a0505aa8e9 Translate /src-ui/messages.xlf in de
translation completed for the source file '/src-ui/messages.xlf'
on the 'de' language.
2021-01-02 11:56:20 +00:00
jonaswinkler
86677ee6b4 messages updates 2021-01-02 12:54:25 +01:00
jonaswinkler
eb91ac0c3c cleared up some plural forms 2021-01-02 12:52:10 +01:00
Mark Schmitt
a21fb36cd2 github-actions: readding previously removed "-n auto"
possibly this is fixed by the wheel dependency that was missing before.
2021-01-02 11:33:56 +01:00
Mark Schmitt
28209bb474 github-actions: also install wheel
There's an error about pip wheel not being available and falling back
to some legacy version. Let's see if this helps.
2021-01-02 11:30:12 +01:00
Mark Schmitt
376efcde27 github-actions: removing unsupported parameter
I don't understand what the "-n auto" parameter does, pytest doesn't either
(in the version installed) - so removing it to see if that produces something
usable.
2021-01-02 11:27:38 +01:00
Mark Schmitt
4684d19953 github-actions: readding explicit install
explicitly install pytest, pytest-cov and coveralls.
I think travis already did that and we need to explicitly do so now.
removed installing dev-dependencies, do it explicitly.
(just trying to reproduce the travis-ci build)
2021-01-02 11:23:30 +01:00
Mark Schmitt
4bea504690 Try o make pipenv also install dev dependencies 2021-01-02 09:44:08 +01:00
Mark Schmitt
90f4ccfb94 Remove cache to see if that helps with pytest-cov issues 2021-01-02 09:41:21 +01:00
Mark Schmitt
d292f71007 Add pytest-cov to install 2021-01-02 09:31:20 +01:00
Mark Schmitt
4a45a77753 Add pytest to install step 2021-01-02 09:23:49 +01:00
Mark Schmitt
ef28ae8117 Move sphinx step below tests step as it used to be 2021-01-02 09:19:58 +01:00
Mark Schmitt
b8b0b61e67 Execute pip commands one after the other to find issue 2021-01-02 09:15:10 +01:00
Mark Schmitt
41c1b711c2 Use sudo for apt 2021-01-02 09:08:19 +01:00
Mark Schmitt
8ab251c5f7 Execute python tests 2021-01-02 09:07:05 +01:00
Michael Shamoon
659c7cdbd8 Hide matching pattern if algorithm is auto 2021-01-01 20:57:57 -08:00
jonaswinkler
ef9d8c64fc layout fix 2021-01-02 02:01:07 +01:00
jonaswinkler
e6927a196f Merge branch 'dev' of github.com:jonaswinkler/paperless-ng into dev 2021-01-02 01:57:40 +01:00
jonaswinkler
729e5ee0e1 compile messages build step 2021-01-02 01:57:26 +01:00
Jonas Winkler
a3f214b6ba Merge pull request #245 from jonaswinkler/translations_src-locale-en-us-lc-messages-django-po--dev_de
Translate '/src/locale/en-us/LC_MESSAGES/django.po' in 'de'
2021-01-02 01:31:05 +01:00
transifex-integration[bot]
a2f0a9687d Apply translations in de
translation completed for the source file '/src/locale/en-us/LC_MESSAGES/django.po'
on the 'de' language.
2021-01-02 00:30:20 +00:00
jonaswinkler
820920839d update some messages 2021-01-02 01:26:34 +01:00
jonaswinkler
0d5d8f7c80 add missing migrations 2021-01-02 01:21:44 +01:00
jonaswinkler
bf198f37db fix locale discovery by django app 2021-01-02 01:19:06 +01:00
jonaswinkler
c6af2044ce bugfix 2021-01-02 01:18:32 +01:00
jonaswinkler
a9b331c5fd missed a translation string 2021-01-02 01:13:34 +01:00
jonaswinkler
cb88ffff79 Merge branch 'dev' into feature-localization 2021-01-02 00:46:35 +01:00
jonaswinkler
bcf17bfdc0 fix some translation issues 2021-01-02 00:45:23 +01:00
jonaswinkler
110ef17ed8 fix angular language mapping 2021-01-02 00:44:14 +01:00
Jonas Winkler
348d07757b Merge pull request #244 from jonaswinkler/translations_src-ui-messages-xlf--dev_de
Translate '/src-ui/messages.xlf' in 'de'
2021-01-02 00:43:09 +01:00
transifex-integration[bot]
eaeda47690 Translate /src-ui/messages.xlf in de
translation completed for the source file '/src-ui/messages.xlf'
on the 'de' language.
2021-01-01 23:42:43 +00:00
jonaswinkler
fdf330276e Merge branch 'dev' into feature-localization 2021-01-02 00:15:03 +01:00
Jonas Winkler
dace3dc803 Merge pull request #243 from jonaswinkler/translations_src-ui-messages-xlf--dev_de_DE
Translate '/src-ui/messages.xlf' in 'de_DE'
2021-01-02 00:11:42 +01:00
transifex-integration[bot]
70d48b39f3 Translate /src-ui/messages.xlf in de_DE
translation completed for the source file '/src-ui/messages.xlf'
on the 'de_DE' language.
2021-01-01 23:11:08 +00:00
jonaswinkler
d9f5bc7681 Merge branch 'dev' of github.com:jonaswinkler/paperless-ng into dev 2021-01-02 00:10:36 +01:00
jonaswinkler
52aa78acab fix some messages 2021-01-02 00:10:22 +01:00
Jonas Winkler
b73ec76146 Merge pull request #242 from jonaswinkler/translations_src-ui-messages-xlf--dev_de_DE
Translate '/src-ui/messages.xlf' in 'de_DE'
2021-01-02 00:07:59 +01:00
transifex-integration[bot]
70e49a61fa Translate /src-ui/messages.xlf in de_DE
translation completed for the source file '/src-ui/messages.xlf'
on the 'de_DE' language.
2021-01-01 23:06:19 +00:00
jonaswinkler
7904a3efb7 Merge branch 'dev' of github.com:jonaswinkler/paperless-ng into dev 2021-01-02 00:00:42 +01:00
Jonas Winkler
717a4951fd Merge pull request #241 from shamoon/fix/dark-mode-fixes
Visual fixes to dark mode elements
2021-01-01 23:59:58 +01:00
Michael Shamoon
a3b4349b1c Increase contrast of text, fix large card anchor color
Increased brightness of dark-mode primary + danger, use darker bg for tables, fix some button hover/active states
2021-01-01 14:50:25 -08:00
jonaswinkler
4b74cd5677 fix #236 2021-01-01 23:27:55 +01:00
jonaswinkler
6d554bace1 fix #238 2021-01-01 23:09:10 +01:00
jonaswinkler
c4367818b7 better matching algorithm descriptions 2021-01-01 23:08:02 +01:00
jonaswinkler
ebdddc4fe4 fix metadata column 2021-01-01 22:44:10 +01:00
jonaswinkler
bac0dbb70b messages 2021-01-01 22:38:33 +01:00
jonaswinkler
0a7412424d refactored app-view service 2021-01-01 22:38:26 +01:00
jonaswinkler
d5601b7ec0 remove active class from user menu 2021-01-01 22:29:25 +01:00
jonaswinkler
b79d88d5ef Merge branch 'dev' of github.com:jonaswinkler/paperless-ng into dev 2021-01-01 22:26:54 +01:00
Jonas Winkler
851d9cc313 Merge pull request #240 from shamoon/feature/updated-nav-bar
Feature: updated main navbar
2021-01-01 22:26:25 +01:00
jonaswinkler
40ef375c15 supply file_name for tika parser 2021-01-01 22:19:43 +01:00
jonaswinkler
de32addf76 fix up the tika parser 2021-01-01 21:59:21 +01:00
Michael Shamoon
1e541b688d brand width rem 2021-01-01 12:52:35 -08:00
jonaswinkler
c05bfb894a remove duplicate code 2021-01-01 21:50:45 +01:00
jonaswinkler
279e269a66 update start_services.sh script 2021-01-01 21:50:32 +01:00
jonaswinkler
8490b65bcc update lockfile 2021-01-01 21:50:23 +01:00
Michael Shamoon
1234634ba3 Not sure why Typescript complained about this 2021-01-01 12:49:48 -08:00
Michael Shamoon
3d2d9cb3a2 Remove unused line 2021-01-01 12:43:19 -08:00
Michael Shamoon
7740961697 Spaces 2021-01-01 12:42:58 -08:00
Michael Shamoon
22c77e7be5 Merge remote-tracking branch 'upstream/dev' into feature/updated-nav-bar 2021-01-01 12:42:01 -08:00
Michael Shamoon
6566e36141 Mistakenly overwritten files from merge of dev branch 2021-01-01 12:41:05 -08:00
Michael Shamoon
a4e5d36a02 Linting 2021-01-01 12:36:19 -08:00
Michael Shamoon
54a0da8151 Dark mode compatability 2021-01-01 12:29:52 -08:00
Michael Shamoon
dc525783ee search icon position 2021-01-01 12:25:16 -08:00
Michael Shamoon
a5ae056c9b Merge remote-tracking branch 'upstream/dev' into feature/updated-nav-bar 2021-01-01 12:16:55 -08:00
Jonas Winkler
e0c87fc556 Merge pull request #235 from sisao/dev
self serve pdf.worker.min.js
2021-01-01 21:13:59 +01:00
Jonas Winkler
fb38aacde4 Merge branch 'dev' into dev 2021-01-01 21:13:49 +01:00
jonaswinkler
564f3b9170 fix some messages 2021-01-01 20:23:32 +01:00
Jonas Winkler
9cb14e2815 Merge pull request #204 from jovandeginste/paperless_tika
WIP: Add the new paperless_tika parser
2021-01-01 20:21:18 +01:00
Jonas Winkler
54c023523f Merge pull request #203 from shamoon/feature/dark-mode
Feature: dark mode
2021-01-01 20:18:39 +01:00
Mark Schmitt
97d068c3bb Removed separate build step
It looks like part of the build step is repeated in the push step
due to bad caching possibly.
2021-01-01 12:53:16 +01:00
Michael Shamoon
f090537ef4 tweak username display, dropdown size + spacing 2020-12-31 16:23:08 -08:00
Mark Schmitt
3f01a9e1e2 Update docker-publish.yml 2020-12-31 19:32:04 +01:00
Michael Shamoon
be7bf5288b Fix alignment 2020-12-31 07:52:14 -08:00
jonaswinkler
71d7aa3fb2 update message file 2020-12-31 16:00:24 +01:00
jonaswinkler
1b8c4bb1a5 Merge branch 'dev' into feature-localization 2020-12-31 15:59:47 +01:00
jonaswinkler
fddda75f75 more translation 2020-12-31 15:59:12 +01:00
Stefan
aa7e2594e2 self serve pdf.worker.min.js 2020-12-31 15:07:35 +01:00
Jo Vandeginste
5236f4e58d Refactor after feedback:
- rename PAPERLESS_TIKA to PAPERLESS_TIKA_ENABLED
- all other env params now start with PAPERLESS_TIKA
- convert_to_pdf as class instance method
- smaller details

Signed-off-by: Jo Vandeginste <Jo.Vandeginste@kuleuven.be>
2020-12-31 14:41:47 +01:00
Mark Schmitt
916ea79e57 Experimenting with github actions 2020-12-31 13:27:22 +01:00
Mark Schmitt
b855222ee1 Removing travis in favor of github actions 2020-12-31 13:24:57 +01:00
Fabian Koller
fc31195fa0 Update to 0.9.11 2020-12-31 11:47:54 +01:00
jonaswinkler
70cb27bf0a bump versions 2020-12-31 11:23:03 +01:00
jonaswinkler
2a744a3a83 roll back changes #184 #227 2020-12-31 11:12:46 +01:00
Fabian Koller
be56707a8a Change default OCRmyPDF args
Clean is hardcoded as True, anyway
Deskew breaks tesseract redo
2020-12-31 10:01:57 +01:00
Fabian Koller
a74404170d Update to 0.9.10 2020-12-31 09:53:29 +01:00
Michael Shamoon
2e544326e5 Toggle caret tweaks 2020-12-31 00:35:54 -08:00
Michael Shamoon
d42c13a9c6 Reorganized navbar
Updated search field, new user menu
2020-12-30 23:39:07 -08:00
Michael Shamoon
020696fb17 Fix overflowing document titles on homepage mobile view 2020-12-30 23:16:30 -08:00
Michael Shamoon
06bf3e27d3 Merge remote-tracking branch 'upstream/dev' into feature/dark-mode 2020-12-30 19:50:29 -08:00
jonaswinkler
3b17f9d6ec changelog 2020-12-31 02:40:43 +01:00
jonaswinkler
9c8b43f602 Merge branch 'dev' 2020-12-31 02:27:45 +01:00
jonaswinkler
70f052cb5c changelog 2020-12-31 02:15:16 +01:00
jonaswinkler
e5c10fcd93 Merge branch 'master' into dev 2020-12-31 02:15:01 +01:00
jonaswinkler
9eb377703e fix hover for check boxes 2020-12-31 01:58:32 +01:00
jonaswinkler
4c63dad309 fix sorting for "not assigned" 2020-12-31 01:43:04 +01:00
jonaswinkler
45e52aa985 add the manifest to the frontend entry page #219 2020-12-31 01:20:38 +01:00
jonaswinkler
6066d00c5e intelligent sorting of the bulk edit drop downs 2020-12-31 01:07:28 +01:00
jonaswinkler
59a10a8127 Merge branch 'dev' of github.com:jonaswinkler/paperless-ng into dev 2020-12-31 01:07:07 +01:00
Jonas Winkler
6dc8edea88 Merge pull request #219 from zjean/feature/add-to-home
Improve mobile add to homes screen support
2020-12-31 01:02:05 +01:00
jonaswinkler
ef1ee8e0c0 fixes a bug with invisible selection 2020-12-30 23:34:50 +01:00
jonaswinkler
1428b26703 this immensely improves resposibility 2020-12-30 23:34:21 +01:00
jonaswinkler
63b841c496 fixes #224 2020-12-30 23:01:34 +01:00
jonaswinkler
208f4291d6 fixes #222 2020-12-30 21:54:36 +01:00
jonaswinkler
750d08ec01 add more translation 2020-12-30 21:48:34 +01:00
jonaswinkler
8d665aeac4 Merge branch 'dev' into feature-localization 2020-12-30 19:52:07 +01:00
jonaswinkler
a0f983f05d codestyle 2020-12-30 17:20:03 +01:00
jonaswinkler
1df922ef16 Do file renaming first, since this is the important step, and indexing takes a while. 2020-12-30 17:18:27 +01:00
jonaswinkler
beed820602 improve file renaming speed. 2020-12-30 17:17:36 +01:00
jonaswinkler
b6722fdd84 update angular messages 2020-12-30 17:14:08 +01:00
transifex-integration[bot]
eb47fb5501 Translate /src-ui/messages.xlf in de_DE
at least 50% translated for the source file '/src-ui/messages.xlf'
on the 'de_DE' language.

 Manual sync of partially translated files: untranslated content is included with an empty translation or source language content depending on file format
2020-12-30 15:35:33 +00:00
jonaswinkler
aacf7ba275 language fixes 2020-12-30 16:29:45 +01:00
jonaswinkler
400392655e adds a command to regenerate thumbnails #218 2020-12-30 15:46:56 +01:00
jonaswinkler
713985f259 fixes #218 2020-12-30 15:12:16 +01:00
Jan Wiebe
664280ccce Add newline to end of file 2020-12-30 14:56:18 +01:00
Jan Wiebe
9fe6c5c3a9 Fix indentation 2020-12-30 14:55:49 +01:00
Jan Wiebe
ab5098a036 Fix indentation of angular.json 2020-12-30 14:52:20 +01:00
Jan Wiebe
b092bb6848 Add manifest file to add to home screen and launch in full screen mode. 2020-12-30 14:45:15 +01:00
jonaswinkler
17ded12375 bugfix 2020-12-30 12:21:13 +01:00
jonaswinkler
118149c539 more translation work 2020-12-30 11:33:56 +01:00
Jonas Winkler
57da323cea Update README.md 2020-12-30 03:39:25 +01:00
Michael Shamoon
ebe2ba401d Consistent settings screen 2020-12-29 16:58:19 -08:00
Michael Shamoon
a67443c195 Compatability with new settings service 2020-12-29 16:53:42 -08:00
Michael Shamoon
2e0d36c4d9 Merge remote-tracking branch 'upstream/dev' into feature/dark-mode 2020-12-29 16:53:31 -08:00
jonaswinkler
db4b621631 angular message file 2020-12-30 01:48:06 +01:00
jonaswinkler
a91958bfe1 add translation support to the backend #215 2020-12-30 01:39:06 +01:00
jonaswinkler
5395208b00 add initial localization support for the front end #215 2020-12-30 00:26:06 +01:00
jonaswinkler
d909010f08 angular message file 2020-12-30 00:24:42 +01:00
Jonas Winkler
5c7b65163e Merge pull request #214 from C0nsultant/patch-2
Fix ENV var name for user args in example config
2020-12-30 00:00:11 +01:00
Fabian Koller
e4e4efcba7 Fix creation of user arg
json.loads is picky in that is expects true json, not yaml from ansible
2020-12-29 23:54:22 +01:00
Fabian Koller
9f18d0ad45 Fix ENV var name for user args in example config
The actual string used when looking up the user arguments ends with an S: `PAPERLESS_OCR_USER_ARGS`
2020-12-29 23:52:27 +01:00
jonaswinkler
2de3894d67 more localization tags 2020-12-29 23:41:59 +01:00
jonaswinkler
03c6a4e18e more localization #123 2020-12-29 23:37:33 +01:00
jonaswinkler
f9ab8d3b35 more localization tags #123 2020-12-29 23:34:04 +01:00
Fabian Koller
14f87f5aee Harden systemd service files, drop perms further 2020-12-29 23:30:59 +01:00
Fabian Koller
bb569b4e78 Integrate OCRmyPDF args into ansible config 2020-12-29 22:43:52 +01:00
jonaswinkler
ef63ec40d9 changelog 2020-12-29 22:02:03 +01:00
jonaswinkler
761a6a4264 plural form fix 2020-12-29 22:01:56 +01:00
jonaswinkler
8139ecfd39 version bump 2020-12-29 22:01:37 +01:00
jonaswinkler
fb09f67899 bugfixes 2020-12-29 22:01:18 +01:00
Fabian Koller
f075384b44 Move paperless.conf to /etc, drop permissions 2020-12-29 21:55:59 +01:00
Jo Vandeginste
b8e8bf3dd4 Add the new paperless_tika parser
This parser will use an external Tika and Gotenberg server to parse
"Office" documents (.doc, .xls, .odt, etc.)

Signed-off-by: Jo Vandeginste <Jo.Vandeginste@kuleuven.be>
2020-12-29 21:51:21 +01:00
jonaswinkler
d690b34ee0 added invalid PDF document with BOM marker 2020-12-29 21:02:45 +01:00
jonaswinkler
e24b40de29 more tests 2020-12-29 21:01:18 +01:00
Fabian Koller
bf3ffc29a9 Make role compatible with ansible 2.7
Recursive remote copy is supported starting with 2.8 only
Indentation behaviour in literal yaml strings seems to have changed
Regex logic for ImageMagic was flawed (no idea why this worked before)
2020-12-29 20:59:49 +01:00
jonaswinkler
6581cff8dc more tests 2020-12-29 20:55:27 +01:00
jonaswinkler
5c3ae44021 fix up gunicorn conf 2020-12-29 18:23:08 +01:00
jonaswinkler
2b341afcae fix some bugs with the filter editor 2020-12-29 17:32:56 +01:00
jonaswinkler
7f4cfc0b76 fix a couple issues with the bulk editor 2020-12-29 17:20:45 +01:00
jonaswinkler
b2327d6fde more settings 2020-12-29 17:09:07 +01:00
jonaswinkler
f964dd5935 added configuration option for the font #197 #207 2020-12-29 12:26:41 +01:00
Michael Shamoon
4ecd5ada06 Semantic correction 2020-12-28 19:07:12 -08:00
Michael Shamoon
f770f0444a Fix hidden ng-select contents on focus 2020-12-28 17:49:10 -08:00
jonaswinkler
39d1c051cf use the actual name of the package #205 2020-12-29 02:25:39 +01:00
Jonas Winkler
5622e13802 Merge pull request #206 from MarcoBuster/fix-missing-libxslt-dev
Add missing libxslt-dev
2020-12-29 02:24:15 +01:00
Marco Aceti
d6285cc851 Add libxslt-dev library to Dockerfile build 2020-12-29 01:57:46 +01:00
Michael Shamoon
777d8b4609 Fix bg color on large cards 2020-12-28 16:52:51 -08:00
Michael Shamoon
edb9264d78 Many small fixes to theme & inline logo 2020-12-28 16:46:08 -08:00
jonaswinkler
6b708c5ed3 Merge branch 'patch-2' of https://github.com/jovandeginste/paperless-ng into jovandeginste-patch-2 2020-12-29 01:08:46 +01:00
jonaswinkler
1dd2386fa5 messed up, restore functionality 2020-12-28 23:53:18 +01:00
Michael Shamoon
e6164eb1ab Merge branch 'dev' into feature/dark-mode 2020-12-28 14:28:53 -08:00
jonaswinkler
bd01b821ec possible fix for #201 2020-12-28 23:24:08 +01:00
Michael Shamoon
b44ca770a5 Fix some white partial pixels around borders 2020-12-28 14:20:00 -08:00
jonaswinkler
9093ac5901 more localization tags #123 2020-12-28 22:54:49 +01:00
Jo Vandeginste
755da317ea Update settings.py 2020-12-28 22:37:53 +01:00
Jo Vandeginste
6834c70bae Allow extending INSTALLED_APPS via environment
This allows a user to add "apps" (aka parsers) through the environment.

Especially useful when using Docker, and adding a test-parser.

Usage:

```yaml
services:
  webserver:
    environment:
      PAPERLESS_APPS: paperless_tika.apps.PaperlessTikaConfig
```

You can add more by separating them with a `,`:

```yaml
PAPERLESS_APPS: app1,app2
```
2020-12-28 22:19:30 +01:00
Michael Shamoon
1297c0911c Theme tweaks
See https://github.com/jonaswinkler/paperless-ng/issues/194
2020-12-28 12:56:00 -08:00
Michael Shamoon
ebcf4e2d81 Set on init 2020-12-28 12:54:00 -08:00
jonaswinkler
bd3a2306d6 better toasts 2020-12-28 21:52:09 +01:00
jonaswinkler
27666da4e9 more translation tags #123 2020-12-28 21:29:28 +01:00
Michael Shamoon
70f7b614e6 Merge branch 'dev' into feature/dark-mode 2020-12-28 10:26:33 -08:00
jonaswinkler
9bf4ce25b2 Merge branch 'dev' into travis-multiarch-builds 2020-12-28 17:54:48 +01:00
jonaswinkler
d51848cdc0 Merge branch 'travis-multiarch-builds' of github.com:jonaswinkler/paperless-ng into travis-multiarch-builds 2020-12-28 17:54:42 +01:00
jonaswinkler
7d86ee32af Merge branch 'master' into dev 2020-12-28 17:25:00 +01:00
jonaswinkler
70c02a1c82 fixes #185 2020-12-28 17:20:07 +01:00
jonaswinkler
39637fc4aa fixes #175 2020-12-28 17:09:19 +01:00
jonaswinkler
1de7a490b4 #186 allow filtering for documents with no correspondents / tags / types 2020-12-28 17:04:53 +01:00
jonaswinkler
6d4aa76405 fixes #196 2020-12-28 15:59:06 +01:00
jonaswinkler
27ae4f6b1e fixes #197 2020-12-28 15:48:35 +01:00
jonaswinkler
d6e733c56f add more localization tags #123 2020-12-28 15:39:53 +01:00
Jonas Winkler
7497e0f6b9 Merge pull request #198 from MarkSchmitt/travis-multiarch-builds
Travis multi-arch builds: only build and push docker containers on special branches and tags
2020-12-28 13:36:33 +01:00
jonaswinkler
aa6e96e54d fix pycodestyle 2020-12-28 13:33:58 +01:00
jonaswinkler
3d173a13ab move the two post bulk edit tasks into one 2020-12-28 13:31:22 +01:00
Fabian Koller
bdf2e29843 Verify role for Ubuntu 20.04 2020-12-28 12:51:49 +01:00
jonaswinkler
7beb8a0929 fix enter select 2020-12-28 12:51:09 +01:00
jonaswinkler
8af0259671 rework the bulk editor 2020-12-28 12:36:26 +01:00
jonaswinkler
67953c98a9 remove some non-required stuff 2020-12-28 12:32:36 +01:00
jonaswinkler
527c533958 improve performance of the toggle dropdown button 2020-12-28 12:32:21 +01:00
jonaswinkler
544ca8d008 add ability to manually clear the cache on matching models 2020-12-28 12:31:50 +01:00
jonaswinkler
bd02c78966 fix the filter pipe 2020-12-28 12:31:30 +01:00
jonaswinkler
9e311241b3 rename some stuff 2020-12-28 12:31:14 +01:00
jonaswinkler
e228e18f04 it must have been late when I tried to do this 2020-12-28 12:29:53 +01:00
jonaswinkler
e2bea3aee3 add missing index task 2020-12-28 12:29:34 +01:00
Mark Schmitt
ba9b5c50d2 Add stage definitions of test jobs and add test to list of stages
Defining the stages instead of having travis guess them and implicitly build an order
ensures that the test stage is executed before the docker images are built.
2020-12-28 12:24:39 +01:00
Mark Schmitt
61834581d5 Move build condition into separate stages list 2020-12-28 12:22:35 +01:00
Jonas Winkler
08beaf81d5 Update README.md 2020-12-28 12:03:30 +01:00
Fabian Koller
1276419ec6 Add molecule test for role
Only test default installation with jbig2enc and sqlite
2020-12-28 11:28:19 +01:00
Fabian Koller
ef9631ae24 Drop all permissions to paperlessng user
Also make role idempotent
2020-12-28 11:18:24 +01:00
Michael Shamoon
86079a936e Initial theme SCSS 2020-12-27 23:05:52 -08:00
Michael Shamoon
c6acf2f7f6 Prevent FOIT 2020-12-27 23:05:42 -08:00
Michael Shamoon
28b7c3c208 Logo svg inline 2020-12-27 23:05:34 -08:00
Michael Shamoon
75c8cd9967 Dark mode settings logic 2020-12-27 23:05:19 -08:00
jonaswinkler
4fb5dce5e7 selection model 2020-12-28 00:52:28 +01:00
jonaswinkler
b8e7506de4 partial selection model implementation 2020-12-27 23:55:19 +01:00
Mark Schmitt
0560ac2a95 Use conditions to prevent builds on branches / tags other than master, dev and ng-* 2020-12-27 20:01:21 +01:00
Jonas Winkler
131ebf0480 Update README.md 2020-12-27 17:07:33 +01:00
jonaswinkler
80420a99f5 Merge branch 'dev' into feature-bulk-edit 2020-12-27 17:06:17 +01:00
jonaswinkler
6a70369a77 update index after bulk edit operations #195 2020-12-27 17:05:35 +01:00
jonaswinkler
fb83069975 fix test case. 2020-12-27 14:50:57 +01:00
jonaswinkler
f61ecadf76 Merge branch 'dev' of github.com:jonaswinkler/paperless-ng into dev 2020-12-27 14:47:40 +01:00
Jonas Winkler
f040c4e593 Merge pull request #192 from shamoon/fix/ios-safari-input-zoom
Avoid ios safari input zoom
2020-12-27 14:46:20 +01:00
jonaswinkler
c2a47ca4b1 remove "selectionSpansPages" 2020-12-27 13:34:54 +01:00
jonaswinkler
a283b815ef refactor 2020-12-27 13:34:36 +01:00
jonaswinkler
3dd4583ea8 always show count badges 2020-12-27 13:23:11 +01:00
jonaswinkler
bf79b252ad remove "Remove All" 2020-12-27 13:16:37 +01:00
jonaswinkler
a2ad62b310 typing 2020-12-27 13:10:43 +01:00
jonaswinkler
4b9a8f3409 move document count into matching model 2020-12-27 13:07:58 +01:00
jonaswinkler
802bd7fb0d client support for selection data 2020-12-27 12:54:47 +01:00
jonaswinkler
320298e3ff add api method to get selection data 2020-12-27 12:43:05 +01:00
Michael Shamoon
5e5059b2e7 Prevent iOS input zoom 2020-12-26 21:16:12 -08:00
Jonas Winkler
d6d7528668 Merge branch 'growse-patch-2' into dev 2020-12-27 01:49:12 +01:00
Andrew Rowson
3f8c74c4af Updated bind param gunicorn config file to listen on ipv6 2020-12-26 11:53:29 +00:00
jonaswinkler
0a1b810da7 Merge branch 'dev' into feature-bulk-edit 2020-12-26 01:09:12 +01:00
jonaswinkler
25fb9fb185 better selection 2020-12-26 01:08:54 +01:00
jonaswinkler
c547128238 Merge branch 'dev' into feature-bulk-edit 2020-12-25 22:19:10 +01:00
jonaswinkler
99b5e25731 clarify error messages #176 2020-12-25 19:26:27 +01:00
jonaswinkler
20e724da46 fixes #182 2020-12-25 19:24:39 +01:00
jonaswinkler
03838421bc not sure when that got in here 2020-12-25 19:23:53 +01:00
jonaswinkler
b9cf517cd1 front end client support for filtering for no correspondent/document type 2020-12-25 19:06:12 +01:00
jonaswinkler
f7f78d80b7 added isnull filters for document types and correspondents 2020-12-25 19:01:46 +01:00
Jonas Winkler
e63b820c07 Merge pull request #189 from shamoon/feature-bulk-editor
Refactored bulk editor
2020-12-25 16:11:31 +01:00
Michael Shamoon
2ac6a02e31 More simplification 2020-12-25 01:14:56 -08:00
Michael Shamoon
6e79b771ec Refactor bulk editor to be self-contained
See https://github.com/jonaswinkler/paperless-ng/pull/162#issuecomment-750425915
2020-12-25 00:58:17 -08:00
Andrew Rowson
37caf6a64a Gunicorn should bind to both ipv4 and ipv6
As per https://docs.gunicorn.org/en/stable/settings.html#bind
2020-12-24 11:53:20 +00:00
jonaswinkler
198354d07d a couple small changes 2020-12-23 22:45:54 +01:00
jonaswinkler
eec9716ffa more translation markers 2020-12-23 22:34:30 +01:00
jonaswinkler
64d0c7fae6 silence compiler warnings 2020-12-23 18:07:37 +01:00
jonaswinkler
02e81f7ab5 update Dockerfile 2020-12-23 17:03:00 +01:00
jonaswinkler
85cf931d0a Merge branch 'dev' into travis-multiarch-builds 2020-12-23 16:15:46 +01:00
Jonas Winkler
c54d26ed19 Update README.md 2020-12-23 16:09:13 +01:00
jonaswinkler
cffe9fa354 debug log mime type #176 2020-12-23 15:22:28 +01:00
jonaswinkler
46b0776714 fix typo #176 2020-12-23 15:14:24 +01:00
jonaswinkler
929b25a969 add api support for adding and removing many tags simultaneously 2020-12-23 15:13:55 +01:00
jonaswinkler
3c2fac3d28 Merge branch 'feature-bulk-edit' of github.com:jonaswinkler/paperless-ng into feature-bulk-edit 2020-12-23 15:12:50 +01:00
jonaswinkler
9a165e87fd Merge branch 'master' into dev 2020-12-23 15:09:58 +01:00
jonaswinkler
95c4e77ae4 added many localization markers to the front end #123 2020-12-23 15:09:39 +01:00
Jonas Winkler
ba3696566f Merge pull request #162 from shamoon/feature-bulk-editor
Bulk editing UI
2020-12-23 14:42:20 +01:00
Jonas Winkler
6907b91420 Merge pull request #178 from MarkSchmitt/travis-multiarch-builds
Automatic CI/CD multiarch docker builds
2020-12-23 14:35:47 +01:00
Fabian Koller
227934a7f0 Do not clear static files on every run
Django collectstatic knows when files change.
2020-12-23 14:05:35 +01:00
Fabian Koller
089a8c0498 Fix fresh installation
We can't backup a nonexistent folder.
2020-12-23 13:39:16 +01:00
Fabian Koller
92fa978735 Allow running role on all Debian releases
Dynamically template current release string where required.
2020-12-23 13:31:30 +01:00
Mark Schmitt
8135de49f0 Re-enable test steps 2020-12-23 12:13:12 +01:00
Mark Schmitt
ccfa14b9b7 Remove arm32v6 from docker manifest , it is not getting created 2020-12-23 09:14:40 +01:00
Jonas Winkler
6589369e1b Update README.md 2020-12-23 02:29:58 +01:00
Jonas Winkler
9c2c74ad2b Update README.md 2020-12-23 01:51:38 +01:00
jonaswinkler
b7c118afa3 more tests 2020-12-22 21:08:54 +01:00
jonaswinkler
e9b5f8d9f8 api validation, more tests 2020-12-22 20:28:41 +01:00
Fabian Koller
e48294a74b Update to 0.9.9 2020-12-22 19:30:53 +01:00
Fabian Koller
50c5a23de8 add basic ansible role for debian deployment
Currently only Debian 10 buster is supported.
Other Debian versions, Ubuntu and derivates should be easy to integrate.
Database deployment is considered out-of-scope and deferred to the user.
Provides basic upgrade support between releases.
2020-12-22 18:47:02 +01:00
Jonas Winkler
7d676a75a8 Update README.md 2020-12-22 17:26:07 +01:00
jonaswinkler
544e8db722 error in test case 2020-12-22 17:08:30 +01:00
Michael Shamoon
ba066af664 Merge branch 'feature-bulk-edit' into feature-bulk-editor 2020-12-22 07:43:51 -08:00
Jonas Winkler
c4286d0a48 Update README.md 2020-12-22 16:33:41 +01:00
jonaswinkler
1c535e6ff1 Merge branch 'master' of github.com:jonaswinkler/paperless-ng 2020-12-22 15:58:24 +01:00
jonaswinkler
0b9ea5c60f Merge branch 'dev' 2020-12-22 15:58:06 +01:00
jonaswinkler
0fa3c3188d update index after import 2020-12-22 15:53:04 +01:00
jonaswinkler
ebcb2cf694 progress bar for the document importer 2020-12-22 15:50:27 +01:00
jonaswinkler
8dc15352ef changelog layout 2020-12-22 15:22:24 +01:00
jonaswinkler
403de42031 discard selection when switching views 2020-12-22 15:18:42 +01:00
jonaswinkler
b08a5e62d8 documentation 2020-12-22 14:43:16 +01:00
Mark Schmitt
1f62b6d0d4 arm64-graviton2 build requires group:edge 2020-12-22 14:18:11 +01:00
Mark Schmitt
c751fe7520 Switching back to virt: vm as there seems to be a prob with the lxc ones 2020-12-22 14:15:06 +01:00
jonaswinkler
978bb3c339 more change log 2020-12-22 14:13:58 +01:00
jonaswinkler
3e389a3140 versions 2020-12-22 14:09:38 +01:00
jonaswinkler
0dbd598116 changelog 2020-12-22 13:54:41 +01:00
Mark Schmitt
46ecdefde8 Remove steps not necessary to build docker images 2020-12-22 13:43:51 +01:00
Mark Schmitt
e8ea373eb2 Enable manifests support 2020-12-22 13:42:21 +01:00
jonaswinkler
01d10da061 Merge branch 'dev' into feature-bulk-edit 2020-12-22 13:40:24 +01:00
jonaswinkler
0aad31b4bc fixes clearing fields that should not be clearable 2020-12-22 13:39:46 +01:00
jonaswinkler
2f599ca1d3 fixes an issue with open documents not refreshing after bulk operations 2020-12-22 13:32:30 +01:00
Mark Schmitt
162626209c Tell me, what kind of arm64 is it that produces amd64 docker images?
It's weird
2020-12-22 13:27:19 +01:00
jonaswinkler
cd8f99d2c3 Merge branch 'dev' into feature-bulk-edit 2020-12-22 13:04:45 +01:00
jonaswinkler
6968e228e1 increase indexing speed 2020-12-22 13:04:22 +01:00
jonaswinkler
b7d310ef90 more tests 2020-12-22 13:04:08 +01:00
jonaswinkler
1c3b85249c more tests 2020-12-22 13:03:50 +01:00
Mark Schmitt
bf3b110804 Remove accidentially added quote 2020-12-22 12:58:35 +01:00
Mark Schmitt
7d1f931234 Use arm64-gravis instead of regular arm64. See if that is fast enough. 2020-12-22 12:49:36 +01:00
jonaswinkler
147a8774c6 more tests 2020-12-22 12:40:06 +01:00
Michael Shamoon
406f8daa12 TODO comment 2020-12-22 03:32:51 -08:00
Michael Shamoon
0a4a06b991 Singular items dont need removal logic since dropdowns dont support this (yet?) 2020-12-22 03:13:57 -08:00
Michael Shamoon
41e842a9e6 Unify bulk operations logic, working tags assignment and removal 2020-12-22 02:58:20 -08:00
Michael Shamoon
1fb3316436 Fix remove all operations 2020-12-22 02:18:05 -08:00
Michael Shamoon
2f26d07480 Only pass one item to bulk methods for correspondents/doctypes 2020-12-22 02:14:37 -08:00
Michael Shamoon
360fc081bb Completely rewrite change detection, add back remove operations 2020-12-22 02:08:36 -08:00
Michael Shamoon
4cae338479 Merge branch 'feature-bulk-edit' into feature-bulk-editor 2020-12-22 00:19:35 -08:00
jonaswinkler
9ace199422 Merge branch 'dev' into feature-bulk-edit 2020-12-22 03:00:22 +01:00
jonaswinkler
f42e5bf1e5 added tracking to the document list 2020-12-22 02:59:09 +01:00
jonaswinkler
5863060585 added selection to the large cards 2020-12-22 02:43:18 +01:00
jonaswinkler
e466158ce2 bugfix 2020-12-22 01:17:07 +01:00
jonaswinkler
38156123d4 Merge branch 'dev' into feature-bulk-edit 2020-12-21 23:20:55 +01:00
jonaswinkler
ade951a600 Adds jbig2 to the build, fixes #93 2020-12-21 23:02:26 +01:00
Mark Schmitt
48b59c8e24 Use qemu also for arm64v8 build - something might be causing trouble on the native hosts 2020-12-21 21:53:39 +01:00
jonaswinkler
b3a13cec17 Merge branch 'dev' into travis-multiarch-builds 2020-12-21 21:29:45 +01:00
jonaswinkler
ae3e2a7063 updated documentation 2020-12-21 21:28:21 +01:00
Michael Shamoon
48d83e166b use ngIf for editor components to maybe help performance 2020-12-21 11:12:48 -08:00
Michael Shamoon
29e9d7d793 Some changes from #141 were lost 2020-12-21 09:53:43 -08:00
Michael Shamoon
dcbc0ea2e5 Revert "Fix list small card layout"
This reverts commit 0e93f7eba5.
2020-12-21 09:52:55 -08:00
jonaswinkler
c527b274b6 disallow clearing tag color 2020-12-21 18:23:06 +01:00
jonaswinkler
5892941d8a updated tag coloring for easier readability 2020-12-21 18:17:21 +01:00
jonaswinkler
b653e44f65 changed field order, updated ng-select for tag color selection 2020-12-21 18:15:28 +01:00
jonaswinkler
e75534c0f2 fixes #165 2020-12-21 17:35:05 +01:00
Michael Shamoon
0e93f7eba5 Fix list small card layout
Some changes from #141 were lost
2020-12-21 08:14:06 -08:00
Mark Schmitt
7817315f8b Adding some echos to bette runderstand where the build hangs 2020-12-21 17:08:01 +01:00
Mark Schmitt
ba18258750 Add libxslt-dev to dependencies.
At least one arm based image does not pull in dependencies the same way
the amd64 one does, resulting in a missing libxslt shared lib.
2020-12-21 16:19:24 +01:00
Mark Schmitt
23381f7d17 Added multi arch docker builds to travis ci 2020-12-21 13:14:16 +01:00
jonaswinkler
665863e395 Display name of current user on the dashboard 2020-12-20 17:18:23 +01:00
Michael Shamoon
d9e3895f34 Fix 2px difference between two editors =) 2020-12-20 08:07:19 -08:00
Michael Shamoon
f06e2c1089 Merge remote-tracking branch 'upstream/dev' into feature-bulk-editor 2020-12-20 07:49:27 -08:00
jonaswinkler
dd6aa2f775 added missing file 2020-12-20 16:01:16 +01:00
jonaswinkler
c6b9e2b544 revert last commit 2020-12-20 16:00:11 +01:00
jonaswinkler
240d5b9da2 reorganized docker build. 2020-12-20 15:59:37 +01:00
jonaswinkler
5b344963b9 reorganized docker build. 2020-12-20 15:58:29 +01:00
jonaswinkler
b10e7abbe8 don't know how that got in here 2020-12-20 15:25:47 +01:00
jonaswinkler
01c2fe508e more tests 2020-12-20 14:39:17 +01:00
jonaswinkler
ee31fdc650 removed unused code 2020-12-20 14:00:24 +01:00
Michael Shamoon
fa7b90a584 Add apply button to dropdowns 2020-12-20 01:04:54 -08:00
Michael Shamoon
37c2051e01 Typos & code fixes 2020-12-20 00:37:37 -08:00
Michael Shamoon
3561935e1b Fix some TS syntax errors 2020-12-20 00:12:40 -08:00
Michael Shamoon
7669679fb1 Mobile fixes 2020-12-19 23:49:20 -08:00
Michael Shamoon
2e44c18cdb Show 's' when needed instead of (s) on document list 2020-12-19 23:44:33 -08:00
Michael Shamoon
86da578774 Hide toggled state & counts when selection spans documents not in view 2020-12-19 23:42:08 -08:00
Michael Shamoon
46f778111c Live filter badges when editing & hide badges when active filter items in dropdown 2020-12-19 22:54:37 -08:00
Michael Shamoon
7dfcc7f47b Refactor dropdown button component 2020-12-19 22:31:14 -08:00
Michael Shamoon
39b35c090b Hide filter / bulk editor for better switching 2020-12-19 22:14:52 -08:00
Michael Shamoon
ee4e026ba2 rework toolbar 2020-12-19 22:06:17 -08:00
Michael Shamoon
de6ba3489a Cleanup dropdown button component 2020-12-19 21:56:31 -08:00
Michael Shamoon
6381093386 Refactor SlectableItem to ToggleableItem 2020-12-19 21:52:45 -08:00
Michael Shamoon
fd6bfd02ce SelectableItem dropdowns refactoring 2020-12-19 21:45:53 -08:00
Michael Shamoon
1da652ba4d Only apply edits when something has changed 2020-12-19 21:42:19 -08:00
Michael Shamoon
9a4190bedf Rename dropdown type enum & add pass as variable to use like an Enum 2020-12-19 20:19:37 -08:00
Michael Shamoon
561db8607a Unused bulk tag functions 2020-12-19 15:20:07 -08:00
jonaswinkler
7f9a0204b5 removed most of the logic that extracts data from filename patterns #156 2020-12-20 00:08:05 +01:00
jonaswinkler
32224f187d test CONSUMER_DELETE_DUPLICATES 2020-12-20 00:06:33 +01:00
Michael Shamoon
d91fa99e77 Handler for bulk set tags (awaiting API endpoint) 2020-12-19 14:26:26 -08:00
jonaswinkler
3f94fc2618 fix & test a migration 2020-12-19 21:52:58 +01:00
jonaswinkler
e79c45c98d fix test cases 2020-12-19 20:39:56 +01:00
Michael Shamoon
400da7bbc5 Minor refactoring 2020-12-19 07:49:32 -08:00
jonaswinkler
bb814da95b more test. 2020-12-19 16:46:09 +01:00
jonaswinkler
fad3df1e39 removed x-frame-options, since that was only used for the <object> pdf display tag. 2020-12-19 16:46:04 +01:00
jonaswinkler
1b1b57eb6a more tests 2020-12-19 15:54:13 +01:00
jonaswinkler
57a5a4147b test case 2020-12-19 14:48:42 +01:00
Jonas Winkler
1041504cb1 Merge pull request #159 from Skylinar/master
Add 'Epson WF-7710DWF' to scanner.rst
2020-12-19 13:49:17 +01:00
Jonas Winkler
26b40e06f8 Merge branch 'master' into master 2020-12-19 13:49:01 +01:00
Skylinar
df8235de13 Update scanners.rst
typo
2020-12-19 13:36:10 +01:00
Skylinar
12e45624db Add 'Epson WF-7710DWF' to scanner.rst 2020-12-19 13:32:31 +01:00
jonaswinkler
37237dfcf6 default title 2020-12-19 12:46:11 +01:00
Michael Shamoon
da3695e3a4 Working to backend except tags 2020-12-19 02:26:41 -08:00
Michael Shamoon
24c53e78a7 Working bulk editor component 2020-12-19 02:08:33 -08:00
Michael Shamoon
275bd96ba8 Refactor filterable dropdowns to allow intermediate state 2020-12-19 00:13:08 -08:00
Michael Shamoon
01d448ecde Bulk editor component skeleton 2020-12-18 21:19:49 -08:00
jonaswinkler
3cdd38cb70 Merge branch 'feature-more-like-this' into dev 2020-12-19 01:15:51 +01:00
jonaswinkler
f184e6b162 fix some layout issues 2020-12-19 01:15:40 +01:00
Michael Shamoon
55a6dca373 Refactor editor and filterable dropdowns to be common components in anticipation of bulk editor 2020-12-18 16:03:52 -08:00
jonaswinkler
5517c049b8 Merge branch 'dev' into feature-more-like-this 2020-12-19 00:48:31 +01:00
Jonas Winkler
86f83f2bc4 Merge pull request #157 from shamoon/fix/issue-150
Add page number to document toolbar
2020-12-19 00:47:06 +01:00
jonaswinkler
557abbc17e Merge branch 'dev' into feature-more-like-this 2020-12-19 00:06:16 +01:00
Michael Shamoon
e0293db16d Only show page numbers when content type is application/pdf 2020-12-18 15:04:52 -08:00
Michael Shamoon
fbb2da42dc Merge branch 'dev' into feature-bulk-editor 2020-12-18 14:55:21 -08:00
Michael Shamoon
2d841e7167 Refactor 2020-12-18 14:47:06 -08:00
Michael Shamoon
f214fe1b3e Log line 2020-12-18 14:44:17 -08:00
Michael Shamoon
e5fe515b69 Add page number to toolbar 2020-12-18 14:31:09 -08:00
jonaswinkler
dfb88ebf83 removed the date hack. fixes #144
also refer to #148
2020-12-18 20:17:17 +01:00
jonaswinkler
789abb3bbb changed up the highlight fragment formatter 2020-12-18 16:42:33 +01:00
jonaswinkler
273c474e3f layout changes 2020-12-18 14:09:12 +01:00
Jonas Winkler
b262ec4b32 Merge pull request #154 from shamoon/fix/issue-152
Searchable dropdowns on document details component
2020-12-18 12:40:02 +01:00
Michael Shamoon
c05de3d57f Tiny padding fixes 2020-12-18 01:18:11 -08:00
Michael Shamoon
55c4c690ef Fix wrapping with multiple tags, embiggen tags, pretty icons 2020-12-18 01:13:30 -08:00
Michael Shamoon
e10a2391c4 Use ng-select for document detail screen tags 2020-12-18 00:53:01 -08:00
Michael Shamoon
9b244d0265 Use ng-select for document detail screen 2020-12-17 23:09:27 -08:00
Jonas Winkler
cfc1ca45fc Update README.md 2020-12-18 01:35:08 +01:00
Jonas Winkler
1c4e3f682e Update README.md 2020-12-18 01:31:46 +01:00
jonaswinkler
75b22e8684 Merge branch 'dev' into feature-bulk-edit 2020-12-18 00:38:31 +01:00
jonaswinkler
ca2cb694d0 code style 2020-12-18 00:10:16 +01:00
jonaswinkler
cea34211b6 Merge branch 'dev' into feature-more-like-this 2020-12-18 00:03:14 +01:00
jonaswinkler
d252d040bf Merge branch 'dev' of github.com:jonaswinkler/paperless-ng into dev 2020-12-18 00:02:53 +01:00
jonaswinkler
43c88ae0f0 Merge branch 'dev' into feature-more-like-this 2020-12-18 00:02:30 +01:00
jonaswinkler
93be4e98d5 scroll to top when searching again 2020-12-17 23:41:55 +01:00
jonaswinkler
659cd3e9d5 hide search controls on document list 2020-12-17 23:41:46 +01:00
jonaswinkler
2c3eaadbce test cases 2020-12-17 23:24:28 +01:00
Jonas Winkler
1947d67e69 Merge pull request #141 from shamoon/document-list-layout-tweaks
Document list small card layout adjustments
2020-12-17 22:08:48 +01:00
jonaswinkler
35dcc54dc8 fixes cookie_prefix for development setups 2020-12-17 21:54:10 +01:00
jonaswinkler
48796e6961 fixes #149 2020-12-17 21:46:56 +01:00
jonaswinkler
164418880a more like this searching 2020-12-17 21:36:21 +01:00
Michael Shamoon
fbca412d30 Add more card columns on very large screens 2020-12-16 16:18:41 -08:00
jonaswinkler
70347bb8f3 added a note to the documentation regarding character limits of PostgreSQL 2020-12-16 23:26:29 +01:00
jonaswinkler
eaf11ea134 changelog and versions 2020-12-16 22:39:13 +01:00
jonaswinkler
a59f8cd1b1 Merge branch 'master' into dev 2020-12-16 22:33:11 +01:00
jonaswinkler
e9affbc1cf revert the changes that caused issues in the admin. 2020-12-16 22:33:03 +01:00
jonaswinkler
aa8789ae31 fix up the migration for encrypted documents and a couple other associated issues. 2020-12-16 21:53:11 +01:00
jonaswinkler
5c310c51d4 fix up the migration for encrypted documents. 2020-12-16 21:08:41 +01:00
jonaswinkler
cf3fa50b55 these changes shouldn't have been commited at all. my bad. 2020-12-16 21:08:03 +01:00
jonaswinkler
7f933d373f fixes the decryption command not working. 2020-12-16 19:50:38 +01:00
jonaswinkler
ece94379d8 fixes #143 2020-12-16 19:35:21 +01:00
jonaswinkler
aa714bded3 Merge branch 'dev' 2020-12-16 18:44:57 +01:00
jonaswinkler
ecfae9dadd fixed some issues with the ordering, test cases and migrations. 2020-12-16 18:40:19 +01:00
jonaswinkler
69c04a209a changelog 2020-12-16 18:18:01 +01:00
jonaswinkler
e4ec52ed29 default saved view names 2020-12-16 18:16:14 +01:00
jonaswinkler
50aedc1094 fixed an issue with clickable types and correspondents on the docment table list 2020-12-16 17:52:43 +01:00
jonaswinkler
062f8e5a73 update save filter picture 2020-12-16 17:47:34 +01:00
jonaswinkler
c813c02025 version increment. 2020-12-16 17:01:20 +01:00
jonaswinkler
28f45d8f15 fixes an issue with the date dropdowns 2020-12-16 16:59:26 +01:00
jonaswinkler
8e339789fa more fixes regarding empty titles 2020-12-16 16:44:54 +01:00
jonaswinkler
dec17a3b9b fixes a one time issue when migrating to the new version. 2020-12-16 16:19:12 +01:00
jonaswinkler
6b60501dc7 changelog 2020-12-16 16:04:25 +01:00
jonaswinkler
0e78f32009 fixed an issue with the settings not saving in case no saved views are present 2020-12-16 16:04:20 +01:00
jonaswinkler
b13ec571f8 fixes #134 2020-12-16 14:41:57 +01:00
jonaswinkler
9f5e6d1969 fixes metadata display 2020-12-16 14:23:10 +01:00
jonaswinkler
b2e0a8c884 thumbnail generation 2020-12-16 14:19:11 +01:00
jonaswinkler
e47b105185 fixes #7 and some test cases. 2020-12-16 14:17:05 +01:00
jonaswinkler
8bd82f5c69 fixing some test case warnings, case insensitive sorting for tags, correspondents and types. 2020-12-16 13:49:48 +01:00
jonaswinkler
e528a587cc fixed some issues with the test cases. 2020-12-16 13:41:02 +01:00
jonaswinkler
1a526ac31e fixes #140 2020-12-16 02:12:58 +01:00
jonaswinkler
22e56f09ba fixes some issues regarding #139 2020-12-16 00:14:32 +01:00
jonaswinkler
af0eafbb3b Merge branch 'dev' of github.com:jonaswinkler/paperless-ng into dev 2020-12-15 23:44:23 +01:00
Jonas Winkler
8e57d4e791 Merge pull request #137 from shamoon/quick-filters-mobile-2
Mobile Improvements for "Quick Filters" (2)
2020-12-15 23:39:05 +01:00
jonaswinkler
b2a9cf4709 docs 2020-12-15 23:35:10 +01:00
Michael Shamoon
677cfb7a1e Use bootstrap row-cols-* classes to keep card list view full width 2020-12-15 14:31:18 -08:00
Michael Shamoon
fb9d750684 Delete button margin-left 2020-12-15 14:19:40 -08:00
Michael Shamoon
b8469946a8 Smaller editor, cleaned up responsive flow 2020-12-15 11:09:25 -08:00
Michael Shamoon
beffde1051 quick filter button badges 2020-12-15 07:10:31 -08:00
Jonas Winkler
71c58c4b05 Update README.md 2020-12-15 15:04:28 +01:00
Jonas Winkler
02e67d25b4 Update README.md 2020-12-15 15:03:34 +01:00
Jonas Winkler
d208ab1e12 Update README.md 2020-12-15 15:03:00 +01:00
jonaswinkler
55075619c1 documentation 2020-12-15 14:43:07 +01:00
jonaswinkler
7dce57b9f7 changelog 2020-12-15 14:34:48 +01:00
jonaswinkler
a0c74025e3 changelog and docs 2020-12-15 14:30:31 +01:00
jonaswinkler
31bea6a361 path sanitation 2020-12-15 14:11:05 +01:00
jonaswinkler
5894060dc5 fixes #25 2020-12-15 13:52:35 +01:00
jonaswinkler
b787983e42 more tests 2020-12-15 13:47:43 +01:00
jonaswinkler
7e0aa7136a more tests 2020-12-15 13:26:01 +01:00
jonaswinkler
56204933b0 bugfix, tests 2020-12-15 13:16:28 +01:00
jonaswinkler
49be87fe37 code style 2020-12-15 12:06:24 +01:00
Michael Shamoon
03f071fd27 Styled, organized button UI 2020-12-15 00:57:31 -08:00
Michael Shamoon
34c42c4339 Better svgs 2020-12-14 23:39:10 -08:00
Michael Shamoon
b45bd66573 Basic bulk editor component 2020-12-14 23:14:19 -08:00
Michael Shamoon
3b2bc292d8 Tweak checkbox 2020-12-14 23:14:04 -08:00
Michael Shamoon
30185d560c Much cleaner way to set icon 2020-12-14 22:33:50 -08:00
Michael Shamoon
6e614eda5e Merge branch 'dev' into quick-filters-mobile-2 2020-12-14 19:45:28 -08:00
Michael Shamoon
164755c755 Breakpoints for screen sizes, icons for mobile 2020-12-14 19:45:22 -08:00
jonaswinkler
6d39dfeb3b forgot to address this. 2020-12-15 03:53:18 +01:00
jonaswinkler
999b36473c more refactoring and bug fixing. 2020-12-15 03:29:23 +01:00
jonaswinkler
8b57967836 Merge branch 'dev' into feature-bulk-edit 2020-12-15 03:13:22 +01:00
jonaswinkler
ff71b04848 editable saved views 2020-12-15 02:35:04 +01:00
jonaswinkler
67d03c11b9 fixed the date selection dropdowns.
- They still contain that ugly hack.
2020-12-15 00:48:06 +01:00
jonaswinkler
533be7e96e better highlight of active filters 2020-12-15 00:30:36 +01:00
jonaswinkler
4ed56e4603 fix 2020-12-15 00:00:40 +01:00
jonaswinkler
45848f5e34 removed manual date formatting/parsing 2020-12-14 22:46:50 +01:00
jonaswinkler
cf619d9d31 typing 2020-12-14 22:20:28 +01:00
jonaswinkler
de87efc291 confirmation messages 2020-12-14 21:14:33 +01:00
jonaswinkler
889fe5890d refactored titles 2020-12-14 20:59:18 +01:00
jonaswinkler
958acd8a36 imports 2020-12-14 20:21:31 +01:00
jonaswinkler
381a503947 bugfix 2020-12-14 19:39:16 +01:00
jonaswinkler
b7126030d1 many changes to support server side saved views 2020-12-14 19:26:36 +01:00
jonaswinkler
13d934dc6e new saved view service replaces old local storage based service 2020-12-14 18:46:11 +01:00
jonaswinkler
926e746005 Merge branch 'dev' into feature-server-side-saved-views 2020-12-14 16:52:51 +01:00
jonaswinkler
94c07839a4 refactored filter service
- I wasn't too happy with that in the end.
- The filter editor should not be concerned about managing filter rule state.
- Therefore, it should not access a service for filter rules.
- The editor should simply be given a set of rules, and edit that rule set.
- The only entity that should manage filter state should be the document list service, and the saved view service in the form of filters associated with saved views.
2020-12-14 16:51:01 +01:00
jonaswinkler
277e668e07 Merge branch 'dev' into feature-server-side-saved-views 2020-12-14 11:49:03 +01:00
jonaswinkler
10440ec820 this button wasn't really doing anything. 2020-12-14 11:31:12 +01:00
jonaswinkler
02c1d496d6 some refactoring. 2020-12-14 11:22:24 +01:00
jonaswinkler
98ab79ad5a fix title filter not removing filter rule 2020-12-14 11:12:36 +01:00
Jonas Winkler
e1fef59e82 Merge pull request #111 from shamoon/quick-filters
Quick filters
2020-12-14 11:02:34 +01:00
Michael Shamoon
32201dd034 button badge margin 2020-12-13 20:56:49 -08:00
Michael Shamoon
670b6d3629 Change date filter active check to check circle filled 2020-12-13 20:53:00 -08:00
Michael Shamoon
54d90a4c4b Code cleanup 2020-12-13 20:37:13 -08:00
Michael Shamoon
9bfc92cf79 Fix missing NgbDropdown import 2020-12-13 20:16:23 -08:00
Michael Shamoon
a12ec00827 Remove unused displayName 2020-12-13 20:16:15 -08:00
jonaswinkler
8cc0336338 prevent usage of {tags} directly. 2020-12-14 03:01:50 +01:00
jonaswinkler
bad7caa8b9 fixes #117 2020-12-14 02:46:46 +01:00
jonaswinkler
251fc582e9 fixes #130 2020-12-14 02:19:53 +01:00
Michael Shamoon
245af65841 Auto-close menu when single item chosen with Enter key 2020-12-13 15:47:46 -08:00
Michael Shamoon
ee7492cf52 Clear date filter buttons 2020-12-13 15:38:28 -08:00
Michael Shamoon
8e5c2a2b14 Fix date clearing 2020-12-13 15:08:45 -08:00
jonaswinkler
1343e4c99f Merge branch 'dev' of github.com:jonaswinkler/paperless-ng into dev 2020-12-13 23:47:01 +01:00
jonaswinkler
89cb1211e7 docs 2020-12-13 23:46:48 +01:00
Michael Shamoon
04bb7d4893 Remove card around filter editor 2020-12-13 14:46:10 -08:00
Michael Shamoon
1fafb9ace6 Prettier styling on dropdowns 2020-12-13 14:40:17 -08:00
Michael Shamoon
ae51619243 Make date buttons same as other dropdowns 2020-12-13 14:11:43 -08:00
Michael Shamoon
7ac101d84e Typo! 2020-12-13 12:17:01 -08:00
Michael Shamoon
2c18f6268b Comment cleanup 2020-12-13 11:34:58 -08:00
Michael Shamoon
7d212f6e80 Last time fixing the toggling logic, I hope =/ 2020-12-13 11:33:57 -08:00
Michael Shamoon
3d8cd0f0d6 change tag selected marker to badge 2020-12-13 11:32:13 -08:00
Michael Shamoon
3f719a21e0 Typo from merge 2020-12-13 11:29:12 -08:00
Michael Shamoon
7a75d3f41b Merge branch 'dev' into quick-filters 2020-12-13 11:27:40 -08:00
Michael Shamoon
1ddad84985 Fix visual clearing of date field 2020-12-13 11:23:21 -08:00
Michael Shamoon
bcdbc975d6 Show filter has items selected 2020-12-13 11:20:28 -08:00
Michael Shamoon
a61ea3555a Ok now toggling logic is fixed 2020-12-13 11:17:10 -08:00
Michael Shamoon
2de546fd52 Fix tag / correspondent / document type toggling logic 2020-12-13 11:03:50 -08:00
Michael Shamoon
d6894d3c64 Change views menu title 2020-12-13 10:28:09 -08:00
Michael Shamoon
bb1725c7dd Typescript cleanup 2020-12-13 10:25:51 -08:00
Michael Shamoon
6f684f8070 Dropdown components now accept lists not observables 2020-12-13 10:24:20 -08:00
Michael Shamoon
7712230300 remove unneeded display Input 2020-12-13 10:18:03 -08:00
Jonas Winkler
7e4c5af158 Merge pull request #133 from rYR79435/patch-2
Open GitHub and Documentation links in a new tab
2020-12-13 15:48:57 +01:00
jonaswinkler
2dc3019083 table selection highlighting 2020-12-13 15:28:20 +01:00
jonaswinkler
b5a85caa72 confirm dialogs for remove operations 2020-12-13 15:20:24 +01:00
jonaswinkler
bb9b438aa6 Merge branch 'dev' into feature-bulk-edit 2020-12-13 15:13:43 +01:00
jonaswinkler
3089b049cf refactored metadata views 2020-12-13 14:56:44 +01:00
jonaswinkler
5bea5e75c0 Refactored delete dialog into a more generic confirm dialog 2020-12-13 14:28:37 +01:00
jonaswinkler
7906d8fef1 selection for small cards 2020-12-13 14:10:55 +01:00
rYR79435
30853e963e Open GitHub and Documentation links in a new tab 2020-12-13 13:30:30 +01:00
Michael Shamoon
1379c039b8 Workaround for infinte loop breaks two way binding for date picker initialization 2020-12-13 02:03:59 -08:00
Michael Shamoon
37c21e518d set max date for date pickers 2020-12-13 01:27:11 -08:00
Michael Shamoon
e215e11417 Completely refactored because programming
Extracted filter editor to service
Made all components actually reactive
2020-12-12 22:53:34 -08:00
jonaswinkler
2374506a20 Merge branch 'dev' into feature-bulk-edit 2020-12-13 00:52:36 +01:00
jonaswinkler
1c4d19198f a couple adjustments for the document viewer. 2020-12-12 22:56:44 +01:00
jonaswinkler
e77be6a2ed Merge branch 'dev' of github.com:jonaswinkler/paperless-ng into dev 2020-12-12 20:43:20 +01:00
Jonas Winkler
1fdf1ef337 Merge pull request #129 from shamoon/fix/issue-65
Change PDF rendering
2020-12-12 20:41:54 +01:00
jonaswinkler
f5cc5fbaa3 made the file renamer somewhat faster. 2020-12-12 20:32:11 +01:00
jonaswinkler
a0631413d6 fixes bauerj/paperless_app#23 and most of all other scanner apps out there. 2020-12-12 18:25:15 +01:00
Michael Shamoon
8ce4434ba9 Move date dropdown component 2020-12-12 09:01:48 -08:00
Michael Shamoon
f6a50ee7c6 Bottom margin on columns for mobile stacking 2020-12-12 08:50:52 -08:00
Michael Shamoon
beff45a835 Fix PDF column width layout issues 2020-12-12 08:43:03 -08:00
jonaswinkler
dfa1f29809 add backend support for saved views 2020-12-12 15:46:56 +01:00
Michael Shamoon
2a57f9d6e5 NgbDate comparison error 2020-12-12 02:14:15 -08:00
Michael Shamoon
02871e1e22 Date filter clearing 2020-12-12 02:07:25 -08:00
Michael Shamoon
9cd40e96f4 Working date filtering 2020-12-12 01:09:52 -08:00
jonaswinkler
bf9051e44d made a serious mistake. fixed. 2020-12-12 02:06:43 +01:00
jonaswinkler
ebb39b13f0 tests 2020-12-12 01:23:26 +01:00
jonaswinkler
4f14e0f425 fixes #125 2020-12-12 01:19:22 +01:00
Michael Shamoon
e7cb358536 Fix broken card tags / correspondent links 2020-12-11 15:20:47 -08:00
jonaswinkler
a85792e327 tests. 2020-12-11 23:34:34 +01:00
jonaswinkler
f5df910894 document list validation. 2020-12-11 23:34:24 +01:00
jonaswinkler
80b47fa287 codestyle 2020-12-11 23:34:14 +01:00
Michael Shamoon
1aa76f8483 Merge branch 'dev' into fix/issue-65 2020-12-11 14:29:26 -08:00
Michael Shamoon
de5d360d52 Use ng2-pdf-viewer
And remove now-unused safeUrl pipe
2020-12-11 14:22:02 -08:00
jonaswinkler
f0ad92e542 Merge branch 'dev' into feature-bulk-edit 2020-12-11 20:14:48 +01:00
jonaswinkler
0b7ffa31d1 fixes #115 2020-12-11 17:57:56 +01:00
jonaswinkler
b452816a29 fixes #122 2020-12-11 17:49:32 +01:00
jonaswinkler
d1d09ac6ac checboxes for small cards. does not work yet. 2020-12-11 17:35:21 +01:00
jonaswinkler
66240188c7 import fix 2020-12-11 14:51:20 +01:00
jonaswinkler
d1f285113d bulk edit menu and methods 2020-12-11 14:49:22 +01:00
jonaswinkler
56dfc71bb9 document list service: selection model 2020-12-11 14:48:33 +01:00
jonaswinkler
a8f27f79dd delete dialog: delay enable delete button 2020-12-11 14:47:33 +01:00
jonaswinkler
2c702eb568 fixed some issues with the data access service, support for requesting all IDs of filtered documents (required for selection) 2020-12-11 14:46:48 +01:00
jonaswinkler
63a58ccc38 a simple dialog that selects tags/correspondents/types 2020-12-11 14:30:59 +01:00
jonaswinkler
4b0027797a bulk edit view 2020-12-11 14:30:18 +01:00
jonaswinkler
66d6d29c23 add support to the documents api to only serve selected fields 2020-12-11 14:29:43 +01:00
jonaswinkler
fbb3a069cd add bulk editing methods 2020-12-11 14:28:07 +01:00
Michael Shamoon
a37796d0cf Allow enter key to toggle items in filtered list if single item remains 2020-12-11 01:40:42 -08:00
Michael Shamoon
0b4c860354 refactoring 2020-12-11 01:19:49 -08:00
Michael Shamoon
a4a08aa667 auto-select list filter field & clear on close 2020-12-11 01:16:58 -08:00
Michael Shamoon
c24bfd4d2b filter-dropdown-date rough implementation 2020-12-11 01:03:05 -08:00
Michael Shamoon
ed480f62e3 filter-rule-type displayName property 2020-12-11 00:08:06 -08:00
Michael Shamoon
66aa7319ab Small text 2020-12-11 00:07:26 -08:00
Michael Shamoon
4146955f4a Shadows! 2020-12-10 15:51:11 -08:00
Michael Shamoon
57504b7ee6 Display tags with color pills 2020-12-10 15:49:00 -08:00
Michael Shamoon
364df5c050 Fix toggling off active items 2020-12-10 15:37:56 -08:00
Michael Shamoon
f83185bfe4 Refactored dropdowns allow clearing, active checkmarks 2020-12-10 15:36:17 -08:00
Michael Shamoon
db02d68a5a Refactored dropdowns to separate component 2020-12-10 14:41:37 -08:00
Michael Shamoon
9a18954686 Fix unused method event parameter 2020-12-10 09:24:07 -08:00
Michael Shamoon
edcb62476b Remove clear button outline 2020-12-10 09:13:26 -08:00
Jonas Winkler
3a82b7806a Update README.md 2020-12-10 16:28:02 +01:00
jonaswinkler
51b1528fee Merge branch 'dev' into feature-bulk-edit 2020-12-10 16:26:16 +01:00
jonaswinkler
defa80d05a fixes #91 2020-12-10 16:25:34 +01:00
jonaswinkler
abd54eeb3a Merge branch 'dev' into feature-bulk-edit 2020-12-10 15:56:03 +01:00
jonaswinkler
2f7bb01f34 moved metadata extraction to the parsers 2020-12-10 14:57:53 +01:00
Michael Shamoon
25e1177198 Title filtering 2020-12-10 01:42:40 -08:00
Michael Shamoon
ab8a1cfded Working moved dropdowns 2020-12-10 00:46:13 -08:00
Michael Shamoon
fa5121082d Moved quick filters to filter editor 2020-12-09 23:12:51 -08:00
jonaswinkler
48e785f7b6 Merge branch 'dev' 2020-12-10 02:24:58 +01:00
jonaswinkler
0cc22017de revert last commit. 2020-12-10 02:24:36 +01:00
jonaswinkler
3584f732a7 added another library that's required to get this running on raspberry pi 2020-12-10 02:14:26 +01:00
jonaswinkler
476beacd7f changelog 2020-12-10 01:12:30 +01:00
jonaswinkler
69c6d68219 a print() command somehow sneaked past my commit checks. 2020-12-10 00:59:03 +01:00
jonaswinkler
24d8a50f01 fixed an issue with the docker entrypoint script. 2020-12-10 00:54:37 +01:00
jonaswinkler
2df1894683 changelog 2020-12-10 00:30:35 +01:00
jonaswinkler
3f03cbf66c excluded the lockfile from the sanity checker. 2020-12-10 00:29:47 +01:00
jonaswinkler
b3daf0efc3 added progress bar to the document renamer. 2020-12-10 00:10:36 +01:00
jonaswinkler
46c0ab943f added a progress bar to the reindex command. 2020-12-10 00:02:45 +01:00
jonaswinkler
2b57b80656 fixes #113 2020-12-09 23:45:53 +01:00
jonaswinkler
0b1b9de3cc layout fix 2020-12-09 22:38:52 +01:00
jonaswinkler
20c46278dc removed a janky test case that caused other test cases to fail 2020-12-09 22:18:03 +01:00
jonaswinkler
70cbdbf23b locking media directory while deleting files 2020-12-09 22:17:23 +01:00
jonaswinkler
6003122b06 fixes #112 2020-12-09 22:16:57 +01:00
jonaswinkler
8ca97924be shadows 2020-12-09 13:44:37 +01:00
jonaswinkler
2be0ba9f72 fixed test case. fixed bug with the decryption logic. 2020-12-09 13:27:02 +01:00
Michael Shamoon
f0d86130ec Use tag component for tag colors etc 2020-12-09 01:52:44 -08:00
Michael Shamoon
ed236460b5 Fix document type search field placeholder 2020-12-09 01:36:33 -08:00
Michael Shamoon
a4f7c5ddcb Unused test code 2020-12-09 01:34:09 -08:00
Michael Shamoon
4fbb814e5b Visual tweaks 2020-12-09 01:28:04 -08:00
Michael Shamoon
0f635d1bb2 Clear button & visual tweaks 2020-12-09 01:28:04 -08:00
Michael Shamoon
0d48aea308 Label, visual tweaks 2020-12-09 01:27:35 -08:00
Michael Shamoon
06a3fff2bc Refactor clashing filter variable 2020-12-09 01:27:35 -08:00
Michael Shamoon
c28f19c9cf Quick filter styling 2020-12-09 01:27:35 -08:00
Michael Shamoon
da87542a52 Change advanced to show / hide 2020-12-09 01:27:35 -08:00
Michael Shamoon
23ba3be68f Toggling of items 2020-12-09 01:27:35 -08:00
Michael Shamoon
f3fd0fcf72 Basic tags, correspondents & document type dropdowns 2020-12-09 01:27:35 -08:00
Jonas Winkler
72706a335d Update CONTRIBUTING.md 2020-12-09 01:25:43 -08:00
jonaswinkler
0a0d462938 tags from folders: case insensitive 2020-12-09 00:07:22 +01:00
jonaswinkler
74a99cf330 removed slugs entirely, since their only purpose was purely cosmetic anyway. 2020-12-09 00:04:37 +01:00
jonaswinkler
5753c83618 version bump 2020-12-08 21:20:05 +01:00
jonaswinkler
550a74347c a test that "verifies" that the file renaming lock works and no inconsistencies are created. 2020-12-08 21:08:44 +01:00
jonaswinkler
e428a8a008 file upload improvements 2020-12-08 17:35:51 +01:00
jonaswinkler
001ab88fff docs 2020-12-08 17:34:38 +01:00
jonaswinkler
d3cf85b9e9 Added a section on best practices. 2020-12-08 17:34:29 +01:00
jonaswinkler
91c722feff Merge branch 'master' into dev 2020-12-08 16:46:13 +01:00
jonaswinkler
871e22e3a3 documentation 2020-12-08 16:45:22 +01:00
jonaswinkler
bf3b2249c5 Metadata documentation 2020-12-08 16:36:14 +01:00
jonaswinkler
6613104b4f date and time in metadata 2020-12-08 16:21:38 +01:00
jonaswinkler
0028fde2fd more metadata #32 2020-12-08 16:09:47 +01:00
jonaswinkler
ad527fe97c reading and displaying PDF metadata 2020-12-08 15:45:02 +01:00
jonaswinkler
9da11f29c7 fixes #90 2020-12-08 13:54:49 +01:00
jonaswinkler
c240fa1883 changelog 2020-12-08 11:53:58 +01:00
jonaswinkler
bb33ac5e9e fixees #77 2020-12-08 01:12:03 +01:00
jonaswinkler
30f200ad39 fix z-order on the edit page. 2020-12-08 00:45:23 +01:00
jonaswinkler
5321ff1f20 upload status addresses #100 2020-12-08 00:45:11 +01:00
jonaswinkler
c4a939dbcc addresses #104 2020-12-08 00:09:36 +01:00
jonaswinkler
3f05fe45bb Addresses #99 entirely. 2020-12-07 23:42:18 +01:00
jonaswinkler
dfd844124d addresses #107 2020-12-07 22:29:51 +01:00
jonaswinkler
d4febbc40f codestyle 2020-12-07 22:17:47 +01:00
jonaswinkler
dc36e8566a addresses #106 2020-12-07 22:15:56 +01:00
jonaswinkler
87fa118de0 added filenames to the API #108 2020-12-07 21:52:26 +01:00
jonaswinkler
35c3d5c0b5 Merge branch 'dev' of github.com:jonaswinkler/paperless-ng into dev 2020-12-07 15:27:36 +01:00
jonaswinkler
9e46afafd7 fixes #102 2020-12-07 15:25:06 +01:00
jonaswinkler
56acd4f320 fixes #105 2020-12-07 12:46:46 +01:00
jonaswinkler
e2456f4b3f changes 2020-12-07 12:44:23 +01:00
Jonas Winkler
2bbeb8ffe0 Update CONTRIBUTING.md 2020-12-06 23:30:51 +01:00
Jonas Winkler
5e188c0203 Merge pull request #97 from trahflow/dev
Dockerfile: Add libqpdf-dev to build dependencies
2020-12-06 23:25:34 +01:00
Wolfhart Feldmeier
8b637214b4 Dockerfile: Add libqpdf-dev to build dependencies 2020-12-06 23:00:20 +01:00
jonaswinkler
fcaaf7ce03 pipfile fix 2020-12-06 22:54:11 +01:00
jonaswinkler
522ada88ea Merge branch 'dev' into feature-websockets-status 2020-12-06 22:53:54 +01:00
jonaswinkler
eede5595e9 better error messages for file uploads. adresses #91 2020-12-06 22:31:12 +01:00
jonaswinkler
c1fc8b2dac codestyle 2020-12-06 19:04:32 +01:00
jonaswinkler
28622d700d changed the way public filenames (i.e., for download and exporting) are generated. #94 2020-12-06 19:03:45 +01:00
jonaswinkler
a079c310b4 changes to filename generation, partially addresses #90 2020-12-06 16:13:37 +01:00
jonaswinkler
278f6da16a documentation. 2020-12-06 14:41:14 +01:00
jonaswinkler
5369e0be03 more bulk edit 2020-12-06 14:39:53 +01:00
jonaswinkler
8699b6931c Merge branch 'dev' into feature-bulk-edit 2020-12-06 02:12:15 +01:00
jonaswinkler
45e39d04ae fixes #87 2020-12-06 01:37:44 +01:00
jonaswinkler
e46353cee8 added a welcome widget 2020-12-06 01:25:12 +01:00
jonaswinkler
65816a434c Update README.md 2020-12-05 15:55:25 +01:00
jonaswinkler
e3104d34fa Update README.md 2020-12-05 15:40:51 +01:00
jonaswinkler
891bd2de7f Update README.md 2020-12-05 15:37:23 +01:00
jonaswinkler
805e3d51e8 Merge remote-tracking branch 'origin/master' into dev 2020-12-05 14:54:28 +01:00
jonaswinkler
f1f9a076c9 Merge pull request #86 from bauerj/docs-migration
Add missing step to migration guide
2020-12-05 14:36:32 +01:00
jonaswinkler
55cc49cd88 dependencies 2020-12-05 14:00:27 +01:00
jonaswinkler
d52260468c docs 2020-12-05 14:00:02 +01:00
jonaswinkler
aacd362203 docs config 2020-12-05 13:53:11 +01:00
jonaswinkler
38a651c42a docs 2020-12-05 13:53:03 +01:00
Johann Bauer
55cc93e5e9 Add missing step to migration guide 2020-12-05 13:41:15 +01:00
jonaswinkler
9ee21f081f versions 2020-12-05 13:22:08 +01:00
jonaswinkler
bfbdd6e198 testing the importer 2020-12-05 13:19:14 +01:00
jonaswinkler
1e9e347f15 documentation 2020-12-05 12:52:49 +01:00
jonaswinkler
782dbee3a0 removed obsolete option 2020-12-05 01:23:17 +01:00
jonaswinkler
316ee72177 bugfix 2020-12-05 01:21:16 +01:00
jonaswinkler
f88cf69173 bugfix 2020-12-05 00:37:05 +01:00
jonaswinkler
e9758d5224 bugfix 2020-12-04 23:16:04 +01:00
jonaswinkler
5456d5eafa bugfix 2020-12-04 23:07:11 +01:00
jonaswinkler
dab4b1253a fixes for the parser. 2020-12-04 16:44:34 +01:00
jonaswinkler
34bc4020c9 documentation 2020-12-04 16:07:31 +01:00
jonaswinkler
ab871d67fc more tests 2020-12-04 15:56:26 +01:00
jonaswinkler
371745b6dc mail handling: When exceptions occur during account/rule/message handling, paperless will continue with the next account/rule/message.
mail handling: When paperless encounters a very long

fixes #82
2020-12-04 15:42:05 +01:00
jonaswinkler
991a46c4f0 disabled thumbnail trimming. 2020-12-04 12:44:02 +01:00
jonaswinkler
eb5bdc48aa API now supports setting metadata when POSTing documents. 2020-12-04 12:09:21 +01:00
jonaswinkler
3634dfbcf8 Update README.md 2020-12-04 11:12:59 +01:00
jonaswinkler
57ad485913 add observables to search results 2020-12-04 01:26:27 +01:00
jonaswinkler
ceaade29a6 bugfix 2020-12-04 01:26:12 +01:00
jonaswinkler
9a4d410f66 use the observables everywhere in the application. 2020-12-04 01:25:52 +01:00
jonaswinkler
34f353f399 document service adds observables for linked data to its results 2020-12-04 01:24:07 +01:00
jonaswinkler
1d8765100c caching for listAll methods 2020-12-04 01:22:14 +01:00
jonaswinkler
5bdb57a392 fix a test case. 2020-12-04 01:20:42 +01:00
jonaswinkler
0a18c819d4 remove _object from document results, which makes the API about 33% faster. 2020-12-04 01:17:55 +01:00
jonaswinkler
982ea84906 adjustments of the front end for API changes. 2020-12-03 20:28:17 +01:00
jonaswinkler
68c233005e api changes. 2020-12-03 19:56:52 +01:00
jonaswinkler
62cc4a7a54 docs 2020-12-03 19:56:33 +01:00
jonaswinkler
6d3e5b0a1b update dependencies. 2020-12-03 19:56:24 +01:00
jonaswinkler
c4d13b5802 improvements to the filter. 2020-12-03 19:55:42 +01:00
jonaswinkler
c263d8e8f1 docs 2020-12-03 19:02:46 +01:00
jonaswinkler
2a9e6f7a58 Update README.md 2020-12-03 18:59:43 +01:00
jonaswinkler
c02813623d layout changes 2020-12-03 18:37:58 +01:00
jonaswinkler
1b5b07a020 bugfix 2020-12-03 18:37:25 +01:00
jonaswinkler
8b16cd99dc updated the API, it now supports tags, correspondents, types and title when uploading documents. 2020-12-03 18:36:23 +01:00
jonaswinkler
20fc065567 hide the filter when it's cleared. 2020-12-03 15:02:27 +01:00
jonaswinkler
802e389198 document count 2020-12-03 01:24:57 +01:00
jonaswinkler
72a4ff0fca proper document archiver with progress bar. 2020-12-03 01:04:52 +01:00
jonaswinkler
e22769ca63 fixed a test case. 2020-12-03 01:04:13 +01:00
jonaswinkler
d661f87f63 reorganized logging. 2020-12-03 01:03:56 +01:00
jonaswinkler
748b27c680 small fix. 2020-12-03 01:03:28 +01:00
jonaswinkler
6a04e95f69 catch encrypted pdf documents 2020-12-03 01:02:37 +01:00
jonaswinkler
9e9b9ae631 updated dependencies. 2020-12-03 01:01:49 +01:00
jonaswinkler
a47623dbaf documentation 2020-12-03 00:15:03 +01:00
jonaswinkler
657c41ab37 test fixes and changelog 2020-12-02 22:44:18 +01:00
jonaswinkler
4548cf08c7 fixes #78 2020-12-02 18:00:49 +01:00
jonaswinkler
e3ce573fbb a couple fixes and more supported image files 2020-12-02 17:39:49 +01:00
jonaswinkler
5e1543bad5 more test 2020-12-02 01:23:55 +01:00
jonaswinkler
282e6f453f clickable fast filters now disregard any unapplied changes in the filter editor 2020-12-02 01:19:28 +01:00
jonaswinkler
a4f60c48ea testing and fixing the sanity checker 2020-12-02 01:18:11 +01:00
jonaswinkler
f3f5227776 fix some tests. 2020-12-01 23:54:33 +01:00
jonaswinkler
19bb29d5cd documentation 2020-12-01 23:38:42 +01:00
jonaswinkler
8cad12b154 documentation. 2020-12-01 15:26:22 +01:00
jonaswinkler
384d381acf more testing. 2020-12-01 15:26:15 +01:00
jonaswinkler
834352130c checking file types against parsers in the consumer. 2020-12-01 15:26:05 +01:00
jonaswinkler
b0c8ade241 code style 2020-12-01 14:33:37 +01:00
jonaswinkler
a33082235b Merge branch 'feature-ocrmypdf' into dev 2020-12-01 14:32:09 +01:00
jonaswinkler
ec6d01f7a5 better indication of what item is selected in the menu 2020-12-01 14:31:50 +01:00
jonaswinkler
1ce6466ef8 tests for mail tasks 2020-12-01 14:31:36 +01:00
jonaswinkler
f677ed8798 small fix. 2020-12-01 14:30:35 +01:00
jonaswinkler
12fa844c7f testing the new noarchive option. 2020-12-01 14:30:13 +01:00
jonaswinkler
fd3df1ec58 some more tests. 2020-12-01 14:15:43 +01:00
jonaswinkler
24b8c358cc Merge branch 'dev' into feature-ocrmypdf 2020-11-30 23:53:19 +01:00
jonaswinkler
d58706a34b pipfile update. 2020-11-30 23:45:21 +01:00
jonaswinkler
3168602610 Merge branch 'master' into dev 2020-11-30 23:03:13 +01:00
jonaswinkler
756c80690d fix for the docs. 2020-11-30 23:02:59 +01:00
jonaswinkler
c5dbd7a6fb Merge pull request #69 from jayme-github/feature-directory-tags
Create tags from sub directories
2020-11-30 22:53:52 +01:00
jonaswinkler
9318c2c0bc Merge branch 'master' of github.com:jonaswinkler/paperless-ng 2020-11-30 22:27:57 +01:00
jonaswinkler
e431a658cc more testing. 2020-11-30 22:04:25 +01:00
jonaswinkler
b97fa9e3b9 this change caused index optimization to fail. 2020-11-30 21:53:39 +01:00
jonaswinkler
1b0ddd6df6 changelog 2020-11-30 21:41:29 +01:00
jonaswinkler
8a5c782425 filename handling for archive files. 2020-11-30 21:38:42 +01:00
jonaswinkler
aaa6599283 Merge branch 'dev' into feature-ocrmypdf 2020-11-30 16:48:09 +01:00
jonaswinkler
daf54a334f Update README.md 2020-11-30 16:30:24 +01:00
jonaswinkler
183d432f84 versions. 2020-11-30 16:26:20 +01:00
jonaswinkler
e1853583b0 changelog, codestyle 2020-11-30 16:25:10 +01:00
jonaswinkler
f156f05b37 typo 2020-11-30 16:19:32 +01:00
jonaswinkler
b03d4c7646 searching for types and dates, error catching, documentation and changelog. 2020-11-30 16:13:35 +01:00
jonaswinkler
1ef12d2cbc searching for tags, spelling corrections fixes #74 2020-11-30 15:14:23 +01:00
jayme-github
fa9a5cc247 Create tags from sub directories
The names of sub directories in the consumer directory will be added as
tags for the document to be consumed.
To enable this, set:
PAPERLESS_CONSUMER_RECURSIVE=1
PAPERLESS_CONSUMER_SUBDIRS_AS_TAGS=1

Fixes #50
2020-11-30 14:22:35 +01:00
jonaswinkler
35124023f0 basic support for bulk editing. 2020-11-30 13:59:13 +01:00
jonaswinkler
0d8688515c filename changes: don't include time. 2020-11-30 00:52:21 +01:00
jonaswinkler
f51207fc32 added file type checks to the parsers to prevent temporary files from being consumed. Also: parsers announce file types they wish to use as default for each mime type. 2020-11-30 00:40:04 +01:00
jonaswinkler
64ee8eab2f changelog 2020-11-29 23:34:09 +01:00
jonaswinkler
2224540b71 don't show links in the search results. 2020-11-29 23:32:12 +01:00
jonaswinkler
fcc0cb7293 fixes #71 2020-11-29 23:32:03 +01:00
jonaswinkler
fd4c9a1758 not sure if this works 2020-11-29 23:00:52 +01:00
jonaswinkler
ac1b701000 more tests! 2020-11-29 19:58:48 +01:00
jonaswinkler
a3143ec512 more tests! 2020-11-29 19:22:49 +01:00
jonaswinkler
39c682dc07 Merge branch 'dev' into feature-ocrmypdf 2020-11-29 18:37:38 +01:00
jonaswinkler
eeb63693c9 tests 2020-11-29 18:37:31 +01:00
jonaswinkler
32186e0de1 added a menu for bulk edits. 2020-11-29 16:33:33 +01:00
jonaswinkler
023aeea7ea test cases for #67 2020-11-29 15:47:56 +01:00
jonaswinkler
a27daaebe9 fixes an issue with paperless not assigning metadata when FILENAME_FORMAT is specified and resolves an invalid warning about missing files fixes #67 2020-11-29 14:45:43 +01:00
jonaswinkler
51851ff15a tests 2020-11-29 13:37:39 +01:00
jonaswinkler
490f59451b Merge branch 'dev' into feature-ocrmypdf 2020-11-29 13:08:32 +01:00
jonaswinkler
5160ff9793 we now have some documentation on how to start development. 2020-11-29 13:08:00 +01:00
jonaswinkler
fca98b411e reorganised settings documentation and added OCR_USER_ARGS 2020-11-29 12:38:32 +01:00
jonaswinkler
2f7396e2aa code style. 2020-11-29 12:37:22 +01:00
jonaswinkler
9677631bb2 error logging. 2020-11-29 12:37:11 +01:00
jonaswinkler
0565118a01 fixed checking the installed languages. 2020-11-29 12:31:42 +01:00
jonaswinkler
24767f62c7 added checksums for archived documents. 2020-11-29 12:31:26 +01:00
jonaswinkler
fdaf419a7e Merge branch 'dev' into feature-ocrmypdf 2020-11-29 01:35:37 +01:00
jonaswinkler
c2a86704eb removed the encryption logic. 2020-11-29 01:19:23 +01:00
jonaswinkler
8fbb31a928 removed the encryption logic. 2020-11-28 22:22:01 +01:00
jonaswinkler
ab41a708e9 still not happy with the document list table, but it has clickable tags and correspondents #54 2020-11-28 22:14:12 +01:00
jonaswinkler
5d5915c5d6 made the tags a little bigger. 2020-11-28 22:12:11 +01:00
jonaswinkler
562d81e246 clickable tags and correspondents fixes #54 2020-11-28 21:28:07 +01:00
jonaswinkler
bddffbce50 Refactored the list view logic, editable saved views fixes #58 2020-11-28 21:27:04 +01:00
jonaswinkler
6992ac6aa9 fixes #61 2020-11-28 19:28:46 +01:00
jonaswinkler
dddd6f5503 added buttons to view documents in the browser. fixes #55 2020-11-28 15:10:49 +01:00
jonaswinkler
71fc785753 tag component needs no click event 2020-11-28 14:47:55 +01:00
jonaswinkler
bc3ae34c26 Merge branch 'dev' into feature-ocrmypdf 2020-11-28 13:17:18 +01:00
jonaswinkler
8361d15a70 Merge branch 'master' into dev 2020-11-28 13:17:03 +01:00
jonaswinkler
52b3057640 fixes to the search index 2020-11-28 11:49:46 +01:00
jonaswinkler
074b682312 added a simple document archiver that produces archived versions of all originals. 2020-11-28 11:49:07 +01:00
jonaswinkler
f7e554a3c1 Adjusted the exporter and importer so that they take archived documents into account. 2020-11-28 11:24:59 +01:00
jonaswinkler
5b020bb8d2 Adjusted the sanity checker so that it takes archived documents into account. 2020-11-28 11:24:19 +01:00
jonaswinkler
6388d19f7a Merge branch 'dev' into feature-ocrmypdf 2020-11-27 19:16:59 +01:00
jonaswinkler
5573a84335 Merge branch 'dev' 2020-11-27 17:40:05 +01:00
jonaswinkler
a1f5ddede8 release script checklist 2020-11-27 17:36:57 +01:00
jonaswinkler
481b6c7cec changelog and versions. 2020-11-27 15:48:53 +01:00
jonaswinkler
bc4192e7d1 more tests and bugfixes. 2020-11-27 15:36:32 +01:00
jonaswinkler
440a23a054 Update CONTRIBUTING.md 2020-11-27 14:21:04 +01:00
jonaswinkler
785577b2e8 Update CONTRIBUTING.md 2020-11-27 14:19:21 +01:00
jonaswinkler
06cfc3113a test case fixes. 2020-11-27 14:06:37 +01:00
jonaswinkler
ea9de1bcf1 Merge branch 'dev' into feature-ocrmypdf 2020-11-27 14:03:19 +01:00
jonaswinkler
6c308116d6 parallel tests. 2020-11-27 14:00:52 +01:00
jonaswinkler
6834e563a8 refactored the test cases to use a mixin for setting up temporary directories. 2020-11-27 14:00:41 +01:00
jonaswinkler
938499706c fixed an issue with the search api opening the index on import (that's way too early.) 2020-11-27 13:59:24 +01:00
jonaswinkler
42c9186e91 refrain from creating the index as part of the migrations, messes with the test cases. 2020-11-27 13:56:07 +01:00
jonaswinkler
60ac1ddbb9 fix warnings about unclosed files. 2020-11-27 13:19:58 +01:00
jonaswinkler
a4277706f2 tests: wait for the consumer to exit before removing directories. 2020-11-27 13:14:02 +01:00
jonaswinkler
35b2033949 tests: disable db logger in all tests except logger tests 2020-11-27 13:13:11 +01:00
jonaswinkler
20c1139632 inotify: cleanup descriptor when done 2020-11-27 13:12:34 +01:00
jonaswinkler
d04b54140c moved consumption dir check into the correct spot 2020-11-27 13:12:13 +01:00
jonaswinkler
89a31443a5 use a more recent version of ubuntu in travis so that tesseract 4.0 is installed. 2020-11-27 12:08:23 +01:00
jonaswinkler
6b3ec52ed4 todo note 2020-11-27 12:03:24 +01:00
jonaswinkler
202b88632c updated docs 2020-11-27 12:02:36 +01:00
jonaswinkler
8bcc40a182 Pipfile.lock post merge 2020-11-27 00:10:40 +01:00
jonaswinkler
24381ad5dc Merge branch 'dev' into feature-ocrmypdf 2020-11-27 00:06:20 +01:00
jonaswinkler
a4bd2d687e add empty test case. 2020-11-27 00:05:29 +01:00
jonaswinkler
db0f7649d1 more tests. 2020-11-26 23:56:57 +01:00
jonaswinkler
6454df57bf removed some obsolete exporter code. 2020-11-26 23:09:17 +01:00
jonaswinkler
b589b7a5dc The index is now recreated in case loading fails. 2020-11-26 22:18:30 +01:00
jonaswinkler
4bf0d834a0 improved test cases. Python 3.6 compatibility. 2020-11-26 22:17:14 +01:00
jonaswinkler
68e0c21eb0 Update README.md 2020-11-26 19:52:26 +01:00
jonaswinkler
d5ec762954 couple changes to the consumer. 2020-11-26 18:55:05 +01:00
jonaswinkler
7bb1982c48 fixed lockfile due to merge. 2020-11-26 18:40:51 +01:00
jonaswinkler
f956073f4a Merge branch 'dev' into feature-ocrmypdf 2020-11-26 18:40:01 +01:00
jonaswinkler
ae30fef641 Update README.md 2020-11-26 18:22:33 +01:00
jonaswinkler
75390693b9 Apparently there was a very good reason to use inotify. fixes #46 complete with test cases for inotify and polling. 2020-11-26 17:57:03 +01:00
Jonas Winkler
43b473dc53 Test cases for the API 2020-11-26 17:57:00 +01:00
Jonas Winkler
30acfdd3f1 tests for the classifier and fixes for edge cases with minimal data. 2020-11-26 14:18:34 +01:00
Jonas Winkler
e87575240d more tests of the new parser 2020-11-26 00:08:23 +01:00
Jonas Winkler
39fa02dcb1 more test 2020-11-25 21:38:19 +01:00
Jonas Winkler
7e84863beb Merge branch 'dev' into feature-ocrmypdf 2020-11-25 21:13:02 +01:00
Jonas Winkler
2a4fe4dceb fixed the decryption code, but its still untested. 2020-11-25 21:10:50 +01:00
Jonas Winkler
ef15de18a9 Paperless will continue to operate with encrypted files, however, all new files will be stored unencrypted. 2020-11-25 21:03:06 +01:00
Jonas Winkler
2163015d06 changelog 2020-11-25 20:26:07 +01:00
Jonas Winkler
3b38ac0f9b Removed ability to encrypt documents. 2020-11-25 20:23:25 +01:00
Jonas Winkler
6f30ceea38 GnuPG for archive file. 2020-11-25 20:16:27 +01:00
Jonas Winkler
f51d2be303 fixed the test cases 2020-11-25 19:51:09 +01:00
Jonas Winkler
9bd0bee2f6 codestyle 2020-11-25 19:51:02 +01:00
Jonas Winkler
a60a4babf6 OMP_THREAD_LIMIT 2020-11-25 19:37:59 +01:00
Jonas Winkler
a03315102a added image DPI detection to the tesseract parser. 2020-11-25 19:37:48 +01:00
Jonas Winkler
df801d17e1 reworked the interface of the parsers. 2020-11-25 19:36:39 +01:00
Jonas Winkler
d3c13f6c93 removed unused settings. 2020-11-25 19:30:11 +01:00
Jonas Winkler
fe7aa10d2c frontend support for downloading originals 2020-11-25 18:01:43 +01:00
Jonas Winkler
17a581495c proper filenames for originals and archived documents 2020-11-25 18:01:29 +01:00
Jonas Winkler
64180b5668 fixed up a test case 2020-11-25 17:28:49 +01:00
Jonas Winkler
81aaadb2a3 codestyle 2020-11-25 17:23:57 +01:00
Jonas Winkler
b1110f7291 update git ignore 2020-11-25 17:22:51 +01:00
Jonas Winkler
cb9e5b5ee3 Add metadata field: has archive version 2020-11-25 17:18:57 +01:00
Jonas Winkler
af99cbccd9 Merge branch 'dev' into feature-ocrmypdf 2020-11-25 17:17:14 +01:00
Jonas Winkler
97639508cb Basic support for metadata added. Fixes 404 for actions on invalid document ids. 2020-11-25 17:16:04 +01:00
Jonas Winkler
b269af7572 Merge branch 'dev' into feature-ocrmypdf 2020-11-25 16:58:20 +01:00
Jonas Winkler
1987dccf48 changelog 2020-11-25 16:30:53 +01:00
Jonas Winkler
d92214d412 codestyle 2020-11-25 16:05:52 +01:00
Jonas Winkler
751c2ac54b added a simple sanity checker. 2020-11-25 16:04:58 +01:00
Jonas Winkler
6aca09d485 additional note about the automatic matching algorithm 2020-11-25 15:06:27 +01:00
Jonas Winkler
56ce267f89 removed obsolete tests. 2020-11-25 14:51:32 +01:00
Jonas Winkler
ef6690905e todo note. 2020-11-25 14:51:00 +01:00
Jonas Winkler
2d559d330d reworked PDF parser that uses OCRmyPDF and produces archive files. 2020-11-25 14:50:43 +01:00
Jonas Winkler
95ec520f13 api serves archive files by default. 2020-11-25 14:48:36 +01:00
Jonas Winkler
8069c2eb6a add support for archive files. 2020-11-25 14:47:17 +01:00
Jonas Winkler
9a33f191a7 added archive directory. 2020-11-25 14:45:21 +01:00
Jonas Winkler
dd83364326 default language check 2020-11-25 10:52:38 +01:00
jonaswinkler
977594fece Update README.md 2020-11-24 15:34:58 +01:00
Jonas Winkler
cd6e7d9563 fixed a typo in one of the components 2020-11-23 23:39:42 +01:00
Jonas Winkler
f4013b1343 added setting PAPERLESS_AUTO_LOGIN_USERNAME 2020-11-23 22:50:02 +01:00
Jonas Winkler
09e419aeee Added some notes about how to move back to paperless. 2020-11-23 21:42:01 +01:00
Jonas Winkler
d7160de9f1 many changes to the documentation, mostly typos 2020-11-23 19:34:52 +01:00
jonaswinkler
ded8f865d8 Update README.md 2020-11-23 18:45:23 +01:00
jonaswinkler
1e95d22e1a Update README.md 2020-11-23 18:40:22 +01:00
Jonas Winkler
49ff1984f0 update README.md 2020-11-23 13:15:19 +01:00
Jonas Winkler
f7fa110afe docs, screenshots 2020-11-23 13:10:28 +01:00
Jonas Winkler
cbdb45473a Merge branch 'master' into dev 2020-11-23 00:44:27 +01:00
Jonas Winkler
42b5ac6aff somehow messed up the documentation. oh well. 2020-11-23 00:43:30 +01:00
Jonas Winkler
ae17a604d0 Merge branch 'dev' 2020-11-23 00:37:01 +01:00
Jonas Winkler
933cbe4594 docs 2020-11-23 00:35:06 +01:00
Jonas Winkler
1e9ac63428 prep work for 0.9.2 2020-11-23 00:25:19 +01:00
Jonas Winkler
c99668b355 changelog 2020-11-22 23:42:57 +01:00
Jonas Winkler
6cf0b851b7 post-merge changes 2020-11-22 23:12:24 +01:00
Jonas Winkler
d252a1dcda Merge branch 'dev' into celery-tasks 2020-11-22 22:49:37 +01:00
Jonas Winkler
fa5df5d28e modular dashboard 2020-11-22 22:35:39 +01:00
Jonas Winkler
4b47f4929e fix release script 2020-11-22 22:35:25 +01:00
Jonas Winkler
e44b918af2 more layout 2020-11-22 22:07:55 +01:00
Jonas Winkler
a4b268cdae shadows are awesome 2020-11-22 21:16:14 +01:00
Jonas Winkler
d9ae4322ea display tags in thumbnail 2020-11-22 21:06:48 +01:00
Jonas Winkler
a316521ea6 more layout 2020-11-22 20:32:41 +01:00
Jonas Winkler
a214536a51 logo 2020-11-22 20:11:44 +01:00
Jonas Winkler
acca5be585 more layout 2020-11-22 20:07:41 +01:00
Jonas Winkler
b622b3fc6a more layout 2020-11-22 20:00:58 +01:00
Jonas Winkler
63953b85e9 layout changes 2020-11-22 19:30:55 +01:00
Jonas Winkler
6c0e0755b9 menu closing on mobile 2020-11-22 17:48:54 +01:00
Jonas Winkler
8e7a3d309f page title 2020-11-22 16:39:25 +01:00
Jonas Winkler
09a9ab7a34 layout changes 2020-11-22 16:38:47 +01:00
Jonas Winkler
c11ce4e06f favicon 2020-11-22 16:38:27 +01:00
Jonas Winkler
8650af05f7 many layout and theme changes 2020-11-22 16:33:26 +01:00
Jonas Winkler
25f88b7ae9 now using SCSS for better theming support 2020-11-22 14:43:59 +01:00
Jonas Winkler
e75f48d148 changelog 2020-11-22 13:55:31 +01:00
Jonas Winkler
d8e27600be workaround for a bug in django-q: task results with too long names would not show up in the result lists. 2020-11-22 13:53:19 +01:00
Jonas Winkler
9e31429732 travis fixes 2020-11-22 13:37:24 +01:00
Jonas Winkler
1e0020b56b travis fixes 2020-11-22 13:31:54 +01:00
Jonas Winkler
79e6b1f5dd travis fixes 2020-11-22 13:25:59 +01:00
Jonas Winkler
5a292426c9 codestyle 2020-11-22 13:23:46 +01:00
Jonas Winkler
d2df1b0fc9 updated travis 2020-11-22 13:20:20 +01:00
Jonas Winkler
fec9e54049 new setting: PAPERLESS_OCR_PAGES 2020-11-22 12:54:08 +01:00
Jonas Winkler
ea089de3b3 added a test case for the index 2020-11-22 11:42:30 +01:00
Jonas Winkler
172b37239f changed a few things with the mail rule admin. 2020-11-22 11:42:17 +01:00
Jonas Winkler
388e5b56de reversible migrations. 2020-11-22 11:41:13 +01:00
Jonas Winkler
532d5c1744 a couple styling changes, collapsible menu 2020-11-22 11:35:04 +01:00
Jonas Winkler
54af13e4b8 much better mail rule admin 2020-11-22 01:39:48 +01:00
Jonas Winkler
d65a118d8a use docker compose for building 2020-11-22 00:35:19 +01:00
Jonas Winkler
af3d161f66 updated the admin, ordering for mail rules 2020-11-21 23:12:34 +01:00
Jonas Winkler
d3482a4aef changelog 2020-11-21 20:44:35 +01:00
Jonas Winkler
3600e5a8fb updated docs 2020-11-21 20:29:30 +01:00
Jonas Winkler
3afee66aaa updated entrypoint script to wait for postgres 2020-11-21 20:14:48 +01:00
Jonas Winkler
110c5c392c added tests to pycodestyle ignore for now. 79 characters really doesnt work there and i don't really care enough. 2020-11-21 16:07:28 +01:00
Jonas Winkler
db4519a644 url patterns cleanup 2020-11-21 15:34:30 +01:00
Jonas Winkler
450fb877f6 code cleanup 2020-11-21 15:34:00 +01:00
Jonas Winkler
b44f8383e4 code cleanup 2020-11-21 14:03:45 +01:00
Jonas Winkler
5a84cc835a updated release script 2020-11-21 13:05:17 +01:00
Jonas Winkler
529cc04fd1 code cleanup 2020-11-21 12:12:19 +01:00
Jonas Winkler
b7fec4d355 using mime type checking during upload 2020-11-21 01:42:55 +01:00
Jonas Winkler
77559332bc docs 2020-11-20 18:45:44 +01:00
Jonas Winkler
321adb5df2 making the migration reversible 2020-11-20 18:45:37 +01:00
Jonas Winkler
09acb134b7 updated mail: now uses mime type detection 2020-11-20 18:14:42 +01:00
Jonas Winkler
3d5b66c2b7 FileType does not care about the extension anymore. 2020-11-20 16:18:59 +01:00
Jonas Winkler
41650f20f4 mime type handling 2020-11-20 13:31:03 +01:00
Jonas Winkler
bd45a804a7 docs 2020-11-20 13:28:30 +01:00
Jonas Winkler
3d6b555deb Merge branch 'master' into dev 2020-11-20 11:32:34 +01:00
Jonas Winkler
8681cad77c add required packages to travis 2020-11-20 11:29:34 +01:00
Jonas Winkler
28ea67f252 removed some empty folders. 2020-11-20 11:28:30 +01:00
Jonas Winkler
1255ecf86e update dependencies. 2020-11-20 11:28:19 +01:00
Jonas Winkler
2c9555015b make the index dir if it does not exist. 2020-11-20 11:21:09 +01:00
Jonas Winkler
391020a2b0 small changes 2020-11-20 10:58:17 +01:00
Jonas Winkler
cb2340539d updated pipenv 2020-11-19 22:14:11 +01:00
Jonas Winkler
17430210a1 Merge branch 'dev' into celery-tasks 2020-11-19 22:10:57 +01:00
Jonas Winkler
1655d85a53 testing the tesseract parser 2020-11-19 20:31:08 +01:00
jonaswinkler
1df664d109 Update README.md 2020-11-19 16:40:04 +01:00
jonaswinkler
a2e92b9d74 Update README.md 2020-11-19 16:38:23 +01:00
Jonas Winkler
9e81c82452 Pipfile update 2020-11-10 01:26:27 +01:00
Jonas Winkler
b3126934b3 Merge branch 'dev' into celery-tasks 2020-11-10 00:16:59 +01:00
Jonas Winkler
37bd4a7d0e added broker to compose file 2020-11-07 12:56:26 +01:00
Jonas Winkler
ae8a048ea6 fixed up the docker 2020-11-07 12:47:17 +01:00
Jonas Winkler
b0465e65c3 nicer status 2020-11-07 12:10:53 +01:00
Jonas Winkler
036f11acaa better toasts, better dashboard, first implementation of consumer status 2020-11-07 12:05:15 +01:00
Jonas Winkler
572e40ca27 backend that supports asgi and status update sockets with channels 2020-11-07 11:31:04 +01:00
463 changed files with 38621 additions and 5868 deletions

View File

@@ -1,3 +1,4 @@
**/__pycache__
/src-ui/.vscode
/src-ui/node_modules
/src-ui/dist
@@ -10,3 +11,9 @@
.pytest_cache
/dist
/scripts
/resources
**/tests
**/*.spec.ts
**/htmlcov
/src/.pytest_cache
.idea

48
.github/ISSUE_TEMPLATE/bug_report.md vendored Normal file
View File

@@ -0,0 +1,48 @@
---
name: Bug report
about: Something is not working
title: "[BUG] Concise description of the issue"
labels: ''
assignees: ''
---
<!---
=> Before opening an issue, please check the documentation and see if it helps you resolve your issue: https://paperless-ng.readthedocs.io/en/latest/troubleshooting.html
=> Please also make sure that you followed the installation instructions.
=> Please search the issues and look for similar issues before opening a bug report.
=> If you would like to submit a feature request please submit one under https://github.com/jonaswinkler/paperless-ng/discussions/categories/feature-requests
=> If you encounter issues while installing of configuring Paperless-ng, please post that in the "Support" section of the discussions. Remember that Paperless successfully runs on a variety of different systems. If paperless does not start, it's probably an issue with your system, and not an issue of paperless.
=> Don't remove the [BUG] prefix from the title.
-->
**Describe the bug**
A clear and concise description of what the bug is.
**To Reproduce**
Steps to reproduce the behavior:
1. Go to '...'
2. Click on '....'
3. Scroll down to '....'
4. See error
**Expected behavior**
A clear and concise description of what you expected to happen.
**Screenshots**
If applicable, add screenshots to help explain your problem.
**Webserver logs**
```
If available, post any logs from the web server related to your issue.
```
**Relevant information**
- Host OS of the machine running paperless: [e.g. Archlinux / Ubuntu 20.04]
- Browser [e.g. chrome, safari]
- Version [e.g. 1.0.0]
- Installation method: [docker / bare metal]
- Any configuration changes you made in `docker-compose.yml`, `docker-compose.env` or `paperless.conf`.

20
.github/ISSUE_TEMPLATE/other.md vendored Normal file
View File

@@ -0,0 +1,20 @@
---
name: Other
about: Anything that is not a feature request or bug.
title: "[Other] Title of your issue"
labels: ''
assignees: ''
---
<!--
=> Discussions, Feedback and other suggestions belong in the "Discussion" section and not on the issue tracker.
=> If you would like to submit a feature request please submit one under https://github.com/jonaswinkler/paperless-ng/discussions/categories/feature-requests
=> If you encounter issues while installing of configuring Paperless-ng, please post that in the "Support" section of the discussions. Remember that Paperless successfully runs on a variety of different systems. If paperless does not start, it's probably is an issue with your system, and not an issue of paperless.
=> Don't remove the [Other] prefix from the title.
-->

77
.github/workflows/ansible.yml vendored Normal file
View File

@@ -0,0 +1,77 @@
---
name: Ansible Role
on:
push:
branches-ignore:
- 'translations**'
pull_request:
branches-ignore:
- 'translations**'
jobs:
# https://molecule.readthedocs.io/en/latest/ci.html#github-actions
test:
runs-on: ubuntu-latest
steps:
- name: Check out the codebase
uses: actions/checkout@v2
if: github.event_name != 'pull_request'
with:
path: "${{ github.repository }}"
- name: Check out the codebase
uses: actions/checkout@v2
if: github.event_name == 'pull_request'
with:
# merge commit is not available from tree at this point in time
# https://github.com/actions/checkout#checkout-pull-request-head-commit-instead-of-merge-commit
ref: "${{ github.event.pull_request.head.sha }}"
path: "${{ github.repository }}"
- name: Set up Python
uses: actions/setup-python@v2
- name: Set up Docker
uses: docker-practice/actions-setup-docker@master
- name: Install dependencies
run: |
python3 -m pip install --upgrade pip
python3 -m pip install molecule[ansible,docker] jmespath
ansible --version
docker --version
molecule --version
python --version
- name: Test installation/build/upgrade with molecule
run: |
cd ansible
molecule create
molecule verify
molecule converge
molecule idempotence
molecule verify
molecule destroy
working-directory: "${{ github.repository }}"
# # https://galaxy.ansible.com/docs/contributing/importing.html
# release:
# runs-on: ubuntu-latest
# needs:
# - test
# # https://docs.github.com/en/free-pro-team@latest/actions/reference/context-and-expression-syntax-for-github-actions#github-context
# if: contains(github.ref, 'refs/tags/')
# steps:
# - name: Check out the codebase
# uses: actions/checkout@v2
# with:
# path: "${{ github.repository }}"
# - name: Set up Python
# uses: actions/setup-python@v2
# - name: Install dependencies
# run: |
# python3 -m pip install --upgrade ansible-base
# ansible --version
# python --version
# - name: Trigger a new import on Galaxy
# # TODO Check if source if pulled from cwd or imported from github
# # https://github.com/ansible/ansible/blob/devel/lib/ansible/cli/galaxy.py
# run: |
# cd ansible
# ansible-galaxy role import --api-key ${{ secrets.GALAXY_API_KEY }} $(echo ${{ github.repository }} | cut -d/ -f1) $(echo ${{ github.repository }} | cut -d/ -f2)
# working-directory: "${{ github.repository }}"

304
.github/workflows/ci.yml vendored Normal file
View File

@@ -0,0 +1,304 @@
name: ci
on:
push:
tags: ng-*
branches-ignore:
- 'translations**'
pull_request:
branches-ignore:
- 'translations**'
jobs:
documentation:
runs-on: ubuntu-20.04
steps:
-
name: Checkout
uses: actions/checkout@v2
-
name: Set up Python
uses: actions/setup-python@v2
with:
python-version: 3.8
-
name: Get pip cache dir
id: pip-cache
run: |
echo "::set-output name=dir::$(pip cache dir)"
-
name: Persistent Github pip cache
uses: actions/cache@v2
with:
path: ${{ steps.pip-cache.outputs.dir }}
key: ${{ runner.os }}-pip3.8}
-
name: Install dependencies
run: |
pip install --upgrade pipenv
pipenv install --system --dev --ignore-pipfile
-
name: Make documentation
run: |
cd docs/
make html
-
name: Upload artifact
uses: actions/upload-artifact@v2
with:
name: documentation
path: docs/_build/html/
tests:
runs-on: ubuntu-20.04
strategy:
matrix:
python-version: ['3.6', '3.7', '3.8', '3.9']
fail-fast: false
steps:
-
name: Checkout
uses: actions/checkout@v2
-
name: Set up Python
uses: actions/setup-python@v2
with:
python-version: "${{ matrix.python-version }}"
-
name: Get pip cache dir
id: pip-cache
run: |
echo "::set-output name=dir::$(pip cache dir)"
-
name: Persistent Github pip cache
uses: actions/cache@v2
with:
path: ${{ steps.pip-cache.outputs.dir }}
key: ${{ runner.os }}-pip${{ matrix.python-version }}
-
name: Prepare tests
run: |
sudo apt-get update -qq
sudo apt-get install -qq --no-install-recommends unpaper tesseract-ocr imagemagick ghostscript optipng
pip install --upgrade pipenv
pipenv install --system --dev --ignore-pipfile
-
name: Tests
run: |
cd src/
pytest
-
name: Codestyle
run: |
cd src/
pycodestyle
-
name: Publish coverage results
if: matrix.python-version == '3.8'
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
# https://github.com/coveralls-clients/coveralls-python/issues/251
run: |
cd src/
coveralls --service=github
frontend:
runs-on: ubuntu-20.04
steps:
-
name: Checkout
uses: actions/checkout@v2
-
uses: actions/setup-node@v2
with:
node-version: '15'
-
name: Configure version on dev branches
if: startsWith(github.ref, 'refs/heads/feature-') || github.ref == 'refs/heads/dev'
run: |
git_hash=$(git rev-parse --short "$GITHUB_SHA")
git_branch=${GITHUB_REF#refs/heads/}
sed -i -E "s/version: \"(.*)\"/version: \"${git_branch} ${git_hash}\"/g" src-ui/src/environments/environment.prod.ts
-
name: Build frontend
run: ./compile-frontend.sh
-
name: Upload artifact
uses: actions/upload-artifact@v2
with:
name: frontend-compiled
path: src/documents/static/frontend/
build-release:
needs: [frontend, documentation, tests]
runs-on: ubuntu-20.04
steps:
-
name: Checkout
uses: actions/checkout@v2
-
name: Set up Python
uses: actions/setup-python@v2
with:
python-version: 3.7
-
name: Install dependencies
run: |
sudo apt-get update -qq
sudo apt-get install -qq --no-install-recommends gettext liblept5
pip3 install -r requirements.txt
-
name: Download frontend artifact
uses: actions/download-artifact@v2
with:
name: frontend-compiled
path: src/documents/static/frontend/
-
name: Download documentation artifact
uses: actions/download-artifact@v2
with:
name: documentation
path: docs/_build/html/
-
name: Move files
run: |
mkdir dist
mkdir dist/paperless-ng
mkdir dist/paperless-ng/scripts
cp .dockerignore .env Dockerfile Pipfile Pipfile.lock LICENSE README.md requirements.txt dist/paperless-ng/
cp paperless.conf.example dist/paperless-ng/paperless.conf
cp gunicorn.conf.py dist/paperless-ng/gunicorn.conf.py
cp docker/ dist/paperless-ng/docker -r
cp scripts/*.service scripts/*.sh dist/paperless-ng/scripts/
cp src/ dist/paperless-ng/src -r
cp docs/_build/html/ dist/paperless-ng/docs -r
-
name: Compile messages
run: |
cd dist/paperless-ng/src
python3 manage.py compilemessages
-
name: Collect static files
run: |
cd dist/paperless-ng/src
python3 manage.py collectstatic --no-input
-
name: Make release package
run: |
cd dist
find . -name __pycache__ | xargs rm -r
tar -cJf paperless-ng.tar.xz paperless-ng/
-
name: Upload release artifact
uses: actions/upload-artifact@v2
with:
name: release
path: dist/paperless-ng.tar.xz
publish-release:
runs-on: ubuntu-latest
needs: build-release
if: contains(github.ref, 'refs/tags/ng-')
steps:
-
name: Download release artifact
uses: actions/download-artifact@v2
with:
name: release
path: ./
-
name: Get version
id: get_version
run: |
echo ::set-output name=version::${GITHUB_REF#refs/tags/ng-}
-
name: Create release
id: create_release
uses: actions/create-release@v1
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
with:
tag_name: ng-${{ steps.get_version.outputs.version }}
release_name: Paperless-ng ${{ steps.get_version.outputs.version }}
draft: false
prerelease: false
body: |
For a complete list of changes, see the changelog at https://paperless-ng.readthedocs.io/en/latest/changelog.html.
-
name: Upload release archive
id: upload-release-asset
uses: actions/upload-release-asset@v1
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
with:
upload_url: ${{ steps.create_release.outputs.upload_url }} # This pulls from the CREATE RELEASE step above, referencing it's ID to get its outputs object, which include a `upload_url`. See this blog post for more info: https://jasonet.co/posts/new-features-of-github-actions/#passing-data-to-future-steps
asset_path: ./paperless-ng.tar.xz
asset_name: paperless-ng-${{ steps.get_version.outputs.version }}.tar.xz
asset_content_type: application/x-xz
# build and push image to docker hub.
build-docker-image:
if: github.event_name == 'push' && (startsWith(github.ref, 'refs/heads/feature-') || github.ref == 'refs/heads/dev' || startsWith(github.ref, 'refs/tags/ng-'))
runs-on: ubuntu-latest
needs: [frontend, tests]
steps:
-
name: Prepare
id: prepare
run: |
IMAGE_NAME=jonaswinkler/paperless-ng
if [[ $GITHUB_REF == refs/tags/ng-* ]]; then
TAGS=${IMAGE_NAME}:${GITHUB_REF#refs/tags/ng-},${IMAGE_NAME}:latest
INSPECT_TAG=${IMAGE_NAME}:latest
elif [[ $GITHUB_REF == refs/heads/* ]]; then
TAGS=${IMAGE_NAME}:${GITHUB_REF#refs/heads/}
INSPECT_TAG=${TAGS}
else
exit 1
fi
echo ::set-output name=tags::${TAGS}
echo ::set-output name=inspect_tag::${INSPECT_TAG}
-
name: Checkout
uses: actions/checkout@v2
-
name: Download frontend artifact
uses: actions/download-artifact@v2
with:
name: frontend-compiled
path: src/documents/static/frontend/
-
name: Set up Docker Buildx
uses: docker/setup-buildx-action@v1
-
name: Set up QEMU
uses: docker/setup-qemu-action@v1
-
name: Cache Docker layers
uses: actions/cache@v2
with:
path: /tmp/.buildx-cache
key: ${{ runner.os }}-buildx-${{ github.sha }}
restore-keys: |
${{ runner.os }}-buildx-
-
name: Login to DockerHub
uses: docker/login-action@v1
with:
username: ${{ secrets.DOCKER_USERNAME }}
password: ${{ secrets.DOCKER_PASSWORD }}
-
name: Build and push
uses: docker/build-push-action@v2
with:
context: .
file: ./Dockerfile
platforms: linux/amd64,linux/arm/v7,linux/arm64
push: true
tags: ${{ steps.prepare.outputs.tags }}
cache-from: type=local,src=/tmp/.buildx-cache
cache-to: type=local,dest=/tmp/.buildx-cache
-
name: Inspect image
run: |
docker buildx imagetools inspect ${{ steps.prepare.outputs.inspect_tag }}

18
.gitignore vendored
View File

@@ -65,8 +65,8 @@ target/
.virtualenv
virtualenv
/venv
docker-compose.env
docker-compose.yml
/docker-compose.env
/docker-compose.yml
# Used for development
scripts/import-for-development
@@ -76,17 +76,13 @@ scripts/nuke
/static/
# Stored PDFs
/media/documents/originals/*
/media/documents/thumbnails/*
/data/classification_model.pickle
/data/db.sqlite3
/data/index
/media/
/data/
/paperless.conf
/consume
/export
/consume/
/export/
/src-ui/.vscode
# this is where the compiled frontend is moved to.
/src/documents/static/frontend/
/docs/.vscode/settings.json

16
.readthedocs.yml Normal file
View File

@@ -0,0 +1,16 @@
# .readthedocs.yml
# Read the Docs configuration file
# See https://docs.readthedocs.io/en/stable/config-file/v2.html for details
# Required
version: 2
# Build documentation in the docs/ directory with Sphinx
sphinx:
configuration: docs/conf.py
# Optionally set the version of Python and requirements required to build your docs
python:
version: 3.7
install:
- requirements: docs/requirements.txt

View File

@@ -1,22 +0,0 @@
language: python
python:
- "3.6"
- "3.7"
- "3.8"
before_install:
- sudo apt-get update -qq
- sudo apt-get install -qq libpoppler-cpp-dev unpaper tesseract-ocr
install:
- pip install --upgrade pipenv
- pipenv install --system --dev
script:
- cd src/
- pipenv run pytest --cov
- pipenv run pycodestyle
after_success:
- pipenv run coveralls

View File

@@ -1,13 +1,30 @@
# Contributing
If you feel that somethings is not working, please submit an issue. You can also ask questions on the issue tracker by tagging your question with the question tag.
There's still lots of things to be done, just have a look at that issue log. If you feel like conctributing to the project, please do! Bug fixes and improvements to the front end (I just can't seem to get some of these CSS things right) are always welcome.
Pull requests are welcome, however, I will be a little bit more strict about what goes into the code and what does not. If you want to make a big change, please ask me about it first.
If you want to implement something big: Please start a discussion about that in the issues! Maybe I've already had something similar in mind and we can make it happen together. However, keep in mind that the general roadmap is to make the existing features stable and get them tested. See the roadmap in the readme.
* When making additions to the project, consider if the majority of users will benefit from your change. If not, you're probably better of forking the project.
* Also consider if your change will get in the way of other users. A good change is a change that enhances the experience of some users who want that change and does not affect users who do not care about the change.
However:
## Python
* Bug fixes and are always welcome. Docker makes things easier, however, I alone cannot ensure that this runs on all platforms.
* Improvements to the styling of the front-end are always welcome. I'm no expert in things UX, and simply copied one of the Bootstrap examples. I think it turned out rather good, but I just can't seem to get some things working properly.
Use python 3.6 for development. Paperless supports python 3.6, 3.7 and 3.8.
## Branches
master always reflects the latest release.
dev contains all changes that will be part of the next release. Use this branch to start making your changes.
feature-X branches is for experimental stuff that will eventually be merged into dev, and then released as part of the next release.
## Testing:
I'm trying to get most of paperless tested, so please do the same for your code! I know its a hassle, but it makes sure that your code works now and will allow us to detect regressions easily.
To test your code, execute `pytest` in the src/ directory. Executing that in the project root is no good. This also generates a html coverage report, which you can use to see if you missed anything important during testing.
## More info:
... is available in the documentation. https://paperless-ng.readthedocs.io/en/latest/extending.html

109
Dockerfile Normal file
View File

@@ -0,0 +1,109 @@
FROM ubuntu:20.04 AS jbig2enc
WORKDIR /usr/src/jbig2enc
RUN apt-get update && apt-get install -y --no-install-recommends build-essential automake libtool libleptonica-dev zlib1g-dev git ca-certificates
RUN git clone https://github.com/agl/jbig2enc .
RUN ./autogen.sh
RUN ./configure && make
FROM python:3.7-slim
# Binary dependencies
RUN apt-get update \
&& apt-get -y --no-install-recommends install \
# Basic dependencies
curl \
file \
# fonts for text file thumbnail generation
fonts-liberation \
# for making translations further down
gettext \
gnupg \
imagemagick \
# for Numpy
libatlas-base-dev \
libxslt1-dev \
mime-support \
# thumbnail size reduction
optipng \
sudo \
tzdata \
# OCRmyPDF dependencies
ghostscript \
icc-profiles-free \
liblept5 \
libxml2 \
pngquant \
qpdf \
tesseract-ocr \
tesseract-ocr-eng \
tesseract-ocr-deu \
tesseract-ocr-fra \
tesseract-ocr-ita \
tesseract-ocr-spa \
unpaper \
zlib1g \
# This pulls in updated dependencies from bullseye to fix some issues with file type detection.
# TODO: Remove this once bullseye releases.
&& echo "deb http://deb.debian.org/debian bullseye main" > /etc/apt/sources.list.d/bullseye.list \
&& apt-get update \
&& apt-get install --no-install-recommends -y file libmagic-dev \
&& rm -rf /var/lib/apt/lists/* \
&& rm /etc/apt/sources.list.d/bullseye.list
# copy jbig2enc
COPY --from=jbig2enc /usr/src/jbig2enc/src/.libs/libjbig2enc* /usr/local/lib/
COPY --from=jbig2enc /usr/src/jbig2enc/src/jbig2 /usr/local/bin/
COPY --from=jbig2enc /usr/src/jbig2enc/src/*.h /usr/local/include/
WORKDIR /usr/src/paperless/src/
COPY requirements.txt ../
# Python dependencies
RUN apt-get update \
&& apt-get -y --no-install-recommends install \
build-essential \
libpq-dev \
libqpdf-dev \
&& python3 -m pip install --upgrade --no-cache-dir supervisor \
&& python3 -m pip install --no-cache-dir -r ../requirements.txt \
&& apt-get -y purge build-essential libqpdf-dev \
&& apt-get -y autoremove --purge \
&& rm -rf /var/lib/apt/lists/*
# setup docker-specific things
COPY docker/ ./docker/
RUN cd docker \
&& cp imagemagick-policy.xml /etc/ImageMagick-6/policy.xml \
&& mkdir /var/log/supervisord /var/run/supervisord \
&& cp supervisord.conf /etc/supervisord.conf \
&& cp docker-entrypoint.sh /sbin/docker-entrypoint.sh \
&& chmod 755 /sbin/docker-entrypoint.sh \
&& chmod +x install_management_commands.sh \
&& ./install_management_commands.sh \
&& cd .. \
&& rm docker -rf
COPY gunicorn.conf.py ../
# copy app
COPY src/ ./
# add users, setup scripts
RUN addgroup --gid 1000 paperless \
&& useradd --uid 1000 --gid paperless --home-dir /usr/src/paperless paperless \
&& chown -R paperless:paperless ../ \
&& sudo -HEu paperless python3 manage.py collectstatic --clear --no-input \
&& sudo -HEu paperless python3 manage.py compilemessages
VOLUME ["/usr/src/paperless/data", "/usr/src/paperless/media", "/usr/src/paperless/consume", "/usr/src/paperless/export"]
ENTRYPOINT ["/sbin/docker-entrypoint.sh"]
EXPOSE 8000
CMD ["/usr/local/bin/supervisord", "-c", "/etc/supervisord.conf"]
LABEL maintainer="Jonas Winkler <dev@jpwinkler.de>"

66
Pipfile
View File

@@ -9,43 +9,63 @@ verify_ssl = true
name = "piwheels"
[packages]
django = "~=3.1"
pillow = "*"
dateparser = "~=0.7"
dateparser = "~=0.7.6"
django = "~=3.1.3"
django-cors-headers = "*"
djangorestframework = "~=3.12"
django-extensions = "*"
django-filter = "~=2.4.0"
django-q = "~=1.3.4"
djangorestframework = "~=3.12.2"
filelock = "*"
fuzzywuzzy = {extras = ["speedup"], version = "*"}
gunicorn = "*"
imap-tools = "*"
langdetect = "*"
# numpy 1.20.0 drops python 3.6 support
numpy = "~=1.19.5"
pathvalidate = "*"
# pinned to 8.1.0, since aarch64 wheels might not be available beyond that https://github.com/python-pillow/Pillow/issues/5202
pillow = "==8.1.0"
pikepdf = "~=2.5.0"
python-gnupg = "*"
python-dotenv = "*"
filemagic = "*"
pyocr = "~=0.7"
langdetect = "*"
pdftotext = "*"
django-filter = "~=2.4"
python-dateutil = "*"
python-magic = "*"
psycopg2-binary = "*"
scikit-learn="~=0.23"
whoosh="~=2.7"
gunicorn = "*"
whitenoise = "~=5.2"
fuzzywuzzy = "*"
python-Levenshtein = "*"
django-extensions = "*"
watchdog = "*"
pathvalidate = "*"
django-q = "*"
redis = "*"
imap-tools = "*"
# Pinned because aarch64 wheels and updates cause warnings when loading the classifier model.
scikit-learn="==0.24.0"
# Prevent scipy updates because 1.6 is incompatible with python 3.6
scipy="~=1.5.4"
whitenoise = "~=5.2.0"
watchdog = "~=1.0.0"
whoosh="~=2.7.4"
inotifyrecursive = "~=0.3.4"
ocrmypdf = "~=11.6"
tqdm = "*"
tika = "*"
# TODO: This will sadly also install daphne+dependencies,
# which an ASGI server we don't need. Adds about 15MB image size.
channels = "~=3.0"
channels-redis = "*"
uvicorn = {extras = ["standard"], version = "*"}
concurrent-log-handler = "*"
# uvloop 0.15+ incompatible with python 3.6
uvloop = "~=0.14.0"
# TODO: keep an eye on piwheel builds and update this once available (https://www.piwheels.org/project/cryptography/)
cryptography = "~=3.3.2"
"pdfminer.six" = "*"
[dev-packages]
coveralls = "*"
factory-boy = "*"
sphinx = "~=3.3"
tox = "*"
pycodestyle = "*"
pytest = "*"
pytest-cov = "*"
pytest-django = "*"
pytest-sugar = "*"
pytest-env = "*"
pytest-sugar = "*"
pytest-xdist = "*"
sphinx = "~=3.4.2"
sphinx_rtd_theme = "*"
tox = "*"

1328
Pipfile.lock generated

File diff suppressed because it is too large Load Diff

116
README.md
View File

@@ -1,90 +1,112 @@
[![Build Status](https://travis-ci.org/jonaswinkler/paperless-ng.svg?branch=master)](https://travis-ci.org/jonaswinkler/paperless-ng)
[![ci](https://github.com/jonaswinkler/paperless-ng/workflows/ci/badge.svg)](https://github.com/jonaswinkler/paperless-ng/actions)
![Ansible Role](https://github.com/jonaswinkler/paperless-ng/workflows/Ansible%20Role/badge.svg)
[![Documentation Status](https://readthedocs.org/projects/paperless-ng/badge/?version=latest)](https://paperless-ng.readthedocs.io/en/latest/?badge=latest)
[![Gitter](https://badges.gitter.im/paperless-ng/community.svg)](https://gitter.im/paperless-ng/community?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge&utm_content=badge)
[![Docker Hub Pulls](https://img.shields.io/docker/pulls/jonaswinkler/paperless-ng.svg)](https://hub.docker.com/r/jonaswinkler/paperless-ng)
[![Coverage Status](https://coveralls.io/repos/github/jonaswinkler/paperless-ng/badge.svg?branch=master)](https://coveralls.io/github/jonaswinkler/paperless-ng?branch=master)
# Paperless-ng
[Paperless](https://github.com/the-paperless-project/paperless) is an application by Daniel Quinn and others that indexes your scanned documents and allows you to easily search for documents and store metadata alongside your documents.
[Paperless (click me)](https://github.com/the-paperless-project/paperless) is an application by Daniel Quinn and contributors that indexes your scanned documents and allows you to easily search for documents and store metadata alongside your documents.
Paperless-ng is a fork of the original project, adding a new interface and many other changes under the hood. For a detailed list of changes, see below.
Paperless-ng is a fork of the original project, adding a new interface and many other changes under the hood. These key points should help you decide whether Paperless-ng is something you would prefer over Paperless:
This project is still in development and some things may not work as expected.
* Interface: The new front end is the main interface for paperless-ng, the old interface still exists but most customizations (such as thumbnails for the document list) have been removed.
* Encryption: Paperless-ng does not support GnuPG anymore, since storing your data on encrypted file systems (that you optionally mount on demand) achieves about the same result.
* Resource usage: Paperless-ng does use a bit more resources than Paperless. Running the web server requires about 300MB of RAM or more, depending on the configuration. While adding documents, it requires about 300MB additional RAM, depending on the document. It still runs on Pi (many users do that), but it has been generally geared to better use the resources of more powerful systems.
* API changes: If you rely on the REST API of paperless, some of its functionality has been changed.
For a detailed list of changes, have a look at the [change log](https://paperless-ng.readthedocs.io/en/latest/changelog.html) in the documentation.
# How it Works
Paperless does not control your scanner, it only helps you deal with what your scanner produces.
1. Buy a document scanner that can write to a place on your network. If you need some inspiration, have a look at the [scanner recommendations](https://paperless.readthedocs.io/en/latest/scanners.html) page.
2. Set it up to "scan to FTP" or something similar. It should be able to push scanned images to a server without you having to do anything. Of course if your scanner doesn't know how to automatically upload the file somewhere, you can always do that manually. Paperless doesn't care how the documents get into its local consumption directory.
3. Have the target server run the Paperless consumption script to OCR the file and index it into a local database.
4. Use the web frontend to sift through the database and find what you want.
5. Download the PDF you need/want via the web interface and do whatever you like with it. You can even print it and send it as if it's the original. In most cases, no one will care or notice.
1. Buy a document scanner that can write to a place on your network. If you need some inspiration, have a look at the [scanner recommendations](https://paperless-ng.readthedocs.io/en/latest/scanners.html) page. Set it up to "scan to FTP" or something similar. It should be able to push scanned images to a server without you having to do anything. Of course if your scanner doesn't know how to automatically upload the file somewhere, you can always do that manually. Paperless doesn't care how the documents get into its local consumption directory.
- Alternatively, you can use any of the mobile scanning apps out there. We have an app that allows you to share documents with paperless, if you're on Android. See the section on affiliated projects.
2. Wait for paperless to process your files. OCR is expensive, and depending on the power of your machine, this might take a bit of time.
3. Use the web frontend to sift through the database and find what you want.
4. Download the PDF you need/want via the web interface and do whatever you like with it. You can even print it and send it as if it's the original. In most cases, no one will care or notice.
Here's what you get:
![The before and after](https://raw.githubusercontent.com/the-paperless-project/paperless/master/docs/_static/screenshot.png)
![Dashboard](https://github.com/jonaswinkler/paperless-ng/raw/master/docs/_static/screenshots/dashboard.png)
# Why Paperless-ng?
# Features
I wanted to make big changes to the project that will impact the way it is used by its users greatly. Among the users who currently use paperless in production there are probably many that don't want these changes right away. I also wanted to have more control over what goes into the code and what does not. Therefore, paperless-ng was created. NG stands for both Angular (the framework used for the Frontend) and next-gen. Publishing this project under a different name also avoids confusion between paperless and paperless-ng.
The gist of the changes is the following:
* New front end. This will eventually be mobile friendly as well.
* New full text search.
* Performs OCR on your documents, adds selectable text to image only documents and adds tags, correspondents and document types to your documents.
* Supports PDF documents, images, plain text files, and Office documents (Word, Excel, Powerpoint, and LibreOffice equivalents).
* Office document support is optional and provided by Apache Tika (see [configuration](https://paperless-ng.readthedocs.io/en/latest/configuration.html#tika-settings))
* Paperless stores your documents plain on disk. Filenames and folders are managed by paperless and their format can be configured freely.
* Single page application front end.
* Includes a dashboard that shows basic statistics and has document upload.
* Filtering by tags, correspondents, types, and more.
* Customizable views can be saved and displayed on the dashboard.
* Full text search helps you find what you need.
* Auto completion suggests relevant words from your documents.
* Results are sorted by relevance to your search query.
* Highlighting shows you which parts of the document matched the query.
* Searching for similar documents ("More like this")
* Email processing: Paperless adds documents from your email accounts.
* Configure multiple accounts and filters for each account.
* When adding documents from mails, paperless can move these mails to a new folder, mark them as read, flag them as important or delete them.
* Machine learning powered document matching.
* Code cleanup in many, MANY areas.
* Paperless learns from your documents and will be able to automatically assign tags, correspondents and types to documents once you've stored a few documents in paperless.
* Optimized for multi core systems: Paperless-ng consumes multiple documents in parallel.
* The integrated sanity checker makes sure that your document archive is in good health.
If you want to see some screenshots of paperless-ng in action, [some are available in the documentation](https://paperless-ng.readthedocs.io/en/latest/screenshots.html).
For a complete list of changes, check out the [changelog](https://paperless-ng.readthedocs.io/en/latest/changelog.html)
## Planned
These features will make it into the application at some point, sorted by priority.
- **More search.** The search backend is incredibly versatile and customizable. Searching is the most important feature of this project and thus, I want to implement things like:
- Group and limit search results by correspondent, show “more from this” links in the results.
- Ability to search for “Similar documents” in the search results
- Provide corrections for mispelled queries
- **More robust consumer** that shows its progress on the web page.
- **More rigid email processing**. Like, dont delete imported mail, provide filters, etc...
- **Arbitrary tag colors**. Allow the selection of any color with a color picker.
## On the chopping block.
I don't know if these features are used all that much. I don't exactly know how they work and will probably remove them at some point in the future.
- **GnuPG encrypion.** Since its disabled by default and the website allows transparent access to encrypted documents anyway, this doesnt really provide any benefit over having the application stored on an encrypted file system.
# Getting started
The recommended way to deploy paperless is docker-compose. Use the provided docker-compose.yml files to get started. This pulls the image from Docker hub. Alternatively, you can build the image yourself.
The recommended way to deploy paperless is docker-compose. The files in the /docker/hub directory are configured to pull the image from Docker Hub.
Read the [documentation](https://paperless-ng.readthedocs.io/en/latest/setup.html#installation) on how to get started.
Alternatively, you can install the dependencies and setup apache and a database server yourself. Details for that will be available in the documentation.
Alternatively, you can install the dependencies and setup apache and a database server yourself. The documenation has a step by step guide on how to do it.
# Migrating to paperless-ng
Read the section about [migration](https://paperless-ng.readthedocs.io/en/latest/setup.html#migration-to-paperless-ng) in the documentation.
Read the section about [migration](https://paperless-ng.readthedocs.io/en/latest/setup.html#migration-to-paperless-ng) in the documentation. Its also entirely possible to go back to paperless by reverting the database migrations.
# Documentation
The documentation for Paperless-ng is available on [ReadTheDocs](https://paperless-ng.readthedocs.io/).
# Translation
Paperless is currently available in English, German, Dutch and French. Translation is coordinated at transifex: https://www.transifex.com/paperless/paperless-ng
If you want to see paperless in your own language, request that language at transifex and you can start translating after I approve the language.
# Feature Requests
Feature requests can be submitted via [GitHub Discussions](https://github.com/jonaswinkler/paperless-ng/discussions/categories/feature-requests), you can search for existing ideas, add your own and vote for the ones you care about! Note that some older feature requests can also be found under [issues](https://github.com/jonaswinkler/paperless-ng/issues).
# Questions? Something not working?
For bugs please [open an issue](https://github.com/jonaswinkler/paperless-ng/issues) or [start a discussion](https://github.com/jonaswinkler/paperless-ng/discussions) if you have questions.
## Feel like helping out?
There's still lots of things to be done, just have a look at open issues & discussions. If you feel like contributing to the project, please do! Bug fixes and improvements to the front end (I just can't seem to get some of these CSS things right) are always welcome. The documentation has some basic information on how to get started.
If you want to implement something big: Please start a discussion about that in the issues! Maybe I've already had something similar in mind and we can make it happen together. However, keep in mind that the general roadmap is to make the existing features stable and get them tested. See the roadmap above.
# Affiliated Projects
Paperless has been around a while now, and people are starting to build stuff on top of it. If you're one of those people, we can add your project to this list:
* [Paperless App](https://github.com/bauerj/paperless_app): An Android/iOS app for Paperless.
* [Paperless Desktop](https://github.com/thomasbrueggemann/paperless-desktop): A desktop UI for your Paperless installation. Runs on Mac, Linux, and Windows.
* [ansible-role-paperless](https://github.com/ovv/ansible-role-paperless): An easy way to get Paperless running via Ansible.
* [paperless-cli](https://github.com/stgarf/paperless-cli): A golang command line binary to interact with a Paperless instance.
* [Paperless App](https://github.com/bauerj/paperless_app): An Android/iOS app for Paperless. Updated to work with paperless-ng.
* [Paperless Share](https://github.com/qcasey/paperless_share). Share any files from your Android application with paperless. Very simple, but works with all of the mobile scanning apps out there that allow you to share scanned documents.
Compatibility with Paperless-ng is unknown.
These projects also exist, but their status and compatibility with paperless-ng is unknown.
* [Paperless Desktop](https://github.com/thomasbrueggemann/paperless-desktop): A desktop UI for your Paperless installation. Runs on Mac, Linux, and Windows.
* [paperless-cli](https://github.com/stgarf/paperless-cli): A golang command line binary to interact with a Paperless instance.
# Important Note
Document scanners are typically used to scan sensitive documents. Things like your social insurance number, tax records, invoices, etc. Everything is stored in the clear without encryption by default (it needs to be searchable, so if someone has ideas on how to do that on encrypted data, I'm all ears). This means that Paperless should never be run on an untrusted host. Instead, I recommend that if you do want to use it, run it locally on a server in your own home.
Document scanners are typically used to scan sensitive documents. Things like your social insurance number, tax records, invoices, etc. Everything is stored in the clear without encryption. This means that Paperless should never be run on an untrusted host. Instead, I recommend that if you do want to use it, run it locally on a server in your own home.

114
ansible/README.md Normal file
View File

@@ -0,0 +1,114 @@
Ansible Role: paperless-ng
==========================
Installs and configures paperless-ng EDMS on Debian/Ubuntu systems.
Requirements
------------
No special system requirements. Ansible 2.7 or newer is required.
Note that this role requires root access, so either run it in a playbook with a global `become: yes`, or invoke the role in your playbook like:
- hosts: all
roles:
- role: ansible
become: yes
Role Variables
--------------
Most configuration variables from paperless-ng itself are available and accept their respective arguments.
Every `PAPERLESS_*` configuration varaible is lowercased and instead prefixed with `paperlessng_*` in `defaults/main.yml`.
For a full listing including explainations and allowed values, see the current [documentation](https://paperless-ng.readthedocs.io/en/ng-0.9.14/configuration.html).
Additional variables available in this role are listed below, along with default values:
paperlessng_version: 0.9.14
The [release](https://github.com/jonaswinkler/paperless-ng/releases) archive version of paperless-ng to install.
paperlessng_redis_host: localhost
paperlessng_redis_port: 6379
Seperate configuration values that combine into `PAPERLESS_REDIS`.
paperlessng_db_type: sqlite
Database to use. Default is file-based SQLite.
paperlessng_db_host: localhost
paperlessng_db_port: 5432
paperlessng_db_name: paperlessng
paperlessng_db_user: paperlessng
paperlessng_db_pass: paperlessng
paperlessng_db_sslmode: prefer
Database configuration (only applicable if `paperlessng_db_type == 'postgresql'`).
paperlessng_directory: /opt/paperless-ng
Root directory paperless-ng is installed into.
paperlessng_virtualenv: "{{ paperlessng_directory }}/.venv"
Directory used for the virtual environment for paperless-ng.
paperlessng_ocr_languages:
- eng
List of OCR languages to install and configure (`apt search tesseract-ocr-*`).
paperlessng_use_jbig2enc: True
Whether to install and use [jbig2enc](https://github.com/agl/jbig2enc) for OCRmyPDF.
paperlessng_big2enc_lossy: False
Whether to use jbig2enc's lossy compression mode.
paperlessng_superuser_name: paperlessng
paperlessng_superuser_email: paperlessng@example.com
paperlessng_superuser_password: paperlessng
Credentials of the initial superuser in paperless-ng.
paperlessng_system_user: paperlessng
paperlessng_system_group: paperlessng
System user and group to run the paperless-ng services as (will be created if required).
paperlessng_listen_address: 127.0.0.1
paperlessng_listen_port: 8000
Address and port for the paperless-ng service to listen on.
Dependencies
------------
No ansible dependencies.
Example Playbook
----------------
`playbook.yml`:
- hosts: all
become: yes
vars_files:
- vars/main.yml
roles:
- ansible
`vars/main.yml`:
paperlessng_media_root: /mnt/media/smbshare
paperlessng_db_type: postgresql
paperlessng_db_pass: PLEASEPROVIDEASTRONGPASSWORDHERE
paperlessng_secret_key: AGAINPLEASECHANGETHISNOW
paperlessng_ocr_languages:
- eng
- deu

78
ansible/defaults/main.yml Normal file
View File

@@ -0,0 +1,78 @@
---
paperlessng_version: latest # 'latest', release number, or github branch/tag/commit/ref
# Required services
paperlessng_redis_host: localhost
paperlessng_redis_port: 6379
paperlessng_db_type: sqlite # or postgresql
# Below entries only apply for paperlessng_db_type=='postgresql'
paperlessng_db_host: localhost
paperlessng_db_port: 5432
paperlessng_db_name: paperlessng
paperlessng_db_user: paperlessng
paperlessng_db_pass: paperlessng
paperlessng_db_sslmode: prefer
# Paths and folders
paperlessng_directory: /opt/paperless-ng
paperlessng_consumption_dir: "{{ paperlessng_directory }}/consumption"
paperlessng_data_dir: "{{ paperlessng_directory }}/data"
paperlessng_media_root: "{{ paperlessng_directory }}/media"
paperlessng_static_dir: "{{ paperlessng_directory }}/static"
paperlessng_filename_format:
paperlessng_virtualenv: "{{ paperlessng_directory }}/.venv"
# Hosting & Security
paperlessng_secret_key: PLEASECHANGETHISFORTHELOVEOFGOD
paperlessng_allowed_hosts: "*"
paperlessng_cors_allowed_hosts: http://localhost:8000
paperlessng_force_script_name:
paperlessng_static_url: /static/
paperlessng_auto_login_username:
paperlessng_cookie_prefix: ""
paperlessng_enable_http_remote_user: False
# OCR settings
paperlessng_ocr_languages:
- eng
paperlessng_ocr_mode: skip
paperlessng_ocr_output_type: pdfa
paperlessng_ocr_pages: 0
paperlessng_ocr_image_dpi:
# see https://ocrmypdf.readthedocs.io/en/latest/api.html#ocrmypdf.ocr
paperlessng_ocr_user_args:
#- "deskew": True # https://github.com/jonaswinkler/paperless-ng/issues/231
- "optimize": 1
paperlessng_use_jbig2enc: True
paperlessng_big2enc_lossy: False
# Tika settings
paperlessng_tika_enabled: False
paperlessng_tika_endpoint: http://localhost:9998
paperlessng_tika_gotenberg_endpoint: http://localhost:3000
# Software tweaks
paperlessng_time_zone: Europe/Berlin
paperlessng_consumer_polling: 0
paperlessng_consumer_delete_duplicates: False
paperlessng_consumer_recursive: False
paperlessng_consumer_subdirs_as_tags: False
paperlessng_optimize_thumbnails: True
paperlessng_post_consume_script:
paperlessng_filename_date_order:
paperlessng_filename_parse_transforms:
paperlessng_thumbnail_font_name: /usr/share/fonts/liberation/LiberationSerif-Regular.ttf
paperlessng_ignore_dates: ""
# Superuser settings
paperlessng_superuser_name: paperlessng
paperlessng_superuser_email: paperlessng@example.com
paperlessng_superuser_password: paperlessng
# System user settings
paperlessng_system_user: paperlessng
paperlessng_system_group: paperlessng
# Webserver settings
paperlessng_listen_address: 127.0.0.1
paperlessng_listen_port: 8000

17
ansible/meta/main.yml Normal file
View File

@@ -0,0 +1,17 @@
dependencies: []
galaxy_info:
author: C0nsultant
description: Bare-metal deployment of paperless-ng DMS
license: license (GPLv3)
min_ansible_version: 2.7
platforms:
- name: Debian
versions:
- buster
- name: Ubuntu
versions:
- focal
galaxy_tags: [EDMS, django, python, web]

View File

@@ -0,0 +1,10 @@
---
- name: update previous release to newest release
hosts: all
tasks:
- name: set current github commit as version when available
set_fact:
paperlessng_version: "{{ lookup('env', 'GITHUB_SHA') | default('master', True) }}"
- name: update to newest paperless-ng release
include_role:
name: ansible

View File

@@ -0,0 +1,35 @@
---
dependency:
name: galaxy
driver:
name: docker
platforms:
- name: ubuntu_focal
image: jrei/systemd-ubuntu:20.04
privileged: true
volumes:
- /sys/fs/cgroup:/sys/fs/cgroup:ro
tmpfs:
- /tmp
- /run
- /run/lock
override_command: False
# ubuntu 18.04 bionic works except that
# the default redis configuration expects IPv6 which is not enabled in docker by default
# the default Python environment is configured for ASCII instead of UTF-8
# ubuntu 16.04 xenial only has Python 3.5 which is EOL and breaks multiple dependencies
- name: debian_buster
image: jrei/systemd-debian:10
privileged: true
volumes:
- /sys/fs/cgroup:/sys/fs/cgroup:ro
tmpfs:
- /tmp
- /run
- /run/lock
override_command: False
# debian 9 stretch only has Python 3.5 which is EOL and breaks multiple dependencies
provisioner:
name: ansible
verifier:
name: ansible

View File

@@ -0,0 +1,10 @@
- name: install previous release
hosts: all
tasks:
- name: set previous version as installation target
set_fact:
paperlessng_version: latest
- name: install previous paperless-ng release
include_role:
name: ansible

View File

@@ -0,0 +1,94 @@
---
- name: Verify
hosts: all
gather_facts: false
vars_files:
- ../../defaults/main.yml
tasks:
- name: check if webserver is up
uri:
url: "http://{{ paperlessng_listen_address }}:{{ paperlessng_listen_port }}"
status_code: [200, 302]
return_content: yes
register: landingpage
failed_when: "'Sign in</button>' not in landingpage.content"
- name: generate random name and content
set_fact:
content: "{{ lookup('password', '/dev/null length=65536 chars=ascii_letters') }}"
filename: "{{ lookup('password', '/dev/null length=8 chars=ascii_letters') }}"
- name: check if document posting works
uri:
url: "http://{{ paperlessng_listen_address }}:{{ paperlessng_listen_port }}/api/documents/post_document/"
method: POST
body_format: form-multipart
body:
document:
content: "{{ content }}"
filename: "{{ filename }}.txt"
headers:
Authorization: 'Basic {{ (paperlessng_superuser_name + ":" + paperlessng_superuser_password) | b64encode }}'
Content-Type: text/plain
return_content: yes
register: post_document
failed_when: "'OK' not in post_document.content"
- name: verify uploaded document has been accepted
uri:
url: "http://{{ paperlessng_listen_address }}:{{ paperlessng_listen_port }}/api/logs/paperless/"
headers:
Authorization: 'Basic {{ (paperlessng_superuser_name + ":" + paperlessng_superuser_password) | b64encode }}'
return_content: yes
register: logs
failed_when: "('Consuming ' + filename + '.txt') not in logs.content"
- name: sleep till consumption finished
pause:
seconds: 10
- name: verify uploaded document has been consumed
uri:
url: "http://{{ paperlessng_listen_address }}:{{ paperlessng_listen_port }}/api/logs/paperless/"
headers:
Authorization: 'Basic {{ (paperlessng_superuser_name + ":" + paperlessng_superuser_password) | b64encode }}'
return_content: yes
register: logs
failed_when: "filename + ' consumption finished' not in logs.content"
- name: get documents
uri:
url: "http://{{ paperlessng_listen_address }}:{{ paperlessng_listen_port }}/api/documents/"
headers:
Authorization: 'Basic {{ (paperlessng_superuser_name + ":" + paperlessng_superuser_password) | b64encode }}'
return_content: yes
register: documents
- name: set document index
set_fact:
index: "{{ documents.json['results'][0]['id'] }}"
- name: verify uploaded document is avaiable
uri:
url: "http://{{ paperlessng_listen_address }}:{{ paperlessng_listen_port }}/api/documents/{{ index }}/"
headers:
Authorization: 'Basic {{ (paperlessng_superuser_name + ":" + paperlessng_superuser_password) | b64encode }}'
return_content: yes
register: document
failed_when: "'Not found.' in document.content or content not in document.json['content']"
- name: check if deleting uploaded document works
uri:
url: "http://{{ paperlessng_listen_address }}:{{ paperlessng_listen_port }}/api/documents/bulk_edit/"
method: POST
body_format: json
body:
documents: ["{{ index }}"]
method: delete
parameters: {}
headers:
Authorization: 'Basic {{ (paperlessng_superuser_name + ":" + paperlessng_superuser_password) | b64encode }}'
register: delete_document
failed_when: "'OK' not in delete_document.json['result']"

View File

@@ -0,0 +1,6 @@
---
- name: extract paperless-ng
unarchive:
src: "https://github.com/jonaswinkler/paperless-ng/releases/download/ng-{{ paperlessng_version }}/paperless-ng-{{ paperlessng_version }}.tar.xz"
remote_src: yes
dest: "{{ tempdir.path }}"

View File

@@ -0,0 +1,112 @@
---
- name: install dev dependencies
apt:
pkg:
- git
- npm
- gettext
- name: create output directories
file:
path: "{{ item }}"
state: directory
owner: "{{ paperlessng_system_user }}"
group: "{{ paperlessng_system_group }}"
mode: "750"
with_items:
- "{{ tempdir.path }}/paperless-ng"
- "{{ tempdir.path }}/paperless-ng/scripts"
- block:
- name: create temporary git directory
tempfile:
state: directory
path: "{{ paperlessng_directory }}"
register: gitdir
- name: pull paperless-ng
git:
repo: https://github.com/jonaswinkler/paperless-ng.git
dest: "{{ gitdir.path }}"
version: "{{ paperlessng_version }}"
refspec: "+refs/pull/*:refs/pull/*"
- name: compile frontend
command:
cmd: "{{ item }}"
args:
chdir: "{{ gitdir.path }}/src-ui"
failed_when: false
with_items:
- npm install -g @angular/cli
- npm install
- ./node_modules/.bin/ng build --prod
- name: copy application into place
copy:
src: "{{ gitdir.path }}/{{ item.src }}"
remote_src: yes
dest: "{{ tempdir.path }}/paperless-ng/{{ item.dest | default('') }}"
with_items:
- src: CONTRIBUTING.md
- src: LICENSE
- src: Pipfile
- src: Pipfile.lock
- src: README.md
- src: requirements.txt
- src: gunicorn.conf.py
- src: paperless.conf.example
dest: "paperless.conf"
- name: glob all scripts
find:
paths: ["{{ gitdir.path }}/scripts/"]
patterns:
- "*.service"
- "*.sh"
register: glob
- name: copy scripts
copy:
src: "{{ item.path }}"
remote_src: yes
dest: "{{ tempdir.path }}/paperless-ng/scripts/"
with_items:
- "{{ glob.files }}"
- name: copy sources
command:
cmd: "cp -r src/ {{ tempdir.path }}/paperless-ng/src"
args:
chdir: "{{ gitdir.path }}"
- name: create paperlessng venv
command:
cmd: "python3 -m virtualenv {{ gitdir.path }}/.venv/ -p /usr/bin/python3"
- name: install paperlessng requirements
command:
cmd: "{{ gitdir.path }}/.venv/bin/python3 -m pip install -r {{ gitdir.path }}/requirements.txt"
- name: compile messages
command: "{{ gitdir.path }}/.venv/bin/python3 manage.py compilemessages"
args:
chdir: "{{ tempdir.path }}/paperless-ng/src/"
- name: collect static files
command: "{{ gitdir.path }}/.venv/bin/python3 manage.py collectstatic --no-input"
args:
chdir: "{{ tempdir.path }}/paperless-ng/src/"
- name: remove pycache directories
shell: find . -name __pycache__ | xargs rm -r
args:
chdir: "{{ tempdir.path }}"
- name: remove temporary git directory
file:
path: "{{ gitdir.path }}"
state: absent
become: yes
become_user: "{{ paperlessng_system_user }}"

539
ansible/tasks/main.yml Normal file
View File

@@ -0,0 +1,539 @@
---
- name: verify operating system
fail:
msg: Sorry, only Debian and Ubuntu supported at the moment.
when: not(ansible_distribution == 'Debian' or ansible_distribution == 'Ubuntu')
- name: install base dependencies
apt:
update_cache: yes
pkg:
# paperless-ng
- python3-pip
- python3-dev
- fonts-liberation
- imagemagick
- optipng
- gnupg
- libpq-dev
- libmagic-dev
- mime-support
# OCRmyPDF
- unpaper
- ghostscript
- icc-profiles-free
- qpdf
- liblept5
- libxml2
- pngquant
- zlib1g
- tesseract-ocr
# dev
- sudo
- build-essential
- python3-setuptools
- python3-wheel
# upstream virtualenv in Ubuntu 20.04 is broken
# https://github.com/pypa/virtualenv/issues/1873
- name: install python virtualenv
pip:
name: virtualenv
extra_args: --upgrade
- name: install ocr languages
apt:
pkg: "{{ paperlessng_ocr_languages | map('regex_replace', '^(.*)$', 'tesseract-ocr-\\1') | list }}"
- name: set up notesalexp repository key (for jbig2enc)
apt_key:
url: https://notesalexp.org/debian/alexp_key.asc
state: present
when: paperlessng_use_jbig2enc
- name: set up notesalexp repository (for jbig2enc)
apt_repository:
repo: "deb https://notesalexp.org/debian/{{ ansible_distribution_release }}/ {{ ansible_distribution_release }} main"
state: present
when: paperlessng_use_jbig2enc
- name: set up notesalexp repository pinning
copy:
content: |
Package: *
Pin: release o=notesalexp.org
Pin-Priority: 1
Package: jbig2enc
Pin: release o=notesalexp.org
Pin-Priority: 500
dest: /etc/apt/preferences.d/notesalexp
when: paperlessng_use_jbig2enc
- name: install jbig2enc
apt:
pkg: jbig2enc
update_cache: yes
when: paperlessng_use_jbig2enc
- name: install redis
apt:
pkg: redis-server
when: paperlessng_redis_host == 'localhost' or paperlessng_redis_host == '127.0.0.1'
- name: enable redis
systemd:
name: redis-server
enabled: yes
masked: no
state: started
when: paperlessng_redis_host == 'localhost' or paperlessng_redis_host == '127.0.0.1'
- name: create paperless system group
group:
name: "{{ paperlessng_system_group }}"
- name: create paperless system user
user:
name: "{{ paperlessng_system_user }}"
groups:
- "{{ paperlessng_system_group }}"
shell: /usr/sbin/nologin
# GNUPG_HOME required due to paperless db.py
create_home: yes
- block:
- name: get latest release version
uri:
url: https://api.github.com/repos/jonaswinkler/paperless-ng/releases/latest
method: GET
register: latest_release
- name: parse latest release version
set_fact:
paperlessng_version: "{{ latest_release.json['tag_name'] }}"
when: paperlessng_version == "latest"
- name: check if version is ref
fail:
msg: "Specifying `paperlessng_version` as git ref may not work as expected!"
ignore_errors: True # Output failure (as warning), but don't consider play failed
when: paperlessng_version.startswith('refs/')
- block:
- name: sanitize version string
set_fact:
paperlessng_version: "{{ paperlessng_version | regex_replace('^ng-(\\d+\\.\\d+\\.\\d+)$', '\\1') }}"
- name: get tag data
uri:
url: https://api.github.com/repos/jonaswinkler/paperless-ng/tags
method: GET
register: tags
- name: get commit for target tag
set_fact:
paperlessng_commit: "{{ tags.json | json_query('[?name==`ng-' + paperlessng_version +'`] | [0].commit.sha') }}"
when: paperlessng_version | regex_search("^(ng-)?(\d+\.\d+\.\d+)$")
- block:
- name: check if version is branch
uri:
url: "https://api.github.com/repos/jonaswinkler/paperless-ng/branches/{{ paperlessng_version }}"
method: GET
status_code: [200, 404]
register: branch
- name: get commit for target branch
set_fact:
paperlessng_commit: "{{ branch.json | json_query('commit.sha') }}"
when: branch.status == 200
- block:
- name: check if version is commit-or-ref
uri:
url: "https://api.github.com/repos/jonaswinkler/paperless-ng/commits/{{ paperlessng_version }}"
method: GET
status_code: [200, 404, 422]
register: commit
- name: get commit for target commit-or-ref
set_fact:
paperlessng_commit: "{{ commit.json | json_query('sha') }}"
when: commit.status == 200
- name: fail
fail:
msg: "Can not determine commit from `paperlessng_version=={{ paperlessng_version }}`!"
when: commit.status != 200
when: branch.status == 404
when: not(paperlessng_version | regex_search("^(ng-)?(\d+\.\d+\.\d+)$"))
- name: check for paperless-ng installation
command:
cmd: "cat {{ paperlessng_directory }}/.installed_version"
changed_when: '"No such file or directory" in paperlessng_current_commit.stderr or paperlessng_current_commit.stdout != paperlessng_commit | string'
failed_when: false
ignore_errors: yes
register: paperlessng_current_commit
- name: register current state
set_fact:
fresh_installation: '{{ "No such file or directory" in paperlessng_current_commit.stderr }}'
update_installation: '{{ "No such file or directory" not in paperlessng_current_commit.stderr and paperlessng_current_commit.stdout != paperlessng_commit | string }}'
reconfigure_only: "{{ paperlessng_current_commit.stdout == paperlessng_commit | string }}"
- block:
- name: backup current paperless-ng installation
copy:
src: "{{ paperlessng_directory }}"
remote_src: yes
dest: "{{ paperlessng_directory }}-{{ ansible_date_time.iso8601 }}/"
- name: remove current paperless sources
file:
path: "{{ paperlessng_directory }}/{{ item }}"
state: absent
with_items:
- docker
- docs
- scripts
- src
- static
when: update_installation
- block:
- name: create paperless-ng directory and set permissions
file:
path: "{{ paperlessng_directory }}"
state: directory
owner: "{{ paperlessng_system_user }}"
group: "{{ paperlessng_system_group }}"
mode: "750"
- name: create temporary directory
become: yes
become_user: "{{ paperlessng_system_user }}"
tempfile:
state: directory
path: "{{ paperlessng_directory }}"
register: tempdir
- name: check if version is available as release archive
uri:
url: "https://github.com/jonaswinkler/paperless-ng/releases/download/ng-{{ paperlessng_version }}/paperless-ng-{{ paperlessng_version }}.tar.xz"
method: GET
status_code: [200, 404]
register: release_archive
- name: install paperless-ng from source
include_tasks: install-source.yml
when: release_archive.status == 404
- name: install paperless-ng from release archive
include_tasks: install-release.yml
when: release_archive.status == 200
- name: change owner and permissions of paperless-ng
command:
cmd: "{{ item }}"
warn: false
with_items:
- "chown -R {{ paperlessng_system_user }}:{{ paperlessng_system_group }} {{ tempdir.path }}"
- "find {{ tempdir.path }} -type d -exec chmod 0750 {} ;"
- "find {{ tempdir.path }} -type f -exec chmod 0640 {} ;"
- name: move paperless-ng
command:
cmd: "cp -a {{ tempdir.path }}/paperless-ng/. {{ paperlessng_directory }}"
- name: store commit hash of installed version
copy:
content: "{{ paperlessng_commit }}"
dest: "{{ paperlessng_directory }}/.installed_version"
owner: "{{ paperlessng_system_user }}"
group: "{{ paperlessng_system_group }}"
mode: "0440"
- name: remove temporary directory
file:
path: "{{ tempdir.path }}"
state: absent
when: not reconfigure_only
- name: create paperless-ng directories and set permissions
file:
path: "{{ item }}"
state: directory
owner: "{{ paperlessng_system_user }}"
group: "{{ paperlessng_system_group }}"
mode: "750"
with_items:
- "{{ paperlessng_consumption_dir }}"
- "{{ paperlessng_data_dir }}"
- "{{ paperlessng_media_root }}"
- "{{ paperlessng_static_dir }}"
- name: rename initial config
command:
cmd: "mv -f {{ paperlessng_directory }}/paperless.conf {{ paperlessng_directory }}/paperless.conf.template"
removes: "{{ paperlessng_directory }}/paperless.conf"
- name: configure paperless-ng
lineinfile:
path: "{{ paperlessng_directory }}/paperless.conf.template"
regexp: "^#?{{ item.regexp }}="
line: "{{ item.line }}"
with_items:
# Required services
- regexp: PAPERLESS_REDIS
line: "PAPERLESS_REDIS=redis://{{ paperlessng_redis_host }}:{{ paperlessng_redis_port }}"
# Paths and folders
- regexp: PAPERLESS_CONSUMPTION_DIR
line: "PAPERLESS_CONSUMPTION_DIR={{ paperlessng_consumption_dir }}"
- regexp: PAPERLESS_DATA_DIR
line: "PAPERLESS_DATA_DIR={{ paperlessng_data_dir }}"
- regexp: PAPERLESS_MEDIA_ROOT
line: "PAPERLESS_MEDIA_ROOT={{ paperlessng_media_root }}"
- regexp: PAPERLESS_STATICDIR
line: "PAPERLESS_STATICDIR={{ paperlessng_static_dir }}"
- regexp: PAPERLESS_FILENAME_FORMAT
line: "PAPERLESS_FILENAME_FORMAT={{ paperlessng_filename_format }}"
# Hosting & Security
- regexp: PAPERLESS_SECRET_KEY
line: "PAPERLESS_SECRET_KEY={{ paperlessng_secret_key }}"
- regexp: PAPERLESS_ALLOWED_HOSTS
line: "PAPERLESS_ALLOWED_HOSTS={{ paperlessng_allowed_hosts }}"
- regexp: PAPERLESS_CORS_ALLOWED_HOSTS
line: "PAPERLESS_CORS_ALLOWED_HOSTS={{ paperlessng_cors_allowed_hosts }}"
- regexp: PAPERLESS_FORCE_SCRIPT_NAME
line: "PAPERLESS_FORCE_SCRIPT_NAME={{ paperlessng_force_script_name }}"
- regexp: PAPERLESS_STATIC_URL
line: "PAPERLESS_STATIC_URL={{ paperlessng_static_url }}"
- regexp: PAPERLESS_AUTO_LOGIN_USERNAME
line: "PAPERLESS_AUTO_LOGIN_USERNAME={{ paperlessng_auto_login_username }}"
- regexp: PAPERLESS_COOKIE_PREFIX
line: "PAPERLESS_COOKIE_PREFIX={{ paperlessng_cookie_prefix }}"
- regexp: PAPERLESS_ENABLE_HTTP_REMOTE_USER
line: "PAPERLESS_ENABLE_HTTP_REMOTE_USER={{ paperlessng_enable_http_remote_user }}"
# OCR settings
- regexp: PAPERLESS_OCR_LANGUAGE
line: "PAPERLESS_OCR_LANGUAGE={{ paperlessng_ocr_languages | join('+') }}"
- regexp: PAPERLESS_OCR_MODE
line: "PAPERLESS_OCR_MODE={{ paperlessng_ocr_mode }}"
- regexp: PAPERLESS_OCR_OUTPUT_TYPE
line: "PAPERLESS_OCR_OUTPUT_TYPE={{ paperlessng_ocr_output_type }}"
- regexp: PAPERLESS_OCR_PAGES
line: "PAPERLESS_OCR_PAGES={{ paperlessng_ocr_pages }}"
- regexp: PAPERLESS_OCR_IMAGE_DPI
line: "PAPERLESS_OCR_IMAGE_DPI={{ paperlessng_ocr_image_dpi }}"
- regexp: PAPERLESS_OCR_USER_ARGS
line: "PAPERLESS_OCR_USER_ARGS={{ paperlessng_ocr_user_args | combine({'jbig2_lossy': true} if paperlessng_big2enc_lossy else {}) | to_json }}"
# Tika settings
- regexp: PAPERLESS_TIKA_ENABLED
line: "PAPERLESS_TIKA_ENABLED={{ paperlessng_tika_enabled }}"
- regexp: PAPERLESS_TIKA_ENDPOINT
line: "PAPERLESS_TIKA_ENDPOINT={{ paperlessng_tika_endpoint }}"
- regexp: PAPERLESS_TIKA_GOTENBERG_ENDPOINT
line: "PAPERLESS_TIKA_GOTENBERG_ENDPOINT={{ paperlessng_tika_endpoint }}"
# Software tweaks
- regexp: PAPERLESS_TIME_ZONE
line: "PAPERLESS_TIME_ZONE={{ paperlessng_time_zone }}"
- regexp: PAPERLESS_CONSUMER_POLLING
line: "PAPERLESS_CONSUMER_POLLING={{ paperlessng_consumer_polling }}"
- regexp: PAPERLESS_CONSUMER_DELETE_DUPLICATES
line: "PAPERLESS_CONSUMER_DELETE_DUPLICATES={{ paperlessng_consumer_delete_duplicates }}"
- regexp: PAPERLESS_CONSUMER_RECURSIVE
line: "PAPERLESS_CONSUMER_RECURSIVE={{ paperlessng_consumer_recursive }}"
- regexp: PAPERLESS_CONSUMER_SUBDIRS_AS_TAGS
line: "PAPERLESS_CONSUMER_SUBDIRS_AS_TAGS={{ paperlessng_consumer_subdirs_as_tags }}"
- regexp: PAPERLESS_OPTIMIZE_THUMBNAILS
line: "PAPERLESS_OPTIMIZE_THUMBNAILS={{ paperlessng_optimize_thumbnails }}"
- regexp: PAPERLESS_POST_CONSUME_SCRIPT
line: "PAPERLESS_POST_CONSUME_SCRIPT={{ paperlessng_post_consume_script }}"
- regexp: PAPERLESS_FILENAME_DATE_ORDER
line: "PAPERLESS_FILENAME_DATE_ORDER={{ paperlessng_filename_date_order }}"
- regexp: PAPERLESS_THUMBNAIL_FONT_NAME
line: "PAPERLESS_THUMBNAIL_FONT_NAME={{ paperlessng_thumbnail_font_name }}"
- regexp: PAPERLESS_IGNORE_DATES
line: "PAPERLESS_IGNORE_DATES={{ paperlessng_ignore_dates }}"
no_log: yes
- name: configure paperless-ng database [sqlite]
lineinfile:
path: "{{ paperlessng_directory }}/paperless.conf.template"
regexp: "^#?PAPERLESS_DBHOST=(.*)$"
line: '#PAPERLESS_DBHOST=\1'
backrefs: yes
when: paperlessng_db_type == 'sqlite'
- name: configure paperless-ng database [postgresql]
lineinfile:
path: "{{ paperlessng_directory }}/paperless.conf.template"
regexp: "^#?{{ item.regexp }}="
line: "{{ item.line }}"
with_items:
- regexp: PAPERLESS_DBHOST
line: "PAPERLESS_DBHOST={{ paperlessng_db_host }}"
- regexp: PAPERLESS_DBPORT
line: "PAPERLESS_DBPORT={{ paperlessng_db_port }}"
- regexp: PAPERLESS_DBNAME
line: "PAPERLESS_DBNAME={{ paperlessng_db_name }}"
- regexp: PAPERLESS_DBUSER
line: "PAPERLESS_DBUSER={{ paperlessng_db_user }}"
- regexp: PAPERLESS_DBPASS
line: "PAPERLESS_DBPASS={{ paperlessng_db_pass }}"
- regexp: PAPERLESS_DBSSLMODE
line: "PAPERLESS_DBSSLMODE={{ paperlessng_db_sslmode }}"
when: paperlessng_db_type == 'postgresql'
no_log: yes
- name: deploy paperless-ng configuration
copy:
src: "{{ paperlessng_directory }}/paperless.conf.template"
remote_src: yes
dest: /etc/paperless.conf
owner: root
group: root
mode: "0644"
register: configuration
- name: create paperlessng venv
become: yes
become_user: "{{ paperlessng_system_user }}"
command:
cmd: "python3 -m virtualenv {{ paperlessng_virtualenv }} -p /usr/bin/python3"
creates: "{{ paperlessng_virtualenv }}"
register: venv
- block:
- name: install paperlessng requirements
become: yes
become_user: "{{ paperlessng_system_user }}"
pip:
requirements: "{{ paperlessng_directory }}/requirements.txt"
executable: "{{ paperlessng_virtualenv }}/bin/pip3"
extra_args: --upgrade
- name: migrate database schema
become: yes
become_user: "{{ paperlessng_system_user }}"
command: "{{ paperlessng_virtualenv }}/bin/python3 {{ paperlessng_directory }}/src/manage.py migrate"
register: database_schema
changed_when: '"No migrations to apply." not in database_schema.stdout'
when: not reconfigure_only
- name: configure paperless superuser
become: yes
become_user: "{{ paperlessng_system_user }}"
# "manage.py createsuperuser" only works on interactive TTYs
vars:
creation_script: |
from django.contrib.auth.models import User
from django.contrib.auth.hashers import get_hasher
if User.objects.filter(username='{{ paperlessng_superuser_name }}').exists():
user = User.objects.get(username='{{ paperlessng_superuser_name }}')
old = user.__dict__.copy()
user.is_superuser = True
user.email = '{{ paperlessng_superuser_email }}'
user.set_password('{{ paperlessng_superuser_password }}')
user.save()
new = user.__dict__
algorithm, iterations, old_salt, old_hash = old['password'].split('$')
new_password_old_salt = get_hasher(algorithm).encode(password='{{ paperlessng_superuser_password }}', salt=old_salt, iterations=int(iterations))
_, _, _, new_hash = new_password_old_salt.split('$')
if not (old_hash == new_hash and old['is_superuser'] == new['is_superuser'] and old['email'] == new['email']):
print('changed')
else:
User.objects.create_superuser('{{ paperlessng_superuser_name }}', '{{ paperlessng_superuser_email }}', '{{ paperlessng_superuser_password }}')
print('changed')
command: '{{ paperlessng_virtualenv }}/bin/python3 {{ paperlessng_directory }}/src/manage.py shell -c "{{ creation_script }}"'
register: superuser
changed_when: superuser.stdout == 'changed'
no_log: yes
- name: set ownership and permissions on paperlessng venv
file:
path: "{{ paperlessng_virtualenv }}"
state: directory
recurse: yes
owner: "{{ paperlessng_system_user }}"
group: "{{ paperlessng_system_group }}"
mode: g-w,o-rwx
when: venv.changed or not reconfigure_only
- name: configure ghostscript for PDF
lineinfile:
path: /etc/ImageMagick-6/policy.xml
regexp: '(\s+)<policy domain="coder" rights=".*" pattern="PDF" />'
line: '\1<policy domain="coder" rights="read|write" pattern="PDF" />'
backrefs: yes
- name: configure gunicorn web server
lineinfile:
path: "{{ paperlessng_directory }}/gunicorn.conf.py"
regexp: '^bind = '
line: "bind = '{{ paperlessng_listen_address }}:{{ paperlessng_listen_port }}'"
- name: configure systemd services
ini_file:
path: "{{ paperlessng_directory }}/scripts/{{ item[0] }}"
section: "Service"
option: "{{ item[1].option }}"
value: "{{ item[1].value }}"
with_nested:
- [
paperless-consumer.service,
paperless-scheduler.service,
paperless-webserver.service,
]
- [
# https://www.freedesktop.org/software/systemd/man/systemd.exec.html
{ option: "User", value: "{{ paperlessng_system_user }}" },
{ option: "Group", value: "{{ paperlessng_system_group }}" },
{ option: "WorkingDirectory", value: "{{ paperlessng_directory }}/src" },
{ option: "ProtectSystem", value: "full" },
{ option: "NoNewPrivileges", value: "true" },
{ option: "PrivateUsers", value: "true" },
{ option: "PrivateDevices", value: "true" },
]
- name: configure paperless-consumer service
ini_file:
path: "{{ paperlessng_directory }}/scripts/paperless-consumer.service"
section: "Service"
option: "ExecStart"
value: "{{ paperlessng_virtualenv }}/bin/python3 manage.py document_consumer"
- name: configure paperless-scheduler service
ini_file:
path: "{{ paperlessng_directory }}/scripts/paperless-scheduler.service"
section: "Service"
option: "ExecStart"
value: "{{ paperlessng_virtualenv }}/bin/python3 manage.py qcluster"
- name: configure paperless-webserver service
ini_file:
path: "{{ paperlessng_directory }}/scripts/paperless-webserver.service"
section: "Service"
option: "ExecStart"
value: "{{ paperlessng_virtualenv }}/bin/gunicorn -c {{ paperlessng_directory }}/gunicorn.conf.py paperless.asgi:application"
- name: copy systemd services
copy:
src: "{{ paperlessng_directory }}/scripts/{{ item }}"
remote_src: yes
dest: "/etc/systemd/system/{{ item }}"
with_items:
- paperless-consumer.service
- paperless-scheduler.service
- paperless-webserver.service
register: paperless_services
- name: reload systemd daemon
systemd:
name: "{{ item }}"
state: restarted
daemon_reload: yes
with_items:
- paperless-consumer
- paperless-scheduler
- paperless-webserver
when: paperless_services.changed or configuration.changed
- name: enable paperlessng services
systemd:
name: "{{ item }}"
enabled: yes
masked: no
state: started
with_items:
- paperless-consumer
- paperless-scheduler
- paperless-webserver

7
compile-frontend.sh Executable file
View File

@@ -0,0 +1,7 @@
#!/bin/bash
set -e
cd src-ui
npm install
./node_modules/.bin/ng build --prod

5
crowdin.yml Normal file
View File

@@ -0,0 +1,5 @@
files:
- source: /src/locale/en_US/LC_MESSAGES/django.po
translation: /src/locale/%locale_with_underscore%/LC_MESSAGES/django.po
- source: /src-ui/messages.xlf
translation: /src-ui/src/locale/messages.%locale_with_underscore%.xlf

1
docker/compose/.env Normal file
View File

@@ -0,0 +1 @@
COMPOSE_PROJECT_NAME=paperless

View File

@@ -7,7 +7,7 @@
# Additional languages to install for text recognition, separated by a
# whitespace. Note that this is
# different from PAPERLESS_OCR_LANGUAGE (default=eng), which defines the
# default language used when guessing the language from the OCR output.
# language used for OCR.
# The container installs English, German, Italian, Spanish and French by
# default.
# See https://packages.debian.org/search?keywords=tesseract-ocr-&searchon=names&suite=buster
@@ -32,8 +32,3 @@
# The default language to use for OCR. Set this to the language most of your
# documents are written in.
#PAPERLESS_OCR_LANGUAGE=eng
# By default Paperless does not OCR a document if the text can be retrieved from
# the document directly. Set to true to always OCR documents. (i.e., if you
# know that some of your documents have faulty/bad OCR data)
#PAPERLESS_OCR_ALWAYS=true

View File

@@ -0,0 +1,90 @@
# docker-compose file for running paperless from the Docker Hub.
# This file contains everything paperless needs to run.
# Paperless supports amd64, arm and arm64 hardware.
#
# All compose files of paperless configure paperless in the following way:
#
# - Paperless is (re)started on system boot, if it was running before shutdown.
# - Docker volumes for storing data are managed by Docker.
# - Folders for importing and exporting files are created in the same directory
# as this file and mounted to the correct folders inside the container.
# - Paperless listens on port 8000.
#
# In addition to that, this docker-compose file adds the following optional
# configurations:
#
# - Instead of SQLite (default), PostgreSQL is used as the database server.
# - Apache Tika and Gotenberg servers are started with paperless and paperless
# is configured to use these services. These provide support for consuming
# Office documents (Word, Excel, Power Point and their LibreOffice counter-
# parts.
#
# To install and update paperless with this file, do the following:
#
# - Copy this file as 'docker-compose.yml' and the files 'docker-compose.env'
# and '.env' into a folder.
# - Run 'docker-compose pull'.
# - Run 'docker-compose run --rm webserver createsuperuser' to create a user.
# - Run 'docker-compose up -d'.
#
# For more extensive installation and update instructions, refer to the
# documentation.
version: "3.4"
services:
broker:
image: redis:6.0
restart: unless-stopped
db:
image: postgres:13
restart: unless-stopped
volumes:
- pgdata:/var/lib/postgresql/data
environment:
POSTGRES_DB: paperless
POSTGRES_USER: paperless
POSTGRES_PASSWORD: paperless
webserver:
image: jonaswinkler/paperless-ng:latest
restart: unless-stopped
depends_on:
- db
- broker
- gotenberg
- tika
ports:
- 8000:8000
healthcheck:
test: ["CMD", "curl", "-f", "http://localhost:8000"]
interval: 30s
timeout: 10s
retries: 5
volumes:
- data:/usr/src/paperless/data
- media:/usr/src/paperless/media
- ./export:/usr/src/paperless/export
- ./consume:/usr/src/paperless/consume
env_file: docker-compose.env
environment:
PAPERLESS_REDIS: redis://broker:6379
PAPERLESS_DBHOST: db
PAPERLESS_TIKA_ENABLED: 1
PAPERLESS_TIKA_GOTENBERG_ENDPOINT: http://gotenberg:3000
PAPERLESS_TIKA_ENDPOINT: http://tika:9998
gotenberg:
image: thecodingmachine/gotenberg
restart: unless-stopped
environment:
DISABLE_GOOGLE_CHROME: 1
tika:
image: apache/tika
restart: unless-stopped
volumes:
data:
media:
pgdata:

View File

@@ -0,0 +1,72 @@
# docker-compose file for running paperless from the Docker Hub.
# This file contains everything paperless needs to run.
# Paperless supports amd64, arm and arm64 hardware.
#
# All compose files of paperless configure paperless in the following way:
#
# - Paperless is (re)started on system boot, if it was running before shutdown.
# - Docker volumes for storing data are managed by Docker.
# - Folders for importing and exporting files are created in the same directory
# as this file and mounted to the correct folders inside the container.
# - Paperless listens on port 8000.
#
# In addition to that, this docker-compose file adds the following optional
# configurations:
#
# - Instead of SQLite (default), PostgreSQL is used as the database server.
#
# To install and update paperless with this file, do the following:
#
# - Copy this file as 'docker-compose.yml' and the files 'docker-compose.env'
# and '.env' into a folder.
# - Run 'docker-compose pull'.
# - Run 'docker-compose run --rm webserver createsuperuser' to create a user.
# - Run 'docker-compose up -d'.
#
# For more extensive installation and update instructions, refer to the
# documentation.
version: "3.4"
services:
broker:
image: redis:6.0
restart: unless-stopped
db:
image: postgres:13
restart: unless-stopped
volumes:
- pgdata:/var/lib/postgresql/data
environment:
POSTGRES_DB: paperless
POSTGRES_USER: paperless
POSTGRES_PASSWORD: paperless
webserver:
image: jonaswinkler/paperless-ng:latest
restart: unless-stopped
depends_on:
- db
- broker
ports:
- 8000:8000
healthcheck:
test: ["CMD", "curl", "-f", "http://localhost:8000"]
interval: 30s
timeout: 10s
retries: 5
volumes:
- data:/usr/src/paperless/data
- media:/usr/src/paperless/media
- ./export:/usr/src/paperless/export
- ./consume:/usr/src/paperless/consume
env_file: docker-compose.env
environment:
PAPERLESS_REDIS: redis://broker:6379
PAPERLESS_DBHOST: db
volumes:
data:
media:
pgdata:

View File

@@ -0,0 +1,78 @@
# docker-compose file for running paperless from the Docker Hub.
# This file contains everything paperless needs to run.
# Paperless supports amd64, arm and arm64 hardware.
#
# All compose files of paperless configure paperless in the following way:
#
# - Paperless is (re)started on system boot, if it was running before shutdown.
# - Docker volumes for storing data are managed by Docker.
# - Folders for importing and exporting files are created in the same directory
# as this file and mounted to the correct folders inside the container.
# - Paperless listens on port 8000.
#
# SQLite is used as the database. The SQLite file is stored in the data volume.
#
# In addition to that, this docker-compose file adds the following optional
# configurations:
#
# - Apache Tika and Gotenberg servers are started with paperless and paperless
# is configured to use these services. These provide support for consuming
# Office documents (Word, Excel, Power Point and their LibreOffice counter-
# parts.
#
# To install and update paperless with this file, do the following:
#
# - Copy this file as 'docker-compose.yml' and the files 'docker-compose.env'
# and '.env' into a folder.
# - Run 'docker-compose pull'.
# - Run 'docker-compose run --rm webserver createsuperuser' to create a user.
# - Run 'docker-compose up -d'.
#
# For more extensive installation and update instructions, refer to the
# documentation.
version: "3.4"
services:
broker:
image: redis:6.0
restart: unless-stopped
webserver:
image: jonaswinkler/paperless-ng:latest
restart: unless-stopped
depends_on:
- broker
- gotenberg
- tika
ports:
- 8000:8000
healthcheck:
test: ["CMD", "curl", "-f", "http://localhost:8000"]
interval: 30s
timeout: 10s
retries: 5
volumes:
- data:/usr/src/paperless/data
- media:/usr/src/paperless/media
- ./export:/usr/src/paperless/export
- ./consume:/usr/src/paperless/consume
env_file: docker-compose.env
environment:
PAPERLESS_REDIS: redis://broker:6379
PAPERLESS_TIKA_ENABLED: 1
PAPERLESS_TIKA_GOTENBERG_ENDPOINT: http://gotenberg:3000
PAPERLESS_TIKA_ENDPOINT: http://tika:9998
gotenberg:
image: thecodingmachine/gotenberg
restart: unless-stopped
environment:
DISABLE_GOOGLE_CHROME: 1
tika:
image: apache/tika
restart: unless-stopped
volumes:
data:
media:

View File

@@ -0,0 +1,56 @@
# docker-compose file for running paperless from the Docker Hub.
# This file contains everything paperless needs to run.
# Paperless supports amd64, arm and arm64 hardware.
#
# All compose files of paperless configure paperless in the following way:
#
# - Paperless is (re)started on system boot, if it was running before shutdown.
# - Docker volumes for storing data are managed by Docker.
# - Folders for importing and exporting files are created in the same directory
# as this file and mounted to the correct folders inside the container.
# - Paperless listens on port 8000.
#
# SQLite is used as the database. The SQLite file is stored in the data volume.
#
# To install and update paperless with this file, do the following:
#
# - Copy this file as 'docker-compose.yml' and the files 'docker-compose.env'
# and '.env' into a folder.
# - Run 'docker-compose pull'.
# - Run 'docker-compose run --rm webserver createsuperuser' to create a user.
# - Run 'docker-compose up -d'.
#
# For more extensive installation and update instructions, refer to the
# documentation.
version: "3.4"
services:
broker:
image: redis:6.0
restart: unless-stopped
webserver:
image: jonaswinkler/paperless-ng:latest
restart: unless-stopped
depends_on:
- broker
ports:
- 8000:8000
healthcheck:
test: ["CMD", "curl", "-f", "http://localhost:8000"]
interval: 30s
timeout: 10s
retries: 5
volumes:
- data:/usr/src/paperless/data
- media:/usr/src/paperless/media
- ./export:/usr/src/paperless/export
- ./consume:/usr/src/paperless/consume
env_file: docker-compose.env
environment:
PAPERLESS_REDIS: redis://broker:6379
volumes:
data:
media:

View File

@@ -15,13 +15,54 @@ map_uidgid() {
fi
}
wait_for_postgres() {
attempt_num=1
max_attempts=5
echo "Waiting for PostgreSQL to start..."
host="${PAPERLESS_DBHOST}"
port="${PAPERLESS_DBPORT}"
if [[ -z $port ]] ;
then
port="5432"
fi
while !</dev/tcp/$host/$port ;
do
if [ $attempt_num -eq $max_attempts ]
then
echo "Unable to connect to database."
exit 1
else
echo "Attempt $attempt_num failed! Trying again in 5 seconds..."
fi
attempt_num=$(expr "$attempt_num" + 1)
sleep 5
done
}
migrations() {
if [[ -n "${PAPERLESS_DBHOST}" ]]
then
wait_for_postgres
fi
(
# flock is in place to prevent multiple containers from doing migrations
# simultaneously. This also ensures that the db is ready when the command
# of the current container starts.
flock 200
echo "Apply database migrations..."
sudo -HEu paperless python3 manage.py migrate
) 200>/usr/src/paperless/data/migration_lock
@@ -38,13 +79,19 @@ initialize() {
fi
done
echo "creating directory /tmp/paperless"
mkdir -p /tmp/paperless
chown -R paperless:paperless ../
chown -R paperless:paperless /tmp/paperless
migrations
}
install_languages() {
echo "Installing languages..."
local langs="$1"
read -ra langs <<<"$langs"
@@ -79,16 +126,20 @@ install_languages() {
done
}
initialize
echo "Paperless-ng docker container starting..."
# Install additional languages if specified
if [[ ! -z "$PAPERLESS_OCR_LANGUAGES" ]]; then
install_languages "$PAPERLESS_OCR_LANGUAGES"
fi
initialize
if [[ "$1" != "/"* ]]; then
echo Executing management command "$@"
exec sudo -HEu paperless python3 manage.py "$@"
else
echo Executing "$@"
exec "$@"
fi

View File

@@ -1,44 +0,0 @@
version: "3.4"
services:
broker:
image: redis:6.0
restart: always
db:
image: postgres:13
restart: always
volumes:
- pgdata:/var/lib/postgresql/data
environment:
POSTGRES_DB: paperless
POSTGRES_USER: paperless
POSTGRES_PASSWORD: paperless
webserver:
image: jonaswinkler/paperless-ng:0.9.1
restart: always
depends_on:
- db
- broker
ports:
- 8000:8000
healthcheck:
test: ["CMD", "curl", "-f", "http://localhost:8000"]
interval: 30s
timeout: 10s
retries: 5
volumes:
- data:/usr/src/paperless/data
- media:/usr/src/paperless/media
- ./export:/usr/src/paperless/export
- ./consume:/usr/src/paperless/consume
env_file: docker-compose.env
environment:
PAPERLESS_REDIS: redis://broker:6379
PAPERLESS_DBHOST: db
volumes:
data:
media:
pgdata:

View File

@@ -1,31 +0,0 @@
version: "3.4"
services:
broker:
image: redis:6.0
restart: always
webserver:
image: jonaswinkler/paperless-ng:0.9.1
restart: always
depends_on:
- broker
ports:
- 8000:8000
healthcheck:
test: ["CMD", "curl", "-f", "http://localhost:8000"]
interval: 30s
timeout: 10s
retries: 5
volumes:
- data:/usr/src/paperless/data
- media:/usr/src/paperless/media
- ./export:/usr/src/paperless/export
- ./consume:/usr/src/paperless/consume
env_file: docker-compose.env
environment:
PAPERLESS_REDIS: redis://broker:6379
volumes:
data:
media:

View File

@@ -0,0 +1,6 @@
for command in document_archiver document_exporter document_importer mail_fetcher document_create_classifier document_index document_renamer document_retagger document_thumbnails document_sanity_checker;
do
echo "installing $command..."
sed "s/management_command/$command/g" management_script.sh > /usr/local/bin/$command
chmod +x /usr/local/bin/$command
done

View File

@@ -1,60 +0,0 @@
FROM python:3.7-slim
WORKDIR /usr/src/paperless/
COPY requirements.txt ./
#Dependencies
RUN apt-get update \
&& apt-get -y --no-install-recommends install \
build-essential \
curl \
ghostscript \
gnupg \
imagemagick \
libatlas-base-dev \
libmagic-dev \
libpoppler-cpp-dev \
libpq-dev \
optipng \
sudo \
tesseract-ocr \
tesseract-ocr-eng \
tesseract-ocr-deu \
tesseract-ocr-fra \
tesseract-ocr-ita \
tesseract-ocr-spa \
tzdata \
unpaper \
&& pip3 install --upgrade supervisor setuptools \
&& pip install --no-cache-dir -r requirements.txt \
&& apt-get -y purge build-essential \
&& apt-get -y autoremove --purge \
&& rm -rf /var/lib/apt/lists/* \
&& mkdir /var/log/supervisord /var/run/supervisord
# copy scripts
# this fixes issues with imagemagick and PDF
COPY docker/imagemagick-policy.xml /etc/ImageMagick-6/policy.xml
COPY docker/gunicorn.conf.py ./
COPY docker/supervisord.conf /etc/supervisord.conf
COPY docker/docker-entrypoint.sh /sbin/docker-entrypoint.sh
# copy app
COPY src/ ./src/
# add users, setup scripts
RUN addgroup --gid 1000 paperless \
&& useradd --uid 1000 --gid paperless --home-dir /usr/src/paperless paperless \
&& chown -R paperless:paperless . \
&& chmod 755 /sbin/docker-entrypoint.sh
WORKDIR /usr/src/paperless/src/
RUN sudo -HEu paperless python3 manage.py collectstatic --clear --no-input
VOLUME ["/usr/src/paperless/data", "/usr/src/paperless/media", "/usr/src/paperless/consume", "/usr/src/paperless/export"]
ENTRYPOINT ["/sbin/docker-entrypoint.sh"]
CMD ["/usr/local/bin/supervisord", "-c", "/etc/supervisord.conf"]
LABEL maintainer="Jonas Winkler <dev@jpwinkler.de>"

View File

@@ -1,44 +0,0 @@
version: "3.4"
services:
broker:
image: redis:6.0
restart: always
db:
image: postgres:13
restart: always
volumes:
- pgdata:/var/lib/postgresql/data
environment:
POSTGRES_DB: paperless
POSTGRES_USER: paperless
POSTGRES_PASSWORD: paperless
webserver:
build: .
restart: always
depends_on:
- db
- broker
ports:
- 8000:8000
healthcheck:
test: ["CMD", "curl", "-f", "http://localhost:8000"]
interval: 30s
timeout: 10s
retries: 5
volumes:
- data:/usr/src/paperless/data
- media:/usr/src/paperless/media
- ./export:/usr/src/paperless/export
- ./consume:/usr/src/paperless/consume
env_file: docker-compose.env
environment:
PAPERLESS_REDIS: redis://broker:6379
PAPERLESS_DBHOST: db
volumes:
data:
media:
pgdata:

View File

@@ -1,31 +0,0 @@
version: "3.4"
services:
broker:
image: redis:6.0
restart: always
webserver:
build: .
restart: always
depends_on:
- broker
ports:
- 8000:8000
healthcheck:
test: ["CMD", "curl", "-f", "http://localhost:8000"]
interval: 30s
timeout: 10s
retries: 5
volumes:
- data:/usr/src/paperless/data
- media:/usr/src/paperless/media
- ./export:/usr/src/paperless/export
- ./consume:/usr/src/paperless/consume
env_file: docker-compose.env
environment:
PAPERLESS_REDIS: redis://broker:6379
volumes:
data:
media:

View File

@@ -0,0 +1,15 @@
#!/bin/bash
set -e
cd /usr/src/paperless/src/
if [[ $(id -u) == 0 ]] ;
then
sudo -HEu paperless python3 manage.py management_command "$@"
elif [[ $(id -un) == "paperless" ]] ;
then
python3 manage.py management_command "$@"
else
echo "Unknown user."
fi

View File

@@ -8,7 +8,7 @@ loglevel=info ; log level; default info; others: debug,warn,trace
user=root
[program:gunicorn]
command=gunicorn -c /usr/src/paperless/gunicorn.conf.py -b 0.0.0.0:8000 paperless.wsgi
command=gunicorn -c /usr/src/paperless/gunicorn.conf.py paperless.asgi:application
user=paperless
stdout_logfile=/dev/stdout

Binary file not shown.

Before

Width:  |  Height:  |  Size: 52 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 62 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 56 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 70 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 256 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 224 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 101 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 196 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 50 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 53 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 214 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 50 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 106 KiB

BIN
docs/_static/screenshots/dashboard.png vendored Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 167 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 28 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 306 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 410 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 137 KiB

BIN
docs/_static/screenshots/editing.png vendored Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 293 KiB

BIN
docs/_static/screenshots/logs.png vendored Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 260 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 96 KiB

BIN
docs/_static/screenshots/mobile.png vendored Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 158 KiB

BIN
docs/_static/screenshots/new-tag.png vendored Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 32 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 61 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 261 KiB

View File

@@ -20,6 +20,14 @@ Options available to any installation of paperless:
metadata to a specific folder. You may import your documents into a
fresh instance of paperless again or store your documents in another
DMS with this export.
* The document exporter is also able to update an already existing export.
Therefore, incremental backups with ``rsync`` are entirely possible.
.. caution::
You cannot import the export generated with one version of paperless in a
different version of paperless. The export contains an exact image of the
database, and migrations may change the database layout.
Options available to docker installations:
@@ -30,7 +38,7 @@ Options available to docker installations:
Paperless uses 3 volumes:
* ``paperless_media``: This is where your documents are stored.
* ``paperless_data``: This is where auxilliary data is stored. This
* ``paperless_data``: This is where auxillary data is stored. This
folder also contains the SQLite database, if you use it.
* ``paperless_pgdata``: Exists only if you use PostgreSQL and contains
the database.
@@ -48,16 +56,16 @@ Options available to bare-metal and non-docker installations:
Restoring
=========
.. _administration-updating:
Updating paperless
Updating Paperless
##################
Docker Route
============
If a new release of paperless-ng is available, upgrading depends on how you
installed paperless-ng in the first place. The releases are available at
installed paperless-ng in the first place. The releases are available at the
`release page <https://github.com/jonaswinkler/paperless-ng/releases>`_.
First of all, ensure that paperless is stopped.
@@ -69,103 +77,162 @@ First of all, ensure that paperless is stopped.
After that, :ref:`make a backup <administration-backup>`.
A. If you used the docker-compose file, simply download the files of the new release,
adjust the settings in the files (i.e., the path to your consumption directory),
and replace your existing docker-compose files. Then start paperless as usual,
which will pull the new image, and update your database, if necessary:
A. If you pull the image from the docker hub, all you need to do is:
.. code:: shell-session
$ cd /path/to/paperless
$ docker-compose pull
$ docker-compose up
If you see everything working, you can start paperless-ng with "-d" to have it
run in the background.
The docker-compose files refer to the ``latest`` version, which is always the latest
stable release.
.. hint::
The released docker-compose files specify exact versions to be pulled from the hub.
This is to ensure that if the docker-compose files should change at some point
(i.e., services updates/configured differently), you wont run into trouble due to
docker pulling the ``latest`` image and running it in an older environment.
B. If you built the image yourself, grab the new archive and replace your current
paperless folder with the new contents.
After that, make the necessary adjustments to the docker-compose.yml (i.e.,
adjust your consumption directory).
Build and start the new image with:
B. If you built the image yourself, do the following:
.. code:: shell-session
$ cd /path/to/paperless
$ git pull
$ ./compile-frontend.sh
$ docker-compose build
$ docker-compose up
If you see everything working, you can start paperless-ng with "-d" to have it
run in the background.
Running ``docker-compose up`` will also apply any new database migrations.
If you see everything working, press CTRL+C once to gracefully stop paperless.
Then you can start paperless-ng with ``-d`` to have it run in the background.
.. hint::
.. note::
You can usually keep your ``docker-compose.env`` file, since this file will
never include mandantory configuration options. However, it is worth checking
out the new version of this file, since it might have new recommendations
on what to configure.
In version 0.9.14, the update process was changed. In 0.9.13 and earlier, the
docker-compose files specified exact versions and pull won't automatically
update to newer versions. In order to enable updates as described above, either
get the new ``docker-compose.yml`` file from `here <https://github.com/jonaswinkler/paperless-ng/tree/master/docker/compose>`_
or edit the ``docker-compose.yml`` file, find the line that says
.. code::
Updating paperless without docker
=================================
image: jonaswinkler/paperless-ng:0.9.x
and replace the version with ``latest``:
.. code::
image: jonaswinkler/paperless-ng:latest
Bare Metal Route
================
After grabbing the new release and unpacking the contents, do the following:
1. Update python requirements. Paperless uses
`Pipenv`_ for managing dependencies:
1. Update dependencies. New paperless version may require additional
dependencies. The dependencies required are listed in the section about
:ref:`bare metal installations <setup-bare_metal>`.
2. Update python requirements. Keep in mind to activate your virtual environment
before that, if you use one.
.. code:: shell-session
$ pip install --upgrade pipenv
$ cd /path/to/paperless
$ pipenv install
$ pipenv clean
$ pip install -r requirements.txt
This creates a new virtual environment (or uses your existing environment)
and installs all dependencies into it.
2. Collect static files.
.. code:: shell-session
$ cd src
$ pipenv run python3 manage.py collectstatic --clear
3. Migrate the database.
.. code:: shell-session
$ cd src
$ pipenv run python3 manage.py migrate
$ python3 manage.py migrate
This might not actually do anything. Not every new paperless version comes with new
database migrations.
Ansible Route
=============
Most of the update process is automated when using the ansible role.
1. Backup your defined role variables file outside the paperless source-tree:
.. code:: shell-session
$ cp ansible/vars.yml ~/vars.yml.old
2. Pull the release tag you want to update to:
.. code:: shell-session
$ git fetch --all
$ git checkout ng-0.9.14
3. Update the role variable definitions ``ansible/vars.yml`` (where appropriate).
4. Run the ansible playbook you created created during :ref:`installation <setup-ansible>` again:
.. note::
When ansible detects that an update run is in progress, it backs up the entire ``paperlessng_directory`` to ``paperlessng_directory-TIMESTAMP``.
Updates can be rolled back by simply moving the timestamped folder back to the original location.
If the update succeeds and you want to continue using the new release, please don't forget to delete the backup folder.
.. code:: shell-session
$ ansible-playbook playbook.yml
Downgrading Paperless
#####################
Downgrades are possible. However, some updates also contain database migrations (these change the layout of the database and may move data).
In order to move back from a version that applied database migrations, you'll have to revert the database migration *before* downgrading,
and then downgrade paperless.
This table lists the most recent database migrations for each versions:
+---------+-------------------------+
| Version | Latest migration number |
+---------+-------------------------+
| 1.0.0 | 1011 |
+---------+-------------------------+
| 1.1.0 | 1011 |
+---------+-------------------------+
| 1.1.1 | 1012 |
+---------+-------------------------+
Execute the following management command to migrate your database:
.. code:: shell-session
$ python3 manage.py migrate documents <migration number>
.. note::
Some migrations cannot be undone. The command will issue errors if that happens.
.. _utilities-management-commands:
Management utilities
####################
Paperless comes with some management commands that perform various maintenance
tasks on your paperless instance. You can invoke these commands either by
tasks on your paperless instance. You can invoke these commands in the following way:
.. code:: bash
With docker-compose, while paperless is running:
.. code:: shell-session
$ cd /path/to/paperless
$ docker-compose run --rm webserver <command> <arguments>
$ docker-compose exec webserver <command> <arguments>
or
With docker, while paperless is running:
.. code:: bash
.. code:: shell-session
$ docker exec -it <container-name> <command> <arguments>
Bare metal:
.. code:: shell-session
$ cd /path/to/paperless/src
$ pipenv run python manage.py <command> <arguments>
depending on whether you use docker or not.
$ python3 manage.py <command> <arguments>
All commands have built-in help, which can be accessed by executing them with
the argument ``--help``.
@@ -180,7 +247,12 @@ backup or migration to another DMS.
.. code::
document_exporter target
document_exporter target [-c] [-f] [-d]
optional arguments:
-c, --compare-checksums
-f, --use-filename-format
-d, --delete
``target`` is a folder to which the data gets written. This includes documents,
thumbnails and a ``manifest.json`` file. The manifest contains all metadata from
@@ -190,6 +262,24 @@ When you use the provided docker compose script, specify ``../export`` as the
target. This path inside the container is automatically mounted on your host on
the folder ``export``.
If the target directory already exists and contains files, paperless will assume
that the contents of the export directory are a previous export and will attempt
to update the previous export. Paperless will only export changed and added files.
Paperless determines whether a file has changed by inspecting the file attributes
"date/time modified" and "size". If that does not work out for you, specify
``--compare-checksums`` and paperless will attempt to compare file checksums instead.
This is slower.
Paperless will not remove any existing files in the export directory. If you want
paperless to also remove files that do not belong to the current export such as files
from deleted documents, specify ``--delete``. Be careful when pointing paperless to
a directory that already contains other files.
The filenames generated by this command follow the format
``[date created] [correspondent] [title].[extension]``.
If you want paperless to use ``PAPERLESS_FILENAME_FORMAT`` for exported filenames
instead, specify ``--use-filename-format``.
.. _utilities-importer:
@@ -247,12 +337,12 @@ your already processed documents.
When multiple document types or correspondents match a single document,
the retagger won't assign these to the document. Specify ``--use-first``
to override this behaviour and just use the first correspondent or type
to override this behavior and just use the first correspondent or type
it finds. This option does not apply to tags, since any amount of tags
can be applied to a document.
Finally, ``-f`` specifies that you wish to overwrite already assigned
correspondents, types and/or tags. The default behaviour is to not
correspondents, types and/or tags. The default behavior is to not
assign correspondents and types to documents that have this data already
assigned. ``-f`` works differently for tags: By default, only additional tags get
added to documents, no tags will be removed. With ``-f``, tags that don't
@@ -274,6 +364,7 @@ management command:
This command takes no arguments.
.. _`administration-index`:
Managing the document search index
==================================
@@ -319,6 +410,34 @@ the naming scheme.
The command takes no arguments and processes all your documents at once.
.. _utilities-sanity-checker:
Sanity checker
==============
Paperless has a built-in sanity checker that inspects your document collection for issues.
The issues detected by the sanity checker are as follows:
* Missing original files.
* Missing archive files.
* Inaccessible original files due to improper permissions.
* Inaccessible archive files due to improper permissions.
* Corrupted original documents by comparing their checksum against what is stored in the database.
* Corrupted archive documents by comparing their checksum against what is stored in the database.
* Missing thumbnails.
* Inaccessible thumbnails due to improper permissions.
* Documents without any content (warning).
* Orphaned files in the media directory (warning). These are files that are not referenced by any document im paperless.
.. code::
document_sanity_checker
The command takes no arguments. Depending on the size of your document archive, this may take some time.
Fetching e-mail
===============
@@ -332,6 +451,42 @@ command:
The command takes no arguments and processes all your mail accounts and rules.
.. _utilities-archiver:
Creating archived documents
===========================
Paperless stores archived PDF/A documents alongside your original documents.
These archived documents will also contain selectable text for image-only
originals.
These documents are derived from the originals, which are always stored
unmodified. If coming from an earlier version of paperless, your documents
won't have archived versions.
This command creates PDF/A documents for your documents.
.. code::
document_archiver --overwrite --document <id>
This command will only attempt to create archived documents when no archived
document exists yet, unless ``--overwrite`` is specified. If ``--document <id>``
is specified, the archiver will only process that document.
.. note::
This command essentially performs OCR on all your documents again,
according to your settings. If you run this with ``PAPERLESS_OCR_MODE=redo``,
it will potentially run for a very long time. You can cancel the command
at any time, since this command will skip already archived versions the next time
it is run.
.. note::
Some documents will cause errors and cannot be converted into PDF/A documents,
such as encrypted PDF documents. The archiver will skip over these documents
each time it sees them.
.. _utilities-encyption:
Managing encryption
@@ -341,51 +496,32 @@ Documents can be stored in Paperless using GnuPG encryption.
.. danger::
Encryption is depreceated since paperless-ng 0.9 and doesn't really provide any
Encryption is deprecated since paperless-ng 0.9 and doesn't really provide any
additional security, since you have to store the passphrase in a configuration
file on the same system as the encrypted documents for paperless to work.
Furthermore, the entire text content of the documents is stored plain in the
database, even if your documents are encrypted. Filenames are not encrypted as
well.
Also, the web server provides transparent access to your encrypted documents.
Consider running paperless on an encrypted filesystem instead, which will then
at least provide security against physical hardware theft.
.. code::
change_storage_type [--passphrase PASSPHRASE] {gpg,unencrypted} {gpg,unencrypted}
positional arguments:
{gpg,unencrypted} The state you want to change your documents from
{gpg,unencrypted} The state you want to change your documents to
optional arguments:
--passphrase PASSPHRASE
Enabling encryption
-------------------
Basic usage to enable encryption of your document store (**USE A MORE SECURE PASSPHRASE**):
(Note: If ``PAPERLESS_PASSPHRASE`` isn't set already, you need to specify it here)
.. code::
change_storage_type [--passphrase SECR3TP4SSPHRA$E] unencrypted gpg
Enabling encryption is no longer supported.
Disabling encryption
--------------------
Basic usage to enable encryption of your document store:
Basic usage to disable encryption of your document store:
(Note: Again, if ``PAPERLESS_PASSPHRASE`` isn't set already, you need to specify it here)
(Note: If ``PAPERLESS_PASSPHRASE`` isn't set already, you need to specify it here)
.. code::
change_storage_type [--passphrase SECR3TP4SSPHRA$E] gpg unencrypted
.. _Pipenv: https://pipenv.pypa.io/en/latest/
decrypt_documents [--passphrase SECR3TP4SSPHRA$E]

View File

@@ -5,84 +5,7 @@ Advanced topics
Paperless offers a couple features that automate certain tasks and make your life
easier.
Guesswork
#########
Any document you put into the consumption directory will be consumed, but if
you name the file right, it'll automatically set some values in the database
for you. This is is the logic the consumer follows:
1. Try to find the correspondent, title, and tags in the file name following
the pattern: ``Date - Correspondent - Title - tag,tag,tag.pdf``. Note that
the format of the date is **rigidly defined** as ``YYYYMMDDHHMMSSZ`` or
``YYYYMMDDZ``. The ``Z`` refers "Zulu time" AKA "UTC".
The tags are optional, so the format ``Date - Correspondent - Title.pdf``
works as well.
2. If that doesn't work, we skip the date and try this pattern:
``Correspondent - Title - tag,tag,tag.pdf``.
3. If that doesn't work, we try to find the correspondent and title in the file
name following the pattern: ``Correspondent - Title.pdf``.
4. If that doesn't work, just assume that the name of the file is the title.
So given the above, the following examples would work as you'd expect:
* ``20150314000700Z - Some Company Name - Invoice 2016-01-01 - money,invoices.pdf``
* ``20150314Z - Some Company Name - Invoice 2016-01-01 - money,invoices.pdf``
* ``Some Company Name - Invoice 2016-01-01 - money,invoices.pdf``
* ``Another Company - Letter of Reference.jpg``
* ``Dad's Recipe for Pancakes.png``
These however wouldn't work:
* ``2015-03-14 00:07:00 UTC - Some Company Name, Invoice 2016-01-01, money, invoices.pdf``
* ``2015-03-14 - Some Company Name, Invoice 2016-01-01, money, invoices.pdf``
* ``Some Company Name, Invoice 2016-01-01, money, invoices.pdf``
* ``Another Company- Letter of Reference.jpg``
Do I have to be so strict about naming?
=======================================
Rather than using the strict document naming rules, one can also set the option
``PAPERLESS_FILENAME_DATE_ORDER`` in ``paperless.conf`` to any date order
that is accepted by dateparser_. Doing so will cause ``paperless`` to default
to any date format that is found in the title, instead of a date pulled from
the document's text, without requiring the strict formatting of the document
filename as described above.
.. _dateparser: https://github.com/scrapinghub/dateparser/blob/v0.7.0/docs/usage.rst#settings
.. _advanced-transforming_filenames:
Transforming filenames for parsing
==================================
Some devices can't produce filenames that can be parsed by the default
parser. By configuring the option ``PAPERLESS_FILENAME_PARSE_TRANSFORMS`` in
``paperless.conf`` one can add transformations that are applied to the filename
before it's parsed.
The option contains a list of dictionaries of regular expressions (key:
``pattern``) and replacements (key: ``repl``) in JSON format, which are
applied in order by passing them to ``re.subn``. Transformation stops
after the first match, so at most one transformation is applied. The general
syntax is
.. code:: python
[{"pattern":"pattern1", "repl":"repl1"}, {"pattern":"pattern2", "repl":"repl2"}, ..., {"pattern":"patternN", "repl":"replN"}]
The example below is for a Brother ADS-2400N, a scanner that allows
different names to different hardware buttons (useful for handling
multiple entities in one instance), but insists on adding ``_<count>``
to the filename.
.. code:: python
# Brother profile configuration, support "Name_Date_Count" (the default
# setting) and "Name_Count" (use "Name" as tag and "Count" as title).
PAPERLESS_FILENAME_PARSE_TRANSFORMS=[{"pattern":"^([a-z]+)_(\\d{8})_(\\d{6})_([0-9]+)\\.", "repl":"\\2\\3Z - \\4 - \\1."}, {"pattern":"^([a-z]+)_([0-9]+)\\.", "repl":" - \\2 - \\1."}]
.. _advanced-matching:
Matching tags, correspondents and document types
################################################
@@ -145,7 +68,9 @@ America are tagged with the tag "bofa_123" and the matching algorithm of this
tag is set to *Auto*, this neural network will examine your documents and
automatically learn when to assign this tag.
There are a couple caveats you need to keep in mind when using this feature:
Paperless tries to hide much of the involved complexity with this approach.
However, there are a couple caveats you need to keep in mind when using this
feature:
* Changes to your documents are not immediately reflected by the matching
algorithm. The neural network needs to be *trained* on your documents after
@@ -165,6 +90,11 @@ There are a couple caveats you need to keep in mind when using this feature:
has the correspondent "Very obscure web shop I bought something five years
ago", it will probably not assign this correspondent automatically if you buy
something from them again. The more documents, the better.
* Paperless also needs a reasonable amount of negative examples to decide when
not to assign a certain tag, correspondent or type. This will usually be the
case as you start filling up paperless with documents. Example: If all your
documents are either from "Webshop" and "Bank", paperless will assign one of
these correspondents to ANY new document, if both are set to automatic matching.
Hooking into the consumption process
####################################
@@ -253,11 +183,11 @@ By default, paperless stores your documents in the media directory and renames t
using the identifier which it has assigned to each document. You will end up getting
files like ``0000123.pdf`` in your media directory. This isn't necessarily a bad
thing, because you normally don't have to access these files manually. However, if
you wish to name your files differently, you can do that by adjustng the
``PAPERLESS_FILENAME_FORMAT`` settings variable.
you wish to name your files differently, you can do that by adjusting the
``PAPERLESS_FILENAME_FORMAT`` configuration option.
This variable allows you to configure the filename (folders are allowed!) using
placeholders. For example, setting
This variable allows you to configure the filename (folders are allowed) using
placeholders. For example, configuring this to
.. code:: bash
@@ -268,17 +198,16 @@ will create a directory structure as follows:
.. code::
2019/
my_bank/
statement-january-0000001.pdf
statement-february-0000002.pdf
My bank/
Statement January.pdf
Statement February.pdf
2020/
my_bank/
statement-january-0000003.pdf
shoe_store/
my_new_shoes-0000004.pdf
Paperless appends the unique identifier of each document to the filename. This
avoides filename clashes.
My bank/
Statement January.pdf
Letter.pdf
Letter_01.pdf
Shoe store/
My new shoes.pdf
.. danger::
@@ -288,7 +217,10 @@ avoides filename clashes.
Paperless provides the following placeholders withing filenames:
* ``{asn}``: The archive serial number of the document, or "none".
* ``{correspondent}``: The name of the correspondent, or "none".
* ``{document_type}``: The name of the document type, or "none".
* ``{tag_list}``: A comma separated list of all tags assigned to the document.
* ``{title}``: The title of the document.
* ``{created}``: The full date and time the document was created.
* ``{created_year}``: Year created only.
@@ -298,10 +230,15 @@ Paperless provides the following placeholders withing filenames:
* ``{added_year}``: Year added only.
* ``{added_month}``: Month added only (number 1-12).
* ``{added_day}``: Day added only (number 1-31).
* ``{tags}``: I don't know how this works. Look at the source.
Paperless will convert all values for the placeholders into values which are safe
for use in filenames.
Paperless will try to conserve the information from your database as much as possible.
However, some characters that you can use in document titles and correspondent names (such
as ``: \ /`` and a couple more) are not allowed in filenames and will be replaced with dashes.
If paperless detects that two documents share the same filename, paperless will automatically
append ``_01``, ``_02``, etc to the filename. This happens if all the placeholders in a filename
evaluate to the same value.
.. hint::

View File

@@ -13,23 +13,55 @@ available filters and ordering fields.
The API provides 5 main endpoints:
* ``/api/documents/``: Full CRUD support, except POSTing new documents. See below.
* ``/api/correspondents/``: Full CRUD support.
* ``/api/document_types/``: Full CRUD support.
* ``/api/documents/``: Full CRUD support, except POSTing new documents. See below.
* ``/api/logs/``: Read-Only.
* ``/api/tags/``: Full CRUD support.
All of these endpoints except for the logging endpoint
All of these endpoints except for the logging endpoint
allow you to fetch, edit and delete individual objects
by appending their primary key to the path, for example ``/api/documents/454/``.
The objects served by the document endpoint contain the following fields:
* ``id``: ID of the document. Read-only.
* ``title``: Title of the document.
* ``content``: Plain text content of the document.
* ``tags``: List of IDs of tags assigned to this document, or empty list.
* ``document_type``: Document type of this document, or null.
* ``correspondent``: Correspondent of this document or null.
* ``created``: The date at which this document was created.
* ``modified``: The date at which this document was last edited in paperless. Read-only.
* ``added``: The date at which this document was added to paperless. Read-only.
* ``archive_serial_number``: The identifier of this document in a physical document archive.
* ``original_file_name``: Verbose filename of the original document. Read-only.
* ``archived_file_name``: Verbose filename of the archived document. Read-only. Null if no archived document is available.
Downloading documents
#####################
In addition to that, the document endpoint offers these additional actions on
individual documents:
* ``/api/documents/<pk>/download/``: Download the original document.
* ``/api/documents/<pk>/thumb/``: Download the PNG thumbnail of a document.
* ``/api/documents/<pk>/preview/``: Display the original document inline,
* ``/api/documents/<pk>/download/``: Download the document.
* ``/api/documents/<pk>/preview/``: Display the document inline,
without downloading it.
* ``/api/documents/<pk>/thumb/``: Download the PNG thumbnail of a document.
Paperless generates archived PDF/A documents from consumed files and stores both
the original files as well as the archived files. By default, the endpoints
for previews and downloads serve the archived file, if it is available.
Otherwise, the original file is served.
Some document cannot be archived.
The endpoints correctly serve the response header fields ``Content-Disposition``
and ``Content-Type`` to indicate the filename for download and the type of content of
the document.
In order to download or preview the original document when an archied document is available,
supply the query parameter ``original=true``.
.. hint::
@@ -38,6 +70,80 @@ individual documents:
are in place. However, if you use these old URLs to access documents, you
should update your app or script to use the new URLs.
Getting document metadata
#########################
The api also has an endpoint to retrieve read-only metadata about specific documents. this
information is not served along with the document objects, since it requires reading
files and would therefore slow down document lists considerably.
Access the metadata of a document with an ID ``id`` at ``/api/documents/<id>/metadata/``.
The endpoint reports the following data:
* ``original_checksum``: MD5 checksum of the original document.
* ``original_size``: Size of the original document, in bytes.
* ``original_mime_type``: Mime type of the original document.
* ``media_filename``: Current filename of the document, under which it is stored inside the media directory.
* ``has_archive_version``: True, if this document is archived, false otherwise.
* ``original_metadata``: A list of metadata associated with the original document. See below.
* ``archive_checksum``: MD5 checksum of the archived document, or null.
* ``archive_size``: Size of the archived document in bytes, or null.
* ``archive_metadata``: Metadata associated with the archived document, or null. See below.
File metadata is reported as a list of objects in the following form:
.. code:: json
[
{
"namespace": "http://ns.adobe.com/pdf/1.3/",
"prefix": "pdf",
"key": "Producer",
"value": "SparklePDF, Fancy edition"
},
]
``namespace`` and ``prefix`` can be null. The actual metadata reported depends on the file type and the metadata
available in that specific document. Paperless only reports PDF metadata at this point.
Authorization
#############
The REST api provides three different forms of authentication.
1. Basic authentication
Authorize by providing a HTTP header in the form
.. code::
Authorization: Basic <credentials>
where ``credentials`` is a base64-encoded string of ``<username>:<password>``
2. Session authentication
When you're logged into paperless in your browser, you're automatically
logged into the API as well and don't need to provide any authorization
headers.
3. Token authentication
Paperless also offers an endpoint to acquire authentication tokens.
POST a username and password as a form or json string to ``/api/token/``
and paperless will respond with a token, if the login data is correct.
This token can be used to authenticate other requests with the
following HTTP header:
.. code::
Authorization: Token <token>
Tokens can be managed and revoked in the paperless admin.
Searching for documents
#######################
@@ -65,8 +171,9 @@ Result list object returned by the endpoint:
"count": 1,
"page": 1,
"page_count": 1,
"corrected_query": "",
"results": [
]
}
@@ -75,6 +182,8 @@ Result list object returned by the endpoint:
the page you requested, if you requested a page that is behind
the last page. In that case, the last page is returned.
* ``page_count``: The total number of pages.
* ``corrected_query``: Corrected version of the query string. Can be null.
If not null, can be used verbatim to start a new query.
* ``results``: A list of result objects on the current page.
Result object:
@@ -84,17 +193,17 @@ Result object:
{
"id": 1,
"highlights": [
],
"score": 6.34234,
"rank": 23,
"document": {
}
}
* ``id``: the primary key of the found document
* ``highlights``: an object containing parseable highlights for the result.
* ``highlights``: an object containing parsable highlights for the result.
See below.
* ``score``: The score assigned to the document. A higher score indicates a
better match with the query. Search results are sorted descending by score.
@@ -112,21 +221,16 @@ Each fragment contains a list of strings, and some of them are marked as a highl
[
[
{"text": "This is a sample text with a "},
{"text": "highlighted", "term": 0},
{"text": " word."}
{"text": "This is a sample text with a ", "highlight": false},
{"text": "highlighted", "highlight": true},
{"text": " word.", "highlight": false}
],
[
{"text": "Another", "term": 1},
{"text": " fragment with a highlight."}
{"text": "Another", "highlight": true},
{"text": " fragment with a highlight.", "highlight": false}
]
]
When ``term`` is present within a string, the word within ``text`` should be highlighted.
The term index groups multiple matches together and words with the same index
should get identical highlighting.
A client may use this example to produce the following output:
... This is a sample text with a **highlighted** word. ... **Another** fragment with a highlight. ...
@@ -166,8 +270,17 @@ The API provides a special endpoint for file uploads:
POST a multipart form to this endpoint, where the form field ``document`` contains
the document that you want to upload to paperless. The filename is sanitized and
then used to store the document in the consumption folder, where the consumer will
detect the document and process it as any other document.
then used to store the document in a temporary directory, and the consumer will
be instructed to consume the document from there.
The endpoint will immediately return "OK." if the document was stored in the
consumption directory.
The endpoint supports the following optional form fields:
* ``title``: Specify a title that the consumer should use for the document.
* ``correspondent``: Specify the ID of a correspondent that the consumer should use for the document.
* ``document_type``: Similar to correspondent.
* ``tags``: Similar to correspondent. Specify this multiple times to have multiple tags added
to the document.
The endpoint will immediately return "OK" if the document consumption process
was started successfully. No additional status information about the consumption
process itself is available, since that happens in a different process.

View File

@@ -5,6 +5,565 @@
Changelog
*********
paperless-ng 1.2.0
##################
* Changes to the OCRmyPDF integration
* Added support for deskewing and automatic rotation of incorrectly rotated pages. This is enabled by default, see :ref:`configuration-ocr`.
* Better support for encrypted files.
* Better support for various other PDF files: Paperless will now attempt to force OCR with safe options when OCR fails with the configured options.
* Added an explicit option to skip cleaning with ``unpaper``.
* Download multiple selected documents as a zip archive.
* The document list now remembers the current page.
* Improved responsiveness when switching between saved views and the document list.
* Increased the default wait time when observing files in the consumption folder
with polling from 1 to 5 seconds. This will decrease the likelihood of paperless
consuming partially written files.
* Fixed a crash of the document archiver management command when trying to process documents with unknown mime types.
* Paperless no longer depends on ``libpoppler-cpp-dev``.
.. note::
Some packages that paperless depends on are slowly dropping Python 3.6
support one after another, including the web server. Supporting Python
3.6 means that I cannot update these packages anymore.
At some point, paperless will drop Python 3.6 support. If using a bare
metal installation and you're still on Python 3.6, upgrade to 3.7 or newer.
If using docker, this does not affect you.
paperless-ng 1.1.4
##################
* Added English (GB) locale.
* Added ISO-8601 date display option.
paperless-ng 1.1.3
##################
* Added a docker-specific configuration option to adjust the number of
worker processes of the web server. See :ref:`configuration-docker`.
* Some more memory usage optimizations.
* Don't show inbox statistics if no inbox tag is defined.
paperless-ng 1.1.2
##################
* Always show top left corner of thumbnails, even for extra wide documents.
* Added a management command for executing the sanity checker directly.
See :ref:`utilities-sanity-checker`.
* The weekly sanity check now reports messages in the log files.
* Fixed an issue with the metadata tab not reporting anything in case of missing files.
* Reverted a change from 1.1.0 that caused huge memory usage due to redis caching.
* Some memory usage optimizations.
paperless-ng 1.1.1
##################
This release contains new database migrations.
* Fixed a bug in the sanity checker that would cause it to display "x not in list" errors instead of actual issues.
* Fixed a bug with filename generation for archive filenames that would cause the archive files of two documents to overlap.
* This happened when ``PAPERLESS_FILENAME_FORMAT`` is used and the filenames of two or more documents are the same, except for the file extension.
* Paperless will now store the archive filename in the database as well instead of deriving it from the original filename, and use the
same logic for detecting and avoiding filename clashes that's also used for original filenames.
* The migrations will repair any missing archive files. If you're using tika, ensure that tika is running while performing the migration. Docker-compose will take care of that.
* Fixed a bug with thumbnail regeneration when TIKA integration was used.
* Added ASN as a placeholder field to the filename format.
* The docker image now comes with built-in shortcuts for most management commands. These are now the recommended way to execute management commands, since these
also ensure that they're always executed as the paperless user and you're less likely to run into permission issues. See :ref:`utilities-management-commands`.
paperless-ng 1.1.0
##################
* Document processing status
* Paperless now shows the status of processing documents on the dashboard in real time.
* Status notifications when
* New documents are detected in the consumption folder, in mails, uploaded on the front end,
or added with one of the mobile apps.
* Documents are successfully added to paperless.
* Document consumption failed (with error messages)
* Configuration options to enable/disable individual notifications.
* Live updates to document lists and saved views when new documents are added.
.. hint::
For status notifications and live updates to work, paperless now requires an `ASGI <https://asgi.readthedocs.io/en/latest/>`_-enabled
web server. The docker images uses ``gunicorn`` and an ASGI-enabled worker called `uvicorn <http://www.uvicorn.org/>`_,
and there is no need to configure anything.
For bare metal installations, changes are required for the notifications to work. Adapt the service ``paperless-webserver.service``
to use the supplied ``gunicorn.conf.py`` configuration file and adapt the reference to the ASGI application as follows:
.. code::
ExecStart=/opt/paperless/.local/bin/gunicorn -c /opt/paperless/gunicorn.conf.py paperless.asgi:application
Paperless will continue to work with WSGI, but you will not get any status notifications.
Apache ``mod_wsgi`` users, see :ref:`this note <faq-mod_wsgi>`.
* Paperless now offers suggestions for tags, correspondents and types on the document detail page.
* Added an interactive easy install script that automatically downloads, configures and starts paperless with docker.
* Official support for Python 3.9.
* Other changes and fixes
* Adjusted the default parallelization settings to run more than one task in parallel on systems with 4 or less cores.
This addresses issues with paperless not consuming any new files when other tasks are running.
* Fixed a rare race condition that would cause paperless to process incompletely written files when using the upload on the dashboard.
* The document classifier no longer issues warnings and errors when auto matching is not used at all.
* Better icon for document previews.
* Better info section in the side bar.
* Paperless no longer logs to the database. Instead, logs are written to rotating log files. This solves many "database is locked"
issues on Raspberry Pi, especially when SQLite is used.
* By default, log files are written to ``PAPERLESS_DATA_DIR/log/``. Logging settings can be adjusted with
``PAPERLESS_LOGGING_DIR``, ``PAPERLESS_LOGROTATE_MAX_SIZE`` and
``PAPERLESS_LOGROTATE_MAX_BACKUPS``.
paperless-ng 1.0.0
##################
Nothing special about this release, but since there are relatively few bug reports coming in, I think that this is reasonably stable.
* Document export
* The document exporter has been rewritten to support updating an already existing export in place.
This enables incremental backups with ``rsync``.
* The document exporter supports naming exported files according to ``PAPERLESS_FILENAME_FORMAT``.
* The document exporter locks the media directory and the database during execution to ensure that
the resulting export is consistent.
* See the :ref:`updated documentation <utilities-exporter>` for more details.
* Other changes and additions
* Added a language selector to the settings.
* Added date format options to the settings.
* Range selection with shift clicking is now possible in the document list.
* Filtering correspondent, type and tag management pages by name.
* Focus "Name" field in dialogs by default.
paperless-ng 0.9.14
###################
Starting with this version, releases are getting built automatically. This release also comes with changes on how to install and
update paperless.
* Paperless now uses GitHub Actions to make releases and build docker images.
* Docker images are available for amd64, armhf, and aarch64.
* When you pull an image from Docker Hub, Docker will automatically select the correct image for you.
* Changes to docker installations and updates
* The ``-dockerfiles.tar.xz`` release archive is gone. Instead, simply grab the docker files from ``/docker/compose`` in the repository
if you wish to install paperless by pulling from the hub.
* The docker compose files in ``/docker/compose`` were changed to always use the ``latest`` version automatically. In order to do further
updates, simply do a ``docker-compose pull``. The documentation has been updated.
* The docker compose files were changed to restart paperless on system boot only if it was running before shutdown.
* Documentation of the docker-compose files about what they do.
* Changes to bare metal installations and updates
* The release archive is built exactly like before. However, the release now comes with already compiled translation messages and
collected static files. Therefore, the update steps ``compilemessages`` and ``collectstatic`` are now obsolete.
* Other changes
* A new configuration option ``PAPERLESS_IGNORE_DATES`` was added by `jayme-github`_. This can be used to instruct paperless to ignore
certain dates (such as your date of birth) when guessing the date from the document content. This was actually introduced in 0.9.12,
I just forgot to mention it in the changelog.
* The filter drop downs now display selected entries on top of all other entries.
* The PostgreSQL client now supports setting an explicit ``sslmode`` to force encryption of the connection to PostgreSQL.
* The docker images now come with ``jbig2enc``, which is a lossless image encoder for PDF documents and decreases the size of certain
PDF/A documents.
* When using any of the manual matching algorithms, paperless now logs messages about when and why these matching algorithms matched.
* The default settings for parallelization in paperless were adjusted to always leave one CPU core free.
* Added an option to the frontend to choose which method to use for displaying PDF documents.
* Fixes
* An issue with the tika parser not picking up files from the consumption directory was fixed.
* A couple changes to the dark mode and fixes to several other layout issues.
* An issue with the drop downs for correspondents, tags and types not properly supporting filtering with special characters was fixed.
* Fixed an issue with filenames of downloaded files: Dates where off by one day due to timezone issues.
* Searching will continue to work even when the index returns non-existing documents. This resulted in "Document does not exist" errors
before. Instead, a warning is logged, indicating the issue.
* An issue with the consumer crashing when invalid regular expression were used was fixed.
paperless-ng 0.9.13
###################
* Fixed an issue with Paperless not starting due to the new Tika integration when ``USERMAP_UID`` and ``USERMAP_GID`` was used
in the ``docker-compose.env`` file.
paperless-ng 0.9.12
###################
* Paperless localization
* Thanks to the combined efforts of many users, Paperless is now available in English, Dutch, French and German.
* Thanks to `Jo Vandeginste`_, Paperless has optional support for Office documents such as .docx, .doc, .odt and more.
* See the :ref:`configuration<configuration-tika>` on how to enable this feature. This feature requires two additional services
(one for parsing Office documents and metadata extraction and another for converting Office documents to PDF), and is therefore
not enabled on default installations.
* As with all other documents, paperless converts Office documents to PDF and stores both the original as well as the archived PDF.
* Dark mode
* Thanks to `Michael Shamoon`_, paperless now has a dark mode. Configuration is available in the settings.
* Other changes and additions
* The PDF viewer now uses a local copy of some dependencies instead of fetching them from the internet. Thanks to `slorenz`_.
* Revamped search bar styling thanks to `Michael Shamoon`_.
* Sorting in the document list by clicking on table headers.
* A button was added to the document detail page that assigns a new ASN to a document.
* Form field validation: When providing invalid input in a form (such as a duplicate ASN or no name), paperless now has visual
indicators and clearer error messages about what's wrong.
* Paperless disables buttons with network actions (such as save and delete) when a network action is active. This indicates that
something is happening and prevents double clicking.
* When using "Save & next", the title field is focussed automatically to better support keyboard editing.
* E-Mail: Added filter rule parameters to allow inline attachments (watch out for mails with inlined images!) and attachment filename filters
with wildcards.
* Support for remote user authentication thanks to `Michael Shamoon`_. This is useful for hiding Paperless behind single sign on applications
such as `authelia <https://www.authelia.com/>`_.
* "Clear filters" has been renamed to "Reset filters" and now correctly restores the default filters on saved views. Thanks to `Michael Shamoon`_
* Fixes
* Paperless was unable to save views when "Not assigned" was chosen in one of the filter dropdowns.
* Clearer error messages when pre and post consumption scripts do not exist.
* The post consumption script is executed later in the consumption process. Before the change, an ID was passed to the script referring to
a document that did not yet exist in the database.
paperless-ng 0.9.11
###################
* Fixed an issue with the docker image not starting at all due to a configuration change of the web server.
paperless-ng 0.9.10
###################
* Bulk editing
* Thanks to `Michael Shamoon`_, we've got a new interface for the bulk editor.
* There are some configuration options in the settings to alter the behavior.
* Other changes and additions
* Thanks to `zjean`_, paperless now publishes a webmanifest, which is useful for adding the application to home screens on mobile devices.
* The Paperless-ng logo now navigates to the dashboard.
* Filter for documents that don't have any correspondents, types or tags assigned.
* Tags, types and correspondents are now sorted case insensitive.
* Lots of preparation work for localization support.
* Fixes
* Added missing dependencies for Raspberry Pi builds.
* Fixed an issue with plain text file consumption: Thumbnail generation failed due to missing fonts.
* An issue with the search index reporting missing documents after bulk deletes was fixed.
* Issue with the tag selector not clearing input correctly.
* The consumer used to stop working when encountering an incomplete classifier model file.
.. note::
The bulk delete operations did not update the search index. Therefore, documents that you deleted remained in the index and
caused the search to return messages about missing documents when searching. Further bulk operations will properly update
the index.
However, this change is not retroactive: If you used the delete method of the bulk editor, you need to reindex your search index
by :ref:`running the management command document_index with the argument reindex <administration-index>`.
paperless-ng 0.9.9
##################
Christmas release!
* Bulk editing
* Paperless now supports bulk editing.
* The following operations are available: Add and remove correspondents, tags, document types from selected documents, as well as mass-deleting documents.
* We've got a more fancy UI in the works that makes these features more accessible, but that's not quite ready yet.
* Searching
* Paperless now supports searching for similar documents ("More like this") both from the document detail page as well as from individual search results.
* A search score indicates how well a document matches the search query, or how similar a document is to a given reference document.
* Other additions and changes
* Clarification in the UI that the fields "Match" and "Is insensitive" are not relevant for the Auto matching algorithm.
* New select interface for tags, types and correspondents allows filtering. This also improves tag selection. Thanks again to `Michael Shamoon`_!
* Page navigation controls for the document viewer, thanks to `Michael Shamoon`_.
* Layout changes to the small cards document list.
* The dashboard now displays the username (or full name if specified in the admin) on the dashboard.
* Fixes
* An error that caused the document importer to crash was fixed.
* An issue with changes not being possible when ``PAPERLESS_COOKIE_PREFIX`` is used was fixed.
* The date selection filters now allow manual entry of dates.
* Feature Removal
* Most of the guesswork features have been removed. Paperless no longer tries to extract correspondents and tags from file names.
paperless-ng 0.9.8
##################
This release addresses two severe issues with the previous release.
* The delete buttons for document types, correspondents and tags were not working.
* The document section in the admin was causing internal server errors (500).
paperless-ng 0.9.7
##################
* Front end
* Thanks to the hard work of `Michael Shamoon`_, paperless now comes with a much more streamlined UI for
filtering documents.
* `Michael Shamoon`_ replaced the document preview with another component. This should fix compatibility with Safari browsers.
* Added buttons to the management pages to quickly show all documents with one specific tag, correspondent, or title.
* Paperless now stores your saved views on the server and associates them with your user account.
This means that you can access your views on multiple devices and have separate views for different users.
You will have to recreate your views.
* The GitHub and documentation links now open in new tabs/windows. Thanks to `rYR79435`_.
* Paperless now generates default saved view names when saving views with certain filter rules.
* Added a small version indicator to the front end.
* Other additions and changes
* The new filename format field ``{tag_list}`` inserts a list of tags into the filename, separated by comma.
* The ``document_retagger`` no longer removes inbox tags or tags without matching rules.
* The new configuration option ``PAPERLESS_COOKIE_PREFIX`` allows you to run multiple instances of paperless on different ports.
This option enables you to be logged in into multiple instances by specifying different cookie names for each instance.
* Fixes
* Sometimes paperless would assign dates in the future to newly consumed documents.
* The filename format fields ``{created_month}`` and ``{created_day}`` now use a leading zero for single digit values.
* The filename format field ``{tags}`` can no longer be used without arguments.
* Paperless was not able to consume many images (especially images from mobile scanners) due to missing DPI information.
Paperless now assumes A4 paper size for PDF generation if no DPI information is present.
* Documents with empty titles could not be opened from the table view due to the link being empty.
* Fixed an issue with filenames containing special characters such as ``:`` not being accepted for upload.
* Fixed issues with thumbnail generation for plain text files.
paperless-ng 0.9.6
##################
This release focusses primarily on many small issues with the UI.
* Front end
* Paperless now has proper window titles.
* Fixed an issue with the small cards when more than 7 tags were used.
* Navigation of the "Show all" links adjusted. They navigate to the saved view now, if available in the sidebar.
* Some indication on the document lists that a filter is active was added.
* There's a new filter to filter for documents that do *not* have a certain tag.
* The file upload box now shows upload progress.
* The document edit page was reorganized.
* The document edit page shows various information about a document.
* An issue with the height of the preview was fixed.
* Table issues with too long document titles fixed.
* API
* The API now serves file names with documents.
* The API now serves various metadata about documents.
* API documentation updated.
* Other
* Fixed an issue with the docker image when a non-standard PostgreSQL port was used.
* The docker image was trying check for installed languages before actually installing them.
* ``FILENAME_FORMAT`` placeholder for document types.
* The filename formatter is now less restrictive with file names and tries to
conserve the original correspondents, types and titles as much as possible.
* The filename formatter does not include the document ID in filenames anymore. It will
rather append ``_01``, ``_02``, etc when it detects duplicate filenames.
.. note::
The changes to the filename format will apply to newly added documents and changed documents.
If you want all files to reflect these changes, execute the ``document_renamer`` management
command.
paperless-ng 0.9.5
##################
This release concludes the big changes I wanted to get rolled into paperless. The next releases before 1.0 will
focus on fixing issues, primarily.
* OCR
* Paperless now uses `OCRmyPDF <https://github.com/jbarlow83/OCRmyPDF>`_ to perform OCR on documents.
It still uses tesseract under the hood, but the PDF parser of Paperless has changed considerably and
will behave different for some douments.
* OCRmyPDF creates archived PDF/A documents with embedded text that can be selected in the front end.
* Paperless stores archived versions of documents alongside with the originals. The originals can be
accessed on the document edit page. If available, a dropdown menu will appear next to the download button.
* Many of the configuration options regarding OCR have changed. See :ref:`configuration-ocr` for details.
* Paperless no longer guesses the language of your documents. It always uses the language that you
specified with ``PAPERLESS_OCR_LANGUAGE``. Be sure to set this to the language the majority of your
documents are in. Multiple languages can be specified, but that requires more CPU time.
* The management command :ref:`document_archiver <utilities-archiver>` can be used to create archived versions for already
existing documents.
* Tags from consumption folder.
* Thanks to `jayme-github`_, paperless now consumes files from sub folders in the consumption folder and is able to assign tags
based on the sub folders a document was found in. This can be configured with ``PAPERLESS_CONSUMER_RECURSIVE`` and
``PAPERLESS_CONSUMER_SUBDIRS_AS_TAGS``.
* API
* The API now offers token authentication.
* The endpoint for uploading documents now supports specifying custom titles, correspondents, tags and types.
This can be used by clients to override the default behavior of paperless. See :ref:`api-file_uploads`.
* The document endpoint of API now serves documents in this form:
* correspondents, document types and tags are referenced by their ID in the fields ``correspondent``, ``document_type`` and ``tags``. The ``*_id`` versions are gone. These fields are read/write.
* paperless does not serve nested tags, correspondents or types anymore.
* Front end
* Paperless does some basic caching of correspondents, tags and types and will only request them from the server when necessary or when entirely reloading the page.
* Document list fetching is about 10%-30% faster now, especially when lots of tags/correspondents are present.
* Some minor improvements to the front end, such as document count in the document list, better highlighting of the current page, and improvements to the filter behavior.
* Fixes:
* A bug with the generation of filenames for files with unsupported types caused the exporter and
document saving to crash.
* Mail handling no longer exits entirely when encountering errors. It will skip the account/rule/message on which the error occured.
* Assigning correspondents from mail sender names failed for very long names. Paperless no longer assigns correspondents in these cases.
paperless-ng 0.9.4
##################
* Searching:
* Paperless now supports searching by tags, types and dates and correspondents. In order to have this applied to your
existing documents, you need to perform a ``document_index reindex`` management command
(see :ref:`administration-index`)
that adds the data to the search index. You only need to do this once, since the schema of the search index changed.
Paperless keeps the index updated after that whenever something changes.
* Paperless now has spelling corrections ("Did you mean") for miss-typed queries.
* The documentation contains :ref:`information about the query syntax <basic-searching>`.
* Front end:
* Clickable tags, correspondents and types allow quick filtering for related documents.
* Saved views are now editable.
* Preview documents directly in the browser.
* Navigation from the dashboard to saved views.
* Fixes:
* A severe error when trying to use post consume scripts.
* An error in the consumer that cause invalid messages of missing files to show up in the log.
* The documentation now contains information about bare metal installs and a section about
how to setup the development environment.
paperless-ng 0.9.3
##################
* Setting ``PAPERLESS_AUTO_LOGIN_USERNAME`` replaces ``PAPERLESS_DISABLE_LOGIN``.
You have to specify your username.
* Added a simple sanity checker that checks your documents for missing or orphaned files,
files with wrong checksums, inaccessible files, and documents with empty content.
* It is no longer possible to encrypt your documents. For the time being, paperless will
continue to operate with already encrypted documents.
* Fixes:
* Paperless now uses inotify again, since the watchdog was causing issues which I was not
aware of.
* Issue with the automatic classifier not working with only one tag.
* A couple issues with the search index being opened to eagerly.
* Added lots of tests for various parts of the application.
paperless-ng 0.9.2
##################
* Major changes to the front end (colors, logo, shadows, layout of the cards,
better mobile support)
* Paperless now uses mime types and libmagic detection to determine
if a file type is supported and which parser to use. Removes all
file type checks that where present in MANY different places in
paperless.
* Mail consumer now correctly consumes documents even when their
content type was not set correctly. (i.e. PDF documents with
content type ``application/octet-stream``)
* Basic sorting of mail rules added
* Much better admin for mail rule editing.
* Docker entrypoint script awaits the database server if it is
configured.
* Disabled editing of logs.
* New setting ``PAPERLESS_OCR_PAGES`` limits the tesseract parser
to the first n pages of scanned documents.
* Fixed a bug where tasks with too long task names would not show
up in the admin.
paperless-ng 0.9.1
##################
@@ -22,7 +581,7 @@ paperless-ng 0.9.0
* **Added:** New frontend. Features:
* Single page application: It's much more responsive than the django admin pages.
* Dashboard. Shows recently scanned documents, or todos, or other documents
* Dashboard. Shows recently scanned documents, or todo notes, or other documents
at wish. Allows uploading of documents. Shows basic statistics.
* Better document list with multiple display options.
* Full text search with result highlighting, auto completion and scoring based
@@ -72,7 +631,7 @@ paperless-ng 0.9.0
* **Modified [breaking]:** PostgreSQL:
* If ``PAPERLESS_DBHOST`` is specified in the settings, paperless uses postgresql instead of sqlite.
* If ``PAPERLESS_DBHOST`` is specified in the settings, paperless uses PostgreSQL instead of SQLite.
Username, database and password all default to ``paperless`` if not specified.
* **Modified [breaking]:** document_retagger management command rework. See
@@ -100,7 +659,7 @@ paperless-ng 0.9.0
Certain language specifics such as umlauts may not get picked up properly.
* ``PAPERLESS_DEBUG`` defaults to ``false``.
* The presence of ``PAPERLESS_DBHOST`` now determines whether to use PostgreSQL or
sqlite.
SQLite.
* ``PAPERLESS_OCR_THREADS`` is gone and replaced with ``PAPERLESS_TASK_WORKERS`` and
``PAPERLESS_THREADS_PER_WORKER``. Refer to the config example for details.
* ``PAPERLESS_OPTIMIZE_THUMBNAILS`` allows you to disable or enable thumbnail
@@ -108,8 +667,11 @@ paperless-ng 0.9.0
* Many more small changes here and there. The usual stuff.
Paperless
#########
2.7.0
#####
=====
* `syntonym`_ submitted a pull request to catch IMAP connection errors `#475`_.
* `Stéphane Brunner`_ added ``psycopg2`` to the Pipfile `#489`_. He also fixed
@@ -126,7 +688,7 @@ paperless-ng 0.9.0
2.6.1
#####
=====
* We now have a logo, complete with a favicon :-)
* Removed some problematic tests.
@@ -138,7 +700,7 @@ paperless-ng 0.9.0
2.6.0
#####
=====
* Allow an infinite number of logs to be deleted. Thanks to `Ulli`_ for noting
the problem in `#433`_.
@@ -159,7 +721,7 @@ paperless-ng 0.9.0
2.5.0
#####
=====
* **New dependency**: Paperless now optimises thumbnail generation with
`optipng`_, so you'll need to install that somewhere in your PATH or declare
@@ -203,7 +765,7 @@ paperless-ng 0.9.0
2.4.0
#####
=====
* A new set of actions are now available thanks to `jonaswinkler`_'s very first
pull request! You can now do nifty things like tag documents in bulk, or set
@@ -224,7 +786,7 @@ paperless-ng 0.9.0
2.3.0
#####
=====
* Support for consuming plain text & markdown documents was added by
`Joshua Taillon`_! This was a long-requested feature, and it's addition is
@@ -242,14 +804,14 @@ paperless-ng 0.9.0
2.2.1
#####
=====
* `Kyle Lucy`_ reported a bug quickly after the release of 2.2.0 where we broke
the ``DISABLE_LOGIN`` feature: `#392`_.
2.2.0
#####
=====
* Thanks to `dadosch`_, `Wolfgang Mader`_, and `Tim Brooks`_ this is the first
version of Paperless that supports Django 2.0! As a result of their hard
@@ -266,7 +828,7 @@ paperless-ng 0.9.0
2.1.0
#####
=====
* `Enno Lohmeier`_ added three simple features that make Paperless a lot more
user (and developer) friendly:
@@ -285,7 +847,7 @@ paperless-ng 0.9.0
2.0.0
#####
=====
This is a big release as we've changed a core-functionality of Paperless: we no
longer encrypt files with GPG by default.
@@ -317,7 +879,7 @@ Special thanks to `erikarvstedt`_, `matthewmoto`_, and `mcronce`_ who did the
bulk of the work on this big change.
1.4.0
#####
=====
* `Quentin Dawans`_ has refactored the document consumer to allow for some
command-line options. Notably, you can now direct it to consume from a
@@ -352,7 +914,7 @@ bulk of the work on this big change.
to some excellent work from `erikarvstedt`_ on `#351`_
1.3.0
#####
=====
* You can now run Paperless without a login, though you'll still have to create
at least one user. This is thanks to a pull-request from `matthewmoto`_:
@@ -375,7 +937,7 @@ bulk of the work on this big change.
problem and helping me find where to fix it.
1.2.0
#####
=====
* New Docker image, now based on Alpine, thanks to the efforts of `addadi`_
and `Pit`_. This new image is dramatically smaller than the Debian-based
@@ -394,7 +956,7 @@ bulk of the work on this big change.
in the document text.
1.1.0
#####
=====
* Fix for `#283`_, a redirect bug which broke interactions with
paperless-desktop. Thanks to `chris-aeviator`_ for reporting it.
@@ -404,7 +966,7 @@ bulk of the work on this big change.
`Dan Panzarella`_
1.0.0
#####
=====
* Upgrade to Django 1.11. **You'll need to run
``pip install -r requirements.txt`` after the usual ``git pull`` to
@@ -423,14 +985,14 @@ bulk of the work on this big change.
`Lukas Winkler`_'s issue `#278`_
0.8.0
#####
=====
* Paperless can now run in a subdirectory on a host (``/paperless``), rather
than always running in the root (``/``) thanks to `maphy-psd`_'s work on
`#255`_.
0.7.0
#####
=====
* **Potentially breaking change**: As per `#235`_, Paperless will no longer
automatically delete documents attached to correspondents when those
@@ -442,7 +1004,7 @@ bulk of the work on this big change.
`Kusti Skytén`_ for posting the correct solution in the Github issue.
0.6.0
#####
=====
* Abandon the shared-secret trick we were using for the POST API in favour
of BasicAuth or Django session.
@@ -456,7 +1018,7 @@ bulk of the work on this big change.
the help with this feature.
0.5.0
#####
=====
* Support for fuzzy matching in the auto-tagger & auto-correspondent systems
thanks to `Jake Gysland`_'s patch `#220`_.
@@ -474,13 +1036,13 @@ bulk of the work on this big change.
* Amended the Django Admin configuration to have nice headers (`#230`_)
0.4.1
#####
=====
* Fix for `#206`_ wherein the pluggable parser didn't recognise files with
all-caps suffixes like ``.PDF``
0.4.0
#####
=====
* Introducing reminders. See `#199`_ for more information, but the short
explanation is that you can now attach simple notes & times to documents
@@ -490,7 +1052,7 @@ bulk of the work on this big change.
like to make use of this feature in his project.
0.3.6
#####
=====
* Fix for `#200`_ (!!) where the API wasn't configured to allow updating the
correspondent or the tags for a document.
@@ -504,7 +1066,7 @@ bulk of the work on this big change.
documentation is on its way.
0.3.5
#####
=====
* A serious facelift for the documents listing page wherein we drop the
tabular layout in favour of a tiled interface.
@@ -515,7 +1077,7 @@ bulk of the work on this big change.
consumption.
0.3.4
#####
=====
* Removal of django-suit due to a licensing conflict I bumped into in 0.3.3.
Note that you *can* use Django Suit with Paperless, but only in a
@@ -528,26 +1090,26 @@ bulk of the work on this big change.
API thanks to @thomasbrueggemann. See `#179`_.
0.3.3
#####
=====
* Thumbnails in the UI and a Django-suit -based face-lift courtesy of @ekw!
* Timezone, items per page, and default language are now all configurable,
also thanks to @ekw.
0.3.2
#####
=====
* Fix for `#172`_: defaulting ALLOWED_HOSTS to ``["*"]`` and allowing the
user to set her own value via ``PAPERLESS_ALLOWED_HOSTS`` should the need
arise.
0.3.1
#####
=====
* Added a default value for ``CONVERT_BINARY``
0.3.0
#####
=====
* Updated to using django-filter 1.x
* Added some system checks so new users aren't confused by misconfigurations.
@@ -560,7 +1122,7 @@ bulk of the work on this big change.
``PAPERLESS_SHARED_SECRET`` respectively instead.
0.2.0
#####
=====
* `#150`_: The media root is now a variable you can set in
``paperless.conf``.
@@ -588,7 +1150,7 @@ bulk of the work on this big change.
to `Martin Honermeyer`_ and `Tim White`_ for working with me on this.
0.1.1
#####
=====
* Potentially **Breaking Change**: All references to "sender" in the code
have been renamed to "correspondent" to better reflect the nature of the
@@ -612,7 +1174,7 @@ bulk of the work on this big change.
to be imported but made unavailable.
0.1.0
#####
=====
* Docker support! Big thanks to `Wayne Werner`_, `Brian Conn`_, and
`Tikitu de Jager`_ for this one, and especially to `Pit`_
@@ -631,14 +1193,14 @@ bulk of the work on this big change.
* Added tox with pep8 checking
0.0.6
#####
=====
* Added support for parallel OCR (significant work from `Pit`_)
* Sped up the language detection (significant work from `Pit`_)
* Added simple logging
0.0.5
#####
=====
* Added support for image files as documents (png, jpg, gif, tiff)
* Added a crude means of HTTP POST for document imports
@@ -647,7 +1209,7 @@ bulk of the work on this big change.
* Documentation for the above as well as data migration
0.0.4
#####
=====
* Added automated tagging basted on keyword matching
* Cleaned up the document listing page
@@ -655,22 +1217,28 @@ bulk of the work on this big change.
* Added ``pytz`` to the list of requirements
0.0.3
#####
=====
* Added basic tagging
0.0.2
#####
=====
* Added language detection
* Added datestamps to ``document_exporter``.
* Changed ``settings.TESSERACT_LANGUAGE`` to ``settings.OCR_LANGUAGE``.
0.0.1
#####
=====
* Initial release
.. _slorenz: https://github.com/sisao
.. _Jo Vandeginste: https://github.com/jovandeginste
.. _zjean: https://github.com/zjean
.. _rYR79435: https://github.com/rYR79435
.. _Michael Shamoon: https://github.com/shamoon
.. _jayme-github: http://github.com/jayme-github
.. _Brian Conn: https://github.com/TheConnMan
.. _Christopher Luu: https://github.com/nuudles
.. _Florian Jung: https://github.com/the01

View File

@@ -1,48 +1,21 @@
# -*- coding: utf-8 -*-
#
# Paperless documentation build configuration file, created by
# sphinx-quickstart on Mon Oct 26 18:36:52 2015.
#
# This file is execfile()d with the current directory set to its
# containing dir.
#
# Note that not all possible configuration values are present in this
# autogenerated file.
#
# All configuration values have a default; values that are commented out
# serve to show the default.
import sphinx_rtd_theme
__version__ = None
exec(open("../src/paperless/version.py").read())
# Believe it or not, this is the officially sanctioned way to add custom CSS.
def setup(app):
app.add_stylesheet("custom.css")
# If extensions (or modules to document with autodoc) are in another directory,
# add these directories to sys.path here. If the directory is relative to the
# documentation root, use os.path.abspath to make it absolute, like shown here.
#sys.path.insert(0, os.path.abspath('.'))
# -- General configuration ------------------------------------------------
# If your documentation needs a minimal Sphinx version, state it here.
#needs_sphinx = '1.0'
# Add any Sphinx extension module names here, as strings. They can be
# extensions coming with Sphinx (named 'sphinx.ext.*') or your custom
# ones.
extensions = [
'sphinx.ext.autodoc',
'sphinx.ext.intersphinx',
'sphinx.ext.todo',
'sphinx.ext.imgmath',
'sphinx.ext.viewcode',
'sphinx_rtd_theme',
]
# Add any paths that contain templates here, relative to this directory.
templates_path = ['_templates']
# templates_path = ['_templates']
# The suffix of source filenames.
source_suffix = '.rst'
@@ -55,7 +28,7 @@ master_doc = 'index'
# General information about the project.
project = u'Paperless-ng'
copyright = u'2015, Daniel Quinn'
copyright = u'2021, Daniel Quinn, Jonas Winkler'
# The version info for the project you're documenting, acts as replacement for
# |version| and |release|, also used in various other places throughout the
@@ -115,7 +88,7 @@ pygments_style = 'sphinx'
# The theme to use for HTML and HTML Help pages. See the documentation for
# a list of builtin themes.
html_theme = 'default'
html_theme = 'sphinx_rtd_theme'
# Theme options are theme-specific and customize the look and feel of a theme
# further. For a list of options available for each theme, see the
@@ -195,20 +168,6 @@ html_static_path = ['_static']
# Output file base name for HTML help builder.
htmlhelp_basename = 'paperless'
#
# Attempt to use the ReadTheDocs theme. If it's not installed, fallback to
# the default.
#
try:
import sphinx_rtd_theme
html_theme = "sphinx_rtd_theme"
html_theme_path = [sphinx_rtd_theme.get_html_theme_path()]
except ImportError as e:
print("error " + str(e))
pass
# -- Options for LaTeX output ---------------------------------------------
latex_elements = {

View File

@@ -35,24 +35,30 @@ PAPERLESS_DBHOST=<hostname>
PAPERLESS_DBPORT=<port>
Adjust port if necessary.
Default is 5432.
PAPERLESS_DBNAME=<name>
Database name in PostgreSQL.
Defaults to "paperless".
PAPERLESS_DBUSER=<name>
Database user in PostgreSQL.
Defaults to "paperless".
PAPERLESS_DBPASS=<password>
Database password for PostgreSQL.
Defaults to "paperless".
PAPERLESS_DBSSLMODE=<mode>
SSL mode to use when connecting to PostgreSQL.
See `the official documentation about sslmode <https://www.postgresql.org/docs/current/libpq-ssl.html>`_.
Default is ``prefer``.
Paths and folders
#################
@@ -66,13 +72,13 @@ PAPERLESS_CONSUMPTION_DIR=<path>
container. Change the local consumption directory in the docker-compose.yml
file instead.
Defaults to "../consume", relative to the "src" directory.
Defaults to "../consume/", relative to the "src" directory.
PAPERLESS_DATA_DIR=<path>
This is where paperless stores all its data (search index, sqlite database,
This is where paperless stores all its data (search index, SQLite database,
classification model, etc).
Defaults to "../data", relative to the "src" directory.
Defaults to "../data/", relative to the "src" directory.
PAPERLESS_MEDIA_ROOT=<path>
This is where your documents and thumbnails are stored.
@@ -80,7 +86,7 @@ PAPERLESS_MEDIA_ROOT=<path>
You can set this and PAPERLESS_DATA_DIR to the same folder to have paperless
store all its data within the same volume.
Defaults to "../media", relative to the "src" directory.
Defaults to "../media/", relative to the "src" directory.
PAPERLESS_STATICDIR=<path>
Override the default STATIC_ROOT here. This is where all static files
@@ -88,7 +94,7 @@ PAPERLESS_STATICDIR=<path>
Unless you're doing something fancy, there is no need to override this.
Defaults to "../static", relative to the "src" directory.
Defaults to "../static/", relative to the "src" directory.
PAPERLESS_FILENAME_FORMAT=<format>
Changes the filenames paperless uses to store documents in the media directory.
@@ -96,11 +102,30 @@ PAPERLESS_FILENAME_FORMAT=<format>
Default is none, which disables this feature.
PAPERLESS_LOGGING_DIR=<path>
This is where paperless will store log files.
Defaults to "``PAPERLESS_DATA_DIR``/log/".
Logging
#######
PAPERLESS_LOGROTATE_MAX_SIZE=<num>
Maximum file size for log files before they are rotated, in bytes.
Defaults to 1 MiB.
PAPERLESS_LOGROTATE_MAX_BACKUPS=<num>
Number of rotated log files to keep.
Defaults to 20.
Hosting & Security
##################
PAPERLESS_SECRET_KEY=<key>
Paperless uses this to make session tokens. If you exose paperless on the
Paperless uses this to make session tokens. If you expose paperless on the
internet, you need to change this, since the default secret is well known.
Use any sequence of characters. The more, the better. You don't need to
@@ -113,7 +138,7 @@ PAPERLESS_ALLOWED_HOSTS<comma-separated-list>
really should set this value to the domain name you're using. Failing to do
so leaves you open to HTTP host header attacks:
https://docs.djangoproject.com/en/3.1/topics/security/#host-header-validation
Just remember that this is a comma-separated list, so "example.com" is fine,
as is "example.com,www.example.com", but NOT " example.com" or "example.com,"
@@ -132,15 +157,263 @@ PAPERLESS_FORCE_SCRIPT_NAME=<path>
.. note::
I don't know if this works in paperless-ng. Probably not.
Defaults to none, which hosts paperless at "/".
PAPERLESS_STATIC_URL=<path>
Override the STATIC_URL here. Unless you're hosting Paperless off a
subdomain like /paperless/, you probably don't need to change this.
Defaults to "/static/".
PAPERLESS_AUTO_LOGIN_USERNAME=<username>
Specify a username here so that paperless will automatically perform login
with the selected user.
.. danger::
Do not use this when exposing paperless on the internet. There are no
checks in place that would prevent you from doing this.
Defaults to none, which disables this feature.
PAPERLESS_COOKIE_PREFIX=<str>
Specify a prefix that is added to the cookies used by paperless to identify
the currently logged in user. This is useful for when you're running two
instances of paperless on the same host.
After changing this, you will have to login again.
Defaults to ``""``, which does not alter the cookie names.
PAPERLESS_ENABLE_HTTP_REMOTE_USER=<bool>
Allows authentication via HTTP_REMOTE_USER which is used by some SSO
applications.
Defaults to `false` which disables this feature.
.. _configuration-ocr:
OCR settings
############
Paperless uses `OCRmyPDF <https://ocrmypdf.readthedocs.io/en/latest/>`_ for
performing OCR on documents and images. Paperless uses sensible defaults for
most settings, but all of them can be configured to your needs.
PAPERLESS_OCR_LANGUAGE=<lang>
Customize the language that paperless will attempt to use when
parsing documents.
It should be a 3-letter language code consistent with ISO
639: https://www.loc.gov/standards/iso639-2/php/code_list.php
Set this to the language most of your documents are written in.
This can be a combination of multiple languages such as ``deu+eng``,
in which case tesseract will use whatever language matches best.
Keep in mind that tesseract uses much more cpu time with multiple
languages enabled.
Defaults to "eng".
PAPERLESS_OCR_MODE=<mode>
Tell paperless when and how to perform ocr on your documents. Four modes
are available:
* ``skip``: Paperless skips all pages and will perform ocr only on pages
where no text is present. This is the safest option.
* ``skip_noarchive``: In addition to skip, paperless won't create an
archived version of your documents when it finds any text in them.
This is useful if you don't want to have two almost-identical versions
of your digital documents in the media folder. This is the fastest option.
* ``redo``: Paperless will OCR all pages of your documents and attempt to
replace any existing text layers with new text. This will be useful for
documents from scanners that already performed OCR with insufficient
results. It will also perform OCR on purely digital documents.
This option may fail on some documents that have features that cannot
be removed, such as forms. In this case, the text from the document is
used instead.
* ``force``: Paperless rasterizes your documents, converting any text
into images and puts the OCRed text on top. This works for all documents,
however, the resulting document may be significantly larger and text
won't appear as sharp when zoomed in.
The default is ``skip``, which only performs OCR when necessary and always
creates archived documents.
Read more about this in the `OCRmyPDF documentation <https://ocrmypdf.readthedocs.io/en/latest/advanced.html#when-ocr-is-skipped>`_.
PAPERLESS_OCR_CLEAN=<mode>
Tells paperless to use ``unpaper`` to clean any input document before
sending it to tesseract. This uses more resources, but generally results
in better OCR results. The following modes are available:
* ``clean``: Apply unpaper.
* ``clean-final``: Apply unpaper, and use the cleaned images to build the
output file instead of the original images.
* ``none``: Do not apply unpaper.
Defaults to ``clean``.
.. note::
``clean-final`` is incompatible with ocr mode ``redo``. When both
``clean-final`` and the ocr mode ``redo`` is configured, ``clean``
is used instead.
PAPERLESS_OCR_DESKEW=<bool>
Tells paperless to correct skewing (slight rotation of input images mainly
due to improper scanning)
Defaults to ``true``, which enables this feature.
.. note::
Deskewing is incompatible with ocr mode ``redo``. Deskewing will get
disabled automatically if ``redo`` is used as the ocr mode.
PAPERLESS_OCR_ROTATE_PAGES=<bool>
Tells paperless to correct page rotation (90°, 180° and 270° rotation).
If you notice that paperless is not rotating pages incorrectly rotated
pages (or vice versa), try adjusting the threshold up or down (see below).
Defaults to ``true``, which enables this feature.
PAPERLESS_OCR_ROTATE_PAGES_THRESHOLD=<num>
Adjust the threshold for automatic page rotation by ``PAPERLESS_OCR_ROTATE_PAGES``.
This is an arbitrary value reported by tesseract. "15" is a very conservative value,
whereas "2" is a very aggressive option and will often result correctly rotated pages
being rotated as well.
Defaults to "12".
PAPERLESS_OCR_OUTPUT_TYPE=<type>
Specify the the type of PDF documents that paperless should produce.
* ``pdf``: Modify the PDF document as little as possible.
* ``pdfa``: Convert PDF documents into PDF/A-2b documents, which is a
subset of the entire PDF specification and meant for storing
documents long term.
* ``pdfa-1``, ``pdfa-2``, ``pdfa-3`` to specify the exact version of
PDF/A you wish to use.
If not specified, ``pdfa`` is used. Remember that paperless also keeps
the original input file as well as the archived version.
PAPERLESS_OCR_PAGES=<num>
Tells paperless to use only the specified amount of pages for OCR. Documents
with less than the specified amount of pages get OCR'ed completely.
Specifying 1 here will only use the first page.
When combined with ``PAPERLESS_OCR_MODE=redo`` or ``PAPERLESS_OCR_MODE=force``,
paperless will not modify any text it finds on excluded pages and copy it
verbatim.
Defaults to 0, which disables this feature and always uses all pages.
PAPERLESS_OCR_IMAGE_DPI=<num>
Paperless will OCR any images you put into the system and convert them
into PDF documents. This is useful if your scanner produces images.
In order to do so, paperless needs to know the DPI of the image.
Most images from scanners will have this information embedded and
paperless will detect and use that information. In case this fails, it
uses this value as a fallback.
Set this to the DPI your scanner produces images at.
Default is none, which will automatically calculate image DPI so that
the produced PDF documents are A4 sized.
PAPERLESS_OCR_USER_ARGS=<json>
OCRmyPDF offers many more options. Use this parameter to specify any
additional arguments you wish to pass to OCRmyPDF. Since Paperless uses
the API of OCRmyPDF, you have to specify these in a format that can be
passed to the API. See `the API reference of OCRmyPDF <https://ocrmypdf.readthedocs.io/en/latest/api.html#reference>`_
for valid parameters. All command line options are supported, but they
use underscores instead of dashed.
.. caution::
Paperless has been tested to work with the OCR options provided
above. There are many options that are incompatible with each other,
so specifying invalid options may prevent paperless from consuming
any documents.
Specify arguments as a JSON dictionary. Keep note of lower case booleans
and double quoted parameter names and strings. Examples:
.. code:: json
{"deskew": true, "optimize": 3, "unpaper_args": "--pre-rotate 90"}
.. _configuration-tika:
Tika settings
#############
Paperless can make use of `Tika <https://tika.apache.org/>`_ and
`Gotenberg <https://thecodingmachine.github.io/gotenberg/>`_ for parsing and
converting "Office" documents (such as ".doc", ".xlsx" and ".odt"). If you
wish to use this, you must provide a Tika server and a Gotenberg server,
configure their endpoints, and enable the feature.
PAPERLESS_TIKA_ENABLED=<bool>
Enable (or disable) the Tika parser.
Defaults to false.
PAPERLESS_TIKA_ENDPOINT=<url>
Set the endpoint URL were Paperless can reach your Tika server.
Defaults to "http://localhost:9998".
PAPERLESS_TIKA_GOTENBERG_ENDPOINT=<url>
Set the endpoint URL were Paperless can reach your Gotenberg server.
Defaults to "http://localhost:3000".
If you run paperless on docker, you can add those services to the docker-compose
file (see the provided ``docker-compose.tika.yml`` file for reference). The changes
requires are as follows:
.. code:: yaml
services:
# ...
webserver:
# ...
environment:
# ...
PAPERLESS_TIKA_ENABLED: 1
PAPERLESS_TIKA_GOTENBERG_ENDPOINT: http://gotenberg:3000
PAPERLESS_TIKA_ENDPOINT: http://tika:9998
# ...
gotenberg:
image: thecodingmachine/gotenberg
restart: unless-stopped
environment:
DISABLE_GOOGLE_CHROME: 1
tika:
image: apache/tika
restart: unless-stopped
Add the configuration variables to the environment of the webserver (alternatively
put the configuration in the ``docker-compose.env`` file) and add the additional
services below the webserver service. Watch out for indentation.
Software tweaks
###############
@@ -150,31 +423,48 @@ PAPERLESS_TASK_WORKERS=<num>
maintain the automatic matching algorithm, check emails, consume documents,
etc. This variable specifies how many things it will do in parallel.
PAPERLESS_THREADS_PER_WORKER=<num>
Furthermore, paperless uses multiple threads when consuming documents to
speed up OCR. This variable specifies how many pages paperless will process
in parallel on a single document.
.. caution::
Ensure that the product
PAPERLESS_TASK_WORKERS * PAPERLESS_THREADS_PER_WORKER
does not exceed your CPU core count or else paperless will be extremely slow.
If you want paperless to process many documents in parallel, choose a high
worker count. If you want paperless to process very large documents faster,
use a higher thread per worker count.
The default is a balance between the two, according to your CPU core count,
with a slight favor towards threads per worker, and using as much cores as
possible.
with a slight favor towards threads per worker:
+----------------+---------+---------+
| CPU core count | Workers | Threads |
+----------------+---------+---------+
| 1 | 1 | 1 |
+----------------+---------+---------+
| 2 | 2 | 1 |
+----------------+---------+---------+
| 4 | 2 | 2 |
+----------------+---------+---------+
| 6 | 2 | 3 |
+----------------+---------+---------+
| 8 | 2 | 4 |
+----------------+---------+---------+
| 12 | 3 | 4 |
+----------------+---------+---------+
| 16 | 4 | 4 |
+----------------+---------+---------+
If you only specify PAPERLESS_TASK_WORKERS, paperless will adjust
PAPERLESS_THREADS_PER_WORKER automatically.
PAPERLESS_TIME_ZONE=<timezone>
Set the time zone here.
See https://docs.djangoproject.com/en/3.1/ref/settings/#std:setting-TIME_ZONE
@@ -183,34 +473,17 @@ PAPERLESS_TIME_ZONE=<timezone>
Defaults to UTC.
PAPERLESS_OCR_LANGUAGE=<lang>
Customize the default language that tesseract will attempt to use when
parsing documents. The default language is used whenever
* No language could be detected on a document
* No tesseract data files are available for the detected language
It should be a 3-letter language code consistent with ISO
639: https://www.loc.gov/standards/iso639-2/php/code_list.php
Set this to the language most of your documents are written in.
Defaults to "eng".
PAPERLESS_OCR_ALWAYS=<bool>
By default Paperless does not OCR a document if the text can be retrieved from
the document directly. Set to true to always OCR documents.
Defaults to false.
.. _configuration-polling:
PAPERLESS_CONSUMER_POLLING=<num>
If paperless won't find documents added to your consume folder, it might
not be able to automatically detect filesystem changes. In that case,
specify a polling interval in seconds here, which will then cause paperless
to periodically check your consumption directory for changes.
to periodically check your consumption directory for changes. This will also
disable listening for file system changes with ``inotify``.
Defaults to 0, which disables polling and uses filesystem notifications.
Defaults to 0, which disables polling and uses filesystem notifiactions.
PAPERLESS_CONSUMER_DELETE_DUPLICATES=<bool>
When the consumer detects a duplicate document, it will not touch the
@@ -218,13 +491,35 @@ PAPERLESS_CONSUMER_DELETE_DUPLICATES=<bool>
Defaults to false.
PAPERLESS_CONSUMER_RECURSIVE=<bool>
Enable recursive watching of the consumption directory. Paperless will
then pickup files from files in subdirectories within your consumption
directory as well.
Defaults to false.
PAPERLESS_CONSUMER_SUBDIRS_AS_TAGS=<bool>
Set the names of subdirectories as tags for consumed files.
E.g. <CONSUMPTION_DIR>/foo/bar/file.pdf will add the tags "foo" and "bar" to
the consumed file. Paperless will create any tags that don't exist yet.
This is useful for sorting documents with certain tags such as ``car`` or
``todo`` prior to consumption. These folders won't be deleted.
PAPERLESS_CONSUMER_RECURSIVE must be enabled for this to work.
Defaults to false.
PAPERLESS_CONVERT_MEMORY_LIMIT=<num>
On smaller systems, or even in the case of Very Large Documents, the consumer
may explode, complaining about how it's "unable to extend pixel cache". In
such cases, try setting this to a reasonably low value, like 32. The
default is to use whatever is necessary to do everything without writing to
disk, and units are in megabytes.
For more information on how to use this value, you should search
the web for "MAGICK_MEMORY_LIMIT".
@@ -235,26 +530,14 @@ PAPERLESS_CONVERT_TMPDIR=<path>
/tmp as tmpfs, you should set this to a path that's on a physical disk, like
/home/your_user/tmp or something. ImageMagick will use this as scratch space
when crunching through very large documents.
For more information on how to use this value, you should search
the web for "MAGICK_TMPDIR".
Default is none, which disables the temporary directory.
PAPERLESS_CONVERT_DENSITY=<num>
This setting has a high impact on the physical size of tmp page files,
the speed of document conversion, and can affect the accuracy of OCR
results. Individual results can vary and this setting should be tested
thoroughly against the documents you are importing to see if it has any
impacts either negative or positive.
Testing on limited document sets has shown a setting of 200 can cut the
size of tmp files by 1/3, and speed up conversion by up to 4x
with little impact to OCR accuracy.
Default is 300.
PAPERLESS_OPTIMIZE_THUMBNAILS=<bool>
Use optipng to optimize thumbnails. This usually reduces the sice of
Use optipng to optimize thumbnails. This usually reduces the size of
thumbnails by about 20%, but uses considerable compute time during
consumption.
@@ -272,16 +555,33 @@ PAPERLESS_FILENAME_DATE_ORDER=<format>
Use this setting to enable checking the document filename for date
information. The date order can be set to any option as specified in
https://dateparser.readthedocs.io/en/latest/settings.html#date-order.
The filename will be checked first, and if nothing is found, the document
The filename will be checked first, and if nothing is found, the document
text will be checked as normal.
Defaults to none, which disables this feature.
PAPERLESS_FILENAME_PARSE_TRANSFORMS
Transforms filenames before they are processed by paperless. See
:ref:`advanced-transforming_filenames` for details.
PAPERLESS_THUMBNAIL_FONT_NAME=<filename>
Paperless creates thumbnails for plain text files by rendering the content
of the file on an image and uses a predefined font for that. This
font can be changed here.
Note that this won't have any effect on already generated thumbnails.
Defaults to ``/usr/share/fonts/liberation/LiberationSerif-Regular.ttf``.
PAPERLESS_IGNORE_DATES=<string>
Paperless parses a documents creation date from filename and file content.
You may specify a comma separated list of dates that should be ignored during
this process. This is useful for special dates (like date of birth) that appear
in documents regularly but are very unlikely to be the documents creation date.
You may specify dates in a multitude of formats supported by dateparser (see
https://dateparser.readthedocs.io/en/latest/#popular-formats) but as the dates
need to be comma separated, the options are limited.
Example: "2020-12-02,22.04.1999"
Defaults to an empty string to not ignore any dates.
Defaults to none, which disables this feature.
Binaries
########
@@ -299,8 +599,67 @@ PAPERLESS_CONVERT_BINARY=<path>
PAPERLESS_GS_BINARY=<path>
Defaults to "/usr/bin/gs".
PAPERLESS_UNPAPER_BINARY=<path>
Defaults to "/usr/bin/unpaper".
PAPERLESS_OPTIPNG_BINARY=<path>
Defaults to "/usr/bin/optipng".
.. _configuration-docker:
Docker-specific options
#######################
These options don't have any effect in ``paperless.conf``. These options adjust
the behavior of the docker container. Configure these in `docker-compose.env`.
PAPERLESS_WEBSERVER_WORKERS=<num>
The number of worker processes the webserver should spawn. More worker processes
usually result in the front end to load data much quicker. However, each worker process
also loads the entire application into memory separately, so increasing this value
will increase RAM usage.
Consider configuring this to 1 on low power devices with limited amount of RAM.
Defaults to 2.
USERMAP_UID=<uid>
The ID of the paperless user in the container. Set this to your actual user ID on the
host system, which you can get by executing
.. code:: shell-session
$ id -u
Paperless will change ownership on its folders to this user, so you need to get this right
in order to be able to write to the consumption directory.
Defaults to 1000.
USERMAP_GID=<gid>
The ID of the paperless Group in the container. Set this to your actual group ID on the
host system, which you can get by executing
.. code:: shell-session
$ id -g
Paperless will change ownership on its folders to this group, so you need to get this right
in order to be able to write to the consumption directory.
Defaults to 1000.
PAPERLESS_OCR_LANGUAGES=<list>
Additional OCR languages to install. By default, paperless comes with
English, German, Italian, Spanish and French. If your language is not in this list, install
additional languages with this configuration option:
.. code:: bash
PAPERLESS_OCR_LANGUAGES=tur ces
To actually use these languages, also set the default OCR language of paperless:
.. code:: bash
PAPERLESS_OCR_LANGUAGE=tur
Defaults to none, which does not install any additional languages.

View File

@@ -85,7 +85,7 @@ quoted, or triple-quoted string will do:
problematic_string = 'This is a "string" with "quotes" in it'
In HTML templates, please use double-quotes for tag attributes, and single
quotes for arguments passed to Django tempalte tags:
quotes for arguments passed to Django template tags:
.. code:: html

View File

@@ -1,116 +1,215 @@
.. _extending:
Paperless development
#####################
This section describes the steps you need to take to start development on paperless-ng.
1. Check out the source from github. The repository is organized in the following way:
* ``master`` always represents the latest release and will only see changes
when a new release is made.
* ``dev`` contains the code that will be in the next release.
* ``feature-X`` contain bigger changes that will be in some release, but not
necessarily the next one.
Apart from that, the folder structure is as follows:
* ``docs/`` - Documentation.
* ``src-ui/`` - Code of the front end.
* ``src/`` - Code of the back end.
* ``scripts/`` - Various scripts that help with different parts of development.
* ``docker/`` - Files required to build the docker image.
2. Install some dependencies.
* Python 3.6.
* All dependencies listed in the :ref:`Bare metal route <setup-bare_metal>`
* redis. You can either install redis or use the included scritps/start-services.sh
to use docker to fire up a redis instance (and some other services such as tika,
gotenberg and a postgresql server).
Back end development
====================
The backend is a django application. I use PyCharm for development, but you can use whatever
you want.
Install the python dependencies by performing ``pipenv install --dev`` in the src/ directory.
This will also create a virtual environment, which you can enter with ``pipenv shell`` or
execute one-shot commands in with ``pipenv run``.
Copy ``paperless.conf.example`` to ``paperless.conf`` and enable debug mode.
Configure the IDE to use the src/ folder as the base source folder. Configure the following
launch configurations in your IDE:
* python3 manage.py runserver
* python3 manage.py qcluster
* python3 manage.py consumer
Depending on which part of paperless you're developing for, you need to have some or all of
them running.
Testing and code style:
* Run ``pytest`` in the src/ directory to execute all tests. This also generates a HTML coverage
report. When runnings test, paperless.conf is loaded as well. However: the tests rely on the default
configuration. This is not ideal. But for now, make sure no settings except for DEBUG are overridden when testing.
* Run ``pycodestyle`` to test your code for issues with the configured code style settings.
.. note::
The line length rule E501 is generally useful for getting multiple source files
next to each other on the screen. However, in some cases, its just not possible
to make some lines fit, especially complicated IF cases. Append `` # NOQA: E501``
to disable this check for certain lines.
Front end development
=====================
The front end is build using angular. I use the ``Code - OSS`` IDE for development.
In order to get started, you need ``npm``. Install the Angular CLI interface with
.. code:: shell-session
$ npm install -g @angular/cli
and make sure that it's on your path. Next, in the src-ui/ directory, install the
required dependencies of the project.
.. code:: shell-session
$ npm install
You can launch a development server by running
.. code:: shell-session
$ ng serve
This will automatically update whenever you save. However, in-place compilation might fail
on syntax errors, in which case you need to restart it.
By default, the development server is available on ``http://localhost:4200/`` and is configured
to access the API at ``http://localhost:8000/api/``, which is the default of the backend.
If you enabled DEBUG on the back end, several security overrides for allowed hosts, CORS and
X-Frame-Options are in place so that the front end behaves exactly as in production. This also
relies on you being logged into the back end. Without a valid session, The front end will simply
not work.
In order to build the front end and serve it as part of django, execute
.. code:: shell-session
$ ng build --prod
This will build the front end and put it in a location from which the Django server will serve
it as static content. This way, you can verify that authentication is working.
Building the documentation
==========================
The documentation is built using sphinx. I've configured ReadTheDocs to automatically build
the documentation when changes are pushed. If you want to build the documentation locally,
this is how you do it:
1. Install python dependencies.
.. code:: shell-session
$ cd /path/to/paperless
$ pipenv install --dev
2. Build the documentation
.. code:: shell-session
$ cd /path/to/paperless/docs
$ pipenv run make clean html
This will build the HTML documentation, and put the resulting files in the ``_build/html``
directory.
Extending Paperless
===================
.. warning::
Paperless does not have any fancy plugin systems and will probably never have. However,
some parts of the application have been designed to allow easy integration of additional
features without any modification to the base code.
This section is not updated to paperless-ng yet.
Making custom parsers
---------------------
For the most part, Paperless is monolithic, so extending it is often best
managed by way of modifying the code directly and issuing a pull request on
`GitHub`_. However, over time the project has been evolving to be a little
more "pluggable" so that users can write their own stuff that talks to it.
Paperless uses parsers to add documents to paperless. A parser is responsible for:
.. _GitHub: https://github.com/the-paperless-project/paperless
* Retrieve the content from the original
* Create a thumbnail
* Optional: Retrieve a created date from the original
* Optional: Create an archived document from the original
Custom parsers can be added to paperless to support more file types. In order to do that,
you need to write the parser itself and announce its existence to paperless.
.. _extending-parsers:
Parsers
-------
You can leverage Paperless' consumption model to have it consume files *other*
than ones handled by default like ``.pdf``, ``.jpg``, and ``.tiff``. To do so,
you simply follow Django's convention of creating a new app, with a few key
requirements.
.. _extending-parsers-parserspy:
parsers.py
..........
In this file, you create a class that extends
``documents.parsers.DocumentParser`` and go about implementing the three
required methods:
* ``get_thumbnail()``: Returns the path to a file we can use as a thumbnail for
this document.
* ``get_text()``: Returns the text from the document and only the text.
* ``get_date()``: If possible, this returns the date of the document, otherwise
it should return ``None``.
.. _extending-parsers-signalspy:
signals.py
..........
At consumption time, Paperless emits a ``document_consumer_declaration``
signal which your module has to react to in order to let the consumer know
whether or not it's capable of handling a particular file. Think of it like
this:
1. Consumer finds a file in the consumption directory.
2. It asks all the available parsers: *"Hey, can you handle this file?"*
3. Each parser responds with either ``None`` meaning they can't handle the
file, or a dictionary in the following format:
The parser itself must extend ``documents.parsers.DocumentParser`` and must implement the
methods ``parse`` and ``get_thumbnail``. You can provide your own implementation to
``get_date`` if you don't want to rely on paperless' default date guessing mechanisms.
.. code:: python
{
"parser": <the class name>,
"weight": <an integer>
}
class MyCustomParser(DocumentParser):
The consumer compares the ``weight`` values from all respondents and uses the
class with the highest value to consume the document. The default parser,
``RasterisedDocumentParser`` has a weight of ``0``.
def parse(self, document_path, mime_type):
# This method does not return anything. Rather, you should assign
# whatever you got from the document to the following fields:
# The content of the document.
self.text = "content"
# Optional: path to a PDF document that you created from the original.
self.archive_path = os.path.join(self.tempdir, "archived.pdf")
.. _extending-parsers-appspy:
# Optional: "created" date of the document.
self.date = get_created_from_metadata(document_path)
apps.py
.......
def get_thumbnail(self, document_path, mime_type):
# This should return the path to a thumbnail you created for this
# document.
return os.path.join(self.tempdir, "thumb.png")
This is a standard Django file, but you'll need to add some code to it to
connect your parser to the ``document_consumer_declaration`` signal.
If you encounter any issues during parsing, raise a ``documents.parsers.ParseError``.
The ``self.tempdir`` directory is a temporary directory that is guaranteed to be empty
and removed after consumption finished. You can use that directory to store any
intermediate files and also use it to store the thumbnail / archived document.
.. _extending-parsers-finally:
Finally
.......
The last step is to update ``settings.py`` to include your new module.
Eventually, this will be dynamic, but at the moment, you have to edit the
``INSTALLED_APPS`` section manually. Simply add the path to your AppConfig to
the list like this:
After that, you need to announce your parser to paperless. You need to connect a
handler to the ``document_consumer_declaration`` signal. Have a look in the file
``src/paperless_tesseract/apps.py`` on how that's done. The handler is a method
that returns information about your parser:
.. code:: python
INSTALLED_APPS = [
...
"my_module.apps.MyModuleConfig",
...
]
def myparser_consumer_declaration(sender, **kwargs):
return {
"parser": MyCustomParser,
"weight": 0,
"mime_types": {
"application/pdf": ".pdf",
"image/jpeg": ".jpg",
}
}
Order doesn't matter, but generally it's a good idea to place your module lower
in the list so that you don't end up accidentally overriding project defaults
somewhere.
* ``parser`` is a reference to a class that extends ``DocumentParser``.
* ``weight`` is used whenever two or more parsers are able to parse a file: The parser with
the higher weight wins. This can be used to override the parsers provided by
paperless.
.. _extending-parsers-example:
An Example
..........
The core Paperless functionality is based on this design, so if you want to see
what a parser module should look like, have a look at `parsers.py`_,
`signals.py`_, and `apps.py`_ in the `paperless_tesseract`_ module.
.. _parsers.py: https://github.com/the-paperless-project/paperless/blob/master/src/paperless_tesseract/parsers.py
.. _signals.py: https://github.com/the-paperless-project/paperless/blob/master/src/paperless_tesseract/signals.py
.. _apps.py: https://github.com/the-paperless-project/paperless/blob/master/src/paperless_tesseract/apps.py
.. _paperless_tesseract: https://github.com/the-paperless-project/paperless/blob/master/src/paperless_tesseract/
* ``mime_types`` is a dictionary. The keys are the mime types your parser supports and the value
is the default file extension that paperless should use when storing files and serving them for
download. We could guess that from the file extensions, but some mime types have many extensions
associated with them and the python methods responsible for guessing the extension do not always
return the same value.

View File

@@ -3,6 +3,18 @@
Frequently asked questions
**************************
**Q:** *What's the general plan for Paperless-ng?*
**A:** Paperless-ng is already almost feature-complete. This project will remain
as simple as it is right now. It will see improvements to features that are already there.
If you need advanced features such as document versions,
workflows or multi-user with customizable access to individual files, this is
not the tool for you.
Features that *are* planned are some more quality of life extensions for the searching
(i.e., search for similar documents, group results by correspondents with "more from this"
links, etc), bulk editing and hierarchical tags.
**Q:** *I'm using docker. Where are my documents?*
**A:** Your documents are stored inside the docker volume ``paperless_media``.
@@ -17,41 +29,94 @@ is
.. caution::
Dont mess with this folder. Don't change permissions and don't move
Do not mess with this folder. Don't change permissions and don't move
files around manually. This folder is meant to be entirely managed by docker
and paperless.
**Q:** *Let's say you don't support this project anymore in a year. Can I easily move to other systems?*
**A:** Your documents are stored as plain files inside the media folder. You can always drag those files
out of that folder to use them elsewhere. Here are a couple notes about that.
* Paperless never modifies your original documents. It keeps checksums of all documents and uses a
scheduled sanity checker to check that they remain the same.
* By default, paperless uses the internal ID of each document as its filename. This might not be very
convenient for export. However, you can adjust the way files are stored in paperless by
:ref:`configuring the filename format <advanced-file_name_handling>`.
* :ref:`The exporter <utilities-exporter>` is another easy way to get your files out of paperless with reasonable file names.
**Q:** *What file types does paperless-ng support?*
**A:** Currently, the following files are supported:
* PDF documents, PNG images, JPEG images, TIFF images and GIF images are processed with OCR and converted into PDF documents.
* Plain text documents are supported as well and are added verbatim
to paperless.
* With the optional Tika integration enabled (see :ref:`Configuration <configuration-tika>`), Paperless also supports various
Office documents (.docx, .doc, odt, .ppt, .pptx, .odp, .xls, .xlsx, .ods).
Paperless determines the type of a file by inspecting its content. The
file extensions do not matter.
**Q:** *Will paperless-ng run on Raspberry Pi?*
**A:** The short answer is yes. I've tested it on a Raspberry Pi 3 B.
The long answer is that certain parts of
Paperless will run very slow, such as the tesseract OCR. On Rasperry Pi,
Paperless will run very slow, such as the OCR. On Raspberry Pi,
try to OCR documents before feeding them into paperless so that paperless can
reuse the text. The web interface should be alot snappier, since it runs
reuse the text. The web interface is a lot snappier, since it runs
in your browser and paperless has to do much less work to serve the data.
.. note::
Consider setting ``PAPERLESS_OPTIMIZE_THUMBNAILS`` to false to speed up
the consumption process. This takes quite a bit of time on Raspberry Pi.
.. note::
Updating the :ref:`automatic matching algorithm <advanced-automatic_matching>`
takes quite a bit of time. However, the update mechanism checks if your
data has changed before doing the heavy lifting. If you experience the
algorithm taking too much cpu time, consider changing the schedule in the
admin interface to daily or weekly. You can also manually invoke the task
by changing the date and time of the next run to today/now.
The actual matching of the algorithm is fast and works on Raspberry Pi as
well as on any other device.
You can adjust some of the settings so that paperless uses less processing
power. See :ref:`setup-less_powerful_devices` for details.
**Q:** *How do I install paperless-ng on Raspberry Pi?*
**A:** There is not docker image for ARM available. If you know how to build
that automatically, I'm all ears. For now, you have to grab the latest release
archive from the project page and build the image yourself. The release comes
with the front end already compiled, so you don't have to do this on the Pi.
**A:** Docker images are available for arm and arm64 hardware, so just follow
the docker-compose instructions. Apart from more required disk space compared to
a bare metal installation, docker comes with close to zero overhead, even on
Raspberry Pi.
If you decide to got with the bare metal route, be aware that some of the
python requirements do not have precompiled packages for ARM / ARM64. Installation
of these will require additional development libraries and compilation will take
a long time.
**Q:** *How do I run this on unRaid?*
**A:** Head over to `<https://github.com/selfhosters/unRAID-CA-templates>`_,
`Uli Fahrer <https://github.com/Tooa>`_ created a container template for that.
I don't exactly know how to use that though, since I don't use unRaid.
**Q:** *How do I run this on my toaster?*
**A:** I honestly don't know! As for all other devices that might be able
to run paperless, you're a bit on your own. If you can't run the docker image,
the documentation has instructions for bare metal installs. I'm running
paperless on an i3 processor from 2015 or so. This is also what I use to test
new releases with. Apart from that, I also have a Raspberry Pi, which I
occasionally build the image on and see if it works.
**Q:** *How do I proxy this with NGINX?*
**A:** See :ref:`here <setup-nginx>`.
.. _faq-mod_wsgi:
**Q:** *How do I get WebSocket support with Apache mod_wsgi*?
**A:** ``mod_wsgi`` by itself does not support ASGI. Paperless will continue
to work with WSGI, but certain features such as status notifications about
document consumption won't be available.
If you want to continue using ``mod_wsgi``, you will have to run an ASGI-enabled
web server as well that processes WebSocket connections, and configure Apache to
redirect WebSocket connections to this server. Multiple options for ASGI servers
exist:
* ``gunicorn`` with ``uvicorn`` as the worker implementation (the default of paperless)
* ``daphne`` as a standalone server, which is the reference implementation for ASGI.
* ``uvicorn`` as a standalone server

View File

@@ -42,8 +42,14 @@ resources in the documentation:
learn about how paperless automates all tagging using machine learning.
* Paperless now comes with a :ref:`proper email consumer <usage-email>`
that's fully tested and production ready.
* Paperless creates searchable PDF/A documents from whatever you you put into
the consumption directory. This means that you can select text in
image-only documents coming from your scanner.
* See :ref:`this note <utilities-encyption>` about GnuPG encryption in
paperless-ng.
* Paperless is now integrated with a
:ref:`task processing queue <setup-task_processor>` that tells you
at a glance when and why something is not working.
* The :ref:`changelog <paperless_changelog>` contains a detailed list of all changes
in paperless-ng.
@@ -64,8 +70,8 @@ Contents
configuration
api
faq
extending
troubleshooting
extending
contributing
scanners
screenshots

View File

@@ -8,7 +8,10 @@ Scanner recommendations
As Paperless operates by watching a folder for new files, doesn't care what
scanner you use, but sometimes finding a scanner that will write to an FTP,
NFS, or SMB server can be difficult. This page is here to help you find one
that works right for you based on recommentations from other Paperless users.
that works right for you based on recommendations from other Paperless users.
Physical scanners
=================
+---------+----------------+-----+-----+-----+----------------+
| Brand | Model | Supports | Recommended By |
@@ -25,6 +28,8 @@ that works right for you based on recommentations from other Paperless users.
+---------+----------------+-----+-----+-----+----------------+
| Fujitsu | `ix500`_ | yes | | yes | `eonist`_ |
+---------+----------------+-----+-----+-----+----------------+
| Epson | `WF-7710DWF`_ | yes | | yes | `Skylinar`_ |
+---------+----------------+-----+-----+-----+----------------+
| Fujitsu | `S1300i`_ | yes | | yes | `jonaswinkler`_|
+---------+----------------+-----+-----+-----+----------------+
@@ -32,7 +37,8 @@ that works right for you based on recommentations from other Paperless users.
.. _MFC-J6930DW: https://www.brother.ca/en/p/MFCJ6930DW
.. _MFC-J5910DW: https://www.brother.co.uk/printers/inkjet-printers/mfcj5910dw
.. _MFC-9142CDN: https://www.brother.co.uk/printers/laser-printers/mfc9140cdn
.. _ix500: https://www.fujitsu.com/global/products/computing/peripheral/scanners/scansnap/ix500/
.. _ix500: http://www.fujitsu.com/us/products/computing/peripheral/scanners/scansnap/ix500/
.. _WF-7710DWF: https://www.epson.de/en/products/printers/inkjet-printers/for-home/workforce-wf-7710dwf
.. _S1300i: https://www.fujitsu.com/global/products/computing/peripheral/scanners/soho/s1300i/
.. _danielquinn: https://github.com/danielquinn
@@ -40,4 +46,27 @@ that works right for you based on recommentations from other Paperless users.
.. _bmsleight: https://github.com/bmsleight
.. _eonist: https://github.com/eonist
.. _REOLDEV: https://github.com/REOLDEV
.. _Skylinar: https://github.com/Skylinar
.. _jonaswinkler: https://github.com/jonaswinkler
Mobile phone software
=====================
You can use your phone to "scan" documents. The regular camera app will work, but may have too low contrast for OCR to work well. Apps specifically for scanning are recommended.
+-------------------+----------------+-----+-----+-----+-------+--------+----------------+
| Name | OS | Supports | Recommended By |
+-------------------+----------------+-----+-----+-----+-------+--------+----------------+
| | | FTP | NFS | SMB | Email | WebDav | |
+===================+================+=====+=====+=====+=======+========+================+
| `Office Lens`_ | Android | ? | ? | ? | ? | ? | `jonaswinkler`_|
+-------------------+----------------+-----+-----+-----+-------+--------+----------------+
| `Genius Scan`_ | Android | yes | no | yes | yes | yes | `hannahswain`_ |
+-------------------+----------------+-----+-----+-----+-------+--------+----------------+
On Android, you can use these applications in combination with one of the :ref:`Paperless-ng compatible apps <usage-mobile_upload>` to "Share" the documents produced by these scanner apps with paperless.
.. _Office Lens: https://play.google.com/store/apps/details?id=com.microsoft.office.officelens
.. _Genius Scan: https://play.google.com/store/apps/details?id=com.thegrizzlylabs.geniusscan.free
.. _hannahswain: https://github.com/hannahswain

View File

@@ -9,40 +9,37 @@ research papers though, its a horrible tool for that job.
The dashboard shows customizable views on your document and allows document uploads:
.. image:: _static/paperless-0-dashboard.png
.. image:: _static/screenshots/dashboard.png
The document list provides three different styles to scroll through your documents:
.. image:: _static/paperless-1-list-table.png
.. image:: _static/paperless-2-list-smallcards.png
.. image:: _static/paperless-3-list-largecards.png
.. image:: _static/screenshots/documents-table.png
.. image:: _static/screenshots/documents-smallcards.png
.. image:: _static/screenshots/documents-largecards.png
Extensive filtering mechanisms:
.. image:: _static/paperless-4-filter.png
.. image:: _static/screenshots/documents-filter.png
Side-by-side editing of documents. Optmized for 1080p.
Side-by-side editing of documents. Optimized for 1080p.
.. image:: _static/paperless-5-editing.png
.. image:: _static/screenshots/editing.png
Tag editing. This looks about the same for correspondents and document types.
.. image:: _static/paperless-6-tags.png
.. image:: _static/screenshots/new-tag.png
Searching provides auto complete and highlights the results.
.. image:: _static/paperless-7-autocomplete.png
.. image:: _static/paperless-8-search-results.png
The old admin is still there and accessible!
.. image:: _static/paperless-9-admin.png
.. image:: _static/screenshots/search-preview.png
.. image:: _static/screenshots/search-results.png
Fancy mail filters!
.. image:: _static/paperless-11-mail-filters.png
.. image:: _static/screenshots/mail-rules-edited.png
Mobile support in the future? This doesn't really work yet.
Mobile support in the future? This kinda works, however some layouts are still
too wide.
.. image:: _static/paperless-10-mobile.png
.. image:: _static/screenshots/mobile.png

View File

@@ -3,26 +3,6 @@
Setup
*****
Download
########
Go to the project page on GitHub and download the
`latest release <https://github.com/jonaswinkler/paperless-ng/releases>`_.
There are multiple options available.
* Download the docker-compose files if you want to pull paperless from
Docker Hub.
* Download the archive and extract it if you want to build the docker image
yourself or want to install paperless without docker.
.. hint::
In contrast to paperless, the recommended way to get and update paperless-ng
is not to pull the entire git repository. Paperless-ng includes artifacts
that need to be compiled, and that's already done for you in the release.
Overview of Paperless-ng
########################
@@ -40,105 +20,145 @@ Paperless consists of the following components:
.. code:: shell-session
$ cd /path/to/paperless/src/
$ pipenv run gunicorn -c /usr/src/paperless/gunicorn.conf.py -b 0.0.0.0:8000 paperless.wsgi
$ gunicorn -c ../gunicorn.conf.py paperless.wsgi
or by any other means such as Apache ``mod_wsgi``.
* **The consumer:** This is what watches your consumption folder for documents.
However, the consumer itself does not consume really consume your documents anymore.
It rather notifies a task processor that a new file is ready for consumption.
However, the consumer itself does not really consume your documents.
Now it notifies a task processor that a new file is ready for consumption.
I suppose it should be named differently.
This also used to check your emails, but that's now gone elsewhere as well.
This was also used to check your emails, but that's now done elsewhere as well.
Start the consumer with the management command ``document_consumer``:
.. code:: shell-session
$ cd /path/to/paperless/src/
$ pipenv run python3 manage.py document_consumer
$ python3 manage.py document_consumer
.. _setup-task_processor:
* **The task processor:** Paperless relies on `Django Q <https://django-q.readthedocs.io/en/latest/>`_
for doing much of the heavy lifting. This is a task queue that accepts tasks from
multiple sources and processes tasks in parallel. It also comes with a scheduler that executes
for doing most of the heavy lifting. This is a task queue that accepts tasks from
multiple sources and processes these in parallel. It also comes with a scheduler that executes
certain commands periodically.
This task processor is responsible for:
* Consuming documents. When the consumer finds new documents, it notifies the task processor to
start a consumption task.
* Consuming emails. It periodically checks your configured accounts for new mails and
produces consumption tasks for any documents it finds.
* The task processor also performs the consumption of any documents you upload through
the web interface.
* Maintain the search index and the automatic matching algorithm. These are things that paperless
* Consuming emails. It periodically checks your configured accounts for new emails and
notifies the task processor to consume the attachment of an email.
* Maintaining the search index and the automatic matching algorithm. These are things that paperless
needs to do from time to time in order to operate properly.
This allows paperless to process multiple documents from your consumption folder in parallel! On
a modern multicore system, consumption with full ocr is blazing fast.
a modern multi core system, this makes the consumption process with full OCR blazingly fast.
The task processor comes with a built-in admin interface that you can use to see whenever any of the
tasks fail and inspect the errors.
The task processor comes with a built-in admin interface that you can use to check whenever any of the
tasks fail and inspect the errors (i.e., wrong email credentials, errors during consuming a specific
file, etc).
You may start the task processor by executing:
.. code:: shell-session
$ cd /path/to/paperless/src/
$ pipenv run python3 manage.py qcluster
$ python3 manage.py qcluster
* A `redis <https://redis.io/>`_ message broker: This is a really lightweight service that is responsible
for getting the tasks from the webserver and consumer to the task scheduler. These run in different
processes (maybe even on different machines!), and therefore, this is necessary.
for getting the tasks from the webserver and the consumer to the task scheduler. These run in a different
process (maybe even on different machines!), and therefore, this is necessary.
* A database server. Paperless supports PostgreSQL and sqlite for storing its data. However, with the
added concurrency, it is strongly advised to use PostgreSQL, as sqlite has its limits in that regard.
* Optional: A database server. Paperless supports both PostgreSQL and SQLite for storing its data.
Installation
############
You can go multiple routes with setting up and running Paperless:
You can go multiple routes to setup and run Paperless:
* The `docker route`_
* The `bare metal route`_
* :ref:`Use the easy install docker script <setup-docker_script>`
* :ref:`Pull the image from Docker Hub <setup-docker_hub>`
* :ref:`Build the Docker image yourself <setup-docker_build>`
* :ref:`Install Paperless directly on your system manually (bare metal) <setup-bare_metal>`
* :ref:`Use ansible to install Paperless on your system automatically (bare metal) <setup-ansible>`
The `docker route`_ is quick & easy. This is the recommended route. This configures all the stuff
from above automatically so that it just works and uses sensible defaults for all configuration options.
The Docker routes are quick & easy. These are the recommended routes. This configures all the stuff
from the above automatically so that it just works and uses sensible defaults for all configuration options.
Here you find a cheat-sheet for docker beginners: `CLI Basics <https://sehn.tech/post/devops-with-docker/>`_
The `bare metal route`_ is more complicated to setup but makes it easier
The bare metal route is complicated to setup but makes it easier
should you want to contribute some code back. You need to configure and
run the above mentioned components yourself.
Docker Route
============
The ansible route combines benefits of both options:
the setup process is fully automated, reproducible and `idempotent <https://docs.ansible.com/ansible/latest/reference_appendices/glossary.html#Idempotency>`_,
it includes the same sensible defaults, and it simultaneously provides the flexibility of a bare metal installation.
1. Install `Docker`_ and `docker-compose`_. [#compose]_
.. _CLI Basics: https://sehn.tech/post/devops-with-docker/
.. _idempotent: https://docs.ansible.com/ansible/latest/reference_appendices/glossary.html#Idempotency
.. _setup-docker_script:
Install Paperless from Docker Hub using the installation script
===============================================================
Paperless provides an interactive installation script. This script will ask you
for a couple configuration options, download and create the necessary configuration files, pull the docker image, start paperless and create your user account. This script essentially
performs all the steps described in :ref:`setup-docker_hub` automatically.
1. Make sure that docker and docker-compose are installed.
2. Download and run the installation script:
.. code:: shell-session
$ wget https://raw.githubusercontent.com/jonaswinkler/paperless-ng/master/install-paperless-ng.sh
$ chmod +x install-paperless-ng.sh
$ ./install-paperless-ng.sh
.. _setup-docker_hub:
Install Paperless from Docker Hub
=================================
1. Login with your user and create a folder in your home-directory `mkdir -v ~/paperless-ng` to have a place for your configuration files and consumption directory.
2. Go to the `/docker/compose directory on the project page <https://github.com/jonaswinkler/paperless-ng/tree/master/docker/compose>`_
and download one of the `docker-compose.*.yml` files, depending on which database backend you
want to use. Rename this file to `docker-compose.yml`.
If you want to enable optional support for Office documents, download a file with `-tika` in the file name.
Download the ``docker-compose.env`` file and the ``.env`` file as well and store them
in the same directory.
.. hint::
For new installations, it is recommended to use PostgreSQL as the database
backend.
3. Install `Docker`_ and `docker-compose`_.
.. caution::
If you want to use the included ``docker-compose.*.yml`` file, you
need to have at least Docker version **17.09.0** and docker-compose
version **1.17.0**.
To check do: `docker-compose -v` or `docker -v`
See the `Docker installation guide`_ on how to install the current
version of Docker for your operating system or Linux distribution of
choice. To get an up-to-date version of docker-compose, follow the
choice. To get the latest version of docker-compose, follow the
`docker-compose installation guide`_ if your package repository doesn't
include it.
.. _Docker installation guide: https://docs.docker.com/engine/installation/
.. _docker-compose installation guide: https://docs.docker.com/compose/install/
2. Copy either ``docker-compose.sqlite.yml`` or ``docker-compose.postgres.yml`` to
``docker-compose.yml``, depending on which database backend you want to use.
.. hint::
For new installations, it is recommended to use postgresql as the database
backend. This is due to the increased amount of concurrency in paperless-ng.
2. Modify ``docker-compose.yml`` to your preferences. You should change the path
to the consumption directory in this file. Find the line that specifies where
4. Modify ``docker-compose.yml`` to your preferences. You may want to change the path
to the consumption directory. Find the line that specifies where
to mount the consumption directory:
.. code::
@@ -154,24 +174,34 @@ Docker Route
Don't change the part after the colon or paperless wont find your documents.
3. Modify ``docker-compose.env``, following the comments in the file. The
5. Modify ``docker-compose.env``, following the comments in the file. The
most important change is to set ``USERMAP_UID`` and ``USERMAP_GID``
to the uid and gid of your user on the host system. This ensures that
to the uid and gid of your user on the host system. Use ``id -u`` and
``id -g`` to get these.
This ensures that
both the docker container and you on the host machine have write access
to the consumption directory. If your UID and GID on the host system is
1000 (the default for the first normal user on most systems), it will
work out of the box without any modifications.
work out of the box without any modifications. `id "username"` to check.
.. note::
You can use any settings from the file ``paperless.conf`` in this file.
Have a look at :ref:`configuration` to see whats available.
You can copy any setting from the file ``paperless.conf.example`` and paste it here.
Have a look at :ref:`configuration` to see what's available.
4. Run ``docker-compose up -d``. This will create and start the necessary
containers. This will also build the image of paperless if you grabbed the
source archive.
.. caution::
5. To be able to login, you will need a super user. To create it, execute the
Some file systems such as NFS network shares don't support file system
notifications with ``inotify``. When storing the consumption directory
on such a file system, paperless will not pick up new files
with the default configuration. You will need to use ``PAPERLESS_CONSUMER_POLLING``,
which will disable inotify. See :ref:`here <configuration-polling>`.
6. Run ``docker-compose pull``, followed by ``docker-compose up -d``.
This will pull the image, create and start the necessary containers.
7. To be able to login, you will need a super user. To create it, execute the
following command:
.. code-block:: shell-session
@@ -179,40 +209,368 @@ Docker Route
$ docker-compose run --rm webserver createsuperuser
This will prompt you to set a username, an optional e-mail address and
finally a password.
finally a password (at least 8 characters).
6. The default ``docker-compose.yml`` exports the webserver on your local port
8000. If you haven't adapted this, you should now be able to visit your
Paperless instance at ``http://127.0.0.1:8000``. You can login with the
user and password you just created.
8. The default ``docker-compose.yml`` exports the webserver on your local port
8000. If you did not change this, you should now be able to visit your
Paperless instance at ``http://127.0.0.1:8000`` or your servers IP-Address:8000.
Use the login credentials you have created with the previous step.
.. _Docker: https://www.docker.com/
.. _docker-compose: https://docs.docker.com/compose/install/
.. [#compose] You of course don't have to use docker-compose, but it
simplifies deployment immensely. If you know your way around Docker, feel
free to tinker around without using compose!
.. _setup-docker_build:
Build the Docker image yourself
===============================
1. Clone the entire repository of paperless:
.. code:: shell-session
git clone https://github.com/jonaswinkler/paperless-ng
The master branch always reflects the latest stable version.
2. Copy one of the ``docker/compose/docker-compose.*.yml`` to ``docker-compose.yml`` in the root folder,
depending on which database backend you want to use. Copy
``docker-compose.env`` into the project root as well.
3. In the ``docker-compose.yml`` file, find the line that instructs docker-compose to pull the paperless image from Docker Hub:
.. code:: yaml
webserver:
image: jonaswinkler/paperless-ng:latest
and replace it with a line that instructs docker-compose to build the image from the current working directory instead:
.. code:: yaml
webserver:
build: .
4. Run the ``compile-frontend.sh`` script. This requires ``node`` and ``npm >= v15``.
5. Follow steps 3 to 8 of :ref:`setup-docker_hub`. When asked to run
``docker-compose pull`` to pull the image, do
.. code:: shell-session
$ docker-compose build
instead to build the image.
.. _setup-bare_metal:
Bare Metal Route
================
.. warning::
Paperless runs on linux only. The following procedure has been tested on a minimal
installation of Debian/Buster, which is the current stable release at the time of
writing. Windows is not and will never be supported.
TBD. User docker for now.
1. Install dependencies. Paperless requires the following packages.
* ``python3`` 3.6, 3.7, 3.8, 3.9
* ``python3-pip``
* ``python3-dev``
* ``fonts-liberation`` for generating thumbnails for plain text files
* ``imagemagick`` >= 6 for PDF conversion
* ``optipng`` for optimizing thumbnails
* ``gnupg`` for handling encrypted documents
* ``libpq-dev`` for PostgreSQL
* ``libmagic-dev`` for mime type detection
* ``mime-support`` for mime type detection
These dependencies are required for OCRmyPDF, which is used for text recognition.
* ``unpaper``
* ``ghostscript``
* ``icc-profiles-free``
* ``qpdf``
* ``liblept5``
* ``libxml2``
* ``pngquant``
* ``zlib1g``
* ``tesseract-ocr`` >= 4.0.0 for OCR
* ``tesseract-ocr`` language packs (``tesseract-ocr-eng``, ``tesseract-ocr-deu``, etc)
On Raspberry Pi, these libraries are required as well:
* ``libatlas-base-dev``
* ``libxslt1-dev``
You will also need ``build-essential``, ``python3-setuptools`` and ``python3-wheel``
for installing some of the python dependencies.
2. Install ``redis`` >= 5.0 and configure it to start automatically.
3. Optional. Install ``postgresql`` and configure a database, user and password for paperless. If you do not wish
to use PostgreSQL, SQLite is available as well.
4. Get the release archive from `<https://github.com/jonaswinkler/paperless-ng/releases>`_.
If you clone the git repo as it is, you also have to compile the front end by yourself.
Extract the archive to a place from where you wish to execute it, such as ``/opt/paperless``.
5. Configure paperless. See :ref:`configuration` for details. Edit the included ``paperless.conf`` and adjust the
settings to your needs. Required settings for getting paperless running are:
* ``PAPERLESS_REDIS`` should point to your redis server, such as redis://localhost:6379.
* ``PAPERLESS_DBHOST`` should be the hostname on which your PostgreSQL server is running. Do not configure this
to use SQLite instead. Also configure port, database name, user and password as necessary.
* ``PAPERLESS_CONSUMPTION_DIR`` should point to a folder which paperless should watch for documents. You might
want to have this somewhere else. Likewise, ``PAPERLESS_DATA_DIR`` and ``PAPERLESS_MEDIA_ROOT`` define where
paperless stores its data. If you like, you can point both to the same directory.
* ``PAPERLESS_SECRET_KEY`` should be a random sequence of characters. It's used for authentication. Failure
to do so allows third parties to forge authentication credentials.
Many more adjustments can be made to paperless, especially the OCR part. The following options are recommended
for everyone:
* Set ``PAPERLESS_OCR_LANGUAGE`` to the language most of your documents are written in.
* Set ``PAPERLESS_TIME_ZONE`` to your local time zone.
6. Create a system user under which you wish to run paperless.
.. code:: shell-session
adduser paperless --system --home /opt/paperless --group
7. Ensure that these directories exist
and that the paperless user has write permissions to the following directories:
* ``/opt/paperless/media``
* ``/opt/paperless/data``
* ``/opt/paperless/consume``
Adjust as necessary if you configured different folders.
8. Install python requirements from the ``requirements.txt`` file.
It is up to you if you wish to use a virtual environment or not.
.. code:: shell-session
sudo -Hu paperless pip3 install -r requirements.txt
This will install all python dependencies in the home directory of
the new paperless user.
9. Go to ``/opt/paperless/src``, and execute the following commands:
.. code:: bash
# This creates the database schema.
sudo -Hu paperless python3 manage.py migrate
# This creates your first paperless user
sudo -Hu paperless python3 manage.py createsuperuser
10. Optional: Test that paperless is working by executing
.. code:: bash
# This collects static files from paperless and django.
sudo -Hu paperless python3 manage.py runserver
and pointing your browser to http://localhost:8000/.
.. warning::
This is a development server which should not be used in
production. It is not audited for security and performance
is inferior to production ready web servers.
.. hint::
This will not start the consumer. Paperless does this in a
separate process.
11. Setup systemd services to run paperless automatically. You may
use the service definition files included in the ``scripts`` folder
as a starting point.
Paperless needs the ``webserver`` script to run the webserver, the
``consumer`` script to watch the input folder, and the ``scheduler``
script to run tasks such as email checking and document consumption.
You may need to adjust the path to the ``gunicorn`` executable. This
will be installed as part of the python dependencies, and is either located
in the ``bin`` folder of your virtual environment, or in ``~/.local/bin/`` if
no virtual environment is used.
These services rely on redis and optionally the database server, but
don't need to be started in any particular order. The example files
depend on redis being started. If you use a database server, you should
add additional dependencies.
.. caution::
The included scripts run a ``gunicorn`` standalone server,
which is fine for running paperless. It does support SSL,
however, the documentation of GUnicorn states that you should
use a proxy server in front of gunicorn instead.
For instructions on how to use nginx for that,
:ref:`see the instructions below <setup-nginx>`.
12. Optional: Install a samba server and make the consumption folder
available as a network share.
13. Configure ImageMagick to allow processing of PDF documents. Most distributions have
this disabled by default, since PDF documents can contain malware. If
you don't do this, paperless will fall back to ghostscript for certain steps
such as thumbnail generation.
Edit ``/etc/ImageMagick-6/policy.xml`` and adjust
.. code::
<policy domain="coder" rights="none" pattern="PDF" />
to
.. code::
<policy domain="coder" rights="read|write" pattern="PDF" />
14. Optional: Install the `jbig2enc <https://ocrmypdf.readthedocs.io/en/latest/jbig2.html>`_
encoder. This will reduce the size of generated PDF documents. You'll most likely need
to compile this by yourself, because this software has been patented until around 2017 and
binary packages are not available for most distributions.
.. _setup-ansible:
Install Paperless using ansible
===============================
.. note::
This role currently only supports Debian 10 Buster and Ubuntu 20.04 Focal or later as target hosts.
1. Install ansible 2.7+ on the management node.
This may be the target host paperless-ng is being installed on or any remote host which can access the target host.
For further details, check the ansible `inventory <https://docs.ansible.com/ansible/latest/user_guide/intro_inventory.html>`_ documentation.
On Debian and Ubuntu, the official repositories should provide a suitable version:
.. code:: bash
apt install ansible
ansible --version
Alternatively, you can install the most recent ansible release using PyPI:
.. code:: bash
python3 -m pip install ansible
ansible --version
Make sure your taget hosts are accessible:
.. code:: sh
ansible -m ping YourAnsibleTargetHostGoesHere
2. Clone the repository of paperless-ng:
.. code:: sh
git clone https://github.com/jonaswinkler/paperless-ng
Checkout the latest release tag:
.. code:: sh
cd paperless-ng
git checkout ng-1.0.0
3. Create an ansible ``playbook.yml`` in the paperless-ng root directory:
.. code:: yaml
- hosts: YourAnsibleTargetHostGoesHere
become: yes
vars_files:
- ansible/vars.yml
roles:
- ansible
Optional: If you also want to use PostgreSQL on the target system, install and add (for example) the `geerlingguy.postgresql <https://github.com/geerlingguy/ansible-role-postgresql>`_ role:
.. code:: sh
ansible-galaxy install geerlingguy.postgresql
.. code:: yaml
- hosts: YourAnsibleTargetHostGoesHere
become: yes
vars_files:
- ansible/vars.yml
roles:
- geerlingguy.postgresql
- ansible
Optional: If you also want to use a reverse proxy on the target system, install and add (for example) the `geerlingguy.nginx <https://github.com/geerlingguy/ansible-role-nginx>`_ role:
.. code:: sh
ansible-galaxy install geerlingguy.nginx
.. code:: yaml
- hosts: YourAnsibleTargetHostGoesHere
become: yes
vars_files:
- ansible/vars.yml
roles:
- geerlingguy.postgresql
- ansible
- geerlingguy.nginx
4. Create ``ansible/vars.yml`` to configure your ansible deployment:
.. code:: yaml
paperlessng_secret_key: PleaseGenerateAStrongKeyForThis
paperlessng_superuser_name: YourUserName
paperlessng_superuser_email: name@domain.tld
paperlessng_superuser_password: YourDesiredPasswordUsedForFirstLogin
paperlessng_ocr_languages:
- eng
- deu
For all of the available options, please check ``ansible/README.md`` and :ref:`configuration`.
Optional configurations for the above-mentioned PostgreSQL and nginx roles would also go here.
5. Run the ansible playbook from the management node:
.. code:: sh
ansible-playbook playbook.yml
When this step completes successfully, paperless-ng will be available on the target host at ``http://127.0.0.1:8000`` (or the address you configured).
Migration to paperless-ng
#########################
At its core, paperless-ng is still paperless and fully compatible. However, some
things have changed under the hood, so you need to adapt your setup depending on
how you installed paperless. The important things to keep in mind are as follows.
how you installed paperless.
This setup describes how to update an existing paperless Docker installation.
The important things to keep in mind are as follows:
* Read the :ref:`changelog <paperless_changelog>` and take note of breaking changes.
* It is recommended to use postgresql as the database now. If you want to continue
using SQLite, which is the default of paperless, use ``docker-compose.sqlite.yml``.
See :ref:`setup-sqlite_to_psql` for details on how to move your data from
sqlite to postgres.
* You should decide if you want to stick with SQLite or want to migrate your database
to PostgreSQL. See :ref:`setup-sqlite_to_psql` for details on how to move your data from
SQLite to PostgreSQL. Both work fine with paperless. However, if you already have a
database server running for other services, you might as well use it for paperless as well.
* The task scheduler of paperless, which is used to execute periodic tasks
such as email checking and maintenance, requires a `redis`_ message broker
instance. The docker-compose route takes care of that.
@@ -234,29 +592,46 @@ Migration to paperless-ng is then performed in a few simple steps:
paperless.
3. Download the latest release of paperless-ng. You can either go with the
docker-compose files or use the archive to build the image yourself.
docker-compose files from `here <https://github.com/jonaswinkler/paperless-ng/tree/master/docker/compose>`__
or clone the repository to build the image yourself (see :ref:`above <setup-docker_build>`).
You can either replace your current paperless folder or put paperless-ng
in a different location.
.. caution::
Make sure you also download the ``.env`` file. This will set the
project name for docker compose to ``paperless`` and then it will
automatically reuse your existing paperless volumes.
Paperless-ng includes a ``.env`` file. This will set the
project name for docker compose to ``paperless``, which will also define the name
of the volumes by paperless-ng. However, if you experience that paperless-ng
is not using your old paperless volumes, verify the names of your volumes with
4. Adjust ``docker-compose.yml`` and
``docker-compose.env`` to your needs.
See `docker route`_ for details on which edits are required.
.. code:: shell-session
5. Start paperless-ng.
$ docker volume ls | grep _data
.. code:: bash
and adjust the project name in the ``.env`` file so that it matches the name
of the volumes before the ``_data`` part.
$ docker-compose up
If you see everything working (you should see some migrations getting
applied, for instance), you can gracefully stop paperless-ng with Ctrl-C
and then start paperless-ng as usual with
4. Download the ``docker-compose.sqlite.yml`` file to ``docker-compose.yml``.
If you want to switch to PostgreSQL, do that after you migrated your existing
SQLite database.
5. Adjust ``docker-compose.yml`` and ``docker-compose.env`` to your needs.
See :ref:`setup-docker_hub` for details on which edits are advised.
6. :ref:`Update paperless. <administration-updating>`
7. In order to find your existing documents with the new search feature, you need
to invoke a one-time operation that will create the search index:
.. code:: shell-session
$ docker-compose run --rm webserver document_index reindex
This will migrate your database and create the search index. After that,
paperless will take care of maintaining the index by itself.
8. Start paperless-ng.
.. code:: bash
@@ -264,19 +639,204 @@ Migration to paperless-ng is then performed in a few simple steps:
This will run paperless in the background and automatically start it on system boot.
6. Paperless installed a permanent redirect to ``admin/`` in your browser. This
redirect is still in place and prevents access to the new UI. Clear
everything related to paperless in your browsers data in order to fix
this issue.
9. Paperless installed a permanent redirect to ``admin/`` in your browser. This
redirect is still in place and prevents access to the new UI. Clear your
browsing cache in order to fix this.
10. Optionally, follow the instructions below to migrate your existing data to PostgreSQL.
.. _setup-sqlite_to_psql:
Moving data from sqlite to postgresql
Moving data from SQLite to PostgreSQL
=====================================
Moving your data from SQLite to PostgreSQL is done via executing a series of django
management commands as below.
.. caution::
Make sure that your SQLite database is migrated to the latest version.
Starting paperless will make sure that this is the case. If your try to
load data from an old database schema in SQLite into a newer database
schema in PostgreSQL, you will run into trouble.
.. warning::
TBD.
On some database fields, PostgreSQL enforces predefined limits on maximum
length, whereas SQLite does not. The fields in question are the title of documents
(128 characters), names of document types, tags and correspondents (128 characters),
and filenames (1024 characters). If you have data in these fields that surpasses these
limits, migration to PostgreSQL is not possible and will fail with an error.
1. Stop paperless, if it is running.
2. Tell paperless to use PostgreSQL:
a) With docker, copy the provided ``docker-compose.postgres.yml`` file to
``docker-compose.yml``. Remember to adjust the consumption directory,
if necessary.
b) Without docker, configure the database in your ``paperless.conf`` file.
See :ref:`configuration` for details.
3. Open a shell and initialize the database:
a) With docker, run the following command to open a shell within the paperless
container:
.. code:: shell-session
$ cd /path/to/paperless
$ docker-compose run --rm webserver /bin/bash
This will launch the container and initialize the PostgreSQL database.
b) Without docker, remember to activate any virtual environment, switch to
the ``src`` directory and create the database schema:
.. code:: shell-session
$ cd /path/to/paperless/src
$ python3 manage.py migrate
This will not copy any data yet.
4. Dump your data from SQLite:
.. code:: shell-session
$ python3 manage.py dumpdata --database=sqlite --exclude=contenttypes --exclude=auth.Permission > data.json
5. Load your data into PostgreSQL:
.. code:: shell-session
$ python3 manage.py loaddata data.json
6. If operating inside Docker, you may exit the shell now.
.. code:: shell-session
$ exit
7. Start paperless.
Moving back to paperless
========================
Lets say you migrated to Paperless-ng and used it for a while, but decided that
you don't like it and want to move back (If you do, send me a mail about what
part you didn't like!), you can totally do that with a few simple steps.
Paperless-ng modified the database schema slightly, however, these changes can
be reverted while keeping your current data, so that your current data will
be compatible with original Paperless.
Execute this:
.. code:: shell-session
$ cd /path/to/paperless
$ docker-compose run --rm webserver migrate documents 0023
Or without docker:
.. code:: shell-session
$ cd /path/to/paperless/src
$ python3 manage.py migrate documents 0023
After that, you need to clear your cookies (Paperless-ng comes with updated
dependencies that do cookie-processing differently) and probably your cache
as well.
.. _setup-less_powerful_devices:
Considerations for less powerful devices
########################################
Paperless runs on Raspberry Pi. However, some things are rather slow on the Pi and
configuring some options in paperless can help improve performance immensely:
* Stick with SQLite to save some resources.
* Consider setting ``PAPERLESS_OCR_PAGES`` to 1, so that paperless will only OCR
the first page of your documents. In most cases, this page contains enough
information to be able to find it.
* ``PAPERLESS_TASK_WORKERS`` and ``PAPERLESS_THREADS_PER_WORKER`` are configured
to use all cores. The Raspberry Pi models 3 and up have 4 cores, meaning that
paperless will use 2 workers and 2 threads per worker. This may result in
sluggish response times during consumption, so you might want to lower these
settings (example: 2 workers and 1 thread to always have some computing power
left for other tasks).
* Keep ``PAPERLESS_OCR_MODE`` at its default value ``skip`` and consider OCR'ing
your documents before feeding them into paperless. Some scanners are able to
do this! You might want to even specify ``skip_noarchive`` to skip archive
file generation for already ocr'ed documents entirely.
* If you want to perform OCR on the the device, consider using ``PAPERLESS_OCR_CLEAN=none``.
This will speed up OCR times and use less memory at the expense of slightly worse
OCR results.
* Set ``PAPERLESS_OPTIMIZE_THUMBNAILS`` to 'false' if you want faster consumption
times. Thumbnails will be about 20% larger.
* If using docker, consider setting ``PAPERLESS_WEBSERVER_WORKERS`` to
1. This will save some memory.
For details, refer to :ref:`configuration`.
.. note::
Updating the :ref:`automatic matching algorithm <advanced-automatic_matching>`
takes quite a bit of time. However, the update mechanism checks if your
data has changed before doing the heavy lifting. If you experience the
algorithm taking too much cpu time, consider changing the schedule in the
admin interface to daily. You can also manually invoke the task
by changing the date and time of the next run to today/now.
The actual matching of the algorithm is fast and works on Raspberry Pi as
well as on any other device.
.. _redis: https://redis.io/
.. _setup-nginx:
Using nginx as a reverse proxy
##############################
If you want to expose paperless to the internet, you should hide it behind a
reverse proxy with SSL enabled.
In addition to the usual configuration for SSL,
the following configuration is required for paperless to operate:
.. code:: nginx
http {
# Adjust as required. This is the maximum size for file uploads.
# The default value 1M might be a little too small.
client_max_body_size 10M;
server {
location / {
# Adjust host and port as required.
proxy_pass http://localhost:8000/;
# These configuration options are required for WebSockets to work.
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
proxy_redirect off;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Host $server_name;
}
}
}
Also read `this <https://channels.readthedocs.io/en/stable/deploying.html#nginx-supervisor-ubuntu>`__, towards the end of the section.

View File

@@ -29,75 +29,182 @@ Check for the following issues:
Consumer fails to pickup any new files
######################################
If you notice, that the consumer will only pickup files in the consumption
directory at startup, but won't find any other files added later, check out
the configuration file and enable filesystem polling with the setting
``PAPERLESS_CONSUMER_POLLING``.
If you notice that the consumer will only pickup files in the consumption
directory at startup, but won't find any other files added later, you will need to
enable filesystem polling with the configuration option
``PAPERLESS_CONSUMER_POLLING``, see :ref:`here <configuration-polling>`.
This will disable listening to filesystem changes with inotify and paperless will
manually check the consumption directory for changes instead.
Consumer warns ``OCR for XX failed``
Paperless always redirects to /admin
####################################
If you find the OCR accuracy to be too low, and/or the document consumer warns
that ``OCR for XX failed, but we're going to stick with what we've got since
FORGIVING_OCR is enabled``, then you might need to install the
`Tesseract language files <http://packages.ubuntu.com/search?keywords=tesseract-ocr>`_
marching your document's languages.
As an example, if you are running Paperless from any Ubuntu or Debian
box, and your documents are written in Spanish you may need to run::
apt-get install -y tesseract-ocr-spa
You probably had the old paperless installed at some point. Paperless installed
a permanent redirect to /admin in your browser, and you need to clear your
browsing data / cache to fix that.
Operation not permitted
#######################
Consumer dies with ``convert: unable to extent pixel cache``
############################################################
You might see errors such as:
During the consumption process, Paperless invokes ImageMagick's ``convert``
program to translate the source document into something that the OCR engine can
understand and this can burn a Very Large amount of memory if the original
document is rather long. Similarly, if your system doesn't have a lot of
memory to begin with (ie. a Raspberry Pi), then this can happen for even
medium-sized documents.
.. code:: shell-session
The solution is to tell ImageMagick *not* to Use All The RAM, as is its
default, and instead tell it to used a fixed amount. ``convert`` will then
break up the job into hundreds of individual files and use them to slowly
compile the finished image. Simply set ``PAPERLESS_CONVERT_MEMORY_LIMIT`` in
``/etc/paperless.conf`` to something like ``32000000`` and you'll limit
``convert`` to 32MB. Fiddle with this value as you like.
chown: changing ownership of '../export': Operation not permitted
**HOWEVER**: Simply setting this value may not be enough on system where
``/tmp`` is mounted as tmpfs, as this is where ``convert`` will write its
temporary files. In these cases (most Systemd machines), you need to tell
ImageMagick to use a different space for its scratch work. You do this by
setting ``PAPERLESS_CONVERT_TMPDIR`` in ``/etc/paperless.conf`` to somewhere
that's actually on a physical disk (and writable by the user running
Paperless), like ``/var/tmp/paperless`` or ``/home/my_user/tmp`` in a pinch.
The container tries to set file ownership on the listed directories. This is
required so that the user running paperless inside docker has write permissions
to these folders. This happens when pointing these directories to NFS shares,
for example.
Ensure that ``chown`` is possible on these directories.
DecompressionBombWarning and/or no text in the OCR output
#########################################################
Classifier error: No training data available
############################################
Some users have had issues using Paperless to consume PDFs that were created
by merging Very Large Scanned Images into one PDF. If this happens to you,
it's likely because the PDF you've created contains some very large pages
(millions of pixels) and the process of converting the PDF to a OCR-friendly
image is exploding.
This indicates that the Auto matching algorithm found no documents to learn from.
This may have two reasons:
Typically, this happens because the scanned images are created with a high
DPI and then rolled into the PDF with an assumed DPI of 72 (the default).
The best solution then is to specify the DPI used in the scan in the
conversion-to-PDF step. So for example, if you scanned the original image
with a DPI of 300, then merging the images into the single PDF with
``convert`` should look like this:
* You don't use the Auto matching algorithm: The error can be safely ignored in this case.
* You are using the Auto matching algorithm: The classifier explicitly excludes documents
with Inbox tags. Verify that there are documents in your archive without inbox tags.
The algorithm will only learn from documents not in your inbox.
.. code:: bash
$ convert -density 300 *.jpg finished.pdf
UserWarning in sklearn on every single document
###############################################
For more information on this and situations like it, you should take a look
at `Issue #118`_ as that's where this tip originated.
You may encounter warnings like this:
.. _Issue #118: https://github.com/the-paperless-project/paperless/issues/118
.. code::
/usr/local/lib/python3.7/site-packages/sklearn/base.py:315:
UserWarning: Trying to unpickle estimator CountVectorizer from version 0.23.2 when using version 0.24.0.
This might lead to breaking code or invalid results. Use at your own risk.
This happens when certain dependencies of paperless that are responsible for the auto matching algorithm are
updated. After updating these, your current training data *might* not be compatible anymore. This can be ignored
in most cases. This warning will disappear automatically when paperless updates the training data.
If you want to get rid of the warning or actually experience issues with automatic matching, delete
the file ``classification_model.pickle`` in the data directory and let paperless recreate it.
504 Server Error: Gateway Timeout when adding Office documents
##############################################################
You may experience these errors when using the optional TIKA integration:
.. code::
requests.exceptions.HTTPError: 504 Server Error: Gateway Timeout for url: http://gotenberg:3000/convert/office
Gotenberg is a server that converts Office documents into PDF documents and has a default timeout of 10 seconds.
When conversion takes longer, Gotenberg raises this error.
You can increase the timeout by configuring an environment variable for gotenberg (see also `here <https://thecodingmachine.github.io/gotenberg/#environment_variables.default_wait_timeout>`__).
If using docker-compose, this is achieved by the following configuration change in the ``docker-compose.yml`` file:
.. code:: yaml
gotenberg:
image: thecodingmachine/gotenberg
restart: unless-stopped
environment:
DISABLE_GOOGLE_CHROME: 1
DEFAULT_WAIT_TIMEOUT: 30
Permission denied errors in the consumption directory
#####################################################
You might encounter errors such as:
.. code:: shell-session
The following error occured while consuming document.pdf: [Errno 13] Permission denied: '/usr/src/paperless/src/../consume/document.pdf'
This happens when paperless does not have permission to delete files inside the consumption directory.
Ensure that ``USERMAP_UID`` and ``USERMAP_GID`` are set to the user id and group id you use on the host operating system, if these are
different from ``1000``. See :ref:`setup-docker_hub`.
Also ensure that you are able to read and write to the consumption directory on the host.
OSError: [Errno 19] No such device when consuming files
#######################################################
If you experience errors such as:
.. code:: shell-session
File "/usr/local/lib/python3.7/site-packages/whoosh/codec/base.py", line 570, in open_compound_file
return CompoundStorage(dbfile, use_mmap=storage.supports_mmap)
File "/usr/local/lib/python3.7/site-packages/whoosh/filedb/compound.py", line 75, in __init__
self._source = mmap.mmap(fileno, 0, access=mmap.ACCESS_READ)
OSError: [Errno 19] No such device
During handling of the above exception, another exception occurred:
Traceback (most recent call last):
File "/usr/local/lib/python3.7/site-packages/django_q/cluster.py", line 436, in worker
res = f(*task["args"], **task["kwargs"])
File "/usr/src/paperless/src/documents/tasks.py", line 73, in consume_file
override_tag_ids=override_tag_ids)
File "/usr/src/paperless/src/documents/consumer.py", line 271, in try_consume_file
raise ConsumerError(e)
Paperless uses a search index to provide better and faster full text searching. This search index is stored inside
the ``data`` folder. The search index uses memory-mapped files (mmap). The above error indicates that paperless
was unable to create and open these files.
This happens when you're trying to store the data directory on certain file systems (mostly network shares)
that don't support memory-mapped files.
Web-UI stuck at "Loading..."
############################
This might have multiple reasons.
1. If you built the docker image yourself or deployed using the bare metal route,
make sure that there are files in ``<paperless-root>/static/frontend/<lang-code>/``.
If there are no files, make sure that you executed ``collectstatic`` successfully, either
manually or as part of the docker image build.
If the front end is still missing, make sure that the front end is compiled (files present in
``src/documents/static/frontend``). If it is not, you need to compile the front end yourself
or download the release archive instead of cloning the repository.
2. Check the output of the web server. You might see errors like this:
.. code::
[2021-01-25 10:08:04 +0000] [40] [ERROR] Socket error processing request.
Traceback (most recent call last):
File "/usr/local/lib/python3.7/site-packages/gunicorn/workers/sync.py", line 134, in handle
self.handle_request(listener, req, client, addr)
File "/usr/local/lib/python3.7/site-packages/gunicorn/workers/sync.py", line 190, in handle_request
util.reraise(*sys.exc_info())
File "/usr/local/lib/python3.7/site-packages/gunicorn/util.py", line 625, in reraise
raise value
File "/usr/local/lib/python3.7/site-packages/gunicorn/workers/sync.py", line 178, in handle_request
resp.write_file(respiter)
File "/usr/local/lib/python3.7/site-packages/gunicorn/http/wsgi.py", line 396, in write_file
if not self.sendfile(respiter):
File "/usr/local/lib/python3.7/site-packages/gunicorn/http/wsgi.py", line 386, in sendfile
sent += os.sendfile(sockno, fileno, offset + sent, count)
OSError: [Errno 22] Invalid argument
To fix this issue, add
.. code::
SENDFILE=0
to your `docker-compose.env` file.

View File

@@ -5,13 +5,13 @@ Usage Overview
Paperless is an application that manages your personal documents. With
the help of a document scanner (see :ref:`scanners`), paperless transforms
your wieldy physical document binders into a searchable archive and
provices many utilities for finding and managing your documents.
provides many utilities for finding and managing your documents.
Terms and definitions
#####################
Paperless esentially consists of two different parts for managing your
Paperless essentially consists of two different parts for managing your
documents:
* The *consumer* watches a specified folder and adds all documents in that
@@ -30,12 +30,12 @@ Each document has a couple of fields that you can assign to them:
tag, however, a single document can also have multiple tags. This is not
possible with folders. The reason folders are not implemented in paperless
is simply that tags are much more versatile than folders.
* A *document type* is used to demarkate the type of a document such as letter,
* A *document type* is used to demarcate the type of a document such as letter,
bank statement, invoice, contract, etc. It is used to identify what a document
is about.
* The *date added* of a document is the date the document was scanned into
paperless. You cannot and should not change this date.
* The *date created* of a document is the date the document was intially issued.
* The *date created* of a document is the date the document was initially issued.
This can be the date you bought a product, the date you signed a contract, or
the date a letter was sent to you.
* The *archive serial number* (short: ASN) of a document is the identifier of
@@ -57,8 +57,29 @@ Adding documents to paperless
#############################
Once you've got Paperless setup, you need to start feeding documents into it.
Currently, there are three options: the consumption directory, IMAP (email), and
HTTP POST.
When adding documents to paperless, it will perform the following operations on
your documents:
1. OCR the document, if it has no text. Digital documents usually have text,
and this step will be skipped for those documents.
2. Paperless will create an archiveable PDF/A document from your document.
If this document is coming from your scanner, it will have embedded selectable text.
3. Paperless performs automatic matching of tags, correspondents and types on the
document before storing it in the database.
.. hint::
This process can be configured to fit your needs. If you don't want paperless
to create archived versions for digital documents, you can configure that by
configuring ``PAPERLESS_OCR_MODE=skip_noarchive``. Please read the
:ref:`relevant section in the documentation <configuration-ocr>`.
.. note::
No matter which options you choose, Paperless will always store the original
document that it found in the consumption directory or in the mail and
will never overwrite that document. Archived versions are stored alongside the
original versions.
The consumption directory
@@ -82,6 +103,25 @@ files from the scanner. Typically, you're looking at an FTP server like
.. TODO: hyperref to configuration of the location of this magic folder.
Dashboard upload
================
The dashboard has a file drop field to upload documents to paperless. Simply drag a file
onto this field or select a file with the file dialog. Multiple files are supported.
.. _usage-mobile_upload:
Mobile upload
=============
The mobile app over at `<https://github.com/qcasey/paperless_share>`_ allows Android users
to share any documents with paperless. This can be combined with any of the mobile
scanning apps out there, such as Office Lens.
Furthermore, there is the `Paperless App <https://github.com/bauerj/paperless_app>`_ as well,
which not only has document upload, but also document browsing and download features.
.. _usage-email:
IMAP (Email)
@@ -131,7 +171,7 @@ These are as follows:
With the correct set of rules, you can completely automate your email documents.
Create rules for every correspondent you receive digital documents from and
paperless will read them automatically. The default acion "mark as read" is
paperless will read them automatically. The default action "mark as read" is
pretty tame and will not cause any damage or data loss whatsoever.
You can also setup a special folder in your mail account for paperless and use
@@ -156,6 +196,119 @@ REST API
You can also submit a document using the REST API, see :ref:`api-file_uploads` for details.
.. _basic-searching:
Best practices
##############
Paperless offers a couple tools that help you organize your document collection. However,
it is up to you to use them in a way that helps you organize documents and find specific
documents when you need them. This section offers a couple ideas for managing your collection.
Document types allow you to classify documents according to what they are. You can define
types such as "Receipt", "Invoice", or "Contract". If you used to collect all your receipts
in a single binder, you can recreate that system in paperless by defining a document type,
assigning documents to that type and then filtering by that type to only see all receipts.
Not all documents need document types. Sometimes its hard to determine what the type of a
document is or it is hard to justify creating a document type that you only need once or twice.
This is okay. As long as the types you define help you organize your collection in the way
you want, paperless is doing its job.
Tags can be used in many different ways. Think of tags are more versatile folders or binders.
If you have a binder for documents related to university / your car or health care, you can
create these binders in paperless by creating tags and assigning them to relevant documents.
Just as with documents, you can filter the document list by tags and only see documents of
a certain topic.
With physical documents, you'll often need to decide which folder the document belongs to.
The advantage of tags over folders and binders is that a single document can have multiple
tags. A physical document cannot magically appear in two different folders, but with tags,
this is entirely possible.
.. hint::
This can be used in many different ways. One example: Imagine you're working on a particular
task, such as signing up for university. Usually you'll need to collect a bunch of different
documents that are already sorted into various folders. With the tag system of paperless,
you can create a new group of documents that are relevant to this task without destroying
the already existing organization. When you're done with the task, you could delete the
tag again, which would be equal to sorting documents back into the folder they belong into.
Or keep the tag, up to you.
All of the logic above applies to correspondents as well. Attach them to documents if you
feel that they help you organize your collection.
When you've started organizing your documents, create a couple saved views for document collections
you regularly access. This is equal to having labeled physical binders on your desk, except
that these saved views are dynamic and simply update themselves as you add documents to the system.
Here are a couple examples of tags and types that you could use in your collection.
* An ``inbox`` tag for newly added documents that you haven't manually edited yet.
* A tag ``car`` for everything car related (repairs, registration, insurance, etc)
* A tag ``todo`` for documents that you still need to do something with, such as reply, or
perform some task online.
* A tag ``bank account x`` for all bank statement related to that account.
* A tag ``mail`` for anything that you added to paperless via its mail processing capabilities.
* A tag ``missing_metadata`` when you still need to add some metadata to a document, but can't
or don't want to do this right now.
Searching
#########
Paperless offers an extensive searching mechanism that is designed to allow you to quickly
find a document you're looking for (for example, that thing that just broke and you bought
a couple months ago, that contract you signed 8 years ago).
When you search paperless for a document, it tries to match this query against your documents.
Paperless will look for matching documents by inspecting their content, title, correspondent,
type and tags. Paperless returns a scored list of results, so that documents matching your query
better will appear further up in the search results.
By default, paperless returns only documents which contain all words typed in the search bar.
However, paperless also offers advanced search syntax if you want to drill down the results
further.
Matching documents with logical expressions:
.. code::
shopname AND (product1 OR product2)
Matching specific tags, correspondents or types:
.. code::
type:invoice tag:unpaid
correspondent:university certificate
Matching dates:
.. code::
created:[2005 to 2009]
added:yesterday
modified:today
Matching inexact words:
.. code::
produ*name
.. note::
Inexact terms are hard for search indexes. These queries might take a while to execute. That's why paperless offers
auto complete and query correction.
All of these constructs can be combined as you see fit.
If you want to learn more about the query language used by paperless, paperless uses Whoosh's default query language.
Head over to `Whoosh query language <https://whoosh.readthedocs.io/en/latest/querylang.html>`_.
For details on what date parsing utilities are available, see
`Date parsing <https://whoosh.readthedocs.io/en/latest/dates.html#parsing-date-queries>`_.
.. _usage-recommended_workflow:
@@ -182,7 +335,7 @@ Processing of the physical documents
====================================
Keep a physical inbox. Whenever you receive a document that you need to
archive, put it into your inbox. Regulary, do the following for all documents
archive, put it into your inbox. Regularly, do the following for all documents
in your inbox:
1. For each document, decide if you need to keep the document in physical
@@ -217,18 +370,24 @@ Once you have scanned in a document, proceed in paperless as follows.
1. If the document has an ASN, assign the ASN to the document.
2. Assign a correspondent to the document (i.e., your employer, bank, etc)
This isnt strictly necessary but helps in finding a document when you need
This isn't strictly necessary but helps in finding a document when you need
it.
3. Assign a document type (i.e., invoice, bank statement, etc) to the document
This isnt strictly necessary but helps in finding a document when you need
This isn't strictly necessary but helps in finding a document when you need
it.
4. Assign a proper title to the document (the name of an item you bought, the
subject of the letter, etc)
5. Check that the date of the document is corrent. Paperless tries to read
5. Check that the date of the document is correct. Paperless tries to read
the date from the content of the document, but this fails sometimes if the
OCR is bad or multiple dates appear on the document.
6. Remove inbox tags from the documents.
.. hint::
You can setup manual matching rules for your correspondents and tags and
paperless will assign them automatically. After consuming a couple documents,
you can even ask paperless to *learn* when to assign tags and correspondents
by itself. For details on this feature, see :ref:`advanced-matching`.
Task management
===============

View File

@@ -1,21 +1,9 @@
bind = '127.0.0.1:8000'
backlog = 2048
workers = 3
worker_class = 'sync'
worker_connections = 1000
timeout = 20
keepalive = 2
spew = False
daemon = False
pidfile = None
umask = 0
user = None
group = None
tmp_upload_dir = None
loglevel = 'info'
errorlog = '-'
accesslog = '-'
proc_name = None
import os
bind = '0.0.0.0:8000'
workers = int(os.getenv("PAPERLESS_WEBSERVER_WORKERS", 2))
worker_class = 'uvicorn.workers.UvicornWorker'
timeout = 120
def pre_fork(server, worker):
pass

295
install-paperless-ng.sh Executable file
View File

@@ -0,0 +1,295 @@
#!/bin/bash
set -e
ask() {
while true ; do
if [[ -z $3 ]] ; then
read -p "$1 [$2]: " result
else
read -p "$1 ($3) [$2]: " result
fi
if [[ -z $result ]]; then
ask_result=$2
return
fi
array=$3
if [[ -z $3 || " ${array[@]} " =~ " ${result} " ]]; then
ask_result=$result
return
else
echo "Invalid option: $result"
fi
done
}
ask_docker_folder() {
while true ; do
read -p "$1 [$2]: " result
if [[ -z $result ]]; then
ask_result=$2
return
fi
if [[ $result == /* || $result == ./* ]]; then
ask_result=$result
return
else
echo "Invalid folder: $result"
fi
done
}
if [[ $(id -u) == "0" ]] ; then
echo "Do not run this script as root."
exit 1
fi
if [[ -z $(which wget) ]] ; then
echo "wget executable not found. Is wget installed?"
exit 1
fi
if [[ -z $(which docker) ]] ; then
echo "docker executable not found. Is docker installed?"
exit 1
fi
if [[ -z $(which docker-compose) ]] ; then
echo "docker-compose executable not found. Is docker-compose installed?"
exit 1
fi
echo ""
echo "############################################"
echo "### Paperless-ng docker installation ###"
echo "############################################"
echo ""
echo "This script will download, configure and start paperless-ng."
echo ""
echo "1. Folder configuration"
echo "======================="
echo ""
echo "The target folder is used to store the configuration files of "
echo "paperless. You can move this folder around after installing paperless."
echo "You will need this folder whenever you want to start, stop, update or "
echo "maintain your paperless instance."
echo ""
ask "Target folder" "$(pwd)/paperless-ng"
TARGET_FOLDER=$ask_result
echo ""
echo "The consume folder is where paperles will search for new documents."
echo "Point this to a folder where your scanner is able to put your scanned"
echo "documents."
echo ""
echo "CAUTION: You must specify an absolute path starting with / or a relative "
echo "path starting with ./ here. Examples:"
echo " /mnt/consume"
echo " ./consume"
echo ""
ask_docker_folder "Consume folder" "$TARGET_FOLDER/consume"
CONSUME_FOLDER=$ask_result
echo ""
echo "The media folder is where paperless stores your documents."
echo "Leave empty and docker will manage this folder for you."
echo "Docker usually stores managed folders in /var/lib/docker/volumes."
echo ""
echo "CAUTION: If specified, you must specify an absolute path starting with /"
echo "or a relative path starting with ./ here."
echo ""
ask_docker_folder "Media folder" ""
MEDIA_FOLDER=$ask_result
echo ""
echo "The data folder is where paperless stores other data, such as your"
echo "SQLite database (if used), the search index and other data."
echo "As with the media folder, leave empty to have this managed by docker."
echo ""
echo "CAUTION: If specified, you must specify an absolute path starting with /"
echo "or a relative path starting with ./ here."
echo ""
ask_docker_folder "Data folder" ""
DATA_FOLDER=$ask_result
echo ""
echo "2. Application configuration"
echo "============================"
echo ""
echo "The port on which the paperless webserver will listen for incoming"
echo "connections."
echo ""
ask "Port" "8000"
PORT=$ask_result
echo ""
echo "Database backend: PostgreSQL and SQLite are available. Use PostgreSQL"
echo "if unsure. If you're running on a low-power device such as Raspberry"
echo "Pi, use SQLite to save resources."
echo ""
ask "Database backend" "postgres" "postgres sqlite"
DATABASE_BACKEND=$ask_result
echo ""
echo "Paperless is able to use Apache Tika to support Office documents such as"
echo "Word, Excel, Powerpoint, and Libreoffice equivalents. This feature"
echo "requires more resources due to the required services."
echo ""
ask "Enable Apache Tika?" "no" "yes no"
TIKA_ENABLED=$ask_result
echo ""
echo "Specify the default language that most of your documents are written in."
echo "Use ISO 639-2, (T) variant language codes: "
echo "https://www.loc.gov/standards/iso639-2/php/code_list.php"
echo "Common values: eng (English) deu (German) nld (Dutch) fra (French)"
echo ""
ask "OCR language" "eng"
OCR_LANGUAGE=$ask_result
echo ""
echo "Specify the user id and group id you wish to run paperless as."
echo "Paperless will also change ownership on the data, media and consume"
echo "folder to the specified values, so it's a good idea to supply the user id"
echo "and group id of your unix user account."
echo "If unsure, leave default."
echo ""
ask "User ID" "$(id -u)"
USERMAP_UID=$ask_result
ask "Group ID" "$(id -g)"
USERMAP_GID=$ask_result
echo ""
echo "3. Login credentials"
echo "===================="
echo ""
echo "Specify initial login credentials. You can change these later."
echo "A mail address is required, however it is not used in paperless. You don't"
echo "need to provide an actual mail address."
echo ""
ask "Paperless username" "$(whoami)"
USERNAME=$ask_result
while true; do
read -sp "Paperless password: " PASSWORD
echo ""
if [[ -z $PASSWORD ]] ; then
echo "Password cannot be empty."
continue
fi
read -sp "Paperless password (again): " PASSWORD_REPEAT
echo ""
if [[ ! "$PASSWORD" == "$PASSWORD_REPEAT" ]] ; then
echo "Passwords did not match"
else
break
fi
done
ask "Email" "$USERNAME@localhost"
EMAIL=$ask_result
echo ""
echo "Summary"
echo "======="
echo ""
echo "Target folder: $TARGET_FOLDER"
echo "Consume folder: $CONSUME_FOLDER"
if [[ -z $MEDIA_FOLDER ]] ; then
echo "Media folder: Managed by docker"
else
echo "Media folder: $MEDIA_FOLDER"
fi
if [[ -z $DATA_FOLDER ]] ; then
echo "Data folder: Managed by docker"
else
echo "Data folder: $DATA_FOLDER"
fi
echo ""
echo "Port: $PORT"
echo "Database: $DATABASE_BACKEND"
echo "Tika enabled: $TIKA_ENABLED"
echo "OCR language: $OCR_LANGUAGE"
echo "User id: $USERMAP_UID"
echo "Group id: $USERMAP_GID"
echo ""
echo "Paperless username: $USERNAME"
echo "Paperless email: $EMAIL"
echo ""
read -p "Press any key to install."
echo ""
echo "Installing paperless..."
echo ""
mkdir -p "$TARGET_FOLDER"
cd "$TARGET_FOLDER"
DOCKER_COMPOSE_VERSION=$DATABASE_BACKEND
if [[ $TIKA_ENABLED == "yes" ]] ; then
DOCKER_COMPOSE_VERSION="$DOCKER_COMPOSE_VERSION-tika"
fi
wget "https://raw.githubusercontent.com/jonaswinkler/paperless-ng/master/docker/compose/docker-compose.$DOCKER_COMPOSE_VERSION.yml" -O docker-compose.yml
wget "https://raw.githubusercontent.com/jonaswinkler/paperless-ng/master/docker/compose/.env" -O .env
SECRET_KEY=$(cat /dev/urandom | tr -dc 'a-zA-Z0-9' | fold -w 64 | head -n 1)
DEFAULT_LANGUAGES="deu eng fra ita spa"
{
if [[ ! $USERMAP_UID == "1000" ]] ; then
echo "USERMAP_UID=$USERMAP_UID"
fi
if [[ ! $USERMAP_GID == "1000" ]] ; then
echo "USERMAP_GID=$USERMAP_GID"
fi
echo "PAPERLESS_OCR_LANGUAGE=$OCR_LANGUAGE"
echo "PAPERLESS_SECRET_KEY=$SECRET_KEY"
if [[ ! " ${DEFAULT_LANGUAGES[@]} " =~ " ${OCR_LANGUAGE} " ]] ; then
echo "PAPERLESS_OCR_LANGUAGES=$OCR_LANGUAGE"
fi
} > docker-compose.env
sed -i "s/- 8000:8000/- $PORT:8000/g" docker-compose.yml
sed -i "s#- \./consume:/usr/src/paperless/consume#- $CONSUME_FOLDER:/usr/src/paperless/consume#g" docker-compose.yml
if [[ -n $MEDIA_FOLDER ]] ; then
sed -i "s#- media:/usr/src/paperless/media#- $MEDIA_FOLDER:/usr/src/paperless/media#g" docker-compose.yml
fi
if [[ -n $DATA_FOLDER ]] ; then
sed -i "s#- data:/usr/src/paperless/data#- $DATA_FOLDER:/usr/src/paperless/data#g" docker-compose.yml
fi
docker-compose pull
docker-compose run --rm -e DJANGO_SUPERUSER_PASSWORD="$PASSWORD" webserver createsuperuser --noinput --username "$USERNAME" --email "$EMAIL"
docker-compose up -d

View File

@@ -13,6 +13,7 @@
#PAPERLESS_DBNAME=paperless
#PAPERLESS_DBUSER=paperless
#PAPERLESS_DBPASS=paperless
#PAPERLESS_DBSSLMODE=prefer
# Paths and folders
@@ -26,30 +27,52 @@
#PAPERLESS_SECRET_KEY=change-me
#PAPERLESS_ALLOWED_HOSTS=example.com,www.example.com
#PAPERLESS_CORS_ALLOWED_HOSTS=localhost:8080,example.com,localhost:8000
#PAPERLESS_CORS_ALLOWED_HOSTS=http://example.com,http://localhost:8000
#PAPERLESS_FORCE_SCRIPT_NAME=
#PAPERLESS_STATIC_URL=/static/
#PAPERLESS_AUTO_LOGIN_USERNAME=
#PAPERLESS_COOKIE_PREFIX=
#PAPERLESS_ENABLE_HTTP_REMOTE_USER=false
# OCR settings
#PAPERLESS_OCR_LANGUAGE=eng
#PAPERLESS_OCR_MODE=skip
#PAPERLESS_OCR_OUTPUT_TYPE=pdfa
#PAPERLESS_OCR_PAGES=1
#PAPERLESS_OCR_IMAGE_DPI=300
#PAPERLESS_OCR_CLEAN=clean
#PAPERLESS_OCR_DESKEW=true
#PAPERLESS_OCR_ROTATE_PAGES=true
#PAPERLESS_OCR_ROTATE_PAGES_THRESHOLD=12.0
#PAPERLESS_OCR_USER_ARGS={}
#PAPERLESS_CONVERT_MEMORY_LIMIT=0
#PAPERLESS_CONVERT_TMPDIR=/var/tmp/paperless
# Software tweaks
#PAPERLESS_TASK_WORKERS=1
#PAPERLESS_THREADS_PER_WORKER=1
#PAPERLESS_TIME_ZONE=UTC
#PAPERLESS_OCR_LANGUAGE=eng
#PAPERLESS_OCR_ALWAYS=false
#PAPERLESS_CONSUMER_POLLING=10
#PAPERLESS_CONSUMER_DELETE_DUPLICATES=false
#PAPERLESS_CONVERT_MEMORY_LIMIT=0
#PAPERLESS_CONVERT_TMPDIR=/var/tmp/paperless
#PAPERLESS_CONVERT_DENSITY=300
#PAPERLESS_CONSUMER_RECURSIVE=false
#PAPERLESS_CONSUMER_SUBDIRS_AS_TAGS=false
#PAPERLESS_OPTIMIZE_THUMBNAILS=true
#PAPERLESS_POST_CONSUME_SCRIPT=/path/to/an/arbitrary/script.sh
#PAPERLESS_FILENAME_DATE_ORDER=YMD
#PAPERLESS_FILENAME_PARSE_TRANSFORMS=[]
#PAPERLESS_THUMBNAIL_FONT_NAME=
#PAPERLESS_IGNORE_DATES=
# Tika settings
#PAPERLESS_TIKA_ENABLED=false
#PAPERLESS_TIKA_ENDPOINT=http://localhost:9998
#PAPERLESS_TIKA_GOTENBERG_ENDPOINT=http://localhost:3000
# Binaries
#PAPERLESS_CONVERT_BINARY=/usr/bin/convert
#PAPERLESS_GS_BINARY=/usr/bin/gs
#PAPERLESS_UNPAPER_BINARY=/usr/bin/unpaper
#PAPERLESS_OPTIPNG_BINARY=/usr/bin/optipng

101
requirements.txt Normal file
View File

@@ -0,0 +1,101 @@
#
# These requirements were autogenerated by pipenv
# To regenerate from the project's Pipfile, run:
#
# pipenv lock --requirements
#
-i https://pypi.python.org/simple
--extra-index-url https://www.piwheels.org/simple
aioredis==1.3.1
arrow==0.17.0; python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3, 3.4'
asgiref==3.3.1; python_version >= '3.5'
async-timeout==3.0.1; python_full_version >= '3.5.3'
attrs==20.3.0; python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3'
autobahn==21.2.1; python_version >= '3.6'
automat==20.2.0
blessed==1.17.12
certifi==2020.12.5
cffi==1.14.5
channels-redis==3.2.0
channels==3.0.3
chardet==4.0.0; python_version >= '3.1'
click==7.1.2; python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3, 3.4'
coloredlogs==15.0; python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3, 3.4'
concurrent-log-handler==0.9.19
constantly==15.1.0
cryptography==3.3.2
daphne==3.0.1; python_version >= '3.6'
dateparser==0.7.6
django-cors-headers==3.7.0
django-extensions==3.1.1
django-filter==2.4.0
django-picklefield==3.0.1; python_version >= '3'
django-q==1.3.4
django==3.1.7
djangorestframework==3.12.2
filelock==3.0.12
fuzzywuzzy[speedup]==0.18.0
gunicorn==20.0.4
h11==0.12.0; python_version >= '3.6'
hiredis==1.1.0; python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3'
httptools==0.1.1
humanfriendly==9.1; python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3, 3.4'
hyperlink==21.0.0
idna==2.10; python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3'
imap-tools==0.37.0
img2pdf==0.4.0
incremental==17.5.0
inotify-simple==1.3.5; python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3'
inotifyrecursive==0.3.5
joblib==1.0.1; python_version >= '3.6'
langdetect==1.0.8
lxml==4.6.2; python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3, 3.4'
msgpack==1.0.2
numpy==1.19.5
ocrmypdf==11.6.2
pathvalidate==2.3.2
pdfminer.six==20201018
pikepdf==2.5.2
pillow==8.1.0
pluggy==0.13.1; python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3'
portalocker==2.2.1; python_version >= '3'
psycopg2-binary==2.8.6
pyasn1-modules==0.2.8
pyasn1==0.4.8
pycparser==2.20; python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3'
pyhamcrest==2.0.2; python_version >= '3.5'
pyopenssl==20.0.1; python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3, 3.4'
python-dateutil==2.8.1
python-dotenv==0.15.0
python-gnupg==0.4.6
python-levenshtein==0.12.2
python-magic==0.4.22
pytz==2021.1
pyyaml==5.4.1
redis==3.5.3
regex==2020.11.13
reportlab==3.5.59
requests==2.25.1; python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3, 3.4'
scikit-learn==0.24.0
scipy==1.5.4
service-identity==18.1.0
six==1.15.0; python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3'
sortedcontainers==2.3.0
sqlparse==0.4.1; python_version >= '3.5'
threadpoolctl==2.1.0; python_version >= '3.5'
tika==1.24
tqdm==4.57.0
twisted[tls]==20.3.0; python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3, 3.4'
txaio==21.2.1; python_version >= '3.6'
tzlocal==2.1
urllib3==1.26.3; python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3, 3.4' and python_version < '4'
uvicorn[standard]==0.13.4
uvloop==0.14.0
watchdog==1.0.2
watchgod==0.7
wcwidth==0.2.5
websockets==8.1
whitenoise==5.2.0
whoosh==2.7.4
zope.interface==5.2.0; python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3, 3.4'

16
resources/logo.txt Normal file
View File

@@ -0,0 +1,16 @@
9w
{@@N
Q@@@@H
G@@@@@@@\
SilN@@@@@@@
*Q *@@@@@@@@S /= = = = = = = = = = = = = = = = = =\
*@ B@@@@@@@@N || ||
N R$ A@@@@@@@@@@ || PAPERLESS-NG ||
x@@ $U B@@@@@@@@@R || ||
N@@N^ @ N@@@@@@@@@* \= = = = = = = = = = = = = = = = = =/
|@@@u @ E@@@@@@@@l
Q@@@ \ Px@@@@@@P
1@@S` @@@o'
z$ ;
v
/

View File

@@ -1,101 +0,0 @@
#!/bin/bash
set -e
VERSION=$1
if [ -z "$VERSION" ]
then
echo "Need a version string."
exit 1
fi
# source root directory of paperless
PAPERLESS_ROOT=$(git rev-parse --show-toplevel)
# output directory
PAPERLESS_DIST="$PAPERLESS_ROOT/dist"
PAPERLESS_DIST_APP="$PAPERLESS_DIST/paperless-ng"
if [ -d "$PAPERLESS_DIST" ]
then
echo "Removing $PAPERLESS_DIST"
rm "$PAPERLESS_DIST" -r
fi
mkdir "$PAPERLESS_DIST"
mkdir "$PAPERLESS_DIST_APP"
mkdir "$PAPERLESS_DIST_APP/docker"
# setup dependencies.
cd "$PAPERLESS_ROOT"
pipenv clean
pipenv install --dev
pipenv lock --keep-outdated -r > "$PAPERLESS_DIST_APP/requirements.txt"
# test if the application works.
cd "$PAPERLESS_ROOT/src"
pipenv run pytest --cov
pipenv run pycodestyle
# make the documentation.
cd "$PAPERLESS_ROOT/docs"
make clean html
# copy stuff into place
# the application itself
cp "$PAPERLESS_ROOT/.env" \
"$PAPERLESS_ROOT/.dockerignore" \
"$PAPERLESS_ROOT/CONTRIBUTING.md" \
"$PAPERLESS_ROOT/LICENSE" \
"$PAPERLESS_ROOT/Pipfile" \
"$PAPERLESS_ROOT/Pipfile.lock" \
"$PAPERLESS_ROOT/README.md" "$PAPERLESS_DIST_APP"
cp "$PAPERLESS_ROOT/paperless.conf.example" "$PAPERLESS_DIST_APP/paperless.conf"
# copy python source, templates and static files.
cd "$PAPERLESS_ROOT"
find src -wholename '*/templates/*' -o -wholename '*/static/*' -o -name '*.py' | cpio -pdm "$PAPERLESS_DIST_APP"
# build the front end.
cd "$PAPERLESS_ROOT/src-ui"
ng build --prod --output-hashing none --sourceMap=false --output-path "$PAPERLESS_DIST_APP/src/documents/static/frontend"
# documentation
cp "$PAPERLESS_ROOT/docs/_build/html/" "$PAPERLESS_DIST_APP/docs" -r
# docker files for building the image yourself
cp "$PAPERLESS_ROOT/docker/local/"* "$PAPERLESS_DIST_APP"
cp "$PAPERLESS_ROOT/docker/docker-compose.env" "$PAPERLESS_DIST_APP"
# docker files for pulling from docker hub
cp "$PAPERLESS_ROOT/docker/hub/"* "$PAPERLESS_DIST"
cp "$PAPERLESS_ROOT/.env" "$PAPERLESS_DIST"
cp "$PAPERLESS_ROOT/docker/docker-compose.env" "$PAPERLESS_DIST"
# auxiliary files required for the docker image
cp "$PAPERLESS_ROOT/docker/docker-entrypoint.sh" "$PAPERLESS_DIST_APP/docker/"
cp "$PAPERLESS_ROOT/docker/gunicorn.conf.py" "$PAPERLESS_DIST_APP/docker/"
cp "$PAPERLESS_ROOT/docker/imagemagick-policy.xml" "$PAPERLESS_DIST_APP/docker/"
cp "$PAPERLESS_ROOT/docker/supervisord.conf" "$PAPERLESS_DIST_APP/docker/"
# try to make the docker build.
cd "$PAPERLESS_DIST_APP"
docker build . -t "jonaswinkler/paperless-ng:$VERSION"
# works. package the app!
cd "$PAPERLESS_DIST"
tar -cJf "paperless-ng-$VERSION.tar.xz" paperless-ng/

View File

@@ -1,10 +1,12 @@
[Unit]
Description=Paperless consumer
Requires=redis.service
[Service]
User=paperless
Group=paperless
ExecStart=/home/paperless/project/virtualenv/bin/python /home/paperless/project/src/manage.py document_consumer
WorkingDirectory=/opt/paperless/src
ExecStart=python3 manage.py document_consumer
[Install]
WantedBy=multi-user.target

View File

@@ -0,0 +1,12 @@
[Unit]
Description=Paperless consumer
Requires=redis.service
[Service]
User=paperless
Group=paperless
WorkingDirectory=/opt/paperless/src
ExecStart=python3 manage.py qcluster
[Install]
WantedBy=multi-user.target

View File

@@ -2,11 +2,13 @@
Description=Paperless webserver
After=network.target
Wants=network.target
Requires=redis.service
[Service]
User=paperless
Group=paperless
ExecStart=/home/paperless/project/virtualenv/bin/gunicorn --pythonpath=/home/paperless/project/src paperless.wsgi -w 2
WorkingDirectory=/opt/paperless/src
ExecStart=/opt/paperless/.local/bin/gunicorn -c /opt/paperless/gunicorn.conf.py paperless.asgi:application
[Install]
WantedBy=multi-user.target

View File

@@ -1,23 +0,0 @@
#!/bin/bash
set -e
VERSION=$1
if [ -z "$VERSION" ]
then
echo "Need a version string."
exit 1
fi
# source root directory of paperless
PAPERLESS_ROOT=$(git rev-parse --show-toplevel)
# output directory
PAPERLESS_DIST="$PAPERLESS_ROOT/dist"
PAPERLESS_DIST_APP="$PAPERLESS_DIST/paperless-ng"
cd "$PAPERLESS_DIST_APP"
docker push "jonaswinkler/paperless-ng:$VERSION"

View File

@@ -1,2 +1,4 @@
docker run -p 5432:5432 -v paperless_pgdata:/var/lib/postgresql/data -d postgres:13
docker run -d -p 6379:6379 redis:latest
docker run -p 3000:3000 -d thecodingmachine/gotenberg
docker run -p 9998:9998 -d apache/tika

View File

@@ -1,126 +1,153 @@
{
"$schema": "./node_modules/@angular/cli/lib/config/schema.json",
"version": 1,
"newProjectRoot": "projects",
"projects": {
"paperless-ui": {
"projectType": "application",
"schematics": {},
"root": "",
"sourceRoot": "src",
"prefix": "app",
"architect": {
"build": {
"builder": "@angular-devkit/build-angular:browser",
"options": {
"outputPath": "dist/paperless-ui",
"outputHashing": "none",
"index": "src/index.html",
"main": "src/main.ts",
"polyfills": "src/polyfills.ts",
"tsConfig": "tsconfig.app.json",
"aot": true,
"assets": [
"src/favicon.ico",
"src/assets"
],
"styles": [
"node_modules/bootstrap/dist/css/bootstrap.min.css",
"src/styles.css"
],
"scripts": []
},
"configurations": {
"production": {
"fileReplacements": [
{
"replace": "src/environments/environment.ts",
"with": "src/environments/environment.prod.ts"
}
],
"optimization": true,
"outputHashing": "none",
"sourceMap": false,
"extractCss": true,
"namedChunks": false,
"extractLicenses": true,
"vendorChunk": false,
"buildOptimizer": true,
"budgets": [
{
"type": "initial",
"maximumWarning": "2mb",
"maximumError": "5mb"
},
{
"type": "anyComponentStyle",
"maximumWarning": "6kb",
"maximumError": "10kb"
}
]
}
}
},
"serve": {
"builder": "@angular-devkit/build-angular:dev-server",
"options": {
"browserTarget": "paperless-ui:build"
},
"configurations": {
"production": {
"browserTarget": "paperless-ui:build:production"
}
}
},
"extract-i18n": {
"builder": "@angular-devkit/build-angular:extract-i18n",
"options": {
"browserTarget": "paperless-ui:build"
}
},
"test": {
"builder": "@angular-devkit/build-angular:karma",
"options": {
"main": "src/test.ts",
"polyfills": "src/polyfills.ts",
"tsConfig": "tsconfig.spec.json",
"karmaConfig": "karma.conf.js",
"assets": [
"src/favicon.ico",
"src/assets"
],
"styles": [
"src/styles.css"
],
"scripts": []
}
},
"lint": {
"builder": "@angular-devkit/build-angular:tslint",
"options": {
"tsConfig": [
"tsconfig.app.json",
"tsconfig.spec.json",
"e2e/tsconfig.json"
],
"exclude": [
"**/node_modules/**"
]
}
},
"e2e": {
"builder": "@angular-devkit/build-angular:protractor",
"options": {
"protractorConfig": "e2e/protractor.conf.js",
"devServerTarget": "paperless-ui:serve"
},
"configurations": {
"production": {
"devServerTarget": "paperless-ui:serve:production"
}
}
}
}
}},
"defaultProject": "paperless-ui"
"$schema": "./node_modules/@angular/cli/lib/config/schema.json",
"version": 1,
"newProjectRoot": "projects",
"projects": {
"paperless-ui": {
"projectType": "application",
"schematics": {
"@schematics/angular:component": {
"style": "scss"
}
},
"root": "",
"sourceRoot": "src",
"prefix": "app",
"i18n": {
"sourceLocale": "en-US",
"locales": {
"de": "src/locale/messages.de.xlf",
"nl-NL": "src/locale/messages.nl_NL.xlf",
"fr": "src/locale/messages.fr.xlf",
"en-GB": "src/locale/messages.en_GB.xlf"
}
},
"architect": {
"build": {
"builder": "@angular-devkit/build-angular:browser",
"options": {
"outputPath": "dist/paperless-ui",
"outputHashing": "none",
"index": "src/index.html",
"main": "src/main.ts",
"polyfills": "src/polyfills.ts",
"tsConfig": "tsconfig.app.json",
"localize": true,
"aot": true,
"assets": [
"src/favicon.ico",
"src/assets",
"src/manifest.webmanifest", {
"glob": "pdf.worker.min.js",
"input": "node_modules/pdfjs-dist/build/",
"output": "/assets/js/"
}
],
"styles": [
"src/styles.scss"
],
"scripts": [],
"allowedCommonJsDependencies": [
"ng2-pdf-viewer"
]
},
"configurations": {
"production": {
"fileReplacements": [
{
"replace": "src/environments/environment.ts",
"with": "src/environments/environment.prod.ts"
}
],
"outputPath": "../src/documents/static/frontend/",
"optimization": true,
"outputHashing": "none",
"sourceMap": false,
"extractCss": true,
"namedChunks": false,
"extractLicenses": true,
"vendorChunk": false,
"buildOptimizer": true,
"budgets": [
{
"type": "initial",
"maximumWarning": "2mb",
"maximumError": "5mb"
},
{
"type": "anyComponentStyle",
"maximumWarning": "6kb",
"maximumError": "10kb"
}
]
},
"en-US": {
"localize": ["en-US"]
}
}
},
"serve": {
"builder": "@angular-devkit/build-angular:dev-server",
"options": {
"browserTarget": "paperless-ui:build:en-US"
},
"configurations": {
"production": {
"browserTarget": "paperless-ui:build:production"
}
}
},
"extract-i18n": {
"builder": "@angular-devkit/build-angular:extract-i18n",
"options": {
"browserTarget": "paperless-ui:build"
}
},
"test": {
"builder": "@angular-devkit/build-angular:karma",
"options": {
"main": "src/test.ts",
"polyfills": "src/polyfills.ts",
"tsConfig": "tsconfig.spec.json",
"karmaConfig": "karma.conf.js",
"assets": [
"src/favicon.ico",
"src/assets",
"src/manifest.webmanifest"
],
"styles": [
"src/styles.scss"
],
"scripts": []
}
},
"lint": {
"builder": "@angular-devkit/build-angular:tslint",
"options": {
"tsConfig": [
"tsconfig.app.json",
"tsconfig.spec.json",
"e2e/tsconfig.json"
],
"exclude": [
"**/node_modules/**"
]
}
},
"e2e": {
"builder": "@angular-devkit/build-angular:protractor",
"options": {
"protractorConfig": "e2e/protractor.conf.js",
"devServerTarget": "paperless-ui:serve"
},
"configurations": {
"production": {
"devServerTarget": "paperless-ui:serve:production"
}
}
}
}
}
},
"defaultProject": "paperless-ui"
}

2048
src-ui/messages.xlf Normal file

File diff suppressed because it is too large Load Diff

View File

@@ -331,6 +331,12 @@
"ms": "^2.1.1"
}
},
"ini": {
"version": "1.3.5",
"resolved": "https://registry.npmjs.org/ini/-/ini-1.3.5.tgz",
"integrity": "sha512-RZY5huIKCMRWDUqZlEi72f/lmXKMvuszcMBduliQ3nnWbx9X/ZBQO7DijMEYS9EhHBb2qacRUMtC7svLwe0lcw==",
"dev": true
},
"uuid": {
"version": "8.3.0",
"resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.0.tgz",
@@ -2056,6 +2062,14 @@
"tslib": "^2.0.0"
}
},
"@ng-select/ng-select": {
"version": "5.0.9",
"resolved": "https://registry.npmjs.org/@ng-select/ng-select/-/ng-select-5.0.9.tgz",
"integrity": "sha512-YZeSAiS8/Nx/eHZJPmOOYL8YmcvSq+dr1P8WIrsKmRA7mueorBpPc5xlUj+nLQbpLtsiQvdWDQspf/ykOvD/lA==",
"requires": {
"tslib": "^2.0.0"
}
},
"@ngtools/webpack": {
"version": "10.2.0",
"resolved": "https://registry.npmjs.org/@ngtools/webpack/-/webpack-10.2.0.tgz",
@@ -2170,6 +2184,14 @@
"pacote": "9.5.12",
"semver": "7.3.2",
"semver-intersect": "1.4.0"
},
"dependencies": {
"ini": {
"version": "1.3.5",
"resolved": "https://registry.npmjs.org/ini/-/ini-1.3.5.tgz",
"integrity": "sha512-RZY5huIKCMRWDUqZlEi72f/lmXKMvuszcMBduliQ3nnWbx9X/ZBQO7DijMEYS9EhHBb2qacRUMtC7svLwe0lcw==",
"dev": true
}
}
},
"@types/glob": {
@@ -2215,6 +2237,11 @@
"integrity": "sha512-UV1/ZJMC+HcP902wWdpC43cAcGu0IQk/I5bXjP2aSuCjsk3cE74mDvFrLKga7oDC170ugOAYBwfT4DSQW3akDA==",
"dev": true
},
"@types/pdfjs-dist": {
"version": "2.1.7",
"resolved": "https://registry.npmjs.org/@types/pdfjs-dist/-/pdfjs-dist-2.1.7.tgz",
"integrity": "sha512-nQIwcPUhkAIyn7x9NS0lR/qxYfd5unRtfGkMjvpgF4Sh28IXftRymaNmFKTTdejDNY25NDGSIyjwj/BRwAPexg=="
},
"@types/q": {
"version": "1.5.4",
"resolved": "https://registry.npmjs.org/@types/q/-/q-1.5.4.tgz",
@@ -3023,6 +3050,16 @@
"integrity": "sha512-1Yj8h9Q+QDF5FzhMs/c9+6UntbD5MkRfRwac8DoEm9ZfUBZ7tZ55YcGVAzEe4bXsdQHEk+s9S5wsOKVdZrw0tQ==",
"dev": true
},
"bindings": {
"version": "1.5.0",
"resolved": "https://registry.npmjs.org/bindings/-/bindings-1.5.0.tgz",
"integrity": "sha512-p2q/t/mhvuOj/UeLlV6566GD/guowlr0hHxClI0W9m7MWYkL1F0hLo+0Aexs9HSPCtR1SXQ0TD3MMKrXZajbiQ==",
"dev": true,
"optional": true,
"requires": {
"file-uri-to-path": "1.0.0"
}
},
"blob": {
"version": "0.0.5",
"resolved": "https://registry.npmjs.org/blob/-/blob-0.0.5.tgz",
@@ -5508,6 +5545,18 @@
"schema-utils": "^2.6.5"
}
},
"file-saver": {
"version": "2.0.5",
"resolved": "https://registry.npmjs.org/file-saver/-/file-saver-2.0.5.tgz",
"integrity": "sha512-P9bmyZ3h/PRG+Nzga+rbdI4OEpNDzAVyy74uVO9ATgzLK6VtAsYybF/+TOCvrc0MO793d6+42lLyZTw7/ArVzA=="
},
"file-uri-to-path": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/file-uri-to-path/-/file-uri-to-path-1.0.0.tgz",
"integrity": "sha512-0Zt+s3L7Vf1biwWZ29aARiVYLx7iMGnEUl9x33fbB/j3jR81u/O2LbqK+Bm1CDSNDKVtJ/YjwY7TUd5SkeLQLw==",
"dev": true,
"optional": true
},
"fill-range": {
"version": "7.0.1",
"resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz",
@@ -8208,6 +8257,13 @@
"integrity": "sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA==",
"dev": true
},
"nan": {
"version": "2.14.2",
"resolved": "https://registry.npmjs.org/nan/-/nan-2.14.2.tgz",
"integrity": "sha512-M2ufzIiINKCuDfBSAUr1vWQ+vuVcA9kqx8JJUsbQi6yf1uGRyb7HfpdfUr5qLXf3B/t8dPvcjhKMmlfnP47EzQ==",
"dev": true,
"optional": true
},
"nanomatch": {
"version": "1.2.13",
"resolved": "https://registry.npmjs.org/nanomatch/-/nanomatch-1.2.13.tgz",
@@ -8260,6 +8316,23 @@
"moment": "2.18.1"
}
},
"ng2-pdf-viewer": {
"version": "6.3.2",
"resolved": "https://registry.npmjs.org/ng2-pdf-viewer/-/ng2-pdf-viewer-6.3.2.tgz",
"integrity": "sha512-H2tBhDd+Lq6CUzK2g54HsCcZDR2wTn1sDjYqKY3yF0Ydasl2R5ppCKynZBU/zge4EKvmHglJI120FbQMpJKDYQ==",
"requires": {
"@types/pdfjs-dist": "^2.1.4",
"pdfjs-dist": "^2.4.456",
"tslib": "^1.10.0"
},
"dependencies": {
"tslib": {
"version": "1.14.1",
"resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz",
"integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg=="
}
}
},
"ngx-cookie-service": {
"version": "10.1.1",
"resolved": "https://registry.npmjs.org/ngx-cookie-service/-/ngx-cookie-service-10.1.1.tgz",
@@ -9270,6 +9343,11 @@
"sha.js": "^2.4.8"
}
},
"pdfjs-dist": {
"version": "2.5.207",
"resolved": "https://registry.npmjs.org/pdfjs-dist/-/pdfjs-dist-2.5.207.tgz",
"integrity": "sha512-xGDUhnCYPfHy+unMXCLCJtlpZaaZ17Ew3WIL0tnSgKFUZXHAPD49GO9xScyszSsQMoutNDgRb+rfBXIaX/lJbw=="
},
"performance-now": {
"version": "2.1.0",
"resolved": "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz",
@@ -13228,7 +13306,11 @@
"resolved": "https://registry.npmjs.org/fsevents/-/fsevents-1.2.13.tgz",
"integrity": "sha512-oWb1Z6mkHIskLzEJ/XWX0srkpkTQ7vaopMQkyaEIoq0fmtFVxOthb8cCxeT+p3ynTdkk/RZwbgG4brR5BeWECw==",
"dev": true,
"optional": true
"optional": true,
"requires": {
"bindings": "^1.5.0",
"nan": "^2.12.1"
}
},
"glob-parent": {
"version": "3.1.0",
@@ -13832,7 +13914,11 @@
"resolved": "https://registry.npmjs.org/fsevents/-/fsevents-1.2.13.tgz",
"integrity": "sha512-oWb1Z6mkHIskLzEJ/XWX0srkpkTQ7vaopMQkyaEIoq0fmtFVxOthb8cCxeT+p3ynTdkk/RZwbgG4brR5BeWECw==",
"dev": true,
"optional": true
"optional": true,
"requires": {
"bindings": "^1.5.0",
"nan": "^2.12.1"
}
},
"glob-parent": {
"version": "3.1.0",

View File

@@ -21,8 +21,11 @@
"@angular/platform-browser-dynamic": "~10.1.5",
"@angular/router": "~10.1.5",
"@ng-bootstrap/ng-bootstrap": "^8.0.0",
"@ng-select/ng-select": "^5.0.9",
"bootstrap": "^4.5.0",
"file-saver": "^2.0.5",
"ng-bootstrap": "^1.6.3",
"ng2-pdf-viewer": "^6.3.2",
"ngx-cookie-service": "^10.1.1",
"ngx-file-drop": "^10.0.0",
"ngx-infinite-scroll": "^9.1.0",

View File

@@ -1,14 +1,70 @@
import { Component } from '@angular/core';
import { SettingsService, SETTINGS_KEYS } from './services/settings.service';
import { Component, OnDestroy, OnInit } from '@angular/core';
import { Router } from '@angular/router';
import { Subscription } from 'rxjs';
import { ConsumerStatusService } from './services/consumer-status.service';
import { ToastService } from './services/toast.service';
@Component({
selector: 'app-root',
templateUrl: './app.component.html',
styleUrls: ['./app.component.css']
styleUrls: ['./app.component.scss']
})
export class AppComponent {
constructor () {
export class AppComponent implements OnInit, OnDestroy {
newDocumentSubscription: Subscription;
successSubscription: Subscription;
failedSubscription: Subscription;
constructor (private settings: SettingsService, private consumerStatusService: ConsumerStatusService, private toastService: ToastService, private router: Router) {
let anyWindow = (window as any)
anyWindow.pdfWorkerSrc = '/assets/js/pdf.worker.min.js';
this.settings.updateDarkModeSettings()
}
ngOnDestroy(): void {
this.consumerStatusService.disconnect()
if (this.successSubscription) {
this.successSubscription.unsubscribe()
}
if (this.failedSubscription) {
this.failedSubscription.unsubscribe()
}
if (this.newDocumentSubscription) {
this.newDocumentSubscription.unsubscribe()
}
}
private showNotification(key) {
if (this.router.url == '/dashboard' && this.settings.get(SETTINGS_KEYS.NOTIFICATIONS_CONSUMER_SUPPRESS_ON_DASHBOARD)) {
return false
}
return this.settings.get(key)
}
ngOnInit(): void {
this.consumerStatusService.connect()
this.successSubscription = this.consumerStatusService.onDocumentConsumptionFinished().subscribe(status => {
if (this.showNotification(SETTINGS_KEYS.NOTIFICATIONS_CONSUMER_SUCCESS)) {
this.toastService.show({title: $localize`Document added`, delay: 10000, content: $localize`Document ${status.filename} was added to paperless.`, actionName: $localize`Open document`, action: () => {
this.router.navigate(['documents', status.documentId])
}})
}
})
this.failedSubscription = this.consumerStatusService.onDocumentConsumptionFailed().subscribe(status => {
if (this.showNotification(SETTINGS_KEYS.NOTIFICATIONS_CONSUMER_FAILED)) {
this.toastService.showError($localize`Could not add ${status.filename}\: ${status.message}`)
}
})
this.newDocumentSubscription = this.consumerStatusService.onDocumentDetected().subscribe(status => {
if (this.showNotification(SETTINGS_KEYS.NOTIFICATIONS_CONSUMER_NEW_DOCUMENT)) {
this.toastService.show({title: $localize`New document detected`, delay: 5000, content: $localize`Document ${status.filename} is being processed by paperless.`})
}
})
}
}

View File

@@ -13,23 +13,26 @@ import { DocumentTypeListComponent } from './components/manage/document-type-lis
import { LogsComponent } from './components/manage/logs/logs.component';
import { SettingsComponent } from './components/manage/settings/settings.component';
import { FormsModule, ReactiveFormsModule } from '@angular/forms';
import { DatePipe } from '@angular/common';
import { SafePipe } from './pipes/safe.pipe';
import { DatePipe, registerLocaleData } from '@angular/common';
import { NotFoundComponent } from './components/not-found/not-found.component';
import { CorrespondentListComponent } from './components/manage/correspondent-list/correspondent-list.component';
import { DeleteDialogComponent } from './components/common/delete-dialog/delete-dialog.component';
import { ConfirmDialogComponent } from './components/common/confirm-dialog/confirm-dialog.component';
import { CorrespondentEditDialogComponent } from './components/manage/correspondent-list/correspondent-edit-dialog/correspondent-edit-dialog.component';
import { TagEditDialogComponent } from './components/manage/tag-list/tag-edit-dialog/tag-edit-dialog.component';
import { DocumentTypeEditDialogComponent } from './components/manage/document-type-list/document-type-edit-dialog/document-type-edit-dialog.component';
import { TagComponent } from './components/common/tag/tag.component';
import { SearchComponent } from './components/search/search.component';
import { ResultHightlightComponent } from './components/search/result-hightlight/result-hightlight.component';
import { ResultHighlightComponent } from './components/search/result-highlight/result-highlight.component';
import { PageHeaderComponent } from './components/common/page-header/page-header.component';
import { AppFrameComponent } from './components/app-frame/app-frame.component';
import { ToastsComponent } from './components/common/toasts/toasts.component';
import { FilterEditorComponent } from './components/filter-editor/filter-editor.component';
import { FilterEditorComponent } from './components/document-list/filter-editor/filter-editor.component';
import { FilterableDropdownComponent } from './components/common/filterable-dropdown/filterable-dropdown.component';
import { ToggleableDropdownButtonComponent } from './components/common/filterable-dropdown/toggleable-dropdown-button/toggleable-dropdown-button.component';
import { DateDropdownComponent } from './components/common/date-dropdown/date-dropdown.component';
import { DocumentCardLargeComponent } from './components/document-list/document-card-large/document-card-large.component';
import { DocumentCardSmallComponent } from './components/document-list/document-card-small/document-card-small.component';
import { BulkEditorComponent } from './components/document-list/bulk-editor/bulk-editor.component';
import { NgxFileDropModule } from 'ngx-file-drop';
import { TextComponent } from './components/common/input/text/text.component';
import { SelectComponent } from './components/common/input/select/select.component';
@@ -41,6 +44,32 @@ import { TagsComponent } from './components/common/input/tags/tags.component';
import { SortableDirective } from './directives/sortable.directive';
import { CookieService } from 'ngx-cookie-service';
import { CsrfInterceptor } from './interceptors/csrf.interceptor';
import { SavedViewWidgetComponent } from './components/dashboard/widgets/saved-view-widget/saved-view-widget.component';
import { StatisticsWidgetComponent } from './components/dashboard/widgets/statistics-widget/statistics-widget.component';
import { UploadFileWidgetComponent } from './components/dashboard/widgets/upload-file-widget/upload-file-widget.component';
import { WidgetFrameComponent } from './components/dashboard/widgets/widget-frame/widget-frame.component';
import { PdfViewerModule } from 'ng2-pdf-viewer';
import { WelcomeWidgetComponent } from './components/dashboard/widgets/welcome-widget/welcome-widget.component';
import { YesNoPipe } from './pipes/yes-no.pipe';
import { FileSizePipe } from './pipes/file-size.pipe';
import { FilterPipe } from './pipes/filter.pipe';
import { DocumentTitlePipe } from './pipes/document-title.pipe';
import { MetadataCollapseComponent } from './components/document-detail/metadata-collapse/metadata-collapse.component';
import { SelectDialogComponent } from './components/common/select-dialog/select-dialog.component';
import { NgSelectModule } from '@ng-select/ng-select';
import { NumberComponent } from './components/common/input/number/number.component';
import { SafePipe } from './pipes/safe.pipe';
import { CustomDatePipe } from './pipes/custom-date.pipe';
import localeFr from '@angular/common/locales/fr';
import localeNl from '@angular/common/locales/nl';
import localeDe from '@angular/common/locales/de';
import localeEnGb from '@angular/common/locales/en-GB';
registerLocaleData(localeFr)
registerLocaleData(localeNl)
registerLocaleData(localeDe)
registerLocaleData(localeEnGb)
@NgModule({
declarations: [
@@ -53,28 +82,45 @@ import { CsrfInterceptor } from './interceptors/csrf.interceptor';
DocumentTypeListComponent,
LogsComponent,
SettingsComponent,
SafePipe,
NotFoundComponent,
CorrespondentEditDialogComponent,
DeleteDialogComponent,
ConfirmDialogComponent,
TagEditDialogComponent,
DocumentTypeEditDialogComponent,
TagComponent,
SearchComponent,
ResultHightlightComponent,
ResultHighlightComponent,
PageHeaderComponent,
AppFrameComponent,
ToastsComponent,
FilterEditorComponent,
FilterableDropdownComponent,
ToggleableDropdownButtonComponent,
DateDropdownComponent,
DocumentCardLargeComponent,
DocumentCardSmallComponent,
BulkEditorComponent,
TextComponent,
SelectComponent,
CheckComponent,
SaveViewConfigDialogComponent,
DateTimeComponent,
TagsComponent,
SortableDirective
SortableDirective,
SavedViewWidgetComponent,
StatisticsWidgetComponent,
UploadFileWidgetComponent,
WidgetFrameComponent,
WelcomeWidgetComponent,
YesNoPipe,
FileSizePipe,
FilterPipe,
DocumentTitlePipe,
MetadataCollapseComponent,
SelectDialogComponent,
NumberComponent,
SafePipe,
CustomDatePipe
],
imports: [
BrowserModule,
@@ -84,7 +130,9 @@ import { CsrfInterceptor } from './interceptors/csrf.interceptor';
FormsModule,
ReactiveFormsModule,
NgxFileDropModule,
InfiniteScrollModule
InfiniteScrollModule,
PdfViewerModule,
NgSelectModule
],
providers: [
DatePipe,
@@ -92,7 +140,9 @@ import { CsrfInterceptor } from './interceptors/csrf.interceptor';
provide: HTTP_INTERCEPTORS,
useClass: CsrfInterceptor,
multi: true
}
},
FilterPipe,
DocumentTitlePipe
],
bootstrap: [AppComponent]
})

View File

@@ -1,84 +0,0 @@
/*
* Sidebar
*/
.sidebar {
position: fixed;
top: 0;
bottom: 0;
left: 0;
z-index: 100; /* Behind the navbar */
padding: 48px 0 0; /* Height of navbar */
box-shadow: inset -1px 0 0 rgba(0, 0, 0, .1);
}
@media (max-width: 767.98px) {
.sidebar {
top: 5rem;
}
}
.sidebar-sticky {
position: relative;
top: 0;
height: calc(100vh - 48px);
padding-top: .5rem;
overflow-x: hidden;
overflow-y: auto; /* Scrollable contents if viewport is shorter than content. */
}
@supports ((position: -webkit-sticky) or (position: sticky)) {
.sidebar-sticky {
position: -webkit-sticky;
position: sticky;
}
}
.sidebar .nav-link {
font-weight: 500;
color: #333;
}
.sidebar .nav-link .sidebaricon {
margin-right: 4px;
color: #999;
}
.sidebar .nav-link.active {
color: #007bff;
}
.sidebar .nav-link:hover .sidebaricon,
.sidebar .nav-link.active .sidebaricon {
color: inherit;
}
.sidebar-heading {
font-size: .75rem;
text-transform: uppercase;
}
/*
* Navbar
*/
.navbar-brand {
padding-top: .75rem;
padding-bottom: .75rem;
font-size: 1rem;
background-color: rgba(0, 0, 0, .25);
box-shadow: inset -1px 0 0 rgba(0, 0, 0, .25);
}
.navbar .navbar-toggler {
top: .25rem;
right: 1rem;
}
.navbar .form-control {
padding: .75rem 1rem;
border-width: 0;
border-radius: 0;
}

Some files were not shown because too many files have changed in this diff Show More