diff --git a/.codespellrc b/.codespellrc deleted file mode 100644 index 9b2cf624d..000000000 --- a/.codespellrc +++ /dev/null @@ -1,3 +0,0 @@ -[codespell] -write-changes = True -ignore-words-list = criterias,afterall,valeu,ureue,equest,ure,assertIn diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml index 2c50e81a6..ab94a22b8 100644 --- a/.pre-commit-config.yaml +++ b/.pre-commit-config.yaml @@ -31,7 +31,6 @@ repos: rev: v2.4.1 hooks: - id: codespell - exclude: "(^src-ui/src/locale/)|(^src-ui/pnpm-lock.yaml)|(^src-ui/e2e/)|(^src/paperless_mail/tests/samples/)|(^src/documents/tests/samples/)" exclude_types: - pofile - json diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index e0c52d00b..2f7952ad0 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -37,6 +37,8 @@ Before you can run `pytest`, ensure to [properly set up your local environment]( Once you have submitted a **P**ull **R**equest it will be reviewed, approved, and merged by one or more community members of any team. Automated code tests and formatting checks must be passed. +Important: Pull requests that implement a new feature or enhancement _should almost always target an existing feature request_ with evidence of community interest and discussion. This is in order to balance the work of implementing and maintaining new features / enhancements. Instead of opening a PR which does not meet this requirement, please open a feature request instead, to gather feedback from both users and the project maintainers. + ## Non-Trivial Requests PRs deemed `non-trivial` will go through a stricter review process before being merged into `dev`. This is to ensure code quality and complete functionality (free of side effects). @@ -109,28 +111,12 @@ Paperless-ngx is a community project. We do our best to delegate permission and ## Structure -As of writing, there are 21 members in paperless-ngx. 4 of these people have complete administrative privileges to the repo: +There are currently 2 members in paperless-ngx with complete administrative privileges to the repo: - [@shamoon](https://github.com/shamoon) -- [@bauerj](https://github.com/bauerj) -- [@qcasey](https://github.com/qcasey) -- [@FrankStrieter](https://github.com/FrankStrieter) +- [@stumpylog](https://github.com/stumpylog) -There are 5 teams collaborating on specific tasks within paperless-ngx: - -- @paperless-ngx/backend (Python / django) -- @paperless-ngx/frontend (JavaScript / Typescript) -- @paperless-ngx/ci-cd (GitHub Actions / Deployment) -- @paperless-ngx/issues (Issue triage) -- @paperless-ngx/test (General testing for larger PRs) - -## Permissions - -All team members are notified when mentioned or assigned to a relevant issue or pull request. Additionally, each team has slightly different access to paperless-ngx: - -- The **test** team has no special permissions. -- The **issues** team has `triage` access. This means they can organize issues and pull requests. -- The **backend**, **frontend**, and **ci-cd** teams have `write` access. This means they can approve PRs and push code, containers, releases, and more. +There are other members who occasionally contribute but we are actively seeking more dedicated maintainers of the project. Please reach out if you are interested. ## Joining diff --git a/Dockerfile b/Dockerfile index 2ea48c0b6..69196843b 100644 --- a/Dockerfile +++ b/Dockerfile @@ -32,7 +32,7 @@ RUN set -eux \ # Purpose: Installs s6-overlay and rootfs # Comments: # - Don't leave anything extra in here either -FROM ghcr.io/astral-sh/uv:0.8.4-python3.12-bookworm-slim AS s6-overlay-base +FROM ghcr.io/astral-sh/uv:0.8.8-python3.12-bookworm-slim AS s6-overlay-base WORKDIR /usr/src/s6 diff --git a/docs/administration.md b/docs/administration.md index b646c1f73..fe5dd5a9b 100644 --- a/docs/administration.md +++ b/docs/administration.md @@ -179,10 +179,14 @@ following: ### Database Upgrades -In general, paperless does not require a specific version of PostgreSQL or MariaDB and it is +Paperless-ngx is compatible with Django-supported versions of PostgreSQL and MariaDB and it is generally safe to update them to newer versions. However, you should always take a backup and follow the instructions from your database's documentation for how to upgrade between major versions. +!!! note + + As of Paperless-ngx v2.18, the minimum supported version of PostgreSQL is 13. + For PostgreSQL, refer to [Upgrading a PostgreSQL Cluster](https://www.postgresql.org/docs/current/upgrading.html). For MariaDB, refer to [Upgrading MariaDB](https://mariadb.com/kb/en/upgrading/) diff --git a/docs/advanced_usage.md b/docs/advanced_usage.md index aa52d2f59..763488189 100644 --- a/docs/advanced_usage.md +++ b/docs/advanced_usage.md @@ -434,6 +434,136 @@ provided. The template is provided as a string, potentially multiline, and rende In addition, the entire Document instance is available to be utilized in a more advanced way, as well as some variables which only make sense to be accessed with more complex logic. +#### Custom Jinja2 Filters + +##### Custom Field Access + +The `get_cf_value` filter retrieves a value from custom field data with optional default fallback. + +###### Syntax + +```jinja2 +{{ custom_fields | get_cf_value('field_name') }} +{{ custom_fields | get_cf_value('field_name', 'default_value') }} +``` + +###### Parameters + +- `custom_fields`: This _must_ be the provided custom field data +- `name` (str): Name of the custom field to retrieve +- `default` (str, optional): Default value to return if field is not found or has no value + +###### Returns + +- `str | None`: The field value, default value, or `None` if neither exists + +###### Examples + +```jinja2 + +{{ custom_fields | get_cf_value('department') }} + + +{{ custom_fields | get_cf_value('phone', 'Not provided') }} +``` + +##### Datetime Formatting + +The `format_datetime`filter formats a datetime string or datetime object using Python's strftime formatting. + +###### Syntax + +```jinja2 +{{ datetime_value | format_datetime('%Y-%m-%d %H:%M:%S') }} +``` + +###### Parameters + +- `value` (str | datetime): Date/time value to format (strings will be parsed automatically) +- `format` (str): Python strftime format string + +###### Returns + +- `str`: Formatted datetime string + +###### Examples + +```jinja2 + +{{ created_at | format_datetime('%B %d, %Y at %I:%M %p') }} + + + +{{ "2024-01-15T14:30:00" | format_datetime('%m/%d/%Y') }} + + + +{{ timestamp | format_datetime('%A, %B %d, %Y') }} + +``` + +See the [strftime format code documentation](https://docs.python.org/3.13/library/datetime.html#strftime-and-strptime-format-codes) +for the possible codes and their meanings. + +##### Date Localization + +The `localize_date` filter formats a date or datetime object into a localized string using Babel internationalization. +This takes into account the provided locale for translation. + +###### Syntax + +```jinja2 +{{ date_value | localize_date('medium', 'en_US') }} +{{ datetime_value | localize_date('short', 'fr_FR') }} +``` + +###### Parameters + +- `value` (date | datetime): Date or datetime object to format (datetime should be timezone-aware) +- `format` (str): Format type - either a Babel preset ('short', 'medium', 'long', 'full') or custom pattern +- `locale` (str): Locale code for localization (e.g., 'en_US', 'fr_FR', 'de_DE') + +###### Returns + +- `str`: Localized, formatted date string + +###### Examples + +```jinja2 + +{{ created_date | localize_date('short', 'en_US') }} + + +{{ created_date | localize_date('medium', 'en_US') }} + + +{{ created_date | localize_date('long', 'en_US') }} + + +{{ created_date | localize_date('full', 'en_US') }} + + + +{{ created_date | localize_date('medium', 'fr_FR') }} + + +{{ created_date | localize_date('medium', 'de_DE') }} + + + +{{ created_date | localize_date('dd/MM/yyyy', 'en_GB') }} + +``` + +See the [supported format codes](https://unicode.org/reports/tr35/tr35-dates.html#Date_Format_Patterns) for more options. + +### Format Presets + +- **short**: Abbreviated format (e.g., "1/15/24") +- **medium**: Medium-length format (e.g., "Jan 15, 2024") +- **long**: Long format with full month name (e.g., "January 15, 2024") +- **full**: Full format including day of week (e.g., "Monday, January 15, 2024") + #### Additional Variables - `{{ tag_name_list }}`: A list of tag names applied to the document, ordered by the tag name. Note this is a list, not a single string diff --git a/docs/changelog.md b/docs/changelog.md index b9b3f0e46..cc88e6909 100644 --- a/docs/changelog.md +++ b/docs/changelog.md @@ -1,5 +1,139 @@ # Changelog +## paperless-ngx 2.18.0 + +### Notable Changes + +- Feature: PDF editor [@shamoon](https://github.com/shamoon) ([#10318](https://github.com/paperless-ngx/paperless-ngx/pull/10318)) + +### Features / Enhancements + +- Feature: Add filter to localize dates for filepath templating [@stumpylog](https://github.com/stumpylog) ([#10559](https://github.com/paperless-ngx/paperless-ngx/pull/10559)) +- Feature: PDF editor [@shamoon](https://github.com/shamoon) ([#10318](https://github.com/paperless-ngx/paperless-ngx/pull/10318)) +- Enhancement: support webhook restrictions [@shamoon](https://github.com/shamoon) ([#10555](https://github.com/paperless-ngx/paperless-ngx/pull/10555)) +- Performance: Classifier performance optimizations [@Merinorus](https://github.com/Merinorus) ([#10363](https://github.com/paperless-ngx/paperless-ngx/pull/10363)) +- Performance: add setting to enable DB connection pooling for PostgreSQL [@Merinorus](https://github.com/Merinorus) ([#10354](https://github.com/paperless-ngx/paperless-ngx/pull/10354)) +- Fixhancement: improve text thumbnail generation for large files [@shamoon](https://github.com/shamoon) ([#10483](https://github.com/paperless-ngx/paperless-ngx/pull/10483)) +- Enhancement: disable auto spellcheck on filtering dropdowns [@TheDodger](https://github.com/TheDodger) ([#10487](https://github.com/paperless-ngx/paperless-ngx/pull/10487)) +- Enhancement: display saved view counts [@shamoon](https://github.com/shamoon) ([#10246](https://github.com/paperless-ngx/paperless-ngx/pull/10246)) +- Fixhancement: add missing exact operator for boolean CF queries [@shamoon](https://github.com/shamoon) ([#10402](https://github.com/paperless-ngx/paperless-ngx/pull/10402)) +- Feature: add Vietnamese translation [@shamoon](https://github.com/shamoon) ([#10352](https://github.com/paperless-ngx/paperless-ngx/pull/10352)) +- Performance: Add support for configuring date parser languages [@Merinorus](https://github.com/Merinorus) ([#10181](https://github.com/paperless-ngx/paperless-ngx/pull/10181)) +- Enhancement: Add a database caching for improved performance [@Merinorus](https://github.com/Merinorus) ([#9784](https://github.com/paperless-ngx/paperless-ngx/pull/9784)) + +### Bug Fixes + +- Fix: include ignore for config logos in sanity checker [@shamoon](https://github.com/shamoon) ([#10473](https://github.com/paperless-ngx/paperless-ngx/pull/10473)) +- Fix: track and restore changed document fields from session storage [@shamoon](https://github.com/shamoon) ([#10468](https://github.com/paperless-ngx/paperless-ngx/pull/10468)) +- Fix: Make some natural keyword date searches timezone-aware [@shamoon](https://github.com/shamoon) ([#10416](https://github.com/paperless-ngx/paperless-ngx/pull/10416)) +- Fixhancement: follow redirects in curl health check [@V0idC0de](https://github.com/V0idC0de) ([#10415](https://github.com/paperless-ngx/paperless-ngx/pull/10415)) +- Fix: dont use translated verbose_name for getting object perms [@shamoon](https://github.com/shamoon) ([#10399](https://github.com/paperless-ngx/paperless-ngx/pull/10399)) +- Fix: fix date format for 'today' in DateComponent [@shamoon](https://github.com/shamoon) ([#10369](https://github.com/paperless-ngx/paperless-ngx/pull/10369)) +- Fix: default to empty permissions for group creation [@shamoon](https://github.com/shamoon) ([#10337](https://github.com/paperless-ngx/paperless-ngx/pull/10337)) +- Fix: correct api created coercion with timezone [@shamoon](https://github.com/shamoon) ([#10287](https://github.com/paperless-ngx/paperless-ngx/pull/10287)) +- Fix: reset search query for preview on reset filter [@shamoon](https://github.com/shamoon) ([#10279](https://github.com/paperless-ngx/paperless-ngx/pull/10279)) +- Chore: reject absurd max age values [@shamoon](https://github.com/shamoon) ([#10243](https://github.com/paperless-ngx/paperless-ngx/pull/10243)) +- Chore: add tasks task_id param to openapi spec [@shamoon](https://github.com/shamoon) ([#10469](https://github.com/paperless-ngx/paperless-ngx/pull/10469)) +- Chore: include advanced search query param in API spec [@shamoon](https://github.com/shamoon) ([#10449](https://github.com/paperless-ngx/paperless-ngx/pull/10449)) + +### Security + +- Address XSS vulnerability GHSA-6p53-hqqw-8j62 + +### Maintenance + +- docker(deps): Bump astral-sh/uv from 0.8.4-python3.12-bookworm-slim to 0.8.8-python3.12-bookworm-slim @[dependabot[bot]](https://github.com/apps/dependabot) ([#10564](https://github.com/paperless-ngx/paperless-ngx/pull/10564)) +- docker(deps): Bump astral-sh/uv from 0.7.9-python3.12-bookworm-slim to 0.7.19-python3.12-bookworm-slim @[dependabot[bot]](https://github.com/apps/dependabot) ([#10343](https://github.com/paperless-ngx/paperless-ngx/pull/10343)) +- Chore(deps): Bump the small-changes group across 1 directory with 7 updates @[dependabot[bot]](https://github.com/apps/dependabot) ([#10347](https://github.com/paperless-ngx/paperless-ngx/pull/10347)) +- Chore(deps-dev): Bump @types/node from 22.15.29 to 24.0.10 in /src-ui @[dependabot[bot]](https://github.com/apps/dependabot) ([#10306](https://github.com/paperless-ngx/paperless-ngx/pull/10306)) +- Chore(deps): Bump the small-changes group across 1 directory with 8 updates @[dependabot[bot]](https://github.com/apps/dependabot) ([#10481](https://github.com/paperless-ngx/paperless-ngx/pull/10481)) +- docker(deps): bump astral-sh/uv from 0.7.19-python3.12-bookworm-slim to 0.8.3-python3.12-bookworm-slim @[dependabot[bot]](https://github.com/apps/dependabot) ([#10465](https://github.com/paperless-ngx/paperless-ngx/pull/10465)) +- Chore: switch from os.path to pathlib.Path [@gothicVI](https://github.com/gothicVI) ([#10397](https://github.com/paperless-ngx/paperless-ngx/pull/10397)) +- Chore(deps): Bump the small-changes group with 3 updates @[dependabot[bot]](https://github.com/apps/dependabot) ([#10528](https://github.com/paperless-ngx/paperless-ngx/pull/10528)) +- Chore(deps): Bump the django group across 1 directory with 9 updates @[dependabot[bot]](https://github.com/apps/dependabot) ([#10538](https://github.com/paperless-ngx/paperless-ngx/pull/10538)) +- Chore(deps): Bump stefanzweifel/git-auto-commit-action from 5 to 6 in the actions group @[dependabot[bot]](https://github.com/apps/dependabot) ([#10302](https://github.com/paperless-ngx/paperless-ngx/pull/10302)) + +### Dependencies + +
+23 changes + +- chore: Small targeted upgrades to dependencies [@stumpylog](https://github.com/stumpylog) ([#10561](https://github.com/paperless-ngx/paperless-ngx/pull/10561)) +- docker(deps): Bump astral-sh/uv from 0.8.4-python3.12-bookworm-slim to 0.8.8-python3.12-bookworm-slim @[dependabot[bot]](https://github.com/apps/dependabot) ([#10564](https://github.com/paperless-ngx/paperless-ngx/pull/10564)) +- Chore(deps): Bump the django group across 1 directory with 9 updates @[dependabot[bot]](https://github.com/apps/dependabot) ([#10538](https://github.com/paperless-ngx/paperless-ngx/pull/10538)) +- Chore(deps): Bump the small-changes group with 3 updates @[dependabot[bot]](https://github.com/apps/dependabot) ([#10528](https://github.com/paperless-ngx/paperless-ngx/pull/10528)) +- Chore(deps-dev): Bump the frontend-jest-dependencies group in /src-ui with 4 updates @[dependabot[bot]](https://github.com/apps/dependabot) ([#10497](https://github.com/paperless-ngx/paperless-ngx/pull/10497)) +- Chore(deps-dev): Bump the frontend-eslint-dependencies group in /src-ui with 4 updates @[dependabot[bot]](https://github.com/apps/dependabot) ([#10498](https://github.com/paperless-ngx/paperless-ngx/pull/10498)) +- Chore(deps-dev): Bump @playwright/test from 1.53.2 to 1.54.2 in /src-ui @[dependabot[bot]](https://github.com/apps/dependabot) ([#10499](https://github.com/paperless-ngx/paperless-ngx/pull/10499)) +- Chore(deps-dev): Bump webpack from 5.99.9 to 5.101.0 in /src-ui @[dependabot[bot]](https://github.com/apps/dependabot) ([#10501](https://github.com/paperless-ngx/paperless-ngx/pull/10501)) +- Chore(deps-dev): Bump prettier-plugin-organize-imports from 4.1.0 to 4.2.0 in /src-ui @[dependabot[bot]](https://github.com/apps/dependabot) ([#10500](https://github.com/paperless-ngx/paperless-ngx/pull/10500)) +- Chore(deps-dev): Bump @types/node from 24.0.10 to 24.1.0 in /src-ui @[dependabot[bot]](https://github.com/apps/dependabot) ([#10502](https://github.com/paperless-ngx/paperless-ngx/pull/10502)) +- Chore(deps): Bump the frontend-angular-dependencies group in /src-ui with 16 updates @[dependabot[bot]](https://github.com/apps/dependabot) ([#10496](https://github.com/paperless-ngx/paperless-ngx/pull/10496)) +- Chore(deps): Bump the small-changes group across 1 directory with 8 updates @[dependabot[bot]](https://github.com/apps/dependabot) ([#10481](https://github.com/paperless-ngx/paperless-ngx/pull/10481)) +- docker(deps): bump astral-sh/uv from 0.7.19-python3.12-bookworm-slim to 0.8.3-python3.12-bookworm-slim @[dependabot[bot]](https://github.com/apps/dependabot) ([#10465](https://github.com/paperless-ngx/paperless-ngx/pull/10465)) +- docker(deps): Bump astral-sh/uv from 0.7.9-python3.12-bookworm-slim to 0.7.19-python3.12-bookworm-slim @[dependabot[bot]](https://github.com/apps/dependabot) ([#10343](https://github.com/paperless-ngx/paperless-ngx/pull/10343)) +- Chore(deps): Bump the small-changes group across 1 directory with 7 updates @[dependabot[bot]](https://github.com/apps/dependabot) ([#10347](https://github.com/paperless-ngx/paperless-ngx/pull/10347)) +- Chore(deps): Bump stefanzweifel/git-auto-commit-action from 5 to 6 in the actions group @[dependabot[bot]](https://github.com/apps/dependabot) ([#10302](https://github.com/paperless-ngx/paperless-ngx/pull/10302)) +- Chore(deps-dev): Bump the frontend-eslint-dependencies group across 1 directory with 4 updates @[dependabot[bot]](https://github.com/apps/dependabot) ([#10311](https://github.com/paperless-ngx/paperless-ngx/pull/10311)) +- Chore(deps-dev): Bump @types/node from 22.15.29 to 24.0.10 in /src-ui @[dependabot[bot]](https://github.com/apps/dependabot) ([#10306](https://github.com/paperless-ngx/paperless-ngx/pull/10306)) +- Chore(deps): Bump bootstrap from 5.3.6 to 5.3.7 in /src-ui @[dependabot[bot]](https://github.com/apps/dependabot) ([#10308](https://github.com/paperless-ngx/paperless-ngx/pull/10308)) +- Chore(deps-dev): Bump webpack from 5.98.0 to 5.99.9 in /src-ui @[dependabot[bot]](https://github.com/apps/dependabot) ([#10309](https://github.com/paperless-ngx/paperless-ngx/pull/10309)) +- Chore(deps-dev): Bump @playwright/test from 1.51.1 to 1.53.2 in /src-ui @[dependabot[bot]](https://github.com/apps/dependabot) ([#10307](https://github.com/paperless-ngx/paperless-ngx/pull/10307)) +- Chore(deps): Bump the frontend-angular-dependencies group in /src-ui with 13 updates @[dependabot[bot]](https://github.com/apps/dependabot) ([#10303](https://github.com/paperless-ngx/paperless-ngx/pull/10303)) +- Chore: update to Angular 20 [@shamoon](https://github.com/shamoon) ([#10273](https://github.com/paperless-ngx/paperless-ngx/pull/10273)) +
+ +### All App Changes + +
+44 changes + +- chore: Small targeted upgrades to dependencies [@stumpylog](https://github.com/stumpylog) ([#10561](https://github.com/paperless-ngx/paperless-ngx/pull/10561)) +- Feature: Add filter to localize dates for filepath templating [@stumpylog](https://github.com/stumpylog) ([#10559](https://github.com/paperless-ngx/paperless-ngx/pull/10559)) +- Chore: Removes duplication and spread out config for codespell [@stumpylog](https://github.com/stumpylog) ([#10560](https://github.com/paperless-ngx/paperless-ngx/pull/10560)) +- Chore(deps): Bump the django group across 1 directory with 9 updates @[dependabot[bot]](https://github.com/apps/dependabot) ([#10538](https://github.com/paperless-ngx/paperless-ngx/pull/10538)) +- Feature: PDF editor [@shamoon](https://github.com/shamoon) ([#10318](https://github.com/paperless-ngx/paperless-ngx/pull/10318)) +- Enhancement: support webhook restrictions [@shamoon](https://github.com/shamoon) ([#10555](https://github.com/paperless-ngx/paperless-ngx/pull/10555)) +- Performance: Classifier performance optimizations [@Merinorus](https://github.com/Merinorus) ([#10363](https://github.com/paperless-ngx/paperless-ngx/pull/10363)) +- Chore: switch from os.path to pathlib.Path [@gothicVI](https://github.com/gothicVI) ([#10397](https://github.com/paperless-ngx/paperless-ngx/pull/10397)) +- Chore(deps): Bump the small-changes group with 3 updates @[dependabot[bot]](https://github.com/apps/dependabot) ([#10528](https://github.com/paperless-ngx/paperless-ngx/pull/10528)) +- Performance: add setting to enable DB connection pooling for PostgreSQL [@Merinorus](https://github.com/Merinorus) ([#10354](https://github.com/paperless-ngx/paperless-ngx/pull/10354)) +- Chore(deps-dev): Bump the frontend-jest-dependencies group in /src-ui with 4 updates @[dependabot[bot]](https://github.com/apps/dependabot) ([#10497](https://github.com/paperless-ngx/paperless-ngx/pull/10497)) +- Chore(deps-dev): Bump the frontend-eslint-dependencies group in /src-ui with 4 updates @[dependabot[bot]](https://github.com/apps/dependabot) ([#10498](https://github.com/paperless-ngx/paperless-ngx/pull/10498)) +- Chore(deps-dev): Bump @playwright/test from 1.53.2 to 1.54.2 in /src-ui @[dependabot[bot]](https://github.com/apps/dependabot) ([#10499](https://github.com/paperless-ngx/paperless-ngx/pull/10499)) +- Chore(deps-dev): Bump webpack from 5.99.9 to 5.101.0 in /src-ui @[dependabot[bot]](https://github.com/apps/dependabot) ([#10501](https://github.com/paperless-ngx/paperless-ngx/pull/10501)) +- Chore(deps-dev): Bump prettier-plugin-organize-imports from 4.1.0 to 4.2.0 in /src-ui @[dependabot[bot]](https://github.com/apps/dependabot) ([#10500](https://github.com/paperless-ngx/paperless-ngx/pull/10500)) +- Chore(deps-dev): Bump @types/node from 24.0.10 to 24.1.0 in /src-ui @[dependabot[bot]](https://github.com/apps/dependabot) ([#10502](https://github.com/paperless-ngx/paperless-ngx/pull/10502)) +- Chore(deps): Bump the frontend-angular-dependencies group in /src-ui with 16 updates @[dependabot[bot]](https://github.com/apps/dependabot) ([#10496](https://github.com/paperless-ngx/paperless-ngx/pull/10496)) +- Fixhancement: improve text thumbnail generation for large files [@shamoon](https://github.com/shamoon) ([#10483](https://github.com/paperless-ngx/paperless-ngx/pull/10483)) +- Enhancement: disable auto spellcheck on filtering dropdowns [@TheDodger](https://github.com/TheDodger) ([#10487](https://github.com/paperless-ngx/paperless-ngx/pull/10487)) +- Chore(deps): Bump the small-changes group across 1 directory with 8 updates @[dependabot[bot]](https://github.com/apps/dependabot) ([#10481](https://github.com/paperless-ngx/paperless-ngx/pull/10481)) +- Fix: include ignore for config logos in sanity checker [@shamoon](https://github.com/shamoon) ([#10473](https://github.com/paperless-ngx/paperless-ngx/pull/10473)) +- Chore: add tasks task_id param to openapi spec [@shamoon](https://github.com/shamoon) ([#10469](https://github.com/paperless-ngx/paperless-ngx/pull/10469)) +- Fix: track and restore changed document fields from session storage [@shamoon](https://github.com/shamoon) ([#10468](https://github.com/paperless-ngx/paperless-ngx/pull/10468)) +- Chore: include advanced search query param in API spec [@shamoon](https://github.com/shamoon) ([#10449](https://github.com/paperless-ngx/paperless-ngx/pull/10449)) +- Enhancement: display saved view counts [@shamoon](https://github.com/shamoon) ([#10246](https://github.com/paperless-ngx/paperless-ngx/pull/10246)) +- Fix: Make some natural keyword date searches timezone-aware [@shamoon](https://github.com/shamoon) ([#10416](https://github.com/paperless-ngx/paperless-ngx/pull/10416)) +- Fixhancement: add missing exact operator for boolean CF queries [@shamoon](https://github.com/shamoon) ([#10402](https://github.com/paperless-ngx/paperless-ngx/pull/10402)) +- Fix: dont use translated verbose_name for getting object perms [@shamoon](https://github.com/shamoon) ([#10399](https://github.com/paperless-ngx/paperless-ngx/pull/10399)) +- Fix: fix date format for 'today' in DateComponent [@shamoon](https://github.com/shamoon) ([#10369](https://github.com/paperless-ngx/paperless-ngx/pull/10369)) +- Feature: add Vietnamese translation [@shamoon](https://github.com/shamoon) ([#10352](https://github.com/paperless-ngx/paperless-ngx/pull/10352)) +- Chore(deps): Bump the small-changes group across 1 directory with 7 updates @[dependabot[bot]](https://github.com/apps/dependabot) ([#10347](https://github.com/paperless-ngx/paperless-ngx/pull/10347)) +- Fix: default to empty permissions for group creation [@shamoon](https://github.com/shamoon) ([#10337](https://github.com/paperless-ngx/paperless-ngx/pull/10337)) +- Chore(deps-dev): Bump the frontend-eslint-dependencies group across 1 directory with 4 updates @[dependabot[bot]](https://github.com/apps/dependabot) ([#10311](https://github.com/paperless-ngx/paperless-ngx/pull/10311)) +- Chore(deps-dev): Bump @types/node from 22.15.29 to 24.0.10 in /src-ui @[dependabot[bot]](https://github.com/apps/dependabot) ([#10306](https://github.com/paperless-ngx/paperless-ngx/pull/10306)) +- Chore(deps): Bump bootstrap from 5.3.6 to 5.3.7 in /src-ui @[dependabot[bot]](https://github.com/apps/dependabot) ([#10308](https://github.com/paperless-ngx/paperless-ngx/pull/10308)) +- Chore(deps-dev): Bump webpack from 5.98.0 to 5.99.9 in /src-ui @[dependabot[bot]](https://github.com/apps/dependabot) ([#10309](https://github.com/paperless-ngx/paperless-ngx/pull/10309)) +- Chore(deps-dev): Bump @playwright/test from 1.51.1 to 1.53.2 in /src-ui @[dependabot[bot]](https://github.com/apps/dependabot) ([#10307](https://github.com/paperless-ngx/paperless-ngx/pull/10307)) +- Chore(deps): Bump the frontend-angular-dependencies group in /src-ui with 13 updates @[dependabot[bot]](https://github.com/apps/dependabot) ([#10303](https://github.com/paperless-ngx/paperless-ngx/pull/10303)) +- Performance: Add support for configuring date parser languages [@Merinorus](https://github.com/Merinorus) ([#10181](https://github.com/paperless-ngx/paperless-ngx/pull/10181)) +- Enhancement: Add a database caching for improved performance [@Merinorus](https://github.com/Merinorus) ([#9784](https://github.com/paperless-ngx/paperless-ngx/pull/9784)) +- Fix: correct api created coercion with timezone [@shamoon](https://github.com/shamoon) ([#10287](https://github.com/paperless-ngx/paperless-ngx/pull/10287)) +- Fix: reset search query for preview on reset filter [@shamoon](https://github.com/shamoon) ([#10279](https://github.com/paperless-ngx/paperless-ngx/pull/10279)) +- Chore: update to Angular 20 [@shamoon](https://github.com/shamoon) ([#10273](https://github.com/paperless-ngx/paperless-ngx/pull/10273)) +- Chore: reject absurd max age values [@shamoon](https://github.com/shamoon) ([#10243](https://github.com/paperless-ngx/paperless-ngx/pull/10243)) +
+ ## paperless-ngx 2.17.1 ### Bug Fixes @@ -5423,9 +5557,6 @@ This release contains new database migrations. Paperless will continue to work with WSGI, but you will not get any status notifications. - Apache `mod_wsgi` users, see - [this note](faq.md#how-do-i-get-websocket-support-with-apache-mod_wsgi). - - Paperless now offers suggestions for tags, correspondents and types on the document detail page. @@ -6227,11 +6358,12 @@ primarily. who are doing active development on Paperless using the Docker environment: [#376](https://github.com/the-paperless-project/paperless/pull/376). -- You now also have the ability to customise the interface to your +- ~~You now also have the ability to customise the interface to your heart's content by creating a file called `overrides.css` and/or `overrides.js` in the root of your media directory. Thanks to [Mark McFate](https://github.com/SummittDweller) for this idea: - [#371](https://github.com/the-paperless-project/paperless/issues/371) + [#371](https://github.com/the-paperless-project/paperless/issues/371)~~ + (Not supported by Paperless-ngx) ### 2.0.0 diff --git a/mkdocs.yml b/mkdocs.yml index 66add07b7..05826f25f 100644 --- a/mkdocs.yml +++ b/mkdocs.yml @@ -47,6 +47,7 @@ markdown_extensions: - pymdownx.superfences - pymdownx.inlinehilite - pymdownx.snippets + - pymdownx.tilde - footnotes - pymdownx.superfences: custom_fences: diff --git a/pyproject.toml b/pyproject.toml index 4b7aaa68d..ea93fdbaf 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -1,7 +1,7 @@ [project] name = "paperless-ngx" -version = "2.17.1" -description = "A community-supported supercharged version of paperless: scan, index and archive all your physical documents" +version = "2.18.0" +description = "A community-supported supercharged document management system: scan, index and archive all your physical documents" readme = "README.md" requires-python = ">=3.10" classifiers = [ @@ -16,6 +16,7 @@ classifiers = [ dependencies = [ "azure-ai-documentintelligence>=1.0.2", + "babel>=2.17", "bleach~=6.2.0", "celery[redis]~=5.5.1", "channels~=4.2", @@ -24,22 +25,22 @@ dependencies = [ "dateparser~=1.2", # WARNING: django does not use semver. # Only patch versions are guaranteed to not introduce breaking changes. - "django~=5.1.7", + "django~=5.2.5", "django-allauth[socialaccount,mfa]~=65.4.0", - "django-auditlog~=3.1.2", + "django-auditlog~=3.2.1", "django-cachalot~=2.8.0", "django-celery-results~=2.6.0", "django-compression-middleware~=0.5.0", "django-cors-headers~=4.7.0", "django-extensions~=4.1", "django-filter~=25.1", - "django-guardian~=2.4.0", - "django-multiselectfield~=0.1.13", + "django-guardian~=3.0.3", + "django-multiselectfield~=1.0.1", "django-soft-delete~=1.0.18", - "djangorestframework~=3.15", - "djangorestframework-guardian~=0.3.0", + "djangorestframework~=3.16", + "djangorestframework-guardian~=0.4.0", "drf-spectacular~=0.28", - "drf-spectacular-sidecar~=2025.4.1", + "drf-spectacular-sidecar~=2025.8.1", "drf-writable-nested~=0.7.1", "filelock~=3.18.0", "flower~=2.0.1", @@ -104,7 +105,7 @@ testing = [ "imagehash", "pytest~=8.4.1", "pytest-cov~=6.2.1", - "pytest-django~=4.10.0", + "pytest-django~=4.11.1", "pytest-env", "pytest-httpx", "pytest-mock", @@ -222,6 +223,11 @@ lint.per-file-ignores."src/paperless_tesseract/tests/test_parser.py" = [ ] lint.isort.force-single-line = true +[tool.codespell] +write-changes = true +ignore-words-list = "criterias,afterall,valeu,ureue,equest,ure,assertIn,Oktober" +skip = "src-ui/src/locale/*,src-ui/pnpm-lock.yaml,src-ui/e2e/*,src/paperless_mail/tests/samples/*,src/documents/tests/samples/*,*.po,*.json" + [tool.pytest.ini_options] minversion = "8.0" pythonpath = [ diff --git a/src-ui/messages.xlf b/src-ui/messages.xlf index e78d76255..4fec612b8 100644 --- a/src-ui/messages.xlf +++ b/src-ui/messages.xlf @@ -332,19 +332,19 @@ src/app/components/manage/management-list/management-list.component.html - 103 + 105 src/app/components/manage/management-list/management-list.component.html - 103 + 105 src/app/components/manage/management-list/management-list.component.html - 103 + 105 src/app/components/manage/management-list/management-list.component.html - 103 + 105 @@ -2137,39 +2137,39 @@ src/app/components/manage/management-list/management-list.component.html - 85 + 87 src/app/components/manage/management-list/management-list.component.html - 85 + 87 src/app/components/manage/management-list/management-list.component.html - 85 + 87 src/app/components/manage/management-list/management-list.component.html - 85 + 87 src/app/components/manage/management-list/management-list.component.html - 97 + 99 src/app/components/manage/management-list/management-list.component.html - 97 + 99 src/app/components/manage/management-list/management-list.component.html - 97 + 99 src/app/components/manage/management-list/management-list.component.html - 97 + 99 src/app/components/manage/management-list/management-list.component.ts - 223 + 225 src/app/components/manage/saved-views/saved-views.component.html @@ -2203,11 +2203,11 @@ src/app/components/manage/management-list/management-list.component.ts - 219 + 221 src/app/components/manage/management-list/management-list.component.ts - 336 + 338 @@ -2249,7 +2249,7 @@ src/app/components/manage/management-list/management-list.component.ts - 338 + 340 src/app/components/manage/workflows/workflows.component.ts @@ -2440,35 +2440,35 @@ src/app/components/manage/management-list/management-list.component.html - 84 + 86 src/app/components/manage/management-list/management-list.component.html - 84 + 86 src/app/components/manage/management-list/management-list.component.html - 84 + 86 src/app/components/manage/management-list/management-list.component.html - 84 + 86 src/app/components/manage/management-list/management-list.component.html - 94 + 96 src/app/components/manage/management-list/management-list.component.html - 94 + 96 src/app/components/manage/management-list/management-list.component.html - 94 + 96 src/app/components/manage/management-list/management-list.component.html - 94 + 96 src/app/components/manage/workflows/workflows.component.html @@ -2576,7 +2576,7 @@ src/app/components/manage/management-list/management-list.component.ts - 340 + 342 src/app/components/manage/workflows/workflows.component.ts @@ -5549,14 +5549,14 @@ Copy metadata src/app/components/common/pdf-editor/pdf-editor.component.html - 93 + 94 Delete original src/app/components/common/pdf-editor/pdf-editor.component.html - 97 + 98 @@ -8308,19 +8308,19 @@ src/app/components/manage/management-list/management-list.component.html - 87 + 89 src/app/components/manage/management-list/management-list.component.html - 87 + 89 src/app/components/manage/management-list/management-list.component.html - 87 + 89 src/app/components/manage/management-list/management-list.component.html - 87 + 89 @@ -8640,7 +8640,7 @@ src/app/components/manage/management-list/management-list.component.ts - 323 + 325 @@ -8704,26 +8704,26 @@ {VAR_PLURAL, plural, =1 {One } other { total }} src/app/components/manage/management-list/management-list.component.html - 119 + 121 src/app/components/manage/management-list/management-list.component.html - 119 + 121 src/app/components/manage/management-list/management-list.component.html - 119 + 121 src/app/components/manage/management-list/management-list.component.html - 119 + 121 Automatic src/app/components/manage/management-list/management-list.component.ts - 115 + 117 src/app/data/matching-model.ts @@ -8734,7 +8734,7 @@ None src/app/components/manage/management-list/management-list.component.ts - 117 + 119 src/app/data/matching-model.ts @@ -8745,70 +8745,70 @@ Successfully created . src/app/components/manage/management-list/management-list.component.ts - 176 + 178 Error occurred while creating . src/app/components/manage/management-list/management-list.component.ts - 181 + 183 Successfully updated "". src/app/components/manage/management-list/management-list.component.ts - 196 + 198 Error occurred while saving . src/app/components/manage/management-list/management-list.component.ts - 201 + 203 Associated documents will not be deleted. src/app/components/manage/management-list/management-list.component.ts - 221 + 223 Error while deleting element src/app/components/manage/management-list/management-list.component.ts - 237 + 239 Permissions updated successfully src/app/components/manage/management-list/management-list.component.ts - 316 + 318 This operation will permanently delete all objects. src/app/components/manage/management-list/management-list.component.ts - 337 + 339 Objects deleted successfully src/app/components/manage/management-list/management-list.component.ts - 351 + 353 Error deleting objects src/app/components/manage/management-list/management-list.component.ts - 357 + 359 diff --git a/src-ui/package.json b/src-ui/package.json index 41309dcd3..cc18ab629 100644 --- a/src-ui/package.json +++ b/src-ui/package.json @@ -1,6 +1,6 @@ { "name": "paperless-ngx-ui", - "version": "2.17.1", + "version": "2.18.0", "scripts": { "preinstall": "npx only-allow pnpm", "ng": "ng", diff --git a/src-ui/src/app/components/app-frame/app-frame.component.ts b/src-ui/src/app/components/app-frame/app-frame.component.ts index 35b5b5bdc..b29f3fc05 100644 --- a/src-ui/src/app/components/app-frame/app-frame.component.ts +++ b/src-ui/src/app/components/app-frame/app-frame.component.ts @@ -145,7 +145,7 @@ export class AppFrameComponent } get versionString(): string { - return `${environment.appTitle} v${this.settingsService.get(SETTINGS_KEYS.VERSION)}${environment.production ? '' : ` #${environment.tag}`}` + return `${environment.appTitle} v${this.settingsService.get(SETTINGS_KEYS.VERSION)}${environment.tag === 'prod' ? '' : ` #${environment.tag}`}` } get customAppTitle(): string { diff --git a/src-ui/src/app/components/common/pdf-editor/pdf-editor.component.html b/src-ui/src/app/components/common/pdf-editor/pdf-editor.component.html index 49a43141c..4b47de3d1 100644 --- a/src-ui/src/app/components/common/pdf-editor/pdf-editor.component.html +++ b/src-ui/src/app/components/common/pdf-editor/pdf-editor.component.html @@ -25,7 +25,7 @@ -
+
@for (p of pages; track p.page; let i = $index) {
@@ -73,8 +73,8 @@ }
-