diff --git a/.github/dependabot.yml b/.github/dependabot.yml index 47511810c..2e7df111b 100644 --- a/.github/dependabot.yml +++ b/.github/dependabot.yml @@ -17,6 +17,21 @@ updates: # Add reviewers reviewers: - "paperless-ngx/frontend" + groups: + frontend-angular-dependencies: + patterns: + - "@angular*" + - "@ng-*" + - "ngx-*" + - "ng2-pdf-viewer" + frontend-jest-dependencies: + patterns: + - "@types/jest" + - "jest" + frontend-eslint-dependencies: + patterns: + - "@typescript-eslint*" + - "eslint" # Enable version updates for Python - package-ecosystem: "pip" diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 9809479fc..8754dafc4 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -16,7 +16,7 @@ on: env: # This is the version of pipenv all the steps will use # If changing this, change Dockerfile - DEFAULT_PIP_ENV_VERSION: "2023.6.12" + DEFAULT_PIP_ENV_VERSION: "2023.7.23" # This is the default version of Python to use in most steps # If changing this, change Dockerfile DEFAULT_PYTHON_VERSION: "3.9" diff --git a/.github/workflows/cleanup-tags.yml b/.github/workflows/cleanup-tags.yml index 935245889..78da9861b 100644 --- a/.github/workflows/cleanup-tags.yml +++ b/.github/workflows/cleanup-tags.yml @@ -29,7 +29,7 @@ jobs: - name: Clean temporary images if: "${{ env.TOKEN != '' }}" - uses: stumpylog/image-cleaner-action/ephemeral@v0.1.0 + uses: stumpylog/image-cleaner-action/ephemeral@v0.2.0 with: token: "${{ env.TOKEN }}" owner: "${{ github.repository_owner }}" @@ -68,7 +68,7 @@ jobs: - name: Clean untagged images if: "${{ env.TOKEN != '' }}" - uses: stumpylog/image-cleaner-action/untagged@v0.1.0 + uses: stumpylog/image-cleaner-action/untagged@v0.2.0 with: token: "${{ env.TOKEN }}" owner: "${{ github.repository_owner }}" diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml index 98178a6bf..3ddb8d731 100644 --- a/.pre-commit-config.yaml +++ b/.pre-commit-config.yaml @@ -27,7 +27,7 @@ repos: - id: check-case-conflict - id: detect-private-key - repo: https://github.com/pre-commit/mirrors-prettier - rev: 'v2.7.1' + rev: 'v3.0.0' hooks: - id: prettier types_or: @@ -37,11 +37,11 @@ repos: exclude: "(^Pipfile\\.lock$)" # Python hooks - repo: https://github.com/charliermarsh/ruff-pre-commit - rev: 'v0.0.272' + rev: 'v0.0.280' hooks: - id: ruff - repo: https://github.com/psf/black - rev: 23.3.0 + rev: 23.7.0 hooks: - id: black # Dockerfile hooks diff --git a/.prettierrc b/.prettierrc index 5d710584d..eb55154ad 100644 --- a/.prettierrc +++ b/.prettierrc @@ -2,3 +2,5 @@ semi: false # https://prettier.io/docs/en/options.html#quotes singleQuote: true +# https://prettier.io/docs/en/options.html#trailing-commas +trailingComma: "es5" diff --git a/.ruff.toml b/.ruff.toml index 0a20a7a2a..23b39089c 100644 --- a/.ruff.toml +++ b/.ruff.toml @@ -2,7 +2,7 @@ # https://beta.ruff.rs/docs/rules/ extend-select = ["I", "W", "UP", "COM", "DJ", "EXE", "ISC", "ICN", "G201", "INP", "PIE", "RSE", "SIM", "TID", "PLC", "PLE", "RUF"] # TODO PTH -ignore = ["DJ001", "SIM105"] +ignore = ["DJ001", "SIM105", "RUF012"] fix = true line-length = 88 respect-gitignore = true diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 1e04ca4aa..65220af25 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -45,7 +45,7 @@ Examples of `non-trivial` PRs might include: - Additional features - Large changes to many distinct files -- Breaking or depreciation of existing features +- Breaking or deprecation of existing features Our community review process for `non-trivial` PRs is the following: diff --git a/Dockerfile b/Dockerfile index 23fd384fa..c96c957c8 100644 --- a/Dockerfile +++ b/Dockerfile @@ -29,7 +29,7 @@ COPY Pipfile* ./ RUN set -eux \ && echo "Installing pipenv" \ - && python3 -m pip install --no-cache-dir --upgrade pipenv==2023.6.12 \ + && python3 -m pip install --no-cache-dir --upgrade pipenv==2023.7.23 \ && echo "Generating requirement.txt" \ && pipenv requirements > requirements.txt @@ -214,7 +214,8 @@ COPY --from=pipenv-base /usr/src/pipenv/requirements.txt ./ ARG BUILD_PACKAGES="\ build-essential \ git \ - default-libmysqlclient-dev" + default-libmysqlclient-dev \ + pkg-config" # hadolint ignore=DL3042 RUN --mount=type=cache,target=/root/.cache/pip/,id=pip-cache \ diff --git a/Pipfile b/Pipfile index 8a4ea03b2..4bd0ed325 100644 --- a/Pipfile +++ b/Pipfile @@ -26,8 +26,6 @@ gunicorn = "*" imap-tools = "*" langdetect = "*" pathvalidate = "*" -pillow = "*" -pikepdf = "*" python-gnupg = "*" python-dotenv = "*" python-dateutil = "*" @@ -36,7 +34,7 @@ python-ipware = "*" psycopg2 = "*" rapidfuzz = "*" redis = {extras = ["hiredis"], version = "*"} -scikit-learn = "~=1.2" +scikit-learn = "~=1.3" whitenoise = "~=6.3" watchdog = "~=2.2" whoosh="~=2.7" @@ -64,9 +62,10 @@ zxing-cpp = {version = "*", platform_machine = "== 'x86_64'"} scipy = "==1.8.1" # v4 brings in extra dependencies for features not used here reportlab = "==3.6.12" -# Pin this until piwheels is building a newer version (see https://www.piwheels.org/project/cryptography/) +# Pin these until piwheels is building a newer version (see https://www.piwheels.org/project/{package}/) cryptography = "==40.0.1" -httpx = "*" +pikepdf = "==7.2.0" +pillow = "==9.5.0" [dev-packages] # Linting diff --git a/Pipfile.lock b/Pipfile.lock index e9403c922..82337c08d 100644 --- a/Pipfile.lock +++ b/Pipfile.lock @@ -1,7 +1,7 @@ { "_meta": { "hash": { - "sha256": "e63cdbb928210fc4dcf0554bde381abd0ff956923ae03ab9f6984025cd5a454d" + "sha256": "3913b5fd4b48095586e377129b3ba37f2d4610f44ae0edab736f81e103a8a837" }, "pipfile-spec": 6, "requires": {}, @@ -29,11 +29,11 @@ }, "anyio": { "hashes": [ - "sha256:275d9973793619a5374e1c89a4f4ad3f4b0a5510a2b5b939444bee8f4c4d37ce", - "sha256:eddca883c4175f14df8aedce21054bfca3adb70ffe76a9f607aef9d7fa2ea7f0" + "sha256:44a3c9aba0f5defa43261a8b3efb97891f2bd7d804e0e1f56419befa1adfc780", + "sha256:91dee416e570e92c64041bd18b900d1d6fa78dff7048769ce5ac5ddad004fbb5" ], "markers": "python_version >= '3.7'", - "version": "==3.7.0" + "version": "==3.7.1" }, "asgiref": { "hashes": [ @@ -181,19 +181,19 @@ "redis" ], "hashes": [ - "sha256:1eaba5ee14d8c8c0bed8f6063e5e10dabdbcf23503a861cf0e10b7221d99cb0d", - "sha256:95d29f9a93f41c4b122fddf1fe3ef13f872029dca4ad1f9af4f1a414442ceecf" + "sha256:27f8f3f3b58de6e0ab4f174791383bbd7445aff0471a43e99cfd77727940753f", + "sha256:f84d1c21a1520c116c2b7d26593926581191435a03aa74b77c941b93ca1c6210" ], "index": "pypi", - "version": "==5.3.0" + "version": "==5.3.1" }, "certifi": { "hashes": [ - "sha256:0f0d56dc5a6ad56fd4ba36484d6cc34451e1c6548c61daad8c320169f91eddc7", - "sha256:c6c2e98f5c7869efca1f8916fed228dd91539f9f1b444c314c06eef02980c716" + "sha256:539cc1d13202e33ca466e88b2807e29f4c13049d6d87031a3c110744495cb082", + "sha256:92d6037539857d8206b8f6ae472e8b77db8058fec5937a1ef3f54304089edbb9" ], "markers": "python_version >= '3.6'", - "version": "==2023.5.7" + "version": "==2023.7.22" }, "cffi": { "hashes": [ @@ -282,92 +282,92 @@ }, "charset-normalizer": { "hashes": [ - "sha256:04afa6387e2b282cf78ff3dbce20f0cc071c12dc8f685bd40960cc68644cfea6", - "sha256:04eefcee095f58eaabe6dc3cc2262f3bcd776d2c67005880894f447b3f2cb9c1", - "sha256:0be65ccf618c1e7ac9b849c315cc2e8a8751d9cfdaa43027d4f6624bd587ab7e", - "sha256:0c95f12b74681e9ae127728f7e5409cbbef9cd914d5896ef238cc779b8152373", - "sha256:0ca564606d2caafb0abe6d1b5311c2649e8071eb241b2d64e75a0d0065107e62", - "sha256:10c93628d7497c81686e8e5e557aafa78f230cd9e77dd0c40032ef90c18f2230", - "sha256:11d117e6c63e8f495412d37e7dc2e2fff09c34b2d09dbe2bee3c6229577818be", - "sha256:11d3bcb7be35e7b1bba2c23beedac81ee893ac9871d0ba79effc7fc01167db6c", - "sha256:12a2b561af122e3d94cdb97fe6fb2bb2b82cef0cdca131646fdb940a1eda04f0", - "sha256:12d1a39aa6b8c6f6248bb54550efcc1c38ce0d8096a146638fd4738e42284448", - "sha256:1435ae15108b1cb6fffbcea2af3d468683b7afed0169ad718451f8db5d1aff6f", - "sha256:1c60b9c202d00052183c9be85e5eaf18a4ada0a47d188a83c8f5c5b23252f649", - "sha256:1e8fcdd8f672a1c4fc8d0bd3a2b576b152d2a349782d1eb0f6b8e52e9954731d", - "sha256:20064ead0717cf9a73a6d1e779b23d149b53daf971169289ed2ed43a71e8d3b0", - "sha256:21fa558996782fc226b529fdd2ed7866c2c6ec91cee82735c98a197fae39f706", - "sha256:22908891a380d50738e1f978667536f6c6b526a2064156203d418f4856d6e86a", - "sha256:3160a0fd9754aab7d47f95a6b63ab355388d890163eb03b2d2b87ab0a30cfa59", - "sha256:322102cdf1ab682ecc7d9b1c5eed4ec59657a65e1c146a0da342b78f4112db23", - "sha256:34e0a2f9c370eb95597aae63bf85eb5e96826d81e3dcf88b8886012906f509b5", - "sha256:3573d376454d956553c356df45bb824262c397c6e26ce43e8203c4c540ee0acb", - "sha256:3747443b6a904001473370d7810aa19c3a180ccd52a7157aacc264a5ac79265e", - "sha256:38e812a197bf8e71a59fe55b757a84c1f946d0ac114acafaafaf21667a7e169e", - "sha256:3a06f32c9634a8705f4ca9946d667609f52cf130d5548881401f1eb2c39b1e2c", - "sha256:3a5fc78f9e3f501a1614a98f7c54d3969f3ad9bba8ba3d9b438c3bc5d047dd28", - "sha256:3d9098b479e78c85080c98e1e35ff40b4a31d8953102bb0fd7d1b6f8a2111a3d", - "sha256:3dc5b6a8ecfdc5748a7e429782598e4f17ef378e3e272eeb1340ea57c9109f41", - "sha256:4155b51ae05ed47199dc5b2a4e62abccb274cee6b01da5b895099b61b1982974", - "sha256:49919f8400b5e49e961f320c735388ee686a62327e773fa5b3ce6721f7e785ce", - "sha256:53d0a3fa5f8af98a1e261de6a3943ca631c526635eb5817a87a59d9a57ebf48f", - "sha256:5f008525e02908b20e04707a4f704cd286d94718f48bb33edddc7d7b584dddc1", - "sha256:628c985afb2c7d27a4800bfb609e03985aaecb42f955049957814e0491d4006d", - "sha256:65ed923f84a6844de5fd29726b888e58c62820e0769b76565480e1fdc3d062f8", - "sha256:6734e606355834f13445b6adc38b53c0fd45f1a56a9ba06c2058f86893ae8017", - "sha256:6baf0baf0d5d265fa7944feb9f7451cc316bfe30e8df1a61b1bb08577c554f31", - "sha256:6f4f4668e1831850ebcc2fd0b1cd11721947b6dc7c00bf1c6bd3c929ae14f2c7", - "sha256:6f5c2e7bc8a4bf7c426599765b1bd33217ec84023033672c1e9a8b35eaeaaaf8", - "sha256:6f6c7a8a57e9405cad7485f4c9d3172ae486cfef1344b5ddd8e5239582d7355e", - "sha256:7381c66e0561c5757ffe616af869b916c8b4e42b367ab29fedc98481d1e74e14", - "sha256:73dc03a6a7e30b7edc5b01b601e53e7fc924b04e1835e8e407c12c037e81adbd", - "sha256:74db0052d985cf37fa111828d0dd230776ac99c740e1a758ad99094be4f1803d", - "sha256:75f2568b4189dda1c567339b48cba4ac7384accb9c2a7ed655cd86b04055c795", - "sha256:78cacd03e79d009d95635e7d6ff12c21eb89b894c354bd2b2ed0b4763373693b", - "sha256:80d1543d58bd3d6c271b66abf454d437a438dff01c3e62fdbcd68f2a11310d4b", - "sha256:830d2948a5ec37c386d3170c483063798d7879037492540f10a475e3fd6f244b", - "sha256:891cf9b48776b5c61c700b55a598621fdb7b1e301a550365571e9624f270c203", - "sha256:8f25e17ab3039b05f762b0a55ae0b3632b2e073d9c8fc88e89aca31a6198e88f", - "sha256:9a3267620866c9d17b959a84dd0bd2d45719b817245e49371ead79ed4f710d19", - "sha256:a04f86f41a8916fe45ac5024ec477f41f886b3c435da2d4e3d2709b22ab02af1", - "sha256:aaf53a6cebad0eae578f062c7d462155eada9c172bd8c4d250b8c1d8eb7f916a", - "sha256:abc1185d79f47c0a7aaf7e2412a0eb2c03b724581139193d2d82b3ad8cbb00ac", - "sha256:ac0aa6cd53ab9a31d397f8303f92c42f534693528fafbdb997c82bae6e477ad9", - "sha256:ac3775e3311661d4adace3697a52ac0bab17edd166087d493b52d4f4f553f9f0", - "sha256:b06f0d3bf045158d2fb8837c5785fe9ff9b8c93358be64461a1089f5da983137", - "sha256:b116502087ce8a6b7a5f1814568ccbd0e9f6cfd99948aa59b0e241dc57cf739f", - "sha256:b82fab78e0b1329e183a65260581de4375f619167478dddab510c6c6fb04d9b6", - "sha256:bd7163182133c0c7701b25e604cf1611c0d87712e56e88e7ee5d72deab3e76b5", - "sha256:c36bcbc0d5174a80d6cccf43a0ecaca44e81d25be4b7f90f0ed7bcfbb5a00909", - "sha256:c3af8e0f07399d3176b179f2e2634c3ce9c1301379a6b8c9c9aeecd481da494f", - "sha256:c84132a54c750fda57729d1e2599bb598f5fa0344085dbde5003ba429a4798c0", - "sha256:cb7b2ab0188829593b9de646545175547a70d9a6e2b63bf2cd87a0a391599324", - "sha256:cca4def576f47a09a943666b8f829606bcb17e2bc2d5911a46c8f8da45f56755", - "sha256:cf6511efa4801b9b38dc5546d7547d5b5c6ef4b081c60b23e4d941d0eba9cbeb", - "sha256:d16fd5252f883eb074ca55cb622bc0bee49b979ae4e8639fff6ca3ff44f9f854", - "sha256:d2686f91611f9e17f4548dbf050e75b079bbc2a82be565832bc8ea9047b61c8c", - "sha256:d7fc3fca01da18fbabe4625d64bb612b533533ed10045a2ac3dd194bfa656b60", - "sha256:dd5653e67b149503c68c4018bf07e42eeed6b4e956b24c00ccdf93ac79cdff84", - "sha256:de5695a6f1d8340b12a5d6d4484290ee74d61e467c39ff03b39e30df62cf83a0", - "sha256:e0ac8959c929593fee38da1c2b64ee9778733cdf03c482c9ff1d508b6b593b2b", - "sha256:e1b25e3ad6c909f398df8921780d6a3d120d8c09466720226fc621605b6f92b1", - "sha256:e633940f28c1e913615fd624fcdd72fdba807bf53ea6925d6a588e84e1151531", - "sha256:e89df2958e5159b811af9ff0f92614dabf4ff617c03a4c1c6ff53bf1c399e0e1", - "sha256:ea9f9c6034ea2d93d9147818f17c2a0860d41b71c38b9ce4d55f21b6f9165a11", - "sha256:f645caaf0008bacf349875a974220f1f1da349c5dbe7c4ec93048cdc785a3326", - "sha256:f8303414c7b03f794347ad062c0516cee0e15f7a612abd0ce1e25caf6ceb47df", - "sha256:fca62a8301b605b954ad2e9c3666f9d97f63872aa4efcae5492baca2056b74ab" + "sha256:04e57ab9fbf9607b77f7d057974694b4f6b142da9ed4a199859d9d4d5c63fe96", + "sha256:09393e1b2a9461950b1c9a45d5fd251dc7c6f228acab64da1c9c0165d9c7765c", + "sha256:0b87549028f680ca955556e3bd57013ab47474c3124dc069faa0b6545b6c9710", + "sha256:1000fba1057b92a65daec275aec30586c3de2401ccdcd41f8a5c1e2c87078706", + "sha256:1249cbbf3d3b04902ff081ffbb33ce3377fa6e4c7356f759f3cd076cc138d020", + "sha256:1920d4ff15ce893210c1f0c0e9d19bfbecb7983c76b33f046c13a8ffbd570252", + "sha256:193cbc708ea3aca45e7221ae58f0fd63f933753a9bfb498a3b474878f12caaad", + "sha256:1a100c6d595a7f316f1b6f01d20815d916e75ff98c27a01ae817439ea7726329", + "sha256:1f30b48dd7fa1474554b0b0f3fdfdd4c13b5c737a3c6284d3cdc424ec0ffff3a", + "sha256:203f0c8871d5a7987be20c72442488a0b8cfd0f43b7973771640fc593f56321f", + "sha256:246de67b99b6851627d945db38147d1b209a899311b1305dd84916f2b88526c6", + "sha256:2dee8e57f052ef5353cf608e0b4c871aee320dd1b87d351c28764fc0ca55f9f4", + "sha256:2efb1bd13885392adfda4614c33d3b68dee4921fd0ac1d3988f8cbb7d589e72a", + "sha256:2f4ac36d8e2b4cc1aa71df3dd84ff8efbe3bfb97ac41242fbcfc053c67434f46", + "sha256:3170c9399da12c9dc66366e9d14da8bf7147e1e9d9ea566067bbce7bb74bd9c2", + "sha256:3b1613dd5aee995ec6d4c69f00378bbd07614702a315a2cf6c1d21461fe17c23", + "sha256:3bb3d25a8e6c0aedd251753a79ae98a093c7e7b471faa3aa9a93a81431987ace", + "sha256:3bb7fda7260735efe66d5107fb7e6af6a7c04c7fce9b2514e04b7a74b06bf5dd", + "sha256:41b25eaa7d15909cf3ac4c96088c1f266a9a93ec44f87f1d13d4a0e86c81b982", + "sha256:45de3f87179c1823e6d9e32156fb14c1927fcc9aba21433f088fdfb555b77c10", + "sha256:46fb8c61d794b78ec7134a715a3e564aafc8f6b5e338417cb19fe9f57a5a9bf2", + "sha256:48021783bdf96e3d6de03a6e39a1171ed5bd7e8bb93fc84cc649d11490f87cea", + "sha256:4957669ef390f0e6719db3613ab3a7631e68424604a7b448f079bee145da6e09", + "sha256:5e86d77b090dbddbe78867a0275cb4df08ea195e660f1f7f13435a4649e954e5", + "sha256:6339d047dab2780cc6220f46306628e04d9750f02f983ddb37439ca47ced7149", + "sha256:681eb3d7e02e3c3655d1b16059fbfb605ac464c834a0c629048a30fad2b27489", + "sha256:6c409c0deba34f147f77efaa67b8e4bb83d2f11c8806405f76397ae5b8c0d1c9", + "sha256:7095f6fbfaa55defb6b733cfeb14efaae7a29f0b59d8cf213be4e7ca0b857b80", + "sha256:70c610f6cbe4b9fce272c407dd9d07e33e6bf7b4aa1b7ffb6f6ded8e634e3592", + "sha256:72814c01533f51d68702802d74f77ea026b5ec52793c791e2da806a3844a46c3", + "sha256:7a4826ad2bd6b07ca615c74ab91f32f6c96d08f6fcc3902ceeedaec8cdc3bcd6", + "sha256:7c70087bfee18a42b4040bb9ec1ca15a08242cf5867c58726530bdf3945672ed", + "sha256:855eafa5d5a2034b4621c74925d89c5efef61418570e5ef9b37717d9c796419c", + "sha256:8700f06d0ce6f128de3ccdbc1acaea1ee264d2caa9ca05daaf492fde7c2a7200", + "sha256:89f1b185a01fe560bc8ae5f619e924407efca2191b56ce749ec84982fc59a32a", + "sha256:8b2c760cfc7042b27ebdb4a43a4453bd829a5742503599144d54a032c5dc7e9e", + "sha256:8c2f5e83493748286002f9369f3e6607c565a6a90425a3a1fef5ae32a36d749d", + "sha256:8e098148dd37b4ce3baca71fb394c81dc5d9c7728c95df695d2dca218edf40e6", + "sha256:94aea8eff76ee6d1cdacb07dd2123a68283cb5569e0250feab1240058f53b623", + "sha256:95eb302ff792e12aba9a8b8f8474ab229a83c103d74a750ec0bd1c1eea32e669", + "sha256:9bd9b3b31adcb054116447ea22caa61a285d92e94d710aa5ec97992ff5eb7cf3", + "sha256:9e608aafdb55eb9f255034709e20d5a83b6d60c054df0802fa9c9883d0a937aa", + "sha256:a103b3a7069b62f5d4890ae1b8f0597618f628b286b03d4bc9195230b154bfa9", + "sha256:a386ebe437176aab38c041de1260cd3ea459c6ce5263594399880bbc398225b2", + "sha256:a38856a971c602f98472050165cea2cdc97709240373041b69030be15047691f", + "sha256:a401b4598e5d3f4a9a811f3daf42ee2291790c7f9d74b18d75d6e21dda98a1a1", + "sha256:a7647ebdfb9682b7bb97e2a5e7cb6ae735b1c25008a70b906aecca294ee96cf4", + "sha256:aaf63899c94de41fe3cf934601b0f7ccb6b428c6e4eeb80da72c58eab077b19a", + "sha256:b0dac0ff919ba34d4df1b6131f59ce95b08b9065233446be7e459f95554c0dc8", + "sha256:baacc6aee0b2ef6f3d308e197b5d7a81c0e70b06beae1f1fcacffdbd124fe0e3", + "sha256:bf420121d4c8dce6b889f0e8e4ec0ca34b7f40186203f06a946fa0276ba54029", + "sha256:c04a46716adde8d927adb9457bbe39cf473e1e2c2f5d0a16ceb837e5d841ad4f", + "sha256:c0b21078a4b56965e2b12f247467b234734491897e99c1d51cee628da9786959", + "sha256:c1c76a1743432b4b60ab3358c937a3fe1341c828ae6194108a94c69028247f22", + "sha256:c4983bf937209c57240cff65906b18bb35e64ae872da6a0db937d7b4af845dd7", + "sha256:c4fb39a81950ec280984b3a44f5bd12819953dc5fa3a7e6fa7a80db5ee853952", + "sha256:c57921cda3a80d0f2b8aec7e25c8aa14479ea92b5b51b6876d975d925a2ea346", + "sha256:c8063cf17b19661471ecbdb3df1c84f24ad2e389e326ccaf89e3fb2484d8dd7e", + "sha256:ccd16eb18a849fd8dcb23e23380e2f0a354e8daa0c984b8a732d9cfaba3a776d", + "sha256:cd6dbe0238f7743d0efe563ab46294f54f9bc8f4b9bcf57c3c666cc5bc9d1299", + "sha256:d62e51710986674142526ab9f78663ca2b0726066ae26b78b22e0f5e571238dd", + "sha256:db901e2ac34c931d73054d9797383d0f8009991e723dab15109740a63e7f902a", + "sha256:e03b8895a6990c9ab2cdcd0f2fe44088ca1c65ae592b8f795c3294af00a461c3", + "sha256:e1c8a2f4c69e08e89632defbfabec2feb8a8d99edc9f89ce33c4b9e36ab63037", + "sha256:e4b749b9cc6ee664a3300bb3a273c1ca8068c46be705b6c31cf5d276f8628a94", + "sha256:e6a5bf2cba5ae1bb80b154ed68a3cfa2fa00fde979a7f50d6598d3e17d9ac20c", + "sha256:e857a2232ba53ae940d3456f7533ce6ca98b81917d47adc3c7fd55dad8fab858", + "sha256:ee4006268ed33370957f55bf2e6f4d263eaf4dc3cfc473d1d90baff6ed36ce4a", + "sha256:eef9df1eefada2c09a5e7a40991b9fc6ac6ef20b1372abd48d2794a316dc0449", + "sha256:f058f6963fd82eb143c692cecdc89e075fa0828db2e5b291070485390b2f1c9c", + "sha256:f25c229a6ba38a35ae6e25ca1264621cc25d4d38dca2942a7fce0b67a4efe918", + "sha256:f2a1d0fd4242bd8643ce6f98927cf9c04540af6efa92323e9d3124f57727bfc1", + "sha256:f7560358a6811e52e9c4d142d497f1a6e10103d3a6881f18d04dbce3729c0e2c", + "sha256:f779d3ad205f108d14e99bb3859aa7dd8e9c68874617c72354d7ecaec2a054ac", + "sha256:f87f746ee241d30d6ed93969de31e5ffd09a2961a051e60ae6bddde9ec3583aa" ], "markers": "python_full_version >= '3.7.0'", - "version": "==3.1.0" + "version": "==3.2.0" }, "click": { "hashes": [ - "sha256:7682dc8afb30297001674575ea00d1814d808d6a36af415a82bd481d37ba7b8e", - "sha256:bb4d8133cb15a609f44e8213d9b391b0809795062913b383c62be0ee95b1db48" + "sha256:48ee849951919527a045bfe3bf7baa8a959c423134e1a5b98c05c20ba75a1cbd", + "sha256:fa244bb30b3b5ee2cae3da8f55c9e5e0c0e86093306301fb418eb9dc40fbded5" ], "markers": "python_version >= '3.7'", - "version": "==8.1.3" + "version": "==8.1.6" }, "click-didyoumean": { "hashes": [ @@ -386,10 +386,11 @@ }, "click-repl": { "hashes": [ - "sha256:94b3fbbc9406a236f176e0506524b2937e4b23b6f4c0c0b2a0a83f8a64e9194b", - "sha256:cd12f68d745bf6151210790540b4cb064c7b13e571bc64b6957d98d120dacfd8" + "sha256:17849c23dba3d667247dc4defe1757fff98694e90fe37474f3feebb69ced26a9", + "sha256:fb7e06deb8da8de86180a33a9da97ac316751c094c6899382da7feeeeb51b812" ], - "version": "==0.2.0" + "markers": "python_version >= '3.6'", + "version": "==0.3.0" }, "coloredlogs": { "hashes": [ @@ -449,11 +450,11 @@ }, "django": { "hashes": [ - "sha256:adae3a952fd86800094ae6f64aa558572e8b4ba8dfe21f0ed8175147e75a72a1", - "sha256:e9f074a84930662104871bfcea55c3c180c50a0a47739db82435deae6cbaf032" + "sha256:26d0260c2fb8121009e62ffc548b2398dea2522b6454208a852fb0ef264c206c", + "sha256:56343019a9fd839e2e5bf203daf45f25af79d5bffa4c71d56eae4f4404d82ade" ], "index": "pypi", - "version": "==4.1.9" + "version": "==4.1.10" }, "django-celery-results": { "hashes": [ @@ -473,11 +474,11 @@ }, "django-cors-headers": { "hashes": [ - "sha256:a971cd4c75b29974068cc36b5c595698822f1e0edd5f1b32ea42ea37326ad4aa", - "sha256:e3cbd247a1a835da4cf71a70d4214378813ea7e08337778b82cb2c1bc19d28d6" + "sha256:9ada212b0e2efd4a5e339360ffc869cb21ac5605e810afe69f7308e577ea5bde", + "sha256:f9749c6410fe738278bc2b6ef17f05195bc7b251693c035752d8257026af024f" ], "index": "pypi", - "version": "==4.0.0" + "version": "==4.2.0" }, "django-extensions": { "hashes": [ @@ -521,11 +522,11 @@ }, "exceptiongroup": { "hashes": [ - "sha256:232c37c63e4f682982c8b6459f33a8981039e5fb8756b2074364e5055c498c9e", - "sha256:d484c3090ba2889ae2928419117447a14daf3c1231d5e30d0aae34f354f01785" + "sha256:12c3e887d6485d16943a309616de20ae5582633e0a2eda17f4e10fd61c1e8af5", + "sha256:e346e69d186172ca7cf029c8c1d16235aa0e04035e5750b4b95039e65204328f" ], "markers": "python_version < '3.11'", - "version": "==1.1.1" + "version": "==1.1.2" }, "filelock": { "hashes": [ @@ -537,19 +538,19 @@ }, "flower": { "hashes": [ - "sha256:46493c7e8d9ca2167e8a46eb97ae8d280997cb40a81993230124d74f0fe40bac", - "sha256:ae2977cf7343c526cf44def8c7e7173db8dedb8249b91ba4b88cfd18e7a2d486" + "sha256:5657785d728a54914256c34fd0551fe2d7152aab08062ebc645bf86b97b8aec5", + "sha256:571f9ed1c57a622e862de35eceb8a4244f023fbcfb7175f53e45ebe679f46d90" ], "index": "pypi", - "version": "==1.2.0" + "version": "==2.0.0" }, "gunicorn": { "hashes": [ - "sha256:9dcc4547dbb1cb284accfb15ab5667a0e5d1881cc443e0677b4882a4067a807e", - "sha256:e0a968b5ba15f8a328fdfd7ab1fcb5af4470c28aaf7e55df02a99bc13138e6e8" + "sha256:3213aa5e8c24949e792bcacfc176fef362e7aac80b76c56f6b5122bf350722f0", + "sha256:88ec8bff1d634f98e61b9f65bc4bf3cd918a90806c6f5c48bc5603849ec81033" ], "index": "pypi", - "version": "==20.1.0" + "version": "==21.2.0" }, "h11": { "hashes": [ @@ -655,64 +656,58 @@ }, "httpcore": { "hashes": [ - "sha256:125f8375ab60036db632f34f4b627a9ad085048eef7cb7d2616fea0f739f98af", - "sha256:5581b9c12379c4288fe70f43c710d16060c10080617001e6b22a3b6dbcbefd36" + "sha256:a6f30213335e34c1ade7be6ec7c47f19f50c56db36abef1a9dfa3815b1cb3888", + "sha256:c2789b767ddddfa2a5782e3199b2b7f6894540b17b16ec26b2c4d8e103510b87" ], "markers": "python_version >= '3.7'", - "version": "==0.17.2" + "version": "==0.17.3" }, "httptools": { "hashes": [ - "sha256:0297822cea9f90a38df29f48e40b42ac3d48a28637368f3ec6d15eebefd182f9", - "sha256:1af91b3650ce518d226466f30bbba5b6376dbd3ddb1b2be8b0658c6799dd450b", - "sha256:1f90cd6fd97c9a1b7fe9215e60c3bd97336742a0857f00a4cb31547bc22560c2", - "sha256:24bb4bb8ac3882f90aa95403a1cb48465de877e2d5298ad6ddcfdebec060787d", - "sha256:295874861c173f9101960bba332429bb77ed4dcd8cdf5cee9922eb00e4f6bc09", - "sha256:3625a55886257755cb15194efbf209584754e31d336e09e2ffe0685a76cb4b60", - "sha256:3a47a34f6015dd52c9eb629c0f5a8a5193e47bf2a12d9a3194d231eaf1bc451a", - "sha256:3cb8acf8f951363b617a8420768a9f249099b92e703c052f9a51b66342eea89b", - "sha256:4b098e4bb1174096a93f48f6193e7d9aa7071506a5877da09a783509ca5fff42", - "sha256:4d9ebac23d2de960726ce45f49d70eb5466725c0087a078866043dad115f850f", - "sha256:50d4613025f15f4b11f1c54bbed4761c0020f7f921b95143ad6d58c151198142", - "sha256:5230a99e724a1bdbbf236a1b58d6e8504b912b0552721c7c6b8570925ee0ccde", - "sha256:54465401dbbec9a6a42cf737627fb0f014d50dc7365a6b6cd57753f151a86ff0", - "sha256:550059885dc9c19a072ca6d6735739d879be3b5959ec218ba3e013fd2255a11b", - "sha256:557be7fbf2bfa4a2ec65192c254e151684545ebab45eca5d50477d562c40f986", - "sha256:5b65be160adcd9de7a7e6413a4966665756e263f0d5ddeffde277ffeee0576a5", - "sha256:64eba6f168803a7469866a9c9b5263a7463fa8b7a25b35e547492aa7322036b6", - "sha256:72ad589ba5e4a87e1d404cc1cb1b5780bfcb16e2aec957b88ce15fe879cc08ca", - "sha256:7d0c1044bce274ec6711f0770fd2d5544fe392591d204c68328e60a46f88843b", - "sha256:7e5eefc58d20e4c2da82c78d91b2906f1a947ef42bd668db05f4ab4201a99f49", - "sha256:850fec36c48df5a790aa735417dca8ce7d4b48d59b3ebd6f83e88a8125cde324", - "sha256:85b392aba273566c3d5596a0a490978c085b79700814fb22bfd537d381dd230c", - "sha256:8c2a56b6aad7cc8f5551d8e04ff5a319d203f9d870398b94702300de50190f63", - "sha256:8f470c79061599a126d74385623ff4744c4e0f4a0997a353a44923c0b561ee51", - "sha256:8ffce9d81c825ac1deaa13bc9694c0562e2840a48ba21cfc9f3b4c922c16f372", - "sha256:9423a2de923820c7e82e18980b937893f4aa8251c43684fa1772e341f6e06887", - "sha256:9b571b281a19762adb3f48a7731f6842f920fa71108aff9be49888320ac3e24d", - "sha256:a04fe458a4597aa559b79c7f48fe3dceabef0f69f562daf5c5e926b153817281", - "sha256:aa47ffcf70ba6f7848349b8a6f9b481ee0f7637931d91a9860a1838bfc586901", - "sha256:bede7ee075e54b9a5bde695b4fc8f569f30185891796b2e4e09e2226801d09bd", - "sha256:c1d2357f791b12d86faced7b5736dea9ef4f5ecdc6c3f253e445ee82da579449", - "sha256:c6eeefd4435055a8ebb6c5cc36111b8591c192c56a95b45fe2af22d9881eee25", - "sha256:ca1b7becf7d9d3ccdbb2f038f665c0f4857e08e1d8481cbcc1a86a0afcfb62b2", - "sha256:e67d4f8734f8054d2c4858570cc4b233bf753f56e85217de4dfb2495904cf02e", - "sha256:e8a34e4c0ab7b1ca17b8763613783e2458e77938092c18ac919420ab8655c8c1", - "sha256:e90491a4d77d0cb82e0e7a9cb35d86284c677402e4ce7ba6b448ccc7325c5421", - "sha256:ef1616b3ba965cd68e6f759eeb5d34fbf596a79e84215eeceebf34ba3f61fdc7", - "sha256:f222e1e9d3f13b68ff8a835574eda02e67277d51631d69d7cf7f8e07df678c86", - "sha256:f5e3088f4ed33947e16fd865b8200f9cfae1144f41b64a8cf19b599508e096bc", - "sha256:f659d7a48401158c59933904040085c200b4be631cb5f23a7d561fbae593ec1f", - "sha256:fe9c766a0c35b7e3d6b6939393c8dfdd5da3ac5dec7f971ec9134f284c6c36d6" + "sha256:03bfd2ae8a2d532952ac54445a2fb2504c804135ed28b53fefaf03d3a93eb1fd", + "sha256:0781fedc610293a2716bc7fa142d4c85e6776bc59d617a807ff91246a95dea35", + "sha256:0d0b0571806a5168013b8c3d180d9f9d6997365a4212cb18ea20df18b938aa0b", + "sha256:0fb4a608c631f7dcbdf986f40af7a030521a10ba6bc3d36b28c1dc9e9035a3c0", + "sha256:22c01fcd53648162730a71c42842f73b50f989daae36534c818b3f5050b54589", + "sha256:23b09537086a5a611fad5696fc8963d67c7e7f98cb329d38ee114d588b0b74cd", + "sha256:259920bbae18740a40236807915def554132ad70af5067e562f4660b62c59b90", + "sha256:26326e0a8fe56829f3af483200d914a7cd16d8d398d14e36888b56de30bec81a", + "sha256:274bf20eeb41b0956e34f6a81f84d26ed57c84dd9253f13dcb7174b27ccd8aaf", + "sha256:33eb1d4e609c835966e969a31b1dedf5ba16b38cab356c2ce4f3e33ffa94cad3", + "sha256:35a541579bed0270d1ac10245a3e71e5beeb1903b5fbbc8d8b4d4e728d48ff1d", + "sha256:38f3cafedd6aa20ae05f81f2e616ea6f92116c8a0f8dcb79dc798df3356836e2", + "sha256:3f96d2a351b5625a9fd9133c95744e8ca06f7a4f8f0b8231e4bbaae2c485046a", + "sha256:463c3bc5ef64b9cf091be9ac0e0556199503f6e80456b790a917774a616aff6e", + "sha256:47043a6e0ea753f006a9d0dd076a8f8c99bc0ecae86a0888448eb3076c43d717", + "sha256:4e748fc0d5c4a629988ef50ac1aef99dfb5e8996583a73a717fc2cac4ab89932", + "sha256:5dcc14c090ab57b35908d4a4585ec5c0715439df07be2913405991dbb37e049d", + "sha256:65d802e7b2538a9756df5acc062300c160907b02e15ed15ba035b02bce43e89c", + "sha256:6bdc6675ec6cb79d27e0575750ac6e2b47032742e24eed011b8db73f2da9ed40", + "sha256:6e22896b42b95b3237eccc42278cd72c0df6f23247d886b7ded3163452481e38", + "sha256:721e503245d591527cddd0f6fd771d156c509e831caa7a57929b55ac91ee2b51", + "sha256:72205730bf1be875003692ca54a4a7c35fac77b4746008966061d9d41a61b0f5", + "sha256:72ec7c70bd9f95ef1083d14a755f321d181f046ca685b6358676737a5fecd26a", + "sha256:73e9d66a5a28b2d5d9fbd9e197a31edd02be310186db423b28e6052472dc8201", + "sha256:818325afee467d483bfab1647a72054246d29f9053fd17cc4b86cda09cc60339", + "sha256:82c723ed5982f8ead00f8e7605c53e55ffe47c47465d878305ebe0082b6a1755", + "sha256:82f228b88b0e8c6099a9c4757ce9fdbb8b45548074f8d0b1f0fc071e35655d1c", + "sha256:93f89975465133619aea8b1952bc6fa0e6bad22a447c6d982fc338fbb4c89649", + "sha256:9fc6e409ad38cbd68b177cd5158fc4042c796b82ca88d99ec78f07bed6c6b796", + "sha256:b0a816bb425c116a160fbc6f34cece097fd22ece15059d68932af686520966bd", + "sha256:b703d15dbe082cc23266bf5d9448e764c7cb3fcfe7cb358d79d3fd8248673ef9", + "sha256:cf8169e839a0d740f3d3c9c4fa630ac1a5aaf81641a34575ca6773ed7ce041a1", + "sha256:dea66d94e5a3f68c5e9d86e0894653b87d952e624845e0b0e3ad1c733c6cc75d", + "sha256:e41ccac9e77cd045f3e4ee0fc62cbf3d54d7d4b375431eb855561f26ee7a9ec4", + "sha256:f959e4770b3fc8ee4dbc3578fd910fab9003e093f20ac8c621452c4d62e517cb" ], - "version": "==0.5.0" + "version": "==0.6.0" }, "httpx": { "hashes": [ "sha256:06781eb9ac53cde990577af654bd990a4949de37a28bdb4a230d434f3a30b9bd", "sha256:5853a43053df830c20f8110c5e69fe44d035d850b2dfe795e196f00fdb774bdd" ], - "index": "pypi", + "markers": "python_version >= '3.7'", "version": "==0.24.1" }, "humanfriendly": { @@ -725,11 +720,11 @@ }, "humanize": { "hashes": [ - "sha256:401201aca462749773f02920139f302450cb548b70489b9b4b92be39fe3c3c50", - "sha256:5f1f22bc65911eb1a6ffe7659bd6598e33dcfeeb904eb16ee1e705a09bf75916" + "sha256:7ca0e43e870981fa684acb5b062deb307218193bca1a01f2b2676479df849b3a", + "sha256:df7c429c2d27372b249d3f26eb53b07b166b661326e0325793e0a988082e3889" ], - "markers": "python_version >= '3.7'", - "version": "==4.6.0" + "markers": "python_version >= '3.8'", + "version": "==4.7.0" }, "idna": { "hashes": [ @@ -741,11 +736,11 @@ }, "imap-tools": { "hashes": [ - "sha256:12844f210b13c522c87c46b4daef37745283f0e857b574756270f9579bd532f8", - "sha256:dc8684580468a722f9e5c00073eb72ce58cb8c888f391a7eec15f88a9001254f" + "sha256:2ec8a206eb67dad9809f6ba5a400870ae298c5584560173e87c3915b48f075e1", + "sha256:53703e9b6d5afce4cb6747b1939b42928ede86fd0d1d760f640ac78e900ad56c" ], "index": "pypi", - "version": "==1.0.0" + "version": "==1.1.0" }, "img2pdf": { "hashes": [ @@ -755,11 +750,11 @@ }, "importlib-resources": { "hashes": [ - "sha256:4be82589bf5c1d7999aedf2a45159d10cb3ca4f19b2271f8792bc8e6da7b22f6", - "sha256:7b1deeebbf351c7578e09bf2f63fa2ce8b5ffec296e0d349139d43cca061a81a" + "sha256:4cf94875a8368bd89531a756df9a9ebe1f150e0f885030b461237bc7f2d905f2", + "sha256:d952faee11004c045f785bb5636e8f885bed30dc3c940d5d42798a2a4541c185" ], "markers": "python_version < '3.9'", - "version": "==5.12.0" + "version": "==6.0.0" }, "inotify-simple": { "hashes": [ @@ -778,19 +773,19 @@ }, "joblib": { "hashes": [ - "sha256:091138ed78f800342968c523bdde947e7a305b8594b910a0fea2ab83c3c6d385", - "sha256:e1cee4a79e4af22881164f218d4311f60074197fb707e082e803b61f6d137018" + "sha256:1f937906df65329ba98013dc9692fe22a4c5e4a648112de500508b18a21b41e3", + "sha256:89cf0529520e01b3de7ac7b74a8102c90d16d54c64b5dd98cafcd14307fdf915" ], "markers": "python_version >= '3.7'", - "version": "==1.2.0" + "version": "==1.3.1" }, "kombu": { "hashes": [ - "sha256:d084ec1f96f7a7c37ba9e816823bdbc08f0fc7ddb3a5be555805e692102297d8", - "sha256:fa9be55281bb351ba9da582b2a74e3dd5015b8d075b287e4d16f0b2f25fefcc2" + "sha256:48ee589e8833126fd01ceaa08f8a2041334e9f5894e5763c8486a550454551e9", + "sha256:fbd7572d92c0bf71c112a6b45163153dea5a7b6a701ec16b568c27d0fd2370f2" ], "markers": "python_version >= '3.8'", - "version": "==5.3.0" + "version": "==5.3.1" }, "langdetect": { "hashes": [ @@ -802,86 +797,101 @@ }, "lxml": { "hashes": [ - "sha256:01d36c05f4afb8f7c20fd9ed5badca32a2029b93b1750f571ccc0b142531caf7", - "sha256:04876580c050a8c5341d706dd464ff04fd597095cc8c023252566a8826505726", - "sha256:05ca3f6abf5cf78fe053da9b1166e062ade3fa5d4f92b4ed688127ea7d7b1d03", - "sha256:090c6543d3696cbe15b4ac6e175e576bcc3f1ccfbba970061b7300b0c15a2140", - "sha256:0dc313ef231edf866912e9d8f5a042ddab56c752619e92dfd3a2c277e6a7299a", - "sha256:0f2b1e0d79180f344ff9f321327b005ca043a50ece8713de61d1cb383fb8ac05", - "sha256:13598ecfbd2e86ea7ae45ec28a2a54fb87ee9b9fdb0f6d343297d8e548392c03", - "sha256:16efd54337136e8cd72fb9485c368d91d77a47ee2d42b057564aae201257d419", - "sha256:1ab8f1f932e8f82355e75dda5413a57612c6ea448069d4fb2e217e9a4bed13d4", - "sha256:223f4232855ade399bd409331e6ca70fb5578efef22cf4069a6090acc0f53c0e", - "sha256:2455cfaeb7ac70338b3257f41e21f0724f4b5b0c0e7702da67ee6c3640835b67", - "sha256:2899456259589aa38bfb018c364d6ae7b53c5c22d8e27d0ec7609c2a1ff78b50", - "sha256:2a29ba94d065945944016b6b74e538bdb1751a1db6ffb80c9d3c2e40d6fa9894", - "sha256:2a87fa548561d2f4643c99cd13131acb607ddabb70682dcf1dff5f71f781a4bf", - "sha256:2e430cd2824f05f2d4f687701144556646bae8f249fd60aa1e4c768ba7018947", - "sha256:36c3c175d34652a35475a73762b545f4527aec044910a651d2bf50de9c3352b1", - "sha256:3818b8e2c4b5148567e1b09ce739006acfaa44ce3156f8cbbc11062994b8e8dd", - "sha256:3ab9fa9d6dc2a7f29d7affdf3edebf6ece6fb28a6d80b14c3b2fb9d39b9322c3", - "sha256:3efea981d956a6f7173b4659849f55081867cf897e719f57383698af6f618a92", - "sha256:4c8f293f14abc8fd3e8e01c5bd86e6ed0b6ef71936ded5bf10fe7a5efefbaca3", - "sha256:5344a43228767f53a9df6e5b253f8cdca7dfc7b7aeae52551958192f56d98457", - "sha256:58bfa3aa19ca4c0f28c5dde0ff56c520fbac6f0daf4fac66ed4c8d2fb7f22e74", - "sha256:5b4545b8a40478183ac06c073e81a5ce4cf01bf1734962577cf2bb569a5b3bbf", - "sha256:5f50a1c177e2fa3ee0667a5ab79fdc6b23086bc8b589d90b93b4bd17eb0e64d1", - "sha256:63da2ccc0857c311d764e7d3d90f429c252e83b52d1f8f1d1fe55be26827d1f4", - "sha256:6749649eecd6a9871cae297bffa4ee76f90b4504a2a2ab528d9ebe912b101975", - "sha256:6804daeb7ef69e7b36f76caddb85cccd63d0c56dedb47555d2fc969e2af6a1a5", - "sha256:689bb688a1db722485e4610a503e3e9210dcc20c520b45ac8f7533c837be76fe", - "sha256:699a9af7dffaf67deeae27b2112aa06b41c370d5e7633e0ee0aea2e0b6c211f7", - "sha256:6b418afe5df18233fc6b6093deb82a32895b6bb0b1155c2cdb05203f583053f1", - "sha256:76cf573e5a365e790396a5cc2b909812633409306c6531a6877c59061e42c4f2", - "sha256:7b515674acfdcadb0eb5d00d8a709868173acece5cb0be3dd165950cbfdf5409", - "sha256:7b770ed79542ed52c519119473898198761d78beb24b107acf3ad65deae61f1f", - "sha256:7d2278d59425777cfcb19735018d897ca8303abe67cc735f9f97177ceff8027f", - "sha256:7e91ee82f4199af8c43d8158024cbdff3d931df350252288f0d4ce656df7f3b5", - "sha256:821b7f59b99551c69c85a6039c65b75f5683bdc63270fec660f75da67469ca24", - "sha256:822068f85e12a6e292803e112ab876bc03ed1f03dddb80154c395f891ca6b31e", - "sha256:8340225bd5e7a701c0fa98284c849c9b9fc9238abf53a0ebd90900f25d39a4e4", - "sha256:85cabf64adec449132e55616e7ca3e1000ab449d1d0f9d7f83146ed5bdcb6d8a", - "sha256:880bbbcbe2fca64e2f4d8e04db47bcdf504936fa2b33933efd945e1b429bea8c", - "sha256:8d0b4612b66ff5d62d03bcaa043bb018f74dfea51184e53f067e6fdcba4bd8de", - "sha256:8e20cb5a47247e383cf4ff523205060991021233ebd6f924bca927fcf25cf86f", - "sha256:925073b2fe14ab9b87e73f9a5fde6ce6392da430f3004d8b72cc86f746f5163b", - "sha256:998c7c41910666d2976928c38ea96a70d1aa43be6fe502f21a651e17483a43c5", - "sha256:9b22c5c66f67ae00c0199f6055705bc3eb3fcb08d03d2ec4059a2b1b25ed48d7", - "sha256:9f102706d0ca011de571de32c3247c6476b55bb6bc65a20f682f000b07a4852a", - "sha256:a08cff61517ee26cb56f1e949cca38caabe9ea9fbb4b1e10a805dc39844b7d5c", - "sha256:a0a336d6d3e8b234a3aae3c674873d8f0e720b76bc1d9416866c41cd9500ffb9", - "sha256:a35f8b7fa99f90dd2f5dc5a9fa12332642f087a7641289ca6c40d6e1a2637d8e", - "sha256:a38486985ca49cfa574a507e7a2215c0c780fd1778bb6290c21193b7211702ab", - "sha256:a5da296eb617d18e497bcf0a5c528f5d3b18dadb3619fbdadf4ed2356ef8d941", - "sha256:a6e441a86553c310258aca15d1c05903aaf4965b23f3bc2d55f200804e005ee5", - "sha256:a82d05da00a58b8e4c0008edbc8a4b6ec5a4bc1e2ee0fb6ed157cf634ed7fa45", - "sha256:ab323679b8b3030000f2be63e22cdeea5b47ee0abd2d6a1dc0c8103ddaa56cd7", - "sha256:b1f42b6921d0e81b1bcb5e395bc091a70f41c4d4e55ba99c6da2b31626c44892", - "sha256:b23e19989c355ca854276178a0463951a653309fb8e57ce674497f2d9f208746", - "sha256:b264171e3143d842ded311b7dccd46ff9ef34247129ff5bf5066123c55c2431c", - "sha256:b26a29f0b7fc6f0897f043ca366142d2b609dc60756ee6e4e90b5f762c6adc53", - "sha256:b64d891da92e232c36976c80ed7ebb383e3f148489796d8d31a5b6a677825efe", - "sha256:b9cc34af337a97d470040f99ba4282f6e6bac88407d021688a5d585e44a23184", - "sha256:bc718cd47b765e790eecb74d044cc8d37d58562f6c314ee9484df26276d36a38", - "sha256:be7292c55101e22f2a3d4d8913944cbea71eea90792bf914add27454a13905df", - "sha256:c83203addf554215463b59f6399835201999b5e48019dc17f182ed5ad87205c9", - "sha256:c9ec3eaf616d67db0764b3bb983962b4f385a1f08304fd30c7283954e6a7869b", - "sha256:ca34efc80a29351897e18888c71c6aca4a359247c87e0b1c7ada14f0ab0c0fb2", - "sha256:ca989b91cf3a3ba28930a9fc1e9aeafc2a395448641df1f387a2d394638943b0", - "sha256:d02a5399126a53492415d4906ab0ad0375a5456cc05c3fc0fc4ca11771745cda", - "sha256:d17bc7c2ccf49c478c5bdd447594e82692c74222698cfc9b5daae7ae7e90743b", - "sha256:d5bf6545cd27aaa8a13033ce56354ed9e25ab0e4ac3b5392b763d8d04b08e0c5", - "sha256:d6b430a9938a5a5d85fc107d852262ddcd48602c120e3dbb02137c83d212b380", - "sha256:da248f93f0418a9e9d94b0080d7ebc407a9a5e6d0b57bb30db9b5cc28de1ad33", - "sha256:da4dd7c9c50c059aba52b3524f84d7de956f7fef88f0bafcf4ad7dde94a064e8", - "sha256:df0623dcf9668ad0445e0558a21211d4e9a149ea8f5666917c8eeec515f0a6d1", - "sha256:e5168986b90a8d1f2f9dc1b841467c74221bd752537b99761a93d2d981e04889", - "sha256:efa29c2fe6b4fdd32e8ef81c1528506895eca86e1d8c4657fda04c9b3786ddf9", - "sha256:f1496ea22ca2c830cbcbd473de8f114a320da308438ae65abad6bab7867fe38f", - "sha256:f49e52d174375a7def9915c9f06ec4e569d235ad428f70751765f48d5926678c" + "sha256:05186a0f1346ae12553d66df1cfce6f251589fea3ad3da4f3ef4e34b2d58c6a3", + "sha256:075b731ddd9e7f68ad24c635374211376aa05a281673ede86cbe1d1b3455279d", + "sha256:081d32421db5df44c41b7f08a334a090a545c54ba977e47fd7cc2deece78809a", + "sha256:0a3d3487f07c1d7f150894c238299934a2a074ef590b583103a45002035be120", + "sha256:0bfd0767c5c1de2551a120673b72e5d4b628737cb05414f03c3277bf9bed3305", + "sha256:0c0850c8b02c298d3c7006b23e98249515ac57430e16a166873fc47a5d549287", + "sha256:0e2cb47860da1f7e9a5256254b74ae331687b9672dfa780eed355c4c9c3dbd23", + "sha256:120fa9349a24c7043854c53cae8cec227e1f79195a7493e09e0c12e29f918e52", + "sha256:1247694b26342a7bf47c02e513d32225ededd18045264d40758abeb3c838a51f", + "sha256:141f1d1a9b663c679dc524af3ea1773e618907e96075262726c7612c02b149a4", + "sha256:14e019fd83b831b2e61baed40cab76222139926b1fb5ed0e79225bc0cae14584", + "sha256:1509dd12b773c02acd154582088820893109f6ca27ef7291b003d0e81666109f", + "sha256:17a753023436a18e27dd7769e798ce302963c236bc4114ceee5b25c18c52c693", + "sha256:1e224d5755dba2f4a9498e150c43792392ac9b5380aa1b845f98a1618c94eeef", + "sha256:1f447ea5429b54f9582d4b955f5f1985f278ce5cf169f72eea8afd9502973dd5", + "sha256:23eed6d7b1a3336ad92d8e39d4bfe09073c31bfe502f20ca5116b2a334f8ec02", + "sha256:25f32acefac14ef7bd53e4218fe93b804ef6f6b92ffdb4322bb6d49d94cad2bc", + "sha256:2c74524e179f2ad6d2a4f7caf70e2d96639c0954c943ad601a9e146c76408ed7", + "sha256:303bf1edce6ced16bf67a18a1cf8339d0db79577eec5d9a6d4a80f0fb10aa2da", + "sha256:3331bece23c9ee066e0fb3f96c61322b9e0f54d775fccefff4c38ca488de283a", + "sha256:3e9bdd30efde2b9ccfa9cb5768ba04fe71b018a25ea093379c857c9dad262c40", + "sha256:411007c0d88188d9f621b11d252cce90c4a2d1a49db6c068e3c16422f306eab8", + "sha256:42871176e7896d5d45138f6d28751053c711ed4d48d8e30b498da155af39aebd", + "sha256:46f409a2d60f634fe550f7133ed30ad5321ae2e6630f13657fb9479506b00601", + "sha256:48628bd53a426c9eb9bc066a923acaa0878d1e86129fd5359aee99285f4eed9c", + "sha256:48d6ed886b343d11493129e019da91d4039826794a3e3027321c56d9e71505be", + "sha256:4930be26af26ac545c3dffb662521d4e6268352866956672231887d18f0eaab2", + "sha256:4aec80cde9197340bc353d2768e2a75f5f60bacda2bab72ab1dc499589b3878c", + "sha256:4c28a9144688aef80d6ea666c809b4b0e50010a2aca784c97f5e6bf143d9f129", + "sha256:4d2d1edbca80b510443f51afd8496be95529db04a509bc8faee49c7b0fb6d2cc", + "sha256:4dd9a263e845a72eacb60d12401e37c616438ea2e5442885f65082c276dfb2b2", + "sha256:4f1026bc732b6a7f96369f7bfe1a4f2290fb34dce00d8644bc3036fb351a4ca1", + "sha256:4fb960a632a49f2f089d522f70496640fdf1218f1243889da3822e0a9f5f3ba7", + "sha256:50670615eaf97227d5dc60de2dc99fb134a7130d310d783314e7724bf163f75d", + "sha256:50baa9c1c47efcaef189f31e3d00d697c6d4afda5c3cde0302d063492ff9b477", + "sha256:53ace1c1fd5a74ef662f844a0413446c0629d151055340e9893da958a374f70d", + "sha256:5515edd2a6d1a5a70bfcdee23b42ec33425e405c5b351478ab7dc9347228f96e", + "sha256:56dc1f1ebccc656d1b3ed288f11e27172a01503fc016bcabdcbc0978b19352b7", + "sha256:578695735c5a3f51569810dfebd05dd6f888147a34f0f98d4bb27e92b76e05c2", + "sha256:57aba1bbdf450b726d58b2aea5fe47c7875f5afb2c4a23784ed78f19a0462574", + "sha256:57d6ba0ca2b0c462f339640d22882acc711de224d769edf29962b09f77129cbf", + "sha256:5c245b783db29c4e4fbbbfc9c5a78be496c9fea25517f90606aa1f6b2b3d5f7b", + "sha256:5c31c7462abdf8f2ac0577d9f05279727e698f97ecbb02f17939ea99ae8daa98", + "sha256:64f479d719dc9f4c813ad9bb6b28f8390360660b73b2e4beb4cb0ae7104f1c12", + "sha256:65299ea57d82fb91c7f019300d24050c4ddeb7c5a190e076b5f48a2b43d19c42", + "sha256:6689a3d7fd13dc687e9102a27e98ef33730ac4fe37795d5036d18b4d527abd35", + "sha256:690dafd0b187ed38583a648076865d8c229661ed20e48f2335d68e2cf7dc829d", + "sha256:6fc3c450eaa0b56f815c7b62f2b7fba7266c4779adcf1cece9e6deb1de7305ce", + "sha256:704f61ba8c1283c71b16135caf697557f5ecf3e74d9e453233e4771d68a1f42d", + "sha256:71c52db65e4b56b8ddc5bb89fb2e66c558ed9d1a74a45ceb7dcb20c191c3df2f", + "sha256:71d66ee82e7417828af6ecd7db817913cb0cf9d4e61aa0ac1fde0583d84358db", + "sha256:7d298a1bd60c067ea75d9f684f5f3992c9d6766fadbc0bcedd39750bf344c2f4", + "sha256:8b77946fd508cbf0fccd8e400a7f71d4ac0e1595812e66025bac475a8e811694", + "sha256:8d7e43bd40f65f7d97ad8ef5c9b1778943d02f04febef12def25f7583d19baac", + "sha256:8df133a2ea5e74eef5e8fc6f19b9e085f758768a16e9877a60aec455ed2609b2", + "sha256:8ed74706b26ad100433da4b9d807eae371efaa266ffc3e9191ea436087a9d6a7", + "sha256:92af161ecbdb2883c4593d5ed4815ea71b31fafd7fd05789b23100d081ecac96", + "sha256:97047f0d25cd4bcae81f9ec9dc290ca3e15927c192df17331b53bebe0e3ff96d", + "sha256:9719fe17307a9e814580af1f5c6e05ca593b12fb7e44fe62450a5384dbf61b4b", + "sha256:9767e79108424fb6c3edf8f81e6730666a50feb01a328f4a016464a5893f835a", + "sha256:9a92d3faef50658dd2c5470af249985782bf754c4e18e15afb67d3ab06233f13", + "sha256:9bb6ad405121241e99a86efff22d3ef469024ce22875a7ae045896ad23ba2340", + "sha256:9e28c51fa0ce5674be9f560c6761c1b441631901993f76700b1b30ca6c8378d6", + "sha256:aca086dc5f9ef98c512bac8efea4483eb84abbf926eaeedf7b91479feb092458", + "sha256:ae8b9c6deb1e634ba4f1930eb67ef6e6bf6a44b6eb5ad605642b2d6d5ed9ce3c", + "sha256:b0a545b46b526d418eb91754565ba5b63b1c0b12f9bd2f808c852d9b4b2f9b5c", + "sha256:b4e4bc18382088514ebde9328da057775055940a1f2e18f6ad2d78aa0f3ec5b9", + "sha256:b6420a005548ad52154c8ceab4a1290ff78d757f9e5cbc68f8c77089acd3c432", + "sha256:b86164d2cff4d3aaa1f04a14685cbc072efd0b4f99ca5708b2ad1b9b5988a991", + "sha256:bb3bb49c7a6ad9d981d734ef7c7193bc349ac338776a0360cc671eaee89bcf69", + "sha256:bef4e656f7d98aaa3486d2627e7d2df1157d7e88e7efd43a65aa5dd4714916cf", + "sha256:c0781a98ff5e6586926293e59480b64ddd46282953203c76ae15dbbbf302e8bb", + "sha256:c2006f5c8d28dee289f7020f721354362fa304acbaaf9745751ac4006650254b", + "sha256:c41bfca0bd3532d53d16fd34d20806d5c2b1ace22a2f2e4c0008570bf2c58833", + "sha256:cd47b4a0d41d2afa3e58e5bf1f62069255aa2fd6ff5ee41604418ca925911d76", + "sha256:cdb650fc86227eba20de1a29d4b2c1bfe139dc75a0669270033cb2ea3d391b85", + "sha256:cef2502e7e8a96fe5ad686d60b49e1ab03e438bd9123987994528febd569868e", + "sha256:d27be7405547d1f958b60837dc4c1007da90b8b23f54ba1f8b728c78fdb19d50", + "sha256:d37017287a7adb6ab77e1c5bee9bcf9660f90ff445042b790402a654d2ad81d8", + "sha256:d3ff32724f98fbbbfa9f49d82852b159e9784d6094983d9a8b7f2ddaebb063d4", + "sha256:d73d8ecf8ecf10a3bd007f2192725a34bd62898e8da27eb9d32a58084f93962b", + "sha256:dd708cf4ee4408cf46a48b108fb9427bfa00b9b85812a9262b5c668af2533ea5", + "sha256:e3cd95e10c2610c360154afdc2f1480aea394f4a4f1ea0a5eacce49640c9b190", + "sha256:e4da8ca0c0c0aea88fd46be8e44bd49716772358d648cce45fe387f7b92374a7", + "sha256:eadfbbbfb41b44034a4c757fd5d70baccd43296fb894dba0295606a7cf3124aa", + "sha256:ed667f49b11360951e201453fc3967344d0d0263aa415e1619e85ae7fd17b4e0", + "sha256:f3df3db1d336b9356dd3112eae5f5c2b8b377f3bc826848567f10bfddfee77e9", + "sha256:f6bdac493b949141b733c5345b6ba8f87a226029cbabc7e9e121a413e49441e0", + "sha256:fbf521479bcac1e25a663df882c46a641a9bff6b56dc8b0fafaebd2f66fb231b", + "sha256:fc9b106a1bf918db68619fdcd6d5ad4f972fdd19c01d19bdb6bf63f3589a9ec5", + "sha256:fcdd00edfd0a3001e0181eab3e63bd5c74ad3e67152c84f93f13769a40e073a7", + "sha256:fe4bda6bd4340caa6e5cf95e73f8fea5c4bfc55763dd42f1b50a94c1b4a2fbd4" ], "markers": "python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3, 3.4'", - "version": "==4.9.2" + "version": "==4.9.3" }, "msgpack": { "hashes": [ @@ -953,16 +963,16 @@ }, "mysqlclient": { "hashes": [ - "sha256:0d1cd3a5a4d28c222fa199002810e8146cffd821410b67851af4cc80aeccd97c", - "sha256:828757e419fb11dd6c5ed2576ec92c3efaa93a0f7c39e263586d1ee779c3d782", - "sha256:996924f3483fd36a34a5812210c69e71dea5a3d5978d01199b78b7f6d485c855", - "sha256:b355c8b5a7d58f2e909acdbb050858390ee1b0e13672ae759e5e784110022994", - "sha256:c1ed71bd6244993b526113cca3df66428609f90e4652f37eb51c33496d478b37", - "sha256:c812b67e90082a840efb82a8978369e6e69fc62ce1bda4ca8f3084a9d862308b", - "sha256:dea88c8d3f5a5d9293dfe7f087c16dd350ceb175f2f6631c9cf4caf3e19b7a96" + "sha256:004fe1d30d2c2ff8072f8ea513bcec235fd9b896f70dad369461d0ad7e570e98", + "sha256:04368445f9c487d8abb7a878e3d23e923e6072c04a6c320f9e0dc8a82efba14e", + "sha256:530ece9995a36cadb6211b9787f0c9e05cdab6702549bdb4236af5e9b535ed6a", + "sha256:5670679ff1be1cc3fef0fa81bf39f0cd70605ba121141050f02743eb878ac114", + "sha256:68837b6bb23170acffb43ae411e47533a560b6360c06dac39aa55700972c93b2", + "sha256:955dba905a7443ce4788c63fdb9f8d688316260cf60b20ff51ac3b1c77616ede", + "sha256:9c6b142836c7dba4f723bf9c93cc46b6e5081d65b2af807f400dda9eb85a16d0" ], "index": "pypi", - "version": "==2.1.1" + "version": "==2.2.0" }, "nltk": { "hashes": [ @@ -974,45 +984,45 @@ }, "numpy": { "hashes": [ - "sha256:0ec87a7084caa559c36e0a2309e4ecb1baa03b687201d0a847c8b0ed476a7187", - "sha256:1a7d6acc2e7524c9955e5c903160aa4ea083736fde7e91276b0e5d98e6332812", - "sha256:202de8f38fc4a45a3eea4b63e2f376e5f2dc64ef0fa692838e31a808520efaf7", - "sha256:210461d87fb02a84ef243cac5e814aad2b7f4be953b32cb53327bb49fd77fbb4", - "sha256:2d926b52ba1367f9acb76b0df6ed21f0b16a1ad87c6720a1121674e5cf63e2b6", - "sha256:352ee00c7f8387b44d19f4cada524586f07379c0d49270f87233983bc5087ca0", - "sha256:35400e6a8d102fd07c71ed7dcadd9eb62ee9a6e84ec159bd48c28235bbb0f8e4", - "sha256:3c1104d3c036fb81ab923f507536daedc718d0ad5a8707c6061cdfd6d184e570", - "sha256:4719d5aefb5189f50887773699eaf94e7d1e02bf36c1a9d353d9f46703758ca4", - "sha256:4749e053a29364d3452c034827102ee100986903263e89884922ef01a0a6fd2f", - "sha256:5342cf6aad47943286afa6f1609cad9b4266a05e7f2ec408e2cf7aea7ff69d80", - "sha256:56e48aec79ae238f6e4395886b5eaed058abb7231fb3361ddd7bfdf4eed54289", - "sha256:76e3f4e85fc5d4fd311f6e9b794d0c00e7002ec122be271f2019d63376f1d385", - "sha256:7776ea65423ca6a15255ba1872d82d207bd1e09f6d0894ee4a64678dd2204078", - "sha256:784c6da1a07818491b0ffd63c6bbe5a33deaa0e25a20e1b3ea20cf0e43f8046c", - "sha256:8535303847b89aa6b0f00aa1dc62867b5a32923e4d1681a35b5eef2d9591a463", - "sha256:9a7721ec204d3a237225db3e194c25268faf92e19338a35f3a224469cb6039a3", - "sha256:a1d3c026f57ceaad42f8231305d4653d5f05dc6332a730ae5c0bea3513de0950", - "sha256:ab344f1bf21f140adab8e47fdbc7c35a477dc01408791f8ba00d018dd0bc5155", - "sha256:ab5f23af8c16022663a652d3b25dcdc272ac3f83c3af4c02eb8b824e6b3ab9d7", - "sha256:ae8d0be48d1b6ed82588934aaaa179875e7dc4f3d84da18d7eae6eb3f06c242c", - "sha256:c91c4afd8abc3908e00a44b2672718905b8611503f7ff87390cc0ac3423fb096", - "sha256:d5036197ecae68d7f491fcdb4df90082b0d4960ca6599ba2659957aafced7c17", - "sha256:d6cc757de514c00b24ae8cf5c876af2a7c3df189028d68c0cb4eaa9cd5afc2bf", - "sha256:d933fabd8f6a319e8530d0de4fcc2e6a61917e0b0c271fded460032db42a0fe4", - "sha256:ea8282b9bcfe2b5e7d491d0bf7f3e2da29700cec05b49e64d6246923329f2b02", - "sha256:ecde0f8adef7dfdec993fd54b0f78183051b6580f606111a6d789cd14c61ea0c", - "sha256:f21c442fdd2805e91799fbe044a7b999b8571bb0ab0f7850d0cb9641a687092b" + "sha256:04640dab83f7c6c85abf9cd729c5b65f1ebd0ccf9de90b270cd61935eef0197f", + "sha256:1452241c290f3e2a312c137a9999cdbf63f78864d63c79039bda65ee86943f61", + "sha256:222e40d0e2548690405b0b3c7b21d1169117391c2e82c378467ef9ab4c8f0da7", + "sha256:2541312fbf09977f3b3ad449c4e5f4bb55d0dbf79226d7724211acc905049400", + "sha256:31f13e25b4e304632a4619d0e0777662c2ffea99fcae2029556b17d8ff958aef", + "sha256:4602244f345453db537be5314d3983dbf5834a9701b7723ec28923e2889e0bb2", + "sha256:4979217d7de511a8d57f4b4b5b2b965f707768440c17cb70fbf254c4b225238d", + "sha256:4c21decb6ea94057331e111a5bed9a79d335658c27ce2adb580fb4d54f2ad9bc", + "sha256:6620c0acd41dbcb368610bb2f4d83145674040025e5536954782467100aa8835", + "sha256:692f2e0f55794943c5bfff12b3f56f99af76f902fc47487bdfe97856de51a706", + "sha256:7215847ce88a85ce39baf9e89070cb860c98fdddacbaa6c0da3ffb31b3350bd5", + "sha256:79fc682a374c4a8ed08b331bef9c5f582585d1048fa6d80bc6c35bc384eee9b4", + "sha256:7ffe43c74893dbf38c2b0a1f5428760a1a9c98285553c89e12d70a96a7f3a4d6", + "sha256:80f5e3a4e498641401868df4208b74581206afbee7cf7b8329daae82676d9463", + "sha256:95f7ac6540e95bc440ad77f56e520da5bf877f87dca58bd095288dce8940532a", + "sha256:9667575fb6d13c95f1b36aca12c5ee3356bf001b714fc354eb5465ce1609e62f", + "sha256:a5425b114831d1e77e4b5d812b69d11d962e104095a5b9c3b641a218abcc050e", + "sha256:b4bea75e47d9586d31e892a7401f76e909712a0fd510f58f5337bea9572c571e", + "sha256:b7b1fc9864d7d39e28f41d089bfd6353cb5f27ecd9905348c24187a768c79694", + "sha256:befe2bf740fd8373cf56149a5c23a0f601e82869598d41f8e188a0e9869926f8", + "sha256:c0bfb52d2169d58c1cdb8cc1f16989101639b34c7d3ce60ed70b19c63eba0b64", + "sha256:d11efb4dbecbdf22508d55e48d9c8384db795e1b7b51ea735289ff96613ff74d", + "sha256:dd80e219fd4c71fc3699fc1dadac5dcf4fd882bfc6f7ec53d30fa197b8ee22dc", + "sha256:e2926dac25b313635e4d6cf4dc4e51c8c0ebfed60b801c799ffc4c32bf3d1254", + "sha256:e98f220aa76ca2a977fe435f5b04d7b3470c0a2e6312907b37ba6068f26787f2", + "sha256:ed094d4f0c177b1b8e7aa9cba7d6ceed51c0e569a5318ac0ca9a090680a6a1b1", + "sha256:f136bab9c2cfd8da131132c2cf6cc27331dd6fae65f95f69dcd4ae3c3639c810", + "sha256:f3a86ed21e4f87050382c7bc96571755193c4c1392490744ac73d660e8f564a9" ], "markers": "python_version >= '3.8'", - "version": "==1.24.3" + "version": "==1.24.4" }, "ocrmypdf": { "hashes": [ - "sha256:e4fa9f24a92ac350092be1579da89923a1a9770d89979b1f92f426f1281f3fa6", - "sha256:ebe0fb54e3174b49e53f823a27b191fa7a53862c94b6ee3c005f8a6528a4126c" + "sha256:4e4e6b5d95b8f43436fa177fff093fa1fc1bb1d49bad2945bc1a47c9e08935b7", + "sha256:faa221f53771a6679ad541307a0e66e11d298a33a2840cf1908a6a46f8315ede" ], "index": "pypi", - "version": "==14.2.1" + "version": "==14.3.0" }, "packaging": { "hashes": [ @@ -1024,11 +1034,11 @@ }, "pathvalidate": { "hashes": [ - "sha256:cfca1886f3cd8862b10bce18a87f4dc02d6418399e539ede2b010dc8588991ce", - "sha256:dcdb89f0bde6fd5eba6f2202a7863f657afbc810ef32f60e9258d58ede8155ac" + "sha256:426970226e24199fd90d93995d223c1e28bda967cdf4370755a14cdf72a2a8ee", + "sha256:912fd1d2e1a2a6a6f98da36a91f21ed86746473810ff625b9c34f3d06c0caa1d" ], "index": "pypi", - "version": "==3.0.0" + "version": "==3.1.0" }, "pdf2image": { "hashes": [ @@ -1159,11 +1169,11 @@ }, "pluggy": { "hashes": [ - "sha256:4224373bacce55f955a878bf9cfa763c1e360858e330072059e10bad68531159", - "sha256:74134bbf457f031a36d68416e1509f34bd5ccc019f0bcc952c7b909d06b37bd3" + "sha256:c2fd55a7d7a3863cba1a013e4e2414658b1d07b6bc57b3919e0c63c9abb99849", + "sha256:d12f0c4b579b15f5e054301bb226ee85eeeba08ffec228092f8defbaa3a4c4b3" ], - "markers": "python_version >= '3.6'", - "version": "==1.0.0" + "markers": "python_version >= '3.7'", + "version": "==1.2.0" }, "portalocker": { "hashes": [ @@ -1175,19 +1185,19 @@ }, "prometheus-client": { "hashes": [ - "sha256:9c3b26f1535945e85b8934fb374678d263137b78ef85f305b1156c7c881cd11b", - "sha256:a77b708cf083f4d1a3fb3ce5c95b4afa32b9c521ae363354a4a910204ea095ce" + "sha256:21e674f39831ae3f8acde238afd9a27a37d0d2fb5a28ea094f0ce25d2cbf2091", + "sha256:e537f37160f6807b8202a6fc4764cdd19bac5480ddd3e0d463c3002b34462101" ], "markers": "python_version >= '3.6'", - "version": "==0.17.0" + "version": "==0.17.1" }, "prompt-toolkit": { "hashes": [ - "sha256:23ac5d50538a9a38c8bde05fecb47d0b403ecd0662857a86f886f798563d5b9b", - "sha256:45ea77a2f7c60418850331366c81cf6b5b9cf4c7fd34616f733c5427e6abbb1f" + "sha256:04505ade687dc26dc4284b1ad19a83be2f2afe83e7a828ace0c72f3a1df72aac", + "sha256:9dffbe1d8acf91e3de75f3b544e4842382fc06c6babe903ac9acb74dc6e08d88" ], "markers": "python_full_version >= '3.7.0'", - "version": "==3.0.38" + "version": "==3.0.39" }, "psycopg2": { "hashes": [ @@ -1233,11 +1243,11 @@ }, "python-gnupg": { "hashes": [ - "sha256:345723a03e67b82aba0ea8ae2328b2e4a3906fbe2c18c4082285c3b01068f270", - "sha256:70758e387fc0e0c4badbcb394f61acbe68b34970a8fed7e0f7c89469fe17912a" + "sha256:5674bad4e93876c0b0d3197e314d7f942d39018bf31e2b833f6788a6813c3fb8", + "sha256:bf9b2d9032ef38139b7d64184176cd0b293eaeae6e4f93f50e304c7051174482" ], "index": "pypi", - "version": "==0.5.0" + "version": "==0.5.1" }, "python-ipware": { "hashes": [ @@ -1264,48 +1274,48 @@ }, "pyyaml": { "hashes": [ - "sha256:01b45c0191e6d66c470b6cf1b9531a771a83c1c4208272ead47a3ae4f2f603bf", - "sha256:0283c35a6a9fbf047493e3a0ce8d79ef5030852c51e9d911a27badfde0605293", - "sha256:055d937d65826939cb044fc8c9b08889e8c743fdc6a32b33e2390f66013e449b", - "sha256:07751360502caac1c067a8132d150cf3d61339af5691fe9e87803040dbc5db57", - "sha256:0b4624f379dab24d3725ffde76559cff63d9ec94e1736b556dacdfebe5ab6d4b", - "sha256:0ce82d761c532fe4ec3f87fc45688bdd3a4c1dc5e0b4a19814b9009a29baefd4", - "sha256:1e4747bc279b4f613a09eb64bba2ba602d8a6664c6ce6396a4d0cd413a50ce07", - "sha256:213c60cd50106436cc818accf5baa1aba61c0189ff610f64f4a3e8c6726218ba", - "sha256:231710d57adfd809ef5d34183b8ed1eeae3f76459c18fb4a0b373ad56bedcdd9", - "sha256:277a0ef2981ca40581a47093e9e2d13b3f1fbbeffae064c1d21bfceba2030287", - "sha256:2cd5df3de48857ed0544b34e2d40e9fac445930039f3cfe4bcc592a1f836d513", - "sha256:40527857252b61eacd1d9af500c3337ba8deb8fc298940291486c465c8b46ec0", - "sha256:432557aa2c09802be39460360ddffd48156e30721f5e8d917f01d31694216782", - "sha256:473f9edb243cb1935ab5a084eb238d842fb8f404ed2193a915d1784b5a6b5fc0", - "sha256:48c346915c114f5fdb3ead70312bd042a953a8ce5c7106d5bfb1a5254e47da92", - "sha256:50602afada6d6cbfad699b0c7bb50d5ccffa7e46a3d738092afddc1f9758427f", - "sha256:68fb519c14306fec9720a2a5b45bc9f0c8d1b9c72adf45c37baedfcd949c35a2", - "sha256:77f396e6ef4c73fdc33a9157446466f1cff553d979bd00ecb64385760c6babdc", - "sha256:81957921f441d50af23654aa6c5e5eaf9b06aba7f0a19c18a538dc7ef291c5a1", - "sha256:819b3830a1543db06c4d4b865e70ded25be52a2e0631ccd2f6a47a2822f2fd7c", - "sha256:897b80890765f037df3403d22bab41627ca8811ae55e9a722fd0392850ec4d86", - "sha256:98c4d36e99714e55cfbaaee6dd5badbc9a1ec339ebfc3b1f52e293aee6bb71a4", - "sha256:9df7ed3b3d2e0ecfe09e14741b857df43adb5a3ddadc919a2d94fbdf78fea53c", - "sha256:9fa600030013c4de8165339db93d182b9431076eb98eb40ee068700c9c813e34", - "sha256:a80a78046a72361de73f8f395f1f1e49f956c6be882eed58505a15f3e430962b", - "sha256:afa17f5bc4d1b10afd4466fd3a44dc0e245382deca5b3c353d8b757f9e3ecb8d", - "sha256:b3d267842bf12586ba6c734f89d1f5b871df0273157918b0ccefa29deb05c21c", - "sha256:b5b9eccad747aabaaffbc6064800670f0c297e52c12754eb1d976c57e4f74dcb", - "sha256:bfaef573a63ba8923503d27530362590ff4f576c626d86a9fed95822a8255fd7", - "sha256:c5687b8d43cf58545ade1fe3e055f70eac7a5a1a0bf42824308d868289a95737", - "sha256:cba8c411ef271aa037d7357a2bc8f9ee8b58b9965831d9e51baf703280dc73d3", - "sha256:d15a181d1ecd0d4270dc32edb46f7cb7733c7c508857278d3d378d14d606db2d", - "sha256:d4b0ba9512519522b118090257be113b9468d804b19d63c71dbcf4a48fa32358", - "sha256:d4db7c7aef085872ef65a8fd7d6d09a14ae91f691dec3e87ee5ee0539d516f53", - "sha256:d4eccecf9adf6fbcc6861a38015c2a64f38b9d94838ac1810a9023a0609e1b78", - "sha256:d67d839ede4ed1b28a4e8909735fc992a923cdb84e618544973d7dfc71540803", - "sha256:daf496c58a8c52083df09b80c860005194014c3698698d1a57cbcfa182142a3a", - "sha256:dbad0e9d368bb989f4515da330b88a057617d16b6a8245084f1b05400f24609f", - "sha256:e61ceaab6f49fb8bdfaa0f92c4b57bcfbea54c09277b1b4f7ac376bfb7a7c174", - "sha256:f84fbc98b019fef2ee9a1cb3ce93e3187a6df0b2538a651bfb890254ba9f90b5" + "sha256:062582fca9fabdd2c8b54a3ef1c978d786e0f6b3a1510e0ac93ef59e0ddae2bc", + "sha256:1635fd110e8d85d55237ab316b5b011de701ea0f29d07611174a1b42f1444741", + "sha256:184c5108a2aca3c5b3d3bf9395d50893a7ab82a38004c8f61c258d4428e80206", + "sha256:18aeb1bf9a78867dc38b259769503436b7c72f7a1f1f4c93ff9a17de54319b27", + "sha256:1d4c7e777c441b20e32f52bd377e0c409713e8bb1386e1099c2415f26e479595", + "sha256:1e2722cc9fbb45d9b87631ac70924c11d3a401b2d7f410cc0e3bbf249f2dca62", + "sha256:1fe35611261b29bd1de0070f0b2f47cb6ff71fa6595c077e42bd0c419fa27b98", + "sha256:28c119d996beec18c05208a8bd78cbe4007878c6dd15091efb73a30e90539696", + "sha256:42f8152b8dbc4fe7d96729ec2b99c7097d656dc1213a3229ca5383f973a5ed6d", + "sha256:4fb147e7a67ef577a588a0e2c17b6db51dda102c71de36f8549b6816a96e1867", + "sha256:50550eb667afee136e9a77d6dc71ae76a44df8b3e51e41b77f6de2932bfe0f47", + "sha256:510c9deebc5c0225e8c96813043e62b680ba2f9c50a08d3724c7f28a747d1486", + "sha256:5773183b6446b2c99bb77e77595dd486303b4faab2b086e7b17bc6bef28865f6", + "sha256:596106435fa6ad000c2991a98fa58eeb8656ef2325d7e158344fb33864ed87e3", + "sha256:6965a7bc3cf88e5a1c3bd2e0b5c22f8d677dc88a455344035f03399034eb3007", + "sha256:69b023b2b4daa7548bcfbd4aa3da05b3a74b772db9e23b982788168117739938", + "sha256:704219a11b772aea0d8ecd7058d0082713c3562b4e271b849ad7dc4a5c90c13c", + "sha256:7e07cbde391ba96ab58e532ff4803f79c4129397514e1413a7dc761ccd755735", + "sha256:81e0b275a9ecc9c0c0c07b4b90ba548307583c125f54d5b6946cfee6360c733d", + "sha256:9046c58c4395dff28dd494285c82ba00b546adfc7ef001486fbf0324bc174fba", + "sha256:9eb6caa9a297fc2c2fb8862bc5370d0303ddba53ba97e71f08023b6cd73d16a8", + "sha256:a0cd17c15d3bb3fa06978b4e8958dcdc6e0174ccea823003a106c7d4d7899ac5", + "sha256:afd7e57eddb1a54f0f1a974bc4391af8bcce0b444685d936840f125cf046d5bd", + "sha256:b1275ad35a5d18c62a7220633c913e1b42d44b46ee12554e5fd39c70a243d6a3", + "sha256:b786eecbdf8499b9ca1d697215862083bd6d2a99965554781d0d8d1ad31e13a0", + "sha256:ba336e390cd8e4d1739f42dfe9bb83a3cc2e80f567d8805e11b46f4a943f5515", + "sha256:baa90d3f661d43131ca170712d903e6295d1f7a0f595074f151c0aed377c9b9c", + "sha256:bc1bf2925a1ecd43da378f4db9e4f799775d6367bdb94671027b73b393a7c42c", + "sha256:bd4af7373a854424dabd882decdc5579653d7868b8fb26dc7d0e99f823aa5924", + "sha256:bf07ee2fef7014951eeb99f56f39c9bb4af143d8aa3c21b1677805985307da34", + "sha256:bfdf460b1736c775f2ba9f6a92bca30bc2095067b8a9d77876d1fad6cc3b4a43", + "sha256:c8098ddcc2a85b61647b2590f825f3db38891662cfc2fc776415143f599bb859", + "sha256:d2b04aac4d386b172d5b9692e2d2da8de7bfb6c387fa4f801fbf6fb2e6ba4673", + "sha256:d858aa552c999bc8a8d57426ed01e40bef403cd8ccdd0fc5f6f04a00414cac2a", + "sha256:f003ed9ad21d6a4713f0a9b5a7a0a79e08dd0f221aff4525a2be4c346ee60aab", + "sha256:f22ac1c3cac4dbc50079e965eba2c1058622631e526bd9afd45fedd49ba781fa", + "sha256:faca3bdcf85b2fc05d06ff3fbc1f83e1391b3e724afa3feba7d13eeab355484c", + "sha256:fca0e3a251908a499833aa292323f32437106001d436eca0e6e7833256674585", + "sha256:fd1592b3fdf65fff2ad0004b5e363300ef59ced41c2e6b3a99d4089fa8c5435d", + "sha256:fd66fc5d0da6d9815ba2cebeb4205f95818ff4b79c3ebe268e75d961704af52f" ], - "version": "==6.0" + "version": "==6.0.1" }, "pyzbar": { "hashes": [ @@ -1318,112 +1328,112 @@ }, "rapidfuzz": { "hashes": [ - "sha256:0843c53d54d5b7d6122d8f1d7574d8c91a7aacc5c316f74d6e33d98aec82949d", - "sha256:086a2d84c2e497e3ab160ccf164e319bca874d9383d008fcadf91ede8ac7997f", - "sha256:09a6f5cd9f1282da49b8d0747c40f3fea2d64ab5e4c2cc2295baf87ff7a0d062", - "sha256:0de229cb613be060580c71c1674acbde57921c7ed33d7a726e071a2562924113", - "sha256:10313075642a9f1f948d356f4f0803ae28a496d7967b466b9cae1a4be8aa4df3", - "sha256:10f56af1d46fbeaaa0dc50901c2dc439c7a455cfdac2f1acf6cffeb65ae82c48", - "sha256:1465ea085154378e69bf4bc5e27bdac5c94684416882ace31865232adc9239a2", - "sha256:15260263a0c7bffac934a53b6622d77e06e10929ee4d2e62ac6f70c13988f351", - "sha256:167dbce2da6bb5b73d43e53434c5a9d7d1214b658b315420e44044782f4c482b", - "sha256:16c506bac2e0a6f6581b334a7802c2f0d8343ec1d77e5cf9452c33d6219abef8", - "sha256:17b017f9e1b88dfd6d9b03170ef8e86477de0d9d37fbfcbe72ca070cacbe1b65", - "sha256:17e4cbe6632aae7c35101c4b7c498e83f6eacf61be0def4ff98167df30dc69ca", - "sha256:25eea5c8006b6c8747ca204675c9e939f3c4d27167fb43b2aa211443d34f9abd", - "sha256:32a5c47b5153f25eb512dbb91f9850225d2dcfb3404a1c48406726c7732b0726", - "sha256:351d253fdee62d6d0e80c75f0505accc1ce8cc73a50779c60986ef21c92f20f9", - "sha256:362e366e79fcc9a8866b41f20ef4d2987a06f8b134096e659594c059aa8a6d88", - "sha256:39c7d0dbd77a7f28ff85a1dff2afb2ed73e5cd81cca3f654450ed339a271c0ab", - "sha256:3b3e953dcef0302eeb4fe8c7c4907e50d175199fc07da05ad6bd1d8d141ff138", - "sha256:3f2cd9a3760080876fc59edb26926e51d6db44dea65e85f1eb04aa5f58c3bc41", - "sha256:4019def8a18bc867ac61f08a542bf474a7a9b3f662f5d5cd169c9135866562f5", - "sha256:408007b4bc5a0a0cb9bfcdcc8cffa9b71fec6ee53ccdf9c26b57539f7e264ab5", - "sha256:49d900da023eeb3bfbe9feee126312eb9fd0458129aa5a581e4d8d8bf4483d14", - "sha256:4a64ddfb7084b678da7778c1263aee2baae5a2ca55ec5589a022defc38103eb1", - "sha256:4e951c874a0e5b375b2af9b5f264eefc679c0685c166ee0641e703ef0795509b", - "sha256:51bb8f7aa4fe45618e75cdccf08491c752a7f137ffbf7d3afd1809791ac8c326", - "sha256:51f21f37aec6bc117e9083181ddc3cbbcbf56b6506492b128d8e836d3545ca80", - "sha256:53e3c588e7ea158fa80095dd0ff53f49e2ede9a8d71a3a5b964ca045d845a9b9", - "sha256:58ca539cc6ce385d650138a9b1908b05622c2dd08a23d5aea4890523ef3774d5", - "sha256:5a371846f45ed9d24927a8d5222884536c1e171543396b36250fafb2e848bc92", - "sha256:5d4d509e9aa011e1be5e4da7c5062dc4fc3688714687110536925980b3d03ac6", - "sha256:5e11e11880951e767342b56627ab2dc9d3ef90e2605b656e9b5e6e0beadaaf0f", - "sha256:68d910048b36613701ea671de68f701e2c1ba2839295238def840ff1fc1b15f4", - "sha256:69d503a7641b5a63aa53c7aca0b857d38f48cd7bae39f8563679b324e3d2d47a", - "sha256:6c0e96821029c46847df4ff266ea283a2b6163a4f76a4567f9986934e9c4410c", - "sha256:6d4da453fbd8793ebb11bed396f8a4b9041d6227bf055903447305dd7942312f", - "sha256:6ede2d42ad55bd4e7a3394e98c5f58ddace78775493391732d32be61268a4116", - "sha256:6f32791ee045a7b3d6a56208a55d996d5f7a32fdb688f5c5ee899cb7589539eb", - "sha256:6f767d4823002e65c06ea273f952fda2b88775e1c2d508564f04d32cdd7f65b2", - "sha256:712331c1c70c79a219c2ac233b4e25e75ffad51042840d147d5e94519c7d8a1a", - "sha256:7726f67e4a0b2b4392f03aa62e16b12a697156c6735df27b21bd3ab561b01659", - "sha256:788fb03c5acb5b48f5f918f4cbb5dc072498becf018c64e7e27d6b76e63e68b8", - "sha256:79f5a3ab7ff6c46336f38690f0564bc7689cefa180257ed9078c42f75b10c9d2", - "sha256:7af18372f576e36e93f4662bdf64043ac23dfa02d7f768d7e7e1d0211bb9cb35", - "sha256:7c74fde444bcd13ef3a803c578b28f33b4f9edf368f46ca3de57fda456065967", - "sha256:7e181411958d04d5b437a0981e87815e8f1b1909f5ae0e339246d3bc464f53e7", - "sha256:7f2024f83a9300440e845b441e71726471f7567021c1d80796ca02e71c5f0dc2", - "sha256:819d9317c3d86b508d87ab1bca5867f3abc18b902c822bc57366ccc6330a030b", - "sha256:8243bb4bb4db7c3501932ced6a978b284e19c3619b6802455e47bfd0905adb81", - "sha256:83b48b789f2da1688882cba595c40179194ab15ec17ea1d4c9de9ee239649904", - "sha256:851b44130393139cb336aa54c681d595d75a3160b7be330f3acc0c3b9dabce70", - "sha256:88e77ed7d0bd8d9be530c462c921904ada8d3417671eed749784c5a315af334d", - "sha256:8b966344ed4122a71ab8ccdca2954db1ce0d8049cb9bcac58db07558f9d9ec32", - "sha256:8c07e16ab38e717931319cff1340debbf2ef940a1cda4eb70e323079b62df306", - "sha256:8c85bb6946fb02231d1e60ab45c36ecee04ecf7f725e094f5beee798b6b7d36d", - "sha256:91946c496e6f380939dbea14ff6ce6de87480445c09d03964f5374101462594b", - "sha256:9dc7154889937ca5a004d17f62b4798e0af52f69c38eb3112dbdb52b006d4419", - "sha256:9ff1a517de2b1e80ddf1a3037a6ebca9925154c1af70751518d50d5c332e1ec8", - "sha256:a06a08be3cb7d7df7993dd16e84aaf59bd5a7ff98a9f1b3e893d18b273a71c64", - "sha256:a293370448f2e46fdc6e086ac99923015bdc53973a65d3df35aefc685e1a5809", - "sha256:a4a751f216fd1222a4a8c7ceff5180872a156202c3bdca1b337e5a5b09298dfd", - "sha256:a4afab735bb0ac3ec9bafcc35376ed336d26af6140c4d81e4c869e77df77ecd5", - "sha256:a8b8f32463781e4703965c9cf7a609a19a74478f332e0d62cd9d0e7a9db91321", - "sha256:a8bb256b34fcad4f3fa00be6b57fe35bcb54f031911195929145c67d9738ffec", - "sha256:aadc5a8b9859737a8f87831215b7fab0c04afeb960bb987c528421a4e6dfb8b6", - "sha256:b1bf8aba99b267aad0a01dfb44ee39803676007724abcfb72129c350476b2341", - "sha256:b408ac3c7f8c3414bfd5c6044ca4bb385b390bcf5eae3ad884cef48628c131ae", - "sha256:b4995792e106c3f1ab6f56dd6089918b065888e2e55a71e3fea8d0f66bf30989", - "sha256:b7c65112c87568274d399ad7a62902cef17801c2bd047b162e79e43758b3ce27", - "sha256:c089ce856919e03f4dd8f9168d60ac580d30cd0451fd60dcdef73010eca68973", - "sha256:c53cf36cdb10819b7154fefdbffbef442ba567d9c1ca74a7e76fd759ace45e6c", - "sha256:cb08db5c122fea4196483b82f7596e50ef9cab1770f7696c197bf0815ac4dd17", - "sha256:ccc1b5b467766110085c80bb9311d233fccc8ed1ce965aebba3125e1bab04cba", - "sha256:cdbf9a76ea47f14026daaed43a2c2150ab0e9a4d5396909f028380f33e61c522", - "sha256:cdee4f4d04761ce167538adbefa01a64e7cab949d89aa09df39ef0d5e859fb2a", - "sha256:d3264e4a02e4148e30078104fb0c1b6c8eb166ddc5ebe843a22433f58f87dc47", - "sha256:d5fe8054c244bf63be2380efc275edd86da3a706460d42911dc3ff914f3260a5", - "sha256:d72916d27fb88741bfb576b0b0639354ca00f5e91046171c985262c68a86bbb5", - "sha256:db5e71e5a810d2f1163c914e01b3ba241409a98286ac4850ff26076115ae401b", - "sha256:dc7f25e20781c8d42e813516ee4ff9043ecce4a8e25fc94ee6732a83d81c1c99", - "sha256:de784bbe06d32e66617cd20766c37aae2438902d54b3fa608d2e0a929ca705f4", - "sha256:e0755f5ac6c3d1dc2505eb2e6eaf5508ff17b42c084406714fbabf2d50d098b6", - "sha256:e549da8d68ad4ee385c918ea8b9efeda875df9edf6c6b48df927bd061c00bfef", - "sha256:e6772eb7cc4429f1eae5a9b41e5b0b1af8f0d50727c6e338d9ad5bceee01da5a", - "sha256:ea3e46a534de97a6cad2018cb950492a0fcacad380e35440ce3c1c8fef96a261", - "sha256:ec5523d5c08c639cd4e301d42f3ad7c6fb061a1f1cd6b5b627e59af345edfed7", - "sha256:ef3ad80458e47723812976a2ea1282ff207ad20e6cb19da1917f76699bd5aaa5", - "sha256:ef6c38040d868dcc0132fad377aafeb5b2da71354759e77f41ae599316df2dee", - "sha256:f1e23665be5918f979180130babedab9317fbb34cdae237c7defad7e86bc684e", - "sha256:f25d1975e846d07990cf946a5927a932aa7cccd308ae9979b03a58ff1cd80087", - "sha256:f7acc5c9c7cf567372de5b6c817f93db508e7b9bd7f29bd6187df8d2cc60ced5", - "sha256:fb7049dff52cded65184a3d2ff45cfd226bff7314f49a8f4b83f943eea9181a7", - "sha256:fdd2ab5ab56fcaf839a9f58caa8756dbfeba0b3dc187850b763d0a1e6ee9c97a" + "sha256:017a8b5c96665426977df7e55c2e80b4177a918c802fceb6aaa31d89c7dad961", + "sha256:090bd5976d2af005c143fac5364af7eb6b71831a708031983dd78867070517d0", + "sha256:09bb9c0a7006ad6782a3ff1a50843b80551a771ad6736d66943acd3dcb68030b", + "sha256:0a44d6bd5b4b510d5bfa64363d888070fedf55d7044564e9685fc9b6572a9fa5", + "sha256:0bef51399bb733fe7a464183c35ceba092b6e06aeee6fbf52d8759e7f2bed263", + "sha256:0d4b09c39125b5f21c62a6e08e6649fed6951ffc76a0a7e56c7b29e234002721", + "sha256:0df7736854b85ee1bfa775e0cde33a1af16ef0f9127e11f1232bf125af6b038b", + "sha256:105496b727923ea98e6a788becfd018e0da3510338f19d2c7b642775dcadcc2a", + "sha256:15e3586077863d61bf948a0541c7d077ddf4b4ebc59aca1568514bc9a10b8172", + "sha256:173378a1e9503e0239e422515c8dc4dcf70048070cb1d8301adc2722de1625ec", + "sha256:178b32d806c62e4dfe1b19427af27547b565ded64f844d6d19203cede4f4f7ce", + "sha256:178bb9e57d940f22a828ec916639268c3fd6ee1d45e1cefd7a7022645d816ce0", + "sha256:1a392b4ca7bccd5e98e767305bb282d3effa466f52b8c803d7def812dd61775e", + "sha256:1b1b2eab728efc239c8aab97b4821f8e10dcd5a1b066365d0e38023e3b2289e8", + "sha256:24b84c09ad66c24fbaec0d1f72e74d0cb7ee86e8bf6429281c69377dba76ac67", + "sha256:2510fc00b47a8355485b0014b49b58437594b48a0f08d557de7ea9819ef31967", + "sha256:2bd27356081b0b5ea3164dc45945e56a9ff3aac89f6df83835852ed377e274a0", + "sha256:2e03f99ffca1774ef1fe0bec473cb95a67af254ba03a2f3ff241581edb8b7954", + "sha256:35219597d11f2d863b1bb774e98b6a0e1881d96033cf90b580b1d82192b5c809", + "sha256:37238a2e8066e1573d2035906c77e58d4bbc5c50812bb667acb7975960260fed", + "sha256:37aa3caedc3553d38076a9f90abf8e6affa35b6b3db2e06c414636a95dd646f2", + "sha256:39943285af1b3884bfbf4d51376bce180f0456a5b04e766416c1af9a4b62b93a", + "sha256:3ad583c2f6595f8c261bfdac1485449e900c580b4dff25ecec2abc13dde29447", + "sha256:3bfeb47bc0be4b032462ba066b4198e79ef96a57a6bf5f6b64f1c63e5362000d", + "sha256:3c764f61cbb999ee92ea4e46e81a1e09d75ad00433cd19e9622808134d619a1d", + "sha256:3ca6fac652b195f8eff608b00c0c79889b7cb2984125abfbd14f6fb3f6effe25", + "sha256:3d93e61486d3d4767e46b108e19586038ce4e8d374c719a1dc0b1077d6007a11", + "sha256:3dbd9bf09ed895a01d1aca3d82b1ce3656d1b121650ee8d640e0e17ba24e9e31", + "sha256:45131c2bf9b6c739ffde137e6c56af65786a17a53b0c6e6ca3bba762bb063a9a", + "sha256:45c5e5d813569c4b613965bbfc7e5413615731aea9f932ea6f1854203ea52f9a", + "sha256:45e639069ecdb2aa33a2dc4a2b4c30f0bc35067830dbe5786031121ae9ac9eb6", + "sha256:47d532d6132d5fa40a3f1d3ea7c8752ca5e2ccf50a1aee5c5da16be7f04d8218", + "sha256:493e00f8664ade67574cf0e7984f53bc1dbfd018b0a8102e326bee002acdcd3f", + "sha256:4aec1e9d5416030f77de7e909af2645cc935e999da7e15d59d7e23b37a7a10ed", + "sha256:4f97190786e089e7a413d20b6c3964981fb1e21d7580c094dde08dbb17fd1171", + "sha256:5156692990dd9ddbd4734ff50c6b511c054aa660177fca64d214de57d54257a4", + "sha256:5289d882afb7e1ec7c6d33493f7964cc75fbaf298dcc1e3fbb1f0039560ddc7d", + "sha256:54a76e7b9093c99831bd5cc6513caf1689ec7d6e5123ec547444776fdf309592", + "sha256:555053d9c4ed1ad7d0bf78617ec474ab436a7be94966e98de79cf226d7e9a341", + "sha256:5a2e2203c4b7ecfe78a443810fcf2fcc1e1d96d59d3e704734e21b6f710df3f1", + "sha256:5f1f6f18f23f2744a58b0d02f07d31f5fc104ba2e6c81fbb51ecd50e96a3374c", + "sha256:6031a0985b0ecc72f3f9704efb4a2e7db77c315f732a953a13fb0900204c3047", + "sha256:60332a597794c3b184d240c8306d6b2fc4e6fd4606c1186bb08af41986b827cd", + "sha256:621ece875ea3150bee10605ec2be957055bddd23abafb981047fe7840027f1b0", + "sha256:66fbe9d6764c92a26e3c1c391476ce29e99c5bf1b823051a2bbae4e1d23671be", + "sha256:6ceaaa418e594438240bd287f093bca33c7ee3b6c40e8ce6a74ebdcc9f280f9d", + "sha256:6e29be51831c5a839268cddfa895a4833dfe6541611759bdc485eb8ebdf0b310", + "sha256:702a238fdc50d5d545f381d817f9141baff51d3014768286a07433a0790d33ce", + "sha256:70bfe4be52b300973f16206ace8216b9a5607c89039f5ced1eb048a60e098624", + "sha256:710e107a0977d53b29a68d89fef476fb378dc97cbbe81729f9e7dcc55c86c844", + "sha256:7361a2879b827516203f61d12af8bbb7bea504d7b4d5c02a745bd6bb3fbd4326", + "sha256:7553b67e575fe506fcc760f5ca3582185cb5599845ce27d63cd653a37fede925", + "sha256:77a3724f13fbc3ef867012f353d064459f618918f74a3276bffdb523e39350c9", + "sha256:785e330257b5d6ad1b59334d5af2253fccee6f921feb85e8e18662479f29be4f", + "sha256:7a88342b03c6c41b0ee8f5504d3a30bf47070f87b8bcfc63290e908ff0a212f5", + "sha256:85a85d2a9e8c7af690fe4056c1e48ce641a77cf48688751ff95c86f2a44fc5ec", + "sha256:8be1910ff15bc5f22ac5fadcd3f0877a6eb9eba40f2d17303e8cd898d36f49f5", + "sha256:93c004f0656d683ea69f8b6e41cd14313b94e9d108529c9dca4a9e864d5dac48", + "sha256:94af8500ec952154144f54918d150f04bd2e520c94a27bdd186f57323b0b7b5b", + "sha256:a45faa1a24fd3e078567ee31b953fe6e5819e9286a14f68c72c5689f14242f68", + "sha256:a7c41b1ab1532993d203eda9ab82bb8b7269717a7dc424b05ba39f1e39be5ddc", + "sha256:a996bf1859fb103ef34c24fe13d420714bbd4a43c50fa2cf44bb7d60b6060de3", + "sha256:a9c0bdb945a8fc6cb8d661da3d3969dd0a26202d7c17adb896c393c12cce9d10", + "sha256:a9dd80426417b07e3b86be44b7f7076086cd8290e1bbf1aa391f79e2807b1b8c", + "sha256:afa9a09ff78e40b2372ce2d4acee44165d2f7db7e253d670db93fe8a5d4b00b9", + "sha256:b5d3558e949f3de0081a5f6f8fa74a5a260ca9612e03be9cab8d7289c6bee8ad", + "sha256:b6e847d7558255483b399b6931e425143f68b8e0c176d30034c36a87dda4b9a9", + "sha256:b93f443705985f5d8c3594015caa2e89749875c9596c834dbc9f86d3c8331a5a", + "sha256:b9abdadae018d7d7fa15e850d5c47ec5e45cf3796258d503986ce17ba4d8a71d", + "sha256:ba1a336b41b71326b2ba735ce9d0b6b22c5160b23fddd9024e0717ead3e0bb90", + "sha256:bbe026e4c8ce47d7f5b802b31e6a0cd35e402b80ff29fa9373ec5ece54629aff", + "sha256:bd04785eaed247cc79149e1c0b01a4ca60efde6976e617231f5bb5ec84eb4c80", + "sha256:be05b3fc71b5a92085b4017551b6e3e1c13199c762f82dea0c3fbbae86d24f66", + "sha256:bfbf2e8923874379d035d08f38ef25595ab13a074605fc78b04c79ae3d6b6bdf", + "sha256:c00b7ece60047c3e022e6769f98a343a300976764711ac354c71229f1185787e", + "sha256:c0c15395d1763d89aea084d24564d0b6808988f05a0303d58dc633c27939fcb4", + "sha256:c0ee0733a17e9cc920838b46c43bab43c0e2cee78f091d8c788b162088ffc552", + "sha256:d30297b1ca6666db9171f500ac731e41d57fb5105d629b9115000d3e47cc5823", + "sha256:d45a0c8043e3e543032475d334c4058070865bc75b162dd11959aeebe75dd27f", + "sha256:ddf043aba44e951a6c8ff1addee57d9c3438f1ab3a7edd87ebc951621d8befda", + "sha256:e05b0e3d1803071221eeea695a5a247f3b66f55c3d2e9c2a13ed33ccf67a3f30", + "sha256:e7fc11a86be3df506149d1bf59e9b3edc818fbcada0a4786697b54707e6fc374", + "sha256:e88af8e86fb011adc0221419a5615ed507a54cd74956b07345b8881d81a329e5", + "sha256:eabb81ff00550d77e6a91b127f08a2e3feebc238596c37dad29dca4df4c212da", + "sha256:ef867fa13f7f064200a41299a442d92180b178edd0fe81a1f5222739b2572249", + "sha256:f0e128aa3dcc422c55d55de39dbbcce1401947c4215a5dcd36331151e8ee77ce", + "sha256:f1b9e00ae857fdd6d52bd6d7e1b5598c54bcd0194f4626abfd2eb4e93a8dfebd", + "sha256:f28e33a5940cbaec2095aab516423728aa11d93d01ab6574c304894abe71e007", + "sha256:f3c69967ba33327e8e22a3a0ff3c22b3879ad0f885a097ff2a5c1fe7dbd8505f", + "sha256:fa05dd24202001c2d9811cae12ed9942de240faff3cb37fc25ba2722026b7acb", + "sha256:fa439e73f8aa4f66e89fbc2bce6b2ae882d75ea4e4d75e5e584376db4f5fd73a", + "sha256:fa910442085e9e141259110e4a228f6a2860fa7bd85872707188f9ddd2479153" ], "index": "pypi", - "version": "==3.1.1" + "version": "==3.1.2" }, "redis": { "extras": [ "hiredis" ], "hashes": [ - "sha256:77929bc7f5dab9adf3acba2d3bb7d7658f1e0c2f1cafe7eb36434e751c471119", - "sha256:dc87a0bdef6c8bfe1ef1e1c40be7034390c2ae02d92dcd0c7ca1729443899880" + "sha256:585dc516b9eb042a619ef0a39c3d7d55fe81bdb4df09a52c9cdde0d07bf1aa7d", + "sha256:e2b03db868160ee4591de3cb90d40ebb50a90dd302138775937f6a42b7ed183c" ], "index": "pypi", - "version": "==4.5.5" + "version": "==4.6.0" }, "regex": { "hashes": [ @@ -1572,30 +1582,30 @@ }, "scikit-learn": { "hashes": [ - "sha256:065e9673e24e0dc5113e2dd2b4ca30c9d8aa2fa90f4c0597241c93b63130d233", - "sha256:2dd3ffd3950e3d6c0c0ef9033a9b9b32d910c61bd06cb8206303fb4514b88a49", - "sha256:2e2642baa0ad1e8f8188917423dd73994bf25429f8893ddbe115be3ca3183584", - "sha256:44b47a305190c28dd8dd73fc9445f802b6ea716669cfc22ab1eb97b335d238b1", - "sha256:6477eed40dbce190f9f9e9d0d37e020815825b300121307942ec2110302b66a3", - "sha256:6fe83b676f407f00afa388dd1fdd49e5c6612e551ed84f3b1b182858f09e987d", - "sha256:7d5312d9674bed14f73773d2acf15a3272639b981e60b72c9b190a0cffed5bad", - "sha256:7f69313884e8eb311460cc2f28676d5e400bd929841a2c8eb8742ae78ebf7c20", - "sha256:8156db41e1c39c69aa2d8599ab7577af53e9e5e7a57b0504e116cc73c39138dd", - "sha256:8429aea30ec24e7a8c7ed8a3fa6213adf3814a6efbea09e16e0a0c71e1a1a3d7", - "sha256:8b0670d4224a3c2d596fd572fb4fa673b2a0ccfb07152688ebd2ea0b8c61025c", - "sha256:953236889928d104c2ef14027539f5f2609a47ebf716b8cbe4437e85dce42744", - "sha256:99cc01184e347de485bf253d19fcb3b1a3fb0ee4cea5ee3c43ec0cc429b6d29f", - "sha256:9c710ff9f9936ba8a3b74a455ccf0dcf59b230caa1e9ba0223773c490cab1e51", - "sha256:ad66c3848c0a1ec13464b2a95d0a484fd5b02ce74268eaa7e0c697b904f31d6c", - "sha256:bf036ea7ef66115e0d49655f16febfa547886deba20149555a41d28f56fd6d3c", - "sha256:dfeaf8be72117eb61a164ea6fc8afb6dfe08c6f90365bde2dc16456e4bc8e45f", - "sha256:e6e574db9914afcb4e11ade84fab084536a895ca60aadea3041e85b8ac963edb", - "sha256:ea061bf0283bf9a9f36ea3c5d3231ba2176221bbd430abd2603b1c3b2ed85c89", - "sha256:fe0aa1a7029ed3e1dcbf4a5bc675aa3b1bc468d9012ecf6c6f081251ca47f590", - "sha256:fe175ee1dab589d2e1033657c5b6bec92a8a3b69103e3dd361b58014729975c3" + "sha256:0e8102d5036e28d08ab47166b48c8d5e5810704daecf3a476a4282d562be9a28", + "sha256:151ac2bf65ccf363664a689b8beafc9e6aae36263db114b4ca06fbbbf827444a", + "sha256:1d54fb9e6038284548072df22fd34777e434153f7ffac72c8596f2d6987110dd", + "sha256:3a11936adbc379a6061ea32fa03338d4ca7248d86dd507c81e13af428a5bc1db", + "sha256:436aaaae2c916ad16631142488e4c82f4296af2404f480e031d866863425d2a2", + "sha256:552fd1b6ee22900cf1780d7386a554bb96949e9a359999177cf30211e6b20df6", + "sha256:6a885a9edc9c0a341cab27ec4f8a6c58b35f3d449c9d2503a6fd23e06bbd4f6a", + "sha256:7617164951c422747e7c32be4afa15d75ad8044f42e7d70d3e2e0429a50e6718", + "sha256:79970a6d759eb00a62266a31e2637d07d2d28446fca8079cf9afa7c07b0427f8", + "sha256:850a00b559e636b23901aabbe79b73dc604b4e4248ba9e2d6e72f95063765603", + "sha256:8be549886f5eda46436b6e555b0e4873b4f10aa21c07df45c4bc1735afbccd7a", + "sha256:981287869e576d42c682cf7ca96af0c6ac544ed9316328fd0d9292795c742cf5", + "sha256:9877af9c6d1b15486e18a94101b742e9d0d2f343d35a634e337411ddb57783f3", + "sha256:998d38fcec96584deee1e79cd127469b3ad6fefd1ea6c2dfc54e8db367eb396b", + "sha256:9d953531f5d9f00c90c34fa3b7d7cfb43ecff4c605dac9e4255a20b114a27369", + "sha256:ae80c08834a473d08a204d966982a62e11c976228d306a2648c575e3ead12111", + "sha256:c470f53cea065ff3d588050955c492793bb50c19a92923490d18fcb637f6383a", + "sha256:c7e28d8fa47a0b30ae1bd7a079519dd852764e31708a7804da6cb6f8b36e3630", + "sha256:ded35e810438a527e17623ac6deae3b360134345b7c598175ab7741720d7ffa7", + "sha256:ee04835fb016e8062ee9fe9074aef9b82e430504e420bff51e3e5fffe72750ca", + "sha256:fd6e2d7389542eae01077a1ee0318c4fec20c66c957f45c7aac0c6eb0fe3c612" ], "index": "pypi", - "version": "==1.2.2" + "version": "==1.3.0" }, "scipy": { "hashes": [ @@ -1704,14 +1714,6 @@ "index": "pypi", "version": "==1.3.2" }, - "setuptools": { - "hashes": [ - "sha256:5df61bf30bb10c6f756eb19e7c9f3b473051f48db77fddbe06ff2ca307df9a6f", - "sha256:62642358adc77ffa87233bc4d2354c4b2682d214048f500964dbe760ccedf102" - ], - "markers": "python_version >= '3.7'", - "version": "==67.8.0" - }, "six": { "hashes": [ "sha256:1e61c37477a1626458e36f7b1d82aa5c9b094fa4802892072e49de9c60c4c926", @@ -1738,19 +1740,19 @@ }, "threadpoolctl": { "hashes": [ - "sha256:8b99adda265feb6773280df41eece7b2e6561b772d21ffd52e372f999024907b", - "sha256:a335baacfaa4400ae1f0d8e3a58d6674d2f8828e3716bb2802c44955ad391380" + "sha256:2b7818516e423bdaebb97c723f86a7c6b0a83d3f3b0970328d66f4d9104dc032", + "sha256:c96a0ba3bdddeaca37dc4cc7344aafad41cdb8c313f74fdfe387a867bba93355" ], - "markers": "python_version >= '3.6'", - "version": "==3.1.0" + "markers": "python_version >= '3.8'", + "version": "==3.2.0" }, "tika-client": { "hashes": [ - "sha256:6110bd73eaa133f9c8eb1ef2566e6c0c8123a0e4efbcfb85b86f8c1b26cb4de2", - "sha256:e8eaa52771c72426f5531c53dcc8dfc5e3bb6e1f91f89fc93674a81bfca59d6d" + "sha256:60950b7956932ed6f16f881d490c976c508fac03963ac388415fb7fdac5043cc", + "sha256:ac6bea262dfcf1526416f25c27a88de3ce62615d1b2ceea3a2c4eeaaf054cffa" ], "index": "pypi", - "version": "==0.2.0" + "version": "==0.4.0" }, "tornado": { "hashes": [ @@ -1779,11 +1781,11 @@ }, "typing-extensions": { "hashes": [ - "sha256:88a4153d8505aabbb4e13aacb7c486c2b4a33ca3b3f807914a9b4c844c471c26", - "sha256:d91d5919357fe7f681a9f2b5b4cb2a5f1ef0a1e9f59c4d8ff0d3491e05c0ffd5" + "sha256:440d5dd3af93b060174bf433bccd69b0babc3b15b1a8dca43789fd7f61514b36", + "sha256:b75ddc264f0ba5615db7ba217daeb99701ad295353c45f9e95963337ceeeffb2" ], "markers": "python_version < '3.10'", - "version": "==4.6.3" + "version": "==4.7.1" }, "tzdata": { "hashes": [ @@ -1806,11 +1808,11 @@ "standard" ], "hashes": [ - "sha256:79277ae03db57ce7d9aa0567830bbb51d7a612f54d6e1e3e92da3ef24c2c8ed8", - "sha256:e9434d3bbf05f310e762147f769c9f21235ee118ba2d2bf1155a7196448bd996" + "sha256:1d55d46b83ee4ce82b4e82f621f2050adb3eb7b5481c13f9af1744951cae2f1f", + "sha256:da9b0c8443b2d7ee9db00a345f1eee6db7317432c9d4400f5049cc8d358383be" ], "index": "pypi", - "version": "==0.22.0" + "version": "==0.23.1" }, "uvloop": { "hashes": [ @@ -2007,11 +2009,11 @@ }, "whitenoise": { "hashes": [ - "sha256:599dc6ca57e48929dfeffb2e8e187879bfe2aed0d49ca419577005b7f2cc930b", - "sha256:a02d6660ad161ff17e3042653c8e3f5ecbb2a2481a006bde125b9efb9a30113a" + "sha256:15fe60546ac975b58e357ccaeb165a4ca2d0ab697e48450b8f0307ca368195a8", + "sha256:16468e9ad2189f09f4a8c635a9031cc9bb2cdbc8e5e53365407acf99f7ade9ec" ], "index": "pypi", - "version": "==6.4.0" + "version": "==6.5.0" }, "whoosh": { "hashes": [ @@ -2024,11 +2026,11 @@ }, "zipp": { "hashes": [ - "sha256:112929ad649da941c23de50f356a2b5570c954b65150642bccdd66bf194d224b", - "sha256:48904fc76a60e542af151aded95726c1a5c34ed43ab4134b597665c86d7ad556" + "sha256:679e51dd4403591b2d6838a48de3d283f3d188412a9782faadf845f298736ba0", + "sha256:ebc15946aa78bd63458992fc81ec3b6f7b1e92d51c35e6de1c3804e73b799147" ], "markers": "python_version < '3.10'", - "version": "==3.15.0" + "version": "==3.16.2" }, "zstandard": { "hashes": [ @@ -2081,36 +2083,36 @@ }, "zxing-cpp": { "hashes": [ - "sha256:1b67b221aae15aad9b5609d99c38d57875bc0a4fef864142d7ca37e9ee7880b0", - "sha256:1d665c45029346c70ae3df5dbc36f6335ffe4f275e98dc43772fa32a65844196", - "sha256:214a6a0e49b92fda8d2761c74f5bfd24a677b9bf1d0ef0e083412486af97faa9", - "sha256:54282d0e5c573754049113a0cdbf14cc1c6b986432a367d8a788112afa92a1d5", - "sha256:5ce391f21763f00d5be3431e16d075e263e4b9205c2cf55d708625cb234b1f15", - "sha256:5fd89065f620d6b78281308c6abfb760d95760a1c9b88eb7ac612b52b331bd41", - "sha256:631a0c783ad233c85295e0cf4cd7740f1fe2853124c61b1ef6bcf7eb5d2fa5e6", - "sha256:76caafb8fc1e12c2e5ec33ce4f340a0e15e9a2aabfbfeaec170e8a2b405b8a77", - "sha256:8da9c912cca5829eedb2800ce3eaa1b1e52742f536aa9e798be69bf09639f399", - "sha256:95dd06dc559f53c1ca0eb59dbaebd802ebc839937baaf2f8d2b3def3e814c07f", - "sha256:97919f07c62edf1c8e0722fd64893057ce636b7067cf47bd593e98cc7e404d74", - "sha256:9f0c2c03f5df470ef71a7590be5042161e7590da767d4260a6d0d61a3fa80b88", - "sha256:a788551ddf3a6ba1152ff9a0b81d57018a3cc586544087c39d881428745faf1f", - "sha256:ea54fd242f93eea7bf039a68287e5e57fdf77d78e3bd5b4cbb2d289bb3380d63", - "sha256:f0eefdfad91e15e3f5b7ed16d83806a36f96ca482f4b042baa6297784a58b0b3", - "sha256:f70eefa5dc1fd9238087c024ef22f3d99ba79cb932a2c5bc5b0f1e152037722e" + "sha256:0a178683b66422ac01ae35f749d58c50b271f9ab18def1c286f5fc61bcf81fa7", + "sha256:26d27f61d627c06cc3e91b1ce816bd780c9227fd10b7ca961264f67bfb3bdf66", + "sha256:313bac052bd38bd2cedaa2610d880b3d62254dd6d8be01795559b73872c54ed0", + "sha256:4163d72975191d40c879bc130d5e8aa1eef5d5e6bfe820d94b5c9a2cb10d664e", + "sha256:4d9655c7d682ce252fe5c25f22c6fafe4c5ac493830fa8a2c062c85d061ce3b4", + "sha256:650d8f6731f11c04f4662a48f1efa9dc26c97bbdfa4f9b14b4683f43b7ccde4d", + "sha256:66d01d40bacc7e5b40e9fa474dab64f2e75a091c6e7c9d4a6b539b5a724127e3", + "sha256:7245e551fc30e9708c0fd0f4d0d15f29c0b85075d20c18ddc53b87956a469544", + "sha256:7a8a468b420bf391707431d5a0dd881cb41033ae15f87820d93d5707c7bc55bc", + "sha256:8397ce7e1a7a92cd8f0045a4c64e4fcd97f4aaa51441d27bcb76eeda0a1917bc", + "sha256:843f72a1f2a8c397b4d92f757488b03d8597031e907442382d5662fd96b0fd21", + "sha256:a54cd56c0898cb63a08517b7d630484690a9bad4da1e443aebe64b7077444d90", + "sha256:ab8fff5791e1d858390e45325500f6a17d5d3b6ac0237ae84ceda6f5b7a3685a", + "sha256:ba91ba2af0cc75c9e53bf95963f409c6fa26aa7df38469e2cdcb5b38a6c7c1c7", + "sha256:d7ba898e4f5ee9cd426d4271ff8b26911e3346b1cb4262f06fdc917e42b7c123", + "sha256:da081b763032b05326ddc53d3ad28a8b7603d662ccce2ff29fd204d587d3cac9" ], "index": "pypi", "markers": "platform_machine == 'x86_64'", - "version": "==2.0.0" + "version": "==2.1.0" } }, "develop": { "anyio": { "hashes": [ - "sha256:275d9973793619a5374e1c89a4f4ad3f4b0a5510a2b5b939444bee8f4c4d37ce", - "sha256:eddca883c4175f14df8aedce21054bfca3adb70ffe76a9f607aef9d7fa2ea7f0" + "sha256:44a3c9aba0f5defa43261a8b3efb97891f2bd7d804e0e1f56419befa1adfc780", + "sha256:91dee416e570e92c64041bd18b900d1d6fa78dff7048769ce5ac5ddad004fbb5" ], "markers": "python_version >= '3.7'", - "version": "==3.7.0" + "version": "==3.7.1" }, "asgiref": { "hashes": [ @@ -2144,42 +2146,39 @@ }, "black": { "hashes": [ - "sha256:064101748afa12ad2291c2b91c960be28b817c0c7eaa35bec09cc63aa56493c5", - "sha256:0945e13506be58bf7db93ee5853243eb368ace1c08a24c65ce108986eac65915", - "sha256:11c410f71b876f961d1de77b9699ad19f939094c3a677323f43d7a29855fe326", - "sha256:1c7b8d606e728a41ea1ccbd7264677e494e87cf630e399262ced92d4a8dac940", - "sha256:1d06691f1eb8de91cd1b322f21e3bfc9efe0c7ca1f0e1eb1db44ea367dff656b", - "sha256:3238f2aacf827d18d26db07524e44741233ae09a584273aa059066d644ca7b30", - "sha256:32daa9783106c28815d05b724238e30718f34155653d4d6e125dc7daec8e260c", - "sha256:35d1381d7a22cc5b2be2f72c7dfdae4072a3336060635718cc7e1ede24221d6c", - "sha256:3a150542a204124ed00683f0db1f5cf1c2aaaa9cc3495b7a3b5976fb136090ab", - "sha256:48f9d345675bb7fbc3dd85821b12487e1b9a75242028adad0333ce36ed2a6d27", - "sha256:50cb33cac881766a5cd9913e10ff75b1e8eb71babf4c7104f2e9c52da1fb7de2", - "sha256:562bd3a70495facf56814293149e51aa1be9931567474993c7942ff7d3533961", - "sha256:67de8d0c209eb5b330cce2469503de11bca4085880d62f1628bd9972cc3366b9", - "sha256:6b39abdfb402002b8a7d030ccc85cf5afff64ee90fa4c5aebc531e3ad0175ddb", - "sha256:6f3c333ea1dd6771b2d3777482429864f8e258899f6ff05826c3a4fcc5ce3f70", - "sha256:714290490c18fb0126baa0fca0a54ee795f7502b44177e1ce7624ba1c00f2331", - "sha256:7c3eb7cea23904399866c55826b31c1f55bbcd3890ce22ff70466b907b6775c2", - "sha256:92c543f6854c28a3c7f39f4d9b7694f9a6eb9d3c5e2ece488c327b6e7ea9b266", - "sha256:a6f6886c9869d4daae2d1715ce34a19bbc4b95006d20ed785ca00fa03cba312d", - "sha256:a8a968125d0a6a404842fa1bf0b349a568634f856aa08ffaff40ae0dfa52e7c6", - "sha256:c7ab5790333c448903c4b721b59c0d80b11fe5e9803d8703e84dcb8da56fec1b", - "sha256:e114420bf26b90d4b9daa597351337762b63039752bdf72bf361364c1aa05925", - "sha256:e198cf27888ad6f4ff331ca1c48ffc038848ea9f031a3b40ba36aced7e22f2c8", - "sha256:ec751418022185b0c1bb7d7736e6933d40bbb14c14a0abcf9123d1b159f98dd4", - "sha256:f0bd2f4a58d6666500542b26354978218a9babcdc972722f4bf90779524515f3" + "sha256:01ede61aac8c154b55f35301fac3e730baf0c9cf8120f65a9cd61a81cfb4a0c3", + "sha256:022a582720b0d9480ed82576c920a8c1dde97cc38ff11d8d8859b3bd6ca9eedb", + "sha256:25cc308838fe71f7065df53aedd20327969d05671bac95b38fdf37ebe70ac087", + "sha256:27eb7a0c71604d5de083757fbdb245b1a4fae60e9596514c6ec497eb63f95320", + "sha256:327a8c2550ddc573b51e2c352adb88143464bb9d92c10416feb86b0f5aee5ff6", + "sha256:47e56d83aad53ca140da0af87678fb38e44fd6bc0af71eebab2d1f59b1acf1d3", + "sha256:501387a9edcb75d7ae8a4412bb8749900386eaef258f1aefab18adddea1936bc", + "sha256:552513d5cd5694590d7ef6f46e1767a4df9af168d449ff767b13b084c020e63f", + "sha256:5c4bc552ab52f6c1c506ccae05681fab58c3f72d59ae6e6639e8885e94fe2587", + "sha256:642496b675095d423f9b8448243336f8ec71c9d4d57ec17bf795b67f08132a91", + "sha256:6d1c6022b86f83b632d06f2b02774134def5d4d4f1dac8bef16d90cda18ba28a", + "sha256:7f3bf2dec7d541b4619b8ce526bda74a6b0bffc480a163fed32eb8b3c9aed8ad", + "sha256:831d8f54c3a8c8cf55f64d0422ee875eecac26f5f649fb6c1df65316b67c8926", + "sha256:8417dbd2f57b5701492cd46edcecc4f9208dc75529bcf76c514864e48da867d9", + "sha256:86cee259349b4448adb4ef9b204bb4467aae74a386bce85d56ba4f5dc0da27be", + "sha256:893695a76b140881531062d48476ebe4a48f5d1e9388177e175d76234ca247cd", + "sha256:9fd59d418c60c0348505f2ddf9609c1e1de8e7493eab96198fc89d9f865e7a96", + "sha256:ad0014efc7acf0bd745792bd0d8857413652979200ab924fbf239062adc12491", + "sha256:b5b0ee6d96b345a8b420100b7d71ebfdd19fab5e8301aff48ec270042cd40ac2", + "sha256:c333286dc3ddca6fdff74670b911cccedacb4ef0a60b34e491b8a67c833b343a", + "sha256:f9062af71c59c004cd519e2fb8f5d25d39e46d3af011b41ab43b9c74e27e236f", + "sha256:fb074d8b213749fa1d077d630db0d5f8cc3b2ae63587ad4116e8a436e9bbe995" ], "index": "pypi", - "version": "==23.3.0" + "version": "==23.7.0" }, "certifi": { "hashes": [ - "sha256:0f0d56dc5a6ad56fd4ba36484d6cc34451e1c6548c61daad8c320169f91eddc7", - "sha256:c6c2e98f5c7869efca1f8916fed228dd91539f9f1b444c314c06eef02980c716" + "sha256:539cc1d13202e33ca466e88b2807e29f4c13049d6d87031a3c110744495cb082", + "sha256:92d6037539857d8206b8f6ae472e8b77db8058fec5937a1ef3f54304089edbb9" ], "markers": "python_version >= '3.6'", - "version": "==2023.5.7" + "version": "==2023.7.22" }, "cffi": { "hashes": [ @@ -2260,92 +2259,92 @@ }, "charset-normalizer": { "hashes": [ - "sha256:04afa6387e2b282cf78ff3dbce20f0cc071c12dc8f685bd40960cc68644cfea6", - "sha256:04eefcee095f58eaabe6dc3cc2262f3bcd776d2c67005880894f447b3f2cb9c1", - "sha256:0be65ccf618c1e7ac9b849c315cc2e8a8751d9cfdaa43027d4f6624bd587ab7e", - "sha256:0c95f12b74681e9ae127728f7e5409cbbef9cd914d5896ef238cc779b8152373", - "sha256:0ca564606d2caafb0abe6d1b5311c2649e8071eb241b2d64e75a0d0065107e62", - "sha256:10c93628d7497c81686e8e5e557aafa78f230cd9e77dd0c40032ef90c18f2230", - "sha256:11d117e6c63e8f495412d37e7dc2e2fff09c34b2d09dbe2bee3c6229577818be", - "sha256:11d3bcb7be35e7b1bba2c23beedac81ee893ac9871d0ba79effc7fc01167db6c", - "sha256:12a2b561af122e3d94cdb97fe6fb2bb2b82cef0cdca131646fdb940a1eda04f0", - "sha256:12d1a39aa6b8c6f6248bb54550efcc1c38ce0d8096a146638fd4738e42284448", - "sha256:1435ae15108b1cb6fffbcea2af3d468683b7afed0169ad718451f8db5d1aff6f", - "sha256:1c60b9c202d00052183c9be85e5eaf18a4ada0a47d188a83c8f5c5b23252f649", - "sha256:1e8fcdd8f672a1c4fc8d0bd3a2b576b152d2a349782d1eb0f6b8e52e9954731d", - "sha256:20064ead0717cf9a73a6d1e779b23d149b53daf971169289ed2ed43a71e8d3b0", - "sha256:21fa558996782fc226b529fdd2ed7866c2c6ec91cee82735c98a197fae39f706", - "sha256:22908891a380d50738e1f978667536f6c6b526a2064156203d418f4856d6e86a", - "sha256:3160a0fd9754aab7d47f95a6b63ab355388d890163eb03b2d2b87ab0a30cfa59", - "sha256:322102cdf1ab682ecc7d9b1c5eed4ec59657a65e1c146a0da342b78f4112db23", - "sha256:34e0a2f9c370eb95597aae63bf85eb5e96826d81e3dcf88b8886012906f509b5", - "sha256:3573d376454d956553c356df45bb824262c397c6e26ce43e8203c4c540ee0acb", - "sha256:3747443b6a904001473370d7810aa19c3a180ccd52a7157aacc264a5ac79265e", - "sha256:38e812a197bf8e71a59fe55b757a84c1f946d0ac114acafaafaf21667a7e169e", - "sha256:3a06f32c9634a8705f4ca9946d667609f52cf130d5548881401f1eb2c39b1e2c", - "sha256:3a5fc78f9e3f501a1614a98f7c54d3969f3ad9bba8ba3d9b438c3bc5d047dd28", - "sha256:3d9098b479e78c85080c98e1e35ff40b4a31d8953102bb0fd7d1b6f8a2111a3d", - "sha256:3dc5b6a8ecfdc5748a7e429782598e4f17ef378e3e272eeb1340ea57c9109f41", - "sha256:4155b51ae05ed47199dc5b2a4e62abccb274cee6b01da5b895099b61b1982974", - "sha256:49919f8400b5e49e961f320c735388ee686a62327e773fa5b3ce6721f7e785ce", - "sha256:53d0a3fa5f8af98a1e261de6a3943ca631c526635eb5817a87a59d9a57ebf48f", - "sha256:5f008525e02908b20e04707a4f704cd286d94718f48bb33edddc7d7b584dddc1", - "sha256:628c985afb2c7d27a4800bfb609e03985aaecb42f955049957814e0491d4006d", - "sha256:65ed923f84a6844de5fd29726b888e58c62820e0769b76565480e1fdc3d062f8", - "sha256:6734e606355834f13445b6adc38b53c0fd45f1a56a9ba06c2058f86893ae8017", - "sha256:6baf0baf0d5d265fa7944feb9f7451cc316bfe30e8df1a61b1bb08577c554f31", - "sha256:6f4f4668e1831850ebcc2fd0b1cd11721947b6dc7c00bf1c6bd3c929ae14f2c7", - "sha256:6f5c2e7bc8a4bf7c426599765b1bd33217ec84023033672c1e9a8b35eaeaaaf8", - "sha256:6f6c7a8a57e9405cad7485f4c9d3172ae486cfef1344b5ddd8e5239582d7355e", - "sha256:7381c66e0561c5757ffe616af869b916c8b4e42b367ab29fedc98481d1e74e14", - "sha256:73dc03a6a7e30b7edc5b01b601e53e7fc924b04e1835e8e407c12c037e81adbd", - "sha256:74db0052d985cf37fa111828d0dd230776ac99c740e1a758ad99094be4f1803d", - "sha256:75f2568b4189dda1c567339b48cba4ac7384accb9c2a7ed655cd86b04055c795", - "sha256:78cacd03e79d009d95635e7d6ff12c21eb89b894c354bd2b2ed0b4763373693b", - "sha256:80d1543d58bd3d6c271b66abf454d437a438dff01c3e62fdbcd68f2a11310d4b", - "sha256:830d2948a5ec37c386d3170c483063798d7879037492540f10a475e3fd6f244b", - "sha256:891cf9b48776b5c61c700b55a598621fdb7b1e301a550365571e9624f270c203", - "sha256:8f25e17ab3039b05f762b0a55ae0b3632b2e073d9c8fc88e89aca31a6198e88f", - "sha256:9a3267620866c9d17b959a84dd0bd2d45719b817245e49371ead79ed4f710d19", - "sha256:a04f86f41a8916fe45ac5024ec477f41f886b3c435da2d4e3d2709b22ab02af1", - "sha256:aaf53a6cebad0eae578f062c7d462155eada9c172bd8c4d250b8c1d8eb7f916a", - "sha256:abc1185d79f47c0a7aaf7e2412a0eb2c03b724581139193d2d82b3ad8cbb00ac", - "sha256:ac0aa6cd53ab9a31d397f8303f92c42f534693528fafbdb997c82bae6e477ad9", - "sha256:ac3775e3311661d4adace3697a52ac0bab17edd166087d493b52d4f4f553f9f0", - "sha256:b06f0d3bf045158d2fb8837c5785fe9ff9b8c93358be64461a1089f5da983137", - "sha256:b116502087ce8a6b7a5f1814568ccbd0e9f6cfd99948aa59b0e241dc57cf739f", - "sha256:b82fab78e0b1329e183a65260581de4375f619167478dddab510c6c6fb04d9b6", - "sha256:bd7163182133c0c7701b25e604cf1611c0d87712e56e88e7ee5d72deab3e76b5", - "sha256:c36bcbc0d5174a80d6cccf43a0ecaca44e81d25be4b7f90f0ed7bcfbb5a00909", - "sha256:c3af8e0f07399d3176b179f2e2634c3ce9c1301379a6b8c9c9aeecd481da494f", - "sha256:c84132a54c750fda57729d1e2599bb598f5fa0344085dbde5003ba429a4798c0", - "sha256:cb7b2ab0188829593b9de646545175547a70d9a6e2b63bf2cd87a0a391599324", - "sha256:cca4def576f47a09a943666b8f829606bcb17e2bc2d5911a46c8f8da45f56755", - "sha256:cf6511efa4801b9b38dc5546d7547d5b5c6ef4b081c60b23e4d941d0eba9cbeb", - "sha256:d16fd5252f883eb074ca55cb622bc0bee49b979ae4e8639fff6ca3ff44f9f854", - "sha256:d2686f91611f9e17f4548dbf050e75b079bbc2a82be565832bc8ea9047b61c8c", - "sha256:d7fc3fca01da18fbabe4625d64bb612b533533ed10045a2ac3dd194bfa656b60", - "sha256:dd5653e67b149503c68c4018bf07e42eeed6b4e956b24c00ccdf93ac79cdff84", - "sha256:de5695a6f1d8340b12a5d6d4484290ee74d61e467c39ff03b39e30df62cf83a0", - "sha256:e0ac8959c929593fee38da1c2b64ee9778733cdf03c482c9ff1d508b6b593b2b", - "sha256:e1b25e3ad6c909f398df8921780d6a3d120d8c09466720226fc621605b6f92b1", - "sha256:e633940f28c1e913615fd624fcdd72fdba807bf53ea6925d6a588e84e1151531", - "sha256:e89df2958e5159b811af9ff0f92614dabf4ff617c03a4c1c6ff53bf1c399e0e1", - "sha256:ea9f9c6034ea2d93d9147818f17c2a0860d41b71c38b9ce4d55f21b6f9165a11", - "sha256:f645caaf0008bacf349875a974220f1f1da349c5dbe7c4ec93048cdc785a3326", - "sha256:f8303414c7b03f794347ad062c0516cee0e15f7a612abd0ce1e25caf6ceb47df", - "sha256:fca62a8301b605b954ad2e9c3666f9d97f63872aa4efcae5492baca2056b74ab" + "sha256:04e57ab9fbf9607b77f7d057974694b4f6b142da9ed4a199859d9d4d5c63fe96", + "sha256:09393e1b2a9461950b1c9a45d5fd251dc7c6f228acab64da1c9c0165d9c7765c", + "sha256:0b87549028f680ca955556e3bd57013ab47474c3124dc069faa0b6545b6c9710", + "sha256:1000fba1057b92a65daec275aec30586c3de2401ccdcd41f8a5c1e2c87078706", + "sha256:1249cbbf3d3b04902ff081ffbb33ce3377fa6e4c7356f759f3cd076cc138d020", + "sha256:1920d4ff15ce893210c1f0c0e9d19bfbecb7983c76b33f046c13a8ffbd570252", + "sha256:193cbc708ea3aca45e7221ae58f0fd63f933753a9bfb498a3b474878f12caaad", + "sha256:1a100c6d595a7f316f1b6f01d20815d916e75ff98c27a01ae817439ea7726329", + "sha256:1f30b48dd7fa1474554b0b0f3fdfdd4c13b5c737a3c6284d3cdc424ec0ffff3a", + "sha256:203f0c8871d5a7987be20c72442488a0b8cfd0f43b7973771640fc593f56321f", + "sha256:246de67b99b6851627d945db38147d1b209a899311b1305dd84916f2b88526c6", + "sha256:2dee8e57f052ef5353cf608e0b4c871aee320dd1b87d351c28764fc0ca55f9f4", + "sha256:2efb1bd13885392adfda4614c33d3b68dee4921fd0ac1d3988f8cbb7d589e72a", + "sha256:2f4ac36d8e2b4cc1aa71df3dd84ff8efbe3bfb97ac41242fbcfc053c67434f46", + "sha256:3170c9399da12c9dc66366e9d14da8bf7147e1e9d9ea566067bbce7bb74bd9c2", + "sha256:3b1613dd5aee995ec6d4c69f00378bbd07614702a315a2cf6c1d21461fe17c23", + "sha256:3bb3d25a8e6c0aedd251753a79ae98a093c7e7b471faa3aa9a93a81431987ace", + "sha256:3bb7fda7260735efe66d5107fb7e6af6a7c04c7fce9b2514e04b7a74b06bf5dd", + "sha256:41b25eaa7d15909cf3ac4c96088c1f266a9a93ec44f87f1d13d4a0e86c81b982", + "sha256:45de3f87179c1823e6d9e32156fb14c1927fcc9aba21433f088fdfb555b77c10", + "sha256:46fb8c61d794b78ec7134a715a3e564aafc8f6b5e338417cb19fe9f57a5a9bf2", + "sha256:48021783bdf96e3d6de03a6e39a1171ed5bd7e8bb93fc84cc649d11490f87cea", + "sha256:4957669ef390f0e6719db3613ab3a7631e68424604a7b448f079bee145da6e09", + "sha256:5e86d77b090dbddbe78867a0275cb4df08ea195e660f1f7f13435a4649e954e5", + "sha256:6339d047dab2780cc6220f46306628e04d9750f02f983ddb37439ca47ced7149", + "sha256:681eb3d7e02e3c3655d1b16059fbfb605ac464c834a0c629048a30fad2b27489", + "sha256:6c409c0deba34f147f77efaa67b8e4bb83d2f11c8806405f76397ae5b8c0d1c9", + "sha256:7095f6fbfaa55defb6b733cfeb14efaae7a29f0b59d8cf213be4e7ca0b857b80", + "sha256:70c610f6cbe4b9fce272c407dd9d07e33e6bf7b4aa1b7ffb6f6ded8e634e3592", + "sha256:72814c01533f51d68702802d74f77ea026b5ec52793c791e2da806a3844a46c3", + "sha256:7a4826ad2bd6b07ca615c74ab91f32f6c96d08f6fcc3902ceeedaec8cdc3bcd6", + "sha256:7c70087bfee18a42b4040bb9ec1ca15a08242cf5867c58726530bdf3945672ed", + "sha256:855eafa5d5a2034b4621c74925d89c5efef61418570e5ef9b37717d9c796419c", + "sha256:8700f06d0ce6f128de3ccdbc1acaea1ee264d2caa9ca05daaf492fde7c2a7200", + "sha256:89f1b185a01fe560bc8ae5f619e924407efca2191b56ce749ec84982fc59a32a", + "sha256:8b2c760cfc7042b27ebdb4a43a4453bd829a5742503599144d54a032c5dc7e9e", + "sha256:8c2f5e83493748286002f9369f3e6607c565a6a90425a3a1fef5ae32a36d749d", + "sha256:8e098148dd37b4ce3baca71fb394c81dc5d9c7728c95df695d2dca218edf40e6", + "sha256:94aea8eff76ee6d1cdacb07dd2123a68283cb5569e0250feab1240058f53b623", + "sha256:95eb302ff792e12aba9a8b8f8474ab229a83c103d74a750ec0bd1c1eea32e669", + "sha256:9bd9b3b31adcb054116447ea22caa61a285d92e94d710aa5ec97992ff5eb7cf3", + "sha256:9e608aafdb55eb9f255034709e20d5a83b6d60c054df0802fa9c9883d0a937aa", + "sha256:a103b3a7069b62f5d4890ae1b8f0597618f628b286b03d4bc9195230b154bfa9", + "sha256:a386ebe437176aab38c041de1260cd3ea459c6ce5263594399880bbc398225b2", + "sha256:a38856a971c602f98472050165cea2cdc97709240373041b69030be15047691f", + "sha256:a401b4598e5d3f4a9a811f3daf42ee2291790c7f9d74b18d75d6e21dda98a1a1", + "sha256:a7647ebdfb9682b7bb97e2a5e7cb6ae735b1c25008a70b906aecca294ee96cf4", + "sha256:aaf63899c94de41fe3cf934601b0f7ccb6b428c6e4eeb80da72c58eab077b19a", + "sha256:b0dac0ff919ba34d4df1b6131f59ce95b08b9065233446be7e459f95554c0dc8", + "sha256:baacc6aee0b2ef6f3d308e197b5d7a81c0e70b06beae1f1fcacffdbd124fe0e3", + "sha256:bf420121d4c8dce6b889f0e8e4ec0ca34b7f40186203f06a946fa0276ba54029", + "sha256:c04a46716adde8d927adb9457bbe39cf473e1e2c2f5d0a16ceb837e5d841ad4f", + "sha256:c0b21078a4b56965e2b12f247467b234734491897e99c1d51cee628da9786959", + "sha256:c1c76a1743432b4b60ab3358c937a3fe1341c828ae6194108a94c69028247f22", + "sha256:c4983bf937209c57240cff65906b18bb35e64ae872da6a0db937d7b4af845dd7", + "sha256:c4fb39a81950ec280984b3a44f5bd12819953dc5fa3a7e6fa7a80db5ee853952", + "sha256:c57921cda3a80d0f2b8aec7e25c8aa14479ea92b5b51b6876d975d925a2ea346", + "sha256:c8063cf17b19661471ecbdb3df1c84f24ad2e389e326ccaf89e3fb2484d8dd7e", + "sha256:ccd16eb18a849fd8dcb23e23380e2f0a354e8daa0c984b8a732d9cfaba3a776d", + "sha256:cd6dbe0238f7743d0efe563ab46294f54f9bc8f4b9bcf57c3c666cc5bc9d1299", + "sha256:d62e51710986674142526ab9f78663ca2b0726066ae26b78b22e0f5e571238dd", + "sha256:db901e2ac34c931d73054d9797383d0f8009991e723dab15109740a63e7f902a", + "sha256:e03b8895a6990c9ab2cdcd0f2fe44088ca1c65ae592b8f795c3294af00a461c3", + "sha256:e1c8a2f4c69e08e89632defbfabec2feb8a8d99edc9f89ce33c4b9e36ab63037", + "sha256:e4b749b9cc6ee664a3300bb3a273c1ca8068c46be705b6c31cf5d276f8628a94", + "sha256:e6a5bf2cba5ae1bb80b154ed68a3cfa2fa00fde979a7f50d6598d3e17d9ac20c", + "sha256:e857a2232ba53ae940d3456f7533ce6ca98b81917d47adc3c7fd55dad8fab858", + "sha256:ee4006268ed33370957f55bf2e6f4d263eaf4dc3cfc473d1d90baff6ed36ce4a", + "sha256:eef9df1eefada2c09a5e7a40991b9fc6ac6ef20b1372abd48d2794a316dc0449", + "sha256:f058f6963fd82eb143c692cecdc89e075fa0828db2e5b291070485390b2f1c9c", + "sha256:f25c229a6ba38a35ae6e25ca1264621cc25d4d38dca2942a7fce0b67a4efe918", + "sha256:f2a1d0fd4242bd8643ce6f98927cf9c04540af6efa92323e9d3124f57727bfc1", + "sha256:f7560358a6811e52e9c4d142d497f1a6e10103d3a6881f18d04dbce3729c0e2c", + "sha256:f779d3ad205f108d14e99bb3859aa7dd8e9c68874617c72354d7ecaec2a054ac", + "sha256:f87f746ee241d30d6ed93969de31e5ffd09a2961a051e60ae6bddde9ec3583aa" ], "markers": "python_full_version >= '3.7.0'", - "version": "==3.1.0" + "version": "==3.2.0" }, "click": { "hashes": [ - "sha256:7682dc8afb30297001674575ea00d1814d808d6a36af415a82bd481d37ba7b8e", - "sha256:bb4d8133cb15a609f44e8213d9b391b0809795062913b383c62be0ee95b1db48" + "sha256:48ee849951919527a045bfe3bf7baa8a959c423134e1a5b98c05c20ba75a1cbd", + "sha256:fa244bb30b3b5ee2cae3da8f55c9e5e0c0e86093306301fb418eb9dc40fbded5" ], "markers": "python_version >= '3.7'", - "version": "==8.1.3" + "version": "==8.1.6" }, "colorama": { "hashes": [ @@ -2466,42 +2465,42 @@ }, "distlib": { "hashes": [ - "sha256:14bad2d9b04d3a36127ac97f30b12a19268f211063d8f8ee4f47108896e11b46", - "sha256:f35c4b692542ca110de7ef0bea44d73981caeb34ca0b9b6b2e6d7790dda8f80e" + "sha256:2e24928bc811348f0feb63014e97aaae3037f2cf48712d51ae61df7fd6075057", + "sha256:9dafe54b34a028eafd95039d5e5d4851a13734540f1331060d31c9916e7147a8" ], - "version": "==0.3.6" + "version": "==0.3.7" }, "exceptiongroup": { "hashes": [ - "sha256:232c37c63e4f682982c8b6459f33a8981039e5fb8756b2074364e5055c498c9e", - "sha256:d484c3090ba2889ae2928419117447a14daf3c1231d5e30d0aae34f354f01785" + "sha256:12c3e887d6485d16943a309616de20ae5582633e0a2eda17f4e10fd61c1e8af5", + "sha256:e346e69d186172ca7cf029c8c1d16235aa0e04035e5750b4b95039e65204328f" ], "markers": "python_version < '3.11'", - "version": "==1.1.1" + "version": "==1.1.2" }, "execnet": { "hashes": [ - "sha256:8f694f3ba9cc92cab508b152dcfe322153975c29bda272e2fd7f3f00f36e47c5", - "sha256:a295f7cc774947aac58dde7fdc85f4aa00c42adf5d8f5468fc630c1acf30a142" + "sha256:88256416ae766bc9e8895c76a87928c0012183da3cc4fc18016e6f050e025f41", + "sha256:cc59bc4423742fd71ad227122eb0dd44db51efb3dc4095b45ac9a08c770096af" ], - "markers": "python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3, 3.4'", - "version": "==1.9.0" + "markers": "python_version >= '3.7'", + "version": "==2.0.2" }, "factory-boy": { "hashes": [ - "sha256:a98d277b0c047c75eb6e4ab8508a7f81fb03d2cb21986f627913546ef7a2a55e", - "sha256:eb02a7dd1b577ef606b75a253b9818e6f9eaf996d94449c9d5ebb124f90dc795" + "sha256:a2cdbdb63228177aa4f1c52f4b6d83fab2b8623bf602c7dedd7eb83c0f69c04c", + "sha256:bc76d97d1a65bbd9842a6d722882098eb549ec8ee1081f9fb2e8ff29f0c300f1" ], "index": "pypi", - "version": "==3.2.1" + "version": "==3.3.0" }, "faker": { "hashes": [ - "sha256:633b278caa3ec239463f9139c74da2607c8da5710e56d5d7d30fc8a7440104c4", - "sha256:d9f363720c4a6cf9884c6c3e26e2ce26266ffe5d741a9bc7cb9256779bc62190" + "sha256:78840b94843f3aa32a34a220b2b5e8b309e3ffff3a231b0c54e841bb68e0757d", + "sha256:c6c1218482faf79ae1d791bb7124067d12339e0b8f400de855e2c281bcf78c77" ], - "markers": "python_version >= '3.7'", - "version": "==18.10.1" + "markers": "python_version >= '3.8'", + "version": "==19.2.0" }, "filelock": { "hashes": [ @@ -2528,11 +2527,11 @@ }, "httpcore": { "hashes": [ - "sha256:125f8375ab60036db632f34f4b627a9ad085048eef7cb7d2616fea0f739f98af", - "sha256:5581b9c12379c4288fe70f43c710d16060c10080617001e6b22a3b6dbcbefd36" + "sha256:a6f30213335e34c1ade7be6ec7c47f19f50c56db36abef1a9dfa3815b1cb3888", + "sha256:c2789b767ddddfa2a5782e3199b2b7f6894540b17b16ec26b2c4d8e103510b87" ], "markers": "python_version >= '3.7'", - "version": "==0.17.2" + "version": "==0.17.3" }, "httpx": { "hashes": [ @@ -2551,11 +2550,11 @@ }, "identify": { "hashes": [ - "sha256:0aac67d5b4812498056d28a9a512a483f5085cc28640b02b258a59dac34301d4", - "sha256:986dbfb38b1140e763e413e6feb44cd731faf72d1909543178aa79b0e258265d" + "sha256:7243800bce2f58404ed41b7c002e53d4d22bcf3ae1b7900c2d7aefd95394bf7f", + "sha256:c22a8ead0d4ca11f1edd6c9418c3220669b3b7533ada0a0ffa6cc0ef85cf9b54" ], - "markers": "python_version >= '3.7'", - "version": "==2.5.24" + "markers": "python_version >= '3.8'", + "version": "==2.5.26" }, "idna": { "hashes": [ @@ -2575,11 +2574,11 @@ }, "importlib-metadata": { "hashes": [ - "sha256:43dd286a2cd8995d5eaef7fee2066340423b818ed3fd70adf0bad5f1fac53fed", - "sha256:92501cdf9cc66ebd3e612f1b4f0c0765dfa42f0fa38ffb319b6bd84dd675d705" + "sha256:3ebb78df84a805d7698245025b975d9d67053cd94c79245ba4b3eb694abe68bb", + "sha256:dbace7892d8c0c4ac1ad096662232f831d4e64f4c4545bd53016a3e9d4654743" ], "markers": "python_version < '3.10'", - "version": "==6.6.0" + "version": "==6.8.0" }, "incremental": { "hashes": [ @@ -2606,11 +2605,11 @@ }, "markdown": { "hashes": [ - "sha256:cbb516f16218e643d8e0a95b309f77eb118cb138d39a4f27851e6a63581db874", - "sha256:f5da449a6e1c989a4cea2631aa8ee67caa5a2ef855d551c88f9e309f4634c621" + "sha256:225c6123522495d4119a90b3a3ba31a1e87a70369e03f14799ea9c0d7183a3d6", + "sha256:a4c1b65c0957b4bd9e7d86ddc7b3c9868fb9670660f6f99f6d1bca8954d5a941" ], - "markers": "python_version >= '3.6'", - "version": "==3.3.7" + "markers": "python_version >= '3.7'", + "version": "==3.4.4" }, "markupsafe": { "hashes": [ @@ -2678,19 +2677,19 @@ }, "mkdocs": { "hashes": [ - "sha256:5955093bbd4dd2e9403c5afaf57324ad8b04f16886512a3ee6ef828956481c57", - "sha256:6ee46d309bda331aac915cd24aab882c179a933bd9e77b80ce7d2eaaa3f689dd" + "sha256:91a75e3a5a75e006b2149814d5c56af170039ceda0732f51e7af1a463599c00d", + "sha256:ff54eac0b74bf39a2e91f179e2ac16ef36f0294b9ab161c22f564382b30a31ae" ], "markers": "python_version >= '3.7'", - "version": "==1.4.3" + "version": "==1.5.0" }, "mkdocs-material": { "hashes": [ - "sha256:8513ab847c9a541ed3d11a3a7eed556caf72991ee786c31c5aac6691a121088a", - "sha256:b49e12869ab464558e2dd3c5792da5b748a7e0c48ee83b4d05715f98125a7a39" + "sha256:152db66f667825d5aa3398386fe4d227640ec393c31e7cf109b114a569fc40fc", + "sha256:91621b6a6002138c72d50a0beef20ed12cf367d2af27d1f53382562b3a9625c7" ], "index": "pypi", - "version": "==9.1.15" + "version": "==9.1.20" }, "mkdocs-material-extensions": { "hashes": [ @@ -2718,37 +2717,37 @@ }, "numpy": { "hashes": [ - "sha256:0ec87a7084caa559c36e0a2309e4ecb1baa03b687201d0a847c8b0ed476a7187", - "sha256:1a7d6acc2e7524c9955e5c903160aa4ea083736fde7e91276b0e5d98e6332812", - "sha256:202de8f38fc4a45a3eea4b63e2f376e5f2dc64ef0fa692838e31a808520efaf7", - "sha256:210461d87fb02a84ef243cac5e814aad2b7f4be953b32cb53327bb49fd77fbb4", - "sha256:2d926b52ba1367f9acb76b0df6ed21f0b16a1ad87c6720a1121674e5cf63e2b6", - "sha256:352ee00c7f8387b44d19f4cada524586f07379c0d49270f87233983bc5087ca0", - "sha256:35400e6a8d102fd07c71ed7dcadd9eb62ee9a6e84ec159bd48c28235bbb0f8e4", - "sha256:3c1104d3c036fb81ab923f507536daedc718d0ad5a8707c6061cdfd6d184e570", - "sha256:4719d5aefb5189f50887773699eaf94e7d1e02bf36c1a9d353d9f46703758ca4", - "sha256:4749e053a29364d3452c034827102ee100986903263e89884922ef01a0a6fd2f", - "sha256:5342cf6aad47943286afa6f1609cad9b4266a05e7f2ec408e2cf7aea7ff69d80", - "sha256:56e48aec79ae238f6e4395886b5eaed058abb7231fb3361ddd7bfdf4eed54289", - "sha256:76e3f4e85fc5d4fd311f6e9b794d0c00e7002ec122be271f2019d63376f1d385", - "sha256:7776ea65423ca6a15255ba1872d82d207bd1e09f6d0894ee4a64678dd2204078", - "sha256:784c6da1a07818491b0ffd63c6bbe5a33deaa0e25a20e1b3ea20cf0e43f8046c", - "sha256:8535303847b89aa6b0f00aa1dc62867b5a32923e4d1681a35b5eef2d9591a463", - "sha256:9a7721ec204d3a237225db3e194c25268faf92e19338a35f3a224469cb6039a3", - "sha256:a1d3c026f57ceaad42f8231305d4653d5f05dc6332a730ae5c0bea3513de0950", - "sha256:ab344f1bf21f140adab8e47fdbc7c35a477dc01408791f8ba00d018dd0bc5155", - "sha256:ab5f23af8c16022663a652d3b25dcdc272ac3f83c3af4c02eb8b824e6b3ab9d7", - "sha256:ae8d0be48d1b6ed82588934aaaa179875e7dc4f3d84da18d7eae6eb3f06c242c", - "sha256:c91c4afd8abc3908e00a44b2672718905b8611503f7ff87390cc0ac3423fb096", - "sha256:d5036197ecae68d7f491fcdb4df90082b0d4960ca6599ba2659957aafced7c17", - "sha256:d6cc757de514c00b24ae8cf5c876af2a7c3df189028d68c0cb4eaa9cd5afc2bf", - "sha256:d933fabd8f6a319e8530d0de4fcc2e6a61917e0b0c271fded460032db42a0fe4", - "sha256:ea8282b9bcfe2b5e7d491d0bf7f3e2da29700cec05b49e64d6246923329f2b02", - "sha256:ecde0f8adef7dfdec993fd54b0f78183051b6580f606111a6d789cd14c61ea0c", - "sha256:f21c442fdd2805e91799fbe044a7b999b8571bb0ab0f7850d0cb9641a687092b" + "sha256:04640dab83f7c6c85abf9cd729c5b65f1ebd0ccf9de90b270cd61935eef0197f", + "sha256:1452241c290f3e2a312c137a9999cdbf63f78864d63c79039bda65ee86943f61", + "sha256:222e40d0e2548690405b0b3c7b21d1169117391c2e82c378467ef9ab4c8f0da7", + "sha256:2541312fbf09977f3b3ad449c4e5f4bb55d0dbf79226d7724211acc905049400", + "sha256:31f13e25b4e304632a4619d0e0777662c2ffea99fcae2029556b17d8ff958aef", + "sha256:4602244f345453db537be5314d3983dbf5834a9701b7723ec28923e2889e0bb2", + "sha256:4979217d7de511a8d57f4b4b5b2b965f707768440c17cb70fbf254c4b225238d", + "sha256:4c21decb6ea94057331e111a5bed9a79d335658c27ce2adb580fb4d54f2ad9bc", + "sha256:6620c0acd41dbcb368610bb2f4d83145674040025e5536954782467100aa8835", + "sha256:692f2e0f55794943c5bfff12b3f56f99af76f902fc47487bdfe97856de51a706", + "sha256:7215847ce88a85ce39baf9e89070cb860c98fdddacbaa6c0da3ffb31b3350bd5", + "sha256:79fc682a374c4a8ed08b331bef9c5f582585d1048fa6d80bc6c35bc384eee9b4", + "sha256:7ffe43c74893dbf38c2b0a1f5428760a1a9c98285553c89e12d70a96a7f3a4d6", + "sha256:80f5e3a4e498641401868df4208b74581206afbee7cf7b8329daae82676d9463", + "sha256:95f7ac6540e95bc440ad77f56e520da5bf877f87dca58bd095288dce8940532a", + "sha256:9667575fb6d13c95f1b36aca12c5ee3356bf001b714fc354eb5465ce1609e62f", + "sha256:a5425b114831d1e77e4b5d812b69d11d962e104095a5b9c3b641a218abcc050e", + "sha256:b4bea75e47d9586d31e892a7401f76e909712a0fd510f58f5337bea9572c571e", + "sha256:b7b1fc9864d7d39e28f41d089bfd6353cb5f27ecd9905348c24187a768c79694", + "sha256:befe2bf740fd8373cf56149a5c23a0f601e82869598d41f8e188a0e9869926f8", + "sha256:c0bfb52d2169d58c1cdb8cc1f16989101639b34c7d3ce60ed70b19c63eba0b64", + "sha256:d11efb4dbecbdf22508d55e48d9c8384db795e1b7b51ea735289ff96613ff74d", + "sha256:dd80e219fd4c71fc3699fc1dadac5dcf4fd882bfc6f7ec53d30fa197b8ee22dc", + "sha256:e2926dac25b313635e4d6cf4dc4e51c8c0ebfed60b801c799ffc4c32bf3d1254", + "sha256:e98f220aa76ca2a977fe435f5b04d7b3470c0a2e6312907b37ba6068f26787f2", + "sha256:ed094d4f0c177b1b8e7aa9cba7d6ceed51c0e569a5318ac0ca9a090680a6a1b1", + "sha256:f136bab9c2cfd8da131132c2cf6cc27331dd6fae65f95f69dcd4ae3c3639c810", + "sha256:f3a86ed21e4f87050382c7bc96571755193c4c1392490744ac73d660e8f564a9" ], "markers": "python_version >= '3.8'", - "version": "==1.24.3" + "version": "==1.24.4" }, "packaging": { "hashes": [ @@ -2848,27 +2847,27 @@ }, "platformdirs": { "hashes": [ - "sha256:0ade98a4895e87dc51d47151f7d2ec290365a585151d97b4d8d6312ed6132fed", - "sha256:e48fabd87db8f3a7df7150a4a5ea22c546ee8bc39bc2473244730d4b56d2cc4e" + "sha256:1b42b450ad933e981d56e59f1b97495428c9bd60698baab9f3eb3d00d5822421", + "sha256:ad8291ae0ae5072f66c16945166cb11c63394c7a3ad1b1bc9828ca3162da8c2f" ], "markers": "python_version >= '3.7'", - "version": "==3.5.3" + "version": "==3.9.1" }, "pluggy": { "hashes": [ - "sha256:4224373bacce55f955a878bf9cfa763c1e360858e330072059e10bad68531159", - "sha256:74134bbf457f031a36d68416e1509f34bd5ccc019f0bcc952c7b909d06b37bd3" + "sha256:c2fd55a7d7a3863cba1a013e4e2414658b1d07b6bc57b3919e0c63c9abb99849", + "sha256:d12f0c4b579b15f5e054301bb226ee85eeeba08ffec228092f8defbaa3a4c4b3" ], - "markers": "python_version >= '3.6'", - "version": "==1.0.0" + "markers": "python_version >= '3.7'", + "version": "==1.2.0" }, "pre-commit": { "hashes": [ - "sha256:66e37bec2d882de1f17f88075047ef8962581f83c234ac08da21a0c58953d1f0", - "sha256:8056bc52181efadf4aac792b1f4f255dfd2fb5a350ded7335d251a68561e8cb6" + "sha256:10badb65d6a38caff29703362271d7dca483d01da88f9d7e05d0b97171c136cb", + "sha256:a2256f489cd913d575c145132ae196fe335da32d91a8294b7afe6622335dd023" ], "index": "pypi", - "version": "==3.3.2" + "version": "==3.3.3" }, "pyasn1": { "hashes": [ @@ -2903,11 +2902,11 @@ }, "pymdown-extensions": { "hashes": [ - "sha256:ae66d84013c5d027ce055693e09a4628b67e9dec5bce05727e45b0918e36f274", - "sha256:b44e1093a43b8a975eae17b03c3a77aad4681b3b56fce60ce746dbef1944c8cb" + "sha256:508009b211373058debb8247e168de4cbcb91b1bff7b5e961b2c3e864e00b195", + "sha256:ef25dbbae530e8f67575d222b75ff0649b1e841e22c2ae9a20bad9472c2207dc" ], "markers": "python_version >= '3.7'", - "version": "==10.0.1" + "version": "==10.1" }, "pyopenssl": { "hashes": [ @@ -2918,11 +2917,11 @@ }, "pytest": { "hashes": [ - "sha256:cdcbd012c9312258922f8cd3f1b62a6580fdced17db6014896053d47cddf9295", - "sha256:ee990a3cc55ba808b80795a79944756f315c67c12b56abd3ac993a7b8c17030b" + "sha256:78bf16451a2eb8c7a2ea98e32dc119fd2aa758f1d5d66dbf0a59d69a3969df32", + "sha256:b4bf8c45bd59934ed84001ad51e11b4ee40d40a1229d2c79f9c592b0a3f6bd8a" ], "index": "pypi", - "version": "==7.3.2" + "version": "==7.4.0" }, "pytest-cov": { "hashes": [ @@ -2942,11 +2941,11 @@ }, "pytest-env": { "hashes": [ - "sha256:8c0605ae09a5b7e41c20ebcc44f2c906eea9654095b4b0c342b3814bcc3a8492", - "sha256:d7b2f5273ec6d1e221757998bc2f50d2474ed7d0b9331b92556011fadc4e9abf" + "sha256:5e533273f4d9e6a41c3a3120e0c7944aae5674fa773b329f00a5eb1f23c53a38", + "sha256:baed9b3b6bae77bd75b9238e0ed1ee6903a42806ae9d6aeffb8754cd5584d4ff" ], "index": "pypi", - "version": "==0.8.1" + "version": "==0.8.2" }, "pytest-httpx": { "hashes": [ @@ -3013,48 +3012,48 @@ }, "pyyaml": { "hashes": [ - "sha256:01b45c0191e6d66c470b6cf1b9531a771a83c1c4208272ead47a3ae4f2f603bf", - "sha256:0283c35a6a9fbf047493e3a0ce8d79ef5030852c51e9d911a27badfde0605293", - "sha256:055d937d65826939cb044fc8c9b08889e8c743fdc6a32b33e2390f66013e449b", - "sha256:07751360502caac1c067a8132d150cf3d61339af5691fe9e87803040dbc5db57", - "sha256:0b4624f379dab24d3725ffde76559cff63d9ec94e1736b556dacdfebe5ab6d4b", - "sha256:0ce82d761c532fe4ec3f87fc45688bdd3a4c1dc5e0b4a19814b9009a29baefd4", - "sha256:1e4747bc279b4f613a09eb64bba2ba602d8a6664c6ce6396a4d0cd413a50ce07", - "sha256:213c60cd50106436cc818accf5baa1aba61c0189ff610f64f4a3e8c6726218ba", - "sha256:231710d57adfd809ef5d34183b8ed1eeae3f76459c18fb4a0b373ad56bedcdd9", - "sha256:277a0ef2981ca40581a47093e9e2d13b3f1fbbeffae064c1d21bfceba2030287", - "sha256:2cd5df3de48857ed0544b34e2d40e9fac445930039f3cfe4bcc592a1f836d513", - "sha256:40527857252b61eacd1d9af500c3337ba8deb8fc298940291486c465c8b46ec0", - "sha256:432557aa2c09802be39460360ddffd48156e30721f5e8d917f01d31694216782", - "sha256:473f9edb243cb1935ab5a084eb238d842fb8f404ed2193a915d1784b5a6b5fc0", - "sha256:48c346915c114f5fdb3ead70312bd042a953a8ce5c7106d5bfb1a5254e47da92", - "sha256:50602afada6d6cbfad699b0c7bb50d5ccffa7e46a3d738092afddc1f9758427f", - "sha256:68fb519c14306fec9720a2a5b45bc9f0c8d1b9c72adf45c37baedfcd949c35a2", - "sha256:77f396e6ef4c73fdc33a9157446466f1cff553d979bd00ecb64385760c6babdc", - "sha256:81957921f441d50af23654aa6c5e5eaf9b06aba7f0a19c18a538dc7ef291c5a1", - "sha256:819b3830a1543db06c4d4b865e70ded25be52a2e0631ccd2f6a47a2822f2fd7c", - "sha256:897b80890765f037df3403d22bab41627ca8811ae55e9a722fd0392850ec4d86", - "sha256:98c4d36e99714e55cfbaaee6dd5badbc9a1ec339ebfc3b1f52e293aee6bb71a4", - "sha256:9df7ed3b3d2e0ecfe09e14741b857df43adb5a3ddadc919a2d94fbdf78fea53c", - "sha256:9fa600030013c4de8165339db93d182b9431076eb98eb40ee068700c9c813e34", - "sha256:a80a78046a72361de73f8f395f1f1e49f956c6be882eed58505a15f3e430962b", - "sha256:afa17f5bc4d1b10afd4466fd3a44dc0e245382deca5b3c353d8b757f9e3ecb8d", - "sha256:b3d267842bf12586ba6c734f89d1f5b871df0273157918b0ccefa29deb05c21c", - "sha256:b5b9eccad747aabaaffbc6064800670f0c297e52c12754eb1d976c57e4f74dcb", - "sha256:bfaef573a63ba8923503d27530362590ff4f576c626d86a9fed95822a8255fd7", - "sha256:c5687b8d43cf58545ade1fe3e055f70eac7a5a1a0bf42824308d868289a95737", - "sha256:cba8c411ef271aa037d7357a2bc8f9ee8b58b9965831d9e51baf703280dc73d3", - "sha256:d15a181d1ecd0d4270dc32edb46f7cb7733c7c508857278d3d378d14d606db2d", - "sha256:d4b0ba9512519522b118090257be113b9468d804b19d63c71dbcf4a48fa32358", - "sha256:d4db7c7aef085872ef65a8fd7d6d09a14ae91f691dec3e87ee5ee0539d516f53", - "sha256:d4eccecf9adf6fbcc6861a38015c2a64f38b9d94838ac1810a9023a0609e1b78", - "sha256:d67d839ede4ed1b28a4e8909735fc992a923cdb84e618544973d7dfc71540803", - "sha256:daf496c58a8c52083df09b80c860005194014c3698698d1a57cbcfa182142a3a", - "sha256:dbad0e9d368bb989f4515da330b88a057617d16b6a8245084f1b05400f24609f", - "sha256:e61ceaab6f49fb8bdfaa0f92c4b57bcfbea54c09277b1b4f7ac376bfb7a7c174", - "sha256:f84fbc98b019fef2ee9a1cb3ce93e3187a6df0b2538a651bfb890254ba9f90b5" + "sha256:062582fca9fabdd2c8b54a3ef1c978d786e0f6b3a1510e0ac93ef59e0ddae2bc", + "sha256:1635fd110e8d85d55237ab316b5b011de701ea0f29d07611174a1b42f1444741", + "sha256:184c5108a2aca3c5b3d3bf9395d50893a7ab82a38004c8f61c258d4428e80206", + "sha256:18aeb1bf9a78867dc38b259769503436b7c72f7a1f1f4c93ff9a17de54319b27", + "sha256:1d4c7e777c441b20e32f52bd377e0c409713e8bb1386e1099c2415f26e479595", + "sha256:1e2722cc9fbb45d9b87631ac70924c11d3a401b2d7f410cc0e3bbf249f2dca62", + "sha256:1fe35611261b29bd1de0070f0b2f47cb6ff71fa6595c077e42bd0c419fa27b98", + "sha256:28c119d996beec18c05208a8bd78cbe4007878c6dd15091efb73a30e90539696", + "sha256:42f8152b8dbc4fe7d96729ec2b99c7097d656dc1213a3229ca5383f973a5ed6d", + "sha256:4fb147e7a67ef577a588a0e2c17b6db51dda102c71de36f8549b6816a96e1867", + "sha256:50550eb667afee136e9a77d6dc71ae76a44df8b3e51e41b77f6de2932bfe0f47", + "sha256:510c9deebc5c0225e8c96813043e62b680ba2f9c50a08d3724c7f28a747d1486", + "sha256:5773183b6446b2c99bb77e77595dd486303b4faab2b086e7b17bc6bef28865f6", + "sha256:596106435fa6ad000c2991a98fa58eeb8656ef2325d7e158344fb33864ed87e3", + "sha256:6965a7bc3cf88e5a1c3bd2e0b5c22f8d677dc88a455344035f03399034eb3007", + "sha256:69b023b2b4daa7548bcfbd4aa3da05b3a74b772db9e23b982788168117739938", + "sha256:704219a11b772aea0d8ecd7058d0082713c3562b4e271b849ad7dc4a5c90c13c", + "sha256:7e07cbde391ba96ab58e532ff4803f79c4129397514e1413a7dc761ccd755735", + "sha256:81e0b275a9ecc9c0c0c07b4b90ba548307583c125f54d5b6946cfee6360c733d", + "sha256:9046c58c4395dff28dd494285c82ba00b546adfc7ef001486fbf0324bc174fba", + "sha256:9eb6caa9a297fc2c2fb8862bc5370d0303ddba53ba97e71f08023b6cd73d16a8", + "sha256:a0cd17c15d3bb3fa06978b4e8958dcdc6e0174ccea823003a106c7d4d7899ac5", + "sha256:afd7e57eddb1a54f0f1a974bc4391af8bcce0b444685d936840f125cf046d5bd", + "sha256:b1275ad35a5d18c62a7220633c913e1b42d44b46ee12554e5fd39c70a243d6a3", + "sha256:b786eecbdf8499b9ca1d697215862083bd6d2a99965554781d0d8d1ad31e13a0", + "sha256:ba336e390cd8e4d1739f42dfe9bb83a3cc2e80f567d8805e11b46f4a943f5515", + "sha256:baa90d3f661d43131ca170712d903e6295d1f7a0f595074f151c0aed377c9b9c", + "sha256:bc1bf2925a1ecd43da378f4db9e4f799775d6367bdb94671027b73b393a7c42c", + "sha256:bd4af7373a854424dabd882decdc5579653d7868b8fb26dc7d0e99f823aa5924", + "sha256:bf07ee2fef7014951eeb99f56f39c9bb4af143d8aa3c21b1677805985307da34", + "sha256:bfdf460b1736c775f2ba9f6a92bca30bc2095067b8a9d77876d1fad6cc3b4a43", + "sha256:c8098ddcc2a85b61647b2590f825f3db38891662cfc2fc776415143f599bb859", + "sha256:d2b04aac4d386b172d5b9692e2d2da8de7bfb6c387fa4f801fbf6fb2e6ba4673", + "sha256:d858aa552c999bc8a8d57426ed01e40bef403cd8ccdd0fc5f6f04a00414cac2a", + "sha256:f003ed9ad21d6a4713f0a9b5a7a0a79e08dd0f221aff4525a2be4c346ee60aab", + "sha256:f22ac1c3cac4dbc50079e965eba2c1058622631e526bd9afd45fedd49ba781fa", + "sha256:faca3bdcf85b2fc05d06ff3fbc1f83e1391b3e724afa3feba7d13eeab355484c", + "sha256:fca0e3a251908a499833aa292323f32437106001d436eca0e6e7833256674585", + "sha256:fd1592b3fdf65fff2ad0004b5e363300ef59ced41c2e6b3a99d4089fa8c5435d", + "sha256:fd66fc5d0da6d9815ba2cebeb4205f95818ff4b79c3ebe268e75d961704af52f" ], - "version": "==6.0" + "version": "==6.0.1" }, "pyyaml-env-tag": { "hashes": [ @@ -3168,26 +3167,26 @@ }, "ruff": { "hashes": [ - "sha256:06b8ee4eb8711ab119db51028dd9f5384b44728c23586424fd6e241a5b9c4a3b", - "sha256:1609b864a8d7ee75a8c07578bdea0a7db75a144404e75ef3162e0042bfdc100d", - "sha256:19643d448f76b1eb8a764719072e9c885968971bfba872e14e7257e08bc2f2b7", - "sha256:273a01dc8c3c4fd4c2af7ea7a67c8d39bb09bce466e640dd170034da75d14cab", - "sha256:27b2ea68d2aa69fff1b20b67636b1e3e22a6a39e476c880da1282c3e4bf6ee5a", - "sha256:48eccf225615e106341a641f826b15224b8a4240b84269ead62f0afd6d7e2d95", - "sha256:677284430ac539bb23421a2b431b4ebc588097ef3ef918d0e0a8d8ed31fea216", - "sha256:691d72a00a99707a4e0b2846690961157aef7b17b6b884f6b4420a9f25cd39b5", - "sha256:86bc788245361a8148ff98667da938a01e1606b28a45e50ac977b09d3ad2c538", - "sha256:905ff8f3d6206ad56fcd70674453527b9011c8b0dc73ead27618426feff6908e", - "sha256:9c4bfb75456a8e1efe14c52fcefb89cfb8f2a0d31ed8d804b82c6cf2dc29c42c", - "sha256:a37ec80e238ead2969b746d7d1b6b0d31aa799498e9ba4281ab505b93e1f4b28", - "sha256:ae9b57546e118660175d45d264b87e9b4c19405c75b587b6e4d21e6a17bf4fdf", - "sha256:bd2bbe337a3f84958f796c77820d55ac2db1e6753f39d1d1baed44e07f13f96d", - "sha256:d5a208f8ef0e51d4746930589f54f9f92f84bb69a7d15b1de34ce80a7681bc00", - "sha256:dc406e5d756d932da95f3af082814d2467943631a587339ee65e5a4f4fbe83eb", - "sha256:ee76b4f05fcfff37bd6ac209d1370520d509ea70b5a637bdf0a04d0c99e13dff" + "sha256:2dae8f2d9c44c5c49af01733c2f7956f808db682a4193180dedb29dd718d7bbe", + "sha256:2e7c15828d09f90e97bea8feefcd2907e8c8ce3a1f959c99f9b4b3469679f33c", + "sha256:37359cd67d2af8e09110a546507c302cbea11c66a52d2a9b6d841d465f9962d4", + "sha256:48ed5aca381050a4e2f6d232db912d2e4e98e61648b513c350990c351125aaec", + "sha256:4a7d52457b5dfcd3ab24b0b38eefaead8e2dca62b4fbf10de4cd0938cf20ce30", + "sha256:581c43e4ac5e5a7117ad7da2120d960a4a99e68ec4021ec3cd47fe1cf78f8380", + "sha256:5f972567163a20fb8c2d6afc60c2ea5ef8b68d69505760a8bd0377de8984b4f6", + "sha256:7008fc6ca1df18b21fa98bdcfc711dad5f94d0fc3c11791f65e460c48ef27c82", + "sha256:7784e3606352fcfb193f3cd22b2e2117c444cb879ef6609ec69deabd662b0763", + "sha256:7a37dab70114671d273f203268f6c3366c035fe0c8056614069e90a65e614bfc", + "sha256:83e8f372fa5627eeda5b83b5a9632d2f9c88fc6d78cead7e2a1f6fb05728d137", + "sha256:8ffa7347ad11643f29de100977c055e47c988cd6d9f5f5ff83027600b11b9189", + "sha256:b7de5b8689575918e130e4384ed9f539ce91d067c0a332aedef6ca7188adac2d", + "sha256:bd58af46b0221efb95966f1f0f7576df711cb53e50d2fdb0e83c2f33360116a4", + "sha256:d878370f7e9463ac40c253724229314ff6ebe4508cdb96cb536e1af4d5a9cd4f", + "sha256:ef6ee3e429fd29d6a5ceed295809e376e6ece5b0f13c7e703efaf3d3bcb30b96", + "sha256:fe7118c1eae3fda17ceb409629c7f3b5a22dffa7caf1f6796776936dca1fe653" ], "index": "pypi", - "version": "==0.0.272" + "version": "==0.0.280" }, "scipy": { "hashes": [ @@ -3220,18 +3219,18 @@ }, "service-identity": { "hashes": [ - "sha256:6e6c6086ca271dc11b033d17c3a8bea9f24ebff920c587da090afc9519419d34", - "sha256:f0b0caac3d40627c3c04d7a51b6e06721857a0e10a8775f2d1d7e72901b3a7db" + "sha256:87415a691d52fcad954a500cb81f424d0273f8e7e3ee7d766128f4575080f383", + "sha256:ecb33cd96307755041e978ab14f8b14e13b40f1fbd525a4dc78f46d2b986431d" ], - "version": "==21.1.0" + "version": "==23.1.0" }, "setuptools": { "hashes": [ - "sha256:5df61bf30bb10c6f756eb19e7c9f3b473051f48db77fddbe06ff2ca307df9a6f", - "sha256:62642358adc77ffa87233bc4d2354c4b2682d214048f500964dbe760ccedf102" + "sha256:11e52c67415a381d10d6b462ced9cfb97066179f0e871399e006c4ab101fc85f", + "sha256:baf1fdb41c6da4cd2eae722e135500da913332ab3f2f5c7d33af9b492acb5235" ], "markers": "python_version >= '3.7'", - "version": "==67.8.0" + "version": "==68.0.0" }, "six": { "hashes": [ @@ -3286,27 +3285,27 @@ }, "typing-extensions": { "hashes": [ - "sha256:88a4153d8505aabbb4e13aacb7c486c2b4a33ca3b3f807914a9b4c844c471c26", - "sha256:d91d5919357fe7f681a9f2b5b4cb2a5f1ef0a1e9f59c4d8ff0d3491e05c0ffd5" + "sha256:440d5dd3af93b060174bf433bccd69b0babc3b15b1a8dca43789fd7f61514b36", + "sha256:b75ddc264f0ba5615db7ba217daeb99701ad295353c45f9e95963337ceeeffb2" ], "markers": "python_version < '3.10'", - "version": "==4.6.3" + "version": "==4.7.1" }, "urllib3": { "hashes": [ - "sha256:48e7fafa40319d358848e1bc6809b208340fafe2096f1725d05d67443d0483d1", - "sha256:bee28b5e56addb8226c96f7f13ac28cb4c301dd5ea8a6ca179c0b9835e032825" + "sha256:8d22f86aae8ef5e410d4f539fde9ce6b2113a001bb4d189e0aed70642d602b11", + "sha256:de7df1803967d2c2a98e4b11bb7d6bd9210474c46e8a0401514e3a42a75ebde4" ], "markers": "python_version >= '3.7'", - "version": "==2.0.3" + "version": "==2.0.4" }, "virtualenv": { "hashes": [ - "sha256:6abec7670e5802a528357fdc75b26b9f57d5d92f29c5462ba0fbe45feacc685e", - "sha256:a85caa554ced0c0afbd0d638e7e2d7b5f92d23478d05d17a76daeac8f279f924" + "sha256:43a3052be36080548bdee0b42919c88072037d50d56c28bd3f853cbe92b953ff", + "sha256:fd8a78f46f6b99a67b7ec5cf73f92357891a7b3a40fd97637c27f854aae3b9e0" ], "markers": "python_version >= '3.7'", - "version": "==20.23.0" + "version": "==20.24.2" }, "watchdog": { "hashes": [ @@ -3344,11 +3343,11 @@ }, "zipp": { "hashes": [ - "sha256:112929ad649da941c23de50f356a2b5570c954b65150642bccdd66bf194d224b", - "sha256:48904fc76a60e542af151aded95726c1a5c34ed43ab4134b597665c86d7ad556" + "sha256:679e51dd4403591b2d6838a48de3d283f3d188412a9782faadf845f298736ba0", + "sha256:ebc15946aa78bd63458992fc81ec3b6f7b1e92d51c35e6de1c3804e73b799147" ], "markers": "python_version < '3.10'", - "version": "==3.15.0" + "version": "==3.16.2" }, "zope.interface": { "hashes": [ @@ -3420,19 +3419,19 @@ }, "celery-types": { "hashes": [ - "sha256:324f52a936d36636236c8caca48f4dddb2d5077971d04275ac0959018a9d3d5e", - "sha256:c130770514e68069363ca3b27759bb9d34bd7e99fcfa7ad2469588f9f55478b4" + "sha256:4048d7c59d2ce26127d32c2799b776d1b23a3de699eb6e6e9df1b8136dfe950f", + "sha256:93c0d25f2779bf5c985dabc4c2985d7eac8be43d1b2c05668e73973d6714f560" ], "index": "pypi", - "version": "==0.17.0" + "version": "==0.18.0" }, "certifi": { "hashes": [ - "sha256:0f0d56dc5a6ad56fd4ba36484d6cc34451e1c6548c61daad8c320169f91eddc7", - "sha256:c6c2e98f5c7869efca1f8916fed228dd91539f9f1b444c314c06eef02980c716" + "sha256:539cc1d13202e33ca466e88b2807e29f4c13049d6d87031a3c110744495cb082", + "sha256:92d6037539857d8206b8f6ae472e8b77db8058fec5937a1ef3f54304089edbb9" ], "markers": "python_version >= '3.6'", - "version": "==2023.5.7" + "version": "==2023.7.22" }, "cffi": { "hashes": [ @@ -3505,84 +3504,84 @@ }, "charset-normalizer": { "hashes": [ - "sha256:04afa6387e2b282cf78ff3dbce20f0cc071c12dc8f685bd40960cc68644cfea6", - "sha256:04eefcee095f58eaabe6dc3cc2262f3bcd776d2c67005880894f447b3f2cb9c1", - "sha256:0be65ccf618c1e7ac9b849c315cc2e8a8751d9cfdaa43027d4f6624bd587ab7e", - "sha256:0c95f12b74681e9ae127728f7e5409cbbef9cd914d5896ef238cc779b8152373", - "sha256:0ca564606d2caafb0abe6d1b5311c2649e8071eb241b2d64e75a0d0065107e62", - "sha256:10c93628d7497c81686e8e5e557aafa78f230cd9e77dd0c40032ef90c18f2230", - "sha256:11d117e6c63e8f495412d37e7dc2e2fff09c34b2d09dbe2bee3c6229577818be", - "sha256:11d3bcb7be35e7b1bba2c23beedac81ee893ac9871d0ba79effc7fc01167db6c", - "sha256:12a2b561af122e3d94cdb97fe6fb2bb2b82cef0cdca131646fdb940a1eda04f0", - "sha256:12d1a39aa6b8c6f6248bb54550efcc1c38ce0d8096a146638fd4738e42284448", - "sha256:1435ae15108b1cb6fffbcea2af3d468683b7afed0169ad718451f8db5d1aff6f", - "sha256:1c60b9c202d00052183c9be85e5eaf18a4ada0a47d188a83c8f5c5b23252f649", - "sha256:1e8fcdd8f672a1c4fc8d0bd3a2b576b152d2a349782d1eb0f6b8e52e9954731d", - "sha256:20064ead0717cf9a73a6d1e779b23d149b53daf971169289ed2ed43a71e8d3b0", - "sha256:21fa558996782fc226b529fdd2ed7866c2c6ec91cee82735c98a197fae39f706", - "sha256:22908891a380d50738e1f978667536f6c6b526a2064156203d418f4856d6e86a", - "sha256:3160a0fd9754aab7d47f95a6b63ab355388d890163eb03b2d2b87ab0a30cfa59", - "sha256:322102cdf1ab682ecc7d9b1c5eed4ec59657a65e1c146a0da342b78f4112db23", - "sha256:34e0a2f9c370eb95597aae63bf85eb5e96826d81e3dcf88b8886012906f509b5", - "sha256:3573d376454d956553c356df45bb824262c397c6e26ce43e8203c4c540ee0acb", - "sha256:3747443b6a904001473370d7810aa19c3a180ccd52a7157aacc264a5ac79265e", - "sha256:38e812a197bf8e71a59fe55b757a84c1f946d0ac114acafaafaf21667a7e169e", - "sha256:3a06f32c9634a8705f4ca9946d667609f52cf130d5548881401f1eb2c39b1e2c", - "sha256:3a5fc78f9e3f501a1614a98f7c54d3969f3ad9bba8ba3d9b438c3bc5d047dd28", - "sha256:3d9098b479e78c85080c98e1e35ff40b4a31d8953102bb0fd7d1b6f8a2111a3d", - "sha256:3dc5b6a8ecfdc5748a7e429782598e4f17ef378e3e272eeb1340ea57c9109f41", - "sha256:4155b51ae05ed47199dc5b2a4e62abccb274cee6b01da5b895099b61b1982974", - "sha256:49919f8400b5e49e961f320c735388ee686a62327e773fa5b3ce6721f7e785ce", - "sha256:53d0a3fa5f8af98a1e261de6a3943ca631c526635eb5817a87a59d9a57ebf48f", - "sha256:5f008525e02908b20e04707a4f704cd286d94718f48bb33edddc7d7b584dddc1", - "sha256:628c985afb2c7d27a4800bfb609e03985aaecb42f955049957814e0491d4006d", - "sha256:65ed923f84a6844de5fd29726b888e58c62820e0769b76565480e1fdc3d062f8", - "sha256:6734e606355834f13445b6adc38b53c0fd45f1a56a9ba06c2058f86893ae8017", - "sha256:6baf0baf0d5d265fa7944feb9f7451cc316bfe30e8df1a61b1bb08577c554f31", - "sha256:6f4f4668e1831850ebcc2fd0b1cd11721947b6dc7c00bf1c6bd3c929ae14f2c7", - "sha256:6f5c2e7bc8a4bf7c426599765b1bd33217ec84023033672c1e9a8b35eaeaaaf8", - "sha256:6f6c7a8a57e9405cad7485f4c9d3172ae486cfef1344b5ddd8e5239582d7355e", - "sha256:7381c66e0561c5757ffe616af869b916c8b4e42b367ab29fedc98481d1e74e14", - "sha256:73dc03a6a7e30b7edc5b01b601e53e7fc924b04e1835e8e407c12c037e81adbd", - "sha256:74db0052d985cf37fa111828d0dd230776ac99c740e1a758ad99094be4f1803d", - "sha256:75f2568b4189dda1c567339b48cba4ac7384accb9c2a7ed655cd86b04055c795", - "sha256:78cacd03e79d009d95635e7d6ff12c21eb89b894c354bd2b2ed0b4763373693b", - "sha256:80d1543d58bd3d6c271b66abf454d437a438dff01c3e62fdbcd68f2a11310d4b", - "sha256:830d2948a5ec37c386d3170c483063798d7879037492540f10a475e3fd6f244b", - "sha256:891cf9b48776b5c61c700b55a598621fdb7b1e301a550365571e9624f270c203", - "sha256:8f25e17ab3039b05f762b0a55ae0b3632b2e073d9c8fc88e89aca31a6198e88f", - "sha256:9a3267620866c9d17b959a84dd0bd2d45719b817245e49371ead79ed4f710d19", - "sha256:a04f86f41a8916fe45ac5024ec477f41f886b3c435da2d4e3d2709b22ab02af1", - "sha256:aaf53a6cebad0eae578f062c7d462155eada9c172bd8c4d250b8c1d8eb7f916a", - "sha256:abc1185d79f47c0a7aaf7e2412a0eb2c03b724581139193d2d82b3ad8cbb00ac", - "sha256:ac0aa6cd53ab9a31d397f8303f92c42f534693528fafbdb997c82bae6e477ad9", - "sha256:ac3775e3311661d4adace3697a52ac0bab17edd166087d493b52d4f4f553f9f0", - "sha256:b06f0d3bf045158d2fb8837c5785fe9ff9b8c93358be64461a1089f5da983137", - "sha256:b116502087ce8a6b7a5f1814568ccbd0e9f6cfd99948aa59b0e241dc57cf739f", - "sha256:b82fab78e0b1329e183a65260581de4375f619167478dddab510c6c6fb04d9b6", - "sha256:bd7163182133c0c7701b25e604cf1611c0d87712e56e88e7ee5d72deab3e76b5", - "sha256:c36bcbc0d5174a80d6cccf43a0ecaca44e81d25be4b7f90f0ed7bcfbb5a00909", - "sha256:c3af8e0f07399d3176b179f2e2634c3ce9c1301379a6b8c9c9aeecd481da494f", - "sha256:c84132a54c750fda57729d1e2599bb598f5fa0344085dbde5003ba429a4798c0", - "sha256:cb7b2ab0188829593b9de646545175547a70d9a6e2b63bf2cd87a0a391599324", - "sha256:cca4def576f47a09a943666b8f829606bcb17e2bc2d5911a46c8f8da45f56755", - "sha256:cf6511efa4801b9b38dc5546d7547d5b5c6ef4b081c60b23e4d941d0eba9cbeb", - "sha256:d16fd5252f883eb074ca55cb622bc0bee49b979ae4e8639fff6ca3ff44f9f854", - "sha256:d2686f91611f9e17f4548dbf050e75b079bbc2a82be565832bc8ea9047b61c8c", - "sha256:d7fc3fca01da18fbabe4625d64bb612b533533ed10045a2ac3dd194bfa656b60", - "sha256:dd5653e67b149503c68c4018bf07e42eeed6b4e956b24c00ccdf93ac79cdff84", - "sha256:de5695a6f1d8340b12a5d6d4484290ee74d61e467c39ff03b39e30df62cf83a0", - "sha256:e0ac8959c929593fee38da1c2b64ee9778733cdf03c482c9ff1d508b6b593b2b", - "sha256:e1b25e3ad6c909f398df8921780d6a3d120d8c09466720226fc621605b6f92b1", - "sha256:e633940f28c1e913615fd624fcdd72fdba807bf53ea6925d6a588e84e1151531", - "sha256:e89df2958e5159b811af9ff0f92614dabf4ff617c03a4c1c6ff53bf1c399e0e1", - "sha256:ea9f9c6034ea2d93d9147818f17c2a0860d41b71c38b9ce4d55f21b6f9165a11", - "sha256:f645caaf0008bacf349875a974220f1f1da349c5dbe7c4ec93048cdc785a3326", - "sha256:f8303414c7b03f794347ad062c0516cee0e15f7a612abd0ce1e25caf6ceb47df", - "sha256:fca62a8301b605b954ad2e9c3666f9d97f63872aa4efcae5492baca2056b74ab" + "sha256:04e57ab9fbf9607b77f7d057974694b4f6b142da9ed4a199859d9d4d5c63fe96", + "sha256:09393e1b2a9461950b1c9a45d5fd251dc7c6f228acab64da1c9c0165d9c7765c", + "sha256:0b87549028f680ca955556e3bd57013ab47474c3124dc069faa0b6545b6c9710", + "sha256:1000fba1057b92a65daec275aec30586c3de2401ccdcd41f8a5c1e2c87078706", + "sha256:1249cbbf3d3b04902ff081ffbb33ce3377fa6e4c7356f759f3cd076cc138d020", + "sha256:1920d4ff15ce893210c1f0c0e9d19bfbecb7983c76b33f046c13a8ffbd570252", + "sha256:193cbc708ea3aca45e7221ae58f0fd63f933753a9bfb498a3b474878f12caaad", + "sha256:1a100c6d595a7f316f1b6f01d20815d916e75ff98c27a01ae817439ea7726329", + "sha256:1f30b48dd7fa1474554b0b0f3fdfdd4c13b5c737a3c6284d3cdc424ec0ffff3a", + "sha256:203f0c8871d5a7987be20c72442488a0b8cfd0f43b7973771640fc593f56321f", + "sha256:246de67b99b6851627d945db38147d1b209a899311b1305dd84916f2b88526c6", + "sha256:2dee8e57f052ef5353cf608e0b4c871aee320dd1b87d351c28764fc0ca55f9f4", + "sha256:2efb1bd13885392adfda4614c33d3b68dee4921fd0ac1d3988f8cbb7d589e72a", + "sha256:2f4ac36d8e2b4cc1aa71df3dd84ff8efbe3bfb97ac41242fbcfc053c67434f46", + "sha256:3170c9399da12c9dc66366e9d14da8bf7147e1e9d9ea566067bbce7bb74bd9c2", + "sha256:3b1613dd5aee995ec6d4c69f00378bbd07614702a315a2cf6c1d21461fe17c23", + "sha256:3bb3d25a8e6c0aedd251753a79ae98a093c7e7b471faa3aa9a93a81431987ace", + "sha256:3bb7fda7260735efe66d5107fb7e6af6a7c04c7fce9b2514e04b7a74b06bf5dd", + "sha256:41b25eaa7d15909cf3ac4c96088c1f266a9a93ec44f87f1d13d4a0e86c81b982", + "sha256:45de3f87179c1823e6d9e32156fb14c1927fcc9aba21433f088fdfb555b77c10", + "sha256:46fb8c61d794b78ec7134a715a3e564aafc8f6b5e338417cb19fe9f57a5a9bf2", + "sha256:48021783bdf96e3d6de03a6e39a1171ed5bd7e8bb93fc84cc649d11490f87cea", + "sha256:4957669ef390f0e6719db3613ab3a7631e68424604a7b448f079bee145da6e09", + "sha256:5e86d77b090dbddbe78867a0275cb4df08ea195e660f1f7f13435a4649e954e5", + "sha256:6339d047dab2780cc6220f46306628e04d9750f02f983ddb37439ca47ced7149", + "sha256:681eb3d7e02e3c3655d1b16059fbfb605ac464c834a0c629048a30fad2b27489", + "sha256:6c409c0deba34f147f77efaa67b8e4bb83d2f11c8806405f76397ae5b8c0d1c9", + "sha256:7095f6fbfaa55defb6b733cfeb14efaae7a29f0b59d8cf213be4e7ca0b857b80", + "sha256:70c610f6cbe4b9fce272c407dd9d07e33e6bf7b4aa1b7ffb6f6ded8e634e3592", + "sha256:72814c01533f51d68702802d74f77ea026b5ec52793c791e2da806a3844a46c3", + "sha256:7a4826ad2bd6b07ca615c74ab91f32f6c96d08f6fcc3902ceeedaec8cdc3bcd6", + "sha256:7c70087bfee18a42b4040bb9ec1ca15a08242cf5867c58726530bdf3945672ed", + "sha256:855eafa5d5a2034b4621c74925d89c5efef61418570e5ef9b37717d9c796419c", + "sha256:8700f06d0ce6f128de3ccdbc1acaea1ee264d2caa9ca05daaf492fde7c2a7200", + "sha256:89f1b185a01fe560bc8ae5f619e924407efca2191b56ce749ec84982fc59a32a", + "sha256:8b2c760cfc7042b27ebdb4a43a4453bd829a5742503599144d54a032c5dc7e9e", + "sha256:8c2f5e83493748286002f9369f3e6607c565a6a90425a3a1fef5ae32a36d749d", + "sha256:8e098148dd37b4ce3baca71fb394c81dc5d9c7728c95df695d2dca218edf40e6", + "sha256:94aea8eff76ee6d1cdacb07dd2123a68283cb5569e0250feab1240058f53b623", + "sha256:95eb302ff792e12aba9a8b8f8474ab229a83c103d74a750ec0bd1c1eea32e669", + "sha256:9bd9b3b31adcb054116447ea22caa61a285d92e94d710aa5ec97992ff5eb7cf3", + "sha256:9e608aafdb55eb9f255034709e20d5a83b6d60c054df0802fa9c9883d0a937aa", + "sha256:a103b3a7069b62f5d4890ae1b8f0597618f628b286b03d4bc9195230b154bfa9", + "sha256:a386ebe437176aab38c041de1260cd3ea459c6ce5263594399880bbc398225b2", + "sha256:a38856a971c602f98472050165cea2cdc97709240373041b69030be15047691f", + "sha256:a401b4598e5d3f4a9a811f3daf42ee2291790c7f9d74b18d75d6e21dda98a1a1", + "sha256:a7647ebdfb9682b7bb97e2a5e7cb6ae735b1c25008a70b906aecca294ee96cf4", + "sha256:aaf63899c94de41fe3cf934601b0f7ccb6b428c6e4eeb80da72c58eab077b19a", + "sha256:b0dac0ff919ba34d4df1b6131f59ce95b08b9065233446be7e459f95554c0dc8", + "sha256:baacc6aee0b2ef6f3d308e197b5d7a81c0e70b06beae1f1fcacffdbd124fe0e3", + "sha256:bf420121d4c8dce6b889f0e8e4ec0ca34b7f40186203f06a946fa0276ba54029", + "sha256:c04a46716adde8d927adb9457bbe39cf473e1e2c2f5d0a16ceb837e5d841ad4f", + "sha256:c0b21078a4b56965e2b12f247467b234734491897e99c1d51cee628da9786959", + "sha256:c1c76a1743432b4b60ab3358c937a3fe1341c828ae6194108a94c69028247f22", + "sha256:c4983bf937209c57240cff65906b18bb35e64ae872da6a0db937d7b4af845dd7", + "sha256:c4fb39a81950ec280984b3a44f5bd12819953dc5fa3a7e6fa7a80db5ee853952", + "sha256:c57921cda3a80d0f2b8aec7e25c8aa14479ea92b5b51b6876d975d925a2ea346", + "sha256:c8063cf17b19661471ecbdb3df1c84f24ad2e389e326ccaf89e3fb2484d8dd7e", + "sha256:ccd16eb18a849fd8dcb23e23380e2f0a354e8daa0c984b8a732d9cfaba3a776d", + "sha256:cd6dbe0238f7743d0efe563ab46294f54f9bc8f4b9bcf57c3c666cc5bc9d1299", + "sha256:d62e51710986674142526ab9f78663ca2b0726066ae26b78b22e0f5e571238dd", + "sha256:db901e2ac34c931d73054d9797383d0f8009991e723dab15109740a63e7f902a", + "sha256:e03b8895a6990c9ab2cdcd0f2fe44088ca1c65ae592b8f795c3294af00a461c3", + "sha256:e1c8a2f4c69e08e89632defbfabec2feb8a8d99edc9f89ce33c4b9e36ab63037", + "sha256:e4b749b9cc6ee664a3300bb3a273c1ca8068c46be705b6c31cf5d276f8628a94", + "sha256:e6a5bf2cba5ae1bb80b154ed68a3cfa2fa00fde979a7f50d6598d3e17d9ac20c", + "sha256:e857a2232ba53ae940d3456f7533ce6ca98b81917d47adc3c7fd55dad8fab858", + "sha256:ee4006268ed33370957f55bf2e6f4d263eaf4dc3cfc473d1d90baff6ed36ce4a", + "sha256:eef9df1eefada2c09a5e7a40991b9fc6ac6ef20b1372abd48d2794a316dc0449", + "sha256:f058f6963fd82eb143c692cecdc89e075fa0828db2e5b291070485390b2f1c9c", + "sha256:f25c229a6ba38a35ae6e25ca1264621cc25d4d38dca2942a7fce0b67a4efe918", + "sha256:f2a1d0fd4242bd8643ce6f98927cf9c04540af6efa92323e9d3124f57727bfc1", + "sha256:f7560358a6811e52e9c4d142d497f1a6e10103d3a6881f18d04dbce3729c0e2c", + "sha256:f779d3ad205f108d14e99bb3859aa7dd8e9c68874617c72354d7ecaec2a054ac", + "sha256:f87f746ee241d30d6ed93969de31e5ffd09a2961a051e60ae6bddde9ec3583aa" ], "markers": "python_full_version >= '3.7.0'", - "version": "==3.1.0" + "version": "==3.2.0" }, "cryptography": { "hashes": [ @@ -3611,11 +3610,11 @@ }, "django": { "hashes": [ - "sha256:adae3a952fd86800094ae6f64aa558572e8b4ba8dfe21f0ed8175147e75a72a1", - "sha256:e9f074a84930662104871bfcea55c3c180c50a0a47739db82435deae6cbaf032" + "sha256:26d0260c2fb8121009e62ffc548b2398dea2522b6454208a852fb0ef264c206c", + "sha256:56343019a9fd839e2e5bf203daf45f25af79d5bffa4c71d56eae4f4404d82ade" ], "index": "pypi", - "version": "==4.1.9" + "version": "==4.1.10" }, "django-filter-stubs": { "hashes": [ @@ -3630,30 +3629,30 @@ "compatible-mypy" ], "hashes": [ - "sha256:66477bdba25407623f4079205e58f3c7265a4f0d8f7c9f540a6edc16f8883a5b", - "sha256:8c15d5f7b05926805cfb25f2bfbf3509c37792fbd8aec5aedea358b85d8bccd5" + "sha256:dadab39b46d9ae8f37a8e879c590f39a9e042b565c03fa0c5a8f754b441b1f23", + "sha256:e30e2e4927ba14bec587ed2c686404b6b8e473cabe9baca445e7d2e1e0d7b14f" ], "index": "pypi", - "version": "==4.2.1" + "version": "==4.2.3" }, "django-stubs-ext": { "hashes": [ - "sha256:2696d6f7d8538341b060cffa9565c72ea797e866687e040b86d29cad8799e5fe", - "sha256:4b6b63e49f4ba30d93ec46f87507648c99c9de6911e651ad69db7084fd5b2f4e" + "sha256:c69d1cc46f1c4c3b7894b685a5022c29b2a36c7cfb52e23762eaf357ebfc2c98", + "sha256:fdacc65a14d2d4b97334b58ff178a5853ec8c8c76cec406e417916ad67536ce4" ], "markers": "python_version >= '3.8'", - "version": "==4.2.1" + "version": "==4.2.2" }, "djangorestframework-stubs": { "extras": [ "compatible-mypy" ], "hashes": [ - "sha256:67816705adffc8407fd5469b102abc2db9987afca68dd6f7d21b66369008a940", - "sha256:a1c6619148f08c4070fdf8b92ce2b2b47e10c9610fb25ae27baf2baefb1bf613" + "sha256:38f078cdf80228bd73e3ff5dcf00263f847da37c30d113e0fc8fda09f9dbc89a", + "sha256:4a9169253d2d46885a007c085d64e96efc8a78bd938c747e9ad0654725c4e7d0" ], "index": "pypi", - "version": "==3.14.1" + "version": "==3.14.2" }, "idna": { "hashes": [ @@ -3665,35 +3664,35 @@ }, "mypy": { "hashes": [ - "sha256:1c4c42c60a8103ead4c1c060ac3cdd3ff01e18fddce6f1016e08939647a0e703", - "sha256:44797d031a41516fcf5cbfa652265bb994e53e51994c1bd649ffcd0c3a7eccbf", - "sha256:473117e310febe632ddf10e745a355714e771ffe534f06db40702775056614c4", - "sha256:4c99c3ecf223cf2952638da9cd82793d8f3c0c5fa8b6ae2b2d9ed1e1ff51ba85", - "sha256:550a8b3a19bb6589679a7c3c31f64312e7ff482a816c96e0cecec9ad3a7564dd", - "sha256:658fe7b674769a0770d4b26cb4d6f005e88a442fe82446f020be8e5f5efb2fae", - "sha256:6e33bb8b2613614a33dff70565f4c803f889ebd2f859466e42b46e1df76018dd", - "sha256:6e42d29e324cdda61daaec2336c42512e59c7c375340bd202efa1fe0f7b8f8ca", - "sha256:74bc9b6e0e79808bf8678d7678b2ae3736ea72d56eede3820bd3849823e7f305", - "sha256:76ec771e2342f1b558c36d49900dfe81d140361dd0d2df6cd71b3db1be155409", - "sha256:7d23370d2a6b7a71dc65d1266f9a34e4cde9e8e21511322415db4b26f46f6b8c", - "sha256:87df44954c31d86df96c8bd6e80dfcd773473e877ac6176a8e29898bfb3501cb", - "sha256:8c5979d0deb27e0f4479bee18ea0f83732a893e81b78e62e2dda3e7e518c92ee", - "sha256:95d8d31a7713510685b05fbb18d6ac287a56c8f6554d88c19e73f724a445448a", - "sha256:a22435632710a4fcf8acf86cbd0d69f68ac389a3892cb23fbad176d1cddaf228", - "sha256:a8763e72d5d9574d45ce5881962bc8e9046bf7b375b0abf031f3e6811732a897", - "sha256:c1eb485cea53f4f5284e5baf92902cd0088b24984f4209e25981cc359d64448d", - "sha256:c5d2cc54175bab47011b09688b418db71403aefad07cbcd62d44010543fc143f", - "sha256:cbc07246253b9e3d7d74c9ff948cd0fd7a71afcc2b77c7f0a59c26e9395cb152", - "sha256:d0b6c62206e04061e27009481cb0ec966f7d6172b5b936f3ead3d74f29fe3dcf", - "sha256:ddae0f39ca146972ff6bb4399f3b2943884a774b8771ea0a8f50e971f5ea5ba8", - "sha256:e1f4d16e296f5135624b34e8fb741eb0eadedca90862405b1f1fde2040b9bd11", - "sha256:e86c2c6852f62f8f2b24cb7a613ebe8e0c7dc1402c61d36a609174f63e0ff017", - "sha256:ebc95f8386314272bbc817026f8ce8f4f0d2ef7ae44f947c4664efac9adec929", - "sha256:f9dca1e257d4cc129517779226753dbefb4f2266c4eaad610fc15c6a7e14283e", - "sha256:faff86aa10c1aa4a10e1a301de160f3d8fc8703b88c7e98de46b531ff1276a9a" + "sha256:01fd2e9f85622d981fd9063bfaef1aed6e336eaacca00892cd2d82801ab7c042", + "sha256:0dde1d180cd84f0624c5dcaaa89c89775550a675aff96b5848de78fb11adabcd", + "sha256:141dedfdbfe8a04142881ff30ce6e6653c9685b354876b12e4fe6c78598b45e2", + "sha256:16f0db5b641ba159eff72cff08edc3875f2b62b2fa2bc24f68c1e7a4e8232d01", + "sha256:190b6bab0302cec4e9e6767d3eb66085aef2a1cc98fe04936d8a42ed2ba77bb7", + "sha256:2460a58faeea905aeb1b9b36f5065f2dc9a9c6e4c992a6499a2360c6c74ceca3", + "sha256:34a9239d5b3502c17f07fd7c0b2ae6b7dd7d7f6af35fbb5072c6208e76295816", + "sha256:43b592511672017f5b1a483527fd2684347fdffc041c9ef53428c8dc530f79a3", + "sha256:43d24f6437925ce50139a310a64b2ab048cb2d3694c84c71c3f2a1626d8101dc", + "sha256:45d32cec14e7b97af848bddd97d85ea4f0db4d5a149ed9676caa4eb2f7402bb4", + "sha256:470c969bb3f9a9efcedbadcd19a74ffb34a25f8e6b0e02dae7c0e71f8372f97b", + "sha256:566e72b0cd6598503e48ea610e0052d1b8168e60a46e0bfd34b3acf2d57f96a8", + "sha256:5703097c4936bbb9e9bce41478c8d08edd2865e177dc4c52be759f81ee4dd26c", + "sha256:7549fbf655e5825d787bbc9ecf6028731973f78088fbca3a1f4145c39ef09462", + "sha256:8207b7105829eca6f3d774f64a904190bb2231de91b8b186d21ffd98005f14a7", + "sha256:8c4d8e89aa7de683e2056a581ce63c46a0c41e31bd2b6d34144e2c80f5ea53dc", + "sha256:98324ec3ecf12296e6422939e54763faedbfcc502ea4a4c38502082711867258", + "sha256:9bbcd9ab8ea1f2e1c8031c21445b511442cc45c89951e49bbf852cbb70755b1b", + "sha256:9d40652cc4fe33871ad3338581dca3297ff5f2213d0df345bcfbde5162abf0c9", + "sha256:a2746d69a8196698146a3dbe29104f9eb6a2a4d8a27878d92169a6c0b74435b6", + "sha256:ae704dcfaa180ff7c4cfbad23e74321a2b774f92ca77fd94ce1049175a21c97f", + "sha256:bfdca17c36ae01a21274a3c387a63aa1aafe72bff976522886869ef131b937f1", + "sha256:c482e1246726616088532b5e964e39765b6d1520791348e6c9dc3af25b233828", + "sha256:ca637024ca67ab24a7fd6f65d280572c3794665eaf5edcc7e90a866544076878", + "sha256:e02d700ec8d9b1859790c0475df4e4092c7bf3272a4fd2c9f33d87fac4427b8f", + "sha256:e5952d2d18b79f7dc25e62e014fe5a23eb1a3d2bc66318df8988a01b1a037c5b" ], "index": "pypi", - "version": "==1.3.0" + "version": "==1.4.1" }, "mypy-extensions": { "hashes": [ @@ -3744,27 +3743,27 @@ }, "types-bleach": { "hashes": [ - "sha256:8ce7896d4f658c562768674ffcf07492c7730e128018f03edd163ff912bfadee", - "sha256:d43eaf30a643ca824e16e2dcdb0c87ef9226237e2fa3ac4732a50cb3f32e145f" + "sha256:2b8767eb407c286b7f02803678732e522e04db8d56cbc9f1270bee49627eae92", + "sha256:357b0226f65c4f20ab3b13ca8d78a6b91c78aad256d8ec168d4e90fc3303ebd4" ], "index": "pypi", - "version": "==6.0.0.3" + "version": "==6.0.0.4" }, "types-colorama": { "hashes": [ - "sha256:a9421eb24d9cfc584880dc1d33b7fd406a14227c1f99f50c5ab9265e04d07638", - "sha256:d1e37571a19e152c930b3e789c316e9332e51a43bfcd4470b98225be974fb90c" + "sha256:23c9d4a00961227f7ef018d5a1c190c4bbc282119c3ee76a17677a793f13bb82", + "sha256:fbdfc5d9d24d85c33bd054fbe33adc6cec44eedb19cfbbabfbbb57dc257ae4b8" ], "index": "pypi", - "version": "==0.4.15.11" + "version": "==0.4.15.12" }, "types-dateparser": { "hashes": [ - "sha256:506668f024c2136a44e9046ee18dd4279a55df1be5dc55e5c29ab07643a2e18a", - "sha256:6539e49032151a8445092109f93e61f51b2082a9f295691df13e073c6abf9137" + "sha256:b85c664b349412ef0e09afd56c3c554a1d2fc206e45f1222c1001d23cb2fb66d", + "sha256:f9f147147a897ecb99491f59772ab1be1b7a0842fbc22e85ca37c6995b563b52" ], "index": "pypi", - "version": "==1.1.4.9" + "version": "==1.1.4.10" }, "types-docutils": { "hashes": [ @@ -3783,50 +3782,50 @@ }, "types-markdown": { "hashes": [ - "sha256:0930057bea0a534e06bbc021d57520720ad2a65b363612614ab0599cc7f606a9", - "sha256:c23a8a4dd9313539a446ba3dc673a6a920d79580c406de10a5c85a16733890a7" + "sha256:11e3558d50e3bc1e3f52f3fe073788f4ab917a829374fb354476221c700629e8", + "sha256:543ff3027fda21c3149780bf835a721cd094c5729e9a87725f180569c960bff8" ], "index": "pypi", - "version": "==3.4.2.9" + "version": "==3.4.2.10" }, "types-pillow": { "hashes": [ - "sha256:69427d9fa4320ff6e30f00fb9c0dd71185dc0a16de4757774220104759483466", - "sha256:f1b6af47abd151847ee25911ffeba784899bc7dc7f9eba8ca6a5aac522b012ef" + "sha256:29d51a3ce6ef51fabf728a504d33b4836187ff14256b2e86996d55c91ab214b1", + "sha256:fe09380ab22d412ced989a067e9ee4af719fa3a47ba1b53b232b46514a871042" ], "index": "pypi", - "version": "==9.5.0.4" + "version": "==10.0.0.2" }, "types-psycopg2": { "hashes": [ - "sha256:918224a0731a3650832e46633e720703b5beef7693a064e777d9748654fcf5e5", - "sha256:c2600892312ae1c34e12f145749795d93dc4eac3ef7dbf8a9c1bfd45385e80d7" + "sha256:7a323d7744bc8a882fb5a6f63448e903fc70d3dc0d6da9ec1f9c6c4dc10a7102", + "sha256:d5077eacf90e61db8c0b8eea2fdc9d4a97d7aaa16865fb4bd7034a7571520b4d" ], "index": "pypi", - "version": "==2.9.21.10" + "version": "==2.9.21.11" }, "types-pygments": { "hashes": [ - "sha256:3a356cef78d667f55d3a27f5f73aa82994187dc93fcd93d970ba7479ed3f8534", - "sha256:4fef924a4be98e4b0a3701f2822c33186cacd7dc317267853eaf451c3f361a97" + "sha256:60fc96777722942eafd4e7cd248568861aa8696246e3b1effcddabd51001a977", + "sha256:a1b56b792aa1015f6cecd092af00c71ecb12d9d5dd0a30313f9cb3839044389a" ], "index": "pypi", - "version": "==2.15.0.1" + "version": "==2.15.0.2" }, "types-pyopenssl": { "hashes": [ - "sha256:43e307e8dfb3a7a8208a19874ca060305f460c529d4eaca8a2669ea89499f244", - "sha256:ba803a99440b0c2e9ab4e197084aeefc55bdfe8a580d367b2aa4210810a21240" + "sha256:19536aa3debfbe25a918cf0d898e9f5fbbe6f3594a429da7914bf331deb1b342", + "sha256:6a010dac9ecd42b582d7dd2cc3e9e40486b79b3b64bb2fffba1474ff96af906d" ], - "version": "==23.2.0.0" + "version": "==23.2.0.2" }, "types-python-dateutil": { "hashes": [ - "sha256:09a0275f95ee31ce68196710ed2c3d1b9dc42e0b61cc43acc369a42cb939134f", - "sha256:0b0e7c68e7043b0354b26a1e0225cb1baea7abb1b324d02b50e2d08f1221043f" + "sha256:1f4f10ac98bb8b16ade9dbee3518d9ace017821d94b057a425b069f834737f4b", + "sha256:f977b8de27787639986b4e28963263fd0e5158942b3ecef91b9335c130cb1ce9" ], "index": "pypi", - "version": "==2.8.19.13" + "version": "==2.8.19.14" }, "types-pytz": { "hashes": [ @@ -3837,64 +3836,64 @@ }, "types-pyyaml": { "hashes": [ - "sha256:662fa444963eff9b68120d70cda1af5a5f2aa57900003c2006d7626450eaae5f", - "sha256:ebab3d0700b946553724ae6ca636ea932c1b0868701d4af121630e78d695fc97" + "sha256:7d340b19ca28cddfdba438ee638cd4084bde213e501a3978738543e27094775b", + "sha256:a461508f3096d1d5810ec5ab95d7eeecb651f3a15b71959999988942063bf01d" ], - "version": "==6.0.12.10" + "version": "==6.0.12.11" }, "types-redis": { "hashes": [ - "sha256:2fe82f374d9dddf007deaf23d81fddcfd9523d9522bf11523c5c43bc5b27099e", - "sha256:bf8692252038dbe03b007ca4fde87d3ae8e10610854a6858e3bf5d01721a7c4b" + "sha256:67c44c14369c33c2a300da2a50b5607c0fc888f7b85eeb7c73e15c78a0f05edd", + "sha256:efdef37dc0c04bf5786195651fd694f8bfdd693eac09ec4af46d90f72652558f" ], "index": "pypi", - "version": "==4.5.5.2" + "version": "==4.6.0.3" }, "types-requests": { "hashes": [ - "sha256:3de667cffa123ce698591de0ad7db034a5317457a596eb0b4944e5a9d9e8d1ac", - "sha256:afb06ef8f25ba83d59a1d424bd7a5a939082f94b94e90ab5e6116bd2559deaa3" + "sha256:56d181c85b5925cbc59f4489a57e72a8b2166f18273fd8ba7b6fe0c0b986f12a", + "sha256:6aa3f7faf0ea52d728bb18c0a0d1522d9bfd8c72d26ff6f61bfc3d06a411cf40" ], - "version": "==2.31.0.1" + "version": "==2.31.0.2" }, "types-setuptools": { "hashes": [ - "sha256:6df73340d96b238a4188b7b7668814b37e8018168aef1eef94a3b1872e3f60ff", - "sha256:95c9ed61871d6c0e258433373a4e1753c0a7c3627a46f4d4058c7b5a08ab844f" + "sha256:d57ae6076100b5704b3cc869fdefc671e1baf4c2cd6643f84265dfc0b955bf05", + "sha256:fec09e5c18264c5c09351c00be01a34456fb7a88e457abe97401325f84ad9d36" ], "index": "pypi", - "version": "==67.8.0.0" + "version": "==68.0.0.3" }, "types-tqdm": { "hashes": [ - "sha256:4894fe2b1581374ce9bca3f23d53729e4409d69b352e3d5db5829fa19482962c", - "sha256:972dd871b6b2b8ff32f1f0f6fdfdf5a4ba2b0b848453689391bec8bd858fb1c4" + "sha256:956d92e921651309ffe36a783cc10d41d753f107c84e82d84373c84d68737246", + "sha256:ad07ee08e758cad04299543b2586ef1d3fd5a10c54271457de13e0cba009cc5d" ], "index": "pypi", - "version": "==4.65.0.1" + "version": "==4.65.0.2" }, "types-urllib3": { "hashes": [ - "sha256:3300538c9dc11dad32eae4827ac313f5d986b8b21494801f1bf97a1ac6c03ae5", - "sha256:5dbd1d2bef14efee43f5318b5d36d805a489f6600252bb53626d4bfafd95e27c" + "sha256:229b7f577c951b8c1b92c1bc2b2fdb0b49847bd2af6d1cc2a2e3dd340f3bda8f", + "sha256:9683bbb7fb72e32bfe9d2be6e04875fbe1b3eeec3cbb4ea231435aa7fd6b4f0e" ], - "version": "==1.26.25.13" + "version": "==1.26.25.14" }, "typing-extensions": { "hashes": [ - "sha256:88a4153d8505aabbb4e13aacb7c486c2b4a33ca3b3f807914a9b4c844c471c26", - "sha256:d91d5919357fe7f681a9f2b5b4cb2a5f1ef0a1e9f59c4d8ff0d3491e05c0ffd5" + "sha256:440d5dd3af93b060174bf433bccd69b0babc3b15b1a8dca43789fd7f61514b36", + "sha256:b75ddc264f0ba5615db7ba217daeb99701ad295353c45f9e95963337ceeeffb2" ], "markers": "python_version < '3.10'", - "version": "==4.6.3" + "version": "==4.7.1" }, "urllib3": { "hashes": [ - "sha256:48e7fafa40319d358848e1bc6809b208340fafe2096f1725d05d67443d0483d1", - "sha256:bee28b5e56addb8226c96f7f13ac28cb4c301dd5ea8a6ca179c0b9835e032825" + "sha256:8d22f86aae8ef5e410d4f539fde9ce6b2113a001bb4d189e0aed70642d602b11", + "sha256:de7df1803967d2c2a98e4b11bb7d6bd9210474c46e8a0401514e3a42a75ebde4" ], "markers": "python_version >= '3.7'", - "version": "==2.0.3" + "version": "==2.0.4" } } } diff --git a/docs/administration.md b/docs/administration.md index e9e0489fe..627aa4136 100644 --- a/docs/administration.md +++ b/docs/administration.md @@ -68,23 +68,23 @@ $ docker-compose down After that, [make a backup](#backup). -1. If you pull the image from the docker hub, all you need to do is: +1. If you pull the image from the docker hub, all you need to do is: - ```shell-session - $ docker-compose pull - $ docker-compose up - ``` + ```shell-session + $ docker-compose pull + $ docker-compose up + ``` - The docker-compose files refer to the `latest` version, which is - always the latest stable release. + The docker-compose files refer to the `latest` version, which is + always the latest stable release. -2. If you built the image yourself, do the following: +1. If you built the image yourself, do the following: - ```shell-session - $ git pull - $ docker-compose build - $ docker-compose up - ``` + ```shell-session + $ git pull + $ docker-compose build + $ docker-compose up + ``` Running `docker-compose up` will also apply any new database migrations. If you see everything working, press CTRL+C once to gracefully stop @@ -470,7 +470,7 @@ The issues detected by the sanity checker are as follows: - Inaccessible thumbnails due to improper permissions. - Documents without any content (warning). - Orphaned files in the media directory (warning). These are files - that are not referenced by any document im paperless. + that are not referenced by any document in paperless. ``` document_sanity_checker diff --git a/docs/advanced_usage.md b/docs/advanced_usage.md index 3d1846bf1..89530db7f 100644 --- a/docs/advanced_usage.md +++ b/docs/advanced_usage.md @@ -1,6 +1,6 @@ # Advanced Topics -Paperless offers a couple features that automate certain tasks and make +Paperless offers a couple of features that automate certain tasks and make your life easier. ## Matching tags, correspondents, document types, and storage paths {#matching} @@ -35,9 +35,9 @@ The following algorithms are available: (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 don't know. Look at the source. +- **Fuzzy match:** I don't know. Look at [the source](https://github.com/paperless-ngx/paperless-ngx/blob/main/src/documents/matching.py). - **Auto:** Tries to automatically match new documents. This does not - require you to set a match. See the notes below. + require you to set a match. See the [notes below](#automatic-matching). When using the _any_ or _all_ matching algorithms, you can search for terms that consist of multiple words by enclosing them in double quotes. @@ -92,7 +92,7 @@ when using this feature: decide when 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 + are either from "Webshop" or "Bank", paperless will assign one of these correspondents to ANY new document, if both are set to automatic matching. @@ -101,7 +101,7 @@ when using this feature: Sometimes you may want to do something arbitrary whenever a document is consumed. Rather than try to predict what you may want to do, Paperless lets you execute scripts of your own choosing just before or after a -document is consumed using a couple simple hooks. +document is consumed using a couple of simple hooks. Just write a script, put it somewhere that Paperless can read & execute, and then put the path to that script in `paperless.conf` or @@ -197,7 +197,7 @@ The script can be in any language, A simple shell script example: !!! warning The post consumption script should not modify the document files - directly + directly. The script's stdout and stderr will be logged line by line to the webserver log, along with the exit code of the script. @@ -311,6 +311,7 @@ Paperless provides the following placeholders within filenames: - `{added_day}`: Day added only (number 01-31). - `{owner_username}`: Username of document owner, if any, or "none" - `{original_name}`: Document original filename, minus the extension, if any, or "none" +- `{doc_pk}`: The paperless identifier (primary key) for the document. Paperless will try to conserve the information from your database as much as possible. However, some characters that you can use in document @@ -528,7 +529,7 @@ For how to enable barcode usage, see [the configuration](/configuration#barcodes The two settings may be enabled independently, but do have interactions as explained below. -### Document Splitting +### Document Splitting {#document-splitting} When enabled, Paperless will look for a barcode with the configured value and create a new document starting from the next page. The page with the barcode on it will _not_ be retained. It @@ -543,3 +544,69 @@ If document splitting via barcode is also enabled, documents will be split when barcode is located. However, differing from the splitting, the page with the barcode _will_ be retained. This allows application of a barcode to any page, including one which holds data to keep in the document. + +## Automatic collation of double-sided documents {#collate} + +!!! note + + If your scanner supports double-sided scanning natively, you do not need this feature. + +This feature is turned off by default, see [configuration](/configuration#collate) on how to turn it on. + +### Summary + +If you have a scanner with an automatic document feeder (ADF) that only scans a single side, +this feature makes scanning double-sided documents much more convenient by automatically +collating two separate scans into one document, reordering the pages as necessary. + +### Usage example + +Suppose you have a double-sided document with 6 pages (3 sheets of paper). First, +put the stack into your ADF as normal, ensuring that page 1 is scanned first. Your ADF +will now scan pages 1, 3, and 5. Then you (or your the scanner, if it supports it) upload +the scan into the correct sub-directory of the consume folder (`double-sided` by default; +keep in mind that Paperless will _not_ automatically create the directory for you.) +Paperless will then process the scan and move it into an internal staging area. + +The next step is to turn your stack upside down (without reordering the sheets of paper), +and scan it once again, your ADF will now scan pages 6, 4, and 2, in that order. Once this +scan is copied into the sub-directory, Paperless will collate the previous scan with the +new one, reversing the order of the pages on the second, "even numbered" scan. The +resulting document will have the pages 1-6 in the correct order, and this new file will +then be processed as normal. + +!!! tip + + When scanning the even numbered pages, you can omit the last empty pages, if there are + any. For example, if page 6 is empty, you only need to scan pages 2 and 4. _Do not_ omit + empty pages in the middle of the document. + +### Things that could go wrong + +Paperless will notice when the first, "odd numbered" scan has less pages than the second +scan (this can happen when e.g. the ADF skipped a few pages in the first pass). In that +case, Paperless will remove the staging copy as well as the scan, and give you an error +message asking you to restart the process from scratch, by scanning the odd pages again, +followed by the even pages. + +Another thing that might happen is that you start a double sided scan, but then forget +to upload the second file. To avoid collating the wrong documents if you then come back +a day later to scan a new double-sided document, Paperless will only keep an "odd numbered +pages" file for up to 30 minutes. If more time passes, it will consider the next incoming +scan a completely new "odd numbered pages" one. The old staging file will get discarded. + +### Interaction with "subdirs as tags" + +The collation feature can be used together with the "subdirs as tags" feature (but this is not +a requirement). Just create a correctly named double-sided subdir in the hierachy and upload +your scans there. For example, both `double-sided/foo/bar` as well as `foo/bar/double-sided` will +cause the collated document to be treated as if it were uploaded into `foo/bar` and receive both +`foo` and `bar` tags, but not `double-sided`. + +### Interaction with document splitting + +You can use the [document splitting](#document-splitting) feature, but if you use a normal +single-sided split marker page, the split document(s) will have an empty page at the front (or +whatever else was on the backside of the split marker page.) You can work around that by having +a split marker page that has the split barcode on _both_ sides. This way, the extra page will +get automatically removed. diff --git a/docs/configuration.md b/docs/configuration.md index 722db8a4b..0ed2218a6 100644 --- a/docs/configuration.md +++ b/docs/configuration.md @@ -524,7 +524,7 @@ parsing documents. `PAPERLESS_OCR_MODE=` -: Tell paperless when and how to perform ocr on your documents. Four +: Tell paperless when and how to perform ocr on your documents. Three modes are available: - `skip`: Paperless skips all pages and will perform ocr only on @@ -1116,6 +1116,43 @@ combination with PAPERLESS_CONSUMER_BARCODE_UPSCALE bigger than 1.0. Defaults to "300" +## Collate Double-Sided Documents {#collate} + +`PAPERLESS_CONSUMER_ENABLE_COLLATE_DOUBLE_SIDED=` + +: Enables automatic collation of two single-sided scans into a double-sided +document. + + This is useful if you have an automatic document feeder that only supports + single-sided scans, but you need to scan a double-sided document. If your + ADF supports double-sided scans natively, you do not need this feature. + + `PAPERLESS_CONSUMER_RECURSIVE` must be enabled for this to work. + + For more information, read the [corresponding section in the advanced + documentation](/advanced_usage#collate). + + Defaults to false. + +`PAPERLESS_CONSUMER_COLLATE_DOUBLE_SIDED_SUBDIR_NAME=` + +: The name of the subdirectory that the collate feature expects documents to +arrive. + + This only has an effect if `PAPERLESS_CONSUMER_ENABLE_COLLATE_DOUBLE_SIDED` + has been enabled. Note that Paperless will not automatically create the + directory. + + Defaults to "double-sided". + +`PAPERLESS_CONSUMER_COLLATE_DOUBLE_SIDED_TIFF_SUPPORT=` +: Whether TIFF image files should be supported when collating documents. +This will automatically convert any TIFF image(s) to pdfs for later +processing. This only has an effect if +`PAPERLESS_CONSUMER_ENABLE_COLLATE_DOUBLE_SIDED` has been enabled. + + Defaults to false. + ## Binaries There are a few external software packages that Paperless expects to @@ -1123,7 +1160,7 @@ find on your system when it starts up. Unless you've done something creative with their installation, you probably won't need to edit any of these. However, if you've installed these programs somewhere where simply typing the name of the program doesn't automatically execute it -(ie. the program isn't in your \$PATH), then you'll need to specify +(ie. the program isn't in your $PATH), then you'll need to specify the literal path for that program. `PAPERLESS_CONVERT_BINARY=` @@ -1207,7 +1244,7 @@ actual group ID on the host system, which you can get by executing with English, German, Italian, Spanish and French. If your language is not in this list, install additional languages with this configuration option. You will need to [find the right LangCodes](https://tesseract-ocr.github.io/tessdoc/Data-Files-in-different-versions.html) -but note that (tesseract-ocr-\* package names)[https://packages.debian.org/bullseye/graphics/] +but note that [tesseract-ocr-\* package names](https://packages.debian.org/bullseye/graphics/) do not always correspond with the language codes e.g. "chi_tra" should be specified as "chi-tra". diff --git a/docs/development.md b/docs/development.md index 799584c0f..a39ccfa63 100644 --- a/docs/development.md +++ b/docs/development.md @@ -58,7 +58,7 @@ first-time setup. !!! note - Every command is executed directly from the root folder of the project unless specified otherwise. + Every command is executed directly from the root folder of the project unless specified otherwise. 1. Install prerequisites + pipenv as mentioned in [Bare metal route](/setup#bare_metal). @@ -177,68 +177,69 @@ The front end is built using AngularJS. In order to get started, you need Node.j The following commands are all performed in the `src-ui`-directory. You will need a running back end (including an active session) to connect to the back end API. To spin it up refer to the commands under the section [above](#back-end-development). -1. Install the Angular CLI. You might need sudo privileges - to perform this command: +1. Install the Angular CLI. You might need sudo privileges to perform this command: - ```bash - $ npm install -g @angular/cli - ``` + ```bash + $ npm install -g @angular/cli + ``` -2. Make sure that it's on your path. +2. Make sure that it's on your path. -3. Install all necessary modules: +3. Install all necessary modules: - ```bash - $ npm install - ``` + ```bash + $ npm install + ``` -4. You can launch a development server by running: +4. You can launch a development server by running: - ```bash - $ ng serve - ``` + ```bash + $ ng serve + ``` - This will automatically update whenever you save. However, in-place - compilation might fail on syntax errors, in which case you need to - restart it. + This will automatically update whenever you save. However, in-place + compilation might fail on syntax errors, in which case you need to + restart it. - By default, the development server is available on `http://localhost:4200/` and is configured to access the API at - `http://localhost:8000/api/`, which is the default of the backend. If you enabled `DEBUG` on the back end, several security overrides for allowed hosts, CORS and X-Frame-Options are in place so that the front end behaves exactly as in production. + By default, the development server is available on `http://localhost:4200/` and is configured to access the API at + `http://localhost:8000/api/`, which is the default of the backend. If you enabled `DEBUG` on the back end, several security overrides for allowed hosts, CORS and X-Frame-Options are in place so that the front end behaves exactly as in production. ### Testing and code style -- The front end code (.ts, .html, .scss) use `prettier` for code - formatting via the Git `pre-commit` hooks which run automatically on - commit. See [above](#code-formatting-with-pre-commit-hooks) for installation instructions. You can also run this via the CLI with a - command such as +The front end code (.ts, .html, .scss) use `prettier` for code +formatting via the Git `pre-commit` hooks which run automatically on +commit. See [above](#code-formatting-with-pre-commit-hooks) for installation instructions. You can also run this via the CLI with a +command such as - ```bash - $ git ls-files -- '*.ts' | xargs pre-commit run prettier --files - ``` +```bash +$ git ls-files -- '*.ts' | xargs pre-commit run prettier --files +``` -- Front end testing uses Jest and Playwright. Unit tests and e2e tests, - respectively, can be run non-interactively with: +Front end testing uses Jest and Playwright. Unit tests and e2e tests, +respectively, can be run non-interactively with: - ```bash - $ ng test - $ npx playwright test - ``` +```bash +$ ng test +$ npx playwright test +``` - - Playwright also includes a UI which can be run with: +Playwright also includes a UI which can be run with: - ```bash - $ npx playwright test --ui - ``` +```bash +$ npx playwright test --ui +``` -- In order to build the front end and serve it as part of Django, execute: +### Building the frontend - ```bash - $ ng build --configuration production - ``` +In order to build the front end and serve it as part of Django, execute: - This will build the front end and put it in a location from which the - Django server will serve it as static content. This way, you can verify - that authentication is working. +```bash +$ ng build --configuration production +``` + +This will build the front end and put it in a location from which the +Django server will serve it as static content. This way, you can verify +that authentication is working. ## Localization diff --git a/docs/faq.md b/docs/faq.md index d9a4e5f53..73ed87bb6 100644 --- a/docs/faq.md +++ b/docs/faq.md @@ -3,10 +3,11 @@ ## _What's the general plan for Paperless-ngx?_ **A:** While Paperless-ngx is already considered largely -"feature-complete" it is a community-driven project and development -will be guided in this way. New features can be submitted via GitHub -discussions and "up-voted" by the community but this is not a -guarantee the feature will be implemented. This project will always be +"feature-complete", it is a community-driven project and development +will be guided in this way. New features can be submitted via +[GitHub discussions](https://github.com/paperless-ngx/paperless-ngx/discussions) +and "up-voted" by the community, but this is not a +guarantee that the feature will be implemented. This project will always be open to collaboration in the form of PRs, ideas etc. ## _I'm using docker. Where are my documents?_ @@ -58,7 +59,7 @@ elsewhere. Here are a couple notes about that. WebP images are processed with OCR and converted into PDF documents. - Plain text documents are supported as well and are added verbatim to paperless. -- With the optional Tika integration enabled (see [Tika configuration](/configuration#tika), +- With the optional Tika integration enabled (see [Tika configuration](https://docs.paperless-ngx.com/configuration#tika)), Paperless also supports various Office documents (.docx, .doc, odt, .ppt, .pptx, .odp, .xls, .xlsx, .ods). @@ -82,7 +83,7 @@ has to do much less work to serve the data. ## _How do I install paperless-ngx on Raspberry Pi?_ **A:** Docker images are available for armv7 and arm64 hardware, so just -follow the docker-compose instructions. Apart from more required disk +follow the [docker-compose instructions](https://docs.paperless-ngx.com/setup/#installation). Apart from more required disk space compared to a bare metal installation, docker comes with close to zero overhead, even on Raspberry Pi. diff --git a/install-paperless-ngx.sh b/install-paperless-ngx.sh index 512ed9ab5..561c4e748 100755 --- a/install-paperless-ngx.sh +++ b/install-paperless-ngx.sh @@ -72,7 +72,7 @@ fi if ! docker stats --no-stream &> /dev/null ; then echo "" echo "WARN: It look like the current user does not have Docker permissions." - echo "WARN: Use 'sudo usermod -aG docker $USER' to assign Docker permissions to the user." + echo "WARN: Use 'sudo usermod -aG docker $USER' to assign Docker permissions to the user (may require restarting shell)." echo "" sleep 3 fi diff --git a/paperless.conf.example b/paperless.conf.example index 9b168db0c..1610dcda9 100644 --- a/paperless.conf.example +++ b/paperless.conf.example @@ -68,6 +68,9 @@ #PAPERLESS_CONSUMER_BARCODE_STRING=PATCHT #PAPERLESS_CONSUMER_BARCODE_UPSCALE=0.0 #PAPERLESS_CONSUMER_BARCODE_DPI=300 +#PAPERLESS_CONSUMER_ENABLE_COLLATE_DOUBLE_SIDED=false +#PAPERLESS_CONSUMER_COLLATE_DOUBLE_SIDED_SUBDIR_NAME=double-sided +#PAPERLESS_CONSUMER_COLLATE_DOUBLE_SIDED_TIFF_SUPPORT=false #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 diff --git a/src-ui/e2e/document-detail/document-detail.spec.ts b/src-ui/e2e/document-detail/document-detail.spec.ts index d96a02f37..8248db04b 100644 --- a/src-ui/e2e/document-detail/document-detail.spec.ts +++ b/src-ui/e2e/document-detail/document-detail.spec.ts @@ -94,51 +94,6 @@ test('should show a list of notes', async ({ page }) => { ).toHaveCount(4) }) -test('should support note deletion', async ({ page }) => { - await page.routeFromHAR(REQUESTS_HAR, { notFound: 'fallback' }) - await page.goto('/documents/175/notes') - await expect(page.locator('app-document-notes')).toBeVisible() - const deletePromise = page.waitForRequest( - (request) => - request.method() === 'DELETE' && - request.url().includes('/api/documents/175/notes/') - ) - await page - .getByRole('button', { name: /delete note/i, includeHidden: true }) - .first() - .click() - await deletePromise -}) - -test('should support note insertion', async ({ page }) => { - await page.routeFromHAR(REQUESTS_HAR, { notFound: 'fallback' }) - await page.goto('/documents/175/notes') - await expect(page.locator('app-document-notes')).toBeVisible() - await expect( - await page.getByRole('button', { - name: /delete note/i, - includeHidden: true, - }) - ).toHaveCount(4) - await page.getByPlaceholder('Enter note').fill('This is a new note') - const addPromise = page.waitForRequest((request) => { - if (!request.url().includes('/notes/')) { - // ignore other requests - return true - } else { - const data = request.postDataJSON() - const isValid = data['note'] === 'This is a new note' - return ( - isValid && - request.method() === 'POST' && - request.url().includes('/notes/') - ) - } - }) - await page.getByRole('button', { name: 'Add note' }).click() - await addPromise -}) - test('should support quick filters', async ({ page }) => { await page.routeFromHAR(REQUESTS_HAR2, { notFound: 'fallback' }) await page.goto('/documents/175/details') diff --git a/src-ui/e2e/manage/manage.spec.ts b/src-ui/e2e/manage/manage.spec.ts deleted file mode 100644 index 09d637410..000000000 --- a/src-ui/e2e/manage/manage.spec.ts +++ /dev/null @@ -1,58 +0,0 @@ -import { test, expect } from '@playwright/test' - -const REQUESTS_HAR1 = 'e2e/manage/requests/api-manage1.har' -const REQUESTS_HAR2 = 'e2e/manage/requests/api-manage2.har' - -test('should show a list of tags with bottom pagination as well', async ({ - page, -}) => { - await page.routeFromHAR(REQUESTS_HAR1, { notFound: 'fallback' }) - await page.goto('/tags') - await expect(page.getByRole('main')).toHaveText(/26 total tags/i) - await expect(await page.locator('ngb-pagination')).toHaveCount(2) -}) - -test('should show a list of correspondents without bottom pagination', async ({ - page, -}) => { - await page.routeFromHAR(REQUESTS_HAR2, { notFound: 'fallback' }) - await page.goto('/correspondents') - await expect(page.getByRole('main')).toHaveText(/4 total correspondents/i) - await expect(await page.locator('ngb-pagination')).toHaveCount(1) -}) - -test('should support quick filter Documents button', async ({ page }) => { - await page.routeFromHAR(REQUESTS_HAR1, { notFound: 'fallback' }) - await page.goto('/tags') - await page - .getByRole('row', { name: 'Inbox' }) - .getByRole('button', { name: 'Documents' }) - .click() - await expect(page).toHaveURL(/tags__id__all=9/) -}) - -test('should support item editing', async ({ page }) => { - await page.routeFromHAR(REQUESTS_HAR1, { notFound: 'fallback' }) - await page.goto('/tags') - await page - .getByRole('row', { name: 'Inbox' }) - .getByRole('button', { name: 'Edit' }) - .click() - await expect(page.getByRole('dialog')).toBeVisible() - await expect(page.getByLabel('Name')).toHaveValue('Inbox') - await page.getByTitle('Color').getByRole('button').click() - const color = await page.getByLabel('Color').inputValue() - - const updatePromise = page.waitForRequest((request) => { - const data = request.postDataJSON() - const isValid = data['color'] === color - return ( - isValid && - request.method() === 'PUT' && - request.url().includes('/api/tags/9/') - ) - }) - - await page.getByRole('button', { name: 'Save' }).click() - await updatePromise -}) diff --git a/src-ui/e2e/manage/requests/api-manage1.har b/src-ui/e2e/manage/requests/api-manage1.har deleted file mode 100644 index fb06549f6..000000000 --- a/src-ui/e2e/manage/requests/api-manage1.har +++ /dev/null @@ -1,1090 +0,0 @@ -{ - "log": { - "version": "1.2", - "creator": { - "name": "Playwright", - "version": "1.33.0" - }, - "browser": { - "name": "chromium", - "version": "113.0.5672.53" - }, - "entries": [ - { - "startedDateTime": "2023-05-14T07:14:44.479Z", - "time": 5.63, - "request": { - "method": "GET", - "url": "http://localhost:8000/api/ui_settings/", - "httpVersion": "HTTP/1.1", - "cookies": [], - "headers": [ - { "name": "Accept", "value": "application/json; version=3" }, - { "name": "Accept-Encoding", "value": "gzip, deflate, br" }, - { "name": "Accept-Language", "value": "en-US" }, - { "name": "Connection", "value": "keep-alive" }, - { "name": "Host", "value": "localhost:8000" }, - { "name": "Origin", "value": "http://localhost:4200" }, - { "name": "Referer", "value": "http://localhost:4200/" }, - { "name": "Sec-Fetch-Dest", "value": "empty" }, - { "name": "Sec-Fetch-Mode", "value": "cors" }, - { "name": "Sec-Fetch-Site", "value": "same-site" }, - { "name": "User-Agent", "value": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/113.0.5672.53 Safari/537.36" } - ], - "queryString": [], - "headersSize": -1, - "bodySize": -1 - }, - "response": { - "status": 200, - "statusText": "OK", - "httpVersion": "HTTP/1.1", - "cookies": [], - "headers": [ - { "name": "Access-Control-Allow-Origin", "value": "http://localhost:4200" }, - { "name": "Allow", "value": "GET, POST, HEAD, OPTIONS" }, - { "name": "Content-Encoding", "value": "br" }, - { "name": "Content-Language", "value": "en-us" }, - { "name": "Content-Length", "value": "956" }, - { "name": "Content-Type", "value": "application/json" }, - { "name": "Cross-Origin-Opener-Policy", "value": "same-origin" }, - { "name": "Referrer-Policy", "value": "same-origin" }, - { "name": "Vary", "value": "Accept, Accept-Language, Origin, Cookie, Accept-Encoding" }, - { "name": "X-Api-Version", "value": "3" }, - { "name": "X-Content-Type-Options", "value": "nosniff" }, - { "name": "X-Frame-Options", "value": "ANY" }, - { "name": "X-Version", "value": "1.14.4" } - ], - "content": { - "size": -1, - "mimeType": "application/json", - "text": "{\"user\":{\"id\":2,\"username\":\"testuser\",\"is_superuser\":false,\"groups\":[]},\"settings\":{\"language\":\"\",\"bulk_edit\":{\"confirmation_dialogs\":true,\"apply_on_close\":false},\"documentListSize\":50,\"dark_mode\":{\"use_system\":false,\"enabled\":\"false\",\"thumb_inverted\":\"true\"},\"theme\":{\"color\":\"#9fbf2f\"},\"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},\"comments_enabled\":true,\"slim_sidebar\":false,\"update_checking\":{\"enabled\":false,\"backend_setting\":\"default\"},\"saved_views\":{\"warn_on_unsaved_change\":true},\"notes_enabled\":true,\"tour_complete\":true},\"permissions\":[\"delete_permission\",\"change_user\",\"delete_tokenproxy\",\"delete_chordcounter\",\"change_uisettings\",\"delete_note\",\"change_session\",\"change_schedule\",\"add_userobjectpermission\",\"view_userobjectpermission\",\"change_taskattributes\",\"delete_tag\",\"delete_logentry\",\"change_frontendsettings\",\"view_documenttype\",\"add_comment\",\"add_log\",\"add_uisettings\",\"view_document\",\"change_userobjectpermission\",\"view_session\",\"change_failure\",\"change_storagepath\",\"change_mailrule\",\"delete_token\",\"view_taskresult\",\"change_ormq\",\"view_storagepath\",\"view_savedview\",\"change_processedmail\",\"change_chordcounter\",\"delete_user\",\"delete_savedview\",\"delete_mailaccount\",\"view_uisettings\",\"view_user\",\"view_paperlesstask\",\"add_task\",\"delete_success\",\"view_groupresult\",\"delete_comment\",\"view_correspondent\",\"add_logentry\",\"add_contenttype\",\"change_task\",\"add_paperlesstask\",\"delete_savedviewfilterrule\",\"add_groupresult\",\"view_tokenproxy\",\"add_processedmail\",\"add_schedule\",\"add_ormq\",\"delete_paperlesstask\",\"change_log\",\"view_processedmail\",\"view_mailaccount\",\"change_groupobjectpermission\",\"delete_ormq\",\"delete_documenttype\",\"add_success\",\"view_frontendsettings\",\"delete_correspondent\",\"view_failure\",\"view_ormq\",\"delete_taskattributes\",\"change_group\",\"add_failure\",\"delete_failure\",\"delete_taskresult\",\"view_savedviewfilterrule\",\"view_token\",\"add_chordcounter\",\"add_savedview\",\"change_paperlesstask\",\"delete_log\",\"add_user\",\"change_token\",\"change_note\",\"add_savedviewfilterrule\",\"change_savedview\",\"delete_group\",\"delete_userobjectpermission\",\"view_schedule\",\"delete_document\",\"add_tokenproxy\",\"change_permission\",\"delete_mailrule\",\"view_logentry\",\"add_permission\",\"delete_groupobjectpermission\",\"view_log\",\"view_taskattributes\",\"change_taskresult\",\"change_mailaccount\",\"delete_contenttype\",\"change_correspondent\",\"add_groupobjectpermission\",\"delete_processedmail\",\"view_note\",\"add_taskattributes\",\"add_document\",\"delete_task\",\"change_logentry\",\"change_contenttype\",\"delete_schedule\",\"delete_session\",\"add_token\",\"view_permission\",\"add_taskresult\",\"add_storagepath\",\"change_tag\",\"view_group\",\"add_note\",\"change_documenttype\",\"change_groupresult\",\"delete_frontendsettings\",\"view_chordcounter\",\"view_groupobjectpermission\",\"add_frontendsettings\",\"change_comment\",\"view_task\",\"add_correspondent\",\"view_comment\",\"view_contenttype\",\"change_success\",\"add_group\",\"add_session\",\"view_mailrule\",\"add_mailrule\",\"delete_storagepath\",\"add_tag\",\"view_tag\",\"add_documenttype\",\"add_mailaccount\",\"change_document\",\"delete_uisettings\",\"view_success\",\"change_savedviewfilterrule\",\"change_tokenproxy\",\"delete_groupresult\"]}" - }, - "headersSize": -1, - "bodySize": -1, - "redirectURL": "" - }, - "cache": {}, - "timings": { "send": -1, "wait": -1, "receive": 5.63 } - }, - { - "startedDateTime": "2023-05-14T07:14:44.595Z", - "time": 0.951, - "request": { - "method": "GET", - "url": "http://localhost:8000/api/saved_views/?page=1&page_size=100000", - "httpVersion": "HTTP/1.1", - "cookies": [], - "headers": [ - { "name": "Accept", "value": "application/json; version=3" }, - { "name": "Accept-Encoding", "value": "gzip, deflate, br" }, - { "name": "Accept-Language", "value": "en-US" }, - { "name": "Connection", "value": "keep-alive" }, - { "name": "Host", "value": "localhost:8000" }, - { "name": "Origin", "value": "http://localhost:4200" }, - { "name": "Referer", "value": "http://localhost:4200/" }, - { "name": "Sec-Fetch-Dest", "value": "empty" }, - { "name": "Sec-Fetch-Mode", "value": "cors" }, - { "name": "Sec-Fetch-Site", "value": "same-site" }, - { "name": "User-Agent", "value": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/113.0.5672.53 Safari/537.36" } - ], - "queryString": [ - { - "name": "page", - "value": "1" - }, - { - "name": "page_size", - "value": "100000" - } - ], - "headersSize": -1, - "bodySize": -1 - }, - "response": { - "status": 200, - "statusText": "OK", - "httpVersion": "HTTP/1.1", - "cookies": [], - "headers": [ - { "name": "Access-Control-Allow-Origin", "value": "http://localhost:4200" }, - { "name": "Allow", "value": "GET, POST, HEAD, OPTIONS" }, - { "name": "Content-Encoding", "value": "br" }, - { "name": "Content-Language", "value": "en-us" }, - { "name": "Content-Length", "value": "851" }, - { "name": "Content-Type", "value": "application/json" }, - { "name": "Cross-Origin-Opener-Policy", "value": "same-origin" }, - { "name": "Referrer-Policy", "value": "same-origin" }, - { "name": "Vary", "value": "Accept, Accept-Language, Origin, Cookie, Accept-Encoding" }, - { "name": "X-Api-Version", "value": "3" }, - { "name": "X-Content-Type-Options", "value": "nosniff" }, - { "name": "X-Frame-Options", "value": "ANY" }, - { "name": "X-Version", "value": "1.14.4" } - ], - "content": { - "size": -1, - "mimeType": "application/json", - "text": "{\"count\":6,\"next\":null,\"previous\":null,\"all\":[8,17,7,4,11,15],\"results\":[{\"id\":8,\"name\":\"Correspondent 2\",\"show_on_dashboard\":false,\"show_in_sidebar\":false,\"sort_field\":\"created\",\"sort_reverse\":true,\"filter_rules\":[{\"rule_type\":3,\"value\":\"2\"}],\"owner\":{\"id\":2,\"password\":\"pbkdf2_sha256$390000$ElHGEQzOIS3Gv2wu8YDbSt$bWASwmUfHtFMZ6+rG+4rrrtejjC9RiwXm6xMi0bxMZo=\",\"last_login\":\"2023-04-26T09:08:14Z\",\"is_superuser\":false,\"username\":\"testuser\",\"first_name\":\"\",\"last_name\":\"\",\"email\":\"test@user.com\",\"is_staff\":true,\"is_active\":true,\"date_joined\":\"2021-01-03T07:37:04Z\",\"groups\":[],\"user_permissions\":[57,58,59,60,5,6,7,8,1,2,3,4,9,10,11,12,61,62,63,64,65,66,67,68,13,14,15,16,117,118,119,120,121,122,123,124,113,114,115,116,77,78,79,80,85,86,87,88,69,70,71,72,81,82,83,84,73,74,75,76,33,34,35,36,21,22,23,24,37,38,39,40,89,90,91,92,29,30,31,32,109,137,110,138,111,139,112,140,105,106,107,108,41,42,43,44,45,46,47,48,93,94,95,96,25,26,27,28,101,102,103,104,97,98,99,100,125,126,127,128,129,130,131,132,49,50,51,52,53,54,55,56,133,134,135,136,17,18,19,20]},\"user_can_change\":true},{\"id\":17,\"name\":\"In the Last Month\",\"show_on_dashboard\":false,\"show_in_sidebar\":false,\"sort_field\":\"created\",\"sort_reverse\":true,\"filter_rules\":[{\"rule_type\":20,\"value\":\"created:[-1 month to now]\"}],\"owner\":{\"id\":2,\"password\":\"pbkdf2_sha256$390000$ElHGEQzOIS3Gv2wu8YDbSt$bWASwmUfHtFMZ6+rG+4rrrtejjC9RiwXm6xMi0bxMZo=\",\"last_login\":\"2023-04-26T09:08:14Z\",\"is_superuser\":false,\"username\":\"testuser\",\"first_name\":\"\",\"last_name\":\"\",\"email\":\"test@user.com\",\"is_staff\":true,\"is_active\":true,\"date_joined\":\"2021-01-03T07:37:04Z\",\"groups\":[],\"user_permissions\":[57,58,59,60,5,6,7,8,1,2,3,4,9,10,11,12,61,62,63,64,65,66,67,68,13,14,15,16,117,118,119,120,121,122,123,124,113,114,115,116,77,78,79,80,85,86,87,88,69,70,71,72,81,82,83,84,73,74,75,76,33,34,35,36,21,22,23,24,37,38,39,40,89,90,91,92,29,30,31,32,109,137,110,138,111,139,112,140,105,106,107,108,41,42,43,44,45,46,47,48,93,94,95,96,25,26,27,28,101,102,103,104,97,98,99,100,125,126,127,128,129,130,131,132,49,50,51,52,53,54,55,56,133,134,135,136,17,18,19,20]},\"user_can_change\":true},{\"id\":7,\"name\":\"Inbox\",\"show_on_dashboard\":true,\"show_in_sidebar\":true,\"sort_field\":\"created\",\"sort_reverse\":true,\"filter_rules\":[{\"rule_type\":6,\"value\":\"9\"}],\"owner\":{\"id\":2,\"password\":\"pbkdf2_sha256$390000$ElHGEQzOIS3Gv2wu8YDbSt$bWASwmUfHtFMZ6+rG+4rrrtejjC9RiwXm6xMi0bxMZo=\",\"last_login\":\"2023-04-26T09:08:14Z\",\"is_superuser\":false,\"username\":\"testuser\",\"first_name\":\"\",\"last_name\":\"\",\"email\":\"test@user.com\",\"is_staff\":true,\"is_active\":true,\"date_joined\":\"2021-01-03T07:37:04Z\",\"groups\":[],\"user_permissions\":[57,58,59,60,5,6,7,8,1,2,3,4,9,10,11,12,61,62,63,64,65,66,67,68,13,14,15,16,117,118,119,120,121,122,123,124,113,114,115,116,77,78,79,80,85,86,87,88,69,70,71,72,81,82,83,84,73,74,75,76,33,34,35,36,21,22,23,24,37,38,39,40,89,90,91,92,29,30,31,32,109,137,110,138,111,139,112,140,105,106,107,108,41,42,43,44,45,46,47,48,93,94,95,96,25,26,27,28,101,102,103,104,97,98,99,100,125,126,127,128,129,130,131,132,49,50,51,52,53,54,55,56,133,134,135,136,17,18,19,20]},\"user_can_change\":true},{\"id\":4,\"name\":\"Recently Added\",\"show_on_dashboard\":true,\"show_in_sidebar\":true,\"sort_field\":\"created\",\"sort_reverse\":true,\"filter_rules\":[],\"owner\":{\"id\":2,\"password\":\"pbkdf2_sha256$390000$ElHGEQzOIS3Gv2wu8YDbSt$bWASwmUfHtFMZ6+rG+4rrrtejjC9RiwXm6xMi0bxMZo=\",\"last_login\":\"2023-04-26T09:08:14Z\",\"is_superuser\":false,\"username\":\"testuser\",\"first_name\":\"\",\"last_name\":\"\",\"email\":\"test@user.com\",\"is_staff\":true,\"is_active\":true,\"date_joined\":\"2021-01-03T07:37:04Z\",\"groups\":[],\"user_permissions\":[57,58,59,60,5,6,7,8,1,2,3,4,9,10,11,12,61,62,63,64,65,66,67,68,13,14,15,16,117,118,119,120,121,122,123,124,113,114,115,116,77,78,79,80,85,86,87,88,69,70,71,72,81,82,83,84,73,74,75,76,33,34,35,36,21,22,23,24,37,38,39,40,89,90,91,92,29,30,31,32,109,137,110,138,111,139,112,140,105,106,107,108,41,42,43,44,45,46,47,48,93,94,95,96,25,26,27,28,101,102,103,104,97,98,99,100,125,126,127,128,129,130,131,132,49,50,51,52,53,54,55,56,133,134,135,136,17,18,19,20]},\"user_can_change\":true},{\"id\":11,\"name\":\"Tag: Another Sample Tag\",\"show_on_dashboard\":false,\"show_in_sidebar\":true,\"sort_field\":\"created\",\"sort_reverse\":true,\"filter_rules\":[{\"rule_type\":6,\"value\":\"4\"}],\"owner\":{\"id\":2,\"password\":\"pbkdf2_sha256$390000$ElHGEQzOIS3Gv2wu8YDbSt$bWASwmUfHtFMZ6+rG+4rrrtejjC9RiwXm6xMi0bxMZo=\",\"last_login\":\"2023-04-26T09:08:14Z\",\"is_superuser\":false,\"username\":\"testuser\",\"first_name\":\"\",\"last_name\":\"\",\"email\":\"test@user.com\",\"is_staff\":true,\"is_active\":true,\"date_joined\":\"2021-01-03T07:37:04Z\",\"groups\":[],\"user_permissions\":[57,58,59,60,5,6,7,8,1,2,3,4,9,10,11,12,61,62,63,64,65,66,67,68,13,14,15,16,117,118,119,120,121,122,123,124,113,114,115,116,77,78,79,80,85,86,87,88,69,70,71,72,81,82,83,84,73,74,75,76,33,34,35,36,21,22,23,24,37,38,39,40,89,90,91,92,29,30,31,32,109,137,110,138,111,139,112,140,105,106,107,108,41,42,43,44,45,46,47,48,93,94,95,96,25,26,27,28,101,102,103,104,97,98,99,100,125,126,127,128,129,130,131,132,49,50,51,52,53,54,55,56,133,134,135,136,17,18,19,20]},\"user_can_change\":true},{\"id\":15,\"name\":\"View ASN not empty\",\"show_on_dashboard\":false,\"show_in_sidebar\":false,\"sort_field\":\"created\",\"sort_reverse\":true,\"filter_rules\":[{\"rule_type\":18,\"value\":\"false\"}],\"owner\":{\"id\":2,\"password\":\"pbkdf2_sha256$390000$ElHGEQzOIS3Gv2wu8YDbSt$bWASwmUfHtFMZ6+rG+4rrrtejjC9RiwXm6xMi0bxMZo=\",\"last_login\":\"2023-04-26T09:08:14Z\",\"is_superuser\":false,\"username\":\"testuser\",\"first_name\":\"\",\"last_name\":\"\",\"email\":\"test@user.com\",\"is_staff\":true,\"is_active\":true,\"date_joined\":\"2021-01-03T07:37:04Z\",\"groups\":[],\"user_permissions\":[57,58,59,60,5,6,7,8,1,2,3,4,9,10,11,12,61,62,63,64,65,66,67,68,13,14,15,16,117,118,119,120,121,122,123,124,113,114,115,116,77,78,79,80,85,86,87,88,69,70,71,72,81,82,83,84,73,74,75,76,33,34,35,36,21,22,23,24,37,38,39,40,89,90,91,92,29,30,31,32,109,137,110,138,111,139,112,140,105,106,107,108,41,42,43,44,45,46,47,48,93,94,95,96,25,26,27,28,101,102,103,104,97,98,99,100,125,126,127,128,129,130,131,132,49,50,51,52,53,54,55,56,133,134,135,136,17,18,19,20]},\"user_can_change\":true}]}" - }, - "headersSize": -1, - "bodySize": -1, - "redirectURL": "" - }, - "cache": {}, - "timings": { "send": -1, "wait": -1, "receive": 0.951 } - }, - { - "startedDateTime": "2023-05-14T07:14:44.595Z", - "time": 0.643, - "request": { - "method": "GET", - "url": "http://localhost:8000/api/tasks/", - "httpVersion": "HTTP/1.1", - "cookies": [], - "headers": [ - { "name": "Accept", "value": "application/json; version=3" }, - { "name": "Accept-Encoding", "value": "gzip, deflate, br" }, - { "name": "Accept-Language", "value": "en-US" }, - { "name": "Connection", "value": "keep-alive" }, - { "name": "Host", "value": "localhost:8000" }, - { "name": "Origin", "value": "http://localhost:4200" }, - { "name": "Referer", "value": "http://localhost:4200/" }, - { "name": "Sec-Fetch-Dest", "value": "empty" }, - { "name": "Sec-Fetch-Mode", "value": "cors" }, - { "name": "Sec-Fetch-Site", "value": "same-site" }, - { "name": "User-Agent", "value": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/113.0.5672.53 Safari/537.36" } - ], - "queryString": [], - "headersSize": -1, - "bodySize": -1 - }, - "response": { - "status": 200, - "statusText": "OK", - "httpVersion": "HTTP/1.1", - "cookies": [], - "headers": [ - { "name": "Access-Control-Allow-Origin", "value": "http://localhost:4200" }, - { "name": "Allow", "value": "GET, HEAD, OPTIONS" }, - { "name": "Content-Language", "value": "en-us" }, - { "name": "Content-Length", "value": "2" }, - { "name": "Content-Type", "value": "application/json" }, - { "name": "Cross-Origin-Opener-Policy", "value": "same-origin" }, - { "name": "Referrer-Policy", "value": "same-origin" }, - { "name": "Vary", "value": "Accept, Accept-Language, Origin, Cookie" }, - { "name": "X-Api-Version", "value": "3" }, - { "name": "X-Content-Type-Options", "value": "nosniff" }, - { "name": "X-Frame-Options", "value": "ANY" }, - { "name": "X-Version", "value": "1.14.4" } - ], - "content": { - "size": -1, - "mimeType": "application/json", - "text": "[]" - }, - "headersSize": -1, - "bodySize": -1, - "redirectURL": "" - }, - "cache": {}, - "timings": { "send": -1, "wait": -1, "receive": 0.643 } - }, - { - "startedDateTime": "2023-05-14T07:14:44.595Z", - "time": 0.551, - "request": { - "method": "GET", - "url": "http://localhost:8000/api/tags/?page=1&full_perms=true", - "httpVersion": "HTTP/1.1", - "cookies": [], - "headers": [ - { "name": "Accept", "value": "application/json; version=3" }, - { "name": "Accept-Encoding", "value": "gzip, deflate, br" }, - { "name": "Accept-Language", "value": "en-US" }, - { "name": "Connection", "value": "keep-alive" }, - { "name": "Host", "value": "localhost:8000" }, - { "name": "Origin", "value": "http://localhost:4200" }, - { "name": "Referer", "value": "http://localhost:4200/" }, - { "name": "Sec-Fetch-Dest", "value": "empty" }, - { "name": "Sec-Fetch-Mode", "value": "cors" }, - { "name": "Sec-Fetch-Site", "value": "same-site" }, - { "name": "User-Agent", "value": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/113.0.5672.53 Safari/537.36" } - ], - "queryString": [ - { - "name": "page", - "value": "1" - }, - { - "name": "full_perms", - "value": "true" - } - ], - "headersSize": -1, - "bodySize": -1 - }, - "response": { - "status": 200, - "statusText": "OK", - "httpVersion": "HTTP/1.1", - "cookies": [], - "headers": [ - { "name": "Access-Control-Allow-Origin", "value": "http://localhost:4200" }, - { "name": "Allow", "value": "GET, POST, HEAD, OPTIONS" }, - { "name": "Content-Encoding", "value": "br" }, - { "name": "Content-Language", "value": "en-us" }, - { "name": "Content-Length", "value": "883" }, - { "name": "Content-Type", "value": "application/json" }, - { "name": "Cross-Origin-Opener-Policy", "value": "same-origin" }, - { "name": "Referrer-Policy", "value": "same-origin" }, - { "name": "Vary", "value": "Accept, Accept-Language, Origin, Cookie, Accept-Encoding" }, - { "name": "X-Api-Version", "value": "3" }, - { "name": "X-Content-Type-Options", "value": "nosniff" }, - { "name": "X-Frame-Options", "value": "ANY" }, - { "name": "X-Version", "value": "1.14.4" } - ], - "content": { - "size": -1, - "mimeType": "application/json", - "text": "{\"count\":26,\"next\":\"http://localhost:8000/api/tags/?full_perms=true&page=2\",\"previous\":null,\"all\":[4,9,10,7,6,14,27,28,29,2,30,31,15,32,33,34,35,36,3,20,5,8,1,18,19,13],\"results\":[{\"id\":4,\"slug\":\"another-sample-tag\",\"name\":\"Another Sample Tag\",\"color\":\"#cf7440\",\"text_color\":\"#000000\",\"match\":\"\",\"matching_algorithm\":6,\"is_insensitive\":true,\"is_inbox_tag\":false,\"document_count\":33,\"owner\":2,\"permissions\":{\"view\":{\"users\":[],\"groups\":[]},\"change\":{\"users\":[],\"groups\":[]}}},{\"id\":9,\"slug\":\"inbox\",\"name\":\"Inbox\",\"color\":\"#6bdac8\",\"text_color\":\"#000000\",\"match\":\"\",\"matching_algorithm\":6,\"is_insensitive\":true,\"is_inbox_tag\":true,\"document_count\":8,\"owner\":null,\"permissions\":{\"view\":{\"users\":[],\"groups\":[]},\"change\":{\"users\":[],\"groups\":[]}}},{\"id\":10,\"slug\":\"just-another-tag\",\"name\":\"Just another tag\",\"color\":\"#2aaa91\",\"text_color\":\"#000000\",\"match\":\"\",\"matching_algorithm\":6,\"is_insensitive\":true,\"is_inbox_tag\":false,\"document_count\":3,\"owner\":null,\"permissions\":{\"view\":{\"users\":[],\"groups\":[]},\"change\":{\"users\":[],\"groups\":[]}}},{\"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,\"owner\":null,\"permissions\":{\"view\":{\"users\":[],\"groups\":[]},\"change\":{\"users\":[],\"groups\":[]}}},{\"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\":2,\"owner\":null,\"permissions\":{\"view\":{\"users\":[],\"groups\":[]},\"change\":{\"users\":[],\"groups\":[]}}},{\"id\":14,\"slug\":\"tag-12\",\"name\":\"Tag 12\",\"color\":\"#28a329\",\"text_color\":\"#ffffff\",\"match\":\"\",\"matching_algorithm\":6,\"is_insensitive\":true,\"is_inbox_tag\":false,\"document_count\":1,\"owner\":null,\"permissions\":{\"view\":{\"users\":[],\"groups\":[]},\"change\":{\"users\":[],\"groups\":[]}}},{\"id\":27,\"slug\":\"tag-17\",\"name\":\"Tag 17\",\"color\":\"#2cb38e\",\"text_color\":\"#000000\",\"match\":\"\",\"matching_algorithm\":6,\"is_insensitive\":true,\"is_inbox_tag\":false,\"document_count\":0,\"owner\":2,\"permissions\":{\"view\":{\"users\":[],\"groups\":[]},\"change\":{\"users\":[],\"groups\":[]}}},{\"id\":28,\"slug\":\"tag-18\",\"name\":\"Tag 18\",\"color\":\"#ce8c3e\",\"text_color\":\"#000000\",\"match\":\"\",\"matching_algorithm\":6,\"is_insensitive\":true,\"is_inbox_tag\":false,\"document_count\":0,\"owner\":2,\"permissions\":{\"view\":{\"users\":[],\"groups\":[]},\"change\":{\"users\":[],\"groups\":[]}}},{\"id\":29,\"slug\":\"tag-19\",\"name\":\"Tag 19\",\"color\":\"#e6b69b\",\"text_color\":\"#000000\",\"match\":\"\",\"matching_algorithm\":6,\"is_insensitive\":true,\"is_inbox_tag\":false,\"document_count\":0,\"owner\":2,\"permissions\":{\"view\":{\"users\":[],\"groups\":[]},\"change\":{\"users\":[],\"groups\":[]}}},{\"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\":8,\"owner\":null,\"permissions\":{\"view\":{\"users\":[],\"groups\":[]},\"change\":{\"users\":[],\"groups\":[]}}},{\"id\":30,\"slug\":\"tag-20\",\"name\":\"Tag 20\",\"color\":\"#505cd3\",\"text_color\":\"#ffffff\",\"match\":\"\",\"matching_algorithm\":6,\"is_insensitive\":true,\"is_inbox_tag\":false,\"document_count\":0,\"owner\":2,\"permissions\":{\"view\":{\"users\":[],\"groups\":[]},\"change\":{\"users\":[],\"groups\":[]}}},{\"id\":31,\"slug\":\"tag-21\",\"name\":\"Tag 21\",\"color\":\"#e2ba8b\",\"text_color\":\"#000000\",\"match\":\"\",\"matching_algorithm\":6,\"is_insensitive\":true,\"is_inbox_tag\":false,\"document_count\":0,\"owner\":2,\"permissions\":{\"view\":{\"users\":[],\"groups\":[]},\"change\":{\"users\":[],\"groups\":[]}}},{\"id\":15,\"slug\":\"tag-222\",\"name\":\"Tag 222\",\"color\":\"#ccbc33\",\"text_color\":\"#000000\",\"match\":\"\",\"matching_algorithm\":6,\"is_insensitive\":true,\"is_inbox_tag\":false,\"document_count\":1,\"owner\":null,\"permissions\":{\"view\":{\"users\":[],\"groups\":[]},\"change\":{\"users\":[],\"groups\":[]}}},{\"id\":32,\"slug\":\"tag-23\",\"name\":\"Tag 23\",\"color\":\"#5d71d6\",\"text_color\":\"#ffffff\",\"match\":\"\",\"matching_algorithm\":6,\"is_insensitive\":true,\"is_inbox_tag\":false,\"document_count\":0,\"owner\":2,\"permissions\":{\"view\":{\"users\":[],\"groups\":[]},\"change\":{\"users\":[],\"groups\":[]}}},{\"id\":33,\"slug\":\"tag-24\",\"name\":\"Tag 24\",\"color\":\"#79ddab\",\"text_color\":\"#000000\",\"match\":\"\",\"matching_algorithm\":6,\"is_insensitive\":true,\"is_inbox_tag\":false,\"document_count\":0,\"owner\":2,\"permissions\":{\"view\":{\"users\":[],\"groups\":[]},\"change\":{\"users\":[],\"groups\":[]}}},{\"id\":34,\"slug\":\"tag-25\",\"name\":\"Tag 25\",\"color\":\"#7ededc\",\"text_color\":\"#000000\",\"match\":\"\",\"matching_algorithm\":6,\"is_insensitive\":true,\"is_inbox_tag\":false,\"document_count\":0,\"owner\":2,\"permissions\":{\"view\":{\"users\":[],\"groups\":[]},\"change\":{\"users\":[],\"groups\":[]}}},{\"id\":35,\"slug\":\"tag-26\",\"name\":\"Tag 26\",\"color\":\"#55d466\",\"text_color\":\"#000000\",\"match\":\"\",\"matching_algorithm\":6,\"is_insensitive\":true,\"is_inbox_tag\":false,\"document_count\":0,\"owner\":2,\"permissions\":{\"view\":{\"users\":[],\"groups\":[]},\"change\":{\"users\":[],\"groups\":[]}}},{\"id\":36,\"slug\":\"tag-27\",\"name\":\"Tag 27\",\"color\":\"#d494e4\",\"text_color\":\"#000000\",\"match\":\"\",\"matching_algorithm\":6,\"is_insensitive\":true,\"is_inbox_tag\":false,\"document_count\":0,\"owner\":2,\"permissions\":{\"view\":{\"users\":[],\"groups\":[]},\"change\":{\"users\":[],\"groups\":[]}}},{\"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\":6,\"owner\":null,\"permissions\":{\"view\":{\"users\":[],\"groups\":[]},\"change\":{\"users\":[],\"groups\":[]}}},{\"id\":20,\"slug\":\"tag-owned-by-test\",\"name\":\"Tag Owned By Test\",\"color\":\"#a6cee3\",\"text_color\":\"#000000\",\"match\":\"\",\"matching_algorithm\":6,\"is_insensitive\":true,\"is_inbox_tag\":false,\"document_count\":1,\"owner\":15,\"permissions\":{\"view\":{\"users\":[2],\"groups\":[]},\"change\":{\"users\":[],\"groups\":[]}}},{\"id\":5,\"slug\":\"tagwithpartial\",\"name\":\"TagWithPartial\",\"color\":\"#3b2db4\",\"text_color\":\"#ffffff\",\"match\":\"\",\"matching_algorithm\":6,\"is_insensitive\":true,\"is_inbox_tag\":false,\"document_count\":6,\"owner\":2,\"permissions\":{\"view\":{\"users\":[15],\"groups\":[]},\"change\":{\"users\":[],\"groups\":[]}}},{\"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\":2,\"owner\":null,\"permissions\":{\"view\":{\"users\":[],\"groups\":[]},\"change\":{\"users\":[],\"groups\":[]}}},{\"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\":5,\"owner\":null,\"permissions\":{\"view\":{\"users\":[],\"groups\":[]},\"change\":{\"users\":[],\"groups\":[]}}},{\"id\":18,\"slug\":\"test-tag-new\",\"name\":\"Test Tag New\",\"color\":\"#a6cee3\",\"text_color\":\"#000000\",\"match\":\"\",\"matching_algorithm\":1,\"is_insensitive\":true,\"is_inbox_tag\":false,\"document_count\":1,\"owner\":null,\"permissions\":{\"view\":{\"users\":[],\"groups\":[]},\"change\":{\"users\":[],\"groups\":[]}}},{\"id\":19,\"slug\":\"test-tag-new-2\",\"name\":\"Test Tag New 2\",\"color\":\"#a6cee3\",\"text_color\":\"#000000\",\"match\":\"\",\"matching_algorithm\":1,\"is_insensitive\":true,\"is_inbox_tag\":false,\"document_count\":1,\"owner\":null,\"permissions\":{\"view\":{\"users\":[],\"groups\":[]},\"change\":{\"users\":[],\"groups\":[]}}}]}" - }, - "headersSize": -1, - "bodySize": -1, - "redirectURL": "" - }, - "cache": {}, - "timings": { "send": -1, "wait": -1, "receive": 0.551 } - }, - { - "startedDateTime": "2023-05-14T07:14:44.774Z", - "time": 0.666, - "request": { - "method": "GET", - "url": "http://localhost:8000/api/documents/?page=1&page_size=50&ordering=-created&truncate_content=true&tags__id__all=9", - "httpVersion": "HTTP/1.1", - "cookies": [], - "headers": [ - { "name": "Accept", "value": "application/json; version=3" }, - { "name": "Accept-Encoding", "value": "gzip, deflate, br" }, - { "name": "Accept-Language", "value": "en-US" }, - { "name": "Connection", "value": "keep-alive" }, - { "name": "Host", "value": "localhost:8000" }, - { "name": "Origin", "value": "http://localhost:4200" }, - { "name": "Referer", "value": "http://localhost:4200/" }, - { "name": "Sec-Fetch-Dest", "value": "empty" }, - { "name": "Sec-Fetch-Mode", "value": "cors" }, - { "name": "Sec-Fetch-Site", "value": "same-site" }, - { "name": "User-Agent", "value": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/113.0.5672.53 Safari/537.36" } - ], - "queryString": [ - { - "name": "page", - "value": "1" - }, - { - "name": "page_size", - "value": "50" - }, - { - "name": "ordering", - "value": "-created" - }, - { - "name": "truncate_content", - "value": "true" - }, - { - "name": "tags__id__all", - "value": "9" - } - ], - "headersSize": -1, - "bodySize": -1 - }, - "response": { - "status": 200, - "statusText": "OK", - "httpVersion": "HTTP/1.1", - "cookies": [], - "headers": [ - { "name": "Access-Control-Allow-Origin", "value": "http://localhost:4200" }, - { "name": "Allow", "value": "GET, POST, HEAD, OPTIONS" }, - { "name": "Content-Encoding", "value": "br" }, - { "name": "Content-Language", "value": "en-us" }, - { "name": "Content-Length", "value": "3346" }, - { "name": "Content-Type", "value": "application/json" }, - { "name": "Cross-Origin-Opener-Policy", "value": "same-origin" }, - { "name": "Referrer-Policy", "value": "same-origin" }, - { "name": "Vary", "value": "Accept, Accept-Language, Origin, Cookie, Accept-Encoding" }, - { "name": "X-Api-Version", "value": "3" }, - { "name": "X-Content-Type-Options", "value": "nosniff" }, - { "name": "X-Frame-Options", "value": "ANY" }, - { "name": "X-Version", "value": "1.14.4" } - ], - "content": { - "size": -1, - "mimeType": "application/json", - "text": "{\"count\":8,\"next\":null,\"previous\":null,\"all\":[310,297,298,296,290,277,312,295],\"results\":[{\"id\":310,\"correspondent\":3,\"document_type\":1,\"storage_path\":null,\"title\":\"[paperless] test post-owner\",\"content\":\"Medical Teacher\\r\\n\\r\\nISSN: 0142-159X (Print) 1466-187X (Online) Journal homepage: http://www.tandfonline.com/loi/imte20\\r\\n\\r\\nHas the new Kirkpatrick generation built a better\\r\\nhammer for our evaluation toolbox?\\r\\n\\r\\nKatherine A. Moreau\\r\\n\\r\\nTo cite this article: Katherine A. Moreau (2017) Has the new Kirkpatrick generation built\\r\\na better hammer for our evaluation toolbox?, Medical Teacher, 39:9, 999-1001, DOI:\\r\\n10.1080/0142159X.2017.1337874\\r\\n\\r\\nTo link to this article: https://doi.org/10.1080/0142159X.2017.1337874\\r\\n\\r\\nPublished online: 26 Jun 2017.\\r\\n\\r\\nS\",\"tags\":[9,2,20],\"created\":\"2023-03-26T00:00:00Z\",\"created_date\":\"2023-03-26\",\"modified\":\"2023-04-27T21:13:54.604887Z\",\"added\":\"2022-12-14T06:20:26.891909Z\",\"archive_serial_number\":null,\"original_file_name\":\"2023-03-26 Corresp Owned by Test [paperless] test post-owner.pdf\",\"archived_file_name\":\"2023-03-26 Corresp Owned by Test [paperless] test post-owner.pdf\",\"owner\":15,\"user_can_change\":false,\"notes\":[]},{\"id\":297,\"correspondent\":12,\"document_type\":null,\"storage_path\":null,\"title\":\"1 Testing New Title Updated 2\",\"content\":\"one,1.0\\nfive,5.0\",\"tags\":[4,9],\"created\":\"2022-10-03T00:00:00Z\",\"created_date\":\"2022-10-03\",\"modified\":\"2023-03-18T03:22:11.771968Z\",\"added\":\"2022-10-03T00:53:12.731161Z\",\"archive_serial_number\":null,\"original_file_name\":\"2022-10-03 Correspondent 9 1 Testing New Title Updated 2.txt\",\"archived_file_name\":null,\"owner\":2,\"user_can_change\":true,\"notes\":[{\"id\":65,\"note\":\"hiya\",\"created\":\"2023-04-29T07:10:13.732931Z\",\"document\":297,\"user\":2}]},{\"id\":298,\"correspondent\":3,\"document_type\":null,\"storage_path\":null,\"title\":\"Sample100.csv\",\"content\":\"Serial Number,Company Name,Employee Markme,Description,Leave\\r\\n9788189999599,TALES OF SHIVA,Mark,mark,0\\r\\n9780099578079,1Q84 THE COMPLETE TRILOGY,HARUKI MURAKAMI,Mark,0\\r\\n9780198082897,MY KUMAN,Mark,Mark,0\\r\\n9780007880331,THE GOD OF SMAAL THINGS,ARUNDHATI ROY,4TH HARPER COLLINS,2\\r\\n9780545060455,THE BLACK CIRCLE,Mark,4TH HARPER COLLINS,0\\r\\n9788126525072,THE THREE LAWS OF PERFORMANCE,Mark,4TH HARPER COLLINS,0\\r\\n9789381626610,CHAMarkKYA MANTRA,Mark,4TH HARPER COLLINS,0\\r\\n9788184513523,59.FLAGS,Mark,4TH HARPER COLLINS,0\\r\\n9780743234801,THE POWER OF POSITIV\",\"tags\":[9,10,2],\"created\":\"2022-10-03T00:00:00Z\",\"created_date\":\"2022-10-03\",\"modified\":\"2023-05-04T06:35:51.600152Z\",\"added\":\"2022-10-03T06:54:52.615096Z\",\"archive_serial_number\":112412326,\"original_file_name\":\"2022-10-03 Corresp Owned by Test Sample100.csv.csv\",\"archived_file_name\":null,\"owner\":null,\"user_can_change\":true,\"notes\":[{\"id\":64,\"note\":\"testing\",\"created\":\"2023-04-29T06:50:02.993401Z\",\"document\":298,\"user\":2}]},{\"id\":296,\"correspondent\":1,\"document_type\":1,\"storage_path\":null,\"title\":\"UM_PPBE_en_v29\",\"content\":\"PowerPanel® Business Edition \\nUser’s Manual \\n\\nRev. 29 \\n\\n2018/04 \\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\nELECTRONIC END USER LICENSE AGREEMENT FOR CYBERPOWER POWERPANEL BUSINESS \\n\\nEDITION \\n\\nNOTICE TO USER: \\n\\nTHIS IS A CONTRACT. BY INSTALLING THIS SOFTWARE YOU ACCEPT ALL THE TERMS AND \\n\\nCONDITIONS OF THIS AGREEMENT. The End User License Agreement and copyright of CyberPower \\n\\nPowerPanel® Business Edition product and related explanatory materials (\\\"Software\\\") are owned by Cyber \\n\\nPower Systems (USA), Inc. The term \\\"Software\\\" also shall include any upgrades, modified\",\"tags\":[4,9],\"created\":\"2022-10-02T00:00:00Z\",\"created_date\":\"2022-10-02\",\"modified\":\"2023-05-12T06:11:20.780276Z\",\"added\":\"2022-10-02T07:17:09.462696Z\",\"archive_serial_number\":null,\"original_file_name\":\"2022-10-02 Test Correspondent 1 UM_PPBE_en_v29.pdf\",\"archived_file_name\":\"2022-10-02 Test Correspondent 1 UM_PPBE_en_v29.pdf\",\"owner\":2,\"user_can_change\":true,\"notes\":[{\"id\":58,\"note\":\"add another\",\"created\":\"2023-04-29T05:59:04.944315Z\",\"document\":296,\"user\":2},{\"id\":59,\"note\":\"test again\",\"created\":\"2023-04-29T05:59:26.727002Z\",\"document\":296,\"user\":2},{\"id\":67,\"note\":\"This is a new note\",\"created\":\"2023-05-12T16:17:07.202260Z\",\"document\":296,\"user\":2},{\"id\":68,\"note\":\"Testing another note\",\"created\":\"2023-05-12T16:51:30.556198Z\",\"document\":296,\"user\":2}]},{\"id\":290,\"correspondent\":null,\"document_type\":null,\"storage_path\":2,\"title\":\"drylab Test\",\"content\":\"Drylab(cid:78)(cid:101)(cid:119)(cid:115)\\n\\n(cid:102)(cid:111)(cid:114)(cid:32)(cid:105)(cid:110)(cid:118)(cid:101)(cid:115)(cid:116)(cid:111)(cid:114)(cid:115)(cid:32)(cid:38)(cid:32)(cid:102)(cid:114)(cid:105)(cid:101)(cid:110)(cid:100)(cid:115)(cid:32)(cid:225)(cid:32)(cid:77)(cid:97)(cid:121)(cid:32)(cid:50)(cid:48)(cid:49)(cid:55)\\n\\nWelcome to our 昀椀rst newsletter of 2017! It's\\nbeen a while since the last one, and a lot has\\nhappened. We promise to keep them coming\\nevery two months hereafter, and permit\\nourselves to make this one rather long.\",\"tags\":[9],\"created\":\"2022-09-12T00:00:00Z\",\"created_date\":\"2022-09-12\",\"modified\":\"2023-03-31T20:29:00.967776Z\",\"added\":\"2022-09-12T18:50:37.033041Z\",\"archive_serial_number\":null,\"original_file_name\":\"2022-09-12 drylab Test.pdf\",\"archived_file_name\":\"2022-09-12 drylab Test.pdf\",\"owner\":2,\"user_can_change\":true,\"notes\":[]},{\"id\":277,\"correspondent\":null,\"document_type\":1,\"storage_path\":2,\"title\":\"InDesign 2022 Scripting Read Me\",\"content\":\"Adobe® InDesign® 2022 Scripting ReadMe\\n\\nThis document contains information about scripting in Adobe InDesign 2022, including:\\n\\n•\\n\\n•\\n\\n•\\n\\n•\\n\\nA summary of the InDesign scripting documentation (see “InDesign Scripting Documentation” on \\npage 1).\\n\\nDirections for running a script (see “Running Scripts” on page 2).\\n\\nA list and brief description of InDesign sample scripts (see “Sample Scripts” on page 2).\\n\\nA list of known issues in InDesign scripting (see “Known Issues Related to InDesign Scripting” on \\npage 9).\\n\\nFor more information on InDesign script\",\"tags\":[4,9,10,14,2,3,5,19],\"created\":\"2022-06-10T00:00:00Z\",\"created_date\":\"2022-06-10\",\"modified\":\"2023-03-04T03:59:21.797338Z\",\"added\":\"2022-06-10T20:11:42.076216Z\",\"archive_serial_number\":null,\"original_file_name\":\"2022-06-10 InDesign 2022 Scripting Read Me.pdf\",\"archived_file_name\":\"2022-06-10 InDesign 2022 Scripting Read Me.pdf\",\"owner\":null,\"user_can_change\":true,\"notes\":[{\"id\":30,\"note\":\"One more time\",\"created\":\"2023-03-17T22:02:14.357575Z\",\"document\":277,\"user\":2},{\"id\":31,\"note\":\"We're gonna celebrate\",\"created\":\"2023-03-17T22:02:24.321943Z\",\"document\":277,\"user\":2},{\"id\":32,\"note\":\"And again\",\"created\":\"2023-03-17T22:04:57.074641Z\",\"document\":277,\"user\":2},{\"id\":33,\"note\":\"All good\",\"created\":\"2023-03-17T22:05:01.631415Z\",\"document\":277,\"user\":2},{\"id\":36,\"note\":\"This is a comment with some markdown. Watch this:\\n\\n- [Here's a doc link](http://localhost:4200/documents/278)\",\"created\":\"2023-03-19T06:44:05.380252Z\",\"document\":277,\"user\":2},{\"id\":37,\"note\":\"1. Markdown\\n2. Is cool\\n3. But how important is it?\",\"created\":\"2023-03-19T06:48:14.739706Z\",\"document\":277,\"user\":2}]},{\"id\":312,\"correspondent\":null,\"document_type\":null,\"storage_path\":null,\"title\":\"[paperless] Owned by Test Not Shared\",\"content\":\"Abstract ID Number: 191092\\r\\nThis Abstract is Best Characterized As: Research Abstract\\r\\nThis Abstract’s Focus is Best Characterized As: Undergraduate Medical Education (UME)\\r\\nMost Appropriate Sub Category: Ultrasound\\r\\n\\r\\nAbstract Title: Medical Students Want More Ultrasound Incorporated Into Their Education\\r\\n\\r\\nAbstract:\\r\\nBackground:\\r\\nUltrasound (US) has become increasingly important in emergency medicine (EM) training, but informal feedback from\\r\\nrotating medical students suggested that many programs have not incorporated US training into their r\",\"tags\":[4,9,2],\"created\":\"2018-07-01T00:00:00Z\",\"created_date\":\"2018-07-01\",\"modified\":\"2023-05-02T07:30:47.939341Z\",\"added\":\"2023-03-01T09:40:10.899460Z\",\"archive_serial_number\":null,\"original_file_name\":\"2018-07-01 [paperless] Owned by Test Not Shared.pdf\",\"archived_file_name\":\"2018-07-01 [paperless] Owned by Test Not Shared.pdf\",\"owner\":15,\"user_can_change\":true,\"notes\":[]},{\"id\":295,\"correspondent\":12,\"document_type\":null,\"storage_path\":null,\"title\":\"sample_invoice_pdfa\",\"content\":\"InInvvoicoicee\\n\\nCustomer Name\\nStreet\\nPostcode City\\nCountry\\n\\nInvoice date:\\nInvoice number:\\nPayment due:\\n\\nYesLogic Pty. Ltd.\\n7 / 39 Bouverie St\\nCarlton VIC 3053\\nAustralia\\n\\nwww.yeslogic.com\\nABN 32 101 193 560\\n\\nNov 26, 2016\\n161126\\n30 days after invoice date\\n\\nDescription\\n\\nFrom\\n\\nUntil\\n\\nPrince Upgrades & Support\\n\\nNov 26, 2016\\n\\nNov 26, 2017\\n\\nTotal\\n\\nAmount\\n\\nUSD $950.00\\n\\nUSD $950.00\\n\\nPlease transfer amount to:\\n\\nBank account name:\\nName of Bank:\\nBank State Branch (BSB):\\nBank State Branch (BSB):\\nBank State Branch (BSB):\\nBank account number:\\nBank SWIFT code:\",\"tags\":[4,9],\"created\":\"2016-11-26T00:00:00Z\",\"created_date\":\"2016-11-26\",\"modified\":\"2022-12-14T07:14:09.404545Z\",\"added\":\"2022-09-12T19:09:08.194023Z\",\"archive_serial_number\":null,\"original_file_name\":\"2016-11-26 Correspondent 9 sample_invoice_pdfa.pdf\",\"archived_file_name\":\"2016-11-26 Correspondent 9 sample_invoice_pdfa.pdf\",\"owner\":null,\"user_can_change\":true,\"notes\":[]}]}" - }, - "headersSize": -1, - "bodySize": -1, - "redirectURL": "" - }, - "cache": {}, - "timings": { "send": -1, "wait": -1, "receive": 0.666 } - }, - { - "startedDateTime": "2023-05-14T07:14:44.837Z", - "time": 2.486, - "request": { - "method": "POST", - "url": "http://localhost:8000/api/documents/selection_data/", - "httpVersion": "HTTP/1.1", - "cookies": [], - "headers": [ - { "name": "Accept", "value": "application/json; version=3" }, - { "name": "Accept-Encoding", "value": "gzip, deflate, br" }, - { "name": "Accept-Language", "value": "en-US" }, - { "name": "Connection", "value": "keep-alive" }, - { "name": "Content-Length", "value": "47" }, - { "name": "Content-Type", "value": "application/json" }, - { "name": "Host", "value": "localhost:8000" }, - { "name": "Origin", "value": "http://localhost:4200" }, - { "name": "Referer", "value": "http://localhost:4200/" }, - { "name": "Sec-Fetch-Dest", "value": "empty" }, - { "name": "Sec-Fetch-Mode", "value": "cors" }, - { "name": "Sec-Fetch-Site", "value": "same-site" }, - { "name": "User-Agent", "value": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/113.0.5672.53 Safari/537.36" } - ], - "queryString": [], - "headersSize": -1, - "bodySize": -1, - "postData": { - "mimeType": "application/json", - "text": "{\"documents\":[310,297,298,296,290,277,312,295]}", - "params": [] - } - }, - "response": { - "status": 200, - "statusText": "OK", - "httpVersion": "HTTP/1.1", - "cookies": [], - "headers": [ - { "name": "Access-Control-Allow-Origin", "value": "http://localhost:4200" }, - { "name": "Allow", "value": "POST, OPTIONS" }, - { "name": "Content-Encoding", "value": "br" }, - { "name": "Content-Language", "value": "en-us" }, - { "name": "Content-Length", "value": "205" }, - { "name": "Content-Type", "value": "application/json" }, - { "name": "Cross-Origin-Opener-Policy", "value": "same-origin" }, - { "name": "Referrer-Policy", "value": "same-origin" }, - { "name": "Vary", "value": "Accept, Accept-Language, Origin, Cookie, Accept-Encoding" }, - { "name": "X-Api-Version", "value": "3" }, - { "name": "X-Content-Type-Options", "value": "nosniff" }, - { "name": "X-Frame-Options", "value": "ANY" }, - { "name": "X-Version", "value": "1.14.4" } - ], - "content": { - "size": -1, - "mimeType": "application/json", - "text": "{\"selected_correspondents\":[{\"id\":1,\"document_count\":1},{\"id\":4,\"document_count\":0},{\"id\":12,\"document_count\":2},{\"id\":2,\"document_count\":0},{\"id\":3,\"document_count\":2},{\"id\":17,\"document_count\":0},{\"id\":35,\"document_count\":0},{\"id\":36,\"document_count\":0}],\"selected_tags\":[{\"id\":1,\"document_count\":0},{\"id\":2,\"document_count\":4},{\"id\":3,\"document_count\":1},{\"id\":6,\"document_count\":0},{\"id\":7,\"document_count\":0},{\"id\":8,\"document_count\":0},{\"id\":9,\"document_count\":8},{\"id\":10,\"document_count\":2},{\"id\":14,\"document_count\":1},{\"id\":15,\"document_count\":0},{\"id\":18,\"document_count\":0},{\"id\":19,\"document_count\":1},{\"id\":4,\"document_count\":5},{\"id\":5,\"document_count\":1},{\"id\":13,\"document_count\":0},{\"id\":27,\"document_count\":0},{\"id\":28,\"document_count\":0},{\"id\":29,\"document_count\":0},{\"id\":30,\"document_count\":0},{\"id\":31,\"document_count\":0},{\"id\":32,\"document_count\":0},{\"id\":33,\"document_count\":0},{\"id\":34,\"document_count\":0},{\"id\":35,\"document_count\":0},{\"id\":36,\"document_count\":0},{\"id\":20,\"document_count\":1},{\"id\":21,\"document_count\":0}],\"selected_document_types\":[{\"id\":1,\"document_count\":3},{\"id\":2,\"document_count\":0}],\"selected_storage_paths\":[{\"id\":2,\"document_count\":2},{\"id\":5,\"document_count\":0},{\"id\":8,\"document_count\":0}]}" - }, - "headersSize": -1, - "bodySize": -1, - "redirectURL": "" - }, - "cache": {}, - "timings": { "send": -1, "wait": -1, "receive": 2.486 } - }, - { - "startedDateTime": "2023-05-14T07:14:44.884Z", - "time": 0.712, - "request": { - "method": "GET", - "url": "http://localhost:8000/api/users/?page=1&page_size=100000", - "httpVersion": "HTTP/1.1", - "cookies": [], - "headers": [ - { "name": "Accept", "value": "application/json; version=3" }, - { "name": "Accept-Encoding", "value": "gzip, deflate, br" }, - { "name": "Accept-Language", "value": "en-US" }, - { "name": "Connection", "value": "keep-alive" }, - { "name": "Host", "value": "localhost:8000" }, - { "name": "Origin", "value": "http://localhost:4200" }, - { "name": "Referer", "value": "http://localhost:4200/" }, - { "name": "Sec-Fetch-Dest", "value": "empty" }, - { "name": "Sec-Fetch-Mode", "value": "cors" }, - { "name": "Sec-Fetch-Site", "value": "same-site" }, - { "name": "User-Agent", "value": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/113.0.5672.53 Safari/537.36" } - ], - "queryString": [ - { - "name": "page", - "value": "1" - }, - { - "name": "page_size", - "value": "100000" - } - ], - "headersSize": -1, - "bodySize": -1 - }, - "response": { - "status": 200, - "statusText": "OK", - "httpVersion": "HTTP/1.1", - "cookies": [], - "headers": [ - { "name": "Access-Control-Allow-Origin", "value": "http://localhost:4200" }, - { "name": "Allow", "value": "GET, POST, HEAD, OPTIONS" }, - { "name": "Content-Encoding", "value": "br" }, - { "name": "Content-Language", "value": "en-us" }, - { "name": "Content-Length", "value": "2234" }, - { "name": "Content-Type", "value": "application/json" }, - { "name": "Cross-Origin-Opener-Policy", "value": "same-origin" }, - { "name": "Referrer-Policy", "value": "same-origin" }, - { "name": "Vary", "value": "Accept, Accept-Language, Origin, Cookie, Accept-Encoding" }, - { "name": "X-Api-Version", "value": "3" }, - { "name": "X-Content-Type-Options", "value": "nosniff" }, - { "name": "X-Frame-Options", "value": "ANY" }, - { "name": "X-Version", "value": "1.14.4" } - ], - "content": { - "size": -1, - "mimeType": "application/json", - "text": "{\"count\":4,\"next\":null,\"previous\":null,\"all\":[3,2,15,17],\"results\":[{\"id\":3,\"username\":\"admin\",\"email\":\"test@user.com\",\"password\":\"**********\",\"first_name\":\"\",\"last_name\":\"\",\"date_joined\":\"2022-02-14T23:11:09.103293Z\",\"is_staff\":true,\"is_active\":true,\"is_superuser\":true,\"groups\":[],\"user_permissions\":[],\"inherited_permissions\":[\"auth.delete_permission\",\"auth.change_user\",\"authtoken.delete_tokenproxy\",\"django_celery_results.delete_chordcounter\",\"documents.change_uisettings\",\"documents.delete_note\",\"sessions.change_session\",\"django_q.change_schedule\",\"guardian.add_userobjectpermission\",\"guardian.view_userobjectpermission\",\"documents.change_taskattributes\",\"documents.delete_tag\",\"admin.delete_logentry\",\"documents.change_frontendsettings\",\"documents.view_documenttype\",\"documents.add_comment\",\"documents.add_log\",\"documents.add_uisettings\",\"documents.view_document\",\"guardian.change_userobjectpermission\",\"sessions.view_session\",\"django_q.change_failure\",\"documents.change_storagepath\",\"paperless_mail.change_mailrule\",\"authtoken.delete_token\",\"django_celery_results.view_taskresult\",\"django_q.change_ormq\",\"documents.view_storagepath\",\"documents.view_savedview\",\"paperless_mail.change_processedmail\",\"django_celery_results.change_chordcounter\",\"auth.delete_user\",\"documents.delete_savedview\",\"paperless_mail.delete_mailaccount\",\"documents.view_uisettings\",\"auth.view_user\",\"documents.view_paperlesstask\",\"django_q.add_task\",\"django_q.delete_success\",\"django_celery_results.view_groupresult\",\"documents.delete_comment\",\"documents.view_correspondent\",\"admin.add_logentry\",\"contenttypes.add_contenttype\",\"django_q.change_task\",\"documents.add_paperlesstask\",\"documents.delete_savedviewfilterrule\",\"django_celery_results.add_groupresult\",\"authtoken.view_tokenproxy\",\"paperless_mail.add_processedmail\",\"django_q.add_schedule\",\"django_q.add_ormq\",\"documents.delete_paperlesstask\",\"documents.change_log\",\"paperless_mail.view_processedmail\",\"paperless_mail.view_mailaccount\",\"guardian.change_groupobjectpermission\",\"django_q.delete_ormq\",\"documents.delete_documenttype\",\"django_q.add_success\",\"documents.view_frontendsettings\",\"documents.delete_correspondent\",\"django_q.view_failure\",\"django_q.view_ormq\",\"documents.delete_taskattributes\",\"auth.change_group\",\"django_q.add_failure\",\"django_q.delete_failure\",\"django_celery_results.delete_taskresult\",\"documents.view_savedviewfilterrule\",\"authtoken.view_token\",\"django_celery_results.add_chordcounter\",\"documents.add_savedview\",\"documents.change_paperlesstask\",\"documents.delete_log\",\"auth.add_user\",\"authtoken.change_token\",\"documents.change_note\",\"documents.add_savedviewfilterrule\",\"documents.change_savedview\",\"auth.delete_group\",\"guardian.delete_userobjectpermission\",\"django_q.view_schedule\",\"documents.delete_document\",\"authtoken.add_tokenproxy\",\"auth.change_permission\",\"paperless_mail.delete_mailrule\",\"admin.view_logentry\",\"auth.add_permission\",\"guardian.delete_groupobjectpermission\",\"documents.view_log\",\"documents.view_taskattributes\",\"django_celery_results.change_taskresult\",\"paperless_mail.change_mailaccount\",\"contenttypes.delete_contenttype\",\"documents.change_correspondent\",\"guardian.add_groupobjectpermission\",\"paperless_mail.delete_processedmail\",\"documents.view_note\",\"documents.add_taskattributes\",\"documents.add_document\",\"django_q.delete_task\",\"admin.change_logentry\",\"contenttypes.change_contenttype\",\"django_q.delete_schedule\",\"sessions.delete_session\",\"authtoken.add_token\",\"auth.view_permission\",\"django_celery_results.add_taskresult\",\"documents.add_storagepath\",\"documents.change_tag\",\"auth.view_group\",\"documents.add_note\",\"documents.change_documenttype\",\"django_celery_results.change_groupresult\",\"documents.delete_frontendsettings\",\"django_celery_results.view_chordcounter\",\"guardian.view_groupobjectpermission\",\"documents.add_frontendsettings\",\"documents.change_comment\",\"django_q.view_task\",\"documents.add_correspondent\",\"documents.view_comment\",\"contenttypes.view_contenttype\",\"django_q.change_success\",\"auth.add_group\",\"sessions.add_session\",\"paperless_mail.view_mailrule\",\"paperless_mail.add_mailrule\",\"documents.delete_storagepath\",\"documents.add_tag\",\"documents.view_tag\",\"documents.add_documenttype\",\"paperless_mail.add_mailaccount\",\"documents.change_document\",\"documents.delete_uisettings\",\"django_q.view_success\",\"documents.change_savedviewfilterrule\",\"authtoken.change_tokenproxy\",\"django_celery_results.delete_groupresult\"]},{\"id\":2,\"username\":\"testuser\",\"email\":\"test@user.com\",\"password\":\"**********\",\"first_name\":\"\",\"last_name\":\"\",\"date_joined\":\"2021-01-03T07:37:04Z\",\"is_staff\":true,\"is_active\":true,\"is_superuser\":false,\"groups\":[],\"user_permissions\":[\"add_logentry\",\"change_logentry\",\"delete_logentry\",\"view_logentry\",\"add_group\",\"change_group\",\"delete_group\",\"view_group\",\"add_permission\",\"change_permission\",\"delete_permission\",\"view_permission\",\"add_user\",\"change_user\",\"delete_user\",\"view_user\",\"add_token\",\"change_token\",\"delete_token\",\"view_token\",\"add_tokenproxy\",\"change_tokenproxy\",\"delete_tokenproxy\",\"view_tokenproxy\",\"add_contenttype\",\"change_contenttype\",\"delete_contenttype\",\"view_contenttype\",\"add_chordcounter\",\"change_chordcounter\",\"delete_chordcounter\",\"view_chordcounter\",\"add_groupresult\",\"change_groupresult\",\"delete_groupresult\",\"view_groupresult\",\"add_taskresult\",\"change_taskresult\",\"delete_taskresult\",\"view_taskresult\",\"add_failure\",\"change_failure\",\"delete_failure\",\"view_failure\",\"add_ormq\",\"change_ormq\",\"delete_ormq\",\"view_ormq\",\"add_schedule\",\"change_schedule\",\"delete_schedule\",\"view_schedule\",\"add_success\",\"change_success\",\"delete_success\",\"view_success\",\"add_task\",\"change_task\",\"delete_task\",\"view_task\",\"add_correspondent\",\"change_correspondent\",\"delete_correspondent\",\"view_correspondent\",\"add_document\",\"change_document\",\"delete_document\",\"view_document\",\"add_documenttype\",\"change_documenttype\",\"delete_documenttype\",\"view_documenttype\",\"add_frontendsettings\",\"change_frontendsettings\",\"delete_frontendsettings\",\"view_frontendsettings\",\"add_log\",\"change_log\",\"delete_log\",\"view_log\",\"add_comment\",\"add_note\",\"change_comment\",\"change_note\",\"delete_comment\",\"delete_note\",\"view_comment\",\"view_note\",\"add_paperlesstask\",\"change_paperlesstask\",\"delete_paperlesstask\",\"view_paperlesstask\",\"add_savedview\",\"change_savedview\",\"delete_savedview\",\"view_savedview\",\"add_savedviewfilterrule\",\"change_savedviewfilterrule\",\"delete_savedviewfilterrule\",\"view_savedviewfilterrule\",\"add_storagepath\",\"change_storagepath\",\"delete_storagepath\",\"view_storagepath\",\"add_tag\",\"change_tag\",\"delete_tag\",\"view_tag\",\"add_taskattributes\",\"change_taskattributes\",\"delete_taskattributes\",\"view_taskattributes\",\"add_uisettings\",\"change_uisettings\",\"delete_uisettings\",\"view_uisettings\",\"add_groupobjectpermission\",\"change_groupobjectpermission\",\"delete_groupobjectpermission\",\"view_groupobjectpermission\",\"add_userobjectpermission\",\"change_userobjectpermission\",\"delete_userobjectpermission\",\"view_userobjectpermission\",\"add_mailaccount\",\"change_mailaccount\",\"delete_mailaccount\",\"view_mailaccount\",\"add_mailrule\",\"change_mailrule\",\"delete_mailrule\",\"view_mailrule\",\"add_processedmail\",\"change_processedmail\",\"delete_processedmail\",\"view_processedmail\",\"add_session\",\"change_session\",\"delete_session\",\"view_session\"],\"inherited_permissions\":[]},{\"id\":15,\"username\":\"test\",\"email\":\"\",\"password\":\"**********\",\"first_name\":\"Test\",\"last_name\":\"User\",\"date_joined\":\"2022-11-23T08:30:54Z\",\"is_staff\":true,\"is_active\":true,\"is_superuser\":false,\"groups\":[1,6],\"user_permissions\":[\"add_permission\",\"change_permission\",\"delete_permission\",\"view_permission\",\"add_token\",\"change_token\",\"delete_token\",\"view_token\",\"add_tokenproxy\",\"change_tokenproxy\",\"delete_tokenproxy\",\"view_tokenproxy\",\"add_contenttype\",\"change_contenttype\",\"delete_contenttype\",\"view_contenttype\",\"add_chordcounter\",\"change_chordcounter\",\"delete_chordcounter\",\"view_chordcounter\",\"add_groupresult\",\"change_groupresult\",\"delete_groupresult\",\"view_groupresult\",\"add_taskresult\",\"change_taskresult\",\"delete_taskresult\",\"view_taskresult\",\"add_failure\",\"change_failure\",\"delete_failure\",\"view_failure\",\"add_ormq\",\"change_ormq\",\"delete_ormq\",\"view_ormq\",\"add_schedule\",\"change_schedule\",\"delete_schedule\",\"view_schedule\",\"add_success\",\"change_success\",\"delete_success\",\"view_success\",\"add_task\",\"change_task\",\"delete_task\",\"view_task\",\"add_frontendsettings\",\"change_frontendsettings\",\"delete_frontendsettings\",\"view_frontendsettings\",\"add_log\",\"change_log\",\"delete_log\",\"view_log\",\"add_savedviewfilterrule\",\"change_savedviewfilterrule\",\"delete_savedviewfilterrule\",\"view_savedviewfilterrule\",\"add_storagepath\",\"change_storagepath\",\"delete_storagepath\",\"view_storagepath\",\"add_tag\",\"change_tag\",\"delete_tag\",\"view_tag\",\"add_taskattributes\",\"change_taskattributes\",\"delete_taskattributes\",\"view_taskattributes\",\"add_session\",\"change_session\",\"delete_session\",\"view_session\"],\"inherited_permissions\":[\"documents.delete_log\",\"auth.add_user\",\"auth.delete_permission\",\"auth.change_user\",\"authtoken.change_token\",\"authtoken.delete_tokenproxy\",\"django_celery_results.delete_chordcounter\",\"documents.add_savedviewfilterrule\",\"documents.change_savedview\",\"sessions.change_session\",\"django_q.change_schedule\",\"auth.delete_group\",\"django_q.view_schedule\",\"documents.delete_document\",\"authtoken.add_tokenproxy\",\"documents.change_taskattributes\",\"documents.change_frontendsettings\",\"auth.change_permission\",\"paperless_mail.delete_mailrule\",\"documents.view_documenttype\",\"documents.add_comment\",\"documents.add_log\",\"auth.add_permission\",\"documents.view_log\",\"documents.view_document\",\"documents.view_taskattributes\",\"django_celery_results.change_taskresult\",\"sessions.view_session\",\"django_q.change_failure\",\"paperless_mail.change_mailaccount\",\"contenttypes.delete_contenttype\",\"documents.change_correspondent\",\"django_celery_results.delete_groupresult\",\"paperless_mail.change_mailrule\",\"authtoken.delete_token\",\"django_celery_results.view_taskresult\",\"django_q.change_ormq\",\"documents.view_savedview\",\"django_celery_results.change_chordcounter\",\"auth.delete_user\",\"documents.add_taskattributes\",\"documents.delete_savedview\",\"paperless_mail.delete_mailaccount\",\"documents.add_document\",\"django_q.delete_task\",\"contenttypes.change_contenttype\",\"auth.view_user\",\"django_q.delete_schedule\",\"django_q.add_task\",\"django_q.delete_success\",\"django_celery_results.view_groupresult\",\"documents.delete_comment\",\"documents.view_correspondent\",\"sessions.delete_session\",\"authtoken.add_token\",\"contenttypes.add_contenttype\",\"django_q.change_task\",\"auth.view_permission\",\"django_celery_results.add_taskresult\",\"documents.delete_savedviewfilterrule\",\"django_celery_results.add_groupresult\",\"auth.view_group\",\"authtoken.view_tokenproxy\",\"documents.change_documenttype\",\"django_celery_results.change_groupresult\",\"django_q.add_schedule\",\"documents.delete_frontendsettings\",\"django_celery_results.view_chordcounter\",\"documents.add_frontendsettings\",\"django_q.add_ormq\",\"documents.change_comment\",\"django_q.view_task\",\"documents.change_log\",\"paperless_mail.view_mailaccount\",\"django_q.delete_ormq\",\"documents.delete_documenttype\",\"documents.add_correspondent\",\"documents.view_comment\",\"contenttypes.view_contenttype\",\"django_q.change_success\",\"auth.add_group\",\"sessions.add_session\",\"django_q.add_success\",\"documents.view_frontendsettings\",\"documents.delete_correspondent\",\"django_q.view_failure\",\"django_q.view_ormq\",\"documents.delete_taskattributes\",\"paperless_mail.view_mailrule\",\"paperless_mail.add_mailrule\",\"auth.change_group\",\"documents.add_documenttype\",\"django_q.add_failure\",\"django_q.delete_failure\",\"django_celery_results.delete_taskresult\",\"documents.view_savedviewfilterrule\",\"paperless_mail.add_mailaccount\",\"documents.change_document\",\"authtoken.view_token\",\"django_celery_results.add_chordcounter\",\"django_q.view_success\",\"documents.change_savedviewfilterrule\",\"authtoken.change_tokenproxy\",\"documents.add_savedview\"]},{\"id\":17,\"username\":\"username2\",\"email\":\"\",\"password\":\"\",\"first_name\":\"User\",\"last_name\":\"Surname\",\"date_joined\":\"2022-12-09T11:43:10.082736Z\",\"is_staff\":false,\"is_active\":true,\"is_superuser\":false,\"groups\":[6],\"user_permissions\":[],\"inherited_permissions\":[\"paperless_mail.add_mailrule\",\"auth.add_user\",\"auth.change_user\",\"paperless_mail.change_mailrule\",\"documents.add_documenttype\",\"documents.change_documenttype\",\"documents.change_comment\",\"auth.delete_user\",\"paperless_mail.view_mailaccount\",\"paperless_mail.delete_mailrule\",\"paperless_mail.delete_mailaccount\",\"paperless_mail.add_mailaccount\",\"documents.view_documenttype\",\"documents.delete_documenttype\",\"documents.add_comment\",\"auth.view_user\",\"documents.view_comment\",\"documents.delete_comment\",\"paperless_mail.view_mailrule\",\"paperless_mail.change_mailaccount\"]}]}" - }, - "headersSize": -1, - "bodySize": -1, - "redirectURL": "" - }, - "cache": {}, - "timings": { "send": -1, "wait": -1, "receive": 0.712 } - }, - { - "startedDateTime": "2023-05-14T07:14:44.885Z", - "time": 0.542, - "request": { - "method": "GET", - "url": "http://localhost:8000/api/tags/?page=1&page_size=100000", - "httpVersion": "HTTP/1.1", - "cookies": [], - "headers": [ - { "name": "Accept", "value": "application/json; version=3" }, - { "name": "Accept-Encoding", "value": "gzip, deflate, br" }, - { "name": "Accept-Language", "value": "en-US" }, - { "name": "Connection", "value": "keep-alive" }, - { "name": "Host", "value": "localhost:8000" }, - { "name": "Origin", "value": "http://localhost:4200" }, - { "name": "Referer", "value": "http://localhost:4200/" }, - { "name": "Sec-Fetch-Dest", "value": "empty" }, - { "name": "Sec-Fetch-Mode", "value": "cors" }, - { "name": "Sec-Fetch-Site", "value": "same-site" }, - { "name": "User-Agent", "value": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/113.0.5672.53 Safari/537.36" } - ], - "queryString": [ - { - "name": "page", - "value": "1" - }, - { - "name": "page_size", - "value": "100000" - } - ], - "headersSize": -1, - "bodySize": -1 - }, - "response": { - "status": 200, - "statusText": "OK", - "httpVersion": "HTTP/1.1", - "cookies": [], - "headers": [ - { "name": "Access-Control-Allow-Origin", "value": "http://localhost:4200" }, - { "name": "Allow", "value": "GET, POST, HEAD, OPTIONS" }, - { "name": "Content-Encoding", "value": "br" }, - { "name": "Content-Language", "value": "en-us" }, - { "name": "Content-Length", "value": "807" }, - { "name": "Content-Type", "value": "application/json" }, - { "name": "Cross-Origin-Opener-Policy", "value": "same-origin" }, - { "name": "Referrer-Policy", "value": "same-origin" }, - { "name": "Vary", "value": "Accept, Accept-Language, Origin, Cookie, Accept-Encoding" }, - { "name": "X-Api-Version", "value": "3" }, - { "name": "X-Content-Type-Options", "value": "nosniff" }, - { "name": "X-Frame-Options", "value": "ANY" }, - { "name": "X-Version", "value": "1.14.4" } - ], - "content": { - "size": -1, - "mimeType": "application/json", - "text": "{\"count\":26,\"next\":null,\"previous\":null,\"all\":[4,9,10,7,6,14,27,28,29,2,30,31,15,32,33,34,35,36,3,20,5,8,1,18,19,13],\"results\":[{\"id\":4,\"slug\":\"another-sample-tag\",\"name\":\"Another Sample Tag\",\"color\":\"#cf7440\",\"text_color\":\"#000000\",\"match\":\"\",\"matching_algorithm\":6,\"is_insensitive\":true,\"is_inbox_tag\":false,\"document_count\":33,\"owner\":2,\"user_can_change\":true},{\"id\":9,\"slug\":\"inbox\",\"name\":\"Inbox\",\"color\":\"#6bdac8\",\"text_color\":\"#000000\",\"match\":\"\",\"matching_algorithm\":6,\"is_insensitive\":true,\"is_inbox_tag\":true,\"document_count\":8,\"owner\":null,\"user_can_change\":true},{\"id\":10,\"slug\":\"just-another-tag\",\"name\":\"Just another tag\",\"color\":\"#2aaa91\",\"text_color\":\"#000000\",\"match\":\"\",\"matching_algorithm\":6,\"is_insensitive\":true,\"is_inbox_tag\":false,\"document_count\":3,\"owner\":null,\"user_can_change\":true},{\"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,\"owner\":null,\"user_can_change\":true},{\"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\":2,\"owner\":null,\"user_can_change\":true},{\"id\":14,\"slug\":\"tag-12\",\"name\":\"Tag 12\",\"color\":\"#28a329\",\"text_color\":\"#ffffff\",\"match\":\"\",\"matching_algorithm\":6,\"is_insensitive\":true,\"is_inbox_tag\":false,\"document_count\":1,\"owner\":null,\"user_can_change\":true},{\"id\":27,\"slug\":\"tag-17\",\"name\":\"Tag 17\",\"color\":\"#2cb38e\",\"text_color\":\"#000000\",\"match\":\"\",\"matching_algorithm\":6,\"is_insensitive\":true,\"is_inbox_tag\":false,\"document_count\":0,\"owner\":2,\"user_can_change\":true},{\"id\":28,\"slug\":\"tag-18\",\"name\":\"Tag 18\",\"color\":\"#ce8c3e\",\"text_color\":\"#000000\",\"match\":\"\",\"matching_algorithm\":6,\"is_insensitive\":true,\"is_inbox_tag\":false,\"document_count\":0,\"owner\":2,\"user_can_change\":true},{\"id\":29,\"slug\":\"tag-19\",\"name\":\"Tag 19\",\"color\":\"#e6b69b\",\"text_color\":\"#000000\",\"match\":\"\",\"matching_algorithm\":6,\"is_insensitive\":true,\"is_inbox_tag\":false,\"document_count\":0,\"owner\":2,\"user_can_change\":true},{\"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\":8,\"owner\":null,\"user_can_change\":true},{\"id\":30,\"slug\":\"tag-20\",\"name\":\"Tag 20\",\"color\":\"#505cd3\",\"text_color\":\"#ffffff\",\"match\":\"\",\"matching_algorithm\":6,\"is_insensitive\":true,\"is_inbox_tag\":false,\"document_count\":0,\"owner\":2,\"user_can_change\":true},{\"id\":31,\"slug\":\"tag-21\",\"name\":\"Tag 21\",\"color\":\"#e2ba8b\",\"text_color\":\"#000000\",\"match\":\"\",\"matching_algorithm\":6,\"is_insensitive\":true,\"is_inbox_tag\":false,\"document_count\":0,\"owner\":2,\"user_can_change\":true},{\"id\":15,\"slug\":\"tag-222\",\"name\":\"Tag 222\",\"color\":\"#ccbc33\",\"text_color\":\"#000000\",\"match\":\"\",\"matching_algorithm\":6,\"is_insensitive\":true,\"is_inbox_tag\":false,\"document_count\":1,\"owner\":null,\"user_can_change\":true},{\"id\":32,\"slug\":\"tag-23\",\"name\":\"Tag 23\",\"color\":\"#5d71d6\",\"text_color\":\"#ffffff\",\"match\":\"\",\"matching_algorithm\":6,\"is_insensitive\":true,\"is_inbox_tag\":false,\"document_count\":0,\"owner\":2,\"user_can_change\":true},{\"id\":33,\"slug\":\"tag-24\",\"name\":\"Tag 24\",\"color\":\"#79ddab\",\"text_color\":\"#000000\",\"match\":\"\",\"matching_algorithm\":6,\"is_insensitive\":true,\"is_inbox_tag\":false,\"document_count\":0,\"owner\":2,\"user_can_change\":true},{\"id\":34,\"slug\":\"tag-25\",\"name\":\"Tag 25\",\"color\":\"#7ededc\",\"text_color\":\"#000000\",\"match\":\"\",\"matching_algorithm\":6,\"is_insensitive\":true,\"is_inbox_tag\":false,\"document_count\":0,\"owner\":2,\"user_can_change\":true},{\"id\":35,\"slug\":\"tag-26\",\"name\":\"Tag 26\",\"color\":\"#55d466\",\"text_color\":\"#000000\",\"match\":\"\",\"matching_algorithm\":6,\"is_insensitive\":true,\"is_inbox_tag\":false,\"document_count\":0,\"owner\":2,\"user_can_change\":true},{\"id\":36,\"slug\":\"tag-27\",\"name\":\"Tag 27\",\"color\":\"#d494e4\",\"text_color\":\"#000000\",\"match\":\"\",\"matching_algorithm\":6,\"is_insensitive\":true,\"is_inbox_tag\":false,\"document_count\":0,\"owner\":2,\"user_can_change\":true},{\"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\":6,\"owner\":null,\"user_can_change\":true},{\"id\":20,\"slug\":\"tag-owned-by-test\",\"name\":\"Tag Owned By Test\",\"color\":\"#a6cee3\",\"text_color\":\"#000000\",\"match\":\"\",\"matching_algorithm\":6,\"is_insensitive\":true,\"is_inbox_tag\":false,\"document_count\":1,\"owner\":15,\"user_can_change\":false},{\"id\":5,\"slug\":\"tagwithpartial\",\"name\":\"TagWithPartial\",\"color\":\"#3b2db4\",\"text_color\":\"#ffffff\",\"match\":\"\",\"matching_algorithm\":6,\"is_insensitive\":true,\"is_inbox_tag\":false,\"document_count\":6,\"owner\":2,\"user_can_change\":true},{\"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\":2,\"owner\":null,\"user_can_change\":true},{\"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\":5,\"owner\":null,\"user_can_change\":true},{\"id\":18,\"slug\":\"test-tag-new\",\"name\":\"Test Tag New\",\"color\":\"#a6cee3\",\"text_color\":\"#000000\",\"match\":\"\",\"matching_algorithm\":1,\"is_insensitive\":true,\"is_inbox_tag\":false,\"document_count\":1,\"owner\":null,\"user_can_change\":true},{\"id\":19,\"slug\":\"test-tag-new-2\",\"name\":\"Test Tag New 2\",\"color\":\"#a6cee3\",\"text_color\":\"#000000\",\"match\":\"\",\"matching_algorithm\":1,\"is_insensitive\":true,\"is_inbox_tag\":false,\"document_count\":1,\"owner\":null,\"user_can_change\":true},{\"id\":13,\"slug\":\"with-perms\",\"name\":\"With Perms\",\"color\":\"#9dcfe6\",\"text_color\":\"#000000\",\"match\":\"\",\"matching_algorithm\":6,\"is_insensitive\":true,\"is_inbox_tag\":false,\"document_count\":1,\"owner\":2,\"user_can_change\":true}]}" - }, - "headersSize": -1, - "bodySize": -1, - "redirectURL": "" - }, - "cache": {}, - "timings": { "send": -1, "wait": -1, "receive": 0.542 } - }, - { - "startedDateTime": "2023-05-14T07:14:44.885Z", - "time": 0.525, - "request": { - "method": "GET", - "url": "http://localhost:8000/api/correspondents/?page=1&page_size=100000", - "httpVersion": "HTTP/1.1", - "cookies": [], - "headers": [ - { "name": "Accept", "value": "application/json; version=3" }, - { "name": "Accept-Encoding", "value": "gzip, deflate, br" }, - { "name": "Accept-Language", "value": "en-US" }, - { "name": "Connection", "value": "keep-alive" }, - { "name": "Host", "value": "localhost:8000" }, - { "name": "Origin", "value": "http://localhost:4200" }, - { "name": "Referer", "value": "http://localhost:4200/" }, - { "name": "Sec-Fetch-Dest", "value": "empty" }, - { "name": "Sec-Fetch-Mode", "value": "cors" }, - { "name": "Sec-Fetch-Site", "value": "same-site" }, - { "name": "User-Agent", "value": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/113.0.5672.53 Safari/537.36" } - ], - "queryString": [ - { - "name": "page", - "value": "1" - }, - { - "name": "page_size", - "value": "100000" - } - ], - "headersSize": -1, - "bodySize": -1 - }, - "response": { - "status": 200, - "statusText": "OK", - "httpVersion": "HTTP/1.1", - "cookies": [], - "headers": [ - { "name": "Access-Control-Allow-Origin", "value": "http://localhost:4200" }, - { "name": "Allow", "value": "GET, POST, HEAD, OPTIONS" }, - { "name": "Content-Encoding", "value": "br" }, - { "name": "Content-Language", "value": "en-us" }, - { "name": "Content-Length", "value": "277" }, - { "name": "Content-Type", "value": "application/json" }, - { "name": "Cross-Origin-Opener-Policy", "value": "same-origin" }, - { "name": "Referrer-Policy", "value": "same-origin" }, - { "name": "Vary", "value": "Accept, Accept-Language, Origin, Cookie, Accept-Encoding" }, - { "name": "X-Api-Version", "value": "3" }, - { "name": "X-Content-Type-Options", "value": "nosniff" }, - { "name": "X-Frame-Options", "value": "ANY" }, - { "name": "X-Version", "value": "1.14.4" } - ], - "content": { - "size": -1, - "mimeType": "application/json", - "text": "{\"count\":4,\"next\":null,\"previous\":null,\"all\":[17,12,4,1],\"results\":[{\"id\":17,\"slug\":\"correspondent-14\",\"name\":\"Correspondent 14\",\"match\":\"\",\"matching_algorithm\":1,\"is_insensitive\":true,\"document_count\":2,\"last_correspondence\":\"2022-03-13T00:00:00Z\",\"owner\":15,\"user_can_change\":false},{\"id\":12,\"slug\":\"correspondent-9\",\"name\":\"Correspondent 9\",\"match\":\"\",\"matching_algorithm\":6,\"is_insensitive\":true,\"document_count\":4,\"last_correspondence\":\"2022-10-03T00:00:00Z\",\"owner\":2,\"user_can_change\":true},{\"id\":4,\"slug\":\"newest-correspondent\",\"name\":\"Newest Correspondent\",\"match\":\"\",\"matching_algorithm\":1,\"is_insensitive\":true,\"document_count\":1,\"last_correspondence\":\"2021-02-07T08:00:00Z\",\"owner\":2,\"user_can_change\":true},{\"id\":1,\"slug\":\"test-correspondent-1\",\"name\":\"Test Correspondent 1\",\"match\":\"\",\"matching_algorithm\":1,\"is_insensitive\":true,\"document_count\":3,\"last_correspondence\":\"2022-10-02T00:00:00Z\",\"owner\":2,\"user_can_change\":true}]}" - }, - "headersSize": -1, - "bodySize": -1, - "redirectURL": "" - }, - "cache": {}, - "timings": { "send": -1, "wait": -1, "receive": 0.525 } - }, - { - "startedDateTime": "2023-05-14T07:14:44.885Z", - "time": 0.474, - "request": { - "method": "GET", - "url": "http://localhost:8000/api/document_types/?page=1&page_size=100000", - "httpVersion": "HTTP/1.1", - "cookies": [], - "headers": [ - { "name": "Accept", "value": "application/json; version=3" }, - { "name": "Accept-Encoding", "value": "gzip, deflate, br" }, - { "name": "Accept-Language", "value": "en-US" }, - { "name": "Connection", "value": "keep-alive" }, - { "name": "Host", "value": "localhost:8000" }, - { "name": "Origin", "value": "http://localhost:4200" }, - { "name": "Referer", "value": "http://localhost:4200/" }, - { "name": "Sec-Fetch-Dest", "value": "empty" }, - { "name": "Sec-Fetch-Mode", "value": "cors" }, - { "name": "Sec-Fetch-Site", "value": "same-site" }, - { "name": "User-Agent", "value": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/113.0.5672.53 Safari/537.36" } - ], - "queryString": [ - { - "name": "page", - "value": "1" - }, - { - "name": "page_size", - "value": "100000" - } - ], - "headersSize": -1, - "bodySize": -1 - }, - "response": { - "status": 200, - "statusText": "OK", - "httpVersion": "HTTP/1.1", - "cookies": [], - "headers": [ - { "name": "Access-Control-Allow-Origin", "value": "http://localhost:4200" }, - { "name": "Allow", "value": "GET, POST, HEAD, OPTIONS" }, - { "name": "Content-Language", "value": "en-us" }, - { "name": "Content-Length", "value": "388" }, - { "name": "Content-Type", "value": "application/json" }, - { "name": "Cross-Origin-Opener-Policy", "value": "same-origin" }, - { "name": "Referrer-Policy", "value": "same-origin" }, - { "name": "Vary", "value": "Accept, Accept-Language, Origin, Cookie" }, - { "name": "X-Api-Version", "value": "3" }, - { "name": "X-Content-Type-Options", "value": "nosniff" }, - { "name": "X-Frame-Options", "value": "ANY" }, - { "name": "X-Version", "value": "1.14.4" } - ], - "content": { - "size": -1, - "mimeType": "application/json", - "text": "{\"count\":2,\"next\":null,\"previous\":null,\"all\":[2,1],\"results\":[{\"id\":2,\"slug\":\"another-type\",\"name\":\"Another Type\",\"match\":\"\",\"matching_algorithm\":6,\"is_insensitive\":true,\"document_count\":1,\"owner\":2,\"user_can_change\":true},{\"id\":1,\"slug\":\"invoice-test\",\"name\":\"Invoice Test\",\"match\":\"\",\"matching_algorithm\":1,\"is_insensitive\":true,\"document_count\":9,\"owner\":null,\"user_can_change\":true}]}" - }, - "headersSize": -1, - "bodySize": -1, - "redirectURL": "" - }, - "cache": {}, - "timings": { "send": -1, "wait": -1, "receive": 0.474 } - }, - { - "startedDateTime": "2023-05-14T07:14:44.885Z", - "time": 0.411, - "request": { - "method": "GET", - "url": "http://localhost:8000/api/storage_paths/?page=1&page_size=100000", - "httpVersion": "HTTP/1.1", - "cookies": [], - "headers": [ - { "name": "Accept", "value": "application/json; version=3" }, - { "name": "Accept-Encoding", "value": "gzip, deflate, br" }, - { "name": "Accept-Language", "value": "en-US" }, - { "name": "Connection", "value": "keep-alive" }, - { "name": "Host", "value": "localhost:8000" }, - { "name": "Origin", "value": "http://localhost:4200" }, - { "name": "Referer", "value": "http://localhost:4200/" }, - { "name": "Sec-Fetch-Dest", "value": "empty" }, - { "name": "Sec-Fetch-Mode", "value": "cors" }, - { "name": "Sec-Fetch-Site", "value": "same-site" }, - { "name": "User-Agent", "value": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/113.0.5672.53 Safari/537.36" } - ], - "queryString": [ - { - "name": "page", - "value": "1" - }, - { - "name": "page_size", - "value": "100000" - } - ], - "headersSize": -1, - "bodySize": -1 - }, - "response": { - "status": 200, - "statusText": "OK", - "httpVersion": "HTTP/1.1", - "cookies": [], - "headers": [ - { "name": "Access-Control-Allow-Origin", "value": "http://localhost:4200" }, - { "name": "Allow", "value": "GET, POST, HEAD, OPTIONS" }, - { "name": "Content-Encoding", "value": "br" }, - { "name": "Content-Language", "value": "en-us" }, - { "name": "Content-Length", "value": "244" }, - { "name": "Content-Type", "value": "application/json" }, - { "name": "Cross-Origin-Opener-Policy", "value": "same-origin" }, - { "name": "Referrer-Policy", "value": "same-origin" }, - { "name": "Vary", "value": "Accept, Accept-Language, Origin, Cookie, Accept-Encoding" }, - { "name": "X-Api-Version", "value": "3" }, - { "name": "X-Content-Type-Options", "value": "nosniff" }, - { "name": "X-Frame-Options", "value": "ANY" }, - { "name": "X-Version", "value": "1.14.4" } - ], - "content": { - "size": -1, - "mimeType": "application/json", - "text": "{\"count\":3,\"next\":null,\"previous\":null,\"all\":[5,8,2],\"results\":[{\"id\":5,\"slug\":\"testing-12\",\"name\":\"Testing 12\",\"path\":\"{created_year}-{title}\",\"match\":\"\",\"matching_algorithm\":1,\"is_insensitive\":true,\"document_count\":8,\"owner\":null,\"user_can_change\":true},{\"id\":8,\"slug\":\"testpath2\",\"name\":\"TestPath2\",\"path\":\"subdir2/{created_year}-{title}\",\"match\":\"\",\"matching_algorithm\":6,\"is_insensitive\":true,\"document_count\":3,\"owner\":null,\"user_can_change\":true},{\"id\":2,\"slug\":\"year-title\",\"name\":\"Year - Title\",\"path\":\"subdir_new_edited/{created_year}/{title}\",\"match\":\"\",\"matching_algorithm\":6,\"is_insensitive\":true,\"document_count\":4,\"owner\":null,\"user_can_change\":true}]}" - }, - "headersSize": -1, - "bodySize": -1, - "redirectURL": "" - }, - "cache": {}, - "timings": { "send": -1, "wait": -1, "receive": 0.411 } - }, - { - "startedDateTime": "2023-05-14T07:14:44.885Z", - "time": 0.371, - "request": { - "method": "GET", - "url": "http://localhost:8000/api/documents/310/thumb/", - "httpVersion": "HTTP/1.1", - "cookies": [], - "headers": [ - { "name": "Accept", "value": "image/avif,image/webp,image/apng,image/svg+xml,image/*,*/*;q=0.8" }, - { "name": "Accept-Encoding", "value": "gzip, deflate, br" }, - { "name": "Accept-Language", "value": "en-US" }, - { "name": "Connection", "value": "keep-alive" }, - { "name": "Host", "value": "localhost:8000" }, - { "name": "Referer", "value": "http://localhost:4200/" }, - { "name": "Sec-Fetch-Dest", "value": "image" }, - { "name": "Sec-Fetch-Mode", "value": "no-cors" }, - { "name": "Sec-Fetch-Site", "value": "same-site" }, - { "name": "User-Agent", "value": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/113.0.5672.53 Safari/537.36" } - ], - "queryString": [], - "headersSize": -1, - "bodySize": -1 - }, - "response": { - "status": 200, - "statusText": "OK", - "httpVersion": "HTTP/1.1", - "cookies": [], - "headers": [ - { "name": "Allow", "value": "GET, HEAD, OPTIONS" }, - { "name": "Cache-Control", "value": "public=False, max-age=315360000" }, - { "name": "Content-Language", "value": "en-us" }, - { "name": "Content-Length", "value": "16422" }, - { "name": "Content-Type", "value": "image/webp" }, - { "name": "Cross-Origin-Opener-Policy", "value": "same-origin" }, - { "name": "Referrer-Policy", "value": "same-origin" }, - { "name": "Vary", "value": "Accept, Accept-Language, Origin, Cookie, Accept-Encoding" }, - { "name": "X-Api-Version", "value": "3" }, - { "name": "X-Content-Type-Options", "value": "nosniff" }, - { "name": "X-Frame-Options", "value": "ANY" }, - { "name": "X-Version", "value": "1.14.4" } - ], - "content": { - "size": -1, - "mimeType": "image/webp" - }, - "headersSize": -1, - "bodySize": -1, - "redirectURL": "" - }, - "cache": {}, - "timings": { "send": -1, "wait": -1, "receive": 0.371 } - }, - { - "startedDateTime": "2023-05-14T07:14:44.885Z", - "time": 9.576, - "request": { - "method": "GET", - "url": "http://localhost:8000/api/documents/297/thumb/", - "httpVersion": "HTTP/1.1", - "cookies": [], - "headers": [ - { "name": "Accept", "value": "image/avif,image/webp,image/apng,image/svg+xml,image/*,*/*;q=0.8" }, - { "name": "Accept-Encoding", "value": "gzip, deflate, br" }, - { "name": "Accept-Language", "value": "en-US" }, - { "name": "Connection", "value": "keep-alive" }, - { "name": "Host", "value": "localhost:8000" }, - { "name": "Referer", "value": "http://localhost:4200/" }, - { "name": "Sec-Fetch-Dest", "value": "image" }, - { "name": "Sec-Fetch-Mode", "value": "no-cors" }, - { "name": "Sec-Fetch-Site", "value": "same-site" }, - { "name": "User-Agent", "value": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/113.0.5672.53 Safari/537.36" } - ], - "queryString": [], - "headersSize": -1, - "bodySize": -1 - }, - "response": { - "status": 200, - "statusText": "OK", - "httpVersion": "HTTP/1.1", - "cookies": [], - "headers": [ - { "name": "Allow", "value": "GET, HEAD, OPTIONS" }, - { "name": "Cache-Control", "value": "public=False, max-age=315360000" }, - { "name": "Content-Encoding", "value": "br" }, - { "name": "Content-Language", "value": "en-us" }, - { "name": "Content-Length", "value": "1145" }, - { "name": "Content-Type", "value": "image/webp" }, - { "name": "Cross-Origin-Opener-Policy", "value": "same-origin" }, - { "name": "Referrer-Policy", "value": "same-origin" }, - { "name": "Vary", "value": "Accept, Accept-Language, Origin, Cookie, Accept-Encoding" }, - { "name": "X-Api-Version", "value": "3" }, - { "name": "X-Content-Type-Options", "value": "nosniff" }, - { "name": "X-Frame-Options", "value": "ANY" }, - { "name": "X-Version", "value": "1.14.4" } - ], - "content": { - "size": -1, - "mimeType": "image/webp", - "text": "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", - "encoding": "base64" - }, - "headersSize": -1, - "bodySize": -1, - "redirectURL": "" - }, - "cache": {}, - "timings": { "send": -1, "wait": -1, "receive": 9.576 } - }, - { - "startedDateTime": "2023-05-14T07:14:44.885Z", - "time": -1, - "request": { - "method": "GET", - "url": "http://localhost:8000/api/documents/298/thumb/", - "httpVersion": "HTTP/1.1", - "cookies": [], - "headers": [ - { "name": "Accept-Language", "value": "en-US" }, - { "name": "Referer", "value": "http://localhost:4200/" }, - { "name": "User-Agent", "value": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/113.0.5672.53 Safari/537.36" } - ], - "queryString": [], - "headersSize": -1, - "bodySize": -1 - }, - "response": { - "status": -1, - "statusText": "", - "httpVersion": "HTTP/1.1", - "cookies": [], - "headers": [], - "content": { - "size": -1, - "mimeType": "x-unknown" - }, - "headersSize": -1, - "bodySize": -1, - "redirectURL": "" - }, - "cache": {}, - "timings": { "send": -1, "wait": -1, "receive": -1 } - }, - { - "startedDateTime": "2023-05-14T07:14:44.885Z", - "time": 16.33, - "request": { - "method": "GET", - "url": "http://localhost:8000/api/documents/296/thumb/", - "httpVersion": "HTTP/1.1", - "cookies": [], - "headers": [ - { "name": "Accept", "value": "image/avif,image/webp,image/apng,image/svg+xml,image/*,*/*;q=0.8" }, - { "name": "Accept-Encoding", "value": "gzip, deflate, br" }, - { "name": "Accept-Language", "value": "en-US" }, - { "name": "Connection", "value": "keep-alive" }, - { "name": "Host", "value": "localhost:8000" }, - { "name": "Referer", "value": "http://localhost:4200/" }, - { "name": "Sec-Fetch-Dest", "value": "image" }, - { "name": "Sec-Fetch-Mode", "value": "no-cors" }, - { "name": "Sec-Fetch-Site", "value": "same-site" }, - { "name": "User-Agent", "value": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/113.0.5672.53 Safari/537.36" } - ], - "queryString": [], - "headersSize": -1, - "bodySize": -1 - }, - "response": { - "status": 200, - "statusText": "OK", - "httpVersion": "HTTP/1.1", - "cookies": [], - "headers": [ - { "name": "Allow", "value": "GET, HEAD, OPTIONS" }, - { "name": "Cache-Control", "value": "public=False, max-age=315360000" }, - { "name": "Content-Language", "value": "en-us" }, - { "name": "Content-Length", "value": "6352" }, - { "name": "Content-Type", "value": "image/webp" }, - { "name": "Cross-Origin-Opener-Policy", "value": "same-origin" }, - { "name": "Referrer-Policy", "value": "same-origin" }, - { "name": "Vary", "value": "Accept, Accept-Language, Origin, Cookie, Accept-Encoding" }, - { "name": "X-Api-Version", "value": "3" }, - { "name": "X-Content-Type-Options", "value": "nosniff" }, - { "name": "X-Frame-Options", "value": "ANY" }, - { "name": "X-Version", "value": "1.14.4" } - ], - "content": { - "size": -1, - "mimeType": "image/webp", - "text": "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", - "encoding": "base64" - }, - "headersSize": -1, - "bodySize": -1, - "redirectURL": "" - }, - "cache": {}, - "timings": { "send": -1, "wait": -1, "receive": 16.33 } - }, - { - "startedDateTime": "2023-05-14T07:14:44.885Z", - "time": 15.65, - "request": { - "method": "GET", - "url": "http://localhost:8000/api/documents/290/thumb/", - "httpVersion": "HTTP/1.1", - "cookies": [], - "headers": [ - { "name": "Accept", "value": "image/avif,image/webp,image/apng,image/svg+xml,image/*,*/*;q=0.8" }, - { "name": "Accept-Encoding", "value": "gzip, deflate, br" }, - { "name": "Accept-Language", "value": "en-US" }, - { "name": "Connection", "value": "keep-alive" }, - { "name": "Host", "value": "localhost:8000" }, - { "name": "Referer", "value": "http://localhost:4200/" }, - { "name": "Sec-Fetch-Dest", "value": "image" }, - { "name": "Sec-Fetch-Mode", "value": "no-cors" }, - { "name": "Sec-Fetch-Site", "value": "same-site" }, - { "name": "User-Agent", "value": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/113.0.5672.53 Safari/537.36" } - ], - "queryString": [], - "headersSize": -1, - "bodySize": -1 - }, - "response": { - "status": 200, - "statusText": "OK", - "httpVersion": "HTTP/1.1", - "cookies": [], - "headers": [ - { "name": "Allow", "value": "GET, HEAD, OPTIONS" }, - { "name": "Cache-Control", "value": "public=False, max-age=315360000" }, - { "name": "Content-Language", "value": "en-us" }, - { "name": "Content-Length", "value": "40358" }, - { "name": "Content-Type", "value": "image/webp" }, - { "name": "Cross-Origin-Opener-Policy", "value": "same-origin" }, - { "name": "Referrer-Policy", "value": "same-origin" }, - { "name": "Vary", "value": "Accept, Accept-Language, Origin, Cookie, Accept-Encoding" }, - { "name": "X-Api-Version", "value": "3" }, - { "name": "X-Content-Type-Options", "value": "nosniff" }, - { "name": "X-Frame-Options", "value": "ANY" }, - { "name": "X-Version", "value": "1.14.4" } - ], - "content": { - "size": -1, - "mimeType": "image/webp", - "text": "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", - "encoding": "base64" - }, - "headersSize": -1, - "bodySize": -1, - "redirectURL": "" - }, - "cache": {}, - "timings": { "send": -1, "wait": -1, "receive": 15.65 } - }, - { - "startedDateTime": "2023-05-14T07:14:44.885Z", - "time": -1, - "request": { - "method": "GET", - "url": "http://localhost:8000/api/documents/277/thumb/", - "httpVersion": "HTTP/1.1", - "cookies": [], - "headers": [ - { "name": "Accept-Language", "value": "en-US" }, - { "name": "Referer", "value": "http://localhost:4200/" }, - { "name": "User-Agent", "value": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/113.0.5672.53 Safari/537.36" } - ], - "queryString": [], - "headersSize": -1, - "bodySize": -1 - }, - "response": { - "status": -1, - "statusText": "", - "httpVersion": "HTTP/1.1", - "cookies": [], - "headers": [], - "content": { - "size": -1, - "mimeType": "x-unknown" - }, - "headersSize": -1, - "bodySize": -1, - "redirectURL": "" - }, - "cache": {}, - "timings": { "send": -1, "wait": -1, "receive": -1 } - }, - { - "startedDateTime": "2023-05-14T07:14:44.885Z", - "time": -1, - "request": { - "method": "GET", - "url": "http://localhost:8000/api/documents/312/thumb/", - "httpVersion": "HTTP/1.1", - "cookies": [], - "headers": [ - { "name": "Accept-Language", "value": "en-US" }, - { "name": "Referer", "value": "http://localhost:4200/" }, - { "name": "User-Agent", "value": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/113.0.5672.53 Safari/537.36" } - ], - "queryString": [], - "headersSize": -1, - "bodySize": -1 - }, - "response": { - "status": -1, - "statusText": "", - "httpVersion": "HTTP/1.1", - "cookies": [], - "headers": [], - "content": { - "size": -1, - "mimeType": "x-unknown" - }, - "headersSize": -1, - "bodySize": -1, - "redirectURL": "" - }, - "cache": {}, - "timings": { "send": -1, "wait": -1, "receive": -1 } - }, - { - "startedDateTime": "2023-05-14T07:14:44.885Z", - "time": -1, - "request": { - "method": "GET", - "url": "http://localhost:8000/api/documents/295/thumb/", - "httpVersion": "HTTP/1.1", - "cookies": [], - "headers": [ - { "name": "Accept-Language", "value": "en-US" }, - { "name": "Referer", "value": "http://localhost:4200/" }, - { "name": "User-Agent", "value": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/113.0.5672.53 Safari/537.36" } - ], - "queryString": [], - "headersSize": -1, - "bodySize": -1 - }, - "response": { - "status": -1, - "statusText": "", - "httpVersion": "HTTP/1.1", - "cookies": [], - "headers": [], - "content": { - "size": -1, - "mimeType": "x-unknown" - }, - "headersSize": -1, - "bodySize": -1, - "redirectURL": "" - }, - "cache": {}, - "timings": { "send": -1, "wait": -1, "receive": -1 } - } - ] - } -} diff --git a/src-ui/e2e/manage/requests/api-manage2.har b/src-ui/e2e/manage/requests/api-manage2.har deleted file mode 100644 index 796cdc62c..000000000 --- a/src-ui/e2e/manage/requests/api-manage2.har +++ /dev/null @@ -1,260 +0,0 @@ -{ - "log": { - "version": "1.2", - "creator": { - "name": "Playwright", - "version": "1.33.0" - }, - "browser": { - "name": "chromium", - "version": "113.0.5672.53" - }, - "entries": [ - { - "startedDateTime": "2023-05-14T07:14:44.026Z", - "time": 5.666, - "request": { - "method": "GET", - "url": "http://localhost:8000/api/ui_settings/", - "httpVersion": "HTTP/1.1", - "cookies": [], - "headers": [ - { "name": "Accept", "value": "application/json; version=3" }, - { "name": "Accept-Encoding", "value": "gzip, deflate, br" }, - { "name": "Accept-Language", "value": "en-US" }, - { "name": "Connection", "value": "keep-alive" }, - { "name": "Host", "value": "localhost:8000" }, - { "name": "Origin", "value": "http://localhost:4200" }, - { "name": "Referer", "value": "http://localhost:4200/" }, - { "name": "Sec-Fetch-Dest", "value": "empty" }, - { "name": "Sec-Fetch-Mode", "value": "cors" }, - { "name": "Sec-Fetch-Site", "value": "same-site" }, - { "name": "User-Agent", "value": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/113.0.5672.53 Safari/537.36" } - ], - "queryString": [], - "headersSize": -1, - "bodySize": -1 - }, - "response": { - "status": 200, - "statusText": "OK", - "httpVersion": "HTTP/1.1", - "cookies": [], - "headers": [ - { "name": "Access-Control-Allow-Origin", "value": "http://localhost:4200" }, - { "name": "Allow", "value": "GET, POST, HEAD, OPTIONS" }, - { "name": "Content-Encoding", "value": "br" }, - { "name": "Content-Language", "value": "en-us" }, - { "name": "Content-Length", "value": "956" }, - { "name": "Content-Type", "value": "application/json" }, - { "name": "Cross-Origin-Opener-Policy", "value": "same-origin" }, - { "name": "Referrer-Policy", "value": "same-origin" }, - { "name": "Vary", "value": "Accept, Accept-Language, Origin, Cookie, Accept-Encoding" }, - { "name": "X-Api-Version", "value": "3" }, - { "name": "X-Content-Type-Options", "value": "nosniff" }, - { "name": "X-Frame-Options", "value": "ANY" }, - { "name": "X-Version", "value": "1.14.4" } - ], - "content": { - "size": -1, - "mimeType": "application/json", - "text": "{\"user\":{\"id\":2,\"username\":\"testuser\",\"is_superuser\":false,\"groups\":[]},\"settings\":{\"language\":\"\",\"bulk_edit\":{\"confirmation_dialogs\":true,\"apply_on_close\":false},\"documentListSize\":50,\"dark_mode\":{\"use_system\":false,\"enabled\":\"false\",\"thumb_inverted\":\"true\"},\"theme\":{\"color\":\"#9fbf2f\"},\"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},\"comments_enabled\":true,\"slim_sidebar\":false,\"update_checking\":{\"enabled\":false,\"backend_setting\":\"default\"},\"saved_views\":{\"warn_on_unsaved_change\":true},\"notes_enabled\":true,\"tour_complete\":true},\"permissions\":[\"delete_permission\",\"change_user\",\"delete_tokenproxy\",\"delete_chordcounter\",\"change_uisettings\",\"delete_note\",\"change_session\",\"change_schedule\",\"add_userobjectpermission\",\"view_userobjectpermission\",\"change_taskattributes\",\"delete_tag\",\"delete_logentry\",\"change_frontendsettings\",\"view_documenttype\",\"add_comment\",\"add_log\",\"add_uisettings\",\"view_document\",\"change_userobjectpermission\",\"view_session\",\"change_failure\",\"change_storagepath\",\"change_mailrule\",\"delete_token\",\"view_taskresult\",\"change_ormq\",\"view_storagepath\",\"view_savedview\",\"change_processedmail\",\"change_chordcounter\",\"delete_user\",\"delete_savedview\",\"delete_mailaccount\",\"view_uisettings\",\"view_user\",\"view_paperlesstask\",\"add_task\",\"delete_success\",\"view_groupresult\",\"delete_comment\",\"view_correspondent\",\"add_logentry\",\"add_contenttype\",\"change_task\",\"add_paperlesstask\",\"delete_savedviewfilterrule\",\"add_groupresult\",\"view_tokenproxy\",\"add_processedmail\",\"add_schedule\",\"add_ormq\",\"delete_paperlesstask\",\"change_log\",\"view_processedmail\",\"view_mailaccount\",\"change_groupobjectpermission\",\"delete_ormq\",\"delete_documenttype\",\"add_success\",\"view_frontendsettings\",\"delete_correspondent\",\"view_failure\",\"view_ormq\",\"delete_taskattributes\",\"change_group\",\"add_failure\",\"delete_failure\",\"delete_taskresult\",\"view_savedviewfilterrule\",\"view_token\",\"add_chordcounter\",\"add_savedview\",\"change_paperlesstask\",\"delete_log\",\"add_user\",\"change_token\",\"change_note\",\"add_savedviewfilterrule\",\"change_savedview\",\"delete_group\",\"delete_userobjectpermission\",\"view_schedule\",\"delete_document\",\"add_tokenproxy\",\"change_permission\",\"delete_mailrule\",\"view_logentry\",\"add_permission\",\"delete_groupobjectpermission\",\"view_log\",\"view_taskattributes\",\"change_taskresult\",\"change_mailaccount\",\"delete_contenttype\",\"change_correspondent\",\"add_groupobjectpermission\",\"delete_processedmail\",\"view_note\",\"add_taskattributes\",\"add_document\",\"delete_task\",\"change_logentry\",\"change_contenttype\",\"delete_schedule\",\"delete_session\",\"add_token\",\"view_permission\",\"add_taskresult\",\"add_storagepath\",\"change_tag\",\"view_group\",\"add_note\",\"change_documenttype\",\"change_groupresult\",\"delete_frontendsettings\",\"view_chordcounter\",\"view_groupobjectpermission\",\"add_frontendsettings\",\"change_comment\",\"view_task\",\"add_correspondent\",\"view_comment\",\"view_contenttype\",\"change_success\",\"add_group\",\"add_session\",\"view_mailrule\",\"add_mailrule\",\"delete_storagepath\",\"add_tag\",\"view_tag\",\"add_documenttype\",\"add_mailaccount\",\"change_document\",\"delete_uisettings\",\"view_success\",\"change_savedviewfilterrule\",\"change_tokenproxy\",\"delete_groupresult\"]}" - }, - "headersSize": -1, - "bodySize": -1, - "redirectURL": "" - }, - "cache": {}, - "timings": { "send": -1, "wait": -1, "receive": 5.666 } - }, - { - "startedDateTime": "2023-05-14T07:14:44.124Z", - "time": 1.146, - "request": { - "method": "GET", - "url": "http://localhost:8000/api/saved_views/?page=1&page_size=100000", - "httpVersion": "HTTP/1.1", - "cookies": [], - "headers": [ - { "name": "Accept", "value": "application/json; version=3" }, - { "name": "Accept-Encoding", "value": "gzip, deflate, br" }, - { "name": "Accept-Language", "value": "en-US" }, - { "name": "Connection", "value": "keep-alive" }, - { "name": "Host", "value": "localhost:8000" }, - { "name": "Origin", "value": "http://localhost:4200" }, - { "name": "Referer", "value": "http://localhost:4200/" }, - { "name": "Sec-Fetch-Dest", "value": "empty" }, - { "name": "Sec-Fetch-Mode", "value": "cors" }, - { "name": "Sec-Fetch-Site", "value": "same-site" }, - { "name": "User-Agent", "value": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/113.0.5672.53 Safari/537.36" } - ], - "queryString": [ - { - "name": "page", - "value": "1" - }, - { - "name": "page_size", - "value": "100000" - } - ], - "headersSize": -1, - "bodySize": -1 - }, - "response": { - "status": 200, - "statusText": "OK", - "httpVersion": "HTTP/1.1", - "cookies": [], - "headers": [ - { "name": "Access-Control-Allow-Origin", "value": "http://localhost:4200" }, - { "name": "Allow", "value": "GET, POST, HEAD, OPTIONS" }, - { "name": "Content-Encoding", "value": "br" }, - { "name": "Content-Language", "value": "en-us" }, - { "name": "Content-Length", "value": "851" }, - { "name": "Content-Type", "value": "application/json" }, - { "name": "Cross-Origin-Opener-Policy", "value": "same-origin" }, - { "name": "Referrer-Policy", "value": "same-origin" }, - { "name": "Vary", "value": "Accept, Accept-Language, Origin, Cookie, Accept-Encoding" }, - { "name": "X-Api-Version", "value": "3" }, - { "name": "X-Content-Type-Options", "value": "nosniff" }, - { "name": "X-Frame-Options", "value": "ANY" }, - { "name": "X-Version", "value": "1.14.4" } - ], - "content": { - "size": -1, - "mimeType": "application/json", - "text": "{\"count\":6,\"next\":null,\"previous\":null,\"all\":[8,17,7,4,11,15],\"results\":[{\"id\":8,\"name\":\"Correspondent 2\",\"show_on_dashboard\":false,\"show_in_sidebar\":false,\"sort_field\":\"created\",\"sort_reverse\":true,\"filter_rules\":[{\"rule_type\":3,\"value\":\"2\"}],\"owner\":{\"id\":2,\"password\":\"pbkdf2_sha256$390000$ElHGEQzOIS3Gv2wu8YDbSt$bWASwmUfHtFMZ6+rG+4rrrtejjC9RiwXm6xMi0bxMZo=\",\"last_login\":\"2023-04-26T09:08:14Z\",\"is_superuser\":false,\"username\":\"testuser\",\"first_name\":\"\",\"last_name\":\"\",\"email\":\"test@user.com\",\"is_staff\":true,\"is_active\":true,\"date_joined\":\"2021-01-03T07:37:04Z\",\"groups\":[],\"user_permissions\":[57,58,59,60,5,6,7,8,1,2,3,4,9,10,11,12,61,62,63,64,65,66,67,68,13,14,15,16,117,118,119,120,121,122,123,124,113,114,115,116,77,78,79,80,85,86,87,88,69,70,71,72,81,82,83,84,73,74,75,76,33,34,35,36,21,22,23,24,37,38,39,40,89,90,91,92,29,30,31,32,109,137,110,138,111,139,112,140,105,106,107,108,41,42,43,44,45,46,47,48,93,94,95,96,25,26,27,28,101,102,103,104,97,98,99,100,125,126,127,128,129,130,131,132,49,50,51,52,53,54,55,56,133,134,135,136,17,18,19,20]},\"user_can_change\":true},{\"id\":17,\"name\":\"In the Last Month\",\"show_on_dashboard\":false,\"show_in_sidebar\":false,\"sort_field\":\"created\",\"sort_reverse\":true,\"filter_rules\":[{\"rule_type\":20,\"value\":\"created:[-1 month to now]\"}],\"owner\":{\"id\":2,\"password\":\"pbkdf2_sha256$390000$ElHGEQzOIS3Gv2wu8YDbSt$bWASwmUfHtFMZ6+rG+4rrrtejjC9RiwXm6xMi0bxMZo=\",\"last_login\":\"2023-04-26T09:08:14Z\",\"is_superuser\":false,\"username\":\"testuser\",\"first_name\":\"\",\"last_name\":\"\",\"email\":\"test@user.com\",\"is_staff\":true,\"is_active\":true,\"date_joined\":\"2021-01-03T07:37:04Z\",\"groups\":[],\"user_permissions\":[57,58,59,60,5,6,7,8,1,2,3,4,9,10,11,12,61,62,63,64,65,66,67,68,13,14,15,16,117,118,119,120,121,122,123,124,113,114,115,116,77,78,79,80,85,86,87,88,69,70,71,72,81,82,83,84,73,74,75,76,33,34,35,36,21,22,23,24,37,38,39,40,89,90,91,92,29,30,31,32,109,137,110,138,111,139,112,140,105,106,107,108,41,42,43,44,45,46,47,48,93,94,95,96,25,26,27,28,101,102,103,104,97,98,99,100,125,126,127,128,129,130,131,132,49,50,51,52,53,54,55,56,133,134,135,136,17,18,19,20]},\"user_can_change\":true},{\"id\":7,\"name\":\"Inbox\",\"show_on_dashboard\":true,\"show_in_sidebar\":true,\"sort_field\":\"created\",\"sort_reverse\":true,\"filter_rules\":[{\"rule_type\":6,\"value\":\"9\"}],\"owner\":{\"id\":2,\"password\":\"pbkdf2_sha256$390000$ElHGEQzOIS3Gv2wu8YDbSt$bWASwmUfHtFMZ6+rG+4rrrtejjC9RiwXm6xMi0bxMZo=\",\"last_login\":\"2023-04-26T09:08:14Z\",\"is_superuser\":false,\"username\":\"testuser\",\"first_name\":\"\",\"last_name\":\"\",\"email\":\"test@user.com\",\"is_staff\":true,\"is_active\":true,\"date_joined\":\"2021-01-03T07:37:04Z\",\"groups\":[],\"user_permissions\":[57,58,59,60,5,6,7,8,1,2,3,4,9,10,11,12,61,62,63,64,65,66,67,68,13,14,15,16,117,118,119,120,121,122,123,124,113,114,115,116,77,78,79,80,85,86,87,88,69,70,71,72,81,82,83,84,73,74,75,76,33,34,35,36,21,22,23,24,37,38,39,40,89,90,91,92,29,30,31,32,109,137,110,138,111,139,112,140,105,106,107,108,41,42,43,44,45,46,47,48,93,94,95,96,25,26,27,28,101,102,103,104,97,98,99,100,125,126,127,128,129,130,131,132,49,50,51,52,53,54,55,56,133,134,135,136,17,18,19,20]},\"user_can_change\":true},{\"id\":4,\"name\":\"Recently Added\",\"show_on_dashboard\":true,\"show_in_sidebar\":true,\"sort_field\":\"created\",\"sort_reverse\":true,\"filter_rules\":[],\"owner\":{\"id\":2,\"password\":\"pbkdf2_sha256$390000$ElHGEQzOIS3Gv2wu8YDbSt$bWASwmUfHtFMZ6+rG+4rrrtejjC9RiwXm6xMi0bxMZo=\",\"last_login\":\"2023-04-26T09:08:14Z\",\"is_superuser\":false,\"username\":\"testuser\",\"first_name\":\"\",\"last_name\":\"\",\"email\":\"test@user.com\",\"is_staff\":true,\"is_active\":true,\"date_joined\":\"2021-01-03T07:37:04Z\",\"groups\":[],\"user_permissions\":[57,58,59,60,5,6,7,8,1,2,3,4,9,10,11,12,61,62,63,64,65,66,67,68,13,14,15,16,117,118,119,120,121,122,123,124,113,114,115,116,77,78,79,80,85,86,87,88,69,70,71,72,81,82,83,84,73,74,75,76,33,34,35,36,21,22,23,24,37,38,39,40,89,90,91,92,29,30,31,32,109,137,110,138,111,139,112,140,105,106,107,108,41,42,43,44,45,46,47,48,93,94,95,96,25,26,27,28,101,102,103,104,97,98,99,100,125,126,127,128,129,130,131,132,49,50,51,52,53,54,55,56,133,134,135,136,17,18,19,20]},\"user_can_change\":true},{\"id\":11,\"name\":\"Tag: Another Sample Tag\",\"show_on_dashboard\":false,\"show_in_sidebar\":true,\"sort_field\":\"created\",\"sort_reverse\":true,\"filter_rules\":[{\"rule_type\":6,\"value\":\"4\"}],\"owner\":{\"id\":2,\"password\":\"pbkdf2_sha256$390000$ElHGEQzOIS3Gv2wu8YDbSt$bWASwmUfHtFMZ6+rG+4rrrtejjC9RiwXm6xMi0bxMZo=\",\"last_login\":\"2023-04-26T09:08:14Z\",\"is_superuser\":false,\"username\":\"testuser\",\"first_name\":\"\",\"last_name\":\"\",\"email\":\"test@user.com\",\"is_staff\":true,\"is_active\":true,\"date_joined\":\"2021-01-03T07:37:04Z\",\"groups\":[],\"user_permissions\":[57,58,59,60,5,6,7,8,1,2,3,4,9,10,11,12,61,62,63,64,65,66,67,68,13,14,15,16,117,118,119,120,121,122,123,124,113,114,115,116,77,78,79,80,85,86,87,88,69,70,71,72,81,82,83,84,73,74,75,76,33,34,35,36,21,22,23,24,37,38,39,40,89,90,91,92,29,30,31,32,109,137,110,138,111,139,112,140,105,106,107,108,41,42,43,44,45,46,47,48,93,94,95,96,25,26,27,28,101,102,103,104,97,98,99,100,125,126,127,128,129,130,131,132,49,50,51,52,53,54,55,56,133,134,135,136,17,18,19,20]},\"user_can_change\":true},{\"id\":15,\"name\":\"View ASN not empty\",\"show_on_dashboard\":false,\"show_in_sidebar\":false,\"sort_field\":\"created\",\"sort_reverse\":true,\"filter_rules\":[{\"rule_type\":18,\"value\":\"false\"}],\"owner\":{\"id\":2,\"password\":\"pbkdf2_sha256$390000$ElHGEQzOIS3Gv2wu8YDbSt$bWASwmUfHtFMZ6+rG+4rrrtejjC9RiwXm6xMi0bxMZo=\",\"last_login\":\"2023-04-26T09:08:14Z\",\"is_superuser\":false,\"username\":\"testuser\",\"first_name\":\"\",\"last_name\":\"\",\"email\":\"test@user.com\",\"is_staff\":true,\"is_active\":true,\"date_joined\":\"2021-01-03T07:37:04Z\",\"groups\":[],\"user_permissions\":[57,58,59,60,5,6,7,8,1,2,3,4,9,10,11,12,61,62,63,64,65,66,67,68,13,14,15,16,117,118,119,120,121,122,123,124,113,114,115,116,77,78,79,80,85,86,87,88,69,70,71,72,81,82,83,84,73,74,75,76,33,34,35,36,21,22,23,24,37,38,39,40,89,90,91,92,29,30,31,32,109,137,110,138,111,139,112,140,105,106,107,108,41,42,43,44,45,46,47,48,93,94,95,96,25,26,27,28,101,102,103,104,97,98,99,100,125,126,127,128,129,130,131,132,49,50,51,52,53,54,55,56,133,134,135,136,17,18,19,20]},\"user_can_change\":true}]}" - }, - "headersSize": -1, - "bodySize": -1, - "redirectURL": "" - }, - "cache": {}, - "timings": { "send": -1, "wait": -1, "receive": 1.146 } - }, - { - "startedDateTime": "2023-05-14T07:14:44.124Z", - "time": 0.586, - "request": { - "method": "GET", - "url": "http://localhost:8000/api/tasks/", - "httpVersion": "HTTP/1.1", - "cookies": [], - "headers": [ - { "name": "Accept", "value": "application/json; version=3" }, - { "name": "Accept-Encoding", "value": "gzip, deflate, br" }, - { "name": "Accept-Language", "value": "en-US" }, - { "name": "Connection", "value": "keep-alive" }, - { "name": "Host", "value": "localhost:8000" }, - { "name": "Origin", "value": "http://localhost:4200" }, - { "name": "Referer", "value": "http://localhost:4200/" }, - { "name": "Sec-Fetch-Dest", "value": "empty" }, - { "name": "Sec-Fetch-Mode", "value": "cors" }, - { "name": "Sec-Fetch-Site", "value": "same-site" }, - { "name": "User-Agent", "value": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/113.0.5672.53 Safari/537.36" } - ], - "queryString": [], - "headersSize": -1, - "bodySize": -1 - }, - "response": { - "status": 200, - "statusText": "OK", - "httpVersion": "HTTP/1.1", - "cookies": [], - "headers": [ - { "name": "Access-Control-Allow-Origin", "value": "http://localhost:4200" }, - { "name": "Allow", "value": "GET, HEAD, OPTIONS" }, - { "name": "Content-Language", "value": "en-us" }, - { "name": "Content-Length", "value": "2" }, - { "name": "Content-Type", "value": "application/json" }, - { "name": "Cross-Origin-Opener-Policy", "value": "same-origin" }, - { "name": "Referrer-Policy", "value": "same-origin" }, - { "name": "Vary", "value": "Accept, Accept-Language, Origin, Cookie" }, - { "name": "X-Api-Version", "value": "3" }, - { "name": "X-Content-Type-Options", "value": "nosniff" }, - { "name": "X-Frame-Options", "value": "ANY" }, - { "name": "X-Version", "value": "1.14.4" } - ], - "content": { - "size": -1, - "mimeType": "application/json", - "text": "[]" - }, - "headersSize": -1, - "bodySize": -1, - "redirectURL": "" - }, - "cache": {}, - "timings": { "send": -1, "wait": -1, "receive": 0.586 } - }, - { - "startedDateTime": "2023-05-14T07:14:44.124Z", - "time": 0.541, - "request": { - "method": "GET", - "url": "http://localhost:8000/api/correspondents/?page=1&full_perms=true", - "httpVersion": "HTTP/1.1", - "cookies": [], - "headers": [ - { "name": "Accept", "value": "application/json; version=3" }, - { "name": "Accept-Encoding", "value": "gzip, deflate, br" }, - { "name": "Accept-Language", "value": "en-US" }, - { "name": "Connection", "value": "keep-alive" }, - { "name": "Host", "value": "localhost:8000" }, - { "name": "Origin", "value": "http://localhost:4200" }, - { "name": "Referer", "value": "http://localhost:4200/" }, - { "name": "Sec-Fetch-Dest", "value": "empty" }, - { "name": "Sec-Fetch-Mode", "value": "cors" }, - { "name": "Sec-Fetch-Site", "value": "same-site" }, - { "name": "User-Agent", "value": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/113.0.5672.53 Safari/537.36" } - ], - "queryString": [ - { - "name": "page", - "value": "1" - }, - { - "name": "full_perms", - "value": "true" - } - ], - "headersSize": -1, - "bodySize": -1 - }, - "response": { - "status": 200, - "statusText": "OK", - "httpVersion": "HTTP/1.1", - "cookies": [], - "headers": [ - { "name": "Access-Control-Allow-Origin", "value": "http://localhost:4200" }, - { "name": "Allow", "value": "GET, POST, HEAD, OPTIONS" }, - { "name": "Content-Encoding", "value": "br" }, - { "name": "Content-Language", "value": "en-us" }, - { "name": "Content-Length", "value": "303" }, - { "name": "Content-Type", "value": "application/json" }, - { "name": "Cross-Origin-Opener-Policy", "value": "same-origin" }, - { "name": "Referrer-Policy", "value": "same-origin" }, - { "name": "Vary", "value": "Accept, Accept-Language, Origin, Cookie, Accept-Encoding" }, - { "name": "X-Api-Version", "value": "3" }, - { "name": "X-Content-Type-Options", "value": "nosniff" }, - { "name": "X-Frame-Options", "value": "ANY" }, - { "name": "X-Version", "value": "1.14.4" } - ], - "content": { - "size": -1, - "mimeType": "application/json", - "text": "{\"count\":4,\"next\":null,\"previous\":null,\"all\":[17,12,4,1],\"results\":[{\"id\":17,\"slug\":\"correspondent-14\",\"name\":\"Correspondent 14\",\"match\":\"\",\"matching_algorithm\":1,\"is_insensitive\":true,\"document_count\":2,\"last_correspondence\":\"2022-03-13T00:00:00Z\",\"owner\":15,\"permissions\":{\"view\":{\"users\":[3,2],\"groups\":[]},\"change\":{\"users\":[3],\"groups\":[]}}},{\"id\":12,\"slug\":\"correspondent-9\",\"name\":\"Correspondent 9\",\"match\":\"\",\"matching_algorithm\":6,\"is_insensitive\":true,\"document_count\":4,\"last_correspondence\":\"2022-10-03T00:00:00Z\",\"owner\":2,\"permissions\":{\"view\":{\"users\":[],\"groups\":[]},\"change\":{\"users\":[],\"groups\":[]}}},{\"id\":4,\"slug\":\"newest-correspondent\",\"name\":\"Newest Correspondent\",\"match\":\"\",\"matching_algorithm\":1,\"is_insensitive\":true,\"document_count\":1,\"last_correspondence\":\"2021-02-07T08:00:00Z\",\"owner\":2,\"permissions\":{\"view\":{\"users\":[],\"groups\":[]},\"change\":{\"users\":[],\"groups\":[]}}},{\"id\":1,\"slug\":\"test-correspondent-1\",\"name\":\"Test Correspondent 1\",\"match\":\"\",\"matching_algorithm\":1,\"is_insensitive\":true,\"document_count\":3,\"last_correspondence\":\"2022-10-02T00:00:00Z\",\"owner\":2,\"permissions\":{\"view\":{\"users\":[],\"groups\":[]},\"change\":{\"users\":[],\"groups\":[]}}}]}" - }, - "headersSize": -1, - "bodySize": -1, - "redirectURL": "" - }, - "cache": {}, - "timings": { "send": -1, "wait": -1, "receive": 0.541 } - } - ] - } -} diff --git a/src-ui/e2e/settings/requests/api-settings2.har b/src-ui/e2e/settings/requests/api-settings2.har deleted file mode 100644 index c9e3a6407..000000000 --- a/src-ui/e2e/settings/requests/api-settings2.har +++ /dev/null @@ -1,326 +0,0 @@ -{ - "log": { - "version": "1.2", - "creator": { - "name": "Playwright", - "version": "1.33.0" - }, - "browser": { - "name": "chromium", - "version": "113.0.5672.53" - }, - "entries": [ - { - "startedDateTime": "2023-05-14T07:23:32.972Z", - "time": 5.999, - "request": { - "method": "GET", - "url": "http://localhost:8000/api/ui_settings/", - "httpVersion": "HTTP/1.1", - "cookies": [], - "headers": [ - { "name": "Accept", "value": "application/json; version=3" }, - { "name": "Accept-Encoding", "value": "gzip, deflate, br" }, - { "name": "Accept-Language", "value": "en-US" }, - { "name": "Connection", "value": "keep-alive" }, - { "name": "Host", "value": "localhost:8000" }, - { "name": "Origin", "value": "http://localhost:4200" }, - { "name": "Referer", "value": "http://localhost:4200/" }, - { "name": "Sec-Fetch-Dest", "value": "empty" }, - { "name": "Sec-Fetch-Mode", "value": "cors" }, - { "name": "Sec-Fetch-Site", "value": "same-site" }, - { "name": "User-Agent", "value": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/113.0.5672.53 Safari/537.36" } - ], - "queryString": [], - "headersSize": -1, - "bodySize": -1 - }, - "response": { - "status": 200, - "statusText": "OK", - "httpVersion": "HTTP/1.1", - "cookies": [], - "headers": [ - { "name": "Access-Control-Allow-Origin", "value": "http://localhost:4200" }, - { "name": "Allow", "value": "GET, POST, HEAD, OPTIONS" }, - { "name": "Content-Encoding", "value": "br" }, - { "name": "Content-Language", "value": "en-us" }, - { "name": "Content-Length", "value": "961" }, - { "name": "Content-Type", "value": "application/json" }, - { "name": "Cross-Origin-Opener-Policy", "value": "same-origin" }, - { "name": "Referrer-Policy", "value": "same-origin" }, - { "name": "Vary", "value": "Accept, Accept-Language, Origin, Cookie, Accept-Encoding" }, - { "name": "X-Api-Version", "value": "3" }, - { "name": "X-Content-Type-Options", "value": "nosniff" }, - { "name": "X-Frame-Options", "value": "ANY" }, - { "name": "X-Version", "value": "1.14.4" } - ], - "content": { - "size": -1, - "mimeType": "application/json", - "text": "{\"user\":{\"id\":2,\"username\":\"testuser\",\"is_superuser\":false,\"groups\":[]},\"settings\":{\"language\":\"\",\"bulk_edit\":{\"confirmation_dialogs\":true,\"apply_on_close\":false},\"documentListSize\":50,\"dark_mode\":{\"use_system\":false,\"enabled\":\"false\",\"thumb_inverted\":\"true\"},\"theme\":{\"color\":\"#9fbf2f\"},\"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},\"comments_enabled\":true,\"slim_sidebar\":false,\"update_checking\":{\"enabled\":false,\"backend_setting\":\"default\"},\"saved_views\":{\"warn_on_unsaved_change\":true},\"notes_enabled\":true,\"tour_complete\":true},\"permissions\":[\"add_taskresult\",\"view_frontendsettings\",\"change_taskresult\",\"change_token\",\"delete_taskresult\",\"view_comment\",\"add_uisettings\",\"delete_processedmail\",\"view_permission\",\"add_processedmail\",\"add_tag\",\"delete_user\",\"view_user\",\"change_paperlesstask\",\"delete_paperlesstask\",\"change_success\",\"change_frontendsettings\",\"change_note\",\"view_logentry\",\"change_log\",\"add_permission\",\"delete_frontendsettings\",\"change_processedmail\",\"view_processedmail\",\"delete_document\",\"view_task\",\"delete_tag\",\"delete_uisettings\",\"delete_savedviewfilterrule\",\"delete_chordcounter\",\"change_schedule\",\"change_logentry\",\"change_userobjectpermission\",\"view_contenttype\",\"add_groupobjectpermission\",\"add_schedule\",\"view_correspondent\",\"delete_groupobjectpermission\",\"delete_groupresult\",\"add_contenttype\",\"change_task\",\"add_ormq\",\"add_chordcounter\",\"add_paperlesstask\",\"delete_contenttype\",\"delete_token\",\"delete_comment\",\"add_token\",\"delete_success\",\"view_document\",\"add_documenttype\",\"change_group\",\"change_contenttype\",\"add_logentry\",\"view_note\",\"add_storagepath\",\"delete_documenttype\",\"delete_session\",\"add_userobjectpermission\",\"view_mailrule\",\"add_session\",\"delete_task\",\"change_permission\",\"view_tokenproxy\",\"delete_storagepath\",\"add_group\",\"change_documenttype\",\"view_documenttype\",\"view_success\",\"change_taskattributes\",\"add_frontendsettings\",\"change_mailaccount\",\"delete_permission\",\"change_ormq\",\"change_uisettings\",\"delete_failure\",\"change_mailrule\",\"delete_tokenproxy\",\"change_storagepath\",\"delete_mailrule\",\"change_failure\",\"add_mailrule\",\"change_savedviewfilterrule\",\"delete_savedview\",\"delete_logentry\",\"view_mailaccount\",\"add_failure\",\"view_schedule\",\"change_user\",\"add_task\",\"view_taskresult\",\"add_document\",\"add_mailaccount\",\"change_groupobjectpermission\",\"view_taskattributes\",\"view_groupresult\",\"change_chordcounter\",\"delete_userobjectpermission\",\"delete_note\",\"delete_correspondent\",\"add_note\",\"change_correspondent\",\"view_log\",\"add_tokenproxy\",\"view_ormq\",\"view_group\",\"add_savedviewfilterrule\",\"add_correspondent\",\"add_groupresult\",\"delete_mailaccount\",\"change_document\",\"view_savedview\",\"change_tag\",\"delete_log\",\"change_groupresult\",\"view_session\",\"add_comment\",\"change_tokenproxy\",\"view_paperlesstask\",\"view_chordcounter\",\"delete_group\",\"add_user\",\"view_groupobjectpermission\",\"view_storagepath\",\"view_savedviewfilterrule\",\"view_userobjectpermission\",\"add_log\",\"delete_taskattributes\",\"change_savedview\",\"add_success\",\"change_session\",\"view_token\",\"view_tag\",\"add_taskattributes\",\"view_uisettings\",\"view_failure\",\"delete_ormq\",\"change_comment\",\"delete_schedule\",\"add_savedview\"]}" - }, - "headersSize": -1, - "bodySize": -1, - "redirectURL": "" - }, - "cache": {}, - "timings": { "send": -1, "wait": -1, "receive": 5.999 } - }, - { - "startedDateTime": "2023-05-14T07:23:33.093Z", - "time": 1.002, - "request": { - "method": "GET", - "url": "http://localhost:8000/api/saved_views/?page=1&page_size=100000", - "httpVersion": "HTTP/1.1", - "cookies": [], - "headers": [ - { "name": "Accept", "value": "application/json; version=3" }, - { "name": "Accept-Encoding", "value": "gzip, deflate, br" }, - { "name": "Accept-Language", "value": "en-US" }, - { "name": "Connection", "value": "keep-alive" }, - { "name": "Host", "value": "localhost:8000" }, - { "name": "Origin", "value": "http://localhost:4200" }, - { "name": "Referer", "value": "http://localhost:4200/" }, - { "name": "Sec-Fetch-Dest", "value": "empty" }, - { "name": "Sec-Fetch-Mode", "value": "cors" }, - { "name": "Sec-Fetch-Site", "value": "same-site" }, - { "name": "User-Agent", "value": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/113.0.5672.53 Safari/537.36" } - ], - "queryString": [ - { - "name": "page", - "value": "1" - }, - { - "name": "page_size", - "value": "100000" - } - ], - "headersSize": -1, - "bodySize": -1 - }, - "response": { - "status": 200, - "statusText": "OK", - "httpVersion": "HTTP/1.1", - "cookies": [], - "headers": [ - { "name": "Access-Control-Allow-Origin", "value": "http://localhost:4200" }, - { "name": "Allow", "value": "GET, POST, HEAD, OPTIONS" }, - { "name": "Content-Encoding", "value": "br" }, - { "name": "Content-Language", "value": "en-us" }, - { "name": "Content-Length", "value": "851" }, - { "name": "Content-Type", "value": "application/json" }, - { "name": "Cross-Origin-Opener-Policy", "value": "same-origin" }, - { "name": "Referrer-Policy", "value": "same-origin" }, - { "name": "Vary", "value": "Accept, Accept-Language, Origin, Cookie, Accept-Encoding" }, - { "name": "X-Api-Version", "value": "3" }, - { "name": "X-Content-Type-Options", "value": "nosniff" }, - { "name": "X-Frame-Options", "value": "ANY" }, - { "name": "X-Version", "value": "1.14.4" } - ], - "content": { - "size": -1, - "mimeType": "application/json", - "text": "{\"count\":6,\"next\":null,\"previous\":null,\"all\":[8,17,7,4,11,15],\"results\":[{\"id\":8,\"name\":\"Correspondent 2\",\"show_on_dashboard\":false,\"show_in_sidebar\":false,\"sort_field\":\"created\",\"sort_reverse\":true,\"filter_rules\":[{\"rule_type\":3,\"value\":\"2\"}],\"owner\":{\"id\":2,\"password\":\"pbkdf2_sha256$390000$ElHGEQzOIS3Gv2wu8YDbSt$bWASwmUfHtFMZ6+rG+4rrrtejjC9RiwXm6xMi0bxMZo=\",\"last_login\":\"2023-04-26T09:08:14Z\",\"is_superuser\":false,\"username\":\"testuser\",\"first_name\":\"\",\"last_name\":\"\",\"email\":\"test@user.com\",\"is_staff\":true,\"is_active\":true,\"date_joined\":\"2021-01-03T07:37:04Z\",\"groups\":[],\"user_permissions\":[57,58,59,60,5,6,7,8,1,2,3,4,9,10,11,12,61,62,63,64,65,66,67,68,13,14,15,16,117,118,119,120,121,122,123,124,113,114,115,116,77,78,79,80,85,86,87,88,69,70,71,72,81,82,83,84,73,74,75,76,33,34,35,36,21,22,23,24,37,38,39,40,89,90,91,92,29,30,31,32,109,137,110,138,111,139,112,140,105,106,107,108,41,42,43,44,45,46,47,48,93,94,95,96,25,26,27,28,101,102,103,104,97,98,99,100,125,126,127,128,129,130,131,132,49,50,51,52,53,54,55,56,133,134,135,136,17,18,19,20]},\"user_can_change\":true},{\"id\":17,\"name\":\"In the Last Month\",\"show_on_dashboard\":false,\"show_in_sidebar\":false,\"sort_field\":\"created\",\"sort_reverse\":true,\"filter_rules\":[{\"rule_type\":20,\"value\":\"created:[-1 month to now]\"}],\"owner\":{\"id\":2,\"password\":\"pbkdf2_sha256$390000$ElHGEQzOIS3Gv2wu8YDbSt$bWASwmUfHtFMZ6+rG+4rrrtejjC9RiwXm6xMi0bxMZo=\",\"last_login\":\"2023-04-26T09:08:14Z\",\"is_superuser\":false,\"username\":\"testuser\",\"first_name\":\"\",\"last_name\":\"\",\"email\":\"test@user.com\",\"is_staff\":true,\"is_active\":true,\"date_joined\":\"2021-01-03T07:37:04Z\",\"groups\":[],\"user_permissions\":[57,58,59,60,5,6,7,8,1,2,3,4,9,10,11,12,61,62,63,64,65,66,67,68,13,14,15,16,117,118,119,120,121,122,123,124,113,114,115,116,77,78,79,80,85,86,87,88,69,70,71,72,81,82,83,84,73,74,75,76,33,34,35,36,21,22,23,24,37,38,39,40,89,90,91,92,29,30,31,32,109,137,110,138,111,139,112,140,105,106,107,108,41,42,43,44,45,46,47,48,93,94,95,96,25,26,27,28,101,102,103,104,97,98,99,100,125,126,127,128,129,130,131,132,49,50,51,52,53,54,55,56,133,134,135,136,17,18,19,20]},\"user_can_change\":true},{\"id\":7,\"name\":\"Inbox\",\"show_on_dashboard\":true,\"show_in_sidebar\":true,\"sort_field\":\"created\",\"sort_reverse\":true,\"filter_rules\":[{\"rule_type\":6,\"value\":\"9\"}],\"owner\":{\"id\":2,\"password\":\"pbkdf2_sha256$390000$ElHGEQzOIS3Gv2wu8YDbSt$bWASwmUfHtFMZ6+rG+4rrrtejjC9RiwXm6xMi0bxMZo=\",\"last_login\":\"2023-04-26T09:08:14Z\",\"is_superuser\":false,\"username\":\"testuser\",\"first_name\":\"\",\"last_name\":\"\",\"email\":\"test@user.com\",\"is_staff\":true,\"is_active\":true,\"date_joined\":\"2021-01-03T07:37:04Z\",\"groups\":[],\"user_permissions\":[57,58,59,60,5,6,7,8,1,2,3,4,9,10,11,12,61,62,63,64,65,66,67,68,13,14,15,16,117,118,119,120,121,122,123,124,113,114,115,116,77,78,79,80,85,86,87,88,69,70,71,72,81,82,83,84,73,74,75,76,33,34,35,36,21,22,23,24,37,38,39,40,89,90,91,92,29,30,31,32,109,137,110,138,111,139,112,140,105,106,107,108,41,42,43,44,45,46,47,48,93,94,95,96,25,26,27,28,101,102,103,104,97,98,99,100,125,126,127,128,129,130,131,132,49,50,51,52,53,54,55,56,133,134,135,136,17,18,19,20]},\"user_can_change\":true},{\"id\":4,\"name\":\"Recently Added\",\"show_on_dashboard\":true,\"show_in_sidebar\":true,\"sort_field\":\"created\",\"sort_reverse\":true,\"filter_rules\":[],\"owner\":{\"id\":2,\"password\":\"pbkdf2_sha256$390000$ElHGEQzOIS3Gv2wu8YDbSt$bWASwmUfHtFMZ6+rG+4rrrtejjC9RiwXm6xMi0bxMZo=\",\"last_login\":\"2023-04-26T09:08:14Z\",\"is_superuser\":false,\"username\":\"testuser\",\"first_name\":\"\",\"last_name\":\"\",\"email\":\"test@user.com\",\"is_staff\":true,\"is_active\":true,\"date_joined\":\"2021-01-03T07:37:04Z\",\"groups\":[],\"user_permissions\":[57,58,59,60,5,6,7,8,1,2,3,4,9,10,11,12,61,62,63,64,65,66,67,68,13,14,15,16,117,118,119,120,121,122,123,124,113,114,115,116,77,78,79,80,85,86,87,88,69,70,71,72,81,82,83,84,73,74,75,76,33,34,35,36,21,22,23,24,37,38,39,40,89,90,91,92,29,30,31,32,109,137,110,138,111,139,112,140,105,106,107,108,41,42,43,44,45,46,47,48,93,94,95,96,25,26,27,28,101,102,103,104,97,98,99,100,125,126,127,128,129,130,131,132,49,50,51,52,53,54,55,56,133,134,135,136,17,18,19,20]},\"user_can_change\":true},{\"id\":11,\"name\":\"Tag: Another Sample Tag\",\"show_on_dashboard\":false,\"show_in_sidebar\":true,\"sort_field\":\"created\",\"sort_reverse\":true,\"filter_rules\":[{\"rule_type\":6,\"value\":\"4\"}],\"owner\":{\"id\":2,\"password\":\"pbkdf2_sha256$390000$ElHGEQzOIS3Gv2wu8YDbSt$bWASwmUfHtFMZ6+rG+4rrrtejjC9RiwXm6xMi0bxMZo=\",\"last_login\":\"2023-04-26T09:08:14Z\",\"is_superuser\":false,\"username\":\"testuser\",\"first_name\":\"\",\"last_name\":\"\",\"email\":\"test@user.com\",\"is_staff\":true,\"is_active\":true,\"date_joined\":\"2021-01-03T07:37:04Z\",\"groups\":[],\"user_permissions\":[57,58,59,60,5,6,7,8,1,2,3,4,9,10,11,12,61,62,63,64,65,66,67,68,13,14,15,16,117,118,119,120,121,122,123,124,113,114,115,116,77,78,79,80,85,86,87,88,69,70,71,72,81,82,83,84,73,74,75,76,33,34,35,36,21,22,23,24,37,38,39,40,89,90,91,92,29,30,31,32,109,137,110,138,111,139,112,140,105,106,107,108,41,42,43,44,45,46,47,48,93,94,95,96,25,26,27,28,101,102,103,104,97,98,99,100,125,126,127,128,129,130,131,132,49,50,51,52,53,54,55,56,133,134,135,136,17,18,19,20]},\"user_can_change\":true},{\"id\":15,\"name\":\"View ASN not empty\",\"show_on_dashboard\":false,\"show_in_sidebar\":false,\"sort_field\":\"created\",\"sort_reverse\":true,\"filter_rules\":[{\"rule_type\":18,\"value\":\"false\"}],\"owner\":{\"id\":2,\"password\":\"pbkdf2_sha256$390000$ElHGEQzOIS3Gv2wu8YDbSt$bWASwmUfHtFMZ6+rG+4rrrtejjC9RiwXm6xMi0bxMZo=\",\"last_login\":\"2023-04-26T09:08:14Z\",\"is_superuser\":false,\"username\":\"testuser\",\"first_name\":\"\",\"last_name\":\"\",\"email\":\"test@user.com\",\"is_staff\":true,\"is_active\":true,\"date_joined\":\"2021-01-03T07:37:04Z\",\"groups\":[],\"user_permissions\":[57,58,59,60,5,6,7,8,1,2,3,4,9,10,11,12,61,62,63,64,65,66,67,68,13,14,15,16,117,118,119,120,121,122,123,124,113,114,115,116,77,78,79,80,85,86,87,88,69,70,71,72,81,82,83,84,73,74,75,76,33,34,35,36,21,22,23,24,37,38,39,40,89,90,91,92,29,30,31,32,109,137,110,138,111,139,112,140,105,106,107,108,41,42,43,44,45,46,47,48,93,94,95,96,25,26,27,28,101,102,103,104,97,98,99,100,125,126,127,128,129,130,131,132,49,50,51,52,53,54,55,56,133,134,135,136,17,18,19,20]},\"user_can_change\":true}]}" - }, - "headersSize": -1, - "bodySize": -1, - "redirectURL": "" - }, - "cache": {}, - "timings": { "send": -1, "wait": -1, "receive": 1.002 } - }, - { - "startedDateTime": "2023-05-14T07:23:33.093Z", - "time": 0.55, - "request": { - "method": "GET", - "url": "http://localhost:8000/api/tasks/", - "httpVersion": "HTTP/1.1", - "cookies": [], - "headers": [ - { "name": "Accept", "value": "application/json; version=3" }, - { "name": "Accept-Encoding", "value": "gzip, deflate, br" }, - { "name": "Accept-Language", "value": "en-US" }, - { "name": "Connection", "value": "keep-alive" }, - { "name": "Host", "value": "localhost:8000" }, - { "name": "Origin", "value": "http://localhost:4200" }, - { "name": "Referer", "value": "http://localhost:4200/" }, - { "name": "Sec-Fetch-Dest", "value": "empty" }, - { "name": "Sec-Fetch-Mode", "value": "cors" }, - { "name": "Sec-Fetch-Site", "value": "same-site" }, - { "name": "User-Agent", "value": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/113.0.5672.53 Safari/537.36" } - ], - "queryString": [], - "headersSize": -1, - "bodySize": -1 - }, - "response": { - "status": 200, - "statusText": "OK", - "httpVersion": "HTTP/1.1", - "cookies": [], - "headers": [ - { "name": "Access-Control-Allow-Origin", "value": "http://localhost:4200" }, - { "name": "Allow", "value": "GET, HEAD, OPTIONS" }, - { "name": "Content-Language", "value": "en-us" }, - { "name": "Content-Length", "value": "2" }, - { "name": "Content-Type", "value": "application/json" }, - { "name": "Cross-Origin-Opener-Policy", "value": "same-origin" }, - { "name": "Referrer-Policy", "value": "same-origin" }, - { "name": "Vary", "value": "Accept, Accept-Language, Origin, Cookie" }, - { "name": "X-Api-Version", "value": "3" }, - { "name": "X-Content-Type-Options", "value": "nosniff" }, - { "name": "X-Frame-Options", "value": "ANY" }, - { "name": "X-Version", "value": "1.14.4" } - ], - "content": { - "size": -1, - "mimeType": "application/json", - "text": "[]" - }, - "headersSize": -1, - "bodySize": -1, - "redirectURL": "" - }, - "cache": {}, - "timings": { "send": -1, "wait": -1, "receive": 0.55 } - }, - { - "startedDateTime": "2023-05-14T07:23:33.093Z", - "time": 0.716, - "request": { - "method": "GET", - "url": "http://localhost:8000/api/mail_accounts/?page=1&page_size=100000", - "httpVersion": "HTTP/1.1", - "cookies": [], - "headers": [ - { "name": "Accept", "value": "application/json; version=3" }, - { "name": "Accept-Encoding", "value": "gzip, deflate, br" }, - { "name": "Accept-Language", "value": "en-US" }, - { "name": "Connection", "value": "keep-alive" }, - { "name": "Host", "value": "localhost:8000" }, - { "name": "Origin", "value": "http://localhost:4200" }, - { "name": "Referer", "value": "http://localhost:4200/" }, - { "name": "Sec-Fetch-Dest", "value": "empty" }, - { "name": "Sec-Fetch-Mode", "value": "cors" }, - { "name": "Sec-Fetch-Site", "value": "same-site" }, - { "name": "User-Agent", "value": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/113.0.5672.53 Safari/537.36" } - ], - "queryString": [ - { - "name": "page", - "value": "1" - }, - { - "name": "page_size", - "value": "100000" - } - ], - "headersSize": -1, - "bodySize": -1 - }, - "response": { - "status": 200, - "statusText": "OK", - "httpVersion": "HTTP/1.1", - "cookies": [], - "headers": [ - { "name": "Access-Control-Allow-Origin", "value": "http://localhost:4200" }, - { "name": "Allow", "value": "GET, POST, HEAD, OPTIONS" }, - { "name": "Content-Encoding", "value": "br" }, - { "name": "Content-Language", "value": "en-us" }, - { "name": "Content-Length", "value": "229" }, - { "name": "Content-Type", "value": "application/json" }, - { "name": "Cross-Origin-Opener-Policy", "value": "same-origin" }, - { "name": "Referrer-Policy", "value": "same-origin" }, - { "name": "Vary", "value": "Accept, Accept-Language, Origin, Cookie, Accept-Encoding" }, - { "name": "X-Api-Version", "value": "3" }, - { "name": "X-Content-Type-Options", "value": "nosniff" }, - { "name": "X-Frame-Options", "value": "ANY" }, - { "name": "X-Version", "value": "1.14.4" } - ], - "content": { - "size": -1, - "mimeType": "application/json", - "text": "{\"count\":3,\"next\":null,\"previous\":null,\"all\":[1,2,3],\"results\":[{\"id\":1,\"name\":\"domain\",\"imap_server\":\"imap.domain.com\",\"imap_port\":993,\"imap_security\":2,\"username\":\"test@user.com\",\"password\":\"************\",\"character_set\":\"UTF-8\",\"is_token\":false},{\"id\":2,\"name\":\"gmail\",\"imap_server\":\"imap.gmail.com\",\"imap_port\":993,\"imap_security\":2,\"username\":\"test@user.com\",\"password\":\"****************\",\"character_set\":\"UTF-8\",\"is_token\":false},{\"id\":3,\"name\":\"Test Account\",\"imap_server\":\"imap.server.com\",\"imap_port\":993,\"imap_security\":2,\"username\":\"username\",\"password\":\"********\",\"character_set\":\"UTF-8\",\"is_token\":false}]}" - }, - "headersSize": -1, - "bodySize": -1, - "redirectURL": "" - }, - "cache": {}, - "timings": { "send": -1, "wait": -1, "receive": 0.716 } - }, - { - "startedDateTime": "2023-05-14T07:23:33.152Z", - "time": 0.715, - "request": { - "method": "GET", - "url": "http://localhost:8000/api/mail_rules/?page=1&page_size=100000", - "httpVersion": "HTTP/1.1", - "cookies": [], - "headers": [ - { "name": "Accept", "value": "application/json; version=3" }, - { "name": "Accept-Encoding", "value": "gzip, deflate, br" }, - { "name": "Accept-Language", "value": "en-US" }, - { "name": "Connection", "value": "keep-alive" }, - { "name": "Host", "value": "localhost:8000" }, - { "name": "Origin", "value": "http://localhost:4200" }, - { "name": "Referer", "value": "http://localhost:4200/" }, - { "name": "Sec-Fetch-Dest", "value": "empty" }, - { "name": "Sec-Fetch-Mode", "value": "cors" }, - { "name": "Sec-Fetch-Site", "value": "same-site" }, - { "name": "User-Agent", "value": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/113.0.5672.53 Safari/537.36" } - ], - "queryString": [ - { - "name": "page", - "value": "1" - }, - { - "name": "page_size", - "value": "100000" - } - ], - "headersSize": -1, - "bodySize": -1 - }, - "response": { - "status": 200, - "statusText": "OK", - "httpVersion": "HTTP/1.1", - "cookies": [], - "headers": [ - { "name": "Access-Control-Allow-Origin", "value": "http://localhost:4200" }, - { "name": "Allow", "value": "GET, POST, HEAD, OPTIONS" }, - { "name": "Content-Encoding", "value": "br" }, - { "name": "Content-Language", "value": "en-us" }, - { "name": "Content-Length", "value": "319" }, - { "name": "Content-Type", "value": "application/json" }, - { "name": "Cross-Origin-Opener-Policy", "value": "same-origin" }, - { "name": "Referrer-Policy", "value": "same-origin" }, - { "name": "Vary", "value": "Accept, Accept-Language, Origin, Cookie, Accept-Encoding" }, - { "name": "X-Api-Version", "value": "3" }, - { "name": "X-Content-Type-Options", "value": "nosniff" }, - { "name": "X-Frame-Options", "value": "ANY" }, - { "name": "X-Version", "value": "1.14.4" } - ], - "content": { - "size": -1, - "mimeType": "application/json", - "text": "{\"count\":2,\"next\":null,\"previous\":null,\"all\":[7,1],\"results\":[{\"id\":7,\"name\":\"Test rule w tags\",\"account\":1,\"folder\":\"INBOX\",\"filter_from\":null,\"filter_to\":null,\"filter_subject\":\"\",\"filter_body\":null,\"filter_attachment_filename\":\"*.pdf\",\"maximum_age\":1,\"action\":5,\"action_parameter\":\"Imported\",\"assign_title_from\":1,\"assign_tags\":[7],\"assign_correspondent_from\":1,\"assign_correspondent\":null,\"assign_document_type\":null,\"order\":0,\"attachment_type\":2,\"consumption_scope\":1},{\"id\":1,\"name\":\"Gmail Rule\",\"account\":2,\"folder\":\"INBOX\",\"filter_from\":null,\"filter_to\":null,\"filter_subject\":\"[paperless]\",\"filter_body\":null,\"filter_attachment_filename\":null,\"maximum_age\":30,\"action\":1,\"action_parameter\":null,\"assign_title_from\":1,\"assign_tags\":[9,2],\"assign_correspondent_from\":1,\"assign_correspondent\":2,\"assign_document_type\":null,\"order\":1,\"attachment_type\":2,\"consumption_scope\":1}]}" - }, - "headersSize": -1, - "bodySize": -1, - "redirectURL": "" - }, - "cache": {}, - "timings": { "send": -1, "wait": -1, "receive": 0.715 } - } - ] - } -} diff --git a/src-ui/e2e/settings/requests/api-settings3.har b/src-ui/e2e/settings/requests/api-settings3.har deleted file mode 100644 index f8dfc3b84..000000000 --- a/src-ui/e2e/settings/requests/api-settings3.har +++ /dev/null @@ -1,589 +0,0 @@ -{ - "log": { - "version": "1.2", - "creator": { - "name": "Playwright", - "version": "1.33.0" - }, - "browser": { - "name": "chromium", - "version": "113.0.5672.53" - }, - "entries": [ - { - "startedDateTime": "2023-05-14T07:26:30.699Z", - "time": 5.818, - "request": { - "method": "GET", - "url": "http://localhost:8000/api/ui_settings/", - "httpVersion": "HTTP/1.1", - "cookies": [], - "headers": [ - { "name": "Accept", "value": "application/json; version=3" }, - { "name": "Accept-Encoding", "value": "gzip, deflate, br" }, - { "name": "Accept-Language", "value": "en-US" }, - { "name": "Connection", "value": "keep-alive" }, - { "name": "Host", "value": "localhost:8000" }, - { "name": "Origin", "value": "http://localhost:4200" }, - { "name": "Referer", "value": "http://localhost:4200/" }, - { "name": "Sec-Fetch-Dest", "value": "empty" }, - { "name": "Sec-Fetch-Mode", "value": "cors" }, - { "name": "Sec-Fetch-Site", "value": "same-site" }, - { "name": "User-Agent", "value": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/113.0.5672.53 Safari/537.36" } - ], - "queryString": [], - "headersSize": -1, - "bodySize": -1 - }, - "response": { - "status": 200, - "statusText": "OK", - "httpVersion": "HTTP/1.1", - "cookies": [], - "headers": [ - { "name": "Access-Control-Allow-Origin", "value": "http://localhost:4200" }, - { "name": "Allow", "value": "GET, POST, HEAD, OPTIONS" }, - { "name": "Content-Encoding", "value": "br" }, - { "name": "Content-Language", "value": "en-us" }, - { "name": "Content-Length", "value": "952" }, - { "name": "Content-Type", "value": "application/json" }, - { "name": "Cross-Origin-Opener-Policy", "value": "same-origin" }, - { "name": "Referrer-Policy", "value": "same-origin" }, - { "name": "Vary", "value": "Accept, Accept-Language, Origin, Cookie, Accept-Encoding" }, - { "name": "X-Api-Version", "value": "3" }, - { "name": "X-Content-Type-Options", "value": "nosniff" }, - { "name": "X-Frame-Options", "value": "ANY" }, - { "name": "X-Version", "value": "1.14.4" } - ], - "content": { - "size": -1, - "mimeType": "application/json", - "text": "{\"user\":{\"id\":2,\"username\":\"testuser\",\"is_superuser\":false,\"groups\":[]},\"settings\":{\"language\":\"\",\"bulk_edit\":{\"confirmation_dialogs\":true,\"apply_on_close\":false},\"documentListSize\":50,\"dark_mode\":{\"use_system\":false,\"enabled\":\"false\",\"thumb_inverted\":\"true\"},\"theme\":{\"color\":\"#9fbf2f\"},\"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},\"comments_enabled\":true,\"slim_sidebar\":false,\"update_checking\":{\"enabled\":false,\"backend_setting\":\"default\"},\"saved_views\":{\"warn_on_unsaved_change\":true},\"notes_enabled\":true,\"tour_complete\":true},\"permissions\":[\"view_ormq\",\"delete_uisettings\",\"change_comment\",\"view_schedule\",\"view_logentry\",\"add_processedmail\",\"add_groupobjectpermission\",\"view_tag\",\"add_token\",\"change_contenttype\",\"add_group\",\"delete_tag\",\"change_uisettings\",\"delete_permission\",\"delete_userobjectpermission\",\"view_correspondent\",\"change_permission\",\"change_documenttype\",\"delete_tokenproxy\",\"change_group\",\"add_savedviewfilterrule\",\"delete_task\",\"view_processedmail\",\"view_mailaccount\",\"change_log\",\"add_contenttype\",\"delete_log\",\"view_session\",\"change_mailaccount\",\"delete_failure\",\"view_success\",\"change_document\",\"change_logentry\",\"view_documenttype\",\"view_document\",\"view_token\",\"add_log\",\"delete_groupresult\",\"add_tag\",\"add_paperlesstask\",\"change_processedmail\",\"change_groupobjectpermission\",\"view_mailrule\",\"add_user\",\"change_taskattributes\",\"delete_schedule\",\"delete_mailrule\",\"add_chordcounter\",\"change_savedviewfilterrule\",\"delete_frontendsettings\",\"add_schedule\",\"change_taskresult\",\"add_tokenproxy\",\"delete_note\",\"add_task\",\"delete_comment\",\"view_note\",\"delete_group\",\"change_frontendsettings\",\"delete_groupobjectpermission\",\"change_ormq\",\"delete_chordcounter\",\"change_storagepath\",\"delete_storagepath\",\"delete_logentry\",\"delete_document\",\"view_uisettings\",\"view_taskattributes\",\"view_failure\",\"add_failure\",\"view_group\",\"add_correspondent\",\"add_storagepath\",\"delete_contenttype\",\"add_taskresult\",\"change_savedview\",\"view_comment\",\"add_savedview\",\"view_savedview\",\"change_token\",\"view_permission\",\"add_note\",\"view_groupobjectpermission\",\"view_savedviewfilterrule\",\"view_log\",\"delete_savedview\",\"add_groupresult\",\"add_ormq\",\"change_tokenproxy\",\"change_correspondent\",\"add_taskattributes\",\"add_userobjectpermission\",\"view_frontendsettings\",\"view_storagepath\",\"change_note\",\"change_failure\",\"delete_success\",\"change_success\",\"add_success\",\"add_frontendsettings\",\"change_tag\",\"delete_processedmail\",\"delete_paperlesstask\",\"view_paperlesstask\",\"add_mailrule\",\"add_uisettings\",\"change_task\",\"add_documenttype\",\"change_mailrule\",\"delete_taskattributes\",\"view_chordcounter\",\"delete_taskresult\",\"add_comment\",\"add_mailaccount\",\"add_permission\",\"change_userobjectpermission\",\"view_tokenproxy\",\"delete_user\",\"view_userobjectpermission\",\"view_user\",\"delete_correspondent\",\"delete_session\",\"delete_savedviewfilterrule\",\"change_chordcounter\",\"delete_mailaccount\",\"change_groupresult\",\"view_contenttype\",\"view_groupresult\",\"delete_documenttype\",\"change_session\",\"change_user\",\"change_schedule\",\"add_session\",\"view_taskresult\",\"add_logentry\",\"delete_token\",\"delete_ormq\",\"add_document\",\"change_paperlesstask\",\"view_task\"]}" - }, - "headersSize": -1, - "bodySize": -1, - "redirectURL": "" - }, - "cache": {}, - "timings": { "send": -1, "wait": -1, "receive": 5.818 } - }, - { - "startedDateTime": "2023-05-14T07:26:30.822Z", - "time": 1.068, - "request": { - "method": "GET", - "url": "http://localhost:8000/api/saved_views/?page=1&page_size=100000", - "httpVersion": "HTTP/1.1", - "cookies": [], - "headers": [ - { "name": "Accept", "value": "application/json; version=3" }, - { "name": "Accept-Encoding", "value": "gzip, deflate, br" }, - { "name": "Accept-Language", "value": "en-US" }, - { "name": "Connection", "value": "keep-alive" }, - { "name": "Host", "value": "localhost:8000" }, - { "name": "Origin", "value": "http://localhost:4200" }, - { "name": "Referer", "value": "http://localhost:4200/" }, - { "name": "Sec-Fetch-Dest", "value": "empty" }, - { "name": "Sec-Fetch-Mode", "value": "cors" }, - { "name": "Sec-Fetch-Site", "value": "same-site" }, - { "name": "User-Agent", "value": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/113.0.5672.53 Safari/537.36" } - ], - "queryString": [ - { - "name": "page", - "value": "1" - }, - { - "name": "page_size", - "value": "100000" - } - ], - "headersSize": -1, - "bodySize": -1 - }, - "response": { - "status": 200, - "statusText": "OK", - "httpVersion": "HTTP/1.1", - "cookies": [], - "headers": [ - { "name": "Access-Control-Allow-Origin", "value": "http://localhost:4200" }, - { "name": "Allow", "value": "GET, POST, HEAD, OPTIONS" }, - { "name": "Content-Encoding", "value": "br" }, - { "name": "Content-Language", "value": "en-us" }, - { "name": "Content-Length", "value": "851" }, - { "name": "Content-Type", "value": "application/json" }, - { "name": "Cross-Origin-Opener-Policy", "value": "same-origin" }, - { "name": "Referrer-Policy", "value": "same-origin" }, - { "name": "Vary", "value": "Accept, Accept-Language, Origin, Cookie, Accept-Encoding" }, - { "name": "X-Api-Version", "value": "3" }, - { "name": "X-Content-Type-Options", "value": "nosniff" }, - { "name": "X-Frame-Options", "value": "ANY" }, - { "name": "X-Version", "value": "1.14.4" } - ], - "content": { - "size": -1, - "mimeType": "application/json", - "text": "{\"count\":6,\"next\":null,\"previous\":null,\"all\":[8,17,7,4,11,15],\"results\":[{\"id\":8,\"name\":\"Correspondent 2\",\"show_on_dashboard\":false,\"show_in_sidebar\":false,\"sort_field\":\"created\",\"sort_reverse\":true,\"filter_rules\":[{\"rule_type\":3,\"value\":\"2\"}],\"owner\":{\"id\":2,\"password\":\"pbkdf2_sha256$390000$ElHGEQzOIS3Gv2wu8YDbSt$bWASwmUfHtFMZ6+rG+4rrrtejjC9RiwXm6xMi0bxMZo=\",\"last_login\":\"2023-04-26T09:08:14Z\",\"is_superuser\":false,\"username\":\"testuser\",\"first_name\":\"\",\"last_name\":\"\",\"email\":\"test@user.com\",\"is_staff\":true,\"is_active\":true,\"date_joined\":\"2021-01-03T07:37:04Z\",\"groups\":[],\"user_permissions\":[57,58,59,60,5,6,7,8,1,2,3,4,9,10,11,12,61,62,63,64,65,66,67,68,13,14,15,16,117,118,119,120,121,122,123,124,113,114,115,116,77,78,79,80,85,86,87,88,69,70,71,72,81,82,83,84,73,74,75,76,33,34,35,36,21,22,23,24,37,38,39,40,89,90,91,92,29,30,31,32,109,137,110,138,111,139,112,140,105,106,107,108,41,42,43,44,45,46,47,48,93,94,95,96,25,26,27,28,101,102,103,104,97,98,99,100,125,126,127,128,129,130,131,132,49,50,51,52,53,54,55,56,133,134,135,136,17,18,19,20]},\"user_can_change\":true},{\"id\":17,\"name\":\"In the Last Month\",\"show_on_dashboard\":false,\"show_in_sidebar\":false,\"sort_field\":\"created\",\"sort_reverse\":true,\"filter_rules\":[{\"rule_type\":20,\"value\":\"created:[-1 month to now]\"}],\"owner\":{\"id\":2,\"password\":\"pbkdf2_sha256$390000$ElHGEQzOIS3Gv2wu8YDbSt$bWASwmUfHtFMZ6+rG+4rrrtejjC9RiwXm6xMi0bxMZo=\",\"last_login\":\"2023-04-26T09:08:14Z\",\"is_superuser\":false,\"username\":\"testuser\",\"first_name\":\"\",\"last_name\":\"\",\"email\":\"test@user.com\",\"is_staff\":true,\"is_active\":true,\"date_joined\":\"2021-01-03T07:37:04Z\",\"groups\":[],\"user_permissions\":[57,58,59,60,5,6,7,8,1,2,3,4,9,10,11,12,61,62,63,64,65,66,67,68,13,14,15,16,117,118,119,120,121,122,123,124,113,114,115,116,77,78,79,80,85,86,87,88,69,70,71,72,81,82,83,84,73,74,75,76,33,34,35,36,21,22,23,24,37,38,39,40,89,90,91,92,29,30,31,32,109,137,110,138,111,139,112,140,105,106,107,108,41,42,43,44,45,46,47,48,93,94,95,96,25,26,27,28,101,102,103,104,97,98,99,100,125,126,127,128,129,130,131,132,49,50,51,52,53,54,55,56,133,134,135,136,17,18,19,20]},\"user_can_change\":true},{\"id\":7,\"name\":\"Inbox\",\"show_on_dashboard\":true,\"show_in_sidebar\":true,\"sort_field\":\"created\",\"sort_reverse\":true,\"filter_rules\":[{\"rule_type\":6,\"value\":\"9\"}],\"owner\":{\"id\":2,\"password\":\"pbkdf2_sha256$390000$ElHGEQzOIS3Gv2wu8YDbSt$bWASwmUfHtFMZ6+rG+4rrrtejjC9RiwXm6xMi0bxMZo=\",\"last_login\":\"2023-04-26T09:08:14Z\",\"is_superuser\":false,\"username\":\"testuser\",\"first_name\":\"\",\"last_name\":\"\",\"email\":\"test@user.com\",\"is_staff\":true,\"is_active\":true,\"date_joined\":\"2021-01-03T07:37:04Z\",\"groups\":[],\"user_permissions\":[57,58,59,60,5,6,7,8,1,2,3,4,9,10,11,12,61,62,63,64,65,66,67,68,13,14,15,16,117,118,119,120,121,122,123,124,113,114,115,116,77,78,79,80,85,86,87,88,69,70,71,72,81,82,83,84,73,74,75,76,33,34,35,36,21,22,23,24,37,38,39,40,89,90,91,92,29,30,31,32,109,137,110,138,111,139,112,140,105,106,107,108,41,42,43,44,45,46,47,48,93,94,95,96,25,26,27,28,101,102,103,104,97,98,99,100,125,126,127,128,129,130,131,132,49,50,51,52,53,54,55,56,133,134,135,136,17,18,19,20]},\"user_can_change\":true},{\"id\":4,\"name\":\"Recently Added\",\"show_on_dashboard\":true,\"show_in_sidebar\":true,\"sort_field\":\"created\",\"sort_reverse\":true,\"filter_rules\":[],\"owner\":{\"id\":2,\"password\":\"pbkdf2_sha256$390000$ElHGEQzOIS3Gv2wu8YDbSt$bWASwmUfHtFMZ6+rG+4rrrtejjC9RiwXm6xMi0bxMZo=\",\"last_login\":\"2023-04-26T09:08:14Z\",\"is_superuser\":false,\"username\":\"testuser\",\"first_name\":\"\",\"last_name\":\"\",\"email\":\"test@user.com\",\"is_staff\":true,\"is_active\":true,\"date_joined\":\"2021-01-03T07:37:04Z\",\"groups\":[],\"user_permissions\":[57,58,59,60,5,6,7,8,1,2,3,4,9,10,11,12,61,62,63,64,65,66,67,68,13,14,15,16,117,118,119,120,121,122,123,124,113,114,115,116,77,78,79,80,85,86,87,88,69,70,71,72,81,82,83,84,73,74,75,76,33,34,35,36,21,22,23,24,37,38,39,40,89,90,91,92,29,30,31,32,109,137,110,138,111,139,112,140,105,106,107,108,41,42,43,44,45,46,47,48,93,94,95,96,25,26,27,28,101,102,103,104,97,98,99,100,125,126,127,128,129,130,131,132,49,50,51,52,53,54,55,56,133,134,135,136,17,18,19,20]},\"user_can_change\":true},{\"id\":11,\"name\":\"Tag: Another Sample Tag\",\"show_on_dashboard\":false,\"show_in_sidebar\":true,\"sort_field\":\"created\",\"sort_reverse\":true,\"filter_rules\":[{\"rule_type\":6,\"value\":\"4\"}],\"owner\":{\"id\":2,\"password\":\"pbkdf2_sha256$390000$ElHGEQzOIS3Gv2wu8YDbSt$bWASwmUfHtFMZ6+rG+4rrrtejjC9RiwXm6xMi0bxMZo=\",\"last_login\":\"2023-04-26T09:08:14Z\",\"is_superuser\":false,\"username\":\"testuser\",\"first_name\":\"\",\"last_name\":\"\",\"email\":\"test@user.com\",\"is_staff\":true,\"is_active\":true,\"date_joined\":\"2021-01-03T07:37:04Z\",\"groups\":[],\"user_permissions\":[57,58,59,60,5,6,7,8,1,2,3,4,9,10,11,12,61,62,63,64,65,66,67,68,13,14,15,16,117,118,119,120,121,122,123,124,113,114,115,116,77,78,79,80,85,86,87,88,69,70,71,72,81,82,83,84,73,74,75,76,33,34,35,36,21,22,23,24,37,38,39,40,89,90,91,92,29,30,31,32,109,137,110,138,111,139,112,140,105,106,107,108,41,42,43,44,45,46,47,48,93,94,95,96,25,26,27,28,101,102,103,104,97,98,99,100,125,126,127,128,129,130,131,132,49,50,51,52,53,54,55,56,133,134,135,136,17,18,19,20]},\"user_can_change\":true},{\"id\":15,\"name\":\"View ASN not empty\",\"show_on_dashboard\":false,\"show_in_sidebar\":false,\"sort_field\":\"created\",\"sort_reverse\":true,\"filter_rules\":[{\"rule_type\":18,\"value\":\"false\"}],\"owner\":{\"id\":2,\"password\":\"pbkdf2_sha256$390000$ElHGEQzOIS3Gv2wu8YDbSt$bWASwmUfHtFMZ6+rG+4rrrtejjC9RiwXm6xMi0bxMZo=\",\"last_login\":\"2023-04-26T09:08:14Z\",\"is_superuser\":false,\"username\":\"testuser\",\"first_name\":\"\",\"last_name\":\"\",\"email\":\"test@user.com\",\"is_staff\":true,\"is_active\":true,\"date_joined\":\"2021-01-03T07:37:04Z\",\"groups\":[],\"user_permissions\":[57,58,59,60,5,6,7,8,1,2,3,4,9,10,11,12,61,62,63,64,65,66,67,68,13,14,15,16,117,118,119,120,121,122,123,124,113,114,115,116,77,78,79,80,85,86,87,88,69,70,71,72,81,82,83,84,73,74,75,76,33,34,35,36,21,22,23,24,37,38,39,40,89,90,91,92,29,30,31,32,109,137,110,138,111,139,112,140,105,106,107,108,41,42,43,44,45,46,47,48,93,94,95,96,25,26,27,28,101,102,103,104,97,98,99,100,125,126,127,128,129,130,131,132,49,50,51,52,53,54,55,56,133,134,135,136,17,18,19,20]},\"user_can_change\":true}]}" - }, - "headersSize": -1, - "bodySize": -1, - "redirectURL": "" - }, - "cache": {}, - "timings": { "send": -1, "wait": -1, "receive": 1.068 } - }, - { - "startedDateTime": "2023-05-14T07:26:30.823Z", - "time": 0.597, - "request": { - "method": "GET", - "url": "http://localhost:8000/api/tasks/", - "httpVersion": "HTTP/1.1", - "cookies": [], - "headers": [ - { "name": "Accept", "value": "application/json; version=3" }, - { "name": "Accept-Encoding", "value": "gzip, deflate, br" }, - { "name": "Accept-Language", "value": "en-US" }, - { "name": "Connection", "value": "keep-alive" }, - { "name": "Host", "value": "localhost:8000" }, - { "name": "Origin", "value": "http://localhost:4200" }, - { "name": "Referer", "value": "http://localhost:4200/" }, - { "name": "Sec-Fetch-Dest", "value": "empty" }, - { "name": "Sec-Fetch-Mode", "value": "cors" }, - { "name": "Sec-Fetch-Site", "value": "same-site" }, - { "name": "User-Agent", "value": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/113.0.5672.53 Safari/537.36" } - ], - "queryString": [], - "headersSize": -1, - "bodySize": -1 - }, - "response": { - "status": 200, - "statusText": "OK", - "httpVersion": "HTTP/1.1", - "cookies": [], - "headers": [ - { "name": "Access-Control-Allow-Origin", "value": "http://localhost:4200" }, - { "name": "Allow", "value": "GET, HEAD, OPTIONS" }, - { "name": "Content-Language", "value": "en-us" }, - { "name": "Content-Length", "value": "2" }, - { "name": "Content-Type", "value": "application/json" }, - { "name": "Cross-Origin-Opener-Policy", "value": "same-origin" }, - { "name": "Referrer-Policy", "value": "same-origin" }, - { "name": "Vary", "value": "Accept, Accept-Language, Origin, Cookie" }, - { "name": "X-Api-Version", "value": "3" }, - { "name": "X-Content-Type-Options", "value": "nosniff" }, - { "name": "X-Frame-Options", "value": "ANY" }, - { "name": "X-Version", "value": "1.14.4" } - ], - "content": { - "size": -1, - "mimeType": "application/json", - "text": "[]" - }, - "headersSize": -1, - "bodySize": -1, - "redirectURL": "" - }, - "cache": {}, - "timings": { "send": -1, "wait": -1, "receive": 0.597 } - }, - { - "startedDateTime": "2023-05-14T07:26:30.823Z", - "time": 0.535, - "request": { - "method": "GET", - "url": "http://localhost:8000/api/mail_accounts/?page=1&page_size=100000", - "httpVersion": "HTTP/1.1", - "cookies": [], - "headers": [ - { "name": "Accept", "value": "application/json; version=3" }, - { "name": "Accept-Encoding", "value": "gzip, deflate, br" }, - { "name": "Accept-Language", "value": "en-US" }, - { "name": "Connection", "value": "keep-alive" }, - { "name": "Host", "value": "localhost:8000" }, - { "name": "Origin", "value": "http://localhost:4200" }, - { "name": "Referer", "value": "http://localhost:4200/" }, - { "name": "Sec-Fetch-Dest", "value": "empty" }, - { "name": "Sec-Fetch-Mode", "value": "cors" }, - { "name": "Sec-Fetch-Site", "value": "same-site" }, - { "name": "User-Agent", "value": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/113.0.5672.53 Safari/537.36" } - ], - "queryString": [ - { - "name": "page", - "value": "1" - }, - { - "name": "page_size", - "value": "100000" - } - ], - "headersSize": -1, - "bodySize": -1 - }, - "response": { - "status": 200, - "statusText": "OK", - "httpVersion": "HTTP/1.1", - "cookies": [], - "headers": [ - { "name": "Access-Control-Allow-Origin", "value": "http://localhost:4200" }, - { "name": "Allow", "value": "GET, POST, HEAD, OPTIONS" }, - { "name": "Content-Encoding", "value": "br" }, - { "name": "Content-Language", "value": "en-us" }, - { "name": "Content-Length", "value": "229" }, - { "name": "Content-Type", "value": "application/json" }, - { "name": "Cross-Origin-Opener-Policy", "value": "same-origin" }, - { "name": "Referrer-Policy", "value": "same-origin" }, - { "name": "Vary", "value": "Accept, Accept-Language, Origin, Cookie, Accept-Encoding" }, - { "name": "X-Api-Version", "value": "3" }, - { "name": "X-Content-Type-Options", "value": "nosniff" }, - { "name": "X-Frame-Options", "value": "ANY" }, - { "name": "X-Version", "value": "1.14.4" } - ], - "content": { - "size": -1, - "mimeType": "application/json", - "text": "{\"count\":3,\"next\":null,\"previous\":null,\"all\":[1,2,3],\"results\":[{\"id\":1,\"name\":\"domain\",\"imap_server\":\"imap.domain.com\",\"imap_port\":993,\"imap_security\":2,\"username\":\"test@user.com\",\"password\":\"************\",\"character_set\":\"UTF-8\",\"is_token\":false},{\"id\":2,\"name\":\"gmail\",\"imap_server\":\"imap.gmail.com\",\"imap_port\":993,\"imap_security\":2,\"username\":\"test@user.com\",\"password\":\"****************\",\"character_set\":\"UTF-8\",\"is_token\":false},{\"id\":3,\"name\":\"Test Account\",\"imap_server\":\"imap.server.com\",\"imap_port\":993,\"imap_security\":2,\"username\":\"username\",\"password\":\"********\",\"character_set\":\"UTF-8\",\"is_token\":false}]}" - }, - "headersSize": -1, - "bodySize": -1, - "redirectURL": "" - }, - "cache": {}, - "timings": { "send": -1, "wait": -1, "receive": 0.535 } - }, - { - "startedDateTime": "2023-05-14T07:26:30.882Z", - "time": 0.54, - "request": { - "method": "GET", - "url": "http://localhost:8000/api/mail_rules/?page=1&page_size=100000", - "httpVersion": "HTTP/1.1", - "cookies": [], - "headers": [ - { "name": "Accept", "value": "application/json; version=3" }, - { "name": "Accept-Encoding", "value": "gzip, deflate, br" }, - { "name": "Accept-Language", "value": "en-US" }, - { "name": "Connection", "value": "keep-alive" }, - { "name": "Host", "value": "localhost:8000" }, - { "name": "Origin", "value": "http://localhost:4200" }, - { "name": "Referer", "value": "http://localhost:4200/" }, - { "name": "Sec-Fetch-Dest", "value": "empty" }, - { "name": "Sec-Fetch-Mode", "value": "cors" }, - { "name": "Sec-Fetch-Site", "value": "same-site" }, - { "name": "User-Agent", "value": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/113.0.5672.53 Safari/537.36" } - ], - "queryString": [ - { - "name": "page", - "value": "1" - }, - { - "name": "page_size", - "value": "100000" - } - ], - "headersSize": -1, - "bodySize": -1 - }, - "response": { - "status": 200, - "statusText": "OK", - "httpVersion": "HTTP/1.1", - "cookies": [], - "headers": [ - { "name": "Access-Control-Allow-Origin", "value": "http://localhost:4200" }, - { "name": "Allow", "value": "GET, POST, HEAD, OPTIONS" }, - { "name": "Content-Encoding", "value": "br" }, - { "name": "Content-Language", "value": "en-us" }, - { "name": "Content-Length", "value": "319" }, - { "name": "Content-Type", "value": "application/json" }, - { "name": "Cross-Origin-Opener-Policy", "value": "same-origin" }, - { "name": "Referrer-Policy", "value": "same-origin" }, - { "name": "Vary", "value": "Accept, Accept-Language, Origin, Cookie, Accept-Encoding" }, - { "name": "X-Api-Version", "value": "3" }, - { "name": "X-Content-Type-Options", "value": "nosniff" }, - { "name": "X-Frame-Options", "value": "ANY" }, - { "name": "X-Version", "value": "1.14.4" } - ], - "content": { - "size": -1, - "mimeType": "application/json", - "text": "{\"count\":2,\"next\":null,\"previous\":null,\"all\":[7,1],\"results\":[{\"id\":7,\"name\":\"Test rule w tags\",\"account\":1,\"folder\":\"INBOX\",\"filter_from\":null,\"filter_to\":null,\"filter_subject\":\"\",\"filter_body\":null,\"filter_attachment_filename\":\"*.pdf\",\"maximum_age\":1,\"action\":5,\"action_parameter\":\"Imported\",\"assign_title_from\":1,\"assign_tags\":[7],\"assign_correspondent_from\":1,\"assign_correspondent\":null,\"assign_document_type\":null,\"order\":0,\"attachment_type\":2,\"consumption_scope\":1},{\"id\":1,\"name\":\"Gmail Rule\",\"account\":2,\"folder\":\"INBOX\",\"filter_from\":null,\"filter_to\":null,\"filter_subject\":\"[paperless]\",\"filter_body\":null,\"filter_attachment_filename\":null,\"maximum_age\":30,\"action\":1,\"action_parameter\":null,\"assign_title_from\":1,\"assign_tags\":[9,2],\"assign_correspondent_from\":1,\"assign_correspondent\":2,\"assign_document_type\":null,\"order\":1,\"attachment_type\":2,\"consumption_scope\":1}]}" - }, - "headersSize": -1, - "bodySize": -1, - "redirectURL": "" - }, - "cache": {}, - "timings": { "send": -1, "wait": -1, "receive": 0.54 } - }, - { - "startedDateTime": "2023-05-14T07:26:30.981Z", - "time": 0.785, - "request": { - "method": "GET", - "url": "http://localhost:8000/api/correspondents/?page=1&page_size=100000", - "httpVersion": "HTTP/1.1", - "cookies": [], - "headers": [ - { "name": "Accept", "value": "application/json; version=3" }, - { "name": "Accept-Encoding", "value": "gzip, deflate, br" }, - { "name": "Accept-Language", "value": "en-US" }, - { "name": "Connection", "value": "keep-alive" }, - { "name": "Host", "value": "localhost:8000" }, - { "name": "Origin", "value": "http://localhost:4200" }, - { "name": "Referer", "value": "http://localhost:4200/" }, - { "name": "Sec-Fetch-Dest", "value": "empty" }, - { "name": "Sec-Fetch-Mode", "value": "cors" }, - { "name": "Sec-Fetch-Site", "value": "same-site" }, - { "name": "User-Agent", "value": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/113.0.5672.53 Safari/537.36" } - ], - "queryString": [ - { - "name": "page", - "value": "1" - }, - { - "name": "page_size", - "value": "100000" - } - ], - "headersSize": -1, - "bodySize": -1 - }, - "response": { - "status": 200, - "statusText": "OK", - "httpVersion": "HTTP/1.1", - "cookies": [], - "headers": [ - { "name": "Access-Control-Allow-Origin", "value": "http://localhost:4200" }, - { "name": "Allow", "value": "GET, POST, HEAD, OPTIONS" }, - { "name": "Content-Encoding", "value": "br" }, - { "name": "Content-Language", "value": "en-us" }, - { "name": "Content-Length", "value": "277" }, - { "name": "Content-Type", "value": "application/json" }, - { "name": "Cross-Origin-Opener-Policy", "value": "same-origin" }, - { "name": "Referrer-Policy", "value": "same-origin" }, - { "name": "Vary", "value": "Accept, Accept-Language, Origin, Cookie, Accept-Encoding" }, - { "name": "X-Api-Version", "value": "3" }, - { "name": "X-Content-Type-Options", "value": "nosniff" }, - { "name": "X-Frame-Options", "value": "ANY" }, - { "name": "X-Version", "value": "1.14.4" } - ], - "content": { - "size": -1, - "mimeType": "application/json", - "text": "{\"count\":4,\"next\":null,\"previous\":null,\"all\":[17,12,4,1],\"results\":[{\"id\":17,\"slug\":\"correspondent-14\",\"name\":\"Correspondent 14\",\"match\":\"\",\"matching_algorithm\":1,\"is_insensitive\":true,\"document_count\":2,\"last_correspondence\":\"2022-03-13T00:00:00Z\",\"owner\":15,\"user_can_change\":false},{\"id\":12,\"slug\":\"correspondent-9\",\"name\":\"Correspondent 9\",\"match\":\"\",\"matching_algorithm\":6,\"is_insensitive\":true,\"document_count\":4,\"last_correspondence\":\"2022-10-03T00:00:00Z\",\"owner\":2,\"user_can_change\":true},{\"id\":4,\"slug\":\"newest-correspondent\",\"name\":\"Newest Correspondent\",\"match\":\"\",\"matching_algorithm\":1,\"is_insensitive\":true,\"document_count\":1,\"last_correspondence\":\"2021-02-07T08:00:00Z\",\"owner\":2,\"user_can_change\":true},{\"id\":1,\"slug\":\"test-correspondent-1\",\"name\":\"Test Correspondent 1\",\"match\":\"\",\"matching_algorithm\":1,\"is_insensitive\":true,\"document_count\":3,\"last_correspondence\":\"2022-10-02T00:00:00Z\",\"owner\":2,\"user_can_change\":true}]}" - }, - "headersSize": -1, - "bodySize": -1, - "redirectURL": "" - }, - "cache": {}, - "timings": { "send": -1, "wait": -1, "receive": 0.785 } - }, - { - "startedDateTime": "2023-05-14T07:26:30.981Z", - "time": 0.426, - "request": { - "method": "GET", - "url": "http://localhost:8000/api/document_types/?page=1&page_size=100000", - "httpVersion": "HTTP/1.1", - "cookies": [], - "headers": [ - { "name": "Accept", "value": "application/json; version=3" }, - { "name": "Accept-Encoding", "value": "gzip, deflate, br" }, - { "name": "Accept-Language", "value": "en-US" }, - { "name": "Connection", "value": "keep-alive" }, - { "name": "Host", "value": "localhost:8000" }, - { "name": "Origin", "value": "http://localhost:4200" }, - { "name": "Referer", "value": "http://localhost:4200/" }, - { "name": "Sec-Fetch-Dest", "value": "empty" }, - { "name": "Sec-Fetch-Mode", "value": "cors" }, - { "name": "Sec-Fetch-Site", "value": "same-site" }, - { "name": "User-Agent", "value": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/113.0.5672.53 Safari/537.36" } - ], - "queryString": [ - { - "name": "page", - "value": "1" - }, - { - "name": "page_size", - "value": "100000" - } - ], - "headersSize": -1, - "bodySize": -1 - }, - "response": { - "status": 200, - "statusText": "OK", - "httpVersion": "HTTP/1.1", - "cookies": [], - "headers": [ - { "name": "Access-Control-Allow-Origin", "value": "http://localhost:4200" }, - { "name": "Allow", "value": "GET, POST, HEAD, OPTIONS" }, - { "name": "Content-Language", "value": "en-us" }, - { "name": "Content-Length", "value": "388" }, - { "name": "Content-Type", "value": "application/json" }, - { "name": "Cross-Origin-Opener-Policy", "value": "same-origin" }, - { "name": "Referrer-Policy", "value": "same-origin" }, - { "name": "Vary", "value": "Accept, Accept-Language, Origin, Cookie" }, - { "name": "X-Api-Version", "value": "3" }, - { "name": "X-Content-Type-Options", "value": "nosniff" }, - { "name": "X-Frame-Options", "value": "ANY" }, - { "name": "X-Version", "value": "1.14.4" } - ], - "content": { - "size": -1, - "mimeType": "application/json", - "text": "{\"count\":2,\"next\":null,\"previous\":null,\"all\":[2,1],\"results\":[{\"id\":2,\"slug\":\"another-type\",\"name\":\"Another Type\",\"match\":\"\",\"matching_algorithm\":6,\"is_insensitive\":true,\"document_count\":1,\"owner\":2,\"user_can_change\":true},{\"id\":1,\"slug\":\"invoice-test\",\"name\":\"Invoice Test\",\"match\":\"\",\"matching_algorithm\":1,\"is_insensitive\":true,\"document_count\":9,\"owner\":null,\"user_can_change\":true}]}" - }, - "headersSize": -1, - "bodySize": -1, - "redirectURL": "" - }, - "cache": {}, - "timings": { "send": -1, "wait": -1, "receive": 0.426 } - }, - { - "startedDateTime": "2023-05-14T07:26:30.981Z", - "time": 0.64, - "request": { - "method": "GET", - "url": "http://localhost:8000/api/users/?page=1&page_size=100000", - "httpVersion": "HTTP/1.1", - "cookies": [], - "headers": [ - { "name": "Accept", "value": "application/json; version=3" }, - { "name": "Accept-Encoding", "value": "gzip, deflate, br" }, - { "name": "Accept-Language", "value": "en-US" }, - { "name": "Connection", "value": "keep-alive" }, - { "name": "Host", "value": "localhost:8000" }, - { "name": "Origin", "value": "http://localhost:4200" }, - { "name": "Referer", "value": "http://localhost:4200/" }, - { "name": "Sec-Fetch-Dest", "value": "empty" }, - { "name": "Sec-Fetch-Mode", "value": "cors" }, - { "name": "Sec-Fetch-Site", "value": "same-site" }, - { "name": "User-Agent", "value": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/113.0.5672.53 Safari/537.36" } - ], - "queryString": [ - { - "name": "page", - "value": "1" - }, - { - "name": "page_size", - "value": "100000" - } - ], - "headersSize": -1, - "bodySize": -1 - }, - "response": { - "status": 200, - "statusText": "OK", - "httpVersion": "HTTP/1.1", - "cookies": [], - "headers": [ - { "name": "Access-Control-Allow-Origin", "value": "http://localhost:4200" }, - { "name": "Allow", "value": "GET, POST, HEAD, OPTIONS" }, - { "name": "Content-Encoding", "value": "br" }, - { "name": "Content-Language", "value": "en-us" }, - { "name": "Content-Length", "value": "2281" }, - { "name": "Content-Type", "value": "application/json" }, - { "name": "Cross-Origin-Opener-Policy", "value": "same-origin" }, - { "name": "Referrer-Policy", "value": "same-origin" }, - { "name": "Vary", "value": "Accept, Accept-Language, Origin, Cookie, Accept-Encoding" }, - { "name": "X-Api-Version", "value": "3" }, - { "name": "X-Content-Type-Options", "value": "nosniff" }, - { "name": "X-Frame-Options", "value": "ANY" }, - { "name": "X-Version", "value": "1.14.4" } - ], - "content": { - "size": -1, - "mimeType": "application/json", - "text": "{\"count\":4,\"next\":null,\"previous\":null,\"all\":[3,2,15,17],\"results\":[{\"id\":3,\"username\":\"admin\",\"email\":\"test@user.com\",\"password\":\"**********\",\"first_name\":\"\",\"last_name\":\"\",\"date_joined\":\"2022-02-14T23:11:09.103293Z\",\"is_staff\":true,\"is_active\":true,\"is_superuser\":true,\"groups\":[],\"user_permissions\":[],\"inherited_permissions\":[\"django_q.view_ormq\",\"documents.delete_uisettings\",\"documents.change_comment\",\"django_q.view_schedule\",\"admin.view_logentry\",\"paperless_mail.add_processedmail\",\"guardian.add_groupobjectpermission\",\"documents.view_tag\",\"authtoken.add_token\",\"contenttypes.change_contenttype\",\"auth.add_group\",\"documents.delete_tag\",\"documents.change_uisettings\",\"auth.delete_permission\",\"guardian.delete_userobjectpermission\",\"documents.view_correspondent\",\"auth.change_permission\",\"documents.change_documenttype\",\"authtoken.delete_tokenproxy\",\"auth.change_group\",\"documents.add_savedviewfilterrule\",\"django_q.delete_task\",\"paperless_mail.view_processedmail\",\"paperless_mail.view_mailaccount\",\"documents.change_log\",\"contenttypes.add_contenttype\",\"documents.delete_log\",\"sessions.view_session\",\"paperless_mail.change_mailaccount\",\"django_q.delete_failure\",\"django_q.view_success\",\"documents.change_document\",\"admin.change_logentry\",\"documents.view_documenttype\",\"documents.view_document\",\"authtoken.view_token\",\"documents.add_log\",\"django_celery_results.delete_groupresult\",\"documents.add_tag\",\"documents.add_paperlesstask\",\"paperless_mail.change_processedmail\",\"guardian.change_groupobjectpermission\",\"paperless_mail.view_mailrule\",\"auth.add_user\",\"documents.change_taskattributes\",\"django_q.delete_schedule\",\"paperless_mail.delete_mailrule\",\"django_celery_results.add_chordcounter\",\"documents.change_savedviewfilterrule\",\"documents.delete_frontendsettings\",\"django_q.add_schedule\",\"django_celery_results.change_taskresult\",\"authtoken.add_tokenproxy\",\"documents.delete_note\",\"django_q.add_task\",\"documents.delete_comment\",\"documents.view_note\",\"auth.delete_group\",\"documents.change_frontendsettings\",\"guardian.delete_groupobjectpermission\",\"django_q.change_ormq\",\"django_celery_results.delete_chordcounter\",\"documents.change_storagepath\",\"documents.delete_storagepath\",\"admin.delete_logentry\",\"documents.delete_document\",\"documents.view_uisettings\",\"documents.view_taskattributes\",\"django_q.view_failure\",\"django_q.add_failure\",\"auth.view_group\",\"documents.add_correspondent\",\"documents.add_storagepath\",\"contenttypes.delete_contenttype\",\"django_celery_results.add_taskresult\",\"documents.change_savedview\",\"documents.view_comment\",\"documents.add_savedview\",\"documents.view_savedview\",\"authtoken.change_token\",\"auth.view_permission\",\"documents.add_note\",\"guardian.view_groupobjectpermission\",\"documents.view_savedviewfilterrule\",\"documents.view_log\",\"documents.delete_savedview\",\"django_celery_results.add_groupresult\",\"django_q.add_ormq\",\"authtoken.change_tokenproxy\",\"documents.change_correspondent\",\"documents.add_taskattributes\",\"guardian.add_userobjectpermission\",\"documents.view_frontendsettings\",\"documents.view_storagepath\",\"documents.change_note\",\"django_q.change_failure\",\"django_q.delete_success\",\"django_q.change_success\",\"django_q.add_success\",\"documents.add_frontendsettings\",\"documents.change_tag\",\"paperless_mail.delete_processedmail\",\"documents.delete_paperlesstask\",\"documents.view_paperlesstask\",\"paperless_mail.add_mailrule\",\"documents.add_uisettings\",\"django_q.change_task\",\"documents.add_documenttype\",\"paperless_mail.change_mailrule\",\"documents.delete_taskattributes\",\"django_celery_results.view_chordcounter\",\"django_celery_results.delete_taskresult\",\"documents.add_comment\",\"paperless_mail.add_mailaccount\",\"auth.add_permission\",\"guardian.change_userobjectpermission\",\"authtoken.view_tokenproxy\",\"auth.delete_user\",\"guardian.view_userobjectpermission\",\"auth.view_user\",\"documents.delete_correspondent\",\"sessions.delete_session\",\"documents.delete_savedviewfilterrule\",\"django_celery_results.change_chordcounter\",\"paperless_mail.delete_mailaccount\",\"django_celery_results.change_groupresult\",\"contenttypes.view_contenttype\",\"django_celery_results.view_groupresult\",\"documents.delete_documenttype\",\"sessions.change_session\",\"auth.change_user\",\"django_q.change_schedule\",\"sessions.add_session\",\"django_celery_results.view_taskresult\",\"admin.add_logentry\",\"authtoken.delete_token\",\"django_q.delete_ormq\",\"documents.add_document\",\"documents.change_paperlesstask\",\"django_q.view_task\"]},{\"id\":2,\"username\":\"testuser\",\"email\":\"test@user.com\",\"password\":\"**********\",\"first_name\":\"\",\"last_name\":\"\",\"date_joined\":\"2021-01-03T07:37:04Z\",\"is_staff\":true,\"is_active\":true,\"is_superuser\":false,\"groups\":[],\"user_permissions\":[\"add_logentry\",\"change_logentry\",\"delete_logentry\",\"view_logentry\",\"add_group\",\"change_group\",\"delete_group\",\"view_group\",\"add_permission\",\"change_permission\",\"delete_permission\",\"view_permission\",\"add_user\",\"change_user\",\"delete_user\",\"view_user\",\"add_token\",\"change_token\",\"delete_token\",\"view_token\",\"add_tokenproxy\",\"change_tokenproxy\",\"delete_tokenproxy\",\"view_tokenproxy\",\"add_contenttype\",\"change_contenttype\",\"delete_contenttype\",\"view_contenttype\",\"add_chordcounter\",\"change_chordcounter\",\"delete_chordcounter\",\"view_chordcounter\",\"add_groupresult\",\"change_groupresult\",\"delete_groupresult\",\"view_groupresult\",\"add_taskresult\",\"change_taskresult\",\"delete_taskresult\",\"view_taskresult\",\"add_failure\",\"change_failure\",\"delete_failure\",\"view_failure\",\"add_ormq\",\"change_ormq\",\"delete_ormq\",\"view_ormq\",\"add_schedule\",\"change_schedule\",\"delete_schedule\",\"view_schedule\",\"add_success\",\"change_success\",\"delete_success\",\"view_success\",\"add_task\",\"change_task\",\"delete_task\",\"view_task\",\"add_correspondent\",\"change_correspondent\",\"delete_correspondent\",\"view_correspondent\",\"add_document\",\"change_document\",\"delete_document\",\"view_document\",\"add_documenttype\",\"change_documenttype\",\"delete_documenttype\",\"view_documenttype\",\"add_frontendsettings\",\"change_frontendsettings\",\"delete_frontendsettings\",\"view_frontendsettings\",\"add_log\",\"change_log\",\"delete_log\",\"view_log\",\"add_comment\",\"add_note\",\"change_comment\",\"change_note\",\"delete_comment\",\"delete_note\",\"view_comment\",\"view_note\",\"add_paperlesstask\",\"change_paperlesstask\",\"delete_paperlesstask\",\"view_paperlesstask\",\"add_savedview\",\"change_savedview\",\"delete_savedview\",\"view_savedview\",\"add_savedviewfilterrule\",\"change_savedviewfilterrule\",\"delete_savedviewfilterrule\",\"view_savedviewfilterrule\",\"add_storagepath\",\"change_storagepath\",\"delete_storagepath\",\"view_storagepath\",\"add_tag\",\"change_tag\",\"delete_tag\",\"view_tag\",\"add_taskattributes\",\"change_taskattributes\",\"delete_taskattributes\",\"view_taskattributes\",\"add_uisettings\",\"change_uisettings\",\"delete_uisettings\",\"view_uisettings\",\"add_groupobjectpermission\",\"change_groupobjectpermission\",\"delete_groupobjectpermission\",\"view_groupobjectpermission\",\"add_userobjectpermission\",\"change_userobjectpermission\",\"delete_userobjectpermission\",\"view_userobjectpermission\",\"add_mailaccount\",\"change_mailaccount\",\"delete_mailaccount\",\"view_mailaccount\",\"add_mailrule\",\"change_mailrule\",\"delete_mailrule\",\"view_mailrule\",\"add_processedmail\",\"change_processedmail\",\"delete_processedmail\",\"view_processedmail\",\"add_session\",\"change_session\",\"delete_session\",\"view_session\"],\"inherited_permissions\":[]},{\"id\":15,\"username\":\"test\",\"email\":\"\",\"password\":\"**********\",\"first_name\":\"Test\",\"last_name\":\"User\",\"date_joined\":\"2022-11-23T08:30:54Z\",\"is_staff\":true,\"is_active\":true,\"is_superuser\":false,\"groups\":[1,6],\"user_permissions\":[\"add_permission\",\"change_permission\",\"delete_permission\",\"view_permission\",\"add_token\",\"change_token\",\"delete_token\",\"view_token\",\"add_tokenproxy\",\"change_tokenproxy\",\"delete_tokenproxy\",\"view_tokenproxy\",\"add_contenttype\",\"change_contenttype\",\"delete_contenttype\",\"view_contenttype\",\"add_chordcounter\",\"change_chordcounter\",\"delete_chordcounter\",\"view_chordcounter\",\"add_groupresult\",\"change_groupresult\",\"delete_groupresult\",\"view_groupresult\",\"add_taskresult\",\"change_taskresult\",\"delete_taskresult\",\"view_taskresult\",\"add_failure\",\"change_failure\",\"delete_failure\",\"view_failure\",\"add_ormq\",\"change_ormq\",\"delete_ormq\",\"view_ormq\",\"add_schedule\",\"change_schedule\",\"delete_schedule\",\"view_schedule\",\"add_success\",\"change_success\",\"delete_success\",\"view_success\",\"add_task\",\"change_task\",\"delete_task\",\"view_task\",\"add_frontendsettings\",\"change_frontendsettings\",\"delete_frontendsettings\",\"view_frontendsettings\",\"add_log\",\"change_log\",\"delete_log\",\"view_log\",\"add_savedviewfilterrule\",\"change_savedviewfilterrule\",\"delete_savedviewfilterrule\",\"view_savedviewfilterrule\",\"add_storagepath\",\"change_storagepath\",\"delete_storagepath\",\"view_storagepath\",\"add_tag\",\"change_tag\",\"delete_tag\",\"view_tag\",\"add_taskattributes\",\"change_taskattributes\",\"delete_taskattributes\",\"view_taskattributes\",\"add_session\",\"change_session\",\"delete_session\",\"view_session\"],\"inherited_permissions\":[\"django_q.view_ormq\",\"django_q.change_ormq\",\"django_celery_results.delete_chordcounter\",\"documents.change_comment\",\"django_q.view_schedule\",\"documents.delete_document\",\"documents.view_taskattributes\",\"django_q.view_failure\",\"django_q.add_failure\",\"authtoken.add_token\",\"auth.view_group\",\"documents.add_correspondent\",\"contenttypes.change_contenttype\",\"contenttypes.delete_contenttype\",\"auth.add_group\",\"django_celery_results.add_taskresult\",\"documents.change_savedview\",\"documents.view_comment\",\"documents.add_savedview\",\"documents.view_savedview\",\"authtoken.change_token\",\"auth.delete_permission\",\"auth.view_permission\",\"documents.view_correspondent\",\"documents.view_savedviewfilterrule\",\"auth.change_permission\",\"documents.view_log\",\"documents.change_documenttype\",\"authtoken.delete_tokenproxy\",\"documents.delete_savedview\",\"auth.change_group\",\"django_celery_results.add_groupresult\",\"documents.add_savedviewfilterrule\",\"django_q.add_ormq\",\"django_q.delete_task\",\"authtoken.change_tokenproxy\",\"documents.change_correspondent\",\"documents.add_taskattributes\",\"paperless_mail.view_mailaccount\",\"documents.view_frontendsettings\",\"django_q.change_failure\",\"django_q.delete_success\",\"documents.change_log\",\"django_q.change_success\",\"django_q.add_success\",\"contenttypes.add_contenttype\",\"documents.add_frontendsettings\",\"documents.delete_log\",\"sessions.view_session\",\"paperless_mail.add_mailrule\",\"paperless_mail.change_mailaccount\",\"django_q.delete_failure\",\"django_q.change_task\",\"django_q.view_success\",\"documents.add_documenttype\",\"documents.change_document\",\"paperless_mail.change_mailrule\",\"documents.view_documenttype\",\"documents.view_document\",\"authtoken.view_token\",\"documents.add_log\",\"django_celery_results.delete_groupresult\",\"documents.delete_taskattributes\",\"django_celery_results.view_chordcounter\",\"django_celery_results.delete_taskresult\",\"documents.add_comment\",\"paperless_mail.add_mailaccount\",\"auth.add_permission\",\"paperless_mail.view_mailrule\",\"authtoken.view_tokenproxy\",\"auth.add_user\",\"auth.delete_user\",\"documents.change_taskattributes\",\"auth.view_user\",\"documents.delete_correspondent\",\"django_q.delete_schedule\",\"sessions.delete_session\",\"documents.delete_savedviewfilterrule\",\"django_celery_results.change_chordcounter\",\"django_celery_results.change_groupresult\",\"paperless_mail.delete_mailrule\",\"django_celery_results.add_chordcounter\",\"paperless_mail.delete_mailaccount\",\"documents.change_savedviewfilterrule\",\"contenttypes.view_contenttype\",\"django_celery_results.view_groupresult\",\"documents.delete_frontendsettings\",\"documents.delete_documenttype\",\"django_q.add_schedule\",\"django_celery_results.change_taskresult\",\"authtoken.add_tokenproxy\",\"sessions.change_session\",\"auth.change_user\",\"django_q.change_schedule\",\"django_q.add_task\",\"sessions.add_session\",\"documents.delete_comment\",\"django_celery_results.view_taskresult\",\"authtoken.delete_token\",\"django_q.delete_ormq\",\"auth.delete_group\",\"documents.add_document\",\"documents.change_frontendsettings\",\"django_q.view_task\"]},{\"id\":17,\"username\":\"username2\",\"email\":\"\",\"password\":\"\",\"first_name\":\"User\",\"last_name\":\"Surname\",\"date_joined\":\"2022-12-09T11:43:10.082736Z\",\"is_staff\":false,\"is_active\":true,\"is_superuser\":false,\"groups\":[6],\"user_permissions\":[],\"inherited_permissions\":[\"auth.view_user\",\"paperless_mail.add_mailrule\",\"paperless_mail.delete_mailaccount\",\"paperless_mail.change_mailaccount\",\"paperless_mail.delete_mailrule\",\"documents.change_comment\",\"documents.add_documenttype\",\"paperless_mail.change_mailrule\",\"documents.change_documenttype\",\"documents.delete_documenttype\",\"documents.view_documenttype\",\"documents.add_comment\",\"paperless_mail.add_mailaccount\",\"auth.change_user\",\"paperless_mail.view_mailaccount\",\"documents.delete_comment\",\"paperless_mail.view_mailrule\",\"auth.add_user\",\"documents.view_comment\",\"auth.delete_user\"]}]}" - }, - "headersSize": -1, - "bodySize": -1, - "redirectURL": "" - }, - "cache": {}, - "timings": { "send": -1, "wait": -1, "receive": 0.64 } - }, - { - "startedDateTime": "2023-05-14T07:26:30.981Z", - "time": 0.479, - "request": { - "method": "GET", - "url": "http://localhost:8000/api/tags/?page=1&page_size=100000", - "httpVersion": "HTTP/1.1", - "cookies": [], - "headers": [ - { "name": "Accept", "value": "application/json; version=3" }, - { "name": "Accept-Encoding", "value": "gzip, deflate, br" }, - { "name": "Accept-Language", "value": "en-US" }, - { "name": "Connection", "value": "keep-alive" }, - { "name": "Host", "value": "localhost:8000" }, - { "name": "Origin", "value": "http://localhost:4200" }, - { "name": "Referer", "value": "http://localhost:4200/" }, - { "name": "Sec-Fetch-Dest", "value": "empty" }, - { "name": "Sec-Fetch-Mode", "value": "cors" }, - { "name": "Sec-Fetch-Site", "value": "same-site" }, - { "name": "User-Agent", "value": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/113.0.5672.53 Safari/537.36" } - ], - "queryString": [ - { - "name": "page", - "value": "1" - }, - { - "name": "page_size", - "value": "100000" - } - ], - "headersSize": -1, - "bodySize": -1 - }, - "response": { - "status": 200, - "statusText": "OK", - "httpVersion": "HTTP/1.1", - "cookies": [], - "headers": [ - { "name": "Access-Control-Allow-Origin", "value": "http://localhost:4200" }, - { "name": "Allow", "value": "GET, POST, HEAD, OPTIONS" }, - { "name": "Content-Encoding", "value": "br" }, - { "name": "Content-Language", "value": "en-us" }, - { "name": "Content-Length", "value": "806" }, - { "name": "Content-Type", "value": "application/json" }, - { "name": "Cross-Origin-Opener-Policy", "value": "same-origin" }, - { "name": "Referrer-Policy", "value": "same-origin" }, - { "name": "Vary", "value": "Accept, Accept-Language, Origin, Cookie, Accept-Encoding" }, - { "name": "X-Api-Version", "value": "3" }, - { "name": "X-Content-Type-Options", "value": "nosniff" }, - { "name": "X-Frame-Options", "value": "ANY" }, - { "name": "X-Version", "value": "1.14.4" } - ], - "content": { - "size": -1, - "mimeType": "application/json", - "text": "{\"count\":26,\"next\":null,\"previous\":null,\"all\":[4,9,10,7,6,14,27,28,29,2,30,31,15,32,33,34,35,36,3,20,5,8,1,18,19,13],\"results\":[{\"id\":4,\"slug\":\"another-sample-tag\",\"name\":\"Another Sample Tag\",\"color\":\"#cf7440\",\"text_color\":\"#000000\",\"match\":\"\",\"matching_algorithm\":6,\"is_insensitive\":true,\"is_inbox_tag\":false,\"document_count\":33,\"owner\":2,\"user_can_change\":true},{\"id\":9,\"slug\":\"inbox\",\"name\":\"Inbox\",\"color\":\"#47d1ca\",\"text_color\":\"#000000\",\"match\":\"\",\"matching_algorithm\":6,\"is_insensitive\":true,\"is_inbox_tag\":true,\"document_count\":8,\"owner\":null,\"user_can_change\":true},{\"id\":10,\"slug\":\"just-another-tag\",\"name\":\"Just another tag\",\"color\":\"#2aaa91\",\"text_color\":\"#000000\",\"match\":\"\",\"matching_algorithm\":6,\"is_insensitive\":true,\"is_inbox_tag\":false,\"document_count\":3,\"owner\":null,\"user_can_change\":true},{\"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,\"owner\":null,\"user_can_change\":true},{\"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\":2,\"owner\":null,\"user_can_change\":true},{\"id\":14,\"slug\":\"tag-12\",\"name\":\"Tag 12\",\"color\":\"#28a329\",\"text_color\":\"#ffffff\",\"match\":\"\",\"matching_algorithm\":6,\"is_insensitive\":true,\"is_inbox_tag\":false,\"document_count\":1,\"owner\":null,\"user_can_change\":true},{\"id\":27,\"slug\":\"tag-17\",\"name\":\"Tag 17\",\"color\":\"#2cb38e\",\"text_color\":\"#000000\",\"match\":\"\",\"matching_algorithm\":6,\"is_insensitive\":true,\"is_inbox_tag\":false,\"document_count\":0,\"owner\":2,\"user_can_change\":true},{\"id\":28,\"slug\":\"tag-18\",\"name\":\"Tag 18\",\"color\":\"#ce8c3e\",\"text_color\":\"#000000\",\"match\":\"\",\"matching_algorithm\":6,\"is_insensitive\":true,\"is_inbox_tag\":false,\"document_count\":0,\"owner\":2,\"user_can_change\":true},{\"id\":29,\"slug\":\"tag-19\",\"name\":\"Tag 19\",\"color\":\"#e6b69b\",\"text_color\":\"#000000\",\"match\":\"\",\"matching_algorithm\":6,\"is_insensitive\":true,\"is_inbox_tag\":false,\"document_count\":0,\"owner\":2,\"user_can_change\":true},{\"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\":8,\"owner\":null,\"user_can_change\":true},{\"id\":30,\"slug\":\"tag-20\",\"name\":\"Tag 20\",\"color\":\"#505cd3\",\"text_color\":\"#ffffff\",\"match\":\"\",\"matching_algorithm\":6,\"is_insensitive\":true,\"is_inbox_tag\":false,\"document_count\":0,\"owner\":2,\"user_can_change\":true},{\"id\":31,\"slug\":\"tag-21\",\"name\":\"Tag 21\",\"color\":\"#e2ba8b\",\"text_color\":\"#000000\",\"match\":\"\",\"matching_algorithm\":6,\"is_insensitive\":true,\"is_inbox_tag\":false,\"document_count\":0,\"owner\":2,\"user_can_change\":true},{\"id\":15,\"slug\":\"tag-222\",\"name\":\"Tag 222\",\"color\":\"#ccbc33\",\"text_color\":\"#000000\",\"match\":\"\",\"matching_algorithm\":6,\"is_insensitive\":true,\"is_inbox_tag\":false,\"document_count\":1,\"owner\":null,\"user_can_change\":true},{\"id\":32,\"slug\":\"tag-23\",\"name\":\"Tag 23\",\"color\":\"#5d71d6\",\"text_color\":\"#ffffff\",\"match\":\"\",\"matching_algorithm\":6,\"is_insensitive\":true,\"is_inbox_tag\":false,\"document_count\":0,\"owner\":2,\"user_can_change\":true},{\"id\":33,\"slug\":\"tag-24\",\"name\":\"Tag 24\",\"color\":\"#79ddab\",\"text_color\":\"#000000\",\"match\":\"\",\"matching_algorithm\":6,\"is_insensitive\":true,\"is_inbox_tag\":false,\"document_count\":0,\"owner\":2,\"user_can_change\":true},{\"id\":34,\"slug\":\"tag-25\",\"name\":\"Tag 25\",\"color\":\"#7ededc\",\"text_color\":\"#000000\",\"match\":\"\",\"matching_algorithm\":6,\"is_insensitive\":true,\"is_inbox_tag\":false,\"document_count\":0,\"owner\":2,\"user_can_change\":true},{\"id\":35,\"slug\":\"tag-26\",\"name\":\"Tag 26\",\"color\":\"#55d466\",\"text_color\":\"#000000\",\"match\":\"\",\"matching_algorithm\":6,\"is_insensitive\":true,\"is_inbox_tag\":false,\"document_count\":0,\"owner\":2,\"user_can_change\":true},{\"id\":36,\"slug\":\"tag-27\",\"name\":\"Tag 27\",\"color\":\"#d494e4\",\"text_color\":\"#000000\",\"match\":\"\",\"matching_algorithm\":6,\"is_insensitive\":true,\"is_inbox_tag\":false,\"document_count\":0,\"owner\":2,\"user_can_change\":true},{\"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\":6,\"owner\":null,\"user_can_change\":true},{\"id\":20,\"slug\":\"tag-owned-by-test\",\"name\":\"Tag Owned By Test\",\"color\":\"#a6cee3\",\"text_color\":\"#000000\",\"match\":\"\",\"matching_algorithm\":6,\"is_insensitive\":true,\"is_inbox_tag\":false,\"document_count\":1,\"owner\":15,\"user_can_change\":false},{\"id\":5,\"slug\":\"tagwithpartial\",\"name\":\"TagWithPartial\",\"color\":\"#3b2db4\",\"text_color\":\"#ffffff\",\"match\":\"\",\"matching_algorithm\":6,\"is_insensitive\":true,\"is_inbox_tag\":false,\"document_count\":6,\"owner\":2,\"user_can_change\":true},{\"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\":2,\"owner\":null,\"user_can_change\":true},{\"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\":5,\"owner\":null,\"user_can_change\":true},{\"id\":18,\"slug\":\"test-tag-new\",\"name\":\"Test Tag New\",\"color\":\"#a6cee3\",\"text_color\":\"#000000\",\"match\":\"\",\"matching_algorithm\":1,\"is_insensitive\":true,\"is_inbox_tag\":false,\"document_count\":1,\"owner\":null,\"user_can_change\":true},{\"id\":19,\"slug\":\"test-tag-new-2\",\"name\":\"Test Tag New 2\",\"color\":\"#a6cee3\",\"text_color\":\"#000000\",\"match\":\"\",\"matching_algorithm\":1,\"is_insensitive\":true,\"is_inbox_tag\":false,\"document_count\":1,\"owner\":null,\"user_can_change\":true},{\"id\":13,\"slug\":\"with-perms\",\"name\":\"With Perms\",\"color\":\"#9dcfe6\",\"text_color\":\"#000000\",\"match\":\"\",\"matching_algorithm\":6,\"is_insensitive\":true,\"is_inbox_tag\":false,\"document_count\":1,\"owner\":2,\"user_can_change\":true}]}" - }, - "headersSize": -1, - "bodySize": -1, - "redirectURL": "" - }, - "cache": {}, - "timings": { "send": -1, "wait": -1, "receive": 0.479 } - } - ] - } -} diff --git a/src-ui/e2e/settings/settings.spec.ts b/src-ui/e2e/settings/settings.spec.ts index 1b2c1a0af..51210acdd 100644 --- a/src-ui/e2e/settings/settings.spec.ts +++ b/src-ui/e2e/settings/settings.spec.ts @@ -1,8 +1,6 @@ import { test, expect } from '@playwright/test' const REQUESTS_HAR = 'e2e/settings/requests/api-settings.har' -const REQUESTS_HAR2 = 'e2e/settings/requests/api-settings2.har' -const REQUESTS_HAR3 = 'e2e/settings/requests/api-settings3.har' test('should post settings on save', async ({ page }) => { await page.routeFromHAR(REQUESTS_HAR, { notFound: 'fallback' }) @@ -101,65 +99,3 @@ test('should support tab direct navigation', async ({ page }) => { page.getByRole('tab', { name: 'Users & Groups' }) ).toHaveAttribute('aria-selected', 'true') }) - -test('should show a list of mail accounts & support creation', async ({ - page, -}) => { - await page.routeFromHAR(REQUESTS_HAR2, { notFound: 'fallback' }) - await page.goto('/settings/mail') - await expect( - page.getByRole('listitem').filter({ hasText: 'imap.gmail.com' }) - ).toHaveCount(1) - await expect( - page.getByRole('listitem').filter({ hasText: 'imap.domain.com' }) - ).toHaveCount(1) - await page.getByRole('button', { name: /Add Account/ }).click() - await expect(page.getByRole('dialog')).toHaveCount(1) - await page.getByLabel('Name', { exact: true }).fill('Test Account') - await page.getByLabel('IMAP Server', { exact: true }).fill('imap.server.com') - await page.getByLabel('IMAP Port', { exact: true }).fill('993') - await page.getByLabel('Username', { exact: true }).fill('username') - await page.getByLabel('Password', { exact: true }).fill('password') - const createPromise = page.waitForRequest((request) => { - const data = request.postDataJSON() - const isValid = data['imap_server'] === 'imap.server.com' - return ( - isValid && - request.method() === 'POST' && - request.url().includes('/api/mail_accounts/') - ) - }) - await page.getByRole('button', { name: 'Save' }).click() - await createPromise -}) - -test('should show a list of mail rules & support creation', async ({ - page, -}) => { - await page.routeFromHAR(REQUESTS_HAR3, { notFound: 'fallback' }) - await page.goto('/settings/mail') - await expect( - page.getByRole('listitem').filter({ hasText: 'domain' }) - ).toHaveCount(2) - await expect( - page.getByRole('listitem').filter({ hasText: 'gmail' }) - ).toHaveCount(2) - await page.getByRole('button', { name: /Add Rule/ }).click() - await expect(page.getByRole('dialog')).toHaveCount(1) - await page.getByLabel('Name', { exact: true }).fill('Test Rule') - await page.getByTitle('Account').locator('span').first().click() - await page.getByRole('option', { name: 'gmail' }).click() - await page.getByLabel('Maximum age (days)').fill('0') - const createPromise = page.waitForRequest((request) => { - const data = request.postDataJSON() - const isValid = data['name'] === 'Test Rule' - return ( - isValid && - request.method() === 'POST' && - request.url().includes('/api/mail_rules/') - ) - }) - await page.getByRole('button', { name: 'Save' }).scrollIntoViewIfNeeded() - await page.getByRole('button', { name: 'Save' }).click() - await createPromise -}) diff --git a/src-ui/e2e/tasks/requests/api-tasks.har b/src-ui/e2e/tasks/requests/api-tasks.har deleted file mode 100644 index ae8dba381..000000000 --- a/src-ui/e2e/tasks/requests/api-tasks.har +++ /dev/null @@ -1,252 +0,0 @@ -{ - "log": { - "version": "1.2", - "creator": { - "name": "Playwright", - "version": "1.33.0" - }, - "browser": { - "name": "chromium", - "version": "113.0.5672.53" - }, - "entries": [ - { - "startedDateTime": "2023-05-14T07:31:08.554Z", - "time": 5.952, - "request": { - "method": "GET", - "url": "http://localhost:8000/api/ui_settings/", - "httpVersion": "HTTP/1.1", - "cookies": [], - "headers": [ - { "name": "Accept", "value": "application/json; version=3" }, - { "name": "Accept-Encoding", "value": "gzip, deflate, br" }, - { "name": "Accept-Language", "value": "en-US" }, - { "name": "Connection", "value": "keep-alive" }, - { "name": "Host", "value": "localhost:8000" }, - { "name": "Origin", "value": "http://localhost:4200" }, - { "name": "Referer", "value": "http://localhost:4200/" }, - { "name": "Sec-Fetch-Dest", "value": "empty" }, - { "name": "Sec-Fetch-Mode", "value": "cors" }, - { "name": "Sec-Fetch-Site", "value": "same-site" }, - { "name": "User-Agent", "value": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/113.0.5672.53 Safari/537.36" } - ], - "queryString": [], - "headersSize": -1, - "bodySize": -1 - }, - "response": { - "status": 200, - "statusText": "OK", - "httpVersion": "HTTP/1.1", - "cookies": [], - "headers": [ - { "name": "Access-Control-Allow-Origin", "value": "http://localhost:4200" }, - { "name": "Allow", "value": "GET, POST, HEAD, OPTIONS" }, - { "name": "Content-Encoding", "value": "br" }, - { "name": "Content-Language", "value": "en-us" }, - { "name": "Content-Length", "value": "965" }, - { "name": "Content-Type", "value": "application/json" }, - { "name": "Cross-Origin-Opener-Policy", "value": "same-origin" }, - { "name": "Referrer-Policy", "value": "same-origin" }, - { "name": "Vary", "value": "Accept, Accept-Language, Origin, Cookie, Accept-Encoding" }, - { "name": "X-Api-Version", "value": "3" }, - { "name": "X-Content-Type-Options", "value": "nosniff" }, - { "name": "X-Frame-Options", "value": "ANY" }, - { "name": "X-Version", "value": "1.14.4" } - ], - "content": { - "size": -1, - "mimeType": "application/json", - "text": "{\"user\":{\"id\":2,\"username\":\"testuser\",\"is_superuser\":false,\"groups\":[]},\"settings\":{\"language\":\"\",\"bulk_edit\":{\"confirmation_dialogs\":true,\"apply_on_close\":false},\"documentListSize\":50,\"dark_mode\":{\"use_system\":false,\"enabled\":\"false\",\"thumb_inverted\":\"true\"},\"theme\":{\"color\":\"#9fbf2f\"},\"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},\"comments_enabled\":true,\"slim_sidebar\":false,\"update_checking\":{\"enabled\":false,\"backend_setting\":\"default\"},\"saved_views\":{\"warn_on_unsaved_change\":true},\"notes_enabled\":true,\"tour_complete\":true},\"permissions\":[\"view_document\",\"view_tag\",\"change_document\",\"change_chordcounter\",\"add_comment\",\"view_task\",\"add_groupresult\",\"change_user\",\"view_note\",\"delete_document\",\"change_group\",\"add_documenttype\",\"add_storagepath\",\"delete_groupresult\",\"add_tag\",\"delete_mailaccount\",\"delete_savedview\",\"view_contenttype\",\"change_failure\",\"view_token\",\"add_chordcounter\",\"add_mailaccount\",\"change_frontendsettings\",\"add_taskresult\",\"change_taskattributes\",\"view_frontendsettings\",\"add_groupobjectpermission\",\"change_session\",\"change_mailaccount\",\"change_contenttype\",\"view_group\",\"view_savedviewfilterrule\",\"view_mailaccount\",\"delete_processedmail\",\"delete_chordcounter\",\"change_permission\",\"change_tokenproxy\",\"add_task\",\"view_paperlesstask\",\"delete_taskattributes\",\"add_success\",\"add_userobjectpermission\",\"add_note\",\"add_ormq\",\"view_ormq\",\"add_group\",\"view_session\",\"delete_tokenproxy\",\"add_paperlesstask\",\"delete_frontendsettings\",\"change_correspondent\",\"delete_failure\",\"add_correspondent\",\"change_paperlesstask\",\"add_document\",\"view_log\",\"change_log\",\"view_chordcounter\",\"change_processedmail\",\"change_storagepath\",\"add_savedview\",\"view_comment\",\"add_tokenproxy\",\"view_success\",\"change_userobjectpermission\",\"delete_task\",\"add_failure\",\"delete_uisettings\",\"change_note\",\"view_taskresult\",\"delete_userobjectpermission\",\"delete_session\",\"delete_schedule\",\"delete_groupobjectpermission\",\"view_mailrule\",\"view_logentry\",\"view_savedview\",\"view_processedmail\",\"view_groupobjectpermission\",\"delete_documenttype\",\"delete_success\",\"view_schedule\",\"change_task\",\"change_savedviewfilterrule\",\"view_correspondent\",\"delete_savedviewfilterrule\",\"change_savedview\",\"view_uisettings\",\"view_groupresult\",\"view_tokenproxy\",\"delete_correspondent\",\"add_schedule\",\"add_processedmail\",\"delete_log\",\"change_comment\",\"add_logentry\",\"change_ormq\",\"delete_group\",\"delete_ormq\",\"change_uisettings\",\"delete_paperlesstask\",\"add_mailrule\",\"delete_logentry\",\"change_documenttype\",\"delete_comment\",\"change_logentry\",\"add_contenttype\",\"add_taskattributes\",\"change_groupobjectpermission\",\"delete_mailrule\",\"view_failure\",\"view_documenttype\",\"delete_taskresult\",\"change_groupresult\",\"change_tag\",\"view_taskattributes\",\"delete_user\",\"delete_token\",\"add_frontendsettings\",\"delete_permission\",\"change_success\",\"delete_note\",\"add_savedviewfilterrule\",\"delete_storagepath\",\"change_token\",\"view_permission\",\"add_user\",\"add_permission\",\"add_log\",\"delete_tag\",\"change_mailrule\",\"view_userobjectpermission\",\"add_token\",\"change_taskresult\",\"change_schedule\",\"view_storagepath\",\"delete_contenttype\",\"view_user\",\"add_uisettings\",\"add_session\"]}" - }, - "headersSize": -1, - "bodySize": -1, - "redirectURL": "" - }, - "cache": {}, - "timings": { "send": -1, "wait": -1, "receive": 5.952 } - }, - { - "startedDateTime": "2023-05-14T07:31:08.676Z", - "time": 1.083, - "request": { - "method": "GET", - "url": "http://localhost:8000/api/saved_views/?page=1&page_size=100000", - "httpVersion": "HTTP/1.1", - "cookies": [], - "headers": [ - { "name": "Accept", "value": "application/json; version=3" }, - { "name": "Accept-Encoding", "value": "gzip, deflate, br" }, - { "name": "Accept-Language", "value": "en-US" }, - { "name": "Connection", "value": "keep-alive" }, - { "name": "Host", "value": "localhost:8000" }, - { "name": "Origin", "value": "http://localhost:4200" }, - { "name": "Referer", "value": "http://localhost:4200/" }, - { "name": "Sec-Fetch-Dest", "value": "empty" }, - { "name": "Sec-Fetch-Mode", "value": "cors" }, - { "name": "Sec-Fetch-Site", "value": "same-site" }, - { "name": "User-Agent", "value": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/113.0.5672.53 Safari/537.36" } - ], - "queryString": [ - { - "name": "page", - "value": "1" - }, - { - "name": "page_size", - "value": "100000" - } - ], - "headersSize": -1, - "bodySize": -1 - }, - "response": { - "status": 200, - "statusText": "OK", - "httpVersion": "HTTP/1.1", - "cookies": [], - "headers": [ - { "name": "Access-Control-Allow-Origin", "value": "http://localhost:4200" }, - { "name": "Allow", "value": "GET, POST, HEAD, OPTIONS" }, - { "name": "Content-Encoding", "value": "br" }, - { "name": "Content-Language", "value": "en-us" }, - { "name": "Content-Length", "value": "851" }, - { "name": "Content-Type", "value": "application/json" }, - { "name": "Cross-Origin-Opener-Policy", "value": "same-origin" }, - { "name": "Referrer-Policy", "value": "same-origin" }, - { "name": "Vary", "value": "Accept, Accept-Language, Origin, Cookie, Accept-Encoding" }, - { "name": "X-Api-Version", "value": "3" }, - { "name": "X-Content-Type-Options", "value": "nosniff" }, - { "name": "X-Frame-Options", "value": "ANY" }, - { "name": "X-Version", "value": "1.14.4" } - ], - "content": { - "size": -1, - "mimeType": "application/json", - "text": "{\"count\":6,\"next\":null,\"previous\":null,\"all\":[8,17,7,4,11,15],\"results\":[{\"id\":8,\"name\":\"Correspondent 2\",\"show_on_dashboard\":false,\"show_in_sidebar\":false,\"sort_field\":\"created\",\"sort_reverse\":true,\"filter_rules\":[{\"rule_type\":3,\"value\":\"2\"}],\"owner\":{\"id\":2,\"password\":\"pbkdf2_sha256$390000$ElHGEQzOIS3Gv2wu8YDbSt$bWASwmUfHtFMZ6+rG+4rrrtejjC9RiwXm6xMi0bxMZo=\",\"last_login\":\"2023-04-26T09:08:14Z\",\"is_superuser\":false,\"username\":\"testuser\",\"first_name\":\"\",\"last_name\":\"\",\"email\":\"test@user.com\",\"is_staff\":true,\"is_active\":true,\"date_joined\":\"2021-01-03T07:37:04Z\",\"groups\":[],\"user_permissions\":[57,58,59,60,5,6,7,8,1,2,3,4,9,10,11,12,61,62,63,64,65,66,67,68,13,14,15,16,117,118,119,120,121,122,123,124,113,114,115,116,77,78,79,80,85,86,87,88,69,70,71,72,81,82,83,84,73,74,75,76,33,34,35,36,21,22,23,24,37,38,39,40,89,90,91,92,29,30,31,32,109,137,110,138,111,139,112,140,105,106,107,108,41,42,43,44,45,46,47,48,93,94,95,96,25,26,27,28,101,102,103,104,97,98,99,100,125,126,127,128,129,130,131,132,49,50,51,52,53,54,55,56,133,134,135,136,17,18,19,20]},\"user_can_change\":true},{\"id\":17,\"name\":\"In the Last Month\",\"show_on_dashboard\":false,\"show_in_sidebar\":false,\"sort_field\":\"created\",\"sort_reverse\":true,\"filter_rules\":[{\"rule_type\":20,\"value\":\"created:[-1 month to now]\"}],\"owner\":{\"id\":2,\"password\":\"pbkdf2_sha256$390000$ElHGEQzOIS3Gv2wu8YDbSt$bWASwmUfHtFMZ6+rG+4rrrtejjC9RiwXm6xMi0bxMZo=\",\"last_login\":\"2023-04-26T09:08:14Z\",\"is_superuser\":false,\"username\":\"testuser\",\"first_name\":\"\",\"last_name\":\"\",\"email\":\"test@user.com\",\"is_staff\":true,\"is_active\":true,\"date_joined\":\"2021-01-03T07:37:04Z\",\"groups\":[],\"user_permissions\":[57,58,59,60,5,6,7,8,1,2,3,4,9,10,11,12,61,62,63,64,65,66,67,68,13,14,15,16,117,118,119,120,121,122,123,124,113,114,115,116,77,78,79,80,85,86,87,88,69,70,71,72,81,82,83,84,73,74,75,76,33,34,35,36,21,22,23,24,37,38,39,40,89,90,91,92,29,30,31,32,109,137,110,138,111,139,112,140,105,106,107,108,41,42,43,44,45,46,47,48,93,94,95,96,25,26,27,28,101,102,103,104,97,98,99,100,125,126,127,128,129,130,131,132,49,50,51,52,53,54,55,56,133,134,135,136,17,18,19,20]},\"user_can_change\":true},{\"id\":7,\"name\":\"Inbox\",\"show_on_dashboard\":true,\"show_in_sidebar\":true,\"sort_field\":\"created\",\"sort_reverse\":true,\"filter_rules\":[{\"rule_type\":6,\"value\":\"9\"}],\"owner\":{\"id\":2,\"password\":\"pbkdf2_sha256$390000$ElHGEQzOIS3Gv2wu8YDbSt$bWASwmUfHtFMZ6+rG+4rrrtejjC9RiwXm6xMi0bxMZo=\",\"last_login\":\"2023-04-26T09:08:14Z\",\"is_superuser\":false,\"username\":\"testuser\",\"first_name\":\"\",\"last_name\":\"\",\"email\":\"test@user.com\",\"is_staff\":true,\"is_active\":true,\"date_joined\":\"2021-01-03T07:37:04Z\",\"groups\":[],\"user_permissions\":[57,58,59,60,5,6,7,8,1,2,3,4,9,10,11,12,61,62,63,64,65,66,67,68,13,14,15,16,117,118,119,120,121,122,123,124,113,114,115,116,77,78,79,80,85,86,87,88,69,70,71,72,81,82,83,84,73,74,75,76,33,34,35,36,21,22,23,24,37,38,39,40,89,90,91,92,29,30,31,32,109,137,110,138,111,139,112,140,105,106,107,108,41,42,43,44,45,46,47,48,93,94,95,96,25,26,27,28,101,102,103,104,97,98,99,100,125,126,127,128,129,130,131,132,49,50,51,52,53,54,55,56,133,134,135,136,17,18,19,20]},\"user_can_change\":true},{\"id\":4,\"name\":\"Recently Added\",\"show_on_dashboard\":true,\"show_in_sidebar\":true,\"sort_field\":\"created\",\"sort_reverse\":true,\"filter_rules\":[],\"owner\":{\"id\":2,\"password\":\"pbkdf2_sha256$390000$ElHGEQzOIS3Gv2wu8YDbSt$bWASwmUfHtFMZ6+rG+4rrrtejjC9RiwXm6xMi0bxMZo=\",\"last_login\":\"2023-04-26T09:08:14Z\",\"is_superuser\":false,\"username\":\"testuser\",\"first_name\":\"\",\"last_name\":\"\",\"email\":\"test@user.com\",\"is_staff\":true,\"is_active\":true,\"date_joined\":\"2021-01-03T07:37:04Z\",\"groups\":[],\"user_permissions\":[57,58,59,60,5,6,7,8,1,2,3,4,9,10,11,12,61,62,63,64,65,66,67,68,13,14,15,16,117,118,119,120,121,122,123,124,113,114,115,116,77,78,79,80,85,86,87,88,69,70,71,72,81,82,83,84,73,74,75,76,33,34,35,36,21,22,23,24,37,38,39,40,89,90,91,92,29,30,31,32,109,137,110,138,111,139,112,140,105,106,107,108,41,42,43,44,45,46,47,48,93,94,95,96,25,26,27,28,101,102,103,104,97,98,99,100,125,126,127,128,129,130,131,132,49,50,51,52,53,54,55,56,133,134,135,136,17,18,19,20]},\"user_can_change\":true},{\"id\":11,\"name\":\"Tag: Another Sample Tag\",\"show_on_dashboard\":false,\"show_in_sidebar\":true,\"sort_field\":\"created\",\"sort_reverse\":true,\"filter_rules\":[{\"rule_type\":6,\"value\":\"4\"}],\"owner\":{\"id\":2,\"password\":\"pbkdf2_sha256$390000$ElHGEQzOIS3Gv2wu8YDbSt$bWASwmUfHtFMZ6+rG+4rrrtejjC9RiwXm6xMi0bxMZo=\",\"last_login\":\"2023-04-26T09:08:14Z\",\"is_superuser\":false,\"username\":\"testuser\",\"first_name\":\"\",\"last_name\":\"\",\"email\":\"test@user.com\",\"is_staff\":true,\"is_active\":true,\"date_joined\":\"2021-01-03T07:37:04Z\",\"groups\":[],\"user_permissions\":[57,58,59,60,5,6,7,8,1,2,3,4,9,10,11,12,61,62,63,64,65,66,67,68,13,14,15,16,117,118,119,120,121,122,123,124,113,114,115,116,77,78,79,80,85,86,87,88,69,70,71,72,81,82,83,84,73,74,75,76,33,34,35,36,21,22,23,24,37,38,39,40,89,90,91,92,29,30,31,32,109,137,110,138,111,139,112,140,105,106,107,108,41,42,43,44,45,46,47,48,93,94,95,96,25,26,27,28,101,102,103,104,97,98,99,100,125,126,127,128,129,130,131,132,49,50,51,52,53,54,55,56,133,134,135,136,17,18,19,20]},\"user_can_change\":true},{\"id\":15,\"name\":\"View ASN not empty\",\"show_on_dashboard\":false,\"show_in_sidebar\":false,\"sort_field\":\"created\",\"sort_reverse\":true,\"filter_rules\":[{\"rule_type\":18,\"value\":\"false\"}],\"owner\":{\"id\":2,\"password\":\"pbkdf2_sha256$390000$ElHGEQzOIS3Gv2wu8YDbSt$bWASwmUfHtFMZ6+rG+4rrrtejjC9RiwXm6xMi0bxMZo=\",\"last_login\":\"2023-04-26T09:08:14Z\",\"is_superuser\":false,\"username\":\"testuser\",\"first_name\":\"\",\"last_name\":\"\",\"email\":\"test@user.com\",\"is_staff\":true,\"is_active\":true,\"date_joined\":\"2021-01-03T07:37:04Z\",\"groups\":[],\"user_permissions\":[57,58,59,60,5,6,7,8,1,2,3,4,9,10,11,12,61,62,63,64,65,66,67,68,13,14,15,16,117,118,119,120,121,122,123,124,113,114,115,116,77,78,79,80,85,86,87,88,69,70,71,72,81,82,83,84,73,74,75,76,33,34,35,36,21,22,23,24,37,38,39,40,89,90,91,92,29,30,31,32,109,137,110,138,111,139,112,140,105,106,107,108,41,42,43,44,45,46,47,48,93,94,95,96,25,26,27,28,101,102,103,104,97,98,99,100,125,126,127,128,129,130,131,132,49,50,51,52,53,54,55,56,133,134,135,136,17,18,19,20]},\"user_can_change\":true}]}" - }, - "headersSize": -1, - "bodySize": -1, - "redirectURL": "" - }, - "cache": {}, - "timings": { "send": -1, "wait": -1, "receive": 1.083 } - }, - { - "startedDateTime": "2023-05-14T07:31:08.676Z", - "time": 0.792, - "request": { - "method": "GET", - "url": "http://localhost:8000/api/tasks/", - "httpVersion": "HTTP/1.1", - "cookies": [], - "headers": [ - { "name": "Accept", "value": "application/json; version=3" }, - { "name": "Accept-Encoding", "value": "gzip, deflate, br" }, - { "name": "Accept-Language", "value": "en-US" }, - { "name": "Connection", "value": "keep-alive" }, - { "name": "Host", "value": "localhost:8000" }, - { "name": "Origin", "value": "http://localhost:4200" }, - { "name": "Referer", "value": "http://localhost:4200/" }, - { "name": "Sec-Fetch-Dest", "value": "empty" }, - { "name": "Sec-Fetch-Mode", "value": "cors" }, - { "name": "Sec-Fetch-Site", "value": "same-site" }, - { "name": "User-Agent", "value": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/113.0.5672.53 Safari/537.36" } - ], - "queryString": [], - "headersSize": -1, - "bodySize": -1 - }, - "response": { - "status": 200, - "statusText": "OK", - "httpVersion": "HTTP/1.1", - "cookies": [], - "headers": [ - { "name": "Access-Control-Allow-Origin", "value": "http://localhost:4200" }, - { "name": "Allow", "value": "GET, HEAD, OPTIONS" }, - { "name": "Content-Encoding", "value": "br" }, - { "name": "Content-Language", "value": "en-us" }, - { "name": "Content-Length", "value": "820" }, - { "name": "Content-Type", "value": "application/json" }, - { "name": "Cross-Origin-Opener-Policy", "value": "same-origin" }, - { "name": "Referrer-Policy", "value": "same-origin" }, - { "name": "Vary", "value": "Accept, Accept-Language, Origin, Cookie, Accept-Encoding" }, - { "name": "X-Api-Version", "value": "3" }, - { "name": "X-Content-Type-Options", "value": "nosniff" }, - { "name": "X-Frame-Options", "value": "ANY" }, - { "name": "X-Version", "value": "1.14.4" } - ], - "content": { - "size": -1, - "mimeType": "application/json", - "text": "[{\"id\":277,\"task_id\":\"ea55f432-64fa-4759-aa29-0a05c8642894\",\"task_file_name\":\"2023-05-07 merge-csv.com__6424d0db8ce87.csv\",\"date_created\":\"2023-05-10T06:31:31.894068Z\",\"date_done\":\"2023-05-10T06:31:33.572466Z\",\"type\":\"file\",\"status\":\"SUCCESS\",\"result\":\"Success. New document id 323 created\",\"acknowledged\":false,\"related_document\":\"323\"},{\"id\":275,\"task_id\":\"26868b23-ad92-434d-87a3-005a93ee5fdc\",\"task_file_name\":\"testhtml.txt\",\"date_created\":\"2023-05-10T04:45:05.292926Z\",\"date_done\":\"2023-05-10T04:45:13.632497Z\",\"type\":\"file\",\"status\":\"SUCCESS\",\"result\":\"Success. New document id 321 created\",\"acknowledged\":false,\"related_document\":\"321\"},{\"id\":274,\"task_id\":\"5526741d-2821-4629-89f2-deeeeb57a5d4\",\"task_file_name\":\"Screenshot 2023-05-09 at 7.06.07 PM.png\",\"date_created\":\"2023-05-10T04:30:20.533857Z\",\"date_done\":\"2023-05-10T04:30:36.603743Z\",\"type\":\"file\",\"status\":\"SUCCESS\",\"result\":\"Success. New document id 320 created\",\"acknowledged\":false,\"related_document\":\"320\"},{\"id\":264,\"task_id\":\"b1b4d448-ad5d-46de-99d8-737e636716df\",\"task_file_name\":\"cupcake.pdf\",\"date_created\":\"2023-04-26T16:23:37.487070Z\",\"date_done\":\"2023-04-26T16:23:40.119509Z\",\"type\":\"file\",\"status\":\"SUCCESS\",\"result\":\"Success. New document id 314 created\",\"acknowledged\":false,\"related_document\":\"314\"},{\"id\":256,\"task_id\":\"382592c4-4ae1-4ed6-8b21-2cfeb7892509\",\"task_file_name\":\"191092.pdf\",\"date_created\":\"2023-03-01T09:40:02.033028Z\",\"date_done\":\"2023-03-01T09:40:11.302398Z\",\"type\":\"file\",\"status\":\"SUCCESS\",\"result\":\"Success. New document id 312 created\",\"acknowledged\":false,\"related_document\":\"312\"},{\"id\":255,\"task_id\":\"10ca1a5b-3c08-442c-b2c8-7e4ae53657f1\",\"task_file_name\":\"191092.pdf\",\"date_created\":\"2023-03-01T09:26:03.093116Z\",\"date_done\":\"2023-03-01T09:26:07.223048Z\",\"type\":\"file\",\"status\":\"FAILURE\",\"result\":\"191092.pdf: Not consuming 191092.pdf: It is a duplicate of 191092 (#311)\",\"acknowledged\":false,\"related_document\":null},{\"id\":253,\"task_id\":\"10b9ca67-7d40-416f-bd3c-a8a3ef564a73\",\"task_file_name\":\"Has the new Kirkpatrick generation built a bet.pdf\",\"date_created\":\"2022-12-14T06:20:15.141128Z\",\"date_done\":\"2022-12-14T06:20:27.249651Z\",\"type\":\"file\",\"status\":\"SUCCESS\",\"result\":\"Success. New document id 310 created\",\"acknowledged\":false,\"related_document\":\"310\"},{\"id\":251,\"task_id\":\"09bddd67-e926-480a-97a5-a7cd2332ec06\",\"task_file_name\":\"App Kit.pdf\",\"date_created\":\"2022-12-14T06:00:05.654587Z\",\"date_done\":\"2022-12-14T06:00:28.848640Z\",\"type\":\"file\",\"status\":\"SUCCESS\",\"result\":\"Success. New document id 309 created\",\"acknowledged\":false,\"related_document\":\"309\"},{\"id\":246,\"task_id\":\"268173d2-54cc-4b16-8297-34a1893c5aa7\",\"task_file_name\":\"tablerates.csv\",\"date_created\":\"2022-12-12T21:19:52.258628Z\",\"date_done\":\"2022-12-12T21:19:52.638734Z\",\"type\":\"file\",\"status\":\"SUCCESS\",\"result\":\"Success. New document id 306 created\",\"acknowledged\":false,\"related_document\":\"306\"}]" - }, - "headersSize": -1, - "bodySize": -1, - "redirectURL": "" - }, - "cache": {}, - "timings": { "send": -1, "wait": -1, "receive": 0.792 } - }, - { - "startedDateTime": "2023-05-14T07:31:08.676Z", - "time": 0.522, - "request": { - "method": "GET", - "url": "http://localhost:8000/api/tasks/", - "httpVersion": "HTTP/1.1", - "cookies": [], - "headers": [ - { "name": "Accept", "value": "application/json; version=3" }, - { "name": "Accept-Encoding", "value": "gzip, deflate, br" }, - { "name": "Accept-Language", "value": "en-US" }, - { "name": "Connection", "value": "keep-alive" }, - { "name": "Host", "value": "localhost:8000" }, - { "name": "Origin", "value": "http://localhost:4200" }, - { "name": "Referer", "value": "http://localhost:4200/" }, - { "name": "Sec-Fetch-Dest", "value": "empty" }, - { "name": "Sec-Fetch-Mode", "value": "cors" }, - { "name": "Sec-Fetch-Site", "value": "same-site" }, - { "name": "User-Agent", "value": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/113.0.5672.53 Safari/537.36" } - ], - "queryString": [], - "headersSize": -1, - "bodySize": -1 - }, - "response": { - "status": 200, - "statusText": "OK", - "httpVersion": "HTTP/1.1", - "cookies": [], - "headers": [ - { "name": "Access-Control-Allow-Origin", "value": "http://localhost:4200" }, - { "name": "Allow", "value": "GET, HEAD, OPTIONS" }, - { "name": "Content-Encoding", "value": "br" }, - { "name": "Content-Language", "value": "en-us" }, - { "name": "Content-Length", "value": "820" }, - { "name": "Content-Type", "value": "application/json" }, - { "name": "Cross-Origin-Opener-Policy", "value": "same-origin" }, - { "name": "Referrer-Policy", "value": "same-origin" }, - { "name": "Vary", "value": "Accept, Accept-Language, Origin, Cookie, Accept-Encoding" }, - { "name": "X-Api-Version", "value": "3" }, - { "name": "X-Content-Type-Options", "value": "nosniff" }, - { "name": "X-Frame-Options", "value": "ANY" }, - { "name": "X-Version", "value": "1.14.4" } - ], - "content": { - "size": -1, - "mimeType": "application/json", - "text": "[{\"id\":277,\"task_id\":\"ea55f432-64fa-4759-aa29-0a05c8642894\",\"task_file_name\":\"2023-05-07 merge-csv.com__6424d0db8ce87.csv\",\"date_created\":\"2023-05-10T06:31:31.894068Z\",\"date_done\":\"2023-05-10T06:31:33.572466Z\",\"type\":\"file\",\"status\":\"SUCCESS\",\"result\":\"Success. New document id 323 created\",\"acknowledged\":false,\"related_document\":\"323\"},{\"id\":275,\"task_id\":\"26868b23-ad92-434d-87a3-005a93ee5fdc\",\"task_file_name\":\"testhtml.txt\",\"date_created\":\"2023-05-10T04:45:05.292926Z\",\"date_done\":\"2023-05-10T04:45:13.632497Z\",\"type\":\"file\",\"status\":\"SUCCESS\",\"result\":\"Success. New document id 321 created\",\"acknowledged\":false,\"related_document\":\"321\"},{\"id\":274,\"task_id\":\"5526741d-2821-4629-89f2-deeeeb57a5d4\",\"task_file_name\":\"Screenshot 2023-05-09 at 7.06.07 PM.png\",\"date_created\":\"2023-05-10T04:30:20.533857Z\",\"date_done\":\"2023-05-10T04:30:36.603743Z\",\"type\":\"file\",\"status\":\"SUCCESS\",\"result\":\"Success. New document id 320 created\",\"acknowledged\":false,\"related_document\":\"320\"},{\"id\":264,\"task_id\":\"b1b4d448-ad5d-46de-99d8-737e636716df\",\"task_file_name\":\"cupcake.pdf\",\"date_created\":\"2023-04-26T16:23:37.487070Z\",\"date_done\":\"2023-04-26T16:23:40.119509Z\",\"type\":\"file\",\"status\":\"SUCCESS\",\"result\":\"Success. New document id 314 created\",\"acknowledged\":false,\"related_document\":\"314\"},{\"id\":256,\"task_id\":\"382592c4-4ae1-4ed6-8b21-2cfeb7892509\",\"task_file_name\":\"191092.pdf\",\"date_created\":\"2023-03-01T09:40:02.033028Z\",\"date_done\":\"2023-03-01T09:40:11.302398Z\",\"type\":\"file\",\"status\":\"SUCCESS\",\"result\":\"Success. New document id 312 created\",\"acknowledged\":false,\"related_document\":\"312\"},{\"id\":255,\"task_id\":\"10ca1a5b-3c08-442c-b2c8-7e4ae53657f1\",\"task_file_name\":\"191092.pdf\",\"date_created\":\"2023-03-01T09:26:03.093116Z\",\"date_done\":\"2023-03-01T09:26:07.223048Z\",\"type\":\"file\",\"status\":\"FAILURE\",\"result\":\"191092.pdf: Not consuming 191092.pdf: It is a duplicate of 191092 (#311)\",\"acknowledged\":false,\"related_document\":null},{\"id\":253,\"task_id\":\"10b9ca67-7d40-416f-bd3c-a8a3ef564a73\",\"task_file_name\":\"Has the new Kirkpatrick generation built a bet.pdf\",\"date_created\":\"2022-12-14T06:20:15.141128Z\",\"date_done\":\"2022-12-14T06:20:27.249651Z\",\"type\":\"file\",\"status\":\"SUCCESS\",\"result\":\"Success. New document id 310 created\",\"acknowledged\":false,\"related_document\":\"310\"},{\"id\":251,\"task_id\":\"09bddd67-e926-480a-97a5-a7cd2332ec06\",\"task_file_name\":\"App Kit.pdf\",\"date_created\":\"2022-12-14T06:00:05.654587Z\",\"date_done\":\"2022-12-14T06:00:28.848640Z\",\"type\":\"file\",\"status\":\"SUCCESS\",\"result\":\"Success. New document id 309 created\",\"acknowledged\":false,\"related_document\":\"309\"},{\"id\":246,\"task_id\":\"268173d2-54cc-4b16-8297-34a1893c5aa7\",\"task_file_name\":\"tablerates.csv\",\"date_created\":\"2022-12-12T21:19:52.258628Z\",\"date_done\":\"2022-12-12T21:19:52.638734Z\",\"type\":\"file\",\"status\":\"SUCCESS\",\"result\":\"Success. New document id 306 created\",\"acknowledged\":false,\"related_document\":\"306\"}]" - }, - "headersSize": -1, - "bodySize": -1, - "redirectURL": "" - }, - "cache": {}, - "timings": { "send": -1, "wait": -1, "receive": 0.522 } - } - ] - } -} diff --git a/src-ui/e2e/tasks/tasks.spec.ts b/src-ui/e2e/tasks/tasks.spec.ts deleted file mode 100644 index 97d25b13f..000000000 --- a/src-ui/e2e/tasks/tasks.spec.ts +++ /dev/null @@ -1,71 +0,0 @@ -import { test, expect } from '@playwright/test' - -const REQUESTS_HAR = 'e2e/tasks/requests/api-tasks.har' - -test('should show a list of dismissable tasks in tabs', async ({ page }) => { - await page.routeFromHAR(REQUESTS_HAR, { notFound: 'fallback' }) - await page.goto('/tasks') - await expect(page.getByRole('tab', { name: /Failed/ })).toHaveText(/1/) - await expect( - page.getByRole('cell').filter({ hasText: 'Dismiss' }) - ).toHaveCount(1) - await expect(page.getByRole('tab', { name: /Complete/ })).toHaveText(/8/) - await page.getByRole('tab', { name: /Complete/ }).click() - await expect( - page.getByRole('cell').filter({ hasText: 'Dismiss' }) - ).toHaveCount(8) - await page.getByRole('tab', { name: /Started/ }).click() - await expect( - page.getByRole('cell').filter({ hasText: 'Dismiss' }) - ).toHaveCount(0) - await page.getByRole('tab', { name: /Queued/ }).click() - await expect( - page.getByRole('cell').filter({ hasText: 'Dismiss' }) - ).toHaveCount(0) -}) - -test('should support dismissing tasks', async ({ page }) => { - await page.routeFromHAR(REQUESTS_HAR, { notFound: 'fallback' }) - await page.goto('/tasks') - await page.getByRole('tab', { name: /Failed/ }).click() - const dismissPromise = page.waitForRequest((request) => { - const data = request.postDataJSON() - const isValid = Array.isArray(data['tasks']) && data['tasks'].includes(255) - return ( - isValid && - request.method() === 'POST' && - request.url().includes('/api/acknowledge_tasks/') - ) - }) - await page - .getByRole('button', { name: 'Dismiss', exact: true }) - .first() - .click() - await dismissPromise -}) - -test('should support dismiss all tasks', async ({ page }) => { - await page.routeFromHAR(REQUESTS_HAR, { notFound: 'fallback' }) - await page.goto('/tasks') - await expect(page.getByRole('button', { name: 'Dismiss all' })).toBeEnabled() - await page.getByRole('button', { name: 'Dismiss all' }).click() - const dismissPromise = page.waitForRequest((request) => { - const data = request.postDataJSON() - const isValid = Array.isArray(data['tasks']) - return ( - isValid && - request.method() === 'POST' && - request.url().includes('/api/acknowledge_tasks/') - ) - }) - await page.getByRole('button', { name: /Dismiss/ }).click() - await dismissPromise -}) - -test('should warn on dismiss all tasks', async ({ page }) => { - await page.routeFromHAR(REQUESTS_HAR, { notFound: 'fallback' }) - await page.goto('/tasks') - await expect(page.getByRole('button', { name: 'Dismiss all' })).toBeEnabled() - await page.getByRole('button', { name: 'Dismiss all' }).click() - await expect(page.getByRole('dialog')).toHaveCount(1) -}) diff --git a/src-ui/messages.xlf b/src-ui/messages.xlf index c9029fb6e..8296b6e4e 100644 --- a/src-ui/messages.xlf +++ b/src-ui/messages.xlf @@ -333,84 +333,84 @@ 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. src/app/app.component.ts - 145 + 146 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. src/app/app.component.ts - 155 + 153 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. src/app/app.component.ts - 165 + 158 The filtering tools allow you to quickly find documents using various searches, dates, tags, etc. src/app/app.component.ts - 178 + 165 Any combination of filters can be saved as a 'view' which can then be displayed on the dashboard and / or sidebar. src/app/app.component.ts - 189 + 171 Tags, correspondents, document types and storage paths can all be managed using these pages. They can also be created from the document edit view. src/app/app.component.ts - 199 + 176 File Tasks shows you documents that have been consumed, are waiting to be, or may have failed during the process. src/app/app.component.ts - 209 + 184 Check out the settings for various tweaks to the web app, toggle settings for saved views or setup e-mail checking. src/app/app.component.ts - 219 + 192 Thank you! 🙏 src/app/app.component.ts - 229 + 200 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. src/app/app.component.ts - 231 + 202 Lastly, on behalf of every contributor to this community-supported project, thank you for using Paperless-ngx! src/app/app.component.ts - 233 + 204 Initiating upload... src/app/app.component.ts - 289 + 273 @@ -723,7 +723,7 @@ src/app/components/manage/settings/settings.component.ts - 594 + 600 @@ -2013,6 +2013,10 @@ src/app/components/common/input/permissions/permissions-form/permissions-form.component.html 46 + + src/app/components/dashboard/widgets/saved-view-widget/saved-view-widget.component.html + 17 + src/app/components/document-list/document-card-large/document-card-large.component.html 49 @@ -2296,13 +2300,43 @@ src/app/components/document-list/filter-editor/filter-editor.component.ts - 202 + 201 src/app/services/rest/document.service.ts 20 + + View Preview + + src/app/components/dashboard/widgets/saved-view-widget/saved-view-widget.component.html + 19 + + + + Download + + src/app/components/dashboard/widgets/saved-view-widget/saved-view-widget.component.html + 29 + + + src/app/components/document-detail/document-detail.component.html + 19 + + + src/app/components/document-list/bulk-editor/bulk-editor.component.html + 102 + + + src/app/components/document-list/document-card-large/document-card-large.component.html + 64 + + + src/app/components/document-list/document-card-small/document-card-small.component.html + 99 + + Statistics @@ -2482,25 +2516,6 @@ 5,6 - - Download - - src/app/components/document-detail/document-detail.component.html - 19 - - - src/app/components/document-list/bulk-editor/bulk-editor.component.html - 102 - - - src/app/components/document-list/document-card-large/document-card-large.component.html - 64 - - - src/app/components/document-list/document-card-small/document-card-small.component.html - 99 - - Download original @@ -2898,19 +2913,19 @@ src/app/components/manage/settings/settings.component.ts - 694 + 711 src/app/components/manage/settings/settings.component.ts - 754 + 771 src/app/components/manage/settings/settings.component.ts - 821 + 838 src/app/components/manage/settings/settings.component.ts - 884 + 901 @@ -2925,19 +2940,19 @@ src/app/components/manage/settings/settings.component.ts - 696 + 713 src/app/components/manage/settings/settings.component.ts - 756 + 773 src/app/components/manage/settings/settings.component.ts - 823 + 840 src/app/components/manage/settings/settings.component.ts - 886 + 903 @@ -3499,7 +3514,7 @@ src/app/components/document-list/filter-editor/filter-editor.component.ts - 207 + 206 src/app/services/rest/document.service.ts @@ -3625,7 +3640,9 @@ - Correspondent: + Correspondent: src/app/components/document-list/filter-editor/filter-editor.component.ts 118,120 @@ -3639,7 +3656,9 @@ - Document type: + Document type: src/app/components/document-list/filter-editor/filter-editor.component.ts 128,130 @@ -3653,7 +3672,9 @@ - Storage path: + Storage path: src/app/components/document-list/filter-editor/filter-editor.component.ts 138,140 @@ -3667,108 +3688,109 @@ - Tag: + Tag: src/app/components/document-list/filter-editor/filter-editor.component.ts - 146,148 + 146,147 Without any tag src/app/components/document-list/filter-editor/filter-editor.component.ts - 152 + 151 Title: src/app/components/document-list/filter-editor/filter-editor.component.ts - 156 + 155 ASN: src/app/components/document-list/filter-editor/filter-editor.component.ts - 159 + 158 Owner: src/app/components/document-list/filter-editor/filter-editor.component.ts - 162 + 161 Owner not in: src/app/components/document-list/filter-editor/filter-editor.component.ts - 165 + 164 Without an owner src/app/components/document-list/filter-editor/filter-editor.component.ts - 168 + 167 Title & content src/app/components/document-list/filter-editor/filter-editor.component.ts - 205 + 204 Advanced search src/app/components/document-list/filter-editor/filter-editor.component.ts - 210 + 209 More like src/app/components/document-list/filter-editor/filter-editor.component.ts - 216 + 215 equals src/app/components/document-list/filter-editor/filter-editor.component.ts - 235 + 234 is empty src/app/components/document-list/filter-editor/filter-editor.component.ts - 239 + 238 is not empty src/app/components/document-list/filter-editor/filter-editor.component.ts - 243 + 242 greater than src/app/components/document-list/filter-editor/filter-editor.component.ts - 247 + 246 less than src/app/components/document-list/filter-editor/filter-editor.component.ts - 251 + 250 @@ -4471,231 +4493,231 @@ Saved view "" deleted. src/app/components/manage/settings/settings.component.ts - 476 + 482 Settings saved src/app/components/manage/settings/settings.component.ts - 578 + 584 Settings were saved successfully. src/app/components/manage/settings/settings.component.ts - 579 + 585 Settings were saved successfully. Reload is required to apply some changes. src/app/components/manage/settings/settings.component.ts - 583 + 589 Reload now src/app/components/manage/settings/settings.component.ts - 584 + 590 Use system language src/app/components/manage/settings/settings.component.ts - 603 + 609 Use date format of display language src/app/components/manage/settings/settings.component.ts - 610 + 616 Error while storing settings on server. src/app/components/manage/settings/settings.component.ts - 630 + 636 Password has been changed, you will be logged out momentarily. src/app/components/manage/settings/settings.component.ts - 662 + 679 Saved user "". src/app/components/manage/settings/settings.component.ts - 669 + 686 Error saving user. src/app/components/manage/settings/settings.component.ts - 681 + 698 Confirm delete user account src/app/components/manage/settings/settings.component.ts - 692 + 709 This operation will permanently delete this user account. src/app/components/manage/settings/settings.component.ts - 693 + 710 Deleted user src/app/components/manage/settings/settings.component.ts - 702 + 719 Error deleting user. src/app/components/manage/settings/settings.component.ts - 710 + 727 Saved group "". src/app/components/manage/settings/settings.component.ts - 731 + 748 Error saving group. src/app/components/manage/settings/settings.component.ts - 741 + 758 Confirm delete user group src/app/components/manage/settings/settings.component.ts - 752 + 769 This operation will permanently delete this user group. src/app/components/manage/settings/settings.component.ts - 753 + 770 Deleted group src/app/components/manage/settings/settings.component.ts - 762 + 779 Error deleting group. src/app/components/manage/settings/settings.component.ts - 770 + 787 Saved account "". src/app/components/manage/settings/settings.component.ts - 796 + 813 Error saving account. src/app/components/manage/settings/settings.component.ts - 808 + 825 Confirm delete mail account src/app/components/manage/settings/settings.component.ts - 819 + 836 This operation will permanently delete this mail account. src/app/components/manage/settings/settings.component.ts - 820 + 837 Deleted mail account src/app/components/manage/settings/settings.component.ts - 829 + 846 Error deleting mail account. src/app/components/manage/settings/settings.component.ts - 838 + 855 Saved rule "". src/app/components/manage/settings/settings.component.ts - 859 + 876 Error saving rule. src/app/components/manage/settings/settings.component.ts - 871 + 888 Confirm delete mail rule src/app/components/manage/settings/settings.component.ts - 882 + 899 This operation will permanently delete this mail rule. src/app/components/manage/settings/settings.component.ts - 883 + 900 Deleted mail rule src/app/components/manage/settings/settings.component.ts - 892 + 909 Error deleting mail rule. src/app/components/manage/settings/settings.component.ts - 901 + 918 @@ -5083,28 +5105,28 @@ Document already exists. src/app/services/consumer-status.service.ts - 15 + 16 Document with ASN already exists. src/app/services/consumer-status.service.ts - 16 + 17 File not found. src/app/services/consumer-status.service.ts - 17 + 18 Pre-consume script does not exist. src/app/services/consumer-status.service.ts - 18 + 19 Pre-Consume is a term that appears like that in the documentation as well and does not need a specific translation @@ -5112,7 +5134,7 @@ Error while executing pre-consume script. src/app/services/consumer-status.service.ts - 19 + 20 Pre-Consume is a term that appears like that in the documentation as well and does not need a specific translation @@ -5120,7 +5142,7 @@ Post-consume script does not exist. src/app/services/consumer-status.service.ts - 20 + 21 Post-Consume is a term that appears like that in the documentation as well and does not need a specific translation @@ -5128,7 +5150,7 @@ Error while executing post-consume script. src/app/services/consumer-status.service.ts - 21 + 22 Post-Consume is a term that appears like that in the documentation as well and does not need a specific translation @@ -5136,49 +5158,49 @@ Received new file. src/app/services/consumer-status.service.ts - 22 + 23 File type not supported. src/app/services/consumer-status.service.ts - 23 + 24 Processing document... src/app/services/consumer-status.service.ts - 24 + 25 Generating thumbnail... src/app/services/consumer-status.service.ts - 25 + 26 Retrieving date from document... src/app/services/consumer-status.service.ts - 26 + 27 Saving document... src/app/services/consumer-status.service.ts - 27 + 28 Finished. src/app/services/consumer-status.service.ts - 28 + 29 diff --git a/src-ui/package-lock.json b/src-ui/package-lock.json index 8c8b652a9..9bb722c0b 100644 --- a/src-ui/package-lock.json +++ b/src-ui/package-lock.json @@ -8,50 +8,50 @@ "name": "paperless-ui", "version": "0.0.0", "dependencies": { - "@angular/common": "~16.1.3", - "@angular/compiler": "~16.1.3", - "@angular/core": "~16.1.3", - "@angular/forms": "~16.1.3", - "@angular/localize": "~16.1.3", - "@angular/platform-browser": "~16.1.3", - "@angular/platform-browser-dynamic": "~16.1.3", - "@angular/router": "~16.1.3", - "@ng-bootstrap/ng-bootstrap": "^15.0.1", - "@ng-select/ng-select": "^11.0.0", + "@angular/common": "~16.1.7", + "@angular/compiler": "~16.1.7", + "@angular/core": "~16.1.7", + "@angular/forms": "~16.1.7", + "@angular/localize": "~16.1.7", + "@angular/platform-browser": "~16.1.7", + "@angular/platform-browser-dynamic": "~16.1.7", + "@angular/router": "~16.1.7", + "@ng-bootstrap/ng-bootstrap": "^15.1.0", + "@ng-select/ng-select": "^11.1.1", "@ngneat/dirty-check-forms": "^3.0.3", "@popperjs/core": "^2.11.8", - "bootstrap": "^5.3.0", + "bootstrap": "^5.3.1", "file-saver": "^2.0.5", "mime-names": "^1.0.0", "ng2-pdf-viewer": "^9.1.5", "ngx-color": "^9.0.0", "ngx-cookie-service": "^16.0.0", "ngx-file-drop": "^16.0.0", - "ngx-ui-tour-ng-bootstrap": "^13.0.2", + "ngx-ui-tour-ng-bootstrap": "^13.0.3", "rxjs": "^7.8.1", - "tslib": "^2.6.0", + "tslib": "^2.6.1", "uuid": "^9.0.0", "zone.js": "^0.13.0" }, "devDependencies": { "@angular-builders/jest": "16.0.0", - "@angular-devkit/build-angular": "~16.1.3", - "@angular-eslint/builder": "16.0.3", - "@angular-eslint/eslint-plugin": "16.0.3", - "@angular-eslint/eslint-plugin-template": "16.0.3", - "@angular-eslint/schematics": "16.0.3", - "@angular-eslint/template-parser": "16.0.3", - "@angular/cli": "~16.1.3", + "@angular-devkit/build-angular": "~16.1.6", + "@angular-eslint/builder": "16.1.0", + "@angular-eslint/eslint-plugin": "16.1.0", + "@angular-eslint/eslint-plugin-template": "16.1.0", + "@angular-eslint/schematics": "16.1.0", + "@angular-eslint/template-parser": "16.1.0", + "@angular/cli": "~16.1.6", "@angular/compiler-cli": "~16.1.3", - "@playwright/test": "^1.35.1", - "@types/jest": "^29.5.0", - "@types/node": "^20.2.5", - "@typescript-eslint/eslint-plugin": "^5.59.2", - "@typescript-eslint/parser": "^5.59.2", + "@playwright/test": "^1.36.2", + "@types/jest": "^29.5.3", + "@types/node": "^20.4.5", + "@typescript-eslint/eslint-plugin": "^6.2.1", + "@typescript-eslint/parser": "^6.2.1", "concurrently": "^8.1.0", - "eslint": "^8.39.0", - "jest": "29.5.0", - "jest-environment-jsdom": "^29.5.0", + "eslint": "^8.46.0", + "jest": "29.6.2", + "jest-environment-jsdom": "^29.6.2", "jest-preset-angular": "^13.1.1", "jest-websocket-mock": "^2.4.0", "ts-node": "~10.9.1", @@ -104,12 +104,12 @@ } }, "node_modules/@angular-devkit/architect": { - "version": "0.1601.3", - "resolved": "https://registry.npmjs.org/@angular-devkit/architect/-/architect-0.1601.3.tgz", - "integrity": "sha512-HvW51cCEoIYe2mYqcmnm2RZiMMFbFn7iIdsjbCJe7etFhcG+Y3hGDZMh4IFSiQiss+pwPSYOvQY2zwGrndMgLw==", + "version": "0.1601.6", + "resolved": "https://registry.npmjs.org/@angular-devkit/architect/-/architect-0.1601.6.tgz", + "integrity": "sha512-dY+/FNUNrOj+m4iG5/v8N0PfbDmjkjjoy/YkquRHS1yo7fGGDFNqji2552mbtjN6/LwyWDhOO7fxdqppadjnvA==", "dev": true, "dependencies": { - "@angular-devkit/core": "16.1.3", + "@angular-devkit/core": "16.1.6", "rxjs": "7.8.1" }, "engines": { @@ -119,17 +119,17 @@ } }, "node_modules/@angular-devkit/build-angular": { - "version": "16.1.3", - "resolved": "https://registry.npmjs.org/@angular-devkit/build-angular/-/build-angular-16.1.3.tgz", - "integrity": "sha512-1scrdUdKRa9TkJ9jev/KRzFttbLUVACQvVRL0G67nUAdtJ/bQX8eui85axpCNPFihK4ReSW3R4lrgcVC2NUSoA==", + "version": "16.1.6", + "resolved": "https://registry.npmjs.org/@angular-devkit/build-angular/-/build-angular-16.1.6.tgz", + "integrity": "sha512-IEC1tApX8/Qa/RIVmbj0nYbOQ5WGcrkGNJ7D42q4DkIo74XKPzxDRruJE1RCjdZsj8lf4CCCZgSOPBsEI8Zbdw==", "dev": true, "dependencies": { "@ampproject/remapping": "2.2.1", - "@angular-devkit/architect": "0.1601.3", - "@angular-devkit/build-webpack": "0.1601.3", - "@angular-devkit/core": "16.1.3", + "@angular-devkit/architect": "0.1601.6", + "@angular-devkit/build-webpack": "0.1601.6", + "@angular-devkit/core": "16.1.6", "@babel/core": "7.22.5", - "@babel/generator": "7.22.5", + "@babel/generator": "7.22.7", "@babel/helper-annotate-as-pure": "7.22.5", "@babel/helper-split-export-declaration": "7.22.5", "@babel/plugin-proposal-async-generator-functions": "7.20.7", @@ -139,7 +139,7 @@ "@babel/runtime": "7.22.5", "@babel/template": "7.22.5", "@discoveryjs/json-ext": "0.5.7", - "@ngtools/webpack": "16.1.3", + "@ngtools/webpack": "16.1.6", "@vitejs/plugin-basic-ssl": "1.0.1", "ansi-colors": "4.1.3", "autoprefixer": "10.4.14", @@ -247,12 +247,12 @@ "dev": true }, "node_modules/@angular-devkit/build-webpack": { - "version": "0.1601.3", - "resolved": "https://registry.npmjs.org/@angular-devkit/build-webpack/-/build-webpack-0.1601.3.tgz", - "integrity": "sha512-744+72vi/Vx010VxizGgilhpnDCOG29qyhMmu7BkUhtpq8E8eQn2HU3nPpxAqrg3bKVAwD7v3F111MVIhub8kA==", + "version": "0.1601.6", + "resolved": "https://registry.npmjs.org/@angular-devkit/build-webpack/-/build-webpack-0.1601.6.tgz", + "integrity": "sha512-Uz/GjnhgAqSDPxrO4HP/tHNGPPZU3tEShtAVKyAypBl20bh2Aw1L5D+lCZi/Uq3Sh2JTPD9/M0ei2u9CMLhLDw==", "dev": true, "dependencies": { - "@angular-devkit/architect": "0.1601.3", + "@angular-devkit/architect": "0.1601.6", "rxjs": "7.8.1" }, "engines": { @@ -266,9 +266,9 @@ } }, "node_modules/@angular-devkit/core": { - "version": "16.1.3", - "resolved": "https://registry.npmjs.org/@angular-devkit/core/-/core-16.1.3.tgz", - "integrity": "sha512-cFhNdJHumNMZGD3NYxOtNuMGRQXeDnKbwvK+IJmKAttXt8na6EvURR/ZxZOI7rl/YRVX+vcNSdtXz3hE6g+Isw==", + "version": "16.1.6", + "resolved": "https://registry.npmjs.org/@angular-devkit/core/-/core-16.1.6.tgz", + "integrity": "sha512-3OjtrPWvsqVkMBwqPeE65ccCIw56FooNpVVAJ0XwhVQv5mA81pmbCzU7JsR6U449ZT7O4cQblzZMQvWvx74HCg==", "dev": true, "dependencies": { "ajv": "8.12.0", @@ -292,12 +292,12 @@ } }, "node_modules/@angular-devkit/schematics": { - "version": "16.1.3", - "resolved": "https://registry.npmjs.org/@angular-devkit/schematics/-/schematics-16.1.3.tgz", - "integrity": "sha512-hWEuQnfQOgcSs4YX6iF4QR/34ROeSPaMi7lQOYg33hStg+pnk/JDdIU0f2nrIIz3t0jqAj+5VXVLBJvOCd84vg==", + "version": "16.1.6", + "resolved": "https://registry.npmjs.org/@angular-devkit/schematics/-/schematics-16.1.6.tgz", + "integrity": "sha512-KA8P78gaS76HMHGBOM8JHJXWLOxCIShYVB2Un/Cu6z3jVODvXq+ILZUc1Y0RsAce/vsl2wf8qpoh5Lku9KJHUQ==", "dev": true, "dependencies": { - "@angular-devkit/core": "16.1.3", + "@angular-devkit/core": "16.1.6", "jsonc-parser": "3.2.0", "magic-string": "0.30.0", "ora": "5.4.1", @@ -310,13 +310,13 @@ } }, "node_modules/@angular-eslint/builder": { - "version": "16.0.3", - "resolved": "https://registry.npmjs.org/@angular-eslint/builder/-/builder-16.0.3.tgz", - "integrity": "sha512-pv/CrnOHHOnBqhyBmqUPsIHKXOHYMJztxYJ83tjxeXL5Moyu5e6CBMIQ58UtqmgWfEIA3n7owYy9KvHTJcemyQ==", + "version": "16.1.0", + "resolved": "https://registry.npmjs.org/@angular-eslint/builder/-/builder-16.1.0.tgz", + "integrity": "sha512-KIkE2SI1twFKoCiF/k2VR3ojOcc7TD1xPyY4kbUrx/Gxp+XEzar7O29I/ztzL4eHPBM+Uh3/NwS/jvjjBxjgAg==", "dev": true, "dependencies": { - "@nx/devkit": "16.2.2", - "nx": "16.2.2" + "@nx/devkit": "16.5.1", + "nx": "16.5.1" }, "peerDependencies": { "eslint": "^7.20.0 || ^8.0.0", @@ -324,19 +324,19 @@ } }, "node_modules/@angular-eslint/bundled-angular-compiler": { - "version": "16.0.3", - "resolved": "https://registry.npmjs.org/@angular-eslint/bundled-angular-compiler/-/bundled-angular-compiler-16.0.3.tgz", - "integrity": "sha512-8zwY6ustiPXBEF3+jELKVwGk6j2HJn7GHbqAhDFR02YiE27iRMSGTHIAWGs6ZI7F1JgfrIsOHrUgzC1x95K6rg==", + "version": "16.1.0", + "resolved": "https://registry.npmjs.org/@angular-eslint/bundled-angular-compiler/-/bundled-angular-compiler-16.1.0.tgz", + "integrity": "sha512-5EFAWXuFJADr3imo/ZYshY8s0K7U7wyysnE2LXnpT9PAi5rmkzt70UNZNRuamCbXr4tdIiu+fXWOj7tUuJKnnw==", "dev": true }, "node_modules/@angular-eslint/eslint-plugin": { - "version": "16.0.3", - "resolved": "https://registry.npmjs.org/@angular-eslint/eslint-plugin/-/eslint-plugin-16.0.3.tgz", - "integrity": "sha512-1c+dFytcQDOA2wJ8/rtydMV6UYq1BgVfOcBXOr0WJxC9g8Cad9czcUOkW41WGrTp5kICMliV0ypH5eEaCM2WDQ==", + "version": "16.1.0", + "resolved": "https://registry.npmjs.org/@angular-eslint/eslint-plugin/-/eslint-plugin-16.1.0.tgz", + "integrity": "sha512-BFzzJJlgQgWc8avdSBkaDWAzNSUqcwWy0L1iZSBdXGoIOxj72kLbwe99emb8M+rUfCveljQkeM2pcYu8XLbJIA==", "dev": true, "dependencies": { - "@angular-eslint/utils": "16.0.3", - "@typescript-eslint/utils": "5.59.7" + "@angular-eslint/utils": "16.1.0", + "@typescript-eslint/utils": "5.62.0" }, "peerDependencies": { "eslint": "^7.20.0 || ^8.0.0", @@ -344,16 +344,16 @@ } }, "node_modules/@angular-eslint/eslint-plugin-template": { - "version": "16.0.3", - "resolved": "https://registry.npmjs.org/@angular-eslint/eslint-plugin-template/-/eslint-plugin-template-16.0.3.tgz", - "integrity": "sha512-OKTMWOjC7F5tdv7gm2tlmgyr/uVyS1RWJZn4X/6D6p0kOpiDXmajtbYHD5tzbshX2Ep62Nt+rg8+1XGHrU0ScA==", + "version": "16.1.0", + "resolved": "https://registry.npmjs.org/@angular-eslint/eslint-plugin-template/-/eslint-plugin-template-16.1.0.tgz", + "integrity": "sha512-wQHWR5vqWGgO7mqoG5ixXeplIlz/OmxBJE9QMLPTZE8GdaTx8+F/5J37OWh84zCpD3mOa/FHYZxBDm2MfUmA1Q==", "dev": true, "dependencies": { - "@angular-eslint/bundled-angular-compiler": "16.0.3", - "@angular-eslint/utils": "16.0.3", - "@typescript-eslint/type-utils": "5.59.7", - "@typescript-eslint/utils": "5.59.7", - "aria-query": "5.1.3", + "@angular-eslint/bundled-angular-compiler": "16.1.0", + "@angular-eslint/utils": "16.1.0", + "@typescript-eslint/type-utils": "5.62.0", + "@typescript-eslint/utils": "5.62.0", + "aria-query": "5.3.0", "axobject-query": "3.1.1" }, "peerDependencies": { @@ -361,17 +361,289 @@ "typescript": "*" } }, - "node_modules/@angular-eslint/schematics": { - "version": "16.0.3", - "resolved": "https://registry.npmjs.org/@angular-eslint/schematics/-/schematics-16.0.3.tgz", - "integrity": "sha512-vRdSY0ovE+wfTvYeguPp/QAxvGejLADO8CzJkas0PxdCQiyLuTscKsYE82XcvX2kitMexvH71lNF0ggnGoMRXA==", + "node_modules/@angular-eslint/eslint-plugin-template/node_modules/@angular-eslint/utils": { + "version": "16.1.0", + "resolved": "https://registry.npmjs.org/@angular-eslint/utils/-/utils-16.1.0.tgz", + "integrity": "sha512-u5XscYUq1F/7RuwyVIV2a280QL27lyQz434VYR+Np/oO21NGj5jxoRKb55xhXT9EFVs5Sy4JYeEUp6S75J/cUw==", "dev": true, "dependencies": { - "@angular-eslint/eslint-plugin": "16.0.3", - "@angular-eslint/eslint-plugin-template": "16.0.3", - "@nx/devkit": "16.2.2", + "@angular-eslint/bundled-angular-compiler": "16.1.0", + "@typescript-eslint/utils": "5.62.0" + }, + "peerDependencies": { + "eslint": "^7.20.0 || ^8.0.0", + "typescript": "*" + } + }, + "node_modules/@angular-eslint/eslint-plugin-template/node_modules/@typescript-eslint/scope-manager": { + "version": "5.62.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-5.62.0.tgz", + "integrity": "sha512-VXuvVvZeQCQb5Zgf4HAxc04q5j+WrNAtNh9OwCsCgpKqESMTu3tF/jhZ3xG6T4NZwWl65Bg8KuS2uEvhSfLl0w==", + "dev": true, + "dependencies": { + "@typescript-eslint/types": "5.62.0", + "@typescript-eslint/visitor-keys": "5.62.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "node_modules/@angular-eslint/eslint-plugin-template/node_modules/@typescript-eslint/types": { + "version": "5.62.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-5.62.0.tgz", + "integrity": "sha512-87NVngcbVXUahrRTqIK27gD2t5Cu1yuCXxbLcFtCzZGlfyVWWh8mLHkoxzjsB6DDNnvdL+fW8MiwPEJyGJQDgQ==", + "dev": true, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "node_modules/@angular-eslint/eslint-plugin-template/node_modules/@typescript-eslint/typescript-estree": { + "version": "5.62.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-5.62.0.tgz", + "integrity": "sha512-CmcQ6uY7b9y694lKdRB8FEel7JbU/40iSAPomu++SjLMntB+2Leay2LO6i8VnJk58MtE9/nQSFIH6jpyRWyYzA==", + "dev": true, + "dependencies": { + "@typescript-eslint/types": "5.62.0", + "@typescript-eslint/visitor-keys": "5.62.0", + "debug": "^4.3.4", + "globby": "^11.1.0", + "is-glob": "^4.0.3", + "semver": "^7.3.7", + "tsutils": "^3.21.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/@angular-eslint/eslint-plugin-template/node_modules/@typescript-eslint/utils": { + "version": "5.62.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-5.62.0.tgz", + "integrity": "sha512-n8oxjeb5aIbPFEtmQxQYOLI0i9n5ySBEY/ZEHHZqKQSFnxio1rv6dthascc9dLuwrL0RC5mPCxB7vnAVGAYWAQ==", + "dev": true, + "dependencies": { + "@eslint-community/eslint-utils": "^4.2.0", + "@types/json-schema": "^7.0.9", + "@types/semver": "^7.3.12", + "@typescript-eslint/scope-manager": "5.62.0", + "@typescript-eslint/types": "5.62.0", + "@typescript-eslint/typescript-estree": "5.62.0", + "eslint-scope": "^5.1.1", + "semver": "^7.3.7" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "eslint": "^6.0.0 || ^7.0.0 || ^8.0.0" + } + }, + "node_modules/@angular-eslint/eslint-plugin-template/node_modules/@typescript-eslint/visitor-keys": { + "version": "5.62.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-5.62.0.tgz", + "integrity": "sha512-07ny+LHRzQXepkGg6w0mFY41fVUNBrL2Roj/++7V1txKugfjm/Ci/qSND03r2RhlJhJYMcTn9AhhSSqQp0Ysyw==", + "dev": true, + "dependencies": { + "@typescript-eslint/types": "5.62.0", + "eslint-visitor-keys": "^3.3.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "node_modules/@angular-eslint/eslint-plugin-template/node_modules/eslint-scope": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz", + "integrity": "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==", + "dev": true, + "dependencies": { + "esrecurse": "^4.3.0", + "estraverse": "^4.1.1" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/@angular-eslint/eslint-plugin-template/node_modules/estraverse": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", + "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", + "dev": true, + "engines": { + "node": ">=4.0" + } + }, + "node_modules/@angular-eslint/eslint-plugin/node_modules/@angular-eslint/utils": { + "version": "16.1.0", + "resolved": "https://registry.npmjs.org/@angular-eslint/utils/-/utils-16.1.0.tgz", + "integrity": "sha512-u5XscYUq1F/7RuwyVIV2a280QL27lyQz434VYR+Np/oO21NGj5jxoRKb55xhXT9EFVs5Sy4JYeEUp6S75J/cUw==", + "dev": true, + "dependencies": { + "@angular-eslint/bundled-angular-compiler": "16.1.0", + "@typescript-eslint/utils": "5.62.0" + }, + "peerDependencies": { + "eslint": "^7.20.0 || ^8.0.0", + "typescript": "*" + } + }, + "node_modules/@angular-eslint/eslint-plugin/node_modules/@typescript-eslint/scope-manager": { + "version": "5.62.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-5.62.0.tgz", + "integrity": "sha512-VXuvVvZeQCQb5Zgf4HAxc04q5j+WrNAtNh9OwCsCgpKqESMTu3tF/jhZ3xG6T4NZwWl65Bg8KuS2uEvhSfLl0w==", + "dev": true, + "dependencies": { + "@typescript-eslint/types": "5.62.0", + "@typescript-eslint/visitor-keys": "5.62.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "node_modules/@angular-eslint/eslint-plugin/node_modules/@typescript-eslint/types": { + "version": "5.62.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-5.62.0.tgz", + "integrity": "sha512-87NVngcbVXUahrRTqIK27gD2t5Cu1yuCXxbLcFtCzZGlfyVWWh8mLHkoxzjsB6DDNnvdL+fW8MiwPEJyGJQDgQ==", + "dev": true, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "node_modules/@angular-eslint/eslint-plugin/node_modules/@typescript-eslint/typescript-estree": { + "version": "5.62.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-5.62.0.tgz", + "integrity": "sha512-CmcQ6uY7b9y694lKdRB8FEel7JbU/40iSAPomu++SjLMntB+2Leay2LO6i8VnJk58MtE9/nQSFIH6jpyRWyYzA==", + "dev": true, + "dependencies": { + "@typescript-eslint/types": "5.62.0", + "@typescript-eslint/visitor-keys": "5.62.0", + "debug": "^4.3.4", + "globby": "^11.1.0", + "is-glob": "^4.0.3", + "semver": "^7.3.7", + "tsutils": "^3.21.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/@angular-eslint/eslint-plugin/node_modules/@typescript-eslint/utils": { + "version": "5.62.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-5.62.0.tgz", + "integrity": "sha512-n8oxjeb5aIbPFEtmQxQYOLI0i9n5ySBEY/ZEHHZqKQSFnxio1rv6dthascc9dLuwrL0RC5mPCxB7vnAVGAYWAQ==", + "dev": true, + "dependencies": { + "@eslint-community/eslint-utils": "^4.2.0", + "@types/json-schema": "^7.0.9", + "@types/semver": "^7.3.12", + "@typescript-eslint/scope-manager": "5.62.0", + "@typescript-eslint/types": "5.62.0", + "@typescript-eslint/typescript-estree": "5.62.0", + "eslint-scope": "^5.1.1", + "semver": "^7.3.7" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "eslint": "^6.0.0 || ^7.0.0 || ^8.0.0" + } + }, + "node_modules/@angular-eslint/eslint-plugin/node_modules/@typescript-eslint/visitor-keys": { + "version": "5.62.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-5.62.0.tgz", + "integrity": "sha512-07ny+LHRzQXepkGg6w0mFY41fVUNBrL2Roj/++7V1txKugfjm/Ci/qSND03r2RhlJhJYMcTn9AhhSSqQp0Ysyw==", + "dev": true, + "dependencies": { + "@typescript-eslint/types": "5.62.0", + "eslint-visitor-keys": "^3.3.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "node_modules/@angular-eslint/eslint-plugin/node_modules/eslint-scope": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz", + "integrity": "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==", + "dev": true, + "dependencies": { + "esrecurse": "^4.3.0", + "estraverse": "^4.1.1" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/@angular-eslint/eslint-plugin/node_modules/estraverse": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", + "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", + "dev": true, + "engines": { + "node": ">=4.0" + } + }, + "node_modules/@angular-eslint/schematics": { + "version": "16.1.0", + "resolved": "https://registry.npmjs.org/@angular-eslint/schematics/-/schematics-16.1.0.tgz", + "integrity": "sha512-L1tmP3R2krHyveaRXAvn/SeDoBFNpS1VtPPrzZm1NYr1qPcAxf3NtG2nnoyVFu6WZGt59ZGHNQ/dZxnXvm0UGg==", + "dev": true, + "dependencies": { + "@angular-eslint/eslint-plugin": "16.1.0", + "@angular-eslint/eslint-plugin-template": "16.1.0", + "@nx/devkit": "16.5.1", "ignore": "5.2.4", - "nx": "16.2.2", + "nx": "16.5.1", "strip-json-comments": "3.1.1", "tmp": "0.2.1" }, @@ -380,12 +652,12 @@ } }, "node_modules/@angular-eslint/template-parser": { - "version": "16.0.3", - "resolved": "https://registry.npmjs.org/@angular-eslint/template-parser/-/template-parser-16.0.3.tgz", - "integrity": "sha512-IAWdwp/S9QC3EMiVxSS0E3ABy9PSidN3PW0Ll2EtM3mzXMYlpZXmxqd+B1xV/xKWzhk1Mp04QX8hHfG6Vq+qaQ==", + "version": "16.1.0", + "resolved": "https://registry.npmjs.org/@angular-eslint/template-parser/-/template-parser-16.1.0.tgz", + "integrity": "sha512-DOQtzVehtbO7+BQ+FMOXRsxGRjHb3ve6M+S4qASKTiI+twtONjRODcHezD3N4PDkjpKPbOnk7YnFsHur5csUNw==", "dev": true, "dependencies": { - "@angular-eslint/bundled-angular-compiler": "16.0.3", + "@angular-eslint/bundled-angular-compiler": "16.1.0", "eslint-scope": "^7.0.0" }, "peerDependencies": { @@ -393,30 +665,16 @@ "typescript": "*" } }, - "node_modules/@angular-eslint/utils": { - "version": "16.0.3", - "resolved": "https://registry.npmjs.org/@angular-eslint/utils/-/utils-16.0.3.tgz", - "integrity": "sha512-QsbUVHJLk+fE08/D4y3wOyGk1iX2LVSygw+uzilbaAXfjD5/c0Ei5FbVx2mMYPk+aOl4yrvGQW3dmetMiAR0MQ==", - "dev": true, - "dependencies": { - "@angular-eslint/bundled-angular-compiler": "16.0.3", - "@typescript-eslint/utils": "5.59.7" - }, - "peerDependencies": { - "eslint": "^7.20.0 || ^8.0.0", - "typescript": "*" - } - }, "node_modules/@angular/cli": { - "version": "16.1.3", - "resolved": "https://registry.npmjs.org/@angular/cli/-/cli-16.1.3.tgz", - "integrity": "sha512-D0gU12z/N2oJ+s6pggAnWYrTUZ+2duGb3Y5oUyClsubz7JWpAwHjSZpb8exPUrgYhr+qIEMGO685y1JazJQ2tA==", + "version": "16.1.6", + "resolved": "https://registry.npmjs.org/@angular/cli/-/cli-16.1.6.tgz", + "integrity": "sha512-yXVgUKMXxlAHkhc6xk3ljR7TXpMLBykyu8do+ooSP08VKEQnWjTdVgrcOHd0n5w9YHXUQgBSmjDKxtQaBmvyZQ==", "dev": true, "dependencies": { - "@angular-devkit/architect": "0.1601.3", - "@angular-devkit/core": "16.1.3", - "@angular-devkit/schematics": "16.1.3", - "@schematics/angular": "16.1.3", + "@angular-devkit/architect": "0.1601.6", + "@angular-devkit/core": "16.1.6", + "@angular-devkit/schematics": "16.1.6", + "@schematics/angular": "16.1.6", "@yarnpkg/lockfile": "1.1.0", "ansi-colors": "4.1.3", "ini": "4.1.1", @@ -442,9 +700,9 @@ } }, "node_modules/@angular/common": { - "version": "16.1.3", - "resolved": "https://registry.npmjs.org/@angular/common/-/common-16.1.3.tgz", - "integrity": "sha512-ZzJ6EwQHUkiZYV0zH/UxyUYW5uxomsyk7tdtqZIxAR5m2ktYkQ5XlqgPjBO8voF54Rs5Ot43RkPCLesbZyJDsw==", + "version": "16.1.7", + "resolved": "https://registry.npmjs.org/@angular/common/-/common-16.1.7.tgz", + "integrity": "sha512-7WwYwtJjuJtUkutB+aMCvtV5zxa43T4x+kqT+kS4KnUmLv5KdrGPxcS+/7YUuKEELWp1SG032UTwGPX0DXxH4g==", "dependencies": { "tslib": "^2.3.0" }, @@ -452,14 +710,14 @@ "node": "^16.14.0 || >=18.10.0" }, "peerDependencies": { - "@angular/core": "16.1.3", + "@angular/core": "16.1.7", "rxjs": "^6.5.3 || ^7.4.0" } }, "node_modules/@angular/compiler": { - "version": "16.1.3", - "resolved": "https://registry.npmjs.org/@angular/compiler/-/compiler-16.1.3.tgz", - "integrity": "sha512-7Ckvssk9+s5xLyXvp72IwAw5vd/Osa3tR6oiQatdbw+O3XjLO04QycoGXwkp/fYVexGsjFyOn6QJ5n1F/PYPbQ==", + "version": "16.1.7", + "resolved": "https://registry.npmjs.org/@angular/compiler/-/compiler-16.1.7.tgz", + "integrity": "sha512-93nbMFPSpKNfUyuRvEQxPdYLU6g25oZ4Gp7ewzNLyDHIbTQv6FwsthHfgPigPJJUUyKak6Gr3koFsgk7Dl3LAA==", "dependencies": { "tslib": "^2.3.0" }, @@ -467,7 +725,7 @@ "node": "^16.14.0 || >=18.10.0" }, "peerDependencies": { - "@angular/core": "16.1.3" + "@angular/core": "16.1.7" }, "peerDependenciesMeta": { "@angular/core": { @@ -476,9 +734,9 @@ } }, "node_modules/@angular/compiler-cli": { - "version": "16.1.3", - "resolved": "https://registry.npmjs.org/@angular/compiler-cli/-/compiler-cli-16.1.3.tgz", - "integrity": "sha512-aUqnIV9rRTBNgiQRS0Gv6lhghaGj1vpVRyXgiE4VnTR9uBONSsGKMNALYBBhXRTSk2e0cvutt0ubLgmNpdyWyQ==", + "version": "16.1.7", + "resolved": "https://registry.npmjs.org/@angular/compiler-cli/-/compiler-cli-16.1.7.tgz", + "integrity": "sha512-6iuogfVrbCh6o4hWbNCClsLQdLtlXiaNc72LGz5LMXI0TOwKVlRXhbzhiQeLS0/nsYIdHFbgyr1aepI2wQA3mQ==", "dependencies": { "@babel/core": "7.22.5", "@jridgewell/sourcemap-codec": "^1.4.14", @@ -498,14 +756,14 @@ "node": "^16.14.0 || >=18.10.0" }, "peerDependencies": { - "@angular/compiler": "16.1.3", + "@angular/compiler": "16.1.7", "typescript": ">=4.9.3 <5.2" } }, "node_modules/@angular/core": { - "version": "16.1.3", - "resolved": "https://registry.npmjs.org/@angular/core/-/core-16.1.3.tgz", - "integrity": "sha512-yhRo9hVS8KhfcEgzciWuRWF4Pnnko98bmSJTqd7u8Kys6z3Uj0qgXMssXHIPUALe3mQKjVkdSZPLIZ9/CaVn/Q==", + "version": "16.1.7", + "resolved": "https://registry.npmjs.org/@angular/core/-/core-16.1.7.tgz", + "integrity": "sha512-Wl5BR9X1xnV7Z9v/MNVANhymuTKAuRv4etr4rRgaC5NbbJSuFM4y+mg4yVI4wmrYJo0gKRcV9+2mHaePr41fTg==", "dependencies": { "tslib": "^2.3.0" }, @@ -518,9 +776,9 @@ } }, "node_modules/@angular/forms": { - "version": "16.1.3", - "resolved": "https://registry.npmjs.org/@angular/forms/-/forms-16.1.3.tgz", - "integrity": "sha512-9tJHgoi/Jmeo30zfnReVZWFcd1WthR+QwYUNwPev+ys58u1mB0cDGORvROySmC2YUyXFSpXt8sxwyWCkYvaV2w==", + "version": "16.1.7", + "resolved": "https://registry.npmjs.org/@angular/forms/-/forms-16.1.7.tgz", + "integrity": "sha512-AZ6oCIAS2JwH7rJiTOj2uKl1eykiDP98y0trgQ/42+zzpOQZyZAjXrtdqHkVUXMc1PFf5NmYioz19Muj1p+Ttg==", "dependencies": { "tslib": "^2.3.0" }, @@ -528,19 +786,19 @@ "node": "^16.14.0 || >=18.10.0" }, "peerDependencies": { - "@angular/common": "16.1.3", - "@angular/core": "16.1.3", - "@angular/platform-browser": "16.1.3", + "@angular/common": "16.1.7", + "@angular/core": "16.1.7", + "@angular/platform-browser": "16.1.7", "rxjs": "^6.5.3 || ^7.4.0" } }, "node_modules/@angular/localize": { - "version": "16.1.3", - "resolved": "https://registry.npmjs.org/@angular/localize/-/localize-16.1.3.tgz", - "integrity": "sha512-tLn1eo8WjuH/IDiPxZYw2HFLm3vo+VJ/hjhxFiEdJBIeUyickGXu58o8hO3M1ir51IAyMLFbWEkCRH3e6sAQxA==", + "version": "16.1.7", + "resolved": "https://registry.npmjs.org/@angular/localize/-/localize-16.1.7.tgz", + "integrity": "sha512-xxFwdu082rikBAQXshA8akc96lKFOusgOwa5kUh2m+d8h/Hp9sOl4nOtVuHqMLz/h1OJIpskoA22EasQaccaHg==", "dependencies": { "@babel/core": "7.22.5", - "fast-glob": "3.2.12", + "fast-glob": "3.3.0", "yargs": "^17.2.1" }, "bin": { @@ -552,14 +810,29 @@ "node": "^16.14.0 || >=18.10.0" }, "peerDependencies": { - "@angular/compiler": "16.1.3", - "@angular/compiler-cli": "16.1.3" + "@angular/compiler": "16.1.7", + "@angular/compiler-cli": "16.1.7" + } + }, + "node_modules/@angular/localize/node_modules/fast-glob": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.0.tgz", + "integrity": "sha512-ChDuvbOypPuNjO8yIDf36x7BlZX1smcUMTTcyoIjycexOxd6DFsKsg21qVBzEmr3G7fUKIRy2/psii+CIUt7FA==", + "dependencies": { + "@nodelib/fs.stat": "^2.0.2", + "@nodelib/fs.walk": "^1.2.3", + "glob-parent": "^5.1.2", + "merge2": "^1.3.0", + "micromatch": "^4.0.4" + }, + "engines": { + "node": ">=8.6.0" } }, "node_modules/@angular/platform-browser": { - "version": "16.1.3", - "resolved": "https://registry.npmjs.org/@angular/platform-browser/-/platform-browser-16.1.3.tgz", - "integrity": "sha512-qZA6Lua2fpBe+KD/QArY/4hilypSZFcTcJsPjZwIzo5pavXqYDI8BVghwh5dcZoUa56hVRDJjv+XW6kl8m9Tdw==", + "version": "16.1.7", + "resolved": "https://registry.npmjs.org/@angular/platform-browser/-/platform-browser-16.1.7.tgz", + "integrity": "sha512-AjdUUv5+v50cclHPsKVVdNRdCQZJMGNKmvxyLgeGj2hs61lGoJxBYcYqPre2PpM0SvezNJBreUvjwqM3ttOjng==", "dependencies": { "tslib": "^2.3.0" }, @@ -567,9 +840,9 @@ "node": "^16.14.0 || >=18.10.0" }, "peerDependencies": { - "@angular/animations": "16.1.3", - "@angular/common": "16.1.3", - "@angular/core": "16.1.3" + "@angular/animations": "16.1.7", + "@angular/common": "16.1.7", + "@angular/core": "16.1.7" }, "peerDependenciesMeta": { "@angular/animations": { @@ -578,9 +851,9 @@ } }, "node_modules/@angular/platform-browser-dynamic": { - "version": "16.1.3", - "resolved": "https://registry.npmjs.org/@angular/platform-browser-dynamic/-/platform-browser-dynamic-16.1.3.tgz", - "integrity": "sha512-UHxSWpPB5+FSv8zm8T+4ZikLqyy+VE6GlOLp/DdgEz77j81rz2C1pMqozwTnVbD16XbI4rhTp+RFY3C9ArWOtw==", + "version": "16.1.7", + "resolved": "https://registry.npmjs.org/@angular/platform-browser-dynamic/-/platform-browser-dynamic-16.1.7.tgz", + "integrity": "sha512-xoT4wDl7Kurg2N5gcLNmkvqYx14xnYwa2Zm1ZIOM7kYMRXiAg1+XBzaxFXog0fCCs/lqUKUwaNn32YpLKwMNaw==", "dependencies": { "tslib": "^2.3.0" }, @@ -588,16 +861,16 @@ "node": "^16.14.0 || >=18.10.0" }, "peerDependencies": { - "@angular/common": "16.1.3", - "@angular/compiler": "16.1.3", - "@angular/core": "16.1.3", - "@angular/platform-browser": "16.1.3" + "@angular/common": "16.1.7", + "@angular/compiler": "16.1.7", + "@angular/core": "16.1.7", + "@angular/platform-browser": "16.1.7" } }, "node_modules/@angular/router": { - "version": "16.1.3", - "resolved": "https://registry.npmjs.org/@angular/router/-/router-16.1.3.tgz", - "integrity": "sha512-bkn8cWGBKKZidDaP+R7g/S/6miSfH8iP24d2k86Awo+vaO+7G/5WWGfKJMKK8UNM/A5ueX6ugAZrMHpQ9e6Y4w==", + "version": "16.1.7", + "resolved": "https://registry.npmjs.org/@angular/router/-/router-16.1.7.tgz", + "integrity": "sha512-nzjuAEAXLktA3puvSae54noAHEiuizNTvaOpuvQYHfvZF27QMW28XlC33+vDhckWjSD02K7Fb2+AELkOJhUM5Q==", "dependencies": { "tslib": "^2.3.0" }, @@ -605,9 +878,9 @@ "node": "^16.14.0 || >=18.10.0" }, "peerDependencies": { - "@angular/common": "16.1.3", - "@angular/core": "16.1.3", - "@angular/platform-browser": "16.1.3", + "@angular/common": "16.1.7", + "@angular/core": "16.1.7", + "@angular/platform-browser": "16.1.7", "rxjs": "^6.5.3 || ^7.4.0" } }, @@ -666,17 +939,17 @@ } }, "node_modules/@babel/core/node_modules/semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", "bin": { "semver": "bin/semver.js" } }, "node_modules/@babel/generator": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.22.5.tgz", - "integrity": "sha512-+lcUbnTRhd0jOewtFSedLyiPsD5tswKkbgcezOqqWFUVNEwoUTlpPOBmvhG7OXWLR4jMdv0czPGH5XbflnD1EA==", + "version": "7.22.7", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.22.7.tgz", + "integrity": "sha512-p+jPjMG+SI8yvIaxGgeW24u7q9+5+TGpZh8/CuB7RhBKd7RCy8FayNEFNNKrNK/eUcY/4ExQqLmyrvBXKsIcwQ==", "dependencies": { "@babel/types": "^7.22.5", "@jridgewell/gen-mapping": "^0.3.2", @@ -730,9 +1003,9 @@ } }, "node_modules/@babel/helper-compilation-targets/node_modules/semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", "bin": { "semver": "bin/semver.js" } @@ -761,9 +1034,9 @@ } }, "node_modules/@babel/helper-create-class-features-plugin/node_modules/semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", "dev": true, "bin": { "semver": "bin/semver.js" @@ -787,9 +1060,9 @@ } }, "node_modules/@babel/helper-create-regexp-features-plugin/node_modules/semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", "dev": true, "bin": { "semver": "bin/semver.js" @@ -813,9 +1086,9 @@ } }, "node_modules/@babel/helper-define-polyfill-provider/node_modules/semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", "dev": true, "bin": { "semver": "bin/semver.js" @@ -2068,9 +2341,9 @@ } }, "node_modules/@babel/plugin-transform-runtime/node_modules/semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", "dev": true, "bin": { "semver": "bin/semver.js" @@ -2310,9 +2583,9 @@ } }, "node_modules/@babel/preset-env/node_modules/semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", "dev": true, "bin": { "semver": "bin/semver.js" @@ -2811,18 +3084,18 @@ } }, "node_modules/@eslint-community/regexpp": { - "version": "4.5.1", - "resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.5.1.tgz", - "integrity": "sha512-Z5ba73P98O1KUYCCJTUeVpja9RcGoMdncZ6T49FCUl2lN38JtCJ+3WgIDBv0AuY4WChU5PmtJmOCTlN6FZTFKQ==", + "version": "4.6.2", + "resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.6.2.tgz", + "integrity": "sha512-pPTNuaAG3QMH+buKyBIGJs3g/S5y0caxw0ygM3YyE6yJFySwiGGSzA+mM3KJ8QQvzeLh3blwgSonkFjgQdxzMw==", "dev": true, "engines": { "node": "^12.0.0 || ^14.0.0 || >=16.0.0" } }, "node_modules/@eslint/eslintrc": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-2.1.0.tgz", - "integrity": "sha512-Lj7DECXqIVCqnqjjHMPna4vn6GJcMgul/wuS0je9OZ9gsL0zzDpKPVtcG1HaDVc+9y+qgXneTeUMbCqXJNpH1A==", + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-2.1.1.tgz", + "integrity": "sha512-9t7ZA7NGGK8ckelF0PQCfcxIUzs1Md5rrO6U/c+FIQNanea5UZC0wqKXH4vHBccmu4ZJgZ2idtPeW7+Q2npOEA==", "dev": true, "dependencies": { "ajv": "^6.12.4", @@ -2910,9 +3183,9 @@ } }, "node_modules/@eslint/js": { - "version": "8.44.0", - "resolved": "https://registry.npmjs.org/@eslint/js/-/js-8.44.0.tgz", - "integrity": "sha512-Ag+9YM4ocKQx9AarydN0KY2j0ErMHNIocPDrVo8zAE44xLTjEtz81OdR68/cydGtk6m6jDb5Za3r2useMzYmSw==", + "version": "8.46.0", + "resolved": "https://registry.npmjs.org/@eslint/js/-/js-8.46.0.tgz", + "integrity": "sha512-a8TLtmPi8xzPkCbp/OGFUo5yhRkHM2Ko9kOWP4znJr0WAhWyThaw3PnwX4vOTWOAMsV2uRt32PPDcEz63esSaA==", "dev": true, "engines": { "node": "^12.22.0 || ^14.17.0 || >=16.0.0" @@ -3088,16 +3361,16 @@ } }, "node_modules/@jest/console": { - "version": "29.5.0", - "resolved": "https://registry.npmjs.org/@jest/console/-/console-29.5.0.tgz", - "integrity": "sha512-NEpkObxPwyw/XxZVLPmAGKE89IQRp4puc6IQRPru6JKd1M3fW9v1xM1AnzIJE65hbCkzQAdnL8P47e9hzhiYLQ==", + "version": "29.6.2", + "resolved": "https://registry.npmjs.org/@jest/console/-/console-29.6.2.tgz", + "integrity": "sha512-0N0yZof5hi44HAR2pPS+ikJ3nzKNoZdVu8FffRf3wy47I7Dm7etk/3KetMdRUqzVd16V4O2m2ISpNTbnIuqy1w==", "dev": true, "dependencies": { - "@jest/types": "^29.5.0", + "@jest/types": "^29.6.1", "@types/node": "*", "chalk": "^4.0.0", - "jest-message-util": "^29.5.0", - "jest-util": "^29.5.0", + "jest-message-util": "^29.6.2", + "jest-util": "^29.6.2", "slash": "^3.0.0" }, "engines": { @@ -3175,16 +3448,16 @@ } }, "node_modules/@jest/core": { - "version": "29.5.0", - "resolved": "https://registry.npmjs.org/@jest/core/-/core-29.5.0.tgz", - "integrity": "sha512-28UzQc7ulUrOQw1IsN/kv1QES3q2kkbl/wGslyhAclqZ/8cMdB5M68BffkIdSJgKBUt50d3hbwJ92XESlE7LiQ==", + "version": "29.6.2", + "resolved": "https://registry.npmjs.org/@jest/core/-/core-29.6.2.tgz", + "integrity": "sha512-Oj+5B+sDMiMWLhPFF+4/DvHOf+U10rgvCLGPHP8Xlsy/7QxS51aU/eBngudHlJXnaWD5EohAgJ4js+T6pa+zOg==", "dev": true, "dependencies": { - "@jest/console": "^29.5.0", - "@jest/reporters": "^29.5.0", - "@jest/test-result": "^29.5.0", - "@jest/transform": "^29.5.0", - "@jest/types": "^29.5.0", + "@jest/console": "^29.6.2", + "@jest/reporters": "^29.6.2", + "@jest/test-result": "^29.6.2", + "@jest/transform": "^29.6.2", + "@jest/types": "^29.6.1", "@types/node": "*", "ansi-escapes": "^4.2.1", "chalk": "^4.0.0", @@ -3192,20 +3465,20 @@ "exit": "^0.1.2", "graceful-fs": "^4.2.9", "jest-changed-files": "^29.5.0", - "jest-config": "^29.5.0", - "jest-haste-map": "^29.5.0", - "jest-message-util": "^29.5.0", + "jest-config": "^29.6.2", + "jest-haste-map": "^29.6.2", + "jest-message-util": "^29.6.2", "jest-regex-util": "^29.4.3", - "jest-resolve": "^29.5.0", - "jest-resolve-dependencies": "^29.5.0", - "jest-runner": "^29.5.0", - "jest-runtime": "^29.5.0", - "jest-snapshot": "^29.5.0", - "jest-util": "^29.5.0", - "jest-validate": "^29.5.0", - "jest-watcher": "^29.5.0", + "jest-resolve": "^29.6.2", + "jest-resolve-dependencies": "^29.6.2", + "jest-runner": "^29.6.2", + "jest-runtime": "^29.6.2", + "jest-snapshot": "^29.6.2", + "jest-util": "^29.6.2", + "jest-validate": "^29.6.2", + "jest-watcher": "^29.6.2", "micromatch": "^4.0.4", - "pretty-format": "^29.5.0", + "pretty-format": "^29.6.2", "slash": "^3.0.0", "strip-ansi": "^6.0.0" }, @@ -3292,37 +3565,37 @@ } }, "node_modules/@jest/environment": { - "version": "29.5.0", - "resolved": "https://registry.npmjs.org/@jest/environment/-/environment-29.5.0.tgz", - "integrity": "sha512-5FXw2+wD29YU1d4I2htpRX7jYnAyTRjP2CsXQdo9SAM8g3ifxWPSV0HnClSn71xwctr0U3oZIIH+dtbfmnbXVQ==", + "version": "29.6.2", + "resolved": "https://registry.npmjs.org/@jest/environment/-/environment-29.6.2.tgz", + "integrity": "sha512-AEcW43C7huGd/vogTddNNTDRpO6vQ2zaQNrttvWV18ArBx9Z56h7BIsXkNFJVOO4/kblWEQz30ckw0+L3izc+Q==", "dev": true, "dependencies": { - "@jest/fake-timers": "^29.5.0", - "@jest/types": "^29.5.0", + "@jest/fake-timers": "^29.6.2", + "@jest/types": "^29.6.1", "@types/node": "*", - "jest-mock": "^29.5.0" + "jest-mock": "^29.6.2" }, "engines": { "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, "node_modules/@jest/expect": { - "version": "29.5.0", - "resolved": "https://registry.npmjs.org/@jest/expect/-/expect-29.5.0.tgz", - "integrity": "sha512-PueDR2HGihN3ciUNGr4uelropW7rqUfTiOn+8u0leg/42UhblPxHkfoh0Ruu3I9Y1962P3u2DY4+h7GVTSVU6g==", + "version": "29.6.2", + "resolved": "https://registry.npmjs.org/@jest/expect/-/expect-29.6.2.tgz", + "integrity": "sha512-m6DrEJxVKjkELTVAztTLyS/7C92Y2b0VYqmDROYKLLALHn8T/04yPs70NADUYPrV3ruI+H3J0iUIuhkjp7vkfg==", "dev": true, "dependencies": { - "expect": "^29.5.0", - "jest-snapshot": "^29.5.0" + "expect": "^29.6.2", + "jest-snapshot": "^29.6.2" }, "engines": { "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, "node_modules/@jest/expect-utils": { - "version": "29.5.0", - "resolved": "https://registry.npmjs.org/@jest/expect-utils/-/expect-utils-29.5.0.tgz", - "integrity": "sha512-fmKzsidoXQT2KwnrwE0SQq3uj8Z763vzR8LnLBwC2qYWEFpjX8daRsk6rHUM1QvNlEW/UJXNXm59ztmJJWs2Mg==", + "version": "29.6.2", + "resolved": "https://registry.npmjs.org/@jest/expect-utils/-/expect-utils-29.6.2.tgz", + "integrity": "sha512-6zIhM8go3RV2IG4aIZaZbxwpOzz3ZiM23oxAlkquOIole+G6TrbeXnykxWYlqF7kz2HlBjdKtca20x9atkEQYg==", "dev": true, "dependencies": { "jest-get-type": "^29.4.3" @@ -3332,49 +3605,49 @@ } }, "node_modules/@jest/fake-timers": { - "version": "29.5.0", - "resolved": "https://registry.npmjs.org/@jest/fake-timers/-/fake-timers-29.5.0.tgz", - "integrity": "sha512-9ARvuAAQcBwDAqOnglWq2zwNIRUDtk/SCkp/ToGEhFv5r86K21l+VEs0qNTaXtyiY0lEePl3kylijSYJQqdbDg==", + "version": "29.6.2", + "resolved": "https://registry.npmjs.org/@jest/fake-timers/-/fake-timers-29.6.2.tgz", + "integrity": "sha512-euZDmIlWjm1Z0lJ1D0f7a0/y5Kh/koLFMUBE5SUYWrmy8oNhJpbTBDAP6CxKnadcMLDoDf4waRYCe35cH6G6PA==", "dev": true, "dependencies": { - "@jest/types": "^29.5.0", + "@jest/types": "^29.6.1", "@sinonjs/fake-timers": "^10.0.2", "@types/node": "*", - "jest-message-util": "^29.5.0", - "jest-mock": "^29.5.0", - "jest-util": "^29.5.0" + "jest-message-util": "^29.6.2", + "jest-mock": "^29.6.2", + "jest-util": "^29.6.2" }, "engines": { "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, "node_modules/@jest/globals": { - "version": "29.5.0", - "resolved": "https://registry.npmjs.org/@jest/globals/-/globals-29.5.0.tgz", - "integrity": "sha512-S02y0qMWGihdzNbUiqSAiKSpSozSuHX5UYc7QbnHP+D9Lyw8DgGGCinrN9uSuHPeKgSSzvPom2q1nAtBvUsvPQ==", + "version": "29.6.2", + "resolved": "https://registry.npmjs.org/@jest/globals/-/globals-29.6.2.tgz", + "integrity": "sha512-cjuJmNDjs6aMijCmSa1g2TNG4Lby/AeU7/02VtpW+SLcZXzOLK2GpN2nLqcFjmhy3B3AoPeQVx7BnyOf681bAw==", "dev": true, "dependencies": { - "@jest/environment": "^29.5.0", - "@jest/expect": "^29.5.0", - "@jest/types": "^29.5.0", - "jest-mock": "^29.5.0" + "@jest/environment": "^29.6.2", + "@jest/expect": "^29.6.2", + "@jest/types": "^29.6.1", + "jest-mock": "^29.6.2" }, "engines": { "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, "node_modules/@jest/reporters": { - "version": "29.5.0", - "resolved": "https://registry.npmjs.org/@jest/reporters/-/reporters-29.5.0.tgz", - "integrity": "sha512-D05STXqj/M8bP9hQNSICtPqz97u7ffGzZu+9XLucXhkOFBqKcXe04JLZOgIekOxdb73MAoBUFnqvf7MCpKk5OA==", + "version": "29.6.2", + "resolved": "https://registry.npmjs.org/@jest/reporters/-/reporters-29.6.2.tgz", + "integrity": "sha512-sWtijrvIav8LgfJZlrGCdN0nP2EWbakglJY49J1Y5QihcQLfy7ovyxxjJBRXMNltgt4uPtEcFmIMbVshEDfFWw==", "dev": true, "dependencies": { "@bcoe/v8-coverage": "^0.2.3", - "@jest/console": "^29.5.0", - "@jest/test-result": "^29.5.0", - "@jest/transform": "^29.5.0", - "@jest/types": "^29.5.0", - "@jridgewell/trace-mapping": "^0.3.15", + "@jest/console": "^29.6.2", + "@jest/test-result": "^29.6.2", + "@jest/transform": "^29.6.2", + "@jest/types": "^29.6.1", + "@jridgewell/trace-mapping": "^0.3.18", "@types/node": "*", "chalk": "^4.0.0", "collect-v8-coverage": "^1.0.0", @@ -3386,9 +3659,9 @@ "istanbul-lib-report": "^3.0.0", "istanbul-lib-source-maps": "^4.0.0", "istanbul-reports": "^3.1.3", - "jest-message-util": "^29.5.0", - "jest-util": "^29.5.0", - "jest-worker": "^29.5.0", + "jest-message-util": "^29.6.2", + "jest-util": "^29.6.2", + "jest-worker": "^29.6.2", "slash": "^3.0.0", "string-length": "^4.0.1", "strip-ansi": "^6.0.0", @@ -3497,24 +3770,24 @@ } }, "node_modules/@jest/schemas": { - "version": "29.4.3", - "resolved": "https://registry.npmjs.org/@jest/schemas/-/schemas-29.4.3.tgz", - "integrity": "sha512-VLYKXQmtmuEz6IxJsrZwzG9NvtkQsWNnWMsKxqWNu3+CnfzJQhp0WDDKWLVV9hLKr0l3SLLFRqcYHjhtyuDVxg==", + "version": "29.6.0", + "resolved": "https://registry.npmjs.org/@jest/schemas/-/schemas-29.6.0.tgz", + "integrity": "sha512-rxLjXyJBTL4LQeJW3aKo0M/+GkCOXsO+8i9Iu7eDb6KwtP65ayoDsitrdPBtujxQ88k4wI2FNYfa6TOGwSn6cQ==", "dev": true, "dependencies": { - "@sinclair/typebox": "^0.25.16" + "@sinclair/typebox": "^0.27.8" }, "engines": { "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, "node_modules/@jest/source-map": { - "version": "29.4.3", - "resolved": "https://registry.npmjs.org/@jest/source-map/-/source-map-29.4.3.tgz", - "integrity": "sha512-qyt/mb6rLyd9j1jUts4EQncvS6Yy3PM9HghnNv86QBlV+zdL2inCdK1tuVlL+J+lpiw2BI67qXOrX3UurBqQ1w==", + "version": "29.6.0", + "resolved": "https://registry.npmjs.org/@jest/source-map/-/source-map-29.6.0.tgz", + "integrity": "sha512-oA+I2SHHQGxDCZpbrsCQSoMLb3Bz547JnM+jUr9qEbuw0vQlWZfpPS7CO9J7XiwKicEz9OFn/IYoLkkiUD7bzA==", "dev": true, "dependencies": { - "@jridgewell/trace-mapping": "^0.3.15", + "@jridgewell/trace-mapping": "^0.3.18", "callsites": "^3.0.0", "graceful-fs": "^4.2.9" }, @@ -3523,13 +3796,13 @@ } }, "node_modules/@jest/test-result": { - "version": "29.5.0", - "resolved": "https://registry.npmjs.org/@jest/test-result/-/test-result-29.5.0.tgz", - "integrity": "sha512-fGl4rfitnbfLsrfx1uUpDEESS7zM8JdgZgOCQuxQvL1Sn/I6ijeAVQWGfXI9zb1i9Mzo495cIpVZhA0yr60PkQ==", + "version": "29.6.2", + "resolved": "https://registry.npmjs.org/@jest/test-result/-/test-result-29.6.2.tgz", + "integrity": "sha512-3VKFXzcV42EYhMCsJQURptSqnyjqCGbtLuX5Xxb6Pm6gUf1wIRIl+mandIRGJyWKgNKYF9cnstti6Ls5ekduqw==", "dev": true, "dependencies": { - "@jest/console": "^29.5.0", - "@jest/types": "^29.5.0", + "@jest/console": "^29.6.2", + "@jest/types": "^29.6.1", "@types/istanbul-lib-coverage": "^2.0.0", "collect-v8-coverage": "^1.0.0" }, @@ -3538,14 +3811,14 @@ } }, "node_modules/@jest/test-sequencer": { - "version": "29.5.0", - "resolved": "https://registry.npmjs.org/@jest/test-sequencer/-/test-sequencer-29.5.0.tgz", - "integrity": "sha512-yPafQEcKjkSfDXyvtgiV4pevSeyuA6MQr6ZIdVkWJly9vkqjnFfcfhRQqpD5whjoU8EORki752xQmjaqoFjzMQ==", + "version": "29.6.2", + "resolved": "https://registry.npmjs.org/@jest/test-sequencer/-/test-sequencer-29.6.2.tgz", + "integrity": "sha512-GVYi6PfPwVejO7slw6IDO0qKVum5jtrJ3KoLGbgBWyr2qr4GaxFV6su+ZAjdTX75Sr1DkMFRk09r2ZVa+wtCGw==", "dev": true, "dependencies": { - "@jest/test-result": "^29.5.0", + "@jest/test-result": "^29.6.2", "graceful-fs": "^4.2.9", - "jest-haste-map": "^29.5.0", + "jest-haste-map": "^29.6.2", "slash": "^3.0.0" }, "engines": { @@ -3553,22 +3826,22 @@ } }, "node_modules/@jest/transform": { - "version": "29.5.0", - "resolved": "https://registry.npmjs.org/@jest/transform/-/transform-29.5.0.tgz", - "integrity": "sha512-8vbeZWqLJOvHaDfeMuoHITGKSz5qWc9u04lnWrQE3VyuSw604PzQM824ZeX9XSjUCeDiE3GuxZe5UKa8J61NQw==", + "version": "29.6.2", + "resolved": "https://registry.npmjs.org/@jest/transform/-/transform-29.6.2.tgz", + "integrity": "sha512-ZqCqEISr58Ce3U+buNFJYUktLJZOggfyvR+bZMaiV1e8B1SIvJbwZMrYz3gx/KAPn9EXmOmN+uB08yLCjWkQQg==", "dev": true, "dependencies": { "@babel/core": "^7.11.6", - "@jest/types": "^29.5.0", - "@jridgewell/trace-mapping": "^0.3.15", + "@jest/types": "^29.6.1", + "@jridgewell/trace-mapping": "^0.3.18", "babel-plugin-istanbul": "^6.1.1", "chalk": "^4.0.0", "convert-source-map": "^2.0.0", "fast-json-stable-stringify": "^2.1.0", "graceful-fs": "^4.2.9", - "jest-haste-map": "^29.5.0", + "jest-haste-map": "^29.6.2", "jest-regex-util": "^29.4.3", - "jest-util": "^29.5.0", + "jest-util": "^29.6.2", "micromatch": "^4.0.4", "pirates": "^4.0.4", "slash": "^3.0.0", @@ -3655,12 +3928,12 @@ } }, "node_modules/@jest/types": { - "version": "29.5.0", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-29.5.0.tgz", - "integrity": "sha512-qbu7kN6czmVRc3xWFQcAN03RAUamgppVUdXrvl1Wr3jlNF93o9mJbGcDWrwGB6ht44u7efB1qCFgVQmca24Uog==", + "version": "29.6.1", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-29.6.1.tgz", + "integrity": "sha512-tPKQNMPuXgvdOn2/Lg9HNfUvjYVGolt04Hp03f5hAk878uwOLikN+JzeLY0HcVgKgFl9Hs3EIqpu3WX27XNhnw==", "dev": true, "dependencies": { - "@jest/schemas": "^29.4.3", + "@jest/schemas": "^29.6.0", "@types/istanbul-lib-coverage": "^2.0.0", "@types/istanbul-reports": "^3.0.0", "@types/node": "*", @@ -3802,9 +4075,9 @@ "dev": true }, "node_modules/@ng-bootstrap/ng-bootstrap": { - "version": "15.0.1", - "resolved": "https://registry.npmjs.org/@ng-bootstrap/ng-bootstrap/-/ng-bootstrap-15.0.1.tgz", - "integrity": "sha512-a86fcS6XPpC/FyZ/nx4oLnTWd/XEe7ZLYjqEU/VIj5RTVPgbC6ieKCeaprIEabFf/k0Jw2j4X4CdiFiE+xfXPA==", + "version": "15.1.0", + "resolved": "https://registry.npmjs.org/@ng-bootstrap/ng-bootstrap/-/ng-bootstrap-15.1.0.tgz", + "integrity": "sha512-4Z/sXYcAq22D15jtlnZV7qztuSnlSlOgO7EVp6rJ8dyGi3CPzX9PqMfetoM6K5sKQTiSW8IfsbdXCWN7rnzxWQ==", "dependencies": { "tslib": "^2.3.0" }, @@ -3818,9 +4091,9 @@ } }, "node_modules/@ng-select/ng-select": { - "version": "11.0.0", - "resolved": "https://registry.npmjs.org/@ng-select/ng-select/-/ng-select-11.0.0.tgz", - "integrity": "sha512-zuqZ/9LVV4nxiOFWo0hWncTqDV2QcUcUqZyMa4kKZxJALRmPumo4+BXca1h1KY6SHYFJeINIriK93LApeMSwQQ==", + "version": "11.1.1", + "resolved": "https://registry.npmjs.org/@ng-select/ng-select/-/ng-select-11.1.1.tgz", + "integrity": "sha512-Z5wV/u2HgaKl7CQSG3Sy1oF+BPQolmVV6jBuPqHa2+OWg0Nn2e9eXYdcZT8Q3BahfP5j5rHNIBrkkESg/m4YiQ==", "dependencies": { "tslib": "^2.3.1" }, @@ -3850,9 +4123,9 @@ } }, "node_modules/@ngtools/webpack": { - "version": "16.1.3", - "resolved": "https://registry.npmjs.org/@ngtools/webpack/-/webpack-16.1.3.tgz", - "integrity": "sha512-YTL1RzP7ErJqskx+ZwdC/nWsOSBfC4yYWmMyWL2J0d+oJ3N2XIzrKVoDcZ4IVzv3Du+3zoGp0ups/wWXvfzM/Q==", + "version": "16.1.6", + "resolved": "https://registry.npmjs.org/@ngtools/webpack/-/webpack-16.1.6.tgz", + "integrity": "sha512-rDE1bV3+Ys/VyeD6l7JKtbs3+bTQAfWhi7meEuq5mkaJHOERu6Z40ce866faAIX2I1AVpsSv8rLlb7kB7t7kzw==", "dev": true, "engines": { "node": "^16.14.0 || >=18.10.0", @@ -4036,36 +4309,36 @@ } }, "node_modules/@nrwl/devkit": { - "version": "16.2.2", - "resolved": "https://registry.npmjs.org/@nrwl/devkit/-/devkit-16.2.2.tgz", - "integrity": "sha512-R8OSh33HtGycSuu0KshpH/tsTdi6j4w7DuIb+Sa59UDIkchpvMeNAz8tj/05Z2tTntDZnYqPkmCs6rkZ4PvY4Q==", + "version": "16.5.1", + "resolved": "https://registry.npmjs.org/@nrwl/devkit/-/devkit-16.5.1.tgz", + "integrity": "sha512-NB+DE/+AFJ7lKH/WBFyatJEhcZGj25F24ncDkwjZ6MzEiSOGOJS0LaV/R+VUsmS5EHTPXYOpn3zHWWAcJhyOmA==", "dev": true, "dependencies": { - "@nx/devkit": "16.2.2" + "@nx/devkit": "16.5.1" } }, "node_modules/@nrwl/tao": { - "version": "16.2.2", - "resolved": "https://registry.npmjs.org/@nrwl/tao/-/tao-16.2.2.tgz", - "integrity": "sha512-cPj6b+wSWs2WNFQ0p1fMyrvSLjkKJo7vXQTtd7MXNJT2NWEZdCtRy+nidZzjs7gKvVXGdZ8zDBXmCHWorOieXw==", + "version": "16.5.1", + "resolved": "https://registry.npmjs.org/@nrwl/tao/-/tao-16.5.1.tgz", + "integrity": "sha512-x+gi/fKdM6uQNIti9exFlm3V5LBP3Y8vOEziO42HdOigyrXa0S0HD2WMpccmp6PclYKhwEDUjKJ39xh5sdh4Ig==", "dev": true, "dependencies": { - "nx": "16.2.2" + "nx": "16.5.1" }, "bin": { "tao": "index.js" } }, "node_modules/@nx/devkit": { - "version": "16.2.2", - "resolved": "https://registry.npmjs.org/@nx/devkit/-/devkit-16.2.2.tgz", - "integrity": "sha512-MTYzetk4AQ9u2syEb9z+drDsu6U6NRAXVuUDMNg0tpZcbtE9bCSLH2ngfvTCqmLrAMBsJZRdv0twS1iepMhlAg==", + "version": "16.5.1", + "resolved": "https://registry.npmjs.org/@nx/devkit/-/devkit-16.5.1.tgz", + "integrity": "sha512-T1acZrVVmJw/sJ4PIGidCBYBiBqlg/jT9e8nIGXLSDS20xcLvfo4zBQf8UZLrmHglnwwpDpOWuVJCp2rYA5aDg==", "dev": true, "dependencies": { - "@nrwl/devkit": "16.2.2", + "@nrwl/devkit": "16.5.1", "ejs": "^3.1.7", "ignore": "^5.0.4", - "semver": "7.3.4", + "semver": "7.5.3", "tmp": "~0.2.1", "tslib": "^2.3.0" }, @@ -4073,43 +4346,10 @@ "nx": ">= 15 <= 17" } }, - "node_modules/@nx/devkit/node_modules/lru-cache": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", - "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", - "dev": true, - "dependencies": { - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/@nx/devkit/node_modules/semver": { - "version": "7.3.4", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.4.tgz", - "integrity": "sha512-tCfb2WLjqFAtXn4KEdxIhalnRtoKFN7nAwj0B3ZXCbQloV2tq5eDbcTmT68JJD3nRJq24/XgxtQKFIpQdtvmVw==", - "dev": true, - "dependencies": { - "lru-cache": "^6.0.0" - }, - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/@nx/devkit/node_modules/yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", - "dev": true - }, "node_modules/@nx/nx-darwin-arm64": { - "version": "16.2.2", - "resolved": "https://registry.npmjs.org/@nx/nx-darwin-arm64/-/nx-darwin-arm64-16.2.2.tgz", - "integrity": "sha512-CKfyLl92mhWqpv1hRTj3WgjVBY6yj3Et5T31m1N0assNWdTfuSB4ycdWzdlxXHx3yptnTOD/FCymTpUQI0GZRQ==", + "version": "16.5.1", + "resolved": "https://registry.npmjs.org/@nx/nx-darwin-arm64/-/nx-darwin-arm64-16.5.1.tgz", + "integrity": "sha512-q98TFI4B/9N9PmKUr1jcbtD4yAFs1HfYd9jUXXTQOlfO9SbDjnrYJgZ4Fp9rMNfrBhgIQ4x1qx0AukZccKmH9Q==", "cpu": [ "arm64" ], @@ -4123,9 +4363,9 @@ } }, "node_modules/@nx/nx-darwin-x64": { - "version": "16.2.2", - "resolved": "https://registry.npmjs.org/@nx/nx-darwin-x64/-/nx-darwin-x64-16.2.2.tgz", - "integrity": "sha512-++uDfp/Oo8DDVU53DiJVkRNjNbOLzahDH6dINeA/3yTCU/IS0wXoaoclNZBReMWlDKTVvWgLF/eSbGINMqUHRg==", + "version": "16.5.1", + "resolved": "https://registry.npmjs.org/@nx/nx-darwin-x64/-/nx-darwin-x64-16.5.1.tgz", + "integrity": "sha512-j9HmL1l8k7EVJ3eOM5y8COF93gqrydpxCDoz23ZEtsY+JHY77VAiRQsmqBgEx9GGA2dXi9VEdS67B0+1vKariw==", "cpu": [ "x64" ], @@ -4138,10 +4378,26 @@ "node": ">= 10" } }, + "node_modules/@nx/nx-freebsd-x64": { + "version": "16.5.1", + "resolved": "https://registry.npmjs.org/@nx/nx-freebsd-x64/-/nx-freebsd-x64-16.5.1.tgz", + "integrity": "sha512-CXSPT01aVS869tvCCF2tZ7LnCa8l41wJ3mTVtWBkjmRde68E5Up093hklRMyXb3kfiDYlfIKWGwrV4r0eH6x1A==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">= 10" + } + }, "node_modules/@nx/nx-linux-arm-gnueabihf": { - "version": "16.2.2", - "resolved": "https://registry.npmjs.org/@nx/nx-linux-arm-gnueabihf/-/nx-linux-arm-gnueabihf-16.2.2.tgz", - "integrity": "sha512-A4XFk63Q7fxgZaHnigIeofp/xOT2ZGDoNUyzld+UTlyJyNcClcOcqrro74aKOCG7PH0D56oE06JW3g7GKszgsA==", + "version": "16.5.1", + "resolved": "https://registry.npmjs.org/@nx/nx-linux-arm-gnueabihf/-/nx-linux-arm-gnueabihf-16.5.1.tgz", + "integrity": "sha512-BhrumqJSZCWFfLFUKl4CAUwR0Y0G2H5EfFVGKivVecEQbb+INAek1aa6c89evg2/OvetQYsJ+51QknskwqvLsA==", "cpu": [ "arm" ], @@ -4155,9 +4411,9 @@ } }, "node_modules/@nx/nx-linux-arm64-gnu": { - "version": "16.2.2", - "resolved": "https://registry.npmjs.org/@nx/nx-linux-arm64-gnu/-/nx-linux-arm64-gnu-16.2.2.tgz", - "integrity": "sha512-aQpTLVSawFVr33pBWjj8elqvjA5uWvzDW7hGaFQPgWgmjxrtJikIAkcLjfNOz8XYjRAP4OZkTVh4/E3GUch0kQ==", + "version": "16.5.1", + "resolved": "https://registry.npmjs.org/@nx/nx-linux-arm64-gnu/-/nx-linux-arm64-gnu-16.5.1.tgz", + "integrity": "sha512-x7MsSG0W+X43WVv7JhiSq2eKvH2suNKdlUHEG09Yt0vm3z0bhtym1UCMUg3IUAK7jy9hhLeDaFVFkC6zo+H/XQ==", "cpu": [ "arm64" ], @@ -4171,9 +4427,9 @@ } }, "node_modules/@nx/nx-linux-arm64-musl": { - "version": "16.2.2", - "resolved": "https://registry.npmjs.org/@nx/nx-linux-arm64-musl/-/nx-linux-arm64-musl-16.2.2.tgz", - "integrity": "sha512-20vyNYQ2SYSaWdxORj9HdOyGxiqE8SauaFiBjjid6/e5mSyaSKu+HHGsvhDUqzlWn3OaABKBqx0iYa9Kmf3BOQ==", + "version": "16.5.1", + "resolved": "https://registry.npmjs.org/@nx/nx-linux-arm64-musl/-/nx-linux-arm64-musl-16.5.1.tgz", + "integrity": "sha512-J+/v/mFjOm74I0PNtH5Ka+fDd+/dWbKhpcZ2R1/6b9agzZk+Ff/SrwJcSYFXXWKbPX+uQ4RcJoytT06Zs3s0ow==", "cpu": [ "arm64" ], @@ -4187,9 +4443,9 @@ } }, "node_modules/@nx/nx-linux-x64-gnu": { - "version": "16.2.2", - "resolved": "https://registry.npmjs.org/@nx/nx-linux-x64-gnu/-/nx-linux-x64-gnu-16.2.2.tgz", - "integrity": "sha512-0G8kYpEmGHD+tT7RvUEvVXvPbvQD9GfEjeWEzZAdNAAMJu7JFjIo/oZDJYV7cMvXnC+tbpI9Gba5xfv8Al95eA==", + "version": "16.5.1", + "resolved": "https://registry.npmjs.org/@nx/nx-linux-x64-gnu/-/nx-linux-x64-gnu-16.5.1.tgz", + "integrity": "sha512-igooWJ5YxQ94Zft7IqgL+Lw0qHaY15Btw4gfK756g/YTYLZEt4tTvR1y6RnK/wdpE3sa68bFTLVBNCGTyiTiDQ==", "cpu": [ "x64" ], @@ -4203,9 +4459,9 @@ } }, "node_modules/@nx/nx-linux-x64-musl": { - "version": "16.2.2", - "resolved": "https://registry.npmjs.org/@nx/nx-linux-x64-musl/-/nx-linux-x64-musl-16.2.2.tgz", - "integrity": "sha512-Incv7DbKLfh6kakzMBuy6GYRgI+jEdZBRiFw0GoN9EsknmrPT/URn+w6uuicGGEXOLYpO3HUO3E374+b5Wz2zg==", + "version": "16.5.1", + "resolved": "https://registry.npmjs.org/@nx/nx-linux-x64-musl/-/nx-linux-x64-musl-16.5.1.tgz", + "integrity": "sha512-zF/exnPqFYbrLAduGhTmZ7zNEyADid2bzNQiIjJkh8Y6NpDwrQIwVIyvIxqynsjMrIs51kBH+8TUjKjj2Jgf5A==", "cpu": [ "x64" ], @@ -4219,9 +4475,9 @@ } }, "node_modules/@nx/nx-win32-arm64-msvc": { - "version": "16.2.2", - "resolved": "https://registry.npmjs.org/@nx/nx-win32-arm64-msvc/-/nx-win32-arm64-msvc-16.2.2.tgz", - "integrity": "sha512-8m+Usj9faCl0pdQLFeBGhbYUObT3/tno5oGMPtJLyRjITNvTZAaIS4FFctp/rwJPehDBRQsUxwMJ2JRaU4jQdA==", + "version": "16.5.1", + "resolved": "https://registry.npmjs.org/@nx/nx-win32-arm64-msvc/-/nx-win32-arm64-msvc-16.5.1.tgz", + "integrity": "sha512-qtqiLS9Y9TYyAbbpq58kRoOroko4ZXg5oWVqIWFHoxc5bGPweQSJCROEqd1AOl2ZDC6BxfuVHfhDDop1kK05WA==", "cpu": [ "arm64" ], @@ -4235,9 +4491,9 @@ } }, "node_modules/@nx/nx-win32-x64-msvc": { - "version": "16.2.2", - "resolved": "https://registry.npmjs.org/@nx/nx-win32-x64-msvc/-/nx-win32-x64-msvc-16.2.2.tgz", - "integrity": "sha512-liHtyVVOttcqHIV3Xrg/1AJzEgfiOCeqJsleHXHGgPr1fxPx7SIZaa3/QnDY1lNMN+t6Gvj0/r2Ba3iuptYD3Q==", + "version": "16.5.1", + "resolved": "https://registry.npmjs.org/@nx/nx-win32-x64-msvc/-/nx-win32-x64-msvc-16.5.1.tgz", + "integrity": "sha512-kUJBLakK7iyA9WfsGGQBVennA4jwf5XIgm0lu35oMOphtZIluvzItMt0EYBmylEROpmpEIhHq0P6J9FA+WH0Rg==", "cpu": [ "x64" ], @@ -4279,13 +4535,13 @@ } }, "node_modules/@playwright/test": { - "version": "1.35.1", - "resolved": "https://registry.npmjs.org/@playwright/test/-/test-1.35.1.tgz", - "integrity": "sha512-b5YoFe6J9exsMYg0pQAobNDR85T1nLumUYgUTtKm4d21iX2L7WqKq9dW8NGJ+2vX0etZd+Y7UeuqsxDXm9+5ZA==", + "version": "1.36.2", + "resolved": "https://registry.npmjs.org/@playwright/test/-/test-1.36.2.tgz", + "integrity": "sha512-2rVZeyPRjxfPH6J0oGJqE8YxiM1IBRyM8hyrXYK7eSiAqmbNhxwcLa7dZ7fy9Kj26V7FYia5fh9XJRq4Dqme+g==", "dev": true, "dependencies": { "@types/node": "*", - "playwright-core": "1.35.1" + "playwright-core": "1.36.2" }, "bin": { "playwright": "cli.js" @@ -4307,13 +4563,13 @@ } }, "node_modules/@schematics/angular": { - "version": "16.1.3", - "resolved": "https://registry.npmjs.org/@schematics/angular/-/angular-16.1.3.tgz", - "integrity": "sha512-bNSxCLf6f+/dsQ1k3PhcZhrC/qgJSCpM6h3m6ATpjR+tYW/v7WR1OyE5r3DQmDe7NJSazBvpbrRtg8xjRsMzvw==", + "version": "16.1.6", + "resolved": "https://registry.npmjs.org/@schematics/angular/-/angular-16.1.6.tgz", + "integrity": "sha512-BxghkeLfnMgV0D4DZDcbfPpox/Orw1ismSVGoQMIV/Daj2pqfSK+n97NAu0r0EsQyR5agPxOX9khVft+otODhg==", "dev": true, "dependencies": { - "@angular-devkit/core": "16.1.3", - "@angular-devkit/schematics": "16.1.3", + "@angular-devkit/core": "16.1.6", + "@angular-devkit/schematics": "16.1.6", "jsonc-parser": "3.2.0" }, "engines": { @@ -4366,9 +4622,9 @@ } }, "node_modules/@sinclair/typebox": { - "version": "0.25.24", - "resolved": "https://registry.npmjs.org/@sinclair/typebox/-/typebox-0.25.24.tgz", - "integrity": "sha512-XJfwUVUKDHF5ugKwIcxEgc9k8b7HbznCp6eUfWgu710hMPNIO4aw4/zB5RogDQz8nd6gyCDpU9O/m6qYEWY6yQ==", + "version": "0.27.8", + "resolved": "https://registry.npmjs.org/@sinclair/typebox/-/typebox-0.27.8.tgz", + "integrity": "sha512-+Fj43pSMwJs4KRrH/938Uf+uAELIgVBmQzg/q1YG10djyfA3TnrU8N8XzqCh/okZdszqBQTZf96idMfE5lnwTA==", "dev": true }, "node_modules/@sinonjs/commons": { @@ -4646,9 +4902,9 @@ } }, "node_modules/@types/jest": { - "version": "29.5.2", - "resolved": "https://registry.npmjs.org/@types/jest/-/jest-29.5.2.tgz", - "integrity": "sha512-mSoZVJF5YzGVCk+FsDxzDuH7s+SCkzrgKZzf0Z0T2WudhBUPoF6ktoTPC4R0ZoCPCV5xUvuU6ias5NvxcBcMMg==", + "version": "29.5.3", + "resolved": "https://registry.npmjs.org/@types/jest/-/jest-29.5.3.tgz", + "integrity": "sha512-1Nq7YrO/vJE/FYnqYyw0FS8LdrjExSgIiHyKg7xPpn+yi8Q4huZryKnkJatN1ZRH89Kw2v33/8ZMB7DuZeSLlA==", "dev": true, "dependencies": { "expect": "^29.0.0", @@ -4679,15 +4935,9 @@ "dev": true }, "node_modules/@types/node": { - "version": "20.3.3", - "resolved": "https://registry.npmjs.org/@types/node/-/node-20.3.3.tgz", - "integrity": "sha512-wheIYdr4NYML61AjC8MKj/2jrR/kDQri/CIpVoZwldwhnIrD/j9jIU5bJ8yBKuB2VhpFV7Ab6G2XkBjv9r9Zzw==", - "dev": true - }, - "node_modules/@types/prettier": { - "version": "2.7.3", - "resolved": "https://registry.npmjs.org/@types/prettier/-/prettier-2.7.3.tgz", - "integrity": "sha512-+68kP9yzs4LMp7VNh8gdzMSPZFL44MLGqiHWvttYJe+6qnuVr4Ek9wSBQoveqY/r+LwjCcU29kNVkidwim+kYA==", + "version": "20.4.5", + "resolved": "https://registry.npmjs.org/@types/node/-/node-20.4.5.tgz", + "integrity": "sha512-rt40Nk13II9JwQBdeYqmbn2Q6IVTA5uPhvSO+JVqdXw/6/4glI6oR9ezty/A9Hg5u7JH4OmYmuQ+XvjKm0Datg==", "dev": true }, "node_modules/@types/qs": { @@ -4790,32 +5040,34 @@ "dev": true }, "node_modules/@typescript-eslint/eslint-plugin": { - "version": "5.60.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.60.1.tgz", - "integrity": "sha512-KSWsVvsJsLJv3c4e73y/Bzt7OpqMCADUO846bHcuWYSYM19bldbAeDv7dYyV0jwkbMfJ2XdlzwjhXtuD7OY6bw==", + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-6.2.1.tgz", + "integrity": "sha512-iZVM/ALid9kO0+I81pnp1xmYiFyqibAHzrqX4q5YvvVEyJqY+e6rfTXSCsc2jUxGNqJqTfFSSij/NFkZBiBzLw==", "dev": true, "dependencies": { - "@eslint-community/regexpp": "^4.4.0", - "@typescript-eslint/scope-manager": "5.60.1", - "@typescript-eslint/type-utils": "5.60.1", - "@typescript-eslint/utils": "5.60.1", + "@eslint-community/regexpp": "^4.5.1", + "@typescript-eslint/scope-manager": "6.2.1", + "@typescript-eslint/type-utils": "6.2.1", + "@typescript-eslint/utils": "6.2.1", + "@typescript-eslint/visitor-keys": "6.2.1", "debug": "^4.3.4", - "grapheme-splitter": "^1.0.4", - "ignore": "^5.2.0", + "graphemer": "^1.4.0", + "ignore": "^5.2.4", + "natural-compare": "^1.4.0", "natural-compare-lite": "^1.4.0", - "semver": "^7.3.7", - "tsutils": "^3.21.0" + "semver": "^7.5.4", + "ts-api-utils": "^1.0.1" }, "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + "node": "^16.0.0 || >=18.0.0" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/typescript-eslint" }, "peerDependencies": { - "@typescript-eslint/parser": "^5.0.0", - "eslint": "^6.0.0 || ^7.0.0 || ^8.0.0" + "@typescript-eslint/parser": "^6.0.0 || ^6.0.0-alpha", + "eslint": "^7.0.0 || ^8.0.0" }, "peerDependenciesMeta": { "typescript": { @@ -4824,25 +5076,25 @@ } }, "node_modules/@typescript-eslint/eslint-plugin/node_modules/@typescript-eslint/type-utils": { - "version": "5.60.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-5.60.1.tgz", - "integrity": "sha512-vN6UztYqIu05nu7JqwQGzQKUJctzs3/Hg7E2Yx8rz9J+4LgtIDFWjjl1gm3pycH0P3mHAcEUBd23LVgfrsTR8A==", + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-6.2.1.tgz", + "integrity": "sha512-fTfCgomBMIgu2Dh2Or3gMYgoNAnQm3RLtRp+jP7A8fY+LJ2+9PNpi5p6QB5C4RSP+U3cjI0vDlI3mspAkpPVbQ==", "dev": true, "dependencies": { - "@typescript-eslint/typescript-estree": "5.60.1", - "@typescript-eslint/utils": "5.60.1", + "@typescript-eslint/typescript-estree": "6.2.1", + "@typescript-eslint/utils": "6.2.1", "debug": "^4.3.4", - "tsutils": "^3.21.0" + "ts-api-utils": "^1.0.1" }, "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + "node": "^16.0.0 || >=18.0.0" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/typescript-eslint" }, "peerDependencies": { - "eslint": "*" + "eslint": "^7.0.0 || ^8.0.0" }, "peerDependenciesMeta": { "typescript": { @@ -4850,74 +5102,60 @@ } } }, - "node_modules/@typescript-eslint/eslint-plugin/node_modules/@typescript-eslint/utils": { - "version": "5.60.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-5.60.1.tgz", - "integrity": "sha512-tiJ7FFdFQOWssFa3gqb94Ilexyw0JVxj6vBzaSpfN/8IhoKkDuSAenUKvsSHw2A/TMpJb26izIszTXaqygkvpQ==", + "node_modules/@typescript-eslint/eslint-plugin/node_modules/lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", "dev": true, "dependencies": { - "@eslint-community/eslint-utils": "^4.2.0", - "@types/json-schema": "^7.0.9", - "@types/semver": "^7.3.12", - "@typescript-eslint/scope-manager": "5.60.1", - "@typescript-eslint/types": "5.60.1", - "@typescript-eslint/typescript-estree": "5.60.1", - "eslint-scope": "^5.1.1", - "semver": "^7.3.7" + "yallist": "^4.0.0" }, "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - }, - "peerDependencies": { - "eslint": "^6.0.0 || ^7.0.0 || ^8.0.0" + "node": ">=10" } }, - "node_modules/@typescript-eslint/eslint-plugin/node_modules/eslint-scope": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz", - "integrity": "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==", + "node_modules/@typescript-eslint/eslint-plugin/node_modules/semver": { + "version": "7.5.4", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz", + "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==", "dev": true, "dependencies": { - "esrecurse": "^4.3.0", - "estraverse": "^4.1.1" + "lru-cache": "^6.0.0" + }, + "bin": { + "semver": "bin/semver.js" }, "engines": { - "node": ">=8.0.0" + "node": ">=10" } }, - "node_modules/@typescript-eslint/eslint-plugin/node_modules/estraverse": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", - "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", - "dev": true, - "engines": { - "node": ">=4.0" - } + "node_modules/@typescript-eslint/eslint-plugin/node_modules/yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "dev": true }, "node_modules/@typescript-eslint/parser": { - "version": "5.60.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-5.60.1.tgz", - "integrity": "sha512-pHWlc3alg2oSMGwsU/Is8hbm3XFbcrb6P5wIxcQW9NsYBfnrubl/GhVVD/Jm/t8HXhA2WncoIRfBtnCgRGV96Q==", + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-6.2.1.tgz", + "integrity": "sha512-Ld+uL1kYFU8e6btqBFpsHkwQ35rw30IWpdQxgOqOh4NfxSDH6uCkah1ks8R/RgQqI5hHPXMaLy9fbFseIe+dIg==", "dev": true, "dependencies": { - "@typescript-eslint/scope-manager": "5.60.1", - "@typescript-eslint/types": "5.60.1", - "@typescript-eslint/typescript-estree": "5.60.1", + "@typescript-eslint/scope-manager": "6.2.1", + "@typescript-eslint/types": "6.2.1", + "@typescript-eslint/typescript-estree": "6.2.1", + "@typescript-eslint/visitor-keys": "6.2.1", "debug": "^4.3.4" }, "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + "node": "^16.0.0 || >=18.0.0" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/typescript-eslint" }, "peerDependencies": { - "eslint": "^6.0.0 || ^7.0.0 || ^8.0.0" + "eslint": "^7.0.0 || ^8.0.0" }, "peerDependenciesMeta": { "typescript": { @@ -4926,16 +5164,16 @@ } }, "node_modules/@typescript-eslint/scope-manager": { - "version": "5.60.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-5.60.1.tgz", - "integrity": "sha512-Dn/LnN7fEoRD+KspEOV0xDMynEmR3iSHdgNsarlXNLGGtcUok8L4N71dxUgt3YvlO8si7E+BJ5Fe3wb5yUw7DQ==", + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-6.2.1.tgz", + "integrity": "sha512-UCqBF9WFqv64xNsIEPfBtenbfodPXsJ3nPAr55mGPkQIkiQvgoWNo+astj9ZUfJfVKiYgAZDMnM6dIpsxUMp3Q==", "dev": true, "dependencies": { - "@typescript-eslint/types": "5.60.1", - "@typescript-eslint/visitor-keys": "5.60.1" + "@typescript-eslint/types": "6.2.1", + "@typescript-eslint/visitor-keys": "6.2.1" }, "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + "node": "^16.0.0 || >=18.0.0" }, "funding": { "type": "opencollective", @@ -4943,13 +5181,13 @@ } }, "node_modules/@typescript-eslint/type-utils": { - "version": "5.59.7", - "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-5.59.7.tgz", - "integrity": "sha512-ozuz/GILuYG7osdY5O5yg0QxXUAEoI4Go3Do5xeu+ERH9PorHBPSdvD3Tjp2NN2bNLh1NJQSsQu2TPu/Ly+HaQ==", + "version": "5.62.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-5.62.0.tgz", + "integrity": "sha512-xsSQreu+VnfbqQpW5vnCJdq1Z3Q0U31qiWmRhr98ONQmcp/yhiPJFPq8MXiJVLiksmOKSjIldZzkebzHuCGzew==", "dev": true, "dependencies": { - "@typescript-eslint/typescript-estree": "5.59.7", - "@typescript-eslint/utils": "5.59.7", + "@typescript-eslint/typescript-estree": "5.62.0", + "@typescript-eslint/utils": "5.62.0", "debug": "^4.3.4", "tsutils": "^3.21.0" }, @@ -4969,10 +5207,27 @@ } } }, + "node_modules/@typescript-eslint/type-utils/node_modules/@typescript-eslint/scope-manager": { + "version": "5.62.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-5.62.0.tgz", + "integrity": "sha512-VXuvVvZeQCQb5Zgf4HAxc04q5j+WrNAtNh9OwCsCgpKqESMTu3tF/jhZ3xG6T4NZwWl65Bg8KuS2uEvhSfLl0w==", + "dev": true, + "dependencies": { + "@typescript-eslint/types": "5.62.0", + "@typescript-eslint/visitor-keys": "5.62.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, "node_modules/@typescript-eslint/type-utils/node_modules/@typescript-eslint/types": { - "version": "5.59.7", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-5.59.7.tgz", - "integrity": "sha512-UnVS2MRRg6p7xOSATscWkKjlf/NDKuqo5TdbWck6rIRZbmKpVNTLALzNvcjIfHBE7736kZOFc/4Z3VcZwuOM/A==", + "version": "5.62.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-5.62.0.tgz", + "integrity": "sha512-87NVngcbVXUahrRTqIK27gD2t5Cu1yuCXxbLcFtCzZGlfyVWWh8mLHkoxzjsB6DDNnvdL+fW8MiwPEJyGJQDgQ==", "dev": true, "engines": { "node": "^12.22.0 || ^14.17.0 || >=16.0.0" @@ -4983,13 +5238,13 @@ } }, "node_modules/@typescript-eslint/type-utils/node_modules/@typescript-eslint/typescript-estree": { - "version": "5.59.7", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-5.59.7.tgz", - "integrity": "sha512-4A1NtZ1I3wMN2UGDkU9HMBL+TIQfbrh4uS0WDMMpf3xMRursDbqEf1ahh6vAAe3mObt8k3ZATnezwG4pdtWuUQ==", + "version": "5.62.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-5.62.0.tgz", + "integrity": "sha512-CmcQ6uY7b9y694lKdRB8FEel7JbU/40iSAPomu++SjLMntB+2Leay2LO6i8VnJk58MtE9/nQSFIH6jpyRWyYzA==", "dev": true, "dependencies": { - "@typescript-eslint/types": "5.59.7", - "@typescript-eslint/visitor-keys": "5.59.7", + "@typescript-eslint/types": "5.62.0", + "@typescript-eslint/visitor-keys": "5.62.0", "debug": "^4.3.4", "globby": "^11.1.0", "is-glob": "^4.0.3", @@ -5009,75 +5264,18 @@ } } }, - "node_modules/@typescript-eslint/type-utils/node_modules/@typescript-eslint/visitor-keys": { - "version": "5.59.7", - "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-5.59.7.tgz", - "integrity": "sha512-tyN+X2jvMslUszIiYbF0ZleP+RqQsFVpGrKI6e0Eet1w8WmhsAtmzaqm8oM8WJQ1ysLwhnsK/4hYHJjOgJVfQQ==", - "dev": true, - "dependencies": { - "@typescript-eslint/types": "5.59.7", - "eslint-visitor-keys": "^3.3.0" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - } - }, - "node_modules/@typescript-eslint/types": { - "version": "5.60.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-5.60.1.tgz", - "integrity": "sha512-zDcDx5fccU8BA0IDZc71bAtYIcG9PowaOwaD8rjYbqwK7dpe/UMQl3inJ4UtUK42nOCT41jTSCwg76E62JpMcg==", - "dev": true, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - } - }, - "node_modules/@typescript-eslint/typescript-estree": { - "version": "5.60.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-5.60.1.tgz", - "integrity": "sha512-hkX70J9+2M2ZT6fhti5Q2FoU9zb+GeZK2SLP1WZlvUDqdMbEKhexZODD1WodNRyO8eS+4nScvT0dts8IdaBzfw==", - "dev": true, - "dependencies": { - "@typescript-eslint/types": "5.60.1", - "@typescript-eslint/visitor-keys": "5.60.1", - "debug": "^4.3.4", - "globby": "^11.1.0", - "is-glob": "^4.0.3", - "semver": "^7.3.7", - "tsutils": "^3.21.0" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - } - } - }, - "node_modules/@typescript-eslint/utils": { - "version": "5.59.7", - "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-5.59.7.tgz", - "integrity": "sha512-yCX9WpdQKaLufz5luG4aJbOpdXf/fjwGMcLFXZVPUz3QqLirG5QcwwnIHNf8cjLjxK4qtzTO8udUtMQSAToQnQ==", + "node_modules/@typescript-eslint/type-utils/node_modules/@typescript-eslint/utils": { + "version": "5.62.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-5.62.0.tgz", + "integrity": "sha512-n8oxjeb5aIbPFEtmQxQYOLI0i9n5ySBEY/ZEHHZqKQSFnxio1rv6dthascc9dLuwrL0RC5mPCxB7vnAVGAYWAQ==", "dev": true, "dependencies": { "@eslint-community/eslint-utils": "^4.2.0", "@types/json-schema": "^7.0.9", "@types/semver": "^7.3.12", - "@typescript-eslint/scope-manager": "5.59.7", - "@typescript-eslint/types": "5.59.7", - "@typescript-eslint/typescript-estree": "5.59.7", + "@typescript-eslint/scope-manager": "5.62.0", + "@typescript-eslint/types": "5.62.0", + "@typescript-eslint/typescript-estree": "5.62.0", "eslint-scope": "^5.1.1", "semver": "^7.3.7" }, @@ -5092,70 +5290,13 @@ "eslint": "^6.0.0 || ^7.0.0 || ^8.0.0" } }, - "node_modules/@typescript-eslint/utils/node_modules/@typescript-eslint/scope-manager": { - "version": "5.59.7", - "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-5.59.7.tgz", - "integrity": "sha512-FL6hkYWK9zBGdxT2wWEd2W8ocXMu3K94i3gvMrjXpx+koFYdYV7KprKfirpgY34vTGzEPPuKoERpP8kD5h7vZQ==", + "node_modules/@typescript-eslint/type-utils/node_modules/@typescript-eslint/visitor-keys": { + "version": "5.62.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-5.62.0.tgz", + "integrity": "sha512-07ny+LHRzQXepkGg6w0mFY41fVUNBrL2Roj/++7V1txKugfjm/Ci/qSND03r2RhlJhJYMcTn9AhhSSqQp0Ysyw==", "dev": true, "dependencies": { - "@typescript-eslint/types": "5.59.7", - "@typescript-eslint/visitor-keys": "5.59.7" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - } - }, - "node_modules/@typescript-eslint/utils/node_modules/@typescript-eslint/types": { - "version": "5.59.7", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-5.59.7.tgz", - "integrity": "sha512-UnVS2MRRg6p7xOSATscWkKjlf/NDKuqo5TdbWck6rIRZbmKpVNTLALzNvcjIfHBE7736kZOFc/4Z3VcZwuOM/A==", - "dev": true, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - } - }, - "node_modules/@typescript-eslint/utils/node_modules/@typescript-eslint/typescript-estree": { - "version": "5.59.7", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-5.59.7.tgz", - "integrity": "sha512-4A1NtZ1I3wMN2UGDkU9HMBL+TIQfbrh4uS0WDMMpf3xMRursDbqEf1ahh6vAAe3mObt8k3ZATnezwG4pdtWuUQ==", - "dev": true, - "dependencies": { - "@typescript-eslint/types": "5.59.7", - "@typescript-eslint/visitor-keys": "5.59.7", - "debug": "^4.3.4", - "globby": "^11.1.0", - "is-glob": "^4.0.3", - "semver": "^7.3.7", - "tsutils": "^3.21.0" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - } - } - }, - "node_modules/@typescript-eslint/utils/node_modules/@typescript-eslint/visitor-keys": { - "version": "5.59.7", - "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-5.59.7.tgz", - "integrity": "sha512-tyN+X2jvMslUszIiYbF0ZleP+RqQsFVpGrKI6e0Eet1w8WmhsAtmzaqm8oM8WJQ1ysLwhnsK/4hYHJjOgJVfQQ==", - "dev": true, - "dependencies": { - "@typescript-eslint/types": "5.59.7", + "@typescript-eslint/types": "5.62.0", "eslint-visitor-keys": "^3.3.0" }, "engines": { @@ -5166,7 +5307,7 @@ "url": "https://opencollective.com/typescript-eslint" } }, - "node_modules/@typescript-eslint/utils/node_modules/eslint-scope": { + "node_modules/@typescript-eslint/type-utils/node_modules/eslint-scope": { "version": "5.1.1", "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz", "integrity": "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==", @@ -5179,7 +5320,7 @@ "node": ">=8.0.0" } }, - "node_modules/@typescript-eslint/utils/node_modules/estraverse": { + "node_modules/@typescript-eslint/type-utils/node_modules/estraverse": { "version": "4.3.0", "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", @@ -5188,17 +5329,148 @@ "node": ">=4.0" } }, - "node_modules/@typescript-eslint/visitor-keys": { - "version": "5.60.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-5.60.1.tgz", - "integrity": "sha512-xEYIxKcultP6E/RMKqube11pGjXH1DCo60mQoWhVYyKfLkwbIVVjYxmOenNMxILx0TjCujPTjjnTIVzm09TXIw==", + "node_modules/@typescript-eslint/types": { + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-6.2.1.tgz", + "integrity": "sha512-528bGcoelrpw+sETlyM91k51Arl2ajbNT9L4JwoXE2dvRe1yd8Q64E4OL7vHYw31mlnVsf+BeeLyAZUEQtqahQ==", + "dev": true, + "engines": { + "node": "^16.0.0 || >=18.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "node_modules/@typescript-eslint/typescript-estree": { + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-6.2.1.tgz", + "integrity": "sha512-G+UJeQx9AKBHRQBpmvr8T/3K5bJa485eu+4tQBxFq0KoT22+jJyzo1B50JDT9QdC1DEmWQfdKsa8ybiNWYsi0Q==", "dev": true, "dependencies": { - "@typescript-eslint/types": "5.60.1", - "eslint-visitor-keys": "^3.3.0" + "@typescript-eslint/types": "6.2.1", + "@typescript-eslint/visitor-keys": "6.2.1", + "debug": "^4.3.4", + "globby": "^11.1.0", + "is-glob": "^4.0.3", + "semver": "^7.5.4", + "ts-api-utils": "^1.0.1" }, "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + "node": "^16.0.0 || >=18.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/@typescript-eslint/typescript-estree/node_modules/lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "dev": true, + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/@typescript-eslint/typescript-estree/node_modules/semver": { + "version": "7.5.4", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz", + "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==", + "dev": true, + "dependencies": { + "lru-cache": "^6.0.0" + }, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/@typescript-eslint/typescript-estree/node_modules/yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "dev": true + }, + "node_modules/@typescript-eslint/utils": { + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-6.2.1.tgz", + "integrity": "sha512-eBIXQeupYmxVB6S7x+B9SdBeB6qIdXKjgQBge2J+Ouv8h9Cxm5dHf/gfAZA6dkMaag+03HdbVInuXMmqFB/lKQ==", + "dev": true, + "dependencies": { + "@eslint-community/eslint-utils": "^4.4.0", + "@types/json-schema": "^7.0.12", + "@types/semver": "^7.5.0", + "@typescript-eslint/scope-manager": "6.2.1", + "@typescript-eslint/types": "6.2.1", + "@typescript-eslint/typescript-estree": "6.2.1", + "semver": "^7.5.4" + }, + "engines": { + "node": "^16.0.0 || >=18.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "eslint": "^7.0.0 || ^8.0.0" + } + }, + "node_modules/@typescript-eslint/utils/node_modules/lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "dev": true, + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/@typescript-eslint/utils/node_modules/semver": { + "version": "7.5.4", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz", + "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==", + "dev": true, + "dependencies": { + "lru-cache": "^6.0.0" + }, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/@typescript-eslint/utils/node_modules/yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "dev": true + }, + "node_modules/@typescript-eslint/visitor-keys": { + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-6.2.1.tgz", + "integrity": "sha512-iTN6w3k2JEZ7cyVdZJTVJx2Lv7t6zFA8DCrJEHD2mwfc16AEvvBWVhbFh34XyG2NORCd0viIgQY1+u7kPI0WpA==", + "dev": true, + "dependencies": { + "@typescript-eslint/types": "6.2.1", + "eslint-visitor-keys": "^3.4.1" + }, + "engines": { + "node": "^16.0.0 || >=18.0.0" }, "funding": { "type": "opencollective", @@ -5382,13 +5654,16 @@ "dev": true }, "node_modules/@yarnpkg/parsers": { - "version": "3.0.0-rc.47.1", - "resolved": "https://registry.npmjs.org/@yarnpkg/parsers/-/parsers-3.0.0-rc.47.1.tgz", - "integrity": "sha512-qKP4Rp7mc0lbERrxTPiEkwZiwIUUg3OhjbM4qcVWnVp1/RUP13vF4P4jHGOQY/AhyGOZKDjdRpaupCYl+phLOQ==", + "version": "3.0.0-rc.46", + "resolved": "https://registry.npmjs.org/@yarnpkg/parsers/-/parsers-3.0.0-rc.46.tgz", + "integrity": "sha512-aiATs7pSutzda/rq8fnuPwTglyVwjM22bNnK2ZgjrpAjQHSSl3lztd2f9evst1W/qnC58DRz7T7QndUDumAR4Q==", "dev": true, "dependencies": { "js-yaml": "^3.10.0", "tslib": "^2.4.0" + }, + "engines": { + "node": ">=14.15.0" } }, "node_modules/@zkochan/js-yaml": { @@ -5696,12 +5971,12 @@ } }, "node_modules/aria-query": { - "version": "5.1.3", - "resolved": "https://registry.npmjs.org/aria-query/-/aria-query-5.1.3.tgz", - "integrity": "sha512-R5iJ5lkuHybztUfuOAznmboyjWq8O6sqNqtK7CLOqdydi54VNbORp49mb14KbWgG1QD3JFO9hJdZ+y4KutfdOQ==", + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/aria-query/-/aria-query-5.3.0.tgz", + "integrity": "sha512-b0P0sZPKtyu8HkeRAfCq0IfURZK+SuwMjY1UXGBU27wpAiTwQAIlq56IbIO+ytk/JjS1fMR14ee5WBBfKi5J6A==", "dev": true, "dependencies": { - "deep-equal": "^2.0.5" + "dequal": "^2.0.3" } }, "node_modules/array-buffer-byte-length": { @@ -5810,12 +6085,12 @@ } }, "node_modules/babel-jest": { - "version": "29.5.0", - "resolved": "https://registry.npmjs.org/babel-jest/-/babel-jest-29.5.0.tgz", - "integrity": "sha512-mA4eCDh5mSo2EcA9xQjVTpmbbNk32Zb3Q3QFQsNhaK56Q+yoXowzFodLux30HRgyOho5rsQ6B0P9QpMkvvnJ0Q==", + "version": "29.6.2", + "resolved": "https://registry.npmjs.org/babel-jest/-/babel-jest-29.6.2.tgz", + "integrity": "sha512-BYCzImLos6J3BH/+HvUCHG1dTf2MzmAB4jaVxHV+29RZLjR29XuYTmsf2sdDwkrb+FczkGo3kOhE7ga6sI0P4A==", "dev": true, "dependencies": { - "@jest/transform": "^29.5.0", + "@jest/transform": "^29.6.2", "@types/babel__core": "^7.1.14", "babel-plugin-istanbul": "^6.1.1", "babel-preset-jest": "^29.5.0", @@ -5963,9 +6238,9 @@ } }, "node_modules/babel-plugin-polyfill-corejs2/node_modules/semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", "dev": true, "bin": { "semver": "bin/semver.js" @@ -6162,9 +6437,9 @@ "dev": true }, "node_modules/bootstrap": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/bootstrap/-/bootstrap-5.3.0.tgz", - "integrity": "sha512-UnBV3E3v4STVNQdms6jSGO2CvOkjUMdDAVR2V5N4uCMdaIkaQjbcEAMqRimDHIs4uqBYzDAKCQwCB+97tJgHQw==", + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/bootstrap/-/bootstrap-5.3.1.tgz", + "integrity": "sha512-jzwza3Yagduci2x0rr9MeFSORjcHpt0lRZukZPZQJT1Dth5qzV7XcgGqYzi39KGAVYR8QEDVoO0ubFKOxzMG+g==", "funding": [ { "type": "github", @@ -6176,7 +6451,7 @@ } ], "peerDependencies": { - "@popperjs/core": "^2.11.7" + "@popperjs/core": "^2.11.8" } }, "node_modules/brace-expansion": { @@ -6562,9 +6837,9 @@ } }, "node_modules/collect-v8-coverage": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/collect-v8-coverage/-/collect-v8-coverage-1.0.1.tgz", - "integrity": "sha512-iBPtljfCNcTKNAto0KEtDfZ3qzjJvqE3aTGZsbhjSBlorqpXJlaWWtPO35D+ZImoC3KWejX64o+yPGxhWSTzfg==", + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/collect-v8-coverage/-/collect-v8-coverage-1.0.2.tgz", + "integrity": "sha512-lHl4d5/ONEbLlJvaJNtsF/Lz+WvB07u2ycqTYbdrq7UypDXailES4valYb2eWiJFxZlVmpGekfqoxQhzyFdT4Q==", "dev": true }, "node_modules/color-convert": { @@ -7226,10 +7501,18 @@ "dev": true }, "node_modules/dedent": { - "version": "0.7.0", - "resolved": "https://registry.npmjs.org/dedent/-/dedent-0.7.0.tgz", - "integrity": "sha512-Q6fKUPqnAHAyhiUgFU7BUzLiv0kd8saH9al7tnu5Q/okj6dnupxyTgFIBjVzJATdfIAm9NAsvXNzjaKa+bxVyA==", - "dev": true + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/dedent/-/dedent-1.5.1.tgz", + "integrity": "sha512-+LxW+KLWxu3HW3M2w2ympwtqPrqYRzU8fqi6Fhd18fBALe15blJPI/I4+UHveMVG6lJqB4JNd4UG0S5cnVHwIg==", + "dev": true, + "peerDependencies": { + "babel-plugin-macros": "^3.1.0" + }, + "peerDependenciesMeta": { + "babel-plugin-macros": { + "optional": true + } + } }, "node_modules/deep-equal": { "version": "2.2.1", @@ -7348,6 +7631,15 @@ "node": ">= 0.8" } }, + "node_modules/dequal": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/dequal/-/dequal-2.0.3.tgz", + "integrity": "sha512-0je+qPKHEMohvfRTCEo3CrPG6cAzAYgmzKyxRiYSSDkS6eGJdyVJm7WaYA5ECaAD9wLB2T4EEeymA5aFVcYXCA==", + "dev": true, + "engines": { + "node": ">=6" + } + }, "node_modules/destroy": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.2.0.tgz", @@ -7823,27 +8115,27 @@ } }, "node_modules/eslint": { - "version": "8.44.0", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.44.0.tgz", - "integrity": "sha512-0wpHoUbDUHgNCyvFB5aXLiQVfK9B0at6gUvzy83k4kAsQ/u769TQDX6iKC+aO4upIHO9WSaA3QoXYQDHbNwf1A==", + "version": "8.46.0", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.46.0.tgz", + "integrity": "sha512-cIO74PvbW0qU8e0mIvk5IV3ToWdCq5FYG6gWPHHkx6gNdjlbAYvtfHmlCMXxjcoVaIdwy/IAt3+mDkZkfvb2Dg==", "dev": true, "dependencies": { "@eslint-community/eslint-utils": "^4.2.0", - "@eslint-community/regexpp": "^4.4.0", - "@eslint/eslintrc": "^2.1.0", - "@eslint/js": "8.44.0", + "@eslint-community/regexpp": "^4.6.1", + "@eslint/eslintrc": "^2.1.1", + "@eslint/js": "^8.46.0", "@humanwhocodes/config-array": "^0.11.10", "@humanwhocodes/module-importer": "^1.0.1", "@nodelib/fs.walk": "^1.2.8", - "ajv": "^6.10.0", + "ajv": "^6.12.4", "chalk": "^4.0.0", "cross-spawn": "^7.0.2", "debug": "^4.3.2", "doctrine": "^3.0.0", "escape-string-regexp": "^4.0.0", - "eslint-scope": "^7.2.0", - "eslint-visitor-keys": "^3.4.1", - "espree": "^9.6.0", + "eslint-scope": "^7.2.2", + "eslint-visitor-keys": "^3.4.2", + "espree": "^9.6.1", "esquery": "^1.4.2", "esutils": "^2.0.2", "fast-deep-equal": "^3.1.3", @@ -7853,7 +8145,6 @@ "globals": "^13.19.0", "graphemer": "^1.4.0", "ignore": "^5.2.0", - "import-fresh": "^3.0.0", "imurmurhash": "^0.1.4", "is-glob": "^4.0.0", "is-path-inside": "^3.0.3", @@ -7865,7 +8156,6 @@ "natural-compare": "^1.4.0", "optionator": "^0.9.3", "strip-ansi": "^6.0.1", - "strip-json-comments": "^3.1.0", "text-table": "^0.2.0" }, "bin": { @@ -7879,9 +8169,9 @@ } }, "node_modules/eslint-scope": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.2.0.tgz", - "integrity": "sha512-DYj5deGlHBfMt15J7rdtyKNq/Nqlv5KfU4iodrQ019XESsRnwXH9KAE0y3cwtUHDo2ob7CypAnCqefh6vioWRw==", + "version": "7.2.2", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.2.2.tgz", + "integrity": "sha512-dOt21O7lTMhDM+X9mB4GX+DZrZtCUJPL/wlcTqxyrx5IvO0IYtILdtrQGQp+8n5S0gwSVmOf9NQrjMOgfQZlIg==", "dev": true, "dependencies": { "esrecurse": "^4.3.0", @@ -7895,9 +8185,9 @@ } }, "node_modules/eslint-visitor-keys": { - "version": "3.4.1", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.1.tgz", - "integrity": "sha512-pZnmmLwYzf+kWaM/Qgrvpen51upAktaaiI01nsJD/Yr3lMOdNtq0cxkrrg16w64VtisN6okbs7Q8AfGqj4c9fA==", + "version": "3.4.2", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.2.tgz", + "integrity": "sha512-8drBzUEyZ2llkpCA67iYrgEssKDUu68V8ChqqOfFupIaG/LCVPUT+CoGJpT77zJprs4T/W7p07LP7zAIMuweVw==", "dev": true, "engines": { "node": "^12.22.0 || ^14.17.0 || >=16.0.0" @@ -8114,9 +8404,9 @@ } }, "node_modules/espree": { - "version": "9.6.0", - "resolved": "https://registry.npmjs.org/espree/-/espree-9.6.0.tgz", - "integrity": "sha512-1FH/IiruXZ84tpUlm0aCUEwMl2Ho5ilqVh0VvQXw+byAz/4SAciyHLlfmL5WYqsvD38oymdUwBss0LtK8m4s/A==", + "version": "9.6.1", + "resolved": "https://registry.npmjs.org/espree/-/espree-9.6.1.tgz", + "integrity": "sha512-oruZaFkjorTpF32kDSI5/75ViwGeZginGGy2NoOSg3Q9bnwlnmDm4HLnkl0RE3n+njDXR037aY1+x58Z/zFdwQ==", "dev": true, "dependencies": { "acorn": "^8.9.0", @@ -8254,16 +8544,17 @@ } }, "node_modules/expect": { - "version": "29.5.0", - "resolved": "https://registry.npmjs.org/expect/-/expect-29.5.0.tgz", - "integrity": "sha512-yM7xqUrCO2JdpFo4XpM82t+PJBFybdqoQuJLDGeDX2ij8NZzqRHyu3Hp188/JX7SWqud+7t4MUdvcgGBICMHZg==", + "version": "29.6.2", + "resolved": "https://registry.npmjs.org/expect/-/expect-29.6.2.tgz", + "integrity": "sha512-iAErsLxJ8C+S02QbLAwgSGSezLQK+XXRDt8IuFXFpwCNw2ECmzZSmjKcCaFVp5VRMk+WAvz6h6jokzEzBFZEuA==", "dev": true, "dependencies": { - "@jest/expect-utils": "^29.5.0", + "@jest/expect-utils": "^29.6.2", + "@types/node": "*", "jest-get-type": "^29.4.3", - "jest-matcher-utils": "^29.5.0", - "jest-message-util": "^29.5.0", - "jest-util": "^29.5.0" + "jest-matcher-utils": "^29.6.2", + "jest-message-util": "^29.6.2", + "jest-util": "^29.6.2" }, "engines": { "node": "^14.15.0 || ^16.10.0 || >=18.0.0" @@ -8374,6 +8665,7 @@ "version": "3.2.12", "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.12.tgz", "integrity": "sha512-DVj4CQIYYow0BlaelwK1pHl5n5cRSJfM60UA0zK891sVInoPri2Ekj7+e1CT3/3qxXenpI+nBBmQAcJPJgaj4w==", + "dev": true, "dependencies": { "@nodelib/fs.stat": "^2.0.2", "@nodelib/fs.walk": "^1.2.3", @@ -8938,12 +9230,6 @@ "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==", "dev": true }, - "node_modules/grapheme-splitter": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/grapheme-splitter/-/grapheme-splitter-1.0.4.tgz", - "integrity": "sha512-bzh50DW9kTPM00T8y4o8vQg89Di9oLJVLW/KaOGIXJWP/iqCN6WKYkbNOF04vFLJhwcpYUh9ydh/+5vpOqV4YQ==", - "dev": true - }, "node_modules/graphemer": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/graphemer/-/graphemer-1.4.0.tgz", @@ -10066,26 +10352,26 @@ } }, "node_modules/istanbul-lib-instrument/node_modules/semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", "dev": true, "bin": { "semver": "bin/semver.js" } }, "node_modules/istanbul-lib-report": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/istanbul-lib-report/-/istanbul-lib-report-3.0.0.tgz", - "integrity": "sha512-wcdi+uAKzfiGT2abPpKZ0hSU1rGQjUQnLvtY5MpQ7QCTahD3VODhcu4wcfY1YtkGaDD5yuydOLINXsfbus9ROw==", + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/istanbul-lib-report/-/istanbul-lib-report-3.0.1.tgz", + "integrity": "sha512-GCfE1mtsHGOELCU8e/Z7YWzpmybrx/+dSTfLrvY8qRmaY6zXTKWn6WQIjaAFw069icm6GVMNkgu0NzI4iPZUNw==", "dev": true, "dependencies": { "istanbul-lib-coverage": "^3.0.0", - "make-dir": "^3.0.0", + "make-dir": "^4.0.0", "supports-color": "^7.1.0" }, "engines": { - "node": ">=8" + "node": ">=10" } }, "node_modules/istanbul-lib-report/node_modules/has-flag": { @@ -10097,6 +10383,21 @@ "node": ">=8" } }, + "node_modules/istanbul-lib-report/node_modules/make-dir": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-4.0.0.tgz", + "integrity": "sha512-hXdUTZYIVOt1Ex//jAQi+wTZZpUpwBj/0QsOzqegb3rGMMeJiSEu5xLHnYfBrRV4RH2+OCSOO95Is/7x1WJ4bw==", + "dev": true, + "dependencies": { + "semver": "^7.5.3" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/istanbul-lib-report/node_modules/supports-color": { "version": "7.2.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", @@ -10133,9 +10434,9 @@ } }, "node_modules/istanbul-reports": { - "version": "3.1.5", - "resolved": "https://registry.npmjs.org/istanbul-reports/-/istanbul-reports-3.1.5.tgz", - "integrity": "sha512-nUsEMa9pBt/NOHqbcbeJEgqIlY/K7rVWUX6Lql2orY5e9roQOthbR3vtY4zzf2orPELg80fnxxk9zUyPlgwD1w==", + "version": "3.1.6", + "resolved": "https://registry.npmjs.org/istanbul-reports/-/istanbul-reports-3.1.6.tgz", + "integrity": "sha512-TLgnMkKg3iTDsQ9PbPTdpfAK2DzjF9mqUG7RMgcQl8oFjad8ob4laGxv5XV5U9MAfx8D6tSJiUyuAwzLicaxlg==", "dev": true, "dependencies": { "html-escaper": "^2.0.0", @@ -10252,15 +10553,15 @@ } }, "node_modules/jest": { - "version": "29.5.0", - "resolved": "https://registry.npmjs.org/jest/-/jest-29.5.0.tgz", - "integrity": "sha512-juMg3he2uru1QoXX078zTa7pO85QyB9xajZc6bU+d9yEGwrKX6+vGmJQ3UdVZsvTEUARIdObzH68QItim6OSSQ==", + "version": "29.6.2", + "resolved": "https://registry.npmjs.org/jest/-/jest-29.6.2.tgz", + "integrity": "sha512-8eQg2mqFbaP7CwfsTpCxQ+sHzw1WuNWL5UUvjnWP4hx2riGz9fPSzYOaU5q8/GqWn1TfgZIVTqYJygbGbWAANg==", "dev": true, "dependencies": { - "@jest/core": "^29.5.0", - "@jest/types": "^29.5.0", + "@jest/core": "^29.6.2", + "@jest/types": "^29.6.1", "import-local": "^3.0.2", - "jest-cli": "^29.5.0" + "jest-cli": "^29.6.2" }, "bin": { "jest": "bin/jest.js" @@ -10291,28 +10592,28 @@ } }, "node_modules/jest-circus": { - "version": "29.5.0", - "resolved": "https://registry.npmjs.org/jest-circus/-/jest-circus-29.5.0.tgz", - "integrity": "sha512-gq/ongqeQKAplVxqJmbeUOJJKkW3dDNPY8PjhJ5G0lBRvu0e3EWGxGy5cI4LAGA7gV2UHCtWBI4EMXK8c9nQKA==", + "version": "29.6.2", + "resolved": "https://registry.npmjs.org/jest-circus/-/jest-circus-29.6.2.tgz", + "integrity": "sha512-G9mN+KOYIUe2sB9kpJkO9Bk18J4dTDArNFPwoZ7WKHKel55eKIS/u2bLthxgojwlf9NLCVQfgzM/WsOVvoC6Fw==", "dev": true, "dependencies": { - "@jest/environment": "^29.5.0", - "@jest/expect": "^29.5.0", - "@jest/test-result": "^29.5.0", - "@jest/types": "^29.5.0", + "@jest/environment": "^29.6.2", + "@jest/expect": "^29.6.2", + "@jest/test-result": "^29.6.2", + "@jest/types": "^29.6.1", "@types/node": "*", "chalk": "^4.0.0", "co": "^4.6.0", - "dedent": "^0.7.0", + "dedent": "^1.0.0", "is-generator-fn": "^2.0.0", - "jest-each": "^29.5.0", - "jest-matcher-utils": "^29.5.0", - "jest-message-util": "^29.5.0", - "jest-runtime": "^29.5.0", - "jest-snapshot": "^29.5.0", - "jest-util": "^29.5.0", + "jest-each": "^29.6.2", + "jest-matcher-utils": "^29.6.2", + "jest-message-util": "^29.6.2", + "jest-runtime": "^29.6.2", + "jest-snapshot": "^29.6.2", + "jest-util": "^29.6.2", "p-limit": "^3.1.0", - "pretty-format": "^29.5.0", + "pretty-format": "^29.6.2", "pure-rand": "^6.0.0", "slash": "^3.0.0", "stack-utils": "^2.0.3" @@ -10392,21 +10693,21 @@ } }, "node_modules/jest-cli": { - "version": "29.5.0", - "resolved": "https://registry.npmjs.org/jest-cli/-/jest-cli-29.5.0.tgz", - "integrity": "sha512-L1KcP1l4HtfwdxXNFCL5bmUbLQiKrakMUriBEcc1Vfz6gx31ORKdreuWvmQVBit+1ss9NNR3yxjwfwzZNdQXJw==", + "version": "29.6.2", + "resolved": "https://registry.npmjs.org/jest-cli/-/jest-cli-29.6.2.tgz", + "integrity": "sha512-TT6O247v6dCEX2UGHGyflMpxhnrL0DNqP2fRTKYm3nJJpCTfXX3GCMQPGFjXDoj0i5/Blp3jriKXFgdfmbYB6Q==", "dev": true, "dependencies": { - "@jest/core": "^29.5.0", - "@jest/test-result": "^29.5.0", - "@jest/types": "^29.5.0", + "@jest/core": "^29.6.2", + "@jest/test-result": "^29.6.2", + "@jest/types": "^29.6.1", "chalk": "^4.0.0", "exit": "^0.1.2", "graceful-fs": "^4.2.9", "import-local": "^3.0.2", - "jest-config": "^29.5.0", - "jest-util": "^29.5.0", - "jest-validate": "^29.5.0", + "jest-config": "^29.6.2", + "jest-util": "^29.6.2", + "jest-validate": "^29.6.2", "prompts": "^2.0.1", "yargs": "^17.3.1" }, @@ -10496,31 +10797,31 @@ } }, "node_modules/jest-config": { - "version": "29.5.0", - "resolved": "https://registry.npmjs.org/jest-config/-/jest-config-29.5.0.tgz", - "integrity": "sha512-kvDUKBnNJPNBmFFOhDbm59iu1Fii1Q6SxyhXfvylq3UTHbg6o7j/g8k2dZyXWLvfdKB1vAPxNZnMgtKJcmu3kA==", + "version": "29.6.2", + "resolved": "https://registry.npmjs.org/jest-config/-/jest-config-29.6.2.tgz", + "integrity": "sha512-VxwFOC8gkiJbuodG9CPtMRjBUNZEHxwfQXmIudSTzFWxaci3Qub1ddTRbFNQlD/zUeaifLndh/eDccFX4wCMQw==", "dev": true, "dependencies": { "@babel/core": "^7.11.6", - "@jest/test-sequencer": "^29.5.0", - "@jest/types": "^29.5.0", - "babel-jest": "^29.5.0", + "@jest/test-sequencer": "^29.6.2", + "@jest/types": "^29.6.1", + "babel-jest": "^29.6.2", "chalk": "^4.0.0", "ci-info": "^3.2.0", "deepmerge": "^4.2.2", "glob": "^7.1.3", "graceful-fs": "^4.2.9", - "jest-circus": "^29.5.0", - "jest-environment-node": "^29.5.0", + "jest-circus": "^29.6.2", + "jest-environment-node": "^29.6.2", "jest-get-type": "^29.4.3", "jest-regex-util": "^29.4.3", - "jest-resolve": "^29.5.0", - "jest-runner": "^29.5.0", - "jest-util": "^29.5.0", - "jest-validate": "^29.5.0", + "jest-resolve": "^29.6.2", + "jest-runner": "^29.6.2", + "jest-util": "^29.6.2", + "jest-validate": "^29.6.2", "micromatch": "^4.0.4", "parse-json": "^5.2.0", - "pretty-format": "^29.5.0", + "pretty-format": "^29.6.2", "slash": "^3.0.0", "strip-json-comments": "^3.1.1" }, @@ -10631,15 +10932,15 @@ } }, "node_modules/jest-diff": { - "version": "29.5.0", - "resolved": "https://registry.npmjs.org/jest-diff/-/jest-diff-29.5.0.tgz", - "integrity": "sha512-LtxijLLZBduXnHSniy0WMdaHjmQnt3g5sa16W4p0HqukYTTsyTW3GD1q41TyGl5YFXj/5B2U6dlh5FM1LIMgxw==", + "version": "29.6.2", + "resolved": "https://registry.npmjs.org/jest-diff/-/jest-diff-29.6.2.tgz", + "integrity": "sha512-t+ST7CB9GX5F2xKwhwCf0TAR17uNDiaPTZnVymP9lw0lssa9vG+AFyDZoeIHStU3WowFFwT+ky+er0WVl2yGhA==", "dev": true, "dependencies": { "chalk": "^4.0.0", "diff-sequences": "^29.4.3", "jest-get-type": "^29.4.3", - "pretty-format": "^29.5.0" + "pretty-format": "^29.6.2" }, "engines": { "node": "^14.15.0 || ^16.10.0 || >=18.0.0" @@ -10728,16 +11029,16 @@ } }, "node_modules/jest-each": { - "version": "29.5.0", - "resolved": "https://registry.npmjs.org/jest-each/-/jest-each-29.5.0.tgz", - "integrity": "sha512-HM5kIJ1BTnVt+DQZ2ALp3rzXEl+g726csObrW/jpEGl+CDSSQpOJJX2KE/vEg8cxcMXdyEPu6U4QX5eruQv5hA==", + "version": "29.6.2", + "resolved": "https://registry.npmjs.org/jest-each/-/jest-each-29.6.2.tgz", + "integrity": "sha512-MsrsqA0Ia99cIpABBc3izS1ZYoYfhIy0NNWqPSE0YXbQjwchyt6B1HD2khzyPe1WiJA7hbxXy77ZoUQxn8UlSw==", "dev": true, "dependencies": { - "@jest/types": "^29.5.0", + "@jest/types": "^29.6.1", "chalk": "^4.0.0", "jest-get-type": "^29.4.3", - "jest-util": "^29.5.0", - "pretty-format": "^29.5.0" + "jest-util": "^29.6.2", + "pretty-format": "^29.6.2" }, "engines": { "node": "^14.15.0 || ^16.10.0 || >=18.0.0" @@ -10814,18 +11115,18 @@ } }, "node_modules/jest-environment-jsdom": { - "version": "29.5.0", - "resolved": "https://registry.npmjs.org/jest-environment-jsdom/-/jest-environment-jsdom-29.5.0.tgz", - "integrity": "sha512-/KG8yEK4aN8ak56yFVdqFDzKNHgF4BAymCx2LbPNPsUshUlfAl0eX402Xm1pt+eoG9SLZEUVifqXtX8SK74KCw==", + "version": "29.6.2", + "resolved": "https://registry.npmjs.org/jest-environment-jsdom/-/jest-environment-jsdom-29.6.2.tgz", + "integrity": "sha512-7oa/+266AAEgkzae8i1awNEfTfjwawWKLpiw2XesZmaoVVj9u9t8JOYx18cG29rbPNtkUlZ8V4b5Jb36y/VxoQ==", "dev": true, "dependencies": { - "@jest/environment": "^29.5.0", - "@jest/fake-timers": "^29.5.0", - "@jest/types": "^29.5.0", + "@jest/environment": "^29.6.2", + "@jest/fake-timers": "^29.6.2", + "@jest/types": "^29.6.1", "@types/jsdom": "^20.0.0", "@types/node": "*", - "jest-mock": "^29.5.0", - "jest-util": "^29.5.0", + "jest-mock": "^29.6.2", + "jest-util": "^29.6.2", "jsdom": "^20.0.0" }, "engines": { @@ -10841,17 +11142,17 @@ } }, "node_modules/jest-environment-node": { - "version": "29.5.0", - "resolved": "https://registry.npmjs.org/jest-environment-node/-/jest-environment-node-29.5.0.tgz", - "integrity": "sha512-ExxuIK/+yQ+6PRGaHkKewYtg6hto2uGCgvKdb2nfJfKXgZ17DfXjvbZ+jA1Qt9A8EQSfPnt5FKIfnOO3u1h9qw==", + "version": "29.6.2", + "resolved": "https://registry.npmjs.org/jest-environment-node/-/jest-environment-node-29.6.2.tgz", + "integrity": "sha512-YGdFeZ3T9a+/612c5mTQIllvWkddPbYcN2v95ZH24oWMbGA4GGS2XdIF92QMhUhvrjjuQWYgUGW2zawOyH63MQ==", "dev": true, "dependencies": { - "@jest/environment": "^29.5.0", - "@jest/fake-timers": "^29.5.0", - "@jest/types": "^29.5.0", + "@jest/environment": "^29.6.2", + "@jest/fake-timers": "^29.6.2", + "@jest/types": "^29.6.1", "@types/node": "*", - "jest-mock": "^29.5.0", - "jest-util": "^29.5.0" + "jest-mock": "^29.6.2", + "jest-util": "^29.6.2" }, "engines": { "node": "^14.15.0 || ^16.10.0 || >=18.0.0" @@ -10867,20 +11168,20 @@ } }, "node_modules/jest-haste-map": { - "version": "29.5.0", - "resolved": "https://registry.npmjs.org/jest-haste-map/-/jest-haste-map-29.5.0.tgz", - "integrity": "sha512-IspOPnnBro8YfVYSw6yDRKh/TiCdRngjxeacCps1cQ9cgVN6+10JUcuJ1EabrgYLOATsIAigxA0rLR9x/YlrSA==", + "version": "29.6.2", + "resolved": "https://registry.npmjs.org/jest-haste-map/-/jest-haste-map-29.6.2.tgz", + "integrity": "sha512-+51XleTDAAysvU8rT6AnS1ZJ+WHVNqhj1k6nTvN2PYP+HjU3kqlaKQ1Lnw3NYW3bm2r8vq82X0Z1nDDHZMzHVA==", "dev": true, "dependencies": { - "@jest/types": "^29.5.0", + "@jest/types": "^29.6.1", "@types/graceful-fs": "^4.1.3", "@types/node": "*", "anymatch": "^3.0.3", "fb-watchman": "^2.0.0", "graceful-fs": "^4.2.9", "jest-regex-util": "^29.4.3", - "jest-util": "^29.5.0", - "jest-worker": "^29.5.0", + "jest-util": "^29.6.2", + "jest-worker": "^29.6.2", "micromatch": "^4.0.4", "walker": "^1.0.8" }, @@ -10892,28 +11193,28 @@ } }, "node_modules/jest-leak-detector": { - "version": "29.5.0", - "resolved": "https://registry.npmjs.org/jest-leak-detector/-/jest-leak-detector-29.5.0.tgz", - "integrity": "sha512-u9YdeeVnghBUtpN5mVxjID7KbkKE1QU4f6uUwuxiY0vYRi9BUCLKlPEZfDGR67ofdFmDz9oPAy2G92Ujrntmow==", + "version": "29.6.2", + "resolved": "https://registry.npmjs.org/jest-leak-detector/-/jest-leak-detector-29.6.2.tgz", + "integrity": "sha512-aNqYhfp5uYEO3tdWMb2bfWv6f0b4I0LOxVRpnRLAeque2uqOVVMLh6khnTcE2qJ5wAKop0HcreM1btoysD6bPQ==", "dev": true, "dependencies": { "jest-get-type": "^29.4.3", - "pretty-format": "^29.5.0" + "pretty-format": "^29.6.2" }, "engines": { "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, "node_modules/jest-matcher-utils": { - "version": "29.5.0", - "resolved": "https://registry.npmjs.org/jest-matcher-utils/-/jest-matcher-utils-29.5.0.tgz", - "integrity": "sha512-lecRtgm/rjIK0CQ7LPQwzCs2VwW6WAahA55YBuI+xqmhm7LAaxokSB8C97yJeYyT+HvQkH741StzpU41wohhWw==", + "version": "29.6.2", + "resolved": "https://registry.npmjs.org/jest-matcher-utils/-/jest-matcher-utils-29.6.2.tgz", + "integrity": "sha512-4LiAk3hSSobtomeIAzFTe+N8kL6z0JtF3n6I4fg29iIW7tt99R7ZcIFW34QkX+DuVrf+CUe6wuVOpm7ZKFJzZQ==", "dev": true, "dependencies": { "chalk": "^4.0.0", - "jest-diff": "^29.5.0", + "jest-diff": "^29.6.2", "jest-get-type": "^29.4.3", - "pretty-format": "^29.5.0" + "pretty-format": "^29.6.2" }, "engines": { "node": "^14.15.0 || ^16.10.0 || >=18.0.0" @@ -10990,18 +11291,18 @@ } }, "node_modules/jest-message-util": { - "version": "29.5.0", - "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-29.5.0.tgz", - "integrity": "sha512-Kijeg9Dag6CKtIDA7O21zNTACqD5MD/8HfIV8pdD94vFyFuer52SigdC3IQMhab3vACxXMiFk+yMHNdbqtyTGA==", + "version": "29.6.2", + "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-29.6.2.tgz", + "integrity": "sha512-vnIGYEjoPSuRqV8W9t+Wow95SDp6KPX2Uf7EoeG9G99J2OVh7OSwpS4B6J0NfpEIpfkBNHlBZpA2rblEuEFhZQ==", "dev": true, "dependencies": { "@babel/code-frame": "^7.12.13", - "@jest/types": "^29.5.0", + "@jest/types": "^29.6.1", "@types/stack-utils": "^2.0.0", "chalk": "^4.0.0", "graceful-fs": "^4.2.9", "micromatch": "^4.0.4", - "pretty-format": "^29.5.0", + "pretty-format": "^29.6.2", "slash": "^3.0.0", "stack-utils": "^2.0.3" }, @@ -11080,14 +11381,14 @@ } }, "node_modules/jest-mock": { - "version": "29.5.0", - "resolved": "https://registry.npmjs.org/jest-mock/-/jest-mock-29.5.0.tgz", - "integrity": "sha512-GqOzvdWDE4fAV2bWQLQCkujxYWL7RxjCnj71b5VhDAGOevB3qj3Ovg26A5NI84ZpODxyzaozXLOh2NCgkbvyaw==", + "version": "29.6.2", + "resolved": "https://registry.npmjs.org/jest-mock/-/jest-mock-29.6.2.tgz", + "integrity": "sha512-hoSv3lb3byzdKfwqCuT6uTscan471GUECqgNYykg6ob0yiAw3zYc7OrPnI9Qv8Wwoa4lC7AZ9hyS4AiIx5U2zg==", "dev": true, "dependencies": { - "@jest/types": "^29.5.0", + "@jest/types": "^29.6.1", "@types/node": "*", - "jest-util": "^29.5.0" + "jest-util": "^29.6.2" }, "engines": { "node": "^14.15.0 || ^16.10.0 || >=18.0.0" @@ -11148,17 +11449,17 @@ } }, "node_modules/jest-resolve": { - "version": "29.5.0", - "resolved": "https://registry.npmjs.org/jest-resolve/-/jest-resolve-29.5.0.tgz", - "integrity": "sha512-1TzxJ37FQq7J10jPtQjcc+MkCkE3GBpBecsSUWJ0qZNJpmg6m0D9/7II03yJulm3H/fvVjgqLh/k2eYg+ui52w==", + "version": "29.6.2", + "resolved": "https://registry.npmjs.org/jest-resolve/-/jest-resolve-29.6.2.tgz", + "integrity": "sha512-G/iQUvZWI5e3SMFssc4ug4dH0aZiZpsDq9o1PtXTV1210Ztyb2+w+ZgQkB3iOiC5SmAEzJBOHWz6Hvrd+QnNPw==", "dev": true, "dependencies": { "chalk": "^4.0.0", "graceful-fs": "^4.2.9", - "jest-haste-map": "^29.5.0", + "jest-haste-map": "^29.6.2", "jest-pnp-resolver": "^1.2.2", - "jest-util": "^29.5.0", - "jest-validate": "^29.5.0", + "jest-util": "^29.6.2", + "jest-validate": "^29.6.2", "resolve": "^1.20.0", "resolve.exports": "^2.0.0", "slash": "^3.0.0" @@ -11168,13 +11469,13 @@ } }, "node_modules/jest-resolve-dependencies": { - "version": "29.5.0", - "resolved": "https://registry.npmjs.org/jest-resolve-dependencies/-/jest-resolve-dependencies-29.5.0.tgz", - "integrity": "sha512-sjV3GFr0hDJMBpYeUuGduP+YeCRbd7S/ck6IvL3kQ9cpySYKqcqhdLLC2rFwrcL7tz5vYibomBrsFYWkIGGjOg==", + "version": "29.6.2", + "resolved": "https://registry.npmjs.org/jest-resolve-dependencies/-/jest-resolve-dependencies-29.6.2.tgz", + "integrity": "sha512-LGqjDWxg2fuQQm7ypDxduLu/m4+4Lb4gczc13v51VMZbVP5tSBILqVx8qfWcsdP8f0G7aIqByIALDB0R93yL+w==", "dev": true, "dependencies": { "jest-regex-util": "^29.4.3", - "jest-snapshot": "^29.5.0" + "jest-snapshot": "^29.6.2" }, "engines": { "node": "^14.15.0 || ^16.10.0 || >=18.0.0" @@ -11251,30 +11552,30 @@ } }, "node_modules/jest-runner": { - "version": "29.5.0", - "resolved": "https://registry.npmjs.org/jest-runner/-/jest-runner-29.5.0.tgz", - "integrity": "sha512-m7b6ypERhFghJsslMLhydaXBiLf7+jXy8FwGRHO3BGV1mcQpPbwiqiKUR2zU2NJuNeMenJmlFZCsIqzJCTeGLQ==", + "version": "29.6.2", + "resolved": "https://registry.npmjs.org/jest-runner/-/jest-runner-29.6.2.tgz", + "integrity": "sha512-wXOT/a0EspYgfMiYHxwGLPCZfC0c38MivAlb2lMEAlwHINKemrttu1uSbcGbfDV31sFaPWnWJPmb2qXM8pqZ4w==", "dev": true, "dependencies": { - "@jest/console": "^29.5.0", - "@jest/environment": "^29.5.0", - "@jest/test-result": "^29.5.0", - "@jest/transform": "^29.5.0", - "@jest/types": "^29.5.0", + "@jest/console": "^29.6.2", + "@jest/environment": "^29.6.2", + "@jest/test-result": "^29.6.2", + "@jest/transform": "^29.6.2", + "@jest/types": "^29.6.1", "@types/node": "*", "chalk": "^4.0.0", "emittery": "^0.13.1", "graceful-fs": "^4.2.9", "jest-docblock": "^29.4.3", - "jest-environment-node": "^29.5.0", - "jest-haste-map": "^29.5.0", - "jest-leak-detector": "^29.5.0", - "jest-message-util": "^29.5.0", - "jest-resolve": "^29.5.0", - "jest-runtime": "^29.5.0", - "jest-util": "^29.5.0", - "jest-watcher": "^29.5.0", - "jest-worker": "^29.5.0", + "jest-environment-node": "^29.6.2", + "jest-haste-map": "^29.6.2", + "jest-leak-detector": "^29.6.2", + "jest-message-util": "^29.6.2", + "jest-resolve": "^29.6.2", + "jest-runtime": "^29.6.2", + "jest-util": "^29.6.2", + "jest-watcher": "^29.6.2", + "jest-worker": "^29.6.2", "p-limit": "^3.1.0", "source-map-support": "0.5.13" }, @@ -11372,31 +11673,31 @@ } }, "node_modules/jest-runtime": { - "version": "29.5.0", - "resolved": "https://registry.npmjs.org/jest-runtime/-/jest-runtime-29.5.0.tgz", - "integrity": "sha512-1Hr6Hh7bAgXQP+pln3homOiEZtCDZFqwmle7Ew2j8OlbkIu6uE3Y/etJQG8MLQs3Zy90xrp2C0BRrtPHG4zryw==", + "version": "29.6.2", + "resolved": "https://registry.npmjs.org/jest-runtime/-/jest-runtime-29.6.2.tgz", + "integrity": "sha512-2X9dqK768KufGJyIeLmIzToDmsN0m7Iek8QNxRSI/2+iPFYHF0jTwlO3ftn7gdKd98G/VQw9XJCk77rbTGZnJg==", "dev": true, "dependencies": { - "@jest/environment": "^29.5.0", - "@jest/fake-timers": "^29.5.0", - "@jest/globals": "^29.5.0", - "@jest/source-map": "^29.4.3", - "@jest/test-result": "^29.5.0", - "@jest/transform": "^29.5.0", - "@jest/types": "^29.5.0", + "@jest/environment": "^29.6.2", + "@jest/fake-timers": "^29.6.2", + "@jest/globals": "^29.6.2", + "@jest/source-map": "^29.6.0", + "@jest/test-result": "^29.6.2", + "@jest/transform": "^29.6.2", + "@jest/types": "^29.6.1", "@types/node": "*", "chalk": "^4.0.0", "cjs-module-lexer": "^1.0.0", "collect-v8-coverage": "^1.0.0", "glob": "^7.1.3", "graceful-fs": "^4.2.9", - "jest-haste-map": "^29.5.0", - "jest-message-util": "^29.5.0", - "jest-mock": "^29.5.0", + "jest-haste-map": "^29.6.2", + "jest-message-util": "^29.6.2", + "jest-mock": "^29.6.2", "jest-regex-util": "^29.4.3", - "jest-resolve": "^29.5.0", - "jest-snapshot": "^29.5.0", - "jest-util": "^29.5.0", + "jest-resolve": "^29.6.2", + "jest-snapshot": "^29.6.2", + "jest-util": "^29.6.2", "slash": "^3.0.0", "strip-bom": "^4.0.0" }, @@ -11495,34 +11796,31 @@ } }, "node_modules/jest-snapshot": { - "version": "29.5.0", - "resolved": "https://registry.npmjs.org/jest-snapshot/-/jest-snapshot-29.5.0.tgz", - "integrity": "sha512-x7Wolra5V0tt3wRs3/ts3S6ciSQVypgGQlJpz2rsdQYoUKxMxPNaoHMGJN6qAuPJqS+2iQ1ZUn5kl7HCyls84g==", + "version": "29.6.2", + "resolved": "https://registry.npmjs.org/jest-snapshot/-/jest-snapshot-29.6.2.tgz", + "integrity": "sha512-1OdjqvqmRdGNvWXr/YZHuyhh5DeaLp1p/F8Tht/MrMw4Kr1Uu/j4lRG+iKl1DAqUJDWxtQBMk41Lnf/JETYBRA==", "dev": true, "dependencies": { "@babel/core": "^7.11.6", "@babel/generator": "^7.7.2", "@babel/plugin-syntax-jsx": "^7.7.2", "@babel/plugin-syntax-typescript": "^7.7.2", - "@babel/traverse": "^7.7.2", "@babel/types": "^7.3.3", - "@jest/expect-utils": "^29.5.0", - "@jest/transform": "^29.5.0", - "@jest/types": "^29.5.0", - "@types/babel__traverse": "^7.0.6", - "@types/prettier": "^2.1.5", + "@jest/expect-utils": "^29.6.2", + "@jest/transform": "^29.6.2", + "@jest/types": "^29.6.1", "babel-preset-current-node-syntax": "^1.0.0", "chalk": "^4.0.0", - "expect": "^29.5.0", + "expect": "^29.6.2", "graceful-fs": "^4.2.9", - "jest-diff": "^29.5.0", + "jest-diff": "^29.6.2", "jest-get-type": "^29.4.3", - "jest-matcher-utils": "^29.5.0", - "jest-message-util": "^29.5.0", - "jest-util": "^29.5.0", + "jest-matcher-utils": "^29.6.2", + "jest-message-util": "^29.6.2", + "jest-util": "^29.6.2", "natural-compare": "^1.4.0", - "pretty-format": "^29.5.0", - "semver": "^7.3.5" + "pretty-format": "^29.6.2", + "semver": "^7.5.3" }, "engines": { "node": "^14.15.0 || ^16.10.0 || >=18.0.0" @@ -11599,12 +11897,12 @@ } }, "node_modules/jest-util": { - "version": "29.5.0", - "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-29.5.0.tgz", - "integrity": "sha512-RYMgG/MTadOr5t8KdhejfvUU82MxsCu5MF6KuDUHl+NuwzUt+Sm6jJWxTJVrDR1j5M/gJVCPKQEpWXY+yIQ6lQ==", + "version": "29.6.2", + "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-29.6.2.tgz", + "integrity": "sha512-3eX1qb6L88lJNCFlEADKOkjpXJQyZRiavX1INZ4tRnrBVr2COd3RgcTLyUiEXMNBlDU/cgYq6taUS0fExrWW4w==", "dev": true, "dependencies": { - "@jest/types": "^29.5.0", + "@jest/types": "^29.6.1", "@types/node": "*", "chalk": "^4.0.0", "ci-info": "^3.2.0", @@ -11686,17 +11984,17 @@ } }, "node_modules/jest-validate": { - "version": "29.5.0", - "resolved": "https://registry.npmjs.org/jest-validate/-/jest-validate-29.5.0.tgz", - "integrity": "sha512-pC26etNIi+y3HV8A+tUGr/lph9B18GnzSRAkPaaZJIE1eFdiYm6/CewuiJQ8/RlfHd1u/8Ioi8/sJ+CmbA+zAQ==", + "version": "29.6.2", + "resolved": "https://registry.npmjs.org/jest-validate/-/jest-validate-29.6.2.tgz", + "integrity": "sha512-vGz0yMN5fUFRRbpJDPwxMpgSXW1LDKROHfBopAvDcmD6s+B/s8WJrwi+4bfH4SdInBA5C3P3BI19dBtKzx1Arg==", "dev": true, "dependencies": { - "@jest/types": "^29.5.0", + "@jest/types": "^29.6.1", "camelcase": "^6.2.0", "chalk": "^4.0.0", "jest-get-type": "^29.4.3", "leven": "^3.1.0", - "pretty-format": "^29.5.0" + "pretty-format": "^29.6.2" }, "engines": { "node": "^14.15.0 || ^16.10.0 || >=18.0.0" @@ -11785,18 +12083,18 @@ } }, "node_modules/jest-watcher": { - "version": "29.5.0", - "resolved": "https://registry.npmjs.org/jest-watcher/-/jest-watcher-29.5.0.tgz", - "integrity": "sha512-KmTojKcapuqYrKDpRwfqcQ3zjMlwu27SYext9pt4GlF5FUgB+7XE1mcCnSm6a4uUpFyQIkb6ZhzZvHl+jiBCiA==", + "version": "29.6.2", + "resolved": "https://registry.npmjs.org/jest-watcher/-/jest-watcher-29.6.2.tgz", + "integrity": "sha512-GZitlqkMkhkefjfN/p3SJjrDaxPflqxEAv3/ik10OirZqJGYH5rPiIsgVcfof0Tdqg3shQGdEIxDBx+B4tuLzA==", "dev": true, "dependencies": { - "@jest/test-result": "^29.5.0", - "@jest/types": "^29.5.0", + "@jest/test-result": "^29.6.2", + "@jest/types": "^29.6.1", "@types/node": "*", "ansi-escapes": "^4.2.1", "chalk": "^4.0.0", "emittery": "^0.13.1", - "jest-util": "^29.5.0", + "jest-util": "^29.6.2", "string-length": "^4.0.1" }, "engines": { @@ -12032,13 +12330,13 @@ } }, "node_modules/jest-worker": { - "version": "29.5.0", - "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-29.5.0.tgz", - "integrity": "sha512-NcrQnevGoSp4b5kg+akIpthoAFHxPBcb5P6mYPY0fUNT+sSvmtu6jlkEle3anczUKIKEbMxFimk9oTP/tpIPgA==", + "version": "29.6.2", + "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-29.6.2.tgz", + "integrity": "sha512-l3ccBOabTdkng8I/ORCkADz4eSMKejTYv1vB/Z83UiubqhC1oQ5Li6dWCyqOIvSifGjUBxuvxvlm6KGK2DtuAQ==", "dev": true, "dependencies": { "@types/node": "*", - "jest-util": "^29.5.0", + "jest-util": "^29.6.2", "merge-stream": "^2.0.0", "supports-color": "^8.0.0" }, @@ -12329,9 +12627,9 @@ } }, "node_modules/less/node_modules/semver": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", - "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", + "version": "5.7.2", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz", + "integrity": "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==", "dev": true, "optional": true, "bin": { @@ -12578,9 +12876,9 @@ } }, "node_modules/make-dir/node_modules/semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", "dev": true, "bin": { "semver": "bin/semver.js" @@ -13196,9 +13494,9 @@ } }, "node_modules/ngx-ui-tour-core": { - "version": "11.0.2", - "resolved": "https://registry.npmjs.org/ngx-ui-tour-core/-/ngx-ui-tour-core-11.0.2.tgz", - "integrity": "sha512-P++2ti7EwrqaILmcDnoc6Qe0aejk+/TRhNQrXd9C16Kx0C0bvYwMvMc1ehO81FNOEPy2lv4+vUx1nQJ2hzyxoQ==", + "version": "11.0.3", + "resolved": "https://registry.npmjs.org/ngx-ui-tour-core/-/ngx-ui-tour-core-11.0.3.tgz", + "integrity": "sha512-CKi9NFS3btmjV/QL5zC2pQxmGDyYQBArRnjuQzn9zN+9bSJcwLePAh7jFjPhorbBvK682GutUKDv36OKc6mxJA==", "dependencies": { "tslib": "^2.0.0" }, @@ -13210,11 +13508,11 @@ } }, "node_modules/ngx-ui-tour-ng-bootstrap": { - "version": "13.0.2", - "resolved": "https://registry.npmjs.org/ngx-ui-tour-ng-bootstrap/-/ngx-ui-tour-ng-bootstrap-13.0.2.tgz", - "integrity": "sha512-RVo3Ndj1i52PYxyPYp2KYn3gD6goN38sI/WzaYP6i3ZtbagIatJuB5UO+Aa8OUcJQzyoq8sH1cpPaEcB/AJ6iA==", + "version": "13.0.3", + "resolved": "https://registry.npmjs.org/ngx-ui-tour-ng-bootstrap/-/ngx-ui-tour-ng-bootstrap-13.0.3.tgz", + "integrity": "sha512-ZaJiS4eUzPTb+kl70aRyEkGrmsXo0nN1ePtMxlpl496L2CnnGEQBnz/5NEJrJ0rX89fFmZn5hr39N89N3QEagg==", "dependencies": { - "ngx-ui-tour-core": "11.0.2", + "ngx-ui-tour-core": "11.0.3", "tslib": "^2.0.0" }, "peerDependencies": { @@ -13506,16 +13804,16 @@ "dev": true }, "node_modules/nx": { - "version": "16.2.2", - "resolved": "https://registry.npmjs.org/nx/-/nx-16.2.2.tgz", - "integrity": "sha512-gOcpqs6wf8YdFIq6P0IlMxBGr2c27pM55zpqO7epSlN6NqW6SOFKnZa+6z4NV9qmifMqzWPx2VF0BY54ARuqYg==", + "version": "16.5.1", + "resolved": "https://registry.npmjs.org/nx/-/nx-16.5.1.tgz", + "integrity": "sha512-I3hJRE4hG7JWAtncWwDEO3GVeGPpN0TtM8xH5ArZXyDuVeTth/i3TtJzdDzqXO1HHtIoAQN0xeq4n9cLuMil5g==", "dev": true, "hasInstallScript": true, "dependencies": { - "@nrwl/tao": "16.2.2", + "@nrwl/tao": "16.5.1", "@parcel/watcher": "2.0.4", "@yarnpkg/lockfile": "^1.1.0", - "@yarnpkg/parsers": "^3.0.0-rc.18", + "@yarnpkg/parsers": "3.0.0-rc.46", "@zkochan/js-yaml": "0.0.6", "axios": "^1.0.0", "chalk": "^4.1.0", @@ -13536,7 +13834,7 @@ "minimatch": "3.0.5", "npm-run-path": "^4.0.1", "open": "^8.4.0", - "semver": "7.3.4", + "semver": "7.5.3", "string-width": "^4.2.3", "strong-log-transformer": "^2.1.0", "tar-stream": "~2.2.0", @@ -13551,15 +13849,16 @@ "nx": "bin/nx.js" }, "optionalDependencies": { - "@nx/nx-darwin-arm64": "16.2.2", - "@nx/nx-darwin-x64": "16.2.2", - "@nx/nx-linux-arm-gnueabihf": "16.2.2", - "@nx/nx-linux-arm64-gnu": "16.2.2", - "@nx/nx-linux-arm64-musl": "16.2.2", - "@nx/nx-linux-x64-gnu": "16.2.2", - "@nx/nx-linux-x64-musl": "16.2.2", - "@nx/nx-win32-arm64-msvc": "16.2.2", - "@nx/nx-win32-x64-msvc": "16.2.2" + "@nx/nx-darwin-arm64": "16.5.1", + "@nx/nx-darwin-x64": "16.5.1", + "@nx/nx-freebsd-x64": "16.5.1", + "@nx/nx-linux-arm-gnueabihf": "16.5.1", + "@nx/nx-linux-arm64-gnu": "16.5.1", + "@nx/nx-linux-arm64-musl": "16.5.1", + "@nx/nx-linux-x64-gnu": "16.5.1", + "@nx/nx-linux-x64-musl": "16.5.1", + "@nx/nx-win32-arm64-msvc": "16.5.1", + "@nx/nx-win32-x64-msvc": "16.5.1" }, "peerDependencies": { "@swc-node/register": "^1.4.2", @@ -13683,18 +13982,6 @@ "js-yaml": "bin/js-yaml.js" } }, - "node_modules/nx/node_modules/lru-cache": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", - "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", - "dev": true, - "dependencies": { - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=10" - } - }, "node_modules/nx/node_modules/minimatch": { "version": "3.0.5", "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.5.tgz", @@ -13707,21 +13994,6 @@ "node": "*" } }, - "node_modules/nx/node_modules/semver": { - "version": "7.3.4", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.4.tgz", - "integrity": "sha512-tCfb2WLjqFAtXn4KEdxIhalnRtoKFN7nAwj0B3ZXCbQloV2tq5eDbcTmT68JJD3nRJq24/XgxtQKFIpQdtvmVw==", - "dev": true, - "dependencies": { - "lru-cache": "^6.0.0" - }, - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" - } - }, "node_modules/nx/node_modules/supports-color": { "version": "7.2.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", @@ -13734,12 +14006,6 @@ "node": ">=8" } }, - "node_modules/nx/node_modules/yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", - "dev": true - }, "node_modules/object-inspect": { "version": "1.12.3", "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.12.3.tgz", @@ -14349,9 +14615,9 @@ } }, "node_modules/playwright-core": { - "version": "1.35.1", - "resolved": "https://registry.npmjs.org/playwright-core/-/playwright-core-1.35.1.tgz", - "integrity": "sha512-pNXb6CQ7OqmGDRspEjlxE49w+4YtR6a3X6mT1hZXeJHWmsEz7SunmvZeiG/+y1yyMZdHnnn73WKYdtV1er0Xyg==", + "version": "1.36.2", + "resolved": "https://registry.npmjs.org/playwright-core/-/playwright-core-1.36.2.tgz", + "integrity": "sha512-sQYZt31dwkqxOrP7xy2ggDfEzUxM1lodjhsQ3NMMv5uGTRDsLxU0e4xf4wwMkF2gplIxf17QMBCodSFgm6bFVQ==", "dev": true, "bin": { "playwright-core": "cli.js" @@ -14511,12 +14777,12 @@ } }, "node_modules/pretty-format": { - "version": "29.5.0", - "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-29.5.0.tgz", - "integrity": "sha512-V2mGkI31qdttvTFX7Mt4efOqHXqJWMu4/r66Xh3Z3BwZaPfPJgp6/gbwoujRpPUtfEF6AUUWx3Jim3GCw5g/Qw==", + "version": "29.6.2", + "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-29.6.2.tgz", + "integrity": "sha512-1q0oC8eRveTg5nnBEWMXAU2qpv65Gnuf2eCQzSjxpWFkPaPARwqZZDGuNE0zPAZfTCHzIk3A8dIjwlQKKLphyg==", "dev": true, "dependencies": { - "@jest/schemas": "^29.4.3", + "@jest/schemas": "^29.6.0", "ansi-styles": "^5.0.0", "react-is": "^18.0.0" }, @@ -16338,6 +16604,18 @@ "tree-kill": "cli.js" } }, + "node_modules/ts-api-utils": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/ts-api-utils/-/ts-api-utils-1.0.1.tgz", + "integrity": "sha512-lC/RGlPmwdrIBFTX59wwNzqh7aR2otPNPR/5brHZm/XKFYKsfqxihXUe9pU3JI+3vGkl+vyCoNNnPhJn3aLK1A==", + "dev": true, + "engines": { + "node": ">=16.13.0" + }, + "peerDependencies": { + "typescript": ">=4.2.0" + } + }, "node_modules/ts-jest": { "version": "29.1.1", "resolved": "https://registry.npmjs.org/ts-jest/-/ts-jest-29.1.1.tgz", @@ -16448,9 +16726,9 @@ } }, "node_modules/tslib": { - "version": "2.6.0", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.0.tgz", - "integrity": "sha512-7At1WUettjcSRHXCyYtTselblcHl9PJFFVKiCAy/bY97+BPZXSQ2wbq0P9s8tK2G7dFQfNnlJnPAiArVBVBsfA==" + "version": "2.6.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.1.tgz", + "integrity": "sha512-t0hLfiEKfMUoqhG+U1oid7Pva4bbDPHYfJNiB7BiIjRkj1pyC++4N3huJfqY6aRH6VTB0rvtzQwjM4K6qpfOig==" }, "node_modules/tsutils": { "version": "3.21.0", diff --git a/src-ui/package.json b/src-ui/package.json index adf33823d..fd2ec68ab 100644 --- a/src-ui/package.json +++ b/src-ui/package.json @@ -10,50 +10,50 @@ }, "private": true, "dependencies": { - "@angular/common": "~16.1.3", - "@angular/compiler": "~16.1.3", - "@angular/core": "~16.1.3", - "@angular/forms": "~16.1.3", - "@angular/localize": "~16.1.3", - "@angular/platform-browser": "~16.1.3", - "@angular/platform-browser-dynamic": "~16.1.3", - "@angular/router": "~16.1.3", - "@ng-bootstrap/ng-bootstrap": "^15.0.1", - "@ng-select/ng-select": "^11.0.0", + "@angular/common": "~16.1.7", + "@angular/compiler": "~16.1.7", + "@angular/core": "~16.1.7", + "@angular/forms": "~16.1.7", + "@angular/localize": "~16.1.7", + "@angular/platform-browser": "~16.1.7", + "@angular/platform-browser-dynamic": "~16.1.7", + "@angular/router": "~16.1.7", + "@ng-bootstrap/ng-bootstrap": "^15.1.0", + "@ng-select/ng-select": "^11.1.1", "@ngneat/dirty-check-forms": "^3.0.3", "@popperjs/core": "^2.11.8", - "bootstrap": "^5.3.0", + "bootstrap": "^5.3.1", "file-saver": "^2.0.5", "mime-names": "^1.0.0", "ng2-pdf-viewer": "^9.1.5", "ngx-color": "^9.0.0", "ngx-cookie-service": "^16.0.0", "ngx-file-drop": "^16.0.0", - "ngx-ui-tour-ng-bootstrap": "^13.0.2", + "ngx-ui-tour-ng-bootstrap": "^13.0.3", "rxjs": "^7.8.1", - "tslib": "^2.6.0", + "tslib": "^2.6.1", "uuid": "^9.0.0", "zone.js": "^0.13.0" }, "devDependencies": { "@angular-builders/jest": "16.0.0", - "@angular-devkit/build-angular": "~16.1.3", - "@angular-eslint/builder": "16.0.3", - "@angular-eslint/eslint-plugin": "16.0.3", - "@angular-eslint/eslint-plugin-template": "16.0.3", - "@angular-eslint/schematics": "16.0.3", - "@angular-eslint/template-parser": "16.0.3", - "@angular/cli": "~16.1.3", + "@angular-devkit/build-angular": "~16.1.6", + "@angular-eslint/builder": "16.1.0", + "@angular-eslint/eslint-plugin": "16.1.0", + "@angular-eslint/eslint-plugin-template": "16.1.0", + "@angular-eslint/schematics": "16.1.0", + "@angular-eslint/template-parser": "16.1.0", + "@angular/cli": "~16.1.6", "@angular/compiler-cli": "~16.1.3", - "@playwright/test": "^1.35.1", - "@types/jest": "^29.5.0", - "@types/node": "^20.2.5", - "@typescript-eslint/eslint-plugin": "^5.59.2", - "@typescript-eslint/parser": "^5.59.2", + "@playwright/test": "^1.36.2", + "@types/jest": "^29.5.3", + "@types/node": "^20.4.5", + "@typescript-eslint/eslint-plugin": "^6.2.1", + "@typescript-eslint/parser": "^6.2.1", "concurrently": "^8.1.0", - "eslint": "^8.39.0", - "jest": "29.5.0", - "jest-environment-jsdom": "^29.5.0", + "eslint": "^8.46.0", + "jest": "29.6.2", + "jest-environment-jsdom": "^29.6.2", "jest-preset-angular": "^13.1.1", "jest-websocket-mock": "^2.4.0", "ts-node": "~10.9.1", diff --git a/src-ui/src/app/app.component.ts b/src-ui/src/app/app.component.ts index 9d9f2c99c..e6718bbed 100644 --- a/src-ui/src/app/app.component.ts +++ b/src-ui/src/app/app.component.ts @@ -139,104 +139,88 @@ export class AppComponent implements OnInit, OnDestroy { const nextBtnTitle = $localize`Next` const endBtnTitle = $localize`End` - this.tourService.initialize([ + 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', + delayAfterNavigation: 500, + isOptional: false, + }, + { + 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', + }, + { + 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', + }, + { + 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', + }, + { + 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', + }, + { + 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', + backdropConfig: { + offset: 0, + }, + }, + { + 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', + backdropConfig: { + offset: 0, + }, + }, + { + anchorId: 'tour.settings', + content: $localize`Check out the settings for various tweaks to the web app, toggle settings for saved views or setup e-mail checking.`, + route: '/settings', + backdropConfig: { + offset: 0, + }, + }, + { + anchorId: 'tour.outro', + title: $localize`Thank you! 🙏`, + content: + $localize`There are tons 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.` + + '

' + + $localize`Lastly, on behalf of every contributor to this community-supported project, thank you for using Paperless-ngx!`, + route: '/dashboard', + isOptional: false, + backdropConfig: { + offset: 0, + }, + }, + ], { - 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, + backdropConfig: { + offset: 10, + }, prevBtnTitle, nextBtnTitle, endBtnTitle, - }, - { - 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, isOptional: true, - prevBtnTitle, - nextBtnTitle, - endBtnTitle, - }, - { - 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, - isOptional: true, - prevBtnTitle, - nextBtnTitle, - endBtnTitle, - }, - { - 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, - isOptional: true, - prevBtnTitle, - nextBtnTitle, - endBtnTitle, - }, - { - 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, - isOptional: true, - prevBtnTitle, - nextBtnTitle, - endBtnTitle, - }, - { - 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, - isOptional: true, - prevBtnTitle, - nextBtnTitle, - endBtnTitle, - }, - { - 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, - isOptional: true, - prevBtnTitle, - nextBtnTitle, - endBtnTitle, - }, - { - anchorId: 'tour.settings', - content: $localize`Check out the settings for various tweaks to the web app, toggle settings for saved views or setup e-mail checking.`, - route: '/settings', - enableBackdrop: true, - isOptional: true, - prevBtnTitle, - nextBtnTitle, - endBtnTitle, - }, - { - anchorId: 'tour.outro', - title: $localize`Thank you! 🙏`, - content: - $localize`There are tons 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.` + - '

' + - $localize`Lastly, on behalf of every contributor to this community-supported project, thank you for using Paperless-ngx!`, - route: '/dashboard', - prevBtnTitle, - nextBtnTitle, - endBtnTitle, - }, - ]) + useLegacyTitle: true, + } + ) this.tourService.start$.subscribe(() => { this.renderer.addClass(document.body, 'tour-active') diff --git a/src-ui/src/app/components/common/edit-dialog/edit-dialog.component.ts b/src-ui/src/app/components/common/edit-dialog/edit-dialog.component.ts index 8924a0ac8..89bd28100 100644 --- a/src-ui/src/app/components/common/edit-dialog/edit-dialog.component.ts +++ b/src-ui/src/app/components/common/edit-dialog/edit-dialog.component.ts @@ -22,7 +22,7 @@ export enum EditDialogMode { @Directive() export abstract class EditDialogComponent< - T extends ObjectWithPermissions | ObjectWithId + T extends ObjectWithPermissions | ObjectWithId, > implements OnInit { constructor( diff --git a/src-ui/src/app/components/common/input/tags/tags.component.ts b/src-ui/src/app/components/common/input/tags/tags.component.ts index ea92488f9..4fb0151b6 100644 --- a/src-ui/src/app/components/common/input/tags/tags.component.ts +++ b/src-ui/src/app/components/common/input/tags/tags.component.ts @@ -26,7 +26,10 @@ import { EditDialogMode } from '../../edit-dialog/edit-dialog.component' styleUrls: ['./tags.component.scss'], }) export class TagsComponent implements OnInit, ControlValueAccessor { - constructor(private tagService: TagService, private modalService: NgbModal) { + constructor( + private tagService: TagService, + private modalService: NgbModal + ) { this.createTagRef = this.createTag.bind(this) } diff --git a/src-ui/src/app/components/dashboard/widgets/saved-view-widget/saved-view-widget.component.html b/src-ui/src/app/components/dashboard/widgets/saved-view-widget/saved-view-widget.component.html index ededd7c52..e12f91a72 100644 --- a/src-ui/src/app/components/dashboard/widgets/saved-view-widget/saved-view-widget.component.html +++ b/src-ui/src/app/components/dashboard/widgets/saved-view-widget/saved-view-widget.component.html @@ -6,14 +6,33 @@ - + - + - +
CreatedCreated Title
{{doc.created_date | customDate}}{{doc.title | documentTitle}} + {{doc.title | documentTitle}} + +
diff --git a/src-ui/src/app/components/dashboard/widgets/saved-view-widget/saved-view-widget.component.scss b/src-ui/src/app/components/dashboard/widgets/saved-view-widget/saved-view-widget.component.scss index 62bea686f..941d474d4 100644 --- a/src-ui/src/app/components/dashboard/widgets/saved-view-widget/saved-view-widget.component.scss +++ b/src-ui/src/app/components/dashboard/widgets/saved-view-widget/saved-view-widget.component.scss @@ -10,3 +10,15 @@ th:first-child { tbody app-tag { cursor: pointer; } + +tr .btn-group { + margin-right: 2px; + box-shadow: -6px 0px 4px -1px rgba(var(--bs-body-bg-rgb), .5); + opacity: 0; + pointer-events: none; +} + +tr:hover .btn-group { + opacity: 1; + pointer-events: all; +} diff --git a/src-ui/src/app/components/dashboard/widgets/saved-view-widget/saved-view-widget.component.spec.ts b/src-ui/src/app/components/dashboard/widgets/saved-view-widget/saved-view-widget.component.spec.ts index 27ba45fae..7e1a77ae8 100644 --- a/src-ui/src/app/components/dashboard/widgets/saved-view-widget/saved-view-widget.component.spec.ts +++ b/src-ui/src/app/components/dashboard/widgets/saved-view-widget/saved-view-widget.component.spec.ts @@ -1,6 +1,11 @@ import { DatePipe } from '@angular/common' import { HttpClientTestingModule } from '@angular/common/http/testing' -import { ComponentFixture, TestBed } from '@angular/core/testing' +import { + ComponentFixture, + TestBed, + fakeAsync, + tick, +} from '@angular/core/testing' import { Router } from '@angular/router' import { RouterTestingModule } from '@angular/router/testing' import { NgbModule } from '@ng-bootstrap/ng-bootstrap' @@ -21,6 +26,8 @@ import { PermissionsService } from 'src/app/services/permissions.service' import { DocumentService } from 'src/app/services/rest/document.service' import { WidgetFrameComponent } from '../widget-frame/widget-frame.component' import { SavedViewWidgetComponent } from './saved-view-widget.component' +import { By } from '@angular/platform-browser' +import { SafeUrlPipe } from 'src/app/pipes/safeurl.pipe' const savedView: PaperlessSavedView = { id: 1, @@ -64,6 +71,7 @@ describe('SavedViewWidgetComponent', () => { IfPermissionsDirective, CustomDatePipe, DocumentTitlePipe, + SafeUrlPipe, ], providers: [ PermissionsGuard, @@ -107,8 +115,39 @@ describe('SavedViewWidgetComponent', () => { fixture.detectChanges() expect(fixture.debugElement.nativeElement.textContent).toContain('doc2') expect(fixture.debugElement.nativeElement.textContent).toContain('doc3') + // preview + download buttons + expect( + fixture.debugElement.queryAll(By.css('td a.btn'))[0].attributes['href'] + ).toEqual(component.getPreviewUrl(documentResults[0])) + expect( + fixture.debugElement.queryAll(By.css('td a.btn'))[1].attributes['href'] + ).toEqual(component.getDownloadUrl(documentResults[0])) }) + it('should show preview on mouseover after delay to preload content', fakeAsync(() => { + jest.spyOn(documentService, 'listFiltered').mockReturnValue( + of({ + all: [2, 3], + count: 2, + results: documentResults, + }) + ) + component.ngOnInit() + fixture.detectChanges() + component.mouseEnterPreview(documentResults[0]) + expect(component.popover.isOpen()).toBeTruthy() + expect(component.popoverHidden).toBeTruthy() + tick(600) + expect(component.popoverHidden).toBeFalsy() + component.mouseLeaveCard() + + component.mouseEnterPreview(documentResults[1]) + tick(100) + component.mouseLeavePreview() + tick(600) + expect(component.popover.isOpen()).toBeFalsy() + })) + it('should call api endpoint and load results', () => { const listAllSpy = jest.spyOn(documentService, 'listFiltered') listAllSpy.mockReturnValue( diff --git a/src-ui/src/app/components/dashboard/widgets/saved-view-widget/saved-view-widget.component.ts b/src-ui/src/app/components/dashboard/widgets/saved-view-widget/saved-view-widget.component.ts index 97c311da3..5264acda8 100644 --- a/src-ui/src/app/components/dashboard/widgets/saved-view-widget/saved-view-widget.component.ts +++ b/src-ui/src/app/components/dashboard/widgets/saved-view-widget/saved-view-widget.component.ts @@ -1,4 +1,12 @@ -import { Component, Input, OnDestroy, OnInit } from '@angular/core' +import { + Component, + Input, + OnDestroy, + OnInit, + QueryList, + ViewChild, + ViewChildren, +} from '@angular/core' import { Router } from '@angular/router' import { Subscription } from 'rxjs' import { PaperlessDocument } from 'src/app/data/paperless-document' @@ -10,11 +18,15 @@ import { FILTER_HAS_TAGS_ALL } from 'src/app/data/filter-rule-type' import { OpenDocumentsService } from 'src/app/services/open-documents.service' import { DocumentListViewService } from 'src/app/services/document-list-view.service' import { ComponentWithPermissions } from 'src/app/components/with-permissions/with-permissions.component' +import { NgbPopover } from '@ng-bootstrap/ng-bootstrap' @Component({ selector: 'app-saved-view-widget', templateUrl: './saved-view-widget.component.html', - styleUrls: ['./saved-view-widget.component.scss'], + styleUrls: [ + './saved-view-widget.component.scss', + '../../../document-list/popover-preview/popover-preview.scss', + ], }) export class SavedViewWidgetComponent extends ComponentWithPermissions @@ -39,6 +51,12 @@ export class SavedViewWidgetComponent subscription: Subscription + @ViewChildren('popover') popovers: QueryList + popover: NgbPopover + + mouseOnPreview = false + popoverHidden = true + ngOnInit(): void { this.reload() this.subscription = this.consumerStatusService @@ -87,4 +105,38 @@ export class SavedViewWidgetComponent { rule_type: FILTER_HAS_TAGS_ALL, value: tag.id.toString() }, ]) } + + getPreviewUrl(document: PaperlessDocument): string { + return this.documentService.getPreviewUrl(document.id) + } + + getDownloadUrl(document: PaperlessDocument): string { + return this.documentService.getDownloadUrl(document.id) + } + + mouseEnterPreview(doc: PaperlessDocument) { + this.popover = this.popovers.get(this.documents.indexOf(doc)) + this.mouseOnPreview = true + if (!this.popover.isOpen()) { + // we're going to open but hide to pre-load content during hover delay + this.popover.open() + this.popoverHidden = true + setTimeout(() => { + if (this.mouseOnPreview) { + // show popover + this.popoverHidden = false + } else { + this.popover.close() + } + }, 600) + } + } + + mouseLeavePreview() { + this.mouseOnPreview = false + } + + mouseLeaveCard() { + this.popover?.close() + } } diff --git a/src-ui/src/app/components/dashboard/widgets/upload-file-widget/upload-file-widget.component.spec.ts b/src-ui/src/app/components/dashboard/widgets/upload-file-widget/upload-file-widget.component.spec.ts index 70bd98302..4b2e2f990 100644 --- a/src-ui/src/app/components/dashboard/widgets/upload-file-widget/upload-file-widget.component.spec.ts +++ b/src-ui/src/app/components/dashboard/widgets/upload-file-widget/upload-file-widget.component.spec.ts @@ -84,7 +84,7 @@ describe('UploadFileWidgetComponent', () => { it('should change color by status phase', () => { const processingStatus = new FileStatus() - processingStatus.phase = FileStatusPhase.PROCESSING + processingStatus.phase = FileStatusPhase.WORKING expect(component.getStatusColor(processingStatus)).toEqual('primary') const failedStatus = new FileStatus() failedStatus.phase = FileStatusPhase.FAILED @@ -134,7 +134,7 @@ function mockConsumerStatuses(consumerStatusService) { switch (phase) { case FileStatusPhase.FAILED: return [new FileStatus()] - case FileStatusPhase.PROCESSING: + case FileStatusPhase.WORKING: return [new FileStatus(), new FileStatus()] case FileStatusPhase.STARTED: return [new FileStatus(), new FileStatus(), new FileStatus()] diff --git a/src-ui/src/app/components/dashboard/widgets/upload-file-widget/upload-file-widget.component.ts b/src-ui/src/app/components/dashboard/widgets/upload-file-widget/upload-file-widget.component.ts index 96c8cdb25..68a3fbdfa 100644 --- a/src-ui/src/app/components/dashboard/widgets/upload-file-widget/upload-file-widget.component.ts +++ b/src-ui/src/app/components/dashboard/widgets/upload-file-widget/upload-file-widget.component.ts @@ -90,8 +90,9 @@ export class UploadFileWidgetComponent extends ComponentWithPermissions { getStatusColor(status: FileStatus) { switch (status.phase) { - case FileStatusPhase.PROCESSING: case FileStatusPhase.UPLOADING: + case FileStatusPhase.STARTED: + case FileStatusPhase.WORKING: return 'primary' case FileStatusPhase.FAILED: return 'danger' diff --git a/src-ui/src/app/components/document-detail/document-detail.component.html b/src-ui/src/app/components/document-detail/document-detail.component.html index 6b42fade8..41e7a78d1 100644 --- a/src-ui/src/app/components/document-detail/document-detail.component.html +++ b/src-ui/src/app/components/document-detail/document-detail.component.html @@ -174,7 +174,7 @@
  • Notes {{document.notes.length}} - +
  • diff --git a/src-ui/src/app/components/document-list/document-card-large/document-card-large.component.html b/src-ui/src/app/components/document-list/document-card-large/document-card-large.component.html index d0cf4002e..296f5af06 100644 --- a/src-ui/src/app/components/document-list/document-card-large/document-card-large.component.html +++ b/src-ui/src/app/components/document-list/document-card-large/document-card-large.component.html @@ -50,7 +50,7 @@ + autoClose="true" popoverClass="shadow popover-preview" (mouseenter)="mouseEnterPreview()" (mouseleave)="mouseLeavePreview()" #popover="ngbPopover">  View @@ -94,7 +94,7 @@ #{{document.archive_serial_number}} -
    +
    Created: {{ document.created | customDate }} Added: {{ document.added | customDate }} Modified: {{ document.modified | customDate }} diff --git a/src-ui/src/app/components/document-list/document-card-small/document-card-small.component.html b/src-ui/src/app/components/document-list/document-card-small/document-card-small.component.html index a4024d70d..d1b8aff95 100644 --- a/src-ui/src/app/components/document-list/document-card-small/document-card-small.component.html +++ b/src-ui/src/app/components/document-list/document-card-small/document-card-small.component.html @@ -87,7 +87,7 @@ + autoClose="true" popoverClass="shadow popover-preview" (mouseenter)="mouseEnterPreview()" (mouseleave)="mouseLeavePreview()" #popover="ngbPopover"> diff --git a/src-ui/src/app/components/document-list/filter-editor/filter-editor.component.ts b/src-ui/src/app/components/document-list/filter-editor/filter-editor.component.ts index 64d237f2c..c61903975 100644 --- a/src-ui/src/app/components/document-list/filter-editor/filter-editor.component.ts +++ b/src-ui/src/app/components/document-list/filter-editor/filter-editor.component.ts @@ -115,9 +115,9 @@ export class FilterEditorComponent implements OnInit, OnDestroy { case FILTER_CORRESPONDENT: case FILTER_HAS_CORRESPONDENT_ANY: if (rule.value) { - return $localize`Correspondent: ${ - this.correspondents.find((c) => c.id == +rule.value)?.name - }` + return $localize`Correspondent: ${this.correspondents.find( + (c) => c.id == +rule.value + )?.name}` } else { return $localize`Without correspondent` } @@ -125,9 +125,9 @@ export class FilterEditorComponent implements OnInit, OnDestroy { case FILTER_DOCUMENT_TYPE: case FILTER_HAS_DOCUMENT_TYPE_ANY: if (rule.value) { - return $localize`Document type: ${ - this.documentTypes.find((dt) => dt.id == +rule.value)?.name - }` + return $localize`Document type: ${this.documentTypes.find( + (dt) => dt.id == +rule.value + )?.name}` } else { return $localize`Without document type` } @@ -135,17 +135,16 @@ export class FilterEditorComponent implements OnInit, OnDestroy { case FILTER_STORAGE_PATH: case FILTER_HAS_STORAGE_PATH_ANY: if (rule.value) { - return $localize`Storage path: ${ - this.storagePaths.find((sp) => sp.id == +rule.value)?.name - }` + return $localize`Storage path: ${this.storagePaths.find( + (sp) => sp.id == +rule.value + )?.name}` } else { return $localize`Without storage path` } case FILTER_HAS_TAGS_ALL: - return $localize`Tag: ${ - this.tags.find((t) => t.id == +rule.value)?.name - }` + return $localize`Tag: ${this.tags.find((t) => t.id == +rule.value) + ?.name}` case FILTER_HAS_ANY_TAG: if (rule.value == 'false') { diff --git a/src-ui/src/app/components/document-list/popover-preview/popover-preview.scss b/src-ui/src/app/components/document-list/popover-preview/popover-preview.scss index 8d31bf2fb..b51e2e66b 100644 --- a/src-ui/src/app/components/document-list/popover-preview/popover-preview.scss +++ b/src-ui/src/app/components/document-list/popover-preview/popover-preview.scss @@ -1,4 +1,4 @@ -::ng-deep app-document-list .popover { +::ng-deep .popover.popover-preview { max-width: 40rem; .preview { @@ -16,7 +16,7 @@ } } - ::ng-deep .popover-hidden .popover { +::ng-deep .popover-hidden .popover { opacity: 0; pointer-events: none; } diff --git a/src-ui/src/app/components/document-notes/document-notes.component.html b/src-ui/src/app/components/document-notes/document-notes.component.html index f6c46cd47..c76660e30 100644 --- a/src-ui/src/app/components/document-notes/document-notes.component.html +++ b/src-ui/src/app/components/document-notes/document-notes.component.html @@ -8,7 +8,7 @@
    - +

    diff --git a/src-ui/src/app/components/document-notes/document-notes.component.scss b/src-ui/src/app/components/document-notes/document-notes.component.scss index d7e21e14e..296c51ef0 100644 --- a/src-ui/src/app/components/document-notes/document-notes.component.scss +++ b/src-ui/src/app/components/document-notes/document-notes.component.scss @@ -1,6 +1,5 @@ .card-body { max-height: 12rem; - overflow: scroll; white-space: pre-wrap; } diff --git a/src-ui/src/app/components/document-notes/document-notes.component.ts b/src-ui/src/app/components/document-notes/document-notes.component.ts index b8c7d6fd9..01a104fb2 100644 --- a/src-ui/src/app/components/document-notes/document-notes.component.ts +++ b/src-ui/src/app/components/document-notes/document-notes.component.ts @@ -26,6 +26,9 @@ export class DocumentNotesComponent extends ComponentWithPermissions { @Input() notes: PaperlessDocumentNote[] = [] + @Input() + addDisabled: boolean = false + @Output() updated: EventEmitter = new EventEmitter() users: PaperlessUser[] @@ -61,7 +64,9 @@ export class DocumentNotesComponent extends ComponentWithPermissions { error: (e) => { this.networkActive = false this.toastService.showError( - $localize`Error saving note: ${e.toString()}` + $localize`Error saving note`, + 10000, + JSON.stringify(e) ) }, }) diff --git a/src-ui/src/app/components/manage/settings/settings.component.html b/src-ui/src/app/components/manage/settings/settings.component.html index 983395ea5..5090d531d 100644 --- a/src-ui/src/app/components/manage/settings/settings.component.html +++ b/src-ui/src/app/components/manage/settings/settings.component.html @@ -266,8 +266,8 @@
    {{account.imap_server}}
    - - + +
    @@ -303,8 +303,8 @@
    {{(mailAccountService.getCached(rule.account) | async)?.name}}
    - - + +
    diff --git a/src-ui/src/app/components/manage/settings/settings.component.spec.ts b/src-ui/src/app/components/manage/settings/settings.component.spec.ts index f9f423fea..c4a9d4a4b 100644 --- a/src-ui/src/app/components/manage/settings/settings.component.spec.ts +++ b/src-ui/src/app/components/manage/settings/settings.component.spec.ts @@ -48,8 +48,8 @@ const savedViews = [ { id: 2, name: 'view2' }, ] const users = [ - { id: 1, username: 'user1' }, - { id: 2, username: 'user2' }, + { id: 1, username: 'user1', is_superuser: false }, + { id: 2, username: 'user2', is_superuser: false }, ] const groups = [ { id: 1, name: 'group1' }, @@ -60,8 +60,8 @@ const mailAccounts = [ { id: 2, name: 'account2' }, ] const mailRules = [ - { id: 1, name: 'rule1' }, - { id: 2, name: 'rule2' }, + { id: 1, name: 'rule1', owner: 1 }, + { id: 2, name: 'rule2', owner: 2 }, ] describe('SettingsComponent', () => { @@ -75,6 +75,7 @@ describe('SettingsComponent', () => { let viewportScroller: ViewportScroller let toastService: ToastService let userService: UserService + let permissionsService: PermissionsService let groupService: GroupService let mailAccountService: MailAccountService let mailRuleService: MailRuleService @@ -90,17 +91,7 @@ describe('SettingsComponent', () => { CheckComponent, ColorComponent, ], - providers: [ - { - provide: PermissionsService, - useValue: { - currentUserCan: () => true, - }, - }, - CustomDatePipe, - DatePipe, - PermissionsGuard, - ], + providers: [CustomDatePipe, DatePipe, PermissionsGuard], imports: [ NgbModule, HttpClientTestingModule, @@ -117,6 +108,14 @@ describe('SettingsComponent', () => { toastService = TestBed.inject(ToastService) settingsService = TestBed.inject(SettingsService) userService = TestBed.inject(UserService) + permissionsService = TestBed.inject(PermissionsService) + jest.spyOn(permissionsService, 'currentUserCan').mockReturnValue(true) + jest + .spyOn(permissionsService, 'currentUserHasObjectPermissions') + .mockReturnValue(true) + jest + .spyOn(permissionsService, 'currentUserOwnsObject') + .mockReturnValue(true) jest.spyOn(userService, 'listAll').mockReturnValue( of({ all: users.map((u) => u.id), diff --git a/src-ui/src/app/components/manage/settings/settings.component.ts b/src-ui/src/app/components/manage/settings/settings.component.ts index c75867f7e..a49f2dd21 100644 --- a/src-ui/src/app/components/manage/settings/settings.component.ts +++ b/src-ui/src/app/components/manage/settings/settings.component.ts @@ -45,6 +45,11 @@ import { MailRuleService } from 'src/app/services/rest/mail-rule.service' import { MailAccountEditDialogComponent } from '../../common/edit-dialog/mail-account-edit-dialog/mail-account-edit-dialog.component' import { MailRuleEditDialogComponent } from '../../common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component' import { EditDialogMode } from '../../common/edit-dialog/edit-dialog.component' +import { ObjectWithPermissions } from 'src/app/data/object-with-permissions' +import { + PermissionAction, + PermissionsService, +} from 'src/app/services/permissions.service' enum SettingsNavIDs { General = 1, @@ -140,7 +145,8 @@ export class SettingsComponent private usersService: UserService, private groupsService: GroupService, private router: Router, - private modalService: NgbModal + private modalService: NgbModal, + private permissionsService: PermissionsService ) { super() this.settings.settingsSaved.subscribe(() => { @@ -642,6 +648,17 @@ export class SettingsComponent this.settingsForm.get('themeColor').patchValue('') } + userCanEdit(obj: ObjectWithPermissions): boolean { + return this.permissionsService.currentUserHasObjectPermissions( + PermissionAction.Change, + obj + ) + } + + userIsOwner(obj: ObjectWithPermissions): boolean { + return this.permissionsService.currentUserOwnsObject(obj) + } + editUser(user: PaperlessUser) { var modal = this.modalService.open(UserEditDialogComponent, { backdrop: 'static', diff --git a/src-ui/src/app/data/paperless-mail-account.ts b/src-ui/src/app/data/paperless-mail-account.ts index 484997213..5be0c3e20 100644 --- a/src-ui/src/app/data/paperless-mail-account.ts +++ b/src-ui/src/app/data/paperless-mail-account.ts @@ -1,4 +1,4 @@ -import { ObjectWithId } from './object-with-id' +import { ObjectWithPermissions } from './object-with-permissions' export enum IMAPSecurity { None = 1, @@ -6,7 +6,7 @@ export enum IMAPSecurity { STARTTLS = 3, } -export interface PaperlessMailAccount extends ObjectWithId { +export interface PaperlessMailAccount extends ObjectWithPermissions { name: string imap_server: string diff --git a/src-ui/src/app/data/paperless-mail-rule.ts b/src-ui/src/app/data/paperless-mail-rule.ts index 859fafc49..63351fe3e 100644 --- a/src-ui/src/app/data/paperless-mail-rule.ts +++ b/src-ui/src/app/data/paperless-mail-rule.ts @@ -1,4 +1,4 @@ -import { ObjectWithId } from './object-with-id' +import { ObjectWithPermissions } from './object-with-permissions' export enum MailFilterAttachmentType { Attachments = 1, @@ -31,7 +31,7 @@ export enum MailMetadataCorrespondentOption { FromCustom = 4, } -export interface PaperlessMailRule extends ObjectWithId { +export interface PaperlessMailRule extends ObjectWithPermissions { name: string account: number // PaperlessMailAccount.id diff --git a/src-ui/src/app/interceptors/csrf.interceptor.ts b/src-ui/src/app/interceptors/csrf.interceptor.ts index 7408938b9..c91111544 100644 --- a/src-ui/src/app/interceptors/csrf.interceptor.ts +++ b/src-ui/src/app/interceptors/csrf.interceptor.ts @@ -11,7 +11,10 @@ import { Meta } from '@angular/platform-browser' @Injectable() export class CsrfInterceptor implements HttpInterceptor { - constructor(private cookieService: CookieService, private meta: Meta) {} + constructor( + private cookieService: CookieService, + private meta: Meta + ) {} intercept( request: HttpRequest, diff --git a/src-ui/src/app/services/consumer-status.service.spec.ts b/src-ui/src/app/services/consumer-status.service.spec.ts index 5c93f5160..3725f847d 100644 --- a/src-ui/src/app/services/consumer-status.service.spec.ts +++ b/src-ui/src/app/services/consumer-status.service.spec.ts @@ -60,10 +60,10 @@ describe('ConsumerStatusService', () => { current_progress: 50, max_progress: 100, document_id: 12, - status: 'STARTING', + status: 'WORKING', }) - expect(status.getProgress()).toBeCloseTo(0.6) // 0.8 * 50/100 + expect(status.getProgress()).toBeCloseTo(0.6) // (0.8 * 50/100) + .2 expect(consumerStatusService.getConsumerStatusNotCompleted()).toEqual([ status, ]) @@ -194,6 +194,7 @@ describe('ConsumerStatusService', () => { expect(consumerStatusService.getConsumerStatusCompleted()).toHaveLength(1) consumerStatusService.dismissCompleted() expect(consumerStatusService.getConsumerStatusCompleted()).toHaveLength(0) + consumerStatusService.disconnect() }) it('should support dismiss', () => { @@ -238,17 +239,40 @@ describe('ConsumerStatusService', () => { }) it('should notify of document created on status message without upload', () => { + let detected = false consumerStatusService.onDocumentDetected().subscribe((filestatus) => { expect(filestatus.phase).toEqual(FileStatusPhase.STARTED) + detected = true }) + consumerStatusService.connect() + server.send({ + task_id: '1234', + filename: 'file.pdf', + current_progress: 0, + max_progress: 100, + message: 'new_file', + status: 'STARTED', + }) + + consumerStatusService.disconnect() + expect(detected).toBeTruthy() + }) + + it('should notify of document in progress without upload', () => { + consumerStatusService.connect() server.send({ task_id: '1234', filename: 'file.pdf', current_progress: 50, max_progress: 100, - document_id: 12, - status: 'STARTING', + docuement_id: 12, + status: 'WORKING', }) + + consumerStatusService.disconnect() + expect(consumerStatusService.getConsumerStatusNotCompleted()).toHaveLength( + 1 + ) }) }) diff --git a/src-ui/src/app/services/consumer-status.service.ts b/src-ui/src/app/services/consumer-status.service.ts index 51c4292b4..394975333 100644 --- a/src-ui/src/app/services/consumer-status.service.ts +++ b/src-ui/src/app/services/consumer-status.service.ts @@ -3,10 +3,11 @@ import { Subject } from 'rxjs' import { environment } from 'src/environments/environment' import { WebsocketConsumerStatusMessage } from '../data/websocket-consumer-status-message' +// see ConsumerFilePhase in src/documents/consumer.py export enum FileStatusPhase { STARTED = 0, UPLOADING = 1, - PROCESSING = 2, + WORKING = 2, SUCCESS = 3, FAILED = 4, } @@ -49,7 +50,7 @@ export class FileStatus { return 0.0 case FileStatusPhase.UPLOADING: return (this.currentPhaseProgress / this.currentPhaseMaxProgress) * 0.2 - case FileStatusPhase.PROCESSING: + case FileStatusPhase.WORKING: return ( (this.currentPhaseProgress / this.currentPhaseMaxProgress) * 0.8 + 0.2 ) @@ -150,7 +151,7 @@ export class ConsumerStatusService { let created = statusMessageGet.created status.updateProgress( - FileStatusPhase.PROCESSING, + FileStatusPhase.WORKING, statusMessage.current_progress, statusMessage.max_progress ) @@ -164,16 +165,25 @@ export class ConsumerStatusService { } status.documentId = statusMessage.document_id - if (created && statusMessage.status == 'STARTING') { - this.documentDetectedSubject.next(status) + if (statusMessage.status in FileStatusPhase) { + status.phase = FileStatusPhase[statusMessage.status] } - if (statusMessage.status == 'SUCCESS') { - status.phase = FileStatusPhase.SUCCESS - this.documentConsumptionFinishedSubject.next(status) - } - if (statusMessage.status == 'FAILED') { - status.phase = FileStatusPhase.FAILED - this.documentConsumptionFailedSubject.next(status) + + switch (status.phase) { + case FileStatusPhase.STARTED: + if (created) this.documentDetectedSubject.next(status) + break + + case FileStatusPhase.SUCCESS: + this.documentConsumptionFinishedSubject.next(status) + break + + case FileStatusPhase.FAILED: + this.documentConsumptionFailedSubject.next(status) + break + + default: + break } } } diff --git a/src-ui/src/app/services/document-list-view.service.ts b/src-ui/src/app/services/document-list-view.service.ts index 730bea23a..ab8556c33 100644 --- a/src-ui/src/app/services/document-list-view.service.ts +++ b/src-ui/src/app/services/document-list-view.service.ts @@ -276,9 +276,9 @@ export class DocumentListViewService { errorMessage = Object.keys(error.error) .map((fieldName) => { const fieldError: Array = error.error[fieldName] - return `${ - DOCUMENT_SORT_FIELDS.find((f) => f.field == fieldName)?.name - }: ${fieldError[0]}` + return `${DOCUMENT_SORT_FIELDS.find( + (f) => f.field == fieldName + )?.name}: ${fieldError[0]}` }) .join(', ') } else { diff --git a/src-ui/src/app/services/rest/abstract-name-filter-service.ts b/src-ui/src/app/services/rest/abstract-name-filter-service.ts index 0b5fca835..1164545b2 100644 --- a/src-ui/src/app/services/rest/abstract-name-filter-service.ts +++ b/src-ui/src/app/services/rest/abstract-name-filter-service.ts @@ -2,7 +2,7 @@ import { ObjectWithId } from 'src/app/data/object-with-id' import { AbstractPaperlessService } from './abstract-paperless-service' export abstract class AbstractNameFilterService< - T extends ObjectWithId + T extends ObjectWithId, > extends AbstractPaperlessService { listFiltered( page?: number, diff --git a/src-ui/src/app/services/rest/abstract-paperless-service.ts b/src-ui/src/app/services/rest/abstract-paperless-service.ts index 96de58e2d..1772e17d8 100644 --- a/src-ui/src/app/services/rest/abstract-paperless-service.ts +++ b/src-ui/src/app/services/rest/abstract-paperless-service.ts @@ -8,7 +8,10 @@ import { environment } from 'src/environments/environment' export abstract class AbstractPaperlessService { protected baseUrl: string = environment.apiBaseUrl - constructor(protected http: HttpClient, private resourceName: string) {} + constructor( + protected http: HttpClient, + private resourceName: string + ) {} protected getResourceUrl(id: number = null, action: string = null): string { let url = `${this.baseUrl}${this.resourceName}/` diff --git a/src-ui/src/app/services/rest/group.service.ts b/src-ui/src/app/services/rest/group.service.ts index 800c3c71b..5cfa42133 100644 --- a/src-ui/src/app/services/rest/group.service.ts +++ b/src-ui/src/app/services/rest/group.service.ts @@ -9,7 +9,10 @@ import { AbstractNameFilterService } from './abstract-name-filter-service' providedIn: 'root', }) export class GroupService extends AbstractNameFilterService { - constructor(http: HttpClient, private permissionService: PermissionsService) { + constructor( + http: HttpClient, + private permissionService: PermissionsService + ) { super(http, 'groups') } diff --git a/src-ui/src/app/services/rest/user.service.ts b/src-ui/src/app/services/rest/user.service.ts index 125a35ce6..b4cfaffd6 100644 --- a/src-ui/src/app/services/rest/user.service.ts +++ b/src-ui/src/app/services/rest/user.service.ts @@ -9,7 +9,10 @@ import { AbstractNameFilterService } from './abstract-name-filter-service' providedIn: 'root', }) export class UserService extends AbstractNameFilterService { - constructor(http: HttpClient, private permissionService: PermissionsService) { + constructor( + http: HttpClient, + private permissionService: PermissionsService + ) { super(http, 'users') } diff --git a/src-ui/src/styles.scss b/src-ui/src/styles.scss index 0c29026d2..1bdd84190 100644 --- a/src-ui/src/styles.scss +++ b/src-ui/src/styles.scss @@ -433,6 +433,11 @@ ul.pagination { height: 1em; } +.buttonicon-xs { + width: 0.8em; + height: 0.8em; +} + .sidebaricon { width: 16px; height: 16px; @@ -560,6 +565,17 @@ body.tour-active .sidebar { z-index: inherit !important; } +.tour-step { + .popover-header { + --bs-popover-header-padding-y: .75rem; + } + + .popover-body { + // reset ngx-ui-tour overrides + padding: var(--bs-popover-body-padding-y) var(--bs-popover-body-padding-x) !important; + } +} + .nav-item.touranchor--is-active a { font-weight: bold !important; color: var(--bs-primary); diff --git a/src-ui/src/theme.scss b/src-ui/src/theme.scss index e3a90238f..ddf635e41 100644 --- a/src-ui/src/theme.scss +++ b/src-ui/src/theme.scss @@ -71,6 +71,7 @@ $form-check-radio-checked-bg-image-dark: url("data:image/svg+xml, Optional[int]: if self.correspondent_classifier: X = self.data_vectorizer.transform([self.preprocess_content(content)]) correspondent_id = self.correspondent_classifier.predict(X) @@ -391,7 +393,7 @@ class DocumentClassifier: else: return None - def predict_document_type(self, content: str): + def predict_document_type(self, content: str) -> Optional[int]: if self.document_type_classifier: X = self.data_vectorizer.transform([self.preprocess_content(content)]) document_type_id = self.document_type_classifier.predict(X) @@ -402,7 +404,7 @@ class DocumentClassifier: else: return None - def predict_tags(self, content: str): + def predict_tags(self, content: str) -> List[int]: from sklearn.utils.multiclass import type_of_target if self.tags_classifier: @@ -423,7 +425,7 @@ class DocumentClassifier: else: return [] - def predict_storage_path(self, content: str): + def predict_storage_path(self, content: str) -> Optional[int]: if self.storage_path_classifier: X = self.data_vectorizer.transform([self.preprocess_content(content)]) storage_path_id = self.storage_path_classifier.predict(X) diff --git a/src/documents/consumer.py b/src/documents/consumer.py index fde8e2d4c..6fa830101 100644 --- a/src/documents/consumer.py +++ b/src/documents/consumer.py @@ -1,9 +1,9 @@ import datetime import hashlib import os -import shutil import tempfile import uuid +from enum import Enum from pathlib import Path from subprocess import CompletedProcess from subprocess import run @@ -21,6 +21,9 @@ from django.utils import timezone from filelock import FileLock from rest_framework.reverse import reverse +from documents.utils import copy_basic_file_stats +from documents.utils import copy_file_with_basic_stats + from .classifier import load_classifier from .file_handling import create_source_path_directory from .file_handling import generate_unique_filename @@ -42,21 +45,30 @@ class ConsumerError(Exception): pass -MESSAGE_DOCUMENT_ALREADY_EXISTS = "document_already_exists" -MESSAGE_ASN_ALREADY_EXISTS = "asn_already_exists" -MESSAGE_ASN_RANGE = "asn_value_out_of_range" -MESSAGE_FILE_NOT_FOUND = "file_not_found" -MESSAGE_PRE_CONSUME_SCRIPT_NOT_FOUND = "pre_consume_script_not_found" -MESSAGE_PRE_CONSUME_SCRIPT_ERROR = "pre_consume_script_error" -MESSAGE_POST_CONSUME_SCRIPT_NOT_FOUND = "post_consume_script_not_found" -MESSAGE_POST_CONSUME_SCRIPT_ERROR = "post_consume_script_error" -MESSAGE_NEW_FILE = "new_file" -MESSAGE_UNSUPPORTED_TYPE = "unsupported_type" -MESSAGE_PARSING_DOCUMENT = "parsing_document" -MESSAGE_GENERATING_THUMBNAIL = "generating_thumbnail" -MESSAGE_PARSE_DATE = "parse_date" -MESSAGE_SAVE_DOCUMENT = "save_document" -MESSAGE_FINISHED = "finished" +class ConsumerStatusShortMessage(str, Enum): + DOCUMENT_ALREADY_EXISTS = "document_already_exists" + ASN_ALREADY_EXISTS = "asn_already_exists" + ASN_RANGE = "asn_value_out_of_range" + FILE_NOT_FOUND = "file_not_found" + PRE_CONSUME_SCRIPT_NOT_FOUND = "pre_consume_script_not_found" + PRE_CONSUME_SCRIPT_ERROR = "pre_consume_script_error" + POST_CONSUME_SCRIPT_NOT_FOUND = "post_consume_script_not_found" + POST_CONSUME_SCRIPT_ERROR = "post_consume_script_error" + NEW_FILE = "new_file" + UNSUPPORTED_TYPE = "unsupported_type" + PARSING_DOCUMENT = "parsing_document" + GENERATING_THUMBNAIL = "generating_thumbnail" + PARSE_DATE = "parse_date" + SAVE_DOCUMENT = "save_document" + FINISHED = "finished" + FAILED = "failed" + + +class ConsumerFilePhase(str, Enum): + STARTED = "STARTED" + WORKING = "WORKING" + SUCCESS = "SUCCESS" + FAILED = "FAILED" class Consumer(LoggingMixin): @@ -64,10 +76,10 @@ class Consumer(LoggingMixin): def _send_progress( self, - current_progress, - max_progress, - status, - message=None, + current_progress: int, + max_progress: int, + status: ConsumerFilePhase, + message: Optional[ConsumerStatusShortMessage] = None, document_id=None, ): # pragma: no cover payload = { @@ -86,12 +98,12 @@ class Consumer(LoggingMixin): def _fail( self, - message, - log_message=None, + message: ConsumerStatusShortMessage, + log_message: Optional[str] = None, exc_info=None, exception: Optional[Exception] = None, ): - self._send_progress(100, 100, "FAILED", message) + self._send_progress(100, 100, ConsumerFilePhase.FAILED, message) self.log.error(log_message or message, exc_info=exc_info) raise ConsumerError(f"{self.filename}: {log_message or message}") from exception @@ -111,13 +123,19 @@ class Consumer(LoggingMixin): self.channel_layer = get_channel_layer() def pre_check_file_exists(self): + """ + Confirm the input file still exists where it should + """ if not os.path.isfile(self.path): self._fail( - MESSAGE_FILE_NOT_FOUND, + ConsumerStatusShortMessage.FILE_NOT_FOUND, f"Cannot consume {self.path}: File not found.", ) def pre_check_duplicate(self): + """ + Using the MD5 of the file, check this exact file doesn't already exist + """ with open(self.path, "rb") as f: checksum = hashlib.md5(f.read()).hexdigest() existing_doc = Document.objects.filter( @@ -127,12 +145,15 @@ class Consumer(LoggingMixin): if settings.CONSUMER_DELETE_DUPLICATES: os.unlink(self.path) self._fail( - MESSAGE_DOCUMENT_ALREADY_EXISTS, + ConsumerStatusShortMessage.DOCUMENT_ALREADY_EXISTS, f"Not consuming {self.filename}: It is a duplicate of" f" {existing_doc.get().title} (#{existing_doc.get().pk})", ) def pre_check_directories(self): + """ + Ensure all required directories exist before attempting to use them + """ os.makedirs(settings.SCRATCH_DIR, exist_ok=True) os.makedirs(settings.THUMBNAIL_DIR, exist_ok=True) os.makedirs(settings.ORIGINALS_DIR, exist_ok=True) @@ -152,7 +173,7 @@ class Consumer(LoggingMixin): or self.override_asn > Document.ARCHIVE_SERIAL_NUMBER_MAX ): self._fail( - MESSAGE_ASN_RANGE, + ConsumerStatusShortMessage.ASN_RANGE, f"Not consuming {self.filename}: " f"Given ASN {self.override_asn} is out of range " f"[{Document.ARCHIVE_SERIAL_NUMBER_MIN:,}, " @@ -160,17 +181,21 @@ class Consumer(LoggingMixin): ) if Document.objects.filter(archive_serial_number=self.override_asn).exists(): self._fail( - MESSAGE_ASN_ALREADY_EXISTS, + ConsumerStatusShortMessage.ASN_ALREADY_EXISTS, f"Not consuming {self.filename}: Given ASN already exists!", ) def run_pre_consume_script(self): + """ + If one is configured and exists, run the pre-consume script and + handle its output and/or errors + """ if not settings.PRE_CONSUME_SCRIPT: return if not os.path.isfile(settings.PRE_CONSUME_SCRIPT): self._fail( - MESSAGE_PRE_CONSUME_SCRIPT_NOT_FOUND, + ConsumerStatusShortMessage.PRE_CONSUME_SCRIPT_NOT_FOUND, f"Configured pre-consume script " f"{settings.PRE_CONSUME_SCRIPT} does not exist.", ) @@ -201,19 +226,23 @@ class Consumer(LoggingMixin): except Exception as e: self._fail( - MESSAGE_PRE_CONSUME_SCRIPT_ERROR, + ConsumerStatusShortMessage.PRE_CONSUME_SCRIPT_ERROR, f"Error while executing pre-consume script: {e}", exc_info=True, exception=e, ) def run_post_consume_script(self, document: Document): + """ + If one is configured and exists, run the pre-consume script and + handle its output and/or errors + """ if not settings.POST_CONSUME_SCRIPT: return if not os.path.isfile(settings.POST_CONSUME_SCRIPT): self._fail( - MESSAGE_POST_CONSUME_SCRIPT_NOT_FOUND, + ConsumerStatusShortMessage.POST_CONSUME_SCRIPT_NOT_FOUND, f"Configured post-consume script " f"{settings.POST_CONSUME_SCRIPT} does not exist.", ) @@ -274,7 +303,7 @@ class Consumer(LoggingMixin): except Exception as e: self._fail( - MESSAGE_POST_CONSUME_SCRIPT_ERROR, + ConsumerStatusShortMessage.POST_CONSUME_SCRIPT_ERROR, f"Error while executing post-consume script: {e}", exc_info=True, exception=e, @@ -308,7 +337,12 @@ class Consumer(LoggingMixin): self.override_asn = override_asn self.override_owner_id = override_owner_id - self._send_progress(0, 100, "STARTING", MESSAGE_NEW_FILE) + self._send_progress( + 0, + 100, + ConsumerFilePhase.STARTED, + ConsumerStatusShortMessage.NEW_FILE, + ) # Make sure that preconditions for consuming the file are met. @@ -326,7 +360,7 @@ class Consumer(LoggingMixin): dir=settings.SCRATCH_DIR, ) self.path = Path(tempdir.name) / Path(self.filename) - shutil.copy2(self.original_path, self.path) + copy_file_with_basic_stats(self.original_path, self.path) # Determine the parser class. @@ -340,7 +374,10 @@ class Consumer(LoggingMixin): ) if not parser_class: tempdir.cleanup() - self._fail(MESSAGE_UNSUPPORTED_TYPE, f"Unsupported mime type {mime_type}") + self._fail( + ConsumerStatusShortMessage.UNSUPPORTED_TYPE, + f"Unsupported mime type {mime_type}", + ) # Notify all listeners that we're going to do some work. @@ -355,7 +392,7 @@ class Consumer(LoggingMixin): def progress_callback(current_progress, max_progress): # pragma: no cover # recalculate progress to be within 20 and 80 p = int((current_progress / max_progress) * 50 + 20) - self._send_progress(p, 100, "WORKING") + self._send_progress(p, 100, ConsumerFilePhase.WORKING) # This doesn't parse the document yet, but gives us a parser. @@ -377,12 +414,22 @@ class Consumer(LoggingMixin): archive_path = None try: - self._send_progress(20, 100, "WORKING", MESSAGE_PARSING_DOCUMENT) + self._send_progress( + 20, + 100, + ConsumerFilePhase.WORKING, + ConsumerStatusShortMessage.PARSING_DOCUMENT, + ) self.log.debug(f"Parsing {self.filename}...") document_parser.parse(self.path, mime_type, self.filename) self.log.debug(f"Generating thumbnail for {self.filename}...") - self._send_progress(70, 100, "WORKING", MESSAGE_GENERATING_THUMBNAIL) + self._send_progress( + 70, + 100, + ConsumerFilePhase.WORKING, + ConsumerStatusShortMessage.GENERATING_THUMBNAIL, + ) thumbnail = document_parser.get_thumbnail( self.path, mime_type, @@ -392,7 +439,12 @@ class Consumer(LoggingMixin): text = document_parser.get_text() date = document_parser.get_date() if date is None: - self._send_progress(90, 100, "WORKING", MESSAGE_PARSE_DATE) + self._send_progress( + 90, + 100, + ConsumerFilePhase.WORKING, + ConsumerStatusShortMessage.PARSE_DATE, + ) date = parse_date(self.filename, text) archive_path = document_parser.get_archive_path() @@ -414,7 +466,12 @@ class Consumer(LoggingMixin): classifier = load_classifier() - self._send_progress(95, 100, "WORKING", MESSAGE_SAVE_DOCUMENT) + self._send_progress( + 95, + 100, + ConsumerFilePhase.WORKING, + ConsumerStatusShortMessage.SAVE_DOCUMENT, + ) # now that everything is done, we can start to store the document # in the system. This will be a transaction and reasonably fast. try: @@ -499,7 +556,13 @@ class Consumer(LoggingMixin): self.log.info(f"Document {document} consumption finished") - self._send_progress(100, 100, "SUCCESS", MESSAGE_FINISHED, document.id) + self._send_progress( + 100, + 100, + ConsumerFilePhase.SUCCESS, + ConsumerStatusShortMessage.FINISHED, + document.id, + ) # Return the most up to date fields document.refresh_from_db() @@ -585,7 +648,7 @@ class Consumer(LoggingMixin): # Attempt to copy file's original stats, but it's ok if we can't try: - shutil.copystat(source, target) + copy_basic_file_stats(source, target) except Exception: # pragma: no cover pass diff --git a/src/documents/converters.py b/src/documents/converters.py new file mode 100644 index 000000000..e3a7cb786 --- /dev/null +++ b/src/documents/converters.py @@ -0,0 +1,46 @@ +from pathlib import Path +from subprocess import run + +import img2pdf +from django.conf import settings +from PIL import Image + +from documents.utils import copy_basic_file_stats + + +def convert_from_tiff_to_pdf(tiff_path: Path, target_directory: Path) -> Path: + """ + Converts a TIFF file into a PDF file. + + The PDF will be created in the given target_directory and share the name of + the original TIFF file, as well as its stats (mtime etc.). + + Returns the path of the PDF created. + """ + with Image.open(tiff_path) as im: + has_alpha_layer = im.mode in ("RGBA", "LA") + if has_alpha_layer: + # Note the save into the temp folder, so as not to trigger a new + # consume + scratch_image = target_directory / tiff_path.name + run( + [ + settings.CONVERT_BINARY, + "-alpha", + "off", + tiff_path, + scratch_image, + ], + ) + else: + # Not modifying the original, safe to use in place + scratch_image = tiff_path + + pdf_path = (target_directory / tiff_path.name).with_suffix(".pdf") + + with scratch_image.open("rb") as img_file, pdf_path.open("wb") as pdf_file: + pdf_file.write(img2pdf.convert(img_file)) + + # Copy what file stat is possible + copy_basic_file_stats(tiff_path, pdf_path) + return pdf_path diff --git a/src/documents/double_sided.py b/src/documents/double_sided.py new file mode 100644 index 000000000..4e6b8b7a3 --- /dev/null +++ b/src/documents/double_sided.py @@ -0,0 +1,131 @@ +import datetime as dt +import logging +import os +import shutil +from pathlib import Path + +from django.conf import settings +from pikepdf import Pdf + +from documents.consumer import ConsumerError +from documents.converters import convert_from_tiff_to_pdf +from documents.data_models import ConsumableDocument + +logger = logging.getLogger("paperless.double_sided") + +# Hardcoded for now, could be made a configurable setting if needed +TIMEOUT_MINUTES = 30 + +# Used by test cases +STAGING_FILE_NAME = "double-sided-staging.pdf" + + +def collate(input_doc: ConsumableDocument) -> str: + """ + Tries to collate pages from 2 single sided scans of a double sided + document. + + When called with a file, it checks whether or not a staging file + exists, if not, the current file is turned into that staging file + containing the odd numbered pages. + + If a staging file exists, and it is not too old, the current file is + considered to be the second part (the even numbered pages) and it will + collate the pages of both, the pages of the second file will be added + in reverse order, since the ADF will have scanned the pages from bottom + to top. + + Returns a status message on succcess, or raises a ConsumerError + in case of failure. + """ + + # Make sure scratch dir exists, Consumer might not have run yet + settings.SCRATCH_DIR.mkdir(exist_ok=True) + + if input_doc.mime_type == "application/pdf": + pdf_file = input_doc.original_file + elif ( + input_doc.mime_type == "image/tiff" + and settings.CONSUMER_COLLATE_DOUBLE_SIDED_TIFF_SUPPORT + ): + pdf_file = convert_from_tiff_to_pdf( + input_doc.original_file, + settings.SCRATCH_DIR, + ) + input_doc.original_file.unlink() + else: + raise ConsumerError("Unsupported file type for collation of double-sided scans") + + staging = settings.SCRATCH_DIR / STAGING_FILE_NAME + + valid_staging_exists = False + if staging.exists(): + stats = os.stat(str(staging)) + # if the file is older than the timeout, we don't consider + # it valid + if dt.datetime.now().timestamp() - stats.st_mtime > TIMEOUT_MINUTES * 60: + logger.warning("Outdated double sided staging file exists, deleting it") + os.unlink(str(staging)) + else: + valid_staging_exists = True + + if valid_staging_exists: + try: + # Collate pages from second PDF in reverse order + with Pdf.open(staging) as pdf1, Pdf.open(pdf_file) as pdf2: + pdf2.pages.reverse() + try: + for i, page in enumerate(pdf2.pages): + pdf1.pages.insert(2 * i + 1, page) + except IndexError: + raise ConsumerError( + "This second file (even numbered pages) contains more " + "pages than the first/odd numbered one. This means the " + "two uploaded files don't belong to the same double-" + "sided scan. Please retry, starting with the odd " + "numbered pages again.", + ) + # Merged file has the same path, but without the + # double-sided subdir. Therefore, it is also in the + # consumption dir and will be picked up for processing + old_file = input_doc.original_file + new_file = Path( + *( + part + for part in old_file.with_name( + f"{old_file.stem}-collated.pdf", + ).parts + if part != settings.CONSUMER_COLLATE_DOUBLE_SIDED_SUBDIR_NAME + ), + ) + # If the user didn't create the subdirs yet, do it for them + new_file.parent.mkdir(parents=True, exist_ok=True) + pdf1.save(new_file) + logger.info("Collated documents into new file %s", new_file) + return ( + "Success. Even numbered pages of double sided scan collated " + "with odd pages" + ) + finally: + # Delete staging and recently uploaded file no matter what. + # If any error occurs, the user needs to be able to restart + # the process from scratch; after all, the staging file + # with the odd numbered pages might be the culprit + pdf_file.unlink() + staging.unlink() + + else: + # In Python 3.9 move supports Path objects directly, + # but for now we have to be compatible with 3.8 + shutil.move(str(pdf_file), str(staging)) + # update access to modification time so we know if the file + # is outdated when another file gets uploaded + os.utime(str(staging), (dt.datetime.now().timestamp(),) * 2) + logger.info( + "Got scan with odd numbered pages of double-sided scan, moved it to %s", + staging, + ) + return ( + "Received odd numbered pages of double sided scan, waiting up to " + f"{TIMEOUT_MINUTES} minutes for even numbered pages" + ) diff --git a/src/documents/file_handling.py b/src/documents/file_handling.py index e382d4965..d9601ccd9 100644 --- a/src/documents/file_handling.py +++ b/src/documents/file_handling.py @@ -218,6 +218,7 @@ def generate_filename( tag_list=tag_list, owner_username=owner_username_str, original_name=original_name, + doc_pk=f"{doc.pk:07}", ).strip() if settings.FILENAME_FORMAT_REMOVE_NONE: diff --git a/src/documents/management/commands/document_exporter.py b/src/documents/management/commands/document_exporter.py index fba89695b..9484d86bb 100644 --- a/src/documents/management/commands/document_exporter.py +++ b/src/documents/management/commands/document_exporter.py @@ -11,13 +11,17 @@ from typing import Set import tqdm from django.conf import settings from django.contrib.auth.models import Group +from django.contrib.auth.models import Permission from django.contrib.auth.models import User +from django.contrib.contenttypes.models import ContentType from django.core import serializers from django.core.management.base import BaseCommand from django.core.management.base import CommandError from django.db import transaction from django.utils import timezone from filelock import FileLock +from guardian.models import GroupObjectPermission +from guardian.models import UserObjectPermission from documents.file_handling import delete_empty_directories from documents.file_handling import generate_filename @@ -33,6 +37,7 @@ from documents.models import UiSettings from documents.settings import EXPORTER_ARCHIVE_NAME from documents.settings import EXPORTER_FILE_NAME from documents.settings import EXPORTER_THUMBNAIL_NAME +from documents.utils import copy_file_with_basic_stats from paperless import version from paperless.db import GnuPG from paperless_mail.models import MailAccount @@ -261,6 +266,22 @@ class Command(BaseCommand): serializers.serialize("json", UiSettings.objects.all()), ) + manifest += json.loads( + serializers.serialize("json", ContentType.objects.all()), + ) + + manifest += json.loads( + serializers.serialize("json", Permission.objects.all()), + ) + + manifest += json.loads( + serializers.serialize("json", UserObjectPermission.objects.all()), + ) + + manifest += json.loads( + serializers.serialize("json", GroupObjectPermission.objects.all()), + ) + # 3. Export files from each document for index, document_dict in tqdm.tqdm( enumerate(document_manifest), @@ -417,4 +438,4 @@ class Command(BaseCommand): if perform_copy: target.parent.mkdir(parents=True, exist_ok=True) - shutil.copy2(source, target) + copy_file_with_basic_stats(source, target) diff --git a/src/documents/management/commands/document_importer.py b/src/documents/management/commands/document_importer.py index b00cb45fa..eac967dde 100644 --- a/src/documents/management/commands/document_importer.py +++ b/src/documents/management/commands/document_importer.py @@ -1,17 +1,20 @@ import json import logging import os -import shutil from contextlib import contextmanager from pathlib import Path import tqdm from django.conf import settings +from django.contrib.auth.models import Permission +from django.contrib.contenttypes.models import ContentType from django.core.exceptions import FieldDoesNotExist from django.core.management import call_command from django.core.management.base import BaseCommand from django.core.management.base import CommandError from django.core.serializers.base import DeserializationError +from django.db import IntegrityError +from django.db import transaction from django.db.models.signals import m2m_changed from django.db.models.signals import post_save from filelock import FileLock @@ -23,6 +26,7 @@ from documents.settings import EXPORTER_ARCHIVE_NAME from documents.settings import EXPORTER_FILE_NAME from documents.settings import EXPORTER_THUMBNAIL_NAME from documents.signals.handlers import update_filename_and_move_files +from documents.utils import copy_file_with_basic_stats from paperless import version @@ -116,9 +120,13 @@ class Command(BaseCommand): ): # Fill up the database with whatever is in the manifest try: - for manifest_path in manifest_paths: - call_command("loaddata", manifest_path) - except (FieldDoesNotExist, DeserializationError) as e: + with transaction.atomic(): + for manifest_path in manifest_paths: + # delete these since pk can change, re-created from import + ContentType.objects.all().delete() + Permission.objects.all().delete() + call_command("loaddata", manifest_path) + except (FieldDoesNotExist, DeserializationError, IntegrityError) as e: self.stdout.write(self.style.ERROR("Database import failed")) if ( self.version is not None @@ -238,7 +246,7 @@ class Command(BaseCommand): create_source_path_directory(document.source_path) - shutil.copy2(document_path, document.source_path) + copy_file_with_basic_stats(document_path, document.source_path) if thumbnail_path: if thumbnail_path.suffix in {".png", ".PNG"}: @@ -253,13 +261,16 @@ class Command(BaseCommand): output_file=str(document.thumbnail_path), ) else: - shutil.copy2(thumbnail_path, document.thumbnail_path) + copy_file_with_basic_stats( + thumbnail_path, + document.thumbnail_path, + ) if archive_path: create_source_path_directory(document.archive_path) # TODO: this assumes that the export is valid and # archive_filename is present on all documents with # archived files - shutil.copy2(archive_path, document.archive_path) + copy_file_with_basic_stats(archive_path, document.archive_path) document.save() diff --git a/src/documents/matching.py b/src/documents/matching.py index 521d49284..eb0f4f8b5 100644 --- a/src/documents/matching.py +++ b/src/documents/matching.py @@ -1,7 +1,9 @@ import logging import re +from documents.classifier import DocumentClassifier from documents.models import Correspondent +from documents.models import Document from documents.models import DocumentType from documents.models import MatchingModel from documents.models import StoragePath @@ -11,7 +13,7 @@ from documents.permissions import get_objects_for_user_owner_aware logger = logging.getLogger("paperless.matching") -def log_reason(matching_model, document, reason): +def log_reason(matching_model: MatchingModel, document: Document, reason: str): class_name = type(matching_model).__name__ logger.debug( f"{class_name} {matching_model.name} matched on document " @@ -19,7 +21,7 @@ def log_reason(matching_model, document, reason): ) -def match_correspondents(document, classifier, user=None): +def match_correspondents(document: Document, classifier: DocumentClassifier, user=None): pred_id = classifier.predict_correspondent(document.content) if classifier else None if user is None and document.owner is not None: @@ -35,11 +37,15 @@ def match_correspondents(document, classifier, user=None): correspondents = Correspondent.objects.all() return list( - filter(lambda o: matches(o, document) or o.pk == pred_id, correspondents), + filter( + lambda o: matches(o, document) + or (o.pk == pred_id and o.matching_algorithm == MatchingModel.MATCH_AUTO), + correspondents, + ), ) -def match_document_types(document, classifier, user=None): +def match_document_types(document: Document, classifier: DocumentClassifier, user=None): pred_id = classifier.predict_document_type(document.content) if classifier else None if user is None and document.owner is not None: @@ -55,11 +61,15 @@ def match_document_types(document, classifier, user=None): document_types = DocumentType.objects.all() return list( - filter(lambda o: matches(o, document) or o.pk == pred_id, document_types), + filter( + lambda o: matches(o, document) + or (o.pk == pred_id and o.matching_algorithm == MatchingModel.MATCH_AUTO), + document_types, + ), ) -def match_tags(document, classifier, user=None): +def match_tags(document: Document, classifier: DocumentClassifier, user=None): predicted_tag_ids = classifier.predict_tags(document.content) if classifier else [] if user is None and document.owner is not None: @@ -71,11 +81,18 @@ def match_tags(document, classifier, user=None): tags = Tag.objects.all() return list( - filter(lambda o: matches(o, document) or o.pk in predicted_tag_ids, tags), + filter( + lambda o: matches(o, document) + or ( + o.matching_algorithm == MatchingModel.MATCH_AUTO + and o.pk in predicted_tag_ids + ), + tags, + ), ) -def match_storage_paths(document, classifier, user=None): +def match_storage_paths(document: Document, classifier: DocumentClassifier, user=None): pred_id = classifier.predict_storage_path(document.content) if classifier else None if user is None and document.owner is not None: @@ -92,13 +109,14 @@ def match_storage_paths(document, classifier, user=None): return list( filter( - lambda o: matches(o, document) or o.pk == pred_id, + lambda o: matches(o, document) + or (o.pk == pred_id and o.matching_algorithm == MatchingModel.MATCH_AUTO), storage_paths, ), ) -def matches(matching_model, document): +def matches(matching_model: MatchingModel, document: Document): search_kwargs = {} document_content = document.content diff --git a/src/documents/migrations/1037_webp_encrypted_thumbnail_conversion.py b/src/documents/migrations/1037_webp_encrypted_thumbnail_conversion.py new file mode 100644 index 000000000..6b4f06ec7 --- /dev/null +++ b/src/documents/migrations/1037_webp_encrypted_thumbnail_conversion.py @@ -0,0 +1,162 @@ +# Generated by Django 4.1.9 on 2023-06-29 19:29 +import logging +import multiprocessing.pool +import shutil +import tempfile +import time +from pathlib import Path + +import gnupg +from django.conf import settings +from django.db import migrations + +from documents.parsers import run_convert + +logger = logging.getLogger("paperless.migrations") + + +def _do_convert(work_package): + ( + existing_encrypted_thumbnail, + converted_encrypted_thumbnail, + passphrase, + ) = work_package + + try: + gpg = gnupg.GPG(gnupghome=settings.GNUPG_HOME) + + logger.info(f"Decrypting thumbnail: {existing_encrypted_thumbnail}") + + # Decrypt png + decrypted_thumbnail = existing_encrypted_thumbnail.with_suffix("").resolve() + + with open(existing_encrypted_thumbnail, "rb") as existing_encrypted_file: + raw_thumb = gpg.decrypt_file( + existing_encrypted_file, + passphrase=passphrase, + always_trust=True, + ).data + with open(decrypted_thumbnail, "wb") as decrypted_file: + decrypted_file.write(raw_thumb) + + converted_decrypted_thumbnail = Path( + str(converted_encrypted_thumbnail).replace("webp.gpg", "webp"), + ).resolve() + + logger.info(f"Converting decrypted thumbnail: {decrypted_thumbnail}") + + # Convert to webp + run_convert( + density=300, + scale="500x5000>", + alpha="remove", + strip=True, + trim=False, + auto_orient=True, + input_file=f"{decrypted_thumbnail}[0]", + output_file=str(converted_decrypted_thumbnail), + ) + + logger.info( + f"Encrypting converted thumbnail: {converted_decrypted_thumbnail}", + ) + + # Encrypt webp + with open(converted_decrypted_thumbnail, "rb") as converted_decrypted_file: + encrypted = gpg.encrypt_file( + fileobj_or_path=converted_decrypted_file, + recipients=None, + passphrase=passphrase, + symmetric=True, + always_trust=True, + ).data + + with open(converted_encrypted_thumbnail, "wb") as converted_encrypted_file: + converted_encrypted_file.write(encrypted) + + # Copy newly created thumbnail to thumbnail directory + shutil.copy(converted_encrypted_thumbnail, existing_encrypted_thumbnail.parent) + + # Remove the existing encrypted PNG version + existing_encrypted_thumbnail.unlink() + + # Remove the decrypted PNG version + decrypted_thumbnail.unlink() + + # Remove the decrypted WebP version + converted_decrypted_thumbnail.unlink() + + logger.info( + "Conversion to WebP completed, " + f"replaced {existing_encrypted_thumbnail.name} with {converted_encrypted_thumbnail.name}", + ) + + except Exception as e: + logger.error(f"Error converting thumbnail (existing file unchanged): {e}") + + +def _convert_encrypted_thumbnails_to_webp(apps, schema_editor): + start = time.time() + + with tempfile.TemporaryDirectory() as tempdir: + work_packages = [] + + if len(list(Path(settings.THUMBNAIL_DIR).glob("*.png.gpg"))) > 0: + passphrase = settings.PASSPHRASE + + if not passphrase: + raise Exception( + "Passphrase not defined, encrypted thumbnails cannot be migrated" + "without this", + ) + + for file in Path(settings.THUMBNAIL_DIR).glob("*.png.gpg"): + existing_thumbnail = file.resolve() + + # Change the existing filename suffix from png to webp + converted_thumbnail_name = Path( + str(existing_thumbnail).replace(".png.gpg", ".webp.gpg"), + ).name + + # Create the expected output filename in the tempdir + converted_thumbnail = ( + Path(tempdir) / Path(converted_thumbnail_name) + ).resolve() + + # Package up the necessary info + work_packages.append( + (existing_thumbnail, converted_thumbnail, passphrase), + ) + + if len(work_packages): + logger.info( + "\n\n" + " This is a one-time only migration to convert thumbnails for all of your\n" + " *encrypted* documents into WebP format. If you have a lot of encrypted documents, \n" + " this may take a while, so a coffee break may be in order." + "\n", + ) + + with multiprocessing.pool.Pool( + processes=min(multiprocessing.cpu_count(), 4), + maxtasksperchild=4, + ) as pool: + pool.map(_do_convert, work_packages) + + end = time.time() + duration = end - start + + logger.info(f"Conversion completed in {duration:.3f}s") + + +class Migration(migrations.Migration): + dependencies = [ + ("documents", "1036_alter_savedviewfilterrule_rule_type"), + ] + + operations = [ + migrations.RunPython( + code=_convert_encrypted_thumbnails_to_webp, + reverse_code=migrations.RunPython.noop, + ), + ] diff --git a/src/documents/parsers.py b/src/documents/parsers.py index e1d7365fb..bedc8bdef 100644 --- a/src/documents/parsers.py +++ b/src/documents/parsers.py @@ -18,6 +18,7 @@ from django.utils import timezone from documents.loggers import LoggingMixin from documents.signals import document_consumer_declaration +from documents.utils import copy_file_with_basic_stats # This regular expression will try to find dates in the document at # hand and will match the following formats: @@ -31,16 +32,18 @@ from documents.signals import document_consumer_declaration # - MONTH ZZZZ, with ZZZZ being 4 digits # - MONTH XX, ZZZZ with XX being 1 or 2 and ZZZZ being 4 digits # - XX MON ZZZZ with XX being 1 or 2 and ZZZZ being 4 digits. MONTH is 3 letters +# - XXPP MONTH ZZZZ with XX being 1 or 2 and PP being 2 letters and ZZZZ being 4 digits # TODO: isnt there a date parsing library for this? DATE_REGEX = re.compile( r"(\b|(?!=([_-])))([0-9]{1,2})[\.\/-]([0-9]{1,2})[\.\/-]([0-9]{4}|[0-9]{2})(\b|(?=([_-])))|" # noqa: E501 r"(\b|(?!=([_-])))([0-9]{4}|[0-9]{2})[\.\/-]([0-9]{1,2})[\.\/-]([0-9]{1,2})(\b|(?=([_-])))|" # noqa: E501 - r"(\b|(?!=([_-])))([0-9]{1,2}[\. ]+[^ ]{3,9} ([0-9]{4}|[0-9]{2}))(\b|(?=([_-])))|" # noqa: E501 + r"(\b|(?!=([_-])))([0-9]{1,2}[\. ]+[a-zA-Z]{3,9} ([0-9]{4}|[0-9]{2}))(\b|(?=([_-])))|" # noqa: E501 r"(\b|(?!=([_-])))([^\W\d_]{3,9} [0-9]{1,2}, ([0-9]{4}))(\b|(?=([_-])))|" r"(\b|(?!=([_-])))([^\W\d_]{3,9} [0-9]{4})(\b|(?=([_-])))|" - r"(\b|(?!=([_-])))(\b[0-9]{1,2}[ \.\/-][A-Z]{3}[ \.\/-][0-9]{4})(\b|(?=([_-])))", # noqa: E501 + r"(\b|(?!=([_-])))([0-9]{1,2}[^ ]{2}[\. ]+[^ ]{3,9}[ \.\/-][0-9]{4})(\b|(?=([_-])))|" # noqa: E501 + r"(\b|(?!=([_-])))(\b[0-9]{1,2}[ \.\/-][a-zA-Z]{3}[ \.\/-][0-9]{4})(\b|(?=([_-])))", # noqa: E501 ) @@ -206,7 +209,7 @@ def make_thumbnail_from_pdf_gs_fallback(in_path, temp_dir, logging_group=None) - # so we need to copy it before it gets moved. # https://github.com/paperless-ngx/paperless-ngx/issues/3631 default_thumbnail_path = os.path.join(temp_dir, "document.png") - shutil.copy2(get_default_thumbnail(), default_thumbnail_path) + copy_file_with_basic_stats(get_default_thumbnail(), default_thumbnail_path) return default_thumbnail_path diff --git a/src/documents/signals/handlers.py b/src/documents/signals/handlers.py index 4a39d98ea..4e0d13c20 100644 --- a/src/documents/signals/handlers.py +++ b/src/documents/signals/handlers.py @@ -1,6 +1,7 @@ import logging import os import shutil +from typing import Optional from celery import states from celery.signals import before_task_publish @@ -21,6 +22,7 @@ from django.utils import timezone from filelock import FileLock from documents import matching +from documents.classifier import DocumentClassifier from documents.file_handling import create_source_path_directory from documents.file_handling import delete_empty_directories from documents.file_handling import generate_unique_filename @@ -33,7 +35,7 @@ from documents.permissions import get_objects_for_user_owner_aware logger = logging.getLogger("paperless.handlers") -def add_inbox_tags(sender, document=None, logging_group=None, **kwargs): +def add_inbox_tags(sender, document: Document, logging_group=None, **kwargs): if document.owner is not None: tags = get_objects_for_user_owner_aware( document.owner, @@ -48,9 +50,9 @@ def add_inbox_tags(sender, document=None, logging_group=None, **kwargs): def set_correspondent( sender, - document=None, + document: Document, logging_group=None, - classifier=None, + classifier: Optional[DocumentClassifier] = None, replace=False, use_first=True, suggest=False, @@ -111,9 +113,9 @@ def set_correspondent( def set_document_type( sender, - document=None, + document: Document, logging_group=None, - classifier=None, + classifier: Optional[DocumentClassifier] = None, replace=False, use_first=True, suggest=False, @@ -175,9 +177,9 @@ def set_document_type( def set_tags( sender, - document=None, + document: Document, logging_group=None, - classifier=None, + classifier: Optional[DocumentClassifier] = None, replace=False, suggest=False, base_url=None, @@ -239,9 +241,9 @@ def set_tags( def set_storage_path( sender, - document=None, + document: Document, logging_group=None, - classifier=None, + classifier: Optional[DocumentClassifier] = None, replace=False, use_first=True, suggest=False, @@ -491,7 +493,7 @@ def update_filename_and_move_files(sender, instance: Document, **kwargs): ) -def set_log_entry(sender, document=None, logging_group=None, **kwargs): +def set_log_entry(sender, document: Document, logging_group=None, **kwargs): ct = ContentType.objects.get(model="document") user = User.objects.get(username="consumer") diff --git a/src/documents/tasks.py b/src/documents/tasks.py index d320875a0..2dbc9d6eb 100644 --- a/src/documents/tasks.py +++ b/src/documents/tasks.py @@ -25,6 +25,7 @@ from documents.consumer import Consumer from documents.consumer import ConsumerError from documents.data_models import ConsumableDocument from documents.data_models import DocumentMetadataOverrides +from documents.double_sided import collate from documents.file_handling import create_source_path_directory from documents.file_handling import generate_unique_filename from documents.models import Correspondent @@ -64,6 +65,12 @@ def train_classifier(): and not Correspondent.objects.filter(matching_algorithm=Tag.MATCH_AUTO).exists() and not StoragePath.objects.filter(matching_algorithm=Tag.MATCH_AUTO).exists() ): + logger.info("No automatic matching items, not training") + # Special case, items were once auto and trained, so remove the model + # and prevent its use again + if settings.MODEL_FILE.exists(): + logger.info(f"Removing {settings.MODEL_FILE} so it won't be used") + settings.MODEL_FILE.unlink() return classifier = load_classifier() @@ -89,10 +96,40 @@ def consume_file( input_doc: ConsumableDocument, overrides: Optional[DocumentMetadataOverrides] = None, ): + def send_progress(status="SUCCESS", message="finished"): + payload = { + "filename": overrides.filename or input_doc.original_file.name, + "task_id": None, + "current_progress": 100, + "max_progress": 100, + "status": status, + "message": message, + } + try: + async_to_sync(get_channel_layer().group_send)( + "status_updates", + {"type": "status_update", "data": payload}, + ) + except ConnectionError as e: + logger.warning(f"ConnectionError on status send: {e!s}") + # Default no overrides if overrides is None: overrides = DocumentMetadataOverrides() + # Handle collation of double-sided documents scanned in two parts + if settings.CONSUMER_ENABLE_COLLATE_DOUBLE_SIDED and ( + settings.CONSUMER_COLLATE_DOUBLE_SIDED_SUBDIR_NAME + in input_doc.original_file.parts + ): + try: + msg = collate(input_doc) + send_progress(message=msg) + return msg + except ConsumerError as e: + send_progress(status="FAILURE", message=e.args[0]) + raise e + # read all barcodes in the current document if settings.CONSUMER_ENABLE_BARCODES or settings.CONSUMER_ENABLE_ASN_BARCODE: with BarcodeReader(input_doc.original_file, input_doc.mime_type) as reader: @@ -102,32 +139,18 @@ def consume_file( ): # notify the sender, otherwise the progress bar # in the UI stays stuck - payload = { - "filename": overrides.filename or input_doc.original_file.name, - "task_id": None, - "current_progress": 100, - "max_progress": 100, - "status": "SUCCESS", - "message": "finished", - } - try: - async_to_sync(get_channel_layer().group_send)( - "status_updates", - {"type": "status_update", "data": payload}, - ) - except ConnectionError as e: - logger.warning(f"ConnectionError on status send: {e!s}") + send_progress() # consuming stops here, since the original document with # the barcodes has been split and will be consumed separately - input_doc.original_file.unlink() return "File successfully split" # try reading the ASN from barcode - if settings.CONSUMER_ENABLE_ASN_BARCODE: + if settings.CONSUMER_ENABLE_ASN_BARCODE and reader.asn is not None: + # Note this will take precedence over an API provided ASN + # But it's from a physical barcode, so that's good overrides.asn = reader.asn - if overrides.asn: - logger.info(f"Found ASN in barcode: {overrides.asn}") + logger.info(f"Found ASN in barcode: {overrides.asn}") # continue with consumption if no barcode was found document = Consumer().try_consume_file( diff --git a/src/documents/tests/samples/double-sided-even.pdf b/src/documents/tests/samples/double-sided-even.pdf new file mode 100644 index 000000000..7caa48a57 Binary files /dev/null and b/src/documents/tests/samples/double-sided-even.pdf differ diff --git a/src/documents/tests/samples/double-sided-odd.pdf b/src/documents/tests/samples/double-sided-odd.pdf new file mode 100644 index 000000000..7d293201e Binary files /dev/null and b/src/documents/tests/samples/double-sided-odd.pdf differ diff --git a/src/documents/tests/test_api.py b/src/documents/tests/test_api.py index 40a1ca4a3..d788cf6a4 100644 --- a/src/documents/tests/test_api.py +++ b/src/documents/tests/test_api.py @@ -2369,6 +2369,62 @@ class TestDocumentApi(DirectoriesMixin, DocumentConsumeDelayMixin, APITestCase): self.assertEqual(resp_data["note"], "this is a posted note") + def test_notes_permissions_aware(self): + """ + GIVEN: + - Existing document owned by user2 but with granted view perms for user1 + WHEN: + - API request is made by user1 to add a note or delete + THEN: + - Notes are neither created nor deleted + """ + user1 = User.objects.create_user(username="test1") + user1.user_permissions.add(*Permission.objects.all()) + user1.save() + + user2 = User.objects.create_user(username="test2") + user2.save() + + doc = Document.objects.create( + title="test", + mime_type="application/pdf", + content="this is a document which will have notes added", + ) + doc.owner = user2 + doc.save() + + self.client.force_authenticate(user1) + + resp = self.client.get( + f"/api/documents/{doc.pk}/notes/", + format="json", + ) + self.assertEqual(resp.content, b"Insufficient permissions to view") + self.assertEqual(resp.status_code, status.HTTP_403_FORBIDDEN) + + assign_perm("view_document", user1, doc) + + resp = self.client.post( + f"/api/documents/{doc.pk}/notes/", + data={"note": "this is a posted note"}, + ) + self.assertEqual(resp.content, b"Insufficient permissions to create") + self.assertEqual(resp.status_code, status.HTTP_403_FORBIDDEN) + + note = Note.objects.create( + note="This is a note.", + document=doc, + user=user2, + ) + + response = self.client.delete( + f"/api/documents/{doc.pk}/notes/?id={note.pk}", + format="json", + ) + + self.assertEqual(response.content, b"Insufficient permissions to delete") + self.assertEqual(response.status_code, status.HTTP_403_FORBIDDEN) + def test_delete_note(self): """ GIVEN: diff --git a/src/documents/tests/test_consumer.py b/src/documents/tests/test_consumer.py index 441cffddf..a8f427c37 100644 --- a/src/documents/tests/test_consumer.py +++ b/src/documents/tests/test_consumer.py @@ -21,6 +21,7 @@ from django.utils import timezone from documents.consumer import Consumer from documents.consumer import ConsumerError +from documents.consumer import ConsumerFilePhase from documents.models import Correspondent from documents.models import Document from documents.models import DocumentType @@ -228,8 +229,8 @@ def fake_magic_from_file(file, mime=False): class TestConsumer(DirectoriesMixin, FileSystemAssertsMixin, TestCase): def _assert_first_last_send_progress( self, - first_status="STARTING", - last_status="SUCCESS", + first_status=ConsumerFilePhase.STARTED, + last_status=ConsumerFilePhase.SUCCESS, first_progress=0, first_progress_max=100, last_progress=100, @@ -561,10 +562,16 @@ class TestConsumer(DirectoriesMixin, FileSystemAssertsMixin, TestCase): @mock.patch("documents.consumer.load_classifier") def testClassifyDocument(self, m): - correspondent = Correspondent.objects.create(name="test") - dtype = DocumentType.objects.create(name="test") - t1 = Tag.objects.create(name="t1") - t2 = Tag.objects.create(name="t2") + correspondent = Correspondent.objects.create( + name="test", + matching_algorithm=Correspondent.MATCH_AUTO, + ) + dtype = DocumentType.objects.create( + name="test", + matching_algorithm=DocumentType.MATCH_AUTO, + ) + t1 = Tag.objects.create(name="t1", matching_algorithm=Tag.MATCH_AUTO) + t2 = Tag.objects.create(name="t2", matching_algorithm=Tag.MATCH_AUTO) m.return_value = MagicMock() m.return_value.predict_correspondent.return_value = correspondent.pk diff --git a/src/documents/tests/test_date_parsing.py b/src/documents/tests/test_date_parsing.py index a0e59d3e6..682151a5c 100644 --- a/src/documents/tests/test_date_parsing.py +++ b/src/documents/tests/test_date_parsing.py @@ -152,6 +152,55 @@ class TestDate(TestCase): text = "Customer Number Currency 22 MAR,2022 Credit Card 1934829304" self.assertIsNone(parse_date("", text), None) + def test_date_format_19(self): + text = "Customer Number Currency 21st MAR 2022 Credit Card 1934829304" + self.assertEqual( + parse_date("", text), + datetime.datetime(2022, 3, 21, 0, 0, tzinfo=tz.gettz(settings.TIME_ZONE)), + ) + + def test_date_format_20(self): + text = "Customer Number Currency 22nd March 2022 Credit Card 1934829304" + self.assertEqual( + parse_date("", text), + datetime.datetime(2022, 3, 22, 0, 0, tzinfo=tz.gettz(settings.TIME_ZONE)), + ) + + def test_date_format_21(self): + text = "Customer Number Currency 2nd MAR 2022 Credit Card 1934829304" + self.assertEqual( + parse_date("", text), + datetime.datetime(2022, 3, 2, 0, 0, tzinfo=tz.gettz(settings.TIME_ZONE)), + ) + + def test_date_format_22(self): + text = "Customer Number Currency 23rd MAR 2022 Credit Card 1934829304" + self.assertEqual( + parse_date("", text), + datetime.datetime(2022, 3, 23, 0, 0, tzinfo=tz.gettz(settings.TIME_ZONE)), + ) + + def test_date_format_23(self): + text = "Customer Number Currency 24th MAR 2022 Credit Card 1934829304" + self.assertEqual( + parse_date("", text), + datetime.datetime(2022, 3, 24, 0, 0, tzinfo=tz.gettz(settings.TIME_ZONE)), + ) + + def test_date_format_24(self): + text = "Customer Number Currency 21-MAR-2022 Credit Card 1934829304" + self.assertEqual( + parse_date("", text), + datetime.datetime(2022, 3, 21, 0, 0, tzinfo=tz.gettz(settings.TIME_ZONE)), + ) + + def test_date_format_25(self): + text = "Customer Number Currency 25TH MAR 2022 Credit Card 1934829304" + self.assertEqual( + parse_date("", text), + datetime.datetime(2022, 3, 25, 0, 0, tzinfo=tz.gettz(settings.TIME_ZONE)), + ) + def test_crazy_date_past(self, *args): self.assertIsNone(parse_date("", "01-07-0590 00:00:00")) diff --git a/src/documents/tests/test_double_sided.py b/src/documents/tests/test_double_sided.py new file mode 100644 index 000000000..88cbe7d87 --- /dev/null +++ b/src/documents/tests/test_double_sided.py @@ -0,0 +1,253 @@ +import datetime as dt +import os +import shutil +from pathlib import Path +from typing import Union +from unittest import mock + +from django.test import TestCase +from django.test import override_settings +from pdfminer.high_level import extract_text +from pikepdf import Pdf + +from documents import tasks +from documents.consumer import ConsumerError +from documents.data_models import ConsumableDocument +from documents.data_models import DocumentSource +from documents.double_sided import STAGING_FILE_NAME +from documents.double_sided import TIMEOUT_MINUTES +from documents.tests.utils import DirectoriesMixin +from documents.tests.utils import FileSystemAssertsMixin + + +@override_settings( + CONSUMER_RECURSIVE=True, + CONSUMER_ENABLE_COLLATE_DOUBLE_SIDED=True, +) +class TestDoubleSided(DirectoriesMixin, FileSystemAssertsMixin, TestCase): + SAMPLE_DIR = Path(__file__).parent / "samples" + + def setUp(self): + super().setUp() + self.dirs.double_sided_dir = self.dirs.consumption_dir / "double-sided" + self.dirs.double_sided_dir.mkdir() + self.staging_file = self.dirs.scratch_dir / STAGING_FILE_NAME + + def consume_file(self, srcname, dstname: Union[str, Path] = "foo.pdf"): + """ + Starts the consume process and also ensures the + destination file does not exist afterwards + """ + src = self.SAMPLE_DIR / srcname + dst = self.dirs.double_sided_dir / dstname + dst.parent.mkdir(parents=True, exist_ok=True) + shutil.copy(src, dst) + with mock.patch("documents.tasks.async_to_sync"), mock.patch( + "documents.consumer.async_to_sync", + ): + msg = tasks.consume_file( + ConsumableDocument( + source=DocumentSource.ConsumeFolder, + original_file=dst, + ), + None, + ) + self.assertIsNotFile(dst) + return msg + + def create_staging_file(self, src="double-sided-odd.pdf", datetime=None): + shutil.copy(self.SAMPLE_DIR / src, self.staging_file) + if datetime is None: + datetime = dt.datetime.now() + os.utime(str(self.staging_file), (datetime.timestamp(),) * 2) + + def test_odd_numbered_moved_to_staging(self): + """ + GIVEN: + - No staging file exists + WHEN: + - A file is copied into the double-sided consume directory + THEN: + - The file becomes the new staging file + - The file in the consume directory gets removed + - The staging file has the st_mtime set to now + - The user gets informed + """ + + msg = self.consume_file("double-sided-odd.pdf") + + self.assertIsFile(self.staging_file) + self.assertAlmostEqual( + dt.datetime.fromtimestamp(self.staging_file.stat().st_mtime), + dt.datetime.now(), + delta=dt.timedelta(seconds=5), + ) + self.assertIn("Received odd numbered pages", msg) + + def test_collation(self): + """ + GIVEN: + - A staging file not older than TIMEOUT_MINUTES with odd pages exists + WHEN: + - A file is copied into the double-sided consume directory + THEN: + - A new file containing the collated staging and uploaded file is + created and put into the consume directory + - The new file is named "foo-collated.pdf", where foo is the name of + the second file + - Both staging and uploaded file get deleted + - The new file contains the pages in the correct order + """ + + self.create_staging_file() + self.consume_file("double-sided-even.pdf", "some-random-name.pdf") + + target = self.dirs.consumption_dir / "some-random-name-collated.pdf" + self.assertIsFile(target) + self.assertIsNotFile(self.staging_file) + self.assertRegex( + extract_text(str(target)), + r"(?s)" + r"This is page 1.*This is page 2.*This is page 3.*" + r"This is page 4.*This is page 5", + ) + + def test_staging_file_expiration(self): + """ + GIVEN: + - A staging file older than TIMEOUT_MINUTES exists + WHEN: + - A file is copied into the double-sided consume directory + THEN: + - It becomes the new staging file + """ + + self.create_staging_file( + datetime=dt.datetime.now() + - dt.timedelta(minutes=TIMEOUT_MINUTES, seconds=1), + ) + msg = self.consume_file("double-sided-odd.pdf") + self.assertIsFile(self.staging_file) + self.assertIn("Received odd numbered pages", msg) + + def test_less_odd_pages_then_even_fails(self): + """ + GIVEN: + - A valid staging file + WHEN: + - A file is copied into the double-sided consume directory + that has more pages than the staging file + THEN: + - Both files get removed + - A ConsumerError exception is thrown + """ + self.create_staging_file("simple.pdf") + self.assertRaises( + ConsumerError, + self.consume_file, + "double-sided-even.pdf", + ) + self.assertIsNotFile(self.staging_file) + + @override_settings(CONSUMER_COLLATE_DOUBLE_SIDED_TIFF_SUPPORT=True) + def test_tiff_upload_enabled(self): + """ + GIVEN: + - CONSUMER_COLLATE_DOUBLE_SIDED_TIFF_SUPPORT is true + - No staging file exists + WHEN: + - A TIFF file gets uploaded into the double-sided + consume dir + THEN: + - The file is converted into a PDF and moved to + the staging file + """ + self.consume_file("simple.tiff", "simple.tiff") + self.assertIsFile(self.staging_file) + # Ensure the file is a valid PDF by trying to read it + Pdf.open(self.staging_file) + + @override_settings(CONSUMER_COLLATE_DOUBLE_SIDED_TIFF_SUPPORT=False) + def test_tiff_upload_disabled(self): + """ + GIVEN: + - CONSUMER_COLLATE_DOUBLE_SIDED_TIFF_SUPPORT is false + - No staging file exists + WHEN: + - A TIFF file gets uploaded into the double-sided + consume dir + THEN: + - A ConsumerError is raised + """ + self.assertRaises( + ConsumerError, + self.consume_file, + "simple.tiff", + "simple.tiff", + ) + + @override_settings(CONSUMER_COLLATE_DOUBLE_SIDED_SUBDIR_NAME="quux") + def test_different_upload_dir_name(self): + """ + GIVEN: + - No staging file exists + - CONSUMER_COLLATE_DOUBLE_SIDED_SUBDIR_NAME is set to quux + WHEN: + - A file is uploaded into the quux dir + THEN: + - A staging file is created + """ + self.consume_file("double-sided-odd.pdf", Path("..") / "quux" / "foo.pdf") + self.assertIsFile(self.staging_file) + + def test_only_double_sided_dir_is_handled(self): + """ + GIVEN: + - No staging file exists + WHEN: + - A file is uploaded into the normal consumption dir + THEN: + - The file is processed as normal + """ + msg = self.consume_file("simple.pdf", Path("..") / "simple.pdf") + self.assertIsNotFile(self.staging_file) + self.assertRegex(msg, "Success. New document .* created") + + def test_subdirectory_upload(self): + """ + GIVEN: + - A staging file exists + WHEN: + - A file gets uploaded into foo/bar/double-sided + or double-sided/foo/bar + THEN: + - The collated file gets put into foo/bar + """ + for path in [ + Path("foo") / "bar" / "double-sided", + Path("double-sided") / "foo" / "bar", + ]: + with self.subTest(path=path): + # Ensure we get fresh directories for each run + self.tearDown() + self.setUp() + + self.create_staging_file() + self.consume_file("double-sided-odd.pdf", path / "foo.pdf") + self.assertIsFile( + self.dirs.consumption_dir / "foo" / "bar" / "foo-collated.pdf", + ) + + @override_settings(CONSUMER_ENABLE_COLLATE_DOUBLE_SIDED=False) + def test_disabled_double_sided_dir_upload(self): + """ + GIVEN: + - CONSUMER_ENABLE_COLLATE_DOUBLE_SIDED is false + WHEN: + - A file is uploaded into the double-sided directory + THEN: + - The file is processed like a normal upload + """ + msg = self.consume_file("simple.pdf") + self.assertIsNotFile(self.staging_file) + self.assertRegex(msg, "Success. New document .* created") diff --git a/src/documents/tests/test_file_handling.py b/src/documents/tests/test_file_handling.py index b021f8aaf..9e27b9aad 100644 --- a/src/documents/tests/test_file_handling.py +++ b/src/documents/tests/test_file_handling.py @@ -446,6 +446,19 @@ class TestFileHandling(DirectoriesMixin, FileSystemAssertsMixin, TestCase): self.assertIsNotDir(os.path.join(settings.ORIGINALS_DIR, "none")) self.assertIsDir(settings.ORIGINALS_DIR) + @override_settings(FILENAME_FORMAT="{doc_pk}") + def test_format_doc_pk(self): + document = Document() + document.pk = 1 + document.mime_type = "application/pdf" + document.storage_type = Document.STORAGE_TYPE_UNENCRYPTED + + self.assertEqual(generate_filename(document), "0000001.pdf") + + document.pk = 13579 + + self.assertEqual(generate_filename(document), "0013579.pdf") + @override_settings(FILENAME_FORMAT=None) def test_format_none(self): document = Document() diff --git a/src/documents/tests/test_management_exporter.py b/src/documents/tests/test_management_exporter.py index e7c116caf..4da93ee50 100644 --- a/src/documents/tests/test_management_exporter.py +++ b/src/documents/tests/test_management_exporter.py @@ -7,11 +7,18 @@ from pathlib import Path from unittest import mock from zipfile import ZipFile +from django.contrib.auth.models import Group +from django.contrib.auth.models import Permission +from django.contrib.contenttypes.models import ContentType from django.core.management import call_command from django.core.management.base import CommandError +from django.db import IntegrityError from django.test import TestCase from django.test import override_settings from django.utils import timezone +from guardian.models import GroupObjectPermission +from guardian.models import UserObjectPermission +from guardian.shortcuts import assign_perm from documents.management.commands import document_exporter from documents.models import Correspondent @@ -34,6 +41,8 @@ class TestExportImport(DirectoriesMixin, FileSystemAssertsMixin, TestCase): self.addCleanup(shutil.rmtree, self.target) self.user = User.objects.create(username="temp_admin") + self.user2 = User.objects.create(username="user2") + self.group1 = Group.objects.create(name="group1") self.d1 = Document.objects.create( content="Content", @@ -73,6 +82,9 @@ class TestExportImport(DirectoriesMixin, FileSystemAssertsMixin, TestCase): user=self.user, ) + assign_perm("view_document", self.user2, self.d2) + assign_perm("view_document", self.group1, self.d3) + self.t1 = Tag.objects.create(name="t") self.dt1 = DocumentType.objects.create(name="dt") self.c1 = Correspondent.objects.create(name="c") @@ -141,12 +153,12 @@ class TestExportImport(DirectoriesMixin, FileSystemAssertsMixin, TestCase): manifest = self._do_export(use_filename_format=use_filename_format) - self.assertEqual(len(manifest), 10) + self.assertEqual(len(manifest), 149) # dont include consumer or AnonymousUser users self.assertEqual( len(list(filter(lambda e: e["model"] == "auth.user", manifest))), - 1, + 2, ) self.assertEqual( @@ -218,6 +230,9 @@ class TestExportImport(DirectoriesMixin, FileSystemAssertsMixin, TestCase): Correspondent.objects.all().delete() DocumentType.objects.all().delete() Tag.objects.all().delete() + Permission.objects.all().delete() + UserObjectPermission.objects.all().delete() + GroupObjectPermission.objects.all().delete() self.assertEqual(Document.objects.count(), 0) call_command("document_importer", "--no-progress-bar", self.target) @@ -230,6 +245,9 @@ class TestExportImport(DirectoriesMixin, FileSystemAssertsMixin, TestCase): self.assertEqual(Document.objects.get(id=self.d2.id).title, "wow2") self.assertEqual(Document.objects.get(id=self.d3.id).title, "wow2") self.assertEqual(Document.objects.get(id=self.d4.id).title, "wow_dec") + self.assertEqual(GroupObjectPermission.objects.count(), 1) + self.assertEqual(UserObjectPermission.objects.count(), 1) + self.assertEqual(Permission.objects.count(), 108) messages = check_sanity() # everything is alright after the test self.assertEqual(len(messages), 0) @@ -259,7 +277,7 @@ class TestExportImport(DirectoriesMixin, FileSystemAssertsMixin, TestCase): st_mtime_1 = os.stat(os.path.join(self.target, "manifest.json")).st_mtime with mock.patch( - "documents.management.commands.document_exporter.shutil.copy2", + "documents.management.commands.document_exporter.copy_file_with_basic_stats", ) as m: self._do_export() m.assert_not_called() @@ -270,7 +288,7 @@ class TestExportImport(DirectoriesMixin, FileSystemAssertsMixin, TestCase): Path(self.d1.source_path).touch() with mock.patch( - "documents.management.commands.document_exporter.shutil.copy2", + "documents.management.commands.document_exporter.copy_file_with_basic_stats", ) as m: self._do_export() self.assertEqual(m.call_count, 1) @@ -293,7 +311,7 @@ class TestExportImport(DirectoriesMixin, FileSystemAssertsMixin, TestCase): self.assertIsFile(os.path.join(self.target, "manifest.json")) with mock.patch( - "documents.management.commands.document_exporter.shutil.copy2", + "documents.management.commands.document_exporter.copy_file_with_basic_stats", ) as m: self._do_export() m.assert_not_called() @@ -304,7 +322,7 @@ class TestExportImport(DirectoriesMixin, FileSystemAssertsMixin, TestCase): self.d2.save() with mock.patch( - "documents.management.commands.document_exporter.shutil.copy2", + "documents.management.commands.document_exporter.copy_file_with_basic_stats", ) as m: self._do_export(compare_checksums=True) self.assertEqual(m.call_count, 1) @@ -641,3 +659,47 @@ class TestExportImport(DirectoriesMixin, FileSystemAssertsMixin, TestCase): self.assertEqual(Document.objects.count(), 0) call_command("document_importer", "--no-progress-bar", self.target) self.assertEqual(Document.objects.count(), 4) + + def test_import_db_transaction_failed(self): + """ + GIVEN: + - Import from manifest started + WHEN: + - Import of database fails + THEN: + - ContentType & Permission objects are not deleted, db transaction rolled back + """ + + shutil.rmtree(os.path.join(self.dirs.media_dir, "documents")) + shutil.copytree( + os.path.join(os.path.dirname(__file__), "samples", "documents"), + os.path.join(self.dirs.media_dir, "documents"), + ) + + self.assertEqual(ContentType.objects.count(), 27) + self.assertEqual(Permission.objects.count(), 108) + + manifest = self._do_export() + + with paperless_environment(): + self.assertEqual( + len(list(filter(lambda e: e["model"] == "auth.permission", manifest))), + 108, + ) + # add 1 more to db to show objects are not re-created by import + Permission.objects.create( + name="test", + codename="test_perm", + content_type_id=1, + ) + self.assertEqual(Permission.objects.count(), 109) + + # will cause an import error + self.user.delete() + self.user = User.objects.create(username="temp_admin") + + with self.assertRaises(IntegrityError): + call_command("document_importer", "--no-progress-bar", self.target) + + self.assertEqual(ContentType.objects.count(), 27) + self.assertEqual(Permission.objects.count(), 109) diff --git a/src/documents/tests/test_migration_archive_files.py b/src/documents/tests/test_migration_archive_files.py index ca20b558f..80fc04205 100644 --- a/src/documents/tests/test_migration_archive_files.py +++ b/src/documents/tests/test_migration_archive_files.py @@ -2,6 +2,7 @@ import hashlib import os import shutil from pathlib import Path +from typing import Optional from unittest import mock from django.conf import settings @@ -60,8 +61,8 @@ def make_test_document( mime_type: str, original: str, original_filename: str, - archive: str = None, - archive_filename: str = None, + archive: Optional[str] = None, + archive_filename: Optional[str] = None, ): doc = document_class() doc.filename = original_filename diff --git a/src/documents/tests/test_migration_encrypted_webp_conversion.py b/src/documents/tests/test_migration_encrypted_webp_conversion.py new file mode 100644 index 000000000..fbb5a8611 --- /dev/null +++ b/src/documents/tests/test_migration_encrypted_webp_conversion.py @@ -0,0 +1,276 @@ +import shutil +import tempfile +from pathlib import Path +from typing import Callable +from typing import Iterable +from typing import Union +from unittest import mock + +from django.test import override_settings + +from documents.tests.utils import TestMigrations + + +@override_settings(PASSPHRASE="test") +@mock.patch( + "documents.migrations.1037_webp_encrypted_thumbnail_conversion.multiprocessing.pool.Pool.map", +) +@mock.patch("documents.migrations.1037_webp_encrypted_thumbnail_conversion.run_convert") +class TestMigrateToEncrytpedWebPThumbnails(TestMigrations): + migrate_from = "1036_alter_savedviewfilterrule_rule_type" + migrate_to = "1037_webp_encrypted_thumbnail_conversion" + auto_migrate = False + + def pretend_convert_output(self, *args, **kwargs): + """ + Pretends to do the conversion, by copying the input file + to the output file + """ + shutil.copy2( + Path(kwargs["input_file"].rstrip("[0]")), + Path(kwargs["output_file"]), + ) + + def pretend_map(self, func: Callable, iterable: Iterable): + """ + Pretends to be the map of a multiprocessing.Pool, but secretly does + everything in series + """ + for item in iterable: + func(item) + + def create_dummy_thumbnails( + self, + thumb_dir: Path, + ext: str, + count: int, + start_count: int = 0, + ): + """ + Helper to create a certain count of files of given extension in a given directory + """ + for idx in range(count): + (Path(thumb_dir) / Path(f"{start_count + idx:07}.{ext}")).touch() + # Triple check expected files exist + self.assert_file_count_by_extension(ext, thumb_dir, count) + + def create_webp_thumbnail_files( + self, + thumb_dir: Path, + count: int, + start_count: int = 0, + ): + """ + Creates a dummy WebP thumbnail file in the given directory, based on + the database Document + """ + self.create_dummy_thumbnails(thumb_dir, "webp", count, start_count) + + def create_encrypted_webp_thumbnail_files( + self, + thumb_dir: Path, + count: int, + start_count: int = 0, + ): + """ + Creates a dummy encrypted WebP thumbnail file in the given directory, based on + the database Document + """ + self.create_dummy_thumbnails(thumb_dir, "webp.gpg", count, start_count) + + def create_png_thumbnail_files( + self, + thumb_dir: Path, + count: int, + start_count: int = 0, + ): + """ + Creates a dummy PNG thumbnail file in the given directory, based on + the database Document + """ + + self.create_dummy_thumbnails(thumb_dir, "png", count, start_count) + + def create_encrypted_png_thumbnail_files( + self, + thumb_dir: Path, + count: int, + start_count: int = 0, + ): + """ + Creates a dummy encrypted PNG thumbnail file in the given directory, based on + the database Document + """ + + self.create_dummy_thumbnails(thumb_dir, "png.gpg", count, start_count) + + def assert_file_count_by_extension( + self, + ext: str, + dir: Union[str, Path], + expected_count: int, + ): + """ + Helper to assert a certain count of given extension files in given directory + """ + if not isinstance(dir, Path): + dir = Path(dir) + matching_files = list(dir.glob(f"*.{ext}")) + self.assertEqual(len(matching_files), expected_count) + + def assert_encrypted_png_file_count(self, dir: Path, expected_count: int): + """ + Helper to assert a certain count of excrypted PNG extension files in given directory + """ + self.assert_file_count_by_extension("png.gpg", dir, expected_count) + + def assert_encrypted_webp_file_count(self, dir: Path, expected_count: int): + """ + Helper to assert a certain count of encrypted WebP extension files in given directory + """ + self.assert_file_count_by_extension("webp.gpg", dir, expected_count) + + def assert_webp_file_count(self, dir: Path, expected_count: int): + """ + Helper to assert a certain count of WebP extension files in given directory + """ + self.assert_file_count_by_extension("webp", dir, expected_count) + + def assert_png_file_count(self, dir: Path, expected_count: int): + """ + Helper to assert a certain count of PNG extension files in given directory + """ + self.assert_file_count_by_extension("png", dir, expected_count) + + def setUp(self): + self.thumbnail_dir = Path(tempfile.mkdtemp()).resolve() + + return super().setUp() + + def tearDown(self) -> None: + shutil.rmtree(self.thumbnail_dir) + + return super().tearDown() + + def test_do_nothing_if_converted( + self, + run_convert_mock: mock.MagicMock, + map_mock: mock.MagicMock, + ): + """ + GIVEN: + - Encrytped document exists with existing encrypted WebP thumbnail path + WHEN: + - Migration is attempted + THEN: + - Nothing is converted + """ + map_mock.side_effect = self.pretend_map + + with override_settings( + THUMBNAIL_DIR=self.thumbnail_dir, + ): + self.create_encrypted_webp_thumbnail_files(self.thumbnail_dir, 3) + + self.performMigration() + run_convert_mock.assert_not_called() + + self.assert_encrypted_webp_file_count(self.thumbnail_dir, 3) + + def test_convert_thumbnails( + self, + run_convert_mock: mock.MagicMock, + map_mock: mock.MagicMock, + ): + """ + GIVEN: + - Encrypted documents exist with PNG thumbnail + WHEN: + - Migration is attempted + THEN: + - Thumbnails are converted to webp & re-encrypted + """ + map_mock.side_effect = self.pretend_map + run_convert_mock.side_effect = self.pretend_convert_output + + with override_settings( + THUMBNAIL_DIR=self.thumbnail_dir, + ): + self.create_encrypted_png_thumbnail_files(self.thumbnail_dir, 3) + + self.performMigration() + + run_convert_mock.assert_called() + self.assertEqual(run_convert_mock.call_count, 3) + + self.assert_encrypted_webp_file_count(self.thumbnail_dir, 3) + + def test_convert_errors_out( + self, + run_convert_mock: mock.MagicMock, + map_mock: mock.MagicMock, + ): + """ + GIVEN: + - Encrypted document exists with PNG thumbnail + WHEN: + - Migration is attempted, but raises an exception + THEN: + - Single thumbnail is converted + """ + map_mock.side_effect = self.pretend_map + run_convert_mock.side_effect = OSError + + with override_settings( + THUMBNAIL_DIR=self.thumbnail_dir, + ): + self.create_encrypted_png_thumbnail_files(self.thumbnail_dir, 3) + + self.performMigration() + + run_convert_mock.assert_called() + self.assertEqual(run_convert_mock.call_count, 3) + + self.assert_encrypted_png_file_count(self.thumbnail_dir, 3) + + def test_convert_mixed( + self, + run_convert_mock: mock.MagicMock, + map_mock: mock.MagicMock, + ): + """ + GIVEN: + - Documents exist with PNG, encrypted PNG and WebP thumbnails + WHEN: + - Migration is attempted + THEN: + - Only encrypted PNG thumbnails are converted + """ + map_mock.side_effect = self.pretend_map + run_convert_mock.side_effect = self.pretend_convert_output + + with override_settings( + THUMBNAIL_DIR=self.thumbnail_dir, + ): + self.create_png_thumbnail_files(self.thumbnail_dir, 3) + self.create_encrypted_png_thumbnail_files( + self.thumbnail_dir, + 3, + start_count=3, + ) + self.create_webp_thumbnail_files(self.thumbnail_dir, 2, start_count=6) + self.create_encrypted_webp_thumbnail_files( + self.thumbnail_dir, + 3, + start_count=8, + ) + + self.performMigration() + + run_convert_mock.assert_called() + self.assertEqual(run_convert_mock.call_count, 3) + + self.assert_png_file_count(self.thumbnail_dir, 3) + self.assert_encrypted_webp_file_count(self.thumbnail_dir, 6) + self.assert_webp_file_count(self.thumbnail_dir, 2) + self.assert_encrypted_png_file_count(self.thumbnail_dir, 0) diff --git a/src/documents/utils.py b/src/documents/utils.py new file mode 100644 index 000000000..45496fc9b --- /dev/null +++ b/src/documents/utils.py @@ -0,0 +1,43 @@ +import shutil +from os import utime +from pathlib import Path +from typing import Tuple +from typing import Union + + +def _coerce_to_path( + source: Union[Path, str], + dest: Union[Path, str], +) -> Tuple[Path, Path]: + return Path(source).resolve(), Path(dest).resolve() + + +def copy_basic_file_stats(source: Union[Path, str], dest: Union[Path, str]) -> None: + """ + Copies only the m_time and a_time attributes from source to destination. + Both are expected to exist. + + The extended attribute copy does weird things with SELinux and files + copied from temporary directories and copystat doesn't allow disabling + these copies + """ + source, dest = _coerce_to_path(source, dest) + src_stat = source.stat() + utime(dest, ns=(src_stat.st_atime_ns, src_stat.st_mtime_ns)) + + +def copy_file_with_basic_stats( + source: Union[Path, str], + dest: Union[Path, str], +) -> None: + """ + A sort of simpler copy2 that doesn't copy extended file attributes, + only the access time and modified times from source to dest. + + The extended attribute copy does weird things with SELinux and files + copied from temporary directories. + """ + source, dest = _coerce_to_path(source, dest) + + shutil.copy(source, dest) + copy_basic_file_stats(source, dest) diff --git a/src/documents/views.py b/src/documents/views.py index cd69095fe..d57ad4eea 100644 --- a/src/documents/views.py +++ b/src/documents/views.py @@ -502,19 +502,18 @@ class DocumentViewSet( @action(methods=["get", "post", "delete"], detail=True) def notes(self, request, pk=None): + currentUser = request.user try: doc = Document.objects.get(pk=pk) - if request.user is not None and not has_perms_owner_aware( - request.user, + if currentUser is not None and not has_perms_owner_aware( + currentUser, "view_document", doc, ): - return HttpResponseForbidden("Insufficient permissions") + return HttpResponseForbidden("Insufficient permissions to view") except Document.DoesNotExist: raise Http404 - currentUser = request.user - if request.method == "GET": try: return Response(self.getNotes(doc)) @@ -525,6 +524,13 @@ class DocumentViewSet( ) elif request.method == "POST": try: + if currentUser is not None and not has_perms_owner_aware( + currentUser, + "change_document", + doc, + ): + return HttpResponseForbidden("Insufficient permissions to create") + c = Note.objects.create( document=doc, note=request.data["note"], @@ -545,6 +551,13 @@ class DocumentViewSet( }, ) elif request.method == "DELETE": + if currentUser is not None and not has_perms_owner_aware( + currentUser, + "change_document", + doc, + ): + return HttpResponseForbidden("Insufficient permissions to delete") + note = Note.objects.get(id=int(request.GET.get("id"))) note.delete() diff --git a/src/paperless/settings.py b/src/paperless/settings.py index 763cf96fc..39460066e 100644 --- a/src/paperless/settings.py +++ b/src/paperless/settings.py @@ -791,6 +791,18 @@ CONSUMER_BARCODE_DPI: Final[str] = int( os.getenv("PAPERLESS_CONSUMER_BARCODE_DPI", 300), ) +CONSUMER_ENABLE_COLLATE_DOUBLE_SIDED: Final[bool] = __get_boolean( + "PAPERLESS_CONSUMER_ENABLE_COLLATE_DOUBLE_SIDED", +) + +CONSUMER_COLLATE_DOUBLE_SIDED_SUBDIR_NAME: Final[str] = os.getenv( + "PAPERLESS_CONSUMER_COLLATE_DOUBLE_SIDED_SUBDIR_NAME", + "double-sided", +) + +CONSUMER_COLLATE_DOUBLE_SIDED_TIFF_SUPPORT: Final[bool] = __get_boolean( + "PAPERLESS_CONSUMER_COLLATE_DOUBLE_SIDED_TIFF_SUPPORT", +) OCR_PAGES = int(os.getenv("PAPERLESS_OCR_PAGES", 0)) diff --git a/src/paperless_mail/admin.py b/src/paperless_mail/admin.py index b035d14e4..b2eed5ce3 100644 --- a/src/paperless_mail/admin.py +++ b/src/paperless_mail/admin.py @@ -1,6 +1,7 @@ from django import forms from django.contrib import admin from django.utils.translation import gettext_lazy as _ +from guardian.admin import GuardedModelAdmin from paperless_mail.models import MailAccount from paperless_mail.models import MailRule @@ -31,7 +32,7 @@ class MailAccountAdminForm(forms.ModelForm): ] -class MailAccountAdmin(admin.ModelAdmin): +class MailAccountAdmin(GuardedModelAdmin): list_display = ("name", "imap_server", "username") fieldsets = [ @@ -45,7 +46,7 @@ class MailAccountAdmin(admin.ModelAdmin): form = MailAccountAdminForm -class MailRuleAdmin(admin.ModelAdmin): +class MailRuleAdmin(GuardedModelAdmin): radio_fields = { "attachment_type": admin.VERTICAL, "action": admin.VERTICAL, diff --git a/src/paperless_mail/mail.py b/src/paperless_mail/mail.py index 65768d3c2..a0bda19ba 100644 --- a/src/paperless_mail/mail.py +++ b/src/paperless_mail/mail.py @@ -2,6 +2,7 @@ import datetime import itertools import logging import os +import ssl import tempfile import traceback from datetime import date @@ -394,13 +395,12 @@ def get_mailbox(server, port, security) -> MailBox: """ Returns the correct MailBox instance for the given configuration. """ - if security == MailAccount.ImapSecurity.NONE: mailbox = MailBoxUnencrypted(server, port) elif security == MailAccount.ImapSecurity.STARTTLS: - mailbox = MailBoxTls(server, port) + mailbox = MailBoxTls(server, port, ssl_context=ssl.create_default_context()) elif security == MailAccount.ImapSecurity.SSL: - mailbox = MailBox(server, port) + mailbox = MailBox(server, port, ssl_context=ssl.create_default_context()) else: raise NotImplementedError("Unknown IMAP security") # pragma: nocover return mailbox diff --git a/src/paperless_mail/serialisers.py b/src/paperless_mail/serialisers.py index 41dea9033..bdecff11e 100644 --- a/src/paperless_mail/serialisers.py +++ b/src/paperless_mail/serialisers.py @@ -25,7 +25,6 @@ class MailAccountSerializer(OwnedObjectSerializer): class Meta: model = MailAccount - depth = 1 fields = [ "id", "name", @@ -36,6 +35,10 @@ class MailAccountSerializer(OwnedObjectSerializer): "password", "character_set", "is_token", + "owner", + "user_can_change", + "permissions", + "set_permissions", ] def update(self, instance, validated_data): @@ -67,7 +70,6 @@ class MailRuleSerializer(OwnedObjectSerializer): class Meta: model = MailRule - depth = 1 fields = [ "id", "name", @@ -89,6 +91,10 @@ class MailRuleSerializer(OwnedObjectSerializer): "order", "attachment_type", "consumption_scope", + "owner", + "user_can_change", + "permissions", + "set_permissions", ] def update(self, instance, validated_data): diff --git a/src/paperless_mail/tests/test_api.py b/src/paperless_mail/tests/test_api.py index 28a369c6c..a9e88e4ad 100644 --- a/src/paperless_mail/tests/test_api.py +++ b/src/paperless_mail/tests/test_api.py @@ -1,7 +1,9 @@ import json from unittest import mock +from django.contrib.auth.models import Permission from django.contrib.auth.models import User +from guardian.shortcuts import assign_perm from rest_framework import status from rest_framework.test import APITestCase @@ -27,7 +29,9 @@ class TestAPIMailAccounts(DirectoriesMixin, APITestCase): super().setUp() - self.user = User.objects.create_superuser(username="temp_admin") + self.user = User.objects.create_user(username="temp_admin") + self.user.user_permissions.add(*Permission.objects.all()) + self.user.save() self.client.force_authenticate(user=self.user) def test_get_mail_accounts(self): @@ -266,6 +270,73 @@ class TestAPIMailAccounts(DirectoriesMixin, APITestCase): self.assertEqual(response.status_code, status.HTTP_200_OK) self.assertEqual(response.data["success"], True) + def test_get_mail_accounts_owner_aware(self): + """ + GIVEN: + - Configured accounts with different users + WHEN: + - API call is made to get mail accounts + THEN: + - Only unowned, owned by user or granted accounts are provided + """ + + user2 = User.objects.create_user(username="temp_admin2") + + account1 = MailAccount.objects.create( + name="Email1", + username="username1", + password="password1", + imap_server="server.example.com", + imap_port=443, + imap_security=MailAccount.ImapSecurity.SSL, + character_set="UTF-8", + ) + + account2 = MailAccount.objects.create( + name="Email2", + username="username2", + password="password2", + imap_server="server.example.com", + imap_port=443, + imap_security=MailAccount.ImapSecurity.SSL, + character_set="UTF-8", + ) + account2.owner = self.user + account2.save() + + account3 = MailAccount.objects.create( + name="Email3", + username="username3", + password="password3", + imap_server="server.example.com", + imap_port=443, + imap_security=MailAccount.ImapSecurity.SSL, + character_set="UTF-8", + ) + account3.owner = user2 + account3.save() + + account4 = MailAccount.objects.create( + name="Email4", + username="username4", + password="password4", + imap_server="server.example.com", + imap_port=443, + imap_security=MailAccount.ImapSecurity.SSL, + character_set="UTF-8", + ) + account4.owner = user2 + account4.save() + assign_perm("view_mailaccount", self.user, account4) + + response = self.client.get(self.ENDPOINT) + + self.assertEqual(response.status_code, status.HTTP_200_OK) + self.assertEqual(response.data["count"], 3) + self.assertEqual(response.data["results"][0]["name"], account1.name) + self.assertEqual(response.data["results"][1]["name"], account2.name) + self.assertEqual(response.data["results"][2]["name"], account4.name) + class TestAPIMailRules(DirectoriesMixin, APITestCase): ENDPOINT = "/api/mail_rules/" @@ -273,7 +344,9 @@ class TestAPIMailRules(DirectoriesMixin, APITestCase): def setUp(self): super().setUp() - self.user = User.objects.create_superuser(username="temp_admin") + self.user = User.objects.create_user(username="temp_admin") + self.user.user_permissions.add(*Permission.objects.all()) + self.user.save() self.client.force_authenticate(user=self.user) def test_get_mail_rules(self): @@ -533,3 +606,72 @@ class TestAPIMailRules(DirectoriesMixin, APITestCase): returned_rule1 = MailRule.objects.get(pk=rule1.pk) self.assertEqual(returned_rule1.name, "Updated Name 1") self.assertEqual(returned_rule1.action, MailRule.MailAction.DELETE) + + def test_get_mail_rules_owner_aware(self): + """ + GIVEN: + - Configured rules with different users + WHEN: + - API call is made to get mail rules + THEN: + - Only unowned, owned by user or granted mail rules are provided + """ + + user2 = User.objects.create_user(username="temp_admin2") + + account1 = MailAccount.objects.create( + name="Email1", + username="username1", + password="password1", + imap_server="server.example.com", + imap_port=443, + imap_security=MailAccount.ImapSecurity.SSL, + character_set="UTF-8", + ) + + rule1 = MailRule.objects.create( + name="Rule1", + account=account1, + folder="INBOX", + filter_from="from@example1.com", + order=0, + ) + + rule2 = MailRule.objects.create( + name="Rule2", + account=account1, + folder="INBOX", + filter_from="from@example2.com", + order=1, + ) + rule2.owner = self.user + rule2.save() + + rule3 = MailRule.objects.create( + name="Rule3", + account=account1, + folder="INBOX", + filter_from="from@example3.com", + order=2, + ) + rule3.owner = user2 + rule3.save() + + rule4 = MailRule.objects.create( + name="Rule4", + account=account1, + folder="INBOX", + filter_from="from@example4.com", + order=3, + ) + rule4.owner = user2 + rule4.save() + assign_perm("view_mailrule", self.user, rule4) + + response = self.client.get(self.ENDPOINT) + + self.assertEqual(response.status_code, status.HTTP_200_OK) + self.assertEqual(response.data["count"], 3) + self.assertEqual(response.data["results"][0]["name"], rule1.name) + self.assertEqual(response.data["results"][1]["name"], rule2.name) + self.assertEqual(response.data["results"][2]["name"], rule4.name) diff --git a/src/paperless_mail/views.py b/src/paperless_mail/views.py index 15346b920..e4a973c78 100644 --- a/src/paperless_mail/views.py +++ b/src/paperless_mail/views.py @@ -7,6 +7,8 @@ from rest_framework.permissions import IsAuthenticated from rest_framework.response import Response from rest_framework.viewsets import ModelViewSet +from documents.filters import ObjectOwnedOrGrantedPermissionsFilter +from documents.permissions import PaperlessObjectPermissions from documents.views import PassUserMixin from paperless.views import StandardPagination from paperless_mail.mail import MailError @@ -24,7 +26,8 @@ class MailAccountViewSet(ModelViewSet, PassUserMixin): queryset = MailAccount.objects.all().order_by("pk") serializer_class = MailAccountSerializer pagination_class = StandardPagination - permission_classes = (IsAuthenticated,) + permission_classes = (IsAuthenticated, PaperlessObjectPermissions) + filter_backends = (ObjectOwnedOrGrantedPermissionsFilter,) class MailRuleViewSet(ModelViewSet, PassUserMixin): @@ -33,7 +36,8 @@ class MailRuleViewSet(ModelViewSet, PassUserMixin): queryset = MailRule.objects.all().order_by("order") serializer_class = MailRuleSerializer pagination_class = StandardPagination - permission_classes = (IsAuthenticated,) + permission_classes = (IsAuthenticated, PaperlessObjectPermissions) + filter_backends = (ObjectOwnedOrGrantedPermissionsFilter,) class MailAccountTestView(GenericAPIView): diff --git a/src/paperless_tesseract/tests/test_parser.py b/src/paperless_tesseract/tests/test_parser.py index 7850ad4ef..8b3de5615 100644 --- a/src/paperless_tesseract/tests/test_parser.py +++ b/src/paperless_tesseract/tests/test_parser.py @@ -861,8 +861,9 @@ class TestParserFileTypes(DirectoriesMixin, FileSystemAssertsMixin, TestCase): parser = RasterisedDocumentParser(None) parser.parse(os.path.join(self.SAMPLE_FILES, "document.webp"), "image/webp") self.assertIsFile(parser.archive_path) - # OCR consistent mangles this space, oh well - self.assertIn( - "this is awebp document, created 11/14/2022.", + # Older tesseracts consistently mangle the space between "a webp", + # tesseract 5.3.0 seems to do a better job, so we're accepting both + self.assertRegex( parser.get_text().lower(), + r"this is a ?webp document, created 11/14/2022.", )