Compare commits

..

1033 Commits

Author SHA1 Message Date
Trenton H
e5106bdca0 Updates the version strings to 1.10.0 2022-11-09 14:00:09 -08:00
Trenton H
ba1366f49a Merge branch 'dev' into beta 2022-11-09 13:51:10 -08:00
shamoon
f3b3db30a2 Merge pull request #1689 from paperless-ngx/l10n_dev
New Crowdin updates
2022-11-09 13:45:25 -08:00
Michael Shamoon
69241ce394 Merge branch 'dev' into l10n_dev 2022-11-09 13:43:29 -08:00
Trenton H
10f6195bac Always use pikepdf, then pdf2image if needed to check for barcodes instead of requiring/allowing configuration 2022-11-09 13:01:39 -08:00
Trenton H
1d0cf77e7e Downgrades cryptography to the last built version on piwheels 2022-11-09 12:12:23 -08:00
Trenton H
beea3eb7eb Releases constraints on some packages and updates everything 2022-11-09 08:51:46 -08:00
Trenton H
a7b5b98174 Fixes the paths to binaries 2022-11-08 08:52:01 -08:00
Trenton Holmes
046d43fbe8 Limits tamper check find to depth 1, as only files at the first level could be run 2022-11-08 08:52:01 -08:00
Trenton Holmes
8023aae738 Adds local and readonly to almost everything. Fully qualifies the path to binaries 2022-11-08 08:52:01 -08:00
Trenton Holmes
2a9bb55559 It's not a customer 2022-11-08 08:52:01 -08:00
Trenton Holmes
e635bfedc5 Corrects the ls command redirection 2022-11-08 08:52:01 -08:00
Trenton Holmes
be64552092 Adds an untested custom startup functionality 2022-11-08 08:52:01 -08:00
Michael Shamoon
91a2dedfec Celery JSON serializable object for override_tag_ids 2022-11-07 07:41:23 -08:00
Paperless-ngx Translation Bot [bot]
069e0a1903 New translations messages.xlf (Serbian (Latin))
[ci skip]
2022-11-06 05:11:35 -08:00
shamoon
39149a891c Merge pull request #1934 from paperless-ngx/fix/issue-1933
Fix mail consumption broken in `dev` after move to celery
2022-11-05 21:47:39 -07:00
Michael Shamoon
daa49ee7c8 Remote outdated task_name parameter 2022-11-05 17:51:56 -07:00
Trenton H
7e3e0a0fa6 Refresh the instance from the database before doing any file handling with it 2022-11-03 11:32:27 -07:00
Trenton Holmes
3c325582d9 Try waiting a little bit after a parser error during the live testing 2022-11-02 15:55:12 -07:00
Paperless-ngx Translation Bot [bot]
e5012cdc5f New translations messages.xlf (Portuguese)
[ci skip]
2022-11-02 05:07:00 -07:00
dependabot[bot]
853d13b6f2 Bump tj-actions/changed-files from 32 to 34
Bumps [tj-actions/changed-files](https://github.com/tj-actions/changed-files) from 32 to 34.
- [Release notes](https://github.com/tj-actions/changed-files/releases)
- [Changelog](https://github.com/tj-actions/changed-files/blob/main/HISTORY.md)
- [Commits](https://github.com/tj-actions/changed-files/compare/v32...v34)

---
updated-dependencies:
- dependency-name: tj-actions/changed-files
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
2022-11-01 15:34:17 -07:00
dependabot[bot]
449fa9bf48 Bump scikit-learn from 1.1.2 to 1.1.3
Bumps [scikit-learn](https://github.com/scikit-learn/scikit-learn) from 1.1.2 to 1.1.3.
- [Release notes](https://github.com/scikit-learn/scikit-learn/releases)
- [Commits](https://github.com/scikit-learn/scikit-learn/compare/1.1.2...1.1.3)

---
updated-dependencies:
- dependency-name: scikit-learn
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2022-11-01 14:51:50 -07:00
dependabot[bot]
0a6828517a Merge pull request #1910 from paperless-ngx/dependabot/npm_and_yarn/src-ui/dev/angular/platform-browser-14.2.8 2022-11-01 21:18:19 +00:00
shamoon
8585e77ccd Merge pull request #1911 from paperless-ngx/dependabot/npm_and_yarn/src-ui/dev/ngx-ui-tour-ng-bootstrap-11.1.0
Bump ngx-ui-tour-ng-bootstrap from 11.0.0 to 11.1.0 in /src-ui
2022-11-01 14:08:56 -07:00
Michael Shamoon
db32431bcc Bump angular packages 2022-11-01 14:07:55 -07:00
dependabot[bot]
e2d826b4ea Bump ngx-ui-tour-ng-bootstrap from 11.0.0 to 11.1.0 in /src-ui
Bumps [ngx-ui-tour-ng-bootstrap](https://github.com/hakimio/ngx-ui-tour) from 11.0.0 to 11.1.0.
- [Release notes](https://github.com/hakimio/ngx-ui-tour/releases)
- [Commits](https://github.com/hakimio/ngx-ui-tour/commits)

---
updated-dependencies:
- dependency-name: ngx-ui-tour-ng-bootstrap
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2022-11-01 21:05:11 +00:00
shamoon
06f1a4f744 Merge pull request #1914 from paperless-ngx/dependabot/npm_and_yarn/src-ui/dev/jest-environment-jsdom-29.2.2
Bump jest-environment-jsdom from 29.1.2 to 29.2.2 in /src-ui
2022-11-01 14:02:59 -07:00
dependabot[bot]
d09bb563a7 Bump jest-environment-jsdom from 29.1.2 to 29.2.2 in /src-ui
Bumps [jest-environment-jsdom](https://github.com/facebook/jest/tree/HEAD/packages/jest-environment-jsdom) from 29.1.2 to 29.2.2.
- [Release notes](https://github.com/facebook/jest/releases)
- [Changelog](https://github.com/facebook/jest/blob/main/CHANGELOG.md)
- [Commits](https://github.com/facebook/jest/commits/v29.2.2/packages/jest-environment-jsdom)

---
updated-dependencies:
- dependency-name: jest-environment-jsdom
  dependency-type: direct:development
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2022-11-01 20:17:34 +00:00
dependabot[bot]
0fafecc6a4 Bump @angular/platform-browser from 14.2.4 to 14.2.8 in /src-ui
Bumps [@angular/platform-browser](https://github.com/angular/angular/tree/HEAD/packages/platform-browser) from 14.2.4 to 14.2.8.
- [Release notes](https://github.com/angular/angular/releases)
- [Changelog](https://github.com/angular/angular/blob/main/CHANGELOG.md)
- [Commits](https://github.com/angular/angular/commits/14.2.8/packages/platform-browser)

---
updated-dependencies:
- dependency-name: "@angular/platform-browser"
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2022-11-01 20:16:10 +00:00
Trenton Holmes
66b60654d9 Fixes missing lxml and tweaks commenting 2022-11-01 12:42:03 -07:00
Trenton Holmes
b479027f3d Adds a couple build args to force pikepdf to rebuild dependent wheels if the versions change 2022-11-01 12:42:03 -07:00
Trenton Holmes
0a81439415 No need for an extra import, the object is smart already 2022-11-01 08:44:30 -07:00
Trenton Holmes
4fcaa72886 Adds more options for the filename formatting 2022-11-01 08:44:30 -07:00
dependabot[bot]
9acb00dcba Bump pillow from 9.2.0 to 9.3.0
Bumps [pillow](https://github.com/python-pillow/Pillow) from 9.2.0 to 9.3.0.
- [Release notes](https://github.com/python-pillow/Pillow/releases)
- [Changelog](https://github.com/python-pillow/Pillow/blob/main/CHANGES.rst)
- [Commits](https://github.com/python-pillow/Pillow/compare/9.2.0...9.3.0)

---
updated-dependencies:
- dependency-name: pillow
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2022-11-01 08:04:25 -07:00
dependabot[bot]
ebc453d720 Bump pytest from 7.1.3 to 7.2.0
Bumps [pytest](https://github.com/pytest-dev/pytest) from 7.1.3 to 7.2.0.
- [Release notes](https://github.com/pytest-dev/pytest/releases)
- [Changelog](https://github.com/pytest-dev/pytest/blob/main/CHANGELOG.rst)
- [Commits](https://github.com/pytest-dev/pytest/compare/7.1.3...7.2.0)

---
updated-dependencies:
- dependency-name: pytest
  dependency-type: direct:development
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2022-10-31 19:00:17 -07:00
dependabot[bot]
770d72c3e8 Bump tox from 3.26.0 to 3.27.0
Bumps [tox](https://github.com/tox-dev/tox) from 3.26.0 to 3.27.0.
- [Release notes](https://github.com/tox-dev/tox/releases)
- [Changelog](https://github.com/tox-dev/tox/blob/master/docs/changelog.rst)
- [Commits](https://github.com/tox-dev/tox/compare/3.26.0...3.27.0)

---
updated-dependencies:
- dependency-name: tox
  dependency-type: direct:development
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2022-10-31 17:56:19 -07:00
Max Bachmann
e97c04c03d directly use rapidfuzz 2022-10-31 13:17:10 -07:00
shamoon
34a0111ff5 update logs section 2022-10-31 13:06:17 -07:00
Trenton H
9214b41255 Fixes deleting images if the branch API returns an error code and makes the error code a failure 2022-10-31 12:46:25 -07:00
shamoon
0d941bfb05 Merge pull request #1886 from paperless-ngx/1.9.2-ui-tweaks
Feature: 1.9.2 UI tweaks
2022-10-31 12:42:13 -07:00
Paperless-ngx Translation Bot [bot]
4c68d28a6f New translations messages.xlf (German)
[ci skip]
2022-10-30 15:40:57 -07:00
shamoon
b511b084d0 Update matrix url
[ci skip]
2022-10-30 06:48:41 -07:00
Paperless-ngx Translation Bot [bot]
f2939583d7 New translations messages.xlf (Arabic)
[ci skip]
2022-10-29 23:28:44 -07:00
Paperless-ngx Translation Bot [bot]
5951b0d946 New translations messages.xlf (Romanian)
[ci skip]
2022-10-29 23:28:43 -07:00
Paperless-ngx Translation Bot [bot]
bf088c427a New translations messages.xlf (French)
[ci skip]
2022-10-29 23:28:42 -07:00
Paperless-ngx Translation Bot [bot]
ef1eead52e New translations messages.xlf (Spanish)
[ci skip]
2022-10-29 23:28:40 -07:00
Paperless-ngx Translation Bot [bot]
f77a431554 New translations messages.xlf (Belarusian)
[ci skip]
2022-10-29 23:28:39 -07:00
Paperless-ngx Translation Bot [bot]
cb930d1e76 New translations messages.xlf (Czech)
[ci skip]
2022-10-29 23:28:38 -07:00
Paperless-ngx Translation Bot [bot]
c4db7f7b6d New translations messages.xlf (Danish)
[ci skip]
2022-10-29 23:28:36 -07:00
Paperless-ngx Translation Bot [bot]
a24524fb81 New translations messages.xlf (Finnish)
[ci skip]
2022-10-29 23:28:35 -07:00
Paperless-ngx Translation Bot [bot]
9e253fcc62 New translations messages.xlf (Hebrew)
[ci skip]
2022-10-29 23:28:34 -07:00
Paperless-ngx Translation Bot [bot]
490dee2e90 New translations messages.xlf (Italian)
[ci skip]
2022-10-29 23:28:32 -07:00
Paperless-ngx Translation Bot [bot]
a2032b9979 New translations messages.xlf (Dutch)
[ci skip]
2022-10-29 23:28:31 -07:00
Paperless-ngx Translation Bot [bot]
1561f561d9 New translations messages.xlf (German)
[ci skip]
2022-10-29 23:28:30 -07:00
Paperless-ngx Translation Bot [bot]
6246bfaf28 New translations messages.xlf (Norwegian)
[ci skip]
2022-10-29 23:28:29 -07:00
Paperless-ngx Translation Bot [bot]
57763d0c0b New translations messages.xlf (Portuguese)
[ci skip]
2022-10-29 23:28:28 -07:00
Paperless-ngx Translation Bot [bot]
d441c8a26e New translations messages.xlf (Slovenian)
[ci skip]
2022-10-29 23:28:26 -07:00
Paperless-ngx Translation Bot [bot]
54abeff63a New translations messages.xlf (Swedish)
[ci skip]
2022-10-29 23:28:25 -07:00
Paperless-ngx Translation Bot [bot]
dc045761d9 New translations messages.xlf (Turkish)
[ci skip]
2022-10-29 23:28:24 -07:00
Paperless-ngx Translation Bot [bot]
393c208cfd New translations messages.xlf (Chinese Simplified)
[ci skip]
2022-10-29 23:28:22 -07:00
Paperless-ngx Translation Bot [bot]
11f9bc898a New translations messages.xlf (Portuguese, Brazilian)
[ci skip]
2022-10-29 23:28:21 -07:00
Paperless-ngx Translation Bot [bot]
a31089ca6e New translations messages.xlf (Croatian)
[ci skip]
2022-10-29 23:28:19 -07:00
Paperless-ngx Translation Bot [bot]
0355fa2cb6 New translations messages.xlf (Luxembourgish)
[ci skip]
2022-10-29 23:28:18 -07:00
Paperless-ngx Translation Bot [bot]
73b945a9f3 New translations messages.xlf (Serbian (Latin))
[ci skip]
2022-10-29 23:28:17 -07:00
Paperless-ngx Translation Bot [bot]
396dd9ae1c New translations messages.xlf (Polish)
[ci skip]
2022-10-29 23:28:16 -07:00
Paperless-ngx Translation Bot [bot]
b026dcc6ae New translations messages.xlf (Russian)
[ci skip]
2022-10-29 23:28:15 -07:00
Michael Shamoon
36d2286d03 Update messages.xlf 2022-10-29 23:19:35 -07:00
shamoon
ea992e92f5 Merge pull request #1860 from paperless-ngx/dependabot/pip/dev/zipp-3.10.0
Bump zipp from 3.9.0 to 3.10.0
2022-10-29 23:17:02 -07:00
shamoon
d6b5c733f3 Merge pull request #1868 from paperless-ngx/fix/issue-1866
Fix: independent control of saved views
2022-10-29 23:15:28 -07:00
Michael Shamoon
7efdce44f7 Implement warning on close unsaved view 2022-10-29 23:14:33 -07:00
Michael Shamoon
9b3243533c better positioning in clearable badges 2022-10-29 15:29:50 -07:00
Michael Shamoon
0993fc07a3 Add "clearable" badge 2022-10-29 15:03:27 -07:00
Michael Shamoon
28f7b0dc13 Use check badge for dropdowns 2022-10-29 14:07:45 -07:00
Michael Shamoon
bd64684fa4 support esc and x button for main search bar 2022-10-29 14:07:31 -07:00
Michael Shamoon
a9abffaddc Support keyboard esc and X button for filter editor text field 2022-10-29 14:07:31 -07:00
Michael Shamoon
89e0f8e3ef fix filterable dropdown corner radius 2022-10-29 14:07:31 -07:00
shamoon
9e91440245 Merge pull request #1865 from paperless-ngx/fix-relative-dates
Fix: frontend relative date searches
2022-10-29 14:05:35 -07:00
shamoon
4a24ba51c5 Merge pull request #1876 from astubenbord/main
Added new application to list of affiliated projects
2022-10-28 22:22:08 -07:00
Anton Stubenbord
d5fb98b7c4 Added new application to list of affiliated projects 2022-10-28 22:21:27 -07:00
Sblop
cda0a19b99 Update settings.py
Comment too long.
2022-10-28 14:40:48 -07:00
Sblop
932a285b82 Update settings.py 2022-10-28 14:40:48 -07:00
Sblop
c414de9c35 Update settings.py
Django gives a system error on MariaDB on VARCHARs longer than 255 chars. This was a limitation in older versions of mysql.
Meaning: You cannot run Paperless-NGX on older version were this limitation were present, meaning Django plays it extremely safe by giving an error.
This fixes this problem.
2022-10-28 14:40:48 -07:00
Trenton Holmes
9b82ab95fb Updates to the latest pre-commit hook versions 2022-10-27 13:50:08 -07:00
Trenton Holmes
aa5aff246b Locks pipenv to the latest, last working version 2022-10-27 13:50:08 -07:00
Paperless-ngx Translation Bot [bot]
c6a484439d New translations django.po (Dutch)
[ci skip]
2022-10-27 02:51:17 -07:00
Michael Shamoon
1b55717cc7 Allow independent saved view control 2022-10-26 12:54:44 -07:00
Michael Shamoon
dc1da7cb24 Retain saved view filters when changing a saved view 2022-10-26 10:39:09 -07:00
Michael Shamoon
8652b7ddb0 Fix switch from title_content search 2022-10-25 15:31:01 -07:00
Michael Shamoon
84b3fee0f9 Fix losing search when adding relative date 2022-10-25 13:43:13 -07:00
Michael Shamoon
b52cb193e1 Remove relative date query strings from dropdown 2022-10-25 13:34:36 -07:00
Michael Shamoon
6a00d5e08a Implement relative date querying 2022-10-25 12:45:15 -07:00
dependabot[bot]
3357fa19f3 Bump pytest-env from 0.6.2 to 0.8.1
Bumps [pytest-env](https://github.com/pytest-dev/pytest-env) from 0.6.2 to 0.8.1.
- [Release notes](https://github.com/pytest-dev/pytest-env/releases)
- [Commits](https://github.com/pytest-dev/pytest-env/compare/0.6.2...0.8.1)

---
updated-dependencies:
- dependency-name: pytest-env
  dependency-type: direct:development
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2022-10-25 07:26:43 -07:00
shamoon
37a892d461 Merge pull request #1858 from paperless-ngx/fix/1850-barcode-password
Bugfix: Handle password protected PDFs during barcode detection
2022-10-24 23:17:48 -07:00
dependabot[bot]
f149f9ccb1 Bump zipp from 3.9.0 to 3.10.0
Bumps [zipp](https://github.com/jaraco/zipp) from 3.9.0 to 3.10.0.
- [Release notes](https://github.com/jaraco/zipp/releases)
- [Changelog](https://github.com/jaraco/zipp/blob/main/CHANGES.rst)
- [Commits](https://github.com/jaraco/zipp/compare/v3.9.0...v3.10.0)

---
updated-dependencies:
- dependency-name: zipp
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2022-10-24 20:34:44 +00:00
Trenton H
d52fbbb040 More smoothly handle the case of a password protected PDF for barcodes 2022-10-24 13:16:14 -07:00
Paperless-ngx Translation Bot [bot]
446eca4ac3 New translations messages.xlf (German)
[ci skip]
2022-10-24 13:11:59 -07:00
Trenton H
f8ce6285df Allows using pdf2image instead of pikepdf if desired 2022-10-24 09:58:34 -07:00
Trenton H
0a19ad4edb Resolves the conflicts with a lock 2022-10-24 09:17:38 -07:00
Trenton H
ab69961b5c Integrates an optional starting of Flower into the Docker image 2022-10-24 09:17:38 -07:00
Michael Shamoon
1400dba12c Fix frontend task name display 2022-10-24 09:10:10 -07:00
Trenton H
a72cc5da83 Connects up the celery signals to support pending, started and success/failure, without relying on django-celery-results 2022-10-24 09:10:10 -07:00
Paperless-ngx Translation Bot [bot]
630b8fa675 New translations messages.xlf (Arabic)
[ci skip]
2022-10-23 22:19:58 -07:00
Paperless-ngx Translation Bot [bot]
43514ad477 New translations messages.xlf (Romanian)
[ci skip]
2022-10-23 22:19:57 -07:00
Paperless-ngx Translation Bot [bot]
0ed95547d5 New translations messages.xlf (French)
[ci skip]
2022-10-23 22:19:56 -07:00
Paperless-ngx Translation Bot [bot]
250e2d54b4 New translations messages.xlf (Spanish)
[ci skip]
2022-10-23 22:19:54 -07:00
Paperless-ngx Translation Bot [bot]
b02cd541a8 New translations messages.xlf (Belarusian)
[ci skip]
2022-10-23 22:19:53 -07:00
Paperless-ngx Translation Bot [bot]
94f2a2ce33 New translations messages.xlf (Czech)
[ci skip]
2022-10-23 22:19:52 -07:00
Paperless-ngx Translation Bot [bot]
6a7c0279bf New translations messages.xlf (Danish)
[ci skip]
2022-10-23 22:19:50 -07:00
Paperless-ngx Translation Bot [bot]
5ba11b1161 New translations messages.xlf (Finnish)
[ci skip]
2022-10-23 22:19:49 -07:00
Paperless-ngx Translation Bot [bot]
917bce301c New translations messages.xlf (Hebrew)
[ci skip]
2022-10-23 22:19:48 -07:00
Paperless-ngx Translation Bot [bot]
3fb32c5cf1 New translations messages.xlf (Italian)
[ci skip]
2022-10-23 22:19:47 -07:00
Paperless-ngx Translation Bot [bot]
19a1bf0f5f New translations messages.xlf (Dutch)
[ci skip]
2022-10-23 22:19:45 -07:00
Paperless-ngx Translation Bot [bot]
abe8e678ea New translations messages.xlf (German)
[ci skip]
2022-10-23 22:19:44 -07:00
Paperless-ngx Translation Bot [bot]
d16dee61fa New translations messages.xlf (Norwegian)
[ci skip]
2022-10-23 22:19:43 -07:00
Paperless-ngx Translation Bot [bot]
e7b22b15c6 New translations messages.xlf (Portuguese)
[ci skip]
2022-10-23 22:19:41 -07:00
Paperless-ngx Translation Bot [bot]
0f62770bce New translations messages.xlf (Slovenian)
[ci skip]
2022-10-23 22:19:40 -07:00
Paperless-ngx Translation Bot [bot]
c67cff4f0e New translations messages.xlf (Swedish)
[ci skip]
2022-10-23 22:19:39 -07:00
Paperless-ngx Translation Bot [bot]
dccb9227a2 New translations messages.xlf (Turkish)
[ci skip]
2022-10-23 22:19:37 -07:00
Paperless-ngx Translation Bot [bot]
b7db1cf2c1 New translations messages.xlf (Chinese Simplified)
[ci skip]
2022-10-23 22:19:36 -07:00
Paperless-ngx Translation Bot [bot]
3d683d13b8 New translations messages.xlf (Portuguese, Brazilian)
[ci skip]
2022-10-23 22:19:35 -07:00
Paperless-ngx Translation Bot [bot]
310c89ffdf New translations messages.xlf (Croatian)
[ci skip]
2022-10-23 22:19:33 -07:00
Paperless-ngx Translation Bot [bot]
dd069d753b New translations messages.xlf (Luxembourgish)
[ci skip]
2022-10-23 22:19:32 -07:00
Paperless-ngx Translation Bot [bot]
27a24f10b3 New translations messages.xlf (Serbian (Latin))
[ci skip]
2022-10-23 22:19:31 -07:00
Paperless-ngx Translation Bot [bot]
b6b9bf0e3c New translations messages.xlf (Polish)
[ci skip]
2022-10-23 22:19:29 -07:00
Paperless-ngx Translation Bot [bot]
5fc7350ea0 New translations messages.xlf (Russian)
[ci skip]
2022-10-23 22:19:28 -07:00
Michael Shamoon
9b01c96846 Grammar error, updated frontend translation
https://crowdin.com/translate/paperless-ngx/16/en-it?filter=basic&value=0#
2022-10-23 22:11:24 -07:00
Paperless-ngx Translation Bot [bot]
96aba9acdc New translations messages.xlf (Italian)
[ci skip]
2022-10-23 07:21:03 -07:00
Paperless-ngx Translation Bot [bot]
43e78c8e69 New translations messages.xlf (Italian)
[ci skip]
2022-10-23 06:22:29 -07:00
Paperless-ngx Translation Bot [bot]
47d0c77970 New translations messages.xlf (Dutch)
[ci skip]
2022-10-22 00:48:54 -07:00
Paperless-ngx Translation Bot [bot]
f825b5772d New translations messages.xlf (Arabic)
[ci skip]
2022-10-20 17:27:27 -07:00
Paperless-ngx Translation Bot [bot]
f9cb95e79c New translations messages.xlf (Arabic)
[ci skip]
2022-10-20 16:30:33 -07:00
Paperless-ngx Translation Bot [bot]
73845ef968 New translations django.po (Arabic)
[ci skip]
2022-10-20 16:30:32 -07:00
Michael Shamoon
8be6c707de Update django.po
[ci skip]
2022-10-20 15:33:16 -07:00
Michael Shamoon
60f76d3e1f rename backend Arabic translation file
[ci skip]
2022-10-20 15:31:28 -07:00
Paperless-ngx Translation Bot [bot]
912dc9a847 New translations messages.xlf (Arabic)
[ci skip]
2022-10-20 15:29:29 -07:00
Paperless-ngx Translation Bot [bot]
70ef6412eb New translations django.po (Arabic)
[ci skip]
2022-10-20 15:28:49 -07:00
Michael Shamoon
99db828d49 Merge branch 'dev' of github.com:paperless-ngx/paperless-ngx into dev 2022-10-20 15:28:15 -07:00
Michael Shamoon
3c5b647303 rename Arabic translation file
[skip ci]
2022-10-20 15:28:10 -07:00
Trenton Holmes
d1aa08850d Reverts the change around skip_noarchive to align with how it is documented to work 2022-10-20 13:34:41 -07:00
dependabot[bot]
53e8d84af2 Bump sphinx from 5.2.3 to 5.3.0
Bumps [sphinx](https://github.com/sphinx-doc/sphinx) from 5.2.3 to 5.3.0.
- [Release notes](https://github.com/sphinx-doc/sphinx/releases)
- [Changelog](https://github.com/sphinx-doc/sphinx/blob/master/CHANGES)
- [Commits](https://github.com/sphinx-doc/sphinx/compare/v5.2.3...v5.3.0)

---
updated-dependencies:
- dependency-name: sphinx
  dependency-type: direct:development
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2022-10-20 13:10:14 -07:00
Trenton H
4c7242df6d Even more commenting 2022-10-20 12:42:40 -07:00
Trenton H
a231b92644 Corrects the script name 2022-10-20 12:42:40 -07:00
Trenton H
c3a62268c7 Simplifies the image tag cleanup into classes, fixes the library images caring about feature branches 2022-10-20 12:42:40 -07:00
Michael Shamoon
69913ae250 Remove legacy translation files
[ci ckip]
2022-10-19 21:44:47 -07:00
Michael Shamoon
a2da1acdd7 Fix button styles broken by bootstrap update 2022-10-18 14:30:31 -07:00
Paperless-ngx Translation Bot [bot]
a67ea8ffd9 New translations messages.xlf (Czech)
[ci skip]
2022-10-18 14:06:43 -07:00
Paperless-ngx Translation Bot [bot]
0050a20710 New translations django.po (Czech)
[ci skip]
2022-10-18 13:06:11 -07:00
Paperless-ngx Translation Bot [bot]
ad65360a55 New translations messages.xlf (Czech)
[ci skip]
2022-10-18 13:06:10 -07:00
shamoon
15bcb2491c Merge pull request #1792 from paperless-ngx/fix/issue-1791
Fix: missing loadViewConfig breaks loading saved view
2022-10-17 14:30:30 -07:00
Paperless-ngx Translation Bot [bot]
2a2fa90cf9 New translations messages.xlf (French)
[ci skip]
2022-10-17 12:49:11 -07:00
Paperless-ngx Translation Bot [bot]
6e9fbdb8ed New translations messages.xlf (Belarusian)
[ci skip]
2022-10-16 07:46:24 -07:00
Paperless-ngx Translation Bot [bot]
097ab55f7a New translations django.po (Belarusian)
[ci skip]
2022-10-16 06:46:10 -07:00
Paperless-ngx Translation Bot [bot]
dddb82af23 New translations messages.xlf (Belarusian)
[ci skip]
2022-10-16 06:46:09 -07:00
Paperless-ngx Translation Bot [bot]
377c37dfab New translations django.po (Belarusian)
[ci skip]
2022-10-16 05:44:52 -07:00
Trenton H
0df0deb445 Downgrades and locks channels-redis to 3.4.1 to resolve issues with async_to_sync 2022-10-14 16:48:48 -07:00
Paperless-ngx Translation Bot [bot]
d05f803c16 New translations messages.xlf (French)
[ci skip]
2022-10-14 02:11:20 -07:00
Paperless-ngx Translation Bot [bot]
25e2ca5295 New translations messages.xlf (French)
[ci skip]
2022-10-14 01:01:03 -07:00
Michael Shamoon
02e8157fb9 Fix missing loadViewConfig breaks loading saved view 2022-10-13 12:27:41 -07:00
Paperless-ngx Translation Bot [bot]
708cac4683 New translations messages.xlf (German)
[ci skip]
2022-10-13 05:45:07 -07:00
Paperless-ngx Translation Bot [bot]
66d79ccd3f New translations messages.xlf (German)
[ci skip]
2022-10-13 04:41:06 -07:00
Paperless-ngx Translation Bot [bot]
9c1195fc59 New translations messages.xlf (Serbian (Latin))
[ci skip]
2022-10-12 14:21:46 -07:00
Trenton H
deaf02780e Updates to the new method to set step outputs 2022-10-12 14:04:54 -07:00
Trenton H
5602031b67 Updates to the Docker login v2 action, adds workflow level concurrency 2022-10-12 14:04:54 -07:00
Paperless-ngx Translation Bot [bot]
4c1bf240d6 New translations messages.xlf (Serbian (Latin))
[ci skip]
2022-10-12 12:56:10 -07:00
shamoon
b13ced93ed Merge pull request #1745 from paperless-ngx/fix/1743
Bugfix: Fallback to pdf2image if pikepdf fails
2022-10-12 07:38:43 -07:00
shamoon
87472b31d2 Merge pull request #1780 from paperless-ngx/fix/issue-1647
Documentation: Add note re MS exchange servers
2022-10-11 19:59:46 -07:00
shamoon
7f1d01e443 Merge pull request #1777 from paperless-ngx/fix/issue-1776
Fix: creating new storage path on document edit fails to update menu
2022-10-11 19:59:02 -07:00
Michael Shamoon
1024d7e6e2 Add note re MS exchange servers 2022-10-11 15:12:22 -07:00
Trenton Holmes
4cc2976614 Adds specific handling for CCITT Group 4, which pikepdf decodes, but not correctly 2022-10-11 13:51:14 -07:00
Trenton H
caf4b54bc7 In case pikepdf fails to convert an image to a PIL image, fall back to converting pages to PIL images 2022-10-11 13:51:13 -07:00
shamoon
fb2efe5ab8 Merge pull request #1773 from paperless-ngx/library-updates-fixes
Chore: Python library update + test fixes
2022-10-11 13:36:54 -07:00
Michael Shamoon
98f1722d1b Fix slim sidebar close button position
[ci skip]
2022-10-11 12:34:15 -07:00
Michael Shamoon
a6dc8a373e Fix new storagepaths not showing in doc detail 2022-10-11 12:23:15 -07:00
Trenton H
91e96bc88f Bumps tj-actions/changed-files which should resolve the CI warning about Node 12 2022-10-10 14:45:46 -07:00
Trenton H
8c06858807 Updates workflow to clone all history so changed-files can work (probably) 2022-10-10 14:30:55 -07:00
Trenton H
8025df5fe3 Catch the new error raised by redis when it can't find the broker and stub out the call for testing 2022-10-10 14:21:42 -07:00
Trenton H
5aeb656a48 Fixes usage of a depracated logger method 2022-10-10 14:20:19 -07:00
Trenton H
f96ee4f7a0 Updates the pre-commit hooks to ensure alignment with Pipfile 2022-10-10 14:20:19 -07:00
Trenton H
fcdb1dc30c Adds hiredis extra to redis-py and updates everything 2022-10-10 14:16:14 -07:00
Trenton H
dafefa33d6 Adds step to bare metal setup regarding downloading the required NLTK data 2022-10-10 08:58:23 -07:00
Trenton H
d08eb0c66b Adds skipping of NLTK data download if the feature appears disabled 2022-10-10 08:58:23 -07:00
Trenton H
d1a17480ea Account for plusses in the OCR language setting 2022-10-10 08:58:23 -07:00
Trenton H
1e891414a3 Allows disabling NLTK, adds it as a consideration for low power devices 2022-10-10 08:58:23 -07:00
Trenton Holmes
c44c914d3d Changes the NLTK language to be based on the Tesseract OCR language, with fallback to the default processing 2022-10-10 08:58:23 -07:00
Trenton H
d10d2f5a54 Allows configuration of the NLTK processing language 2022-10-10 08:58:23 -07:00
Trenton Holmes
6523cf0c4b Fixes the download and usage of the downloaded data 2022-10-10 08:58:23 -07:00
Trenton Holmes
1262c121f0 Missed one mock 2022-10-10 08:58:23 -07:00
Trenton Holmes
f7cd6974c5 Mock out the nltk portions so the data doesn't need to be downloaded 2022-10-10 08:58:23 -07:00
Trenton Holmes
a7e1ba82d6 Fixes CI unit testing 2022-10-10 08:58:23 -07:00
Trenton Holmes
d856e48045 Updates the pre-processing of document content to be much more robust, with tokenization, stemming and stop word removal 2022-10-10 08:58:23 -07:00
Paperless-ngx Translation Bot [bot]
87972ee7fe New translations messages.xlf (Arabic, Saudi Arabia)
[ci skip]
2022-10-10 00:36:14 -07:00
Paperless-ngx Translation Bot [bot]
e6332944ce New translations messages.xlf (Romanian)
[ci skip]
2022-10-10 00:36:13 -07:00
Paperless-ngx Translation Bot [bot]
96d7dc273e New translations messages.xlf (French)
[ci skip]
2022-10-10 00:36:12 -07:00
Paperless-ngx Translation Bot [bot]
4f4a08ccc7 New translations messages.xlf (Spanish)
[ci skip]
2022-10-10 00:36:10 -07:00
Paperless-ngx Translation Bot [bot]
1716a11f45 New translations messages.xlf (Belarusian)
[ci skip]
2022-10-10 00:36:09 -07:00
Paperless-ngx Translation Bot [bot]
9ed0d5f7d6 New translations messages.xlf (Czech)
[ci skip]
2022-10-10 00:36:08 -07:00
Paperless-ngx Translation Bot [bot]
9b461990b7 New translations messages.xlf (Danish)
[ci skip]
2022-10-10 00:36:06 -07:00
Paperless-ngx Translation Bot [bot]
8a47e5b8e4 New translations messages.xlf (Finnish)
[ci skip]
2022-10-10 00:36:05 -07:00
Paperless-ngx Translation Bot [bot]
5f12087779 New translations messages.xlf (Hebrew)
[ci skip]
2022-10-10 00:36:04 -07:00
Paperless-ngx Translation Bot [bot]
8aa9a4db65 New translations messages.xlf (Italian)
[ci skip]
2022-10-10 00:36:02 -07:00
Paperless-ngx Translation Bot [bot]
75a54fab2c New translations messages.xlf (Japanese)
[ci skip]
2022-10-10 00:36:01 -07:00
Paperless-ngx Translation Bot [bot]
085b5eb9f1 New translations messages.xlf (German)
[ci skip]
2022-10-10 00:35:59 -07:00
Paperless-ngx Translation Bot [bot]
543e221d3e New translations messages.xlf (Dutch)
[ci skip]
2022-10-10 00:35:58 -07:00
Paperless-ngx Translation Bot [bot]
e25584a202 New translations messages.xlf (Polish)
[ci skip]
2022-10-10 00:35:55 -07:00
Paperless-ngx Translation Bot [bot]
4c268d5883 New translations messages.xlf (Portuguese)
[ci skip]
2022-10-10 00:35:54 -07:00
Paperless-ngx Translation Bot [bot]
bf8fc3ca29 New translations messages.xlf (Slovenian)
[ci skip]
2022-10-10 00:35:53 -07:00
Paperless-ngx Translation Bot [bot]
65c1b84508 New translations messages.xlf (Swedish)
[ci skip]
2022-10-10 00:35:51 -07:00
Paperless-ngx Translation Bot [bot]
f78ade5007 New translations messages.xlf (Turkish)
[ci skip]
2022-10-10 00:35:50 -07:00
Paperless-ngx Translation Bot [bot]
6f73aef262 New translations messages.xlf (Chinese Simplified)
[ci skip]
2022-10-10 00:35:49 -07:00
Paperless-ngx Translation Bot [bot]
4d715ddfbc New translations messages.xlf (Portuguese, Brazilian)
[ci skip]
2022-10-10 00:35:48 -07:00
Paperless-ngx Translation Bot [bot]
cdf99166f4 New translations messages.xlf (Croatian)
[ci skip]
2022-10-10 00:35:46 -07:00
Paperless-ngx Translation Bot [bot]
fc267472b3 New translations messages.xlf (Luxembourgish)
[ci skip]
2022-10-10 00:35:45 -07:00
Paperless-ngx Translation Bot [bot]
a0fde023f5 New translations messages.xlf (Serbian (Latin))
[ci skip]
2022-10-10 00:35:44 -07:00
Paperless-ngx Translation Bot [bot]
4a98156731 New translations messages.xlf (Norwegian)
[ci skip]
2022-10-10 00:35:43 -07:00
Paperless-ngx Translation Bot [bot]
ecb190d1b8 New translations messages.xlf (Russian)
[ci skip]
2022-10-10 00:35:41 -07:00
Michael Shamoon
14d82bd8ff Update frontend translation strings 2022-10-10 00:19:01 -07:00
shamoon
6f50285f47 Merge pull request #1648 from paperless-ngx/feature-use-celery
Feature: Transition to celery for background tasks
2022-10-10 00:07:55 -07:00
Michael Shamoon
836ab7a9e7 prevent duplicate tourAnchor race condition 2022-10-10 00:07:38 -07:00
Michael Shamoon
06d9e38457 Fix tour / slim sidebar compatibility 2022-10-09 23:58:41 -07:00
shamoon
9aa7e8e37e Merge pull request #1768 from paperless-ngx/chore-update-gotenbreg
Chore: Updates Gotenberg versions
2022-10-09 23:51:04 -07:00
shamoon
fa526dd702 Merge pull request #1644 from paperless-ngx/feature/welcome-tour
Feature: UI Welcome Tour
2022-10-09 23:50:39 -07:00
Michael Shamoon
8325dc5977 Slim sidebar compatibility 2022-10-09 23:48:22 -07:00
Michael Shamoon
abd34d8d17 Fix code style 2022-10-09 23:47:45 -07:00
Michael Shamoon
d19b598371 Add highlighting, move some anchors for visibility 2022-10-09 23:47:45 -07:00
Michael Shamoon
833a301948 Update translation strings for welcome tour 2022-10-09 23:47:45 -07:00
Michael Shamoon
0e03633ed0 fix tour placement issues, basic offerTour method 2022-10-09 23:47:45 -07:00
Michael Shamoon
5e45b1f230 Add admin tour step, remove step titles, cleaner look 2022-10-09 23:47:45 -07:00
Michael Shamoon
07e2329068 Complete welcome tour 2022-10-09 23:47:31 -07:00
Michael Shamoon
4e56fe339e Core welcome tour functionality 2022-10-09 23:46:26 -07:00
shamoon
e7ebc33090 Merge pull request #1641 from paperless-ngx/feature/slim-sidebar
Feature: slim sidebar
2022-10-09 23:24:57 -07:00
Michael Shamoon
3b07e0fe15 Fix merge conflict 2022-10-09 23:24:36 -07:00
Michael Shamoon
a246b3b598 Merge branch 'dev' into feature/slim-sidebar 2022-10-09 23:15:48 -07:00
Trenton Holmes
11ab469a39 Updates a few more instances of the container 2022-10-09 18:03:29 -07:00
Trenton Holmes
694ad53ef9 Updates Gotenberg container to the latest 2022-10-09 17:55:09 -07:00
Trenton Holmes
a3be3bb71a Re-lock pipenv version to the last working version 2022-10-09 17:43:58 -07:00
Trenton Holmes
77b3aa5011 Fixes is_relative_to not being availible for 3.8 2022-10-09 17:43:58 -07:00
Trenton Holmes
9aefff38e7 If the original file containing a barcode was in the temporary scratch dir, move the split files to consume dir 2022-10-09 17:43:58 -07:00
shamoon
462b243531 Merge pull request #1754 from NiFNi/feature/change-default-matching-algo
change default matching algo to auto and move to constant
2022-10-08 09:35:30 -07:00
shamoon
430c5c3b87 Merge pull request #1761 from paperless-ngx/docs/lsio-tweak
Documentation: Tweak LinuxServer
2022-10-07 23:45:51 -07:00
Trenton H
97ceb1a8a6 Enable some testing against a real email server to hopefully catch things earlier 2022-10-07 18:28:11 -07:00
Trenton H
55089aab32 Fixes handling of gmail label extension to IMAP 2022-10-07 18:28:11 -07:00
Trenton Holmes
b7c335507f Fixes the LSIO migration setting for the media root 2022-10-07 18:18:47 -07:00
Trenton Holmes
9c0c734b34 Enables some basic live testing against a tika server with actual sample documents to catch some more errors mocking won't catch 2022-10-07 18:06:06 -07:00
Michael Shamoon
7f5a3ca1a3 Fix code style 2022-10-07 06:29:31 -07:00
shamoon
0b5c6d3532 Merge pull request #1731 from paperless-ngx/fix/1624
Documentation: Adds troubleshooting note about Kubernetes and ports
2022-10-06 13:22:58 -07:00
shamoon
5357775d42 Merge pull request #1692 from paperless-ngx/feature-frontend-update-checking
Feature: frontend update checking settings
2022-10-05 13:46:32 -07:00
Trenton H
0f25260163 Updates to qpdf 11.1.1, pikepdf 6.1.0, and a few other updates 2022-10-05 10:03:40 -07:00
shamoon
964cfcd4fb Merge pull request #1744 from paperless-ngx/fix/issue-1725
Fix: allow preview for .csv files
2022-10-04 13:16:18 -07:00
Michael Shamoon
c42388f7e2 Use text mime type for csv files for browser preview
Co-Authored-By: Trenton H <797416+stumpylog@users.noreply.github.com>
Co-Authored-By: bin101 <12427722+bin101@users.noreply.github.com>
2022-10-04 13:01:06 -07:00
Trenton H
ff7d4d15cd Fixes migration error if some tasks are defined already 2022-10-04 07:56:40 -07:00
shamoon
5e4a9311ed Merge branch 'dev' into feature-use-celery 2022-10-03 18:00:54 -07:00
shamoon
4e07280102 Merge pull request #1642 from paperless-ngx/feature-qpdf-11
Feature: Upgrade to qpdf 11, pikepdf 6 & ocrmypdf 14
2022-10-03 17:36:30 -07:00
shamoon
fdac108cab Merge pull request #1733 from paperless-ngx/docs-lsio-migrate
Documentation: LinuxServer.io Migration
2022-10-03 17:07:06 -07:00
dependabot[bot]
318f74b34a Bump myst-parser from 0.18.0 to 0.18.1
Bumps [myst-parser](https://github.com/executablebooks/MyST-Parser) from 0.18.0 to 0.18.1.
- [Release notes](https://github.com/executablebooks/MyST-Parser/releases)
- [Changelog](https://github.com/executablebooks/MyST-Parser/blob/master/CHANGELOG.md)
- [Commits](https://github.com/executablebooks/MyST-Parser/compare/v0.18.0...v0.18.1)

---
updated-dependencies:
- dependency-name: myst-parser
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2022-10-03 15:51:43 -07:00
Trenton H
788b3a5ba8 Fixes django-q still in the Pipfile.lock 2022-10-03 13:35:01 -07:00
Trenton H
19d4b85961 Fixes up some issues with the migrations and type mismatches 2022-10-03 13:18:25 -07:00
Trenton H
821c14fbce Corrects how the link to example compose files looks 2022-10-03 11:14:18 -07:00
Trenton H
8c03d9c638 Corrects a re-numbered step 2022-10-03 11:11:51 -07:00
Trenton H
174a609449 Adds a few steps for migration from the LinuxServer.io image 2022-10-03 10:16:53 -07:00
Trenton H
5fd394726e Adds troubleshooting note for Kubernetes about needing to set the port again 2022-10-03 09:01:07 -07:00
Michael Shamoon
1f27f7c12d Update paperless-document.ts 2022-10-03 00:27:57 -07:00
Jens van Almsick
ad6ef7314b fix: csv recognition by consumer
paperless-ngx detects the file format via the mime-type based on the response of python-magic which rely on the response of the file command.
In version 5.39 (which is shipped with debian bullseye and I think many more non-rolling distributions) of the file command a *.csv will be detected as "application/csv" instead of "text/csv" as in newer versions.
2022-10-02 16:09:07 -07:00
Paperless-ngx Translation Bot [bot]
98c306a315 New translations messages.xlf (German)
[ci skip]
2022-10-02 13:21:13 -07:00
Michael Shamoon
11ad8ada79 add id to document duplicate error message 2022-10-02 10:27:45 -07:00
Trenton Holmes
905b28c1d7 When a document is a duplicate, include the title of the existing document in the fail message 2022-10-02 10:27:45 -07:00
dependabot[bot]
84b01b2e4e Bump leonsteinhaeuser/project-beta-automations from 1.3.0 to 2.0.1
Bumps [leonsteinhaeuser/project-beta-automations](https://github.com/leonsteinhaeuser/project-beta-automations) from 1.3.0 to 2.0.1.
- [Release notes](https://github.com/leonsteinhaeuser/project-beta-automations/releases)
- [Commits](https://github.com/leonsteinhaeuser/project-beta-automations/compare/v1.3.0...v2.0.1)

---
updated-dependencies:
- dependency-name: leonsteinhaeuser/project-beta-automations
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
2022-10-02 10:27:02 -07:00
dependabot[bot]
5e9928e58b Bump tj-actions/changed-files from 29.0.2 to 31.0.2
Bumps [tj-actions/changed-files](https://github.com/tj-actions/changed-files) from 29.0.2 to 31.0.2.
- [Release notes](https://github.com/tj-actions/changed-files/releases)
- [Changelog](https://github.com/tj-actions/changed-files/blob/main/HISTORY.md)
- [Commits](https://github.com/tj-actions/changed-files/compare/v29.0.2...v31.0.2)

---
updated-dependencies:
- dependency-name: tj-actions/changed-files
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
2022-10-02 10:26:39 -07:00
dependabot[bot]
0457259e7e Bump actions/checkout from 2 to 3
Bumps [actions/checkout](https://github.com/actions/checkout) from 2 to 3.
- [Release notes](https://github.com/actions/checkout/releases)
- [Changelog](https://github.com/actions/checkout/blob/main/CHANGELOG.md)
- [Commits](https://github.com/actions/checkout/compare/v2...v3)

---
updated-dependencies:
- dependency-name: actions/checkout
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
2022-10-02 10:26:21 -07:00
dependabot[bot]
1f73a6913f Bump actions/setup-python from 3 to 4
Bumps [actions/setup-python](https://github.com/actions/setup-python) from 3 to 4.
- [Release notes](https://github.com/actions/setup-python/releases)
- [Commits](https://github.com/actions/setup-python/compare/v3...v4)

---
updated-dependencies:
- dependency-name: actions/setup-python
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
2022-10-02 10:25:49 -07:00
dependabot[bot]
b29593bad9 Merge pull request #1720 from paperless-ngx/dependabot/npm_and_yarn/src-ui/dev/rxjs-7.5.7 2022-10-02 07:05:45 +00:00
dependabot[bot]
bd378f79f4 Bump rxjs from 7.5.6 to 7.5.7 in /src-ui
Bumps [rxjs](https://github.com/reactivex/rxjs) from 7.5.6 to 7.5.7.
- [Release notes](https://github.com/reactivex/rxjs/releases)
- [Changelog](https://github.com/ReactiveX/rxjs/blob/master/CHANGELOG.md)
- [Commits](https://github.com/reactivex/rxjs/compare/7.5.6...7.5.7)

---
updated-dependencies:
- dependency-name: rxjs
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2022-10-02 06:52:18 +00:00
shamoon
699ed62af4 Merge pull request #1716 from paperless-ngx/dependabot/npm_and_yarn/src-ui/dev/uuid-9.0.0
Bump uuid from 8.3.2 to 9.0.0 in /src-ui
2022-10-01 23:51:18 -07:00
dependabot[bot]
d6ae4102b4 Bump uuid from 8.3.2 to 9.0.0 in /src-ui
Bumps [uuid](https://github.com/uuidjs/uuid) from 8.3.2 to 9.0.0.
- [Release notes](https://github.com/uuidjs/uuid/releases)
- [Changelog](https://github.com/uuidjs/uuid/blob/main/CHANGELOG.md)
- [Commits](https://github.com/uuidjs/uuid/compare/v8.3.2...v9.0.0)

---
updated-dependencies:
- dependency-name: uuid
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
2022-10-02 06:49:30 +00:00
shamoon
97eed9c66d Merge pull request #1717 from paperless-ngx/dependabot/npm_and_yarn/src-ui/dev/ng2-pdf-viewer-9.1.2
Bump ng2-pdf-viewer from 9.1.0 to 9.1.2 in /src-ui
2022-10-01 23:47:35 -07:00
dependabot[bot]
b79a560816 Bump ng2-pdf-viewer from 9.1.0 to 9.1.2 in /src-ui
Bumps [ng2-pdf-viewer](https://github.com/VadimDez/ng2-pdf-viewer) from 9.1.0 to 9.1.2.
- [Release notes](https://github.com/VadimDez/ng2-pdf-viewer/releases)
- [Changelog](https://github.com/VadimDez/ng2-pdf-viewer/blob/master/CHANGELOG.md)
- [Commits](https://github.com/VadimDez/ng2-pdf-viewer/compare/9.1.0...9.1.2)

---
updated-dependencies:
- dependency-name: ng2-pdf-viewer
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2022-10-02 06:25:59 +00:00
shamoon
a6045bb8e8 Merge pull request #1715 from paperless-ngx/dependabot/npm_and_yarn/src-ui/dev/ngx-color-8.0.3
Bump ngx-color from 8.0.2 to 8.0.3 in /src-ui
2022-10-01 23:25:00 -07:00
shamoon
9f770e42ba Merge pull request #1719 from paperless-ngx/dependabot/npm_and_yarn/src-ui/dev/concurrently-7.4.0
Bump concurrently from 7.3.0 to 7.4.0 in /src-ui
2022-10-01 20:03:53 -07:00
dependabot[bot]
b20fe9f09b Bump concurrently from 7.3.0 to 7.4.0 in /src-ui
Bumps [concurrently](https://github.com/open-cli-tools/concurrently) from 7.3.0 to 7.4.0.
- [Release notes](https://github.com/open-cli-tools/concurrently/releases)
- [Commits](https://github.com/open-cli-tools/concurrently/compare/v7.3.0...v7.4.0)

---
updated-dependencies:
- dependency-name: concurrently
  dependency-type: direct:development
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2022-10-02 02:41:50 +00:00
dependabot[bot]
48dbdc6c00 Merge pull request #1718 from paperless-ngx/dependabot/npm_and_yarn/src-ui/dev/types/node-18.7.23 2022-10-02 02:40:34 +00:00
dependabot[bot]
d33f993809 Bump @types/node from 18.7.14 to 18.7.23 in /src-ui
Bumps [@types/node](https://github.com/DefinitelyTyped/DefinitelyTyped/tree/HEAD/types/node) from 18.7.14 to 18.7.23.
- [Release notes](https://github.com/DefinitelyTyped/DefinitelyTyped/releases)
- [Commits](https://github.com/DefinitelyTyped/DefinitelyTyped/commits/HEAD/types/node)

---
updated-dependencies:
- dependency-name: "@types/node"
  dependency-type: direct:development
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2022-10-02 02:22:40 +00:00
dependabot[bot]
8ba44b3f71 Bump ngx-color from 8.0.2 to 8.0.3 in /src-ui
Bumps [ngx-color](https://github.com/scttcper/ngx-color) from 8.0.2 to 8.0.3.
- [Release notes](https://github.com/scttcper/ngx-color/releases)
- [Commits](https://github.com/scttcper/ngx-color/compare/v8.0.2...v8.0.3)

---
updated-dependencies:
- dependency-name: ngx-color
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2022-10-02 02:22:20 +00:00
shamoon
83e0a6e179 Merge pull request #1714 from paperless-ngx/dependabot/npm_and_yarn/src-ui/dev/jest-environment-jsdom-29.1.2
Bump jest-environment-jsdom from 29.0.1 to 29.1.2 in /src-ui
2022-10-01 19:20:36 -07:00
dependabot[bot]
8e2c4da55e Bump jest-environment-jsdom from 29.0.1 to 29.1.2 in /src-ui
Bumps [jest-environment-jsdom](https://github.com/facebook/jest/tree/HEAD/packages/jest-environment-jsdom) from 29.0.1 to 29.1.2.
- [Release notes](https://github.com/facebook/jest/releases)
- [Changelog](https://github.com/facebook/jest/blob/main/CHANGELOG.md)
- [Commits](https://github.com/facebook/jest/commits/v29.1.2/packages/jest-environment-jsdom)

---
updated-dependencies:
- dependency-name: jest-environment-jsdom
  dependency-type: direct:development
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2022-10-02 01:09:49 +00:00
dependabot[bot]
cae79e0555 Merge pull request #1708 from paperless-ngx/dependabot/npm_and_yarn/src-ui/dev/angular/compiler-14.2.4 2022-10-02 00:51:27 +00:00
Michael Shamoon
5b79aec065 Update @angular/cli @angular/core 2022-10-01 17:36:08 -07:00
dependabot[bot]
91de061c06 Bump @angular/compiler from 14.2.0 to 14.2.4 in /src-ui
Bumps [@angular/compiler](https://github.com/angular/angular/tree/HEAD/packages/compiler) from 14.2.0 to 14.2.4.
- [Release notes](https://github.com/angular/angular/releases)
- [Changelog](https://github.com/angular/angular/blob/main/CHANGELOG.md)
- [Commits](https://github.com/angular/angular/commits/14.2.4/packages/compiler)

---
updated-dependencies:
- dependency-name: "@angular/compiler"
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2022-10-01 17:35:34 -07:00
shamoon
f7d6f0bf21 Merge pull request #1707 from paperless-ngx/dependabot/npm_and_yarn/src-ui/dev/cypress-10.9.0
Bump cypress from 10.7.0 to 10.9.0 in /src-ui
2022-10-01 17:28:55 -07:00
dependabot[bot]
551c765358 Bump cypress from 10.7.0 to 10.9.0 in /src-ui
Bumps [cypress](https://github.com/cypress-io/cypress) from 10.7.0 to 10.9.0.
- [Release notes](https://github.com/cypress-io/cypress/releases)
- [Changelog](https://github.com/cypress-io/cypress/blob/develop/CHANGELOG.md)
- [Commits](https://github.com/cypress-io/cypress/compare/v10.7.0...v10.9.0)

---
updated-dependencies:
- dependency-name: cypress
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2022-10-02 00:10:16 +00:00
shamoon
34ee26084d Merge pull request #1710 from paperless-ngx/dependabot/npm_and_yarn/src-ui/dev/bootstrap-5.2.1
Bump bootstrap from 5.2.0 to 5.2.1 in /src-ui
2022-10-01 17:09:22 -07:00
dependabot[bot]
47a76412e2 Bump bootstrap from 5.2.0 to 5.2.1 in /src-ui
Bumps [bootstrap](https://github.com/twbs/bootstrap) from 5.2.0 to 5.2.1.
- [Release notes](https://github.com/twbs/bootstrap/releases)
- [Commits](https://github.com/twbs/bootstrap/compare/v5.2.0...v5.2.1)

---
updated-dependencies:
- dependency-name: bootstrap
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2022-10-02 00:03:12 +00:00
shamoon
45e6a419b3 Merge pull request #1706 from paperless-ngx/dependabot/npm_and_yarn/src-ui/dev/typescript-4.8.4
Bump typescript from 4.7.4 to 4.8.4 in /src-ui
2022-10-01 16:11:17 -07:00
dependabot[bot]
c34f982496 Bump typescript from 4.7.4 to 4.8.4 in /src-ui
Bumps [typescript](https://github.com/Microsoft/TypeScript) from 4.7.4 to 4.8.4.
- [Release notes](https://github.com/Microsoft/TypeScript/releases)
- [Commits](https://github.com/Microsoft/TypeScript/compare/v4.7.4...v4.8.4)

---
updated-dependencies:
- dependency-name: typescript
  dependency-type: direct:development
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2022-10-01 20:07:21 +00:00
Michael Shamoon
f26fda9485 Fix python + frontend tests 2022-09-30 18:32:21 -07:00
Michael Shamoon
06a29cd45c Handle settings live refresh, unsubscribe subscriptions 2022-09-30 15:39:02 -07:00
Michael Shamoon
98ab770437 Update documentation re. PAPERLESS_ENABLE_UPDATE_CHECK 2022-09-30 15:10:52 -07:00
Michael Shamoon
c87f60c605 Better migration of update checking settings, offer reload, strip backend_setting from db 2022-09-30 14:03:59 -07:00
Michael Shamoon
9e2430da46 Frontend update checking settings 2022-09-30 12:30:23 -07:00
Paperless-ngx Translation Bot [bot]
f59abadbc4 New translations messages.xlf (Russian)
[ci skip]
2022-09-30 10:20:29 -07:00
Paperless-ngx Translation Bot [bot]
4a3a55b923 New translations messages.xlf (Russian)
[ci skip]
2022-09-30 07:56:26 -07:00
Paperless-ngx Translation Bot [bot]
9bd031fbd7 New translations messages.xlf (Russian)
[ci skip]
2022-09-30 06:55:45 -07:00
Trenton H
436f9e891e Changes MariaDB encoding to use utf8mb4 2022-09-29 13:53:44 -07:00
Michael Shamoon
04faa10e3b Update references to qcluster t celery 2022-09-28 20:13:19 -07:00
Trenton Holmes
38ba1d1a52 Cleans up and documnets installation on bare metal, includes systemd service file for the celery and celery beat 2022-09-28 19:38:41 -07:00
Trenton H
4422bb3f69 Fix logger location tag
Co-authored-by: shamoon <4887959+shamoon@users.noreply.github.com>
2022-09-28 11:02:34 -07:00
Trenton H
5b66ef0a74 Updates how task_args and task_kwargs are parsed, adds testing to cover everything I can think of 2022-09-28 10:40:55 -07:00
shamoon
5639659b63 Merge pull request #1683 from paperless-ngx/fix/issue-1660
Mariadb compose files should use `PAPERLESS_DBPASS`
2022-09-28 09:48:20 -07:00
Michael Shamoon
7ba9cdbe23 Mariadb compose files should use PAPERLESS_DBPASS 2022-09-28 09:38:13 -07:00
Michael Shamoon
6f6f006704 re-enable frontend tests and fix tasks fixture 2022-09-27 21:01:16 -07:00
Michael Shamoon
4fe37f6aee Add related_document and direct link from task UI 2022-09-27 20:50:26 -07:00
Michael Shamoon
5162bdd404 Filter out old migrated tasks 2022-09-27 19:41:23 -07:00
Michael Shamoon
c8f252d165 Add document name & error result parsing to PaperlessTask serializer 2022-09-27 19:40:24 -07:00
Michael Shamoon
c289439cab Fix tab ids & date parsing 2022-09-27 17:56:04 -07:00
shamoon
807b7130e5 Merge pull request #1671 from paperless-ngx/v1.9.2-changelog
[Documentation] Add v1.9.2 changelog
2022-09-27 16:50:23 -07:00
Trenton H
14b6216b49 Ensures all existing one to one fields are nulled before altering the field 2022-09-27 14:17:42 -07:00
Trenton H
9188e25dc5 Fixes migration order back to the right way 2022-09-27 13:55:31 -07:00
Trenton H
fad1b03458 Finalizes what the PaperlessTask will look like to the frontend 2022-09-27 12:44:01 -07:00
Michael Shamoon
49054c61a4 Add failed tasks badge, better animation 2022-09-27 11:00:02 -07:00
Michael Shamoon
e2d593c023 Fix formatting, add note about 1.9.1 version string 2022-09-27 10:04:41 -07:00
github-actions
7455963124 Changelog - GHA 2022-09-27 17:01:37 +00:00
Michael Shamoon
6771e57fca Merge branch 'main' into dev 2022-09-27 09:36:39 -07:00
Michael Shamoon
9d117ee11b Merge pull request #1666 from paperless-ngx/fix/1664 2022-09-27 09:34:34 -07:00
shamoon
7d4b2c2413 Merge pull request #1670 from paperless-ngx/fix/issue-1667
Bugfix: Allow PAPERLESS_OCR_CLEAN=none
2022-09-27 09:29:49 -07:00
Michael Shamoon
5bb1824613 Allow PAPERLESS_OCR_CLEAN=none 2022-09-27 08:48:04 -07:00
Trenton H
8c07b76e6a Bumps version numbers to 1.9.2 2022-09-27 08:06:35 -07:00
shamoon
8cb58b4ff8 Merge pull request #1650 from paperless-ngx/fix/changelog-formatting
Chore: Ensure the generated changelog is formatted
2022-09-26 16:02:47 -07:00
shamoon
426178b6e5 Merge pull request #1649 from paperless-ngx/v1.9.1-changelog 2022-09-26 13:03:29 -07:00
Trenton H
07ec74a5d6 Runs the pre-commit hooks against the changelog before committing it 2022-09-26 12:12:57 -07:00
Trenton H
a865f2af7d Fixes changelog linting 2022-09-26 12:06:42 -07:00
github-actions
3409d19139 Changelog - GHA 2022-09-26 19:04:29 +00:00
Trenton H
71b4571524 Merge branch 'main' into dev 2022-09-26 11:31:18 -07:00
Trenton Holmes
9247300230 Transitions the backend to celery and celery beat 2022-09-26 11:25:34 -07:00
Trenton H
8967f07c8d Fixes a missing option for OCR mode and incorrect clean mode 2022-09-26 11:05:19 -07:00
shamoon
6e21d3dbee Merge pull request #1646 from paperless-ngx/fix/reset-button-padding
Fix reset button padding on small screens
2022-09-26 11:03:52 -07:00
Michael Shamoon
45b3422506 Fix reset button padding on small screens 2022-09-26 10:55:22 -07:00
Trenton H
e5de658e78 Updates to qpdf 11.1, pikepdf 6 and OCRMyPDF 14 2022-09-26 09:49:03 -07:00
Michael Shamoon
e0f93c26d6 Nicer slim sidebar transitioning, dark mode fixes, fix tests by making settings taller 2022-09-26 09:33:05 -07:00
Trenton H
df7e4d85c6 Fixes the linting issue 2022-09-26 09:15:22 -07:00
janis-ax
ae736f8f68 Update docs/advanced_usage.rst
Co-authored-by: shamoon <4887959+shamoon@users.noreply.github.com>
2022-09-26 09:06:36 -07:00
janis-ax
e2674c29a6 Improve docs with exampe
Filename ending comes automatically
2022-09-26 09:06:36 -07:00
Michael Shamoon
aa55162e2e Settings UI with live updating 2022-09-26 09:05:53 -07:00
Michael Shamoon
1330390b4f slim sidebar with doc list adjusting 2022-09-26 09:05:53 -07:00
Michael Shamoon
617055fca7 Save slimsidebar settings to db on change 2022-09-26 09:05:53 -07:00
shamoon
185b352264 Merge pull request #1640 from paperless-ngx/feature-combo-deps-update
Chore: Python dependencies update
2022-09-26 09:04:45 -07:00
shamoon
58afac2312 Merge pull request #1639 from paperless-ngx/v1.9.0-changelog
[Documentation] Add v1.9.0 changelog
2022-09-26 08:49:43 -07:00
Trenton H
ea60b83336 Fixes missing markdown text from a PR title 2022-09-26 08:44:42 -07:00
Trenton Holmes
05a00b3057 Updates Python deps all at once 2022-09-26 08:26:55 -07:00
github-actions
09139fe434 Changelog - GHA 2022-09-26 15:24:50 +00:00
Michael Shamoon
d003d26a67 Update environment.prod.ts 2022-09-26 07:56:05 -07:00
Michael Shamoon
ef2789cf57 Merge branch 'main' into dev 2022-09-26 07:55:49 -07:00
Michael Shamoon
7d4ce40a37 v1.9.0 2022-09-26 07:54:10 -07:00
shamoon
8feada6907 Merge pull request #1560 from paperless-ngx/beta
[Beta] Paperless-ngx v1.9.0 Release Candidate
2022-09-26 07:53:16 -07:00
Paperless-ngx Translation Bot [bot]
ed9b0c32d8 New Crowdin updates (#1633)
* bugfix: increase delay

partially reverts 86358d5561
re-implements 4fbabe43ea

Signed-off-by: Florian Brandes <florian.brandes@posteo.de>

* New translations messages.xlf (Slovenian)
[ci skip]

* New translations messages.xlf (Slovenian)
[ci skip]

Signed-off-by: Florian Brandes <florian.brandes@posteo.de>
Co-authored-by: Florian Brandes <florian.brandes@posteo.de>
2022-09-26 07:52:44 -07:00
Felix E
8088394d16 Merge pull request #1629 from paperless-ngx/feature-better-pipenv-docker
Chore: Moves pipenv into its own Docker stage
2022-09-25 09:54:40 +02:00
Trenton Holmes
cb2823ff45 Moves the pipenv generation of requirements.txt into a seperate build stage, disconnecting the main image from its dependencies 2022-09-21 09:43:40 -07:00
lemmi
27906df149 paperless_cmd.sh: use exec to run supervisord
Without exec, signals aren't passed through properly. Stopping the
container won't have any effect unless killed.

closes #1616
2022-09-20 07:23:04 -07:00
Paperless-ngx Translation Bot [bot]
b8e7f0b45f New Crowdin updates (#1607)
* bugfix: increase delay

partially reverts 86358d5561
re-implements 4fbabe43ea

Signed-off-by: Florian Brandes <florian.brandes@posteo.de>

* New translations messages.xlf (Finnish) [ci skip]

Signed-off-by: Florian Brandes <florian.brandes@posteo.de>
Co-authored-by: Florian Brandes <florian.brandes@posteo.de>
2022-09-16 15:45:17 -07:00
Trenton H
355b3fcb3d Fixes grammar in comment
Co-authored-by: Florian <florian.brandes@posteo.de>
2022-09-16 09:08:16 -07:00
Trenton Holmes
7aa0e5650b Updates how barcodes are detected, using pikepdf images, instead of converting each page to an image 2022-09-16 09:08:16 -07:00
Paperless-ngx Translation Bot [bot]
f9a0adc64e New Crowdin updates (#1580)
* New translations messages.xlf (French)
[ci skip]

* New translations messages.xlf (Finnish)
[ci skip]

* New translations messages.xlf (Finnish)
[ci skip]
2022-09-16 08:37:07 -07:00
shamoon
3b34aed64f Merge pull request #1605 from paperless-ngx/fix/1599-consume-permissions
Fix: Consume directory permissions were not updated
2022-09-16 08:31:41 -07:00
Florian Brandes
8a8edfb108 bugfix: increase delay
partially reverts 86358d5561
re-implements 4fbabe43ea

Signed-off-by: Florian Brandes <florian.brandes@posteo.de>
2022-09-16 08:00:26 -07:00
Trenton H
3a7cbd3a42 Fixes an issue where the consume directory wasn't included in the permissions fix at Docker entry 2022-09-16 07:52:33 -07:00
Trenton H
0e443ba017 Merge pull request #1596 from paperless-ngx/fix/1590-barcodes
Fix: Double barcode separation creates empty file
2022-09-15 14:18:01 -07:00
shamoon
8ed401aec1 Merge pull request #1591 from paperless-ngx/fix/1583-tika-str
Fix: Parsing Tika documents fails with AttributeError
2022-09-14 21:52:49 -07:00
Trenton Holmes
9ae847039b Fixes the seperation of files by barcode, during the case where 2 barcodes appear back to back 2022-09-14 14:00:37 -07:00
Trenton Holmes
d4cb84ff76 Ensure the tika parse function gets a string, not a PathLike 2022-09-14 07:48:12 -07:00
shamoon
17ae2aacbf Merge pull request #1576 from paperless-ngx/fix/slow-classifier
Fix: Resolve issue with slow classifier
2022-09-13 11:57:58 -07:00
Michael Shamoon
82d03f2dc6 fix tag list vertical space 2022-09-13 11:54:25 -07:00
Trenton Holmes
3cf2aaf8ff Locks numpy version until an upstream fix or resolution to aarch64 classifier slowdown 2022-09-13 10:33:07 -07:00
shamoon
0c89721133 Merge pull request #1567 from paperless-ngx/feature-process-names
Feature: Display django-q process names
2022-09-12 12:21:49 -07:00
Trenton H
e206687070 Updates django-q and add optional setproctitle to allow display 2022-09-12 12:18:41 -07:00
Trenton Holmes
cdb9c48545 Minor logging updates 2022-09-12 11:44:33 -07:00
Trenton Holmes
0b8eff9643 Extends the cleanup of image versions to the library images and all the registry cache images as well 2022-09-12 11:44:33 -07:00
shamoon
16882b8fa9 Merge pull request #1566 from paperless-ngx/fix/issue-1564
Fix document comments not updating on document navigation
2022-09-12 11:37:30 -07:00
Michael Shamoon
2afa5940e3 Fix live updating of comments on doc change 2022-09-12 08:35:13 -07:00
Michael Shamoon
8fa7bc3dab Remove user dropdown border 2022-09-12 08:35:04 -07:00
Michael Shamoon
4a9dc1e33a Update messages.xlf 2022-09-11 20:47:47 -07:00
Trenton Holmes
b0d842a370 Updates version string to 1.9.0-rc1
Signed-off-by: Trenton Holmes <holmes.trenton@gmail.com>
2022-09-11 15:34:10 -07:00
Trenton Holmes
194dda6d84 Merge branch 'main' into beta 2022-09-11 15:12:54 -07:00
Paperless-ngx Translation Bot [bot]
3267708097 New Crowdin updates (#1295)
Squashed commit of Crowdin updates

Co-authored-by: shamoon <4887959+shamoon@users.noreply.github.com>
2022-09-11 15:04:55 -07:00
shamoon
71a808c95a Merge pull request #543 from bckelly1/feature-mariadb-support
Feature: Add MariaDB support
2022-09-11 08:50:27 -07:00
Trenton Holmes
2c3c26edf1 Ensures the Pipfile.lock hash is up to date 2022-09-11 08:20:58 -07:00
Trenton Holmes
18a4ba7778 Removes optipng, added in a bad merge 2022-09-11 07:42:20 -07:00
Trenton Holmes
140e239bdb Fixes the shellcheck issues 2022-09-11 07:42:20 -07:00
Trenton Holmes
537e7c63f4 Combines the two database folders to a single variable during installation 2022-09-11 07:42:20 -07:00
Trenton Holmes
ed2e884de8 Fully qualifies the image and updates to Redis 7 2022-09-11 07:42:20 -07:00
Trenton Holmes
60980cb26a Adds the mysql Python dependency 2022-09-11 07:42:19 -07:00
Brian Kelly
3b84e34c8e re-order apt dependencies 2022-09-11 07:40:32 -07:00
Brian Kelly
ebdf9b55df correct the mariadb volume data path 2022-09-11 07:40:32 -07:00
Brian Kelly
f528b01de4 set paperless db user 2022-09-11 07:40:32 -07:00
Brian Kelly
6ae9a8f2be remove debug image reference 2022-09-11 07:40:32 -07:00
Brian Kelly
65cfd55027 rebase mariadb feature onto dev 2022-09-11 07:40:31 -07:00
Michael Shamoon
15d074d39c Include storage path in exporter + tests 2022-09-11 07:39:35 -07:00
shamoon
962d0ebb40 Merge pull request #1551 from paperless-ngx/chore-settings-cleanup
Chore: Cleanup and validate settings
2022-09-10 20:04:35 -07:00
Trenton Holmes
d408900a91 Adds validation and testing to cover some of the common settings 2022-09-09 11:48:57 -07:00
Trenton Holmes
0bf9e55ca7 Fixes a minor TODO in settings, and enables flake8 for settings.py 2022-09-09 11:42:50 -07:00
dependabot[bot]
55d36b39b1 Bump pikepdf from 5.5.0 to 5.6.1
Bumps [pikepdf](https://github.com/pikepdf/pikepdf) from 5.5.0 to 5.6.1.
- [Release notes](https://github.com/pikepdf/pikepdf/releases)
- [Commits](https://github.com/pikepdf/pikepdf/compare/v5.5.0...v5.6.1)

---
updated-dependencies:
- dependency-name: pikepdf
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2022-09-08 07:51:11 -07:00
Trenton Holmes
45fd01a688 Decrease the final size of the images containing .deb and .whl files 2022-09-08 07:31:00 -07:00
dependabot[bot]
1fda0782ae Bump black from 22.6.0 to 22.8.0
Bumps [black](https://github.com/psf/black) from 22.6.0 to 22.8.0.
- [Release notes](https://github.com/psf/black/releases)
- [Changelog](https://github.com/psf/black/blob/main/CHANGES.md)
- [Commits](https://github.com/psf/black/compare/22.6.0...22.8.0)

---
updated-dependencies:
- dependency-name: black
  dependency-type: direct:development
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2022-09-07 09:33:36 -07:00
dependabot[bot]
2680a83455 Bump tqdm from 4.64.0 to 4.64.1
Bumps [tqdm](https://github.com/tqdm/tqdm) from 4.64.0 to 4.64.1.
- [Release notes](https://github.com/tqdm/tqdm/releases)
- [Commits](https://github.com/tqdm/tqdm/compare/v4.64.0...v4.64.1)

---
updated-dependencies:
- dependency-name: tqdm
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2022-09-07 09:05:32 -07:00
dependabot[bot]
148e875523 Bump pytest from 7.1.2 to 7.1.3
Bumps [pytest](https://github.com/pytest-dev/pytest) from 7.1.2 to 7.1.3.
- [Release notes](https://github.com/pytest-dev/pytest/releases)
- [Changelog](https://github.com/pytest-dev/pytest/blob/main/CHANGELOG.rst)
- [Commits](https://github.com/pytest-dev/pytest/compare/7.1.2...7.1.3)

---
updated-dependencies:
- dependency-name: pytest
  dependency-type: direct:development
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2022-09-07 07:57:41 -07:00
shamoon
b9e60e0145 Merge pull request #1528 from erikarvstedt/docs-fix-variable-defaults
docs/configuration: Fix binary variable defaults
2022-09-06 14:22:23 -07:00
Erik Arvstedt
03559454f6 docs/configuration: Fix binary variable defaults 2022-09-04 15:21:49 +02:00
dependabot[bot]
50ee1c0bd5 Bump tj-actions/changed-files from 24 to 29.0.2
Bumps [tj-actions/changed-files](https://github.com/tj-actions/changed-files) from 24 to 29.0.2.
- [Release notes](https://github.com/tj-actions/changed-files/releases)
- [Changelog](https://github.com/tj-actions/changed-files/blob/main/HISTORY.md)
- [Commits](https://github.com/tj-actions/changed-files/compare/v24...v29.0.2)

---
updated-dependencies:
- dependency-name: tj-actions/changed-files
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
2022-09-03 18:35:51 -07:00
shamoon
c6b13271cf Merge pull request #1500 from paperless-ngx/feature-gunicorn-tune
Bugfix: Better gunicorn settings for workers
2022-09-02 18:01:47 -07:00
dependabot[bot]
fd83e8f2a9 Merge pull request #1502 from paperless-ngx/dependabot/npm_and_yarn/src-ui/dev/angular/cli-14.2.1 2022-09-02 08:40:58 +00:00
Michael Shamoon
5f7c724531 update jest-preset-angular 2022-09-02 01:26:05 -07:00
Michael Shamoon
31ebe2675b update angular core 2022-09-02 01:25:39 -07:00
Michael Shamoon
60d40cc2ce update angular cli 2022-09-02 01:24:14 -07:00
dependabot[bot]
6796cdf947 Bump @angular/cli from 14.1.0 to 14.2.1 in /src-ui
Bumps [@angular/cli](https://github.com/angular/angular-cli) from 14.1.0 to 14.2.1.
- [Release notes](https://github.com/angular/angular-cli/releases)
- [Changelog](https://github.com/angular/angular-cli/blob/main/CHANGELOG.md)
- [Commits](https://github.com/angular/angular-cli/compare/14.1.0...14.2.1)

---
updated-dependencies:
- dependency-name: "@angular/cli"
  dependency-type: direct:development
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2022-09-02 08:15:36 +00:00
shamoon
6592a925c4 Merge pull request #1507 from paperless-ngx/dependabot/npm_and_yarn/src-ui/dev/jest-environment-jsdom-29.0.1
Bump jest-environment-jsdom from 28.1.3 to 29.0.1 in /src-ui
2022-09-02 01:03:23 -07:00
dependabot[bot]
6d42b2a29d Bump jest-environment-jsdom from 28.1.3 to 29.0.1 in /src-ui
Bumps [jest-environment-jsdom](https://github.com/facebook/jest/tree/HEAD/packages/jest-environment-jsdom) from 28.1.3 to 29.0.1.
- [Release notes](https://github.com/facebook/jest/releases)
- [Changelog](https://github.com/facebook/jest/blob/main/CHANGELOG.md)
- [Commits](https://github.com/facebook/jest/commits/v29.0.1/packages/jest-environment-jsdom)

---
updated-dependencies:
- dependency-name: jest-environment-jsdom
  dependency-type: direct:development
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
2022-09-02 07:41:29 +00:00
shamoon
6b4dccfbd5 Merge pull request #1506 from paperless-ngx/dependabot/npm_and_yarn/src-ui/dev/types/node-18.7.14
Bump @types/node from 18.6.3 to 18.7.14 in /src-ui
2022-09-02 00:40:15 -07:00
dependabot[bot]
2582d325bc Bump @types/node from 18.6.3 to 18.7.14 in /src-ui
Bumps [@types/node](https://github.com/DefinitelyTyped/DefinitelyTyped/tree/HEAD/types/node) from 18.6.3 to 18.7.14.
- [Release notes](https://github.com/DefinitelyTyped/DefinitelyTyped/releases)
- [Commits](https://github.com/DefinitelyTyped/DefinitelyTyped/commits/HEAD/types/node)

---
updated-dependencies:
- dependency-name: "@types/node"
  dependency-type: direct:development
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2022-09-02 07:39:49 +00:00
shamoon
078814e77a Merge pull request #1505 from paperless-ngx/dependabot/npm_and_yarn/src-ui/dev/angular-builders/jest-14.0.1
Bump @angular-builders/jest from 14.0.0 to 14.0.1 in /src-ui
2022-09-02 00:35:49 -07:00
dependabot[bot]
a80b413d38 Bump @angular-builders/jest from 14.0.0 to 14.0.1 in /src-ui
Bumps [@angular-builders/jest](https://github.com/just-jeb/angular-builders/tree/HEAD/packages/jest) from 14.0.0 to 14.0.1.
- [Release notes](https://github.com/just-jeb/angular-builders/releases)
- [Changelog](https://github.com/just-jeb/angular-builders/blob/master/packages/jest/CHANGELOG.md)
- [Commits](https://github.com/just-jeb/angular-builders/commits/@angular-builders/jest@14.0.1/packages/jest)

---
updated-dependencies:
- dependency-name: "@angular-builders/jest"
  dependency-type: direct:development
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2022-09-02 07:33:26 +00:00
shamoon
8cb93da53e Merge pull request #1504 from paperless-ngx/dependabot/npm_and_yarn/src-ui/dev/zone.js-0.11.8
Bump zone.js from 0.11.7 to 0.11.8 in /src-ui
2022-09-02 00:32:20 -07:00
dependabot[bot]
299ae2b828 Bump zone.js from 0.11.7 to 0.11.8 in /src-ui
Bumps [zone.js](https://github.com/angular/angular/tree/HEAD/packages/zone.js) from 0.11.7 to 0.11.8.
- [Release notes](https://github.com/angular/angular/releases)
- [Changelog](https://github.com/angular/angular/blob/main/packages/zone.js/CHANGELOG.md)
- [Commits](https://github.com/angular/angular/commits/zone.js-0.11.8/packages/zone.js)

---
updated-dependencies:
- dependency-name: zone.js
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2022-09-02 07:30:09 +00:00
shamoon
96cf316eec Merge pull request #1494 from paperless-ngx/dependabot/npm_and_yarn/src-ui/dev/ngx-color-8.0.2
Bump ngx-color from 8.0.1 to 8.0.2 in /src-ui
2022-09-02 00:17:09 -07:00
dependabot[bot]
4aebb8e153 Bump ngx-color from 8.0.1 to 8.0.2 in /src-ui
Bumps [ngx-color](https://github.com/scttcper/ngx-color) from 8.0.1 to 8.0.2.
- [Release notes](https://github.com/scttcper/ngx-color/releases)
- [Commits](https://github.com/scttcper/ngx-color/compare/v8.0.1...v8.0.2)

---
updated-dependencies:
- dependency-name: ngx-color
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2022-09-02 07:02:45 +00:00
shamoon
82c6942f09 Merge pull request #1496 from paperless-ngx/dependabot/npm_and_yarn/src-ui/dev/cypress-10.7.0
Bump cypress from 10.3.1 to 10.7.0 in /src-ui
2022-09-02 00:01:35 -07:00
dependabot[bot]
ff280f0309 Bump cypress from 10.3.1 to 10.7.0 in /src-ui
Bumps [cypress](https://github.com/cypress-io/cypress) from 10.3.1 to 10.7.0.
- [Release notes](https://github.com/cypress-io/cypress/releases)
- [Changelog](https://github.com/cypress-io/cypress/blob/develop/.releaserc.base.js)
- [Commits](https://github.com/cypress-io/cypress/compare/v10.3.1...v10.7.0)

---
updated-dependencies:
- dependency-name: cypress
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2022-09-02 06:53:44 +00:00
shamoon
06d15a11c8 Merge pull request #1495 from paperless-ngx/dependabot/npm_and_yarn/src-ui/dev/cypress/schematic-2.1.1
Bump @cypress/schematic from 2.0.0 to 2.1.1 in /src-ui
2022-09-01 23:52:39 -07:00
shamoon
4b3649ea94 Merge pull request #1498 from paperless-ngx/dependabot/npm_and_yarn/src-ui/dev/popperjs/core-2.11.6
Bump @popperjs/core from 2.11.5 to 2.11.6 in /src-ui
2022-09-01 23:41:01 -07:00
Trenton Holmes
5ffb25b71d Tweaks gunicorn to preload the app and use shared memory for temporary fs 2022-09-01 18:04:12 -07:00
dependabot[bot]
8b28159e2d Bump @popperjs/core from 2.11.5 to 2.11.6 in /src-ui
Bumps [@popperjs/core](https://github.com/popperjs/popper-core) from 2.11.5 to 2.11.6.
- [Release notes](https://github.com/popperjs/popper-core/releases)
- [Commits](https://github.com/popperjs/popper-core/compare/v2.11.5...v2.11.6)

---
updated-dependencies:
- dependency-name: "@popperjs/core"
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2022-09-01 20:12:56 +00:00
dependabot[bot]
99d6103617 Bump @cypress/schematic from 2.0.0 to 2.1.1 in /src-ui
Bumps [@cypress/schematic](https://github.com/cypress-io/cypress) from 2.0.0 to 2.1.1.
- [Release notes](https://github.com/cypress-io/cypress/releases)
- [Changelog](https://github.com/cypress-io/cypress/blob/develop/.releaserc.base.js)
- [Commits](https://github.com/cypress-io/cypress/compare/@cypress/schematic-v2.0.0...@cypress/schematic-v2.1.1)

---
updated-dependencies:
- dependency-name: "@cypress/schematic"
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2022-09-01 20:09:45 +00:00
shamoon
a502fe7c5c Merge pull request #1492 from paperless-ngx/feature-imap-utf-improve
Feature: Simplify IMAP login for UTF-8
2022-09-01 09:35:26 -07:00
Trenton Holmes
bd18a57a5d Updates imap_tools and updates to use the new login method for UTF-8 2022-09-01 08:54:44 -07:00
viktor-c
3828d712bd Info about installing on subpath (#1350)
* Update docker-compose.env

* Update configuration.rst

example.com/paperless is not a subdomain, but a subpath. Also when hosting from a subdomain like paperless.example.com one does not have to change anything in the configuration, it just works, because paperless expects to be hosted at root, i.e. paperless.example.com
This however changes when paperless is not hosted at root anymore but for example at paperless.example.com/paperlessNgx

* Update docker-compose.env

* Apply suggestions from code review

Co-authored-by: shamoon <4887959+shamoon@users.noreply.github.com>
2022-08-31 16:36:13 -07:00
Quinn Casey
a6be010464 Merge pull request #1488 from paperless-ngx/fix/tasks-table-actions
Fix actions button in tasks table
2022-08-31 16:18:13 -07:00
Michael Shamoon
efe51b30fe Fix actions button in tasks table 2022-08-31 12:39:56 -07:00
Felix E
26019b9c17 Merge pull request #1482 from paperless-ngx/move-scanners-to-wiki
Docs: move scanner & software recs to GH wiki
2022-08-31 19:28:03 +02:00
Michael Shamoon
ebdd7afb67 Move scanner & software recs to GH wiki 2022-08-30 22:14:07 -07:00
Felix E
0c90b84a92 Merge pull request #1467 from tooomm/patch-1
Docs: Update mobile scanner section
2022-08-28 10:29:15 +02:00
tooomm
9c2265d1aa update mobile scanner section 2022-08-27 18:03:54 +02:00
Quinn Casey
8046a6f3a7 Merge pull request #1463 from paperless-ngx/fix/issue-1462
Fix: Add missing filter rule types to SavedViewFilterRule model & fix migrations
2022-08-26 12:35:29 -07:00
Michael Shamoon
ddff902291 Fix 1023, 1024 migrations, add savedviewfilterrule migration 2022-08-26 10:02:48 -07:00
Michael Shamoon
a406920ae6 Add missing filter rule types to SavedViewFilterRule model
And add note to filter-rule-type.ts
2022-08-26 10:02:48 -07:00
Quinn Casey
44e596b0c4 Merge pull request #1451 from paperless-ngx/feature-better-redo-ocr
Feature: Even better re-do of OCR
2022-08-25 17:01:54 -07:00
shamoon
2b1c8c8d9a Merge pull request #1375 from tim-vogel/add_comments
Feature: document comments
2022-08-25 11:48:31 -07:00
shamoon
d40c13420d Merge pull request #1367 from Eckii24/feat/date-suggestions
Adding date suggestions to the documents details view
2022-08-25 11:47:37 -07:00
Trenton Holmes
8ad2f7daf0 Locks scipy to 1.8.1, allows some other minor version updates 2022-08-25 11:34:00 -07:00
shamoon
696ebf545f Revert "Bump sphinx from 5.0.2 to 5.1.1" 2022-08-25 11:34:00 -07:00
Quinn Casey
ed515f4e36 Merge pull request #1460 from paperless-ngx/fix/paperless-conf-typo
Fix paperless.conf.example typo
2022-08-25 08:39:53 -07:00
Quinn Casey
06a4949266 Fix minor duplicate/incorrect conf key 2022-08-25 08:36:48 -07:00
shamoon
f50a01e118 Merge pull request #1297 from paperless-ngx/dependabot/pip/dev/sphinx-5.1.1
Bump sphinx from 5.0.2 to 5.1.1
2022-08-25 08:33:40 -07:00
shamoon
09512be1ad Merge pull request #1301 from paperless-ngx/fix-release-drafter
[CI] Fix release drafter issues
2022-08-25 08:25:28 -07:00
shamoon
bb951ad860 Merge pull request #1421 from paperless-ngx/feature-consumer-event-driven
Feature: Event driven consumer
2022-08-25 08:16:47 -07:00
Michael Shamoon
858ae909e8 Default PAPERLESS_NUMBER_OF_SUGGESTED_DATES to 3 2022-08-25 08:03:38 -07:00
Quinn Casey
1692bac3fe Merge pull request #1442 from paperless-ngx/fix/skip-archive-still-archiving
Bugfix: Fixes the creation of an archive file, even if noarchive was specified
2022-08-25 06:23:10 -07:00
Michael Shamoon
cce1595c3d Fix CodeQL warnings 2022-08-24 14:24:10 -07:00
Trenton Holmes
67bb140eef Finalizes testing of the delete comment 2022-08-24 14:24:10 -07:00
Trenton Holmes
6d5d308d6c Starts on implementing tests for the new API 2022-08-24 14:24:10 -07:00
Trenton Holmes
d39b4ae8cb Merges the migration branches 2022-08-24 14:24:10 -07:00
Michael Shamoon
0f4b118b61 Basic verification of Comment export & exporter comment tuple fix
From oprhaned commits b1855a4b7a
53f21574fd

Co-Authored-By: Trenton Holmes <797416+stumpylog@users.noreply.github.com>
2022-08-24 14:24:10 -07:00
Michael Shamoon
f5f2240828 Add frontend tests for comments 2022-08-24 14:24:10 -07:00
Mark Stenglein
66593a28f5 docs: scanners: add Brother ads4700w
I've tested Paperless with the ADS-4700W and it works great.

This commit adds the recommendation.
2022-08-24 08:57:45 -07:00
Michael Shamoon
ba1cdd5914 Update messages.xlf 2022-08-23 19:22:30 -07:00
Michael Shamoon
3f536552a6 Move add comment to top of comments list 2022-08-23 19:22:30 -07:00
Michael Shamoon
1d2282df9e Cleanup frontend comment service & other code
[ci skip]
2022-08-23 19:20:08 -07:00
Michael Shamoon
1b56ffd0c0 Rework comment UI
Add error popups, text field validation, move form, move comment header to footer, updated styling
2022-08-23 19:20:08 -07:00
Michael Shamoon
d5018af2a3 python code style 2022-08-23 19:20:08 -07:00
Michael Shamoon
5c1e09cc48 Refactor comment UI code
And run prettier
2022-08-23 19:20:08 -07:00
Michael Shamoon
6d956ac13b fix migration dependency
and run code style
2022-08-23 19:19:21 -07:00
Michael Shamoon
865fbbd15c Missed PAPERLESS_COMMENTS_ENABLED code 2022-08-23 19:19:21 -07:00
shamoon
97cfd0085e Remove faux test file 2022-08-23 19:19:21 -07:00
Michael Shamoon
f20f200c8d Fix comment service method signature
and run prettier over file
2022-08-23 19:19:21 -07:00
Michael Shamoon
78bd424ecb Remove faux testing file 2022-08-23 19:19:21 -07:00
Michael Shamoon
6fa32c36e9 Use frontend settings instead of env variable 2022-08-23 19:19:21 -07:00
tim-vogel
817882ff6f add comment function 2022-08-23 19:19:21 -07:00
tooomm
d1e8299010 typo 2022-08-23 19:18:45 -07:00
dependabot[bot]
42c50c4e0b Bump sphinx from 5.0.2 to 5.1.1
Bumps [sphinx](https://github.com/sphinx-doc/sphinx) from 5.0.2 to 5.1.1.
- [Release notes](https://github.com/sphinx-doc/sphinx/releases)
- [Changelog](https://github.com/sphinx-doc/sphinx/blob/5.x/CHANGES)
- [Commits](https://github.com/sphinx-doc/sphinx/compare/v5.0.2...v5.1.1)

---
updated-dependencies:
- dependency-name: sphinx
  dependency-type: direct:development
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2022-08-22 12:37:59 +00:00
shamoon
c151db6e21 Merge pull request #1446 from paperless-ngx/feature-storage-path-rematch
Feature: Adds storage paths to re-tagger command
2022-08-21 20:07:06 -07:00
shamoon
7844537355 Merge pull request #1440 from GwynHannay/feature-orig-filename-metadata
Feature: Preserve original filename in metadata
2022-08-21 20:05:25 -07:00
Quinn Casey
a414208327 Merge pull request #1445 from paperless-ngx/library-deps-update
Chore: Bump Python dependencies
2022-08-21 18:45:58 -07:00
Trenton Holmes
ab761e837c Implements a better re-do of OCR by making the document archiver function common. Actually creates updated file now 2022-08-21 18:20:59 -07:00
Trenton Holmes
c8e838e3a0 Adds the storage paths to the re-tagger command 2022-08-21 18:01:19 -07:00
Trenton Holmes
9b24cf7591 Also provide the original file name to the post consumption script 2022-08-21 16:16:28 -07:00
Trenton Holmes
5e3cdcdd6e Bumps all library versions which are currently working 2022-08-21 08:34:40 -07:00
Michael Shamoon
baeb2a074a Add original filename to frontend doc detail metadata 2022-08-21 08:06:56 -07:00
Zerteax
a56de4547c Changes to Redis documentation (#1441)
* Added more description in PAPERLESS_REDIS

* More Information on Redis

* Update configuration.rst

* Changed <ip> to <host>

Same as in the Documentation of Redis

* Edited the link

Linking directly to the Securing Redis part
2022-08-21 07:27:45 -07:00
Gwyn Hannay
e3cc5c3013 format code 2022-08-20 14:31:30 -07:00
Gwyn Hannay
4194b248b9 create migration for original filename 2022-08-20 14:30:40 -07:00
Gwyn Hannay
3fcbd8f3ac update files and model to include new field 2022-08-20 14:30:14 -07:00
Trenton Holmes
b3b2519bf0 Fixes the creation of an archive file, even if noarchive was specified 2022-08-20 13:47:56 -07:00
Stefan
fccea022fa adapt test to respect gmail_label keyword 2022-08-20 13:15:38 -07:00
Stefan
d80d5e4e70 fix debug output 2022-08-20 13:15:38 -07:00
Stefan
f1e93eb70a Ignore tagged emails from gmail to avoid duplicated documents. 2022-08-20 13:15:38 -07:00
Stefan
260b709296 add test for gmail account tag handling 2022-08-20 13:15:38 -07:00
Stefan
9bb762fc8f fix mail tests 2022-08-20 13:15:38 -07:00
Stefan
5c49bbfc73 fix formatting 2022-08-20 13:15:38 -07:00
Stefan
edabf208bc Handle tags for gmail email accounts
like mentioned here: https://github.com/ikvk/imap_tools/issues/174
2022-08-20 13:15:38 -07:00
Quinn Casey
0878a199f4 Merge pull request #1436 from tribut/redis-image
Update redis image
2022-08-18 08:03:19 -07:00
Felix Eckhofer
eec1f03f86 Use redis image tag :7 2022-08-18 11:47:47 +02:00
Quinn Casey
a4c4b81297 Manually link authors only in docs/changelog.md 2022-08-17 08:30:40 -07:00
Felix E
a5f9c8f651 Merge pull request #1430 from glassbox-sco/patch-1
Update scanners.rst
2022-08-17 08:31:51 +02:00
Quinn Casey
1ec7351842 Minor doc fixes 2022-08-16 19:44:48 -07:00
glassbox-sco
f2cab81aed Update scanners.rst 2022-08-17 00:09:21 +01:00
Dennis Gaida
9cbc74ebb2 remove redis URL from log 2022-08-16 12:41:52 -07:00
Dennis Gaida
3d36d0445c Hide credentials from log 2022-08-16 12:41:52 -07:00
Dennis Gaida
f4fece5550 PAPERLESS_REDIS may be set via docker secrets
Best practice is for redis to be at least password protected: https://redis.io/docs/getting-started/.

Paperless uses `Redis.from_url` (5fe435048b/docker/wait-for-redis.py (L24)) to establish a connection to redis which already enables us to use username/password, e.g. `redis://username:password@redis:6379`.

The redis connection string therefore is a secret and needs to be able to leverage docker secrets, hence this PR.
2022-08-16 12:41:52 -07:00
Quinn Casey
6133f745b7 Merge pull request #1415 from derlucas/main
Update scanners.rst
2022-08-15 06:47:21 -07:00
Quinn Casey
02456b271b Fix incorrect double quote on string 2022-08-15 06:27:08 -07:00
Trenton Holmes
ad1f5ae081 Corrects the timeout's interaction with files waiting to be consumed 2022-08-14 17:47:59 -07:00
Trenton Holmes
86358d5561 Attempts to make production consumer more event driven while still allowing unit testing 2022-08-14 17:47:59 -07:00
shamoon
87953cb98a Merge pull request #1412 from paperless-ngx/fix/created-date-not-required
Fix: `created_date` should not be required
2022-08-14 16:06:48 -07:00
Trenton Holmes
f58e0041ce Resets to a last known working pipenv version 2022-08-14 16:01:22 -07:00
Michael Shamoon
8183de4902 created_date is not supposed to be required 2022-08-14 00:58:31 -07:00
Lucas Pleß
a8c575147b Update scanners.rst
added Brother ADS-4300N. I tested it and can recommend the Device. It scans fast and reliable.
2022-08-13 22:52:17 +02:00
shamoon
09fcc28ded Merge pull request #1397 from paperless-ngx/chore/remove-dependabot-from-projects
Chore: Exclude dependabot PRs from Project, set status to "Needs Review"
2022-08-13 07:27:50 -07:00
Quinn Casey
22fb659b72 Set status of new PRs to "Needs Review" 2022-08-11 10:10:08 -07:00
Quinn Casey
40ae184c4e Exclude dependabot PRs from project 2022-08-11 10:03:37 -07:00
Quinn Casey
18a2a41682 Use fork of release-drafter to exclude prereleases 2022-08-11 09:49:04 -07:00
Quinn Casey
4faff70b5d Merge pull request #1396 from paperless-ngx/chore/add-autolabeler
Chore: Add `autolabeler` to label PRs based on `ref` and title
2022-08-11 09:46:24 -07:00
Quinn Casey
8d3361766d Draft more comprehensive changelog 2022-08-10 17:48:56 -07:00
Quinn Casey
5dd4d0c370 Add documentation as included label 2022-08-10 17:48:56 -07:00
Quinn Casey
a0617c1fad CI: Add autolabeler 2022-08-10 17:19:13 -07:00
Quinn Casey
9e9593b899 Merge pull request #1391 from paperless-ngx/chore-update-deps
Chore: Update Python deps
2022-08-10 09:31:00 -07:00
Trenton Holmes
89b7270233 Updates some deps, skipping scipy 2022-08-10 08:45:49 -07:00
shamoon
3af4808864 Merge pull request #1387 from paperless-ngx/bugfix-task-error-prevents-consume
Bugfix: Catch all exceptions during the task signals
2022-08-10 07:09:29 -07:00
Trenton Holmes
d4c3b7614d Catch all exceptions during the task creation so some error here, but not with a file, will allow consumption to run 2022-08-09 15:50:03 -07:00
Quinn Casey
676ba9ca22 Merge pull request #1376 from paperless-ngx/fix/saved-view-page-param
Fix: saved view page parameter
2022-08-08 10:06:11 -07:00
Michael Shamoon
d0f5cc839f fix navigation to /documents breaks history 2022-08-08 00:05:19 -07:00
Michael Shamoon
110bd65c20 fix pagination, refactor 2022-08-08 00:03:15 -07:00
shamoon
ef0080b0a9 Merge pull request #1369 from paperless-ngx/fix/browser-unsaved-changes
Fix: Correct browser unsaved changes warning
2022-08-07 15:43:10 -07:00
shamoon
a81dc00ccf Merge pull request #1370 from paperless-ngx/fix/date-pasting
Fix: correct date pasting with some non-US formats
2022-08-07 15:42:00 -07:00
Quinn Casey
765fea7f7e Merge pull request #1362 from paperless-ngx/ci-file-health
Chore: use pre-commit in the Ci workflow
2022-08-07 13:33:34 -07:00
Michael Shamoon
a0f48130c0 Fix some date pasting cases 2022-08-07 08:44:39 -07:00
Michael Shamoon
7e2c693c8a Make date suggestions timezone-unaware 2022-08-07 08:37:18 -07:00
Michael Shamoon
7396e4c326 simplify date value format 2022-08-06 21:19:06 -07:00
Michael Shamoon
0175eab031 Fix browser unsaved changes with custom guard 2022-08-06 20:23:05 -07:00
Matthias Eck
3d0a26fdb1 fix(parsers|test_api): fix failed tests 2022-08-06 19:19:10 +02:00
Matthias Eck
c52d18da1f feat(date.component): adding suggestions to frontend 2022-08-06 13:03:20 +02:00
Matthias Eck
e0f341938a docs(configuration.rst): add doc for NUMBER_OF_SUGGESTED_DATES 2022-08-06 13:03:20 +02:00
Matthias Eck
a037e562b2 test(test-date-parsing): test parsing of multiple dates 2022-08-06 13:03:20 +02:00
Matthias Eck
f1084cbdcf feat(settings): add setting to set number of suggested dates 2022-08-06 13:03:20 +02:00
Matthias Eck
f6e4339069 test(test-date-parsing): test parsing of multiple dates 2022-08-06 13:03:20 +02:00
Matthias Eck
a754c6047d test(test-api): update existing tests for suggestions 2022-08-06 13:03:20 +02:00
Matthias Eck
a5d2ae2588 feat(parsers): add generator for date parsing 2022-08-06 13:03:20 +02:00
Michael Shamoon
a6f3378c21 Handle page parameter on saved views 2022-08-05 23:35:13 -07:00
Quinn Casey
ca75fb5664 Merge pull request #1358 from paperless-ngx/bugfix-ip-bind-addr
Bugfix: Allow webserver bind address to be configured
2022-08-04 12:35:28 -07:00
Trenton Holmes
32861ad592 Removes no longer needed files 2022-08-04 11:11:49 -07:00
Trenton Holmes
ada8516803 Allows the webserver binding address to be configured via the environment 2022-08-04 07:43:23 -07:00
Trenton Holmes
d5c27a95aa Fixes minor linting 2022-08-03 13:26:04 -07:00
Trenton Holmes
6b8a21d2b0 Test pre-commit action 2022-08-03 13:20:02 -07:00
Trenton Holmes
cb7e6f8cd0 Adds a pull of all images for the main image after the pruning 2022-08-03 10:19:15 -07:00
Trenton Holmes
f48a2cb65e Fixes the untagged image deletion so it will not remove images which are referred to by a multi-arch manifest image 2022-08-03 10:19:15 -07:00
Trenton Holmes
0fdd3d56f4 Changes the cleanup images workflow so it uses a OAuth token with the correct scope (GITHUB_TOKEN is not enough). Also prevents running if the token is not defined and generally does commenting/cleanups" 2022-08-03 10:19:15 -07:00
Quinn Casey
173934258c Merge pull request #1354 from paperless-ngx/bugfix-exception-chains
Bugfix: Chain exceptions during exception handling
2022-08-03 09:59:26 -07:00
Trenton Holmes
b70e21a6d5 When raising an exception during exception handling, chain them together for slightly cleaner logs 2022-08-03 09:00:56 -07:00
shamoon
cafb884991 Merge pull request #1352 from tooomm/patch-1
docs: fix small typo
2022-08-03 06:42:13 -07:00
tooomm
94b09614d9 typo 2022-08-03 15:00:23 +02:00
shamoon
7488505e37 Update dev version string
[ci skip]
2022-08-02 13:28:29 -07:00
Trenton Holmes
641ff9a71d Revert "Bump watchfiles from 0.15.0 to 0.16.1"
This reverts commit b596502f74.
2022-08-02 11:25:01 -07:00
dependabot[bot]
b596502f74 Bump watchfiles from 0.15.0 to 0.16.1
Bumps [watchfiles](https://github.com/samuelcolvin/watchfiles) from 0.15.0 to 0.16.1.
- [Release notes](https://github.com/samuelcolvin/watchfiles/releases)
- [Commits](https://github.com/samuelcolvin/watchfiles/compare/v0.15.0...v0.16.1)

---
updated-dependencies:
- dependency-name: watchfiles
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2022-08-02 08:46:02 -07:00
dependabot[bot]
4fbd760005 Bump leonsteinhaeuser/project-beta-automations from 1.2.1 to 1.3.0
Bumps [leonsteinhaeuser/project-beta-automations](https://github.com/leonsteinhaeuser/project-beta-automations) from 1.2.1 to 1.3.0.
- [Release notes](https://github.com/leonsteinhaeuser/project-beta-automations/releases)
- [Commits](https://github.com/leonsteinhaeuser/project-beta-automations/compare/v1.2.1...v1.3.0)

---
updated-dependencies:
- dependency-name: leonsteinhaeuser/project-beta-automations
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2022-08-02 08:10:45 -07:00
dependabot[bot]
6a5ac15b07 Bump tj-actions/changed-files from 23.1 to 24
Bumps [tj-actions/changed-files](https://github.com/tj-actions/changed-files) from 23.1 to 24.
- [Release notes](https://github.com/tj-actions/changed-files/releases)
- [Changelog](https://github.com/tj-actions/changed-files/blob/main/HISTORY.md)
- [Commits](https://github.com/tj-actions/changed-files/compare/v23.1...v24)

---
updated-dependencies:
- dependency-name: tj-actions/changed-files
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
2022-08-02 07:55:28 -07:00
shamoon
57b419fa87 Merge pull request #1342 from paperless-ngx/dependabot/npm_and_yarn/src-ui/dev/cypress-10.3.1
Bump cypress from 10.3.0 to 10.3.1 in /src-ui
2022-08-01 15:49:45 -07:00
shamoon
52ce54930b Merge pull request #1343 from paperless-ngx/dependabot/npm_and_yarn/src-ui/dev/ngx-color-8.0.1
Bump ngx-color from 7.3.3 to 8.0.1 in /src-ui
2022-08-01 13:59:15 -07:00
dependabot[bot]
fa9898ebe1 Bump ngx-color from 7.3.3 to 8.0.1 in /src-ui
Bumps [ngx-color](https://github.com/scttcper/ngx-color) from 7.3.3 to 8.0.1.
- [Release notes](https://github.com/scttcper/ngx-color/releases)
- [Commits](https://github.com/scttcper/ngx-color/compare/v7.3.3...v8.0.1)

---
updated-dependencies:
- dependency-name: ngx-color
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
2022-08-01 20:56:48 +00:00
shamoon
de4b3c39b9 Merge pull request #1330 from paperless-ngx/dependabot/npm_and_yarn/src-ui/dev/angular/cli-14.1.0
Bump @angular/cli from 14.0.4 to 14.1.0 in /src-ui
2022-08-01 13:55:41 -07:00
Michael Shamoon
232e358a34 bump all angular packages together 2022-08-01 13:54:09 -07:00
dependabot[bot]
a0d35f9262 Bump @angular/cli from 14.0.4 to 14.1.0 in /src-ui
Bumps [@angular/cli](https://github.com/angular/angular-cli) from 14.0.4 to 14.1.0.
- [Release notes](https://github.com/angular/angular-cli/releases)
- [Changelog](https://github.com/angular/angular-cli/blob/main/CHANGELOG.md)
- [Commits](https://github.com/angular/angular-cli/compare/14.0.4...14.1.0)

---
updated-dependencies:
- dependency-name: "@angular/cli"
  dependency-type: direct:development
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2022-08-01 20:46:55 +00:00
dependabot[bot]
8883ef81dc Bump cypress from 10.3.0 to 10.3.1 in /src-ui
Bumps [cypress](https://github.com/cypress-io/cypress) from 10.3.0 to 10.3.1.
- [Release notes](https://github.com/cypress-io/cypress/releases)
- [Changelog](https://github.com/cypress-io/cypress/blob/develop/.releaserc.base.js)
- [Commits](https://github.com/cypress-io/cypress/compare/v10.3.0...v10.3.1)

---
updated-dependencies:
- dependency-name: cypress
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2022-08-01 20:46:27 +00:00
shamoon
39a425eca4 Merge pull request #1341 from paperless-ngx/dependabot/npm_and_yarn/src-ui/dev/types/node-18.6.3
Bump @types/node from 18.0.0 to 18.6.3 in /src-ui
2022-08-01 13:45:09 -07:00
dependabot[bot]
e31d383cfc Bump @types/node from 18.0.0 to 18.6.3 in /src-ui
Bumps [@types/node](https://github.com/DefinitelyTyped/DefinitelyTyped/tree/HEAD/types/node) from 18.0.0 to 18.6.3.
- [Release notes](https://github.com/DefinitelyTyped/DefinitelyTyped/releases)
- [Commits](https://github.com/DefinitelyTyped/DefinitelyTyped/commits/HEAD/types/node)

---
updated-dependencies:
- dependency-name: "@types/node"
  dependency-type: direct:development
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2022-08-01 20:44:37 +00:00
shamoon
cb104b60f4 Merge pull request #1340 from paperless-ngx/dependabot/npm_and_yarn/src-ui/dev/jest-preset-angular-12.2.0
Bump jest-preset-angular from 12.1.0 to 12.2.0 in /src-ui
2022-08-01 13:43:47 -07:00
dependabot[bot]
b88963c900 Bump jest-preset-angular from 12.1.0 to 12.2.0 in /src-ui
Bumps [jest-preset-angular](https://github.com/thymikee/jest-preset-angular) from 12.1.0 to 12.2.0.
- [Release notes](https://github.com/thymikee/jest-preset-angular/releases)
- [Changelog](https://github.com/thymikee/jest-preset-angular/blob/main/CHANGELOG.md)
- [Commits](https://github.com/thymikee/jest-preset-angular/compare/v12.1.0...v12.2.0)

---
updated-dependencies:
- dependency-name: jest-preset-angular
  dependency-type: direct:development
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2022-08-01 20:39:58 +00:00
shamoon
3597abbcd7 Merge pull request #1326 from paperless-ngx/dependabot/npm_and_yarn/src-ui/dev/concurrently-7.3.0
Bump concurrently from 7.2.2 to 7.3.0 in /src-ui
2022-08-01 13:38:44 -07:00
dependabot[bot]
0f780b6271 Bump concurrently from 7.2.2 to 7.3.0 in /src-ui
Bumps [concurrently](https://github.com/open-cli-tools/concurrently) from 7.2.2 to 7.3.0.
- [Release notes](https://github.com/open-cli-tools/concurrently/releases)
- [Commits](https://github.com/open-cli-tools/concurrently/compare/v7.2.2...v7.3.0)

---
updated-dependencies:
- dependency-name: concurrently
  dependency-type: direct:development
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2022-08-01 20:38:16 +00:00
shamoon
f1ce4e1f5b Merge pull request #1337 from paperless-ngx/dependabot/npm_and_yarn/src-ui/dev/ng2-pdf-viewer-9.1.0
Bump ng2-pdf-viewer from 9.0.0 to 9.1.0 in /src-ui
2022-08-01 13:38:11 -07:00
dependabot[bot]
5d0d800c0a Bump ng2-pdf-viewer from 9.0.0 to 9.1.0 in /src-ui
Bumps [ng2-pdf-viewer](https://github.com/VadimDez/ng2-pdf-viewer) from 9.0.0 to 9.1.0.
- [Release notes](https://github.com/VadimDez/ng2-pdf-viewer/releases)
- [Changelog](https://github.com/VadimDez/ng2-pdf-viewer/blob/master/CHANGELOG.md)
- [Commits](https://github.com/VadimDez/ng2-pdf-viewer/compare/9.0.0...9.1.0)

---
updated-dependencies:
- dependency-name: ng2-pdf-viewer
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2022-08-01 20:37:34 +00:00
shamoon
3b330ef22f Merge pull request #1336 from paperless-ngx/dependabot/npm_and_yarn/src-ui/dev/jest-environment-jsdom-28.1.3
Bump jest-environment-jsdom from 28.1.2 to 28.1.3 in /src-ui
2022-08-01 13:36:22 -07:00
dependabot[bot]
873bb4fd2d Bump jest-environment-jsdom from 28.1.2 to 28.1.3 in /src-ui
Bumps [jest-environment-jsdom](https://github.com/facebook/jest/tree/HEAD/packages/jest-environment-jsdom) from 28.1.2 to 28.1.3.
- [Release notes](https://github.com/facebook/jest/releases)
- [Changelog](https://github.com/facebook/jest/blob/main/CHANGELOG.md)
- [Commits](https://github.com/facebook/jest/commits/v28.1.3/packages/jest-environment-jsdom)

---
updated-dependencies:
- dependency-name: jest-environment-jsdom
  dependency-type: direct:development
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2022-08-01 20:35:56 +00:00
shamoon
3973df64ba Merge pull request #1331 from paperless-ngx/dependabot/npm_and_yarn/src-ui/dev/ngx-file-drop-14.0.1
Bump ngx-file-drop from 13.0.0 to 14.0.1 in /src-ui
2022-08-01 13:35:04 -07:00
shamoon
8cda62ae92 Merge pull request #1333 from paperless-ngx/dependabot/npm_and_yarn/src-ui/dev/jest-and-types/jest-28.1.3
Bump jest and @types/jest in /src-ui
2022-08-01 13:29:31 -07:00
dependabot[bot]
b8e1a49f85 Bump jest and @types/jest in /src-ui
Bumps [jest](https://github.com/facebook/jest/tree/HEAD/packages/jest) and [@types/jest](https://github.com/DefinitelyTyped/DefinitelyTyped/tree/HEAD/types/jest). These dependencies needed to be updated together.

Updates `jest` from 28.1.2 to 28.1.3
- [Release notes](https://github.com/facebook/jest/releases)
- [Changelog](https://github.com/facebook/jest/blob/main/CHANGELOG.md)
- [Commits](https://github.com/facebook/jest/commits/v28.1.3/packages/jest)

Updates `@types/jest` from 28.1.4 to 28.1.6
- [Release notes](https://github.com/DefinitelyTyped/DefinitelyTyped/releases)
- [Commits](https://github.com/DefinitelyTyped/DefinitelyTyped/commits/HEAD/types/jest)

---
updated-dependencies:
- dependency-name: jest
  dependency-type: direct:development
  update-type: version-update:semver-patch
- dependency-name: "@types/jest"
  dependency-type: direct:development
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2022-08-01 20:25:09 +00:00
shamoon
f9147b5405 Merge pull request #1327 from paperless-ngx/dependabot/npm_and_yarn/src-ui/dev/bootstrap-5.2.0
Bump bootstrap from 5.1.3 to 5.2.0 in /src-ui
2022-08-01 13:21:46 -07:00
dependabot[bot]
878f727a2c Bump ngx-file-drop from 13.0.0 to 14.0.1 in /src-ui
Bumps [ngx-file-drop](https://github.com/georgipeltekov/ngx-file-drop) from 13.0.0 to 14.0.1.
- [Release notes](https://github.com/georgipeltekov/ngx-file-drop/releases)
- [Changelog](https://github.com/georgipeltekov/ngx-file-drop/blob/master/CHANGELOG.md)
- [Commits](https://github.com/georgipeltekov/ngx-file-drop/compare/v13.0.0...v14.0.1)

---
updated-dependencies:
- dependency-name: ngx-file-drop
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
2022-08-01 20:19:33 +00:00
shamoon
0169ee4885 Merge pull request #1324 from paperless-ngx/dependabot/npm_and_yarn/src-ui/dev/typescript-4.7.4
Bump typescript from 4.6.4 to 4.7.4 in /src-ui
2022-08-01 13:18:12 -07:00
dependabot[bot]
904faf27c2 Bump typescript from 4.6.4 to 4.7.4 in /src-ui
Bumps [typescript](https://github.com/Microsoft/TypeScript) from 4.6.4 to 4.7.4.
- [Release notes](https://github.com/Microsoft/TypeScript/releases)
- [Commits](https://github.com/Microsoft/TypeScript/compare/v4.6.4...v4.7.4)

---
updated-dependencies:
- dependency-name: typescript
  dependency-type: direct:development
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2022-08-01 20:15:13 +00:00
shamoon
d2a38fe05c Merge pull request #1325 from paperless-ngx/dependabot/npm_and_yarn/src-ui/dev/ts-node-10.9.1
Bump ts-node from 10.8.1 to 10.9.1 in /src-ui
2022-08-01 13:13:49 -07:00
shamoon
9a5d06239f Merge pull request #1323 from paperless-ngx/dependabot/npm_and_yarn/src-ui/dev/rxjs-7.5.6
Bump rxjs from 7.5.5 to 7.5.6 in /src-ui
2022-08-01 13:12:06 -07:00
dependabot[bot]
a1fad471a9 Bump bootstrap from 5.1.3 to 5.2.0 in /src-ui
Bumps [bootstrap](https://github.com/twbs/bootstrap) from 5.1.3 to 5.2.0.
- [Release notes](https://github.com/twbs/bootstrap/releases)
- [Commits](https://github.com/twbs/bootstrap/compare/v5.1.3...v5.2.0)

---
updated-dependencies:
- dependency-name: bootstrap
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2022-08-01 20:09:16 +00:00
dependabot[bot]
57a97365b6 Bump ts-node from 10.8.1 to 10.9.1 in /src-ui
Bumps [ts-node](https://github.com/TypeStrong/ts-node) from 10.8.1 to 10.9.1.
- [Release notes](https://github.com/TypeStrong/ts-node/releases)
- [Commits](https://github.com/TypeStrong/ts-node/compare/v10.8.1...v10.9.1)

---
updated-dependencies:
- dependency-name: ts-node
  dependency-type: direct:development
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2022-08-01 20:08:43 +00:00
dependabot[bot]
cce36906b1 Bump rxjs from 7.5.5 to 7.5.6 in /src-ui
Bumps [rxjs](https://github.com/reactivex/rxjs) from 7.5.5 to 7.5.6.
- [Release notes](https://github.com/reactivex/rxjs/releases)
- [Changelog](https://github.com/ReactiveX/rxjs/blob/master/CHANGELOG.md)
- [Commits](https://github.com/reactivex/rxjs/compare/7.5.5...7.5.6)

---
updated-dependencies:
- dependency-name: rxjs
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2022-08-01 20:08:06 +00:00
Nico Fricke
36158609f0 change default matching algo to auto and move to constant 2022-08-01 09:22:13 +02:00
Quinn Casey
da99ba114b Merge pull request #1305 from paperless-ngx/fix/1299+1300
Fix: missing tooltip translation & filter editor wrapping
2022-07-31 20:40:48 -07:00
Michael Shamoon
9a66bd3c34 Better filter editor wrapping across display sizes
Closes #1299
2022-07-31 20:25:21 -07:00
Quinn Casey
0d23b33c0e Merge pull request #1316 from paperless-ngx/feature-docker-pipenv
Feature: Remove requirements.txt and use pipenv everywhere
2022-07-31 18:46:59 -07:00
Trenton Holmes
e721092c2a Changes the Dockerfile to use pipenv and the releases to use pipenv, removing the need for a requirements.txt 2022-07-30 13:41:08 -07:00
Quinn Casey
8c7afc5646 Merge branch 'main' into dev 2022-07-30 08:41:36 -07:00
Michael Shamoon
7752d83781 Fix "suggest an idea" not using translation
Closes #1300
2022-07-29 14:48:11 -07:00
Quinn Casey
4b45e94beb Merge pull request #1303 from paperless-ngx/bugfix-barcode-and-dirs
Bugfix: Interaction between barcode and directories as tags
2022-07-29 12:25:40 -07:00
Trenton Holmes
2a4ec13c8e Fixes issue where barcode containing files wouldn't be placed into the same directory after splitting 2022-07-29 10:22:54 -07:00
Michael Shamoon
20671c718e Run prettier over changelog.md
[ci skip]
2022-07-28 20:00:59 -07:00
github-actions[bot]
e73db49ed0 [Documentation] Add v1.8.0 changelog (#1298)
* Changelog  - GHA

* Update changelog.md

Co-authored-by: github-actions <41898282+github-actions[bot]@users.noreply.github.com>
Co-authored-by: shamoon <4887959+shamoon@users.noreply.github.com>
2022-07-28 19:52:13 -07:00
Michael Shamoon
0553824df2 Revert "Update changelog.md"
This reverts commit 3a031084f3.
2022-07-28 15:41:39 -07:00
Michael Shamoon
71bc2c5944 Add -dev to version string 2022-07-28 15:36:55 -07:00
Michael Shamoon
05feadbb7a Squashed commit of the following:
commit a4709b1175
Author: Michael Shamoon <4887959+shamoon@users.noreply.github.com>
Date:   Thu Jul 28 15:36:13 2022 -0700

    Update stale.yml

    [skip ci]

commit 3a031084f3
Author: Michael Shamoon <4887959+shamoon@users.noreply.github.com>
Date:   Thu Jul 28 15:24:23 2022 -0700

    Update changelog.md

commit 0c517e5351
Author: Michael Shamoon <4887959+shamoon@users.noreply.github.com>
Date:   Thu Jul 28 15:18:49 2022 -0700

    v1.8.0 version strings

commit 5fe435048b
Merge: 278cedf3 a722bfd0
Author: shamoon <4887959+shamoon@users.noreply.github.com>
Date:   Thu Jul 28 15:17:30 2022 -0700

    Merge pull request #1240 from paperless-ngx/beta

    [Beta] Paperless-ngx v1.8.0 Release Candidate 1

commit a722bfd099
Author: Paperless-ngx Translation Bot [bot] <99855517+paperless-l10n@users.noreply.github.com>
Date:   Thu Jul 28 07:46:12 2022 -0700

    New Crowdin updates (#1291)

    * New translations django.po (French)
    [ci skip]

    * New translations messages.xlf (French)
    [ci skip]

    * New translations django.po (French)
    [ci skip]

    * New translations messages.xlf (French)
    [ci skip]

    * New translations messages.xlf (Turkish)
    [ci skip]

    * New translations django.po (Turkish)
    [ci skip]

commit f3d99a5fdb
Merge: ca334770 79de0989
Author: shamoon <4887959+shamoon@users.noreply.github.com>
Date:   Tue Jul 26 11:21:42 2022 -0700

    Merge pull request #1277 from paperless-ngx/fix/redo-ocr-button-on-edit

    Fix/feature: add redo ocr button to document edit view

commit 79de0989d5
Author: Michael Shamoon <4887959+shamoon@users.noreply.github.com>
Date:   Tue Jul 26 09:54:05 2022 -0700

    fix button icon spacing on mobile

commit ca334770b7
Author: Paperless-ngx Translation Bot [bot] <99855517+paperless-l10n@users.noreply.github.com>
Date:   Tue Jul 26 09:45:21 2022 -0700

    New Crowdin updates (#1242)

    * New translations messages.xlf (Turkish)
    [ci skip]

    * New translations messages.xlf (German)
    [ci skip]

    * New translations django.po (German)
    [ci skip]

    * New translations messages.xlf (Italian)
    [ci skip]

    * New translations messages.xlf (Italian)
    [ci skip]

    * New translations messages.xlf (Finnish)
    [ci skip]

    * New translations messages.xlf (Finnish)
    [ci skip]

commit 1071357505
Merge: f32dfe02 ef790ca6
Author: shamoon <4887959+shamoon@users.noreply.github.com>
Date:   Tue Jul 26 09:44:42 2022 -0700

    Merge pull request #1268 from paperless-ngx/bugfix-db-locked

    Bugfix: Adds configuration for database timeout, fixing database locked error

commit f32dfe0278
Merge: 611707a3 4e78ca5d
Author: shamoon <4887959+shamoon@users.noreply.github.com>
Date:   Mon Jul 25 12:59:31 2022 -0700

    Merge pull request #1261 from paperless-ngx/fix/b1.8.0-ng-select-dropdowns

    Fix: dropdown selected items not visible again

commit 278cedf3d0
Merge: b141671d ecc4553e
Author: shamoon <4887959+shamoon@users.noreply.github.com>
Date:   Mon Jul 25 09:25:52 2022 -0700

    Merge pull request #1272 from paperless-ngx/fix-1263

    Documentation: fix occasional code block color legibility

commit 45a6b5a436
Author: Michael Shamoon <4887959+shamoon@users.noreply.github.com>
Date:   Sun Jul 24 20:15:26 2022 -0700

    Add redo OCR button to document edit

commit 611707a3d1
Merge: 2d88638d b4d20d9b
Author: shamoon <4887959+shamoon@users.noreply.github.com>
Date:   Sun Jul 24 19:59:30 2022 -0700

    Merge pull request #1276 from paperless-ngx/bugfix-webp-import

    Bugfix: Document import doesn't convert thumbnails to WebP

commit b4d20d9b9a
Author: Trenton Holmes <holmes.trenton@gmail.com>
Date:   Sun Jul 24 10:22:53 2022 -0700

    Fixes document import copying PNG files to .webp extensions without actual conversion

commit ecc4553e67
Author: Michael Shamoon <4887959+shamoon@users.noreply.github.com>
Date:   Fri Jul 22 15:10:33 2022 -0700

    fix occasional code block color legibility

commit ef790ca6f4
Author: Trenton Holmes <holmes.trenton@gmail.com>
Date:   Fri Jul 22 11:08:52 2022 -0700

    Fixes the copy and paste of the log line

commit 2d88638da7
Merge: 0e2e5f34 91ba0bd0
Author: shamoon <4887959+shamoon@users.noreply.github.com>
Date:   Fri Jul 22 10:45:53 2022 -0700

    Merge pull request #1269 from paperless-ngx/beta-deps-final

    Chore: Locks dependencies to the final versions for the beta

commit 91ba0bd0af
Author: Trenton Holmes <holmes.trenton@gmail.com>
Date:   Fri Jul 22 08:53:02 2022 -0700

    Locks dependencies to the final versions for the beta

commit 0e2e5f3413
Author: Trenton Holmes <holmes.trenton@gmail.com>
Date:   Tue Jul 19 13:57:00 2022 -0700

    Creates utiliy to ensure all paths in settings are normalized and absolute

commit 7a99dcf693
Author: Trenton Holmes <holmes.trenton@gmail.com>
Date:   Thu Jul 21 08:02:11 2022 -0700

    Adds configuration for database timeout, documentation and troubleshotting suggestion

commit 4e78ca5d82
Author: Michael Shamoon <4887959+shamoon@users.noreply.github.com>
Date:   Wed Jul 20 11:15:35 2022 -0700

    remove merge error ng-select css

commit 83de38e56f
Merge: f4be2e4f b1b6d50a
Author: shamoon <4887959+shamoon@users.noreply.github.com>
Date:   Wed Jul 20 08:26:12 2022 -0700

    Merge pull request #1247 from paperless-ngx/bugfix-pikepdf-ocrmypdf-warnings

    Bugfix: Adds pngquant and jbig2dec to Docker image

commit f4be2e4fe7
Merge: 4444925d 16b0f7f9
Author: Quinn Casey <quinn@quinncasey.com>
Date:   Tue Jul 19 21:03:16 2022 -0700

    Merge pull request #1259 from paperless-ngx/chore-add-ci-hadolint

    Chore: Add Hadolint job to CI

commit 16b0f7f9ee
Author: Trenton Holmes <holmes.trenton@gmail.com>
Date:   Tue Jul 19 14:18:47 2022 -0700

    Removes a Dockerfile I can't find referenced anywhere

commit 27721aef71
Author: Trenton Holmes <holmes.trenton@gmail.com>
Date:   Tue Jul 19 14:01:47 2022 -0700

    Fixes and updates the Hadolint action version

commit 329a317fdf
Author: Trenton Holmes <holmes.trenton@gmail.com>
Date:   Tue Jul 19 13:54:33 2022 -0700

    Configure Hadolint in a single location for both hooks and CI

commit daad634894
Author: Trenton Holmes <holmes.trenton@gmail.com>
Date:   Fri Jul 15 13:45:23 2022 -0700

    Adds a CI job for hadolint over all the Dockerfiles, fixes the minor thing it complained about

commit 4444925dea
Merge: 4c697ab5 9c1ae96d
Author: shamoon <4887959+shamoon@users.noreply.github.com>
Date:   Mon Jul 18 15:55:29 2022 -0700

    Merge pull request #1249 from paperless-ngx/fix-generated-changelog

    [CI] Fix automatic changelog generation on release

commit 9c1ae96d33
Author: Quinn Casey <quinn@quinncasey.com>
Date:   Mon Jul 18 09:48:03 2022 -0700

    Create PR for changelog instead of direct commit

commit b1b6d50af6
Author: Trenton Holmes <holmes.trenton@gmail.com>
Date:   Mon Jul 18 09:46:31 2022 -0700

    Adds a couple packages to the Docker image for ocrmypdf and pikepdf

commit 4c697ab50e
Author: Quinn Casey <quinn@quinncasey.com>
Date:   Sun Jul 17 15:23:28 2022 -0700

    Bump version to beta

commit b141671d90
Merge: 48dfbbeb 2ab2d912
Author: Quinn Casey <quinn@quinncasey.com>
Date:   Sun Jul 17 13:18:57 2022 -0700

    Merge pull request #1237 from tooomm/patch-1

    chore: Run stale bot only on certain labels

commit 2ab2d9127d
Author: shamoon <4887959+shamoon@users.noreply.github.com>
Date:   Fri Jul 15 20:19:28 2022 -0700

    Use cant-reproduce for stale

commit 278453451e
Author: tooomm <tooomm@users.noreply.github.com>
Date:   Fri Jul 15 21:18:38 2022 +0200

    only run on certain labels

commit 48dfbbebc6
Merge: 8efb97ef e568b300
Author: shamoon <4887959+shamoon@users.noreply.github.com>
Date:   Sun Jul 3 07:42:20 2022 -0700

    Merge pull request #1110 from paperless-ngx/update-issue-form

commit 8efb97ef4e
Author: shamoon <4887959+shamoon@users.noreply.github.com>
Date:   Sat Jul 2 19:06:32 2022 -0700

    Update stale.yml

    [ci skip]

commit d8cda7fc1b
Author: shamoon <4887959+shamoon@users.noreply.github.com>
Date:   Sat Jul 2 17:51:39 2022 -0700

    Use any-of-labels for stalebot

    [ci skip]

commit 68f0cf419b
Merge: 666b9385 26b12512
Author: Felix E <felix@eckhofer.com>
Date:   Mon Jun 20 14:25:59 2022 +0200

    Merge pull request #1148 from pReya/patch-1

    fix: update scanner capability

commit 26b12512b1
Author: Moritz Stückler <moritz.stueckler@gmail.com>
Date:   Mon Jun 20 12:06:54 2022 +0200

    fix: update scanner capability

    The Brother ADS-A1700W does indeed support SFTP. I've just bought it, and set it up like this.

commit e568b3000e
Author: shamoon <4887959+shamoon@users.noreply.github.com>
Date:   Tue Jun 7 15:28:49 2022 -0700

    Add lsio to issue form

commit 666b938550
Merge: de5eaf1c 163231d3
Author: Quinn Casey <quinn@quinncasey.com>
Date:   Thu May 19 17:23:23 2022 -0700

    Merge pull request #990 from tooomm/patch-2

    Docs: Fix headings and add links to PRs in changelog

commit 163231d307
Author: tooomm <tooomm@users.noreply.github.com>
Date:   Thu May 19 23:12:40 2022 +0200

    Link issues, capitalization and minor fixes

commit e530750fc6
Author: tooomm <tooomm@users.noreply.github.com>
Date:   Thu May 19 22:05:43 2022 +0200

    update heading levels for v1.7.0
2022-07-28 15:36:24 -07:00
Michael Shamoon
a4709b1175 Update stale.yml
[skip ci]
2022-07-28 15:36:13 -07:00
Michael Shamoon
3a031084f3 Update changelog.md 2022-07-28 15:24:23 -07:00
Michael Shamoon
0c517e5351 v1.8.0 version strings 2022-07-28 15:18:49 -07:00
shamoon
5fe435048b Merge pull request #1240 from paperless-ngx/beta
[Beta] Paperless-ngx v1.8.0 Release Candidate 1
2022-07-28 15:17:30 -07:00
Paperless-ngx Translation Bot [bot]
a722bfd099 New Crowdin updates (#1291)
* New translations django.po (French)
[ci skip]

* New translations messages.xlf (French)
[ci skip]

* New translations django.po (French)
[ci skip]

* New translations messages.xlf (French)
[ci skip]

* New translations messages.xlf (Turkish)
[ci skip]

* New translations django.po (Turkish)
[ci skip]
2022-07-28 07:46:12 -07:00
shamoon
f3d99a5fdb Merge pull request #1277 from paperless-ngx/fix/redo-ocr-button-on-edit
Fix/feature: add redo ocr button to document edit view
2022-07-26 11:21:42 -07:00
Michael Shamoon
79de0989d5 fix button icon spacing on mobile 2022-07-26 09:54:05 -07:00
Paperless-ngx Translation Bot [bot]
ca334770b7 New Crowdin updates (#1242)
* New translations messages.xlf (Turkish)
[ci skip]

* New translations messages.xlf (German)
[ci skip]

* New translations django.po (German)
[ci skip]

* New translations messages.xlf (Italian)
[ci skip]

* New translations messages.xlf (Italian)
[ci skip]

* New translations messages.xlf (Finnish)
[ci skip]

* New translations messages.xlf (Finnish)
[ci skip]
2022-07-26 09:45:21 -07:00
shamoon
1071357505 Merge pull request #1268 from paperless-ngx/bugfix-db-locked
Bugfix: Adds configuration for database timeout, fixing database locked error
2022-07-26 09:44:42 -07:00
shamoon
f32dfe0278 Merge pull request #1261 from paperless-ngx/fix/b1.8.0-ng-select-dropdowns
Fix: dropdown selected items not visible again
2022-07-25 12:59:31 -07:00
shamoon
278cedf3d0 Merge pull request #1272 from paperless-ngx/fix-1263
Documentation: fix occasional code block color legibility
2022-07-25 09:25:52 -07:00
Michael Shamoon
45a6b5a436 Add redo OCR button to document edit 2022-07-24 20:15:26 -07:00
shamoon
611707a3d1 Merge pull request #1276 from paperless-ngx/bugfix-webp-import
Bugfix: Document import doesn't convert thumbnails to WebP
2022-07-24 19:59:30 -07:00
Trenton Holmes
b4d20d9b9a Fixes document import copying PNG files to .webp extensions without actual conversion 2022-07-24 10:22:53 -07:00
Michael Shamoon
ecc4553e67 fix occasional code block color legibility 2022-07-22 15:12:18 -07:00
Trenton Holmes
ef790ca6f4 Fixes the copy and paste of the log line 2022-07-22 11:08:52 -07:00
shamoon
2d88638da7 Merge pull request #1269 from paperless-ngx/beta-deps-final
Chore: Locks dependencies to the final versions for the beta
2022-07-22 10:45:53 -07:00
Trenton Holmes
91ba0bd0af Locks dependencies to the final versions for the beta 2022-07-22 08:53:02 -07:00
Trenton Holmes
0e2e5f3413 Creates utiliy to ensure all paths in settings are normalized and absolute 2022-07-22 08:48:17 -07:00
Trenton Holmes
7a99dcf693 Adds configuration for database timeout, documentation and troubleshotting suggestion 2022-07-22 08:40:08 -07:00
Michael Shamoon
4e78ca5d82 remove merge error ng-select css 2022-07-20 11:15:35 -07:00
shamoon
83de38e56f Merge pull request #1247 from paperless-ngx/bugfix-pikepdf-ocrmypdf-warnings
Bugfix: Adds pngquant and jbig2dec to Docker image
2022-07-20 08:26:12 -07:00
Quinn Casey
f4be2e4fe7 Merge pull request #1259 from paperless-ngx/chore-add-ci-hadolint
Chore: Add Hadolint job to CI
2022-07-19 21:03:16 -07:00
Trenton Holmes
16b0f7f9ee Removes a Dockerfile I can't find referenced anywhere 2022-07-19 14:18:47 -07:00
Trenton Holmes
27721aef71 Fixes and updates the Hadolint action version 2022-07-19 14:01:47 -07:00
Trenton Holmes
329a317fdf Configure Hadolint in a single location for both hooks and CI 2022-07-19 13:54:33 -07:00
Trenton Holmes
daad634894 Adds a CI job for hadolint over all the Dockerfiles, fixes the minor thing it complained about 2022-07-19 13:50:15 -07:00
shamoon
4444925dea Merge pull request #1249 from paperless-ngx/fix-generated-changelog
[CI] Fix automatic changelog generation on release
2022-07-18 15:55:29 -07:00
Quinn Casey
9c1ae96d33 Create PR for changelog instead of direct commit 2022-07-18 09:48:03 -07:00
Trenton Holmes
b1b6d50af6 Adds a couple packages to the Docker image for ocrmypdf and pikepdf 2022-07-18 09:46:31 -07:00
Quinn Casey
4c697ab50e Bump version to beta 2022-07-17 15:23:28 -07:00
Paperless-ngx Translation Bot [bot]
7450088674 New Crowdin updates (#1238)
* New translations messages.xlf (German)
[ci skip]

* New translations messages.xlf (German)
[ci skip]

* New translations messages.xlf (German)
[ci skip]
2022-07-17 15:22:35 -07:00
Quinn Casey
b141671d90 Merge pull request #1237 from tooomm/patch-1
chore: Run stale bot only on certain labels
2022-07-17 13:18:57 -07:00
shamoon
2ab2d9127d Use cant-reproduce for stale 2022-07-15 20:19:28 -07:00
tooomm
278453451e only run on certain labels 2022-07-15 21:18:38 +02:00
Paperless-ngx Translation Bot [bot]
91ee7972d2 New Crowdin updates (#1235)
* New translations messages.xlf (Chinese Simplified)
[ci skip]

* New translations django.po (Chinese Simplified)
[ci skip]
2022-07-15 08:41:29 -07:00
shamoon
d1f59a6590 Merge pull request #1212 from theEndBeta/feature_rootless_and_container_repo
Enable rootless container w/ CI tweaks/bugfixes
2022-07-15 08:41:09 -07:00
Aidan Stein
cdecf8904e move supervisord call into wrapper script 2022-07-15 11:00:46 -04:00
Aidan Stein
3d16266c69 pr comment - documentation edits 2022-07-15 11:00:46 -04:00
Aidan Stein
191676b011 switch from bind mount to COPY to avoid requiring host directory relabeling on selinux enabled systems 2022-07-15 11:00:46 -04:00
Aidan Stein
ea07b261ad negate second gosu command when running as paperless user 2022-07-15 11:00:46 -04:00
Aidan Stein
e86f737320 pr comment(s) - CI typos 2022-07-15 11:00:46 -04:00
Aidan Stein
9a8562c624 add instructions for rootless 2022-07-15 11:00:46 -04:00
Aidan Stein
145c41f462 container repository name must be lowercase 2022-07-15 11:00:45 -04:00
Aidan Stein
1d38367e79 allow podman build 2022-07-15 10:58:41 -04:00
Aidan Stein
f58c2d0a7b allow rootless (as paperless user) 2022-07-15 10:58:41 -04:00
Paperless-ngx Translation Bot [bot]
ca7a6fe1f1 New Crowdin updates (#1234)
* New translations messages.xlf (Spanish)
[ci skip]

* New translations messages.xlf (Spanish)
[ci skip]
2022-07-14 19:37:51 -07:00
shamoon
95042f73c7 Merge pull request #1154 from ziprandom/feature-use-env-vars-in-pre-post-scripts
Feature use env vars in pre post scripts
2022-07-14 19:37:19 -07:00
Trenton Holmes
678bcb171a Re-adds the script arguments 2022-07-14 08:50:00 -07:00
shamoon
8da7e505c0 Merge pull request #1227 from paperless-ngx/feature-reduce-worker-counts
Chore: Reduces webserver and task worker count to 1 by default
2022-07-12 09:56:21 -07:00
Trenton Holmes
72ce4405d5 Updates all dependencies and re-generates the lock files 2022-07-11 23:29:46 +02:00
Paperless-ngx Translation Bot [bot]
d8e3d91a79 New Crowdin updates (#1214)
* New translations django.po (Croatian)
[ci skip]

* New translations django.po (Croatian)
[ci skip]

* New translations messages.xlf (Croatian)
[ci skip]

* New translations messages.xlf (Croatian)
[ci skip]

* New translations messages.xlf (French)
[ci skip]
2022-07-11 14:02:58 -07:00
Trenton Holmes
edaaedae36 Reduces webserver and task worker count to 1 by default 2022-07-11 13:54:04 -07:00
shamoon
da8246d8c3 Merge pull request #1220 from paperless-ngx/bugfix-oserror-msg
Bugfix: Include the actual OSError string when a file can't be opened for consumption
2022-07-11 12:26:08 -07:00
Trenton Holmes
5243ae80b4 Feature: Don't push feature development branches to DockerHub (#1219)
* Don't push to the DockerHub except for certain refs

* Enables deletetion of feature images

* Adds links to the API docs for the end points

* Makes it clear in the logs a dry-run vs actual deletion event
2022-07-11 12:22:43 -07:00
Trenton Holmes
3aca576a0d Includes the actual OSError string in the log, instead of assuming it's a busy file 2022-07-11 11:57:02 -07:00
Paperless-ngx Translation Bot [bot]
0bb9d91eae New Crowdin updates (#1090)
* New translations messages.xlf (Luxembourgish)
[ci skip]

* New translations messages.xlf (Luxembourgish)
[ci skip]

* New translations django.po (Luxembourgish)
[ci skip]

* New translations messages.xlf (German)
[ci skip]

* New translations messages.xlf (German)
[ci skip]

* New translations django.po (German)
[ci skip]

* New translations django.po (German)
[ci skip]

* New translations messages.xlf (German)
[ci skip]

* New translations django.po (German)
[ci skip]

* New translations messages.xlf (German)
[ci skip]

* New translations django.po (Italian)
[ci skip]

* New translations django.po (Finnish)
[ci skip]

* New translations django.po (Hebrew)
[ci skip]

* New translations django.po (Polish)
[ci skip]

* New translations messages.xlf (Polish)
[ci skip]

* New translations django.po (Hebrew)
[ci skip]

* New translations django.po (Hebrew)
[ci skip]

* New translations django.po (Hebrew)
[ci skip]

* New translations django.po (Hebrew)
[ci skip]

* New translations messages.xlf (Hebrew)
[ci skip]

* New translations messages.xlf (Polish)
[ci skip]

* New translations django.po (Spanish)
[ci skip]

* New translations django.po (Spanish)
[ci skip]

* New translations messages.xlf (Spanish)
[ci skip]

* New translations messages.xlf (Finnish)
[ci skip]

* New translations django.po (Norwegian)
[ci skip]

* New translations messages.xlf (Norwegian)
[ci skip]

* New translations messages.xlf (Polish)
[ci skip]

* New translations django.po (Norwegian)
[ci skip]

* New translations django.po (Norwegian)
[ci skip]

* New translations django.po (Norwegian)
[ci skip]

* New translations messages.xlf (Norwegian)
[ci skip]

* New translations django.po (Norwegian)
[ci skip]

* New translations messages.xlf (Norwegian)
[ci skip]

* New translations messages.xlf (Italian)
[ci skip]

* New translations messages.xlf (Spanish)
[ci skip]

* New translations messages.xlf (Finnish)
[ci skip]

* New translations messages.xlf (Norwegian)
[ci skip]

* New translations messages.xlf (Romanian)
[ci skip]

* New translations messages.xlf (French)
[ci skip]

* New translations messages.xlf (Belarusian)
[ci skip]

* New translations messages.xlf (Czech)
[ci skip]

* New translations messages.xlf (Danish)
[ci skip]

* New translations messages.xlf (German)
[ci skip]

* New translations messages.xlf (Hebrew)
[ci skip]

* New translations messages.xlf (Dutch)
[ci skip]

* New translations messages.xlf (Chinese Simplified)
[ci skip]

* New translations messages.xlf (Serbian (Latin))
[ci skip]

* New translations messages.xlf (Luxembourgish)
[ci skip]

* New translations messages.xlf (Portuguese, Brazilian)
[ci skip]

* New translations messages.xlf (Polish)
[ci skip]

* New translations messages.xlf (Turkish)
[ci skip]

* New translations messages.xlf (Swedish)
[ci skip]

* New translations messages.xlf (Slovenian)
[ci skip]

* New translations messages.xlf (Russian)
[ci skip]

* New translations messages.xlf (Portuguese)
[ci skip]

* New translations messages.xlf (Arabic, Saudi Arabia)
[ci skip]

* New translations messages.xlf (German)
[ci skip]

* New translations django.po (Japanese)
[ci skip]

* New translations messages.xlf (Japanese)
[ci skip]

* New translations messages.xlf (German)
[ci skip]

* New translations messages.xlf (Chinese Simplified)
[ci skip]

* New translations messages.xlf (Chinese Simplified)
[ci skip]

* New translations django.po (Chinese Simplified)
[ci skip]

* New translations django.po (Croatian)
[ci skip]

* New translations messages.xlf (Croatian)
[ci skip]

* New translations messages.xlf (Polish)
[ci skip]

* New translations django.po (Hebrew)
[ci skip]

* New translations django.po (Croatian)
[ci skip]

* New translations messages.xlf (Croatian)
[ci skip]

* New translations django.po (Romanian)
[ci skip]

* New translations django.po (French)
[ci skip]

* New translations django.po (Belarusian)
[ci skip]

* New translations django.po (Czech)
[ci skip]

* New translations django.po (Danish)
[ci skip]

* New translations django.po (German)
[ci skip]

* New translations django.po (Finnish)
[ci skip]

* New translations django.po (Italian)
[ci skip]

* New translations messages.xlf (Japanese)
[ci skip]

* New translations django.po (Dutch)
[ci skip]

* New translations django.po (Polish)
[ci skip]

* New translations django.po (Portuguese)
[ci skip]

* New translations django.po (Russian)
[ci skip]

* New translations django.po (Slovenian)
[ci skip]

* New translations django.po (Swedish)
[ci skip]

* New translations django.po (Turkish)
[ci skip]

* New translations django.po (Portuguese, Brazilian)
[ci skip]

* New translations django.po (Luxembourgish)
[ci skip]

* New translations django.po (Serbian (Latin))
[ci skip]

* New translations django.po (Chinese Simplified)
[ci skip]

* New translations django.po (Japanese)
[ci skip]

* New translations messages.xlf (Hebrew)
[ci skip]

* New translations messages.xlf (German)
[ci skip]

* New translations django.po (Spanish)
[ci skip]

* New translations messages.xlf (Spanish)
[ci skip]

* New translations messages.xlf (Finnish)
[ci skip]

* New translations django.po (Norwegian)
[ci skip]

* New translations messages.xlf (Norwegian)
[ci skip]

* New translations messages.xlf (Romanian)
[ci skip]

* New translations messages.xlf (French)
[ci skip]

* New translations messages.xlf (Belarusian)
[ci skip]

* New translations messages.xlf (Czech)
[ci skip]

* New translations messages.xlf (Danish)
[ci skip]

* New translations messages.xlf (Italian)
[ci skip]

* New translations messages.xlf (Arabic, Saudi Arabia)
[ci skip]

* New translations messages.xlf (Dutch)
[ci skip]

* New translations messages.xlf (Portuguese)
[ci skip]

* New translations messages.xlf (Russian)
[ci skip]

* New translations messages.xlf (Slovenian)
[ci skip]

* New translations messages.xlf (Swedish)
[ci skip]

* New translations messages.xlf (Turkish)
[ci skip]

* New translations messages.xlf (Chinese Simplified)
[ci skip]

* New translations messages.xlf (Portuguese, Brazilian)
[ci skip]

* New translations messages.xlf (Luxembourgish)
[ci skip]

* New translations messages.xlf (Serbian (Latin))
[ci skip]

* New translations django.po (Arabic, Saudi Arabia)
[ci skip]
2022-07-08 15:21:13 -07:00
Michael Shamoon
8825d6b15f Update translation source strings 2022-07-08 14:12:07 -07:00
shamoon
1f73ca21bf Merge pull request #1020 from paperless-ngx/feature-frontend-task-queue
Feature: frontend task queue
2022-07-08 14:06:24 -07:00
Michael Shamoon
2db0854eef fix conflicting migrations 2022-07-08 14:02:43 -07:00
shamoon
f66e589312 Merge pull request #1133 from paperless-ngx/feature-prevent-text-dupe-api-calls
Fix: Prevent duplicate api calls on text filtering
2022-07-08 13:56:45 -07:00
Michael Shamoon
5c9ad3068b simplify filter rule comparison 2022-07-08 13:55:27 -07:00
shamoon
d07b786da6 Merge pull request #1140 from paperless-ngx/chore-image-tag-cleanups 2022-07-07 06:50:47 -07:00
Trenton Holmes
da5d32ed89 Relocks the dependencies following latest updates 2022-07-05 08:20:35 +02:00
Trenton Holmes
55dadea98e No need for a branch here, the loop takes care of it 2022-07-05 08:20:35 +02:00
Trenton Holmes
77fbbe95ff Updates the classifier to catch warnings from scikit-learn and rebuild the model file when this happens 2022-07-05 08:20:35 +02:00
Trenton Holmes
1aeb95396b Updates scikit-learn and fixes the warning this normally generates in the unit tests 2022-07-05 08:20:35 +02:00
shamoon
48dfbbebc6 Merge pull request #1110 from paperless-ngx/update-issue-form 2022-07-03 07:42:20 -07:00
Trenton Holmes
ccf3a9f3b2 Implements reading from a Docker secrets file in place of an environment variable for certain settings 2022-07-03 10:56:01 +02:00
dependabot[bot]
c0cb97bd42 Bump pillow from 9.1.1 to 9.2.0
Bumps [pillow](https://github.com/python-pillow/Pillow) from 9.1.1 to 9.2.0.
- [Release notes](https://github.com/python-pillow/Pillow/releases)
- [Changelog](https://github.com/python-pillow/Pillow/blob/main/CHANGES.rst)
- [Commits](https://github.com/python-pillow/Pillow/compare/9.1.1...9.2.0)

---
updated-dependencies:
- dependency-name: pillow
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2022-07-03 10:47:43 +02:00
shamoon
8efb97ef4e Update stale.yml
[ci skip]
2022-07-02 19:06:32 -07:00
shamoon
d8cda7fc1b Use any-of-labels for stalebot
[ci skip]
2022-07-02 17:51:39 -07:00
shamoon
ee9f1e7b70 Merge pull request #957 from paperless-ngx/feature-created-date
Feature: make frontend timezone un-aware
2022-07-02 16:58:30 -07:00
shamoon
92dd70098c Merge branch 'dev' into feature-frontend-task-queue 2022-07-02 16:54:16 -07:00
shamoon
4bea4c69a4 Merge pull request #1139 from paperless-ngx/feature-redo-ocr
Feature: Management command to redo OCR
2022-07-02 09:02:32 -07:00
Michael Shamoon
7734325b71 Update tasks.py 2022-07-02 08:42:59 -07:00
shamoon
186ae844bc Merge branch 'dev' into feature-redo-ocr 2022-07-02 08:41:18 -07:00
Michael Shamoon
c9bdf1c184 Frontend UI for redo OCR 2022-07-02 08:39:09 -07:00
Michael Shamoon
13ffe468df Extract redo ocr to task 2022-07-02 08:39:09 -07:00
Trenton Holmes
a090cf7a10 Updates following testing of command 2022-07-02 08:39:09 -07:00
Trenton Holmes
b7250477b5 Includes the progress bar 2022-07-02 08:39:09 -07:00
Trenton Holmes
dfd16c5187 Saves work on a new management comment to re-ocr a file 2022-07-02 08:39:09 -07:00
shamoon
4afd6b78af Merge pull request #1122 from paperless-ngx/feature-quick-toggleable-filters
Feature / fix quick toggleable filters
2022-07-02 08:26:42 -07:00
Trenton Holmes
398f6e5b0c Removes variable which was never set, removed unneeded serializer method 2022-07-02 16:19:22 +02:00
Trenton Holmes
d7f7d839f8 Adds invalid storage path format test 2022-07-02 16:19:22 +02:00
Trenton Holmes
49a843dcdd Changes the simple-alpha parsing test to use a tempdir so the original isn't modified in Git 2022-07-02 16:19:22 +02:00
Trenton Holmes
ec045e81f2 Moves the barcode related functionality out of tasks and into its own location. Splits up the testing based on that 2022-07-02 16:19:22 +02:00
Trenton Holmes
d8a7828cb5 Splits tests for the tasks into their own classes 2022-07-02 16:19:22 +02:00
Michael Shamoon
e32cb12ad7 fix content_type on test_api_create_storage_path 2022-07-02 16:19:22 +02:00
Trenton Holmes
ee2847cfea Omit a few files that don't really make sense to cover at all 2022-07-02 16:19:22 +02:00
Trenton Holmes
22e00a7080 Adds a few more test cases for coverage and adds no coverage to some others 2022-07-02 16:19:22 +02:00
Trenton Holmes
cbe567069f Fixes the whitenoise warning in the test suite 2022-07-02 16:19:22 +02:00
Trenton Holmes
53baed0389 Increases test coverage of storage paths 2022-07-02 16:19:22 +02:00
dependabot[bot]
39cb9589c8 Bump watchdog from 2.1.8 to 2.1.9 (#1132) 2022-07-02 14:07:32 +00:00
dependabot[bot]
bde03f3574 Bump scikit-learn from 1.0.2 to 1.1.1 (#992) 2022-07-02 13:44:01 +00:00
dependabot[bot]
8f31d150fd Bump setuptools from 62.3.3 to 62.6.0
Bumps [setuptools](https://github.com/pypa/setuptools) from 62.3.3 to 62.6.0.
- [Release notes](https://github.com/pypa/setuptools/releases)
- [Changelog](https://github.com/pypa/setuptools/blob/main/CHANGES.rst)
- [Commits](https://github.com/pypa/setuptools/compare/v62.3.3...v62.6.0)

---
updated-dependencies:
- dependency-name: setuptools
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2022-07-02 15:08:18 +02:00
dependabot[bot]
453dbbb031 Bump django-filter from 21.1 to 22.1
Bumps [django-filter](https://github.com/carltongibson/django-filter) from 21.1 to 22.1.
- [Release notes](https://github.com/carltongibson/django-filter/releases)
- [Changelog](https://github.com/carltongibson/django-filter/blob/main/CHANGES.rst)
- [Commits](https://github.com/carltongibson/django-filter/compare/21.1...22.1)

---
updated-dependencies:
- dependency-name: django-filter
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
2022-07-02 15:07:27 +02:00
dependabot[bot]
421754fff6 Bump actions/setup-python from 3 to 4
Bumps [actions/setup-python](https://github.com/actions/setup-python) from 3 to 4.
- [Release notes](https://github.com/actions/setup-python/releases)
- [Commits](https://github.com/actions/setup-python/compare/v3...v4)

---
updated-dependencies:
- dependency-name: actions/setup-python
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
2022-07-02 14:26:49 +02:00
dependabot[bot]
05ec5feacf Bump sphinx from 4.5.0 to 5.0.2
Bumps [sphinx](https://github.com/sphinx-doc/sphinx) from 4.5.0 to 5.0.2.
- [Release notes](https://github.com/sphinx-doc/sphinx/releases)
- [Changelog](https://github.com/sphinx-doc/sphinx/blob/5.x/CHANGES)
- [Commits](https://github.com/sphinx-doc/sphinx/compare/v4.5.0...v5.0.2)

---
updated-dependencies:
- dependency-name: sphinx
  dependency-type: direct:development
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
2022-07-02 14:25:57 +02:00
dependabot[bot]
639d9b27c8 Bump docker/metadata-action from 3 to 4
Bumps [docker/metadata-action](https://github.com/docker/metadata-action) from 3 to 4.
- [Release notes](https://github.com/docker/metadata-action/releases)
- [Upgrade guide](https://github.com/docker/metadata-action/blob/master/UPGRADE.md)
- [Commits](https://github.com/docker/metadata-action/compare/v3...v4)

---
updated-dependencies:
- dependency-name: docker/metadata-action
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
2022-07-02 14:25:14 +02:00
dependabot[bot]
2c99d027f3 Bump tj-actions/changed-files from 22.1 to 23.1
Bumps [tj-actions/changed-files](https://github.com/tj-actions/changed-files) from 22.1 to 23.1.
- [Release notes](https://github.com/tj-actions/changed-files/releases)
- [Changelog](https://github.com/tj-actions/changed-files/blob/main/HISTORY.md)
- [Commits](https://github.com/tj-actions/changed-files/compare/v22.1...v23.1)

---
updated-dependencies:
- dependency-name: tj-actions/changed-files
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
2022-07-02 14:24:13 +02:00
dependabot[bot]
4f176682dc Merge pull request #1177 from paperless-ngx/dependabot/npm_and_yarn/src-ui/dev/angular/cli-14.0.4 2022-07-02 08:09:09 +00:00
Michael Shamoon
13ef41bd42 Update ngbRadioGroups to native buttons 2022-07-02 00:55:18 -07:00
Michael Shamoon
3c6ba80323 Merge branch 'dependabot/npm_and_yarn/src-ui/dev/angular/cli-14.0.4' of github.com:paperless-ngx/paperless-ngx into dependabot/npm_and_yarn/src-ui/dev/angular/cli-14.0.4 2022-07-01 14:15:10 -07:00
Michael Shamoon
fcfa8dfac2 bump angular, ng-bootstrap, ng-select 2022-07-01 14:12:17 -07:00
dependabot[bot]
5b73e9aee6 Bump @angular/cli from 13.3.7 to 14.0.4 in /src-ui
Bumps [@angular/cli](https://github.com/angular/angular-cli) from 13.3.7 to 14.0.4.
- [Release notes](https://github.com/angular/angular-cli/releases)
- [Changelog](https://github.com/angular/angular-cli/blob/main/CHANGELOG.md)
- [Commits](https://github.com/angular/angular-cli/compare/13.3.7...14.0.4)

---
updated-dependencies:
- dependency-name: "@angular/cli"
  dependency-type: direct:development
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
2022-07-01 14:10:51 -07:00
shamoon
9ead264300 Merge pull request #1187 from paperless-ngx/dependabot/npm_and_yarn/src-ui/dev/cypress-10.3.0
Bump cypress from 10.0.1 to 10.3.0 in /src-ui
2022-07-01 13:42:06 -07:00
dependabot[bot]
a617eda321 Bump cypress from 10.0.1 to 10.3.0 in /src-ui
Bumps [cypress](https://github.com/cypress-io/cypress) from 10.0.1 to 10.3.0.
- [Release notes](https://github.com/cypress-io/cypress/releases)
- [Changelog](https://github.com/cypress-io/cypress/blob/develop/.releaserc.base.js)
- [Commits](https://github.com/cypress-io/cypress/compare/v10.0.1...v10.3.0)

---
updated-dependencies:
- dependency-name: cypress
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2022-07-01 20:41:20 +00:00
shamoon
c913fa65b2 Merge pull request #1185 from paperless-ngx/dependabot/npm_and_yarn/src-ui/dev/zone.js-0.11.6
Bump zone.js from 0.11.5 to 0.11.6 in /src-ui
2022-07-01 13:40:40 -07:00
shamoon
497c8c84e5 Merge pull request #1184 from paperless-ngx/dependabot/npm_and_yarn/src-ui/dev/ts-node-10.8.1
Bump ts-node from 10.8.0 to 10.8.1 in /src-ui
2022-07-01 13:39:43 -07:00
dependabot[bot]
c58a94d497 Bump zone.js from 0.11.5 to 0.11.6 in /src-ui
Bumps [zone.js](https://github.com/angular/angular/tree/HEAD/packages/zone.js) from 0.11.5 to 0.11.6.
- [Release notes](https://github.com/angular/angular/releases)
- [Changelog](https://github.com/angular/angular/blob/main/packages/zone.js/CHANGELOG.md)
- [Commits](https://github.com/angular/angular/commits/zone.js-0.11.6/packages/zone.js)

---
updated-dependencies:
- dependency-name: zone.js
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2022-07-01 20:39:16 +00:00
dependabot[bot]
6a853d1fa2 Bump @angular/cli from 13.3.7 to 14.0.4 in /src-ui
Bumps [@angular/cli](https://github.com/angular/angular-cli) from 13.3.7 to 14.0.4.
- [Release notes](https://github.com/angular/angular-cli/releases)
- [Changelog](https://github.com/angular/angular-cli/blob/main/CHANGELOG.md)
- [Commits](https://github.com/angular/angular-cli/compare/13.3.7...14.0.4)

---
updated-dependencies:
- dependency-name: "@angular/cli"
  dependency-type: direct:development
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
2022-07-01 20:38:38 +00:00
dependabot[bot]
c30c58e564 Bump ts-node from 10.8.0 to 10.8.1 in /src-ui
Bumps [ts-node](https://github.com/TypeStrong/ts-node) from 10.8.0 to 10.8.1.
- [Release notes](https://github.com/TypeStrong/ts-node/releases)
- [Commits](https://github.com/TypeStrong/ts-node/compare/v10.8.0...v10.8.1)

---
updated-dependencies:
- dependency-name: ts-node
  dependency-type: direct:development
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2022-07-01 20:38:22 +00:00
shamoon
3b7a4c6b6b Merge pull request #1175 from paperless-ngx/dependabot/npm_and_yarn/src-ui/dev/jest-environment-jsdom-28.1.2
Bump jest-environment-jsdom from 28.1.0 to 28.1.2 in /src-ui
2022-07-01 13:37:47 -07:00
shamoon
978cdf2514 Merge pull request #1183 from paperless-ngx/dependabot/npm_and_yarn/src-ui/dev/types/node-18.0.0
Bump @types/node from 17.0.38 to 18.0.0 in /src-ui
2022-07-01 13:37:05 -07:00
dependabot[bot]
33609616aa Bump jest-environment-jsdom from 28.1.0 to 28.1.2 in /src-ui
Bumps [jest-environment-jsdom](https://github.com/facebook/jest/tree/HEAD/packages/jest-environment-jsdom) from 28.1.0 to 28.1.2.
- [Release notes](https://github.com/facebook/jest/releases)
- [Changelog](https://github.com/facebook/jest/blob/main/CHANGELOG.md)
- [Commits](https://github.com/facebook/jest/commits/v28.1.2/packages/jest-environment-jsdom)

---
updated-dependencies:
- dependency-name: jest-environment-jsdom
  dependency-type: direct:development
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2022-07-01 20:36:20 +00:00
dependabot[bot]
006f6c998d Bump @types/node from 17.0.38 to 18.0.0 in /src-ui
Bumps [@types/node](https://github.com/DefinitelyTyped/DefinitelyTyped/tree/HEAD/types/node) from 17.0.38 to 18.0.0.
- [Release notes](https://github.com/DefinitelyTyped/DefinitelyTyped/releases)
- [Commits](https://github.com/DefinitelyTyped/DefinitelyTyped/commits/HEAD/types/node)

---
updated-dependencies:
- dependency-name: "@types/node"
  dependency-type: direct:development
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
2022-07-01 20:36:05 +00:00
shamoon
05fd69eae4 Merge pull request #1181 from paperless-ngx/dependabot/npm_and_yarn/src-ui/dev/concurrently-7.2.2
Bump concurrently from 7.2.1 to 7.2.2 in /src-ui
2022-07-01 13:35:12 -07:00
dependabot[bot]
b6b8719efa Bump concurrently from 7.2.1 to 7.2.2 in /src-ui
Bumps [concurrently](https://github.com/open-cli-tools/concurrently) from 7.2.1 to 7.2.2.
- [Release notes](https://github.com/open-cli-tools/concurrently/releases)
- [Commits](https://github.com/open-cli-tools/concurrently/compare/v7.2.1...v7.2.2)

---
updated-dependencies:
- dependency-name: concurrently
  dependency-type: direct:development
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2022-07-01 20:33:25 +00:00
shamoon
7e8b9549a1 Merge pull request #1182 from paperless-ngx/dependabot/npm_and_yarn/src-ui/dev/jest-preset-angular-12.1.0
Bump jest-preset-angular from 12.0.1 to 12.1.0 in /src-ui
2022-07-01 13:32:00 -07:00
dependabot[bot]
032f78e0f5 Bump jest-preset-angular from 12.0.1 to 12.1.0 in /src-ui
Bumps [jest-preset-angular](https://github.com/thymikee/jest-preset-angular) from 12.0.1 to 12.1.0.
- [Release notes](https://github.com/thymikee/jest-preset-angular/releases)
- [Changelog](https://github.com/thymikee/jest-preset-angular/blob/main/CHANGELOG.md)
- [Commits](https://github.com/thymikee/jest-preset-angular/compare/v12.0.1...v12.1.0)

---
updated-dependencies:
- dependency-name: jest-preset-angular
  dependency-type: direct:development
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2022-07-01 20:30:30 +00:00
shamoon
4059bc9ec6 Merge pull request #1180 from paperless-ngx/dependabot/npm_and_yarn/src-ui/dev/jest-and-types/jest-28.1.2
Bump jest and @types/jest in /src-ui
2022-07-01 13:28:41 -07:00
dependabot[bot]
b85cd0925a Bump jest and @types/jest in /src-ui
Bumps [jest](https://github.com/facebook/jest/tree/HEAD/packages/jest) and [@types/jest](https://github.com/DefinitelyTyped/DefinitelyTyped/tree/HEAD/types/jest). These dependencies needed to be updated together.

Updates `jest` from 28.1.0 to 28.1.2
- [Release notes](https://github.com/facebook/jest/releases)
- [Changelog](https://github.com/facebook/jest/blob/main/CHANGELOG.md)
- [Commits](https://github.com/facebook/jest/commits/v28.1.2/packages/jest)

Updates `@types/jest` from 27.5.2 to 28.1.4
- [Release notes](https://github.com/DefinitelyTyped/DefinitelyTyped/releases)
- [Commits](https://github.com/DefinitelyTyped/DefinitelyTyped/commits/HEAD/types/jest)

---
updated-dependencies:
- dependency-name: jest
  dependency-type: direct:development
  update-type: version-update:semver-patch
- dependency-name: "@types/jest"
  dependency-type: direct:development
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
2022-07-01 20:13:50 +00:00
ziprandom
f20254217f POST_CONSUME_SCRIPT: add documents archive_path 2022-06-22 14:00:20 +00:00
ziprandom
9424b763ca POST_CONSUME_SCRIPT: add document dates to env 2022-06-22 13:58:16 +00:00
ziprandom
08ae3f8771 use env variables in pre-|post-consume scripts
+ instead of positional arguments because it's easier to use in the
shell script and easier to read in the python code.
2022-06-22 13:56:59 +00:00
Felix E
68f0cf419b Merge pull request #1148 from pReya/patch-1
fix: update scanner capability
2022-06-20 14:25:59 +02:00
Moritz Stückler
26b12512b1 fix: update scanner capability
The Brother ADS-A1700W does indeed support SFTP. I've just bought it, and set it up like this.
2022-06-20 12:06:54 +02:00
Michael Shamoon
b98afadd5c python tests for tasks api endpoints 2022-06-17 23:11:29 -04:00
Trenton Holmes
499bd552a1 Fine, I made my own GitHub API interface. With blackjack and ... 2022-06-17 08:11:15 -07:00
Trenton Holmes
0090e27699 Adds a new workflow to cleanup image tags which no longer have an associated branch 2022-06-16 09:20:58 -07:00
shamoon
e568b3000e Add lsio to issue form 2022-06-14 08:31:08 -07:00
Michael Shamoon
7ae8b46ea7 allow PaperlessTask.started null 2022-06-13 16:21:37 -07:00
Michael Shamoon
ffb903841b Prevent duplicate api calls on text filtering 2022-06-13 15:35:00 -07:00
shamoon
72ee904e67 Merge pull request #1127 from paperless-ngx/feature-webp-thumbnails
Feature: Change document thumbnails to WebP
2022-06-12 09:44:53 -07:00
Trenton Holmes
222e1968d8 Removes one last portion of PNG vs WebP 2022-06-12 09:12:02 -07:00
Trenton Holmes
1df517afd3 Removes last vestiges of PNG from the tests, code, docs and samples 2022-06-11 14:20:50 -07:00
Trenton Holmes
cc4cea1a41 Converts the conversion into a database migration 2022-06-11 13:04:21 -07:00
Trenton Holmes
e8868d7ebf Entirely removes the optipng, updates ghostscript fall back to also use WebP. Updates the conversion to use a multiprocessing pool 2022-06-11 08:38:49 -07:00
Trenton Holmes
7d9a9033f9 Fixes the re-generation of thumbnails making webp file, but named as PNG files 2022-06-10 13:17:41 -07:00
Trenton Holmes
87322d7732 Adds quick documentation of new functionality 2022-06-10 11:26:23 -07:00
Trenton Holmes
08c3d6e84b Fixes existing testing, adds test coverage of new command 2022-06-10 10:12:01 -07:00
Trenton Holmes
b50325c3a3 Minor tweak to determining content type 2022-06-10 08:57:36 -07:00
Trenton Holmes
12cdcf7681 Adds information system check for PNG thumbnail existence 2022-06-10 08:56:55 -07:00
Trenton Holmes
34192349be Corrects the functionality of the webp conversion script 2022-06-10 08:56:25 -07:00
Trenton Holmes
153d0bb12a Corrects the logic of thumbnail path to account for both getting existing path or building expected path 2022-06-10 07:59:22 -07:00
Trenton Holmes
20092dadad Adds untested manual conversion command 2022-06-10 07:17:15 -07:00
Trenton Holmes
6844f8f2bf Minor tweaks to getting the document thumbnail path. Adds text thumbnail as webp 2022-06-10 06:56:28 -07:00
Michael Shamoon
58f2c6a5fc webp thumbnail support with png fallback 2022-06-10 02:28:13 -07:00
Michael Shamoon
5f10d86f04 Quick toggle for tags / doctypes etc on doc view 2022-06-09 08:37:40 -07:00
Michael Shamoon
1120e823ed Update tasks e2e tests to cypress 10
and remove debug print
2022-06-08 19:57:34 -07:00
Michael Shamoon
301b384a02 Merge branch 'dev' into feature-frontend-task-queue 2022-06-08 19:44:23 -07:00
Trenton Holmes
e4a26164de Merge pull request #1014 from paperless-ngx/feature-own-django-q
Feature: Fork django-q to update dependencies
2022-06-08 18:57:30 -07:00
Trenton Holmes
56d3e8893f Manually downgrades reportlab, no 3.9 wheel was built yet 2022-06-08 17:04:00 -07:00
Trenton Holmes
99336908f0 Points to the organization fork of django-q, which now includes my replicated changes 2022-06-08 16:04:03 -07:00
Trenton Holmes
090325af35 Adds git as needed for a git link 2022-06-08 15:59:25 -07:00
Trenton Holmes
485be6c3fd Changes to the forked django-q 2022-06-08 15:59:20 -07:00
Trenton Holmes
faa9d36c34 Merge pull request #1118 from paperless-ngx/feature-simplify-library-image
Chore: Simplify building Python wheels
2022-06-08 15:21:51 -07:00
Trenton Holmes
ea8e108cdf Removes references to now not set or used build args 2022-06-08 13:33:17 -07:00
Trenton Holmes
100f5422f6 Updates the wheel builders to let pip handle finding the sdist of the required package and version 2022-06-08 13:33:17 -07:00
Trenton Holmes
15c716e53b Merge pull request #1116 from paperless-ngx/feature-bugfix-reportlab
Chore: Manually downgrade reportlab (and update everything else)
2022-06-08 13:32:51 -07:00
Trenton Holmes
75e77c5e54 Re-locks all dependencies and manually downgrades reportlab to 3.6.9 until piwheels issue is fixed 2022-06-08 12:04:30 -07:00
Trenton Holmes
de4fdc07e0 Merge pull request #1103 from paperless-ngx/dependabot/pip/dev/whitenoise-6.2.0
Bump whitenoise from 6.1.0 to 6.2.0
2022-06-08 07:41:56 -07:00
dependabot[bot]
51edb2fa14 Bump whitenoise from 6.1.0 to 6.2.0
Bumps [whitenoise](https://github.com/evansd/whitenoise) from 6.1.0 to 6.2.0.
- [Release notes](https://github.com/evansd/whitenoise/releases)
- [Changelog](https://github.com/evansd/whitenoise/blob/main/docs/changelog.rst)
- [Commits](https://github.com/evansd/whitenoise/compare/6.1.0...6.2.0)

---
updated-dependencies:
- dependency-name: whitenoise
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2022-06-06 20:24:26 +00:00
Michael Shamoon
bd995089a8 Use pre_execute signal to specify started vs queued 2022-06-06 01:39:45 -07:00
Michael Shamoon
a90dd2ad1e Update e2e tests for collapsible result 2022-06-05 14:16:15 -07:00
Michael Shamoon
cd44151e16 add collapsible task result output 2022-06-05 14:16:15 -07:00
Trenton Holmes
5715ba1a9a Merge pull request #1091 from adam-ah/dev
Longer (5 vs 0.2s) guard_cycle for Django-Q
2022-06-05 08:11:51 -07:00
shamoon
6f4a1c1751 Merge pull request #1092 from similicious/fix/web-manifest
Fix app name and icons web manifest, optimize svg
2022-06-04 06:27:15 -07:00
similicious
2a1b1eb1a4 Fix app name 2022-06-04 12:29:12 +02:00
Adam H
20c597b1d7 Longer (5 vs 0.2s) guard_cycle for Django-Q
To reduce average CPU load. Given paperless is mostly idling and when not, just spawns long-running operations (e.g., OCR), a 0.2s health-check of the Django-Q cluster is unnecessary. See also #1084
2022-06-04 10:12:53 +10:00
Trenton Holmes
9dc1989507 Merge pull request #1088 from paperless-ngx/bugfix-docker-folder-create
Bugfix: Don't assume default Docker folders
2022-06-03 15:26:32 -07:00
Trenton Holmes
681cb1b978 Makes sure the export folder also exists 2022-06-03 14:02:58 -07:00
Trenton Holmes
332a9fac5a Adds quotes around usages that may be of a user defined directory
Co-authored-by: Felix E <felix@eckhofer.com>
2022-06-03 11:21:13 -07:00
Trenton Holmes
d118f4a3f0 Setup the defined user folders instead of always using the defaults at Docker startup 2022-06-03 09:18:48 -07:00
similicious
7620cd02f0 Optimize svg files with svgo 2022-06-03 11:41:46 +02:00
similicious
fdfd7bd82a Fix: icons and app name in manifest 2022-06-03 10:50:33 +02:00
shamoon
01c17e10cc Merge pull request #1083 from paperless-ngx/dependabot/npm_and_yarn/src-ui/dev/cypress-10.0.1
Bump cypress from 9.6.1 to 10.0.1 in /src-ui
2022-06-02 17:29:51 -07:00
Michael Shamoon
bed03b301b use global fixtures in e2e tests 2022-06-02 15:00:41 -07:00
Michael Shamoon
ef48762da5 Migrate to cypress 10 2022-06-02 14:47:09 -07:00
dependabot[bot]
7978f3f0e6 Bump cypress from 9.6.1 to 10.0.1 in /src-ui
Bumps [cypress](https://github.com/cypress-io/cypress) from 9.6.1 to 10.0.1.
- [Release notes](https://github.com/cypress-io/cypress/releases)
- [Changelog](https://github.com/cypress-io/cypress/blob/develop/.releaserc.base.js)
- [Commits](https://github.com/cypress-io/cypress/compare/v9.6.1...v10.0.1)

---
updated-dependencies:
- dependency-name: cypress
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
2022-06-02 21:36:01 +00:00
shamoon
8d5fad72bf Merge pull request #1076 from paperless-ngx/query-params-e2e-tests
Query params e2e tests
2022-06-02 14:33:14 -07:00
shamoon
04db521851 Merge pull request #1049 from paperless-ngx/bugfix-better-sanity-msgs
Bugfix: Better sanity check messages
2022-06-02 11:17:56 -07:00
shamoon
26d27be161 Merge pull request #1081 from paperless-ngx/fix-pdf-viewer-margins
Fix vertical margins between pages of pdf viewer
2022-06-02 11:17:02 -07:00
Michael Shamoon
1259d06302 Fix vertical margins between pages of pdf viewer 2022-06-02 11:03:54 -07:00
Trenton Holmes
4db3f366ef Merge pull request #1032 from pheerai/feature-mailActionCustomTag
Feature mail action custom tag
2022-06-02 09:46:34 -07:00
Trenton Holmes
1c52c5b673 Merge pull request #1065 from paperless-ngx/dependabot/github_actions/dev/docker/setup-qemu-action-2
Bump docker/setup-qemu-action from 1 to 2
2022-06-01 15:53:16 -07:00
dependabot[bot]
a6a885d4f4 Bump docker/setup-qemu-action from 1 to 2
Bumps [docker/setup-qemu-action](https://github.com/docker/setup-qemu-action) from 1 to 2.
- [Release notes](https://github.com/docker/setup-qemu-action/releases)
- [Commits](https://github.com/docker/setup-qemu-action/compare/v1...v2)

---
updated-dependencies:
- dependency-name: docker/setup-qemu-action
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
2022-06-01 22:25:39 +00:00
Trenton Holmes
b11066cef1 Merge pull request #1064 from paperless-ngx/dependabot/github_actions/dev/docker/setup-buildx-action-2
Bump docker/setup-buildx-action from 1 to 2
2022-06-01 15:25:18 -07:00
Trenton Holmes
1941b0c3ed Merge pull request #1063 from paperless-ngx/dependabot/github_actions/dev/docker/build-push-action-3
Bump docker/build-push-action from 2 to 3
2022-06-01 15:24:15 -07:00
shamoon
9a47fc747f Merge pull request #1075 from paperless-ngx/dependabot/npm_and_yarn/src-ui/dev/cypress/schematic-2.0.0 2022-06-01 14:53:12 -07:00
Trenton Holmes
a425d3a55b Merge pull request #1062 from paperless-ngx/dependabot/github_actions/dev/tj-actions/changed-files-22.1
Bump tj-actions/changed-files from 19 to 22.1
2022-06-01 14:25:11 -07:00
Michael Shamoon
f03a0f6e73 Add documents query params e2e tests 2022-06-01 14:12:38 -07:00
dependabot[bot]
74d5724092 Bump @cypress/schematic from 1.7.0 to 2.0.0 in /src-ui
Bumps [@cypress/schematic](https://github.com/cypress-io/cypress) from 1.7.0 to 2.0.0.
- [Release notes](https://github.com/cypress-io/cypress/releases)
- [Changelog](https://github.com/cypress-io/cypress/blob/develop/.releaserc.base.js)
- [Commits](https://github.com/cypress-io/cypress/compare/@cypress/schematic-v1.7.0...@cypress/schematic-v2.0.0)

---
updated-dependencies:
- dependency-name: "@cypress/schematic"
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
2022-06-01 21:10:21 +00:00
shamoon
3df21fcaa3 Merge pull request #1073 from paperless-ngx/dependabot/npm_and_yarn/src-ui/dev/concurrently-7.2.1
Bump concurrently from 7.1.0 to 7.2.1 in /src-ui
2022-06-01 14:09:19 -07:00
shamoon
fbb5de6740 Merge pull request #1074 from paperless-ngx/dependabot/npm_and_yarn/src-ui/dev/types/jest-27.5.2
Bump @types/jest from 27.4.1 to 27.5.2 in /src-ui
2022-06-01 14:08:55 -07:00
dependabot[bot]
f7f9096c6e Bump concurrently from 7.1.0 to 7.2.1 in /src-ui
Bumps [concurrently](https://github.com/open-cli-tools/concurrently) from 7.1.0 to 7.2.1.
- [Release notes](https://github.com/open-cli-tools/concurrently/releases)
- [Commits](https://github.com/open-cli-tools/concurrently/compare/v7.1.0...v7.2.1)

---
updated-dependencies:
- dependency-name: concurrently
  dependency-type: direct:development
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2022-06-01 21:07:51 +00:00
dependabot[bot]
d5a8e1725d Bump @types/jest from 27.4.1 to 27.5.2 in /src-ui
Bumps [@types/jest](https://github.com/DefinitelyTyped/DefinitelyTyped/tree/HEAD/types/jest) from 27.4.1 to 27.5.2.
- [Release notes](https://github.com/DefinitelyTyped/DefinitelyTyped/releases)
- [Commits](https://github.com/DefinitelyTyped/DefinitelyTyped/commits/HEAD/types/jest)

---
updated-dependencies:
- dependency-name: "@types/jest"
  dependency-type: direct:development
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2022-06-01 21:07:37 +00:00
shamoon
34413747d5 Merge pull request #1070 from paperless-ngx/dependabot/npm_and_yarn/src-ui/dev/ts-node-10.8.0
Bump ts-node from 10.7.0 to 10.8.0 in /src-ui
2022-06-01 14:06:48 -07:00
dependabot[bot]
18de626919 Bump ts-node from 10.7.0 to 10.8.0 in /src-ui
Bumps [ts-node](https://github.com/TypeStrong/ts-node) from 10.7.0 to 10.8.0.
- [Release notes](https://github.com/TypeStrong/ts-node/releases)
- [Commits](https://github.com/TypeStrong/ts-node/compare/v10.7.0...v10.8.0)

---
updated-dependencies:
- dependency-name: ts-node
  dependency-type: direct:development
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2022-06-01 21:05:51 +00:00
shamoon
bef192084f Merge pull request #1071 from paperless-ngx/dependabot/npm_and_yarn/src-ui/dev/jest-28.1.0
Bump jest from 28.0.3 to 28.1.0 in /src-ui
2022-06-01 14:04:47 -07:00
dependabot[bot]
54eef16bfb Bump jest from 28.0.3 to 28.1.0 in /src-ui
Bumps [jest](https://github.com/facebook/jest/tree/HEAD/packages/jest) from 28.0.3 to 28.1.0.
- [Release notes](https://github.com/facebook/jest/releases)
- [Changelog](https://github.com/facebook/jest/blob/main/CHANGELOG.md)
- [Commits](https://github.com/facebook/jest/commits/v28.1.0/packages/jest)

---
updated-dependencies:
- dependency-name: jest
  dependency-type: direct:development
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2022-06-01 21:03:57 +00:00
shamoon
7be49dba69 Merge pull request #1069 from paperless-ngx/npm-updates-220601
Chore: npm package updates 22-06-01
2022-06-01 14:02:13 -07:00
Trenton Holmes
218a6af62a Merge pull request #1061 from paperless-ngx/dependabot/github_actions/dev/docker/login-action-2
Bump docker/login-action from 1 to 2
2022-06-01 14:00:14 -07:00
Michael Shamoon
f0315d5c70 bump packages for angular, popperjs, node, ngx-cookie-service 2022-06-01 13:50:17 -07:00
dependabot[bot]
f82e04201b Bump docker/setup-buildx-action from 1 to 2
Bumps [docker/setup-buildx-action](https://github.com/docker/setup-buildx-action) from 1 to 2.
- [Release notes](https://github.com/docker/setup-buildx-action/releases)
- [Commits](https://github.com/docker/setup-buildx-action/compare/v1...v2)

---
updated-dependencies:
- dependency-name: docker/setup-buildx-action
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
2022-06-01 20:17:31 +00:00
dependabot[bot]
f41231f017 Bump docker/build-push-action from 2 to 3
Bumps [docker/build-push-action](https://github.com/docker/build-push-action) from 2 to 3.
- [Release notes](https://github.com/docker/build-push-action/releases)
- [Commits](https://github.com/docker/build-push-action/compare/v2...v3)

---
updated-dependencies:
- dependency-name: docker/build-push-action
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
2022-06-01 20:17:28 +00:00
dependabot[bot]
ae1fb76d13 Bump tj-actions/changed-files from 19 to 22.1
Bumps [tj-actions/changed-files](https://github.com/tj-actions/changed-files) from 19 to 22.1.
- [Release notes](https://github.com/tj-actions/changed-files/releases)
- [Changelog](https://github.com/tj-actions/changed-files/blob/main/HISTORY.md)
- [Commits](https://github.com/tj-actions/changed-files/compare/v19...v22.1)

---
updated-dependencies:
- dependency-name: tj-actions/changed-files
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
2022-06-01 20:17:25 +00:00
dependabot[bot]
fa0023223f Bump docker/login-action from 1 to 2
Bumps [docker/login-action](https://github.com/docker/login-action) from 1 to 2.
- [Release notes](https://github.com/docker/login-action/releases)
- [Commits](https://github.com/docker/login-action/compare/v1...v2)

---
updated-dependencies:
- dependency-name: docker/login-action
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
2022-06-01 20:17:21 +00:00
Michael Shamoon
1c80fd17fd Reorganize e2e tests 2022-06-01 12:37:43 -07:00
Paperless-ngx Translation Bot [bot]
48cb347198 New Crowdin updates (#959)
* New translations messages.xlf (Portuguese)
[ci skip]

* New translations messages.xlf (Portuguese)
[ci skip]

* New translations messages.xlf (Polish)
[ci skip]

* New translations messages.xlf (Italian)
[ci skip]

* New translations messages.xlf (Luxembourgish)
[ci skip]

* New translations messages.xlf (Portuguese, Brazilian)
[ci skip]

* New translations messages.xlf (Chinese Simplified)
[ci skip]

* New translations messages.xlf (Turkish)
[ci skip]

* New translations messages.xlf (Swedish)
[ci skip]

* New translations messages.xlf (Slovenian)
[ci skip]

* New translations messages.xlf (Slovak)
[ci skip]

* New translations messages.xlf (Portuguese)
[ci skip]

* New translations messages.xlf (Dutch)
[ci skip]

* New translations messages.xlf (Hebrew)
[ci skip]

* New translations messages.xlf (Danish)
[ci skip]

* New translations messages.xlf (Finnish)
[ci skip]

* New translations messages.xlf (Greek)
[ci skip]

* New translations messages.xlf (German)
[ci skip]

* New translations messages.xlf (Czech)
[ci skip]

* New translations messages.xlf (Belarusian)
[ci skip]

* New translations messages.xlf (Spanish)
[ci skip]

* New translations messages.xlf (Romanian)
[ci skip]

* New translations messages.xlf (Russian)
[ci skip]

* New translations messages.xlf (French)
[ci skip]

* New translations messages.xlf (Serbian (Latin))
[ci skip]

* New translations messages.xlf (Arabic, Saudi Arabia)
[ci skip]

* New translations messages.xlf (Polish)
[ci skip]

* New translations messages.xlf (Italian)
[ci skip]

* New translations messages.xlf (Luxembourgish)
[ci skip]

* New translations messages.xlf (Portuguese, Brazilian)
[ci skip]

* New translations messages.xlf (Chinese Simplified)
[ci skip]

* New translations messages.xlf (Turkish)
[ci skip]

* New translations messages.xlf (Swedish)
[ci skip]

* New translations messages.xlf (Slovenian)
[ci skip]

* New translations messages.xlf (Slovak)
[ci skip]

* New translations messages.xlf (Portuguese)
[ci skip]

* New translations messages.xlf (Dutch)
[ci skip]

* New translations messages.xlf (Hebrew)
[ci skip]

* New translations messages.xlf (Danish)
[ci skip]

* New translations messages.xlf (Finnish)
[ci skip]

* New translations messages.xlf (Greek)
[ci skip]

* New translations messages.xlf (German)
[ci skip]

* New translations messages.xlf (Czech)
[ci skip]

* New translations messages.xlf (Belarusian)
[ci skip]

* New translations messages.xlf (Spanish)
[ci skip]

* New translations messages.xlf (Romanian)
[ci skip]

* New translations messages.xlf (Russian)
[ci skip]

* New translations messages.xlf (French)
[ci skip]

* New translations messages.xlf (Serbian (Latin))
[ci skip]

* New translations messages.xlf (Arabic, Saudi Arabia)
[ci skip]

* New translations messages.xlf (Polish)
[ci skip]

* New translations django.po (Dutch)
[ci skip]

* New translations django.po (French)
[ci skip]

* New translations django.po (Romanian)
[ci skip]

* New translations django.po (Spanish)
[ci skip]

* New translations django.po (Belarusian)
[ci skip]

* New translations django.po (Czech)
[ci skip]

* New translations django.po (Greek)
[ci skip]

* New translations django.po (Finnish)
[ci skip]

* New translations django.po (Hebrew)
[ci skip]

* New translations django.po (Italian)
[ci skip]

* New translations django.po (Polish)
[ci skip]

* New translations django.po (Serbian (Latin))
[ci skip]

* New translations django.po (Portuguese)
[ci skip]

* New translations django.po (Russian)
[ci skip]

* New translations django.po (Slovak)
[ci skip]

* New translations django.po (Slovenian)
[ci skip]

* New translations django.po (Swedish)
[ci skip]

* New translations django.po (Turkish)
[ci skip]

* New translations django.po (Chinese Simplified)
[ci skip]

* New translations django.po (Portuguese, Brazilian)
[ci skip]

* New translations django.po (Luxembourgish)
[ci skip]

* New translations django.po (Danish)
[ci skip]

* New translations messages.xlf (Arabic, Saudi Arabia)
[ci skip]

* New translations messages.xlf (Danish)
[ci skip]

* New translations messages.xlf (Greek)
[ci skip]

* New translations messages.xlf (Serbian (Latin))
[ci skip]

* New translations messages.xlf (French)
[ci skip]

* New translations django.po (German)
[ci skip]

* New translations messages.xlf (Russian)
[ci skip]

* New translations messages.xlf (Romanian)
[ci skip]

* New translations messages.xlf (Spanish)
[ci skip]

* New translations messages.xlf (Belarusian)
[ci skip]

* New translations messages.xlf (Czech)
[ci skip]

* New translations messages.xlf (German)
[ci skip]

* New translations messages.xlf (Finnish)
[ci skip]

* New translations messages.xlf (Luxembourgish)
[ci skip]

* New translations messages.xlf (Hebrew)
[ci skip]

* New translations messages.xlf (Italian)
[ci skip]

* New translations messages.xlf (Dutch)
[ci skip]

* New translations messages.xlf (Portuguese)
[ci skip]

* New translations messages.xlf (Slovak)
[ci skip]

* New translations messages.xlf (Slovenian)
[ci skip]

* New translations messages.xlf (Swedish)
[ci skip]

* New translations messages.xlf (Turkish)
[ci skip]

* New translations messages.xlf (Chinese Simplified)
[ci skip]

* New translations messages.xlf (Portuguese, Brazilian)
[ci skip]

* New translations django.po (Arabic, Saudi Arabia)
[ci skip]

* New translations messages.xlf (Polish)
[ci skip]

* New translations messages.xlf (Italian)
[ci skip]

* New translations messages.xlf (Luxembourgish)
[ci skip]

* New translations messages.xlf (Portuguese, Brazilian)
[ci skip]

* New translations messages.xlf (Chinese Simplified)
[ci skip]

* New translations messages.xlf (Turkish)
[ci skip]

* New translations messages.xlf (Swedish)
[ci skip]

* New translations messages.xlf (Slovenian)
[ci skip]

* New translations messages.xlf (Slovak)
[ci skip]

* New translations messages.xlf (Portuguese)
[ci skip]

* New translations messages.xlf (Dutch)
[ci skip]

* New translations messages.xlf (Hebrew)
[ci skip]

* New translations messages.xlf (Danish)
[ci skip]

* New translations messages.xlf (Finnish)
[ci skip]

* New translations messages.xlf (Greek)
[ci skip]

* New translations messages.xlf (German)
[ci skip]

* New translations messages.xlf (Czech)
[ci skip]

* New translations messages.xlf (Belarusian)
[ci skip]

* New translations messages.xlf (Spanish)
[ci skip]

* New translations messages.xlf (Romanian)
[ci skip]

* New translations messages.xlf (Russian)
[ci skip]

* New translations messages.xlf (French)
[ci skip]

* New translations messages.xlf (Serbian (Latin))
[ci skip]

* New translations messages.xlf (Arabic, Saudi Arabia)
[ci skip]

* New translations messages.xlf (Italian)
[ci skip]

* New translations messages.xlf (Italian)
[ci skip]

* New translations messages.xlf (German)
[ci skip]

* New translations messages.xlf (Polish)
[ci skip]

* New translations messages.xlf (Finnish)
[ci skip]

* New translations messages.xlf (Swedish)
[ci skip]

* New translations messages.xlf (Slovenian)
[ci skip]

* New translations messages.xlf (Slovak)
[ci skip]

* New translations messages.xlf (Portuguese)
[ci skip]

* New translations messages.xlf (Dutch)
[ci skip]

* New translations messages.xlf (Italian)
[ci skip]

* New translations messages.xlf (Danish)
[ci skip]

* New translations messages.xlf (Hebrew)
[ci skip]

* New translations messages.xlf (Greek)
[ci skip]

* New translations messages.xlf (German)
[ci skip]

* New translations messages.xlf (Czech)
[ci skip]

* New translations messages.xlf (Belarusian)
[ci skip]

* New translations messages.xlf (Spanish)
[ci skip]

* New translations messages.xlf (Romanian)
[ci skip]

* New translations messages.xlf (Russian)
[ci skip]

* New translations messages.xlf (French)
[ci skip]

* New translations messages.xlf (Serbian (Latin))
[ci skip]

* New translations messages.xlf (Turkish)
[ci skip]

* New translations messages.xlf (Chinese Simplified)
[ci skip]

* New translations messages.xlf (Portuguese, Brazilian)
[ci skip]

* New translations messages.xlf (Luxembourgish)
[ci skip]

* New translations messages.xlf (Arabic, Saudi Arabia)
[ci skip]
2022-06-01 10:20:51 -07:00
shamoon
ffd583ed11 Merge pull request #1043 from slankes/qualify_dockerimages
Qualify images hosted by docker.io in compose files
2022-06-01 09:38:14 -07:00
Michael Shamoon
97bbca3aef fix merge conflict 2022-06-01 09:28:26 -07:00
shamoon
06fd92fd27 Merge pull request #1058 from paperless-ngx/bugfix-enable-django-q-debug
Bugfix: Pass debug setting on to django-q
2022-06-01 09:20:38 -07:00
Trenton Holmes
c0e05a7572 If debug mode is enabled, also pass this setting on to django-q 2022-06-01 08:59:20 -07:00
shamoon
2abe6eec84 Merge pull request #1057 from paperless-ngx/bugfix-document-str
Bugfix: Don't assume the document has a title set
2022-06-01 08:28:22 -07:00
Trenton Holmes
0b6e73840a Fixes formatting 2022-06-01 08:20:04 -07:00
Trenton Holmes
1707fe8990 Updates the Document str to account for a blank title instead of assuming title will be populated 2022-06-01 08:03:38 -07:00
Trenton Holmes
9335b0779c Update no content warning to be more clear it is missing OCR content
Co-authored-by: tooomm <tooomm@users.noreply.github.com>
2022-06-01 07:44:48 -07:00
Trenton Holmes
277b521fad Removes unused import 2022-06-01 07:43:46 -07:00
Trenton Holmes
af1b634d6d Updates to use pathlib instead of os.path 2022-05-31 08:42:11 -07:00
Sven Lankes
cc19008961 We want gotenberg 7.4 and not pin to 7.4.4 2022-05-31 09:48:01 +02:00
Trenton Holmes
be304e37b4 Refines the sanity check header, fixes other test issues 2022-05-30 18:21:24 -07:00
Trenton Holmes
0a34a4a7ad Makes the sanity check messages better for users 2022-05-30 17:03:33 -07:00
Oliver Rümpelein
898564c8d8 Add migration for new rule. 2022-05-29 15:22:50 +02:00
Oliver Rümpelein
708638b97f Merge remote-tracking branch 'upstream/dev' into feature-mailActionCustomTag 2022-05-29 13:51:54 +02:00
Sven Lankes
458e857956 use qualified hostnames for images stored on docker.io 2022-05-29 13:50:58 +02:00
Oliver Rümpelein
ac62bcb7ba Clear cache instead of working around it. 2022-05-27 22:51:32 +02:00
Michael Shamoon
6b1c50b051 Simple e2e test for Tasks component 2022-05-27 01:11:20 -07:00
Michael Shamoon
d4a5376f73 automatically refresh tasks on file socket messages too 2022-05-27 00:45:50 -07:00
Michael Shamoon
71b34aa3bd fix result on empty task 2022-05-27 00:45:50 -07:00
Michael Shamoon
6b4d8b18e0 show failed tasks badge in sidebar 2022-05-27 00:45:50 -07:00
Michael Shamoon
66b2013d23 tasks usability improvements 2022-05-27 00:45:50 -07:00
Michael Shamoon
dc86993c84 mobile improvements, fix dismiss 1 task 2022-05-26 22:15:56 -07:00
Michael Shamoon
00a5c13001 Update 1021_paperlesstask.py 2022-05-26 21:58:02 -07:00
Michael Shamoon
0e34923114 Revert "Merge branch 'feature-frontend-task-queue' of github.com:paperless-ngx/paperless-ngx into feature-frontend-task-queue"
This reverts commit 011164bc32, reversing
changes made to 0a43ce9ced.
2022-05-26 21:24:55 -07:00
Michael Shamoon
011164bc32 Merge branch 'feature-frontend-task-queue' of github.com:paperless-ngx/paperless-ngx into feature-frontend-task-queue 2022-05-26 21:24:45 -07:00
Michael Shamoon
0a43ce9ced fix merge 2022-05-26 21:21:29 -07:00
Michael Shamoon
d925fb38ce Basic tasks frontend view
Update app-frame.component.ts
2022-05-26 21:19:16 -07:00
Michael Shamoon
3dc617277f Task results popover
fix merge
2022-05-26 21:18:39 -07:00
Michael Shamoon
096af09fc4 Basic tasks frontend view
Update app-frame.component.ts
2022-05-26 21:09:11 -07:00
Michael Shamoon
f97f9b857b Task results popover 2022-05-26 21:09:08 -07:00
Michael Shamoon
5c0829b052 Better tasks api endpoint 2022-05-26 21:09:05 -07:00
Michael Shamoon
aa999b34e2 Update frontend for reworked tasks api endpoint 2022-05-26 21:09:05 -07:00
Michael Shamoon
0a06c291e2 acknowledge_tasks endpoint & basic UI
Update tasks.service.ts
2022-05-26 21:09:04 -07:00
Michael Shamoon
4bbaf5f89c update post_save signal receiver 2022-05-26 21:09:04 -07:00
Michael Shamoon
f88e070455 Toggle functionality for tasks list 2022-05-26 21:09:01 -07:00
Michael Shamoon
5c980c31be PaperlessTask and consumption_tasks endpoint 2022-05-26 21:05:24 -07:00
shamoon
9eee37bc68 Merge branch 'dev' into feature-created-date 2022-05-26 14:28:33 -07:00
Quinn Casey
a4927477fb Merge pull request #1008 from paperless-ngx/bugfix-max-pixel-setting
Bugfix: Corrects the setting of max pixel size for OCR
2022-05-26 09:12:24 -07:00
Quinn Casey
d0a6c6a2f3 Merge pull request #1007 from paperless-ngx/improve-date-paste-input
Feature: better date pasting
2022-05-26 08:50:08 -07:00
Quinn Casey
92757c5d8c Merge pull request #1017 from paperless-ngx/alphabetize-tags
Enhancement: Alphabetize tags by default
2022-05-26 08:42:55 -07:00
Oliver Rümpelein
0cc7765f2b Revert accidentally included changes. 2022-05-26 17:40:11 +02:00
Quinn Casey
ee1ef4ff56 Merge pull request #1000 from paperless-ngx/rework-query-params-logic
Fix: Rework query params logic
2022-05-26 08:18:43 -07:00
Quinn Casey
b5eed5e043 Merge pull request #1030 from paperless-ngx/feature-reload-language-change
Enhancement: show note on language change and offer reload
2022-05-26 08:12:43 -07:00
Oliver Rümpelein
62a253f571 Merge remote-tracking branch 'upstream/dev' into feature-mailActionCustomTag 2022-05-26 14:05:48 +02:00
Oliver Rümpelein
080a23dd8c Update docs. 2022-05-26 12:42:29 +02:00
Oliver Rümpelein
c90129957e Make test work. 2022-05-26 12:42:20 +02:00
Michael Shamoon
0fa717fe11 Show note on language change and offer reload 2022-05-25 16:06:59 -07:00
Michael Shamoon
e72766a5bf fix global overlay color 2022-05-25 14:47:05 -07:00
Oliver Rümpelein
104a684514 Revert all changes to tests, will need a more structured approach. 2022-05-25 20:47:43 +02:00
Oliver Rümpelein
5a809d7e31 Add first draft implementation, test broken. 2022-05-25 19:23:52 +02:00
tooomm
ce3f6837e9 Link issues, capitalization and minor fixes 2022-05-25 19:23:52 +02:00
tooomm
3ffd2a745b update heading levels for v1.7.0 2022-05-25 19:23:52 +02:00
shamoon
6b9c07b809 Merge pull request #1025 from paperless-ngx/fix-pytest-api-auth
Fix: use `force_authentication` instead of `force_login` for python api tests
2022-05-24 09:59:14 -07:00
Michael Shamoon
d4e2722586 use force_authenticate in api tests 2022-05-23 23:07:49 -07:00
shamoon
1343767295 Merge pull request #1013 from paperless-ngx/chore-manual-updates
Chore: Manually update dependencies
2022-05-23 20:32:23 -07:00
Michael Shamoon
4b4bfc052f Alphabetize tags by default 2022-05-23 20:25:26 -07:00
shamoon
f7539eb931 Merge pull request #1016 from paperless-ngx/more-redis-wait-info
Feature: Include error information when Redis connection fails
2022-05-23 19:12:49 -07:00
Trenton Holmes
efcfecca10 Also output the exception when the Redis ping fails 2022-05-23 16:53:48 -07:00
shamoon
6a3735822d Merge pull request #1009 from dragere/patch-2
Better handle long tags on small cards
2022-05-23 11:51:07 -07:00
Michael Shamoon
5bbcc7f2f7 Better handle long tag names 2022-05-23 11:24:13 -07:00
Michael Shamoon
400f1d37bf Revert "Allow line breaks in Tags"
This reverts commit 14cbcb4af6.
2022-05-23 11:24:08 -07:00
Trenton Holmes
985b774378 Reworks documentation on the max pixels setting 2022-05-23 10:54:41 -07:00
dragere
14cbcb4af6 Allow line breaks in Tags 2022-05-23 19:28:29 +02:00
Trenton Holmes
18ce86407d Manually updates dependencies 2022-05-23 09:31:31 -07:00
Michael Shamoon
d0ee203265 Update saved-view-widget.component.ts
[ci skip]
2022-05-23 01:54:21 -07:00
Trenton Holmes
fc26fe0ac0 Updates to provide the user provided max pixel size to ocrmypdf 2022-05-22 16:56:08 -07:00
Michael Shamoon
0e0cbe3517 Use NgbDateParserFormatter 2022-05-22 14:38:15 -07:00
Michael Shamoon
8e2cb6d416 Strip some characters from pasted date input 2022-05-22 09:03:26 -07:00
Michael Shamoon
73a6e68e03 Fix conflicting rule type 22 2022-05-21 00:22:36 -07:00
Michael Shamoon
48f9cb09af minor refactor query params utils 2022-05-21 00:22:36 -07:00
Michael Shamoon
1c83f489d1 Use 1/0 instead of true/false 2022-05-21 00:22:35 -07:00
Michael Shamoon
f6d78a0044 fix documents list without query params 2022-05-20 23:18:18 -07:00
Michael Shamoon
e60a7df9a2 Refactor query params service 2022-05-20 23:18:18 -07:00
Quinn Casey
feaf2da834 Merge pull request #995 from paperless-ngx/translate-more-tooltips
Fix: add translation for some un-translated tooltips
2022-05-20 06:05:41 -07:00
Michael Shamoon
bf8703deae Update messages.xlf 2022-05-19 23:54:23 -07:00
Michael Shamoon
1997b7b2d9 Mark various tooltips for translation 2022-05-19 23:50:57 -07:00
Quinn Casey
666b938550 Merge pull request #990 from tooomm/patch-2
Docs: Fix headings and add links to PRs in changelog
2022-05-19 17:23:23 -07:00
Michael Shamoon
4e8f546502 Update django.po 2022-05-19 15:24:43 -07:00
Michael Shamoon
5e9f3586cd Update messages.xlf 2022-05-19 15:22:13 -07:00
Markus
69ef26dab0 Feature: Dynamic document storage pathes (#916)
* Added devcontainer

* Add feature storage pathes

* Exclude tests and add versioning

* Check escaping

* Check escaping

* Check quoting

* Echo

* Escape

* Escape :

* Double escape \

* Escaping

* Remove if

* Escape colon

* Missing \

* Esacpe :

* Escape all

* test

* Remove sed

* Fix exclude

* Remove SED command

* Add LD_LIBRARY_PATH

* Adjusted to v1.7

* Updated test-cases

* Remove devcontainer

* Removed internal build-file

* Run pre-commit

* Corrected flak8 error

* Adjusted to v1.7

* Updated test-cases

* Corrected flak8 error

* Adjusted to new plural translations

* Small adjustments due to code-review backend

* Adjusted line-break

* Removed PAPERLESS prefix from settings variables

* Corrected style change due to search+replace

* First documentation draft

* Revert changes to Pipfile

* Add sphinx-autobuild with keep-outdated

* Revert merge error that results in wrong storage path is evaluated

* Adjust styles of generated files ...

* Adds additional testing to cover dynamic storage path functionality

* Remove unnecessary condition

* Add hint to edit storage path dialog

* Correct spelling of pathes to paths

* Minor documentation tweaks

* Minor typo

* improving wrapping of filter editor buttons with new storage path button

* Update .gitignore

* Fix select border radius in non input-groups

* Better storage path edit hint

* Add note to edit storage path dialog re document_renamer

* Add note to bulk edit storage path re document_renamer

* Rename FILTER_STORAGE_DIRECTORY to PATH

* Fix broken filter rule parsing

* Show default storage if unspecified

* Remove note re storage path on bulk edit

* Add basic validation of filename variables

Co-authored-by: Markus Kling <markus@markus-kling.net>
Co-authored-by: Trenton Holmes <holmes.trenton@gmail.com>
Co-authored-by: Michael Shamoon <4887959+shamoon@users.noreply.github.com>
Co-authored-by: Quinn Casey <quinn@quinncasey.com>
2022-05-19 14:42:25 -07:00
tooomm
163231d307 Link issues, capitalization and minor fixes 2022-05-19 23:12:40 +02:00
tooomm
e530750fc6 update heading levels for v1.7.0 2022-05-19 22:05:43 +02:00
Quinn Casey
c3997c9f26 Merge pull request #987 from paperless-ngx/canon-mfp-new-config
Docs: Add link to new config option in scanners.rst
2022-05-18 14:48:30 -07:00
Quinn Casey
6d7defa79e Merge pull request #986 from paperless-ngx/fix-npm-optional-flag
Change npm --no-optional to --omit=optional
2022-05-18 14:42:08 -07:00
Quinn Casey
bc232582df Add link to new config option 2022-05-18 14:30:33 -07:00
Quinn Casey
286affea38 Fix formatting 2022-05-18 14:30:16 -07:00
Quinn Casey
5f5c9e2eb3 Merge branch 'main' into dev 2022-05-18 14:26:36 -07:00
Quinn Casey
de5eaf1c2c Merge pull request #985 from paperless-ngx/fix-changelog-links
Fix links in changelog
2022-05-18 14:25:56 -07:00
Quinn Casey
6f3755684e Merge pull request #984 from eingemaischt/canon-maxify-mb5350
Added Maxify MB5350 Documentation
2022-05-18 14:25:18 -07:00
Quinn Casey
6950daca9a Link to configuration values for Canon MFP 2022-05-18 14:03:43 -07:00
Michael Shamoon
b4de83e348 Change npm --no-optional to --omit=optional 2022-05-18 14:01:19 -07:00
Quinn Casey
83a1a32a5e Fix formatting, typo 2022-05-18 13:53:03 -07:00
Michael Shamoon
3cea4804f8 Update .gitignore
[ci skip]
2022-05-18 13:52:31 -07:00
Michael Shamoon
8ce32003d7 Update changelog.md 2022-05-18 13:38:56 -07:00
Philipp
d3191490d9 Added Maxify MB5350 Documentation 2022-05-18 20:59:10 +02:00
Michael Shamoon
f6d5ba56b1 Update custom.css
[ci skip]
2022-05-18 11:41:36 -07:00
shamoon
998ca64c1e Merge pull request #919 from paperless-ngx/feature-settings-saved-to-db
Feature: frontend settings saved to database
2022-05-18 11:33:17 -07:00
shamoon
eaa33744a6 Merge pull request #982 from qcasey/changelog-to-md
Add `myst-parser` to fix readthedocs
2022-05-18 11:01:59 -07:00
Quinn Casey
c0a47ca999 Add myst-parser 2022-05-18 07:48:24 -07:00
Quinn Casey
22bfab840d Merge pull request #878 from dabenzel/patch-1
[documentation] added iOS Shortcut Link for Uploading PDF to paperless
2022-05-18 07:00:28 -07:00
Michael Shamoon
88b7f8ac1e Use zoneinfo instead of tz
Co-Authored-By: Trenton Holmes <797416+stumpylog@users.noreply.github.com>
2022-05-18 03:25:02 -07:00
shamoon
6fbe4404f5 Update api.rst 2022-05-18 03:25:02 -07:00
Michael Shamoon
d5e340d0f6 Consolidate date adapter 2022-05-18 03:25:02 -07:00
Michael Shamoon
94954eeba3 created_date error display 2022-05-18 03:25:02 -07:00
Michael Shamoon
b2911b2eba use created_date in all of frontend 2022-05-18 03:25:02 -07:00
Michael Shamoon
c398f22e76 fix docs update endpoint 2022-05-18 03:25:02 -07:00
Michael Shamoon
063f6c1d5a only pass created_date from frontend 2022-05-18 03:25:02 -07:00
Michael Shamoon
2ca691d3b8 use created_date 2022-05-18 03:25:02 -07:00
shamoon
f2086b3a90 Update shortcut link 2022-05-18 03:19:41 -07:00
Philipp
bb15b744c8 Add "Created" as additional (optional) parameter for post_documents (#965)
* Added "created" as optional parameter for post_documents.

* Fixed Conflict

* After Black Reformatting

* Run "add-trailing-comma"

* The right order between black and trailing comma is important....

* Added required=False

* Adds unit test for optional created in document api POST

* Fixes adding of settings override

* And a mis-added print, sigh

Co-authored-by: Philipp <philipp@invalid.invalid>
Co-authored-by: Trenton Holmes <holmes.trenton@gmail.com>
2022-05-18 02:56:32 -07:00
shamoon
f1e99de59a Merge pull request #979 from paperless-ngx/fix-978
Fix: Title is changed after switching doc quickly
2022-05-18 02:55:24 -07:00
Michael Shamoon
e0999c7ba4 pull frontend lang setting from db if set 2022-05-18 02:41:15 -07:00
Michael Shamoon
89c5aac9ed tap ui settings get to avoid dup 2022-05-17 16:12:59 -07:00
Michael Shamoon
4a7c9a6050 Update settings e2e fixture 2022-05-17 11:14:21 -07:00
Michael Shamoon
e94ce3102e Correct translation string locations 2022-05-17 11:14:21 -07:00
Michael Shamoon
0225faddbb Add ui_settings to exporter 2022-05-17 11:13:58 -07:00
Trenton Holmes
fb10d3a5be Removes accidental printing left in testing 2022-05-17 11:13:58 -07:00
Trenton Holmes
0613e3ab12 Makes minor improvements to ui_settings API testing 2022-05-17 11:13:58 -07:00
Michael Shamoon
b21edde1bc Code suggestions
Co-Authored-By: Trenton Holmes <797416+stumpylog@users.noreply.github.com>
2022-05-17 11:13:58 -07:00
Michael Shamoon
1953a8ecb7 Note JSON1 extension requirement on bare metal installs 2022-05-17 11:13:58 -07:00
Michael Shamoon
c84b592543 Update frontend strings 2022-05-17 11:13:58 -07:00
Michael Shamoon
53f905b88b basic python tests 2022-05-17 11:13:19 -07:00
Michael Shamoon
d057a5076c Remove post_save receiver 2022-05-17 11:13:19 -07:00
Michael Shamoon
bcb9c6ccb0 Properly get username & display name 2022-05-17 11:13:19 -07:00
Michael Shamoon
96f86adfb8 PaperlessUiSettings data object 2022-05-17 11:13:19 -07:00
Michael Shamoon
de89f75707 Refactor to UiSettings 2022-05-17 11:11:39 -07:00
Michael Shamoon
b2307d911e update e2e tests for settings initialization 2022-05-17 11:11:39 -07:00
Michael Shamoon
35a558ec01 include language in db settings 2022-05-17 11:11:39 -07:00
Michael Shamoon
2e97c0a5fb Automatic migration to database 2022-05-17 11:11:39 -07:00
Michael Shamoon
7d9575b7fd Use app initializer to wait on settings 2022-05-17 11:11:38 -07:00
Michael Shamoon
321e0ced2a fix key constraint error 2022-05-17 11:11:38 -07:00
Michael Shamoon
a697eb8530 Basic frontend settings retrieval 2022-05-17 11:11:38 -07:00
Michael Shamoon
4b37c1963b skeleton frontend_settings api endpoint 2022-05-17 11:11:38 -07:00
Michael Shamoon
8f2687e390 frontend settings db migration 2022-05-17 11:11:38 -07:00
Michael Shamoon
c0f799a807 Update settings.service.ts 2022-05-17 11:11:38 -07:00
shamoon
abc5bd98b4 Merge pull request #956 from paperless-ngx/fix-warn-max-open-docs
Fix: warn when closing a document with unsaved changes due to max open docs
2022-05-17 10:43:10 -07:00
Michael Shamoon
a51893c849 Manually dirty check title on doc change 2022-05-17 10:36:43 -07:00
Michael Shamoon
79e218d00a Fix title subscription fires even after doc change 2022-05-17 09:59:14 -07:00
Trenton Holmes
9ae20a6bec Merge pull request #953 from paperless-ngx/bugfix-intoify-debounce
Bugfix: Adds configurable intoify debounce time
2022-05-17 09:25:29 -07:00
Michael Shamoon
2f739ff0b3 close button color with light primary only for toasts 2022-05-17 09:09:38 -07:00
Trenton Holmes
e0a8f4df0d Adds troubleshooting and missing documentation for inotify and polling configuration 2022-05-17 08:56:52 -07:00
shamoon
347d7c07ef Merge pull request #942 from paperless-ngx/bugfix-date-format
Bugfix: Fixes document filename date off by 1 issue
2022-05-16 21:47:56 -07:00
shamoon
42e3cf821b Merge pull request #943 from paperless-ngx/feature-seperate-library-workflow
Feature:  Move installer library images to new workflow
2022-05-16 21:46:35 -07:00
shamoon
574f1be067 Merge pull request #973 from paperless-ngx/feature-chore-deps-update
Chore: Manually update all Python dependencies
2022-05-16 17:25:28 -07:00
Trenton Holmes
cbde0e0286 Manually updates dependency files 2022-05-16 16:05:40 -07:00
benzel
11012c6be1 Update docs/scanners.rst
Co-authored-by: shamoon <4887959+shamoon@users.noreply.github.com>
2022-05-16 21:44:34 +02:00
shamoon
432bd83188 Merge pull request #962 from paperless-ngx/add-MIME-pdf-check
fixes #949: change to MIME detection for files
2022-05-16 10:40:43 -07:00
Florian Brandes
f8adfa9873 fixes #949: change to MIME detection for files
Signed-off-by: Florian Brandes <florian.brandes@posteo.de>
2022-05-16 17:29:29 +02:00
Michael Shamoon
1efd226f75 let OpenDocumentsService handle nav 2022-05-15 23:44:29 -07:00
Michael Shamoon
ba1bb95935 Update messages.xlf 2022-05-15 23:44:28 -07:00
Michael Shamoon
f5e740f2ec Warn on closing edited doc due to max open docs 2022-05-15 22:55:25 -07:00
benzel
98be7b227f Update scanners.rst 2022-05-15 21:10:03 +02:00
Trenton Holmes
f07cfd4f51 Adds configuration variable to the inotify debounce timing 2022-05-15 11:48:12 -07:00
Trenton Holmes
029d81122b Makes the workflow triggers more specific 2022-05-15 11:25:14 -07:00
shamoon
26eb7ecdb5 Merge pull request #948 from Berjou/docs-typo
docs: fix some typos
2022-05-14 16:00:32 -07:00
Maxime Joubert
3cf3ea4e20 docs: fix some typos 2022-05-15 00:52:37 +02:00
shamoon
84a2937d31 Merge pull request #946 from tooomm/patch-1
[Docs] Fix 2 small typos
2022-05-14 09:11:04 -07:00
Trenton Holmes
1d1f3bde96 Moves the asserts to be closer together 2022-05-14 08:20:55 -07:00
tooomm
329d81ec64 wording 2022-05-14 17:05:52 +02:00
tooomm
c725f50f07 one more 2022-05-14 15:50:38 +02:00
tooomm
463560c929 small typos 2022-05-14 15:45:03 +02:00
Paperless-ngx Translation Bot [bot]
c7412deb77 New Crowdin updates (#911)
* New translations messages.xlf (French)
[ci skip]

* New translations messages.xlf (Slovenian)
[ci skip]

* New translations messages.xlf (Polish)
[ci skip]

* New translations messages.xlf (Italian)
[ci skip]

* New translations messages.xlf (Luxembourgish)
[ci skip]

* New translations messages.xlf (Portuguese, Brazilian)
[ci skip]

* New translations messages.xlf (Chinese Simplified)
[ci skip]

* New translations messages.xlf (Turkish)
[ci skip]

* New translations messages.xlf (Swedish)
[ci skip]

* New translations messages.xlf (Slovenian)
[ci skip]

* New translations messages.xlf (Slovak)
[ci skip]

* New translations messages.xlf (Portuguese)
[ci skip]

* New translations messages.xlf (Dutch)
[ci skip]

* New translations messages.xlf (Hebrew)
[ci skip]

* New translations messages.xlf (Danish)
[ci skip]

* New translations messages.xlf (Finnish)
[ci skip]

* New translations messages.xlf (Greek)
[ci skip]

* New translations messages.xlf (German)
[ci skip]

* New translations messages.xlf (Czech)
[ci skip]

* New translations messages.xlf (Belarusian)
[ci skip]

* New translations messages.xlf (Spanish)
[ci skip]

* New translations messages.xlf (Romanian)
[ci skip]

* New translations messages.xlf (Russian)
[ci skip]

* New translations messages.xlf (French)
[ci skip]

* New translations messages.xlf (Serbian (Latin))
[ci skip]

* New translations messages.xlf (Arabic, Saudi Arabia)
[ci skip]

* New translations django.po (Polish)
[ci skip]

* New translations django.po (Serbian (Latin))
[ci skip]

* New translations messages.xlf (Polish)
[ci skip]

* New translations messages.xlf (Italian)
[ci skip]

* New translations messages.xlf (Luxembourgish)
[ci skip]

* New translations messages.xlf (Portuguese, Brazilian)
[ci skip]

* New translations messages.xlf (Chinese Simplified)
[ci skip]

* New translations messages.xlf (Turkish)
[ci skip]

* New translations messages.xlf (Swedish)
[ci skip]

* New translations messages.xlf (Slovenian)
[ci skip]

* New translations messages.xlf (Slovak)
[ci skip]

* New translations messages.xlf (Portuguese)
[ci skip]

* New translations messages.xlf (Dutch)
[ci skip]

* New translations messages.xlf (Hebrew)
[ci skip]

* New translations messages.xlf (Danish)
[ci skip]

* New translations messages.xlf (Finnish)
[ci skip]

* New translations messages.xlf (Greek)
[ci skip]

* New translations messages.xlf (German)
[ci skip]

* New translations messages.xlf (Czech)
[ci skip]

* New translations messages.xlf (Belarusian)
[ci skip]

* New translations messages.xlf (Spanish)
[ci skip]

* New translations messages.xlf (Romanian)
[ci skip]

* New translations messages.xlf (Russian)
[ci skip]

* New translations messages.xlf (French)
[ci skip]

* New translations messages.xlf (Serbian (Latin))
[ci skip]

* New translations messages.xlf (Arabic, Saudi Arabia)
[ci skip]

* New translations messages.xlf (Polish)
[ci skip]

* New translations messages.xlf (Italian)
[ci skip]

* New translations messages.xlf (Luxembourgish)
[ci skip]

* New translations messages.xlf (Portuguese, Brazilian)
[ci skip]

* New translations messages.xlf (Chinese Simplified)
[ci skip]

* New translations messages.xlf (Turkish)
[ci skip]

* New translations messages.xlf (Swedish)
[ci skip]

* New translations messages.xlf (Slovenian)
[ci skip]

* New translations messages.xlf (Slovak)
[ci skip]

* New translations messages.xlf (Portuguese)
[ci skip]

* New translations messages.xlf (Dutch)
[ci skip]

* New translations messages.xlf (Hebrew)
[ci skip]

* New translations messages.xlf (Danish)
[ci skip]

* New translations messages.xlf (Finnish)
[ci skip]

* New translations messages.xlf (Greek)
[ci skip]

* New translations messages.xlf (German)
[ci skip]

* New translations messages.xlf (Czech)
[ci skip]

* New translations messages.xlf (Belarusian)
[ci skip]

* New translations messages.xlf (Spanish)
[ci skip]

* New translations messages.xlf (Romanian)
[ci skip]

* New translations messages.xlf (Russian)
[ci skip]

* New translations messages.xlf (French)
[ci skip]

* New translations messages.xlf (Serbian (Latin))
[ci skip]

* New translations messages.xlf (Arabic, Saudi Arabia)
[ci skip]

Co-authored-by: Michael Shamoon <4887959+shamoon@users.noreply.github.com>
2022-05-13 20:34:51 -07:00
Michael Shamoon
9ed6c78466 Update date.ts
[ci skip]
2022-05-13 11:52:05 -07:00
shamoon
9a1bd9637c Merge pull request #935 from qcasey/changelog-to-md
Convert Changelog to markdown, auto-commit future changelogs
2022-05-13 09:29:07 -07:00
Trenton Holmes
87fd18bee1 Seperates out the library image building into a new, minimal workflow 2022-05-13 09:21:26 -07:00
Trenton Holmes
f3dced3199 Fixes Document public filename so it will use the local date instead of UTC date 2022-05-13 09:10:36 -07:00
shamoon
b36989e8e4 Merge pull request #941 from tooomm/patch-1
[Readme] Fix typo
2022-05-13 08:38:45 -07:00
tooomm
95c45b90a8 fix typo 2022-05-13 17:31:02 +02:00
Michael Shamoon
0bdc132dcf Update messages.xlf
[ci skip]
2022-05-13 08:30:41 -07:00
Quinn Casey
e450391d9b Add links to usernames and PR #s
Co-authored-by: shamoon <4887959+shamoon@users.noreply.github.com>
2022-05-13 07:46:49 -07:00
Quinn Casey
38f4bf4e28 Merge pull request #939 from paperless-ngx/fix-management-pages-plurals
Fix: management pages plurals incorrect in other languages
2022-05-13 07:45:41 -07:00
Quinn Casey
109b0ea78b Merge pull request #933 from paperless-ngx/1.7.1-frontend-css-tweaks
Fix: v1.7.1 frontend visual fixes
2022-05-13 07:44:28 -07:00
Michael Shamoon
5061feb7bc Update messages.xlf 2022-05-12 20:39:04 -07:00
Michael Shamoon
52480e0bc4 Use explicit plural strings on management pages 2022-05-12 20:34:32 -07:00
Michael Shamoon
109dd45b56 Update messages.xlf
[ci skip]
2022-05-12 20:32:17 -07:00
Michael Shamoon
c8da513d97 Hide text on large cards on tiny screens 2022-05-12 20:22:40 -07:00
Quinn Casey
f3d6fcb52b Merge pull request #920 from paperless-ngx/frontend-asn-empty
Feature: allow all ASN filtering functions
2022-05-12 10:28:10 -07:00
Quinn Casey
2decae6586 Merge pull request #930 from paperless-ngx/fix-unassigned-filtering-query-params
Fix: unassigned query params ignored
2022-05-12 09:53:00 -07:00
Michael Shamoon
3d5bcd9d75 Visible bg & text color changes on ng-select 2022-05-11 23:20:21 -07:00
Michael Shamoon
b391dd6a3f Improve mobile filter editor layout with long languages 2022-05-11 23:20:21 -07:00
Quinn Casey
c126cf2bc1 Merge pull request #924 from vlcty/enable-ipv6
gunicorn: Allow IPv6 sockets
2022-05-11 16:04:06 -07:00
Michael Shamoon
fcb5beb617 Fix unassigned query params ignored 2022-05-11 15:15:06 -07:00
Michael Shamoon
dad141726c Fix disabled input bg color 2022-05-11 14:44:02 -07:00
Michael Shamoon
48637188a7 Handle all ASN filtering rules 2022-05-11 14:44:02 -07:00
Quinn Casey
5d063e8449 Merge pull request #925 from paperless-ngx/chore-remote-version-tests
Chore: Add testing for remote version checking
2022-05-11 14:16:46 -07:00
Trenton Holmes
2b8a03e93c Adds unit testing for remote version getting 2022-05-11 12:59:38 -07:00
Josef 'veloc1ty' Stautner
213665cea2 gunicorn: Allow ipv6 sockets 2022-05-11 21:00:00 +02:00
shamoon
d230431227 Merge pull request #923 from paperless-ngx/fix-queryparams-comma-splitting
Fix: allow commas in non-multi rules query params
2022-05-11 11:15:39 -07:00
Michael Shamoon
2040c9fe41 allow commas in non-multi rules query params 2022-05-11 10:26:17 -07:00
shamoon
b49821a9f4 Merge pull request #921 from lippoliv/fix-update-notice-typo
fix duplicate v in update notification popup
2022-05-10 23:33:12 -07:00
Oliver Lippert
1701b0afed fix typo in update notification popup
seems like appRemoteVersion.version brings it's own "v"
2022-05-11 08:26:24 +02:00
Michael Shamoon
7785431152 ASN 'is null' from frontend 2022-05-10 21:51:29 -07:00
shamoon
b325233b2d Merge pull request #883 from paperless-ngx/feature-version-export-import
Fix: Include version in export for better error messages
2022-05-10 19:49:46 -07:00
Quinn Casey
3baf29a6b7 Use currently... importing... instead of "vs" 2022-05-10 17:41:09 -07:00
shamoon
2510216f21 Merge pull request #899 from paperless-ngx/feature-dashboard-loading-indicators
Feature: initial app loading indicators
2022-05-10 17:01:37 -07:00
Quinn Casey
e4d7ae9718 Merge pull request #905 from paperless-ngx/qol-changes
Chore: Minor improvements for quality of life
2022-05-10 17:01:01 -07:00
Michael Shamoon
596fabda5d Update environment.prod.ts 2022-05-10 16:48:59 -07:00
Michael Shamoon
e95f34ae13 Merge branch 'main' into dev 2022-05-10 16:47:31 -07:00
shamoon
169cb9424f Merge pull request #903 from paperless-ngx/bugfix-superuser-command
Bugfix: Superuser Management Won't Reset Password
2022-05-10 16:46:14 -07:00
shamoon
536576518e Merge pull request #721 from paperless-ngx/bug-fix-date-ignore
Fix Ignore Date Parsing
2022-05-10 16:45:58 -07:00
Quinn Casey
1bf36b6461 Merge pull request #918 from paperless-ngx/manual-dep-updates
Chore: Manually update Python dependencies
2022-05-10 16:10:23 -07:00
Trenton Holmes
58ab269d3d Manually re-locks dependencies 2022-05-10 11:20:00 -07:00
Trenton Holmes
7cbb73be7a Minor improvements for quality of life 2022-05-09 12:05:29 -07:00
Trenton Holmes
cc54368658 Removes unused imports from test case 2022-05-09 09:49:11 -07:00
Trenton Holmes
4fd075aafa Updates the superuser management command to better handle existing super users 2022-05-09 09:38:17 -07:00
Trenton Holmes
1817d014ef Fixes missing f on an f-string 2022-05-08 16:57:35 -07:00
Trenton Holmes
8f1f0f5475 Further updates documentation to note a date sep string is needed 2022-05-08 16:57:35 -07:00
Trenton Holmes
b406a2430d Updates the documentation for ignoring dates 2022-05-08 16:57:35 -07:00
Trenton Holmes
431edb0e67 Updates the documentation for ignore dates 2022-05-08 16:57:35 -07:00
Trenton Holmes
5b96944940 Updates the ignore date parsing to utilize the settings defined date order, instead of guessing a bit 2022-05-08 16:57:35 -07:00
Trenton Holmes
8a6aaf4e2d Adds additional testing for both date parsing and consumed document created date 2022-05-08 16:57:35 -07:00
Michael Shamoon
b30c4275ef dashboard loading indicator, remove duplicate call to saved views 2022-05-08 14:17:11 -07:00
Michael Shamoon
7f7ec625c8 loading indicators for sidebar saved views 2022-05-08 14:16:37 -07:00
Michael Shamoon
010f1f2bd1 loading indicator for dashboard widgets 2022-05-08 09:12:29 -07:00
benzel
f4e8ab27fa Update docs/scanners.rst
Co-authored-by: shamoon <4887959+shamoon@users.noreply.github.com>
2022-05-06 20:48:06 +02:00
Trenton Holmes
915382f2c7 Adds documentation note about version matching 2022-05-05 09:23:15 -07:00
Trenton Holmes
c907d690b7 Improves the output to the user 2022-05-05 09:17:51 -07:00
Trenton Holmes
dd4d903f69 Uses the correct styling for output messages 2022-05-05 07:30:02 -07:00
Trenton Holmes
a823b8f70c Includes a version.json file with the current version in export. On import, catch certain errors and check the version if possible 2022-05-05 07:30:02 -07:00
benzel
ca40e39da4 I have created a shortcut to Upload PDF files
//
2022-05-04 22:22:39 +02:00
366 changed files with 78348 additions and 49396 deletions

View File

@@ -1,6 +1,6 @@
{
"qpdf": {
"version": "10.6.3"
"version": "11.1.1"
},
"jbig2enc": {
"version": "0.29",

View File

@@ -27,6 +27,9 @@ indent_style = space
[*.md]
indent_style = space
[Pipfile.lock]
indent_style = space
# Tests don't get a line width restriction. It's still a good idea to follow
# the 79 character rule, but in the interests of clarity, tests often need to
# violate it.

View File

@@ -13,6 +13,7 @@ body:
- [The troubleshooting documentation](https://paperless-ngx.readthedocs.io/en/latest/troubleshooting.html).
- [The installation instructions](https://paperless-ngx.readthedocs.io/en/latest/setup.html#installation).
- [Existing issues and discussions](https://github.com/paperless-ngx/paperless-ngx/search?q=&type=issues).
- Disable any customer container initialization scripts, if using any
If you encounter issues while installing or configuring Paperless-ngx, please post in the ["Support" section of the discussions](https://github.com/paperless-ngx/paperless-ngx/discussions/new?category=support).
- type: textarea
@@ -41,7 +42,15 @@ body:
id: logs
attributes:
label: Webserver logs
description: If available, post any logs from the web server related to your issue.
description: Logs from the web server related to your issue.
render: bash
validations:
required: true
- type: textarea
id: logs_browser
attributes:
label: Browser logs
description: Logs from the web browser related to your issue, if needed
render: bash
- type: input
id: version
@@ -63,9 +72,11 @@ body:
attributes:
label: Installation method
options:
- Docker
- Docker - official image
- Docker - linuxserver.io image
- Bare metal
- Other (please describe above)
description: Note there are significant differences from the official image and linuxserver.io, please check if your issue is specific to the third-party image.
validations:
required: true
- type: input

View File

@@ -1,3 +1,14 @@
autolabeler:
- label: "bug"
branch:
- '/^fix/'
title:
- "/^fix/i"
- label: "enhancement"
branch:
- '/^feature/'
title:
- "/^feature/i"
categories:
- title: 'Breaking Changes'
labels:
@@ -15,9 +26,15 @@ categories:
- 'chore'
- 'deployment'
- 'translation'
- 'ci-cd'
- title: 'Dependencies'
collapse-after: 3
label: 'dependencies'
- title: 'All App Changes'
labels:
- 'frontend'
- 'backend'
collapse-after: 0
include-labels:
- 'enhancement'
- 'bug'
@@ -25,11 +42,12 @@ include-labels:
- 'deployment'
- 'translation'
- 'dependencies'
replacers: # Changes "Feature: Update checker" to "Update checker"
- search: '/Feature:|Feat:|\[feature\]/gi'
replace: ''
- 'documentation'
- 'frontend'
- 'backend'
- 'ci-cd'
category-template: '### $TITLE'
change-template: '- $TITLE [@$AUTHOR](https://github.com/$AUTHOR) ([#$NUMBER]($URL))'
change-template: '- $TITLE @$AUTHOR ([#$NUMBER]($URL))'
change-title-escapes: '\<*_&#@'
template: |
## paperless-ngx $RESOLVED_VERSION

402
.github/scripts/cleanup-tags.py vendored Normal file
View File

@@ -0,0 +1,402 @@
#!/usr/bin/env python3
import json
import logging
import os
import shutil
import subprocess
from argparse import ArgumentParser
from typing import Dict
from typing import Final
from typing import List
from typing import Optional
from common import get_log_level
from github import ContainerPackage
from github import GithubBranchApi
from github import GithubContainerRegistryApi
logger = logging.getLogger("cleanup-tags")
class DockerManifest2:
"""
Data class wrapping the Docker Image Manifest Version 2.
See https://docs.docker.com/registry/spec/manifest-v2-2/
"""
def __init__(self, data: Dict) -> None:
self._data = data
# This is the sha256: digest string. Corresponds to GitHub API name
# if the package is an untagged package
self.digest = self._data["digest"]
platform_data_os = self._data["platform"]["os"]
platform_arch = self._data["platform"]["architecture"]
platform_variant = self._data["platform"].get(
"variant",
"",
)
self.platform = f"{platform_data_os}/{platform_arch}{platform_variant}"
class RegistryTagsCleaner:
"""
This is the base class for the image registry cleaning. Given a package
name, it will keep all images which are tagged and all untagged images
referred to by a manifest. This results in only images which have been untagged
and cannot be referenced except by their SHA in being removed. None of these
images should be referenced, so it is fine to delete them.
"""
def __init__(
self,
package_name: str,
repo_owner: str,
repo_name: str,
package_api: GithubContainerRegistryApi,
branch_api: Optional[GithubBranchApi],
):
self.actually_delete = False
self.package_api = package_api
self.branch_api = branch_api
self.package_name = package_name
self.repo_owner = repo_owner
self.repo_name = repo_name
self.tags_to_delete: List[str] = []
self.tags_to_keep: List[str] = []
# Get the information about all versions of the given package
# These are active, not deleted, the default returned from the API
self.all_package_versions = self.package_api.get_active_package_versions(
self.package_name,
)
# Get a mapping from a tag like "1.7.0" or "feature-xyz" to the ContainerPackage
# tagged with it. It makes certain lookups easy
self.all_pkgs_tags_to_version: Dict[str, ContainerPackage] = {}
for pkg in self.all_package_versions:
for tag in pkg.tags:
self.all_pkgs_tags_to_version[tag] = pkg
logger.info(
f"Located {len(self.all_package_versions)} versions of package {self.package_name}",
)
self.decide_what_tags_to_keep()
def clean(self):
"""
This method will delete image versions, based on the selected tags to delete
"""
for tag_to_delete in self.tags_to_delete:
package_version_info = self.all_pkgs_tags_to_version[tag_to_delete]
if self.actually_delete:
logger.info(
f"Deleting {tag_to_delete} (id {package_version_info.id})",
)
self.package_api.delete_package_version(
package_version_info,
)
else:
logger.info(
f"Would delete {tag_to_delete} (id {package_version_info.id})",
)
else:
logger.info("No tags to delete")
def clean_untagged(self, is_manifest_image: bool):
"""
This method will delete untagged images, that is those which are not named. It
handles if the image tag is actually a manifest, which points to images that look otherwise
untagged.
"""
def _clean_untagged_manifest():
"""
Handles the deletion of untagged images, but where the package is a manifest, ie a multi
arch image, which means some "untagged" images need to exist still.
Ok, bear with me, these are annoying.
Our images are multi-arch, so the manifest is more like a pointer to a sha256 digest.
These images are untagged, but pointed to, and so should not be removed (or every pull fails).
So for each image getting kept, parse the manifest to find the digest(s) it points to. Then
remove those from the list of untagged images. The final result is the untagged, not pointed to
version which should be safe to remove.
Example:
Tag: ghcr.io/paperless-ngx/paperless-ngx:1.7.1 refers to
amd64: sha256:b9ed4f8753bbf5146547671052d7e91f68cdfc9ef049d06690b2bc866fec2690
armv7: sha256:81605222df4ba4605a2ba4893276e5d08c511231ead1d5da061410e1bbec05c3
arm64: sha256:374cd68db40734b844705bfc38faae84cc4182371de4bebd533a9a365d5e8f3b
each of which appears as untagged image, but isn't really.
So from the list of untagged packages, remove those digests. Once all tags which
are being kept are checked, the remaining untagged packages are actually untagged
with no referrals in a manifest to them.
"""
# Simplify the untagged data, mapping name (which is a digest) to the version
# At the moment, these are the images which APPEAR untagged.
untagged_versions = {}
for x in self.all_package_versions:
if x.untagged:
untagged_versions[x.name] = x
skips = 0
# Parse manifests to locate digests pointed to
for tag in sorted(self.tags_to_keep):
full_name = f"ghcr.io/{self.repo_owner}/{self.package_name}:{tag}"
logger.info(f"Checking manifest for {full_name}")
try:
proc = subprocess.run(
[
shutil.which("docker"),
"manifest",
"inspect",
full_name,
],
capture_output=True,
)
manifest_list = json.loads(proc.stdout)
for manifest_data in manifest_list["manifests"]:
manifest = DockerManifest2(manifest_data)
if manifest.digest in untagged_versions:
logger.info(
f"Skipping deletion of {manifest.digest},"
f" referred to by {full_name}"
f" for {manifest.platform}",
)
del untagged_versions[manifest.digest]
skips += 1
except Exception as err:
self.actually_delete = False
logger.exception(err)
return
logger.info(
f"Skipping deletion of {skips} packages referred to by a manifest",
)
# Delete the untagged and not pointed at packages
logger.info(f"Deleting untagged packages of {self.package_name}")
for to_delete_name in untagged_versions:
to_delete_version = untagged_versions[to_delete_name]
if self.actually_delete:
logger.info(
f"Deleting id {to_delete_version.id} named {to_delete_version.name}",
)
self.package_api.delete_package_version(
to_delete_version,
)
else:
logger.info(
f"Would delete {to_delete_name} (id {to_delete_version.id})",
)
def _clean_untagged_non_manifest():
"""
If the package is not a multi-arch manifest, images without tags are safe to delete.
"""
for package in self.all_package_versions:
if package.untagged:
if self.actually_delete:
logger.info(
f"Deleting id {package.id} named {package.name}",
)
self.package_api.delete_package_version(
package,
)
else:
logger.info(
f"Would delete {package.name} (id {package.id})",
)
else:
logger.info(
f"Not deleting tag {package.tags[0]} of package {self.package_name}",
)
logger.info("Beginning untagged image cleaning")
if is_manifest_image:
_clean_untagged_manifest()
else:
_clean_untagged_non_manifest()
def decide_what_tags_to_keep(self):
"""
This method holds the logic to delete what tags to keep and there fore
what tags to delete.
By default, any image with at least 1 tag will be kept
"""
# By default, keep anything which is tagged
self.tags_to_keep = list(set(self.all_pkgs_tags_to_version.keys()))
class MainImageTagsCleaner(RegistryTagsCleaner):
def decide_what_tags_to_keep(self):
"""
Overrides the default logic for deciding what images to keep. Images tagged as "feature-"
will be removed, if the corresponding branch no longer exists.
"""
# Default to everything gets kept still
super().decide_what_tags_to_keep()
# Locate the feature branches
feature_branches = {}
for branch in self.branch_api.get_branches(
repo=self.repo_name,
):
if branch.name.startswith("feature-"):
logger.debug(f"Found feature branch {branch.name}")
feature_branches[branch.name] = branch
logger.info(f"Located {len(feature_branches)} feature branches")
if not len(feature_branches):
# Our work here is done, delete nothing
return
# Filter to packages which are tagged with feature-*
packages_tagged_feature: List[ContainerPackage] = []
for package in self.all_package_versions:
if package.tag_matches("feature-"):
packages_tagged_feature.append(package)
# Map tags like "feature-xyz" to a ContainerPackage
feature_pkgs_tags_to_versions: Dict[str, ContainerPackage] = {}
for pkg in packages_tagged_feature:
for tag in pkg.tags:
feature_pkgs_tags_to_versions[tag] = pkg
logger.info(
f'Located {len(feature_pkgs_tags_to_versions)} versions of package {self.package_name} tagged "feature-"',
)
# All the feature tags minus all the feature branches leaves us feature tags
# with no corresponding branch
self.tags_to_delete = list(
set(feature_pkgs_tags_to_versions.keys()) - set(feature_branches.keys()),
)
# All the tags minus the set of going to be deleted tags leaves us the
# tags which will be kept around
self.tags_to_keep = list(
set(self.all_pkgs_tags_to_version.keys()) - set(self.tags_to_delete),
)
logger.info(
f"Located {len(self.tags_to_delete)} versions of package {self.package_name} to delete",
)
class LibraryTagsCleaner(RegistryTagsCleaner):
"""
Exists for the off change that someday, the installer library images
will need their own logic
"""
pass
def _main():
parser = ArgumentParser(
description="Using the GitHub API locate and optionally delete container"
" tags which no longer have an associated feature branch",
)
# Requires an affirmative command to actually do a delete
parser.add_argument(
"--delete",
action="store_true",
default=False,
help="If provided, actually delete the container tags",
)
# When a tagged image is updated, the previous version remains, but it no longer tagged
# Add this option to remove them as well
parser.add_argument(
"--untagged",
action="store_true",
default=False,
help="If provided, delete untagged containers as well",
)
# If given, the package is assumed to be a multi-arch manifest. Cache packages are
# not multi-arch, all other types are
parser.add_argument(
"--is-manifest",
action="store_true",
default=False,
help="If provided, the package is assumed to be a multi-arch manifest following schema v2",
)
# Allows configuration of log level for debugging
parser.add_argument(
"--loglevel",
default="info",
help="Configures the logging level",
)
# Get the name of the package being processed this round
parser.add_argument(
"package",
help="The package to process",
)
args = parser.parse_args()
logging.basicConfig(
level=get_log_level(args),
datefmt="%Y-%m-%d %H:%M:%S",
format="%(asctime)s %(levelname)-8s %(message)s",
)
# Must be provided in the environment
repo_owner: Final[str] = os.environ["GITHUB_REPOSITORY_OWNER"]
repo: Final[str] = os.environ["GITHUB_REPOSITORY"]
gh_token: Final[str] = os.environ["TOKEN"]
# Find all branches named feature-*
# Note: Only relevant to the main application, but simpler to
# leave in for all packages
with GithubBranchApi(gh_token) as branch_api:
with GithubContainerRegistryApi(gh_token, repo_owner) as container_api:
if args.package in {"paperless-ngx", "paperless-ngx/builder/cache/app"}:
cleaner = MainImageTagsCleaner(
args.package,
repo_owner,
repo,
container_api,
branch_api,
)
else:
cleaner = LibraryTagsCleaner(
args.package,
repo_owner,
repo,
container_api,
None,
)
# Set if actually doing a delete vs dry run
cleaner.actually_delete = args.delete
# Clean images with tags
cleaner.clean()
# Clean images which are untagged
cleaner.clean_untagged(args.is_manifest)
if __name__ == "__main__":
_main()

View File

@@ -1,4 +1,5 @@
#!/usr/bin/env python3
import logging
def get_image_tag(
@@ -9,7 +10,7 @@ def get_image_tag(
"""
Returns a string representing the normal image for a given package
"""
return f"ghcr.io/{repo_name}/builder/{pkg_name}:{pkg_version}"
return f"ghcr.io/{repo_name.lower()}/builder/{pkg_name}:{pkg_version}"
def get_cache_image_tag(
@@ -24,4 +25,24 @@ def get_cache_image_tag(
Registry type caching is utilized for the builder images, to allow fast
rebuilds, generally almost instant for the same version
"""
return f"ghcr.io/{repo_name}/builder/cache/{pkg_name}:{pkg_version}"
return f"ghcr.io/{repo_name.lower()}/builder/cache/{pkg_name}:{pkg_version}"
def get_log_level(args) -> int:
"""
Returns a logging level, based
:param args:
:return:
"""
levels = {
"critical": logging.CRITICAL,
"error": logging.ERROR,
"warn": logging.WARNING,
"warning": logging.WARNING,
"info": logging.INFO,
"debug": logging.DEBUG,
}
level = levels.get(args.loglevel.lower())
if level is None:
level = logging.INFO
return level

View File

@@ -50,7 +50,6 @@ def _main():
# Default output values
version = None
git_tag = None
extra_config = {}
if args.package in pipfile_data["default"]:
@@ -59,12 +58,6 @@ def _main():
pkg_version = pkg_data["version"].split("==")[-1]
version = pkg_version
# Based on the package, generate the expected Git tag name
if args.package == "pikepdf":
git_tag = f"v{pkg_version}"
elif args.package == "psycopg2":
git_tag = pkg_version.replace(".", "_")
# Any extra/special values needed
if args.package == "pikepdf":
extra_config["qpdf_version"] = build_json["qpdf"]["version"]
@@ -72,8 +65,6 @@ def _main():
elif args.package in build_json:
version = build_json[args.package]["version"]
if "git_tag" in build_json[args.package]:
git_tag = build_json[args.package]["git_tag"]
else:
raise NotImplementedError(args.package)
@@ -81,7 +72,6 @@ def _main():
output = {
"name": args.package,
"version": version,
"git_tag": git_tag,
"image_tag": get_image_tag(repo_name, args.package, version),
"cache_tag": get_cache_image_tag(
repo_name,

274
.github/scripts/github.py vendored Normal file
View File

@@ -0,0 +1,274 @@
#!/usr/bin/env python3
"""
This module contains some useful classes for interacting with the Github API.
The full documentation for the API can be found here: https://docs.github.com/en/rest
Mostly, this focusses on two areas, repo branches and repo packages, as the use case
is cleaning up container images which are no longer referred to.
"""
import functools
import logging
import re
import urllib.parse
from typing import Dict
from typing import List
from typing import Optional
import httpx
logger = logging.getLogger("github-api")
class _GithubApiBase:
"""
A base class for interacting with the Github API. It
will handle the session and setting authorization headers.
"""
def __init__(self, token: str) -> None:
self._token = token
self._client: Optional[httpx.Client] = None
def __enter__(self) -> "_GithubApiBase":
"""
Sets up the required headers for auth and response
type from the API
"""
self._client = httpx.Client()
self._client.headers.update(
{
"Accept": "application/vnd.github.v3+json",
"Authorization": f"token {self._token}",
},
)
return self
def __exit__(self, exc_type, exc_val, exc_tb):
"""
Ensures the authorization token is cleaned up no matter
the reason for the exit
"""
if "Accept" in self._client.headers:
del self._client.headers["Accept"]
if "Authorization" in self._client.headers:
del self._client.headers["Authorization"]
# Close the session as well
self._client.close()
self._client = None
def _read_all_pages(self, endpoint):
"""
Helper function to read all pages of an endpoint, utilizing the
next.url until exhausted. Assumes the endpoint returns a list
"""
internal_data = []
while True:
resp = self._client.get(endpoint)
if resp.status_code == 200:
internal_data += resp.json()
if "next" in resp.links:
endpoint = resp.links["next"]["url"]
else:
logger.debug("Exiting pagination loop")
break
else:
logger.warning(f"Request to {endpoint} return HTTP {resp.status_code}")
resp.raise_for_status()
return internal_data
class _EndpointResponse:
"""
For all endpoint JSON responses, store the full
response data, for ease of extending later, if need be.
"""
def __init__(self, data: Dict) -> None:
self._data = data
class GithubBranch(_EndpointResponse):
"""
Simple wrapper for a repository branch, only extracts name information
for now.
"""
def __init__(self, data: Dict) -> None:
super().__init__(data)
self.name = self._data["name"]
class GithubBranchApi(_GithubApiBase):
"""
Wrapper around branch API.
See https://docs.github.com/en/rest/branches/branches
"""
def __init__(self, token: str) -> None:
super().__init__(token)
self._ENDPOINT = "https://api.github.com/repos/{REPO}/branches"
def get_branches(self, repo: str) -> List[GithubBranch]:
"""
Returns all current branches of the given repository owned by the given
owner or organization.
"""
# The environment GITHUB_REPOSITORY already contains the owner in the correct location
endpoint = self._ENDPOINT.format(REPO=repo)
internal_data = self._read_all_pages(endpoint)
return [GithubBranch(branch) for branch in internal_data]
class ContainerPackage(_EndpointResponse):
"""
Data class wrapping the JSON response from the package related
endpoints
"""
def __init__(self, data: Dict):
super().__init__(data)
# This is a numerical ID, required for interactions with this
# specific package, including deletion of it or restoration
self.id: int = self._data["id"]
# A string name. This might be an actual name or it could be a
# digest string like "sha256:"
self.name: str = self._data["name"]
# URL to the package, including its ID, can be used for deletion
# or restoration without needing to build up a URL ourselves
self.url: str = self._data["url"]
# The list of tags applied to this image. Maybe an empty list
self.tags: List[str] = self._data["metadata"]["container"]["tags"]
@functools.cached_property
def untagged(self) -> bool:
"""
Returns True if the image has no tags applied to it, False otherwise
"""
return len(self.tags) == 0
@functools.cache
def tag_matches(self, pattern: str) -> bool:
"""
Returns True if the image has at least one tag which matches the given regex,
False otherwise
"""
for tag in self.tags:
if re.match(pattern, tag) is not None:
return True
return False
def __repr__(self):
return f"Package {self.name}"
class GithubContainerRegistryApi(_GithubApiBase):
"""
Class wrapper to deal with the Github packages API. This class only deals with
container type packages, the only type published by paperless-ngx.
"""
def __init__(self, token: str, owner_or_org: str) -> None:
super().__init__(token)
self._owner_or_org = owner_or_org
if self._owner_or_org == "paperless-ngx":
# https://docs.github.com/en/rest/packages#get-all-package-versions-for-a-package-owned-by-an-organization
self._PACKAGES_VERSIONS_ENDPOINT = "https://api.github.com/orgs/{ORG}/packages/{PACKAGE_TYPE}/{PACKAGE_NAME}/versions"
# https://docs.github.com/en/rest/packages#delete-package-version-for-an-organization
self._PACKAGE_VERSION_DELETE_ENDPOINT = "https://api.github.com/orgs/{ORG}/packages/{PACKAGE_TYPE}/{PACKAGE_NAME}/versions/{PACKAGE_VERSION_ID}"
else:
# https://docs.github.com/en/rest/packages#get-all-package-versions-for-a-package-owned-by-the-authenticated-user
self._PACKAGES_VERSIONS_ENDPOINT = "https://api.github.com/user/packages/{PACKAGE_TYPE}/{PACKAGE_NAME}/versions"
# https://docs.github.com/en/rest/packages#delete-a-package-version-for-the-authenticated-user
self._PACKAGE_VERSION_DELETE_ENDPOINT = "https://api.github.com/user/packages/{PACKAGE_TYPE}/{PACKAGE_NAME}/versions/{PACKAGE_VERSION_ID}"
self._PACKAGE_VERSION_RESTORE_ENDPOINT = (
f"{self._PACKAGE_VERSION_DELETE_ENDPOINT}/restore"
)
def get_active_package_versions(
self,
package_name: str,
) -> List[ContainerPackage]:
"""
Returns all the versions of a given package (container images) from
the API
"""
package_type: str = "container"
# Need to quote this for slashes in the name
package_name = urllib.parse.quote(package_name, safe="")
endpoint = self._PACKAGES_VERSIONS_ENDPOINT.format(
ORG=self._owner_or_org,
PACKAGE_TYPE=package_type,
PACKAGE_NAME=package_name,
)
pkgs = []
for data in self._read_all_pages(endpoint):
pkgs.append(ContainerPackage(data))
return pkgs
def get_deleted_package_versions(
self,
package_name: str,
) -> List[ContainerPackage]:
package_type: str = "container"
# Need to quote this for slashes in the name
package_name = urllib.parse.quote(package_name, safe="")
endpoint = (
self._PACKAGES_VERSIONS_ENDPOINT.format(
ORG=self._owner_or_org,
PACKAGE_TYPE=package_type,
PACKAGE_NAME=package_name,
)
+ "?state=deleted"
)
pkgs = []
for data in self._read_all_pages(endpoint):
pkgs.append(ContainerPackage(data))
return pkgs
def delete_package_version(self, package_data: ContainerPackage):
"""
Deletes the given package version from the GHCR
"""
resp = self._client.delete(package_data.url)
if resp.status_code != 204:
logger.warning(
f"Request to delete {package_data.url} returned HTTP {resp.status_code}",
)
def restore_package_version(
self,
package_name: str,
package_data: ContainerPackage,
):
package_type: str = "container"
endpoint = self._PACKAGE_VERSION_RESTORE_ENDPOINT.format(
ORG=self._owner_or_org,
PACKAGE_TYPE=package_type,
PACKAGE_NAME=package_name,
PACKAGE_VERSION_ID=package_data.id,
)
resp = self._client.post(endpoint)
if resp.status_code != 204:
logger.warning(
f"Request to delete {endpoint} returned HTTP {resp.status_code}",
)

12
.github/stale.yml vendored
View File

@@ -1,15 +1,23 @@
# Number of days of inactivity before an issue becomes stale
daysUntilStale: 30
# Number of days of inactivity before a stale issue is closed
daysUntilClose: 7
onlyLabels:
- unconfirmed
# Only issues or pull requests with all of these labels are check if stale. Defaults to `[]` (disabled)
onlyLabels: [cant-reproduce]
# Label to use when marking an issue as stale
staleLabel: stale
# Comment to post when marking an issue as stale. Set to `false` to disable
markComment: >
This issue has been automatically marked as stale because it has not had
recent activity. It will be closed if no further activity occurs. Thank you
for your contributions.
# Comment to post when closing a stale issue. Set to `false` to disable
closeComment: false
# See https://github.com/marketplace/stale for more info on the app
# and https://github.com/probot/stale for the configuration docs

View File

@@ -14,19 +14,40 @@ on:
- 'translations**'
jobs:
pre-commit:
name: Linting Checks
runs-on: ubuntu-latest
steps:
-
name: Checkout repository
uses: actions/checkout@v3
-
name: Install tools
uses: actions/setup-python@v4
with:
python-version: "3.9"
-
name: Check files
uses: pre-commit/action@v3.0.0
documentation:
name: "Build Documentation"
runs-on: ubuntu-20.04
needs:
- pre-commit
steps:
-
name: Checkout
uses: actions/checkout@v3
-
name: Install pipenv
run: pipx install pipenv
run: |
pipx install pipenv==2022.10.12
-
name: Set up Python
uses: actions/setup-python@v3
uses: actions/setup-python@v4
with:
python-version: 3.9
cache: "pipenv"
@@ -35,6 +56,10 @@ jobs:
name: Install dependencies
run: |
pipenv sync --dev
-
name: List installed Python dependencies
run: |
pipenv run pip list
-
name: Make documentation
run: |
@@ -47,27 +72,135 @@ jobs:
name: documentation
path: docs/_build/html/
ci-backend:
uses: ./.github/workflows/reusable-ci-backend.yml
tests-backend:
name: "Tests (${{ matrix.python-version }})"
runs-on: ubuntu-20.04
needs:
- pre-commit
strategy:
matrix:
python-version: ['3.8', '3.9', '3.10']
fail-fast: false
services:
tika:
image: ghcr.io/paperless-ngx/tika:latest
ports:
- "9998:9998/tcp"
gotenberg:
image: docker.io/gotenberg/gotenberg:7.6
ports:
- "3000:3000/tcp"
env:
# Enable Tika end to end testing
TIKA_LIVE: 1
# Enable paperless_mail testing against real server
PAPERLESS_MAIL_TEST_HOST: ${{ secrets.TEST_MAIL_HOST }}
PAPERLESS_MAIL_TEST_USER: ${{ secrets.TEST_MAIL_USER }}
PAPERLESS_MAIL_TEST_PASSWD: ${{ secrets.TEST_MAIL_PASSWD }}
steps:
-
name: Checkout
uses: actions/checkout@v3
with:
fetch-depth: 0
-
name: Install pipenv
run: |
pipx install pipenv==2022.10.12
-
name: Set up Python
uses: actions/setup-python@v4
with:
python-version: "${{ matrix.python-version }}"
cache: "pipenv"
cache-dependency-path: 'Pipfile.lock'
-
name: Install system dependencies
run: |
sudo apt-get update -qq
sudo apt-get install -qq --no-install-recommends unpaper tesseract-ocr imagemagick ghostscript libzbar0 poppler-utils
-
name: Install Python dependencies
run: |
pipenv sync --dev
-
name: List installed Python dependencies
run: |
pipenv run pip list
-
name: Tests
run: |
cd src/
pipenv run pytest -rfEp
-
name: Get changed files
id: changed-files-specific
uses: tj-actions/changed-files@v34
with:
files: |
src/**
-
name: List all changed files
run: |
for file in ${{ steps.changed-files-specific.outputs.all_changed_files }}; do
echo "${file} was changed"
done
-
name: Publish coverage results
if: matrix.python-version == '3.9' && steps.changed-files-specific.outputs.any_changed == 'true'
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
# https://github.com/coveralls-clients/coveralls-python/issues/251
run: |
cd src/
pipenv run coveralls --service=github
ci-frontend:
uses: ./.github/workflows/reusable-ci-frontend.yml
tests-frontend:
name: "Tests Frontend"
runs-on: ubuntu-20.04
needs:
- pre-commit
strategy:
matrix:
node-version: [16.x]
steps:
- uses: actions/checkout@v3
-
name: Use Node.js ${{ matrix.node-version }}
uses: actions/setup-node@v3
with:
node-version: ${{ matrix.node-version }}
- run: cd src-ui && npm ci
- run: cd src-ui && npm run test
- run: cd src-ui && npm run e2e:ci
prepare-docker-build:
name: Prepare Docker Pipeline Data
if: github.event_name == 'push' && (startsWith(github.ref, 'refs/heads/feature-') || github.ref == 'refs/heads/dev' || github.ref == 'refs/heads/beta' || contains(github.ref, 'beta.rc') || startsWith(github.ref, 'refs/tags/v'))
runs-on: ubuntu-20.04
# If the push triggered the installer library workflow, wait for it to
# complete here. This ensures the required versions for the final
# image have been built, while not waiting at all if the versions haven't changed
concurrency:
group: build-installer-library
cancel-in-progress: false
needs:
- documentation
- ci-backend
- ci-frontend
- tests-backend
- tests-frontend
steps:
-
name: Set ghcr repository name
id: set-ghcr-repository
run: |
ghcr_name=$(echo "${GITHUB_REPOSITORY}" | awk '{ print tolower($0) }')
echo "repository=${ghcr_name}" >> $GITHUB_OUTPUT
-
name: Checkout
uses: actions/checkout@v3
-
name: Set up Python
uses: actions/setup-python@v3
uses: actions/setup-python@v4
with:
python-version: "3.9"
-
@@ -78,7 +211,7 @@ jobs:
echo ${build_json}
echo ::set-output name=qpdf-json::${build_json}
echo "qpdf-json=${build_json}" >> $GITHUB_OUTPUT
-
name: Setup psycopg2 image
id: psycopg2-setup
@@ -87,7 +220,7 @@ jobs:
echo ${build_json}
echo ::set-output name=psycopg2-json::${build_json}
echo "psycopg2-json=${build_json}" >> $GITHUB_OUTPUT
-
name: Setup pikepdf image
id: pikepdf-setup
@@ -96,7 +229,7 @@ jobs:
echo ${build_json}
echo ::set-output name=pikepdf-json::${build_json}
echo "pikepdf-json=${build_json}" >> $GITHUB_OUTPUT
-
name: Setup jbig2enc image
id: jbig2enc-setup
@@ -105,10 +238,12 @@ jobs:
echo ${build_json}
echo ::set-output name=jbig2enc-json::${build_json}
echo "jbig2enc-json=${build_json}" >> $GITHUB_OUTPUT
outputs:
ghcr-repository: ${{ steps.set-ghcr-repository.outputs.repository }}
qpdf-json: ${{ steps.qpdf-setup.outputs.qpdf-json }}
pikepdf-json: ${{ steps.pikepdf-setup.outputs.pikepdf-json }}
@@ -117,55 +252,6 @@ jobs:
jbig2enc-json: ${{ steps.jbig2enc-setup.outputs.jbig2enc-json}}
build-qpdf-debs:
name: qpdf
needs:
- prepare-docker-build
uses: ./.github/workflows/reusable-workflow-builder.yml
with:
dockerfile: ./docker-builders/Dockerfile.qpdf
build-json: ${{ needs.prepare-docker-build.outputs.qpdf-json }}
build-args: |
QPDF_VERSION=${{ fromJSON(needs.prepare-docker-build.outputs.qpdf-json).version }}
build-jbig2enc:
name: jbig2enc
needs:
- prepare-docker-build
uses: ./.github/workflows/reusable-workflow-builder.yml
with:
dockerfile: ./docker-builders/Dockerfile.jbig2enc
build-json: ${{ needs.prepare-docker-build.outputs.jbig2enc-json }}
build-args: |
JBIG2ENC_VERSION=${{ fromJSON(needs.prepare-docker-build.outputs.jbig2enc-json).version }}
build-psycopg2-wheel:
name: psycopg2
needs:
- prepare-docker-build
uses: ./.github/workflows/reusable-workflow-builder.yml
with:
dockerfile: ./docker-builders/Dockerfile.psycopg2
build-json: ${{ needs.prepare-docker-build.outputs.psycopg2-json }}
build-args: |
PSYCOPG2_GIT_TAG=${{ fromJSON(needs.prepare-docker-build.outputs.psycopg2-json).git_tag }}
PSYCOPG2_VERSION=${{ fromJSON(needs.prepare-docker-build.outputs.psycopg2-json).version }}
build-pikepdf-wheel:
name: pikepdf
needs:
- prepare-docker-build
- build-qpdf-debs
uses: ./.github/workflows/reusable-workflow-builder.yml
with:
dockerfile: ./docker-builders/Dockerfile.pikepdf
build-json: ${{ needs.prepare-docker-build.outputs.pikepdf-json }}
build-args: |
REPO=${{ github.repository }}
QPDF_VERSION=${{ fromJSON(needs.prepare-docker-build.outputs.qpdf-json).version }}
PIKEPDF_GIT_TAG=${{ fromJSON(needs.prepare-docker-build.outputs.pikepdf-json).git_tag }}
PIKEPDF_VERSION=${{ fromJSON(needs.prepare-docker-build.outputs.pikepdf-json).version }}
# build and push image to docker hub.
build-docker-image:
runs-on: ubuntu-20.04
@@ -174,29 +260,31 @@ jobs:
cancel-in-progress: true
needs:
- prepare-docker-build
- build-psycopg2-wheel
- build-jbig2enc
- build-qpdf-debs
- build-pikepdf-wheel
steps:
-
name: Check pushing to Docker Hub
id: docker-hub
# Only push to Dockerhub from the main repo
# Only push to Dockerhub from the main repo AND the ref is either:
# main
# dev
# beta
# a tag
# Otherwise forks would require a Docker Hub account and secrets setup
run: |
if [[ ${{ github.repository }} == "paperless-ngx/paperless-ngx" ]] ; then
echo ::set-output name=enable::"true"
if [[ ${{ needs.prepare-docker-build.outputs.ghcr-repository }} == "paperless-ngx/paperless-ngx" && ( ${{ github.ref_name }} == "main" || ${{ github.ref_name }} == "dev" || ${{ github.ref_name }} == "beta" || ${{ startsWith(github.ref, 'refs/tags/v') }} == "true" ) ]] ; then
echo "Enabling DockerHub image push"
echo "enable=true" >> $GITHUB_OUTPUT
else
echo ::set-output name=enable::"false"
echo "Not pushing to DockerHub"
echo "enable=false" >> $GITHUB_OUTPUT
fi
-
name: Gather Docker metadata
id: docker-meta
uses: docker/metadata-action@v3
uses: docker/metadata-action@v4
with:
images: |
ghcr.io/${{ github.repository }}
ghcr.io/${{ needs.prepare-docker-build.outputs.ghcr-repository }}
name=paperlessngx/paperless-ngx,enable=${{ steps.docker-hub.outputs.enable }}
tags: |
# Tag branches with branch name
@@ -210,20 +298,20 @@ jobs:
uses: actions/checkout@v3
-
name: Set up Docker Buildx
uses: docker/setup-buildx-action@v1
uses: docker/setup-buildx-action@v2
-
name: Set up QEMU
uses: docker/setup-qemu-action@v1
uses: docker/setup-qemu-action@v2
-
name: Login to Github Container Registry
uses: docker/login-action@v1
uses: docker/login-action@v2
with:
registry: ghcr.io
username: ${{ github.actor }}
password: ${{ secrets.GITHUB_TOKEN }}
-
name: Login to Docker Hub
uses: docker/login-action@v1
uses: docker/login-action@v2
# Don't attempt to login is not pushing to Docker Hub
if: steps.docker-hub.outputs.enable == 'true'
with:
@@ -231,7 +319,7 @@ jobs:
password: ${{ secrets.DOCKERHUB_TOKEN }}
-
name: Build and push
uses: docker/build-push-action@v2
uses: docker/build-push-action@v3
with:
context: .
file: ./Dockerfile
@@ -247,11 +335,11 @@ jobs:
# Get cache layers from this branch, then dev, then main
# This allows new branches to get at least some cache benefits, generally from dev
cache-from: |
type=registry,ref=ghcr.io/${{ github.repository }}/builder/cache/app:${{ github.ref_name }}
type=registry,ref=ghcr.io/${{ github.repository }}/builder/cache/app:dev
type=registry,ref=ghcr.io/${{ github.repository }}/builder/cache/app:main
type=registry,ref=ghcr.io/${{ needs.prepare-docker-build.outputs.ghcr-repository }}/builder/cache/app:${{ github.ref_name }}
type=registry,ref=ghcr.io/${{ needs.prepare-docker-build.outputs.ghcr-repository }}/builder/cache/app:dev
type=registry,ref=ghcr.io/${{ needs.prepare-docker-build.outputs.ghcr-repository }}/builder/cache/app:main
cache-to: |
type=registry,mode=max,ref=ghcr.io/${{ github.repository }}/builder/cache/app:${{ github.ref_name }}
type=registry,mode=max,ref=ghcr.io/${{ needs.prepare-docker-build.outputs.ghcr-repository }}/builder/cache/app:${{ github.ref_name }}
-
name: Inspect image
run: |
@@ -276,18 +364,27 @@ jobs:
-
name: Checkout
uses: actions/checkout@v3
-
name: Install pipenv
run: |
pip3 install --upgrade pip setuptools wheel pipx
pipx install pipenv
-
name: Set up Python
uses: actions/setup-python@v3
uses: actions/setup-python@v4
with:
python-version: 3.9
cache: "pipenv"
cache-dependency-path: 'Pipfile.lock'
-
name: Install dependencies
name: Install Python dependencies
run: |
pipenv sync --dev
-
name: Install system dependencies
run: |
sudo apt-get update -qq
sudo apt-get install -qq --no-install-recommends gettext liblept5
pip3 install --upgrade pip setuptools wheel
pip3 install -r requirements.txt
-
name: Download frontend artifact
uses: actions/download-artifact@v3
@@ -300,34 +397,38 @@ jobs:
with:
name: documentation
path: docs/_build/html/
-
name: Generate requirements file
run: |
pipenv requirements > requirements.txt
-
name: Compile messages
run: |
cd src/
pipenv run python3 manage.py compilemessages
-
name: Collect static files
run: |
cd src/
pipenv run python3 manage.py collectstatic --no-input
-
name: Move files
run: |
mkdir dist
mkdir dist/paperless-ngx
mkdir dist/paperless-ngx/scripts
cp .dockerignore .env Dockerfile Pipfile Pipfile.lock LICENSE README.md requirements.txt dist/paperless-ngx/
cp .dockerignore .env Dockerfile Pipfile Pipfile.lock requirements.txt LICENSE README.md dist/paperless-ngx/
cp paperless.conf.example dist/paperless-ngx/paperless.conf
cp gunicorn.conf.py dist/paperless-ngx/gunicorn.conf.py
cp docker/ dist/paperless-ngx/docker -r
cp -r docker/ dist/paperless-ngx/docker
cp scripts/*.service scripts/*.sh dist/paperless-ngx/scripts/
cp src/ dist/paperless-ngx/src -r
cp docs/_build/html/ dist/paperless-ngx/docs -r
-
name: Compile messages
run: |
cd dist/paperless-ngx/src
python3 manage.py compilemessages
-
name: Collect static files
run: |
cd dist/paperless-ngx/src
python3 manage.py collectstatic --no-input
cp -r src/ dist/paperless-ngx/src
cp -r docs/_build/html/ dist/paperless-ngx/docs
mv static dist/paperless-ngx
-
name: Make release package
run: |
cd dist
find . -name __pycache__ | xargs rm -r
tar -cJf paperless-ngx.tar.xz paperless-ngx/
-
name: Upload release artifact
@@ -338,6 +439,10 @@ jobs:
publish-release:
runs-on: ubuntu-20.04
outputs:
prerelease: ${{ steps.get_version.outputs.prerelease }}
changelog: ${{ steps.create-release.outputs.body }}
version: ${{ steps.get_version.outputs.version }}
needs:
- build-release
if: github.ref_type == 'tag' && (startsWith(github.ref_name, 'v') || contains(github.ref_name, '-beta.rc'))
@@ -352,16 +457,16 @@ jobs:
name: Get version
id: get_version
run: |
echo ::set-output name=version::${{ github.ref_name }}
echo "version=${{ github.ref_name }}" >> $GITHUB_OUTPUT
if [[ ${{ contains(github.ref_name, '-beta.rc') }} == 'true' ]]; then
echo ::set-output name=prerelease::true
echo "prerelease=true" >> $GITHUB_OUTPUT
else
echo ::set-output name=prerelease::false
echo "prerelease=false" >> $GITHUB_OUTPUT
fi
-
name: Create Release and Changelog
id: create-release
uses: release-drafter/release-drafter@v5
uses: paperless-ngx/release-drafter@master
with:
name: Paperless-ngx ${{ steps.get_version.outputs.version }}
tag: ${{ steps.get_version.outputs.version }}
@@ -381,21 +486,65 @@ jobs:
asset_path: ./paperless-ngx.tar.xz
asset_name: paperless-ngx-${{ steps.get_version.outputs.version }}.tar.xz
asset_content_type: application/x-xz
append-changelog:
runs-on: ubuntu-20.04
needs:
- publish-release
if: needs.publish-release.outputs.prerelease == 'false'
steps:
-
name: Checkout
uses: actions/checkout@v3
with:
ref: main
-
name: Install pipenv
run: |
pip3 install --upgrade pip setuptools wheel pipx
pipx install pipenv
-
name: Set up Python
uses: actions/setup-python@v4
with:
python-version: 3.9
cache: "pipenv"
cache-dependency-path: 'Pipfile.lock'
-
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
git branch ${{ needs.publish-release.outputs.version }}-changelog
git checkout ${{ needs.publish-release.outputs.version }}-changelog
echo -e "# Changelog\n\n${{ needs.publish-release.outputs.changelog }}\n" > changelog-new.md
echo "Manually linking usernames"
sed -i -r 's|@(.+?) \(\[#|[@\1](https://github.com/\1) ([#|ig' changelog-new.md
CURRENT_CHANGELOG=`tail --lines +2 changelog.md`
echo -e "$CURRENT_CHANGELOG" >> changelog-new.md
mv changelog-new.md changelog.md
pipenv run pre-commit --files 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
git commit -am "Changelog ${{ needs.publish-release.outputs.version }} - GHA"
git push origin ${{ needs.publish-release.outputs.version }}-changelog
-
name: Create Pull Request
uses: actions/github-script@v6
with:
script: |
const { repo, owner } = context.repo;
const result = await github.rest.pulls.create({
title: '[Documentation] Add ${{ needs.publish-release.outputs.version }} changelog',
owner,
repo,
head: '${{ needs.publish-release.outputs.version }}-changelog',
base: 'main',
body: 'This PR is auto-generated by CI.'
});
github.rest.issues.addLabels({
owner,
repo,
issue_number: result.data.number,
labels: ['documentation']
});

95
.github/workflows/cleanup-tags.yml vendored Normal file
View File

@@ -0,0 +1,95 @@
# This workflow runs on certain conditions to check for and potentially
# delete container images from the GHCR which no longer have an associated
# code branch.
# Requires a PAT with the correct scope set in the secrets
name: Cleanup Image Tags
on:
schedule:
- cron: '0 0 * * SAT'
delete:
pull_request:
types:
- closed
push:
paths:
- ".github/workflows/cleanup-tags.yml"
- ".github/scripts/cleanup-tags.py"
- ".github/scripts/github.py"
- ".github/scripts/common.py"
concurrency:
group: registry-tags-cleanup
cancel-in-progress: false
jobs:
cleanup-images:
name: Cleanup Image Tags for ${{ matrix.primary-name }}
runs-on: ubuntu-latest
strategy:
matrix:
include:
- primary-name: "paperless-ngx"
cache-name: "paperless-ngx/builder/cache/app"
- primary-name: "paperless-ngx/builder/qpdf"
cache-name: "paperless-ngx/builder/cache/qpdf"
- primary-name: "paperless-ngx/builder/pikepdf"
cache-name: "paperless-ngx/builder/cache/pikepdf"
- primary-name: "paperless-ngx/builder/jbig2enc"
cache-name: "paperless-ngx/builder/cache/jbig2enc"
- primary-name: "paperless-ngx/builder/psycopg2"
cache-name: "paperless-ngx/builder/cache/psycopg2"
env:
# Requires a personal access token with the OAuth scope delete:packages
TOKEN: ${{ secrets.GHA_CONTAINER_DELETE_TOKEN }}
steps:
-
name: Checkout
uses: actions/checkout@v3
-
name: Login to Github Container Registry
uses: docker/login-action@v2
with:
registry: ghcr.io
username: ${{ github.actor }}
password: ${{ secrets.GITHUB_TOKEN }}
-
name: Set up Python
uses: actions/setup-python@v4
with:
python-version: "3.10"
-
name: Install httpx
run: |
python -m pip install httpx
#
# Clean up primary package
#
-
name: Cleanup for package "${{ matrix.primary-name }}"
if: "${{ env.TOKEN != '' }}"
run: |
python ${GITHUB_WORKSPACE}/.github/scripts/cleanup-tags.py --untagged --is-manifest --delete "${{ matrix.primary-name }}"
#
# Clean up registry cache package
#
-
name: Cleanup for package "${{ matrix.cache-name }}"
if: "${{ env.TOKEN != '' }}"
run: |
python ${GITHUB_WORKSPACE}/.github/scripts/cleanup-tags.py --untagged --delete "${{ matrix.cache-name }}"
#
# Verify tags which are left still pull
#
-
name: Check all tags still pull
run: |
ghcr_name=$(echo "ghcr.io/${GITHUB_REPOSITORY_OWNER}/${{ matrix.primary-name }}" | awk '{ print tolower($0) }')
echo "Pulling all tags of ${ghcr_name}"
docker pull --quiet --all-tags ${ghcr_name}
docker image list

View File

@@ -38,7 +38,7 @@ jobs:
steps:
- name: Checkout repository
uses: actions/checkout@v2
uses: actions/checkout@v3
# Initializes the CodeQL tools for scanning.
- name: Initialize CodeQL

170
.github/workflows/installer-library.yml vendored Normal file
View File

@@ -0,0 +1,170 @@
# This workflow will run to update the installer library of
# Docker images. These are the images which provide updated wheels
# .deb installation packages or maybe just some compiled library
name: Build Image Library
on:
push:
# Must match one of these branches AND one of the paths
# to be triggered
branches:
- "main"
- "dev"
- "library-*"
- "feature-*"
paths:
# Trigger the workflow if a Dockerfile changed
- "docker-builders/**"
# Trigger if a package was updated
- ".build-config.json"
- "Pipfile.lock"
# Also trigger on workflow changes related to the library
- ".github/workflows/installer-library.yml"
- ".github/workflows/reusable-workflow-builder.yml"
- ".github/scripts/**"
# Set a workflow level concurrency group so primary workflow
# can wait for this to complete if needed
# DO NOT CHANGE without updating main workflow group
concurrency:
group: build-installer-library
cancel-in-progress: false
jobs:
prepare-docker-build:
name: Prepare Docker Image Version Data
runs-on: ubuntu-20.04
steps:
-
name: Set ghcr repository name
id: set-ghcr-repository
run: |
ghcr_name=$(echo "${GITHUB_REPOSITORY}" | awk '{ print tolower($0) }')
echo "repository=${ghcr_name}" >> $GITHUB_OUTPUT
-
name: Checkout
uses: actions/checkout@v3
-
name: Set up Python
uses: actions/setup-python@v4
with:
python-version: "3.9"
-
name: Install jq
run: |
sudo apt-get update
sudo apt-get install jq
-
name: Setup qpdf image
id: qpdf-setup
run: |
build_json=$(python ${GITHUB_WORKSPACE}/.github/scripts/get-build-json.py qpdf)
echo ${build_json}
echo "qpdf-json=${build_json}" >> $GITHUB_OUTPUT
-
name: Setup psycopg2 image
id: psycopg2-setup
run: |
build_json=$(python ${GITHUB_WORKSPACE}/.github/scripts/get-build-json.py psycopg2)
echo ${build_json}
echo "psycopg2-json=${build_json}" >> $GITHUB_OUTPUT
-
name: Setup pikepdf image
id: pikepdf-setup
run: |
build_json=$(python ${GITHUB_WORKSPACE}/.github/scripts/get-build-json.py pikepdf)
echo ${build_json}
echo "pikepdf-json=${build_json}" >> $GITHUB_OUTPUT
-
name: Setup jbig2enc image
id: jbig2enc-setup
run: |
build_json=$(python ${GITHUB_WORKSPACE}/.github/scripts/get-build-json.py jbig2enc)
echo ${build_json}
echo "jbig2enc-json=${build_json}" >> $GITHUB_OUTPUT
-
name: Setup other versions
id: cache-bust-setup
run: |
pillow_version=$(jq ".default.pillow.version" Pipfile.lock | sed 's/=//g' | sed 's/"//g')
lxml_version=$(jq ".default.lxml.version" Pipfile.lock | sed 's/=//g' | sed 's/"//g')
echo "Pillow is ${pillow_version}"
echo "lxml is ${lxml_version}"
echo "pillow-version=${pillow_version}" >> $GITHUB_OUTPUT
echo "lxml-version=${lxml_version}" >> $GITHUB_OUTPUT
outputs:
ghcr-repository: ${{ steps.set-ghcr-repository.outputs.repository }}
qpdf-json: ${{ steps.qpdf-setup.outputs.qpdf-json }}
pikepdf-json: ${{ steps.pikepdf-setup.outputs.pikepdf-json }}
psycopg2-json: ${{ steps.psycopg2-setup.outputs.psycopg2-json }}
jbig2enc-json: ${{ steps.jbig2enc-setup.outputs.jbig2enc-json }}
pillow-version: ${{ steps.cache-bust-setup.outputs.pillow-version }}
lxml-version: ${{ steps.cache-bust-setup.outputs.lxml-version }}
build-qpdf-debs:
name: qpdf
needs:
- prepare-docker-build
uses: ./.github/workflows/reusable-workflow-builder.yml
with:
dockerfile: ./docker-builders/Dockerfile.qpdf
build-json: ${{ needs.prepare-docker-build.outputs.qpdf-json }}
build-args: |
QPDF_VERSION=${{ fromJSON(needs.prepare-docker-build.outputs.qpdf-json).version }}
build-jbig2enc:
name: jbig2enc
needs:
- prepare-docker-build
uses: ./.github/workflows/reusable-workflow-builder.yml
with:
dockerfile: ./docker-builders/Dockerfile.jbig2enc
build-json: ${{ needs.prepare-docker-build.outputs.jbig2enc-json }}
build-args: |
JBIG2ENC_VERSION=${{ fromJSON(needs.prepare-docker-build.outputs.jbig2enc-json).version }}
build-psycopg2-wheel:
name: psycopg2
needs:
- prepare-docker-build
uses: ./.github/workflows/reusable-workflow-builder.yml
with:
dockerfile: ./docker-builders/Dockerfile.psycopg2
build-json: ${{ needs.prepare-docker-build.outputs.psycopg2-json }}
build-args: |
PSYCOPG2_VERSION=${{ fromJSON(needs.prepare-docker-build.outputs.psycopg2-json).version }}
build-pikepdf-wheel:
name: pikepdf
needs:
- prepare-docker-build
- build-qpdf-debs
uses: ./.github/workflows/reusable-workflow-builder.yml
with:
dockerfile: ./docker-builders/Dockerfile.pikepdf
build-json: ${{ needs.prepare-docker-build.outputs.pikepdf-json }}
build-args: |
REPO=${{ needs.prepare-docker-build.outputs.ghcr-repository }}
QPDF_VERSION=${{ fromJSON(needs.prepare-docker-build.outputs.qpdf-json).version }}
PIKEPDF_VERSION=${{ fromJSON(needs.prepare-docker-build.outputs.pikepdf-json).version }}
PILLOW_VERSION=${{ needs.prepare-docker-build.outputs.pillow-version }}
LXML_VERSION=${{ needs.prepare-docker-build.outputs.lxml-version }}

View File

@@ -13,6 +13,9 @@ on:
- main
- dev
permissions:
contents: read
env:
todo: Todo
done: Done
@@ -24,8 +27,8 @@ jobs:
runs-on: ubuntu-latest
if: github.event_name == 'issues' && (github.event.action == 'opened' || github.event.action == 'reopened')
steps:
- name: Set issue status to ${{ env.todo }}
uses: leonsteinhaeuser/project-beta-automations@v1.2.1
- name: Add issue to project and set status to ${{ env.todo }}
uses: leonsteinhaeuser/project-beta-automations@v2.0.1
with:
gh_token: ${{ secrets.GH_TOKEN }}
organization: paperless-ngx
@@ -35,13 +38,20 @@ jobs:
pr_opened_or_reopened:
name: pr_opened_or_reopened
runs-on: ubuntu-latest
if: github.event_name == 'pull_request_target' && (github.event.action == 'opened' || github.event.action == 'reopened')
permissions:
# write permission is required for autolabeler
pull-requests: write
if: github.event_name == 'pull_request_target' && (github.event.action == 'opened' || github.event.action == 'reopened') && github.event.pull_request.user.login != 'dependabot'
steps:
- name: Set PR status to ${{ env.in_progress }}
uses: leonsteinhaeuser/project-beta-automations@v1.2.1
- name: Add PR to project and set status to "Needs Review"
uses: leonsteinhaeuser/project-beta-automations@v2.0.1
with:
gh_token: ${{ secrets.GH_TOKEN }}
organization: paperless-ngx
project_id: 2
resource_node_id: ${{ github.event.pull_request.node_id }}
status_value: ${{ env.in_progress }} # Target status
status_value: "Needs Review" # Target status
- name: Label PR with release-drafter
uses: release-drafter/release-drafter@v5
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}

View File

@@ -1,108 +0,0 @@
name: Backend CI Jobs
on:
workflow_call:
jobs:
code-checks-backend:
name: "Code Style Checks"
runs-on: ubuntu-20.04
steps:
-
name: Checkout
uses: actions/checkout@v3
-
name: Install checkers
run: |
pipx install reorder-python-imports
pipx install yesqa
pipx install add-trailing-comma
pipx install flake8
-
name: Run reorder-python-imports
run: |
find src/ -type f -name '*.py' ! -path "*/migrations/*" | xargs reorder-python-imports
-
name: Run yesqa
run: |
find src/ -type f -name '*.py' ! -path "*/migrations/*" | xargs yesqa
-
name: Run add-trailing-comma
run: |
find src/ -type f -name '*.py' ! -path "*/migrations/*" | xargs add-trailing-comma
# black is placed after add-trailing-comma because it may format differently
# if a trailing comma is added
-
name: Run black
uses: psf/black@stable
with:
options: "--check --diff"
version: "22.3.0"
-
name: Run flake8 checks
run: |
cd src/
flake8 --max-line-length=88 --ignore=E203,W503
tests-backend:
name: "Tests (${{ matrix.python-version }})"
runs-on: ubuntu-20.04
needs:
- code-checks-backend
strategy:
matrix:
python-version: ['3.8', '3.9', '3.10']
fail-fast: false
steps:
-
name: Checkout
uses: actions/checkout@v3
with:
fetch-depth: 2
-
name: Install pipenv
run: pipx install pipenv
-
name: Set up Python
uses: actions/setup-python@v3
with:
python-version: "${{ matrix.python-version }}"
cache: "pipenv"
cache-dependency-path: 'Pipfile.lock'
-
name: Install system dependencies
run: |
sudo apt-get update -qq
sudo apt-get install -qq --no-install-recommends unpaper tesseract-ocr imagemagick ghostscript optipng libzbar0 poppler-utils
-
name: Install Python dependencies
run: |
pipenv sync --dev
-
name: Tests
run: |
cd src/
pipenv run pytest
-
name: Get changed files
id: changed-files-specific
uses: tj-actions/changed-files@v19
with:
files: |
src/**
-
name: List all changed files
run: |
for file in ${{ steps.changed-files-specific.outputs.all_changed_files }}; do
echo "${file} was changed"
done
-
name: Publish coverage results
if: matrix.python-version == '3.9' && steps.changed-files-specific.outputs.any_changed == 'true'
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
# https://github.com/coveralls-clients/coveralls-python/issues/251
run: |
cd src/
pipenv run coveralls --service=github

View File

@@ -1,42 +0,0 @@
name: Frontend CI Jobs
on:
workflow_call:
jobs:
code-checks-frontend:
name: "Code Style Checks"
runs-on: ubuntu-20.04
steps:
-
name: Checkout
uses: actions/checkout@v3
- uses: actions/setup-node@v3
with:
node-version: '16'
-
name: Install prettier
run: |
npm install prettier
-
name: Run prettier
run:
npx prettier --check --ignore-path Pipfile.lock **/*.js **/*.ts *.md **/*.md
tests-frontend:
name: "Tests"
runs-on: ubuntu-20.04
needs:
- code-checks-frontend
strategy:
matrix:
node-version: [16.x]
steps:
- uses: actions/checkout@v3
- name: Use Node.js ${{ matrix.node-version }}
uses: actions/setup-node@v3
with:
node-version: ${{ matrix.node-version }}
- run: cd src-ui && npm ci
- run: cd src-ui && npm run test
- run: cd src-ui && npm run e2e:ci

View File

@@ -28,20 +28,20 @@ jobs:
uses: actions/checkout@v3
-
name: Login to Github Container Registry
uses: docker/login-action@v1
uses: docker/login-action@v2
with:
registry: ghcr.io
username: ${{ github.actor }}
password: ${{ secrets.GITHUB_TOKEN }}
-
name: Set up Docker Buildx
uses: docker/setup-buildx-action@v1
uses: docker/setup-buildx-action@v2
-
name: Set up QEMU
uses: docker/setup-qemu-action@v1
uses: docker/setup-qemu-action@v2
-
name: Build ${{ fromJSON(inputs.build-json).name }}
uses: docker/build-push-action@v2
uses: docker/build-push-action@v3
with:
context: .
file: ${{ inputs.dockerfile }}

11
.gitignore vendored
View File

@@ -63,11 +63,14 @@ target/
# VS Code
.vscode
/src-ui/.vscode
/docs/.vscode
# Other stuff that doesn't belong
.virtualenv
virtualenv
/venv
.venv/
/docker-compose.env
/docker-compose.yml
@@ -84,8 +87,12 @@ 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
# celery schedule file
celerybeat-schedule*

8
.hadolint.yml Normal file
View File

@@ -0,0 +1,8 @@
failure-threshold: warning
ignored:
# https://github.com/hadolint/hadolint/wiki/DL3008
- DL3008
# https://github.com/hadolint/hadolint/wiki/DL3013
- DL3013
# https://github.com/hadolint/hadolint/wiki/DL3003
- DL3003

View File

@@ -5,7 +5,7 @@
repos:
# General hooks
- repo: https://github.com/pre-commit/pre-commit-hooks
rev: v4.2.0
rev: v4.3.0
hooks:
- id: check-docstring-first
- id: check-json
@@ -27,7 +27,7 @@ repos:
- id: check-case-conflict
- id: detect-private-key
- repo: https://github.com/pre-commit/mirrors-prettier
rev: "v2.6.2"
rev: "v2.7.1"
hooks:
- id: prettier
types_or:
@@ -37,17 +37,17 @@ repos:
exclude: "(^Pipfile\\.lock$)"
# Python hooks
- repo: https://github.com/asottile/reorder_python_imports
rev: v3.1.0
rev: v3.9.0
hooks:
- id: reorder-python-imports
exclude: "(migrations)"
- repo: https://github.com/asottile/yesqa
rev: "v1.3.0"
rev: "v1.4.0"
hooks:
- id: yesqa
exclude: "(migrations)"
- repo: https://github.com/asottile/add-trailing-comma
rev: "v2.2.3"
rev: "v2.3.0"
hooks:
- id: add-trailing-comma
exclude: "(migrations)"
@@ -59,11 +59,11 @@ repos:
args:
- "--config=./src/setup.cfg"
- repo: https://github.com/psf/black
rev: 22.3.0
rev: 22.10.0
hooks:
- id: black
- repo: https://github.com/asottile/pyupgrade
rev: v2.32.1
rev: v3.1.0
hooks:
- id: pyupgrade
exclude: "(migrations)"
@@ -74,13 +74,6 @@ repos:
rev: v2.10.0
hooks:
- id: hadolint
args:
- --ignore
- DL3008 # https://github.com/hadolint/hadolint/wiki/DL3008 (should probably do this at some point)
- --ignore
- DL3013 # https://github.com/hadolint/hadolint/wiki/DL3013 (should probably do this too at some point)
- --ignore
- DL3003 # https://github.com/hadolint/hadolint/wiki/DL3003 (seems excessive to use WORKDIR so much)
# Shell script hooks
- repo: https://github.com/lovesegfault/beautysh
rev: v6.2.1

View File

@@ -7,4 +7,3 @@
/src/ @paperless-ngx/backend
Pipfile* @paperless-ngx/backend
*.py @paperless-ngx/backend
requirements.txt @paperless-ngx/backend

View File

@@ -26,10 +26,29 @@ 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
FROM --platform=$BUILDPLATFORM python:3.9-slim-bullseye as pipenv-base
# This stage generates the requirements.txt file using pipenv
# This stage runs once for the native platform, as the outputs are not
# dependent on target arch
# This way, pipenv dependencies are not left in the final image
# nor can pipenv mess up the final image somehow
# Inputs: None
WORKDIR /usr/src/pipenv
COPY Pipfile* ./
RUN set -eux \
&& echo "Installing pipenv" \
&& python3 -m pip install --no-cache-dir --upgrade pipenv \
&& echo "Generating requirement.txt" \
&& pipenv requirements > requirements.txt
FROM python:3.9-slim-bullseye as main-app
LABEL org.opencontainers.image.authors="paperless-ngx team <hello@paperless-ngx.com>"
@@ -77,15 +96,13 @@ ARG RUNTIME_PACKAGES="\
libraqm0 \
libgnutls30 \
libjpeg62-turbo \
optipng \
python3 \
python3-pip \
python3-setuptools \
postgresql-client \
mariadb-client \
# For Numpy
libatlas3-base \
# thumbnail size reduction
pngquant \
# OCRmyPDF dependencies
tesseract-ocr \
tesseract-ocr-eng \
@@ -93,6 +110,10 @@ ARG RUNTIME_PACKAGES="\
tesseract-ocr-fra \
tesseract-ocr-ita \
tesseract-ocr-spa \
# Suggested for OCRmyPDF
pngquant \
# Suggested for pikepdf
jbig2dec \
tzdata \
unpaper \
# Mime type detection
@@ -122,20 +143,36 @@ COPY gunicorn.conf.py .
# These change sometimes, but rarely
WORKDIR /usr/src/paperless/src/docker/
RUN --mount=type=bind,readwrite,source=docker,target=./ \
set -eux \
COPY [ \
"docker/imagemagick-policy.xml", \
"docker/supervisord.conf", \
"docker/docker-entrypoint.sh", \
"docker/docker-prepare.sh", \
"docker/paperless_cmd.sh", \
"docker/wait-for-redis.py", \
"docker/management_script.sh", \
"docker/flower-conditional.sh", \
"docker/install_management_commands.sh", \
"/usr/src/paperless/src/docker/" \
]
RUN set -eux \
&& echo "Configuring ImageMagick" \
&& cp imagemagick-policy.xml /etc/ImageMagick-6/policy.xml \
&& mv imagemagick-policy.xml /etc/ImageMagick-6/policy.xml \
&& echo "Configuring supervisord" \
&& mkdir /var/log/supervisord /var/run/supervisord \
&& cp supervisord.conf /etc/supervisord.conf \
&& mv supervisord.conf /etc/supervisord.conf \
&& echo "Setting up Docker scripts" \
&& cp docker-entrypoint.sh /sbin/docker-entrypoint.sh \
&& mv docker-entrypoint.sh /sbin/docker-entrypoint.sh \
&& chmod 755 /sbin/docker-entrypoint.sh \
&& cp docker-prepare.sh /sbin/docker-prepare.sh \
&& mv docker-prepare.sh /sbin/docker-prepare.sh \
&& chmod 755 /sbin/docker-prepare.sh \
&& cp wait-for-redis.py /sbin/wait-for-redis.py \
&& mv wait-for-redis.py /sbin/wait-for-redis.py \
&& chmod 755 /sbin/wait-for-redis.py \
&& mv paperless_cmd.sh /usr/local/bin/paperless_cmd.sh \
&& chmod 755 /usr/local/bin/paperless_cmd.sh \
&& mv flower-conditional.sh /usr/local/bin/flower-conditional.sh \
&& chmod 755 /usr/local/bin/flower-conditional.sh \
&& echo "Installing managment commands" \
&& chmod +x install_management_commands.sh \
&& ./install_management_commands.sh
@@ -148,27 +185,31 @@ RUN --mount=type=bind,from=qpdf-builder,target=/qpdf \
--mount=type=bind,from=pikepdf-builder,target=/pikepdf \
set -eux \
&& echo "Installing qpdf" \
&& apt-get install --yes --no-install-recommends /qpdf/usr/src/qpdf/libqpdf28_*.deb \
&& apt-get install --yes --no-install-recommends /qpdf/usr/src/qpdf/libqpdf29_*.deb \
&& apt-get install --yes --no-install-recommends /qpdf/usr/src/qpdf/qpdf_*.deb \
&& echo "Installing pikepdf and dependencies" \
&& python3 -m pip install --no-cache-dir /pikepdf/usr/src/pikepdf/wheels/packaging*.whl \
&& python3 -m pip install --no-cache-dir /pikepdf/usr/src/pikepdf/wheels/lxml*.whl \
&& python3 -m pip install --no-cache-dir /pikepdf/usr/src/pikepdf/wheels/Pillow*.whl \
&& python3 -m pip install --no-cache-dir /pikepdf/usr/src/pikepdf/wheels/pyparsing*.whl \
&& python3 -m pip install --no-cache-dir /pikepdf/usr/src/pikepdf/wheels/pikepdf*.whl \
&& python -m pip list \
&& python3 -m pip install --no-cache-dir /pikepdf/usr/src/wheels/pyparsing*.whl \
&& python3 -m pip install --no-cache-dir /pikepdf/usr/src/wheels/packaging*.whl \
&& python3 -m pip install --no-cache-dir /pikepdf/usr/src/wheels/lxml*.whl \
&& python3 -m pip install --no-cache-dir /pikepdf/usr/src/wheels/Pillow*.whl \
&& python3 -m pip install --no-cache-dir /pikepdf/usr/src/wheels/pikepdf*.whl \
&& python3 -m pip list \
&& echo "Installing psycopg2" \
&& python3 -m pip install --no-cache-dir /psycopg2/usr/src/psycopg2/wheels/psycopg2*.whl \
&& python -m pip list
&& python3 -m pip install --no-cache-dir /psycopg2/usr/src/wheels/psycopg2*.whl \
&& python3 -m pip list
WORKDIR /usr/src/paperless/src/
# Python dependencies
# Change pretty frequently
COPY requirements.txt ../
COPY --from=pipenv-base /usr/src/pipenv/requirements.txt ./
# Packages needed only for building a few quick Python
# dependencies
ARG BUILD_PACKAGES="\
build-essential \
git \
default-libmysqlclient-dev \
python3-dev"
RUN set -eux \
@@ -177,7 +218,7 @@ RUN set -eux \
&& apt-get install --yes --quiet --no-install-recommends ${BUILD_PACKAGES} \
&& python3 -m pip install --no-cache-dir --upgrade wheel \
&& echo "Installing Python requirements" \
&& python3 -m pip install --default-timeout=1000 --no-cache-dir -r ../requirements.txt \
&& python3 -m pip install --default-timeout=1000 --no-cache-dir --requirement requirements.txt \
&& echo "Cleaning up image" \
&& apt-get -y purge ${BUILD_PACKAGES} \
&& apt-get -y autoremove --purge \
@@ -188,8 +229,6 @@ RUN set -eux \
&& rm -rf /var/cache/apt/archives/* \
&& truncate -s 0 /var/log/*log
WORKDIR /usr/src/paperless/src/
# copy backend
COPY ./src ./
@@ -213,4 +252,4 @@ ENTRYPOINT ["/sbin/docker-entrypoint.sh"]
EXPOSE 8000
CMD ["/usr/local/bin/supervisord", "-c", "/etc/supervisord.conf"]
CMD ["/usr/local/bin/paperless_cmd.sh"]

46
Pipfile
View File

@@ -10,41 +10,42 @@ name = "piwheels"
[packages]
dateparser = "~=1.1"
django = "~=4.0"
django = "~=4.1"
django-cors-headers = "*"
django-extensions = "*"
django-filter = "~=21.1"
django-q = "~=1.3"
djangorestframework = "~=3.13"
django-filter = "~=22.1"
djangorestframework = "~=3.14"
filelock = "*"
fuzzywuzzy = {extras = ["speedup"], version = "*"}
gunicorn = "*"
imap-tools = "~=0.54.0"
imap-tools = "*"
langdetect = "*"
pathvalidate = "*"
pillow = "~=9.1"
# Any version update to pikepdf requires a base image update
pikepdf = "~=5.1"
pillow = "~=9.3"
pikepdf = "*"
python-gnupg = "*"
python-dotenv = "*"
python-dateutil = "*"
python-magic = "*"
# Any version update to psycopg2 requires a base image update
psycopg2 = "*"
redis = "*"
# Pinned because aarch64 wheels and updates cause warnings when loading the classifier model.
scikit-learn="==1.0.2"
whitenoise = "~=6.0.0"
watchdog = "~=2.1.0"
whoosh="~=2.7.4"
rapidfuzz = "*"
redis = {extras = ["hiredis"], version = "*"}
scikit-learn = "~=1.1"
# Pin this until piwheels is building 1.9 (see https://www.piwheels.org/project/scipy/)
scipy = "==1.8.1"
numpy = "*"
whitenoise = "~=6.2"
watchdog = "~=2.1"
whoosh="~=2.7"
inotifyrecursive = "~=0.3"
ocrmypdf = "~=13.4"
ocrmypdf = "~=14.0"
tqdm = "*"
tika = "*"
# TODO: This will sadly also install daphne+dependencies,
# which an ASGI server we don't need. Adds about 15MB image size.
channels = "~=3.0"
channels-redis = "*"
# Locked version until https://github.com/django/channels_redis/issues/332
# is resolved
channels-redis = "==3.4.1"
uvicorn = {extras = ["standard"], version = "*"}
concurrent-log-handler = "*"
"pdfminer.six" = "*"
@@ -52,7 +53,13 @@ concurrent-log-handler = "*"
"importlib-resources" = {version = "*", markers = "python_version < '3.9'"}
zipp = {version = "*", markers = "python_version < '3.9'"}
pyzbar = "*"
mysqlclient = "*"
celery = {extras = ["redis"], version = "*"}
django-celery-results = "*"
setproctitle = "*"
nltk = "*"
pdf2image = "*"
flower = "*"
[dev-packages]
coveralls = "*"
@@ -64,9 +71,10 @@ pytest-django = "*"
pytest-env = "*"
pytest-sugar = "*"
pytest-xdist = "*"
sphinx = "~=4.5.0"
sphinx = "~=5.3"
sphinx_rtd_theme = "*"
tox = "*"
black = "*"
pre-commit = "*"
sphinx-autobuild = "*"
myst-parser = "*"

2421
Pipfile.lock generated

File diff suppressed because it is too large Load Diff

View File

@@ -2,7 +2,7 @@
[![Crowdin](https://badges.crowdin.net/paperless-ngx/localized.svg)](https://crowdin.com/project/paperless-ngx)
[![Documentation Status](https://readthedocs.org/projects/paperless-ngx/badge/?version=latest)](https://paperless-ngx.readthedocs.io/en/latest/?badge=latest)
[![Coverage Status](https://coveralls.io/repos/github/paperless-ngx/paperless-ngx/badge.svg?branch=master)](https://coveralls.io/github/paperless-ngx/paperless-ngx?branch=master)
[![Chat on Matrix](https://matrix.to/img/matrix-badge.svg)](https://matrix.to/#/#paperless:adnidor.de)
[![Chat on Matrix](https://matrix.to/img/matrix-badge.svg)](https://matrix.to/#/%23paperlessngx%3Amatrix.org)
<p align="center">
<img src="https://github.com/paperless-ngx/paperless-ngx/raw/main/resources/logo/web/png/Black%20logo%20-%20no%20background.png#gh-light-mode-only" width="50%" />
@@ -102,9 +102,10 @@ 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.
- [Paperless Mobile](https://github.com/astubenbord/paperless-mobile): A modern, feature rich mobile application for Paperless.
These projects also exist, but their status and compatibility with paperless-ngx is unknown.

View File

@@ -23,6 +23,8 @@ fi
# Parse what we can from Pipfile.lock
pikepdf_version=$(jq ".default.pikepdf.version" Pipfile.lock | sed 's/=//g' | sed 's/"//g')
psycopg2_version=$(jq ".default.psycopg2.version" Pipfile.lock | sed 's/=//g' | sed 's/"//g')
pillow_version=$(jq ".default.pillow.version" Pipfile.lock | sed 's/=//g' | sed 's/"//g')
lxml_version=$(jq ".default.lxml.version" Pipfile.lock | sed 's/=//g' | sed 's/"//g')
# Read this from the other config file
qpdf_version=$(jq ".qpdf.version" .build-config.json | sed 's/"//g')
jbig2enc_version=$(jq ".jbig2enc.version" .build-config.json | sed 's/"//g')
@@ -34,9 +36,12 @@ branch_name=$(git rev-parse --abbrev-ref HEAD)
export DOCKER_BUILDKIT=1
docker build --file "$1" \
--progress=plain \
--cache-from ghcr.io/paperless-ngx/paperless-ngx/builder/cache/app:"${branch_name}" \
--cache-from ghcr.io/paperless-ngx/paperless-ngx/builder/cache/app:dev \
--build-arg JBIG2ENC_VERSION="${jbig2enc_version}" \
--build-arg QPDF_VERSION="${qpdf_version}" \
--build-arg PIKEPDF_VERSION="${pikepdf_version}" \
--build-arg PILLOW_VERSION="${pillow_version}" \
--build-arg LXML_VERSION="${lxml_version}" \
--build-arg PSYCOPG2_VERSION="${psycopg2_version}" "${@:2}" .

View File

@@ -1,14 +0,0 @@
# This Dockerfile compiles the frontend
# Inputs: None
FROM node:16-bullseye-slim AS compile-frontend
COPY ./src /src/src
COPY ./src-ui /src/src-ui
WORKDIR /src/src-ui
RUN set -eux \
&& npm update npm -g \
&& npm ci --no-optional
RUN set -eux \
&& ./node_modules/.bin/ng build --configuration production

View File

@@ -7,6 +7,7 @@ FROM debian:bullseye-slim as main
LABEL org.opencontainers.image.description="A intermediate image with jbig2enc built"
ARG DEBIAN_FRONTEND=noninteractive
ARG JBIG2ENC_VERSION
ARG BUILD_PACKAGES="\
build-essential \
@@ -19,21 +20,16 @@ ARG BUILD_PACKAGES="\
WORKDIR /usr/src/jbig2enc
# As this is an base image for a multi-stage final image
# the added size of the install is basically irrelevant
RUN apt-get update --quiet \
&& apt-get install --yes --quiet --no-install-recommends ${BUILD_PACKAGES} \
&& rm -rf /var/lib/apt/lists/*
# Layers after this point change according to required version
# For better caching, seperate the basic installs from
# the building
ARG JBIG2ENC_VERSION
RUN set -eux \
&& git clone --quiet --branch $JBIG2ENC_VERSION https://github.com/agl/jbig2enc .
RUN set -eux \
&& ./autogen.sh
RUN set -eux \
&& ./configure && make
&& echo "Installing build tools" \
&& apt-get update --quiet \
&& apt-get install --yes --quiet --no-install-recommends ${BUILD_PACKAGES} \
&& echo "Building jbig2enc" \
&& git clone --quiet --branch $JBIG2ENC_VERSION https://github.com/agl/jbig2enc . \
&& ./autogen.sh \
&& ./configure \
&& make \
&& echo "Cleaning up image" \
&& apt-get -y purge ${BUILD_PACKAGES} \
&& apt-get -y autoremove --purge \
&& rm -rf /var/lib/apt/lists/*

View File

@@ -2,8 +2,7 @@
# Inputs:
# - REPO - Docker repository to pull qpdf from
# - QPDF_VERSION - The image qpdf version to copy .deb files from
# - PIKEPDF_GIT_TAG - The Git tag to clone and build from
# - PIKEPDF_VERSION - Used to force the built pikepdf version to match
# - PIKEPDF_VERSION - Version of pikepdf to build wheel for
# Default to pulling from the main repo registry when manually building
ARG REPO="paperless-ngx/paperless-ngx"
@@ -18,12 +17,16 @@ FROM python:3.9-slim-bullseye as main
LABEL org.opencontainers.image.description="A intermediate image with pikepdf wheel built"
ARG DEBIAN_FRONTEND=noninteractive
ARG PIKEPDF_VERSION
# These are not used, but will still bust the cache if one changes
# Otherwise, the main image will try to build thing (and fail)
ARG PILLOW_VERSION
ARG LXML_VERSION
ARG BUILD_PACKAGES="\
build-essential \
python3-dev \
python3-pip \
git \
# qpdf requirement - https://github.com/qpdf/qpdf#crypto-providers
libgnutls28-dev \
# lxml requrements - https://lxml.de/installation.html
@@ -57,36 +60,33 @@ COPY --from=qpdf-builder /usr/src/qpdf/*.deb ./
# the added size of the install is basically irrelevant
RUN set -eux \
&& apt-get update --quiet \
&& apt-get install --yes --quiet --no-install-recommends $BUILD_PACKAGES \
&& dpkg --install libqpdf28_*.deb \
&& dpkg --install libqpdf-dev_*.deb \
&& python3 -m pip install --no-cache-dir --upgrade \
pip \
wheel \
# https://pikepdf.readthedocs.io/en/latest/installation.html#requirements
pybind11 \
&& rm -rf /var/lib/apt/lists/*
# Layers after this point change according to required version
# For better caching, seperate the basic installs from
# the building
ARG PIKEPDF_GIT_TAG
ARG PIKEPDF_VERSION
RUN set -eux \
&& echo "building pikepdf wheel" \
# Note the v in the tag name here
&& git clone --quiet --depth 1 --branch "${PIKEPDF_GIT_TAG}" https://github.com/pikepdf/pikepdf.git \
&& cd pikepdf \
# pikepdf seems to specifciy either a next version when built OR
# a post release tag.
# In either case, this won't match what we want from requirements.txt
# Directly modify the setup.py to set the version we just checked out of Git
&& sed -i "s/use_scm_version=True/version=\"${PIKEPDF_VERSION}\"/g" setup.py \
# https://github.com/pikepdf/pikepdf/issues/323
&& rm pyproject.toml \
&& mkdir wheels \
&& python3 -m pip wheel . --wheel-dir wheels \
&& ls -ahl wheels
&& echo "Installing build tools" \
&& apt-get update --quiet \
&& apt-get install --yes --quiet --no-install-recommends ${BUILD_PACKAGES} \
&& echo "Installing qpdf" \
&& dpkg --install libqpdf29_*.deb \
&& dpkg --install libqpdf-dev_*.deb \
&& echo "Installing Python tools" \
&& python3 -m pip install --no-cache-dir --upgrade \
pip \
wheel \
# https://pikepdf.readthedocs.io/en/latest/installation.html#requirements
pybind11 \
&& echo "Building pikepdf wheel ${PIKEPDF_VERSION}" \
&& mkdir wheels \
&& python3 -m pip wheel \
# Build the package at the required version
pikepdf==${PIKEPDF_VERSION} \
# Output the *.whl into this directory
--wheel-dir wheels \
# Do not use a binary packge for the package being built
--no-binary=pikepdf \
# Do use binary packages for dependencies
--prefer-binary \
# Don't cache build files
--no-cache-dir \
&& ls -ahl wheels \
&& echo "Cleaning up image" \
&& apt-get -y purge ${BUILD_PACKAGES} \
&& apt-get -y autoremove --purge \
&& rm -rf /var/lib/apt/lists/*

View File

@@ -1,17 +1,16 @@
# This Dockerfile builds the psycopg2 wheel
# Inputs:
# - PSYCOPG2_GIT_TAG - The Git tag to clone and build from
# - PSYCOPG2_VERSION - Unused, kept for future possible usage
# - PSYCOPG2_VERSION - Version to build
FROM python:3.9-slim-bullseye as main
LABEL org.opencontainers.image.description="A intermediate image with psycopg2 wheel built"
ARG PSYCOPG2_VERSION
ARG DEBIAN_FRONTEND=noninteractive
ARG BUILD_PACKAGES="\
build-essential \
git \
python3-dev \
python3-pip \
# https://www.psycopg.org/docs/install.html#prerequisites
@@ -23,23 +22,27 @@ WORKDIR /usr/src
# the added size of the install is basically irrelevant
RUN set -eux \
&& apt-get update --quiet \
&& apt-get install --yes --quiet --no-install-recommends $BUILD_PACKAGES \
&& rm -rf /var/lib/apt/lists/* \
&& python3 -m pip install --no-cache-dir --upgrade pip wheel
# Layers after this point change according to required version
# For better caching, seperate the basic installs from
# the building
ARG PSYCOPG2_GIT_TAG
ARG PSYCOPG2_VERSION
RUN set -eux \
&& echo "Building psycopg2 wheel" \
&& cd /usr/src \
&& git clone --quiet --depth 1 --branch ${PSYCOPG2_GIT_TAG} https://github.com/psycopg/psycopg2.git \
&& cd psycopg2 \
&& mkdir wheels \
&& python3 -m pip wheel . --wheel-dir wheels \
&& ls -ahl wheels/
&& echo "Installing build tools" \
&& apt-get update --quiet \
&& apt-get install --yes --quiet --no-install-recommends ${BUILD_PACKAGES} \
&& echo "Installing Python tools" \
&& python3 -m pip install --no-cache-dir --upgrade pip wheel \
&& echo "Building psycopg2 wheel ${PSYCOPG2_VERSION}" \
&& cd /usr/src \
&& mkdir wheels \
&& python3 -m pip wheel \
# Build the package at the required version
psycopg2==${PSYCOPG2_VERSION} \
# Output the *.whl into this directory
--wheel-dir wheels \
# Do not use a binary packge for the package being built
--no-binary=psycopg2 \
# Do use binary packages for dependencies
--prefer-binary \
# Don't cache build files
--no-cache-dir \
&& ls -ahl wheels/ \
&& echo "Cleaning up image" \
&& apt-get -y purge ${BUILD_PACKAGES} \
&& apt-get -y autoremove --purge \
&& rm -rf /var/lib/apt/lists/*

View File

@@ -1,8 +1,15 @@
# This Dockerfile compiles the jbig2enc library
# Inputs:
# - QPDF_VERSION - the version of qpdf to build a .deb.
# Must be present as a deb-src in bookworm
FROM debian:bullseye-slim as main
LABEL org.opencontainers.image.description="A intermediate image with qpdf built"
ARG DEBIAN_FRONTEND=noninteractive
# This must match to pikepdf's minimum at least
ARG QPDF_VERSION
ARG BUILD_PACKAGES="\
build-essential \
@@ -15,39 +22,27 @@ ARG BUILD_PACKAGES="\
libjpeg62-turbo-dev \
libgnutls28-dev \
packaging-dev \
cmake \
zlib1g-dev"
WORKDIR /usr/src
# As this is an base image for a multi-stage final image
# the added size of the install is basically irrelevant
RUN set -eux \
&& apt-get update --quiet \
&& apt-get install --yes --quiet --no-install-recommends $BUILD_PACKAGES \
&& rm -rf /var/lib/apt/lists/*
# Layers after this point change according to required version
# For better caching, seperate the basic installs from
# the building
# This must match to pikepdf's minimum at least
ARG QPDF_VERSION
# In order to get the required version of qpdf, it is backported from bookwork
# and then built from source
RUN set -eux \
&& echo "Installing build tools" \
&& apt-get update --quiet \
&& apt-get install --yes --quiet --no-install-recommends $BUILD_PACKAGES \
&& echo "Getting qpdf src" \
&& echo "deb-src http://deb.debian.org/debian/ bookworm main" > /etc/apt/sources.list.d/bookworm-src.list \
&& apt-get update \
&& mkdir qpdf \
&& cd qpdf \
&& apt-get source --yes --quiet qpdf=${QPDF_VERSION}-1/bookworm \
&& echo "Building qpdf" \
&& echo "deb-src http://deb.debian.org/debian/ bookworm main" > /etc/apt/sources.list.d/bookworm-src.list \
&& apt-get update \
&& mkdir qpdf \
&& cd qpdf \
&& apt-get source --yes --quiet qpdf=${QPDF_VERSION}-1/bookworm \
&& rm -rf /var/lib/apt/lists/* \
&& cd qpdf-$QPDF_VERSION \
# We don't need to build the tests (also don't run them)
&& rm -rf libtests \
&& DEBEMAIL=hello@paperless-ngx.com debchange --bpo \
&& export DEB_BUILD_OPTIONS="terse nocheck nodoc parallel=2" \
&& dpkg-buildpackage --build=binary --unsigned-source --unsigned-changes \
&& ls -ahl ../*.deb
&& cd qpdf-$QPDF_VERSION \
&& export DEB_BUILD_OPTIONS="terse nocheck nodoc parallel=2" \
&& dpkg-buildpackage --build=binary --unsigned-source --unsigned-changes --post-clean \
&& ls -ahl ../*.deb \
&& echo "Cleaning up image" \
&& apt-get -y purge ${BUILD_PACKAGES} \
&& apt-get -y autoremove --purge \
&& rm -rf /var/lib/apt/lists/*

View File

@@ -36,3 +36,7 @@
# The default language to use for OCR. Set this to the language most of your
# documents are written in.
#PAPERLESS_OCR_LANGUAGE=eng
# Set if accessing paperless via a domain subpath e.g. https://domain.com/PATHPREFIX and using a reverse-proxy like traefik or nginx
#PAPERLESS_FORCE_SCRIPT_NAME=/PATHPREFIX
#PAPERLESS_STATIC_URL=/PATHPREFIX/static/ # trailing slash required

View File

@@ -0,0 +1,102 @@
# docker-compose file for running paperless from the Docker Hub.
# This file contains everything paperless needs to run.
# Paperless supports amd64, arm and arm64 hardware.
#
# All compose files of paperless configure paperless in the following way:
#
# - Paperless is (re)started on system boot, if it was running before shutdown.
# - Docker volumes for storing data are managed by Docker.
# - Folders for importing and exporting files are created in the same directory
# as this file and mounted to the correct folders inside the container.
# - Paperless listens on port 8000.
#
# In addition to that, this docker-compose file adds the following optional
# configurations:
#
# - Instead of SQLite (default), MariaDB is used as the database server.
# - Apache Tika and Gotenberg servers are started with paperless and paperless
# is configured to use these services. These provide support for consuming
# Office documents (Word, Excel, Power Point and their LibreOffice counter-
# parts.
#
# To install and update paperless with this file, do the following:
#
# - Copy this file as 'docker-compose.yml' and the files 'docker-compose.env'
# and '.env' into a folder.
# - Run 'docker-compose pull'.
# - Run 'docker-compose run --rm webserver createsuperuser' to create a user.
# - Run 'docker-compose up -d'.
#
# For more extensive installation and update instructions, refer to the
# documentation.
version: "3.4"
services:
broker:
image: docker.io/library/redis:7
restart: unless-stopped
volumes:
- redisdata:/data
db:
image: docker.io/library/mariadb:10
restart: unless-stopped
volumes:
- dbdata:/var/lib/mysql
environment:
MARIADB_HOST: paperless
MARIADB_DATABASE: paperless
MARIADB_USER: paperless
MARIADB_PASSWORD: paperless
MARIADB_ROOT_PASSWORD: paperless
ports:
- "3306:3306"
webserver:
image: ghcr.io/paperless-ngx/paperless-ngx:latest
restart: unless-stopped
depends_on:
- db
- broker
- gotenberg
- tika
ports:
- 8000:8000
healthcheck:
test: ["CMD", "curl", "-f", "http://localhost:8000"]
interval: 30s
timeout: 10s
retries: 5
volumes:
- data:/usr/src/paperless/data
- media:/usr/src/paperless/media
- ./export:/usr/src/paperless/export
- ./consume:/usr/src/paperless/consume
env_file: docker-compose.env
environment:
PAPERLESS_REDIS: redis://broker:6379
PAPERLESS_DBENGINE: mariadb
PAPERLESS_DBHOST: db
PAPERLESS_DBUSER: paperless # only needed if non-default username
PAPERLESS_DBPASS: paperless # only needed if non-default password
PAPERLESS_DBPORT: 3306
PAPERLESS_TIKA_ENABLED: 1
PAPERLESS_TIKA_GOTENBERG_ENDPOINT: http://gotenberg:3000
PAPERLESS_TIKA_ENDPOINT: http://tika:9998
gotenberg:
image: docker.io/gotenberg/gotenberg:7.6
restart: unless-stopped
command:
- "gotenberg"
- "--chromium-disable-routes=true"
tika:
image: ghcr.io/paperless-ngx/tika:latest
restart: unless-stopped
volumes:
data:
media:
dbdata:
redisdata:

View File

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

View File

@@ -31,13 +31,13 @@
version: "3.4"
services:
broker:
image: redis:6.0
image: docker.io/library/redis:7
restart: unless-stopped
volumes:
- redisdata:/data
db:
image: postgres:13
image: docker.io/library/postgres:13
restart: unless-stopped
volumes:
- pgdata:/var/lib/postgresql/data

View File

@@ -33,13 +33,13 @@
version: "3.4"
services:
broker:
image: redis:6.0
image: docker.io/library/redis:7
restart: unless-stopped
volumes:
- redisdata:/data
db:
image: postgres:13
image: docker.io/library/postgres:13
restart: unless-stopped
volumes:
- pgdata:/var/lib/postgresql/data
@@ -77,7 +77,7 @@ services:
PAPERLESS_TIKA_ENDPOINT: http://tika:9998
gotenberg:
image: gotenberg/gotenberg:7.4
image: docker.io/gotenberg/gotenberg:7.6
restart: unless-stopped
command:
- "gotenberg"

View File

@@ -29,13 +29,13 @@
version: "3.4"
services:
broker:
image: redis:6.0
image: docker.io/library/redis:7
restart: unless-stopped
volumes:
- redisdata:/data
db:
image: postgres:13
image: docker.io/library/postgres:13
restart: unless-stopped
volumes:
- pgdata:/var/lib/postgresql/data

View File

@@ -33,7 +33,7 @@
version: "3.4"
services:
broker:
image: redis:6.0
image: docker.io/library/redis:7
restart: unless-stopped
volumes:
- redisdata:/data
@@ -65,7 +65,7 @@ services:
PAPERLESS_TIKA_ENDPOINT: http://tika:9998
gotenberg:
image: gotenberg/gotenberg:7.4
image: docker.io/gotenberg/gotenberg:7.6
restart: unless-stopped
command:
- "gotenberg"

View File

@@ -26,7 +26,7 @@
version: "3.4"
services:
broker:
image: redis:6.0
image: docker.io/library/redis:7
restart: unless-stopped
volumes:
- redisdata:/data

View File

@@ -2,45 +2,142 @@
set -e
# Adapted from:
# https://github.com/docker-library/postgres/blob/master/docker-entrypoint.sh
# usage: file_env VAR
# ie: file_env 'XYZ_DB_PASSWORD' will allow for "$XYZ_DB_PASSWORD_FILE" to
# fill in the value of "$XYZ_DB_PASSWORD" from a file, especially for Docker's
# secrets feature
file_env() {
local -r var="$1"
local -r fileVar="${var}_FILE"
# Basic validation
if [ "${!var:-}" ] && [ "${!fileVar:-}" ]; then
echo >&2 "error: both $var and $fileVar are set (but are exclusive)"
exit 1
fi
# Only export var if the _FILE exists
if [ "${!fileVar:-}" ]; then
# And the file exists
if [[ -f ${!fileVar} ]]; then
echo "Setting ${var} from file"
val="$(< "${!fileVar}")"
export "$var"="$val"
else
echo "File ${!fileVar} doesn't exist"
exit 1
fi
fi
}
# Source: https://github.com/sameersbn/docker-gitlab/
map_uidgid() {
USERMAP_ORIG_UID=$(id -u paperless)
USERMAP_ORIG_GID=$(id -g paperless)
USERMAP_NEW_UID=${USERMAP_UID:-$USERMAP_ORIG_UID}
USERMAP_NEW_GID=${USERMAP_GID:-${USERMAP_ORIG_GID:-$USERMAP_NEW_UID}}
if [[ ${USERMAP_NEW_UID} != "${USERMAP_ORIG_UID}" || ${USERMAP_NEW_GID} != "${USERMAP_ORIG_GID}" ]]; then
echo "Mapping UID and GID for paperless:paperless to $USERMAP_NEW_UID:$USERMAP_NEW_GID"
usermod -o -u "${USERMAP_NEW_UID}" paperless
groupmod -o -g "${USERMAP_NEW_GID}" paperless
local -r usermap_original_uid=$(id -u paperless)
local -r usermap_original_gid=$(id -g paperless)
local -r usermap_new_uid=${USERMAP_UID:-$usermap_original_uid}
local -r usermap_new_gid=${USERMAP_GID:-${usermap_original_gid:-$usermap_new_uid}}
if [[ ${usermap_new_uid} != "${usermap_original_uid}" || ${usermap_new_gid} != "${usermap_original_gid}" ]]; then
echo "Mapping UID and GID for paperless:paperless to $usermap_new_uid:$usermap_new_gid"
usermod -o -u "${usermap_new_uid}" paperless
groupmod -o -g "${usermap_new_gid}" paperless
fi
}
map_folders() {
# Export these so they can be used in docker-prepare.sh
export DATA_DIR="${PAPERLESS_DATA_DIR:-/usr/src/paperless/data}"
export MEDIA_ROOT_DIR="${PAPERLESS_MEDIA_ROOT:-/usr/src/paperless/media}"
export CONSUME_DIR="${PAPERLESS_CONSUMPTION_DIR:-/usr/src/paperless/consume}"
}
nltk_data () {
# Store the NLTK data outside the Docker container
local -r nltk_data_dir="${DATA_DIR}/nltk"
local -r truthy_things=("yes y 1 t true")
# If not set, or it looks truthy
if [[ -z "${PAPERLESS_ENABLE_NLTK}" ]] || [[ "${truthy_things[*]}" =~ ${PAPERLESS_ENABLE_NLTK,} ]]; then
# Download or update the snowball stemmer data
python3 -W ignore::RuntimeWarning -m nltk.downloader -d "${nltk_data_dir}" snowball_data
# Download or update the stopwords corpus
python3 -W ignore::RuntimeWarning -m nltk.downloader -d "${nltk_data_dir}" stopwords
# Download or update the punkt tokenizer data
python3 -W ignore::RuntimeWarning -m nltk.downloader -d "${nltk_data_dir}" punkt
else
echo "Skipping NLTK data download"
fi
}
initialize() {
# Setup environment from secrets before anything else
for env_var in \
PAPERLESS_DBUSER \
PAPERLESS_DBPASS \
PAPERLESS_SECRET_KEY \
PAPERLESS_AUTO_LOGIN_USERNAME \
PAPERLESS_ADMIN_USER \
PAPERLESS_ADMIN_MAIL \
PAPERLESS_ADMIN_PASSWORD \
PAPERLESS_REDIS; do
# Check for a version of this var with _FILE appended
# and convert the contents to the env var value
file_env ${env_var}
done
# Change the user and group IDs if needed
map_uidgid
for dir in export data data/index media media/documents media/documents/originals media/documents/thumbnails; do
if [[ ! -d "../$dir" ]]; then
echo "Creating directory ../$dir"
mkdir ../$dir
# Check for overrides of certain folders
map_folders
local -r export_dir="/usr/src/paperless/export"
for dir in \
"${export_dir}" \
"${DATA_DIR}" "${DATA_DIR}/index" \
"${MEDIA_ROOT_DIR}" "${MEDIA_ROOT_DIR}/documents" "${MEDIA_ROOT_DIR}/documents/originals" "${MEDIA_ROOT_DIR}/documents/thumbnails" \
"${CONSUME_DIR}"; do
if [[ ! -d "${dir}" ]]; then
echo "Creating directory ${dir}"
mkdir "${dir}"
fi
done
echo "Creating directory /tmp/paperless"
mkdir -p /tmp/paperless
local -r tmp_dir="/tmp/paperless"
echo "Creating directory ${tmp_dir}"
mkdir -p "${tmp_dir}"
nltk_data
set +e
echo "Adjusting permissions of paperless files. This may take a while."
chown -R paperless:paperless /tmp/paperless
find .. -not \( -user paperless -and -group paperless \) -exec chown paperless:paperless {} +
chown -R paperless:paperless ${tmp_dir}
for dir in \
"${export_dir}" \
"${DATA_DIR}" \
"${MEDIA_ROOT_DIR}" \
"${CONSUME_DIR}"; do
find "${dir}" -not \( -user paperless -and -group paperless \) -exec chown paperless:paperless {} +
done
set -e
gosu paperless /sbin/docker-prepare.sh
"${gosu_cmd[@]}" /sbin/docker-prepare.sh
}
install_languages() {
echo "Installing languages..."
local langs="$1"
local -r langs="$1"
read -ra langs <<<"$langs"
# Check that it is not empty
@@ -76,6 +173,11 @@ install_languages() {
echo "Paperless-ngx docker container starting..."
gosu_cmd=(gosu paperless)
if [ "$(id -u)" == "$(id -u paperless)" ]; then
gosu_cmd=()
fi
# Install additional languages if specified
if [[ -n "$PAPERLESS_OCR_LANGUAGES" ]]; then
install_languages "$PAPERLESS_OCR_LANGUAGES"
@@ -85,7 +187,7 @@ initialize
if [[ "$1" != "/"* ]]; then
echo Executing management command "$@"
exec gosu paperless python3 manage.py "$@"
exec "${gosu_cmd[@]}" python3 manage.py "$@"
else
echo Executing "$@"
exec "$@"

View File

@@ -3,16 +3,41 @@
set -e
wait_for_postgres() {
attempt_num=1
max_attempts=5
local attempt_num=1
local -r max_attempts=5
echo "Waiting for PostgreSQL to start..."
host="${PAPERLESS_DBHOST:=localhost}"
port="${PAPERLESS_DBPORT:=5432}"
local -r host="${PAPERLESS_DBHOST:-localhost}"
local -r port="${PAPERLESS_DBPORT:-5432}"
# Disable warning, host and port can't have spaces
# shellcheck disable=SC2086
while [ ! "$(pg_isready -h ${host} -p ${port})" ]; do
while [ ! "$(pg_isready -h $host -p $port)" ]; do
if [ $attempt_num -eq $max_attempts ]; then
echo "Unable to connect to database."
exit 1
else
echo "Attempt $attempt_num failed! Trying again in 5 seconds..."
fi
attempt_num=$(("$attempt_num" + 1))
sleep 5
done
}
wait_for_mariadb() {
echo "Waiting for MariaDB to start..."
local -r host="${PAPERLESS_DBHOST:=localhost}"
local -r port="${PAPERLESS_DBPORT:=3306}"
local attempt_num=1
local -r max_attempts=5
while ! true > /dev/tcp/$host/$port; do
if [ $attempt_num -eq $max_attempts ]; then
echo "Unable to connect to database."
@@ -43,17 +68,18 @@ migrations() {
flock 200
echo "Apply database migrations..."
python3 manage.py migrate
) 200>/usr/src/paperless/data/migration_lock
) 200>"${DATA_DIR}/migration_lock"
}
search_index() {
index_version=1
index_version_file=/usr/src/paperless/data/.index_version
if [[ (! -f "$index_version_file") || $(<$index_version_file) != "$index_version" ]]; then
local -r index_version=1
local -r index_version_file=${DATA_DIR}/.index_version
if [[ (! -f "${index_version_file}") || $(<"${index_version_file}") != "$index_version" ]]; then
echo "Search index out of date. Updating..."
python3 manage.py document_index reindex
echo $index_version | tee $index_version_file >/dev/null
python3 manage.py document_index reindex --no-progress-bar
echo ${index_version} | tee "${index_version_file}" >/dev/null
fi
}
@@ -63,8 +89,50 @@ superuser() {
fi
}
custom_container_init() {
# Mostly borrowed from the LinuxServer.io base image
# https://github.com/linuxserver/docker-baseimage-ubuntu/tree/bionic/root/etc/cont-init.d
local -r custom_script_dir="/custom-cont-init.d"
# Tamper checking.
# Don't run files which are owned by anyone except root
# Don't run files which are writeable by others
if [ -d "${custom_script_dir}" ]; then
if [ -n "$(/usr/bin/find "${custom_script_dir}" -maxdepth 1 ! -user root)" ]; then
echo "**** Potential tampering with custom scripts detected ****"
echo "**** The folder '${custom_script_dir}' must be owned by root ****"
return 0
fi
if [ -n "$(/usr/bin/find "${custom_script_dir}" -maxdepth 1 -perm -o+w)" ]; then
echo "**** The folder '${custom_script_dir}' or some of contents have write permissions for others, which is a security risk. ****"
echo "**** Please review the permissions and their contents to make sure they are owned by root, and can only be modified by root. ****"
return 0
fi
# Make sure custom init directory has files in it
if [ -n "$(/bin/ls -A "${custom_script_dir}" 2>/dev/null)" ]; then
echo "[custom-init] files found in ${custom_script_dir} executing"
# Loop over files in the directory
for SCRIPT in "${custom_script_dir}"/*; do
NAME="$(basename "${SCRIPT}")"
if [ -f "${SCRIPT}" ]; then
echo "[custom-init] ${NAME}: executing..."
/bin/bash "${SCRIPT}"
echo "[custom-init] ${NAME}: exited $?"
elif [ ! -f "${SCRIPT}" ]; then
echo "[custom-init] ${NAME}: is not a file"
fi
done
else
echo "[custom-init] no custom files found exiting..."
fi
fi
}
do_work() {
if [[ -n "${PAPERLESS_DBHOST}" ]]; then
if [[ "${PAPERLESS_DBENGINE}" == "mariadb" ]]; then
wait_for_mariadb
elif [[ -n "${PAPERLESS_DBHOST}" ]]; then
wait_for_postgres
fi
@@ -76,6 +144,9 @@ do_work() {
superuser
# Leave this last thing
custom_container_init
}
do_work

View File

@@ -0,0 +1,7 @@
#!/usr/bin/env bash
echo "Checking if we should start flower..."
if [[ -n "${PAPERLESS_ENABLE_FLOWER}" ]]; then
celery --app paperless flower
fi

View File

@@ -2,7 +2,18 @@
set -eu
for command in document_archiver document_exporter document_importer mail_fetcher document_create_classifier document_index document_renamer document_retagger document_thumbnails document_sanity_checker manage_superuser;
for command in decrypt_documents \
document_archiver \
document_exporter \
document_importer \
mail_fetcher \
document_create_classifier \
document_index \
document_renamer \
document_retagger \
document_thumbnails \
document_sanity_checker \
manage_superuser;
do
echo "installing $command..."
sed "s/management_command/$command/g" management_script.sh > /usr/local/bin/$command

15
docker/paperless_cmd.sh Executable file
View File

@@ -0,0 +1,15 @@
#!/usr/bin/env bash
rootless_args=()
if [ "$(id -u)" == "$(id -u paperless)" ]; then
rootless_args=(
--user
paperless
--logfile
supervisord.log
--pidfile
supervisord.pid
)
fi
exec /usr/local/bin/supervisord -c /etc/supervisord.conf "${rootless_args[@]}"

View File

@@ -10,7 +10,7 @@ user=root
[program:gunicorn]
command=gunicorn -c /usr/src/paperless/gunicorn.conf.py paperless.asgi:application
user=paperless
priority = 1
stdout_logfile=/dev/stdout
stdout_logfile_maxbytes=0
stderr_logfile=/dev/stderr
@@ -19,17 +19,41 @@ stderr_logfile_maxbytes=0
[program:consumer]
command=python3 manage.py document_consumer
user=paperless
stopsignal=INT
priority = 20
stdout_logfile=/dev/stdout
stdout_logfile_maxbytes=0
stderr_logfile=/dev/stderr
stderr_logfile_maxbytes=0
[program:scheduler]
command=python3 manage.py qcluster
[program:celery]
command = celery --app paperless worker --loglevel INFO
user=paperless
stopasgroup = true
stopwaitsecs = 60
priority = 5
stdout_logfile=/dev/stdout
stdout_logfile_maxbytes=0
stderr_logfile=/dev/stderr
stderr_logfile_maxbytes=0
[program:celery-beat]
command = celery --app paperless beat --loglevel INFO
user=paperless
stopasgroup = true
priority = 10
stdout_logfile=/dev/stdout
stdout_logfile_maxbytes=0
stderr_logfile=/dev/stderr
stderr_logfile_maxbytes=0
[program:celery-flower]
command = /usr/local/bin/flower-conditional.sh
user = paperless
startsecs = 0
priority = 40
stdout_logfile=/dev/stdout
stdout_logfile_maxbytes=0
stderr_logfile=/dev/stderr

View File

@@ -18,7 +18,7 @@ if __name__ == "__main__":
REDIS_URL: Final[str] = os.getenv("PAPERLESS_REDIS", "redis://localhost:6379")
print(f"Waiting for Redis: {REDIS_URL}", flush=True)
print(f"Waiting for Redis...", flush=True)
attempt = 0
with Redis.from_url(url=REDIS_URL) as client:
@@ -26,17 +26,19 @@ 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)
attempt += 1
if attempt >= MAX_RETRY_COUNT:
print(f"Failed to connect to: {REDIS_URL}")
print(f"Failed to connect to redis using environment variable PAPERLESS_REDIS.")
sys.exit(os.EX_UNAVAILABLE)
else:
print(f"Connected to Redis broker: {REDIS_URL}")
print(f"Connected to Redis broker.")
sys.exit(os.EX_OK)

View File

@@ -1,17 +0,0 @@
FROM python:3.5.1
# Install Sphinx and Pygments
RUN pip install --no-cache-dir Sphinx Pygments \
# Setup directories, copy data
&& mkdir /build
COPY . /build
WORKDIR /build/docs
# Build documentation
RUN make html
# Start webserver
WORKDIR /build/docs/_build/html
EXPOSE 8000/tcp
CMD ["python3", "-m", "http.server"]

View File

@@ -24,6 +24,7 @@ I18NSPHINXOPTS = $(PAPEROPT_$(PAPER)) $(SPHINXOPTS) .
help:
@echo "Please use \`make <target>' where <target> 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

View File

@@ -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;
}
@@ -435,7 +439,8 @@ a.image-reference img {
}
.rst-content code.literal,
.rst-content tt.literal {
.rst-content tt.literal,
html.writer-html5 .rst-content dl.footnote code {
border-color: var(--color-border);
background-color: var(--color-border);
color: var(--color-text-code-inline)

View File

@@ -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 <head>
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 <head> 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)

View File

@@ -35,13 +35,15 @@ Options available to docker installations:
``/var/lib/docker/volumes`` on the host and you need to be root in order
to access them.
Paperless uses 3 volumes:
Paperless uses 4 volumes:
* ``paperless_media``: This is where your documents are stored.
* ``paperless_data``: This is where auxillary data is stored. This
folder also contains the SQLite database, if you use it.
* ``paperless_pgdata``: Exists only if you use PostgreSQL and contains
the database.
* ``paperless_dbdata``: Exists only if you use MariaDB and contains
the database.
Options available to bare-metal and non-docker installations:
@@ -49,7 +51,7 @@ Options available to bare-metal and non-docker installations:
crashes at some point or your disk fails, you can simply copy the folder back
into place and it works.
When using PostgreSQL, you'll also have to backup the database.
When using PostgreSQL or MariaDB, you'll also have to backup the database.
.. _migrating-restoring:
@@ -118,10 +120,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::
@@ -287,6 +289,10 @@ When you use the provided docker compose script, put the export inside the
``export`` folder in your paperless source directory. Specify ``../export``
as the ``source``.
.. note::
Importing from a previous version of Paperless may work, but for best results
it is suggested to match the versions.
.. _utilities-retagger:
@@ -306,6 +312,7 @@ there are tools for it.
-c, --correspondent
-T, --tags
-t, --document_type
-s, --storage_path
-i, --inbox-only
--use-first
-f, --overwrite
@@ -314,7 +321,7 @@ Run this after changing or adding matching rules. It'll loop over all
of the documents in your database and attempt to match documents
according to the new rules.
Specify any combination of ``-c``, ``-T`` and ``-t`` to have the
Specify any combination of ``-c``, ``-T``, ``-t`` and ``-s`` to have the
retagger perform matching of the specified metadata type. If you don't
specify any of these options, the document retagger won't do anything.
@@ -386,8 +393,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::
@@ -440,6 +447,14 @@ command:
The command takes no arguments and processes all your mail accounts and rules.
.. note::
As of October 2022 Microsoft no longer supports IMAP authentication for Exchange
servers, thus Exchange is no longer supported until a solution is implemented in
the Python IMAP library used by Paperless. See `learn.microsoft.com`_
.. _learn.microsoft.com: https://learn.microsoft.com/en-us/exchange/clients-and-mobile-in-exchange-online/deprecation-of-basic-authentication-exchange-online
.. _utilities-archiver:
Creating archived documents

View File

@@ -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
####################################
@@ -120,10 +121,10 @@ Pre-consumption script
======================
Executed after the consumer sees a new document in the consumption folder, but
before any processing of the document is performed. This script receives exactly
one argument:
before any processing of the document is performed. This script can access the
following relevant environment variables set:
* Document file name
* ``DOCUMENT_SOURCE_PATH``
A simple but common example for this would be creating a simple script like
this:
@@ -133,7 +134,7 @@ this:
.. code:: bash
#!/usr/bin/env bash
pdf2pdfocr.py -i ${1}
pdf2pdfocr.py -i ${DOCUMENT_SOURCE_PATH}
``/etc/paperless.conf``
@@ -156,16 +157,21 @@ Post-consumption script
=======================
Executed after the consumer has successfully processed a document and has moved it
into paperless. It receives the following arguments:
into paperless. It receives the following environment variables:
* Document id
* Generated file name
* Source path
* Thumbnail path
* Download URL
* Thumbnail URL
* Correspondent
* Tags
* ``DOCUMENT_ID``
* ``DOCUMENT_FILE_NAME``
* ``DOCUMENT_CREATED``
* ``DOCUMENT_MODIFIED``
* ``DOCUMENT_ADDED``
* ``DOCUMENT_SOURCE_PATH``
* ``DOCUMENT_ARCHIVE_PATH``
* ``DOCUMENT_THUMBNAIL_PATH``
* ``DOCUMENT_DOWNLOAD_URL``
* ``DOCUMENT_THUMBNAIL_URL``
* ``DOCUMENT_CORRESPONDENT``
* ``DOCUMENT_TAGS``
* ``DOCUMENT_ORIGINAL_FILENAME``
The script can be in any language, but for a simple shell script
example, you can take a look at `post-consumption-example.sh`_ in this project.
@@ -212,7 +218,8 @@ using the identifier which it has assigned to each document. You will end up get
files like ``0000123.pdf`` in your media directory. This isn't necessarily a bad
thing, because you normally don't have to access these files manually. However, if
you wish to name your files differently, you can do that by adjusting the
``PAPERLESS_FILENAME_FORMAT`` configuration option.
``PAPERLESS_FILENAME_FORMAT`` configuration option. Paperless adds the correct
file extension e.g. ``.pdf``, ``.jpg`` automatically.
This variable allows you to configure the filename (folders are allowed) using
placeholders. For example, configuring this to
@@ -251,12 +258,18 @@ Paperless provides the following placeholders within filenames:
* ``{tag_list}``: A comma separated list of all tags assigned to the document.
* ``{title}``: The title of the document.
* ``{created}``: The full date (ISO format) the document was created.
* ``{created_year}``: Year created only.
* ``{created_year}``: Year created only, formatted as the year with century.
* ``{created_year_short}``: Year created only, formatted as the year without century, zero padded.
* ``{created_month}``: Month created only (number 01-12).
* ``{created_month_name}``: Month created name, as per locale
* ``{created_month_name_short}``: Month created abbreviated name, as per locale
* ``{created_day}``: Day created only (number 01-31).
* ``{added}``: The full date (ISO format) the document was added to paperless.
* ``{added_year}``: Year added only.
* ``{added_year_short}``: Year added only, formatted as the year without century, zero padded.
* ``{added_month}``: Month added only (number 01-12).
* ``{added_month_name}``: Month added name, as per locale
* ``{added_month_name_short}``: Month added abbreviated name, as per locale
* ``{added_day}``: Day added only (number 01-31).
@@ -268,6 +281,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 +314,106 @@ 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 <utilities-renamer>` to adjust their pathes.
.. _advanced-celery-monitoring:
Celery Monitoring
#################
The monitoring tool `Flower <https://flower.readthedocs.io/en/latest/index.html>`_ can be used to view more
detailed information about the health of the celery workers used for asynchronous tasks. This includes details
on currently running, queued and completed tasks, timing and more. Flower can also be used with Prometheus, as it
exports metrics. For details on its capabilities, refer to the Flower documentation.
To configure Flower further, create a `flowerconfig.py` and place it into the `src/paperless` directory. For
a Docker installation, you can use volumes to accomplish this:
.. code:: yaml
services:
# ...
webserver:
# ...
volumes:
- /path/to/my/flowerconfig.py:/usr/src/paperless/src/paperless/flowerconfig.py:ro
Custom Container Initialization
###############################
The Docker image includes the ability to run custom user scripts during startup. This could be
utilized for installing additional tools or Python packages, for example.
To utilize this, mount a folder containing your scripts to the custom initialization directory, `/custom-cont-init.d`
and place scripts you wish to run inside. For security, the folder and its contents must be owned by `root`.
Additionally, scripts must only be writable by `root`.
Your scripts will be run directly before the webserver completes startup. Scripts will be run by the `root` user.
This is an advanced functionality with which you could break functionality or lose data.
For example, using Docker Compose:
.. code:: yaml
services:
# ...
webserver:
# ...
volumes:
- /path/to/my/scripts:/custom-cont-init.d:ro

View File

@@ -31,7 +31,8 @@ The objects served by the document endpoint contain the following fields:
* ``tags``: List of IDs of tags assigned to this document, or empty list.
* ``document_type``: Document type of this document, or null.
* ``correspondent``: Correspondent of this document or null.
* ``created``: The date at which this document was created.
* ``created``: The date time at which this document was created.
* ``created_date``: The date (YYYY-MM-DD) at which this document was created. Optional. If also passed with created, this is ignored.
* ``modified``: The date at which this document was last edited in paperless. Read-only.
* ``added``: The date at which this document was added to paperless. Read-only.
* ``archive_serial_number``: The identifier of this document in a physical document archive.
@@ -240,11 +241,13 @@ be instructed to consume the document from there.
The endpoint supports the following optional form fields:
* ``title``: Specify a title that the consumer should use for the document.
* ``created``: Specify a DateTime where the document was created (e.g. "2016-04-19" or "2016-04-19 06:15:00+02:00").
* ``correspondent``: Specify the ID of a correspondent that the consumer should use for the document.
* ``document_type``: Similar to correspondent.
* ``tags``: Similar to correspondent. Specify this multiple times to have multiple tags added
to the document.
The endpoint will immediately return "OK" if the document consumption process
was started successfully. No additional status information about the consumption
process itself is available, since that happens in a different process.

View File

@@ -1,206 +1,536 @@
# Changelog
## paperless-ngx 1.9.2
### Bug Fixes
- Bugfix: Allow PAPERLESS_OCR_CLEAN=none [@shamoon](https://github.com/shamoon) ([#1670](https://github.com/paperless-ngx/paperless-ngx/pull/1670))
### All App Changes
- Chore: Bumps version numbers to 1.9.2 [@stumpylog](https://github.com/stumpylog) ([#1666](https://github.com/paperless-ngx/paperless-ngx/pull/1666))
## paperless-ngx 1.9.1
### Notes
- Version 1.9.1 incorrectly displays the version string as 1.9.0
### Bug Fixes
- Bugfix: Fixes missing OCR mode skip_noarchive [@stumpylog](https://github.com/stumpylog) ([#1645](https://github.com/paperless-ngx/paperless-ngx/pull/1645))
- Fix reset button padding on small screens [@shamoon](https://github.com/shamoon) ([#1646](https://github.com/paperless-ngx/paperless-ngx/pull/1646))
### Documentation
- Improve docs re [@janis-ax](https://github.com/janis-ax) ([#1625](https://github.com/paperless-ngx/paperless-ngx/pull/1625))
- [Documentation] Add v1.9.0 changelog [@github-actions](https://github.com/github-actions) ([#1639](https://github.com/paperless-ngx/paperless-ngx/pull/1639))
### All App Changes
- Bugfix: Fixes missing OCR mode skip_noarchive [@stumpylog](https://github.com/stumpylog) ([#1645](https://github.com/paperless-ngx/paperless-ngx/pull/1645))
- Fix reset button padding on small screens [@shamoon](https://github.com/shamoon) ([#1646](https://github.com/paperless-ngx/paperless-ngx/pull/1646))
## paperless-ngx 1.9.0
### Features
- Feature: Faster, less memory barcode handling [@stumpylog](https://github.com/stumpylog) ([#1594](https://github.com/paperless-ngx/paperless-ngx/pull/1594))
- Feature: Display django-q process names [@stumpylog](https://github.com/stumpylog) ([#1567](https://github.com/paperless-ngx/paperless-ngx/pull/1567))
- Feature: Add MariaDB support [@bckelly1](https://github.com/bckelly1) ([#543](https://github.com/paperless-ngx/paperless-ngx/pull/543))
- Feature: Simplify IMAP login for UTF-8 [@stumpylog](https://github.com/stumpylog) ([#1492](https://github.com/paperless-ngx/paperless-ngx/pull/1492))
- Feature: Even better re-do of OCR [@stumpylog](https://github.com/stumpylog) ([#1451](https://github.com/paperless-ngx/paperless-ngx/pull/1451))
- Feature: document comments [@tim-vogel](https://github.com/tim-vogel) ([#1375](https://github.com/paperless-ngx/paperless-ngx/pull/1375))
- Adding date suggestions to the documents details view [@Eckii24](https://github.com/Eckii24) ([#1367](https://github.com/paperless-ngx/paperless-ngx/pull/1367))
- Feature: Event driven consumer [@stumpylog](https://github.com/stumpylog) ([#1421](https://github.com/paperless-ngx/paperless-ngx/pull/1421))
- Feature: Adds storage paths to re-tagger command [@stumpylog](https://github.com/stumpylog) ([#1446](https://github.com/paperless-ngx/paperless-ngx/pull/1446))
- Feature: Preserve original filename in metadata [@GwynHannay](https://github.com/GwynHannay) ([#1440](https://github.com/paperless-ngx/paperless-ngx/pull/1440))
- Handle tags for gmail email accounts [@sisao](https://github.com/sisao) ([#1433](https://github.com/paperless-ngx/paperless-ngx/pull/1433))
- Update redis image [@tribut](https://github.com/tribut) ([#1436](https://github.com/paperless-ngx/paperless-ngx/pull/1436))
- PAPERLESS_REDIS may be set via docker secrets [@DennisGaida](https://github.com/DennisGaida) ([#1405](https://github.com/paperless-ngx/paperless-ngx/pull/1405))
### Bug Fixes
- paperless_cmd.sh: use exec to run supervisord [@lemmi](https://github.com/lemmi) ([#1617](https://github.com/paperless-ngx/paperless-ngx/pull/1617))
- Fix: Double barcode separation creates empty file [@stumpylog](https://github.com/stumpylog) ([#1596](https://github.com/paperless-ngx/paperless-ngx/pull/1596))
- Fix: Resolve issue with slow classifier [@stumpylog](https://github.com/stumpylog) ([#1576](https://github.com/paperless-ngx/paperless-ngx/pull/1576))
- Fix document comments not updating on document navigation [@shamoon](https://github.com/shamoon) ([#1566](https://github.com/paperless-ngx/paperless-ngx/pull/1566))
- Fix: Include storage paths in document exporter [@shamoon](https://github.com/shamoon) ([#1557](https://github.com/paperless-ngx/paperless-ngx/pull/1557))
- Chore: Cleanup and validate settings [@stumpylog](https://github.com/stumpylog) ([#1551](https://github.com/paperless-ngx/paperless-ngx/pull/1551))
- Bugfix: Better gunicorn settings for workers [@stumpylog](https://github.com/stumpylog) ([#1500](https://github.com/paperless-ngx/paperless-ngx/pull/1500))
- Fix actions button in tasks table [@shamoon](https://github.com/shamoon) ([#1488](https://github.com/paperless-ngx/paperless-ngx/pull/1488))
- Fix: Add missing filter rule types to SavedViewFilterRule model \& fix migrations [@shamoon](https://github.com/shamoon) ([#1463](https://github.com/paperless-ngx/paperless-ngx/pull/1463))
- Fix paperless.conf.example typo [@qcasey](https://github.com/qcasey) ([#1460](https://github.com/paperless-ngx/paperless-ngx/pull/1460))
- Bugfix: Fixes the creation of an archive file, even if noarchive was specified [@stumpylog](https://github.com/stumpylog) ([#1442](https://github.com/paperless-ngx/paperless-ngx/pull/1442))
- Fix: created_date should not be required [@shamoon](https://github.com/shamoon) ([#1412](https://github.com/paperless-ngx/paperless-ngx/pull/1412))
- Fix: dev backend testing [@stumpylog](https://github.com/stumpylog) ([#1420](https://github.com/paperless-ngx/paperless-ngx/pull/1420))
- Bugfix: Catch all exceptions during the task signals [@stumpylog](https://github.com/stumpylog) ([#1387](https://github.com/paperless-ngx/paperless-ngx/pull/1387))
- Fix: saved view page parameter [@shamoon](https://github.com/shamoon) ([#1376](https://github.com/paperless-ngx/paperless-ngx/pull/1376))
- Fix: Correct browser unsaved changes warning [@shamoon](https://github.com/shamoon) ([#1369](https://github.com/paperless-ngx/paperless-ngx/pull/1369))
- Fix: correct date pasting with other formats [@shamoon](https://github.com/shamoon) ([#1370](https://github.com/paperless-ngx/paperless-ngx/pull/1370))
- Bugfix: Allow webserver bind address to be configured [@stumpylog](https://github.com/stumpylog) ([#1358](https://github.com/paperless-ngx/paperless-ngx/pull/1358))
- Bugfix: Chain exceptions during exception handling [@stumpylog](https://github.com/stumpylog) ([#1354](https://github.com/paperless-ngx/paperless-ngx/pull/1354))
- Fix: missing tooltip translation \& filter editor wrapping [@shamoon](https://github.com/shamoon) ([#1305](https://github.com/paperless-ngx/paperless-ngx/pull/1305))
- Bugfix: Interaction between barcode and directories as tags [@stumpylog](https://github.com/stumpylog) ([#1303](https://github.com/paperless-ngx/paperless-ngx/pull/1303))
### Documentation
- [Beta] Paperless-ngx v1.9.0 Release Candidate [@stumpylog](https://github.com/stumpylog) ([#1560](https://github.com/paperless-ngx/paperless-ngx/pull/1560))
- docs/configuration: Fix binary variable defaults [@erikarvstedt](https://github.com/erikarvstedt) ([#1528](https://github.com/paperless-ngx/paperless-ngx/pull/1528))
- Info about installing on subpath [@viktor-c](https://github.com/viktor-c) ([#1350](https://github.com/paperless-ngx/paperless-ngx/pull/1350))
- Docs: move scanner \& software recs to GH wiki [@shamoon](https://github.com/shamoon) ([#1482](https://github.com/paperless-ngx/paperless-ngx/pull/1482))
- Docs: Update mobile scanner section [@tooomm](https://github.com/tooomm) ([#1467](https://github.com/paperless-ngx/paperless-ngx/pull/1467))
- Adding date suggestions to the documents details view [@Eckii24](https://github.com/Eckii24) ([#1367](https://github.com/paperless-ngx/paperless-ngx/pull/1367))
- docs: scanners: add Brother ads4700w [@ocelotsloth](https://github.com/ocelotsloth) ([#1450](https://github.com/paperless-ngx/paperless-ngx/pull/1450))
- Feature: Adds storage paths to re-tagger command [@stumpylog](https://github.com/stumpylog) ([#1446](https://github.com/paperless-ngx/paperless-ngx/pull/1446))
- Changes to Redis documentation [@Zerteax](https://github.com/Zerteax) ([#1441](https://github.com/paperless-ngx/paperless-ngx/pull/1441))
- Update scanners.rst [@glassbox-sco](https://github.com/glassbox-sco) ([#1430](https://github.com/paperless-ngx/paperless-ngx/pull/1430))
- Update scanners.rst [@derlucas](https://github.com/derlucas) ([#1415](https://github.com/paperless-ngx/paperless-ngx/pull/1415))
- Bugfix: Allow webserver bind address to be configured [@stumpylog](https://github.com/stumpylog) ([#1358](https://github.com/paperless-ngx/paperless-ngx/pull/1358))
- docs: fix small typo [@tooomm](https://github.com/tooomm) ([#1352](https://github.com/paperless-ngx/paperless-ngx/pull/1352))
- [Documentation] Add v1.8.0 changelog [@github-actions](https://github.com/github-actions) ([#1298](https://github.com/paperless-ngx/paperless-ngx/pull/1298))
### Maintenance
- [Beta] Paperless-ngx v1.9.0 Release Candidate [@stumpylog](https://github.com/stumpylog) ([#1560](https://github.com/paperless-ngx/paperless-ngx/pull/1560))
- paperless_cmd.sh: use exec to run supervisord [@lemmi](https://github.com/lemmi) ([#1617](https://github.com/paperless-ngx/paperless-ngx/pull/1617))
- Chore: Extended container image cleanup [@stumpylog](https://github.com/stumpylog) ([#1556](https://github.com/paperless-ngx/paperless-ngx/pull/1556))
- Chore: Smaller library images [@stumpylog](https://github.com/stumpylog) ([#1546](https://github.com/paperless-ngx/paperless-ngx/pull/1546))
- Bump tj-actions/changed-files from 24 to 29.0.2 [@dependabot](https://github.com/dependabot) ([#1493](https://github.com/paperless-ngx/paperless-ngx/pull/1493))
- Bugfix: Better gunicorn settings for workers [@stumpylog](https://github.com/stumpylog) ([#1500](https://github.com/paperless-ngx/paperless-ngx/pull/1500))
- [CI] Fix release drafter issues [@qcasey](https://github.com/qcasey) ([#1301](https://github.com/paperless-ngx/paperless-ngx/pull/1301))
- Fix: dev backend testing [@stumpylog](https://github.com/stumpylog) ([#1420](https://github.com/paperless-ngx/paperless-ngx/pull/1420))
- Chore: Exclude dependabot PRs from Project, set status to Needs Review [@qcasey](https://github.com/qcasey) ([#1397](https://github.com/paperless-ngx/paperless-ngx/pull/1397))
- Chore: Add to label PRs based on and title [@qcasey](https://github.com/qcasey) ([#1396](https://github.com/paperless-ngx/paperless-ngx/pull/1396))
- Chore: use pre-commit in the Ci workflow [@stumpylog](https://github.com/stumpylog) ([#1362](https://github.com/paperless-ngx/paperless-ngx/pull/1362))
- Chore: Fixes permissions for image tag cleanup [@stumpylog](https://github.com/stumpylog) ([#1315](https://github.com/paperless-ngx/paperless-ngx/pull/1315))
- Bump leonsteinhaeuser/project-beta-automations from 1.2.1 to 1.3.0 [@dependabot](https://github.com/dependabot) ([#1328](https://github.com/paperless-ngx/paperless-ngx/pull/1328))
- Bump tj-actions/changed-files from 23.1 to 24 [@dependabot](https://github.com/dependabot) ([#1329](https://github.com/paperless-ngx/paperless-ngx/pull/1329))
- Feature: Remove requirements.txt and use pipenv everywhere [@stumpylog](https://github.com/stumpylog) ([#1316](https://github.com/paperless-ngx/paperless-ngx/pull/1316))
### Dependencies
<details>
<summary>34 changes</summary>
- Bump pikepdf from 5.5.0 to 5.6.1 [@dependabot](https://github.com/dependabot) ([#1537](https://github.com/paperless-ngx/paperless-ngx/pull/1537))
- Bump black from 22.6.0 to 22.8.0 [@dependabot](https://github.com/dependabot) ([#1539](https://github.com/paperless-ngx/paperless-ngx/pull/1539))
- Bump tqdm from 4.64.0 to 4.64.1 [@dependabot](https://github.com/dependabot) ([#1540](https://github.com/paperless-ngx/paperless-ngx/pull/1540))
- Bump pytest from 7.1.2 to 7.1.3 [@dependabot](https://github.com/dependabot) ([#1538](https://github.com/paperless-ngx/paperless-ngx/pull/1538))
- Bump tj-actions/changed-files from 24 to 29.0.2 [@dependabot](https://github.com/dependabot) ([#1493](https://github.com/paperless-ngx/paperless-ngx/pull/1493))
- Bump angular packages, jest-preset-angular in src-ui [@dependabot](https://github.com/dependabot) ([#1502](https://github.com/paperless-ngx/paperless-ngx/pull/1502))
- Bump jest-environment-jsdom from 28.1.3 to 29.0.1 in /src-ui [@dependabot](https://github.com/dependabot) ([#1507](https://github.com/paperless-ngx/paperless-ngx/pull/1507))
- Bump [@<!---->types/node from 18.6.3 to 18.7.14 in /src-ui @dependabot](https://github.com/<!---->types/node from 18.6.3 to 18.7.14 in /src-ui @dependabot) ([#1506](https://github.com/paperless-ngx/paperless-ngx/pull/1506))
- Bump [@<!---->angular-builders/jest from 14.0.0 to 14.0.1 in /src-ui @dependabot](https://github.com/<!---->angular-builders/jest from 14.0.0 to 14.0.1 in /src-ui @dependabot) ([#1505](https://github.com/paperless-ngx/paperless-ngx/pull/1505))
- Bump zone.js from 0.11.7 to 0.11.8 in /src-ui [@dependabot](https://github.com/dependabot) ([#1504](https://github.com/paperless-ngx/paperless-ngx/pull/1504))
- Bump ngx-color from 8.0.1 to 8.0.2 in /src-ui [@dependabot](https://github.com/dependabot) ([#1494](https://github.com/paperless-ngx/paperless-ngx/pull/1494))
- Bump cypress from 10.3.1 to 10.7.0 in /src-ui [@dependabot](https://github.com/dependabot) ([#1496](https://github.com/paperless-ngx/paperless-ngx/pull/1496))
- Bump [@<!---->cypress/schematic from 2.0.0 to 2.1.1 in /src-ui @dependabot](https://github.com/<!---->cypress/schematic from 2.0.0 to 2.1.1 in /src-ui @dependabot) ([#1495](https://github.com/paperless-ngx/paperless-ngx/pull/1495))
- Bump [@<!---->popperjs/core from 2.11.5 to 2.11.6 in /src-ui @dependabot](https://github.com/<!---->popperjs/core from 2.11.5 to 2.11.6 in /src-ui @dependabot) ([#1498](https://github.com/paperless-ngx/paperless-ngx/pull/1498))
- Bump sphinx from 5.0.2 to 5.1.1 [@dependabot](https://github.com/dependabot) ([#1297](https://github.com/paperless-ngx/paperless-ngx/pull/1297))
- Chore: Bump Python dependencies [@stumpylog](https://github.com/stumpylog) ([#1445](https://github.com/paperless-ngx/paperless-ngx/pull/1445))
- Chore: Update Python deps [@stumpylog](https://github.com/stumpylog) ([#1391](https://github.com/paperless-ngx/paperless-ngx/pull/1391))
- Bump watchfiles from 0.15.0 to 0.16.1 [@dependabot](https://github.com/dependabot) ([#1285](https://github.com/paperless-ngx/paperless-ngx/pull/1285))
- Bump leonsteinhaeuser/project-beta-automations from 1.2.1 to 1.3.0 [@dependabot](https://github.com/dependabot) ([#1328](https://github.com/paperless-ngx/paperless-ngx/pull/1328))
- Bump tj-actions/changed-files from 23.1 to 24 [@dependabot](https://github.com/dependabot) ([#1329](https://github.com/paperless-ngx/paperless-ngx/pull/1329))
- Bump cypress from 10.3.0 to 10.3.1 in /src-ui [@dependabot](https://github.com/dependabot) ([#1342](https://github.com/paperless-ngx/paperless-ngx/pull/1342))
- Bump ngx-color from 7.3.3 to 8.0.1 in /src-ui [@dependabot](https://github.com/dependabot) ([#1343](https://github.com/paperless-ngx/paperless-ngx/pull/1343))
- Bump [@<!---->angular/cli from 14.0.4 to 14.1.0 in /src-ui @dependabot](https://github.com/<!---->angular/cli from 14.0.4 to 14.1.0 in /src-ui @dependabot) ([#1330](https://github.com/paperless-ngx/paperless-ngx/pull/1330))
- Bump [@<!---->types/node from 18.0.0 to 18.6.3 in /src-ui @dependabot](https://github.com/<!---->types/node from 18.0.0 to 18.6.3 in /src-ui @dependabot) ([#1341](https://github.com/paperless-ngx/paperless-ngx/pull/1341))
- Bump jest-preset-angular from 12.1.0 to 12.2.0 in /src-ui [@dependabot](https://github.com/dependabot) ([#1340](https://github.com/paperless-ngx/paperless-ngx/pull/1340))
- Bump concurrently from 7.2.2 to 7.3.0 in /src-ui [@dependabot](https://github.com/dependabot) ([#1326](https://github.com/paperless-ngx/paperless-ngx/pull/1326))
- Bump ng2-pdf-viewer from 9.0.0 to 9.1.0 in /src-ui [@dependabot](https://github.com/dependabot) ([#1337](https://github.com/paperless-ngx/paperless-ngx/pull/1337))
- Bump jest-environment-jsdom from 28.1.2 to 28.1.3 in /src-ui [@dependabot](https://github.com/dependabot) ([#1336](https://github.com/paperless-ngx/paperless-ngx/pull/1336))
- Bump ngx-file-drop from 13.0.0 to 14.0.1 in /src-ui [@dependabot](https://github.com/dependabot) ([#1331](https://github.com/paperless-ngx/paperless-ngx/pull/1331))
- Bump jest and [@<!---->types/jest in /src-ui @dependabot](https://github.com/<!---->types/jest in /src-ui @dependabot) ([#1333](https://github.com/paperless-ngx/paperless-ngx/pull/1333))
- Bump bootstrap from 5.1.3 to 5.2.0 in /src-ui [@dependabot](https://github.com/dependabot) ([#1327](https://github.com/paperless-ngx/paperless-ngx/pull/1327))
- Bump typescript from 4.6.4 to 4.7.4 in /src-ui [@dependabot](https://github.com/dependabot) ([#1324](https://github.com/paperless-ngx/paperless-ngx/pull/1324))
- Bump ts-node from 10.8.1 to 10.9.1 in /src-ui [@dependabot](https://github.com/dependabot) ([#1325](https://github.com/paperless-ngx/paperless-ngx/pull/1325))
- Bump rxjs from 7.5.5 to 7.5.6 in /src-ui [@dependabot](https://github.com/dependabot) ([#1323](https://github.com/paperless-ngx/paperless-ngx/pull/1323))
</details>
### All App Changes
- [Beta] Paperless-ngx v1.9.0 Release Candidate [@stumpylog](https://github.com/stumpylog) ([#1560](https://github.com/paperless-ngx/paperless-ngx/pull/1560))
- Feature: Faster, less memory barcode handling [@stumpylog](https://github.com/stumpylog) ([#1594](https://github.com/paperless-ngx/paperless-ngx/pull/1594))
- Fix: Consume directory permissions were not updated [@stumpylog](https://github.com/stumpylog) ([#1605](https://github.com/paperless-ngx/paperless-ngx/pull/1605))
- Fix: Double barcode separation creates empty file [@stumpylog](https://github.com/stumpylog) ([#1596](https://github.com/paperless-ngx/paperless-ngx/pull/1596))
- Fix: Parsing Tika documents fails with AttributeError [@stumpylog](https://github.com/stumpylog) ([#1591](https://github.com/paperless-ngx/paperless-ngx/pull/1591))
- Fix: Resolve issue with slow classifier [@stumpylog](https://github.com/stumpylog) ([#1576](https://github.com/paperless-ngx/paperless-ngx/pull/1576))
- Feature: Display django-q process names [@stumpylog](https://github.com/stumpylog) ([#1567](https://github.com/paperless-ngx/paperless-ngx/pull/1567))
- Fix document comments not updating on document navigation [@shamoon](https://github.com/shamoon) ([#1566](https://github.com/paperless-ngx/paperless-ngx/pull/1566))
- Feature: Add MariaDB support [@bckelly1](https://github.com/bckelly1) ([#543](https://github.com/paperless-ngx/paperless-ngx/pull/543))
- Fix: Include storage paths in document exporter [@shamoon](https://github.com/shamoon) ([#1557](https://github.com/paperless-ngx/paperless-ngx/pull/1557))
- Chore: Cleanup and validate settings [@stumpylog](https://github.com/stumpylog) ([#1551](https://github.com/paperless-ngx/paperless-ngx/pull/1551))
- Bump pikepdf from 5.5.0 to 5.6.1 [@dependabot](https://github.com/dependabot) ([#1537](https://github.com/paperless-ngx/paperless-ngx/pull/1537))
- Bump black from 22.6.0 to 22.8.0 [@dependabot](https://github.com/dependabot) ([#1539](https://github.com/paperless-ngx/paperless-ngx/pull/1539))
- Bump tqdm from 4.64.0 to 4.64.1 [@dependabot](https://github.com/dependabot) ([#1540](https://github.com/paperless-ngx/paperless-ngx/pull/1540))
- Bump pytest from 7.1.2 to 7.1.3 [@dependabot](https://github.com/dependabot) ([#1538](https://github.com/paperless-ngx/paperless-ngx/pull/1538))
- Bump angular packages, jest-preset-angular in src-ui [@dependabot](https://github.com/dependabot) ([#1502](https://github.com/paperless-ngx/paperless-ngx/pull/1502))
- Bump jest-environment-jsdom from 28.1.3 to 29.0.1 in /src-ui [@dependabot](https://github.com/dependabot) ([#1507](https://github.com/paperless-ngx/paperless-ngx/pull/1507))
- Bump [@<!---->types/node from 18.6.3 to 18.7.14 in /src-ui @dependabot](https://github.com/<!---->types/node from 18.6.3 to 18.7.14 in /src-ui @dependabot) ([#1506](https://github.com/paperless-ngx/paperless-ngx/pull/1506))
- Bump [@<!---->angular-builders/jest from 14.0.0 to 14.0.1 in /src-ui @dependabot](https://github.com/<!---->angular-builders/jest from 14.0.0 to 14.0.1 in /src-ui @dependabot) ([#1505](https://github.com/paperless-ngx/paperless-ngx/pull/1505))
- Bump zone.js from 0.11.7 to 0.11.8 in /src-ui [@dependabot](https://github.com/dependabot) ([#1504](https://github.com/paperless-ngx/paperless-ngx/pull/1504))
- Bump ngx-color from 8.0.1 to 8.0.2 in /src-ui [@dependabot](https://github.com/dependabot) ([#1494](https://github.com/paperless-ngx/paperless-ngx/pull/1494))
- Bump cypress from 10.3.1 to 10.7.0 in /src-ui [@dependabot](https://github.com/dependabot) ([#1496](https://github.com/paperless-ngx/paperless-ngx/pull/1496))
- Bump [@<!---->cypress/schematic from 2.0.0 to 2.1.1 in /src-ui @dependabot](https://github.com/<!---->cypress/schematic from 2.0.0 to 2.1.1 in /src-ui @dependabot) ([#1495](https://github.com/paperless-ngx/paperless-ngx/pull/1495))
- Bump [@<!---->popperjs/core from 2.11.5 to 2.11.6 in /src-ui @dependabot](https://github.com/<!---->popperjs/core from 2.11.5 to 2.11.6 in /src-ui @dependabot) ([#1498](https://github.com/paperless-ngx/paperless-ngx/pull/1498))
- Feature: Simplify IMAP login for UTF-8 [@stumpylog](https://github.com/stumpylog) ([#1492](https://github.com/paperless-ngx/paperless-ngx/pull/1492))
- Fix actions button in tasks table [@shamoon](https://github.com/shamoon) ([#1488](https://github.com/paperless-ngx/paperless-ngx/pull/1488))
- Fix: Add missing filter rule types to SavedViewFilterRule model \& fix migrations [@shamoon](https://github.com/shamoon) ([#1463](https://github.com/paperless-ngx/paperless-ngx/pull/1463))
- Feature: Even better re-do of OCR [@stumpylog](https://github.com/stumpylog) ([#1451](https://github.com/paperless-ngx/paperless-ngx/pull/1451))
- Feature: document comments [@tim-vogel](https://github.com/tim-vogel) ([#1375](https://github.com/paperless-ngx/paperless-ngx/pull/1375))
- Adding date suggestions to the documents details view [@Eckii24](https://github.com/Eckii24) ([#1367](https://github.com/paperless-ngx/paperless-ngx/pull/1367))
- Bump sphinx from 5.0.2 to 5.1.1 [@dependabot](https://github.com/dependabot) ([#1297](https://github.com/paperless-ngx/paperless-ngx/pull/1297))
- Feature: Event driven consumer [@stumpylog](https://github.com/stumpylog) ([#1421](https://github.com/paperless-ngx/paperless-ngx/pull/1421))
- Bugfix: Fixes the creation of an archive file, even if noarchive was specified [@stumpylog](https://github.com/stumpylog) ([#1442](https://github.com/paperless-ngx/paperless-ngx/pull/1442))
- Feature: Adds storage paths to re-tagger command [@stumpylog](https://github.com/stumpylog) ([#1446](https://github.com/paperless-ngx/paperless-ngx/pull/1446))
- Feature: Preserve original filename in metadata [@GwynHannay](https://github.com/GwynHannay) ([#1440](https://github.com/paperless-ngx/paperless-ngx/pull/1440))
- Handle tags for gmail email accounts [@sisao](https://github.com/sisao) ([#1433](https://github.com/paperless-ngx/paperless-ngx/pull/1433))
- Fix: should not be required [@shamoon](https://github.com/shamoon) ([#1412](https://github.com/paperless-ngx/paperless-ngx/pull/1412))
- Bugfix: Catch all exceptions during the task signals [@stumpylog](https://github.com/stumpylog) ([#1387](https://github.com/paperless-ngx/paperless-ngx/pull/1387))
- Fix: saved view page parameter [@shamoon](https://github.com/shamoon) ([#1376](https://github.com/paperless-ngx/paperless-ngx/pull/1376))
- Fix: Correct browser unsaved changes warning [@shamoon](https://github.com/shamoon) ([#1369](https://github.com/paperless-ngx/paperless-ngx/pull/1369))
- Fix: correct date pasting with other formats [@shamoon](https://github.com/shamoon) ([#1370](https://github.com/paperless-ngx/paperless-ngx/pull/1370))
- Chore: use pre-commit in the Ci workflow [@stumpylog](https://github.com/stumpylog) ([#1362](https://github.com/paperless-ngx/paperless-ngx/pull/1362))
- Bugfix: Chain exceptions during exception handling [@stumpylog](https://github.com/stumpylog) ([#1354](https://github.com/paperless-ngx/paperless-ngx/pull/1354))
- Bump watchfiles from 0.15.0 to 0.16.1 [@dependabot](https://github.com/dependabot) ([#1285](https://github.com/paperless-ngx/paperless-ngx/pull/1285))
- Bump cypress from 10.3.0 to 10.3.1 in /src-ui [@dependabot](https://github.com/dependabot) ([#1342](https://github.com/paperless-ngx/paperless-ngx/pull/1342))
- Bump ngx-color from 7.3.3 to 8.0.1 in /src-ui [@dependabot](https://github.com/dependabot) ([#1343](https://github.com/paperless-ngx/paperless-ngx/pull/1343))
- Bump [@<!---->angular/cli from 14.0.4 to 14.1.0 in /src-ui @dependabot](https://github.com/<!---->angular/cli from 14.0.4 to 14.1.0 in /src-ui @dependabot) ([#1330](https://github.com/paperless-ngx/paperless-ngx/pull/1330))
- Bump [@<!---->types/node from 18.0.0 to 18.6.3 in /src-ui @dependabot](https://github.com/<!---->types/node from 18.0.0 to 18.6.3 in /src-ui @dependabot) ([#1341](https://github.com/paperless-ngx/paperless-ngx/pull/1341))
- Bump jest-preset-angular from 12.1.0 to 12.2.0 in /src-ui [@dependabot](https://github.com/dependabot) ([#1340](https://github.com/paperless-ngx/paperless-ngx/pull/1340))
- Bump concurrently from 7.2.2 to 7.3.0 in /src-ui [@dependabot](https://github.com/dependabot) ([#1326](https://github.com/paperless-ngx/paperless-ngx/pull/1326))
- Bump ng2-pdf-viewer from 9.0.0 to 9.1.0 in /src-ui [@dependabot](https://github.com/dependabot) ([#1337](https://github.com/paperless-ngx/paperless-ngx/pull/1337))
- Bump jest-environment-jsdom from 28.1.2 to 28.1.3 in /src-ui [@dependabot](https://github.com/dependabot) ([#1336](https://github.com/paperless-ngx/paperless-ngx/pull/1336))
- Bump ngx-file-drop from 13.0.0 to 14.0.1 in /src-ui [@dependabot](https://github.com/dependabot) ([#1331](https://github.com/paperless-ngx/paperless-ngx/pull/1331))
- Bump jest and [@<!---->types/jest in /src-ui @dependabot](https://github.com/<!---->types/jest in /src-ui @dependabot) ([#1333](https://github.com/paperless-ngx/paperless-ngx/pull/1333))
- Bump bootstrap from 5.1.3 to 5.2.0 in /src-ui [@dependabot](https://github.com/dependabot) ([#1327](https://github.com/paperless-ngx/paperless-ngx/pull/1327))
- Bump typescript from 4.6.4 to 4.7.4 in /src-ui [@dependabot](https://github.com/dependabot) ([#1324](https://github.com/paperless-ngx/paperless-ngx/pull/1324))
- Bump ts-node from 10.8.1 to 10.9.1 in /src-ui [@dependabot](https://github.com/dependabot) ([#1325](https://github.com/paperless-ngx/paperless-ngx/pull/1325))
- Bump rxjs from 7.5.5 to 7.5.6 in /src-ui [@dependabot](https://github.com/dependabot) ([#1323](https://github.com/paperless-ngx/paperless-ngx/pull/1323))
- Fix: missing tooltip translation \& filter editor wrapping [@shamoon](https://github.com/shamoon) ([#1305](https://github.com/paperless-ngx/paperless-ngx/pull/1305))
- Feature: Remove requirements.txt and use pipenv everywhere [@stumpylog](https://github.com/stumpylog) ([#1316](https://github.com/paperless-ngx/paperless-ngx/pull/1316))
- Bugfix: Interaction between barcode and directories as tags [@stumpylog](https://github.com/stumpylog) ([#1303](https://github.com/paperless-ngx/paperless-ngx/pull/1303))
## paperless-ngx 1.8.0
### Features
- Feature use env vars in pre post scripts [@ziprandom](https://github.com/ziprandom) ([#1154](https://github.com/paperless-ngx/paperless-ngx/pull/1154))
- frontend task queue [@shamoon](https://github.com/shamoon) ([#1020](https://github.com/paperless-ngx/paperless-ngx/pull/1020))
- Fearless scikit-learn updates [@stumpylog](https://github.com/stumpylog) ([#1082](https://github.com/paperless-ngx/paperless-ngx/pull/1082))
- Adds support for Docker secrets [@stumpylog](https://github.com/stumpylog) ([#1034](https://github.com/paperless-ngx/paperless-ngx/pull/1034))
- make frontend timezone un-aware [@shamoon](https://github.com/shamoon) ([#957](https://github.com/paperless-ngx/paperless-ngx/pull/957))
- Change document thumbnails to WebP [@stumpylog](https://github.com/stumpylog) ([#1127](https://github.com/paperless-ngx/paperless-ngx/pull/1127))
- Fork django-q to update dependencies [@stumpylog](https://github.com/stumpylog) ([#1014](https://github.com/paperless-ngx/paperless-ngx/pull/1014))
- Fix: Rework query params logic [@shamoon](https://github.com/shamoon) ([#1000](https://github.com/paperless-ngx/paperless-ngx/pull/1000))
- Enhancement: show note on language change and offer reload [@shamoon](https://github.com/shamoon) ([#1030](https://github.com/paperless-ngx/paperless-ngx/pull/1030))
- Include error information when Redis connection fails [@stumpylog](https://github.com/stumpylog) ([#1016](https://github.com/paperless-ngx/paperless-ngx/pull/1016))
- frontend settings saved to database [@shamoon](https://github.com/shamoon) ([#919](https://github.com/paperless-ngx/paperless-ngx/pull/919))
- Add "Created" as additional (optional) parameter for post_documents [@eingemaischt](https://github.com/eingemaischt) ([#965](https://github.com/paperless-ngx/paperless-ngx/pull/965))
- Convert Changelog to markdown, auto-commit future changelogs [@qcasey](https://github.com/qcasey) ([#935](https://github.com/paperless-ngx/paperless-ngx/pull/935))
- allow all ASN filtering functions [@shamoon](https://github.com/shamoon) ([#920](https://github.com/paperless-ngx/paperless-ngx/pull/920))
- gunicorn: Allow IPv6 sockets [@vlcty](https://github.com/vlcty) ([#924](https://github.com/paperless-ngx/paperless-ngx/pull/924))
- initial app loading indicators [@shamoon](https://github.com/shamoon) ([#899](https://github.com/paperless-ngx/paperless-ngx/pull/899))
### Bug Fixes
- Fix: dropdown selected items not visible again [@shamoon](https://github.com/shamoon) ([#1261](https://github.com/paperless-ngx/paperless-ngx/pull/1261))
- [CI] Fix automatic changelog generation on release [@qcasey](https://github.com/qcasey) ([#1249](https://github.com/paperless-ngx/paperless-ngx/pull/1249))
- Fix: Prevent duplicate api calls on text filtering [@shamoon](https://github.com/shamoon) ([#1133](https://github.com/paperless-ngx/paperless-ngx/pull/1133))
- make frontend timezone un-aware [@shamoon](https://github.com/shamoon) ([#957](https://github.com/paperless-ngx/paperless-ngx/pull/957))
- Feature / fix quick toggleable filters [@shamoon](https://github.com/shamoon) ([#1122](https://github.com/paperless-ngx/paperless-ngx/pull/1122))
- Chore: Manually downgrade reportlab (and update everything else) [@stumpylog](https://github.com/stumpylog) ([#1116](https://github.com/paperless-ngx/paperless-ngx/pull/1116))
- Bugfix: Don't assume default Docker folders [@stumpylog](https://github.com/stumpylog) ([#1088](https://github.com/paperless-ngx/paperless-ngx/pull/1088))
- Bugfix: Better sanity check messages [@stumpylog](https://github.com/stumpylog) ([#1049](https://github.com/paperless-ngx/paperless-ngx/pull/1049))
- Fix vertical margins between pages of pdf viewer [@shamoon](https://github.com/shamoon) ([#1081](https://github.com/paperless-ngx/paperless-ngx/pull/1081))
- Bugfix: Pass debug setting on to django-q [@stumpylog](https://github.com/stumpylog) ([#1058](https://github.com/paperless-ngx/paperless-ngx/pull/1058))
- Bugfix: Don't assume the document has a title set [@stumpylog](https://github.com/stumpylog) ([#1057](https://github.com/paperless-ngx/paperless-ngx/pull/1057))
- Bugfix: Corrects the setting of max pixel size for OCR [@stumpylog](https://github.com/stumpylog) ([#1008](https://github.com/paperless-ngx/paperless-ngx/pull/1008))
- better date pasting [@shamoon](https://github.com/shamoon) ([#1007](https://github.com/paperless-ngx/paperless-ngx/pull/1007))
- Enhancement: Alphabetize tags by default [@shamoon](https://github.com/shamoon) ([#1017](https://github.com/paperless-ngx/paperless-ngx/pull/1017))
- Fix: Rework query params logic [@shamoon](https://github.com/shamoon) ([#1000](https://github.com/paperless-ngx/paperless-ngx/pull/1000))
- Fix: add translation for some un-translated tooltips [@shamoon](https://github.com/shamoon) ([#995](https://github.com/paperless-ngx/paperless-ngx/pull/995))
- Change npm --no-optional to --omit=optional [@shamoon](https://github.com/shamoon) ([#986](https://github.com/paperless-ngx/paperless-ngx/pull/986))
- Add `myst-parser` to fix readthedocs [@qcasey](https://github.com/qcasey) ([#982](https://github.com/paperless-ngx/paperless-ngx/pull/982))
- Fix: Title is changed after switching doc quickly [@shamoon](https://github.com/shamoon) ([#979](https://github.com/paperless-ngx/paperless-ngx/pull/979))
- Fix: warn when closing a document with unsaved changes due to max open docs [@shamoon](https://github.com/shamoon) ([#956](https://github.com/paperless-ngx/paperless-ngx/pull/956))
- Bugfix: Adds configurable intoify debounce time [@stumpylog](https://github.com/stumpylog) ([#953](https://github.com/paperless-ngx/paperless-ngx/pull/953))
- Bugfix: Fixes document filename date off by 1 issue [@stumpylog](https://github.com/stumpylog) ([#942](https://github.com/paperless-ngx/paperless-ngx/pull/942))
- fixes #<!---->949: change to MIME detection for files [@gador](https://github.com/gador) ([#962](https://github.com/paperless-ngx/paperless-ngx/pull/962))
- docs: fix some typos [@Berjou](https://github.com/Berjou) ([#948](https://github.com/paperless-ngx/paperless-ngx/pull/948))
- [Docs] Fix 2 small typos [@tooomm](https://github.com/tooomm) ([#946](https://github.com/paperless-ngx/paperless-ngx/pull/946))
- [Readme] Fix typo [@tooomm](https://github.com/tooomm) ([#941](https://github.com/paperless-ngx/paperless-ngx/pull/941))
- Fix: management pages plurals incorrect in other languages [@shamoon](https://github.com/shamoon) ([#939](https://github.com/paperless-ngx/paperless-ngx/pull/939))
- Fix: v1.7.1 frontend visual fixes [@shamoon](https://github.com/shamoon) ([#933](https://github.com/paperless-ngx/paperless-ngx/pull/933))
- Fix: unassigned query params ignored [@shamoon](https://github.com/shamoon) ([#930](https://github.com/paperless-ngx/paperless-ngx/pull/930))
- Fix: allow commas in non-multi rules query params [@shamoon](https://github.com/shamoon) ([#923](https://github.com/paperless-ngx/paperless-ngx/pull/923))
- Fix: Include version in export for better error messages [@stumpylog](https://github.com/stumpylog) ([#883](https://github.com/paperless-ngx/paperless-ngx/pull/883))
- Bugfix: Superuser Management Won't Reset Password [@stumpylog](https://github.com/stumpylog) ([#903](https://github.com/paperless-ngx/paperless-ngx/pull/903))
- Fix Ignore Date Parsing [@stumpylog](https://github.com/stumpylog) ([#721](https://github.com/paperless-ngx/paperless-ngx/pull/721))
### Documentation
- Feature use env vars in pre post scripts [@ziprandom](https://github.com/ziprandom) ([#1154](https://github.com/paperless-ngx/paperless-ngx/pull/1154))
- Add `myst-parser` to fix readthedocs [@qcasey](https://github.com/qcasey) ([#982](https://github.com/paperless-ngx/paperless-ngx/pull/982))
- Add "Created" as additional (optional) parameter for post_documents [@eingemaischt](https://github.com/eingemaischt) ([#965](https://github.com/paperless-ngx/paperless-ngx/pull/965))
- Bugfix: Adds configurable intoify debounce time [@stumpylog](https://github.com/stumpylog) ([#953](https://github.com/paperless-ngx/paperless-ngx/pull/953))
- docs: fix some typos [@Berjou](https://github.com/Berjou) ([#948](https://github.com/paperless-ngx/paperless-ngx/pull/948))
- [Docs] Fix 2 small typos [@tooomm](https://github.com/tooomm) ([#946](https://github.com/paperless-ngx/paperless-ngx/pull/946))
- Convert Changelog to markdown, auto-commit future changelogs [@qcasey](https://github.com/qcasey) ([#935](https://github.com/paperless-ngx/paperless-ngx/pull/935))
- [Readme] Fix typo [@tooomm](https://github.com/tooomm) ([#941](https://github.com/paperless-ngx/paperless-ngx/pull/941))
### Maintenance
- Adds support for Docker secrets [@stumpylog](https://github.com/stumpylog) ([#1034](https://github.com/paperless-ngx/paperless-ngx/pull/1034))
- Bugfix: Don't assume default Docker folders [@stumpylog](https://github.com/stumpylog) ([#1088](https://github.com/paperless-ngx/paperless-ngx/pull/1088))
- Include error information when Redis connection fails [@stumpylog](https://github.com/stumpylog) ([#1016](https://github.com/paperless-ngx/paperless-ngx/pull/1016))
- Fix: add translation for some un-translated tooltips [@shamoon](https://github.com/shamoon) ([#995](https://github.com/paperless-ngx/paperless-ngx/pull/995))
- gunicorn: Allow IPv6 sockets [@vlcty](https://github.com/vlcty) ([#924](https://github.com/paperless-ngx/paperless-ngx/pull/924))
### Dependencies
<details>
<summary>34 changes</summary>
- Fearless scikit-learn updates [@stumpylog](https://github.com/stumpylog) ([#1082](https://github.com/paperless-ngx/paperless-ngx/pull/1082))
- Bump pillow from 9.1.1 to 9.2.0 [@dependabot](https://github.com/dependabot) ([#1193](https://github.com/paperless-ngx/paperless-ngx/pull/1193))
- Bump watchdog from 2.1.8 to 2.1.9 [@dependabot](https://github.com/dependabot) ([#1132](https://github.com/paperless-ngx/paperless-ngx/pull/1132))
- Bump scikit-learn from 1.0.2 to 1.1.1 [@dependabot](https://github.com/dependabot) ([#992](https://github.com/paperless-ngx/paperless-ngx/pull/992))
- Bump setuptools from 62.3.3 to 62.6.0 [@dependabot](https://github.com/dependabot) ([#1150](https://github.com/paperless-ngx/paperless-ngx/pull/1150))
- Bump django-filter from 21.1 to 22.1 [@dependabot](https://github.com/dependabot) ([#1191](https://github.com/paperless-ngx/paperless-ngx/pull/1191))
- Bump actions/setup-python from 3 to 4 [@dependabot](https://github.com/dependabot) ([#1176](https://github.com/paperless-ngx/paperless-ngx/pull/1176))
- Bump sphinx from 4.5.0 to 5.0.2 [@dependabot](https://github.com/dependabot) ([#1151](https://github.com/paperless-ngx/paperless-ngx/pull/1151))
- Bump docker/metadata-action from 3 to 4 [@dependabot](https://github.com/dependabot) ([#1178](https://github.com/paperless-ngx/paperless-ngx/pull/1178))
- Bump tj-actions/changed-files from 22.1 to 23.1 [@dependabot](https://github.com/dependabot) ([#1179](https://github.com/paperless-ngx/paperless-ngx/pull/1179))
- Bump @<!---->angular/cli from 13.3.7 to 14.0.4 in /src-ui [@dependabot](https://github.com/dependabot) ([#1177](https://github.com/paperless-ngx/paperless-ngx/pull/1177))
- Bump cypress from 10.0.1 to 10.3.0 in /src-ui [@dependabot](https://github.com/dependabot) ([#1187](https://github.com/paperless-ngx/paperless-ngx/pull/1187))
- Bump zone.js from 0.11.5 to 0.11.6 in /src-ui [@dependabot](https://github.com/dependabot) ([#1185](https://github.com/paperless-ngx/paperless-ngx/pull/1185))
- Bump ts-node from 10.8.0 to 10.8.1 in /src-ui [@dependabot](https://github.com/dependabot) ([#1184](https://github.com/paperless-ngx/paperless-ngx/pull/1184))
- Bump jest-environment-jsdom from 28.1.0 to 28.1.2 in /src-ui [@dependabot](https://github.com/dependabot) ([#1175](https://github.com/paperless-ngx/paperless-ngx/pull/1175))
- Bump @<!---->types/node from 17.0.38 to 18.0.0 in /src-ui [@dependabot](https://github.com/dependabot) ([#1183](https://github.com/paperless-ngx/paperless-ngx/pull/1183))
- Bump concurrently from 7.2.1 to 7.2.2 in /src-ui [@dependabot](https://github.com/dependabot) ([#1181](https://github.com/paperless-ngx/paperless-ngx/pull/1181))
- Bump jest-preset-angular from 12.0.1 to 12.1.0 in /src-ui [@dependabot](https://github.com/dependabot) ([#1182](https://github.com/paperless-ngx/paperless-ngx/pull/1182))
- Bump jest and @<!---->types/jest in /src-ui [@dependabot](https://github.com/dependabot) ([#1180](https://github.com/paperless-ngx/paperless-ngx/pull/1180))
- Bump whitenoise from 6.1.0 to 6.2.0 [@dependabot](https://github.com/dependabot) ([#1103](https://github.com/paperless-ngx/paperless-ngx/pull/1103))
- Bump cypress from 9.6.1 to 10.0.1 in /src-ui [@dependabot](https://github.com/dependabot) ([#1083](https://github.com/paperless-ngx/paperless-ngx/pull/1083))
- Bump docker/setup-qemu-action from 1 to 2 [@dependabot](https://github.com/dependabot) ([#1065](https://github.com/paperless-ngx/paperless-ngx/pull/1065))
- Bump docker/setup-buildx-action from 1 to 2 [@dependabot](https://github.com/dependabot) ([#1064](https://github.com/paperless-ngx/paperless-ngx/pull/1064))
- Bump docker/build-push-action from 2 to 3 [@dependabot](https://github.com/dependabot) ([#1063](https://github.com/paperless-ngx/paperless-ngx/pull/1063))
- Bump @<!---->cypress/schematic from 1.7.0 to 2.0.0 in /src-ui [@dependabot](https://github.com/dependabot) ([#1075](https://github.com/paperless-ngx/paperless-ngx/pull/1075))
- Bump tj-actions/changed-files from 19 to 22.1 [@dependabot](https://github.com/dependabot) ([#1062](https://github.com/paperless-ngx/paperless-ngx/pull/1062))
- Bump concurrently from 7.1.0 to 7.2.1 in /src-ui [@dependabot](https://github.com/dependabot) ([#1073](https://github.com/paperless-ngx/paperless-ngx/pull/1073))
- Bump @<!---->types/jest from 27.4.1 to 27.5.2 in /src-ui [@dependabot](https://github.com/dependabot) ([#1074](https://github.com/paperless-ngx/paperless-ngx/pull/1074))
- Bump ts-node from 10.7.0 to 10.8.0 in /src-ui [@dependabot](https://github.com/dependabot) ([#1070](https://github.com/paperless-ngx/paperless-ngx/pull/1070))
- Bump jest from 28.0.3 to 28.1.0 in /src-ui [@dependabot](https://github.com/dependabot) ([#1071](https://github.com/paperless-ngx/paperless-ngx/pull/1071))
- Chore: npm package updates 22-06-01 [@shamoon](https://github.com/shamoon) ([#1069](https://github.com/paperless-ngx/paperless-ngx/pull/1069))
- Bump docker/login-action from 1 to 2 [@dependabot](https://github.com/dependabot) ([#1061](https://github.com/paperless-ngx/paperless-ngx/pull/1061))
- Chore: Manually update dependencies [@stumpylog](https://github.com/stumpylog) ([#1013](https://github.com/paperless-ngx/paperless-ngx/pull/1013))
- Chore: Manually update all Python dependencies [@stumpylog](https://github.com/stumpylog) ([#973](https://github.com/paperless-ngx/paperless-ngx/pull/973))
</details>
## paperless-ngx 1.7.1
### Features
- (chore) Runs pyupgrade to Python 3.8+ @stumpylog (#890)
- Dockerfile Organization \& Enhancements @stumpylog (#888)
- mobile friendlier manage pages @shamoon (#873)
- Use semver for release process @stumpylog (#851)
- Enable Docker Hub push @stumpylog (#828)
- Feature barcode tiff support @gador (#766)
- Updates GHA workflow to rebuild intermediate images on changes @stumpylog (#820)
- Adds simple Python to wait for Redis broker to be ready @stumpylog (#788)
- Update GHA workflow to build all Docker images @stumpylog (#761)
- (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 (#881)
- mobile friendlier manage pages @shamoon (#873)
- Add timeout to healthcheck @shamoon (#880)
- Always accept yyyy-mm-dd date inputs @shamoon (#864)
- Fix local Docker image building @stumpylog (#849)
- Fix: show errors on invalid date input @shamoon (#862)
- Fix: Older dates do not display on frontend @shamoon (#852)
- Fixes IMAP UTF8 Authenication @stumpylog (#725)
- Fix password field remains visible @shamoon (#840)
- Fixes Pillow build for armv7 @stumpylog (#815)
- Update frontend localization source file @shamoon (#814)
- Fix install script extra OCR languages format @stumpylog (#777)
- 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 (#851)
- Deployment: Consolidate tika compose files @qcasey (#866)
- Fix local Docker image building @stumpylog (#849)
- 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 (#888)
- Add timeout to healthcheck @shamoon (#880)
- Use semver for release process @stumpylog (#851)
- Deployment: Consolidate tika compose files @qcasey (#866)
- Fixes Pillow build for armv7 @stumpylog (#815)
- Update frontend localization source file @shamoon (#814)
- Fix install script extra OCR languages format @stumpylog (#777)
- Adds simple Python to wait for Redis broker to be ready @stumpylog (#788)
- 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
<details>
<summary>15 changes</summary>
- Bump tj-actions/changed-files from 18.7 to 19 @dependabot (#830)
- Bump asgiref from 3.5.0 to 3.5.1 @dependabot (#867)
- Bump jest from 27.5.1 to 28.0.3 in /src-ui @dependabot (#860)
- Bump @<!---->ng-bootstrap/ng-bootstrap from 12.1.0 to 12.1.1 in /src-ui @dependabot (#861)
- Bump @<!---->types/node from 17.0.27 to 17.0.29 in /src-ui @dependabot (#833)
- Bump @<!---->ng-bootstrap/ng-bootstrap from 12.0.2 to 12.1.0 in /src-ui @dependabot (#834)
- Bump pytest from 7.1.1 to 7.1.2 @dependabot (#806)
- Bump github/codeql-action from 1 to 2 @dependabot (#792)
- Bump imap-tools from 0.53.0 to 0.54.0 @dependabot (#758)
- Bump ocrmypdf from 13.4.2 to 13.4.3 @dependabot (#757)
- Bump importlib-resources from 5.6.0 to 5.7.1 @dependabot (#756)
- Bump tox from 3.24.5 to 3.25.0 @dependabot (#692)
- Bump cypress from 9.5.3 to 9.6.0 in /src-ui @dependabot (#800)
- Bump angular \& tools to 13.3.4 or 13.3.3 @shamoon (#799)
- Bump concurrently from 7.0.0 to 7.1.0 in /src-ui @dependabot (#797)
- 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))
</details>
## paperless-ngx 1.7.0
Breaking Changes
### Breaking Changes
- `PAPERLESS_URL` is now required when using a reverse proxy. See
[\#674](https://github.com/paperless-ngx/paperless-ngx/pull/674).
Features
### 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).
[\@jonasc](https://github.com/jonasc) ([\#270](https://github.com/paperless-ngx/paperless-ngx/pull/270))
- Global drag\'n\'drop [\@shamoon](https://github.com/shamoon)
([\#283](https://github.com/paperless-ngx/paperless-ngx/pull/283))
- Fix: download buttons should disable while waiting
[\@shamoon](https://github.com/shamoon) (\#630).
- Update checker [\@shamoon](https://github.com/shamoon) (\#591).
[\@shamoon](https://github.com/shamoon) ([\#630](https://github.com/paperless-ngx/paperless-ngx/pull/630))
- Update checker [\@shamoon](https://github.com/shamoon) ([\#591](https://github.com/paperless-ngx/paperless-ngx/pull/591))
- Show prompt on password-protected pdfs
[\@shamoon](https://github.com/shamoon) (\#564).
[\@shamoon](https://github.com/shamoon) ([\#564](https://github.com/paperless-ngx/paperless-ngx/pull/564))
- Filtering query params aka browser navigation for filtering
[\@shamoon](https://github.com/shamoon) (\#540).
[\@shamoon](https://github.com/shamoon) ([\#540](https://github.com/paperless-ngx/paperless-ngx/pull/540))
- Clickable tags in dashboard widgets
[\@shamoon](https://github.com/shamoon) (\#515).
[\@shamoon](https://github.com/shamoon) ([\#515](https://github.com/paperless-ngx/paperless-ngx/pull/515))
- Add bottom pagination [\@shamoon](https://github.com/shamoon)
(\#372).
([\#372](https://github.com/paperless-ngx/paperless-ngx/pull/372))
- Feature barcode splitter [\@gador](https://github.com/gador)
(\#532).
- App loading screen [\@shamoon](https://github.com/shamoon) (\#298).
([\#532](https://github.com/paperless-ngx/paperless-ngx/pull/532))
- App loading screen [\@shamoon](https://github.com/shamoon) ([\#298](https://github.com/paperless-ngx/paperless-ngx/pull/298))
- Use progress bar for delayed buttons
[\@shamoon](https://github.com/shamoon) (\#415).
[\@shamoon](https://github.com/shamoon) ([\#415](https://github.com/paperless-ngx/paperless-ngx/pull/415))
- Add minimum length for documents text filter
[\@shamoon](https://github.com/shamoon) (\#401).
[\@shamoon](https://github.com/shamoon) ([\#401](https://github.com/paperless-ngx/paperless-ngx/pull/401))
- Added nav buttons in the document detail view
[\@GruberViktor](https://github.com/gruberviktor) (\#273).
[\@GruberViktor](https://github.com/gruberviktor) ([\#273](https://github.com/paperless-ngx/paperless-ngx/pull/273))
- Improve date keyboard input [\@shamoon](https://github.com/shamoon)
(\#253).
- Color theming [\@shamoon](https://github.com/shamoon) (\#243).
([\#253](https://github.com/paperless-ngx/paperless-ngx/pull/253))
- Color theming [\@shamoon](https://github.com/shamoon) ([\#243](https://github.com/paperless-ngx/paperless-ngx/pull/243))
- Parse dates when entered without separators
[\@GruberViktor](https://github.com/gruberviktor) (\#250).
[\@GruberViktor](https://github.com/gruberviktor) ([\#250](https://github.com/paperless-ngx/paperless-ngx/pull/250))
Bug Fixes
### Bug Fixes
- add \"localhost\" to ALLOWED_HOSTS
[\@gador](https://github.com/gador) (\#700).
- Fix: scanners table [\@qcasey](https://github.com/qcasey) (\#690).
- Add \"localhost\" to ALLOWED_HOSTS
[\@gador](https://github.com/gador) ([\#700](https://github.com/paperless-ngx/paperless-ngx/pull/700))
- Fix: scanners table [\@qcasey](https://github.com/qcasey) ([\#690](https://github.com/paperless-ngx/paperless-ngx/pull/690))
- Adds wait for file before consuming
[\@stumpylog](https://github.com/stumpylog) (\#483).
[\@stumpylog](https://github.com/stumpylog) ([\#483](https://github.com/paperless-ngx/paperless-ngx/pull/483))
- Fix: frontend document editing erases time data
[\@shamoon](https://github.com/shamoon) (\#654).
[\@shamoon](https://github.com/shamoon) ([\#654](https://github.com/paperless-ngx/paperless-ngx/pull/654))
- Increase length of SavedViewFilterRule
[\@stumpylog](https://github.com/stumpylog) (\#612).
[\@stumpylog](https://github.com/stumpylog) ([\#612](https://github.com/paperless-ngx/paperless-ngx/pull/612))
- Fixes attachment filename matching during mail fetching
[\@stumpylog](https://github.com/stumpylog) (\#680).
[\@stumpylog](https://github.com/stumpylog) ([\#680](https://github.com/paperless-ngx/paperless-ngx/pull/680))
- Add `PAPERLESS_URL` env variable & CSRF var
[\@shamoon](https://github.com/shamoon) (\#674).
[\@shamoon](https://github.com/shamoon) ([\#674](https://github.com/paperless-ngx/paperless-ngx/discussions/674))
- Fix: download buttons should disable while waiting
[\@shamoon](https://github.com/shamoon) (\#630).
[\@shamoon](https://github.com/shamoon) ([\#630](https://github.com/paperless-ngx/paperless-ngx/pull/630))
- Fixes downloaded filename, add more consumer ignore settings
[\@stumpylog](https://github.com/stumpylog) (\#599).
[\@stumpylog](https://github.com/stumpylog) ([\#599](https://github.com/paperless-ngx/paperless-ngx/pull/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).
[\@danielBreitlauch](https://github.com/danielbreitlauch) ([\#594](https://github.com/paperless-ngx/paperless-ngx/pull/594))
- Uses shutil.move instead of rename
[\@gador](https://github.com/gador) ([\#617](https://github.com/paperless-ngx/paperless-ngx/pull/617))
- Fix npm deps 01.02.22 2 [\@shamoon](https://github.com/shamoon)
(\#610).
([\#610](https://github.com/paperless-ngx/paperless-ngx/discussions/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).
[\@shamoon](https://github.com/shamoon) ([\#600](https://github.com/paperless-ngx/paperless-ngx/pull/600))
- Fix issue 416: implement `PAPERLESS_OCR_MAX_IMAGE_PIXELS`
[\@hacker-h](https://github.com/hacker-h) ([\#441](https://github.com/paperless-ngx/paperless-ngx/pull/441))
- Fix: exclude cypress from build in Dockerfile
[\@FrankStrieter](https://github.com/FrankStrieter) ([\#526](https://github.com/paperless-ngx/paperless-ngx/pull/526))
- Corrections to pass pre-commit hooks
[\@schnuffle](https://github.com/schnuffle) (\#454).
[\@schnuffle](https://github.com/schnuffle) ([\#454](https://github.com/paperless-ngx/paperless-ngx/pull/454))
- Fix 311 unable to click checkboxes in document list
[\@shamoon](https://github.com/shamoon) (\#313).
[\@shamoon](https://github.com/shamoon) ([\#313](https://github.com/paperless-ngx/paperless-ngx/pull/313))
- Fix imap tools bug [\@stumpylog](https://github.com/stumpylog)
(\#393).
([\#393](https://github.com/paperless-ngx/paperless-ngx/pull/393))
- Fix filterable dropdown buttons arent translated
[\@shamoon](https://github.com/shamoon) (\#366).
[\@shamoon](https://github.com/shamoon) ([\#366](https://github.com/paperless-ngx/paperless-ngx/pull/366))
- Fix 224: \"Auto-detected date is day before receipt date\"
[\@a17t](https://github.com/a17t) (\#246).
[\@a17t](https://github.com/a17t) ([\#246](https://github.com/paperless-ngx/paperless-ngx/pull/246))
- Fix minor sphinx errors [\@shamoon](https://github.com/shamoon)
(\#322).
([\#322](https://github.com/paperless-ngx/paperless-ngx/pull/322))
- Fix page links hidden [\@shamoon](https://github.com/shamoon)
(\#314).
([\#314](https://github.com/paperless-ngx/paperless-ngx/pull/314))
- Fix: Include excluded items in dropdown count
[\@shamoon](https://github.com/shamoon) (\#263).
[\@shamoon](https://github.com/shamoon) ([\#263](https://github.com/paperless-ngx/paperless-ngx/pull/263))
Translation
### Translation
- [\@miku323](https://github.com/miku323) contributed to Slovenian
translation.
translation
- [\@FaintGhost](https://github.com/FaintGhost) contributed to Chinese
Simplified translation.
Simplified translation
- [\@DarkoBG79](https://github.com/DarkoBG79) contributed to Serbian
translation.
translation
- [Kemal Secer](https://crowdin.com/profile/kemal.secer) contributed
to Turkish translation.
to Turkish translation
- [\@Prominence](https://github.com/Prominence) contributed to
Belarusian translation.
Belarusian translation
Documentation
### 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).
- Fix: scanners table [\@qcasey](https://github.com/qcasey) ([\#690](https://github.com/paperless-ngx/paperless-ngx/pull/690))
- Add `PAPERLESS_URL` env variable & CSRF var
[\@shamoon](https://github.com/shamoon) ([\#674](https://github.com/paperless-ngx/paperless-ngx/pull/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).
[\@stumpylog](https://github.com/stumpylog) ([\#599](https://github.com/paperless-ngx/paperless-ngx/pull/599))
- Fix issue 416: implement `PAPERLESS_OCR_MAX_IMAGE_PIXELS`
[\@hacker-h](https://github.com/hacker-h) ([\#441](https://github.com/paperless-ngx/paperless-ngx/pull/441))
- Fix minor sphinx errors [\@shamoon](https://github.com/shamoon)
(\#322).
([\#322](https://github.com/paperless-ngx/paperless-ngx/pull/322))
Maintenance
### Maintenance
- Add `PAPERLESS_URL` env variable & CSRF var
[\@shamoon](https://github.com/shamoon) (\#674).
[\@shamoon](https://github.com/shamoon) ([\#674](https://github.com/paperless-ngx/paperless-ngx/pull/674))
- Chore: Implement release-drafter action for Changelogs
[\@qcasey](https://github.com/qcasey) (\#669).
- Chore: Add CODEOWNERS [\@qcasey](https://github.com/qcasey) (\#667).
[\@qcasey](https://github.com/qcasey) ([\#669](https://github.com/paperless-ngx/paperless-ngx/pull/669))
- Chore: Add CODEOWNERS [\@qcasey](https://github.com/qcasey) ([\#667](https://github.com/paperless-ngx/paperless-ngx/pull/667))
- Support docker-compose v2 in install
[\@stumpylog](https://github.com/stumpylog) (\#611).
[\@stumpylog](https://github.com/stumpylog) ([\#611](https://github.com/paperless-ngx/paperless-ngx/pull/611))
- Add Belarusian localization [\@shamoon](https://github.com/shamoon)
(\#588).
([\#588](https://github.com/paperless-ngx/paperless-ngx/pull/588))
- Add Turkish localization [\@shamoon](https://github.com/shamoon)
(\#536).
([\#536](https://github.com/paperless-ngx/paperless-ngx/pull/536))
- Add Serbian localization [\@shamoon](https://github.com/shamoon)
(\#504).
([\#504](https://github.com/paperless-ngx/paperless-ngx/pull/504))
- Create PULL_REQUEST_TEMPLATE.md
[\@shamoon](https://github.com/shamoon) (\#304).
[\@shamoon](https://github.com/shamoon) ([\#304](https://github.com/paperless-ngx/paperless-ngx/pull/304))
- Add Chinese localization [\@shamoon](https://github.com/shamoon)
(\#247).
([\#247](https://github.com/paperless-ngx/paperless-ngx/pull/247))
- Add Slovenian language for frontend
[\@shamoon](https://github.com/shamoon) (\#315).
[\@shamoon](https://github.com/shamoon) ([\#315](https://github.com/paperless-ngx/paperless-ngx/pull/315))
## paperless-ngx 1.6.0
@@ -216,46 +546,46 @@ include:
- 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
[\@slankes](https://github.com/slankes) [\#109](https://github.com/paperless-ngx/paperless-ngx/pull/109)). If someone would
like to continue supporting them, please see our [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).
[\@kpj](https://github.com/kpj) [\#168](https://github.com/paperless-ngx/paperless-ngx/pull/168)).
- [\@tribut](https://github.com/tribut) added support for a custom SSO
logout redirect (jonaswinkler\#1258). See
logout redirect ([jonaswinkler\#1258](https://github.com/jonaswinkler/paperless-ng/pull/1258)). See
`PAPERLESS_LOGOUT_REDIRECT_URL`.
- [\@shamoon](https://github.com/shamoon) added a loading indicator
when document list is reloading (jonaswinkler\#1297).
when document list is reloading ([jonaswinkler\#1297](https://github.com/jonaswinkler/paperless-ng/pull/1297)).
- [\@shamoon](https://github.com/shamoon) improved the PDF viewer on
mobile (\#2).
mobile ([\#2](https://github.com/paperless-ngx/paperless-ngx/pull/2)).
- [\@shamoon](https://github.com/shamoon) added \'any\' / \'all\' and
\'not\' filtering with tags (\#10).
\'not\' filtering with tags ([\#10](https://github.com/paperless-ngx/paperless-ngx/pull/10)).
- [\@shamoon](https://github.com/shamoon) added warnings for unsaved
changes, with smart edit buttons (\#13).
changes, with smart edit buttons ([\#13](https://github.com/paperless-ngx/paperless-ngx/pull/13)).
- [\@benjaminfrank](https://github.com/benjaminfrank) enabled a
non-root access to port 80 via systemd (\#18).
non-root access to port 80 via systemd ([\#18](https://github.com/paperless-ngx/paperless-ngx/pull/18)).
- [\@tribut](https://github.com/tribut) added simple \"delete to
trash\" functionality (\#24). See `PAPERLESS_TRASH_DIR`.
trash\" functionality ([\#24](https://github.com/paperless-ngx/paperless-ngx/pull/24)). See `PAPERLESS_TRASH_DIR`.
- [\@amenk](https://github.com/amenk) fixed the search box overlay
menu on mobile (\#32).
menu on mobile ([\#32](https://github.com/paperless-ngx/paperless-ngx/pull/32)).
- [\@dblitt](https://github.com/dblitt) updated the login form to not
auto-capitalize usernames (\#36).
auto-capitalize usernames ([\#36](https://github.com/paperless-ngx/paperless-ngx/pull/36)).
- [\@evilsidekick293](https://github.com/evilsidekick293) made the
worker timeout configurable (\#37). See `PAPERLESS_WORKER_TIMEOUT`.
worker timeout configurable ([\#37](https://github.com/paperless-ngx/paperless-ngx/pull/37)). See `PAPERLESS_WORKER_TIMEOUT`.
- [\@Nicarim](https://github.com/Nicarim) fixed downloads of UTF-8
formatted documents in Firefox (\#56).
formatted documents in Firefox ([\#56](https://github.com/paperless-ngx/paperless-ngx/pull/56)).
- [\@mweimerskirch](https://github.com/mweimerskirch) sorted the
language dropdown by locale (\#78).
language dropdown by locale ([\#78](https://github.com/paperless-ngx/paperless-ngx/issues/78)).
- [\@mweimerskirch](https://github.com/mweimerskirch) enabled the
Czech (\#83) and Danish (\#84) translations.
Czech ([\#83](https://github.com/paperless-ngx/paperless-ngx/pull/83)) and Danish ([\#84](https://github.com/paperless-ngx/paperless-ngx/pull/84)) translations.
- [\@cschmatzler](https://github.com/cschmatzler) enabled specifying
the webserver port (\#124). See `PAPERLESS_PORT`.
the webserver port ([\#124](https://github.com/paperless-ngx/paperless-ngx/pull/124)). See `PAPERLESS_PORT`.
- [\@muellermartin](https://github.com/muellermartin) fixed an error
when uploading transparent PNGs (\#133).
when uploading transparent PNGs ([\#133](https://github.com/paperless-ngx/paperless-ngx/pull/133)).
- [\@shamoon](https://github.com/shamoon) created a slick new logo
(\#165).
([\#165](https://github.com/paperless-ngx/paperless-ngx/pull/165)).
- [\@tim-vogel](https://github.com/tim-vogel) fixed exports missing
groups (\#193).
groups ([\#193](https://github.com/paperless-ngx/paperless-ngx/pull/193)).
Known issues:

View File

@@ -27,11 +27,23 @@ PAPERLESS_REDIS=<url>
This is required for processing scheduled tasks such as email fetching, index
optimization and for training the automatic document matcher.
* If your Redis server needs login credentials PAPERLESS_REDIS = ``redis://<username>:<password>@<host>:<port>``
* With the requirepass option PAPERLESS_REDIS = ``redis://:<password>@<host>:<port>``
`More information on securing your Redis Instance <https://redis.io/docs/getting-started/#securing-redis>`_.
Defaults to redis://localhost:6379.
PAPERLESS_DBENGINE=<engine_name>
Optional, gives the ability to choose Postgres or MariaDB for database engine.
Available options are `postgresql` and `mariadb`.
Default is `postgresql`.
PAPERLESS_DBHOST=<hostname>
By default, sqlite is used as the database backend. This can be changed here.
Set PAPERLESS_DBHOST and PostgreSQL will be used instead of mysql.
Set PAPERLESS_DBHOST and another database will be used instead of sqlite.
PAPERLESS_DBPORT=<port>
Adjust port if necessary.
@@ -39,17 +51,17 @@ PAPERLESS_DBPORT=<port>
Default is 5432.
PAPERLESS_DBNAME=<name>
Database name in PostgreSQL.
Database name in PostgreSQL or MariaDB.
Defaults to "paperless".
PAPERLESS_DBUSER=<name>
Database user in PostgreSQL.
Database user in PostgreSQL or MariaDB.
Defaults to "paperless".
PAPERLESS_DBPASS=<password>
Database password for PostgreSQL.
Database password for PostgreSQL or MariaDB.
Defaults to "paperless".
@@ -60,6 +72,13 @@ PAPERLESS_DBSSLMODE=<mode>
Default is ``prefer``.
PAPERLESS_DB_TIMEOUT=<float>
Amount of time for a database connection to wait for the database to unlock.
Mostly applicable for an sqlite based installation, consider changing to postgresql
if you need to increase this.
Defaults to unset, keeping the Django defaults.
Paths and folders
#################
@@ -111,6 +130,14 @@ PAPERLESS_FILENAME_FORMAT=<format>
Default is none, which disables this feature.
PAPERLESS_FILENAME_FORMAT_REMOVE_NONE=<bool>
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=<path>
This is where paperless will store log files.
@@ -194,9 +221,16 @@ PAPERLESS_FORCE_SCRIPT_NAME=<path>
PAPERLESS_STATIC_URL=<path>
Override the STATIC_URL here. Unless you're hosting Paperless off a
subdomain like /paperless/, you probably don't need to change this.
If you do change it, be sure to include the trailing slash.
Defaults to "/static/".
.. note::
When hosting paperless behind a reverse proxy like Traefik or Nginx at a subpath e.g.
example.com/paperlessngx you will also need to set ``PAPERLESS_FORCE_SCRIPT_NAME``
(see above).
PAPERLESS_AUTO_LOGIN_USERNAME=<username>
Specify a username here so that paperless will automatically perform login
with the selected user.
@@ -416,14 +450,23 @@ PAPERLESS_OCR_IMAGE_DPI=<num>
the produced PDF documents are A4 sized.
PAPERLESS_OCR_MAX_IMAGE_PIXELS=<num>
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 <https://pillow.readthedocs.io/en/stable/reference/Image.html#PIL.Image.MAX_IMAGE_PIXELS>`_.
.. 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=<json>
OCRmyPDF offers many more options. Use this parameter to specify any
@@ -495,7 +538,7 @@ requires are as follows:
# ...
gotenberg:
image: gotenberg/gotenberg:7.4
image: gotenberg/gotenberg:7.6
restart: unless-stopped
command:
- "gotenberg"
@@ -519,6 +562,8 @@ PAPERLESS_TASK_WORKERS=<num>
maintain the automatic matching algorithm, check emails, consume documents,
etc. This variable specifies how many things it will do in parallel.
Defaults to 1
PAPERLESS_THREADS_PER_WORKER=<num>
Furthermore, paperless uses multiple threads when consuming documents to
@@ -590,6 +635,28 @@ PAPERLESS_CONSUMER_POLLING=<num>
Defaults to 0, which disables polling and uses filesystem notifications.
PAPERLESS_CONSUMER_POLLING_RETRY_COUNT=<num>
If consumer polling is enabled, sets the number of times paperless will check for a
file to remain unmodified.
Defaults to 5.
PAPERLESS_CONSUMER_POLLING_DELAY=<num>
If consumer polling is enabled, sets the delay in seconds between each check (above) paperless
will do while waiting for a file to remain unmodified.
Defaults to 5.
.. _configuration-inotify:
PAPERLESS_CONSUMER_INOTIFY_DELAY=<num>
Sets the time in seconds the consumer will wait for additional events
from inotify before the consumer will consider a file ready and begin consumption.
Certain scanners or network setups may generate multiple events for a single file,
leading to multiple consumers working on the same file. Configure this to
prevent that.
Defaults to 0.5 seconds.
PAPERLESS_CONSUMER_DELETE_DUPLICATES=<bool>
When the consumer detects a duplicate document, it will not touch the
@@ -634,6 +701,7 @@ PAPERLESS_CONSUMER_ENABLE_BARCODES=<bool>
Defaults to false.
PAPERLESS_CONSUMER_BARCODE_TIFF_SUPPORT=<bool>
Whether TIFF image files should be scanned for barcodes.
This will automatically convert any TIFF image(s) to pdfs for later
@@ -650,7 +718,6 @@ PAPERLESS_CONSUMER_BARCODE_STRING=PATCHT
Defaults to "PATCHT"
PAPERLESS_CONVERT_MEMORY_LIMIT=<num>
On smaller systems, or even in the case of Very Large Documents, the consumer
may explode, complaining about how it's "unable to extend pixel cache". In
@@ -674,13 +741,6 @@ PAPERLESS_CONVERT_TMPDIR=<path>
Default is none, which disables the temporary directory.
PAPERLESS_OPTIMIZE_THUMBNAILS=<bool>
Use optipng to optimize thumbnails. This usually reduces the size of
thumbnails by about 20%, but uses considerable compute time during
consumption.
Defaults to true.
PAPERLESS_POST_CONSUME_SCRIPT=<filename>
After a document is consumed, Paperless can trigger an arbitrary script if
you like. This script will be passed a number of arguments for you to work
@@ -696,8 +756,24 @@ PAPERLESS_FILENAME_DATE_ORDER=<format>
The filename will be checked first, and if nothing is found, the document
text will be checked as normal.
A date in a filename must have some separators (`.`, `-`, `/`, etc)
for it to be parsed.
Defaults to none, which disables this feature.
PAPERLESS_NUMBER_OF_SUGGESTED_DATES=<num>
Paperless searches an entire document for dates. The first date found will
be used as the initial value for the created date. When this variable is
greater than 0 (or left to it's default value), paperless will also suggest
other dates found in the document, up to a maximum of this setting. Note that
duplicates will be removed, which can result in fewer dates displayed in the
frontend than this setting value.
The task to find all dates can be time-consuming and increases with a higher
(maximum) number of suggested dates and slower hardware.
Defaults to 3. Set to 0 to disable this feature.
PAPERLESS_THUMBNAIL_FONT_NAME=<filename>
Paperless creates thumbnails for plain text files by rendering the content
of the file on an image and uses a predefined font for that. This
@@ -713,10 +789,7 @@ PAPERLESS_IGNORE_DATES=<string>
this process. This is useful for special dates (like date of birth) that appear
in documents regularly but are very unlikely to be the documents creation date.
You may specify dates in a multitude of formats supported by dateparser (see
https://dateparser.readthedocs.io/en/latest/#popular-formats) but as the dates
need to be comma separated, the options are limited.
Example: "2020-12-02,22.04.1999"
The date is parsed using the order specified in PAPERLESS_DATE_ORDER
Defaults to an empty string to not ignore any dates.
@@ -746,13 +819,10 @@ the program doesn't automatically execute it (ie. the program isn't in your
$PATH), then you'll need to specify the literal path for that program.
PAPERLESS_CONVERT_BINARY=<path>
Defaults to "/usr/bin/convert".
Defaults to "convert".
PAPERLESS_GS_BINARY=<path>
Defaults to "/usr/bin/gs".
PAPERLESS_OPTIPNG_BINARY=<path>
Defaults to "/usr/bin/optipng".
Defaults to "gs".
.. _configuration-docker:
@@ -769,9 +839,14 @@ PAPERLESS_WEBSERVER_WORKERS=<num>
also loads the entire application into memory separately, so increasing this value
will increase RAM usage.
Consider configuring this to 1 on low power devices with limited amount of RAM.
Defaults to 1.
Defaults to 2.
PAPERLESS_BIND_ADDR=<ip address>
The IP address the webserver will listen on inside the container. There are
special setups where you may need to configure this value to restrict the
Ip address or interface the webserver listens on.
Defaults to [::], meaning all interfaces, including IPv6.
PAPERLESS_PORT=<port>
The port number the webserver will listen on inside the container. There are
@@ -827,6 +902,14 @@ PAPERLESS_OCR_LANGUAGES=<list>
Defaults to none, which does not install any additional languages.
PAPERLESS_ENABLE_FLOWER=<defined>
If this environment variable is defined, the Celery monitoring tool
`Flower <https://flower.readthedocs.io/en/latest/index.html>`_ will
be started by the container.
You can read more about this in the :ref:`advanced setup <advanced-celery-monitoring>`
documentation.
.. _configuration-update-checking:
@@ -834,18 +917,9 @@ Update Checking
###############
PAPERLESS_ENABLE_UPDATE_CHECK=<bool>
Enable (or disable) the automatic check for available updates. This feature is disabled
by default but if it is not explicitly set Paperless-ngx will show a message about this.
If enabled, the feature works by pinging the the Github API for the latest release e.g.
https://api.github.com/repos/paperless-ngx/paperless-ngx/releases/latest
to determine whether a new version is available.
.. note::
Actual updating of the app must still be performed manually.
Note that for users of thirdy-party containers e.g. linuxserver.io this notification
may be 'ahead' of a new release from the third-party maintainers.
In either case, no tracking data is collected by the app in any way.
Defaults to none, which disables the feature.
This setting was deprecated in favor of a frontend setting after v1.9.2. A one-time
migration is performed for users who have this setting set. This setting is always
ignored if the corresponding frontend setting has been set.

View File

@@ -79,7 +79,7 @@ To do the setup you need to perform the steps from the following chapters in a c
6. You can now either ...
* install redis or
* use the included scripts/start-services.sh to use docker to fire up a redis instance (and some other services such as tika, gotenberg and a postgresql server) or
* use the included scripts/start-services.sh to use docker to fire up a redis instance (and some other services such as tika, gotenberg and a database server) or
* spin up a bare redis container
.. code:: shell-session
@@ -112,7 +112,7 @@ To do the setup you need to perform the steps from the following chapters in a c
.. code:: shell-session
python3 manage.py runserver & python3 manage.py document_consumer & python3 manage.py qcluster
python3 manage.py runserver & python3 manage.py document_consumer & celery --app paperless worker
11. Login with the superuser credentials provided in step 8 at ``http://localhost:8000`` to create a session that enables you to use the backend.
@@ -128,14 +128,14 @@ Configure the IDE to use the src/ folder as the base source folder. Configure th
launch configurations in your IDE:
* python3 manage.py runserver
* python3 manage.py qcluster
* celery --app paperless worker
* python3 manage.py document_consumer
To start them all:
.. code:: shell-session
python3 manage.py runserver & python3 manage.py document_consumer & python3 manage.py qcluster
python3 manage.py runserver & python3 manage.py document_consumer & celery --app paperless worker
Testing and code style:

View File

@@ -44,7 +44,7 @@ resources in the documentation:
learn about how paperless automates all tagging using machine learning.
* Paperless now comes with a :ref:`proper email consumer <usage-email>`
that's fully tested and production ready.
* Paperless creates searchable PDF/A documents from whatever you you put into
* Paperless creates searchable PDF/A documents from whatever you put into
the consumption directory. This means that you can select text in
image-only documents coming from your scanner.
* See :ref:`this note <utilities-encyption>` about GnuPG encryption in

View File

@@ -0,0 +1 @@
myst-parser==0.18.1

View File

@@ -1,133 +1,8 @@
.. _scanners:
***********************
Scanner recommendations
***********************
*******************
Scanners & Software
*******************
As Paperless operates by watching a folder for new files, doesn't care what
scanner you use, but sometimes finding a scanner that will write to an FTP,
NFS, or SMB server can be difficult. This page is here to help you find one
that works right for you based on 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`_ |
+---------+----------------+-----+------+-----+-----+------+----------+----------------+
.. _MFC-L5850DW: https://www.brother-usa.com/products/mfcl5850dw
.. _MFC-L2750DW: https://www.brother.de/drucker/laserdrucker/mfc-l2750dw
.. _ADS-1700W: https://www.brother-usa.com/products/ads1700w
.. _ADS-1600W: https://www.brother-usa.com/products/ads1600w
.. _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
.. _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
.. _MFC-9142CDN: https://www.brother.co.uk/printers/laser-printers/mfc9140cdn
.. _ES-580W: https://epson.com/Support/Scanners/ES-Series/Epson-WorkForce-ES-580W/s/SPT_B11B258201
.. _WF-7710DWF: https://www.epson.de/en/products/printers/inkjet-printers/for-home/workforce-wf-7710dwf
.. _ix500: http://www.fujitsu.com/us/products/computing/peripheral/scanners/scansnap/ix500/
.. _S1300i: https://www.fujitsu.com/global/products/computing/peripheral/scanners/soho/s1300i/
.. _Q2: https://www.getdoxie.com/product/doxie-q/
.. _ayounggun: https://github.com/ayounggun
.. _bmsleight: https://github.com/bmsleight
.. _danielquinn: https://github.com/danielquinn
.. _eonist: https://github.com/eonist
.. _fignew: https://github.com/fignew
.. _holzhannes: https://github.com/holzhannes
.. _jonaswinkler: https://github.com/jonaswinkler
.. _REOLDEV: https://github.com/REOLDEV
.. _Skylinar: https://github.com/Skylinar
.. _ytzelf: https://github.com/ytzelf
.. _Unkn0wnCat: https://github.com/Unkn0wnCat
.. _muued: https://github.com/muued
.. _philpagel: https://github.com/philpagel
.. [1] Scanners with API Integration allow to push scanned documents directly to :ref:`Paperless API <api-file_uploads>`, sometimes referred to as Webhook or Document POST.
Mobile phone software
=====================
You can use your phone to "scan" documents. The regular camera app will work, but may have too low contrast for OCR to work well. Apps specifically for scanning are recommended.
+-----------------------------+----------------+-----+-----+-----+-------+--------+------------------+
| Name | OS | Supports | Recommended By |
+-----------------------------+----------------+-----+-----+-----+-------+--------+------------------+
| | | FTP | NFS | SMB | Email | WebDAV | |
+=============================+================+=====+=====+=====+=======+========+==================+
| `Office Lens`_ | Android | ? | ? | ? | ? | ? | `jonaswinkler`_ |
+-----------------------------+----------------+-----+-----+-----+-------+--------+------------------+
| `Genius Scan`_ | Android | yes | no | yes | yes | yes | `hannahswain`_ |
+-----------------------------+----------------+-----+-----+-----+-------+--------+------------------+
| `OpenScan`_ | Android | no | no | no | no | no | `benjaminfrank`_ |
+-----------------------------+----------------+-----+-----+-----+-------+--------+------------------+
| `OCR Scanner - QuickScan`_ | iOS | no | no | no | no | yes | `holzhannes`_ |
+-----------------------------+----------------+-----+-----+-----+-------+--------+------------------+
On Android, you can use these applications in combination with one of the :ref:`Paperless-ngx compatible apps <usage-mobile_upload>` 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.
.. _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
.. _OpenScan: https://github.com/Ethereal-Developers-Inc/OpenScan
.. _hannahswain: https://github.com/hannahswain
.. _benjaminfrank: https://github.com/benjaminfrank
API Scanning Setup
==================
This sections contains information on how to set up scanners to post directly to :ref:`Paperless API <api-file_uploads>`.
Doxie Q2
--------
This part assumes your Doxie is connected to WiFi and you know its IP.
1. Open your Doxie web UI by navigating to its IP address
2. Navigate to Options -> Webhook
3. Set the *URL* to ``https://[your-paperless-ngx-instance]/api/documents/post_document/``
4. Set the *File Parameter Name* to ``document``
5. Add the username and password to the respective fields (Consider creating a user just for your Doxie)
6. Click *Submit* at the bottom of the page
Congrats, you can now scan directly from your Doxie to your Paperless-ngx instance!
Paperless-ngx is compatible with many different scanners and scanning tools. A user-maintained list of scanners and other software is available on `the wiki <https://github.com/paperless-ngx/paperless-ngx/wiki/Scanner-&-Software-Recommendations>`_.

View File

@@ -39,7 +39,7 @@ Paperless consists of the following components:
.. _setup-task_processor:
* **The task processor:** Paperless relies on `Django Q <https://django-q.readthedocs.io/en/latest/>`_
* **The task processor:** Paperless relies on `Celery - Distributed Task Queue <https://docs.celeryq.dev/en/stable/index.html>`_
for doing most of the heavy lifting. This is a task queue that accepts tasks from
multiple sources and processes these in parallel. It also comes with a scheduler that executes
certain commands periodically.
@@ -62,18 +62,11 @@ Paperless consists of the following components:
tasks fail and inspect the errors (i.e., wrong email credentials, errors during consuming a specific
file, etc).
You may start the task processor by executing:
.. code:: shell-session
$ cd /path/to/paperless/src/
$ python3 manage.py qcluster
* A `redis <https://redis.io/>`_ message broker: This is a really lightweight service that is responsible
for getting the tasks from the webserver and the consumer to the task scheduler. These run in a different
process (maybe even on different machines!), and therefore, this is necessary.
* Optional: A database server. Paperless supports both PostgreSQL and SQLite for storing its data.
* Optional: A database server. Paperless supports PostgreSQL, MariaDB and SQLite for storing its data.
Installation
@@ -184,6 +177,25 @@ Install Paperless from Docker Hub
port 8000. Modifying the part before the colon will map requests on another
port to the webserver running on the default port.
**Rootless**
If you want to run Paperless as a rootless container, you will need to do the
following in your ``docker-compose.yml``:
- set the ``user`` running the container to map to the ``paperless`` user in the
container.
This value (``user_id`` below), should be the same id that ``USERMAP_UID`` and
``USERMAP_GID`` are set to in the next step.
See ``USERMAP_UID`` and ``USERMAP_GID`` :ref:`here <configuration-docker>`.
Your entry for Paperless should contain something like:
.. code::
webserver:
image: ghcr.io/paperless-ngx/paperless-ngx:latest
user: <user_id>
5. Modify ``docker-compose.env``, following the comments in the file. The
most important change is to set ``USERMAP_UID`` and ``USERMAP_GID``
to the uid and gid of your user on the host system. Use ``id -u`` and
@@ -200,6 +212,20 @@ Install Paperless from Docker Hub
You can copy any setting from the file ``paperless.conf.example`` and paste it here.
Have a look at :ref:`configuration` to see what's available.
.. note::
You can utilize Docker secrets for some configuration settings by
appending `_FILE` to some configuration values. This is supported currently
only by:
* PAPERLESS_DBUSER
* PAPERLESS_DBPASS
* PAPERLESS_SECRET_KEY
* PAPERLESS_AUTO_LOGIN_USERNAME
* PAPERLESS_ADMIN_USER
* PAPERLESS_ADMIN_MAIL
* PAPERLESS_ADMIN_PASSWORD
.. caution::
Some file systems such as NFS network shares don't support file system
@@ -258,7 +284,20 @@ Build the Docker image yourself
.. code:: yaml
webserver:
build: .
build:
context: .
args:
QPDF_VERSION: x.y.x
PIKEPDF_VERSION: x.y.z
PSYCOPG2_VERSION: x.y.z
JBIG2ENC_VERSION: 0.29
.. note::
You should match the build argument versions to the version for the release you have
checked out. These are pre-built images with certain, more updated software.
If you want to build these images your self, that is possible, but beyond
the scope of these steps.
4. Follow steps 3 to 8 of :ref:`setup-docker_hub`. When asked to run
``docker-compose pull`` to pull the image, do
@@ -284,12 +323,13 @@ writing. Windows is not and will never be supported.
* ``python3-pip``
* ``python3-dev``
* ``default-libmysqlclient-dev`` for MariaDB
* ``fonts-liberation`` for generating thumbnails for plain text files
* ``imagemagick`` >= 6 for PDF conversion
* ``optipng`` for optimizing thumbnails
* ``gnupg`` for handling encrypted documents
* ``libpq-dev`` for PostgreSQL
* ``libmagic-dev`` for mime type detection
* ``mariadb-client`` for MariaDB compile time
* ``mime-support`` for mime type detection
* ``libzbar0`` for barcode detection
* ``poppler-utils`` for barcode detection
@@ -298,7 +338,7 @@ writing. Windows is not and will never be supported.
.. code::
python3 python3-pip python3-dev imagemagick fonts-liberation optipng gnupg libpq-dev libmagic-dev mime-support libzbar0 poppler-utils
python3 python3-pip python3-dev imagemagick fonts-liberation gnupg libpq-dev default-libmysqlclient-dev libmagic-dev mime-support libzbar0 poppler-utils
These dependencies are required for OCRmyPDF, which is used for text recognition.
@@ -308,7 +348,7 @@ writing. Windows is not and will never be supported.
* ``qpdf``
* ``liblept5``
* ``libxml2``
* ``pngquant``
* ``pngquant`` (suggested for certain PDF image optimizations)
* ``zlib1g``
* ``tesseract-ocr`` >= 4.0.0 for OCR
* ``tesseract-ocr`` language packs (``tesseract-ocr-eng``, ``tesseract-ocr-deu``, etc)
@@ -327,10 +367,16 @@ writing. Windows is not and will never be supported.
You will also need ``build-essential``, ``python3-setuptools`` and ``python3-wheel``
for installing some of the python dependencies.
2. Install ``redis`` >= 5.0 and configure it to start automatically.
2. Install ``redis`` >= 6.0 and configure it to start automatically.
3. Optional. Install ``postgresql`` and configure a database, user and password for paperless. If you do not wish
to use PostgreSQL, SQLite is available as well.
to use PostgreSQL, MariaDB and SQLite are available as well.
.. note::
On bare-metal installations using SQLite, ensure the
`JSON1 extension <https://code.djangoproject.com/wiki/JSON1Extension>`_ is enabled. This is
usually the case, but not always.
4. Get the release archive from `<https://github.com/paperless-ngx/paperless-ngx/releases>`_.
If you clone the git repo as it is, you also have to compile the front end by yourself.
@@ -340,6 +386,7 @@ writing. Windows is not and will never be supported.
settings to your needs. Required settings for getting paperless running are:
* ``PAPERLESS_REDIS`` should point to your redis server, such as redis://localhost:6379.
* ``PAPERLESS_DBENGINE`` optional, and should be one of `postgres, mariadb, or sqlite`
* ``PAPERLESS_DBHOST`` should be the hostname on which your PostgreSQL server is running. Do not configure this
to use SQLite instead. Also configure port, database name, user and password as necessary.
* ``PAPERLESS_CONSUMPTION_DIR`` should point to a folder which paperless should watch for documents. You might
@@ -420,8 +467,9 @@ writing. Windows is not and will never be supported.
as a starting point.
Paperless needs the ``webserver`` script to run the webserver, the
``consumer`` script to watch the input folder, and the ``scheduler``
script to run tasks such as email checking and document consumption.
``consumer`` script to watch the input folder, ``taskqueue`` for the background workers
used to handle things like document consumption and the ``scheduler`` script to run tasks such as
email checking at certain times .
The ``socket`` script enables ``gunicorn`` to run on port 80 without
root privileges. For this you need to uncomment the ``Require=paperless-webserver.socket``
@@ -472,6 +520,13 @@ writing. Windows is not and will never be supported.
to compile this by yourself, because this software has been patented until around 2017 and
binary packages are not available for most distributions.
15. Optional: If using the NLTK machine learning processing (see ``PAPERLESS_ENABLE_NLTK`` in
:ref:`configuration` for details), download the NLTK data for the Snowball Stemmer, Stopwords
and Punkt tokenizer to your ``PAPERLESS_DATA_DIR/nltk``. Refer to
the `NLTK instructions <https://www.nltk.org/data.html>`_ for details on how to
download the data.
Migrating to Paperless-ngx
##########################
@@ -593,6 +648,48 @@ Migration to paperless-ngx is then performed in a few simple steps:
10. Optionally, follow the instructions below to migrate your existing data to PostgreSQL.
Migrating from LinuxServer.io Docker Image
========================
As with any upgrades and large changes, it is highly recommended to create a backup before
starting. This assumes the image was running using Docker Compose, but the instructions
are translatable to Docker commands as well.
1. Stop and remove the paperless container
2. If using an external database, stop the container
3. Update Redis configuration
a) If ``REDIS_URL`` is already set, change it to ``PAPERLESS_REDIS`` and continue
to step 4.
b) Otherwise, in the ``docker-compose.yml`` add a new service for Redis,
following `the example compose files <https://github.com/paperless-ngx/paperless-ngx/tree/main/docker/compose>`_
b) Set the environment variable ``PAPERLESS_REDIS`` so it points to the new Redis container
4. Update user mapping
a) If set, change the environment variable ``PUID`` to ``USERMAP_UID``
b) If set, change the environment variable ``PGID`` to ``USERMAP_GID``
5. Update configuration paths
a) Set the environment variable ``PAPERLESS_DATA_DIR``
to ``/config``
6. Update media paths
a) Set the environment variable ``PAPERLESS_MEDIA_ROOT``
to ``/data/media``
7. Update timezone
a) Set the environment variable ``PAPERLESS_TIME_ZONE``
to the same value as ``TZ``
8. Modify the ``image:`` to point to ``ghcr.io/paperless-ngx/paperless-ngx:latest`` or
a specific version if preferred.
9. Start the containers as before, using ``docker-compose``.
.. _setup-sqlite_to_psql:
Moving data from SQLite to PostgreSQL
@@ -724,10 +821,10 @@ configuring some options in paperless can help improve performance immensely:
* If you want to perform OCR on the device, consider using ``PAPERLESS_OCR_CLEAN=none``.
This will speed up OCR times and use less memory at the expense of slightly worse
OCR results.
* Set ``PAPERLESS_OPTIMIZE_THUMBNAILS`` to 'false' if you want faster consumption
times. Thumbnails will be about 20% larger.
* If using docker, consider setting ``PAPERLESS_WEBSERVER_WORKERS`` to
1. This will save some memory.
* Consider setting ``PAPERLESS_ENABLE_NLTK`` to false, to disable the more
advanced language processing, which can take more memory and processing time.
For details, refer to :ref:`configuration`.

View File

@@ -19,7 +19,7 @@ Check for the following issues:
.. code:: shell-session
$ python3 manage.py qcluster
$ celery --app paperless worker
* Look at the output of paperless and inspect it for any errors.
* Go to the admin interface, and check if there are failed tasks. If so, the
@@ -125,7 +125,7 @@ If using docker-compose, this is achieved by the following configuration change
.. code:: yaml
gotenberg:
image: gotenberg/gotenberg:7.4
image: gotenberg/gotenberg:7.6
restart: unless-stopped
command:
- "gotenberg"
@@ -235,3 +235,94 @@ You might find messages like these in your log files:
This indicates that paperless failed to read PDF metadata from one of your documents. This happens when you
open the affected documents in paperless for editing. Paperless will continue to work, and will simply not
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
ocrmypdf.ocr(**args)
File "/usr/local/lib/python3.8/dist-packages/ocrmypdf/api.py", line 337, in ocr
return run_pipeline(options=options, plugin_manager=plugin_manager, api=True)
File "/usr/local/lib/python3.8/dist-packages/ocrmypdf/_sync.py", line 385, in run_pipeline
exec_concurrent(context, executor)
File "/usr/local/lib/python3.8/dist-packages/ocrmypdf/_sync.py", line 302, in exec_concurrent
pdf = post_process(pdf, context, executor)
File "/usr/local/lib/python3.8/dist-packages/ocrmypdf/_sync.py", line 235, in post_process
pdf_out = metadata_fixup(pdf_out, context)
File "/usr/local/lib/python3.8/dist-packages/ocrmypdf/_pipeline.py", line 798, in metadata_fixup
with pikepdf.open(context.origin) as original, pikepdf.open(working_file) as pdf:
File "/usr/local/lib/python3.8/dist-packages/pikepdf/_methods.py", line 923, in open
pdf = Pdf._open(
FileNotFoundError: [Errno 2] No such file or directory: '/tmp/ocrmypdf.io.yhk3zbv0/origin.pdf'
This probably indicates paperless tried to consume the same file twice. This can happen for a number of reasons,
depending on how documents are placed into the consume folder. If paperless is using inotify (the default) to
check for documents, try adjusting the :ref:`inotify configuration <configuration-inotify>`. If polling is enabled,
try adjusting the :ref:`polling configuration <configuration-polling>`.
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.
Adjusting :ref:`polling configuration <configuration-polling>` values should resolve the issue.
.. note::
The user will need to manually move the file out of the consume folder and
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
crash, paperless did not try to consume the file. If paperless is using inotify (the default) to
check for documents, try adjusting the :ref:`inotify configuration <configuration-inotify>`. If polling is enabled,
try adjusting the :ref:`polling configuration <configuration-polling>`.
.. note::
The user will need to manually move the file out of the consume folder and
back in, for the initial failing file to be consumed.
Log reports "Creating PaperlessTask failed".
#########################################################
You might find messages like these in your log files:
.. code::
[ERROR] [paperless.management.consumer] Creating PaperlessTask failed: db locked
You are likely using an sqlite based installation, with an increased number of workers and are running into sqlite's concurrency limitations.
Uploading or consuming multiple files at once results in many workers attempting to access the database simultaneously.
Consider changing to the PostgreSQL database if you will be processing many documents at once often. Otherwise,
try tweaking the ``PAPERLESS_DB_TIMEOUT`` setting to allow more time for the database to unlock. This may have
minor performance implications.
gunicorn fails to start with "is not a valid port number"
#########################################################
You are likely running using Kubernetes, which automatically creates an environment variable named `${serviceName}_PORT`.
This is the same environment variable which is used by Paperless to optionally change the port gunicorn listens on.
To fix this, set `PAPERLESS_PORT` again to your desired port, or the default of 8000.

View File

@@ -161,6 +161,9 @@ These are as follows:
will not consume flagged mails.
* **Move to folder:** Moves consumed mails out of the way so that paperless wont
consume them again.
* **Add custom Tag:** Adds a custom tag to mails with consumed documents (the IMAP
standard calls these "keywords"). Paperless will not consume mails already tagged.
Not all mail servers support this feature!
.. caution::

View File

@@ -1,9 +1,17 @@
import os
bind = f'0.0.0.0:{os.getenv("PAPERLESS_PORT", 8000)}'
workers = int(os.getenv("PAPERLESS_WEBSERVER_WORKERS", 2))
# See https://docs.gunicorn.org/en/stable/settings.html for
# explanations of settings
bind = f'{os.getenv("PAPERLESS_BIND_ADDR", "[::]")}:{os.getenv("PAPERLESS_PORT", 8000)}'
workers = int(os.getenv("PAPERLESS_WEBSERVER_WORKERS", 1))
worker_class = "paperless.workers.ConfigurableWorker"
timeout = 120
preload_app = True
# https://docs.gunicorn.org/en/stable/faq.html#blocking-os-fchmod
worker_tmp_dir = "/dev/shm"
def pre_fork(server, worker):

View File

@@ -118,12 +118,12 @@ ask "Current time zone" "$default_time_zone"
TIME_ZONE=$ask_result
echo ""
echo "Database backend: PostgreSQL and SQLite are available. Use PostgreSQL"
echo "Database backend: PostgreSQL, MariaDB, and SQLite are available. Use PostgreSQL"
echo "if unsure. If you're running on a low-power device such as Raspberry"
echo "Pi, use SQLite to save resources."
echo ""
ask "Database backend" "postgres" "postgres sqlite"
ask "Database backend" "postgres" "postgres sqlite mariadb"
DATABASE_BACKEND=$ask_result
echo ""
@@ -214,9 +214,9 @@ echo ""
ask_docker_folder "Data folder" ""
DATA_FOLDER=$ask_result
if [[ "$DATABASE_BACKEND" == "postgres" ]] ; then
if [[ "$DATABASE_BACKEND" == "postgres" || "$DATABASE_BACKEND" == "mariadb" ]] ; then
echo ""
echo "The database folder, where postgres stores its data."
echo "The database folder, where your database stores its data."
echo "Leave empty to have this managed by docker."
echo ""
echo "CAUTION: If specified, you must specify an absolute path starting with /"
@@ -224,7 +224,7 @@ if [[ "$DATABASE_BACKEND" == "postgres" ]] ; then
echo ""
ask_docker_folder "Database folder" ""
POSTGRES_FOLDER=$ask_result
DATABASE_FOLDER=$ask_result
fi
echo ""
@@ -278,13 +278,14 @@ if [[ -z $DATA_FOLDER ]] ; then
else
echo "Data folder: $DATA_FOLDER"
fi
if [[ "$DATABASE_BACKEND" == "postgres" ]] ; then
if [[ -z $POSTGRES_FOLDER ]] ; then
echo "Database (postgres) folder: Managed by docker"
if [[ "$DATABASE_BACKEND" == "postgres" || "$DATABASE_BACKEND" == "mariadb" ]] ; then
if [[ -z $DATABASE_FOLDER ]] ; then
echo "Database folder: Managed by docker"
else
echo "Database (postgres) folder: $POSTGRES_FOLDER"
echo "Database folder: $DATABASE_FOLDER"
fi
fi
echo ""
echo "URL: $URL"
echo "Port: $PORT"
@@ -356,9 +357,16 @@ if [[ -n $DATA_FOLDER ]] ; then
sed -i "/^\s*data:/d" docker-compose.yml
fi
if [[ -n $POSTGRES_FOLDER ]] ; then
sed -i "s#- pgdata:/var/lib/postgresql/data#- $POSTGRES_FOLDER:/var/lib/postgresql/data#g" docker-compose.yml
sed -i "/^\s*pgdata:/d" docker-compose.yml
# If the database folder was provided (not blank), replace the pgdata/dbdata volume with a bind mount
# of the provided folder
if [[ -n $DATABASE_FOLDER ]] ; then
if [[ "$DATABASE_BACKEND" == "postgres" ]] ; then
sed -i "s#- pgdata:/var/lib/postgresql/data#- $DATABASE_FOLDER:/var/lib/postgresql/data#g" docker-compose.yml
sed -i "/^\s*pgdata:/d" docker-compose.yml
elif [[ "$DATABASE_BACKEND" == "mariadb" ]]; then
sed -i "s#- dbdata:/var/lib/mysql#- $DATABASE_FOLDER:/var/lib/mysql#g" docker-compose.yml
sed -i "/^\s*dbdata:/d" docker-compose.yml
fi
fi
# remove trailing blank lines from end of file
@@ -375,4 +383,4 @@ ${DOCKER_COMPOSE_CMD} pull
${DOCKER_COMPOSE_CMD} run --rm -e DJANGO_SUPERUSER_PASSWORD="$PASSWORD" webserver createsuperuser --noinput --username "$USERNAME" --email "$EMAIL"
${DOCKER_COMPOSE_CMD} up -d
${DOCKER_COMPOSE_CMD} up --detach

View File

@@ -23,6 +23,7 @@
#PAPERLESS_MEDIA_ROOT=../media
#PAPERLESS_STATICDIR=../static
#PAPERLESS_FILENAME_FORMAT=
#PAPERLESS_FILENAME_FORMAT_REMOVE_NONE=
# Security and hosting
@@ -63,12 +64,12 @@
#PAPERLESS_CONSUMER_IGNORE_PATTERNS=[".DS_STORE/*", "._*", ".stfolder/*", ".stversions/*", ".localized/*", "desktop.ini"]
#PAPERLESS_CONSUMER_SUBDIRS_AS_TAGS=false
#PAPERLESS_CONSUMER_ENABLE_BARCODES=false
#PAPERLESS_CONSUMER_ENABLE_BARCODES=PATCHT
#PAPERLESS_OPTIMIZE_THUMBNAILS=true
#PAPERLESS_CONSUMER_BARCODE_STRING=PATCHT
#PAPERLESS_PRE_CONSUME_SCRIPT=/path/to/an/arbitrary/script.sh
#PAPERLESS_POST_CONSUME_SCRIPT=/path/to/an/arbitrary/script.sh
#PAPERLESS_FILENAME_DATE_ORDER=YMD
#PAPERLESS_FILENAME_PARSE_TRANSFORMS=[]
#PAPERLESS_NUMBER_OF_SUGGESTED_DATES=5
#PAPERLESS_THUMBNAIL_FONT_NAME=
#PAPERLESS_IGNORE_DATES=
#PAPERLESS_ENABLE_UPDATE_CHECK=
@@ -83,4 +84,3 @@
#PAPERLESS_CONVERT_BINARY=/usr/bin/convert
#PAPERLESS_GS_BINARY=/usr/bin/gs
#PAPERLESS_OPTIPNG_BINARY=/usr/bin/optipng

View File

@@ -1,113 +0,0 @@
#
# These requirements were autogenerated by pipenv
# To regenerate from the project's Pipfile, run:
#
# pipenv lock --requirements
#
-i https://pypi.python.org/simple
--extra-index-url https://www.piwheels.org/simple
aioredis==1.3.1
anyio==3.5.0; python_full_version >= '3.6.2'
arrow==1.2.2; python_version >= '3.6'
asgiref==3.5.1; python_version >= '3.7'
async-timeout==4.0.2; python_version >= '3.6'
attrs==21.4.0; python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3, 3.4'
autobahn==22.3.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
cffi==1.15.0
channels-redis==3.4.0
channels==3.0.4
chardet==4.0.0; python_version >= '3.1'
charset-normalizer==2.0.12; python_version >= '3'
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
constantly==15.1.0
cryptography==37.0.1; python_version >= '3.6'
daphne==3.0.2; python_version >= '3.6'
dateparser==1.1.1
django-cors-headers==3.11.0
django-extensions==3.1.5
django-filter==21.1
django-picklefield==3.0.1; python_version >= '3'
django-q==1.3.9
django==4.0.4
djangorestframework==3.13.1
filelock==3.6.0
fuzzywuzzy[speedup]==0.18.0
gunicorn==20.1.0
h11==0.13.0; python_version >= '3.6'
hiredis==2.0.0; python_version >= '3.6'
httptools==0.4.0
humanfriendly==10.0; python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3, 3.4'
hyperlink==21.0.0
idna==3.3; python_version >= '3'
imap-tools==0.54.0
img2pdf==0.4.4
importlib-resources==5.7.1; python_version < '3.9'
incremental==21.3.0
inotify-simple==1.3.5; python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3'
inotifyrecursive==0.3.5
joblib==1.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'
ocrmypdf==13.4.3
packaging==21.3; python_version >= '3.6'
pathvalidate==2.5.0
pdf2image==1.16.0
pdfminer.six==20220319
pikepdf==5.1.2
pillow==9.1.0
pluggy==1.0.0; python_version >= '3.6'
portalocker==2.4.0; python_version >= '3'
psycopg2==2.9.3
pyasn1-modules==0.2.8
pyasn1==0.4.8
pycparser==2.21
pyopenssl==22.0.0
pyparsing==3.0.8; python_full_version >= '3.6.8'
python-dateutil==2.8.2
python-dotenv==0.20.0
python-gnupg==0.4.8
python-levenshtein==0.12.2
python-magic==0.4.25
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
pyzbar==0.1.9
redis==3.5.3
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'
service-identity==21.1.0
setuptools==62.1.0; 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'
threadpoolctl==3.1.0; python_version >= '3.6'
tika==1.24
tqdm==4.64.0
twisted[tls]==22.4.0; python_full_version >= '3.6.7'
txaio==22.2.1; python_version >= '3.6'
typing-extensions==4.2.0; python_version >= '3.7'
tzdata==2022.1; python_version >= '3.6'
tzlocal==4.2; python_version >= '3.6'
urllib3==1.26.9; python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3, 3.4' and python_version < '4'
uvicorn[standard]==0.17.6
uvloop==0.16.0
watchdog==2.1.7
watchgod==0.8.2
wcwidth==0.2.5
websockets==10.3
whitenoise==6.0.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'

View File

@@ -1,12 +1,12 @@
[Unit]
Description=Paperless scheduler
Description=Paperless Celery Beat
Requires=redis.service
[Service]
User=paperless
Group=paperless
WorkingDirectory=/opt/paperless/src
ExecStart=python3 manage.py qcluster
ExecStart=celery --app paperless beat --loglevel INFO
[Install]
WantedBy=multi-user.target

View File

@@ -0,0 +1,12 @@
[Unit]
Description=Paperless Celery Workers
Requires=redis.service
[Service]
User=paperless
Group=paperless
WorkingDirectory=/opt/paperless/src
ExecStart=celery --app paperless worker --loglevel INFO
[Install]
WantedBy=multi-user.target

View File

@@ -1,21 +1,16 @@
#!/usr/bin/env bash
DOCUMENT_ID=${1}
DOCUMENT_FILE_NAME=${2}
DOCUMENT_SOURCE_PATH=${3}
DOCUMENT_THUMBNAIL_PATH=${4}
DOCUMENT_DOWNLOAD_URL=${5}
DOCUMENT_THUMBNAIL_URL=${6}
DOCUMENT_CORRESPONDENT=${7}
DOCUMENT_TAGS=${8}
echo "
A document with an id of ${DOCUMENT_ID} was just consumed. I know the
following additional information about it:
* Generated File Name: ${DOCUMENT_FILE_NAME}
* Archive Path: ${DOCUMENT_ARCHIVE_PATH}
* Source Path: ${DOCUMENT_SOURCE_PATH}
* Created: ${DOCUMENT_CREATED}
* Added: ${DOCUMENT_ADDED}
* Modified: ${DOCUMENT_MODIFIED}
* Thumbnail Path: ${DOCUMENT_THUMBNAIL_PATH}
* Download URL: ${DOCUMENT_DOWNLOAD_URL}
* Thumbnail URL: ${DOCUMENT_THUMBNAIL_URL}

View File

@@ -2,5 +2,5 @@
docker run -p 5432:5432 -e POSTGRES_PASSWORD=password -v paperless_pgdata:/var/lib/postgresql/data -d postgres:13
docker run -d -p 6379:6379 redis:latest
docker run -p 3000:3000 -d gotenberg/gotenberg:7.4
docker run -p 3000:3000 -d gotenberg/gotenberg:7.6
docker run -p 9998:9998 -d ghcr.io/paperless-ngx/tika:latest

13
src-ui/cypress.config.ts Normal file
View File

@@ -0,0 +1,13 @@
import { defineConfig } from 'cypress'
export default defineConfig({
videosFolder: 'cypress/videos',
screenshotsFolder: 'cypress/screenshots',
fixturesFolder: 'cypress/fixtures',
e2e: {
setupNodeEvents(on, config) {
return require('./cypress/plugins/index.ts')(on, config)
},
baseUrl: 'http://localhost:4200',
},
})

View File

@@ -1,9 +0,0 @@
{
"integrationFolder": "cypress/integration",
"supportFile": "cypress/support/index.ts",
"videosFolder": "cypress/videos",
"screenshotsFolder": "cypress/screenshots",
"pluginsFile": "cypress/plugins/index.ts",
"fixturesFolder": "cypress/fixtures",
"baseUrl": "http://localhost:4200"
}

View File

@@ -0,0 +1,94 @@
describe('document-detail', () => {
beforeEach(() => {
// also uses global fixtures from cypress/support/e2e.ts
this.modifiedDocuments = []
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('PUT', 'http://localhost:8000/api/documents/1/', (req) => {
this.modifiedDocuments.push(req.body) // store this for later
req.reply({ result: 'OK' })
}).as('saveDoc')
cy.fixture('documents/1/comments.json').then((commentsJson) => {
cy.intercept(
'GET',
'http://localhost:8000/api/documents/1/comments/',
(req) => {
req.reply(commentsJson.filter((c) => c.id != 10)) // 3
}
)
cy.intercept(
'DELETE',
'http://localhost:8000/api/documents/1/comments/?id=9',
(req) => {
req.reply(commentsJson.filter((c) => c.id != 9 && c.id != 10)) // 2
}
)
cy.intercept(
'POST',
'http://localhost:8000/api/documents/1/comments/',
(req) => {
req.reply(commentsJson) // 4
}
)
})
cy.viewport(1024, 1024)
cy.visit('/documents/1/')
})
it('should activate / deactivate save button when changes are saved', () => {
cy.contains('button', 'Save').should('be.disabled')
cy.get('app-input-text[formcontrolname="title"]')
.type(' additional')
.wait(1500) // this delay is for frontend debounce
cy.contains('button', 'Save').should('not.be.disabled')
})
it('should warn on unsaved changes', () => {
cy.get('app-input-text[formcontrolname="title"]')
.type(' additional')
.wait(1500) // this delay is for frontend debounce
cy.get('button[title="Close"]').click()
cy.contains('You have unsaved changes')
cy.contains('button', 'Cancel').click().wait(150)
cy.contains('button', 'Save').click().wait('@saveDoc').wait(2000) // navigates away after saving
cy.contains('You have unsaved changes').should('not.exist')
})
it('should show a list of comments', () => {
cy.wait(1000).get('a').contains('Comments').click().wait(1000)
cy.get('app-document-comments').find('.card').its('length').should('eq', 3)
})
it('should support comment deletion', () => {
cy.wait(1000).get('a').contains('Comments').click().wait(1000)
cy.get('app-document-comments')
.find('.card')
.first()
.find('button')
.click({ force: true })
.wait(500)
cy.get('app-document-comments').find('.card').its('length').should('eq', 2)
})
it('should support comment insertion', () => {
cy.wait(1000).get('a').contains('Comments').click().wait(1000)
cy.get('app-document-comments')
.find('form textarea')
.type('Testing new comment')
.wait(500)
cy.get('app-document-comments').find('form button').click().wait(1500)
cy.get('app-document-comments').find('.card').its('length').should('eq', 4)
})
})

View File

@@ -1,8 +1,9 @@
describe('documents-list', () => {
beforeEach(() => {
// also uses global fixtures from cypress/support/e2e.ts
this.bulkEdits = {}
// mock API methods
cy.fixture('documents/documents.json').then((documentsJson) => {
// bulk edit
cy.intercept(
@@ -53,40 +54,25 @@ describe('documents-list', () => {
})
})
cy.intercept('http://localhost:8000/api/documents/1/thumb/', {
fixture: 'documents/lorem-ipsum.png',
})
cy.intercept('http://localhost:8000/api/tags/*', {
fixture: 'tags/tags.json',
})
cy.intercept('http://localhost:8000/api/correspondents/*', {
fixture: 'correspondents/correspondents.json',
})
cy.intercept('http://localhost:8000/api/document_types/*', {
fixture: 'document_types/doctypes.json',
})
cy.viewport(1280, 1024)
cy.visit('/documents')
})
it('should show a list of documents rendered as cards with thumbnails', () => {
cy.contains('3 documents')
cy.contains('lorem-ipsum')
cy.contains('lorem ipsum')
cy.get('app-document-card-small:first-of-type img')
.invoke('attr', 'src')
.should('eq', 'http://localhost:8000/api/documents/1/thumb/')
})
it('should change to table "details" view', () => {
cy.get('div.btn-group-toggle input[value="details"]').parent().click()
cy.get('div.btn-group input[value="details"]').next().click()
cy.get('table')
})
it('should change to large cards view', () => {
cy.get('div.btn-group-toggle input[value="largeCards"]').parent().click()
cy.get('div.btn-group input[value="largeCards"]').next().click()
cy.get('app-document-card-large')
})

View File

@@ -0,0 +1,331 @@
import { PaperlessDocument } from 'src/app/data/paperless-document'
describe('documents query params', () => {
beforeEach(() => {
// also uses global fixtures from cypress/support/e2e.ts
cy.fixture('documents/documents.json').then((documentsJson) => {
// mock api filtering
cy.intercept('GET', 'http://localhost:8000/api/documents/*', (req) => {
let response = { ...documentsJson }
if (req.query.hasOwnProperty('ordering')) {
const sort_field = req.query['ordering'].toString().replace('-', '')
const reverse = req.query['ordering'].toString().indexOf('-') !== -1
response.results = (
documentsJson.results as Array<PaperlessDocument>
).sort((docA, docB) => {
let result = 0
switch (sort_field) {
case 'created':
case 'added':
result =
new Date(docA[sort_field]) < new Date(docB[sort_field])
? -1
: 1
break
case 'archive_serial_number':
result = docA[sort_field] < docB[sort_field] ? -1 : 1
break
}
if (reverse) result = -result
return result
})
}
if (req.query.hasOwnProperty('tags__id__in')) {
const tag_ids: Array<number> = req.query['tags__id__in']
.toString()
.split(',')
.map((v) => +v)
response.results = (
documentsJson.results as Array<PaperlessDocument>
).filter(
(d) =>
d.tags.length > 0 &&
d.tags.filter((t) => tag_ids.includes(t)).length > 0
)
response.count = response.results.length
} else if (req.query.hasOwnProperty('tags__id__none')) {
const tag_ids: Array<number> = req.query['tags__id__none']
.toString()
.split(',')
.map((v) => +v)
response.results = (
documentsJson.results as Array<PaperlessDocument>
).filter((d) => d.tags.filter((t) => tag_ids.includes(t)).length == 0)
response.count = response.results.length
} else if (
req.query.hasOwnProperty('is_tagged') &&
req.query['is_tagged'] == '0'
) {
response.results = (
documentsJson.results as Array<PaperlessDocument>
).filter((d) => d.tags.length == 0)
response.count = response.results.length
}
if (req.query.hasOwnProperty('document_type__id')) {
const doctype_id = +req.query['document_type__id']
response.results = (
documentsJson.results as Array<PaperlessDocument>
).filter((d) => d.document_type == doctype_id)
response.count = response.results.length
} else if (
req.query.hasOwnProperty('document_type__isnull') &&
req.query['document_type__isnull'] == '1'
) {
response.results = (
documentsJson.results as Array<PaperlessDocument>
).filter((d) => d.document_type == undefined)
response.count = response.results.length
}
if (req.query.hasOwnProperty('correspondent__id')) {
const correspondent_id = +req.query['correspondent__id']
response.results = (
documentsJson.results as Array<PaperlessDocument>
).filter((d) => d.correspondent == correspondent_id)
response.count = response.results.length
} else if (
req.query.hasOwnProperty('correspondent__isnull') &&
req.query['correspondent__isnull'] == '1'
) {
response.results = (
documentsJson.results as Array<PaperlessDocument>
).filter((d) => d.correspondent == undefined)
response.count = response.results.length
}
if (req.query.hasOwnProperty('storage_path__id')) {
const storage_path_id = +req.query['storage_path__id']
response.results = (
documentsJson.results as Array<PaperlessDocument>
).filter((d) => d.storage_path == storage_path_id)
response.count = response.results.length
} else if (
req.query.hasOwnProperty('storage_path__isnull') &&
req.query['storage_path__isnull'] == '1'
) {
response.results = (
documentsJson.results as Array<PaperlessDocument>
).filter((d) => d.storage_path == undefined)
response.count = response.results.length
}
if (req.query.hasOwnProperty('created__date__gt')) {
const date = new Date(req.query['created__date__gt'])
response.results = (
documentsJson.results as Array<PaperlessDocument>
).filter((d) => new Date(d.created) > date)
response.count = response.results.length
} else if (req.query.hasOwnProperty('created__date__lt')) {
const date = new Date(req.query['created__date__lt'])
response.results = (
documentsJson.results as Array<PaperlessDocument>
).filter((d) => new Date(d.created) < date)
response.count = response.results.length
}
if (req.query.hasOwnProperty('added__date__gt')) {
const date = new Date(req.query['added__date__gt'])
response.results = (
documentsJson.results as Array<PaperlessDocument>
).filter((d) => new Date(d.added) > date)
response.count = response.results.length
} else if (req.query.hasOwnProperty('added__date__lt')) {
const date = new Date(req.query['added__date__lt'])
response.results = (
documentsJson.results as Array<PaperlessDocument>
).filter((d) => new Date(d.added) < date)
response.count = response.results.length
}
if (req.query.hasOwnProperty('title_content')) {
const title_content_regexp = new RegExp(
req.query['title_content'].toString(),
'i'
)
response.results = (
documentsJson.results as Array<PaperlessDocument>
).filter(
(d) =>
title_content_regexp.test(d.title) ||
title_content_regexp.test(d.content)
)
response.count = response.results.length
}
if (req.query.hasOwnProperty('archive_serial_number')) {
const asn = +req.query['archive_serial_number']
response.results = (
documentsJson.results as Array<PaperlessDocument>
).filter((d) => d.archive_serial_number == asn)
response.count = response.results.length
} else if (req.query.hasOwnProperty('archive_serial_number__isnull')) {
const isnull = req.query['storage_path__isnull'] == '1'
response.results = (
documentsJson.results as Array<PaperlessDocument>
).filter((d) =>
isnull
? d.archive_serial_number == undefined
: d.archive_serial_number != undefined
)
response.count = response.results.length
} else if (req.query.hasOwnProperty('archive_serial_number__gt')) {
const asn = +req.query['archive_serial_number__gt']
response.results = (
documentsJson.results as Array<PaperlessDocument>
).filter(
(d) => d.archive_serial_number > 0 && d.archive_serial_number > asn
)
response.count = response.results.length
} else if (req.query.hasOwnProperty('archive_serial_number__lt')) {
const asn = +req.query['archive_serial_number__lt']
response.results = (
documentsJson.results as Array<PaperlessDocument>
).filter(
(d) => d.archive_serial_number > 0 && d.archive_serial_number < asn
)
response.count = response.results.length
}
req.reply(response)
})
})
})
it('should show a list of documents sorted by created', () => {
cy.visit('/documents?sort=created')
cy.get('app-document-card-small').first().contains('No latin title')
})
it('should show a list of documents reverse sorted by created', () => {
cy.visit('/documents?sort=created&reverse=true')
cy.get('app-document-card-small').first().contains('sit amet')
})
it('should show a list of documents sorted by added', () => {
cy.visit('/documents?sort=added')
cy.get('app-document-card-small').first().contains('No latin title')
})
it('should show a list of documents reverse sorted by added', () => {
cy.visit('/documents?sort=added&reverse=true')
cy.get('app-document-card-small').first().contains('sit amet')
})
it('should show a list of documents filtered by any tags', () => {
cy.visit('/documents?sort=created&reverse=true&tags__id__in=2,4,5')
cy.contains('3 documents')
})
it('should show a list of documents filtered by excluded tags', () => {
cy.visit('/documents?sort=created&reverse=true&tags__id__none=2,4')
cy.contains('One document')
})
it('should show a list of documents filtered by no tags', () => {
cy.visit('/documents?sort=created&reverse=true&is_tagged=0')
cy.contains('One document')
})
it('should show a list of documents filtered by document type', () => {
cy.visit('/documents?sort=created&reverse=true&document_type__id=1')
cy.contains('3 documents')
})
it('should show a list of documents filtered by no document type', () => {
cy.visit('/documents?sort=created&reverse=true&document_type__isnull=1')
cy.contains('One document')
})
it('should show a list of documents filtered by correspondent', () => {
cy.visit('/documents?sort=created&reverse=true&correspondent__id=9')
cy.contains('2 documents')
})
it('should show a list of documents filtered by no correspondent', () => {
cy.visit('/documents?sort=created&reverse=true&correspondent__isnull=1')
cy.contains('2 documents')
})
it('should show a list of documents filtered by storage path', () => {
cy.visit('/documents?sort=created&reverse=true&storage_path__id=2')
cy.contains('One document')
})
it('should show a list of documents filtered by no storage path', () => {
cy.visit('/documents?sort=created&reverse=true&storage_path__isnull=1')
cy.contains('3 documents')
})
it('should show a list of documents filtered by title or content', () => {
cy.visit('/documents?sort=created&reverse=true&title_content=lorem')
cy.contains('2 documents')
})
it('should show a list of documents filtered by asn', () => {
cy.visit('/documents?sort=created&reverse=true&archive_serial_number=12345')
cy.contains('One document')
})
it('should show a list of documents filtered by empty asn', () => {
cy.visit(
'/documents?sort=created&reverse=true&archive_serial_number__isnull=1'
)
cy.contains('2 documents')
})
it('should show a list of documents filtered by non-empty asn', () => {
cy.visit(
'/documents?sort=created&reverse=true&archive_serial_number__isnull=0'
)
cy.contains('2 documents')
})
it('should show a list of documents filtered by asn greater than', () => {
cy.visit(
'/documents?sort=created&reverse=true&archive_serial_number__gt=12346'
)
cy.contains('One document')
})
it('should show a list of documents filtered by asn less than', () => {
cy.visit(
'/documents?sort=created&reverse=true&archive_serial_number__lt=12346'
)
cy.contains('One document')
})
it('should show a list of documents filtered by created date greater than', () => {
cy.visit(
'/documents?sort=created&reverse=true&created__date__gt=2022-03-23'
)
cy.contains('3 documents')
})
it('should show a list of documents filtered by created date less than', () => {
cy.visit(
'/documents?sort=created&reverse=true&created__date__lt=2022-03-23'
)
cy.contains('One document')
})
it('should show a list of documents filtered by added date greater than', () => {
cy.visit('/documents?sort=created&reverse=true&added__date__gt=2022-03-24')
cy.contains('2 documents')
})
it('should show a list of documents filtered by added date less than', () => {
cy.visit('/documents?sort=created&reverse=true&added__date__lt=2022-03-24')
cy.contains('2 documents')
})
it('should show a list of documents filtered by multiple filters', () => {
cy.visit(
'/documents?sort=created&reverse=true&document_type__id=1&correspondent__id=9&tags__id__in=4,5'
)
cy.contains('2 documents')
})
})

View File

@@ -1,12 +1,5 @@
describe('manage', () => {
beforeEach(() => {
cy.intercept('http://localhost:8000/api/correspondents/*', {
fixture: 'correspondents/correspondents.json',
})
cy.intercept('http://localhost:8000/api/tags/*', {
fixture: 'tags/tags.json',
})
})
// also uses global fixtures from cypress/support/e2e.ts
it('should show a list of correspondents with bottom pagination as well', () => {
cy.visit('/correspondents')

View File

@@ -1,50 +1,52 @@
describe('settings', () => {
beforeEach(() => {
// also uses global fixtures from cypress/support/e2e.ts
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')
})
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)
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/metadata/', {
fixture: 'documents/1/metadata.json',
})
cy.intercept('http://localhost:8000/api/documents/1/suggestions/', {
fixture: 'documents/1/suggestions.json',
})
cy.viewport(1024, 1024)
cy.viewport(1024, 1600)
cy.visit('/settings')
cy.wait('@savedViews')
})

View File

@@ -0,0 +1,60 @@
describe('tasks', () => {
beforeEach(() => {
this.dismissedTasks = new Set<number>()
cy.fixture('tasks/tasks.json').then((tasksViewsJson) => {
// acknowledge tasks POST
cy.intercept(
'POST',
'http://localhost:8000/api/acknowledge_tasks/',
(req) => {
req.body['tasks'].forEach((t) => this.dismissedTasks.add(t)) // store this for later
req.reply({ result: 'OK' })
}
)
cy.intercept('GET', 'http://localhost:8000/api/tasks/', (req) => {
let response = [...tasksViewsJson]
if (this.dismissedTasks.size) {
response = response.filter((t) => {
return !this.dismissedTasks.has(t.id)
})
}
req.reply(response)
}).as('tasks')
})
cy.visit('/tasks')
cy.wait('@tasks')
})
it('should show a list of dismissable tasks in tabs', () => {
cy.get('tbody').find('tr:visible').its('length').should('eq', 10) // double because collapsible result tr
cy.wait(500) // stabilizes the test, for some reason...
cy.get('tbody')
.find('button:visible')
.contains('Dismiss')
.first()
.click()
.wait('@tasks')
.wait(2000)
.then(() => {
cy.get('tbody').find('tr:visible').its('length').should('eq', 8) // double because collapsible result tr
})
})
it('should allow toggling all tasks in list and warn on dismiss', () => {
cy.get('thead').find('input[type="checkbox"]').first().click()
cy.get('body').find('button').contains('Dismiss selected').first().click()
cy.contains('Confirm')
cy.get('.modal')
.contains('button', 'Dismiss')
.click()
.wait('@tasks')
.wait(2000)
.then(() => {
cy.get('tbody').find('tr:visible').should('not.exist')
})
})
})

View File

@@ -0,0 +1,46 @@
[
{
"id": 10,
"comment": "Testing new comment",
"created": "2022-08-08T04:24:55.176008Z",
"user": {
"id": 1,
"username": "user2",
"firstname": "",
"lastname": ""
}
},
{
"id": 9,
"comment": "Testing one more time",
"created": "2022-02-18T04:24:55.176008Z",
"user": {
"id": 2,
"username": "user1",
"firstname": "",
"lastname": ""
}
},
{
"id": 8,
"comment": "Another comment",
"created": "2021-11-08T04:24:47.925042Z",
"user": {
"id": 2,
"username": "user33",
"firstname": "",
"lastname": ""
}
},
{
"id": 7,
"comment": "Cupcake ipsum dolor sit amet cheesecake candy cookie tiramisu. Donut chocolate chupa chups macaroon brownie halvah pie cheesecake gummies. Sweet chocolate bar candy donut gummi bears bear claw liquorice bonbon shortbread.\n\nDonut chocolate bar candy wafer wafer tiramisu. Gummies chocolate cake muffin toffee carrot cake macaroon. Toffee toffee jelly beans danish lollipop cake.",
"created": "2021-02-08T02:37:49.724132Z",
"user": {
"id": 3,
"username": "admin",
"firstname": "",
"lastname": ""
}
}
]

File diff suppressed because one or more lines are too long

View File

@@ -0,0 +1 @@
{"version":"v1.7.1","update_available":false,"feature_is_set":true}

View File

@@ -0,0 +1,17 @@
{
"count": 1,
"next": null,
"previous": null,
"results": [
{
"id": 2,
"slug": "year-title",
"name": "Year - Title",
"path": "{created_year}/{title}",
"match": "",
"matching_algorithm": 6,
"is_insensitive": true,
"document_count": 1
}
]
}

View File

@@ -1 +1,103 @@
{"count":8,"next":null,"previous":null,"results":[{"id":4,"slug":"another-sample-tag","name":"Another Sample Tag","color":"#a6cee3","text_color":"#000000","match":"","matching_algorithm":6,"is_insensitive":true,"is_inbox_tag":false,"document_count":3},{"id":7,"slug":"newone","name":"NewOne","color":"#9e4ad1","text_color":"#ffffff","match":"","matching_algorithm":1,"is_insensitive":true,"is_inbox_tag":false,"document_count":2},{"id":6,"slug":"partial-tag","name":"Partial Tag","color":"#72dba7","text_color":"#000000","match":"","matching_algorithm":1,"is_insensitive":true,"is_inbox_tag":false,"document_count":1},{"id":2,"slug":"tag-2","name":"Tag 2","color":"#612db7","text_color":"#ffffff","match":"","matching_algorithm":1,"is_insensitive":true,"is_inbox_tag":false,"document_count":3},{"id":3,"slug":"tag-3","name":"Tag 3","color":"#b2df8a","text_color":"#000000","match":"","matching_algorithm":1,"is_insensitive":true,"is_inbox_tag":false,"document_count":4},{"id":5,"slug":"tagwithpartial","name":"TagWithPartial","color":"#3b2db4","text_color":"#ffffff","match":"","matching_algorithm":6,"is_insensitive":true,"is_inbox_tag":false,"document_count":2},{"id":8,"slug":"test-another","name":"Test Another","color":"#3ccea5","text_color":"#000000","match":"","matching_algorithm":4,"is_insensitive":true,"is_inbox_tag":false,"document_count":0},{"id":1,"slug":"test-tag","name":"Test Tag","color":"#fb9a99","text_color":"#000000","match":"","matching_algorithm":1,"is_insensitive":true,"is_inbox_tag":false,"document_count":4}]}
{
"count": 8,
"next": null,
"previous": null,
"results": [
{
"id": 4,
"slug": "another-sample-tag",
"name": "Another Sample Tag",
"color": "#a6cee3",
"text_color": "#000000",
"match": "",
"matching_algorithm": 6,
"is_insensitive": true,
"is_inbox_tag": false,
"document_count": 3
},
{
"id": 7,
"slug": "newone",
"name": "NewOne",
"color": "#9e4ad1",
"text_color": "#ffffff",
"match": "",
"matching_algorithm": 1,
"is_insensitive": true,
"is_inbox_tag": false,
"document_count": 2
},
{
"id": 6,
"slug": "partial-tag",
"name": "Partial Tag",
"color": "#72dba7",
"text_color": "#000000",
"match": "",
"matching_algorithm": 1,
"is_insensitive": true,
"is_inbox_tag": false,
"document_count": 1
},
{
"id": 2,
"slug": "tag-2",
"name": "Tag 2",
"color": "#612db7",
"text_color": "#ffffff",
"match": "",
"matching_algorithm": 1,
"is_insensitive": true,
"is_inbox_tag": false,
"document_count": 3
},
{
"id": 3,
"slug": "tag-3",
"name": "Tag 3",
"color": "#b2df8a",
"text_color": "#000000",
"match": "",
"matching_algorithm": 1,
"is_insensitive": true,
"is_inbox_tag": false,
"document_count": 4
},
{
"id": 5,
"slug": "tagwithpartial",
"name": "TagWithPartial",
"color": "#3b2db4",
"text_color": "#ffffff",
"match": "",
"matching_algorithm": 6,
"is_insensitive": true,
"is_inbox_tag": false,
"document_count": 2
},
{
"id": 8,
"slug": "test-another",
"name": "Test Another",
"color": "#3ccea5",
"text_color": "#000000",
"match": "",
"matching_algorithm": 4,
"is_insensitive": true,
"is_inbox_tag": false,
"document_count": 0
},
{
"id": 1,
"slug": "test-tag",
"name": "Test Tag",
"color": "#fb9a99",
"text_color": "#000000",
"match": "",
"matching_algorithm": 1,
"is_insensitive": true,
"is_inbox_tag": false,
"document_count": 4
}
]
}

File diff suppressed because one or more lines are too long

View File

@@ -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
}
}
}

View File

@@ -1,64 +0,0 @@
describe('document-detail', () => {
beforeEach(() => {
this.modifiedDocuments = []
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('PUT', 'http://localhost:8000/api/documents/1/', (req) => {
this.modifiedDocuments.push(req.body) // store this for later
req.reply({ result: 'OK' })
}).as('saveDoc')
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.intercept('http://localhost:8000/api/saved_views/*', {
fixture: 'saved_views/savedviews.json',
})
cy.intercept('http://localhost:8000/api/tags/*', {
fixture: 'tags/tags.json',
})
cy.intercept('http://localhost:8000/api/correspondents/*', {
fixture: 'correspondents/correspondents.json',
})
cy.intercept('http://localhost:8000/api/document_types/*', {
fixture: 'document_types/doctypes.json',
})
cy.viewport(1024, 1024)
cy.visit('/documents/1/')
})
it('should activate / deactivate save button when changes are saved', () => {
cy.contains('button', 'Save').should('be.disabled')
cy.get('app-input-text[formcontrolname="title"]')
.type(' additional')
.wait(1500) // this delay is for frontend debounce
cy.contains('button', 'Save').should('not.be.disabled')
})
it('should warn on unsaved changes', () => {
cy.get('app-input-text[formcontrolname="title"]')
.type(' additional')
.wait(1500) // this delay is for frontend debounce
cy.get('button[title="Close"]').click()
cy.contains('You have unsaved changes')
cy.contains('button', 'Cancel').click().wait(150)
cy.contains('button', 'Save').click().wait('@saveDoc').wait(2000) // navigates away after saving
cy.contains('You have unsaved changes').should('not.exist')
})
})

View File

@@ -0,0 +1,43 @@
// mock API methods
beforeEach(() => {
cy.intercept('http://localhost:8000/api/ui_settings/', {
fixture: 'ui_settings/settings.json',
})
cy.intercept('http://localhost:8000/api/remote_version/', {
fixture: 'remote_version/remote_version.json',
})
cy.intercept('http://localhost:8000/api/saved_views/*', {
fixture: 'saved_views/savedviews.json',
})
cy.intercept('http://localhost:8000/api/tags/*', {
fixture: 'tags/tags.json',
})
cy.intercept('http://localhost:8000/api/correspondents/*', {
fixture: 'correspondents/correspondents.json',
})
cy.intercept('http://localhost:8000/api/document_types/*', {
fixture: 'document_types/doctypes.json',
})
cy.intercept('http://localhost:8000/api/storage_paths/*', {
fixture: 'storage_paths/storage_paths.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.intercept('http://localhost:8000/api/documents/1/thumb/', {
fixture: 'documents/lorem-ipsum.png',
})
})

View File

@@ -1,17 +0,0 @@
// ***********************************************************
// This example support/index.js is processed and
// loaded automatically before your test files.
//
// This is a great place to put global configuration and
// behavior that modifies Cypress.
//
// You can change the location of this file or turn off
// automatically serving support files with the
// 'supportFile' configuration option.
//
// You can read more here:
// https://on.cypress.io/configuration
// ***********************************************************
// When a command from ./commands is ready to use, import with `import './commands'` syntax
// import './commands';

File diff suppressed because it is too large Load Diff

19507
src-ui/package-lock.json generated

File diff suppressed because it is too large Load Diff

View File

@@ -13,48 +13,49 @@
},
"private": true,
"dependencies": {
"@angular/common": "~13.3.5",
"@angular/compiler": "~13.3.5",
"@angular/core": "~13.3.5",
"@angular/forms": "~13.3.5",
"@angular/localize": "~13.3.5",
"@angular/platform-browser": "~13.3.5",
"@angular/platform-browser-dynamic": "~13.3.5",
"@angular/router": "~13.3.5",
"@ng-bootstrap/ng-bootstrap": "^12.1.1",
"@ng-select/ng-select": "^8.1.1",
"@angular/common": "~14.2.8",
"@angular/compiler": "~14.2.8",
"@angular/core": "~14.2.8",
"@angular/forms": "~14.2.8",
"@angular/localize": "~14.2.8",
"@angular/platform-browser": "~14.2.8",
"@angular/platform-browser-dynamic": "~14.2.8",
"@angular/router": "~14.2.8",
"@ng-bootstrap/ng-bootstrap": "^13.0.0",
"@ng-select/ng-select": "^9.0.2",
"@ngneat/dirty-check-forms": "^3.0.2",
"@popperjs/core": "^2.11.4",
"bootstrap": "^5.1.3",
"@popperjs/core": "^2.11.6",
"bootstrap": "^5.2.1",
"file-saver": "^2.0.5",
"ng2-pdf-viewer": "^9.0.0",
"ngx-color": "^7.3.3",
"ngx-cookie-service": "^13.1.2",
"ngx-file-drop": "^13.0.0",
"rxjs": "~7.5.5",
"ng2-pdf-viewer": "^9.1.2",
"ngx-color": "^8.0.3",
"ngx-cookie-service": "^14.0.1",
"ngx-file-drop": "^14.0.1",
"ngx-ui-tour-ng-bootstrap": "^11.1.0",
"rxjs": "~7.5.7",
"tslib": "^2.3.1",
"uuid": "^8.3.1",
"zone.js": "~0.11.4"
"uuid": "^9.0.0",
"zone.js": "~0.11.8"
},
"devDependencies": {
"@angular-builders/jest": "13.0.3",
"@angular-devkit/build-angular": "~13.3.4",
"@angular/cli": "~13.3.4",
"@angular/compiler-cli": "~13.3.5",
"@types/jest": "27.4.1",
"@types/node": "^17.0.30",
"@angular-builders/jest": "14.0.1",
"@angular-devkit/build-angular": "~14.2.7",
"@angular/cli": "~14.2.7",
"@angular/compiler-cli": "~14.2.8",
"@types/jest": "28.1.6",
"@types/node": "^18.7.23",
"codelyzer": "^6.0.2",
"concurrently": "7.1.0",
"jest": "28.0.3",
"jest-environment-jsdom": "^28.0.2",
"jest-preset-angular": "^12.0.0-next.1",
"ts-node": "~10.7.0",
"concurrently": "7.4.0",
"jest": "28.1.3",
"jest-environment-jsdom": "^29.2.2",
"jest-preset-angular": "^12.2.2",
"ts-node": "~10.9.1",
"tslint": "~6.1.3",
"typescript": "~4.6.3",
"typescript": "~4.8.4",
"wait-on": "~6.0.1"
},
"optionalDependencies": {
"@cypress/schematic": "^1.6.0",
"cypress": "~9.6.0"
"@cypress/schematic": "^2.1.1",
"cypress": "~10.9.0"
}
}

View File

@@ -12,27 +12,42 @@ 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'
import { TasksComponent } from './components/manage/tasks/tasks.component'
import { DirtyDocGuard } from './guards/dirty-doc.guard'
import { DirtySavedViewGuard } from './guards/dirty-saved-view.guard'
const routes: Routes = [
{ path: '', redirectTo: 'dashboard', pathMatch: 'full' },
{
path: '',
component: AppFrameComponent,
canDeactivate: [DirtyDocGuard],
children: [
{ path: 'dashboard', component: DashboardComponent },
{ path: 'documents', component: DocumentListComponent },
{ path: 'view/:id', component: DocumentListComponent },
{
path: 'documents',
component: DocumentListComponent,
canDeactivate: [DirtySavedViewGuard],
},
{
path: 'view/:id',
component: DocumentListComponent,
canDeactivate: [DirtySavedViewGuard],
},
{ path: 'documents/:id', component: DocumentDetailComponent },
{ path: 'asn/:id', component: DocumentAsnComponent },
{ path: 'tags', component: TagListComponent },
{ path: 'documenttypes', component: DocumentTypeListComponent },
{ path: 'correspondents', component: CorrespondentListComponent },
{ path: 'storagepaths', component: StoragePathListComponent },
{ path: 'logs', component: LogsComponent },
{
path: 'settings',
component: SettingsComponent,
canDeactivate: [DirtyFormGuard],
},
{ path: 'tasks', component: TasksComponent },
],
},

View File

@@ -11,3 +11,28 @@
</div>
</ng-template>
</ngx-file-drop>
<tour-step-template>
<ng-template #tourStep let-step="step">
<p class="tour-step-content" [innerHTML]="step?.content"></p>
<hr/>
<div class="d-flex justify-content-between align-items-center">
<span class="badge bg-light text-dark">{{ tourService.steps?.indexOf(step) + 1 }} / {{ tourService.steps?.length }}</span>
<div class="tour-step-navigation btn-toolbar" role="toolbar" aria-label="Controls">
<div class="btn-group btn-group-sm me-2" role="group" aria-label="Dismiss">
<button class="btn btn-outline-danger" (click)="tourService.end()">
{{ step?.endBtnTitle }}
</button>
</div>
<div class="btn-group btn-group-sm align-self-end" role="group" aria-label="Previous / Next">
<button *ngIf="tourService.hasPrev(step)" class="btn btn-outline-primary" (click)="tourService.prev()">
« {{ step?.prevBtnTitle }}
</button>
<button *ngIf="tourService.hasNext(step)" class="btn btn-outline-primary" (click)="tourService.next()">
{{ step?.nextBtnTitle }} »
</button>
</div>
</div>
</div>
</ng-template>
</tour-step-template>

View File

@@ -1,11 +1,14 @@
import { SettingsService, SETTINGS_KEYS } from './services/settings.service'
import { Component, OnDestroy, OnInit } from '@angular/core'
import { SettingsService } from './services/settings.service'
import { SETTINGS_KEYS } from './data/paperless-uisettings'
import { Component, OnDestroy, OnInit, Renderer2 } from '@angular/core'
import { Router } from '@angular/router'
import { Subscription } from 'rxjs'
import { ConsumerStatusService } from './services/consumer-status.service'
import { ToastService } from './services/toast.service'
import { NgxFileDropEntry } from 'ngx-file-drop'
import { UploadDocumentsService } from './services/upload-documents.service'
import { TasksService } from './services/tasks.service'
import { TourService } from 'ngx-ui-tour-ng-bootstrap'
@Component({
selector: 'app-root',
@@ -26,7 +29,10 @@ export class AppComponent implements OnInit, OnDestroy {
private consumerStatusService: ConsumerStatusService,
private toastService: ToastService,
private router: Router,
private uploadDocumentsService: UploadDocumentsService
private uploadDocumentsService: UploadDocumentsService,
private tasksService: TasksService,
public tourService: TourService,
private renderer: Renderer2
) {
let anyWindow = window as any
anyWindow.pdfWorkerSrc = 'assets/js/pdf.worker.min.js'
@@ -64,6 +70,7 @@ export class AppComponent implements OnInit, OnDestroy {
this.successSubscription = this.consumerStatusService
.onDocumentConsumptionFinished()
.subscribe((status) => {
this.tasksService.reload()
if (
this.showNotification(SETTINGS_KEYS.NOTIFICATIONS_CONSUMER_SUCCESS)
) {
@@ -82,6 +89,7 @@ export class AppComponent implements OnInit, OnDestroy {
this.failedSubscription = this.consumerStatusService
.onDocumentConsumptionFailed()
.subscribe((status) => {
this.tasksService.reload()
if (
this.showNotification(SETTINGS_KEYS.NOTIFICATIONS_CONSUMER_FAILED)
) {
@@ -94,6 +102,7 @@ export class AppComponent implements OnInit, OnDestroy {
this.newDocumentSubscription = this.consumerStatusService
.onDocumentDetected()
.subscribe((status) => {
this.tasksService.reload()
if (
this.showNotification(
SETTINGS_KEYS.NOTIFICATIONS_CONSUMER_NEW_DOCUMENT
@@ -106,6 +115,87 @@ export class AppComponent implements OnInit, OnDestroy {
})
}
})
this.tourService.initialize([
{
anchorId: 'tour.dashboard',
content: $localize`The dashboard can be used to show saved views, such as an 'Inbox'. Those settings are found under Settings > Saved Views once you have created some.`,
route: '/dashboard',
enableBackdrop: true,
delayAfterNavigation: 500,
},
{
anchorId: 'tour.upload-widget',
content: $localize`Drag-and-drop documents here to start uploading or place them in the consume folder. You can also drag-and-drop documents anywhere on all other pages of the web app. Once you do, Paperless-ngx will start training its machine learning algorithms.`,
route: '/dashboard',
enableBackdrop: true,
},
{
anchorId: 'tour.documents',
content: $localize`The documents list shows all of your documents and allows for filtering as well as bulk-editing. There are three different view styles: list, small cards and large cards. A list of documents currently opened for editing is shown in the sidebar.`,
route: '/documents?sort=created&reverse=1&page=1',
delayAfterNavigation: 500,
placement: 'bottom',
enableBackdrop: true,
disableScrollToAnchor: true,
},
{
anchorId: 'tour.documents-filter-editor',
content: $localize`The filtering tools allow you to quickly find documents using various searches, dates, tags, etc.`,
route: '/documents?sort=created&reverse=1&page=1',
placement: 'bottom',
enableBackdrop: true,
},
{
anchorId: 'tour.documents-views',
content: $localize`Any combination of filters can be saved as a 'view' which can then be displayed on the dashboard and / or sidebar.`,
route: '/documents?sort=created&reverse=1&page=1',
enableBackdrop: true,
},
{
anchorId: 'tour.tags',
content: $localize`Tags, correspondents, document types and storage paths can all be managed using these pages. They can also be created from the document edit view.`,
route: '/tags',
enableBackdrop: true,
},
{
anchorId: 'tour.file-tasks',
content: $localize`File Tasks shows you documents that have been consumed, are waiting to be, or may have failed during the process.`,
route: '/tasks',
enableBackdrop: true,
},
{
anchorId: 'tour.settings',
content: $localize`Check out the settings for various tweaks to the web app or to toggle settings for saved views.`,
route: '/settings',
enableBackdrop: true,
},
{
anchorId: 'tour.admin',
content: $localize`The Admin area contains more advanced controls as well as the settings for automatic e-mail fetching.`,
enableBackdrop: true,
},
{
anchorId: 'tour.outro',
title: $localize`Thank you! 🙏`,
content:
$localize`There are <em>tons</em> more features and info we didn't cover here, but this should get you started. Check out the documentation or visit the project on GitHub to learn more or to report issues.` +
'<br/><br/>' +
$localize`Lastly, on behalf of every contributor to this community-supported project, thank you for using Paperless-ngx!`,
route: '/dashboard',
},
])
this.tourService.start$.subscribe(() => {
this.renderer.addClass(document.body, 'tour-active')
})
this.tourService.end$.subscribe(() => {
// animation time
setTimeout(() => {
this.renderer.removeClass(document.body, 'tour-active')
}, 500)
})
}
public get dragDropEnabled(): boolean {

View File

@@ -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 {
@@ -24,6 +24,7 @@ import { CorrespondentEditDialogComponent } from './components/common/edit-dialo
import { TagEditDialogComponent } from './components/common/edit-dialog/tag-edit-dialog/tag-edit-dialog.component'
import { DocumentTypeEditDialogComponent } from './components/common/edit-dialog/document-type-edit-dialog/document-type-edit-dialog.component'
import { TagComponent } from './components/common/tag/tag.component'
import { ClearableBadge } from './components/common/clearable-badge/clearable-badge.component'
import { PageHeaderComponent } from './components/common/page-header/page-header.component'
import { AppFrameComponent } from './components/app-frame/app-frame.component'
import { ToastsComponent } from './components/common/toasts/toasts.component'
@@ -61,12 +62,20 @@ import { SafeUrlPipe } from './pipes/safeurl.pipe'
import { SafeHtmlPipe } from './pipes/safehtml.pipe'
import { CustomDatePipe } from './pipes/custom-date.pipe'
import { DateComponent } from './components/common/input/date/date.component'
import { ISODateTimeAdapter } from './utils/ngb-iso-date-time-adapter'
import { ISODateAdapter } from './utils/ngb-iso-date-adapter'
import { LocalizedDateParserFormatter } from './utils/ngb-date-parser-formatter'
import { ApiVersionInterceptor } from './interceptors/api-version.interceptor'
import { ColorSliderModule } from 'ngx-color/slider'
import { ColorComponent } from './components/common/input/color/color.component'
import { DocumentAsnComponent } from './components/document-asn/document-asn.component'
import { DocumentCommentsComponent } from './components/document-comments/document-comments.component'
import { DirtyDocGuard } from './guards/dirty-doc.guard'
import { DirtySavedViewGuard } from './guards/dirty-saved-view.guard'
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'
import { TasksComponent } from './components/manage/tasks/tasks.component'
import { TourNgBootstrapModule } from 'ngx-ui-tour-ng-bootstrap'
import localeBe from '@angular/common/locales/be'
import localeCs from '@angular/common/locales/cs'
@@ -109,6 +118,12 @@ registerLocaleData(localeSv)
registerLocaleData(localeTr)
registerLocaleData(localeZh)
function initializeApp(settings: SettingsService) {
return () => {
return settings.initializeSettings()
}
}
@NgModule({
declarations: [
AppComponent,
@@ -118,6 +133,7 @@ registerLocaleData(localeZh)
TagListComponent,
DocumentTypeListComponent,
CorrespondentListComponent,
StoragePathListComponent,
LogsComponent,
SettingsComponent,
NotFoundComponent,
@@ -125,7 +141,9 @@ registerLocaleData(localeZh)
ConfirmDialogComponent,
TagEditDialogComponent,
DocumentTypeEditDialogComponent,
StoragePathEditDialogComponent,
TagComponent,
ClearableBadge,
PageHeaderComponent,
AppFrameComponent,
ToastsComponent,
@@ -160,6 +178,8 @@ registerLocaleData(localeZh)
DateComponent,
ColorComponent,
DocumentAsnComponent,
DocumentCommentsComponent,
TasksComponent,
],
imports: [
BrowserModule,
@@ -172,8 +192,15 @@ registerLocaleData(localeZh)
PdfViewerModule,
NgSelectModule,
ColorSliderModule,
TourNgBootstrapModule.forRoot(),
],
providers: [
{
provide: APP_INITIALIZER,
useFactory: initializeApp,
deps: [SettingsService],
multi: true,
},
DatePipe,
CookieService,
{
@@ -188,8 +215,10 @@ registerLocaleData(localeZh)
},
FilterPipe,
DocumentTitlePipe,
{ provide: NgbDateAdapter, useClass: ISODateTimeAdapter },
{ provide: NgbDateAdapter, useClass: ISODateAdapter },
{ provide: NgbDateParserFormatter, useClass: LocalizedDateParserFormatter },
DirtyDocGuard,
DirtySavedViewGuard,
],
bootstrap: [AppComponent],
})

View File

@@ -4,11 +4,11 @@
(click)="isMenuCollapsed = !isMenuCollapsed">
<span class="navbar-toggler-icon"></span>
</button>
<a class="navbar-brand col-auto col-md-3 col-lg-2 me-0 px-3 py-3 order-sm-0" routerLink="/dashboard">
<a class="navbar-brand col-auto col-md-3 col-lg-2 me-0 px-3 py-3 order-sm-0" [ngClass]="slimSidebarEnabled ? 'slim' : 'col-auto col-md-3 col-lg-2'" routerLink="/dashboard" tourAnchor="tour.intro">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 198.43 238.91" width="1em" class="me-2" fill="currentColor">
<path d="M194.7,0C164.22,70.94,17.64,79.74,64.55,194.06c.58,1.47-10.85,17-18.47,29.9-1.76-6.45-3.81-13.48-3.52-14.07,38.11-45.14-27.26-70.65-30.78-107.58C-4.64,131.62-10.5,182.92,39,212.53c.3,0,2.64,11.14,3.81,16.71a58.55,58.55,0,0,0-2.93,6.45c-1.17,2.93,7.62,2.64,7.62,3.22.88-.29,21.7-36.93,22.28-37.23C187.67,174.72,208.48,68.6,194.7,0ZM134.61,74.75C79.5,124,70.12,160.64,71.88,178.53,53.41,134.85,107.64,86.77,134.61,74.75ZM28.2,145.11c10.55,9.67,28.14,39.28,13.19,56.57C44.91,193.77,46.08,175.89,28.2,145.11Z" transform="translate(0 0)"/>
</svg>
<ng-container i18n="app title">Paperless-ngx</ng-container>
<span class="ms-2" [class.visually-hidden]="slimSidebarEnabled" i18n="app title">Paperless-ngx</span>
</a>
<div class="search-form-container flex-grow-1 py-2 pb-3 pb-sm-2 px-3 ps-md-4 me-sm-auto order-3 order-sm-1">
<form (ngSubmit)="search()" class="form-inline flex-grow-1">
@@ -16,22 +16,27 @@
<use xlink:href="assets/bootstrap-icons.svg#search"/>
</svg>
<input class="form-control form-control-sm" type="text" placeholder="Search documents" aria-label="Search"
[formControl]="searchField" [ngbTypeahead]="searchAutoComplete" (selectItem)="itemSelected($event)" i18n-placeholder>
[formControl]="searchField" [ngbTypeahead]="searchAutoComplete" (keyup)="searchFieldKeyup($event)" (selectItem)="itemSelected($event)" i18n-placeholder>
<button *ngIf="!searchFieldEmpty" class="btn btn-link btn-sm px-0 position-absolute top-0 end-0" (click)="resetSearchField()">
<svg width="1em" height="1em" viewBox="0 0 16 16" class="bi bi-x me-1" fill="currentColor" xmlns="http://www.w3.org/2000/svg">
<path fill-rule="evenodd" d="M4.646 4.646a.5.5 0 0 1 .708 0L8 7.293l2.646-2.647a.5.5 0 0 1 .708.708L8.707 8l2.647 2.646a.5.5 0 0 1-.708.708L8 8.707l-2.646 2.647a.5.5 0 0 1-.708-.708L7.293 8 4.646 5.354a.5.5 0 0 1 0-.708z"/>
</svg>
</button>
</form>
</div>
<ul ngbNav class="order-sm-3">
<li ngbDropdown class="nav-item dropdown">
<button class="btn text-light" id="userDropdown" ngbDropdownToggle>
<span *ngIf="displayName" class="navbar-text small me-2 text-light d-none d-sm-inline">
{{displayName}}
<button class="btn border-0" id="userDropdown" ngbDropdownToggle>
<span class="small me-2 d-none d-sm-inline">
{{this.settingsService.displayName}}
</span>
<svg width="1.3em" height="1.3em" fill="currentColor">
<use xlink:href="assets/bootstrap-icons.svg#person-circle"/>
</svg>
</button>
<div ngbDropdownMenu class="dropdown-menu-end shadow me-2" aria-labelledby="userDropdown">
<div *ngIf="displayName" class="d-sm-none">
<p class="small mb-0 px-3 text-muted" i18n>Logged in as {{displayName}}</p>
<div class="d-sm-none">
<p class="small mb-0 px-3 text-muted" i18n>Logged in as {{this.settingsService.displayName}}</p>
<div class="dropdown-divider"></div>
</div>
<a ngbDropdownItem class="nav-link" routerLink="settings" (click)="closeMenu()">
@@ -51,47 +56,54 @@
<div class="container-fluid">
<div class="row">
<nav id="sidebarMenu" class="col-md-3 col-lg-2 d-md-block bg-light sidebar collapse" [ngbCollapse]="isMenuCollapsed">
<nav id="sidebarMenu" class="d-md-block bg-light sidebar collapse" [ngClass]="slimSidebarEnabled ? 'slim' : 'col-md-3 col-lg-2'" [class.animating]="slimSidebarAnimating" [ngbCollapse]="isMenuCollapsed">
<button class="btn btn-sm btn-dark sidebar-slim-toggler" (click)="toggleSlimSidebar()">
<svg class="sidebaricon-sm" fill="currentColor">
<use *ngIf="slimSidebarEnabled" xlink:href="assets/bootstrap-icons.svg#chevron-double-right"/>
<use *ngIf="!slimSidebarEnabled" xlink:href="assets/bootstrap-icons.svg#chevron-double-left"/>
</svg>
</button>
<div class="sidebar-sticky pt-3 d-flex flex-column justify-space-around">
<ul class="nav flex-column">
<li class="nav-item">
<a class="nav-link" routerLink="dashboard" routerLinkActive="active" (click)="closeMenu()">
<a class="nav-link" routerLink="dashboard" routerLinkActive="active" (click)="closeMenu()" ngbPopover="Dashboard" i18n-ngbPopover [disablePopover]="!slimSidebarEnabled" placement="end" container="body" triggers="mouseenter:mouseleave" popoverClass="popover-slim">
<svg class="sidebaricon" fill="currentColor">
<use xlink:href="assets/bootstrap-icons.svg#house"/>
</svg>&nbsp;<ng-container i18n>Dashboard</ng-container>
</svg><span>&nbsp;<ng-container i18n>Dashboard</ng-container></span>
</a>
</li>
<li class="nav-item">
<a class="nav-link" routerLink="documents" routerLinkActive="active" (click)="closeMenu()">
<a class="nav-link" routerLink="documents" routerLinkActive="active" (click)="closeMenu()" ngbPopover="Documents" i18n-ngbPopover [disablePopover]="!slimSidebarEnabled" placement="end" container="body" triggers="mouseenter:mouseleave" popoverClass="popover-slim">
<svg class="sidebaricon" fill="currentColor">
<use xlink:href="assets/bootstrap-icons.svg#files"/>
</svg>&nbsp;<ng-container i18n>Documents</ng-container>
</svg><span>&nbsp;<ng-container i18n>Documents</ng-container></span>
</a>
</li>
</ul>
<h6 class="sidebar-heading px-3 mt-4 mb-1 text-muted" *ngIf='savedViewService.sidebarViews.length > 0'>
<ng-container i18n>Saved views</ng-container>
<h6 class="sidebar-heading px-3 mt-4 mb-1 text-muted" *ngIf='savedViewService.loading || savedViewService.sidebarViews.length > 0'>
<span i18n>Saved views</span>
<div *ngIf="savedViewService.loading" class="spinner-border spinner-border-sm fw-normal ms-2" role="status"></div>
</h6>
<ul class="nav flex-column mb-2">
<li class="nav-item w-100" *ngFor="let view of savedViewService.sidebarViews">
<a class="nav-link text-truncate" routerLink="view/{{view.id}}" routerLinkActive="active" (click)="closeMenu()">
<a class="nav-link" [class.text-truncate]="!slimSidebarEnabled" routerLink="view/{{view.id}}" routerLinkActive="active" (click)="closeMenu()" [ngbPopover]="view.name" [disablePopover]="!slimSidebarEnabled" placement="end" container="body" triggers="mouseenter:mouseleave" popoverClass="popover-slim">
<svg class="sidebaricon" fill="currentColor">
<use xlink:href="assets/bootstrap-icons.svg#funnel"/>
</svg>&nbsp;{{view.name}}
</svg><span>&nbsp;{{view.name}}</span>
</a>
</li>
</ul>
<h6 class="sidebar-heading px-3 mt-4 mb-1 text-muted" *ngIf='openDocuments.length > 0'>
<ng-container i18n>Open documents</ng-container>
<span i18n>Open documents</span>
</h6>
<ul class="nav flex-column mb-2">
<li class="nav-item w-100" *ngFor='let d of openDocuments'>
<a class="nav-link text-truncate" routerLink="documents/{{d.id}}" routerLinkActive="active" (click)="closeMenu()">
<a class="nav-link" [class.text-truncate]="!slimSidebarEnabled" routerLink="documents/{{d.id}}" routerLinkActive="active" (click)="closeMenu()" [ngbPopover]="d.title | documentTitle" [disablePopover]="!slimSidebarEnabled" placement="end" container="body" triggers="mouseenter:mouseleave" popoverClass="popover-slim">
<svg class="sidebaricon" fill="currentColor">
<use xlink:href="assets/bootstrap-icons.svg#file-text"/>
</svg>&nbsp;{{d.title | documentTitle}}
</svg><span>&nbsp;{{d.title | documentTitle}}</span>
<span class="close" (click)="closeDocument(d); $event.preventDefault()">
<svg xmlns="http://www.w3.org/2000/svg" fill="currentColor" class="bi bi-x" viewBox="0 0 16 16">
<use xlink:href="assets/bootstrap-icons.svg#x"/>
@@ -100,81 +112,96 @@
</a>
</li>
<li class="nav-item w-100" *ngIf="openDocuments.length >= 1">
<a class="nav-link text-truncate" [routerLink]="[]" (click)="closeAll()">
<a class="nav-link" [class.text-truncate]="!slimSidebarEnabled" [routerLink]="[]" (click)="closeAll()" ngbPopover="Close all" i18n-ngbPopover [disablePopover]="!slimSidebarEnabled" placement="end" container="body" triggers="mouseenter:mouseleave" popoverClass="popover-slim">
<svg class="sidebaricon" fill="currentColor">
<use xlink:href="assets/bootstrap-icons.svg#x"/>
</svg>&nbsp;<ng-container i18n>Close all</ng-container>
</svg><span>&nbsp;<ng-container i18n>Close all</ng-container></span>
</a>
</li>
</ul>
<h6 class="sidebar-heading px-3 mt-4 mb-1 text-muted">
<ng-container i18n>Manage</ng-container>
<span i18n>Manage</span>
</h6>
<ul class="nav flex-column mb-2">
<li class="nav-item">
<a class="nav-link" routerLink="correspondents" routerLinkActive="active" (click)="closeMenu()">
<a class="nav-link" routerLink="correspondents" routerLinkActive="active" (click)="closeMenu()" ngbPopover="Correspondents" i18n-ngbPopover [disablePopover]="!slimSidebarEnabled" placement="end" container="body" triggers="mouseenter:mouseleave" popoverClass="popover-slim">
<svg class="sidebaricon" fill="currentColor">
<use xlink:href="assets/bootstrap-icons.svg#person"/>
</svg>&nbsp;<ng-container i18n>Correspondents</ng-container>
</svg><span>&nbsp;<ng-container i18n>Correspondents</ng-container></span>
</a>
</li>
<li class="nav-item">
<a class="nav-link" routerLink="tags" routerLinkActive="active" (click)="closeMenu()">
<li class="nav-item" tourAnchor="tour.tags">
<a class="nav-link" routerLink="tags" routerLinkActive="active" (click)="closeMenu()" ngbPopover="Tags" i18n-ngbPopover [disablePopover]="!slimSidebarEnabled" placement="end" container="body" triggers="mouseenter:mouseleave" popoverClass="popover-slim">
<svg class="sidebaricon" fill="currentColor">
<use xlink:href="assets/bootstrap-icons.svg#tags"/>
</svg>&nbsp;<ng-container i18n>Tags</ng-container>
</svg><span>&nbsp;<ng-container i18n>Tags</ng-container></span>
</a>
</li>
<li class="nav-item">
<a class="nav-link" routerLink="documenttypes" routerLinkActive="active" (click)="closeMenu()">
<a class="nav-link" routerLink="documenttypes" routerLinkActive="active" (click)="closeMenu()" ngbPopover="Document types" i18n-ngbPopover [disablePopover]="!slimSidebarEnabled" placement="end" container="body" triggers="mouseenter:mouseleave" popoverClass="popover-slim">
<svg class="sidebaricon" fill="currentColor">
<use xlink:href="assets/bootstrap-icons.svg#hash"/>
</svg>&nbsp;<ng-container i18n>Document types</ng-container>
</svg><span>&nbsp;<ng-container i18n>Document types</ng-container></span>
</a>
</li>
<li class="nav-item">
<a class="nav-link" routerLink="logs" routerLinkActive="active" (click)="closeMenu()">
<a class="nav-link" routerLink="storagepaths" routerLinkActive="active" (click)="closeMenu()" ngbPopover="Storage paths" i18n-ngbPopover [disablePopover]="!slimSidebarEnabled" placement="end" container="body" triggers="mouseenter:mouseleave" popoverClass="popover-slim">
<svg class="sidebaricon" fill="currentColor">
<use xlink:href="assets/bootstrap-icons.svg#folder"/>
</svg><span>&nbsp;<ng-container i18n>Storage paths</ng-container></span>
</a>
</li>
<li class="nav-item" tourAnchor="tour.file-tasks">
<a class="nav-link" routerLink="tasks" routerLinkActive="active" (click)="closeMenu()" ngbPopover="File Tasks" i18n-ngbPopover [disablePopover]="!slimSidebarEnabled" placement="end" container="body" triggers="mouseenter:mouseleave" popoverClass="popover-slim">
<span *ngIf="tasksService.failedFileTasks.length > 0 && slimSidebarEnabled" class="badge bg-danger position-absolute top-0 end-0">{{tasksService.failedFileTasks.length}}</span>
<svg class="sidebaricon" fill="currentColor">
<use xlink:href="assets/bootstrap-icons.svg#list-task"/>
</svg><span>&nbsp;<ng-container i18n>File Tasks<span *ngIf="tasksService.failedFileTasks.length > 0"><span class="badge bg-danger ms-2">{{tasksService.failedFileTasks.length}}</span></span></ng-container></span>
</a>
</li>
<li class="nav-item">
<a class="nav-link" routerLink="logs" routerLinkActive="active" (click)="closeMenu()" ngbPopover="Logs" i18n-ngbPopover [disablePopover]="!slimSidebarEnabled" placement="end" container="body" triggers="mouseenter:mouseleave" popoverClass="popover-slim">
<svg class="sidebaricon" fill="currentColor">
<use xlink:href="assets/bootstrap-icons.svg#text-left"/>
</svg>&nbsp;<ng-container i18n>Logs</ng-container>
</svg><span>&nbsp;<ng-container i18n>Logs</ng-container></span>
</a>
</li>
<li class="nav-item">
<a class="nav-link" routerLink="settings" routerLinkActive="active" (click)="closeMenu()">
<li class="nav-item" tourAnchor="tour.settings">
<a class="nav-link" routerLink="settings" routerLinkActive="active" (click)="closeMenu()" ngbPopover="Settings" i18n-ngbPopover [disablePopover]="!slimSidebarEnabled" placement="end" container="body" triggers="mouseenter:mouseleave" popoverClass="popover-slim">
<svg class="sidebaricon" fill="currentColor">
<use xlink:href="assets/bootstrap-icons.svg#gear"/>
</svg>&nbsp;<ng-container i18n>Settings</ng-container>
</svg><span>&nbsp;<ng-container i18n>Settings</ng-container></span>
</a>
</li>
<li class="nav-item">
<a class="nav-link" href="admin/">
<li class="nav-item" tourAnchor="tour.admin">
<a class="nav-link" href="admin/" ngbPopover="Admin" i18n-ngbPopover [disablePopover]="!slimSidebarEnabled" placement="end" container="body" triggers="mouseenter:mouseleave" popoverClass="popover-slim">
<svg class="sidebaricon" fill="currentColor">
<use xlink:href="assets/bootstrap-icons.svg#toggles"/>
</svg>&nbsp;<ng-container i18n>Admin</ng-container>
</svg><span>&nbsp;<ng-container i18n>Admin</ng-container></span>
</a>
</li>
</ul>
<h6 class="sidebar-heading px-3 mt-auto pt-4 mb-1 text-muted">
<ng-container i18n>Info</ng-container>
<span i18n>Info</span>
</h6>
<ul class="nav flex-column mb-2">
<li class="nav-item">
<a class="nav-link" target="_blank" rel="noopener noreferrer" href="https://paperless-ngx.readthedocs.io/en/latest/">
<li class="nav-item" tourAnchor="tour.outro">
<a class="nav-link" target="_blank" rel="noopener noreferrer" href="https://paperless-ngx.readthedocs.io/en/latest/" ngbPopover="Documentation" i18n-ngbPopover [disablePopover]="!slimSidebarEnabled" placement="end" container="body" triggers="mouseenter:mouseleave" popoverClass="popover-slim">
<svg class="sidebaricon" fill="currentColor">
<use xlink:href="assets/bootstrap-icons.svg#question-circle"/>
</svg>&nbsp;<ng-container i18n>Documentation</ng-container>
</svg><span>&nbsp;<ng-container i18n>Documentation</ng-container></span>
</a>
</li>
<li class="nav-item">
<div class="d-flex w-100 flex-wrap">
<a class="nav-link pe-2 pb-1" target="_blank" rel="noopener noreferrer" href="https://github.com/paperless-ngx/paperless-ngx">
<a class="nav-link pe-2 pb-1" target="_blank" rel="noopener noreferrer" href="https://github.com/paperless-ngx/paperless-ngx" ngbPopover="GitHub" i18n-ngbPopover [disablePopover]="!slimSidebarEnabled" placement="end" container="body" triggers="mouseenter:mouseleave" popoverClass="popover-slim">
<svg xmlns="http://www.w3.org/2000/svg" fill="currentColor" class="sidebaricon" viewBox="0 0 16 16">
<use xlink:href="assets/bootstrap-icons.svg#github" />
</svg>&nbsp;<ng-container i18n>GitHub</ng-container>
</svg><span>&nbsp;<ng-container i18n>GitHub</ng-container></span>
</a>
<a class="nav-link-additional small text-muted ms-3" target="_blank" rel="noopener noreferrer" href="https://github.com/paperless-ngx/paperless-ngx/discussions/categories/feature-requests" title="Suggest an idea">
<a class="nav-link-additional small text-muted ms-3" [class.visually-hidden]="slimSidebarEnabled" target="_blank" rel="noopener noreferrer" href="https://github.com/paperless-ngx/paperless-ngx/discussions/categories/feature-requests" title="Suggest an idea" i18n-title>
<svg xmlns="http://www.w3.org/2000/svg" width="1.1em" height="1.1em" fill="currentColor" class="me-1" viewBox="0 0 16 16">
<use xlink:href="assets/bootstrap-icons.svg#lightbulb" />
</svg>
@@ -182,17 +209,28 @@
</a>
</div>
</li>
<li class="nav-item mt-2">
<li class="nav-item mt-2" [class.visually-hidden]="slimSidebarEnabled">
<div class="px-3 py-2 text-muted small d-flex align-items-center flex-wrap">
<div class="me-3">{{ versionString }}</div>
<div *ngIf="appRemoteVersion" class="version-check">
<div *ngIf="!settingsService.updateCheckingIsSet || appRemoteVersion" class="version-check">
<ng-template #updateAvailablePopContent>
<span class="small">Paperless-ngx v{{ appRemoteVersion.version }} <ng-container i18n>is available.</ng-container><br/><ng-container i18n>Click to view.</ng-container></span>
<span class="small">Paperless-ngx {{ appRemoteVersion.version }} <ng-container i18n>is available.</ng-container><br/><ng-container i18n>Click to view.</ng-container></span>
</ng-template>
<ng-template #updateCheckingNotEnabledPopContent>
<span class="small"><ng-container i18n>Checking for updates is disabled.</ng-container><br/><ng-container i18n>Click for more information.</ng-container></span>
<p class="small mb-2">
<ng-container i18n>Paperless-ngx can automatically check for updates</ng-container>
</p>
<div class="btn-group btn-group-xs flex-fill w-100">
<button class="btn btn-outline-primary" (click)="setUpdateChecking(true)">Enable</button>
<button class="btn btn-outline-secondary" (click)="setUpdateChecking(false)">Disable</button>
</div>
<p class="small mb-0 mt-2">
<a class="small text-decoration-none fst-italic" routerLink="/settings" fragment="update-checking" i18n>
How does this work?
</a>
</p>
</ng-template>
<ng-container *ngIf="appRemoteVersion.feature_is_set; else updateCheckNotSet">
<ng-container *ngIf="settingsService.updateCheckingIsSet; else updateCheckNotSet">
<a *ngIf="appRemoteVersion.update_available" class="small text-decoration-none" target="_blank" rel="noopener noreferrer" href="https://github.com/paperless-ngx/paperless-ngx/releases"
[ngbPopover]="updateAvailablePopContent" popoverClass="shadow" triggers="mouseenter:mouseleave" container="body">
<svg fill="currentColor" class="me-1" width="1.2em" height="1.2em" style="vertical-align: text-top;" viewBox="0 0 16 16">
@@ -202,8 +240,8 @@
</a>
</ng-container>
<ng-template #updateCheckNotSet>
<a class="small text-decoration-none" target="_blank" rel="noopener noreferrer" href="https://paperless-ngx.readthedocs.io/en/latest/configuration.html#update-checking"
[ngbPopover]="updateCheckingNotEnabledPopContent" popoverClass="shadow" triggers="mouseenter:mouseleave" container="body">
<a class="small text-decoration-none" routerLink="/settings" fragment="update-checking"
[ngbPopover]="updateCheckingNotEnabledPopContent" popoverClass="shadow" triggers="mouseenter" container="body">
<svg fill="currentColor" class="me-1" width="1.2em" height="1.2em" style="vertical-align: text-top;" viewBox="0 0 16 16">
<use xlink:href="assets/bootstrap-icons.svg#info-circle" />
</svg>
@@ -216,7 +254,7 @@
</div>
</nav>
<main role="main" class="col-md-9 ms-sm-auto col-lg-10 px-md-4">
<main role="main" class="ms-sm-auto px-md-4" [ngClass]="slimSidebarEnabled ? 'col-slim' : 'col-md-9 col-lg-10'">
<router-outlet></router-outlet>
</main>
</div>

View File

@@ -1,3 +1,6 @@
@import "node_modules/bootstrap/scss/functions";
@import "node_modules/bootstrap/scss/variables";
/*
* Sidebar
*/
@@ -9,6 +12,22 @@
z-index: 995; /* Behind the navbar */
padding: 50px 0 0; /* Height of navbar */
box-shadow: inset -1px 0 0 rgba(0, 0, 0, .1);
.sidebar-heading .spinner-border {
width: 0.8em;
height: 0.8em;
}
// These come from the col-md-3 col-lg-2 classes for regular sidebar, needed for animation
@media (min-width: 768px) {
max-width: 25%;
}
@media (min-width: 992px) {
max-width: 16.66666667%;
}
transition: all .2s ease;
}
@media (max-width: 767.98px) {
.sidebar {
@@ -16,6 +35,90 @@
}
}
main {
transition: all .2s ease;
}
.sidebar-slim-toggler {
display: none; // hide on mobile
}
.sidebar li.nav-item span,
.sidebar .sidebar-heading span {
transition: all .1s ease;
}
@media(min-width: 768px) {
.sidebar.slim {
max-width: 50px;
li.nav-item span.badge {
display: inline-block;
margin-right: 2px;
}
}
.sidebar.slim:not(.animating) {
li.nav-item span,
.sidebar-heading span {
display: none;
}
}
.sidebar.animating {
li.nav-item span,
.sidebar-heading span {
display: unset;
position: absolute;
opacity: 0;
overflow: hidden;
}
}
.sidebar:not(.slim):not(.animating) {
li.nav-item span,
.sidebar-heading span {
position: unset;
opacity: 1;
overflow: auto;
}
}
.sidebar.slim,
.sidebar.animating {
.text-truncate {
text-overflow: unset !important;
word-wrap: break-word !important;
}
}
.sidebar.slim {
li.nav-item span.badge {
display: inline-block;
margin-right: 2px;
}
}
.col-slim {
padding-left: calc(50px + $grid-gutter-width) !important;
}
.sidebar-slim-toggler {
display: block;
position: absolute;
right: -12px;
top: 60px;
z-index: 996;
--bs-btn-padding-x: 0.35rem;
--bs-btn-padding-y: 0.125rem;
}
}
::ng-deep .popover-slim .popover-body {
--bs-popover-body-padding-x: .5rem;
--bs-popover-body-padding-y: .5rem;
}
.sidebar-sticky {
position: relative;
top: 0;
@@ -72,7 +175,7 @@
.close {
display: none;
position: absolute;
position: absolute !important;
cursor: pointer;
opacity: 1;
top: 0;
@@ -140,17 +243,18 @@
form {
position: relative;
> svg {
position: absolute;
left: 0.6rem;
top: 0.5rem;
color: rgba(255, 255, 255, 0.6);
}
}
svg {
position: absolute;
left: 0.6rem;
top: 0.5rem;
color: rgba(255, 255, 255, 0.6);
}
&:focus-within {
svg {
form > svg {
display: none;
}

View File

@@ -1,7 +1,7 @@
import { Component } from '@angular/core'
import { Component, HostListener, OnInit } from '@angular/core'
import { FormControl } from '@angular/forms'
import { ActivatedRoute, Router, Params } from '@angular/router'
import { from, Observable, Subscription, BehaviorSubject } from 'rxjs'
import { ActivatedRoute, Router } from '@angular/router'
import { from, Observable } from 'rxjs'
import {
debounceTime,
distinctUntilChanged,
@@ -15,37 +15,42 @@ import { SavedViewService } from 'src/app/services/rest/saved-view.service'
import { SearchService } from 'src/app/services/rest/search.service'
import { environment } from 'src/environments/environment'
import { DocumentDetailComponent } from '../document-detail/document-detail.component'
import { Meta } from '@angular/platform-browser'
import { DocumentListViewService } from 'src/app/services/document-list-view.service'
import { FILTER_FULLTEXT_QUERY } from 'src/app/data/filter-rule-type'
import {
RemoteVersionService,
AppRemoteVersion,
} from 'src/app/services/rest/remote-version.service'
import { QueryParamsService } from 'src/app/services/query-params.service'
import { SettingsService } from 'src/app/services/settings.service'
import { TasksService } from 'src/app/services/tasks.service'
import { ComponentCanDeactivate } from 'src/app/guards/dirty-doc.guard'
import { SETTINGS_KEYS } from 'src/app/data/paperless-uisettings'
import { ToastService } from 'src/app/services/toast.service'
@Component({
selector: 'app-app-frame',
templateUrl: './app-frame.component.html',
styleUrls: ['./app-frame.component.scss'],
})
export class AppFrameComponent {
export class AppFrameComponent implements OnInit, ComponentCanDeactivate {
constructor(
public router: Router,
private activatedRoute: ActivatedRoute,
private openDocumentsService: OpenDocumentsService,
private searchService: SearchService,
public savedViewService: SavedViewService,
private list: DocumentListViewService,
private meta: Meta,
private remoteVersionService: RemoteVersionService,
private queryParamsService: QueryParamsService
) {
this.remoteVersionService
.checkForUpdates()
.subscribe((appRemoteVersion: AppRemoteVersion) => {
this.appRemoteVersion = appRemoteVersion
})
private list: DocumentListViewService,
public settingsService: SettingsService,
public tasksService: TasksService,
private readonly toastService: ToastService
) {}
ngOnInit(): void {
if (this.settingsService.get(SETTINGS_KEYS.UPDATE_CHECKING_ENABLED)) {
this.checkForUpdates()
}
this.tasksService.reload()
}
versionString = `${environment.appTitle} ${environment.version}`
@@ -53,16 +58,64 @@ export class AppFrameComponent {
isMenuCollapsed: boolean = true
slimSidebarAnimating: boolean = false
toggleSlimSidebar(): void {
this.slimSidebarAnimating = true
this.slimSidebarEnabled = !this.slimSidebarEnabled
setTimeout(() => {
this.slimSidebarAnimating = false
}, 200) // slightly longer than css animation for slim sidebar
}
get slimSidebarEnabled(): boolean {
return this.settingsService.get(SETTINGS_KEYS.SLIM_SIDEBAR)
}
set slimSidebarEnabled(enabled: boolean) {
this.settingsService.set(SETTINGS_KEYS.SLIM_SIDEBAR, enabled)
this.settingsService
.storeSettings()
.pipe(first())
.subscribe({
error: (error) => {
this.toastService.showError(
$localize`An error occurred while saving settings.`
)
console.log(error)
},
})
}
closeMenu() {
this.isMenuCollapsed = true
}
searchField = new FormControl('')
get searchFieldEmpty(): boolean {
return this.searchField.value.trim().length == 0
}
resetSearchField() {
this.searchField.reset('')
}
searchFieldKeyup(event: KeyboardEvent) {
if (event.key == 'Escape') {
this.resetSearchField()
}
}
get openDocuments(): PaperlessDocument[] {
return this.openDocumentsService.getOpenDocuments()
}
@HostListener('window:beforeunload')
canDeactivate(): Observable<boolean> | boolean {
return !this.openDocumentsService.hasDirty()
}
searchAutoComplete = (text$: Observable<string>) =>
text$.pipe(
debounceTime(200),
@@ -94,7 +147,7 @@ export class AppFrameComponent {
search() {
this.closeMenu()
this.queryParamsService.navigateWithFilterRules([
this.list.quickFilter([
{
rule_type: FILTER_FULLTEXT_QUERY,
value: (this.searchField.value as string).trim(),
@@ -144,16 +197,29 @@ export class AppFrameComponent {
})
}
get displayName() {
// TODO: taken from dashboard component, is this the best way to pass around username?
let tagFullName = this.meta.getTag('name=full_name')
let tagUsername = this.meta.getTag('name=username')
if (tagFullName && tagFullName.content) {
return tagFullName.content
} else if (tagUsername && tagUsername.content) {
return tagUsername.content
} else {
return null
private checkForUpdates() {
this.remoteVersionService
.checkForUpdates()
.subscribe((appRemoteVersion: AppRemoteVersion) => {
this.appRemoteVersion = appRemoteVersion
})
}
setUpdateChecking(enable: boolean) {
this.settingsService.set(SETTINGS_KEYS.UPDATE_CHECKING_ENABLED, enable)
this.settingsService
.storeSettings()
.pipe(first())
.subscribe({
error: (error) => {
this.toastService.showError(
$localize`An error occurred while saving update checking settings.`
)
console.log(error)
},
})
if (enable) {
this.checkForUpdates()
}
}
}

View File

@@ -0,0 +1,9 @@
<button *ngIf="active" class="position-absolute top-0 start-100 translate-middle badge bg-secondary border border-light rounded-pill p-1" title="Clear" i18n-title (click)="onClick($event)">
<svg *ngIf="!isNumbered && selected" width="1em" height="1em" class="check m-0 p-0 opacity-75" viewBox="0 0 16 16" fill="currentColor" xmlns="http://www.w3.org/2000/svg">
<use xlink:href="assets/bootstrap-icons.svg#check-lg"/>
</svg>
<div *ngIf="isNumbered" class="number">{{number}}<span class="visually-hidden">selected</span></div>
<svg width=".9em" height="1em" class="x m-0 p-0 opacity-75" viewBox="0 0 16 16" fill="currentColor" xmlns="http://www.w3.org/2000/svg">
<use xlink:href="assets/bootstrap-icons.svg#x-lg"/>
</svg>
</button>

View File

@@ -0,0 +1,28 @@
.badge {
min-width: 20px;
min-height: 20px;
}
.x {
display: none;
}
.number {
min-width: 1em;
min-height: 1em;
display: inline-block;
}
button:hover {
.check,
.number {
opacity: 0 !important;
}
.x {
display: inline-block;
position: absolute;
top: 5px;
left: calc(50% - 4px);
}
}

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