diff --git a/.github/release-drafter.yml b/.github/release-drafter.yml index b52e08f35..16538820d 100644 --- a/.github/release-drafter.yml +++ b/.github/release-drafter.yml @@ -28,9 +28,10 @@ include-labels: replacers: # Changes "Feature: Update checker" to "Update checker" - search: '/Feature:|Feat:|\[feature\]/gi' replace: '' -change-template: '- $TITLE @$AUTHOR (#$NUMBER)' +category-template: '### $TITLE' +change-template: '- $TITLE [@$AUTHOR](https://github.com/$AUTHOR) ([#$NUMBER]($URL))' change-title-escapes: '\<*_&#@' template: | - # Changelog + ## paperless-ngx $RESOLVED_VERSION $CHANGES diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index ed2b264ff..e3571e8b5 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -334,3 +334,21 @@ jobs: asset_path: ./paperless-ngx.tar.xz asset_name: paperless-ngx-${{ steps.get_version.outputs.version }}.tar.xz asset_content_type: application/x-xz + - + name: Checkout + uses: actions/checkout@v3 + with: + ref: main + - + name: Append Changelog to docs + id: append-Changelog + working-directory: docs + run: | + echo -e "# Changelog\n\n${{ steps.create-release.outputs.body }}\n" > changelog-new.md + CURRENT_CHANGELOG=`tail --lines +2 changelog.md` + echo -e "$CURRENT_CHANGELOG" >> changelog-new.md + mv changelog-new.md changelog.md + git config --global user.name "github-actions" + git config --global user.email "41898282+github-actions[bot]@users.noreply.github.com" + git commit -am "Changelog ${{ steps.get_version.outputs.version }} - GHA" + git push origin HEAD:main diff --git a/.gitignore b/.gitignore index c21ad4de0..2ba27f9b5 100644 --- a/.gitignore +++ b/.gitignore @@ -63,6 +63,8 @@ target/ # VS Code .vscode +/src-ui/.vscode +/docs/.vscode # Other stuff that doesn't belong .virtualenv @@ -84,8 +86,9 @@ scripts/nuke /paperless.conf /consume/ /export/ -/src-ui/.vscode # this is where the compiled frontend is moved to. /src/documents/static/frontend/ -/docs/.vscode/settings.json + +# mac os +.DS_Store diff --git a/Dockerfile b/Dockerfile index 2c4bbefe5..b1ff73181 100644 --- a/Dockerfile +++ b/Dockerfile @@ -26,7 +26,7 @@ COPY ./src-ui /src/src-ui WORKDIR /src/src-ui RUN set -eux \ && npm update npm -g \ - && npm ci --no-optional + && npm ci --omit=optional RUN set -eux \ && ./node_modules/.bin/ng build --configuration production diff --git a/Pipfile b/Pipfile index 0ab6775e6..a4dfe7cd4 100644 --- a/Pipfile +++ b/Pipfile @@ -34,7 +34,7 @@ psycopg2 = "*" redis = "*" # Pinned because aarch64 wheels and updates cause warnings when loading the classifier model. scikit-learn="==1.0.2" -whitenoise = "~=6.0.0" +whitenoise = "~=6.1.0" watchdog = "~=2.1.0" whoosh="~=2.7.4" inotifyrecursive = "~=0.3" @@ -69,3 +69,5 @@ sphinx_rtd_theme = "*" tox = "*" black = "*" pre-commit = "*" +sphinx-autobuild = "*" +myst-parser = "*" diff --git a/Pipfile.lock b/Pipfile.lock index b81373e4a..7edea98f2 100644 --- a/Pipfile.lock +++ b/Pipfile.lock @@ -1,7 +1,7 @@ { "_meta": { "hash": { - "sha256": "9573af313c811561d467d814c52c6bd1439bc48e3b31d7f56afed5f0ebe4b648" + "sha256": "cfdddfe8f71308f6eb7f1bec53518644758e0299cc23de3c6ee6f3fa5bf80ed0" }, "pipfile-spec": 6, "requires": {}, @@ -113,10 +113,11 @@ }, "certifi": { "hashes": [ - "sha256:78884e7c1d4b00ce3cea67b44566851c4343c120abd683433ce934a68ea58872", - "sha256:d62a0163eb4c2344ac042ab2bdf75399a71a2d8c7d47eac2e2ee91b9d6339569" + "sha256:9c5705e395cd70084351dd8ad5c41e65655e08ce46f2ec9cf6c2c08390f71eb7", + "sha256:f1d53542ee8cbedbe2118b5686372fb33c297fcd6379b050cca0ef13a597382a" ], - "version": "==2021.10.8" + "markers": "python_version >= '3.6'", + "version": "==2022.5.18.1" }, "cffi": { "hashes": [ @@ -194,7 +195,7 @@ "sha256:2857e29ff0d34db842cd7ca3230549d1a697f96ee6d3fb071cfa6c7393832597", "sha256:6881edbebdb17b39b4eaaa821b438bf6eddffb4468cf344f09f89def34a8b1df" ], - "markers": "python_version >= '3.5'", + "markers": "python_full_version >= '3.5.0'", "version": "==2.0.12" }, "click": { @@ -639,29 +640,31 @@ }, "numpy": { "hashes": [ - "sha256:07a8c89a04997625236c5ecb7afe35a02af3896c8aa01890a849913a2309c676", - "sha256:08d9b008d0156c70dc392bb3ab3abb6e7a711383c3247b410b39962263576cd4", - "sha256:201b4d0552831f7250a08d3b38de0d989d6f6e4658b709a02a73c524ccc6ffce", - "sha256:2c10a93606e0b4b95c9b04b77dc349b398fdfbda382d2a39ba5a822f669a0123", - "sha256:3ca688e1b9b95d80250bca34b11a05e389b1420d00e87a0d12dc45f131f704a1", - "sha256:48a3aecd3b997bf452a2dedb11f4e79bc5bfd21a1d4cc760e703c31d57c84b3e", - "sha256:568dfd16224abddafb1cbcce2ff14f522abe037268514dd7e42c6776a1c3f8e5", - "sha256:5bfb1bb598e8229c2d5d48db1860bcf4311337864ea3efdbe1171fb0c5da515d", - "sha256:639b54cdf6aa4f82fe37ebf70401bbb74b8508fddcf4797f9fe59615b8c5813a", - "sha256:8251ed96f38b47b4295b1ae51631de7ffa8260b5b087808ef09a39a9d66c97ab", - "sha256:92bfa69cfbdf7dfc3040978ad09a48091143cffb778ec3b03fa170c494118d75", - "sha256:97098b95aa4e418529099c26558eeb8486e66bd1e53a6b606d684d0c3616b168", - "sha256:a3bae1a2ed00e90b3ba5f7bd0a7c7999b55d609e0c54ceb2b076a25e345fa9f4", - "sha256:c34ea7e9d13a70bf2ab64a2532fe149a9aced424cd05a2c4ba662fd989e3e45f", - "sha256:dbc7601a3b7472d559dc7b933b18b4b66f9aa7452c120e87dfb33d02008c8a18", - "sha256:e7927a589df200c5e23c57970bafbd0cd322459aa7b1ff73b7c2e84d6e3eae62", - "sha256:f8c1f39caad2c896bc0018f699882b345b2a63708008be29b1f355ebf6f933fe", - "sha256:f950f8845b480cffe522913d35567e29dd381b0dc7e4ce6a4a9f9156417d2430", - "sha256:fade0d4f4d292b6f39951b6836d7a3c7ef5b2347f3c420cd9820a1d90d794802", - "sha256:fdf3c08bce27132395d3c3ba1503cac12e17282358cb4bddc25cc46b0aca07aa" + "sha256:0791fbd1e43bf74b3502133207e378901272f3c156c4df4954cad833b1380207", + "sha256:1ce7ab2053e36c0a71e7a13a7475bd3b1f54750b4b433adc96313e127b870887", + "sha256:2d487e06ecbf1dc2f18e7efce82ded4f705f4bd0cd02677ffccfb39e5c284c7e", + "sha256:37431a77ceb9307c28382c9773da9f306435135fae6b80b62a11c53cfedd8802", + "sha256:3e1ffa4748168e1cc8d3cde93f006fe92b5421396221a02f2274aab6ac83b077", + "sha256:425b390e4619f58d8526b3dcf656dde069133ae5c240229821f01b5f44ea07af", + "sha256:43a8ca7391b626b4c4fe20aefe79fec683279e31e7c79716863b4b25021e0e74", + "sha256:4c6036521f11a731ce0648f10c18ae66d7143865f19f7299943c985cdc95afb5", + "sha256:59d55e634968b8f77d3fd674a3cf0b96e85147cd6556ec64ade018f27e9479e1", + "sha256:64f56fc53a2d18b1924abd15745e30d82a5782b2cab3429aceecc6875bd5add0", + "sha256:7228ad13744f63575b3a972d7ee4fd61815b2879998e70930d4ccf9ec721dce0", + "sha256:9ce7df0abeabe7fbd8ccbf343dc0db72f68549856b863ae3dd580255d009648e", + "sha256:a911e317e8c826ea632205e63ed8507e0dc877dcdc49744584dfc363df9ca08c", + "sha256:b89bf9b94b3d624e7bb480344e91f68c1c6c75f026ed6755955117de00917a7c", + "sha256:ba9ead61dfb5d971d77b6c131a9dbee62294a932bf6a356e48c75ae684e635b3", + "sha256:c1d937820db6e43bec43e8d016b9b3165dcb42892ea9f106c70fb13d430ffe72", + "sha256:cc7f00008eb7d3f2489fca6f334ec19ca63e31371be28fd5dad955b16ec285bd", + "sha256:d4c5d5eb2ec8da0b4f50c9a843393971f31f1d60be87e0fb0917a49133d257d6", + "sha256:e96d7f3096a36c8754207ab89d4b3282ba7b49ea140e4973591852c77d09eb76", + "sha256:f0725df166cf4785c0bc4cbfb320203182b1ecd30fee6e541c8752a92df6aa32", + "sha256:f3eb268dbd5cfaffd9448113539e44e2dd1c5ca9ce25576f7c04a5453edc26fa", + "sha256:fb7a980c81dd932381f8228a426df8aeb70d59bbcda2af075b627bbc50207cba" ], "markers": "python_version >= '3.8'", - "version": "==1.22.3" + "version": "==1.22.4" }, "ocrmypdf": { "hashes": [ @@ -739,47 +742,47 @@ }, "pillow": { "hashes": [ - "sha256:01ce45deec9df310cbbee11104bae1a2a43308dd9c317f99235b6d3080ddd66e", - "sha256:0c51cb9edac8a5abd069fd0758ac0a8bfe52c261ee0e330f363548aca6893595", - "sha256:17869489de2fce6c36690a0c721bd3db176194af5f39249c1ac56d0bb0fcc512", - "sha256:21dee8466b42912335151d24c1665fcf44dc2ee47e021d233a40c3ca5adae59c", - "sha256:25023a6209a4d7c42154073144608c9a71d3512b648a2f5d4465182cb93d3477", - "sha256:255c9d69754a4c90b0ee484967fc8818c7ff8311c6dddcc43a4340e10cd1636a", - "sha256:35be4a9f65441d9982240e6966c1eaa1c654c4e5e931eaf580130409e31804d4", - "sha256:3f42364485bfdab19c1373b5cd62f7c5ab7cc052e19644862ec8f15bb8af289e", - "sha256:3fddcdb619ba04491e8f771636583a7cc5a5051cd193ff1aa1ee8616d2a692c5", - "sha256:463acf531f5d0925ca55904fa668bb3461c3ef6bc779e1d6d8a488092bdee378", - "sha256:4fe29a070de394e449fd88ebe1624d1e2d7ddeed4c12e0b31624561b58948d9a", - "sha256:55dd1cf09a1fd7c7b78425967aacae9b0d70125f7d3ab973fadc7b5abc3de652", - "sha256:5a3ecc026ea0e14d0ad7cd990ea7f48bfcb3eb4271034657dc9d06933c6629a7", - "sha256:5cfca31ab4c13552a0f354c87fbd7f162a4fafd25e6b521bba93a57fe6a3700a", - "sha256:66822d01e82506a19407d1afc104c3fcea3b81d5eb11485e593ad6b8492f995a", - "sha256:69e5ddc609230d4408277af135c5b5c8fe7a54b2bdb8ad7c5100b86b3aab04c6", - "sha256:6b6d4050b208c8ff886fd3db6690bf04f9a48749d78b41b7a5bf24c236ab0165", - "sha256:7a053bd4d65a3294b153bdd7724dce864a1d548416a5ef61f6d03bf149205160", - "sha256:82283af99c1c3a5ba1da44c67296d5aad19f11c535b551a5ae55328a317ce331", - "sha256:8782189c796eff29dbb37dd87afa4ad4d40fc90b2742704f94812851b725964b", - "sha256:8d79c6f468215d1a8415aa53d9868a6b40c4682165b8cb62a221b1baa47db458", - "sha256:97bda660702a856c2c9e12ec26fc6d187631ddfd896ff685814ab21ef0597033", - "sha256:a325ac71914c5c043fa50441b36606e64a10cd262de12f7a179620f579752ff8", - "sha256:a336a4f74baf67e26f3acc4d61c913e378e931817cd1e2ef4dfb79d3e051b481", - "sha256:a598d8830f6ef5501002ae85c7dbfcd9c27cc4efc02a1989369303ba85573e58", - "sha256:a5eaf3b42df2bcda61c53a742ee2c6e63f777d0e085bbc6b2ab7ed57deb13db7", - "sha256:aea7ce61328e15943d7b9eaca87e81f7c62ff90f669116f857262e9da4057ba3", - "sha256:af79d3fde1fc2e33561166d62e3b63f0cc3e47b5a3a2e5fea40d4917754734ea", - "sha256:c24f718f9dd73bb2b31a6201e6db5ea4a61fdd1d1c200f43ee585fc6dcd21b34", - "sha256:c5b0ff59785d93b3437c3703e3c64c178aabada51dea2a7f2c5eccf1bcf565a3", - "sha256:c7110ec1701b0bf8df569a7592a196c9d07c764a0a74f65471ea56816f10e2c8", - "sha256:c870193cce4b76713a2b29be5d8327c8ccbe0d4a49bc22968aa1e680930f5581", - "sha256:c9efef876c21788366ea1f50ecb39d5d6f65febe25ad1d4c0b8dff98843ac244", - "sha256:de344bcf6e2463bb25179d74d6e7989e375f906bcec8cb86edb8b12acbc7dfef", - "sha256:eb1b89b11256b5b6cad5e7593f9061ac4624f7651f7a8eb4dfa37caa1dfaa4d0", - "sha256:ed742214068efa95e9844c2d9129e209ed63f61baa4d54dbf4cf8b5e2d30ccf2", - "sha256:f401ed2bbb155e1ade150ccc63db1a4f6c1909d3d378f7d1235a44e90d75fb97", - "sha256:fb89397013cf302f282f0fc998bb7abf11d49dcff72c8ecb320f76ea6e2c5717" + "sha256:088df396b047477dd1bbc7de6e22f58400dae2f21310d9e2ec2933b2ef7dfa4f", + "sha256:09e67ef6e430f90caa093528bd758b0616f8165e57ed8d8ce014ae32df6a831d", + "sha256:0b4d5ad2cd3a1f0d1df882d926b37dbb2ab6c823ae21d041b46910c8f8cd844b", + "sha256:0b525a356680022b0af53385944026d3486fc8c013638cf9900eb87c866afb4c", + "sha256:1d4331aeb12f6b3791911a6da82de72257a99ad99726ed6b63f481c0184b6fb9", + "sha256:20d514c989fa28e73a5adbddd7a171afa5824710d0ab06d4e1234195d2a2e546", + "sha256:2b291cab8a888658d72b575a03e340509b6b050b62db1f5539dd5cd18fd50578", + "sha256:3f6c1716c473ebd1649663bf3b42702d0d53e27af8b64642be0dd3598c761fb1", + "sha256:42dfefbef90eb67c10c45a73a9bc1599d4dac920f7dfcbf4ec6b80cb620757fe", + "sha256:488f3383cf5159907d48d32957ac6f9ea85ccdcc296c14eca1a4e396ecc32098", + "sha256:4d45dbe4b21a9679c3e8b3f7f4f42a45a7d3ddff8a4a16109dff0e1da30a35b2", + "sha256:53c27bd452e0f1bc4bfed07ceb235663a1df7c74df08e37fd6b03eb89454946a", + "sha256:55e74faf8359ddda43fee01bffbc5bd99d96ea508d8a08c527099e84eb708f45", + "sha256:59789a7d06c742e9d13b883d5e3569188c16acb02eeed2510fd3bfdbc1bd1530", + "sha256:5b650dbbc0969a4e226d98a0b440c2f07a850896aed9266b6fedc0f7e7834108", + "sha256:66daa16952d5bf0c9d5389c5e9df562922a59bd16d77e2a276e575d32e38afd1", + "sha256:6e760cf01259a1c0a50f3c845f9cad1af30577fd8b670339b1659c6d0e7a41dd", + "sha256:7502539939b53d7565f3d11d87c78e7ec900d3c72945d4ee0e2f250d598309a0", + "sha256:769a7f131a2f43752455cc72f9f7a093c3ff3856bf976c5fb53a59d0ccc704f6", + "sha256:7c150dbbb4a94ea4825d1e5f2c5501af7141ea95825fadd7829f9b11c97aaf6c", + "sha256:8844217cdf66eabe39567118f229e275f0727e9195635a15e0e4b9227458daaf", + "sha256:8a66fe50386162df2da701b3722781cbe90ce043e7d53c1fd6bd801bca6b48d4", + "sha256:9370d6744d379f2de5d7fa95cdbd3a4d92f0b0ef29609b4b1687f16bc197063d", + "sha256:937a54e5694684f74dcbf6e24cc453bfc5b33940216ddd8f4cd8f0f79167f765", + "sha256:9c857532c719fb30fafabd2371ce9b7031812ff3889d75273827633bca0c4602", + "sha256:a4165205a13b16a29e1ac57efeee6be2dfd5b5408122d59ef2145bc3239fa340", + "sha256:b3fe2ff1e1715d4475d7e2c3e8dabd7c025f4410f79513b4ff2de3d51ce0fa9c", + "sha256:b6617221ff08fbd3b7a811950b5c3f9367f6e941b86259843eab77c8e3d2b56b", + "sha256:b761727ed7d593e49671d1827044b942dd2f4caae6e51bab144d4accf8244a84", + "sha256:baf3be0b9446a4083cc0c5bb9f9c964034be5374b5bc09757be89f5d2fa247b8", + "sha256:c17770a62a71718a74b7548098a74cd6880be16bcfff5f937f900ead90ca8e92", + "sha256:c67db410508b9de9c4694c57ed754b65a460e4812126e87f5052ecf23a011a54", + "sha256:d78ca526a559fb84faaaf84da2dd4addef5edb109db8b81677c0bb1aad342601", + "sha256:e9ed59d1b6ee837f4515b9584f3d26cf0388b742a11ecdae0d9237a94505d03a", + "sha256:f054b020c4d7e9786ae0404278ea318768eb123403b18453e28e47cdb7a0a4bf", + "sha256:f372d0f08eff1475ef426344efe42493f71f377ec52237bf153c5713de987251", + "sha256:f3f6a6034140e9e17e9abc175fc7a266a6e63652028e157750bd98e804a8ed9a", + "sha256:ffde4c6fabb52891d81606411cbfaf77756e3b561b566efd270b3ed3791fde4e" ], "index": "pypi", - "version": "==9.1.0" + "version": "==9.1.1" }, "pluggy": { "hashes": [ @@ -890,11 +893,11 @@ }, "python-gnupg": { "hashes": [ - "sha256:93a521501d6c2785d96b190aec7125ba89c1c2fe708b0c98af3fb32b59026ab8", - "sha256:b64de1ae5cedf872b437201a566fa2c62ce0c95ea2e30177eb53aee1258507d7" + "sha256:012960bde4d25dad631bb7650f563dda5e7271248a73f3584240063a293d99d8", + "sha256:aaa748795572591aaf127b4ac8985684f3673ff82b39f370c836b006e68fc537" ], "index": "pypi", - "version": "==0.4.8" + "version": "==0.4.9" }, "python-levenshtein": { "hashes": [ @@ -904,11 +907,11 @@ }, "python-magic": { "hashes": [ - "sha256:1a2c81e8f395c744536369790bd75094665e9644110a6623bcc3bbea30f03973", - "sha256:21f5f542aa0330f5c8a64442528542f6215c8e18d2466b399b0d9d39356d83fc" + "sha256:8262c13001f904ad5b724d38b5e5b5f17ec0450ae249def398a62e4e33108a50", + "sha256:b978c4b69a20510d133a7f488910c2f07e7796f1f31703e61c241973f2bbf5fb" ], "index": "pypi", - "version": "==0.4.25" + "version": "==0.4.26" }, "pytz": { "hashes": [ @@ -1150,32 +1153,32 @@ }, "scipy": { "hashes": [ - "sha256:011d4386b53b933142f58a652aa0f149c9b9242abd4f900b9f4ea5fbafc86b89", - "sha256:16e09ef68b352d73befa8bcaf3ebe25d3941fe1a58c82909d5589856e6bc8174", - "sha256:31d4f2d6b724bc9a98e527b5849b8a7e589bf1ea630c33aa563eda912c9ff0bd", - "sha256:38aa39b6724cb65271e469013aeb6f2ce66fd44f093e241c28a9c6bc64fd79ed", - "sha256:3d573228c10a3a8c32b9037be982e6440e411b443a6267b067cac72f690b8d56", - "sha256:3d9dd6c8b93a22bf9a3a52d1327aca7e092b1299fb3afc4f89e8eba381be7b59", - "sha256:559a8a4c03a5ba9fe3232f39ed24f86457e4f3f6c0abbeae1fb945029f092720", - "sha256:5e73343c5e0d413c1f937302b2e04fb07872f5843041bcfd50699aef6e95e399", - "sha256:723b9f878095ed994756fa4ee3060c450e2db0139c5ba248ee3f9628bd64e735", - "sha256:87b01c7d5761e8a266a0fbdb9d88dcba0910d63c1c671bdb4d99d29f469e9e03", - "sha256:8f4d059a97b29c91afad46b1737274cb282357a305a80bdd9e8adf3b0ca6a3f0", - "sha256:92b2c2af4183ed09afb595709a8ef5783b2baf7f41e26ece24e1329c109691a7", - "sha256:937d28722f13302febde29847bbe554b89073fbb924a30475e5ed7b028898b5f", - "sha256:a279e27c7f4566ef18bab1b1e2c37d168e365080974758d107e7d237d3f0f484", - "sha256:ad5be4039147c808e64f99c0e8a9641eb5d2fa079ff5894dcd8240e94e347af4", - "sha256:ae3e327da323d82e918e593460e23babdce40d7ab21490ddf9fc06dec6b91a18", - "sha256:bb7088e89cd751acf66195d2f00cf009a1ea113f3019664032d9075b1e727b6c", - "sha256:c17a1878d00a5dd2797ccd73623ceca9d02375328f6218ee6d921e1325e61aff", - "sha256:c2bae431d127bf0b1da81fc24e4bba0a84d058e3a96b9dd6475dfcb3c5e8761e", - "sha256:de2e80ee1d925984c2504812a310841c241791c5279352be4707cdcd7c255039", - "sha256:e6f0cd9c0bd374ef834ee1e0f0999678d49dcc400ea6209113d81528958f97c7", - "sha256:f3720d0124aced49f6f2198a6900304411dbbeed12f56951d7c66ebef05e3df6", - "sha256:f4a6d3b9f9797eb2d43938ac2c5d96d02aed17ef170c8b38f11798717523ddba" + "sha256:02b567e722d62bddd4ac253dafb01ce7ed8742cf8031aea030a41414b86c1125", + "sha256:1166514aa3bbf04cb5941027c6e294a000bba0cf00f5cdac6c77f2dad479b434", + "sha256:1da52b45ce1a24a4a22db6c157c38b39885a990a566748fc904ec9f03ed8c6ba", + "sha256:23b22fbeef3807966ea42d8163322366dd89da9bebdc075da7034cee3a1441ca", + "sha256:28d2cab0c6ac5aa131cc5071a3a1d8e1366dad82288d9ec2ca44df78fb50e649", + "sha256:2ef0fbc8bcf102c1998c1f16f15befe7cffba90895d6e84861cd6c6a33fb54f6", + "sha256:3b69b90c9419884efeffaac2c38376d6ef566e6e730a231e15722b0ab58f0328", + "sha256:4b93ec6f4c3c4d041b26b5f179a6aab8f5045423117ae7a45ba9710301d7e462", + "sha256:4e53a55f6a4f22de01ffe1d2f016e30adedb67a699a310cdcac312806807ca81", + "sha256:6311e3ae9cc75f77c33076cb2794fb0606f14c8f1b1c9ff8ce6005ba2c283621", + "sha256:65b77f20202599c51eb2771d11a6b899b97989159b7975e9b5259594f1d35ef4", + "sha256:6cc6b33139eb63f30725d5f7fa175763dc2df6a8f38ddf8df971f7c345b652dc", + "sha256:70de2f11bf64ca9921fda018864c78af7147025e467ce9f4a11bc877266900a6", + "sha256:70ebc84134cf0c504ce6a5f12d6db92cb2a8a53a49437a6bb4edca0bc101f11c", + "sha256:83606129247e7610b58d0e1e93d2c5133959e9cf93555d3c27e536892f1ba1f2", + "sha256:93d07494a8900d55492401917a119948ed330b8c3f1d700e0b904a578f10ead4", + "sha256:9c4e3ae8a716c8b3151e16c05edb1daf4cb4d866caa385e861556aff41300c14", + "sha256:9dd4012ac599a1e7eb63c114d1eee1bcfc6dc75a29b589ff0ad0bb3d9412034f", + "sha256:9e3fb1b0e896f14a85aa9a28d5f755daaeeb54c897b746df7a55ccb02b340f33", + "sha256:a0aa8220b89b2e3748a2836fbfa116194378910f1a6e78e4675a095bcd2c762d", + "sha256:d3b3c8924252caaffc54d4a99f1360aeec001e61267595561089f8b5900821bb", + "sha256:e013aed00ed776d790be4cb32826adb72799c61e318676172495383ba4570aa4", + "sha256:f3e7a8867f307e3359cc0ed2c63b61a1e33a19080f92fe377bc7d49f646f2ec1" ], "markers": "python_version < '3.11' and python_version >= '3.8'", - "version": "==1.8.0" + "version": "==1.8.1" }, "service-identity": { "hashes": [ @@ -1186,11 +1189,11 @@ }, "setuptools": { "hashes": [ - "sha256:5534570b9980fc650d45c62877ff603c7aaaf24893371708736cc016bd221c3c", - "sha256:ca6ba73b7fd5f734ae70ece8c4c1f7062b07f3352f6428f6277e27c8f5c64237" + "sha256:68e45d17c9281ba25dc0104eadd2647172b3472d9e01f911efa57965e8d51a36", + "sha256:a43bdedf853c670e5fed28e5623403bad2f73cf02f9a2774e91def6bda8265a7" ], "markers": "python_version >= '3.7'", - "version": "==62.2.0" + "version": "==62.3.2" }, "six": { "hashes": [ @@ -1205,7 +1208,7 @@ "sha256:471b71698eac1c2112a40ce2752bb2f4a4814c22a54a3eed3676bc0f5ca9f663", "sha256:c4666eecec1d3f50960c6bdf61ab7bc350648da6c126e3cf6898d8cd4ddcd3de" ], - "markers": "python_version >= '3.5'", + "markers": "python_full_version >= '3.5.0'", "version": "==1.2.0" }, "sqlparse": { @@ -1213,7 +1216,7 @@ "sha256:0c00730c74263a94e5a9919ade150dfc3b19c574389985446148402998287dae", "sha256:48719e356bb8b42991bdbb1e8b83223757b93789c00910a616a071910ca4a64d" ], - "markers": "python_version >= '3.5'", + "markers": "python_full_version >= '3.5.0'", "version": "==0.4.2" }, "threadpoolctl": { @@ -1422,11 +1425,11 @@ }, "whitenoise": { "hashes": [ - "sha256:08c42bc535f9777eea1a599289d9433f081921f97887eaf6f559446b2a080374", - "sha256:5a4aff543ee860fbe40d743e556adf92ccd41b7df45697cae074afdf657056b9" + "sha256:2067fe9008a3cd7d0d75f75c9240b54f5f59996ca285cbeab18fc1e89949e30d", + "sha256:6ccc6d1ad6fb688a398ea65d97db47f018ea0be7da75e146e8f2e837a04ba590" ], "index": "pypi", - "version": "==6.0.0" + "version": "==6.1.0" }, "whoosh": { "hashes": [ @@ -1559,10 +1562,11 @@ }, "certifi": { "hashes": [ - "sha256:78884e7c1d4b00ce3cea67b44566851c4343c120abd683433ce934a68ea58872", - "sha256:d62a0163eb4c2344ac042ab2bdf75399a71a2d8c7d47eac2e2ee91b9d6339569" + "sha256:9c5705e395cd70084351dd8ad5c41e65655e08ce46f2ec9cf6c2c08390f71eb7", + "sha256:f1d53542ee8cbedbe2118b5686372fb33c297fcd6379b050cca0ef13a597382a" ], - "version": "==2021.10.8" + "markers": "python_version >= '3.6'", + "version": "==2022.5.18.1" }, "cfgv": { "hashes": [ @@ -1577,7 +1581,7 @@ "sha256:2857e29ff0d34db842cd7ca3230549d1a697f96ee6d3fb071cfa6c7393832597", "sha256:6881edbebdb17b39b4eaaa821b438bf6eddffb4468cf344f09f89def34a8b1df" ], - "markers": "python_version >= '3.5'", + "markers": "python_full_version >= '3.5.0'", "version": "==2.0.12" }, "click": { @@ -1588,53 +1592,63 @@ "markers": "python_version >= '3.7'", "version": "==8.1.3" }, - "coverage": { - "extras": [], + "colorama": { "hashes": [ - "sha256:06f54765cdbce99901871d50fe9f41d58213f18e98b170a30ca34f47de7dd5e8", - "sha256:114944e6061b68a801c5da5427b9173a0dd9d32cd5fcc18a13de90352843737d", - "sha256:1414e8b124611bf4df8d77215bd32cba6e3425da8ce9c1f1046149615e3a9a31", - "sha256:2781c43bffbbec2b8867376d4d61916f5e9c4cc168232528562a61d1b4b01879", - "sha256:2ab88a01cd180b5640ccc9c47232e31924d5f9967ab7edd7e5c91c68eee47a69", - "sha256:338c417613f15596af9eb7a39353b60abec9d8ce1080aedba5ecee6a5d85f8d3", - "sha256:3401b0d2ed9f726fadbfa35102e00d1b3547b73772a1de5508ef3bdbcb36afe7", - "sha256:462105283de203df8de58a68c1bb4ba2a8a164097c2379f664fa81d6baf94b81", - "sha256:4cd696aa712e6cd16898d63cf66139dc70d998f8121ab558f0e1936396dbc579", - "sha256:4d06380e777dd6b35ee936f333d55b53dc4a8271036ff884c909cf6e94be8b6c", - "sha256:61f4fbf3633cb0713437291b8848634ea97f89c7e849c2be17a665611e433f53", - "sha256:6d4a6f30f611e657495cc81a07ff7aa8cd949144e7667c5d3e680d73ba7a70e4", - "sha256:6f5fee77ec3384b934797f1873758f796dfb4f167e1296dc00f8b2e023ce6ee9", - "sha256:75b5dbffc334e0beb4f6c503fb95e6d422770fd2d1b40a64898ea26d6c02742d", - "sha256:7835f76a081787f0ca62a53504361b3869840a1620049b56d803a8cb3a9eeea3", - "sha256:79bf405432428e989cad7b8bc60581963238f7645ae8a404f5dce90236cc0293", - "sha256:8329635c0781927a2c6ae068461e19674c564e05b86736ab8eb29c420ee7dc20", - "sha256:8586b177b4407f988731eb7f41967415b2197f35e2a6ee1a9b9b561f6323c8e9", - "sha256:892e7fe32191960da559a14536768a62e83e87bbb867e1b9c643e7e0fbce2579", - "sha256:91502bf27cbd5c83c95cfea291ef387469f2387508645602e1ca0fd8a4ba7548", - "sha256:93b16b08f94c92cab88073ffd185070cdcb29f1b98df8b28e6649145b7f2c90d", - "sha256:9c9441d57b0963cf8340268ad62fc83de61f1613034b79c2b1053046af0c5284", - "sha256:ad8f9068f5972a46d50fe5f32c09d6ee11da69c560fcb1b4c3baea246ca4109b", - "sha256:afb03f981fadb5aed1ac6e3dd34f0488e1a0875623d557b6fad09b97a942b38a", - "sha256:b5ba058610e8289a07db2a57bce45a1793ec0d3d11db28c047aae2aa1a832572", - "sha256:baa8be8aba3dd1e976e68677be68a960a633a6d44c325757aefaa4d66175050f", - "sha256:c06455121a089252b5943ea682187a4e0a5cf0a3fb980eb8e7ce394b144430a9", - "sha256:c1a9942e282cc9d3ed522cd3e3cab081149b27ea3bda72d6f61f84eaf88c1a63", - "sha256:c488db059848702aff30aa1d90ef87928d4e72e4f00717343800546fdbff0a94", - "sha256:cb5311d6ccbd22578c80028c5e292a7ab9adb91bd62c1982087fad75abe2e63d", - "sha256:cbe91bc84be4e5ef0b1480d15c7b18e29c73bdfa33e07d3725da7d18e1b0aff2", - "sha256:cc692c9ee18f0dd3214843779ba6b275ee4bb9b9a5745ba64265bce911aefd1a", - "sha256:cc972d829ad5ef4d4c5fcabd2bbe2add84ce8236f64ba1c0c72185da3a273130", - "sha256:ceb6534fcdfb5c503affb6b1130db7b5bfc8a0f77fa34880146f7a5c117987d0", - "sha256:d522f1dc49127eab0bfbba4e90fa068ecff0899bbf61bf4065c790ddd6c177fe", - "sha256:db094a6a4ae6329ed322a8973f83630b12715654c197dd392410400a5bfa1a73", - "sha256:df32ee0f4935a101e4b9a5f07b617d884a531ed5666671ff6ac66d2e8e8246d8", - "sha256:e5af1feee71099ae2e3b086ec04f57f9950e1be9ecf6c420696fea7977b84738", - "sha256:e814a4a5a1d95223b08cdb0f4f57029e8eab22ffdbae2f97107aeef28554517e", - "sha256:f8cabc5fd0091976ab7b020f5708335033e422de25e20ddf9416bdce2b7e07d8", - "sha256:fbc86ae8cc129c801e7baaafe3addf3c8d49c9c1597c44bdf2d78139707c3c62" + "sha256:5941b2b48a20143d2267e95b1c2a7603ce057ee39fd88e7329b0c292aa16869b", + "sha256:9f47eda37229f68eee03b24b9748937c7dc3868f906e8ba69fbcbdd3bc5dc3e2" + ], + "markers": "python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3, 3.4'", + "version": "==0.4.4" + }, + "coverage": { + "extras": [ + "toml" + ], + "hashes": [ + "sha256:00c8544510f3c98476bbd58201ac2b150ffbcce46a8c3e4fb89ebf01998f806a", + "sha256:016d7f5cf1c8c84f533a3c1f8f36126fbe00b2ec0ccca47cc5731c3723d327c6", + "sha256:03014a74023abaf5a591eeeaf1ac66a73d54eba178ff4cb1fa0c0a44aae70383", + "sha256:033ebec282793bd9eb988d0271c211e58442c31077976c19c442e24d827d356f", + "sha256:21e6686a95025927775ac501e74f5940cdf6fe052292f3a3f7349b0abae6d00f", + "sha256:26f8f92699756cb7af2b30720de0c5bb8d028e923a95b6d0c891088025a1ac8f", + "sha256:2e76bd16f0e31bc2b07e0fb1379551fcd40daf8cdf7e24f31a29e442878a827c", + "sha256:341e9c2008c481c5c72d0e0dbf64980a4b2238631a7f9780b0fe2e95755fb018", + "sha256:3cfd07c5889ddb96a401449109a8b97a165be9d67077df6802f59708bfb07720", + "sha256:4002f9e8c1f286e986fe96ec58742b93484195defc01d5cc7809b8f7acb5ece3", + "sha256:50ed480b798febce113709846b11f5d5ed1e529c88d8ae92f707806c50297abf", + "sha256:543e172ce4c0de533fa892034cce260467b213c0ea8e39da2f65f9a477425211", + "sha256:5a78cf2c43b13aa6b56003707c5203f28585944c277c1f3f109c7b041b16bd39", + "sha256:5cd698341626f3c77784858427bad0cdd54a713115b423d22ac83a28303d1d95", + "sha256:60c2147921da7f4d2d04f570e1838db32b95c5509d248f3fe6417e91437eaf41", + "sha256:62d382f7d77eeeaff14b30516b17bcbe80f645f5cf02bb755baac376591c653c", + "sha256:69432946f154c6add0e9ede03cc43b96e2ef2733110a77444823c053b1ff5166", + "sha256:727dafd7f67a6e1cad808dc884bd9c5a2f6ef1f8f6d2f22b37b96cb0080d4f49", + "sha256:742fb8b43835078dd7496c3c25a1ec8d15351df49fb0037bffb4754291ef30ce", + "sha256:750e13834b597eeb8ae6e72aa58d1d831b96beec5ad1d04479ae3772373a8088", + "sha256:7b546cf2b1974ddc2cb222a109b37c6ed1778b9be7e6b0c0bc0cf0438d9e45a6", + "sha256:83bd142cdec5e4a5c4ca1d4ff6fa807d28460f9db919f9f6a31babaaa8b88426", + "sha256:8d2e80dd3438e93b19e1223a9850fa65425e77f2607a364b6fd134fcd52dc9df", + "sha256:9229d074e097f21dfe0643d9d0140ee7433814b3f0fc3706b4abffd1e3038632", + "sha256:968ed5407f9460bd5a591cefd1388cc00a8f5099de9e76234655ae48cfdbe2c3", + "sha256:9c82f2cd69c71698152e943f4a5a6b83a3ab1db73b88f6e769fabc86074c3b08", + "sha256:a00441f5ea4504f5abbc047589d09e0dc33eb447dc45a1a527c8b74bfdd32c65", + "sha256:a022394996419142b33a0cf7274cb444c01d2bb123727c4bb0b9acabcb515dea", + "sha256:af5b9ee0fc146e907aa0f5fb858c3b3da9199d78b7bb2c9973d95550bd40f701", + "sha256:b5578efe4038be02d76c344007b13119b2b20acd009a88dde8adec2de4f630b5", + "sha256:b84ab65444dcc68d761e95d4d70f3cfd347ceca5a029f2ffec37d4f124f61311", + "sha256:c53ad261dfc8695062fc8811ac7c162bd6096a05a19f26097f411bdf5747aee7", + "sha256:cc173f1ce9ffb16b299f51c9ce53f66a62f4d975abe5640e976904066f3c835d", + "sha256:d548edacbf16a8276af13063a2b0669d58bbcfca7c55a255f84aac2870786a61", + "sha256:d55fae115ef9f67934e9f1103c9ba826b4c690e4c5bcf94482b8b2398311bf9c", + "sha256:d8099ea680201c2221f8468c372198ceba9338a5fec0e940111962b03b3f716a", + "sha256:e35217031e4b534b09f9b9a5841b9344a30a6357627761d4218818b865d45055", + "sha256:e4f52c272fdc82e7c65ff3f17a7179bc5f710ebc8ce8a5cadac81215e8326740", + "sha256:e637ae0b7b481905358624ef2e81d7fb0b1af55f5ff99f9ba05442a444b11e45", + "sha256:eef5292b60b6de753d6e7f2d128d5841c7915fb1e3321c3a1fe6acfe76c38052", + "sha256:fb45fe08e1abc64eb836d187b20a59172053999823f7f6ef4f18a819c44ba16f" ], "markers": "python_version >= '3.7'", - "version": "==6.3.3" + "version": "==6.4" }, "coveralls": { "hashes": [ @@ -1699,11 +1713,11 @@ }, "identify": { "hashes": [ - "sha256:3acfe15a96e4272b4ec5662ee3e231ceba976ef63fd9980ed2ce9cc415df393f", - "sha256:c83af514ea50bf2be2c4a3f2fb349442b59dc87284558ae9ff54191bff3541d2" + "sha256:0dca2ea3e4381c435ef9c33ba100a78a9b40c0bab11189c7cf121f75815efeaa", + "sha256:3d11b16f3fe19f52039fb7e39c9c884b21cb1b586988114fbe42671f03de3e82" ], "markers": "python_version >= '3.7'", - "version": "==2.5.0" + "version": "==2.5.1" }, "idna": { "hashes": [ @@ -1723,11 +1737,11 @@ }, "importlib-metadata": { "hashes": [ - "sha256:1208431ca90a8cca1a6b8af391bb53c1a2db74e5d1cef6ddced95d4b2062edc6", - "sha256:ea4c597ebf37142f827b8f39299579e31685c31d3a438b59f469406afd0f2539" + "sha256:5d26852efe48c0a32b0509ffbc583fda1a2266545a78d104a6f4aff3db17d700", + "sha256:c58c8eb8a762858f49e18436ff552e83914778e50e9d2f1660535ffb364552ec" ], "markers": "python_version < '3.10'", - "version": "==4.11.3" + "version": "==4.11.4" }, "iniconfig": { "hashes": [ @@ -1744,6 +1758,20 @@ "markers": "python_version >= '3.7'", "version": "==3.1.2" }, + "livereload": { + "hashes": [ + "sha256:776f2f865e59fde56490a56bcc6773b6917366bce0c267c60ee8aaf1a0959869" + ], + "version": "==2.6.3" + }, + "markdown-it-py": { + "hashes": [ + "sha256:93de681e5c021a432c63147656fe21790bc01231e0cd2da73626f1aa3ac0fe27", + "sha256:cf7e59fed14b5ae17c0006eff14a2d9a00ed5f3a846148153899a0224e2c07da" + ], + "markers": "python_version >= '3.7'", + "version": "==2.1.0" + }, "markupsafe": { "hashes": [ "sha256:0212a68688482dc52b2d45013df70d169f542b7394fc744c02a57374a4207003", @@ -1790,6 +1818,22 @@ "markers": "python_version >= '3.7'", "version": "==2.1.1" }, + "mdit-py-plugins": { + "hashes": [ + "sha256:b1279701cee2dbf50e188d3da5f51fee8d78d038cdf99be57c6b9d1aa93b4073", + "sha256:ecc24f51eeec6ab7eecc2f9724e8272c2fb191c2e93cf98109120c2cace69750" + ], + "markers": "python_version ~= '3.6'", + "version": "==0.3.0" + }, + "mdurl": { + "hashes": [ + "sha256:6a8f6804087b7128040b2fb2ebe242bdc2affaeaa034d5fc9feeed30b443651b", + "sha256:f79c9709944df218a4cdb0fcc0b0c7ead2f44594e3e84dc566606f04ad749c20" + ], + "markers": "python_version >= '3.7'", + "version": "==0.1.1" + }, "mypy-extensions": { "hashes": [ "sha256:090fedd75945a69ae91ce1303b5824f428daf5a028d2f6ab8a299250a846f15d", @@ -1797,6 +1841,14 @@ ], "version": "==0.4.3" }, + "myst-parser": { + "hashes": [ + "sha256:1635ce3c18965a528d6de980f989ff64d6a1effb482e1f611b1bfb79e38f3d98", + "sha256:4c076d649e066f9f5c7c661bae2658be1ca06e76b002bb97f02a09398707686c" + ], + "index": "pypi", + "version": "==0.17.2" + }, "nodeenv": { "hashes": [ "sha256:3ef13ff90291ba2a4a7a4ff9a979b63ffdd00a464dbe04acf0ea6471517a4c2b", @@ -2013,6 +2065,14 @@ "index": "pypi", "version": "==4.5.0" }, + "sphinx-autobuild": { + "hashes": [ + "sha256:8fe8cbfdb75db04475232f05187c776f46f6e9e04cacf1e49ce81bdac649ccac", + "sha256:de1ca3b66e271d2b5b5140c35034c89e47f263f2cd5db302c9217065f7443f05" + ], + "index": "pypi", + "version": "==2021.3.14" + }, "sphinx-rtd-theme": { "hashes": [ "sha256:4d35a56f4508cfee4c4fb604373ede6feae2a306731d533f409ef5c3496fdbd8", @@ -2091,6 +2151,53 @@ "markers": "python_version < '3.11'", "version": "==2.0.1" }, + "tornado": { + "hashes": [ + "sha256:0a00ff4561e2929a2c37ce706cb8233b7907e0cdc22eab98888aca5dd3775feb", + "sha256:0d321a39c36e5f2c4ff12b4ed58d41390460f798422c4504e09eb5678e09998c", + "sha256:1e8225a1070cd8eec59a996c43229fe8f95689cb16e552d130b9793cb570a288", + "sha256:20241b3cb4f425e971cb0a8e4ffc9b0a861530ae3c52f2b0434e6c1b57e9fd95", + "sha256:25ad220258349a12ae87ede08a7b04aca51237721f63b1808d39bdb4b2164558", + "sha256:33892118b165401f291070100d6d09359ca74addda679b60390b09f8ef325ffe", + "sha256:33c6e81d7bd55b468d2e793517c909b139960b6c790a60b7991b9b6b76fb9791", + "sha256:3447475585bae2e77ecb832fc0300c3695516a47d46cefa0528181a34c5b9d3d", + "sha256:34ca2dac9e4d7afb0bed4677512e36a52f09caa6fded70b4e3e1c89dbd92c326", + "sha256:3e63498f680547ed24d2c71e6497f24bca791aca2fe116dbc2bd0ac7f191691b", + "sha256:548430be2740e327b3fe0201abe471f314741efcb0067ec4f2d7dcfb4825f3e4", + "sha256:6196a5c39286cc37c024cd78834fb9345e464525d8991c21e908cc046d1cc02c", + "sha256:61b32d06ae8a036a6607805e6720ef00a3c98207038444ba7fd3d169cd998910", + "sha256:6286efab1ed6e74b7028327365cf7346b1d777d63ab30e21a0f4d5b275fc17d5", + "sha256:65d98939f1a2e74b58839f8c4dab3b6b3c1ce84972ae712be02845e65391ac7c", + "sha256:66324e4e1beede9ac79e60f88de548da58b1f8ab4b2f1354d8375774f997e6c0", + "sha256:6c77c9937962577a6a76917845d06af6ab9197702a42e1346d8ae2e76b5e3675", + "sha256:70dec29e8ac485dbf57481baee40781c63e381bebea080991893cd297742b8fd", + "sha256:7250a3fa399f08ec9cb3f7b1b987955d17e044f1ade821b32e5f435130250d7f", + "sha256:748290bf9112b581c525e6e6d3820621ff020ed95af6f17fedef416b27ed564c", + "sha256:7da13da6f985aab7f6f28debab00c67ff9cbacd588e8477034c0652ac141feea", + "sha256:8f959b26f2634a091bb42241c3ed8d3cedb506e7c27b8dd5c7b9f745318ddbb6", + "sha256:9de9e5188a782be6b1ce866e8a51bc76a0fbaa0e16613823fc38e4fc2556ad05", + "sha256:a48900ecea1cbb71b8c71c620dee15b62f85f7c14189bdeee54966fbd9a0c5bd", + "sha256:b87936fd2c317b6ee08a5741ea06b9d11a6074ef4cc42e031bc6403f82a32575", + "sha256:c77da1263aa361938476f04c4b6c8916001b90b2c2fdd92d8d535e1af48fba5a", + "sha256:cb5ec8eead331e3bb4ce8066cf06d2dfef1bfb1b2a73082dfe8a161301b76e37", + "sha256:cc0ee35043162abbf717b7df924597ade8e5395e7b66d18270116f8745ceb795", + "sha256:d14d30e7f46a0476efb0deb5b61343b1526f73ebb5ed84f23dc794bdb88f9d9f", + "sha256:d371e811d6b156d82aa5f9a4e08b58debf97c302a35714f6f45e35139c332e32", + "sha256:d3d20ea5782ba63ed13bc2b8c291a053c8d807a8fa927d941bd718468f7b950c", + "sha256:d3f7594930c423fd9f5d1a76bee85a2c36fd8b4b16921cae7e965f22575e9c01", + "sha256:dcef026f608f678c118779cd6591c8af6e9b4155c44e0d1bc0c87c036fb8c8c4", + "sha256:e0791ac58d91ac58f694d8d2957884df8e4e2f6687cdf367ef7eb7497f79eaa2", + "sha256:e385b637ac3acaae8022e7e47dfa7b83d3620e432e3ecb9a3f7f58f150e50921", + "sha256:e519d64089b0876c7b467274468709dadf11e41d65f63bba207e04217f47c085", + "sha256:e7229e60ac41a1202444497ddde70a48d33909e484f96eb0da9baf8dc68541df", + "sha256:ed3ad863b1b40cd1d4bd21e7498329ccaece75db5a5bf58cd3c9f130843e7102", + "sha256:f0ba29bafd8e7e22920567ce0d232c26d4d47c8b5cf4ed7b562b5db39fa199c5", + "sha256:fa2ba70284fa42c2a5ecb35e322e68823288a4251f9ba9cc77be04ae15eada68", + "sha256:fba85b6cd9c39be262fcd23865652920832b61583de2a2ca907dbd8e8a8c81e5" + ], + "markers": "python_version > '2.7'", + "version": "==6.1" + }, "tox": { "hashes": [ "sha256:0805727eb4d6b049de304977dfc9ce315a1938e6619c3ab9f38682bb04662a5a", diff --git a/README.md b/README.md index 3395d8e3c..8b1eb5e4a 100644 --- a/README.md +++ b/README.md @@ -102,7 +102,7 @@ For bugs please [open an issue](https://github.com/paperless-ngx/paperless-ngx/i 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-ngx. Also works with the original Paperless and Paperless-ngx. +- [Paperless App](https://github.com/bauerj/paperless_app): An Android/iOS app for Paperless-ngx. Also works with the original Paperless and 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. - [Scan to Paperless](https://github.com/sbrunner/scan-to-paperless): Scan and prepare (crop, deskew, OCR, ...) your documents for Paperless. diff --git a/docker-builders/Dockerfile.frontend b/docker-builders/Dockerfile.frontend index 26f6c9e15..e552ee184 100644 --- a/docker-builders/Dockerfile.frontend +++ b/docker-builders/Dockerfile.frontend @@ -9,6 +9,6 @@ COPY ./src-ui /src/src-ui WORKDIR /src/src-ui RUN set -eux \ && npm update npm -g \ - && npm ci --no-optional + && npm ci --omit=optional RUN set -eux \ && ./node_modules/.bin/ng build --configuration production diff --git a/docker/wait-for-redis.py b/docker/wait-for-redis.py index 292450352..8ceae1ba9 100755 --- a/docker/wait-for-redis.py +++ b/docker/wait-for-redis.py @@ -26,9 +26,11 @@ if __name__ == "__main__": try: client.ping() break - except Exception: + except Exception as e: print( - f"Redis ping #{attempt} failed, waiting {RETRY_SLEEP_SECONDS}s", + f"Redis ping #{attempt} failed.\n" + f"Error: {str(e)}.\n" + f"Waiting {RETRY_SLEEP_SECONDS}s", flush=True, ) time.sleep(RETRY_SLEEP_SECONDS) diff --git a/docs/Makefile b/docs/Makefile index cf5dbff6a..7890f9828 100644 --- a/docs/Makefile +++ b/docs/Makefile @@ -24,6 +24,7 @@ I18NSPHINXOPTS = $(PAPEROPT_$(PAPER)) $(SPHINXOPTS) . help: @echo "Please use \`make ' where is one of" @echo " html to make standalone HTML files" + @echo " livehtml to preview changes with live reload in your browser" @echo " dirhtml to make HTML files named index.html in directories" @echo " singlehtml to make a single large HTML file" @echo " pickle to make pickle files" @@ -54,6 +55,9 @@ html: @echo @echo "Build finished. The HTML pages are in $(BUILDDIR)/html." +livehtml: + sphinx-autobuild "./" "$(BUILDDIR)" $(O) + dirhtml: $(SPHINXBUILD) -b dirhtml $(ALLSPHINXOPTS) $(BUILDDIR)/dirhtml @echo diff --git a/docs/_static/css/custom.css b/docs/_static/css/custom.css index 3dbe0318f..87694a598 100644 --- a/docs/_static/css/custom.css +++ b/docs/_static/css/custom.css @@ -64,6 +64,10 @@ body { color: var(--color-text-body); } +.rst-content p { + word-break: break-word; +} + h1, h2, h3, h4, h5, h6 { font-family: inherit; } diff --git a/docs/_static/js/darkmode.js b/docs/_static/js/darkmode.js index 49cf0eeec..909472587 100644 --- a/docs/_static/js/darkmode.js +++ b/docs/_static/js/darkmode.js @@ -1,47 +1,47 @@ -let toggleButton; -let icon; +let toggleButton +let icon function load() { - "use strict"; + 'use strict' - toggleButton = document.createElement("button"); - toggleButton.setAttribute("title", "Toggle dark mode"); - toggleButton.classList.add("dark-mode-toggle"); - icon = document.createElement("i"); - icon.classList.add("fa", darkModeState ? "fa-sun-o" : "fa-moon-o"); - toggleButton.appendChild(icon); - document.body.prepend(toggleButton); + toggleButton = document.createElement('button') + toggleButton.setAttribute('title', 'Toggle dark mode') + toggleButton.classList.add('dark-mode-toggle') + icon = document.createElement('i') + icon.classList.add('fa', darkModeState ? 'fa-sun-o' : 'fa-moon-o') + toggleButton.appendChild(icon) + document.body.prepend(toggleButton) // Listen for changes in the OS settings // addListener is used because older versions of Safari don't support addEventListener // prefersDarkQuery set in if (prefersDarkQuery) { prefersDarkQuery.addListener(function (evt) { - toggleDarkMode(evt.matches); - }); + toggleDarkMode(evt.matches) + }) } // Initial setting depending on the prefers-color-mode or localstorage // darkModeState should be set in the document to prevent flash - if (darkModeState == undefined) darkModeState = false; - toggleDarkMode(darkModeState); + if (darkModeState == undefined) darkModeState = false + toggleDarkMode(darkModeState) // Toggles the "dark-mode" class on click and sets localStorage state - toggleButton.addEventListener("click", () => { - darkModeState = !darkModeState; + toggleButton.addEventListener('click', () => { + darkModeState = !darkModeState - toggleDarkMode(darkModeState); - localStorage.setItem("dark-mode", darkModeState); - }); + toggleDarkMode(darkModeState) + localStorage.setItem('dark-mode', darkModeState) + }) } function toggleDarkMode(state) { - document.documentElement.classList.toggle("dark-mode", state); - document.documentElement.classList.toggle("light-mode", !state); - icon.classList.remove("fa-sun-o"); - icon.classList.remove("fa-moon-o"); - icon.classList.add(state ? "fa-sun-o" : "fa-moon-o"); - darkModeState = state; + document.documentElement.classList.toggle('dark-mode', state) + document.documentElement.classList.toggle('light-mode', !state) + icon.classList.remove('fa-sun-o') + icon.classList.remove('fa-moon-o') + icon.classList.add(state ? 'fa-sun-o' : 'fa-moon-o') + darkModeState = state } -document.addEventListener("DOMContentLoaded", load); +document.addEventListener('DOMContentLoaded', load) diff --git a/docs/administration.rst b/docs/administration.rst index f6b0ed659..dfb88ff80 100644 --- a/docs/administration.rst +++ b/docs/administration.rst @@ -118,10 +118,10 @@ Then you can start paperless-ngx with ``-d`` to have it run in the background. image: ghcr.io/paperless-ngx/paperless-ngx:latest .. note:: - In version 1.7.1 and onwards, the Docker image can now pinned to a release series. + In version 1.7.1 and onwards, the Docker image can now be pinned to a release series. This is often combined with automatic updaters such as Watchtower to allow safer unattended upgrading to new bugfix releases only. It is still recommended to always - review release notes before upgrading. To ping your install to a release series, edit + review release notes before upgrading. To pin your install to a release series, edit the ``docker-compose.yml`` find the line that says .. code:: @@ -390,8 +390,8 @@ the naming scheme. .. warning:: - Since this command moves you documents around a lot, it is advised to to - a backup before. The renaming logic is robust and will never overwrite + Since this command moves your documents, it is advised to do + a backup beforehand. The renaming logic is robust and will never overwrite or delete a file, but you can't ever be careful enough. .. code:: diff --git a/docs/advanced_usage.rst b/docs/advanced_usage.rst index 4dbb32f36..6449c478b 100644 --- a/docs/advanced_usage.rst +++ b/docs/advanced_usage.rst @@ -7,12 +7,12 @@ easier. .. _advanced-matching: -Matching tags, correspondents and document types -################################################ +Matching tags, correspondents, document types, and storage paths +################################################################ -Paperless will compare the matching algorithms defined by every tag and -correspondent already set in your database to see if they apply to the text in -a document. In other words, if you defined a tag called ``Home Utility`` +Paperless will compare the matching algorithms defined by every tag, correspondent, +document type, and storage path in your database to see if they apply to the text +in a document. In other words, if you define a tag called ``Home Utility`` that had a ``match`` property of ``bc hydro`` and a ``matching_algorithm`` of ``literal``, Paperless will automatically tag your newly-consumed document with your ``Home Utility`` tag so long as the text ``bc hydro`` appears in the body @@ -22,10 +22,10 @@ The matching logic is quite powerful. It supports searching the text of your document with different algorithms, and as such, some experimentation may be necessary to get things right. -In order to have a tag, correspondent, or type assigned automatically to newly -consumed documents, assign a match and matching algorithm using the web -interface. These settings define when to assign correspondents, tags, and types -to documents. +In order to have a tag, correspondent, document type, or storage path assigned +automatically to newly consumed documents, assign a match and matching algorithm +using the web interface. These settings define when to assign tags, correspondents, +document types, and storage paths to documents. The following algorithms are available: @@ -37,7 +37,7 @@ The following algorithms are available: * **Literal:** Matches only if the match appears exactly as provided (i.e. preserve ordering) in the PDF. * **Regular expression:** Parses the match as a regular expression and tries to find a match within the document. -* **Fuzzy match:** I dont know. Look at the source. +* **Fuzzy match:** I don't know. Look at the source. * **Auto:** Tries to automatically match new documents. This does not require you to set a match. See the notes below. @@ -47,9 +47,9 @@ defining a match text of ``"Bank of America" BofA`` using the *any* algorithm, will match documents that contain either "Bank of America" or "BofA", but will not match documents containing "Bank of South America". -Then just save your tag/correspondent and run another document through the -consumer. Once complete, you should see the newly-created document, -automatically tagged with the appropriate data. +Then just save your tag, correspondent, document type, or storage path and run +another document through the consumer. Once complete, you should see the +newly-created document, automatically tagged with the appropriate data. .. _advanced-automatic_matching: @@ -58,9 +58,9 @@ Automatic matching ================== Paperless-ngx comes with a new matching algorithm called *Auto*. This matching -algorithm tries to assign tags, correspondents, and document types to your -documents based on how you have already assigned these on existing documents. It -uses a neural network under the hood. +algorithm tries to assign tags, correspondents, document types, and storage paths +to your documents based on how you have already assigned these on existing documents. +It uses a neural network under the hood. If, for example, all your bank statements of your account 123 at the Bank of America are tagged with the tag "bofa_123" and the matching algorithm of this @@ -80,20 +80,21 @@ feature: that the neural network only learns from documents which you have correctly tagged before. * The matching algorithm can only work if there is a correlation between the - tag, correspondent, or document type and the document itself. Your bank - statements usually contain your bank account number and the name of the bank, - so this works reasonably well, However, tags such as "TODO" cannot be - automatically assigned. + tag, correspondent, document type, or storage path and the document itself. + Your bank statements usually contain your bank account number and the name + of the bank, so this works reasonably well, However, tags such as "TODO" + cannot be automatically assigned. * The matching algorithm needs a reasonable number of documents to identify when - to assign tags, correspondents, and types. If one out of a thousand documents - 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. + to assign tags, correspondents, storage paths, and types. If one out of a + thousand documents 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. + not to assign a certain tag, correspondent, document type, or storage path. 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 #################################### @@ -268,6 +269,17 @@ If paperless detects that two documents share the same filename, paperless will append ``_01``, ``_02``, etc to the filename. This happens if all the placeholders in a filename evaluate to the same value. +.. hint:: + You can affect how empty placeholders are treated by changing the following setting to + `true`. + + .. code:: + + PAPERLESS_FILENAME_FORMAT_REMOVE_NONE=True + + Doing this results in all empty placeholders resolving to "" instead of "none" as stated above. + Spaces before empty placeholders are removed as well, empty directories are omitted. + .. hint:: Paperless checks the filename of a document whenever it is saved. Therefore, @@ -290,3 +302,59 @@ evaluate to the same value. However, keep in mind that inside docker, if files get stored outside of the predefined volumes, they will be lost after a restart of paperless. + + +Storage paths +############# + +One of the best things in Paperless is that you can not only access the documents via the +web interface, but also via the file system. + +When as single storage layout is not sufficient for your use case, storage paths come to +the rescue. Storage paths allow you to configure more precisely where each document is stored +in the file system. + +- Each storage path is a `PAPERLESS_FILENAME_FORMAT` and follows the rules described above +- Each document is assigned a storage path using the matching algorithms described above, but + can be overwritten at any time + +For example, you could define the following two storage paths: + +1. Normal communications are put into a folder structure sorted by `year/correspondent` +2. Communications with insurance companies are stored in a flat structure with longer file names, + but containing the full date of the correspondence. + +.. code:: + + By Year = {created_year}/{correspondent}/{title} + Insurances = Insurances/{correspondent}/{created_year}-{created_month}-{created_day} {title} + + +If you then map these storage paths to the documents, you might get the following result. +For simplicity, `By Year` defines the same structure as in the previous example above. + +.. code:: text + + 2019/ # By Year + My bank/ + Statement January.pdf + Statement February.pdf + + Insurances/ # Insurances + Healthcare 123/ + 2022-01-01 Statement January.pdf + 2022-02-02 Letter.pdf + 2022-02-03 Letter.pdf + Dental 456/ + 2021-12-01 New Conditions.pdf + + +.. hint:: + + Defining a storage path is optional. If no storage path is defined for a document, the global + `PAPERLESS_FILENAME_FORMAT` is applied. + +.. caution:: + + If you adjust the format of an existing storage path, old documents don't get relocated automatically. + You need to run the :ref:`document renamer ` to adjust their pathes. diff --git a/docs/changelog.md b/docs/changelog.md new file mode 100644 index 000000000..9ba2f9aa0 --- /dev/null +++ b/docs/changelog.md @@ -0,0 +1,1947 @@ +# Changelog + +## paperless-ngx 1.7.1 + +### Features + +- (chore) Runs pyupgrade to Python 3.8+ [\@stumpylog](https://github.com/stumpylog) ([\#890](https://github.com/paperless-ngx/paperless-ngx/pull/890)) +- Dockerfile Organization \& Enhancements [\@stumpylog](https://github.com/stumpylog) ([\#888](https://github.com/paperless-ngx/paperless-ngx/pull/888)) +- mobile friendlier manage pages [\@shamoon](https://github.com/shamoon) ([\#873](https://github.com/paperless-ngx/paperless-ngx/pull/873)) +- Use semver for release process [\@stumpylog](https://github.com/stumpylog) ([\#851](https://github.com/paperless-ngx/paperless-ngx/pull/851)) +- Enable Docker Hub push [\@stumpylog](https://github.com/stumpylog) ([\#828](https://github.com/paperless-ngx/paperless-ngx/pull/828)) +- Feature barcode tiff support [\@gador](https://github.com/gador) ([\#766](https://github.com/paperless-ngx/paperless-ngx/pull/766)) +- Updates GHA workflow to rebuild intermediate images on changes [\@stumpylog](https://github.com/stumpylog) ([\#820](https://github.com/paperless-ngx/paperless-ngx/pull/820)) +- Adds simple Python to wait for Redis broker to be ready [\@stumpylog](https://github.com/stumpylog) ([\#788](https://github.com/paperless-ngx/paperless-ngx/pull/788)) +- Update GHA workflow to build all Docker images [\@stumpylog](https://github.com/stumpylog) ([\#761](https://github.com/paperless-ngx/paperless-ngx/pull/761)) + +### Bug Fixes + +- Feature / fix saved view \& sort field query params [\@shamoon](https://github.com/shamoon) ([\#881](https://github.com/paperless-ngx/paperless-ngx/pull/881)) +- mobile friendlier manage pages [\@shamoon](https://github.com/shamoon) ([\#873](https://github.com/paperless-ngx/paperless-ngx/pull/873)) +- Add timeout to healthcheck [\@shamoon](https://github.com/shamoon) ([\#880](https://github.com/paperless-ngx/paperless-ngx/pull/880)) +- Always accept yyyy-mm-dd date inputs [\@shamoon](https://github.com/shamoon) ([\#864](https://github.com/paperless-ngx/paperless-ngx/pull/864)) +- Fix local Docker image building [\@stumpylog](https://github.com/stumpylog) ([\#849](https://github.com/paperless-ngx/paperless-ngx/pull/849)) +- Fix: show errors on invalid date input [\@shamoon](https://github.com/shamoon) ([\#862](https://github.com/paperless-ngx/paperless-ngx/pull/862)) +- Fix: Older dates do not display on frontend [\@shamoon](https://github.com/shamoon) ([\#852](https://github.com/paperless-ngx/paperless-ngx/pull/852)) +- Fixes IMAP UTF8 Authenication [\@stumpylog](https://github.com/stumpylog) ([\#725](https://github.com/paperless-ngx/paperless-ngx/pull/725)) +- Fix password field remains visible [\@shamoon](https://github.com/shamoon) ([\#840](https://github.com/paperless-ngx/paperless-ngx/pull/840)) +- Fixes Pillow build for armv7 [\@stumpylog](https://github.com/stumpylog) ([\#815](https://github.com/paperless-ngx/paperless-ngx/pull/815)) +- Update frontend localization source file [\@shamoon](https://github.com/shamoon) ([\#814](https://github.com/paperless-ngx/paperless-ngx/pull/814)) +- Fix install script extra OCR languages format [\@stumpylog](https://github.com/stumpylog) ([\#777](https://github.com/paperless-ngx/paperless-ngx/pull/777)) + +### Documentation + +- Use semver for release process [\@stumpylog](https://github.com/stumpylog) ([\#851](https://github.com/paperless-ngx/paperless-ngx/pull/851)) +- Deployment: Consolidate tika compose files [\@qcasey](https://github.com/qcasey) ([\#866](https://github.com/paperless-ngx/paperless-ngx/pull/866)) +- Fix local Docker image building [\@stumpylog](https://github.com/stumpylog) ([\#849](https://github.com/paperless-ngx/paperless-ngx/pull/849)) + +### Maintenance + +- Dockerfile Organization \& Enhancements [\@stumpylog](https://github.com/stumpylog) ([\#888](https://github.com/paperless-ngx/paperless-ngx/pull/888)) +- Add timeout to healthcheck [\@shamoon](https://github.com/shamoon) ([\#880](https://github.com/paperless-ngx/paperless-ngx/pull/880)) +- Use semver for release process [\@stumpylog](https://github.com/stumpylog) ([\#851](https://github.com/paperless-ngx/paperless-ngx/pull/851)) +- Deployment: Consolidate tika compose files [\@qcasey](https://github.com/qcasey) ([\#866](https://github.com/paperless-ngx/paperless-ngx/pull/866)) +- Fixes Pillow build for armv7 [\@stumpylog](https://github.com/stumpylog) ([\#815](https://github.com/paperless-ngx/paperless-ngx/pull/815)) +- Update frontend localization source file [\@shamoon](https://github.com/shamoon) ([\#814](https://github.com/paperless-ngx/paperless-ngx/pull/814)) +- Fix install script extra OCR languages format [\@stumpylog](https://github.com/stumpylog) ([\#777](https://github.com/paperless-ngx/paperless-ngx/pull/777)) +- Adds simple Python to wait for Redis broker to be ready [\@stumpylog](https://github.com/stumpylog) ([\#788](https://github.com/paperless-ngx/paperless-ngx/pull/788)) + +### Dependencies + +
+15 changes + +- Bump tj-actions/changed-files from 18.7 to 19 @dependabot ([\#830](https://github.com/paperless-ngx/paperless-ngx/pull/830)) +- Bump asgiref from 3.5.0 to 3.5.1 @dependabot ([\#867](https://github.com/paperless-ngx/paperless-ngx/pull/867)) +- Bump jest from 27.5.1 to 28.0.3 in /src-ui @dependabot ([\#860](https://github.com/paperless-ngx/paperless-ngx/pull/860)) +- Bump @ng-bootstrap/ng-bootstrap from 12.1.0 to 12.1.1 in /src-ui @dependabot ([\#861](https://github.com/paperless-ngx/paperless-ngx/pull/861)) +- Bump @types/node from 17.0.27 to 17.0.29 in /src-ui @dependabot ([\#833](https://github.com/paperless-ngx/paperless-ngx/pull/833)) +- Bump @ng-bootstrap/ng-bootstrap from 12.0.2 to 12.1.0 in /src-ui @dependabot ([\#834](https://github.com/paperless-ngx/paperless-ngx/pull/834)) +- Bump pytest from 7.1.1 to 7.1.2 @dependabot ([\#806](https://github.com/paperless-ngx/paperless-ngx/pull/806)) +- Bump github/codeql-action from 1 to 2 @dependabot ([\#792](https://github.com/paperless-ngx/paperless-ngx/pull/792)) +- Bump imap-tools from 0.53.0 to 0.54.0 @dependabot ([\#758](https://github.com/paperless-ngx/paperless-ngx/pull/758)) +- Bump ocrmypdf from 13.4.2 to 13.4.3 @dependabot ([\#757](https://github.com/paperless-ngx/paperless-ngx/pull/757)) +- Bump importlib-resources from 5.6.0 to 5.7.1 @dependabot ([\#756](https://github.com/paperless-ngx/paperless-ngx/pull/756)) +- Bump tox from 3.24.5 to 3.25.0 @dependabot ([\#692](https://github.com/paperless-ngx/paperless-ngx/pull/692)) +- Bump cypress from 9.5.3 to 9.6.0 in /src-ui @dependabot ([\#800](https://github.com/paperless-ngx/paperless-ngx/pull/800)) +- Bump angular \& tools to 13.3.4 or 13.3.3 [\@shamoon](https://github.com/shamoon) ([\#799](https://github.com/paperless-ngx/paperless-ngx/pull/799)) +- Bump concurrently from 7.0.0 to 7.1.0 in /src-ui @dependabot ([\#797](https://github.com/paperless-ngx/paperless-ngx/pull/797)) +
+ +## paperless-ngx 1.7.0 + +Breaking Changes + +- `PAPERLESS_URL` is now required when using a reverse proxy. See + [\#674](https://github.com/paperless-ngx/paperless-ngx/pull/674). + +Features + +- Allow setting more than one tag in mail rules + [\@jonasc](https://github.com/jonasc) (\#270) +- global drag\'n\'drop [\@shamoon](https://github.com/shamoon) + (\#283). +- Fix: download buttons should disable while waiting + [\@shamoon](https://github.com/shamoon) (\#630). +- Update checker [\@shamoon](https://github.com/shamoon) (\#591). +- Show prompt on password-protected pdfs + [\@shamoon](https://github.com/shamoon) (\#564). +- Filtering query params aka browser navigation for filtering + [\@shamoon](https://github.com/shamoon) (\#540). +- Clickable tags in dashboard widgets + [\@shamoon](https://github.com/shamoon) (\#515). +- Add bottom pagination [\@shamoon](https://github.com/shamoon) + (\#372). +- Feature barcode splitter [\@gador](https://github.com/gador) + (\#532). +- App loading screen [\@shamoon](https://github.com/shamoon) (\#298). +- Use progress bar for delayed buttons + [\@shamoon](https://github.com/shamoon) (\#415). +- Add minimum length for documents text filter + [\@shamoon](https://github.com/shamoon) (\#401). +- Added nav buttons in the document detail view + [\@GruberViktor](https://github.com/gruberviktor) (\#273). +- Improve date keyboard input [\@shamoon](https://github.com/shamoon) + (\#253). +- Color theming [\@shamoon](https://github.com/shamoon) (\#243). +- Parse dates when entered without separators + [\@GruberViktor](https://github.com/gruberviktor) (\#250). + +Bug Fixes + +- add \"localhost\" to ALLOWED_HOSTS + [\@gador](https://github.com/gador) (\#700). +- Fix: scanners table [\@qcasey](https://github.com/qcasey) (\#690). +- Adds wait for file before consuming + [\@stumpylog](https://github.com/stumpylog) (\#483). +- Fix: frontend document editing erases time data + [\@shamoon](https://github.com/shamoon) (\#654). +- Increase length of SavedViewFilterRule + [\@stumpylog](https://github.com/stumpylog) (\#612). +- Fixes attachment filename matching during mail fetching + [\@stumpylog](https://github.com/stumpylog) (\#680). +- Add `PAPERLESS_URL` env variable & CSRF var + [\@shamoon](https://github.com/shamoon) (\#674). +- Fix: download buttons should disable while waiting + [\@shamoon](https://github.com/shamoon) (\#630). +- Fixes downloaded filename, add more consumer ignore settings + [\@stumpylog](https://github.com/stumpylog) (\#599). +- FIX BUG: case-sensitive matching was not possible + [\@danielBreitlauch](https://github.com/danielbreitlauch) (\#594). +- uses shutil.move instead of rename + [\@gador](https://github.com/gador) (\#617). +- Fix npm deps 01.02.22 2 [\@shamoon](https://github.com/shamoon) + (\#610). +- Fix npm dependencies 01.02.22 + [\@shamoon](https://github.com/shamoon) (\#600). +- fix issue 416: implement PAPERLESS_OCR_MAX_IMAGE_PIXELS + [\@hacker-h](https://github.com/hacker-h) (\#441). +- fix: exclude cypress from build in Dockerfile + [\@FrankStrieter](https://github.com/FrankStrieter) (\#526). +- Corrections to pass pre-commit hooks + [\@schnuffle](https://github.com/schnuffle) (\#454). +- Fix 311 unable to click checkboxes in document list + [\@shamoon](https://github.com/shamoon) (\#313). +- Fix imap tools bug [\@stumpylog](https://github.com/stumpylog) + (\#393). +- Fix filterable dropdown buttons arent translated + [\@shamoon](https://github.com/shamoon) (\#366). +- Fix 224: \"Auto-detected date is day before receipt date\" + [\@a17t](https://github.com/a17t) (\#246). +- Fix minor sphinx errors [\@shamoon](https://github.com/shamoon) + (\#322). +- Fix page links hidden [\@shamoon](https://github.com/shamoon) + (\#314). +- Fix: Include excluded items in dropdown count + [\@shamoon](https://github.com/shamoon) (\#263). + +Translation + +- [\@miku323](https://github.com/miku323) contributed to Slovenian + translation. +- [\@FaintGhost](https://github.com/FaintGhost) contributed to Chinese + Simplified translation. +- [\@DarkoBG79](https://github.com/DarkoBG79) contributed to Serbian + translation. +- [Kemal Secer](https://crowdin.com/profile/kemal.secer) contributed + to Turkish translation. +- [\@Prominence](https://github.com/Prominence) contributed to + Belarusian translation. + +Documentation + +- Fix: scanners table [\@qcasey](https://github.com/qcasey) (\#690). +- Add [PAPERLESS\_URL]{.title-ref} env variable & CSRF var + [\@shamoon](https://github.com/shamoon) (\#674). +- Fixes downloaded filename, add more consumer ignore settings + [\@stumpylog](https://github.com/stumpylog) (\#599). +- fix issue 416: implement `PAPERLESS_OCR_MAX_IMAGE_PIXELS` + [\@hacker-h](https://github.com/hacker-h) (\#441). +- Fix minor sphinx errors [\@shamoon](https://github.com/shamoon) + (\#322). + +Maintenance + +- Add `PAPERLESS_URL` env variable & CSRF var + [\@shamoon](https://github.com/shamoon) (\#674). +- Chore: Implement release-drafter action for Changelogs + [\@qcasey](https://github.com/qcasey) (\#669). +- Chore: Add CODEOWNERS [\@qcasey](https://github.com/qcasey) (\#667). +- Support docker-compose v2 in install + [\@stumpylog](https://github.com/stumpylog) (\#611). +- Add Belarusian localization [\@shamoon](https://github.com/shamoon) + (\#588). +- Add Turkish localization [\@shamoon](https://github.com/shamoon) + (\#536). +- Add Serbian localization [\@shamoon](https://github.com/shamoon) + (\#504). +- Create PULL_REQUEST_TEMPLATE.md + [\@shamoon](https://github.com/shamoon) (\#304). +- Add Chinese localization [\@shamoon](https://github.com/shamoon) + (\#247). +- Add Slovenian language for frontend + [\@shamoon](https://github.com/shamoon) (\#315). + +## paperless-ngx 1.6.0 + +This is the first release of the revived paperless-ngx project 🎉. Thank +you to everyone on the paperless-ngx team for your initiative and +excellent teamwork! + +Version 1.6.0 merges several pending PRs from jonaswinkler\'s repo and +includes new feature updates and bug fixes. Major backend and UI changes +include: + +- Updated docs, scripts, CI, and containers to paperless-ngx. +- Updated Python and Angular dependencies. +- Dropped support for Python 3.7. +- Dropped support for Ansible playbooks (thanks + [\@slankes](https://github.com/slankes) \#109). If someone would + like to continue supporting them, please see the [ansible + repo](https://github.com/paperless-ngx/paperless-ngx-ansible). +- Python code is now required to use Black formatting (thanks + [\@kpj](https://github.com/kpj) \#168). +- [\@tribut](https://github.com/tribut) added support for a custom SSO + logout redirect (jonaswinkler\#1258). See + `PAPERLESS_LOGOUT_REDIRECT_URL`. +- [\@shamoon](https://github.com/shamoon) added a loading indicator + when document list is reloading (jonaswinkler\#1297). +- [\@shamoon](https://github.com/shamoon) improved the PDF viewer on + mobile (\#2). +- [\@shamoon](https://github.com/shamoon) added \'any\' / \'all\' and + \'not\' filtering with tags (\#10). +- [\@shamoon](https://github.com/shamoon) added warnings for unsaved + changes, with smart edit buttons (\#13). +- [\@benjaminfrank](https://github.com/benjaminfrank) enabled a + non-root access to port 80 via systemd (\#18). +- [\@tribut](https://github.com/tribut) added simple \"delete to + trash\" functionality (\#24). See `PAPERLESS_TRASH_DIR`. +- [\@amenk](https://github.com/amenk) fixed the search box overlay + menu on mobile (\#32). +- [\@dblitt](https://github.com/dblitt) updated the login form to not + auto-capitalize usernames (\#36). +- [\@evilsidekick293](https://github.com/evilsidekick293) made the + worker timeout configurable (\#37). See `PAPERLESS_WORKER_TIMEOUT`. +- [\@Nicarim](https://github.com/Nicarim) fixed downloads of UTF-8 + formatted documents in Firefox (\#56). +- [\@mweimerskirch](https://github.com/mweimerskirch) sorted the + language dropdown by locale (\#78). +- [\@mweimerskirch](https://github.com/mweimerskirch) enabled the + Czech (\#83) and Danish (\#84) translations. +- [\@cschmatzler](https://github.com/cschmatzler) enabled specifying + the webserver port (\#124). See `PAPERLESS_PORT`. +- [\@muellermartin](https://github.com/muellermartin) fixed an error + when uploading transparent PNGs (\#133). +- [\@shamoon](https://github.com/shamoon) created a slick new logo + (\#165). +- [\@tim-vogel](https://github.com/tim-vogel) fixed exports missing + groups (\#193). + +Known issues: + +- 1.6.0 included a malformed package-lock.json, as a result users who + want to build the docker image themselves need to change line 6 of + the `Dockerfile` to + `RUN npm update npm -g && npm install --legacy-peer-deps`. + +Thank you to the following people for their documentation updates, +fixes, and comprehensive testing: + +[\@m0veax](https://github.com/m0veax), +[\@a17t](https://github.com/a17t), +[\@fignew](https://github.com/fignew), +[\@muued](https://github.com/muued), +[\@bauerj](https://github.com/bauerj), +[\@isigmund](https://github.com/isigmund), +[\@denilsonsa](https://github.com/denilsonsa), +[\@mweimerskirch](https://github.com/mweimerskirch), +[\@alexander-bauer](https://github.com/alexander-bauer), +[\@apeltzer](https://github.com/apeltzer), +[\@tribut](https://github.com/tribut), +[\@yschroeder](https://github.com/yschroeder), +[\@gador](https://github.com/gador), +[\@sAksham-Ar](https://github.com/sAksham-Ar), +[\@sbrunner](https://github.com/sbrunner), +[\@philpagel](https://github.com/philpagel), +[\@davemachado](https://github.com/davemachado), +[\@2600box](https://github.com/2600box), +[\@qcasey](https://github.com/qcasey), +[\@Nicarim](https://github.com/Nicarim), +[\@kpj](https://github.com/kpj), [\@filcuk](https://github.com/filcuk), +[\@Timoms](https://github.com/Timoms), +[\@mattlamb99](https://github.com/mattlamb99), +[\@padraigkitterick](https://github.com/padraigkitterick), +[\@ajkavanagh](https://github.com/ajkavanagh), +[\@Tooa](https://github.com/Tooa), +[\@Unkn0wnCat](https://github.com/Unkn0wnCat), +[\@pewter77](https://github.com/pewter77), +[\@stumpylog](https://github.com/stumpylog), +[\@Toxix](https://github.com/Toxix), +[\@azapater](https://github.com/azapater), +[\@jschpp](https://github.com/jschpp) + +Another big thanks to the people who have contributed translations: + +- Michel Weimerskirch (michel_weimerskirch) suggested 31 translations + into French and Luxembourgish. +- jo.vandeginste suggested 21 translations into Dutch. +- Lars Sørensen (Lrss) suggested 486 translations into Danish. +- Alex (Sky-Dragon) voted for 46 translations in German. +- Yannic Schröder (yschroeder) suggested 14 translations into German. +- David Morais Ferreira (DavidMoraisFerreira) voted for 10 + translations in Portuguese and Luxembourgish. +- David Morais Ferreira (DavidMoraisFerreira) suggested 88 + translations into French, German, Portuguese, Portuguese, Brazilian + and Luxembourgish. +- 汪泠沣 (wlfcss) suggested 13 translations into Chinese Traditional. +- Lars Sørensen (Lrss) suggested 167 translations into Danish. +- Philmo67 suggested 11 translations into French. + +## Paperless-ng + +### paperless-ng 1.5.0 + +Support for Python 3.6 was dropped. + +- Updated python dependencies. +- Base image of the docker image changed from Debian Buster to Debian + Bullseye due to its recent release. +- The docker image now uses python 3.9. +- Added the Luxembourgish locale. Thanks for translating! +- [Daniel Albers](https://github.com/AlD) added support for making the + files and folders ignored by the paperless consume folder scanner + configurable. See `PAPERLESS_CONSUMER_IGNORE_PATTERNS`. + +### paperless-ng 1.4.5 + +This is a maintenance release. + +- Updated Python and Angular dependencies. +- Changed the algorithm that changes permissions during startup. This + is still fast, and will hopefully cause less issues. +- Fixed an issue that would sometimes cause paperless to write an + incomplete classification model file to disk. +- Fixed an issue with the OCRmyPDF parser that would always try to + extract text with PDFminer even from non-PDF files. + +### paperless-ng 1.4.4 + +- Drastically decreased the startup time of the docker container. The + startup script adjusts file permissions of all data only if changes + are required. +- Paperless mail: Added ability to specify the character set for each + server. +- Document consumption: Ignore Mac OS specific files such as + `.DS_STORE` and `._XXXXX.pdf`. +- Fixed an issue with the automatic matching algorithm that prevents + paperless from consuming new files. +- Updated translations. + +### paperless-ng 1.4.3 + +- Additions and changes + - Added Swedish locale. + - [Stéphane Brunner](https://github.com/sbrunner) added an option + to disable the progress bars of all management commands. + - [Jo Vandeginste](https://github.com/jovandeginste) added support + for RTF documents to the Apache TIKA parser. + - [Michael Shamoon](https://github.com/shamoon) added dark mode + for the login and logout pages. + - [Alexander Menk](https://github.com/amenk) added additional + stylesheets for printing. You can now print any page of + paperless and the print result will hide the page header, + sidebar, and action buttons. + - Added support for sorting when using full text search. +- Fixes + - [puuu](https://github.com/puuu) fixed + `PAPERLESS_FORCE_SCRIPT_NAME`. You can now host paperless on sub + paths such as `https://localhost:8000/paperless/`. + - Fixed an issue with the document consumer crashing on certain + documents due to issues with pdfminer.six. This library is used + for PDF text extraction. + +### paperless-ng 1.4.2 + +- Fixed an issue with `sudo` that caused paperless to not start on + many Raspberry Pi devices. Thank you + [WhiteHatTux](https://github.com/WhiteHatTux)! + +### paperless-ng 1.4.1 + +- Added Polish locale. +- Changed some parts of the Dockerfile to hopefully restore + functionality on certain ARM devices. +- Updated python dependencies. +- [Michael Shamoon](https://github.com/shamoon) added a sticky filter + / bulk edit bar. +- [sbrl](https://github.com/sbrl) changed the docker-entrypoint.sh + script to increase compatibility with NFS shares. +- [Chris Nagy](https://github.com/what-name) added support for + creating a super user by passing `PAPERLESS_ADMIN_USER` and + `PAPERLESS_ADMIN_PASSWORD` as environment variables to the docker + container. + +### paperless-ng 1.4.0 + +- Docker images now use tesseract 4.1.1, which should fix a series of + issues with OCR. +- The full text search now displays results using the default document + list. This enables selection, filtering and bulk edit on search + results. +- Changes + - Firefox only: Highlight search query in PDF previews. + - New URL pattern for accessing documents by ASN directly + (\/asn/123) + - Added logging when executing pre\* and post-consume scripts. + - Better error logging during document consumption. + - Updated python dependencies. + - Automatically inserts typed text when opening \"Create new\" + dialogs on the document details page. +- Fixes + - Fixed an issue with null characters in the document content. + +::: {.note} +::: {.title} +Note +::: + +The changed to the full text searching require you to reindex your +documents. _The docker image does this automatically, you don\'t need to +do anything._ To do this, execute the `document_index reindex` +management command (see `administration-index`{.interpreted-text +role="ref"}). +::: + +### paperless-ng 1.3.2 + +- Added translation into Portuguese. +- Changes + - The exporter now exports user accounts, mail accounts, mail + rules and saved views as well. +- Fixes + - Minor layout issues with document cards and the log viewer. + - Fixed an issue with any/all/exact matching when characters used + in regular expressions were used for the match. + +### paperless-ng 1.3.1 + +- Added translation into Spanish and Russian. +- Other changes + - ISO-8601 date format will now always show years with 4 digits. + - Added the ability to search for a document with a specific ASN. + - The document cards now display ASN, types and dates in a more + organized way. + - Added document previews when hovering over the preview button. +- Fixes + - The startup check for write permissions now works properly on + NFS shares. + - Fixed an issue with the search results score indicator. + - Paperless was unable to generate thumbnails for encrypted PDF + files and failed. Paperless will now generate a default + thumbnail for these files. + - Fixed `AUTO_LOGIN_USERNAME`: Unable to perform POST/PUT/DELETE + requests and unable to receive WebSocket messages. + +### paperless-ng 1.3.0 + +This release contains new database migrations. + +- Changes + - The REST API is versioned from this point onwards. This will + allow me to make changes without breaking existing clients. See + the documentation about `api-versioning`{.interpreted-text + role="ref"} for details. + - Added a color picker for tag colors. + - Added the ability to use the filter for searching the document + content as well. + - Added translations into Italian and Romanian. Thank you! + - Close individual documents from the sidebar. Thanks to [Michael + Shamoon](https://github.com/shamoon). + - [BolkoSchreiber](https://github.com/BolkoSchreiber) added an + option to disable/enable thumbnail inversion in dark mode. + - [Simon Taddiken](https://github.com/skuzzle) added the ability + to customize the header used for remote user authentication with + SSO applications. +- Bug fixes + - Fixed an issue with the auto matching algorithm when more than + 256 tags were used. + +### paperless-ng 1.2.1 + +- [Rodrigo Avelino](https://github.com/rodavelino) translated + Paperless into Portuguese (Brazil)! +- The date input fields now respect the currently selected date + format. +- Added a fancy icon when adding paperless to the home screen on iOS + devices. Thanks to [Joel Nordell](https://github.com/joelnordell). +- When using regular expression matching, the regular expression is + now validated before saving the tag/correspondent/type. +- Regression fix: Dates on the front end did not respect date locale + settings in some cases. + +### 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 + `configuration-ocr`{.interpreted-text role="ref"}. + - 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`. + +### 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 + `configuration-docker`{.interpreted-text role="ref"}. +- 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 `utilities-sanity-checker`{.interpreted-text + role="ref"}. +- 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 + `utilities-management-commands`{.interpreted-text role="ref"}. + +### 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} + ::: {.title} + 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: + + ``` + 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 + `this note `{.interpreted-text role="ref"}. + ::: + +- 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 + `updated documentation `{.interpreted-text + role="ref"} 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](http://github.com/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](https://github.com/jovandeginste), + Paperless has optional support for Office documents such as .docx, + .doc, .odt and more. + - See the `configuration`{.interpreted-text + role="ref"} 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](https://github.com/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](https://github.com/sisao). + - Revamped search bar styling thanks to [Michael + Shamoon](https://github.com/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](https://github.com/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](https://github.com/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](https://github.com/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](https://github.com/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} +::: {.title} +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 +`running the management command document_index with the argument reindex `{.interpreted-text +role="ref"}. +::: + +### 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](https://github.com/shamoon)! + - Page navigation controls for the document viewer, thanks to + [Michael Shamoon](https://github.com/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](https://github.com/shamoon), paperless now comes with a + much more streamlined UI for filtering documents. + - [Michael Shamoon](https://github.com/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](https://github.com/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} +::: {.title} +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 `configuration-ocr`{.interpreted-text role="ref"} 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 + `document_archiver `{.interpreted-text + role="ref"} can be used to create archived versions for already + existing documents. +- Tags from consumption folder. + - Thanks to [jayme-github](http://github.com/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 + `api-file_uploads`{.interpreted-text role="ref"}. + - 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 `administration-index`{.interpreted-text + role="ref"}) 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 + `information about the query syntax `{.interpreted-text + role="ref"}. +- 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 + +- Moved documentation of the settings to the actual documentation. +- Updated release script to force the user to choose between SQLite + and PostgreSQL. This avoids confusion when upgrading from paperless. + +### paperless-ng 0.9.0 + +- **Deprecated:** GnuPG. + `See this note on the state of GnuPG in paperless-ng. `{.interpreted-text + role="ref"} This features will most likely be removed in future + versions. +- **Added:** New frontend. Features: + - Single page application: It\'s much more responsive than the + django admin pages. + - 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 on the query. It uses a document search index in + the background. + - Saveable filters. + - Better log viewer. +- **Added:** Document types. Assign these to documents just as + correspondents. They may be used in the future to perform automatic + operations on documents depending on the type. +- **Added:** Inbox tags. Define an inbox tag and it will automatically + be assigned to any new document scanned into the system. +- **Added:** Automatic matching. A new matching algorithm that + automatically assigns tags, document types and correspondents to + your documents. It uses a neural network trained on your data. +- **Added:** Archive serial numbers. Assign these to quickly find + documents stored in physical binders. +- **Added:** Enabled the internal user management of django. This + isn\'t really a multi user solution, however, it allows more than + one user to access the website and set some basic permissions / + renew passwords. +- **Modified \[breaking\]:** All new mail consumer with customizable + filters, actions and multiple account support. Replaces the old mail + consumer. The new mail consumer needs different configuration but + can be configured to act exactly like the old consumer. +- **Modified:** Changes to the consumer: + - Now uses the excellent watchdog library that should make sure + files are discovered no matter what the platform is. + - The consumer now uses a task scheduler to run consumption + processes in parallel. This means that consuming many documents + should be much faster on systems with many cores. + - Concurrency is controlled with the new settings + `PAPERLESS_TASK_WORKERS` and `PAPERLESS_THREADS_PER_WORKER`. See + TODO for details on concurrency. + - The consumer no longer blocks the database for extended periods + of time. + - An issue with tesseract running multiple threads per page and + slowing down the consumer was fixed. +- **Modified \[breaking\]:** REST Api changes: + - New filters added, other filters removed (case sensitive + filters, slug filters) + - Endpoints for thumbnails, previews and downloads replace the old + `/fetch/` urls. Redirects are in place. + - Endpoint for document uploads replaces the old `/push` url. + Redirects are in place. + - Foreign key relationships are now served as IDs, not as urls. +- **Modified \[breaking\]:** PostgreSQL: + - 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 `utilities-retagger`{.interpreted-text role="ref"} for + details. Replaces `document_correspondents` management command. +- **Removed \[breaking\]:** Reminders. +- **Removed:** All customizations made to the django admin pages. +- **Removed \[breaking\]:** The docker image no longer supports SSL. + If you want to expose paperless to the internet, hide paperless + behind a proxy server that handles SSL requests. +- **Internal changes:** Mostly code cleanup, including: + - Rework of the code of the tesseract parser. This is now a lot + cleaner. + - Rework of the filename handling code. It was a mess. + - Fixed some issues with the document exporter not exporting all + documents when encountering duplicate filenames. + - Added a task scheduler that takes care of checking mail, + training the classifier, maintaining the document search index + and consuming documents. + - Updated dependencies. Now uses Pipenv all around. + - Updated Dockerfile and docker-compose. Now uses `supervisord` to + run everything paperless-related in a single container. +- **Settings:** + - `PAPERLESS_FORGIVING_OCR` is now default and gone. Reason: Even + if `langdetect` fails to detect a language, tesseract still does + a very good job at ocr\'ing a document with the default + language. 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. + - `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 optimization. This is useful on less powerful devices. +- Many more small changes here and there. The usual stuff. + +## Paperless + +### 2.7.0 + +- [syntonym](https://github.com/syntonym) submitted a pull request to + catch IMAP connection errors + [\#475](https://github.com/the-paperless-project/paperless/pull/475). +- [Stéphane Brunner](https://github.com/sbrunner) added `psycopg2` to + the Pipfile + [\#489](https://github.com/the-paperless-project/paperless/pull/489). + He also fixed a syntax error in `docker-compose.yml.example` + [\#488](https://github.com/the-paperless-project/paperless/pull/488) + and added [DjangoQL](https://github.com/ivelum/djangoql), which + allows a litany of handy search functionality + [\#492](https://github.com/the-paperless-project/paperless/pull/492). +- [CkuT](https://github.com/CkuT) and + [JOKer](https://github.com/MasterofJOKers) hacked out a simple, but + super-helpful optimisation to how the thumbnails are served up, + improving performance considerably + [\#481](https://github.com/the-paperless-project/paperless/pull/481). +- [tsia](https://github.com/tsia) added a few fields to the tags REST + API. + [\#483](https://github.com/the-paperless-project/paperless/pull/483). +- [Brian Cribbs](https://github.com/cribbstechnolog) improved the + documentation to help people using Paperless over NFS + [\#484](https://github.com/the-paperless-project/paperless/pull/484). +- [Brendan M. Sleight](https://github.com/bmsleight) updated the + documentation to include a note for setting the `DEBUG` value. The + `paperless.conf.example` file was also updated to mirror the project + defaults. + +### 2.6.1 + +- We now have a logo, complete with a favicon :-) +- Removed some problematic tests. +- Fix the docker-compose example config to include a shared consume + volume so that using the push API will work for users of the Docker + install. Thanks to [Colin Frei](https://github.com/colinfrei) for + fixing this in + [\#466](https://github.com/the-paperless-project/paperless/pull/466). +- [khrise](https://github.com/khrise) submitted a pull request to + include the `added` property to the REST API + [\#471](https://github.com/the-paperless-project/paperless/pull/471). + +### 2.6.0 + +- Allow an infinite number of logs to be deleted. Thanks to + [Ulli](https://github.com/Ulli2k) for noting the problem in + [\#433](https://github.com/the-paperless-project/paperless/issues/433). +- Fix the `RecentCorrespondentsFilter` correspondents filter that was + added in 2.4 to play nice with the defaults. Thanks to + [tsia](https://github.com/tsia) and + [Sblop](https://github.com/Sblop) who pointed this out. + [\#423](https://github.com/the-paperless-project/paperless/issues/423). +- Updated dependencies to include (among other things) a security + patch to requests. +- Fix text in sample data for tests so that the language guesser stops + thinking that everything is in Catalan because we had _Lorem ipsum_ + in there. +- Tweaked the gunicorn sample command to use filesystem paths instead + of Python paths. + [\#441](https://github.com/the-paperless-project/paperless/pull/441) +- Added pretty colour boxes next to the hex values in the Tags + section, thanks to a pull request from [Joshua + Taillon](https://github.com/jat255) + [\#442](https://github.com/the-paperless-project/paperless/pull/442). +- Added a `.editorconfig` file to better specify coding style. +- [Joshua Taillon](https://github.com/jat255) also added some logic to + tie Paperless\' date guessing logic into how it parses file names on + import. + [\#440](https://github.com/the-paperless-project/paperless/pull/440) + +### 2.5.0 + +- **New dependency**: Paperless now optimises thumbnail generation + with [optipng](http://optipng.sourceforge.net/), so you\'ll need to + install that somewhere in your PATH or declare its location in + `PAPERLESS_OPTIPNG_BINARY`. The Docker image has already been + updated on the Docker Hub, so you just need to pull the latest one + from there if you\'re a Docker user. +- \"Login free\" instances of Paperless were breaking whenever you + tried to edit objects in the admin: adding/deleting tags or + correspondents, or even fixing spelling. This was due to the \"user + hack\" we were applying to sessions that weren\'t using a login, as + that hack user didn\'t have a valid id. The fix was to attribute the + first user id in the system to this hack user. + [\#394](https://github.com/the-paperless-project/paperless/issues/394) +- A problem in how we handle slug values on Tags and Correspondents + required a few changes to how we handle this field + [\#393](https://github.com/the-paperless-project/paperless/issues/393): + 1. Slugs are no longer editable. They\'re derived from the name of + the tag or correspondent at save time, so if you wanna change + the slug, you have to change the name, and even then you\'re + restricted to the rules of the `slugify()` function. The slug + value is still visible in the admin though. + 2. I\'ve added a migration to go over all existing tags & + correspondents and rewrite the `.slug` values to ones conforming + to the `slugify()` rules. + 3. The consumption process now uses the same rules as `.save()` in + determining a slug and using that to check for an existing + tag/correspondent. +- An annoying bug in the date capture code was causing some bogus + dates to be attached to documents, which in turn busted the UI. + Thanks to [Andrew Peng](https://github.com/pengc99) for reporting + this. + [\#414](https://github.com/the-paperless-project/paperless/issues/414). +- A bug in the Dockerfile meant that Tesseract language files weren\'t + being installed correctly. [euri10](https://github.com/euri10) was + quick to provide a fix: + [\#406](https://github.com/the-paperless-project/paperless/issues/406), + [\#413](https://github.com/the-paperless-project/paperless/pull/413). +- Document consumption is now wrapped in a transaction as per an old + ticket + [\#262](https://github.com/the-paperless-project/paperless/issues/262). +- The `get_date()` functionality of the parsers has been consolidated + onto the `DocumentParser` class since much of that code was + redundant anyway. + +### 2.4.0 + +- A new set of actions are now available thanks to + [jonaswinkler](https://github.com/jonaswinkler)\'s very first pull + request! You can now do nifty things like tag documents in bulk, or + set correspondents in bulk. + [\#405](https://github.com/the-paperless-project/paperless/pull/405) +- The import/export system is now a little smarter. By default, + documents are tagged as `unencrypted`, since exports are by their + nature unencrypted. It\'s now in the import step that we decide the + storage type. This allows you to export from an encrypted system and + import into an unencrypted one, or vice-versa. +- The migration history has been slightly modified to accommodate + PostgreSQL users. Additionally, you can now tell paperless to use + PostgreSQL simply by declaring `PAPERLESS_DBUSER` in your + environment. This will attempt to connect to your Postgres database + without a password unless you also set `PAPERLESS_DBPASS`. +- A bug was found in the REST API filter system that was the result of + an update of django-filter some time ago. This has now been patched + in + [\#412](https://github.com/the-paperless-project/paperless/issues/412). + Thanks to [thepill](https://github.com/thepill) for spotting it! + +### 2.3.0 + +- Support for consuming plain text & markdown documents was added by + [Joshua Taillon](https://github.com/jat255)! This was a + long-requested feature, and it\'s addition is likely to be greatly + appreciated by the community: + [\#395](https://github.com/the-paperless-project/paperless/pull/395) + Thanks also to [David Martin](https://github.com/ddddavidmartin) for + his assistance on the issue. +- [dubit0](https://github.com/dubit0) found & fixed a bug that + prevented management commands from running before we had an + operational database: + [\#396](https://github.com/the-paperless-project/paperless/pull/396) +- Joshua also added a simple update to the thumbnail generation + process to improve performance: + [\#399](https://github.com/the-paperless-project/paperless/pull/399) +- As his last bit of effort on this release, Joshua also added some + code to allow you to view the documents inline rather than download + them as an attachment. + [\#400](https://github.com/the-paperless-project/paperless/pull/400) +- Finally, [ahyear](https://github.com/ahyear) found a slip in the + Docker documentation and patched it. + [\#401](https://github.com/the-paperless-project/paperless/pull/401) + +### 2.2.1 + +- [Kyle Lucy](https://github.com/kmlucy) reported a bug quickly after + the release of 2.2.0 where we broke the `DISABLE_LOGIN` feature: + [\#392](https://github.com/the-paperless-project/paperless/issues/392). + +### 2.2.0 + +- Thanks to [dadosch](https://github.com/dadosch), [Wolfgang + Mader](https://github.com/wmader), and [Tim + Brooks](https://github.com/brookst) this is the first version of + Paperless that supports Django 2.0! As a result of their hard work, + you can now also run Paperless on Python 3.7 as well: + [\#386](https://github.com/the-paperless-project/paperless/issues/386) + & + [\#390](https://github.com/the-paperless-project/paperless/pull/390). +- [Stéphane Brunner](https://github.com/sbrunner) added a few lines of + code that made tagging interface a lot easier on those of us with + lots of different tags: + [\#391](https://github.com/the-paperless-project/paperless/pull/391). +- [Kilian Koeltzsch](https://github.com/kiliankoe) noticed a bug in + how we capture & automatically create tags, so that\'s fixed now + too: + [\#384](https://github.com/the-paperless-project/paperless/issues/384). +- [erikarvstedt](https://github.com/erikarvstedt) tweaked the + behaviour of the test suite to be better behaved for packaging + environments: + [\#383](https://github.com/the-paperless-project/paperless/pull/383). +- [Lukasz Soluch](https://github.com/LukaszSolo) added CORS support to + make building a new Javascript-based front-end cleaner & easier: + [\#387](https://github.com/the-paperless-project/paperless/pull/387). + +### 2.1.0 + +- [Enno Lohmeier](https://github.com/elohmeier) added three simple + features that make Paperless a lot more user (and developer) + friendly: + 1. There\'s a new search box on the front page: + [\#374](https://github.com/the-paperless-project/paperless/pull/374). + 2. The correspondents & tags pages now have a column showing the + number of relevant documents: + [\#375](https://github.com/the-paperless-project/paperless/pull/375). + 3. The Dockerfile has been tweaked to build faster for those of us + who are doing active development on Paperless using the Docker + environment: + [\#376](https://github.com/the-paperless-project/paperless/pull/376). +- You now also have the ability to customise the interface to your + heart\'s content by creating a file called `overrides.css` and/or + `overrides.js` in the root of your media directory. Thanks to [Mark + McFate](https://github.com/SummittDweller) for this idea: + [\#371](https://github.com/the-paperless-project/paperless/issues/371) + +### 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. + +The reasons for this are many, but it boils down to that the encryption +wasn\'t really all that useful, as files on-disk were still accessible +so long as you had the key, and the key was most typically stored in the +config file. In other words, your files are only as safe as the +`paperless` user is. In addition to that, _the contents of the documents +were never encrypted_, so important numbers etc. were always accessible +simply by querying the database. Still, it was better than nothing, but +the consensus from users appears to be that it was more an annoyance +than anything else, so this feature is now turned off unless you +explicitly set a passphrase in your config file. + +### Migrating from 1.x + +Encryption isn\'t gone, it\'s just off for new users. So long as you +have `PAPERLESS_PASSPHRASE` set in your config or your environment, +Paperless should continue to operate as it always has. If however, you +want to drop encryption too, you only need to do two things: + +1. Run + `./manage.py migrate && ./manage.py change_storage_type gpg unencrypted`. + This will go through your entire database and Decrypt All The + Things. +2. Remove `PAPERLESS_PASSPHRASE` from your `paperless.conf` file, or + simply stop declaring it in your environment. + +Special thanks to [erikarvstedt](https://github.com/erikarvstedt), +[matthewmoto](https://github.com/matthewmoto), and +[mcronce](https://github.com/mcronce) who did the bulk of the work on +this big change. + +### 1.4.0 + +- [Quentin Dawans](https://github.com/ovv) has refactored the document + consumer to allow for some command-line options. Notably, you can + now direct it to consume from a particular `--directory`, limit the + `--loop-time`, set the time between mail server checks with + `--mail-delta` or just run it as a one-off with `--one-shot`. See + [\#305](https://github.com/the-paperless-project/paperless/issues/305) + & + [\#313](https://github.com/the-paperless-project/paperless/pull/313) + for more information. +- Refactor the use of travis/tox/pytest/coverage into two files: + `.travis.yml` and `setup.cfg`. +- Start generating requirements.txt from a Pipfile. I\'ll probably + switch over to just using pipenv in the future. +- All for a alternative FreeBSD-friendly location for + `paperless.conf`. Thanks to [Martin + Arendtsen](https://github.com/Arendtsen) who provided this + ([\#322](https://github.com/the-paperless-project/paperless/pull/322)). +- Document consumption events are now logged in the Django admin + events log. Thanks to [CkuT](https://github.com/CkuT) for doing the + legwork on this one and to [Quentin Dawans](https://github.com/ovv) + & [David Martin](https://github.com/ddddavidmartin) for helping to + coordinate & work out how the feature would be developed. +- [erikarvstedt](https://github.com/erikarvstedt) contributed a pull + request + ([\#328](https://github.com/the-paperless-project/paperless/pull/328)) + to add `--noreload` to the default server start process. This helps + reduce the load imposed by the running webservice. +- Through some discussion on + [\#253](https://github.com/the-paperless-project/paperless/issues/253) + and + [\#323](https://github.com/the-paperless-project/paperless/issues/323), + we\'ve removed a few of the hardcoded URL values to make it easier + for people to host Paperless on a subdirectory. Thanks to [Quentin + Dawans](https://github.com/ovv) and [Kyle + Lucy](https://github.com/kmlucy) for helping to work this out. +- The clickable area for documents on the listing page has been + increased to a more predictable space thanks to a glorious hack from + [erikarvstedt](https://github.com/erikarvstedt) in + [\#344](https://github.com/the-paperless-project/paperless/pull/344). +- [Strubbl](https://github.com/strubbl) noticed an annoying bug in the + bash script wrapping the Docker entrypoint and fixed it with some + very creating Bash skills: + [\#352](https://github.com/the-paperless-project/paperless/pull/352). +- You can now use the search field to find documents by tag thanks to + [thinkjk](https://github.com/thinkjk)\'s _first ever issue_: + [\#354](https://github.com/the-paperless-project/paperless/issues/354). +- Inotify is now being used to detect additions to the consume + directory thanks to some excellent work from + [erikarvstedt](https://github.com/erikarvstedt) on + [\#351](https://github.com/the-paperless-project/paperless/pull/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](https://github.com/matthewmoto): + [\#295](https://github.com/the-paperless-project/paperless/pull/295). + Note that logins are still required by default, and that you need to + disable them by setting `PAPERLESS_DISABLE_LOGIN="true"` in your + environment or in `/etc/paperless.conf`. +- Fix for + [\#303](https://github.com/the-paperless-project/paperless/issues/303) + where sketchily-formatted documents could cause the consumer to + break and insert half-records into the database breaking all sorts + of things. We now capture the return codes of both `convert` and + `unpaper` and fail-out nicely. +- Fix for additional date types thanks to input from + [Isaac](https://github.com/isaacsando) and code from + [BastianPoe](https://github.com/BastianPoe) + ([\#301](https://github.com/the-paperless-project/paperless/issues/301)). +- Fix for running migrations in the Docker container + ([\#299](https://github.com/the-paperless-project/paperless/issues/299)). + Thanks to [Georgi Todorov](https://github.com/TeraHz) for the fix + ([\#300](https://github.com/the-paperless-project/paperless/pull/300)) + and to [Pit](https://github.com/pitkley) for the review. +- Fix for Docker cases where the issuing user is not UID 1000. This + was a collaborative fix between [Jeffrey + Portman](https://github.com/ChromoX) and + [Pit](https://github.com/pitkley) in + [\#311](https://github.com/the-paperless-project/paperless/pull/311) + and + [\#312](https://github.com/the-paperless-project/paperless/pull/312) + to fix + [\#306](https://github.com/the-paperless-project/paperless/issues/306). +- Patch the historical migrations to support MySQL\'s um, + _interesting_ way of handing indexes + ([\#308](https://github.com/the-paperless-project/paperless/issues/308)). + Thanks to [Simon Taddiken](https://github.com/skuzzle) for reporting + the 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](https://github.com/addadi) and + [Pit](https://github.com/pitkley). This new image is dramatically + smaller than the Debian-based one, and it also has [a new home on + Docker Hub](https://hub.docker.com/r/danielquinn/paperless/). A + proper thank-you to [Pit](https://github.com/pitkley) for hosting + the image on his Docker account all this time, but after some + discussion, we decided the image needed a more _official-looking_ + home. +- [BastianPoe](https://github.com/BastianPoe) has added the + long-awaited feature to automatically skip the OCR step when the PDF + already contains text. This can be overridden by setting + `PAPERLESS_OCR_ALWAYS=YES` either in your `paperless.conf` or in the + environment. Note that this also means that Paperless now requires + `libpoppler-cpp-dev` to be installed. **Important**: You\'ll need to + run `pip install -r requirements.txt` after the usual `git pull` to + properly update. +- [BastianPoe](https://github.com/BastianPoe) has also contributed a + monumental amount of work + ([\#291](https://github.com/the-paperless-project/paperless/pull/291)) + to solving + [\#158](https://github.com/the-paperless-project/paperless/issues/158): + setting the document creation date based on finding a date in the + document text. + +### 1.1.0 + +- Fix for + [\#283](https://github.com/the-paperless-project/paperless/issues/283), + a redirect bug which broke interactions with paperless-desktop. + Thanks to [chris-aeviator](https://github.com/chris-aeviator) for + reporting it. +- Addition of an optional new financial year filter, courtesy of + [David Martin](https://github.com/ddddavidmartin) + [\#256](https://github.com/the-paperless-project/paperless/pull/256) +- Fixed a typo in how thumbnails were named in exports + [\#285](https://github.com/the-paperless-project/paperless/pull/285), + courtesy of [Dan Panzarella](https://github.com/pzl) + +### 1.0.0 + +- Upgrade to Django 1.11. **You\'ll need to run \`\`pip install -r + requirements.txt\`\` after the usual \`\`git pull\`\` to properly + update**. +- Replace the templatetag-based hack we had for document listing in + favour of a slightly less ugly solution in the form of another + template tag with less copypasta. +- Support for multi-word-matches for auto-tagging thanks to an + excellent patch from [ishirav](https://github.com/ishirav) + [\#277](https://github.com/the-paperless-project/paperless/pull/277). +- Fixed a CSS bug reported by [Stefan Hagen](https://github.com/xkpd3) + that caused an overlapping of the text and checkboxes under some + resolutions + [\#272](https://github.com/the-paperless-project/paperless/issues/272). +- Patched the Docker config to force the serving of static files. + Credit for this one goes to [dev-rke](https://github.com/dev-rke) + via + [\#248](https://github.com/the-paperless-project/paperless/issues/248). +- Fix file permissions during Docker start up thanks to + [Pit](https://github.com/pitkley) on + [\#268](https://github.com/the-paperless-project/paperless/pull/268). +- Date fields in the admin are now expressed as HTML5 date fields + thanks to [Lukas Winkler](https://github.com/Findus23)\'s issue + [\#278](https://github.com/the-paperless-project/paperless/issues/248) + +### 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](https://github.com/maphy-psd)\'s work on + [\#255](https://github.com/the-paperless-project/paperless/pull/255). + +### 0.7.0 + +- **Potentially breaking change**: As per + [\#235](https://github.com/the-paperless-project/paperless/issues/235), + Paperless will no longer automatically delete documents attached to + correspondents when those correspondents are themselves deleted. + This was Django\'s default behaviour, but didn\'t make much sense in + Paperless\' case. Thanks to [Thomas + Brueggemann](https://github.com/thomasbrueggemann) and [David + Martin](https://github.com/ddddavidmartin) for their input on this + one. +- Fix for + [\#232](https://github.com/the-paperless-project/paperless/issues/232) + wherein Paperless wasn\'t recognising `.tif` files properly. Thanks + to [ayounggun](https://github.com/ayounggun) for reporting this one + and to [Kusti Skytén](https://github.com/kskyten) 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. +- Fix the POST API so it actually works. + [\#236](https://github.com/the-paperless-project/paperless/issues/236) +- **Breaking change**: We\'ve dropped the use of + `PAPERLESS_SHARED_SECRET` as it was being used both for the API (now + replaced with a normal auth) and form email polling. Now that we\'re + only using it for email, this variable has been renamed to + `PAPERLESS_EMAIL_SECRET`. The old value will still work for a while, + but you should change your config if you\'ve been using the email + polling feature. Thanks to [Joshua + Gilman](https://github.com/jmgilman) for all the help with this + feature. + +### 0.5.0 + +- Support for fuzzy matching in the auto-tagger & auto-correspondent + systems thanks to [Jake Gysland](https://github.com/jgysland)\'s + patch + [\#220](https://github.com/the-paperless-project/paperless/pull/220). +- Modified the Dockerfile to prepare an export directory + ([\#212](https://github.com/the-paperless-project/paperless/pull/212)). + Thanks to combined efforts from [Pit](https://github.com/pitkley) + and [Strubbl](https://github.com/strubbl) in working out the kinks + on this one. +- Updated the import/export scripts to include support for thumbnails. + Big thanks to [CkuT](https://github.com/CkuT) for finding this + shortcoming and doing the work to get it fixed in + [\#224](https://github.com/the-paperless-project/paperless/pull/224). +- All of the following changes are thanks to [David + Martin](https://github.com/ddddavidmartin): \* Bumped the dependency on pyocr to 0.4.7 so new users can make use + of Tesseract 4 if they so prefer + ([\#226](https://github.com/the-paperless-project/paperless/pull/226)). + - Fixed a number of issues with the automated mail handler + ([\#227](https://github.com/the-paperless-project/paperless/pull/227), + [\#228](https://github.com/the-paperless-project/paperless/pull/228)) + - Amended the documentation for better handling of systemd service + files + ([\#229](https://github.com/the-paperless-project/paperless/pull/229)) + - Amended the Django Admin configuration to have nice headers + ([\#230](https://github.com/the-paperless-project/paperless/pull/230)) + +### 0.4.1 + +- Fix for + [\#206](https://github.com/the-paperless-project/paperless/issues/206) + wherein the pluggable parser didn\'t recognise files with all-caps + suffixes like `.PDF` + +### 0.4.0 + +- Introducing reminders. See + [\#199](https://github.com/the-paperless-project/paperless/issues/199) + for more information, but the short explanation is that you can now + attach simple notes & times to documents which are made available + via the API. Currently, the default API (basically just the Django + admin) doesn\'t really make use of this, but [Thomas + Brueggemann](https://github.com/thomasbrueggemann) over at + [Paperless + Desktop](https://github.com/thomasbrueggemann/paperless-desktop) has + said that he would like to make use of this feature in his project. + +### 0.3.6 + +- Fix for + [\#200](https://github.com/the-paperless-project/paperless/issues/200) + (!!) where the API wasn\'t configured to allow updating the + correspondent or the tags for a document. +- The `content` field is now optional, to allow for the edge case of a + purely graphical document. +- You can no longer add documents via the admin. This never worked in + the first place, so all I\'ve done here is remove the link to the + broken form. +- The consumer code has been heavily refactored to support a pluggable + interface. Install a paperless consumer via pip and tell paperless + about it with an environment variable, and you\'re good to go. + Proper 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. +- Users can now configure the number of items per page. +- Fix for + [\#171](https://github.com/the-paperless-project/paperless/issues/171): + Allow users to specify their own `SECRET_KEY` value. +- Moved the dotenv loading to the top of settings.py +- Fix for + [\#112](https://github.com/the-paperless-project/paperless/issues/112): + Added checks for binaries required for document 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 non-profit situation as their free license prohibits for-profit + use. As a result, I can\'t bundle Suit with Paperless without + conflicting with the GPL. Further development will be done against + the stock Django admin. +- I shrunk the thumbnails a little \'cause they were too big for me, + even on my high-DPI monitor. +- BasicAuth support for document and thumbnail downloads, as well as + the Push API thanks to \@thomasbrueggemann. See + [\#179](https://github.com/the-paperless-project/paperless/pull/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](https://github.com/the-paperless-project/paperless/issues/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. +- Consumer loop time is now configurable for systems with slow writes. + Just set `PAPERLESS_CONSUMER_LOOP_TIME` to a number of seconds. The + default is 10. +- As per + [\#44](https://github.com/the-paperless-project/paperless/issues/44), + we\'ve removed support for `PAPERLESS_CONVERT`, `PAPERLESS_CONSUME`, + and `PAPERLESS_SECRET`. Please use `PAPERLESS_CONVERT_BINARY`, + `PAPERLESS_CONSUMPTION_DIR`, and `PAPERLESS_SHARED_SECRET` + respectively instead. + +### 0.2.0 + +- [\#150](https://github.com/the-paperless-project/paperless/pull/150): + The media root is now a variable you can set in `paperless.conf`. +- [\#148](https://github.com/the-paperless-project/paperless/pull/148): + The database location (sqlite) is now a variable you can set in + `paperless.conf`. +- [\#146](https://github.com/the-paperless-project/paperless/issues/146): + Fixed a bug that allowed unauthorised access to the `/fetch` URL. +- [\#131](https://github.com/the-paperless-project/paperless/issues/131): + Document files are now automatically removed from disk when they\'re + deleted in Paperless. +- [\#121](https://github.com/the-paperless-project/paperless/issues/121): + Fixed a bug where Paperless wasn\'t setting document creation time + based on the file naming scheme. +- [\#81](https://github.com/the-paperless-project/paperless/issues/81): + Added a hook to run an arbitrary script after every document is + consumed. +- [\#98](https://github.com/the-paperless-project/paperless/issues/98): + Added optional environment variables for ImageMagick so that it + doesn\'t explode when handling Very Large Documents or when it\'s + just running on a low-memory system. Thanks to [Florian + Harr](https://github.com/evils) for his help on this one. +- [\#89](https://github.com/the-paperless-project/paperless/issues/89) + Ported the auto-tagging code to correspondents as well. Thanks to + [Justin Snyman](https://github.com/stringlytyped) for the pointers + in the issue queue. +- Added support for guessing the date from the file name along with + the correspondent, title, and tags. Thanks to [Tikitu de + Jager](https://github.com/tikitu) for his pull request that I took + forever to merge and to [Pit](https://github.com/pitkley) for his + efforts on the regex front. +- [\#94](https://github.com/the-paperless-project/paperless/issues/94): + Restored support for changing the created date in the UI. Thanks to + [Martin Honermeyer](https://github.com/djmaze) and [Tim + White](https://github.com/timwhite) 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 property (one could quite reasonably scan a document + before sending it to someone.) +- [\#67](https://github.com/the-paperless-project/paperless/issues/67): + Rewrote the document exporter and added a new importer that allows + for full metadata retention without depending on the file name and + modification time. A big thanks to [Tikitu de + Jager](https://github.com/tikitu), + [Pit](https://github.com/pitkley), [Florian + Jung](https://github.com/the01), and [Christopher + Luu](https://github.com/nuudles) for their code snippets and + contributing conversation that lead to this change. +- [\#20](https://github.com/the-paperless-project/paperless/issues/20): + Added _unpaper_ support to help in cleaning up the scanned image + before it\'s OCR\'d. Thanks to [Pit](https://github.com/pitkley) for + this one. +- [\#71](https://github.com/the-paperless-project/paperless/issues/71) + Added (encrypted) thumbnails in anticipation of a proper UI. +- [\#68](https://github.com/the-paperless-project/paperless/issues/68): + Added support for using a proper config file at + `/etc/paperless.conf` and modified the systemd unit files to use it. +- Refactored the Vagrant installation process to use environment + variables rather than asking the user to modify `settings.py`. +- [\#44](https://github.com/the-paperless-project/paperless/issues/44): + Harmonise environment variable names with constant names. +- [\#60](https://github.com/the-paperless-project/paperless/issues/60): + Setup logging to actually use the Python native logging framework. +- [\#53](https://github.com/the-paperless-project/paperless/issues/53): + Fixed an annoying bug that caused `.jpeg` and `.JPG` images to be + imported but made unavailable. + +### 0.1.0 + +- Docker support! Big thanks to [Wayne + Werner](https://github.com/waynew), [Brian + Conn](https://github.com/TheConnMan), and [Tikitu de + Jager](https://github.com/tikitu) for this one, and especially to + [Pit](https://github.com/pitkley) who spearheadded this effort. +- A simple REST API is in place, but it should be considered unstable. +- Cleaned up the consumer to use temporary directories instead of a + single scratch space. (Thanks [Pit](https://github.com/pitkley)) +- Improved the efficiency of the consumer by parsing pages more + intelligently and introducing a threaded OCR process (thanks again + [Pit](https://github.com/pitkley)). +- [\#45](https://github.com/the-paperless-project/paperless/issues/45): + Cleaned up the logic for tag matching. Reported by + [darkmatter](https://github.com/darkmatter). +- [\#47](https://github.com/the-paperless-project/paperless/issues/47): + Auto-rotate landscape documents. Reported by + [Paul](https://github.com/polo2ro) and fixed by + [Pit](https://github.com/pitkley). +- [\#48](https://github.com/the-paperless-project/paperless/issues/48): + Matching algorithms should do so on a word boundary + ([darkmatter](https://github.com/darkmatter)) +- [\#54](https://github.com/the-paperless-project/paperless/issues/54): + Documented the re-tagger ([zedster](https://github.com/zedster)) +- [\#57](https://github.com/the-paperless-project/paperless/issues/57): + Make sure file is preserved on import failure + ([darkmatter](https://github.com/darkmatter)) +- Added tox with pep8 checking + +### 0.0.6 + +- Added support for parallel OCR (significant work from + [Pit](https://github.com/pitkley)) +- Sped up the language detection (significant work from + [Pit](https://github.com/pitkley)) +- 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 +- Added IMAP mail support +- Added a re-tagging utility +- 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 +- Removed `User` and `Group` from the admin +- 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 diff --git a/docs/changelog.rst b/docs/changelog.rst deleted file mode 100644 index 984c86075..000000000 --- a/docs/changelog.rst +++ /dev/null @@ -1,1787 +0,0 @@ - -.. _paperless_changelog: - -********* -Changelog -********* - -paperless-ngx 1.7.0 -################### - -Breaking Changes - -* ``PAPERLESS_URL`` is now required when using a reverse proxy. See `#674`_. - -Features - -* Allow setting more than one tag in mail rules `@jonasc`_ (#270) -* global drag'n'drop `@shamoon`_ (#283). -* Fix: download buttons should disable while waiting `@shamoon`_ (#630). -* Update checker `@shamoon`_ (#591). -* Show prompt on password-protected pdfs `@shamoon`_ (#564). -* Filtering query params aka browser navigation for filtering `@shamoon`_ (#540). -* Clickable tags in dashboard widgets `@shamoon`_ (#515). -* Add bottom pagination `@shamoon`_ (#372). -* Feature barcode splitter `@gador`_ (#532). -* App loading screen `@shamoon`_ (#298). -* Use progress bar for delayed buttons `@shamoon`_ (#415). -* Add minimum length for documents text filter `@shamoon`_ (#401). -* Added nav buttons in the document detail view `@GruberViktor`_ (#273). -* Improve date keyboard input `@shamoon`_ (#253). -* Color theming `@shamoon`_ (#243). -* Parse dates when entered without separators `@GruberViktor`_ (#250). - -Bug Fixes - -* add "localhost" to ALLOWED_HOSTS `@gador`_ (#700). -* Fix: scanners table `@qcasey`_ (#690). -* Adds wait for file before consuming `@stumpylog`_ (#483). -* Fix: frontend document editing erases time data `@shamoon`_ (#654). -* Increase length of SavedViewFilterRule `@stumpylog`_ (#612). -* Fixes attachment filename matching during mail fetching `@stumpylog`_ (#680). -* Add ``PAPERLESS_URL`` env variable & CSRF var `@shamoon`_ (#674). -* Fix: download buttons should disable while waiting `@shamoon`_ (#630). -* Fixes downloaded filename, add more consumer ignore settings `@stumpylog`_ (#599). -* FIX BUG: case-sensitive matching was not possible `@danielBreitlauch`_ (#594). -* uses shutil.move instead of rename `@gador`_ (#617). -* Fix npm deps 01.02.22 2 `@shamoon`_ (#610). -* Fix npm dependencies 01.02.22 `@shamoon`_ (#600). -* fix issue 416: implement PAPERLESS_OCR_MAX_IMAGE_PIXELS `@hacker-h`_ (#441). -* fix: exclude cypress from build in Dockerfile `@FrankStrieter`_ (#526). -* Corrections to pass pre-commit hooks `@schnuffle`_ (#454). -* Fix 311 unable to click checkboxes in document list `@shamoon`_ (#313). -* Fix imap tools bug `@stumpylog`_ (#393). -* Fix filterable dropdown buttons arent translated `@shamoon`_ (#366). -* Fix 224: "Auto-detected date is day before receipt date" `@a17t`_ (#246). -* Fix minor sphinx errors `@shamoon`_ (#322). -* Fix page links hidden `@shamoon`_ (#314). -* Fix: Include excluded items in dropdown count `@shamoon`_ (#263). - -Translation - -* `@miku323`_ contributed to Slovenian translation. -* `@FaintGhost`_ contributed to Chinese Simplified translation. -* `@DarkoBG79`_ contributed to Serbian translation. -* `Kemal Secer`_ contributed to Turkish translation. -* `@Prominence`_ contributed to Belarusian translation. - -Documentation - -* Fix: scanners table `@qcasey`_ (#690). -* Add `PAPERLESS_URL` env variable & CSRF var `@shamoon`_ (#674). -* Fixes downloaded filename, add more consumer ignore settings `@stumpylog`_ (#599). -* fix issue 416: implement ``PAPERLESS_OCR_MAX_IMAGE_PIXELS`` `@hacker-h`_ (#441). -* Fix minor sphinx errors `@shamoon`_ (#322). - -Maintenance - -* Add ``PAPERLESS_URL`` env variable & CSRF var `@shamoon`_ (#674). -* Chore: Implement release-drafter action for Changelogs `@qcasey`_ (#669). -* Chore: Add CODEOWNERS `@qcasey`_ (#667). -* Support docker-compose v2 in install `@stumpylog`_ (#611). -* Add Belarusian localization `@shamoon`_ (#588). -* Add Turkish localization `@shamoon`_ (#536). -* Add Serbian localization `@shamoon`_ (#504). -* Create PULL_REQUEST_TEMPLATE.md `@shamoon`_ (#304). -* Add Chinese localization `@shamoon`_ (#247). -* Add Slovenian language for frontend `@shamoon`_ (#315). - -paperless-ngx 1.6.0 -################### - -This is the first release of the revived paperless-ngx project 🎉. Thank you to everyone on the paperless-ngx team for your initiative and excellent teamwork! - -Version 1.6.0 merges several pending PRs from jonaswinkler's repo and includes new feature updates and bug fixes. Major backend and UI changes include: - -* Updated docs, scripts, CI, and containers to paperless-ngx. -* Updated Python and Angular dependencies. -* Dropped support for Python 3.7. -* Dropped support for Ansible playbooks (thanks `@slankes`_ #109). If someone would like to continue supporting them, please see the `ansible repo`_. -* Python code is now required to use Black formatting (thanks `@kpj`_ #168). -* `@tribut`_ added support for a custom SSO logout redirect (jonaswinkler#1258). See ``PAPERLESS_LOGOUT_REDIRECT_URL``. -* `@shamoon`_ added a loading indicator when document list is reloading (jonaswinkler#1297). -* `@shamoon`_ improved the PDF viewer on mobile (#2). -* `@shamoon`_ added 'any' / 'all' and 'not' filtering with tags (#10). -* `@shamoon`_ added warnings for unsaved changes, with smart edit buttons (#13). -* `@benjaminfrank`_ enabled a non-root access to port 80 via systemd (#18). -* `@tribut`_ added simple "delete to trash" functionality (#24). See ``PAPERLESS_TRASH_DIR``. -* `@amenk`_ fixed the search box overlay menu on mobile (#32). -* `@dblitt`_ updated the login form to not auto-capitalize usernames (#36). -* `@evilsidekick293`_ made the worker timeout configurable (#37). See ``PAPERLESS_WORKER_TIMEOUT``. -* `@Nicarim`_ fixed downloads of UTF-8 formatted documents in Firefox (#56). -* `@mweimerskirch`_ sorted the language dropdown by locale (#78). -* `@mweimerskirch`_ enabled the Czech (#83) and Danish (#84) translations. -* `@cschmatzler`_ enabled specifying the webserver port (#124). See ``PAPERLESS_PORT``. -* `@muellermartin`_ fixed an error when uploading transparent PNGs (#133). -* `@shamoon`_ created a slick new logo (#165). -* `@tim-vogel`_ fixed exports missing groups (#193). - -Known issues: - -* 1.6.0 included a malformed package-lock.json, as a result users who want to build the docker image themselves need to change line 6 of the ``Dockerfile`` to ``RUN npm update npm -g && npm install --legacy-peer-deps``. - -Thank you to the following people for their documentation updates, fixes, and comprehensive testing: - -`@m0veax`_, `@a17t`_, `@fignew`_, `@muued`_, `@bauerj`_, `@isigmund`_, `@denilsonsa`_, `@mweimerskirch`_, `@alexander-bauer`_, `@apeltzer`_, `@tribut`_, `@yschroeder`_, `@gador`_, `@sAksham-Ar`_, `@sbrunner`_, `@philpagel`_, `@davemachado`_, `@2600box`_, `@qcasey`_, `@Nicarim`_, `@kpj`_, `@filcuk`_, `@Timoms`_, `@mattlamb99`_, `@padraigkitterick`_, `@ajkavanagh`_, `@Tooa`_, `@Unkn0wnCat`_, `@pewter77`_, `@stumpylog`_, `@Toxix`_, `@azapater`_, `@jschpp`_ - -Another big thanks to the people who have contributed translations: - -* Michel Weimerskirch (michel_weimerskirch) suggested 31 translations into French and Luxembourgish. -* jo.vandeginste suggested 21 translations into Dutch. -* Lars Sørensen (Lrss) suggested 486 translations into Danish. -* Alex (Sky-Dragon) voted for 46 translations in German. -* Yannic Schröder (yschroeder) suggested 14 translations into German. -* David Morais Ferreira (DavidMoraisFerreira) voted for 10 translations in Portuguese and Luxembourgish. -* David Morais Ferreira (DavidMoraisFerreira) suggested 88 translations into French, German, Portuguese, Portuguese, Brazilian and Luxembourgish. -* 汪泠沣 (wlfcss) suggested 13 translations into Chinese Traditional. -* Lars Sørensen (Lrss) suggested 167 translations into Danish. -* Philmo67 suggested 11 translations into French. - -Paperless-ng -############ - -paperless-ng 1.5.0 -================== - -Support for Python 3.6 was dropped. - -* Updated python dependencies. -* Base image of the docker image changed from Debian Buster to Debian Bullseye due to its recent release. -* The docker image now uses python 3.9. -* Added the Luxembourgish locale. Thanks for translating! -* `Daniel Albers`_ added support for making the files and folders ignored by the paperless consume folder scanner configurable. See ``PAPERLESS_CONSUMER_IGNORE_PATTERNS``. - -paperless-ng 1.4.5 -================== - -This is a maintenance release. - -* Updated Python and Angular dependencies. -* Changed the algorithm that changes permissions during startup. This is still fast, - and will hopefully cause less issues. -* Fixed an issue that would sometimes cause paperless to write an incomplete - classification model file to disk. -* Fixed an issue with the OCRmyPDF parser that would always try to extract text - with PDFminer even from non-PDF files. - -paperless-ng 1.4.4 -================== - -* Drastically decreased the startup time of the docker container. The startup script adjusts file permissions of all data only if changes are required. -* Paperless mail: Added ability to specify the character set for each server. -* Document consumption: Ignore Mac OS specific files such as ``.DS_STORE`` and ``._XXXXX.pdf``. -* Fixed an issue with the automatic matching algorithm that prevents paperless from consuming new files. -* Updated translations. - -paperless-ng 1.4.3 -================== - -* Additions and changes - - * Added Swedish locale. - * `Stéphane Brunner`_ added an option to disable the progress bars of all management commands. - * `Jo Vandeginste`_ added support for RTF documents to the Apache TIKA parser. - * `Michael Shamoon`_ added dark mode for the login and logout pages. - * `Alexander Menk`_ added additional stylesheets for printing. You can now print any page of paperless and the print result will hide the page header, sidebar, and action buttons. - * Added support for sorting when using full text search. - -* Fixes - - * `puuu`_ fixed ``PAPERLESS_FORCE_SCRIPT_NAME``. You can now host paperless on sub paths such as ``https://localhost:8000/paperless/``. - * Fixed an issue with the document consumer crashing on certain documents due to issues with pdfminer.six. This library is used for PDF text extraction. - -paperless-ng 1.4.2 -================== - -* Fixed an issue with ``sudo`` that caused paperless to not start on many Raspberry Pi devices. Thank you `WhiteHatTux`_! - -paperless-ng 1.4.1 -================== - -* Added Polish locale. - -* Changed some parts of the Dockerfile to hopefully restore functionality on certain ARM devices. - -* Updated python dependencies. - -* `Michael Shamoon`_ added a sticky filter / bulk edit bar. - -* `sbrl`_ changed the docker-entrypoint.sh script to increase compatibility with NFS shares. - -* `Chris Nagy`_ added support for creating a super user by passing ``PAPERLESS_ADMIN_USER`` and - ``PAPERLESS_ADMIN_PASSWORD`` as environment variables to the docker container. - -paperless-ng 1.4.0 -================== - -* Docker images now use tesseract 4.1.1, which should fix a series of issues with OCR. - -* The full text search now displays results using the default document list. This enables - selection, filtering and bulk edit on search results. - -* Changes - - * Firefox only: Highlight search query in PDF previews. - - * New URL pattern for accessing documents by ASN directly (http:///asn/123) - - * Added logging when executing pre* and post-consume scripts. - - * Better error logging during document consumption. - - * Updated python dependencies. - - * Automatically inserts typed text when opening "Create new" dialogs on the document details page. - -* Fixes - - * Fixed an issue with null characters in the document content. - -.. note:: - - The changed to the full text searching require you to reindex your documents. - *The docker image does this automatically, you don't need to do anything.* - To do this, execute the ``document_index reindex`` management command - (see :ref:`administration-index`). - -paperless-ng 1.3.2 -================== - -* Added translation into Portuguese. - -* Changes - - * The exporter now exports user accounts, mail accounts, mail rules and saved views as well. - -* Fixes - - * Minor layout issues with document cards and the log viewer. - - * Fixed an issue with any/all/exact matching when characters used in regular expressions were used for the match. - -paperless-ng 1.3.1 -================== - -* Added translation into Spanish and Russian. - -* Other changes - - * ISO-8601 date format will now always show years with 4 digits. - - * Added the ability to search for a document with a specific ASN. - - * The document cards now display ASN, types and dates in a more organized way. - - * Added document previews when hovering over the preview button. - -* Fixes - - * The startup check for write permissions now works properly on NFS shares. - - * Fixed an issue with the search results score indicator. - - * Paperless was unable to generate thumbnails for encrypted PDF files and failed. Paperless will now generate a default thumbnail for these files. - - * Fixed ``AUTO_LOGIN_USERNAME``: Unable to perform POST/PUT/DELETE requests and unable to receive WebSocket messages. - -paperless-ng 1.3.0 -================== - -This release contains new database migrations. - -* Changes - - * The REST API is versioned from this point onwards. This will allow me to make changes without breaking existing clients. See the documentation about :ref:`api-versioning` for details. - - * Added a color picker for tag colors. - - * Added the ability to use the filter for searching the document content as well. - - * Added translations into Italian and Romanian. Thank you! - - * Close individual documents from the sidebar. Thanks to `Michael Shamoon`_. - - * `BolkoSchreiber `_ added an option to disable/enable thumbnail inversion in dark mode. - - * `Simon Taddiken `_ added the ability to customize the header used for remote user authentication with SSO applications. - -* Bug fixes - - * Fixed an issue with the auto matching algorithm when more than 256 tags were used. - - -paperless-ng 1.2.1 -================== - -* `Rodrigo Avelino `_ translated Paperless into Portuguese (Brazil)! - -* The date input fields now respect the currently selected date format. - -* Added a fancy icon when adding paperless to the home screen on iOS devices. Thanks to `Joel Nordell `_. - -* When using regular expression matching, the regular expression is now validated before saving the tag/correspondent/type. - -* Regression fix: Dates on the front end did not respect date locale settings in some cases. - -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``. - -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 `_-enabled - web server. The docker images uses ``gunicorn`` and an ASGI-enabled worker called `uvicorn `_, - 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 `. - -* 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 ` 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` 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 `_. - * "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 `. - -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 `_ 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 ` 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 `. - -* 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 -================== - -* Moved documentation of the settings to the actual documentation. -* Updated release script to force the user to choose between SQLite - and PostgreSQL. This avoids confusion when upgrading from paperless. - - -paperless-ng 0.9.0 -================== - -* **Deprecated:** GnuPG. :ref:`See this note on the state of GnuPG in paperless-ng. ` - This features will most likely be removed in future versions. - -* **Added:** New frontend. Features: - - * Single page application: It's much more responsive than the django admin pages. - * 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 - on the query. It uses a document search index in the background. - * Saveable filters. - * Better log viewer. - -* **Added:** Document types. Assign these to documents just as correspondents. - They may be used in the future to perform automatic operations on documents - depending on the type. -* **Added:** Inbox tags. Define an inbox tag and it will automatically be - assigned to any new document scanned into the system. -* **Added:** Automatic matching. A new matching algorithm that automatically - assigns tags, document types and correspondents to your documents. It uses - a neural network trained on your data. -* **Added:** Archive serial numbers. Assign these to quickly find documents stored in - physical binders. -* **Added:** Enabled the internal user management of django. This isn't really a - multi user solution, however, it allows more than one user to access the website - and set some basic permissions / renew passwords. - -* **Modified [breaking]:** All new mail consumer with customizable filters, actions and - multiple account support. Replaces the old mail consumer. The new mail consumer - needs different configuration but can be configured to act exactly like the old - consumer. - - -* **Modified:** Changes to the consumer: - - * Now uses the excellent watchdog library that should make sure files are - discovered no matter what the platform is. - * The consumer now uses a task scheduler to run consumption processes in parallel. - This means that consuming many documents should be much faster on systems with - many cores. - * Concurrency is controlled with the new settings ``PAPERLESS_TASK_WORKERS`` - and ``PAPERLESS_THREADS_PER_WORKER``. See TODO for details on concurrency. - * The consumer no longer blocks the database for extended periods of time. - * An issue with tesseract running multiple threads per page and slowing down - the consumer was fixed. - -* **Modified [breaking]:** REST Api changes: - - * New filters added, other filters removed (case sensitive filters, slug filters) - * Endpoints for thumbnails, previews and downloads replace the old ``/fetch/`` urls. Redirects are in place. - * Endpoint for document uploads replaces the old ``/push`` url. Redirects are in place. - * Foreign key relationships are now served as IDs, not as urls. - -* **Modified [breaking]:** PostgreSQL: - - * 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 - :ref:`utilities-retagger` for details. Replaces ``document_correspondents`` - management command. -* **Removed [breaking]:** Reminders. -* **Removed:** All customizations made to the django admin pages. -* **Removed [breaking]:** The docker image no longer supports SSL. If you want to expose - paperless to the internet, hide paperless behind a proxy server that handles SSL - requests. -* **Internal changes:** Mostly code cleanup, including: - - * Rework of the code of the tesseract parser. This is now a lot cleaner. - * Rework of the filename handling code. It was a mess. - * Fixed some issues with the document exporter not exporting all documents when encountering duplicate filenames. - * Added a task scheduler that takes care of checking mail, training the classifier, maintaining the document search index - and consuming documents. - * Updated dependencies. Now uses Pipenv all around. - * Updated Dockerfile and docker-compose. Now uses ``supervisord`` to run everything paperless-related in a single container. - -* **Settings:** - - * ``PAPERLESS_FORGIVING_OCR`` is now default and gone. Reason: Even if ``langdetect`` fails to detect - a language, tesseract still does a very good job at ocr'ing a document with the default language. - 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. - * ``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 - optimization. This is useful on less powerful devices. - -* 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 - a syntax error in ``docker-compose.yml.example`` `#488`_ and added `DjangoQL`_, - which allows a litany of handy search functionality `#492`_. -* `CkuT`_ and `JOKer`_ hacked out a simple, but super-helpful optimisation to - how the thumbnails are served up, improving performance considerably `#481`_. -* `tsia`_ added a few fields to the tags REST API. `#483`_. -* `Brian Cribbs`_ improved the documentation to help people using Paperless - over NFS `#484`_. -* `Brendan M. Sleight`_ updated the documentation to include a note for setting the - ``DEBUG`` value. The ``paperless.conf.example`` file was also updated to - mirror the project defaults. - - -2.6.1 -===== - -* We now have a logo, complete with a favicon :-) -* Removed some problematic tests. -* Fix the docker-compose example config to include a shared consume volume so - that using the push API will work for users of the Docker install. Thanks to - `Colin Frei`_ for fixing this in `#466`_. -* `khrise`_ submitted a pull request to include the ``added`` property to the - REST API `#471`_. - - -2.6.0 -===== - -* Allow an infinite number of logs to be deleted. Thanks to `Ulli`_ for noting - the problem in `#433`_. -* Fix the ``RecentCorrespondentsFilter`` correspondents filter that was added - in 2.4 to play nice with the defaults. Thanks to `tsia`_ and `Sblop`_ who - pointed this out. `#423`_. -* Updated dependencies to include (among other things) a security patch to - requests. -* Fix text in sample data for tests so that the language guesser stops thinking - that everything is in Catalan because we had *Lorem ipsum* in there. -* Tweaked the gunicorn sample command to use filesystem paths instead of Python - paths. `#441`_ -* Added pretty colour boxes next to the hex values in the Tags section, thanks - to a pull request from `Joshua Taillon`_ `#442`_. -* Added a ``.editorconfig`` file to better specify coding style. -* `Joshua Taillon`_ also added some logic to tie Paperless' date guessing logic - into how it parses file names on import. `#440`_ - - -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 - its location in ``PAPERLESS_OPTIPNG_BINARY``. The Docker image has already - been updated on the Docker Hub, so you just need to pull the latest one from - there if you're a Docker user. - -* "Login free" instances of Paperless were breaking whenever you tried to edit - objects in the admin: adding/deleting tags or correspondents, or even fixing - spelling. This was due to the "user hack" we were applying to sessions that - weren't using a login, as that hack user didn't have a valid id. The fix was - to attribute the first user id in the system to this hack user. `#394`_ - -* A problem in how we handle slug values on Tags and Correspondents required a - few changes to how we handle this field `#393`_: - - 1. Slugs are no longer editable. They're derived from the name of the tag or - correspondent at save time, so if you wanna change the slug, you have to - change the name, and even then you're restricted to the rules of the - ``slugify()`` function. The slug value is still visible in the admin - though. - 2. I've added a migration to go over all existing tags & correspondents and - rewrite the ``.slug`` values to ones conforming to the ``slugify()`` - rules. - 3. The consumption process now uses the same rules as ``.save()`` in - determining a slug and using that to check for an existing - tag/correspondent. - -* An annoying bug in the date capture code was causing some bogus dates to be - attached to documents, which in turn busted the UI. Thanks to `Andrew Peng`_ - for reporting this. `#414`_. - -* A bug in the Dockerfile meant that Tesseract language files weren't being - installed correctly. `euri10`_ was quick to provide a fix: `#406`_, `#413`_. - -* Document consumption is now wrapped in a transaction as per an old ticket - `#262`_. - -* The ``get_date()`` functionality of the parsers has been consolidated onto - the ``DocumentParser`` class since much of that code was redundant anyway. - - -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 - correspondents in bulk. `#405`_ -* The import/export system is now a little smarter. By default, documents are - tagged as ``unencrypted``, since exports are by their nature unencrypted. - It's now in the import step that we decide the storage type. This allows you - to export from an encrypted system and import into an unencrypted one, or - vice-versa. -* The migration history has been slightly modified to accommodate PostgreSQL - users. Additionally, you can now tell paperless to use PostgreSQL simply by - declaring ``PAPERLESS_DBUSER`` in your environment. This will attempt to - connect to your Postgres database without a password unless you also set - ``PAPERLESS_DBPASS``. -* A bug was found in the REST API filter system that was the result of an - update of django-filter some time ago. This has now been patched in `#412`_. - Thanks to `thepill`_ for spotting it! - - -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 - likely to be greatly appreciated by the community: `#395`_ Thanks also to - `David Martin`_ for his assistance on the issue. -* `dubit0`_ found & fixed a bug that prevented management commands from running - before we had an operational database: `#396`_ -* Joshua also added a simple update to the thumbnail generation process to - improve performance: `#399`_ -* As his last bit of effort on this release, Joshua also added some code to - allow you to view the documents inline rather than download them as an - attachment. `#400`_ -* Finally, `ahyear`_ found a slip in the Docker documentation and patched it. - `#401`_ - - -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 - work, you can now also run Paperless on Python 3.7 as well: `#386`_ & - `#390`_. -* `Stéphane Brunner`_ added a few lines of code that made tagging interface a - lot easier on those of us with lots of different tags: `#391`_. -* `Kilian Koeltzsch`_ noticed a bug in how we capture & automatically create - tags, so that's fixed now too: `#384`_. -* `erikarvstedt`_ tweaked the behaviour of the test suite to be better behaved - for packaging environments: `#383`_. -* `Lukasz Soluch`_ added CORS support to make building a new Javascript-based - front-end cleaner & easier: `#387`_. - - -2.1.0 -===== - -* `Enno Lohmeier`_ added three simple features that make Paperless a lot more - user (and developer) friendly: - - 1. There's a new search box on the front page: `#374`_. - 2. The correspondents & tags pages now have a column showing the number of - relevant documents: `#375`_. - 3. The Dockerfile has been tweaked to build faster for those of us who are - doing active development on Paperless using the Docker environment: - `#376`_. - -* You now also have the ability to customise the interface to your heart's - content by creating a file called ``overrides.css`` and/or ``overrides.js`` - in the root of your media directory. Thanks to `Mark McFate`_ for this - idea: `#371`_ - - -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. - -The reasons for this are many, but it boils down to that the encryption wasn't -really all that useful, as files on-disk were still accessible so long as you -had the key, and the key was most typically stored in the config file. In -other words, your files are only as safe as the ``paperless`` user is. In -addition to that, *the contents of the documents were never encrypted*, so -important numbers etc. were always accessible simply by querying the database. -Still, it was better than nothing, but the consensus from users appears to be -that it was more an annoyance than anything else, so this feature is now turned -off unless you explicitly set a passphrase in your config file. - -Migrating from 1.x -================== - -Encryption isn't gone, it's just off for new users. So long as you have -``PAPERLESS_PASSPHRASE`` set in your config or your environment, Paperless -should continue to operate as it always has. If however, you want to drop -encryption too, you only need to do two things: - -1. Run ``./manage.py migrate && ./manage.py change_storage_type gpg unencrypted``. - This will go through your entire database and Decrypt All The Things. -2. Remove ``PAPERLESS_PASSPHRASE`` from your ``paperless.conf`` file, or simply - stop declaring it in your environment. - -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 - particular ``--directory``, limit the ``--loop-time``, set the time between - mail server checks with ``--mail-delta`` or just run it as a one-off with - ``--one-shot``. See `#305`_ & `#313`_ for more information. -* Refactor the use of travis/tox/pytest/coverage into two files: - ``.travis.yml`` and ``setup.cfg``. -* Start generating requirements.txt from a Pipfile. I'll probably switch over - to just using pipenv in the future. -* All for a alternative FreeBSD-friendly location for ``paperless.conf``. - Thanks to `Martin Arendtsen`_ who provided this (`#322`_). -* Document consumption events are now logged in the Django admin events log. - Thanks to `CkuT`_ for doing the legwork on this one and to `Quentin Dawans`_ - & `David Martin`_ for helping to coordinate & work out how the feature would - be developed. -* `erikarvstedt`_ contributed a pull request (`#328`_) to add ``--noreload`` - to the default server start process. This helps reduce the load imposed - by the running webservice. -* Through some discussion on `#253`_ and `#323`_, we've removed a few of the - hardcoded URL values to make it easier for people to host Paperless on a - subdirectory. Thanks to `Quentin Dawans`_ and `Kyle Lucy`_ for helping to - work this out. -* The clickable area for documents on the listing page has been increased to a - more predictable space thanks to a glorious hack from `erikarvstedt`_ in - `#344`_. -* `Strubbl`_ noticed an annoying bug in the bash script wrapping the Docker - entrypoint and fixed it with some very creating Bash skills: `#352`_. -* You can now use the search field to find documents by tag thanks to - `thinkjk`_'s *first ever issue*: `#354`_. -* Inotify is now being used to detect additions to the consume directory thanks - 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`_: - `#295`_. Note that logins are still required by default, and that you need - to disable them by setting ``PAPERLESS_DISABLE_LOGIN="true"`` in your - environment or in ``/etc/paperless.conf``. -* Fix for `#303`_ where sketchily-formatted documents could cause the consumer - to break and insert half-records into the database breaking all sorts of - things. We now capture the return codes of both ``convert`` and ``unpaper`` - and fail-out nicely. -* Fix for additional date types thanks to input from `Isaac`_ and code from - `BastianPoe`_ (`#301`_). -* Fix for running migrations in the Docker container (`#299`_). Thanks to - `Georgi Todorov`_ for the fix (`#300`_) and to `Pit`_ for the review. -* Fix for Docker cases where the issuing user is not UID 1000. This was a - collaborative fix between `Jeffrey Portman`_ and `Pit`_ in `#311`_ and - `#312`_ to fix `#306`_. -* Patch the historical migrations to support MySQL's um, *interesting* way of - handing indexes (`#308`_). Thanks to `Simon Taddiken`_ for reporting the - 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 - one, and it also has `a new home on Docker Hub`_. A proper thank-you to - `Pit`_ for hosting the image on his Docker account all this time, but after - some discussion, we decided the image needed a more *official-looking* home. -* `BastianPoe`_ has added the long-awaited feature to automatically skip the - OCR step when the PDF already contains text. This can be overridden by - setting ``PAPERLESS_OCR_ALWAYS=YES`` either in your ``paperless.conf`` or - in the environment. Note that this also means that Paperless now requires - ``libpoppler-cpp-dev`` to be installed. **Important**: You'll need to run - ``pip install -r requirements.txt`` after the usual ``git pull`` to - properly update. -* `BastianPoe`_ has also contributed a monumental amount of work (`#291`_) to - solving `#158`_: setting the document creation date based on finding a date - 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. -* Addition of an optional new financial year filter, courtesy of - `David Martin`_ `#256`_ -* Fixed a typo in how thumbnails were named in exports `#285`_, courtesy of - `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 - properly update**. -* Replace the templatetag-based hack we had for document listing in favour of - a slightly less ugly solution in the form of another template tag with less - copypasta. -* Support for multi-word-matches for auto-tagging thanks to an excellent - patch from `ishirav`_ `#277`_. -* Fixed a CSS bug reported by `Stefan Hagen`_ that caused an overlapping of - the text and checkboxes under some resolutions `#272`_. -* Patched the Docker config to force the serving of static files. Credit for - this one goes to `dev-rke`_ via `#248`_. -* Fix file permissions during Docker start up thanks to `Pit`_ on `#268`_. -* Date fields in the admin are now expressed as HTML5 date fields thanks to - `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 - correspondents are themselves deleted. This was Django's default - behaviour, but didn't make much sense in Paperless' case. Thanks to - `Thomas Brueggemann`_ and `David Martin`_ for their input on this one. -* Fix for `#232`_ wherein Paperless wasn't recognising ``.tif`` files - properly. Thanks to `ayounggun`_ for reporting this one and to - `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. -* Fix the POST API so it actually works. `#236`_ -* **Breaking change**: We've dropped the use of ``PAPERLESS_SHARED_SECRET`` - as it was being used both for the API (now replaced with a normal auth) - and form email polling. Now that we're only using it for email, this - variable has been renamed to ``PAPERLESS_EMAIL_SECRET``. The old value - will still work for a while, but you should change your config if you've - been using the email polling feature. Thanks to `Joshua Gilman`_ for all - 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`_. -* Modified the Dockerfile to prepare an export directory (`#212`_). Thanks - to combined efforts from `Pit`_ and `Strubbl`_ in working out the kinks on - this one. -* Updated the import/export scripts to include support for thumbnails. Big - thanks to `CkuT`_ for finding this shortcoming and doing the work to get - it fixed in `#224`_. -* All of the following changes are thanks to `David Martin`_: - * Bumped the dependency on pyocr to 0.4.7 so new users can make use of - Tesseract 4 if they so prefer (`#226`_). - * Fixed a number of issues with the automated mail handler (`#227`_, `#228`_) - * Amended the documentation for better handling of systemd service files (`#229`_) - * 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 - which are made available via the API. Currently, the default API - (basically just the Django admin) doesn't really make use of this, but - `Thomas Brueggemann`_ over at `Paperless Desktop`_ has said that he would - 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. -* The ``content`` field is now optional, to allow for the edge case of a - purely graphical document. -* You can no longer add documents via the admin. This never worked in the - first place, so all I've done here is remove the link to the broken form. -* The consumer code has been heavily refactored to support a pluggable - interface. Install a paperless consumer via pip and tell paperless about - it with an environment variable, and you're good to go. Proper - 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. -* Users can now configure the number of items per page. -* Fix for `#171`_: Allow users to specify their own ``SECRET_KEY`` value. -* Moved the dotenv loading to the top of settings.py -* Fix for `#112`_: Added checks for binaries required for document - 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 - non-profit situation as their free license prohibits for-profit use. As a - result, I can't bundle Suit with Paperless without conflicting with the - GPL. Further development will be done against the stock Django admin. -* I shrunk the thumbnails a little 'cause they were too big for me, even on - my high-DPI monitor. -* BasicAuth support for document and thumbnail downloads, as well as the Push - 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. -* Consumer loop time is now configurable for systems with slow writes. Just - set ``PAPERLESS_CONSUMER_LOOP_TIME`` to a number of seconds. The default - is 10. -* As per `#44`_, we've removed support for ``PAPERLESS_CONVERT``, - ``PAPERLESS_CONSUME``, and ``PAPERLESS_SECRET``. Please use - ``PAPERLESS_CONVERT_BINARY``, ``PAPERLESS_CONSUMPTION_DIR``, and - ``PAPERLESS_SHARED_SECRET`` respectively instead. - -0.2.0 -===== - -* `#150`_: The media root is now a variable you can set in - ``paperless.conf``. -* `#148`_: The database location (sqlite) is now a variable you can set in - ``paperless.conf``. -* `#146`_: Fixed a bug that allowed unauthorised access to the ``/fetch`` - URL. -* `#131`_: Document files are now automatically removed from disk when - they're deleted in Paperless. -* `#121`_: Fixed a bug where Paperless wasn't setting document creation time - based on the file naming scheme. -* `#81`_: Added a hook to run an arbitrary script after every document is - consumed. -* `#98`_: Added optional environment variables for ImageMagick so that it - doesn't explode when handling Very Large Documents or when it's just - running on a low-memory system. Thanks to `Florian Harr`_ for his help on - this one. -* `#89`_ Ported the auto-tagging code to correspondents as well. Thanks to - `Justin Snyman`_ for the pointers in the issue queue. -* Added support for guessing the date from the file name along with the - correspondent, title, and tags. Thanks to `Tikitu de Jager`_ for his pull - request that I took forever to merge and to `Pit`_ for his efforts on the - regex front. -* `#94`_: Restored support for changing the created date in the UI. Thanks - 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 - property (one could quite reasonably scan a document before sending it to - someone.) -* `#67`_: Rewrote the document exporter and added a new importer that allows - for full metadata retention without depending on the file name and - modification time. A big thanks to `Tikitu de Jager`_, `Pit`_, - `Florian Jung`_, and `Christopher Luu`_ for their code snippets and - contributing conversation that lead to this change. -* `#20`_: Added *unpaper* support to help in cleaning up the scanned image - before it's OCR'd. Thanks to `Pit`_ for this one. -* `#71`_ Added (encrypted) thumbnails in anticipation of a proper UI. -* `#68`_: Added support for using a proper config file at - ``/etc/paperless.conf`` and modified the systemd unit files to use it. -* Refactored the Vagrant installation process to use environment variables - rather than asking the user to modify ``settings.py``. -* `#44`_: Harmonise environment variable names with constant names. -* `#60`_: Setup logging to actually use the Python native logging framework. -* `#53`_: Fixed an annoying bug that caused ``.jpeg`` and ``.JPG`` images - 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`_ - who spearheadded this effort. -* A simple REST API is in place, but it should be considered unstable. -* Cleaned up the consumer to use temporary directories instead of a single - scratch space. (Thanks `Pit`_) -* Improved the efficiency of the consumer by parsing pages more intelligently - and introducing a threaded OCR process (thanks again `Pit`_). -* `#45`_: Cleaned up the logic for tag matching. Reported by `darkmatter`_. -* `#47`_: Auto-rotate landscape documents. Reported by `Paul`_ and fixed by - `Pit`_. -* `#48`_: Matching algorithms should do so on a word boundary (`darkmatter`_) -* `#54`_: Documented the re-tagger (`zedster`_) -* `#57`_: Make sure file is preserved on import failure (`darkmatter`_) -* 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 -* Added IMAP mail support -* Added a re-tagging utility -* 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 -* Removed ``User`` and ``Group`` from the admin -* 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 - -.. _Alexander Menk: https://github.com/amenk -.. _puuu: https://github.com/puuu -.. _WhiteHatTux: https://github.com/WhiteHatTux -.. _Chris Nagy: https://github.com/what-name -.. _sbrl: https://github.com/sbrl -.. _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 -.. _Tikitu de Jager: https://github.com/tikitu -.. _Paul: https://github.com/polo2ro -.. _Pit: https://github.com/pitkley -.. _Wayne Werner: https://github.com/waynew -.. _darkmatter: https://github.com/darkmatter -.. _zedster: https://github.com/zedster -.. _Martin Honermeyer: https://github.com/djmaze -.. _Tim White: https://github.com/timwhite -.. _Florian Harr: https://github.com/evils -.. _Justin Snyman: https://github.com/stringlytyped -.. _Thomas Brueggemann: https://github.com/thomasbrueggemann -.. _Jake Gysland: https://github.com/jgysland -.. _Strubbl: https://github.com/strubbl -.. _CkuT: https://github.com/CkuT -.. _David Martin: https://github.com/ddddavidmartin -.. _Paperless Desktop: https://github.com/thomasbrueggemann/paperless-desktop -.. _Joshua Gilman: https://github.com/jmgilman -.. _ayounggun: https://github.com/ayounggun -.. _Kusti Skytén: https://github.com/kskyten -.. _maphy-psd: https://github.com/maphy-psd -.. _ishirav: https://github.com/ishirav -.. _Stefan Hagen: https://github.com/xkpd3 -.. _dev-rke: https://github.com/dev-rke -.. _Lukas Winkler: https://github.com/Findus23 -.. _chris-aeviator: https://github.com/chris-aeviator -.. _Dan Panzarella: https://github.com/pzl -.. _addadi: https://github.com/addadi -.. _BastianPoe: https://github.com/BastianPoe -.. _matthewmoto: https://github.com/matthewmoto -.. _Isaac: https://github.com/isaacsando -.. _Georgi Todorov: https://github.com/TeraHz -.. _Jeffrey Portman: https://github.com/ChromoX -.. _Simon Taddiken: https://github.com/skuzzle -.. _Quentin Dawans: https://github.com/ovv -.. _Martin Arendtsen: https://github.com/Arendtsen -.. _erikarvstedt: https://github.com/erikarvstedt -.. _Kyle Lucy: https://github.com/kmlucy -.. _thinkjk: https://github.com/thinkjk -.. _mcronce: https://github.com/mcronce -.. _Enno Lohmeier: https://github.com/elohmeier -.. _Mark McFate: https://github.com/SummittDweller -.. _dadosch: https://github.com/dadosch -.. _Wolfgang Mader: https://github.com/wmader -.. _Tim Brooks: https://github.com/brookst -.. _Stéphane Brunner: https://github.com/sbrunner -.. _Kilian Koeltzsch: https://github.com/kiliankoe -.. _Lukasz Soluch: https://github.com/LukaszSolo -.. _Joshua Taillon: https://github.com/jat255 -.. _dubit0: https://github.com/dubit0 -.. _ahyear: https://github.com/ahyear -.. _jonaswinkler: https://github.com/jonaswinkler -.. _thepill: https://github.com/thepill -.. _Andrew Peng: https://github.com/pengc99 -.. _euri10: https://github.com/euri10 -.. _Ulli: https://github.com/Ulli2k -.. _tsia: https://github.com/tsia -.. _Sblop: https://github.com/Sblop -.. _Colin Frei: https://github.com/colinfrei -.. _khrise: https://github.com/khrise -.. _syntonym: https://github.com/syntonym -.. _JOKer: https://github.com/MasterofJOKers -.. _Brian Cribbs: https://github.com/cribbstechnolog -.. _Brendan M. Sleight: https://github.com/bmsleight -.. _Daniel Albers: https://github.com/AlD -.. _@shamoon: https://github.com/shamoon -.. _@amenk: https://github.com/amenk -.. _@dblitt: https://github.com/dblitt -.. _@evilsidekick293: https://github.com/evilsidekick293 -.. _@m0veax: https://github.com/m0veax -.. _@fignew: https://github.com/fignew -.. _@muued: https://github.com/muued -.. _@isigmund: https://github.com/isigmund -.. _@denilsonsa: https://github.com/denilsonsa -.. _@sAksham-Ar: https://github.com/sAksham-Ar -.. _@philpagel: https://github.com/philpagel -.. _@davemachado: https://github.com/davemachado -.. _@2600box: https://github.com/2600box -.. _@qcasey: https://github.com/qcasey -.. _@kpj: https://github.com/kpj -.. _@mweimerskirch: https://github.com/mweimerskirch -.. _@filcuk: https://github.com/filcuk -.. _@FrankStrieter: https://github.com/FrankStrieter -.. _@tribut: https://github.com/tribut -.. _@yschroeder: https://github.com/yschroeder -.. _@gador: https://github.com/gador -.. _@Nicarim: https://github.com/Nicarim -.. _@bauerj: https://github.com/bauerj -.. _@a17t: https://github.com/a17t -.. _@alexander-bauer: https://github.com/alexander-bauer -.. _@apeltzer: https://github.com/apeltzer -.. _@Timoms: https://github.com/Timoms -.. _@sbrunner: https://github.com/sbrunner -.. _@slankes: https://github.com/slankes -.. _@mattlamb99: https://github.com/mattlamb99 -.. _@padraigkitterick: https://github.com/padraigkitterick -.. _@ajkavanagh: https://github.com/ajkavanagh -.. _@Tooa: https://github.com/Tooa -.. _@Unkn0wnCat: https://github.com/Unkn0wnCat -.. _@pewter77: https://github.com/pewter77 -.. _@cschmatzler: https://github.com/cschmatzler -.. _@muellermartin: https://github.com/muellermartin -.. _@stumpylog: https://github.com/stumpylog -.. _@Toxix: https://github.com/Toxix -.. _@benjaminfrank: https://github.com/benjaminfrank -.. _@azapater: https://github.com/azapater -.. _@tim-vogel: https://github.com/tim-vogel -.. _@jschpp: https://github.com/jschpp -.. _@schnuffle: https://github.com/schnuffle -.. _@GruberViktor: https://github.com/gruberviktor -.. _@hacker-h: https://github.com/hacker-h -.. _@danielBreitlauch: https://github.com/danielbreitlauch -.. _@miku323: https://github.com/miku323 -.. _@FaintGhost: https://github.com/FaintGhost -.. _@DarkoBG79: https://github.com/DarkoBG79 -.. _Kemal Secer: https://crowdin.com/profile/kemal.secer -.. _@Prominence: https://github.com/Prominence -.. _@jonasc: https://github.com/jonasc - -.. _#20: https://github.com/the-paperless-project/paperless/issues/20 -.. _#44: https://github.com/the-paperless-project/paperless/issues/44 -.. _#45: https://github.com/the-paperless-project/paperless/issues/45 -.. _#47: https://github.com/the-paperless-project/paperless/issues/47 -.. _#48: https://github.com/the-paperless-project/paperless/issues/48 -.. _#53: https://github.com/the-paperless-project/paperless/issues/53 -.. _#54: https://github.com/the-paperless-project/paperless/issues/54 -.. _#57: https://github.com/the-paperless-project/paperless/issues/57 -.. _#60: https://github.com/the-paperless-project/paperless/issues/60 -.. _#67: https://github.com/the-paperless-project/paperless/issues/67 -.. _#68: https://github.com/the-paperless-project/paperless/issues/68 -.. _#71: https://github.com/the-paperless-project/paperless/issues/71 -.. _#81: https://github.com/the-paperless-project/paperless/issues/81 -.. _#89: https://github.com/the-paperless-project/paperless/issues/89 -.. _#94: https://github.com/the-paperless-project/paperless/issues/94 -.. _#98: https://github.com/the-paperless-project/paperless/issues/98 -.. _#112: https://github.com/the-paperless-project/paperless/issues/112 -.. _#121: https://github.com/the-paperless-project/paperless/issues/121 -.. _#131: https://github.com/the-paperless-project/paperless/issues/131 -.. _#146: https://github.com/the-paperless-project/paperless/issues/146 -.. _#148: https://github.com/the-paperless-project/paperless/pull/148 -.. _#150: https://github.com/the-paperless-project/paperless/pull/150 -.. _#158: https://github.com/the-paperless-project/paperless/issues/158 -.. _#171: https://github.com/the-paperless-project/paperless/issues/171 -.. _#172: https://github.com/the-paperless-project/paperless/issues/172 -.. _#179: https://github.com/the-paperless-project/paperless/pull/179 -.. _#199: https://github.com/the-paperless-project/paperless/issues/199 -.. _#200: https://github.com/the-paperless-project/paperless/issues/200 -.. _#206: https://github.com/the-paperless-project/paperless/issues/206 -.. _#212: https://github.com/the-paperless-project/paperless/pull/212 -.. _#220: https://github.com/the-paperless-project/paperless/pull/220 -.. _#224: https://github.com/the-paperless-project/paperless/pull/224 -.. _#226: https://github.com/the-paperless-project/paperless/pull/226 -.. _#227: https://github.com/the-paperless-project/paperless/pull/227 -.. _#228: https://github.com/the-paperless-project/paperless/pull/228 -.. _#229: https://github.com/the-paperless-project/paperless/pull/229 -.. _#230: https://github.com/the-paperless-project/paperless/pull/230 -.. _#232: https://github.com/the-paperless-project/paperless/issues/232 -.. _#235: https://github.com/the-paperless-project/paperless/issues/235 -.. _#236: https://github.com/the-paperless-project/paperless/issues/236 -.. _#255: https://github.com/the-paperless-project/paperless/pull/255 -.. _#268: https://github.com/the-paperless-project/paperless/pull/268 -.. _#277: https://github.com/the-paperless-project/paperless/pull/277 -.. _#272: https://github.com/the-paperless-project/paperless/issues/272 -.. _#248: https://github.com/the-paperless-project/paperless/issues/248 -.. _#278: https://github.com/the-paperless-project/paperless/issues/248 -.. _#283: https://github.com/the-paperless-project/paperless/issues/283 -.. _#256: https://github.com/the-paperless-project/paperless/pull/256 -.. _#285: https://github.com/the-paperless-project/paperless/pull/285 -.. _#291: https://github.com/the-paperless-project/paperless/pull/291 -.. _#295: https://github.com/the-paperless-project/paperless/pull/295 -.. _#299: https://github.com/the-paperless-project/paperless/issues/299 -.. _#300: https://github.com/the-paperless-project/paperless/pull/300 -.. _#301: https://github.com/the-paperless-project/paperless/issues/301 -.. _#303: https://github.com/the-paperless-project/paperless/issues/303 -.. _#305: https://github.com/the-paperless-project/paperless/issues/305 -.. _#306: https://github.com/the-paperless-project/paperless/issues/306 -.. _#308: https://github.com/the-paperless-project/paperless/issues/308 -.. _#311: https://github.com/the-paperless-project/paperless/pull/311 -.. _#312: https://github.com/the-paperless-project/paperless/pull/312 -.. _#313: https://github.com/the-paperless-project/paperless/pull/313 -.. _#322: https://github.com/the-paperless-project/paperless/pull/322 -.. _#328: https://github.com/the-paperless-project/paperless/pull/328 -.. _#253: https://github.com/the-paperless-project/paperless/issues/253 -.. _#262: https://github.com/the-paperless-project/paperless/issues/262 -.. _#323: https://github.com/the-paperless-project/paperless/issues/323 -.. _#344: https://github.com/the-paperless-project/paperless/pull/344 -.. _#351: https://github.com/the-paperless-project/paperless/pull/351 -.. _#352: https://github.com/the-paperless-project/paperless/pull/352 -.. _#354: https://github.com/the-paperless-project/paperless/issues/354 -.. _#371: https://github.com/the-paperless-project/paperless/issues/371 -.. _#374: https://github.com/the-paperless-project/paperless/pull/374 -.. _#375: https://github.com/the-paperless-project/paperless/pull/375 -.. _#376: https://github.com/the-paperless-project/paperless/pull/376 -.. _#383: https://github.com/the-paperless-project/paperless/pull/383 -.. _#384: https://github.com/the-paperless-project/paperless/issues/384 -.. _#386: https://github.com/the-paperless-project/paperless/issues/386 -.. _#387: https://github.com/the-paperless-project/paperless/pull/387 -.. _#391: https://github.com/the-paperless-project/paperless/pull/391 -.. _#390: https://github.com/the-paperless-project/paperless/pull/390 -.. _#392: https://github.com/the-paperless-project/paperless/issues/392 -.. _#393: https://github.com/the-paperless-project/paperless/issues/393 -.. _#395: https://github.com/the-paperless-project/paperless/pull/395 -.. _#394: https://github.com/the-paperless-project/paperless/issues/394 -.. _#396: https://github.com/the-paperless-project/paperless/pull/396 -.. _#399: https://github.com/the-paperless-project/paperless/pull/399 -.. _#400: https://github.com/the-paperless-project/paperless/pull/400 -.. _#401: https://github.com/the-paperless-project/paperless/pull/401 -.. _#405: https://github.com/the-paperless-project/paperless/pull/405 -.. _#406: https://github.com/the-paperless-project/paperless/issues/406 -.. _#412: https://github.com/the-paperless-project/paperless/issues/412 -.. _#413: https://github.com/the-paperless-project/paperless/pull/413 -.. _#414: https://github.com/the-paperless-project/paperless/issues/414 -.. _#423: https://github.com/the-paperless-project/paperless/issues/423 -.. _#433: https://github.com/the-paperless-project/paperless/issues/433 -.. _#440: https://github.com/the-paperless-project/paperless/pull/440 -.. _#441: https://github.com/the-paperless-project/paperless/pull/441 -.. _#442: https://github.com/the-paperless-project/paperless/pull/442 -.. _#466: https://github.com/the-paperless-project/paperless/pull/466 -.. _#471: https://github.com/the-paperless-project/paperless/pull/471 -.. _#475: https://github.com/the-paperless-project/paperless/pull/475 -.. _#481: https://github.com/the-paperless-project/paperless/pull/481 -.. _#483: https://github.com/the-paperless-project/paperless/pull/483 -.. _#484: https://github.com/the-paperless-project/paperless/pull/484 -.. _#488: https://github.com/the-paperless-project/paperless/pull/488 -.. _#489: https://github.com/the-paperless-project/paperless/pull/489 -.. _#492: https://github.com/the-paperless-project/paperless/pull/492 -.. _#674: https://github.com/paperless-ngx/paperless-ngx/pull/674 - -.. _a new home on Docker Hub: https://hub.docker.com/r/danielquinn/paperless/ -.. _optipng: http://optipng.sourceforge.net/ -.. _DjangoQL: https://github.com/ivelum/djangoql -.. _ansible repo: https://github.com/paperless-ngx/paperless-ngx-ansible diff --git a/docs/conf.py b/docs/conf.py index 0f30772ea..096ccc1af 100644 --- a/docs/conf.py +++ b/docs/conf.py @@ -14,13 +14,17 @@ extensions = [ "sphinx.ext.imgmath", "sphinx.ext.viewcode", "sphinx_rtd_theme", + "myst_parser", ] # Add any paths that contain templates here, relative to this directory. templates_path = ["_templates"] # The suffix of source filenames. -source_suffix = ".rst" +source_suffix = { + ".rst": "restructuredtext", + ".md": "markdown", +} # The encoding of source files. # source_encoding = 'utf-8-sig' diff --git a/docs/configuration.rst b/docs/configuration.rst index 3d57236e1..b7ab978f4 100644 --- a/docs/configuration.rst +++ b/docs/configuration.rst @@ -111,6 +111,14 @@ PAPERLESS_FILENAME_FORMAT= Default is none, which disables this feature. +PAPERLESS_FILENAME_FORMAT_REMOVE_NONE= + Tells paperless to replace placeholders in `PAPERLESS_FILENAME_FORMAT` that would resolve + to 'none' to be omitted from the resulting filename. This also holds true for directory + names. + See :ref:`advanced-file_name_handling` for details. + + Defaults to `false` which disables this feature. + PAPERLESS_LOGGING_DIR= This is where paperless will store log files. @@ -416,14 +424,23 @@ PAPERLESS_OCR_IMAGE_DPI= the produced PDF documents are A4 sized. PAPERLESS_OCR_MAX_IMAGE_PIXELS= - Paperless will not OCR images that have more pixels than this limit. - This is intended to prevent decompression bombs from overloading paperless. - Increasing this limit is desired if you face a DecompressionBombError despite - the concerning file not being malicious; this could e.g. be caused by invalidly - recognized metadata. - If you have enough resources or if you are certain that your uploaded files - are not malicious you can increase this value to your needs. - The default value is 256000000, an image with more pixels than that would not be parsed. + Paperless will raise a warning when OCRing images which are over this limit and + will not OCR images which are more than twice this limit. Note this does not + prevent the document from being consumed, but could result in missing text content. + + If unset, will default to the value determined by + `Pillow `_. + + .. note:: + + Increasing this limit could cause Paperless to consume additional resources + when consuming a file. Be sure you have sufficient system resources. + + .. caution:: + + The limit is intended to prevent malicious files from consuming system resources + and causing crashes and other errors. Only increase this value if you are certain + your documents are not malicious and you need the text which was not OCRed PAPERLESS_OCR_USER_ARGS= OCRmyPDF offers many more options. Use this parameter to specify any diff --git a/docs/index.rst b/docs/index.rst index 040d39e4f..715fef588 100644 --- a/docs/index.rst +++ b/docs/index.rst @@ -52,7 +52,7 @@ resources in the documentation: * Paperless is now integrated with a :ref:`task processing queue ` that tells you at a glance when and why something is not working. -* The :ref:`changelog ` contains a detailed list of all changes +* The :doc:`changelog ` contains a detailed list of all changes in paperless-ngx. Contents diff --git a/docs/requirements.txt b/docs/requirements.txt index e69de29bb..ac4588f3f 100644 --- a/docs/requirements.txt +++ b/docs/requirements.txt @@ -0,0 +1 @@ +myst-parser==0.17.2 diff --git a/docs/scanners.rst b/docs/scanners.rst index cd3777ba2..27ba38e31 100644 --- a/docs/scanners.rst +++ b/docs/scanners.rst @@ -13,43 +13,45 @@ that works right for you based on recommendations from other Paperless users. Physical scanners ================= -+---------+----------------+-----+------+-----+-----+------+----------+----------------+ -| Brand | Model | Supports | Recommended By | -+---------+----------------+-----+------+-----+-----+------+----------+----------------+ -| | | FTP | SFTP | NFS | SMB | SMTP | API [1]_ | | -+=========+================+=====+======+=====+=====+======+==========+================+ -| Brother | `ADS-1700W`_ | yes | | | yes | yes | |`holzhannes`_ | -+---------+----------------+-----+------+-----+-----+------+----------+----------------+ -| Brother | `ADS-1600W`_ | yes | | | yes | yes | |`holzhannes`_ | -+---------+----------------+-----+------+-----+-----+------+----------+----------------+ -| Brother | `ADS-1500W`_ | yes | | | yes | yes | |`danielquinn`_ | -+---------+----------------+-----+------+-----+-----+------+----------+----------------+ -| Brother | `ADS-1100W`_ | yes | | | | | |`ytzelf`_ | -+---------+----------------+-----+------+-----+-----+------+----------+----------------+ -| Brother | `ADS-2800W`_ | yes | yes | | yes | yes | |`philpagel`_ | -+---------+----------------+-----+------+-----+-----+------+----------+----------------+ -| Brother | `MFC-J6930DW`_ | yes | | | | | |`ayounggun`_ | -+---------+----------------+-----+------+-----+-----+------+----------+----------------+ -| Brother | `MFC-L5850DW`_ | yes | | | | yes | |`holzhannes`_ | -+---------+----------------+-----+------+-----+-----+------+----------+----------------+ -| Brother | `MFC-L2750DW`_ | yes | | | yes | yes | |`muued`_ | -+---------+----------------+-----+------+-----+-----+------+----------+----------------+ -| Brother | `MFC-J5910DW`_ | yes | | | | | |`bmsleight`_ | -+---------+----------------+-----+------+-----+-----+------+----------+----------------+ -| Brother | `MFC-8950DW`_ | yes | | | yes | yes | |`philpagel`_ | -+---------+----------------+-----+------+-----+-----+------+----------+----------------+ -| Brother | `MFC-9142CDN`_ | yes | | | yes | | |`REOLDEV`_ | -+---------+----------------+-----+------+-----+-----+------+----------+----------------+ -| Fujitsu | `ix500`_ | yes | | | yes | | |`eonist`_ | -+---------+----------------+-----+------+-----+-----+------+----------+----------------+ -| Epson | `ES-580W`_ | yes | | | yes | yes | |`fignew`_ | -+---------+----------------+-----+------+-----+-----+------+----------+----------------+ -| Epson | `WF-7710DWF`_ | yes | | | yes | | |`Skylinar`_ | -+---------+----------------+-----+------+-----+-----+------+----------+----------------+ -| Fujitsu | `S1300i`_ | yes | | | yes | | |`jonaswinkler`_ | -+---------+----------------+-----+------+-----+-----+------+----------+----------------+ -| Doxie | `Q2`_ | | | | | | yes |`Unkn0wnCat`_ | -+---------+----------------+-----+------+-----+-----+------+----------+----------------+ ++---------+-------------------+-----+------+-----+----------+------+----------+----------------+ +| Brand | Model | Supports | Recommended By | ++---------+-------------------+-----+------+-----+----------+------+----------+----------------+ +| | | FTP | SFTP | NFS | SMB | SMTP | API [1]_ | | ++=========+===================+=====+======+=====+==========+======+==========+================+ +| Brother | `ADS-1700W`_ | yes | | | yes | yes | |`holzhannes`_ | ++---------+-------------------+-----+------+-----+----------+------+----------+----------------+ +| Brother | `ADS-1600W`_ | yes | | | yes | yes | |`holzhannes`_ | ++---------+-------------------+-----+------+-----+----------+------+----------+----------------+ +| Brother | `ADS-1500W`_ | yes | | | yes | yes | |`danielquinn`_ | ++---------+-------------------+-----+------+-----+----------+------+----------+----------------+ +| Brother | `ADS-1100W`_ | yes | | | | | |`ytzelf`_ | ++---------+-------------------+-----+------+-----+----------+------+----------+----------------+ +| Brother | `ADS-2800W`_ | yes | yes | | yes | yes | |`philpagel`_ | ++---------+-------------------+-----+------+-----+----------+------+----------+----------------+ +| Brother | `MFC-J6930DW`_ | yes | | | | | |`ayounggun`_ | ++---------+-------------------+-----+------+-----+----------+------+----------+----------------+ +| Brother | `MFC-L5850DW`_ | yes | | | | yes | |`holzhannes`_ | ++---------+-------------------+-----+------+-----+----------+------+----------+----------------+ +| Brother | `MFC-L2750DW`_ | yes | | | yes | yes | |`muued`_ | ++---------+-------------------+-----+------+-----+----------+------+----------+----------------+ +| Brother | `MFC-J5910DW`_ | yes | | | | | |`bmsleight`_ | ++---------+-------------------+-----+------+-----+----------+------+----------+----------------+ +| Brother | `MFC-8950DW`_ | yes | | | yes | yes | |`philpagel`_ | ++---------+-------------------+-----+------+-----+----------+------+----------+----------------+ +| Brother | `MFC-9142CDN`_ | yes | | | yes | | |`REOLDEV`_ | ++---------+-------------------+-----+------+-----+----------+------+----------+----------------+ +| Canon | `Maxify MB 5350`_ | | | | yes [2]_ | yes | |`eingemaischt`_ | ++---------+-------------------+-----+------+-----+----------+------+----------+----------------+ +| Fujitsu | `ix500`_ | yes | | | yes | | |`eonist`_ | ++---------+-------------------+-----+------+-----+----------+------+----------+----------------+ +| Epson | `ES-580W`_ | yes | | | yes | yes | |`fignew`_ | ++---------+-------------------+-----+------+-----+----------+------+----------+----------------+ +| Epson | `WF-7710DWF`_ | yes | | | yes | | |`Skylinar`_ | ++---------+-------------------+-----+------+-----+----------+------+----------+----------------+ +| Fujitsu | `S1300i`_ | yes | | | yes | | |`jonaswinkler`_ | ++---------+-------------------+-----+------+-----+----------+------+----------+----------------+ +| Doxie | `Q2`_ | | | | | | yes |`Unkn0wnCat`_ | ++---------+-------------------+-----+------+-----+----------+------+----------+----------------+ .. _MFC-L5850DW: https://www.brother-usa.com/products/mfcl5850dw .. _MFC-L2750DW: https://www.brother.de/drucker/laserdrucker/mfc-l2750dw @@ -58,6 +60,7 @@ Physical scanners .. _ADS-1500W: https://www.brother.ca/en/p/ads1500w .. _ADS-1100W: https://support.brother.com/g/b/downloadtop.aspx?c=fr&lang=fr&prod=ads1100w_eu_as_cn .. _ADS-2800W: https://www.brother-usa.com/products/ads2800w +.. _Maxify MB 5350: https://www.canon.de/printers/inkjet/maxify/maxify_mb5350/specification.html .. _MFC-J6930DW: https://www.brother.ca/en/p/MFCJ6930DW .. _MFC-J5910DW: https://www.brother.co.uk/printers/inkjet-printers/mfcj5910dw .. _MFC-8950DW: https://www.brother-usa.com/products/mfc8950dw @@ -81,8 +84,11 @@ Physical scanners .. _Unkn0wnCat: https://github.com/Unkn0wnCat .. _muued: https://github.com/muued .. _philpagel: https://github.com/philpagel +.. _eingemaischt: https://github.com/eingemaischt .. [1] Scanners with API Integration allow to push scanned documents directly to :ref:`Paperless API `, sometimes referred to as Webhook or Document POST. +.. [2] Canon Multi Function Printers show strange behavior over SMB. They close and reopen the file after every page. It's recommended to tune the + :ref:`polling ` and :ref:`inotify ` configuration values for your scanner. The scanner timeout is 3 minutes, so ``180`` is a good starting point. Mobile phone software ===================== @@ -105,6 +111,9 @@ You can use your phone to "scan" documents. The regular camera app will work, bu On Android, you can use these applications in combination with one of the :ref:`Paperless-ngx compatible apps ` to "Share" the documents produced by these scanner apps with paperless. On iOS, you can share the scanned documents via iOS-Sharing to other mail, WebDav or FTP apps. +There is also an iOS Shortcut that allows you to directly upload text, PDF and image documents available here: https://www.icloud.com/shortcuts/d234abc0885040129d9d75fa45fe1154 +Please note this only works for documents downloaded to iCloud / the device, in other words not directly from a URL. + .. _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 .. _OCR Scanner - QuickScan: https://apps.apple.com/us/app/quickscan-scanner-text-ocr/id1513790291 diff --git a/docs/setup.rst b/docs/setup.rst index d3290b432..90b952e4c 100644 --- a/docs/setup.rst +++ b/docs/setup.rst @@ -332,6 +332,12 @@ writing. Windows is not and will never be supported. 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. + .. note:: + + On bare-metal installations using SQLite, ensure the + `JSON1 extension `_ is enabled. This is + usually the case, but not always. + 4. Get the release archive from ``_. 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``. @@ -513,7 +519,7 @@ 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 ` and take note of breaking changes. +* Read the :doc:`changelog ` and take note of breaking changes. * 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 diff --git a/docs/troubleshooting.rst b/docs/troubleshooting.rst index 08cc916b0..3db9a069e 100644 --- a/docs/troubleshooting.rst +++ b/docs/troubleshooting.rst @@ -237,11 +237,12 @@ open the affected documents in paperless for editing. Paperless will continue to show the invalid metadata. Consumer fails with a FileNotFoundError -############################ +####################################### You might find messages like these in your log files: .. code:: + [ERROR] [paperless.consumer] Error while consuming document SCN_0001.pdf: FileNotFoundError: [Errno 2] No such file or directory: '/tmp/ocrmypdf.io.yhk3zbv0/origin.pdf' Traceback (most recent call last): File "/app/paperless/src/paperless_tesseract/parsers.py", line 261, in parse @@ -266,11 +267,12 @@ check for documents, try adjusting the :ref:`inotify configuration `. Consumer fails waiting for file to remain unmodified. -############################ +##################################################### You might find messages like these in your log files: .. code:: + [ERROR] [paperless.management.consumer] Timeout while waiting on file /usr/src/paperless/src/../consume/SCN_0001.pdf to remain unmodified. This indicates paperless timed out while waiting for the file to be completely written to the consume folder. @@ -282,11 +284,12 @@ Adjusting :ref:`polling configuration ` values should res back in, for the initial failing file to be consumed. Consumer fails reporting "OS reports file as busy still". -############################ +######################################################### You might find messages like these in your log files: .. code:: + [WARNING] [paperless.management.consumer] Not consuming file /usr/src/paperless/src/../consume/SCN_0001.pdf: OS reports file as busy still This indicates paperless was unable to open the file, as the OS reported the file as still being in use. To prevent a diff --git a/paperless.conf.example b/paperless.conf.example index be5071636..97e907e1f 100644 --- a/paperless.conf.example +++ b/paperless.conf.example @@ -23,6 +23,7 @@ #PAPERLESS_MEDIA_ROOT=../media #PAPERLESS_STATICDIR=../static #PAPERLESS_FILENAME_FORMAT= +#PAPERLESS_FILENAME_FORMAT_REMOVE_NONE= # Security and hosting diff --git a/requirements.txt b/requirements.txt index 07ab384c1..a9b584b60 100644 --- a/requirements.txt +++ b/requirements.txt @@ -17,11 +17,11 @@ autobahn==22.4.2; python_version >= '3.7' automat==20.2.0 backports.zoneinfo==0.2.1; python_version < '3.9' blessed==1.19.1; python_version >= '2.7' -certifi==2021.10.8 +certifi==2022.5.18.1; python_version >= '3.6' cffi==1.15.0 channels-redis==3.4.0 channels==3.0.4 -charset-normalizer==2.0.12; python_version >= '3.5' +charset-normalizer==2.0.12; python_full_version >= '3.5.0' click==8.1.3; python_version >= '3.7' coloredlogs==15.0.1; python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3, 3.4' concurrent-log-handler==0.9.20 @@ -55,14 +55,14 @@ joblib==1.1.0; python_version >= '3.6' langdetect==1.0.9 lxml==4.8.0; python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3, 3.4' msgpack==1.0.3 -numpy==1.22.3; python_version >= '3.8' +numpy==1.22.4; python_version >= '3.8' ocrmypdf==13.4.4 packaging==21.3; python_version >= '3.6' pathvalidate==2.5.0 pdf2image==1.16.0 pdfminer.six==20220506 pikepdf==5.1.3 -pillow==9.1.0 +pillow==9.1.1 pluggy==1.0.0; python_version >= '3.6' portalocker==2.4.0; python_version >= '3' psycopg2==2.9.3 @@ -73,9 +73,9 @@ pyopenssl==22.0.0 pyparsing==3.0.9; python_full_version >= '3.6.8' python-dateutil==2.8.2 python-dotenv==0.20.0 -python-gnupg==0.4.8 +python-gnupg==0.4.9 python-levenshtein==0.12.2 -python-magic==0.4.25 +python-magic==0.4.26 pytz-deprecation-shim==0.1.0.post0; python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3, 3.4, 3.5' pytz==2022.1 pyyaml==6.0 @@ -85,12 +85,12 @@ regex==2022.3.2; python_version >= '3.6' reportlab==3.6.9; python_version >= '3.7' and python_version < '4' requests==2.27.1; python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3, 3.4, 3.5' scikit-learn==1.0.2 -scipy==1.8.0; python_version < '3.11' and python_version >= '3.8' +scipy==1.8.1; python_version < '3.11' and python_version >= '3.8' service-identity==21.1.0 -setuptools==62.2.0; python_version >= '3.7' +setuptools==62.3.2; python_version >= '3.7' six==1.16.0; python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3' -sniffio==1.2.0; python_version >= '3.5' -sqlparse==0.4.2; python_version >= '3.5' +sniffio==1.2.0; python_full_version >= '3.5.0' +sqlparse==0.4.2; python_full_version >= '3.5.0' threadpoolctl==3.1.0; python_version >= '3.6' tika==1.24 tqdm==4.64.0 @@ -106,7 +106,7 @@ watchdog==2.1.8 watchgod==0.8.2 wcwidth==0.2.5 websockets==10.3 -whitenoise==6.0.0 +whitenoise==6.1.0 whoosh==2.7.4 zipp==3.8.0; python_version < '3.9' zope.interface==5.4.0; python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3, 3.4' diff --git a/src-ui/cypress.json b/src-ui/cypress.json index bd321dcbf..3a58fab3f 100644 --- a/src-ui/cypress.json +++ b/src-ui/cypress.json @@ -6,4 +6,4 @@ "pluginsFile": "cypress/plugins/index.ts", "fixturesFolder": "cypress/fixtures", "baseUrl": "http://localhost:4200" -} \ No newline at end of file +} diff --git a/src-ui/cypress/fixtures/ui_settings/settings.json b/src-ui/cypress/fixtures/ui_settings/settings.json new file mode 100644 index 000000000..0e844b5e1 --- /dev/null +++ b/src-ui/cypress/fixtures/ui_settings/settings.json @@ -0,0 +1,34 @@ +{ + "user_id": 1, + "username": "admin", + "display_name": "Admin", + "settings": { + "language": "", + "bulk_edit": { + "confirmation_dialogs": true, + "apply_on_close": false + }, + "documentListSize": 50, + "dark_mode": { + "use_system": true, + "enabled": "false", + "thumb_inverted": "true" + }, + "theme": { + "color": "#b198e5" + }, + "document_details": { + "native_pdf_viewer": false + }, + "date_display": { + "date_locale": "", + "date_format": "mediumDate" + }, + "notifications": { + "consumer_new_documents": true, + "consumer_success": true, + "consumer_failed": true, + "consumer_suppress_on_dashboard": true + } + } +} diff --git a/src-ui/cypress/integration/document-detail.spec.ts b/src-ui/cypress/integration/document-detail.spec.ts index 9ff566760..8faf2412c 100644 --- a/src-ui/cypress/integration/document-detail.spec.ts +++ b/src-ui/cypress/integration/document-detail.spec.ts @@ -2,6 +2,9 @@ describe('document-detail', () => { beforeEach(() => { this.modifiedDocuments = [] + cy.intercept('http://localhost:8000/api/ui_settings/', { + fixture: 'ui_settings/settings.json', + }) cy.fixture('documents/documents.json').then((documentsJson) => { cy.intercept('GET', 'http://localhost:8000/api/documents/1/', (req) => { let response = { ...documentsJson } diff --git a/src-ui/cypress/integration/documents-list.spec.ts b/src-ui/cypress/integration/documents-list.spec.ts index 5b923ed2f..169bd333b 100644 --- a/src-ui/cypress/integration/documents-list.spec.ts +++ b/src-ui/cypress/integration/documents-list.spec.ts @@ -3,6 +3,9 @@ describe('documents-list', () => { this.bulkEdits = {} // mock API methods + cy.intercept('http://localhost:8000/api/ui_settings/', { + fixture: 'ui_settings/settings.json', + }) cy.fixture('documents/documents.json').then((documentsJson) => { // bulk edit cy.intercept( diff --git a/src-ui/cypress/integration/manage.spec.ts b/src-ui/cypress/integration/manage.spec.ts index e28556a24..ef7e12723 100644 --- a/src-ui/cypress/integration/manage.spec.ts +++ b/src-ui/cypress/integration/manage.spec.ts @@ -1,5 +1,8 @@ describe('manage', () => { beforeEach(() => { + cy.intercept('http://localhost:8000/api/ui_settings/', { + fixture: 'ui_settings/settings.json', + }) cy.intercept('http://localhost:8000/api/correspondents/*', { fixture: 'correspondents/correspondents.json', }) diff --git a/src-ui/cypress/integration/settings.spec.ts b/src-ui/cypress/integration/settings.spec.ts index 72f9835f2..16e706b63 100644 --- a/src-ui/cypress/integration/settings.spec.ts +++ b/src-ui/cypress/integration/settings.spec.ts @@ -3,45 +3,53 @@ describe('settings', () => { this.modifiedViews = [] // mock API methods - cy.fixture('saved_views/savedviews.json').then((savedViewsJson) => { - // saved views PATCH - cy.intercept( - 'PATCH', - 'http://localhost:8000/api/saved_views/*', - (req) => { - this.modifiedViews.push(req.body) // store this for later - req.reply({ result: 'OK' }) - } - ) + cy.intercept('http://localhost:8000/api/ui_settings/', { + fixture: 'ui_settings/settings.json', + }).then(() => { + cy.fixture('saved_views/savedviews.json').then((savedViewsJson) => { + // saved views PATCH + cy.intercept( + 'PATCH', + 'http://localhost:8000/api/saved_views/*', + (req) => { + this.modifiedViews.push(req.body) // store this for later + req.reply({ result: 'OK' }) + } + ) - cy.intercept('GET', 'http://localhost:8000/api/saved_views/*', (req) => { - let response = { ...savedViewsJson } - if (this.modifiedViews.length) { - response.results = response.results.map((v) => { - if (this.modifiedViews.find((mv) => mv.id == v.id)) - v = this.modifiedViews.find((mv) => mv.id == v.id) - return v - }) - } + cy.intercept( + 'GET', + 'http://localhost:8000/api/saved_views/*', + (req) => { + let response = { ...savedViewsJson } + if (this.modifiedViews.length) { + response.results = response.results.map((v) => { + if (this.modifiedViews.find((mv) => mv.id == v.id)) + v = this.modifiedViews.find((mv) => mv.id == v.id) + return v + }) + } - req.reply(response) - }).as('savedViews') - }) - - cy.fixture('documents/documents.json').then((documentsJson) => { - cy.intercept('GET', 'http://localhost:8000/api/documents/1/', (req) => { - let response = { ...documentsJson } - response = response.results.find((d) => d.id == 1) - req.reply(response) + req.reply(response) + } + ).as('savedViews') }) - }) - cy.intercept('http://localhost:8000/api/documents/1/metadata/', { - fixture: 'documents/1/metadata.json', - }) + cy.fixture('documents/documents.json').then((documentsJson) => { + cy.intercept('GET', 'http://localhost:8000/api/documents/1/', (req) => { + let response = { ...documentsJson } + response = response.results.find((d) => d.id == 1) + req.reply(response) + }) + }) - cy.intercept('http://localhost:8000/api/documents/1/suggestions/', { - fixture: 'documents/1/suggestions.json', + cy.intercept('http://localhost:8000/api/documents/1/metadata/', { + fixture: 'documents/1/metadata.json', + }) + + cy.intercept('http://localhost:8000/api/documents/1/suggestions/', { + fixture: 'documents/1/suggestions.json', + }) }) cy.viewport(1024, 1024) diff --git a/src-ui/messages.xlf b/src-ui/messages.xlf index 0c9ca23e0..f4c0d6598 100644 --- a/src-ui/messages.xlf +++ b/src-ui/messages.xlf @@ -256,21 +256,21 @@ Document added src/app/app.component.ts - 71 + 72 Document was added to paperless. src/app/app.component.ts - 73 + 74 Open document src/app/app.component.ts - 74 + 75 src/app/components/dashboard/widgets/upload-file-widget/upload-file-widget.component.html @@ -281,28 +281,28 @@ Could not add : src/app/app.component.ts - 89 + 90 New document detected src/app/app.component.ts - 103 + 104 Document is being processed by paperless. src/app/app.component.ts - 105 + 106 Initiating upload... src/app/app.component.ts - 140 + 141 @@ -321,7 +321,7 @@ - Logged in as + Logged in as src/app/components/app-frame/app-frame.component.html 34 @@ -335,7 +335,7 @@ src/app/components/app-frame/app-frame.component.html - 148 + 155 src/app/components/manage/settings/settings.component.html @@ -382,6 +382,10 @@ src/app/components/manage/management-list/management-list.component.html 54 + + src/app/components/manage/management-list/management-list.component.html + 54 + Saved views @@ -438,7 +442,7 @@ src/app/components/document-list/filter-editor/filter-editor.component.html - 21 + 22 @@ -448,11 +452,18 @@ 134 + + Storage paths + + src/app/components/app-frame/app-frame.component.html + 141 + + Logs src/app/components/app-frame/app-frame.component.html - 141 + 148 src/app/components/manage/logs/logs.component.html @@ -463,70 +474,70 @@ Admin src/app/components/app-frame/app-frame.component.html - 155 + 162 Info src/app/components/app-frame/app-frame.component.html - 161 + 168 Documentation src/app/components/app-frame/app-frame.component.html - 168 + 175 GitHub src/app/components/app-frame/app-frame.component.html - 176 + 183 Suggest an idea src/app/components/app-frame/app-frame.component.html - 182 + 189 is available. src/app/components/app-frame/app-frame.component.html - 191 + 198 Click to view. src/app/components/app-frame/app-frame.component.html - 191 + 198 Checking for updates is disabled. src/app/components/app-frame/app-frame.component.html - 194 + 201 Click for more information. src/app/components/app-frame/app-frame.component.html - 194 + 201 Update available src/app/components/app-frame/app-frame.component.html - 202 + 209 @@ -551,15 +562,19 @@ src/app/components/document-list/bulk-editor/bulk-editor.component.ts - 217 + 234 src/app/components/document-list/bulk-editor/bulk-editor.component.ts - 255 + 272 src/app/components/document-list/bulk-editor/bulk-editor.component.ts - 291 + 308 + + + src/app/components/document-list/bulk-editor/bulk-editor.component.ts + 344 @@ -625,6 +640,10 @@ src/app/components/common/edit-dialog/document-type-edit-dialog/document-type-edit-dialog.component.html 9 + + src/app/components/common/edit-dialog/storage-path-edit-dialog/storage-path-edit-dialog.component.html + 13 + src/app/components/common/edit-dialog/tag-edit-dialog/tag-edit-dialog.component.html 8 @@ -645,6 +664,14 @@ src/app/components/manage/management-list/management-list.component.html 9 + + src/app/components/manage/management-list/management-list.component.html + 9 + + + src/app/components/manage/management-list/management-list.component.html + 19 + src/app/components/manage/management-list/management-list.component.html 19 @@ -672,6 +699,10 @@ src/app/components/common/edit-dialog/document-type-edit-dialog/document-type-edit-dialog.component.html 10 + + src/app/components/common/edit-dialog/storage-path-edit-dialog/storage-path-edit-dialog.component.html + 15 + src/app/components/common/edit-dialog/tag-edit-dialog/tag-edit-dialog.component.html 13 @@ -687,6 +718,10 @@ src/app/components/common/edit-dialog/document-type-edit-dialog/document-type-edit-dialog.component.html 11 + + src/app/components/common/edit-dialog/storage-path-edit-dialog/storage-path-edit-dialog.component.html + 16 + src/app/components/common/edit-dialog/tag-edit-dialog/tag-edit-dialog.component.html 14 @@ -702,6 +737,10 @@ src/app/components/common/edit-dialog/document-type-edit-dialog/document-type-edit-dialog.component.html 12 + + src/app/components/common/edit-dialog/storage-path-edit-dialog/storage-path-edit-dialog.component.html + 17 + src/app/components/common/edit-dialog/tag-edit-dialog/tag-edit-dialog.component.html 15 @@ -717,6 +756,10 @@ src/app/components/common/edit-dialog/document-type-edit-dialog/document-type-edit-dialog.component.html 16 + + src/app/components/common/edit-dialog/storage-path-edit-dialog/storage-path-edit-dialog.component.html + 21 + src/app/components/common/edit-dialog/tag-edit-dialog/tag-edit-dialog.component.html 18 @@ -744,13 +787,17 @@ src/app/components/common/edit-dialog/document-type-edit-dialog/document-type-edit-dialog.component.html 17 + + src/app/components/common/edit-dialog/storage-path-edit-dialog/storage-path-edit-dialog.component.html + 22 + src/app/components/common/edit-dialog/tag-edit-dialog/tag-edit-dialog.component.html 19 src/app/components/document-detail/document-detail.component.html - 166 + 168 src/app/components/document-list/save-view-config-dialog/save-view-config-dialog.component.html @@ -810,6 +857,59 @@ 60 + + Note that editing a path does not apply changes to stored files until you have run the 'document_renamer' utility. See the documentation. + + src/app/components/common/edit-dialog/storage-path-edit-dialog/storage-path-edit-dialog.component.html + 10 + + + + Path + + src/app/components/common/edit-dialog/storage-path-edit-dialog/storage-path-edit-dialog.component.html + 14 + + + src/app/components/manage/storage-path-list/storage-path-list.component.ts + 36 + + + + e.g. + + src/app/components/common/edit-dialog/storage-path-edit-dialog/storage-path-edit-dialog.component.ts + 25 + + + + or use slashes to add directories e.g. + + src/app/components/common/edit-dialog/storage-path-edit-dialog/storage-path-edit-dialog.component.ts + 27 + + + + See <a target="_blank" href="https://paperless-ngx.readthedocs.io/en/latest/advanced_usage.html#file-name-handling">documentation</a> for full list. + + src/app/components/common/edit-dialog/storage-path-edit-dialog/storage-path-edit-dialog.component.ts + 29 + + + + Create new storage path + + src/app/components/common/edit-dialog/storage-path-edit-dialog/storage-path-edit-dialog.component.ts + 34 + + + + Edit storage path + + src/app/components/common/edit-dialog/storage-path-edit-dialog/storage-path-edit-dialog.component.ts + 38 + + Color @@ -884,13 +984,13 @@ src/app/components/common/input/select/select.component.html 11 - Used for both types and correspondents + Used for both types, correspondents, storage paths Suggestions: src/app/components/common/input/select/select.component.html - 29 + 30 src/app/components/common/input/tags/tags.component.html @@ -942,17 +1042,17 @@ - Hello , welcome to Paperless-ngx! + Hello , welcome to Paperless-ngx! src/app/components/dashboard/dashboard.component.ts - 27 + 19 Welcome to Paperless-ngx! src/app/components/dashboard/dashboard.component.ts - 29 + 21 @@ -974,15 +1074,15 @@ src/app/components/document-list/document-list.component.html - 146 + 152 src/app/components/document-list/filter-editor/filter-editor.component.html - 44 + 54 src/app/services/rest/document.service.ts - 21 + 22 @@ -1001,11 +1101,11 @@ src/app/components/document-list/filter-editor/filter-editor.component.ts - 126 + 131 src/app/services/rest/document.service.ts - 19 + 20 @@ -1095,7 +1195,7 @@ src/app/components/document-list/bulk-editor/bulk-editor.component.ts - 162 + 179 this string is used to separate processing, failed and added on the file upload widget @@ -1181,7 +1281,7 @@ src/app/components/document-list/bulk-editor/bulk-editor.component.html - 81 + 90 src/app/components/manage/management-list/management-list.component.html @@ -1195,6 +1295,14 @@ src/app/components/manage/management-list/management-list.component.html 46 + + src/app/components/manage/management-list/management-list.component.html + 46 + + + src/app/components/manage/management-list/management-list.component.html + 65 + src/app/components/manage/management-list/management-list.component.html 65 @@ -1224,7 +1332,7 @@ src/app/components/document-list/bulk-editor/bulk-editor.component.html - 68 + 77 src/app/components/document-list/document-card-large/document-card-large.component.html @@ -1232,7 +1340,7 @@ src/app/components/document-list/document-card-small/document-card-small.component.html - 82 + 86 @@ -1311,11 +1419,11 @@ src/app/components/document-list/filter-editor/filter-editor.component.html - 29 + 30 src/app/services/rest/document.service.ts - 18 + 19 @@ -1334,25 +1442,51 @@ src/app/components/document-list/filter-editor/filter-editor.component.html - 36 + 37 src/app/services/rest/document.service.ts - 20 + 21 + + + + Storage path + + src/app/components/document-detail/document-detail.component.html + 76 + + + src/app/components/document-list/bulk-editor/bulk-editor.component.html + 56 + + + src/app/components/document-list/document-list.component.html + 146 + + + src/app/components/document-list/filter-editor/filter-editor.component.html + 44 + + + + Default + + src/app/components/document-detail/document-detail.component.html + 77 Content src/app/components/document-detail/document-detail.component.html - 82 + 84 Metadata src/app/components/document-detail/document-detail.component.html - 91 + 93 src/app/components/document-detail/metadata-collapse/metadata-collapse.component.ts @@ -1363,102 +1497,102 @@ Date modified src/app/components/document-detail/document-detail.component.html - 97 + 99 Date added src/app/components/document-detail/document-detail.component.html - 101 + 103 Media filename src/app/components/document-detail/document-detail.component.html - 105 + 107 Original MD5 checksum src/app/components/document-detail/document-detail.component.html - 109 + 111 Original file size src/app/components/document-detail/document-detail.component.html - 113 + 115 Original mime type src/app/components/document-detail/document-detail.component.html - 117 + 119 Archive MD5 checksum src/app/components/document-detail/document-detail.component.html - 121 + 123 Archive file size src/app/components/document-detail/document-detail.component.html - 125 + 127 Original document metadata src/app/components/document-detail/document-detail.component.html - 131 + 133 Archived document metadata src/app/components/document-detail/document-detail.component.html - 132 + 134 Enter Password src/app/components/document-detail/document-detail.component.html - 154 + 156 src/app/components/document-detail/document-detail.component.html - 184 + 186 Discard src/app/components/document-detail/document-detail.component.html - 164 + 166 Save & next src/app/components/document-detail/document-detail.component.html - 165 + 167 Confirm delete src/app/components/document-detail/document-detail.component.ts - 423 + 469 src/app/components/manage/management-list/management-list.component.ts @@ -1469,28 +1603,28 @@ Do you really want to delete document ""? src/app/components/document-detail/document-detail.component.ts - 424 + 470 The files for this document will be deleted permanently. This operation cannot be undone. src/app/components/document-detail/document-detail.component.ts - 425 + 471 Delete document src/app/components/document-detail/document-detail.component.ts - 427 + 473 Error deleting document: src/app/components/document-detail/document-detail.component.ts - 443 + 489 @@ -1522,7 +1656,7 @@ src/app/components/document-list/filter-editor/filter-editor.component.html - 22 + 23 @@ -1533,7 +1667,7 @@ src/app/components/document-list/filter-editor/filter-editor.component.html - 30 + 31 @@ -1544,14 +1678,25 @@ src/app/components/document-list/filter-editor/filter-editor.component.html - 37 + 38 + + + + Filter storage paths + + src/app/components/document-list/bulk-editor/bulk-editor.component.html + 57 + + + src/app/components/document-list/filter-editor/filter-editor.component.html + 45 Download originals src/app/components/document-list/bulk-editor/bulk-editor.component.html - 73 + 82 @@ -1560,25 +1705,25 @@ )"/> src/app/components/document-list/bulk-editor/bulk-editor.component.ts - 97,99 + 103,105 "" src/app/components/document-list/bulk-editor/bulk-editor.component.ts - 154 + 171 src/app/components/document-list/bulk-editor/bulk-editor.component.ts - 160 + 177 "" and "" src/app/components/document-list/bulk-editor/bulk-editor.component.ts - 156 + 173 This is for messages like 'modify "tag1" and "tag2"' @@ -1586,7 +1731,7 @@ and "" src/app/components/document-list/bulk-editor/bulk-editor.component.ts - 164,166 + 181,183 this is for messages like 'modify "tag1", "tag2" and "tag3"' @@ -1594,14 +1739,14 @@ Confirm tags assignment src/app/components/document-list/bulk-editor/bulk-editor.component.ts - 181 + 198 This operation will add the tag "" to selected document(s). src/app/components/document-list/bulk-editor/bulk-editor.component.ts - 187 + 204 @@ -1610,14 +1755,14 @@ )"/> to selected document(s). src/app/components/document-list/bulk-editor/bulk-editor.component.ts - 192,194 + 209,211 This operation will remove the tag "" from selected document(s). src/app/components/document-list/bulk-editor/bulk-editor.component.ts - 200 + 217 @@ -1626,7 +1771,7 @@ )"/> from selected document(s). src/app/components/document-list/bulk-editor/bulk-editor.component.ts - 205,207 + 222,224 @@ -1637,77 +1782,98 @@ )"/> on selected document(s). src/app/components/document-list/bulk-editor/bulk-editor.component.ts - 209,213 + 226,230 Confirm correspondent assignment src/app/components/document-list/bulk-editor/bulk-editor.component.ts - 248 + 265 This operation will assign the correspondent "" to selected document(s). src/app/components/document-list/bulk-editor/bulk-editor.component.ts - 250 + 267 This operation will remove the correspondent from selected document(s). src/app/components/document-list/bulk-editor/bulk-editor.component.ts - 252 + 269 Confirm document type assignment src/app/components/document-list/bulk-editor/bulk-editor.component.ts - 284 + 301 This operation will assign the document type "" to selected document(s). src/app/components/document-list/bulk-editor/bulk-editor.component.ts - 286 + 303 This operation will remove the document type from selected document(s). src/app/components/document-list/bulk-editor/bulk-editor.component.ts - 288 + 305 + + + + Confirm storage path assignment + + src/app/components/document-list/bulk-editor/bulk-editor.component.ts + 337 + + + + This operation will assign the storage path "" to selected document(s). + + src/app/components/document-list/bulk-editor/bulk-editor.component.ts + 339 + + + + This operation will remove the storage path from selected document(s). + + src/app/components/document-list/bulk-editor/bulk-editor.component.ts + 341 Delete confirm src/app/components/document-list/bulk-editor/bulk-editor.component.ts - 309 + 362 This operation will permanently delete selected document(s). src/app/components/document-list/bulk-editor/bulk-editor.component.ts - 310 + 363 This operation cannot be undone. src/app/components/document-list/bulk-editor/bulk-editor.component.ts - 311 + 364 Delete document(s) src/app/components/document-list/bulk-editor/bulk-editor.component.ts - 313 + 366 @@ -1718,7 +1884,11 @@ src/app/components/document-list/document-card-small/document-card-small.component.html - 26 + 24 + + + src/app/components/document-list/document-list.component.html + 173 @@ -1729,7 +1899,11 @@ src/app/components/document-list/document-card-small/document-card-small.component.html - 15 + 14 + + + src/app/components/document-list/document-list.component.html + 178 @@ -1740,7 +1914,7 @@ src/app/components/document-list/document-card-small/document-card-small.component.html - 66 + 70 src/app/components/manage/management-list/management-list.component.html @@ -1754,6 +1928,14 @@ src/app/components/manage/management-list/management-list.component.html 45 + + src/app/components/manage/management-list/management-list.component.html + 45 + + + src/app/components/manage/management-list/management-list.component.html + 59 + src/app/components/manage/management-list/management-list.component.html 59 @@ -1774,32 +1956,74 @@ 50 - - Score: + + Filter by document type + + src/app/components/document-list/document-card-large/document-card-large.component.html + 63 + + + src/app/components/document-list/document-card-small/document-card-small.component.html + 31 + + + src/app/components/document-list/document-list.component.html + 182 + + + + Filter by storage path + + src/app/components/document-list/document-card-large/document-card-large.component.html + 70 + + + src/app/components/document-list/document-card-small/document-card-small.component.html + 38 + + + src/app/components/document-list/document-list.component.html + 187 + + + + Created: src/app/components/document-list/document-card-large/document-card-large.component.html 85 - - - Created: src/app/components/document-list/document-card-small/document-card-small.component.html - 43 + 48 - Added: + Added: + + src/app/components/document-list/document-card-large/document-card-large.component.html + 86 + src/app/components/document-list/document-card-small/document-card-small.component.html - 44 + 49 - Modified: + Modified: + + src/app/components/document-list/document-card-large/document-card-large.component.html + 87 + src/app/components/document-list/document-card-small/document-card-small.component.html - 45 + 50 + + + + Score: + + src/app/components/document-list/document-card-large/document-card-large.component.html + 98 @@ -1887,26 +2111,33 @@ src/app/components/document-list/filter-editor/filter-editor.component.ts - 131 + 136 src/app/services/rest/document.service.ts - 17 + 18 Added src/app/components/document-list/document-list.component.html - 152 + 158 src/app/components/document-list/filter-editor/filter-editor.component.html - 51 + 61 src/app/services/rest/document.service.ts - 22 + 23 + + + + Edit document + + src/app/components/document-list/document-list.component.html + 177 @@ -1927,119 +2158,119 @@ Reset filters src/app/components/document-list/filter-editor/filter-editor.component.html - 60 + 71 Correspondent: src/app/components/document-list/filter-editor/filter-editor.component.ts - 69,71 + 72,74 Without correspondent src/app/components/document-list/filter-editor/filter-editor.component.ts - 73 + 76 Type: src/app/components/document-list/filter-editor/filter-editor.component.ts - 78,80 + 81,83 Without document type src/app/components/document-list/filter-editor/filter-editor.component.ts - 82 + 85 Tag: src/app/components/document-list/filter-editor/filter-editor.component.ts - 86,88 + 89,91 Without any tag src/app/components/document-list/filter-editor/filter-editor.component.ts - 92 + 95 Title: src/app/components/document-list/filter-editor/filter-editor.component.ts - 96 + 99 ASN: src/app/components/document-list/filter-editor/filter-editor.component.ts - 99 + 102 Title & content src/app/components/document-list/filter-editor/filter-editor.component.ts - 129 + 134 Advanced search src/app/components/document-list/filter-editor/filter-editor.component.ts - 134 + 139 More like src/app/components/document-list/filter-editor/filter-editor.component.ts - 140 + 145 equals src/app/components/document-list/filter-editor/filter-editor.component.ts - 159 + 164 is empty src/app/components/document-list/filter-editor/filter-editor.component.ts - 163 + 168 is not empty src/app/components/document-list/filter-editor/filter-editor.component.ts - 167 + 172 greater than src/app/components/document-list/filter-editor/filter-editor.component.ts - 171 + 176 less than src/app/components/document-list/filter-editor/filter-editor.component.ts - 175 + 180 @@ -2148,6 +2379,10 @@ src/app/components/manage/management-list/management-list.component.html 2 + + src/app/components/manage/management-list/management-list.component.html + 2 + Filter by: @@ -2163,6 +2398,10 @@ src/app/components/manage/management-list/management-list.component.html 8 + + src/app/components/manage/management-list/management-list.component.html + 8 + Matching @@ -2178,6 +2417,10 @@ src/app/components/manage/management-list/management-list.component.html 20 + + src/app/components/manage/management-list/management-list.component.html + 20 + Document count @@ -2193,6 +2436,10 @@ src/app/components/manage/management-list/management-list.component.html 21 + + src/app/components/manage/management-list/management-list.component.html + 21 + Actions @@ -2208,6 +2455,10 @@ src/app/components/manage/management-list/management-list.component.html 23 + + src/app/components/manage/management-list/management-list.component.html + 23 + src/app/components/manage/settings/settings.component.html 174 @@ -2227,6 +2478,10 @@ src/app/components/manage/management-list/management-list.component.html 44 + + src/app/components/manage/management-list/management-list.component.html + 44 + {VAR_PLURAL, plural, =1 {One } other { total }} @@ -2242,6 +2497,10 @@ src/app/components/manage/management-list/management-list.component.html 74 + + src/app/components/manage/management-list/management-list.component.html + 74 + Automatic @@ -2505,28 +2764,56 @@ Saved view "" deleted. src/app/components/manage/settings/settings.component.ts - 167 + 174 - - Settings saved successfully. + + Settings saved src/app/components/manage/settings/settings.component.ts - 233 + 247 + + + + Settings were saved successfully. + + src/app/components/manage/settings/settings.component.ts + 248 + + + + Settings were saved successfully. Reload is required to apply some changes. + + src/app/components/manage/settings/settings.component.ts + 252 + + + + Reload now + + src/app/components/manage/settings/settings.component.ts + 253 + + + + An error occurred while saving settings. + + src/app/components/manage/settings/settings.component.ts + 263 Use system language src/app/components/manage/settings/settings.component.ts - 237 + 271 Use date format of display language src/app/components/manage/settings/settings.component.ts - 244 + 278 @@ -2535,7 +2822,28 @@ )"/> src/app/components/manage/settings/settings.component.ts - 264,266 + 298,300 + + + + storage path + + src/app/components/manage/storage-path-list/storage-path-list.component.ts + 31 + + + + storage paths + + src/app/components/manage/storage-path-list/storage-path-list.component.ts + 32 + + + + Do you really want to delete the storage path ""? + + src/app/components/manage/storage-path-list/storage-path-list.component.ts + 46 @@ -2838,14 +3146,14 @@ Modified src/app/services/rest/document.service.ts - 23 + 24 Search score src/app/services/rest/document.service.ts - 30 + 31 Score is a value returned by the full text search engine and specifies how well a result matches the given query @@ -2853,154 +3161,168 @@ English (US) src/app/services/settings.service.ts - 184 + 140 Belarusian src/app/services/settings.service.ts - 190 + 146 Czech src/app/services/settings.service.ts - 196 + 152 Danish src/app/services/settings.service.ts - 202 + 158 German src/app/services/settings.service.ts - 208 + 164 English (GB) src/app/services/settings.service.ts - 214 + 170 Spanish src/app/services/settings.service.ts - 220 + 176 French src/app/services/settings.service.ts - 226 + 182 Italian src/app/services/settings.service.ts - 232 + 188 Luxembourgish src/app/services/settings.service.ts - 238 + 194 Dutch src/app/services/settings.service.ts - 244 + 200 Polish src/app/services/settings.service.ts - 250 + 206 Portuguese (Brazil) src/app/services/settings.service.ts - 256 + 212 Portuguese src/app/services/settings.service.ts - 262 + 218 Romanian src/app/services/settings.service.ts - 268 + 224 Russian src/app/services/settings.service.ts - 274 + 230 Slovenian src/app/services/settings.service.ts - 280 + 236 Serbian src/app/services/settings.service.ts - 286 + 242 Swedish src/app/services/settings.service.ts - 292 + 248 Turkish src/app/services/settings.service.ts - 298 + 254 Chinese Simplified src/app/services/settings.service.ts - 304 + 260 ISO 8601 src/app/services/settings.service.ts - 321 + 277 + + + + Successfully completed one-time migratration of settings to the database! + + src/app/services/settings.service.ts + 372 + + + + Unable to migrate settings to the database, please try saving manually. + + src/app/services/settings.service.ts + 373 diff --git a/src-ui/src/app/app-routing.module.ts b/src-ui/src/app/app-routing.module.ts index 436d2fad4..3eb13177f 100644 --- a/src-ui/src/app/app-routing.module.ts +++ b/src-ui/src/app/app-routing.module.ts @@ -12,6 +12,7 @@ import { TagListComponent } from './components/manage/tag-list/tag-list.componen import { NotFoundComponent } from './components/not-found/not-found.component' import { DocumentAsnComponent } from './components/document-asn/document-asn.component' import { DirtyFormGuard } from './guards/dirty-form.guard' +import { StoragePathListComponent } from './components/manage/storage-path-list/storage-path-list.component' const routes: Routes = [ { path: '', redirectTo: 'dashboard', pathMatch: 'full' }, @@ -27,6 +28,7 @@ const routes: Routes = [ { path: 'tags', component: TagListComponent }, { path: 'documenttypes', component: DocumentTypeListComponent }, { path: 'correspondents', component: CorrespondentListComponent }, + { path: 'storagepaths', component: StoragePathListComponent }, { path: 'logs', component: LogsComponent }, { path: 'settings', diff --git a/src-ui/src/app/app.component.ts b/src-ui/src/app/app.component.ts index f8c98fbc7..c7954e3a6 100644 --- a/src-ui/src/app/app.component.ts +++ b/src-ui/src/app/app.component.ts @@ -1,4 +1,5 @@ -import { SettingsService, SETTINGS_KEYS } from './services/settings.service' +import { SettingsService } from './services/settings.service' +import { SETTINGS_KEYS } from './data/paperless-uisettings' import { Component, OnDestroy, OnInit } from '@angular/core' import { Router } from '@angular/router' import { Subscription } from 'rxjs' diff --git a/src-ui/src/app/app.module.ts b/src-ui/src/app/app.module.ts index a705c83ec..7b5e16da0 100644 --- a/src-ui/src/app/app.module.ts +++ b/src-ui/src/app/app.module.ts @@ -1,5 +1,5 @@ import { BrowserModule } from '@angular/platform-browser' -import { NgModule } from '@angular/core' +import { APP_INITIALIZER, NgModule } from '@angular/core' import { AppRoutingModule } from './app-routing.module' import { AppComponent } from './app.component' import { @@ -87,6 +87,9 @@ import localeSr from '@angular/common/locales/sr' import localeSv from '@angular/common/locales/sv' import localeTr from '@angular/common/locales/tr' import localeZh from '@angular/common/locales/zh' +import { StoragePathListComponent } from './components/manage/storage-path-list/storage-path-list.component' +import { StoragePathEditDialogComponent } from './components/common/edit-dialog/storage-path-edit-dialog/storage-path-edit-dialog.component' +import { SettingsService } from './services/settings.service' registerLocaleData(localeBe) registerLocaleData(localeCs) @@ -109,6 +112,12 @@ registerLocaleData(localeSv) registerLocaleData(localeTr) registerLocaleData(localeZh) +function initializeApp(settings: SettingsService) { + return () => { + return settings.initializeSettings() + } +} + @NgModule({ declarations: [ AppComponent, @@ -118,6 +127,7 @@ registerLocaleData(localeZh) TagListComponent, DocumentTypeListComponent, CorrespondentListComponent, + StoragePathListComponent, LogsComponent, SettingsComponent, NotFoundComponent, @@ -125,6 +135,7 @@ registerLocaleData(localeZh) ConfirmDialogComponent, TagEditDialogComponent, DocumentTypeEditDialogComponent, + StoragePathEditDialogComponent, TagComponent, PageHeaderComponent, AppFrameComponent, @@ -174,6 +185,12 @@ registerLocaleData(localeZh) ColorSliderModule, ], providers: [ + { + provide: APP_INITIALIZER, + useFactory: initializeApp, + deps: [SettingsService], + multi: true, + }, DatePipe, CookieService, { diff --git a/src-ui/src/app/components/app-frame/app-frame.component.html b/src-ui/src/app/components/app-frame/app-frame.component.html index 718e2a242..8ec2bf8aa 100644 --- a/src-ui/src/app/components/app-frame/app-frame.component.html +++ b/src-ui/src/app/components/app-frame/app-frame.component.html @@ -21,17 +21,17 @@
    +