Merge branch 'master' into dev
| @@ -18,6 +18,9 @@ max_line_length = off | ||||
| indent_size = 4 | ||||
| indent_style = space | ||||
|  | ||||
| [*.yml] | ||||
| indent_style = space | ||||
|  | ||||
| # Tests don't get a line width restriction.  It's still a good idea to follow | ||||
| # the 79 character rule, but in the interests of clarity, tests often need to | ||||
| # violate it. | ||||
|   | ||||
							
								
								
									
										15
									
								
								.travis.yml
									
									
									
									
									
								
							
							
						
						| @@ -2,19 +2,22 @@ language: python | ||||
|  | ||||
| before_install: | ||||
| - sudo apt-get update -qq | ||||
| - sudo apt-get install -qq libpoppler-cpp-dev unpaper tesseract-ocr tesseract-ocr-eng tesseract-ocr-cat tesseract-ocr-deu | ||||
| - sudo apt-get install -qq libpoppler-cpp-dev unpaper tesseract-ocr | ||||
|  | ||||
| sudo: false | ||||
|  | ||||
| matrix: | ||||
|     include: | ||||
|         - python: 3.4 | ||||
|         - python: 3.5 | ||||
|         - python: 3.6 | ||||
|         - python: "3.4" | ||||
|         - python: "3.5" | ||||
|         - python: "3.6" | ||||
|         - python: "3.7-dev" | ||||
|  | ||||
| install: | ||||
|     - pip install --requirement requirements.txt | ||||
|     - pip install sphinx | ||||
|     - pip install --upgrade pip pipenv sphinx | ||||
|     - pipenv lock -r > requirements.txt | ||||
|     - pip install -r requirements.txt | ||||
|  | ||||
| script: | ||||
|     - cd src/ | ||||
|     - pytest --cov | ||||
|   | ||||
| @@ -4,8 +4,8 @@ LABEL maintainer="The Paperless Project https://github.com/danielquinn/paperless | ||||
|       contributors="Guy Addadi <addadi@gmail.com>, Pit Kleyersburg <pitkley@googlemail.com>, \ | ||||
|         Sven Fischer <git-dev@linux4tw.de>" | ||||
|  | ||||
| # Copy requirements file and init script | ||||
| COPY requirements.txt /usr/src/paperless/ | ||||
| # Copy Pipfiles file and init script | ||||
| COPY Pipfile* /usr/src/paperless/ | ||||
| COPY scripts/docker-entrypoint.sh /sbin/docker-entrypoint.sh | ||||
|  | ||||
| # Set export and consumption directories | ||||
| @@ -21,7 +21,8 @@ RUN apk update --no-cache && apk add python3 gnupg libmagic libpq bash shadow cu | ||||
|     python3 -m ensurepip && \ | ||||
|     rm -r /usr/lib/python*/ensurepip && \ | ||||
|     cd /usr/src/paperless && \ | ||||
|     pip3 install --no-cache-dir -r requirements.txt && \ | ||||
|     pip3 install --upgrade pip pipenv && \ | ||||
|     pipenv install --system --deploy && \ | ||||
| # Remove build dependencies | ||||
|     apk del .build-dependencies && \ | ||||
| # Create the consumption directory | ||||
|   | ||||
							
								
								
									
										390
									
								
								Pipfile.lock
									
									
									
										generated
									
									
									
								
							
							
						
						| @@ -1,7 +1,7 @@ | ||||
| { | ||||
|     "_meta": { | ||||
|         "hash": { | ||||
|             "sha256": "3782f7e6b5461c39c8fd0d0048a4622418f247439113bd3cdc91712fd47036f6" | ||||
|             "sha256": "c2ba0313687a4018c574bbf2edace72777e3db768458e2fe3a346c6825c64c2c" | ||||
|         }, | ||||
|         "pipfile-spec": 6, | ||||
|         "requires": {}, | ||||
| @@ -49,19 +49,12 @@ | ||||
|             ], | ||||
|             "version": "==2.6.0" | ||||
|         }, | ||||
|         "backcall": { | ||||
|             "hashes": [ | ||||
|                 "sha256:38ecd85be2c1e78f77fd91700c76e14667dc21e2713b63876c0eb901196e01e4", | ||||
|                 "sha256:bbbf4b1e5cd2bdb08f915895b51081c041bac22394fdfcfdfbe9f14b77c08bf2" | ||||
|             ], | ||||
|             "version": "==0.1.0" | ||||
|         }, | ||||
|         "certifi": { | ||||
|             "hashes": [ | ||||
|                 "sha256:339dc09518b07e2fa7eda5450740925974815557727d6bd35d319c1524a04a4c", | ||||
|                 "sha256:6d58c986d22b038c8c0df30d639f23a3e6d172a05c3583e766f4c0b785c0986a" | ||||
|                 "sha256:47f9c83ef4c0c621eaef743f133f09fa8a74a9b75f037e8624f83bd1b6626cb7", | ||||
|                 "sha256:993f830721089fef441cdfeb4b2c8c9df86f0c63239f06bd025a76a7daddb033" | ||||
|             ], | ||||
|             "version": "==2018.10.15" | ||||
|             "version": "==2018.11.29" | ||||
|         }, | ||||
|         "chardet": { | ||||
|             "hashes": [ | ||||
| @@ -72,41 +65,39 @@ | ||||
|         }, | ||||
|         "coverage": { | ||||
|             "hashes": [ | ||||
|                 "sha256:03481e81d558d30d230bc12999e3edffe392d244349a90f4ef9b88425fac74ba", | ||||
|                 "sha256:0b136648de27201056c1869a6c0d4e23f464750fd9a9ba9750b8336a244429ed", | ||||
|                 "sha256:0bf8cbbd71adfff0ef1f3a1531e6402d13b7b01ac50a79c97ca15f030dba6306", | ||||
|                 "sha256:10a46017fef60e16694a30627319f38a2b9b52e90182dddb6e37dcdab0f4bf95", | ||||
|                 "sha256:198626739a79b09fa0a2f06e083ffd12eb55449b5f8bfdbeed1df4910b2ca640", | ||||
|                 "sha256:23d341cdd4a0371820eb2b0bd6b88f5003a7438bbedb33688cd33b8eae59affd", | ||||
|                 "sha256:28b2191e7283f4f3568962e373b47ef7f0392993bb6660d079c62bd50fe9d162", | ||||
|                 "sha256:2a5b73210bad5279ddb558d9a2bfedc7f4bf6ad7f3c988641d83c40293deaec1", | ||||
|                 "sha256:2eb564bbf7816a9d68dd3369a510be3327f1c618d2357fa6b1216994c2e3d508", | ||||
|                 "sha256:337ded681dd2ef9ca04ef5d93cfc87e52e09db2594c296b4a0a3662cb1b41249", | ||||
|                 "sha256:3a2184c6d797a125dca8367878d3b9a178b6fdd05fdc2d35d758c3006a1cd694", | ||||
|                 "sha256:3c79a6f7b95751cdebcd9037e4d06f8d5a9b60e4ed0cd231342aa8ad7124882a", | ||||
|                 "sha256:3d72c20bd105022d29b14a7d628462ebdc61de2f303322c0212a054352f3b287", | ||||
|                 "sha256:3eb42bf89a6be7deb64116dd1cc4b08171734d721e7a7e57ad64cc4ef29ed2f1", | ||||
|                 "sha256:4635a184d0bbe537aa185a34193898eee409332a8ccb27eea36f262566585000", | ||||
|                 "sha256:56e448f051a201c5ebbaa86a5efd0ca90d327204d8b059ab25ad0f35fbfd79f1", | ||||
|                 "sha256:5a13ea7911ff5e1796b6d5e4fbbf6952381a611209b736d48e675c2756f3f74e", | ||||
|                 "sha256:69bf008a06b76619d3c3f3b1983f5145c75a305a0fea513aca094cae5c40a8f5", | ||||
|                 "sha256:6bc583dc18d5979dc0f6cec26a8603129de0304d5ae1f17e57a12834e7235062", | ||||
|                 "sha256:701cd6093d63e6b8ad7009d8a92425428bc4d6e7ab8d75efbb665c806c1d79ba", | ||||
|                 "sha256:7608a3dd5d73cb06c531b8925e0ef8d3de31fed2544a7de6c63960a1e73ea4bc", | ||||
|                 "sha256:76ecd006d1d8f739430ec50cc872889af1f9c1b6b8f48e29941814b09b0fd3cc", | ||||
|                 "sha256:7aa36d2b844a3e4a4b356708d79fd2c260281a7390d678a10b91ca595ddc9e99", | ||||
|                 "sha256:7d3f553904b0c5c016d1dad058a7554c7ac4c91a789fca496e7d8347ad040653", | ||||
|                 "sha256:7e1fe19bd6dce69d9fd159d8e4a80a8f52101380d5d3a4d374b6d3eae0e5de9c", | ||||
|                 "sha256:8c3cb8c35ec4d9506979b4cf90ee9918bc2e49f84189d9bf5c36c0c1119c6558", | ||||
|                 "sha256:9d6dd10d49e01571bf6e147d3b505141ffc093a06756c60b053a859cb2128b1f", | ||||
|                 "sha256:be6cfcd8053d13f5f5eeb284aa8a814220c3da1b0078fa859011c7fffd86dab9", | ||||
|                 "sha256:c1bb572fab8208c400adaf06a8133ac0712179a334c09224fb11393e920abcdd", | ||||
|                 "sha256:de4418dadaa1c01d497e539210cb6baa015965526ff5afc078c57ca69160108d", | ||||
|                 "sha256:e05cb4d9aad6233d67e0541caa7e511fa4047ed7750ec2510d466e806e0255d6", | ||||
|                 "sha256:f05a636b4564104120111800021a92e43397bc12a5c72fed7036be8556e0029e", | ||||
|                 "sha256:f3f501f345f24383c0000395b26b726e46758b71393267aeae0bd36f8b3ade80" | ||||
|                 "sha256:09e47c529ff77bf042ecfe858fb55c3e3eb97aac2c87f0349ab5a7efd6b3939f", | ||||
|                 "sha256:0a1f9b0eb3aa15c990c328535655847b3420231af299386cfe5efc98f9c250fe", | ||||
|                 "sha256:0cc941b37b8c2ececfed341444a456912e740ecf515d560de58b9a76562d966d", | ||||
|                 "sha256:10e8af18d1315de936d67775d3a814cc81d0747a1a0312d84e27ae5610e313b0", | ||||
|                 "sha256:1b4276550b86caa60606bd3572b52769860a81a70754a54acc8ba789ce74d607", | ||||
|                 "sha256:1e8a2627c48266c7b813975335cfdea58c706fe36f607c97d9392e61502dc79d", | ||||
|                 "sha256:2b224052bfd801beb7478b03e8a66f3f25ea56ea488922e98903914ac9ac930b", | ||||
|                 "sha256:447c450a093766744ab53bf1e7063ec82866f27bcb4f4c907da25ad293bba7e3", | ||||
|                 "sha256:46101fc20c6f6568561cdd15a54018bb42980954b79aa46da8ae6f008066a30e", | ||||
|                 "sha256:4710dc676bb4b779c4361b54eb308bc84d64a2fa3d78e5f7228921eccce5d815", | ||||
|                 "sha256:510986f9a280cd05189b42eee2b69fecdf5bf9651d4cd315ea21d24a964a3c36", | ||||
|                 "sha256:5535dda5739257effef56e49a1c51c71f1d37a6e5607bb25a5eee507c59580d1", | ||||
|                 "sha256:5a7524042014642b39b1fcae85fb37556c200e64ec90824ae9ecf7b667ccfc14", | ||||
|                 "sha256:5f55028169ef85e1fa8e4b8b1b91c0b3b0fa3297c4fb22990d46ff01d22c2d6c", | ||||
|                 "sha256:6694d5573e7790a0e8d3d177d7a416ca5f5c150742ee703f3c18df76260de794", | ||||
|                 "sha256:6831e1ac20ac52634da606b658b0b2712d26984999c9d93f0c6e59fe62ca741b", | ||||
|                 "sha256:77f0d9fa5e10d03aa4528436e33423bfa3718b86c646615f04616294c935f840", | ||||
|                 "sha256:828ad813c7cdc2e71dcf141912c685bfe4b548c0e6d9540db6418b807c345ddd", | ||||
|                 "sha256:85a06c61598b14b015d4df233d249cd5abfa61084ef5b9f64a48e997fd829a82", | ||||
|                 "sha256:8cb4febad0f0b26c6f62e1628f2053954ad2c555d67660f28dfb1b0496711952", | ||||
|                 "sha256:a5c58664b23b248b16b96253880b2868fb34358911400a7ba39d7f6399935389", | ||||
|                 "sha256:aaa0f296e503cda4bc07566f592cd7a28779d433f3a23c48082af425d6d5a78f", | ||||
|                 "sha256:ab235d9fe64833f12d1334d29b558aacedfbca2356dfb9691f2d0d38a8a7bfb4", | ||||
|                 "sha256:b3b0c8f660fae65eac74fbf003f3103769b90012ae7a460863010539bb7a80da", | ||||
|                 "sha256:bab8e6d510d2ea0f1d14f12642e3f35cefa47a9b2e4c7cea1852b52bc9c49647", | ||||
|                 "sha256:c45297bbdbc8bb79b02cf41417d63352b70bcb76f1bbb1ee7d47b3e89e42f95d", | ||||
|                 "sha256:d19bca47c8a01b92640c614a9147b081a1974f69168ecd494687c827109e8f42", | ||||
|                 "sha256:d64b4340a0c488a9e79b66ec9f9d77d02b99b772c8b8afd46c1294c1d39ca478", | ||||
|                 "sha256:da969da069a82bbb5300b59161d8d7c8d423bc4ccd3b410a9b4d8932aeefc14b", | ||||
|                 "sha256:ed02c7539705696ecb7dc9d476d861f3904a8d2b7e894bd418994920935d36bb", | ||||
|                 "sha256:ee5b8abc35b549012e03a7b1e86c09491457dba6c94112a2482b18589cc2bdb9" | ||||
|             ], | ||||
|             "version": "==4.5.1" | ||||
|             "version": "==4.5.2" | ||||
|         }, | ||||
|         "coveralls": { | ||||
|             "hashes": [ | ||||
| @@ -124,13 +115,6 @@ | ||||
|             "index": "pypi", | ||||
|             "version": "==0.7.0" | ||||
|         }, | ||||
|         "decorator": { | ||||
|             "hashes": [ | ||||
|                 "sha256:2c51dff8ef3c447388fe5e4453d24a2bf128d3a4c32af3fabef1f01c6851ab82", | ||||
|                 "sha256:c39efa13fbdeb4506c476c9b3babf6a718da943dab7811c206005a4a956c080c" | ||||
|             ], | ||||
|             "version": "==4.3.0" | ||||
|         }, | ||||
|         "django": { | ||||
|             "hashes": [ | ||||
|                 "sha256:25df265e1fdb74f7e7305a1de620a84681bcc9c05e84a3ed97e4a1a63024f18d", | ||||
| @@ -157,11 +141,11 @@ | ||||
|         }, | ||||
|         "django-extensions": { | ||||
|             "hashes": [ | ||||
|                 "sha256:30cb6a8c7d6f75a55edf0c0c4491bd98f8264ae1616ce105f9cecac4387edd07", | ||||
|                 "sha256:4ad86a7a5e84f1c77db030761ae87a600647250c652030a2b71a16e87f3a3d62" | ||||
|                 "sha256:8317a3fe479b1ba3e3a04ecf33fb8d6ccf09bb18f30eab64e34c40a593741d26", | ||||
|                 "sha256:a76a61566f1c8d96acc7bcf765080b8e91367a25a2c6f8c5bddd574493839180" | ||||
|             ], | ||||
|             "index": "pypi", | ||||
|             "version": "==2.1.3" | ||||
|             "version": "==2.1.4" | ||||
|         }, | ||||
|         "django-filter": { | ||||
|             "hashes": [ | ||||
| @@ -210,10 +194,10 @@ | ||||
|         }, | ||||
|         "faker": { | ||||
|             "hashes": [ | ||||
|                 "sha256:2621643b80a10b91999925cfd20f64d2b36f20bf22136bbdc749bb57d6ffe124", | ||||
|                 "sha256:5ed822d31bd2d6edf10944d176d30dc9c886afdd381eefb7ba8b7aad86171646" | ||||
|                 "sha256:228419b0a788a7ac867ebfafdd438461559ab1a0975edb607300852d9acaa78d", | ||||
|                 "sha256:52a3dcc6a565b15fe1c95090321756d5a8a7c1caf5ab3df2f573ed70936ff518" | ||||
|             ], | ||||
|             "version": "==0.9.2" | ||||
|             "version": "==1.0.1" | ||||
|         }, | ||||
|         "filelock": { | ||||
|             "hashes": [ | ||||
| @@ -250,10 +234,10 @@ | ||||
|         }, | ||||
|         "idna": { | ||||
|             "hashes": [ | ||||
|                 "sha256:156a6814fb5ac1fc6850fb002e0852d56c0c8d2531923a51032d1b70760e186e", | ||||
|                 "sha256:684a38a6f903c1d71d6d5fac066b58d7768af4de2b832e426ec79c30daa94a16" | ||||
|                 "sha256:c357b3f628cf53ae2c4c05627ecc484553142ca23264e593d327bcde5e9c3407", | ||||
|                 "sha256:ea8b7f6188e6fa117537c3df7da9fc686d485087abf6ac197f9c46432f7e4a3c" | ||||
|             ], | ||||
|             "version": "==2.7" | ||||
|             "version": "==2.8" | ||||
|         }, | ||||
|         "imagesize": { | ||||
|             "hashes": [ | ||||
| @@ -269,28 +253,6 @@ | ||||
|             "index": "pypi", | ||||
|             "version": "==1.1.8" | ||||
|         }, | ||||
|         "ipython": { | ||||
|             "hashes": [ | ||||
|                 "sha256:a5781d6934a3341a1f9acb4ea5acdc7ea0a0855e689dbe755d070ca51e995435", | ||||
|                 "sha256:b10a7ddd03657c761fc503495bc36471c8158e3fc948573fb9fe82a7029d8efd" | ||||
|             ], | ||||
|             "index": "pypi", | ||||
|             "version": "==7.1.1" | ||||
|         }, | ||||
|         "ipython-genutils": { | ||||
|             "hashes": [ | ||||
|                 "sha256:72dd37233799e619666c9f639a9da83c34013a73e8bbc79a7a6348d93c61fab8", | ||||
|                 "sha256:eb2e116e75ecef9d4d228fdc66af54269afa26ab4463042e33785b887c628ba8" | ||||
|             ], | ||||
|             "version": "==0.2.0" | ||||
|         }, | ||||
|         "jedi": { | ||||
|             "hashes": [ | ||||
|                 "sha256:0191c447165f798e6a730285f2eee783fff81b0d3df261945ecb80983b5c3ca7", | ||||
|                 "sha256:b7493f73a2febe0dc33d51c99b474547f7f6c0b2c8fb2b21f453eef204c12148" | ||||
|             ], | ||||
|             "version": "==0.13.1" | ||||
|         }, | ||||
|         "jinja2": { | ||||
|             "hashes": [ | ||||
|                 "sha256:74c935a1b8bb9a3947c50a54766a969d4846290e1e788ea44c1392163723c3bd", | ||||
| @@ -307,17 +269,44 @@ | ||||
|         }, | ||||
|         "markupsafe": { | ||||
|             "hashes": [ | ||||
|                 "sha256:a6be69091dac236ea9c6bc7d012beab42010fa914c459791d627dad4910eb665" | ||||
|                 "sha256:048ef924c1623740e70204aa7143ec592504045ae4429b59c30054cb31e3c432", | ||||
|                 "sha256:130f844e7f5bdd8e9f3f42e7102ef1d49b2e6fdf0d7526df3f87281a532d8c8b", | ||||
|                 "sha256:19f637c2ac5ae9da8bfd98cef74d64b7e1bb8a63038a3505cd182c3fac5eb4d9", | ||||
|                 "sha256:1b8a7a87ad1b92bd887568ce54b23565f3fd7018c4180136e1cf412b405a47af", | ||||
|                 "sha256:1c25694ca680b6919de53a4bb3bdd0602beafc63ff001fea2f2fc16ec3a11834", | ||||
|                 "sha256:1f19ef5d3908110e1e891deefb5586aae1b49a7440db952454b4e281b41620cd", | ||||
|                 "sha256:1fa6058938190ebe8290e5cae6c351e14e7bb44505c4a7624555ce57fbbeba0d", | ||||
|                 "sha256:31cbb1359e8c25f9f48e156e59e2eaad51cd5242c05ed18a8de6dbe85184e4b7", | ||||
|                 "sha256:3e835d8841ae7863f64e40e19477f7eb398674da6a47f09871673742531e6f4b", | ||||
|                 "sha256:4e97332c9ce444b0c2c38dd22ddc61c743eb208d916e4265a2a3b575bdccb1d3", | ||||
|                 "sha256:525396ee324ee2da82919f2ee9c9e73b012f23e7640131dd1b53a90206a0f09c", | ||||
|                 "sha256:52b07fbc32032c21ad4ab060fec137b76eb804c4b9a1c7c7dc562549306afad2", | ||||
|                 "sha256:52ccb45e77a1085ec5461cde794e1aa037df79f473cbc69b974e73940655c8d7", | ||||
|                 "sha256:5c3fbebd7de20ce93103cb3183b47671f2885307df4a17a0ad56a1dd51273d36", | ||||
|                 "sha256:5e5851969aea17660e55f6a3be00037a25b96a9b44d2083651812c99d53b14d1", | ||||
|                 "sha256:5edfa27b2d3eefa2210fb2f5d539fbed81722b49f083b2c6566455eb7422fd7e", | ||||
|                 "sha256:7d263e5770efddf465a9e31b78362d84d015cc894ca2c131901a4445eaa61ee1", | ||||
|                 "sha256:83381342bfc22b3c8c06f2dd93a505413888694302de25add756254beee8449c", | ||||
|                 "sha256:857eebb2c1dc60e4219ec8e98dfa19553dae33608237e107db9c6078b1167856", | ||||
|                 "sha256:98e439297f78fca3a6169fd330fbe88d78b3bb72f967ad9961bcac0d7fdd1550", | ||||
|                 "sha256:bf54103892a83c64db58125b3f2a43df6d2cb2d28889f14c78519394feb41492", | ||||
|                 "sha256:d9ac82be533394d341b41d78aca7ed0e0f4ba5a2231602e2f05aa87f25c51672", | ||||
|                 "sha256:e982fe07ede9fada6ff6705af70514a52beb1b2c3d25d4e873e82114cf3c5401", | ||||
|                 "sha256:edce2ea7f3dfc981c4ddc97add8a61381d9642dc3273737e756517cc03e84dd6", | ||||
|                 "sha256:efdc45ef1afc238db84cb4963aa689c0408912a0239b0721cb172b4016eb31d6", | ||||
|                 "sha256:f137c02498f8b935892d5c0172560d7ab54bc45039de8805075e19079c639a9c", | ||||
|                 "sha256:f82e347a72f955b7017a39708a3667f106e6ad4d10b25f237396a7115d8ed5fd", | ||||
|                 "sha256:fb7c206e01ad85ce57feeaaa0bf784b97fa3cad0d4a5737bc5295785f5c613a1" | ||||
|             ], | ||||
|             "version": "==1.0" | ||||
|             "version": "==1.1.0" | ||||
|         }, | ||||
|         "more-itertools": { | ||||
|             "hashes": [ | ||||
|                 "sha256:c187a73da93e7a8acc0001572aebc7e3c69daf7bf6881a2cea10650bd4420092", | ||||
|                 "sha256:c476b5d3a34e12d40130bc2f935028b5f636df8f372dc2c1c01dc19681b2039e", | ||||
|                 "sha256:fcbfeaea0be121980e15bc97b3817b5202ca73d0eae185b4550cbfce2a3ebb3d" | ||||
|                 "sha256:38a936c0a6d98a38bcc2d03fdaaedaba9f412879461dd2ceff8d37564d6522e4", | ||||
|                 "sha256:c0a5785b1109a6bd7fac76d6837fd1feca158e54e521ccd2ae8bfe393cc9d4fc", | ||||
|                 "sha256:fe7a7cae1ccb57d33952113ff4fa1bc5f879963600ed74918f1236e212ee50b9" | ||||
|             ], | ||||
|             "version": "==4.3.0" | ||||
|             "version": "==5.0.0" | ||||
|         }, | ||||
|         "packaging": { | ||||
|             "hashes": [ | ||||
| @@ -326,13 +315,6 @@ | ||||
|             ], | ||||
|             "version": "==18.0" | ||||
|         }, | ||||
|         "parso": { | ||||
|             "hashes": [ | ||||
|                 "sha256:35704a43a3c113cce4de228ddb39aab374b8004f4f2407d070b6a2ca784ce8a2", | ||||
|                 "sha256:895c63e93b94ac1e1690f5fdd40b65f07c8171e3e53cbd7793b5b96c0e0a7f24" | ||||
|             ], | ||||
|             "version": "==0.3.1" | ||||
|         }, | ||||
|         "pdftotext": { | ||||
|             "hashes": [ | ||||
|                 "sha256:e3ad11efe0aa22cbfc46aa1296b2ea5a52ad208b778288311f2801adef178ccb" | ||||
| @@ -340,21 +322,6 @@ | ||||
|             "index": "pypi", | ||||
|             "version": "==2.1.1" | ||||
|         }, | ||||
|         "pexpect": { | ||||
|             "hashes": [ | ||||
|                 "sha256:2a8e88259839571d1251d278476f3eec5db26deb73a70be5ed5dc5435e418aba", | ||||
|                 "sha256:3fbd41d4caf27fa4a377bfd16fef87271099463e6fa73e92a52f92dfee5d425b" | ||||
|             ], | ||||
|             "markers": "sys_platform != 'win32'", | ||||
|             "version": "==4.6.0" | ||||
|         }, | ||||
|         "pickleshare": { | ||||
|             "hashes": [ | ||||
|                 "sha256:87683d47965c1da65cdacaf31c8441d12b8044cdec9aca500cd78fc2c683afca", | ||||
|                 "sha256:9649af414d74d4df115d5d718f82acb59c9d418196b7b4290ed47a12ce62df56" | ||||
|             ], | ||||
|             "version": "==0.7.5" | ||||
|         }, | ||||
|         "pillow": { | ||||
|             "hashes": [ | ||||
|                 "sha256:00203f406818c3f45d47bb8fe7e67d3feddb8dcbbd45a289a1de7dd789226360", | ||||
| @@ -398,21 +365,6 @@ | ||||
|             ], | ||||
|             "version": "==0.8.0" | ||||
|         }, | ||||
|         "prompt-toolkit": { | ||||
|             "hashes": [ | ||||
|                 "sha256:c1d6aff5252ab2ef391c2fe498ed8c088066f66bc64a8d5c095bbf795d9fec34", | ||||
|                 "sha256:d4c47f79b635a0e70b84fdb97ebd9a274203706b1ee5ed44c10da62755cf3ec9", | ||||
|                 "sha256:fd17048d8335c1e6d5ee403c3569953ba3eb8555d710bfc548faf0712666ea39" | ||||
|             ], | ||||
|             "version": "==2.0.7" | ||||
|         }, | ||||
|         "ptyprocess": { | ||||
|             "hashes": [ | ||||
|                 "sha256:923f299cc5ad920c68f2bc0bc98b75b9f838b93b599941a6b63ddbc2476394c0", | ||||
|                 "sha256:d7cc528d76e76342423ca640335bd3633420dc1366f258cb31d05e865ef5ca1f" | ||||
|             ], | ||||
|             "version": "==0.6.0" | ||||
|         }, | ||||
|         "py": { | ||||
|             "hashes": [ | ||||
|                 "sha256:bf92637198836372b520efcba9e020c330123be8ce527e535d185ed4b6f45694", | ||||
| @@ -430,10 +382,10 @@ | ||||
|         }, | ||||
|         "pygments": { | ||||
|             "hashes": [ | ||||
|                 "sha256:78f3f434bcc5d6ee09020f92ba487f95ba50f1e3ef83ae96b9d5ffa1bab25c5d", | ||||
|                 "sha256:dbae1046def0efb574852fab9e90209b23f556367b5a320c0bcb871c77c3e8cc" | ||||
|                 "sha256:5ffada19f6203563680669ee7f53b64dabbeb100eb51b61996085e99c03b284a", | ||||
|                 "sha256:e8218dd399a61674745138520d0d4cf2621d7e032439341bc3f647bff125818d" | ||||
|             ], | ||||
|             "version": "==2.2.0" | ||||
|             "version": "==2.3.1" | ||||
|         }, | ||||
|         "pyocr": { | ||||
|             "hashes": [ | ||||
| @@ -451,11 +403,11 @@ | ||||
|         }, | ||||
|         "pytest": { | ||||
|             "hashes": [ | ||||
|                 "sha256:a9e5e8d7ab9d5b0747f37740276eb362e6a76275d76cebbb52c6049d93b475db", | ||||
|                 "sha256:bf47e8ed20d03764f963f0070ff1c8fda6e2671fc5dd562a4d3b7148ad60f5ca" | ||||
|                 "sha256:f689bf2fc18c4585403348dd56f47d87780bf217c53ed9ae7a3e2d7faa45f8e9", | ||||
|                 "sha256:f812ea39a0153566be53d88f8de94839db1e8a05352ed8a49525d7d7f37861e9" | ||||
|             ], | ||||
|             "index": "pypi", | ||||
|             "version": "==3.9.3" | ||||
|             "version": "==4.0.2" | ||||
|         }, | ||||
|         "pytest-cov": { | ||||
|             "hashes": [ | ||||
| @@ -467,11 +419,11 @@ | ||||
|         }, | ||||
|         "pytest-django": { | ||||
|             "hashes": [ | ||||
|                 "sha256:49e9ffc856bc6a1bec1c26c5c7b7213dff7cc8bc6b64d624c4d143d04aff0bcf", | ||||
|                 "sha256:b379282feaf89069cb790775ab6bbbd2bd2038a68c7ef9b84a41898e0b551081" | ||||
|                 "sha256:deffd9d65827c582bd0a85638a0fe52f0eb65a764872ddcee9ce51cdf6ae9f55", | ||||
|                 "sha256:fe1f71a0171f6b7edac37654da0904c9bd5ffba5221ab5a76779ab870611f41f" | ||||
|             ], | ||||
|             "index": "pypi", | ||||
|             "version": "==3.4.3" | ||||
|             "version": "==3.4.4" | ||||
|         }, | ||||
|         "pytest-env": { | ||||
|             "hashes": [ | ||||
| @@ -489,18 +441,19 @@ | ||||
|         }, | ||||
|         "pytest-sugar": { | ||||
|             "hashes": [ | ||||
|                 "sha256:ab8cc42faf121344a4e9b13f39a51257f26f410e416c52ea11078cdd00d98a2c" | ||||
|                 "sha256:26cf8289fe10880cbbc130bd77398c4e6a8b936d8393b116a5c16121d95ab283", | ||||
|                 "sha256:fcd87a74b2bce5386d244b49ad60549bfbc4602527797fac167da147983f58ab" | ||||
|             ], | ||||
|             "index": "pypi", | ||||
|             "version": "==0.9.1" | ||||
|             "version": "==0.9.2" | ||||
|         }, | ||||
|         "pytest-xdist": { | ||||
|             "hashes": [ | ||||
|                 "sha256:3bc9dcb6ff47e607d3c710727cd9996fd7ac1466d405c3b40bb495da99b6b669", | ||||
|                 "sha256:8e188d13ce6614c7a678179a76f46231199ffdfe6163de031c17e62ffa256917" | ||||
|                 "sha256:96f893094c89fddeaff3f4783f4807f7aeb138be1a0d87a8805057b6af1201b5", | ||||
|                 "sha256:aab1402f2b063df48bf044b042707610f8fcc4c49d0eb9c10e79e30b3f26074f" | ||||
|             ], | ||||
|             "index": "pypi", | ||||
|             "version": "==1.24.0" | ||||
|             "version": "==1.25.0" | ||||
|         }, | ||||
|         "python-dateutil": { | ||||
|             "hashes": [ | ||||
| @@ -512,11 +465,11 @@ | ||||
|         }, | ||||
|         "python-dotenv": { | ||||
|             "hashes": [ | ||||
|                 "sha256:122290a38ece9fe4f162dc7c95cae3357b983505830a154d3c98ef7f6c6cea77", | ||||
|                 "sha256:4a205787bc829233de2a823aa328e44fd9996fedb954989a21f1fc67c13d7a77" | ||||
|                 "sha256:a84569d0e00d178bc5b957f7ff208bf49287cbf61857c31c258c4a91f571527b", | ||||
|                 "sha256:c9b1ddd3cdbe75c7d462cb84674d87130f4b948f090f02c7d7144779afb99ae0" | ||||
|             ], | ||||
|             "index": "pypi", | ||||
|             "version": "==0.9.1" | ||||
|             "version": "==0.10.1" | ||||
|         }, | ||||
|         "python-gnupg": { | ||||
|             "hashes": [ | ||||
| @@ -530,7 +483,6 @@ | ||||
|             "hashes": [ | ||||
|                 "sha256:033a11de5e3d19ea25c9302d11224e1a1898fe5abd23c61c7c360c25195e3eb1" | ||||
|             ], | ||||
|             "markers": "extra == 'speedup'", | ||||
|             "version": "==0.12.0" | ||||
|         }, | ||||
|         "pytz": { | ||||
| @@ -543,31 +495,31 @@ | ||||
|         }, | ||||
|         "regex": { | ||||
|             "hashes": [ | ||||
|                 "sha256:0ef96690c3d2294155b7d44187ca4a151e45c931cb768e106ba464a9fa64c5da", | ||||
|                 "sha256:251683e01a3bcacd9188acf0d4caf7b29a3b963c843159311825613ae144cddb", | ||||
|                 "sha256:3fe15a75fe00f04d1ec16713d55cf1e206077c450267a10b33318756fb8b3f99", | ||||
|                 "sha256:53a962f9dc28cdf403978a142cb1e054479759ad64d312a999f9f042c25b5c9a", | ||||
|                 "sha256:8bd1da6a93d32336a5e5432886dd8543004f0591c39b83dbfa60705cccdf414d", | ||||
|                 "sha256:b5423061918f602e9342b54d746ac31c598d328ecaf4ef0618763e960c926fd4", | ||||
|                 "sha256:d80ebc65b1f7d0403117f59309c16eac24be6a0bc730b593a79f703462858d94", | ||||
|                 "sha256:fd8419979639b7de7fb964a13bce3ac47e6fe33043b83de0398c3067986e5659", | ||||
|                 "sha256:ff2f15b2b0b4b58ba8a1de651780a0d3fd54f96ad6b77dceb77695220e5d7b7a" | ||||
|                 "sha256:15b4a185ae9782133f398f8ab7c29612a6e5f34ea9411e4cd36e91e78c347ebe", | ||||
|                 "sha256:3852b76f0b6d7bd98d328d548716c151b79017f2b81347360f26e5db10fb6503", | ||||
|                 "sha256:79a6a60ed1ee3b12eb0e828c01d75e3b743af6616d69add6c2fde1d425a4ba3f", | ||||
|                 "sha256:a2938c290b3be2c7cadafa21de3051f2ed23bfaf88728a1fe5dc552cbfdb0326", | ||||
|                 "sha256:aff7414712c9e6d260609da9c9af3aacebfbc307a4abe3376c7736e2a6c8563f", | ||||
|                 "sha256:d03782f0b0fa34f8f1dbdc94e27cf193b83c6105307a8c10563938c6d85180d9", | ||||
|                 "sha256:db79ac3d81e655dc12d38a865dd6d1b569a28fab4c53749051cd599a6eb7614f", | ||||
|                 "sha256:e803b3646c3f9c47f1f3dc870173c5d79c0fd2fd8e40bf917b97c7b56701baff", | ||||
|                 "sha256:e9660ccca360b6bd79606aab3672562ebb14bce6af6c501107364668543f4bef" | ||||
|             ], | ||||
|             "version": "==2018.11.2" | ||||
|             "version": "==2018.11.22" | ||||
|         }, | ||||
|         "requests": { | ||||
|             "hashes": [ | ||||
|                 "sha256:99dcfdaaeb17caf6e526f32b6a7b780461512ab3f1d992187801694cba42770c", | ||||
|                 "sha256:a84b8c9ab6239b578f22d1c21d51b696dcfe004032bb80ea832398d6909d7279" | ||||
|                 "sha256:502a824f31acdacb3a35b6690b5fbf0bc41d63a24a45c4004352b0242707598e", | ||||
|                 "sha256:7bf2a778576d825600030a110f3c0e3e8edc51dfaafe1c146e39a2027784957b" | ||||
|             ], | ||||
|             "version": "==2.20.0" | ||||
|             "version": "==2.21.0" | ||||
|         }, | ||||
|         "six": { | ||||
|             "hashes": [ | ||||
|                 "sha256:70e8a77beed4562e7f14fe23a786b54f6296e34344c23bc42f07b15018ff98e9", | ||||
|                 "sha256:832dc0e10feb1aa2c68dcc57dbb658f1c7e65b9b61af69048abc87a2db00a0eb" | ||||
|                 "sha256:3350809f0555b11f552448330d0b52d5f24c91a322ea4a15ef22629740f3761c", | ||||
|                 "sha256:d16a0141ec1a18405cd4ce8b4613101da75da0e9a7aec5bdd4fa804d0e0eba73" | ||||
|             ], | ||||
|             "version": "==1.11.0" | ||||
|             "version": "==1.12.0" | ||||
|         }, | ||||
|         "snowballstemmer": { | ||||
|             "hashes": [ | ||||
| @@ -578,11 +530,11 @@ | ||||
|         }, | ||||
|         "sphinx": { | ||||
|             "hashes": [ | ||||
|                 "sha256:652eb8c566f18823a022bb4b6dbc868d366df332a11a0226b5bc3a798a479f17", | ||||
|                 "sha256:d222626d8356de702431e813a05c68a35967e3d66c6cd1c2c89539bb179a7464" | ||||
|                 "sha256:429e3172466df289f0f742471d7e30ba3ee11f3b5aecd9a840480d03f14bcfe5", | ||||
|                 "sha256:c4cb17ba44acffae3d3209646b6baec1e215cad3065e852c68cc569d4df1b9f8" | ||||
|             ], | ||||
|             "index": "pypi", | ||||
|             "version": "==1.8.1" | ||||
|             "version": "==1.8.3" | ||||
|         }, | ||||
|         "sphinxcontrib-websupport": { | ||||
|             "hashes": [ | ||||
| @@ -613,18 +565,11 @@ | ||||
|         }, | ||||
|         "tox": { | ||||
|             "hashes": [ | ||||
|                 "sha256:513e32fdf2f9e2d583c2f248f47ba9886428c949f068ac54a0469cac55df5862", | ||||
|                 "sha256:75fa30e8329b41b664585f5fb837e23ce1d7e6fa1f7811f2be571c990f9d911b" | ||||
|                 "sha256:2a8d8a63660563e41e64e3b5b677e81ce1ffa5e2a93c2c565d3768c287445800", | ||||
|                 "sha256:edfca7809925f49bdc110d0a2d9966bbf35a0c25637216d9586e7a5c5de17bfb" | ||||
|             ], | ||||
|             "index": "pypi", | ||||
|             "version": "==3.5.3" | ||||
|         }, | ||||
|         "traitlets": { | ||||
|             "hashes": [ | ||||
|                 "sha256:9c4bd2d267b7153df9152698efb1050a5d84982d3384a37b2c1f7723ba3e7835", | ||||
|                 "sha256:c6cb5e6f57c5a9bdaa40fa71ce7b4af30298fbab9ece9815b5d995ab6217c7d9" | ||||
|             ], | ||||
|             "version": "==4.3.2" | ||||
|             "version": "==3.6.1" | ||||
|         }, | ||||
|         "tzlocal": { | ||||
|             "hashes": [ | ||||
| @@ -645,6 +590,102 @@ | ||||
|                 "sha256:f899fafcd92e1150f40c8215328be38ff24b519cd95357fa6e78e006c7638208" | ||||
|             ], | ||||
|             "version": "==16.1.0" | ||||
|         } | ||||
|     }, | ||||
|     "develop": { | ||||
|         "backcall": { | ||||
|             "hashes": [ | ||||
|                 "sha256:38ecd85be2c1e78f77fd91700c76e14667dc21e2713b63876c0eb901196e01e4", | ||||
|                 "sha256:bbbf4b1e5cd2bdb08f915895b51081c041bac22394fdfcfdfbe9f14b77c08bf2" | ||||
|             ], | ||||
|             "version": "==0.1.0" | ||||
|         }, | ||||
|         "decorator": { | ||||
|             "hashes": [ | ||||
|                 "sha256:2c51dff8ef3c447388fe5e4453d24a2bf128d3a4c32af3fabef1f01c6851ab82", | ||||
|                 "sha256:c39efa13fbdeb4506c476c9b3babf6a718da943dab7811c206005a4a956c080c" | ||||
|             ], | ||||
|             "version": "==4.3.0" | ||||
|         }, | ||||
|         "ipython": { | ||||
|             "hashes": [ | ||||
|                 "sha256:6a9496209b76463f1dec126ab928919aaf1f55b38beb9219af3fe202f6bbdd12", | ||||
|                 "sha256:f69932b1e806b38a7818d9a1e918e5821b685715040b48e59c657b3c7961b742" | ||||
|             ], | ||||
|             "index": "pypi", | ||||
|             "version": "==7.2.0" | ||||
|         }, | ||||
|         "ipython-genutils": { | ||||
|             "hashes": [ | ||||
|                 "sha256:72dd37233799e619666c9f639a9da83c34013a73e8bbc79a7a6348d93c61fab8", | ||||
|                 "sha256:eb2e116e75ecef9d4d228fdc66af54269afa26ab4463042e33785b887c628ba8" | ||||
|             ], | ||||
|             "version": "==0.2.0" | ||||
|         }, | ||||
|         "jedi": { | ||||
|             "hashes": [ | ||||
|                 "sha256:571702b5bd167911fe9036e5039ba67f820d6502832285cde8c881ab2b2149fd", | ||||
|                 "sha256:c8481b5e59d34a5c7c42e98f6625e633f6ef59353abea6437472c7ec2093f191" | ||||
|             ], | ||||
|             "version": "==0.13.2" | ||||
|         }, | ||||
|         "parso": { | ||||
|             "hashes": [ | ||||
|                 "sha256:35704a43a3c113cce4de228ddb39aab374b8004f4f2407d070b6a2ca784ce8a2", | ||||
|                 "sha256:895c63e93b94ac1e1690f5fdd40b65f07c8171e3e53cbd7793b5b96c0e0a7f24" | ||||
|             ], | ||||
|             "version": "==0.3.1" | ||||
|         }, | ||||
|         "pexpect": { | ||||
|             "hashes": [ | ||||
|                 "sha256:2a8e88259839571d1251d278476f3eec5db26deb73a70be5ed5dc5435e418aba", | ||||
|                 "sha256:3fbd41d4caf27fa4a377bfd16fef87271099463e6fa73e92a52f92dfee5d425b" | ||||
|             ], | ||||
|             "markers": "sys_platform != 'win32'", | ||||
|             "version": "==4.6.0" | ||||
|         }, | ||||
|         "pickleshare": { | ||||
|             "hashes": [ | ||||
|                 "sha256:87683d47965c1da65cdacaf31c8441d12b8044cdec9aca500cd78fc2c683afca", | ||||
|                 "sha256:9649af414d74d4df115d5d718f82acb59c9d418196b7b4290ed47a12ce62df56" | ||||
|             ], | ||||
|             "version": "==0.7.5" | ||||
|         }, | ||||
|         "prompt-toolkit": { | ||||
|             "hashes": [ | ||||
|                 "sha256:c1d6aff5252ab2ef391c2fe498ed8c088066f66bc64a8d5c095bbf795d9fec34", | ||||
|                 "sha256:d4c47f79b635a0e70b84fdb97ebd9a274203706b1ee5ed44c10da62755cf3ec9", | ||||
|                 "sha256:fd17048d8335c1e6d5ee403c3569953ba3eb8555d710bfc548faf0712666ea39" | ||||
|             ], | ||||
|             "version": "==2.0.7" | ||||
|         }, | ||||
|         "ptyprocess": { | ||||
|             "hashes": [ | ||||
|                 "sha256:923f299cc5ad920c68f2bc0bc98b75b9f838b93b599941a6b63ddbc2476394c0", | ||||
|                 "sha256:d7cc528d76e76342423ca640335bd3633420dc1366f258cb31d05e865ef5ca1f" | ||||
|             ], | ||||
|             "version": "==0.6.0" | ||||
|         }, | ||||
|         "pygments": { | ||||
|             "hashes": [ | ||||
|                 "sha256:5ffada19f6203563680669ee7f53b64dabbeb100eb51b61996085e99c03b284a", | ||||
|                 "sha256:e8218dd399a61674745138520d0d4cf2621d7e032439341bc3f647bff125818d" | ||||
|             ], | ||||
|             "version": "==2.3.1" | ||||
|         }, | ||||
|         "six": { | ||||
|             "hashes": [ | ||||
|                 "sha256:3350809f0555b11f552448330d0b52d5f24c91a322ea4a15ef22629740f3761c", | ||||
|                 "sha256:d16a0141ec1a18405cd4ce8b4613101da75da0e9a7aec5bdd4fa804d0e0eba73" | ||||
|             ], | ||||
|             "version": "==1.12.0" | ||||
|         }, | ||||
|         "traitlets": { | ||||
|             "hashes": [ | ||||
|                 "sha256:9c4bd2d267b7153df9152698efb1050a5d84982d3384a37b2c1f7723ba3e7835", | ||||
|                 "sha256:c6cb5e6f57c5a9bdaa40fa71ce7b4af30298fbab9ece9815b5d995ab6217c7d9" | ||||
|             ], | ||||
|             "version": "==4.3.2" | ||||
|         }, | ||||
|         "wcwidth": { | ||||
|             "hashes": [ | ||||
| @@ -653,6 +694,5 @@ | ||||
|             ], | ||||
|             "version": "==0.1.7" | ||||
|         } | ||||
|     }, | ||||
|     "develop": {} | ||||
|     } | ||||
| } | ||||
|   | ||||
| @@ -1,7 +1,6 @@ | ||||
| *[English](README.md)*<br/> | ||||
| *[Greek](README-el.md)* | ||||
| [ [en](README.md) | de | [el](README-el.md) ] | ||||
|  | ||||
| # Paperless | ||||
|  | ||||
|  | ||||
| [](https://paperless.readthedocs.org/) [](https://gitter.im/danielquinn/paperless) [](https://travis-ci.org/danielquinn/paperless) [](https://coveralls.io/github/danielquinn/paperless?branch=master) [](https://github.com/danielquinn/paperless/blob/master/THANKS.md) | ||||
|  | ||||
|   | ||||
| @@ -1,7 +1,6 @@ | ||||
| *[English](README.md)*<br/> | ||||
| *[German](README-de.md)* | ||||
| [ [en](README.md) | [de](README-de.md) | el ] | ||||
|  | ||||
| # Paperless | ||||
|  | ||||
|  | ||||
| [](https://paperless.readthedocs.org/) [](https://gitter.im/danielquinn/paperless) [](https://travis-ci.org/danielquinn/paperless) [](https://coveralls.io/github/danielquinn/paperless?branch=master) [](https://github.com/danielquinn/paperless/blob/master/THANKS.md) | ||||
|  | ||||
|   | ||||
| @@ -1,7 +1,6 @@ | ||||
| *[German](README-de.md)*<br/> | ||||
| *[Greek](README-el.md)* | ||||
| [ en | [de](README-de.md) | [el](README-el.md) ] | ||||
|  | ||||
| # Paperless | ||||
|  | ||||
|  | ||||
| [](https://paperless.readthedocs.org/) [](https://gitter.im/danielquinn/paperless) [](https://travis-ci.org/danielquinn/paperless) [](https://coveralls.io/github/danielquinn/paperless?branch=master) [](https://github.com/danielquinn/paperless/blob/master/THANKS.md) | ||||
|  | ||||
|   | ||||
| @@ -17,6 +17,9 @@ services: | ||||
|         volumes: | ||||
|             - data:/usr/src/paperless/data | ||||
|             - media:/usr/src/paperless/media | ||||
| 						# You have to adapt the local path you want the consumption | ||||
|             # directory to mount to by modifying the part before the ':'. | ||||
| 						- ./consume:/consume | ||||
|         env_file: docker-compose.env | ||||
|         # The reason the line is here is so that the webserver that doesn't do | ||||
|         # any text recognition and doesn't have to install unnecessary | ||||
| @@ -36,8 +39,8 @@ services: | ||||
|         volumes: | ||||
|             - data:/usr/src/paperless/data | ||||
|             - media:/usr/src/paperless/media | ||||
|             # You have to adapt the local path you want the consumption | ||||
|             # directory to mount to by modifying the part before the ':'. | ||||
|             # This should be set to the same value as the consume directory | ||||
| 					  # in the webserver service above. | ||||
|             - ./consume:/consume | ||||
|             # Likewise, you can add a local path to mount a directory for | ||||
|             # exporting. This is not strictly needed for paperless to | ||||
|   | ||||
| @@ -1,6 +1,18 @@ | ||||
| Changelog | ||||
| ######### | ||||
|  | ||||
| 2.6.1 | ||||
| ===== | ||||
|  | ||||
| * We now have a logo, complete with a favicon :-) | ||||
| * Removed some problematic tests. | ||||
| * Fix the docker-compose example config to include a shared consume volume so | ||||
|   that using the push API will work for users of the Docker install.  Thanks to | ||||
|   `Colin Frei`_ for fixing this in `#466`_. | ||||
| * `khrise`_ submitted a pull request to include the ``added`` property to the | ||||
|   REST API `#471`. | ||||
|  | ||||
|  | ||||
| 2.6.0 | ||||
| ===== | ||||
|  | ||||
| @@ -595,6 +607,8 @@ bulk of the work on this big change. | ||||
| .. _Ulli: https://github.com/Ulli2k | ||||
| .. _tsia: https://github.com/tsia | ||||
| .. _Sblop: https://github.com/Sblop | ||||
| .. _Colin Frei: https://github.com/colinfrei | ||||
| .. _khrise: https://github.com/khrise | ||||
|  | ||||
| .. _#20: https://github.com/danielquinn/paperless/issues/20 | ||||
| .. _#44: https://github.com/danielquinn/paperless/issues/44 | ||||
| @@ -694,6 +708,8 @@ bulk of the work on this big change. | ||||
| .. _#440: https://github.com/danielquinn/paperless/pull/440 | ||||
| .. _#441: https://github.com/danielquinn/paperless/pull/441 | ||||
| .. _#442: https://github.com/danielquinn/paperless/pull/442 | ||||
| .. _#466: https://github.com/danielquinn/paperless/pull/466 | ||||
| .. _#471: https://github.com/danielquinn/paperless/pull/471 | ||||
|  | ||||
| .. _pipenv: https://docs.pipenv.org/ | ||||
| .. _a new home on Docker Hub: https://hub.docker.com/r/danielquinn/paperless/ | ||||
|   | ||||
| @@ -102,7 +102,7 @@ is similar: | ||||
|     $ cd /path/to/project | ||||
|     $ git pull | ||||
|     $ docker build -t paperless . | ||||
|     $ docker-compose run --rm comsumer migrate | ||||
|     $ docker-compose run --rm consumer migrate | ||||
|     $ docker-compose up -d | ||||
|  | ||||
| If ``git pull`` doesn't report any changes, there is no need to continue with | ||||
|   | ||||
| @@ -12,6 +12,7 @@ should work) that has the following software installed: | ||||
| * `Imagemagick`_ version 6.7.5 or higher | ||||
| * `unpaper`_ | ||||
| * `libpoppler-cpp-dev`_ PDF rendering library | ||||
| * `optipng`_ | ||||
|  | ||||
| .. _Python3: https://python.org/ | ||||
| .. _GNU Privacy Guard: https://gnupg.org | ||||
| @@ -19,6 +20,7 @@ should work) that has the following software installed: | ||||
| .. _Imagemagick: http://imagemagick.org/ | ||||
| .. _unpaper: https://www.flameeyes.eu/projects/unpaper | ||||
| .. _libpoppler-cpp-dev: https://poppler.freedesktop.org/ | ||||
| .. _optipng: http://optipng.sourceforge.net/ | ||||
|  | ||||
| Notably, you should confirm how you access your Python3 installation.  Many | ||||
| Linux distributions will install Python3 in parallel to Python2, using the | ||||
|   | ||||
| @@ -214,5 +214,5 @@ This too is done via the ``manage.py`` script: | ||||
|  | ||||
| That's it.  It'll loop over all of the documents in your database and attempt | ||||
| to match all of your tags to them.  If one matches, it'll be applied.  And | ||||
| don't worry, you can run this as often as you like, it' won't double-tag | ||||
| don't worry, you can run this as often as you like, it won't double-tag | ||||
| a document. | ||||
|   | ||||
| @@ -219,6 +219,11 @@ PAPERLESS_DEBUG="false" | ||||
| #PAPERLESS_FORGIVING_OCR="false" | ||||
|  | ||||
|  | ||||
| # By default Paperless does not OCR a document if the text can be retrieved from | ||||
| # the document directly. Set to true to always OCR documents. | ||||
| #PAPERLESS_OCR_ALWAYS="false" | ||||
|  | ||||
|  | ||||
| ############################################################################### | ||||
| ####                            Interface                                  #### | ||||
| ############################################################################### | ||||
|   | ||||
							
								
								
									
										1086
									
								
								resources/logo/print/eps/Black logo - no background.eps
									
									
									
									
									
										Normal file
									
								
							
							
						
						
							
								
								
									
										1090
									
								
								resources/logo/print/eps/Color logo - no background.eps
									
									
									
									
									
										Normal file
									
								
							
							
						
						
							
								
								
									
										1099
									
								
								resources/logo/print/eps/Color logo with background.eps
									
									
									
									
									
										Normal file
									
								
							
							
						
						
							
								
								
									
										1090
									
								
								resources/logo/print/eps/White logo - no background.eps
									
									
									
									
									
										Normal file
									
								
							
							
						
						
							
								
								
									
										
											BIN
										
									
								
								resources/logo/print/pdf/Black logo - no background.pdf
									
									
									
									
									
										Normal file
									
								
							
							
						
						
							
								
								
									
										
											BIN
										
									
								
								resources/logo/print/pdf/Color logo - no background.pdf
									
									
									
									
									
										Normal file
									
								
							
							
						
						
							
								
								
									
										
											BIN
										
									
								
								resources/logo/print/pdf/Color logo with background.pdf
									
									
									
									
									
										Normal file
									
								
							
							
						
						
							
								
								
									
										
											BIN
										
									
								
								resources/logo/print/pdf/White logo - no background.pdf
									
									
									
									
									
										Normal file
									
								
							
							
						
						
							
								
								
									
										
											BIN
										
									
								
								resources/logo/web/png/Black logo - no background.png
									
									
									
									
									
										Normal file
									
								
							
							
						
						| After Width: | Height: | Size: 91 KiB | 
							
								
								
									
										
											BIN
										
									
								
								resources/logo/web/png/Color logo - no background.png
									
									
									
									
									
										Normal file
									
								
							
							
						
						| After Width: | Height: | Size: 111 KiB | 
							
								
								
									
										
											BIN
										
									
								
								resources/logo/web/png/Color logo with background.png
									
									
									
									
									
										Normal file
									
								
							
							
						
						| After Width: | Height: | Size: 116 KiB | 
							
								
								
									
										
											BIN
										
									
								
								resources/logo/web/png/White logo - no background.png
									
									
									
									
									
										Normal file
									
								
							
							
						
						| After Width: | Height: | Size: 94 KiB | 
							
								
								
									
										8
									
								
								resources/logo/web/svg/Black logo - no background.svg
									
									
									
									
									
										Normal file
									
								
							
							
						
						| After Width: | Height: | Size: 7.4 KiB | 
							
								
								
									
										8
									
								
								resources/logo/web/svg/Color logo - no background.svg
									
									
									
									
									
										Normal file
									
								
							
							
						
						| After Width: | Height: | Size: 7.5 KiB | 
							
								
								
									
										8
									
								
								resources/logo/web/svg/Color logo with background.svg
									
									
									
									
									
										Normal file
									
								
							
							
						
						| After Width: | Height: | Size: 7.5 KiB | 
							
								
								
									
										8
									
								
								resources/logo/web/svg/White logo - no background.svg
									
									
									
									
									
										Normal file
									
								
							
							
						
						| After Width: | Height: | Size: 7.4 KiB | 
							
								
								
									
										82
									
								
								resources/logo/web/svg/square.svg
									
									
									
									
									
										Normal file
									
								
							
							
						
						| @@ -0,0 +1,82 @@ | ||||
| <?xml version="1.0" encoding="UTF-8" standalone="no"?> | ||||
| <svg | ||||
|    xmlns:dc="http://purl.org/dc/elements/1.1/" | ||||
|    xmlns:cc="http://creativecommons.org/ns#" | ||||
|    xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" | ||||
|    xmlns:svg="http://www.w3.org/2000/svg" | ||||
|    xmlns="http://www.w3.org/2000/svg" | ||||
|    xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" | ||||
|    xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" | ||||
|    version="1.1" | ||||
|    width="900" | ||||
|    height="900" | ||||
|    id="svg3923" | ||||
|    sodipodi:docname="square.svg" | ||||
|    inkscape:export-filename="/tmp/test.png" | ||||
|    inkscape:export-xdpi="96" | ||||
|    inkscape:export-ydpi="96" | ||||
|    inkscape:version="0.92.2 2405546, 2018-03-11"> | ||||
|   <metadata | ||||
|      id="metadata3929"> | ||||
|     <rdf:RDF> | ||||
|       <cc:Work | ||||
|          rdf:about=""> | ||||
|         <dc:format>image/svg+xml</dc:format> | ||||
|         <dc:type | ||||
|            rdf:resource="http://purl.org/dc/dcmitype/StillImage" /> | ||||
|         <dc:title></dc:title> | ||||
|       </cc:Work> | ||||
|     </rdf:RDF> | ||||
|   </metadata> | ||||
|   <defs | ||||
|      id="defs3927" /> | ||||
|   <sodipodi:namedview | ||||
|      pagecolor="#ffffff" | ||||
|      bordercolor="#666666" | ||||
|      borderopacity="1" | ||||
|      objecttolerance="10" | ||||
|      gridtolerance="10" | ||||
|      guidetolerance="10" | ||||
|      inkscape:pageopacity="0" | ||||
|      inkscape:pageshadow="2" | ||||
|      inkscape:window-width="3840" | ||||
|      inkscape:window-height="2096" | ||||
|      id="namedview3925" | ||||
|      showgrid="false" | ||||
|      inkscape:zoom="1.1360927" | ||||
|      inkscape:cx="635.07139" | ||||
|      inkscape:cy="606.383" | ||||
|      inkscape:window-x="0" | ||||
|      inkscape:window-y="27" | ||||
|      inkscape:window-maximized="1" | ||||
|      inkscape:current-layer="g3921" /> | ||||
|   <g | ||||
|      transform="matrix(10.638298,0,0,10.638298,106.38298,-206.38301)" | ||||
|      id="g3921"> | ||||
|     <defs | ||||
|        id="SvgjsDefs1018" /> | ||||
|     <g | ||||
|        id="SvgjsG1019" | ||||
|        featureKey="root" | ||||
|        style="fill:#ffffff" /> | ||||
|     <g | ||||
|        id="SvgjsG1020" | ||||
|        featureKey="symbol1" | ||||
|        transform="matrix(0.10341565,0,0,0.10341565,-11.43874,18.048418)" | ||||
|        inkscape:export-filename="/tmp/test.png" | ||||
|        inkscape:export-xdpi="116.02285" | ||||
|        inkscape:export-ydpi="116.02285" | ||||
|        style="fill:#17541f"> | ||||
|       <defs | ||||
|          id="defs3911" /> | ||||
|       <g | ||||
|          id="g3915"> | ||||
|         <path | ||||
|            d="M 231,798 C 227,779 219,741 218,741 49,640 69,465 125,365 c 12,126 235,213 105,367 -1,2 6,26 12,48 26,-44 65,-97 63,-102 C 145,288 645,258 749,16 c 47,234 -24,596 -426,688 -2,1 -73,126 -76,127 0,-2 -30,-1 -26,-11 2,-6 6,-14 10,-22 z M 330,625 C 267,476 452,312 544,271 356,439 324,564 330,625 Z m -104,79 c 51,-59 -9,-160 -45,-193 61,105 57,166 45,193 z" | ||||
|            style="fill:#17541f" | ||||
|            id="path3913" | ||||
|            inkscape:connector-curvature="0" /> | ||||
|       </g> | ||||
|     </g> | ||||
|   </g> | ||||
| </svg> | ||||
| After Width: | Height: | Size: 2.6 KiB | 
| @@ -75,7 +75,7 @@ install_languages() { | ||||
|         pkg="tesseract-ocr-data-$lang" | ||||
|  | ||||
|         # English is installed by default | ||||
|         if [ "$lang" ==  "eng" ]; then | ||||
|         if [[ "$lang" ==  "eng" ]]; then | ||||
|             continue | ||||
|         fi | ||||
|  | ||||
| @@ -95,7 +95,7 @@ if [[ "$1" != "/"* ]]; then | ||||
|     initialize | ||||
|  | ||||
|     # Install additional languages if specified | ||||
|     if [ ! -z "$PAPERLESS_OCR_LANGUAGES"  ]; then | ||||
|     if [[ ! -z "$PAPERLESS_OCR_LANGUAGES"  ]]; then | ||||
|         install_languages "$PAPERLESS_OCR_LANGUAGES" | ||||
|     fi | ||||
|  | ||||
|   | ||||
| @@ -61,6 +61,7 @@ class DocumentSerializer(serializers.ModelSerializer): | ||||
|             "checksum", | ||||
|             "created", | ||||
|             "modified", | ||||
|             "added", | ||||
|             "file_name", | ||||
|             "download_url", | ||||
|             "thumbnail_url", | ||||
|   | ||||
| @@ -3,10 +3,63 @@ | ||||
| {# NOTE: This should probably be extending base.html.  See CSS comment below details. #} | ||||
|  | ||||
|  | ||||
| {% load static %} | ||||
| {% load custom_css from customisation %} | ||||
| {% load custom_js from customisation %} | ||||
|  | ||||
|  | ||||
| {% block extrahead %} | ||||
| 	<link rel="icon" type="image/x-icon" href="{% url 'favicon' %}" /> | ||||
| 	<style> | ||||
| 		#header { | ||||
| 			background-color: #90a9b7; | ||||
| 			line-height: inherit; | ||||
| 			height: auto; | ||||
| 		} | ||||
| 		#branding h1 { | ||||
| 			font-weight: inherit; | ||||
| 			font-size: inherit; | ||||
| 		} | ||||
| 		.button, | ||||
| 		.button:active, | ||||
| 		.button:focus, | ||||
| 		.button:hover, | ||||
| 		a.button, | ||||
| 		.submit-row input, | ||||
| 		input[type="submit"], | ||||
| 		input[type="submit"]:active, | ||||
| 		input[type="submit"]:focus, | ||||
| 		input[type="submit"]:hover, | ||||
| 		input[type="button"], | ||||
| 		input[type="button"]:active, | ||||
| 		input[type="button"]:focus, | ||||
| 		input[type="button"]:hover { | ||||
| 			background-color: #074f57; | ||||
| 		} | ||||
| 		.module h2, | ||||
| 		.module caption, | ||||
| 		.inline-group h2 { | ||||
| 			background-color: #90a9b7; | ||||
| 		} | ||||
| 		div.breadcrumbs { | ||||
| 			background-color: #077187; | ||||
| 		} | ||||
| 		.module h2, | ||||
| 		.module caption, | ||||
| 		.inline-group h2 { | ||||
| 			background-color: #077187; | ||||
| 		} | ||||
| 	</style> | ||||
| {% endblock %} | ||||
|  | ||||
|  | ||||
| {% block branding %} | ||||
| <h1 id="site-name"> | ||||
| 	<a href="{% url 'admin:index' %}"><img src="{% static 'paperless/img/logo-light.png' %}" alt="Paperless" /></a> | ||||
| </h1> | ||||
| {% endblock %} | ||||
|  | ||||
|  | ||||
| {% block blockbots %} | ||||
|  | ||||
| 	{% comment %} | ||||
|   | ||||
| @@ -29,7 +29,7 @@ | ||||
|   } | ||||
|   .result .header { | ||||
|     padding: 5px; | ||||
|     background-color: #79AEC8; | ||||
|     background-color: #90a9b7; | ||||
|     position: relative; | ||||
|   } | ||||
|   .result .header .checkbox { | ||||
|   | ||||
| @@ -148,7 +148,7 @@ class DocumentViewSet(RetrieveModelMixin, | ||||
|     filter_class = DocumentFilterSet | ||||
|     search_fields = ("title", "correspondent__name", "content") | ||||
|     ordering_fields = ( | ||||
|         "id", "title", "correspondent__name", "created", "modified") | ||||
|         "id", "title", "correspondent__name", "created", "modified", "added") | ||||
|  | ||||
|  | ||||
| class LogViewSet(ReadOnlyModelViewSet): | ||||
|   | ||||
| @@ -72,6 +72,7 @@ INSTALLED_APPS = [ | ||||
|     "corsheaders", | ||||
|     "django_extensions", | ||||
|  | ||||
|     "paperless", | ||||
|     "documents.apps.DocumentsConfig", | ||||
|     "reminders.apps.RemindersConfig", | ||||
|     "paperless_tesseract.apps.PaperlessTesseractConfig", | ||||
|   | ||||
							
								
								
									
										
											BIN
										
									
								
								src/paperless/static/paperless/img/favicon.ico
									
									
									
									
									
										Normal file
									
								
							
							
						
						| After Width: | Height: | Size: 108 KiB | 
							
								
								
									
										
											BIN
										
									
								
								src/paperless/static/paperless/img/logo-dark.png
									
									
									
									
									
										Normal file
									
								
							
							
						
						| After Width: | Height: | Size: 6.2 KiB | 
							
								
								
									
										
											BIN
										
									
								
								src/paperless/static/paperless/img/logo-light.png
									
									
									
									
									
										Normal file
									
								
							
							
						
						| After Width: | Height: | Size: 8.6 KiB | 
| @@ -6,6 +6,7 @@ from django.views.decorators.csrf import csrf_exempt | ||||
| from django.views.generic import RedirectView | ||||
| from rest_framework.routers import DefaultRouter | ||||
|  | ||||
| from paperless.views import FaviconView | ||||
| from documents.views import ( | ||||
|     CorrespondentViewSet, | ||||
|     DocumentViewSet, | ||||
| @@ -46,6 +47,9 @@ urlpatterns = [ | ||||
|     # File uploads | ||||
|     url(r"^push$", csrf_exempt(PushView.as_view()), name="push"), | ||||
|  | ||||
|     # Favicon | ||||
|     url(r"^favicon.ico$", FaviconView.as_view(), name="favicon"), | ||||
|  | ||||
|     # The Django admin | ||||
|     url(r"admin/", admin.site.urls), | ||||
|  | ||||
|   | ||||
| @@ -1,3 +1,7 @@ | ||||
| import os | ||||
|  | ||||
| from django.http import HttpResponse | ||||
| from django.views.generic import View | ||||
| from rest_framework.pagination import PageNumberPagination | ||||
|  | ||||
|  | ||||
| @@ -5,3 +9,17 @@ class StandardPagination(PageNumberPagination): | ||||
|     page_size = 25 | ||||
|     page_size_query_param = "page-size" | ||||
|     max_page_size = 100000 | ||||
|  | ||||
|  | ||||
| class FaviconView(View): | ||||
|  | ||||
|     def get(self, request, *args, **kwargs): | ||||
|         favicon = os.path.join( | ||||
|             os.path.dirname(__file__), | ||||
|             "static", | ||||
|             "paperless", | ||||
|             "img", | ||||
|             "favicon.ico" | ||||
|         ) | ||||
|         with open(favicon, "rb") as f: | ||||
|             return HttpResponse(f, content_type="image/x-icon") | ||||
|   | ||||
| Before Width: | Height: | Size: 136 KiB | 
| Before Width: | Height: | Size: 136 KiB | 
| Before Width: | Height: | Size: 135 KiB | 
| Before Width: | Height: | Size: 46 KiB | 
| Before Width: | Height: | Size: 53 KiB | 
| Before Width: | Height: | Size: 136 KiB | 
| Before Width: | Height: | Size: 136 KiB | 
| Before Width: | Height: | Size: 136 KiB | 
| @@ -5,7 +5,7 @@ from unittest import mock | ||||
| from uuid import uuid4 | ||||
|  | ||||
| from dateutil import tz | ||||
| from django.test import TestCase, override_settings | ||||
| from django.test import TestCase | ||||
|  | ||||
| from ..parsers import RasterisedDocumentParser | ||||
| from django.conf import settings | ||||
| @@ -16,46 +16,36 @@ class TestDate(TestCase): | ||||
|     SAMPLE_FILES = os.path.join(os.path.dirname(__file__), "samples") | ||||
|     SCRATCH = "/tmp/paperless-tests-{}".format(str(uuid4())[:8]) | ||||
|  | ||||
|     MOCK_SCRATCH = "paperless_tesseract.parsers.RasterisedDocumentParser.SCRATCH"  # NOQA: E501 | ||||
|  | ||||
|     def setUp(self): | ||||
|         os.makedirs(self.SCRATCH, exist_ok=True) | ||||
|  | ||||
|     def tearDown(self): | ||||
|         shutil.rmtree(self.SCRATCH) | ||||
|  | ||||
|     @mock.patch( | ||||
|         "paperless_tesseract.parsers.RasterisedDocumentParser.SCRATCH", | ||||
|         SCRATCH | ||||
|     ) | ||||
|     @mock.patch(MOCK_SCRATCH, SCRATCH) | ||||
|     def test_date_format_1(self): | ||||
|         input_file = os.path.join(self.SAMPLE_FILES, "") | ||||
|         document = RasterisedDocumentParser(input_file) | ||||
|         document._text = "lorem ipsum 130218 lorem ipsum" | ||||
|         self.assertEqual(document.get_date(), None) | ||||
|  | ||||
|     @mock.patch( | ||||
|         "paperless_tesseract.parsers.RasterisedDocumentParser.SCRATCH", | ||||
|         SCRATCH | ||||
|     ) | ||||
|     @mock.patch(MOCK_SCRATCH, SCRATCH) | ||||
|     def test_date_format_2(self): | ||||
|         input_file = os.path.join(self.SAMPLE_FILES, "") | ||||
|         document = RasterisedDocumentParser(input_file) | ||||
|         document._text = "lorem ipsum 2018 lorem ipsum" | ||||
|         self.assertEqual(document.get_date(), None) | ||||
|  | ||||
|     @mock.patch( | ||||
|         "paperless_tesseract.parsers.RasterisedDocumentParser.SCRATCH", | ||||
|         SCRATCH | ||||
|     ) | ||||
|     @mock.patch(MOCK_SCRATCH, SCRATCH) | ||||
|     def test_date_format_3(self): | ||||
|         input_file = os.path.join(self.SAMPLE_FILES, "") | ||||
|         document = RasterisedDocumentParser(input_file) | ||||
|         document._text = "lorem ipsum 20180213 lorem ipsum" | ||||
|         self.assertEqual(document.get_date(), None) | ||||
|  | ||||
|     @mock.patch( | ||||
|         "paperless_tesseract.parsers.RasterisedDocumentParser.SCRATCH", | ||||
|         SCRATCH | ||||
|     ) | ||||
|     @mock.patch(MOCK_SCRATCH, SCRATCH) | ||||
|     def test_date_format_4(self): | ||||
|         input_file = os.path.join(self.SAMPLE_FILES, "") | ||||
|         document = RasterisedDocumentParser(input_file) | ||||
| @@ -69,10 +59,7 @@ class TestDate(TestCase): | ||||
|             ) | ||||
|         ) | ||||
|  | ||||
|     @mock.patch( | ||||
|         "paperless_tesseract.parsers.RasterisedDocumentParser.SCRATCH", | ||||
|         SCRATCH | ||||
|     ) | ||||
|     @mock.patch(MOCK_SCRATCH, SCRATCH) | ||||
|     def test_date_format_5(self): | ||||
|         input_file = os.path.join(self.SAMPLE_FILES, "") | ||||
|         document = RasterisedDocumentParser(input_file) | ||||
| @@ -89,10 +76,7 @@ class TestDate(TestCase): | ||||
|             ) | ||||
|         ) | ||||
|  | ||||
|     @mock.patch( | ||||
|         "paperless_tesseract.parsers.RasterisedDocumentParser.SCRATCH", | ||||
|         SCRATCH | ||||
|     ) | ||||
|     @mock.patch(MOCK_SCRATCH, SCRATCH) | ||||
|     def test_date_format_6(self): | ||||
|         input_file = os.path.join(self.SAMPLE_FILES, "") | ||||
|         document = RasterisedDocumentParser(input_file) | ||||
| @@ -109,10 +93,7 @@ class TestDate(TestCase): | ||||
|         ) | ||||
|         self.assertEqual(document.get_date(), None) | ||||
|  | ||||
|     @mock.patch( | ||||
|         "paperless_tesseract.parsers.RasterisedDocumentParser.SCRATCH", | ||||
|         SCRATCH | ||||
|     ) | ||||
|     @mock.patch(MOCK_SCRATCH, SCRATCH) | ||||
|     def test_date_format_7(self): | ||||
|         input_file = os.path.join(self.SAMPLE_FILES, "") | ||||
|         document = RasterisedDocumentParser(input_file) | ||||
| @@ -130,10 +111,7 @@ class TestDate(TestCase): | ||||
|             ) | ||||
|         ) | ||||
|  | ||||
|     @mock.patch( | ||||
|         "paperless_tesseract.parsers.RasterisedDocumentParser.SCRATCH", | ||||
|         SCRATCH | ||||
|     ) | ||||
|     @mock.patch(MOCK_SCRATCH, SCRATCH) | ||||
|     def test_date_format_8(self): | ||||
|         input_file = os.path.join(self.SAMPLE_FILES, "") | ||||
|         document = RasterisedDocumentParser(input_file) | ||||
| @@ -157,10 +135,7 @@ class TestDate(TestCase): | ||||
|             ) | ||||
|         ) | ||||
|  | ||||
|     @mock.patch( | ||||
|         "paperless_tesseract.parsers.RasterisedDocumentParser.SCRATCH", | ||||
|         SCRATCH | ||||
|     ) | ||||
|     @mock.patch(MOCK_SCRATCH, SCRATCH) | ||||
|     def test_date_format_9(self): | ||||
|         input_file = os.path.join(self.SAMPLE_FILES, "") | ||||
|         document = RasterisedDocumentParser(input_file) | ||||
| @@ -178,398 +153,11 @@ class TestDate(TestCase): | ||||
|             ) | ||||
|         ) | ||||
|  | ||||
|     @mock.patch( | ||||
|         "paperless_tesseract.parsers.RasterisedDocumentParser.SCRATCH", | ||||
|         SCRATCH | ||||
|     ) | ||||
|     def test_get_text_1_pdf(self): | ||||
|         input_file = os.path.join(self.SAMPLE_FILES, "tests_date_1.pdf") | ||||
|         document = RasterisedDocumentParser(input_file) | ||||
|         document.DATE_ORDER = 'DMY' | ||||
|         document.get_text() | ||||
|         date = document.get_date() | ||||
|         self.assertEqual(document._is_ocred(), True) | ||||
|         self.assertEqual( | ||||
|             date, | ||||
|             datetime.datetime( | ||||
|                 2018, 4, 1, 0, 0, | ||||
|                 tzinfo=tz.gettz(settings.TIME_ZONE) | ||||
|             ) | ||||
|         ) | ||||
|  | ||||
|     @mock.patch( | ||||
|         "paperless_tesseract.parsers.RasterisedDocumentParser.SCRATCH", | ||||
|         SCRATCH | ||||
|     ) | ||||
|     def test_get_text_1_png(self): | ||||
|         input_file = os.path.join(self.SAMPLE_FILES, "tests_date_1.png") | ||||
|         document = RasterisedDocumentParser(input_file) | ||||
|         document.DATE_ORDER = 'DMY' | ||||
|         document.get_text() | ||||
|         self.assertEqual(document._is_ocred(), False) | ||||
|         self.assertEqual( | ||||
|             document.get_date(), | ||||
|             datetime.datetime( | ||||
|                 2018, 4, 1, 0, 0, | ||||
|                 tzinfo=tz.gettz(settings.TIME_ZONE) | ||||
|             ) | ||||
|         ) | ||||
|  | ||||
|     @mock.patch( | ||||
|         "paperless_tesseract.parsers.RasterisedDocumentParser.SCRATCH", | ||||
|         SCRATCH | ||||
|     ) | ||||
|     def test_get_text_2_pdf(self): | ||||
|         input_file = os.path.join(self.SAMPLE_FILES, "tests_date_2.pdf") | ||||
|         document = RasterisedDocumentParser(input_file) | ||||
|         document.DATE_ORDER = 'DMY' | ||||
|         document.get_text() | ||||
|         self.assertEqual(document._is_ocred(), True) | ||||
|         self.assertEqual( | ||||
|             document.get_date(), | ||||
|             datetime.datetime( | ||||
|                 2013, 2, 1, 0, 0, | ||||
|                 tzinfo=tz.gettz(settings.TIME_ZONE) | ||||
|             ) | ||||
|         ) | ||||
|  | ||||
|     @mock.patch( | ||||
|         "paperless_tesseract.parsers.RasterisedDocumentParser.SCRATCH", | ||||
|         SCRATCH | ||||
|     ) | ||||
|     def test_get_text_2_png(self): | ||||
|         input_file = os.path.join(self.SAMPLE_FILES, "tests_date_2.png") | ||||
|         document = RasterisedDocumentParser(input_file) | ||||
|         document.DATE_ORDER = 'DMY' | ||||
|         document.get_text() | ||||
|         self.assertEqual(document._is_ocred(), False) | ||||
|         self.assertEqual( | ||||
|             document.get_date(), | ||||
|             datetime.datetime( | ||||
|                 2013, 2, 1, 0, 0, | ||||
|                 tzinfo=tz.gettz(settings.TIME_ZONE) | ||||
|             ) | ||||
|         ) | ||||
|  | ||||
|     @mock.patch( | ||||
|         "paperless_tesseract.parsers.RasterisedDocumentParser.SCRATCH", | ||||
|         SCRATCH | ||||
|     ) | ||||
|     @override_settings(OCR_LANGUAGE="deu") | ||||
|     def test_get_text_3_pdf(self): | ||||
|         input_file = os.path.join(self.SAMPLE_FILES, "tests_date_3.pdf") | ||||
|         document = RasterisedDocumentParser(input_file) | ||||
|         document.DATE_ORDER = 'DMY' | ||||
|         document.get_text() | ||||
|         self.assertEqual(document._is_ocred(), True) | ||||
|         self.assertEqual( | ||||
|             document.get_date(), | ||||
|             datetime.datetime( | ||||
|                 2018, 10, 5, 0, 0, | ||||
|                 tzinfo=tz.gettz(settings.TIME_ZONE) | ||||
|             ) | ||||
|         ) | ||||
|  | ||||
|     @mock.patch( | ||||
|         "paperless_tesseract.parsers.RasterisedDocumentParser.SCRATCH", | ||||
|         SCRATCH | ||||
|     ) | ||||
|     @override_settings(OCR_LANGUAGE="deu") | ||||
|     def test_get_text_3_png(self): | ||||
|         input_file = os.path.join(self.SAMPLE_FILES, "tests_date_3.png") | ||||
|         document = RasterisedDocumentParser(input_file) | ||||
|         document.DATE_ORDER = 'DMY' | ||||
|         document.get_text() | ||||
|         self.assertEqual(document._is_ocred(), False) | ||||
|         self.assertEqual( | ||||
|             document.get_date(), | ||||
|             datetime.datetime( | ||||
|                 2018, 10, 5, 0, 0, | ||||
|                 tzinfo=tz.gettz(settings.TIME_ZONE) | ||||
|             ) | ||||
|         ) | ||||
|  | ||||
|     @mock.patch( | ||||
|         "paperless_tesseract.parsers.RasterisedDocumentParser.SCRATCH", | ||||
|         SCRATCH | ||||
|     ) | ||||
|     @override_settings(OCR_LANGUAGE="eng") | ||||
|     def test_get_text_4_pdf(self): | ||||
|         input_file = os.path.join(self.SAMPLE_FILES, "tests_date_4.pdf") | ||||
|         document = RasterisedDocumentParser(input_file) | ||||
|         document.DATE_ORDER = 'DMY' | ||||
|         document.get_text() | ||||
|         self.assertEqual(document._is_ocred(), True) | ||||
|         self.assertEqual( | ||||
|             document.get_date(), | ||||
|             datetime.datetime( | ||||
|                 2018, 10, 5, 0, 0, | ||||
|                 tzinfo=tz.gettz(settings.TIME_ZONE) | ||||
|             ) | ||||
|         ) | ||||
|  | ||||
|     @mock.patch( | ||||
|         "paperless_tesseract.parsers.RasterisedDocumentParser.SCRATCH", | ||||
|         SCRATCH | ||||
|     ) | ||||
|     @override_settings(OCR_LANGUAGE="eng") | ||||
|     def test_get_text_4_png(self): | ||||
|         input_file = os.path.join(self.SAMPLE_FILES, "tests_date_4.png") | ||||
|         document = RasterisedDocumentParser(input_file) | ||||
|         document.DATE_ORDER = 'DMY' | ||||
|         document.get_text() | ||||
|         self.assertEqual(document._is_ocred(), False) | ||||
|         self.assertEqual( | ||||
|             document.get_date(), | ||||
|             datetime.datetime( | ||||
|                 2018, 10, 5, 0, 0, | ||||
|                 tzinfo=tz.gettz(settings.TIME_ZONE) | ||||
|             ) | ||||
|         ) | ||||
|  | ||||
|     @mock.patch( | ||||
|         "paperless_tesseract.parsers.RasterisedDocumentParser.SCRATCH", | ||||
|         SCRATCH | ||||
|     ) | ||||
|     def test_get_text_5_pdf(self): | ||||
|         input_file = os.path.join(self.SAMPLE_FILES, "tests_date_5.pdf") | ||||
|         document = RasterisedDocumentParser(input_file) | ||||
|         document.DATE_ORDER = 'DMY' | ||||
|         document.get_text() | ||||
|         self.assertEqual(document._is_ocred(), True) | ||||
|         self.assertEqual( | ||||
|             document.get_date(), | ||||
|             datetime.datetime( | ||||
|                 2018, 12, 17, 0, 0, | ||||
|                 tzinfo=tz.gettz(settings.TIME_ZONE) | ||||
|             ) | ||||
|         ) | ||||
|  | ||||
|     @mock.patch( | ||||
|         "paperless_tesseract.parsers.RasterisedDocumentParser.SCRATCH", | ||||
|         SCRATCH | ||||
|     ) | ||||
|     def test_get_text_5_png(self): | ||||
|         input_file = os.path.join(self.SAMPLE_FILES, "tests_date_5.png") | ||||
|         document = RasterisedDocumentParser(input_file) | ||||
|         document.DATE_ORDER = 'DMY' | ||||
|         document.get_text() | ||||
|         self.assertEqual(document._is_ocred(), False) | ||||
|         self.assertEqual( | ||||
|             document.get_date(), | ||||
|             datetime.datetime( | ||||
|                 2018, 12, 17, 0, 0, | ||||
|                 tzinfo=tz.gettz(settings.TIME_ZONE) | ||||
|             ) | ||||
|         ) | ||||
|  | ||||
|     @mock.patch( | ||||
|         "paperless_tesseract.parsers.RasterisedDocumentParser.SCRATCH", | ||||
|         SCRATCH | ||||
|     ) | ||||
|     def test_get_text_6_pdf_us(self): | ||||
|         input_file = os.path.join(self.SAMPLE_FILES, "tests_date_6.pdf") | ||||
|         document = RasterisedDocumentParser(input_file) | ||||
|         document.get_text() | ||||
|         document.DATE_ORDER = "MDY" | ||||
|         self.assertEqual(document._is_ocred(), True) | ||||
|         self.assertEqual( | ||||
|             document.get_date(), | ||||
|             datetime.datetime( | ||||
|                 2018, 12, 17, 0, 0, | ||||
|                 tzinfo=tz.gettz(settings.TIME_ZONE) | ||||
|             ) | ||||
|         ) | ||||
|  | ||||
|     @mock.patch( | ||||
|         "paperless_tesseract.parsers.RasterisedDocumentParser.SCRATCH", | ||||
|         SCRATCH | ||||
|     ) | ||||
|     def test_get_text_6_png_us(self): | ||||
|         input_file = os.path.join(self.SAMPLE_FILES, "tests_date_6.png") | ||||
|         document = RasterisedDocumentParser(input_file) | ||||
|         document.get_text() | ||||
|         document.DATE_ORDER = "MDY" | ||||
|         self.assertEqual(document._is_ocred(), False) | ||||
|         self.assertEqual( | ||||
|             document.get_date(), | ||||
|             datetime.datetime( | ||||
|                 2018, 12, 17, 0, 0, | ||||
|                 tzinfo=tz.gettz(settings.TIME_ZONE) | ||||
|             ) | ||||
|         ) | ||||
|  | ||||
|     @mock.patch( | ||||
|         "paperless_tesseract.parsers.RasterisedDocumentParser.SCRATCH", | ||||
|         SCRATCH | ||||
|     ) | ||||
|     def test_get_text_6_pdf_eu(self): | ||||
|         input_file = os.path.join(self.SAMPLE_FILES, "tests_date_6.pdf") | ||||
|         document = RasterisedDocumentParser(input_file) | ||||
|         document.DATE_ORDER = 'DMY' | ||||
|         document.get_text() | ||||
|         self.assertEqual(document._is_ocred(), True) | ||||
|         self.assertEqual(document.get_date(), None) | ||||
|  | ||||
|     @mock.patch( | ||||
|         "paperless_tesseract.parsers.RasterisedDocumentParser.SCRATCH", | ||||
|         SCRATCH | ||||
|     ) | ||||
|     def test_get_text_6_png_eu(self): | ||||
|         input_file = os.path.join(self.SAMPLE_FILES, "tests_date_6.png") | ||||
|         document = RasterisedDocumentParser(input_file) | ||||
|         document.DATE_ORDER = 'DMY' | ||||
|         document.get_text() | ||||
|         self.assertEqual(document._is_ocred(), False) | ||||
|         self.assertEqual(document.get_date(), None) | ||||
|  | ||||
|     @mock.patch( | ||||
|         "paperless_tesseract.parsers.RasterisedDocumentParser.SCRATCH", | ||||
|         SCRATCH | ||||
|     ) | ||||
|     def test_get_text_7_pdf(self): | ||||
|         input_file = os.path.join(self.SAMPLE_FILES, "tests_date_7.pdf") | ||||
|         document = RasterisedDocumentParser(input_file) | ||||
|         document.DATE_ORDER = 'DMY' | ||||
|         document.get_text() | ||||
|         self.assertEqual(document._is_ocred(), True) | ||||
|         self.assertEqual( | ||||
|             document.get_date(), | ||||
|             datetime.datetime( | ||||
|                 2018, 4, 1, 0, 0, | ||||
|                 tzinfo=tz.gettz(settings.TIME_ZONE) | ||||
|             ) | ||||
|         ) | ||||
|  | ||||
|     @mock.patch( | ||||
|         "paperless_tesseract.parsers.RasterisedDocumentParser.SCRATCH", | ||||
|         SCRATCH | ||||
|     ) | ||||
|     def test_get_text_8_pdf(self): | ||||
|         input_file = os.path.join(self.SAMPLE_FILES, "tests_date_8.pdf") | ||||
|         document = RasterisedDocumentParser(input_file) | ||||
|         document.DATE_ORDER = 'DMY' | ||||
|         document.get_text() | ||||
|         self.assertEqual(document._is_ocred(), True) | ||||
|         self.assertEqual( | ||||
|             document.get_date(), | ||||
|             datetime.datetime( | ||||
|                 2017, 12, 31, 0, 0, | ||||
|                 tzinfo=tz.gettz(settings.TIME_ZONE) | ||||
|             ) | ||||
|         ) | ||||
|  | ||||
|     @mock.patch( | ||||
|         "paperless_tesseract.parsers.RasterisedDocumentParser.SCRATCH", | ||||
|         SCRATCH | ||||
|     ) | ||||
|     def test_get_text_9_pdf(self): | ||||
|         input_file = os.path.join(self.SAMPLE_FILES, "tests_date_9.pdf") | ||||
|         document = RasterisedDocumentParser(input_file) | ||||
|         document.DATE_ORDER = 'DMY' | ||||
|         document.get_text() | ||||
|         self.assertEqual(document._is_ocred(), True) | ||||
|         self.assertEqual( | ||||
|             document.get_date(), | ||||
|             datetime.datetime( | ||||
|                 2017, 12, 31, 0, 0, | ||||
|                 tzinfo=tz.gettz(settings.TIME_ZONE) | ||||
|             ) | ||||
|         ) | ||||
|  | ||||
|     @mock.patch( | ||||
|         "paperless_tesseract.parsers.RasterisedDocumentParser.SCRATCH", | ||||
|         SCRATCH | ||||
|     ) | ||||
|     def test_filename_date_1_pdf(self): | ||||
|         input_file = os.path.join( | ||||
|             self.SAMPLE_FILES, | ||||
|             "tests_date_in_filename_2018-03-20_1.pdf" | ||||
|         ) | ||||
|         document = RasterisedDocumentParser(input_file) | ||||
|         document.FILENAME_DATE_ORDER = 'YMD' | ||||
|         document.get_text() | ||||
|         date = document.get_date() | ||||
|         self.assertEqual(document._is_ocred(), True) | ||||
|         self.assertEqual( | ||||
|             date, | ||||
|             datetime.datetime( | ||||
|                 2018, 3, 20, 0, 0, | ||||
|                 tzinfo=tz.gettz(settings.TIME_ZONE) | ||||
|             ) | ||||
|         ) | ||||
|  | ||||
|     @mock.patch( | ||||
|         "paperless_tesseract.parsers.RasterisedDocumentParser.SCRATCH", | ||||
|         SCRATCH | ||||
|     ) | ||||
|     def test_filename_date_1_png(self): | ||||
|         input_file = os.path.join( | ||||
|             self.SAMPLE_FILES, | ||||
|             "tests_date_in_filename_2018-03-20_1.png" | ||||
|         ) | ||||
|         document = RasterisedDocumentParser(input_file) | ||||
|         document.FILENAME_DATE_ORDER = 'YMD' | ||||
|         date = document.get_date() | ||||
|         self.assertEqual(document._is_ocred(), False) | ||||
|         self.assertEqual( | ||||
|             date, | ||||
|             datetime.datetime( | ||||
|                 2018, 3, 20, 0, 0, | ||||
|                 tzinfo=tz.gettz(settings.TIME_ZONE) | ||||
|             ) | ||||
|         ) | ||||
|  | ||||
|     @mock.patch( | ||||
|         "paperless_tesseract.parsers.RasterisedDocumentParser.SCRATCH", | ||||
|         SCRATCH | ||||
|     ) | ||||
|     def test_filename_date_2_pdf(self): | ||||
|         input_file = os.path.join( | ||||
|             self.SAMPLE_FILES, | ||||
|             "2013-12-11_tests_date_in_filename_2.pdf" | ||||
|         ) | ||||
|         document = RasterisedDocumentParser(input_file) | ||||
|         document.FILENAME_DATE_ORDER = 'YMD' | ||||
|         date = document.get_date() | ||||
|         self.assertEqual(document._is_ocred(), True) | ||||
|         self.assertEqual( | ||||
|             date, | ||||
|             datetime.datetime( | ||||
|                 2013, 12, 11, 0, 0, | ||||
|                 tzinfo=tz.gettz(settings.TIME_ZONE) | ||||
|             ) | ||||
|         ) | ||||
|  | ||||
|     @mock.patch( | ||||
|         "paperless_tesseract.parsers.RasterisedDocumentParser.SCRATCH", | ||||
|         SCRATCH | ||||
|     ) | ||||
|     def test_filename_date_2_png(self): | ||||
|         input_file = os.path.join( | ||||
|             self.SAMPLE_FILES, | ||||
|             "2013-12-11_tests_date_in_filename_2.png" | ||||
|         ) | ||||
|         document = RasterisedDocumentParser(input_file) | ||||
|         document.FILENAME_DATE_ORDER = 'YMD' | ||||
|         date = document.get_date() | ||||
|         self.assertEqual(document._is_ocred(), False) | ||||
|         self.assertEqual( | ||||
|             date, | ||||
|             datetime.datetime( | ||||
|                 2013, 12, 11, 0, 0, | ||||
|                 tzinfo=tz.gettz(settings.TIME_ZONE) | ||||
|             ) | ||||
|         ) | ||||
|  | ||||
|     @mock.patch( | ||||
|         "paperless_tesseract.parsers.RasterisedDocumentParser.get_text", | ||||
|         return_value="01-07-0590 00:00:00" | ||||
|     ) | ||||
|     @mock.patch( | ||||
|         "paperless_tesseract.parsers.RasterisedDocumentParser.SCRATCH", | ||||
|         SCRATCH | ||||
|     ) | ||||
|     @mock.patch(MOCK_SCRATCH, SCRATCH) | ||||
|     def test_crazy_date_past(self, *args): | ||||
|         document = RasterisedDocumentParser("/dev/null") | ||||
|         document.get_text() | ||||
| @@ -579,10 +167,7 @@ class TestDate(TestCase): | ||||
|         "paperless_tesseract.parsers.RasterisedDocumentParser.get_text", | ||||
|         return_value="01-07-2350 00:00:00" | ||||
|     ) | ||||
|     @mock.patch( | ||||
|         "paperless_tesseract.parsers.RasterisedDocumentParser.SCRATCH", | ||||
|         SCRATCH | ||||
|     ) | ||||
|     @mock.patch(MOCK_SCRATCH, SCRATCH) | ||||
|     def test_crazy_date_future(self, *args): | ||||
|         document = RasterisedDocumentParser("/dev/null") | ||||
|         document.get_text() | ||||
| @@ -592,10 +177,7 @@ class TestDate(TestCase): | ||||
|         "paperless_tesseract.parsers.RasterisedDocumentParser.get_text", | ||||
|         return_value="01-07-0590 00:00:00" | ||||
|     ) | ||||
|     @mock.patch( | ||||
|         "paperless_tesseract.parsers.RasterisedDocumentParser.SCRATCH", | ||||
|         SCRATCH | ||||
|     ) | ||||
|     @mock.patch(MOCK_SCRATCH, SCRATCH) | ||||
|     def test_crazy_date_past(self, *args): | ||||
|         document = RasterisedDocumentParser("/dev/null") | ||||
|         document.get_text() | ||||
|   | ||||
 Jonas Winkler
					Jonas Winkler