From d962a908cd90351c767cd273bf375b460ed65301 Mon Sep 17 00:00:00 2001 From: Orzu Ionut Date: Thu, 10 Jun 2021 16:57:53 +0300 Subject: [PATCH] Add demo for CLI. Various fixes and improvements. --- app/Console/Commands/RunSearchDisplace.php | 18 ++-- app/Http/Controllers/FileController.php | 9 ++ .../Ingest/HandleReceivedDocument.php | 2 +- app/SearchDisplace/Ingest/SendDocument.php | 51 +++++++---- .../SearchAndDisplaceFromFiles.php | 34 ++++---- app/SearchDisplace/Searchers/Searcher.php | 6 +- demo-cli/README.md | 36 ++++++++ demo-cli/demo_document.pdf | Bin 0 -> 64805 bytes demo-cli/demo_searcher.json | 31 +++++++ public/js/app.js | 82 +++++++++++++++--- resources/js/components/Home/Home.ts | 31 +++++-- 11 files changed, 237 insertions(+), 63 deletions(-) create mode 100644 demo-cli/README.md create mode 100644 demo-cli/demo_document.pdf create mode 100644 demo-cli/demo_searcher.json diff --git a/app/Console/Commands/RunSearchDisplace.php b/app/Console/Commands/RunSearchDisplace.php index 8b0ca22..760cabd 100644 --- a/app/Console/Commands/RunSearchDisplace.php +++ b/app/Console/Commands/RunSearchDisplace.php @@ -48,9 +48,9 @@ class RunSearchDisplace extends Command $resultedDocumentPath = $pathDetails['dirname'] . '/' . $pathDetails['filename'] . '-displaced.md'; - $this->storeSearchers($id, $searchers, $resultedDocumentPath); - try { + $this->storeSearchers($id, $searchers, $resultedDocumentPath); + $sendToIngest = new SendDocument(); $sendToIngest->execute($id, [ @@ -89,14 +89,22 @@ class RunSearchDisplace extends Command protected function getSearchersFromList($searchers) { + $storage = Storage::disk('local'); + $list = []; foreach ($searchers as $searcher) { $result = explode(':', $searcher); + $searcherPath = 'searchers/' . $result[0] . '.json'; + + if ( ! $storage->exists($searcherPath)) { + throw new \Exception('Searcher does not exist'); + } + $list[] = [ - 'key' => $result[0], - 'replace_with' => $result[1], + 'content' => json_decode($storage->get($searcherPath), true), + 'replace_with' => count($result) > 1 ? $result[1] : '', ]; } @@ -119,7 +127,7 @@ class RunSearchDisplace extends Command $contents = file_get_contents($path); if ( ! $contents) { - throw new \Exception('Something went wrong when tried reading from file.'); + throw new \Exception('There is no data in the searcher JSON file.'); } return [ diff --git a/app/Http/Controllers/FileController.php b/app/Http/Controllers/FileController.php index 9421c0d..75c9964 100644 --- a/app/Http/Controllers/FileController.php +++ b/app/Http/Controllers/FileController.php @@ -18,6 +18,15 @@ class FileController extends Controller */ public function create(): JsonResponse { + request()->validate([ + 'file' => [ + 'required', + 'file', + 'max:10000', + 'mimes:doc,dot,docx,dotx,docm,dotm,odt,rtf,pdf,txt', + ], + ]); + try { /** @var UploadedFile $file */ $file = request()->file('file'); diff --git a/app/SearchDisplace/Ingest/HandleReceivedDocument.php b/app/SearchDisplace/Ingest/HandleReceivedDocument.php index 543bab8..ec2bb08 100644 --- a/app/SearchDisplace/Ingest/HandleReceivedDocument.php +++ b/app/SearchDisplace/Ingest/HandleReceivedDocument.php @@ -34,7 +34,7 @@ class HandleReceivedDocument IngestDocumentReceived::dispatch($this->id); } catch (\Exception $exception) { - \Illuminate\Support\Facades\Log::info('exception. :' . $exception->getMessage()); + \Illuminate\Support\Facades\Log::info('Exception: ' . $exception->getTraceAsString()); } } } diff --git a/app/SearchDisplace/Ingest/SendDocument.php b/app/SearchDisplace/Ingest/SendDocument.php index 72a7c00..d36a4eb 100644 --- a/app/SearchDisplace/Ingest/SendDocument.php +++ b/app/SearchDisplace/Ingest/SendDocument.php @@ -3,6 +3,7 @@ namespace App\SearchDisplace\Ingest; use GuzzleHttp\Client; +use GuzzleHttp\Exception\ClientException; class SendDocument { @@ -32,30 +33,46 @@ class SendDocument } } + /** + * Send request to Ingest. + * + * @param $id + * @param $document + * @return mixed + * @throws \GuzzleHttp\Exception\GuzzleException + */ public function sendRequest($id, $document) { $client = new Client(); - $response = $client->request('post', $this->url, [ - 'headers' => [ - 'Accept' => 'application/json', - ], + try { + $response = $client->request('post', $this->url, [ + 'headers' => [ + 'Accept' => 'application/json', + ], + + 'multipart' => [ + [ + 'name' => 'id', + 'contents' => $id, + ], - 'multipart' => [ - [ - 'name' => 'id', - 'contents' => $id, + [ + 'name' => 'document', + 'contents' => fopen($document['path'], 'r'), + 'filename' => $document['name'], + 'Content-type' => $document['type'], + ] ], + ]); - [ - 'name' => 'document', - 'contents' => fopen($document['path'], 'r'), - 'filename' => $document['name'], - 'Content-type' => $document['type'], - ] - ], - ]); + return json_decode($response->getBody()->getContents(), true); + } catch (ClientException $clientException) { + $error = json_decode($clientException->getResponse()->getBody()->getContents(), true); - return json_decode($response->getBody()->getContents(), true); + throw new \Exception($error['message']); + } catch (\Exception $exception) { + throw $exception; + } } } diff --git a/app/SearchDisplace/SearchAndDisplaceFromFiles.php b/app/SearchDisplace/SearchAndDisplaceFromFiles.php index cb52eeb..382f966 100644 --- a/app/SearchDisplace/SearchAndDisplaceFromFiles.php +++ b/app/SearchDisplace/SearchAndDisplaceFromFiles.php @@ -23,35 +23,35 @@ class SearchAndDisplaceFromFiles public function execute() { - if ( ! $this->storage->exists($this->documentFilePath) || - ! $this->storage->exists($this->infoFilePath) - ) { + if ( ! $this->storage->exists($this->documentFilePath) || ! $this->storage->exists($this->infoFilePath)) { // Handle this case, must report result to user. return; } - $documentContent = $this->storage->get($this->documentFilePath); - $searchersContent = json_decode($this->storage->get($this->infoFilePath), true); + try { + $documentContent = $this->storage->get($this->documentFilePath); + $searchersContent = json_decode($this->storage->get($this->infoFilePath), true); - $documentPath = $searchersContent['document_path']; - $searchers = $searchersContent['searchers']; + $documentPath = $searchersContent['document_path']; + $searchers = $searchersContent['searchers']; - $this->storage->put($this->infoFilePath, json_encode($searchers[0]['content'])); + $this->storage->put($this->infoFilePath, json_encode($searchers[0]['content'])); - $searchAndDisplace = new SearchAndDisplace($documentContent, [ - 'searchers' => [ - [ - 'key' => $this->id, - 'replace_with' => $searchers[0]['replace_with'], - ] - ], - ]); + $searchAndDisplace = new SearchAndDisplace($documentContent, [ + 'searchers' => [ + [ + 'key' => $this->id, + 'replace_with' => $searchers[0]['replace_with'], + ] + ], + ]); - try { $result = $searchAndDisplace->execute(); file_put_contents($documentPath, $result['content']); } catch (\Exception $exception) { + \Illuminate\Support\Facades\Log::info('EXCEPTION: ' . $exception->getMessage()); + return; } finally { $this->storage->delete($this->documentFilePath); diff --git a/app/SearchDisplace/Searchers/Searcher.php b/app/SearchDisplace/Searchers/Searcher.php index 2b56b80..9df5a49 100644 --- a/app/SearchDisplace/Searchers/Searcher.php +++ b/app/SearchDisplace/Searchers/Searcher.php @@ -99,6 +99,10 @@ class Searcher return $this->handleExpression($searcher['expression'], $content, $mustMatchStartAndEnd); } + if (array_key_exists('id', $searcher) && $this->ducklingMapper->has($searcher['id'])) { + return $this->applyDucklingSearcher($content, $searcher['id']); + } + throw new \Exception('Invalid searcher.'); } @@ -120,7 +124,7 @@ class Searcher ] ]; - foreach ($searchers as $row) { + foreach ($searchers as $index => $row) { $newSerialSearchersResults = []; foreach ($serialSearchersResults as $serialSearcherItem) { diff --git a/demo-cli/README.md b/demo-cli/README.md new file mode 100644 index 0000000..7de20a5 --- /dev/null +++ b/demo-cli/README.md @@ -0,0 +1,36 @@ +# Running S&D via CLI + +### Command +`php artisan sd:run {path} {searchers*}` + +The command accepts two arguments: +- path: The path to the document file on which the Search&Displace will run +- searchers: This argument can be one of the following two types: + - file searchers: the argument must only have one group in the format 'path:replace_with', where path is the path to a **valid JSON** file + - inline searchers: the argument can have multiple groups of inline searchers in the format 'key: replace_with'. + The 'key' represents a valid searcher found in the 'storage/app/searchers' directory, without the '.json' extension. + +The 'replace_with' value is optional, not using it will remove the found text strings. + +The resulted Markdown document will be created in the same directory as the input document file. + +### Examples +Note! These examples work when running the command from the root app directory, otherwise you have to +input the correct paths in the command, including for the 'artisan' file. + +- Using valid JSON file searcher and removing all strings found +`php artisan sd:run ./demo-cli/demo_document.pdf ./demo-cli/demo_searcher.json` + +- Using valid JSON file searcher and replacing all strings found with the string 'EMAIL' + `php artisan sd:run ./demo-cli/demo_document.pdf ./demo-cli/demo_searcher.json:EMAIL` + +- Using valid searcher key (which exists in the directory 'storage/app/searchers') and removing all strings found + `php artisan sd:run ./demo-cli/demo_document.pdf demo_searcher:EMAIL` + +- Using valid searcher key (which exists in the directory 'storage/app/searchers') and replacing all strings found with the string 'EMAIL' + `php artisan sd:run ./demo-cli/demo_document.pdf demo_searcher:EMAIL` + + + + + diff --git a/demo-cli/demo_document.pdf b/demo-cli/demo_document.pdf new file mode 100644 index 0000000000000000000000000000000000000000..e6ac65efc49771301b9b7723ffcc7b876af29269 GIT binary patch literal 64805 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 literal 0 HcmV?d00001 diff --git a/demo-cli/demo_searcher.json b/demo-cli/demo_searcher.json new file mode 100644 index 0000000..acf6d78 --- /dev/null +++ b/demo-cli/demo_searcher.json @@ -0,0 +1,31 @@ +{ + "id": "Demo Searcher", + "name": "Emails containing john", + "description": "Finds email addresses and then filters out those which don't contain the string 'john'.", + "rows": [ + [ + { + "name": "Email", + "id": "email", + "description": null, + "type": "duckling" + } + ], + + [ + { + "id": "e97aa284061b58311423d4b0cccf596a_Contains john", + "name": "Contains john", + "description": null, + "rows": [ + [ + { + "expression": ".*john.*" + } + ] + ], + "type": "custom" + } + ] + ] +} diff --git a/public/js/app.js b/public/js/app.js index 8808c13..a46b078 100644 --- a/public/js/app.js +++ b/public/js/app.js @@ -3152,6 +3152,35 @@ AppHeader = (0,tslib__WEBPACK_IMPORTED_MODULE_1__.__decorate)([vue_class_compone /***/ }), +/***/ "./resources/js/SearchDisplace/helpers.ts": +/*!************************************************!*\ + !*** ./resources/js/SearchDisplace/helpers.ts ***! + \************************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export */ __webpack_require__.d(__webpack_exports__, { +/* harmony export */ "isServerError": () => (/* binding */ isServerError), +/* harmony export */ "getServerErrorMessage": () => (/* binding */ getServerErrorMessage) +/* harmony export */ }); +function _typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); } + +function isServerError(e) { + return e && _typeof(e) === 'object' && e.hasOwnProperty('response') && e.response && e.response.hasOwnProperty('data') && e.response.data; +} +function getServerErrorMessage(e) { + var error = e.response.data; + + if (error.hasOwnProperty('message')) { + return error.message; + } + + return ''; +} + +/***/ }), + /***/ "./resources/js/app.ts": /*!*****************************!*\ !*** ./resources/js/app.ts ***! @@ -3353,8 +3382,9 @@ __webpack_require__.r(__webpack_exports__); /* harmony export */ }); /* harmony import */ var _babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @babel/runtime/regenerator */ "./node_modules/@babel/runtime/regenerator/index.js"); /* harmony import */ var _babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_0__); -/* harmony import */ var tslib__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! tslib */ "./node_modules/tslib/tslib.es6.js"); +/* harmony import */ var tslib__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! tslib */ "./node_modules/tslib/tslib.es6.js"); /* harmony import */ var vue_property_decorator__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! vue-property-decorator */ "./node_modules/vue-property-decorator/lib/vue-property-decorator.js"); +/* harmony import */ var _SearchDisplace_helpers__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @/SearchDisplace/helpers */ "./resources/js/SearchDisplace/helpers.ts"); function _typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); } @@ -3386,6 +3416,7 @@ function _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.g + var Home = /*#__PURE__*/function (_Vue) { _inherits(Home, _Vue); @@ -3450,7 +3481,7 @@ var Home = /*#__PURE__*/function (_Vue) { key: "uploadNewFile", value: function () { var _uploadNewFile = _asyncToGenerator( /*#__PURE__*/_babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_0___default().mark(function _callee2(file) { - var response; + var response, errors; return _babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_0___default().wrap(function _callee2$(_context2) { while (1) { switch (_context2.prev = _context2.next) { @@ -3471,23 +3502,48 @@ var Home = /*#__PURE__*/function (_Vue) { response = _context2.sent; this.fileUploaded = true; this.uploadResult = response; - _context2.next = 17; + _context2.next = 25; break; case 11: _context2.prev = 11; _context2.t0 = _context2["catch"](3); - console.log('Error uploading file: ', _context2.t0); - this.$toast.add({ - severity: 'error', - summary: 'Error!', - detail: 'There was an error uploading your file. Please try again later', - life: 3000 - }); this.uploading = false; this.fileUploaded = false; - case 17: + if (!(0,_SearchDisplace_helpers__WEBPACK_IMPORTED_MODULE_2__.isServerError)(_context2.t0)) { + _context2.next = 24; + break; + } + + if (!_context2.t0.response.data.hasOwnProperty('errors')) { + _context2.next = 21; + break; + } + + errors = _context2.t0.response.data.errors; + + if (!errors.hasOwnProperty('file')) { + _context2.next = 21; + break; + } + + this.error = errors.file[0]; + return _context2.abrupt("return"); + + case 21: + if (!_context2.t0.response.data.hasOwnProperty('message')) { + _context2.next = 24; + break; + } + + this.error = _context2.t0.response.data.message; + return _context2.abrupt("return"); + + case 24: + this.error = 'There was an error uploading your file. Please try again later.'; + + case 25: case "end": return _context2.stop(); } @@ -3511,11 +3567,11 @@ var Home = /*#__PURE__*/function (_Vue) { return Home; }(vue_property_decorator__WEBPACK_IMPORTED_MODULE_1__.Vue); -(0,tslib__WEBPACK_IMPORTED_MODULE_2__.__decorate)([(0,vue_property_decorator__WEBPACK_IMPORTED_MODULE_1__.Prop)({ +(0,tslib__WEBPACK_IMPORTED_MODULE_3__.__decorate)([(0,vue_property_decorator__WEBPACK_IMPORTED_MODULE_1__.Prop)({ default: [] })], Home.prototype, "searchers", void 0); -Home = (0,tslib__WEBPACK_IMPORTED_MODULE_2__.__decorate)([vue_property_decorator__WEBPACK_IMPORTED_MODULE_1__.Component], Home); +Home = (0,tslib__WEBPACK_IMPORTED_MODULE_3__.__decorate)([vue_property_decorator__WEBPACK_IMPORTED_MODULE_1__.Component], Home); /* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (Home); /***/ }), diff --git a/resources/js/components/Home/Home.ts b/resources/js/components/Home/Home.ts index ac26146..4084b40 100644 --- a/resources/js/components/Home/Home.ts +++ b/resources/js/components/Home/Home.ts @@ -1,5 +1,6 @@ import {Vue, Component, Prop} from 'vue-property-decorator'; import FileUploadResponse from '@/interfaces/responses/FileUploadResponse'; +import {isServerError} from "@/SearchDisplace/helpers"; @Component export default class Home extends Vue { @@ -41,17 +42,29 @@ export default class Home extends Vue { this.fileUploaded = true; this.uploadResult = response; - } catch (err) { - console.log('Error uploading file: ', err); - this.$toast.add({ - severity: 'error', - summary: 'Error!', - detail: 'There was an error uploading your file. Please try again later', - life: 3000 - }); - + } catch (e) { this.uploading = false; this.fileUploaded = false; + + if (isServerError(e)) { + if (e.response.data.hasOwnProperty('errors')) { + const errors = e.response.data.errors; + + if (errors.hasOwnProperty('file')) { + this.error = errors.file[0]; + + return; + } + } + + if (e.response.data.hasOwnProperty('message')) { + this.error = e.response.data.message; + + return; + } + } + + this.error = 'There was an error uploading your file. Please try again later.'; } }